History starts at first public release. The history order has been
reversed so that new features are at the top.

This history is "historical".  See "history.txt" for more recent entries.

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.
31-Dec-2002
	- Philip Wyett did the following:
	    - Changed linux.mak to use 03 rather than 02 optimization
	      flag. The 03 settings is supported by GCC 2.95.x and above,
	      which we generally expect developers to be using.
	    - Removed -finline-functions flag as 03 setting automatically
	      turns it on.
	    - Removed -finline-functions from debug build as we don't
	      really want such an optmization in debug builds and
	      possibly causing problems.
	- Eric Sunshine made the following configuration and makefile changes:
	    - chkxfree.sh now publishes the additonal makefile variables
	      X11.AVAILABLE, X_CFLAGS, X_LIBS, X_PRE_LIBS, and X_EXTRA_LIBS.
	    - chkogl.sh now looks for the OpenGL headers and libraries inside
	      the X11 directory tree if the OpenGL resources were not found
	      elsewhere.  This logic was suggested by Rudolf Potucek
	      <potucek@ucalgary.ca>.
30-Dec-2002
	- Matthias Braun did the following:
	    - Improved DecRef() function. The old function did first
	      decrement the refcount and delete the object then. This
	      resulted in problems when an Inc/DecRef happened in the
	      destructor of the object (resulting in a 2nd delete). Now
	      we check the refcount first and decrement after the check.
	      So that Inc/Decreffing in the destructor should be safe now.
	    - Fixed leak at texture loading.
	    - Fixed wrong memset in csinput.cpp reported by Groton.
	- Keith Fulton did the following:
	    - Added function to csString to convert string to lowercase,
	      strlwr().
	    - Fixed missing prototype warning for linux (csString).
	- Eric Sunshine added "-Xlinker --export-all-symbols" to DFLAGS.debug
	  in win32gcc.mak, as suggested by Paul Garceau <pgarceau@attbi.com>.
	  Hopefully, this change will allow DLLs to be once again debugged
	  sucessfully with Mingw's gdb.
	- Eric Sunshine removed obsolete DO_SOUND makefile and header
	  variables.
28-Dec-2002
	- Andreas Busch did the following:
	    - Fixed typo "AVAILABLE" in python plugin.
	    - Removed duplicate isound/source.h in walktest.
	- Eric Sunshine changed chktools.sh so that it records the path of
	  makedep in config.mak, if found.  This is consistent with its
	  treatment of other detected tools.  cs.mak now respects this setting.
27-Dec-2002
	- Daniel Duhprey fixed a problem with the ./ path ptr
	  when tbtut is used outside the CS dir.
26-Dec-2002
	- Andreas Busch fixed a typo in netmtst.cpp.
	- Philip Wyett added newline at end of fþu80x86.h.
25-Dec-2002
	- Philip Wyett did a minor MSVC documentation update.
24-Dec-2002
	- res fixed wrong #ifndef in win32.cpp reported by Lukas Erlinghagen
	  <Erluk@web.de>.
	- Keith Fulton fixed a compile error in directdetection.cpp.
	- Wouter Wijngaards added RPM spec file for crystalspace install.
	  Donated by Rudolf Kastl (che666@uni.de).
	- Norman Kramer did the following to those RPM specs:
	  updates from che: cleanup and some fixes.
	- Norman Kramer also added iImage() call in the constructor,
	  gcc 3.2.1 would not generate a not-in-charge constructor
	  otherwise.
	- Eric Sunshine added a patch to the canvas class which allows the
	  configuration key "Video.DisplayNumber" to select the display
	  (monitor) number.  If the configuration key is absent, or is set to
	  0, then the primary display is used (which is the old behavior).  If
	  it is greater than zero, then the requested display number is used.
	  If the requested display number is not available, then the primary
	  display is used.  Presently, only the DirectDraw canvases respect the
	  display number.  This patch is based upon code sent by Groton
	  <groton@gmx.net>.
	- Eric Sunshine applied patch from Mark <mark@gossage.cjb.net> for
	  csMatrix2 and csMatrix3 which supplies missing implementations of
	  operator/=(float).
	- Eric Sunshine worked around a compilation problem reported by
	  Frank Schoep <fschoep@zeelandnet.nl> where the compiler refused to
	  convert a temporary csColor to a csColor& in prsseq.cpp.
23-Dec-2002
	- Andreas Busch cleaned up multiple-include-protection in header files
	  and renamed some defines to be more CS coding-style compliant.  All
	  core-CS header files are now __CS__FILENAME_or_DESCRIPTION_H__
	  defined; main include files have an extra prefix for their belonging
	  library to avoid conflicts with defines in other files.  For example:
	    includes/iaws/aws.h -> __CS_IAWS_AWS_H__
	    plugins/aws/aws.h	-> __CS_AWS_H__
	  Applications do not have a CS__-prefix at all.  For example:
	  __AWS_H__  (The various TXTMGR implementations need to use the same
	  define at the moment.	 See renderer/txtmgr.h, render3d/txtmgr.h,
	  aws/av3dtxtm.h)
21-Dec-2002
	- Mathew Sutcliffe changed 'return false;' to 'return NULL;' in
	  functions which returns a pointer, not a bool (csloader.cpp).
	- Philip Wyett did the following:
	    - Added ability for people with GCC 3.0 or above to specify
	      'athlon' at config time.
	      e.g. make linux CPU=athlon ARCH=athlon MODE=debug
	    - Eliminated some compiler warnings under optimize build.
	    - Some minor code cleaning in lview.cpp.
	    - Some code cleaning and tweaks. Including case where csColor
	      ... c.red and c.green were being * by 255 and c.blue was
	      being * by 255.0. All are now being * by 255.0f.
	    - Lowered memory usage and need for casts to float in existing
	      halo processing and in what will be the new renderer.
	- Eric Sunshine removed the NextStep, OpenStep, and MacOS/X Server 1.0
	  (Rhapsody) ports of Crystal Space.  Implementation files which were
	  shared with the remaining MacOS/X port were relocated from "next"
	  directories in the project tree to "macosx" directories.  Class
	  names, SCF names, resources, makefile variables, makefile targets,
	  etc.	were renamed so as to mention "OSX", "MACOSX", or "Cocoa" as
	  appropriate instead of the older "NeXT", "NEXT", and "next".	The
	  following files and directories were tagged with NEXT_OBSOLETE in
	  order to simplify recovery from the CVS Attic if necessary.
	    data/config/next.cfg
	    docs/texinfo/build/platform/next.txi
	    docs/texinfo/internal/platform/next.txi
	    include/cssys/next
	    libs/cssys/next
	    plugins/video/canvas/next
	- Eric Sunshine eliminated compilation warnings from the Thing plugin.
	- Eric Sunshine renamed plugins/net/netman to plugins/net/manager.
	- Eric Sunshine removed the unmaintained DJGPP port.  Tagged the
	  following files and directories with "DJGPP_OBSOLETE" in order to
	  simplify the task of recovering them from the Attic if necessary.
	    docs/texinfo/build/platform/msdos.txi
	    include/cssys/djgpp
	    libs/cssys/djgpp
	    plugins/video/canvas/allegro
	    plugins/video/canvas/common/pc-keys.cpp
	    plugins/video/canvas/dosraw
20-Dec-2002
	- Philip Wyett did the following:
	    - Minor Fix in sector.h.
	    - Fixed a struct vs. class in polytext.h.
	    - Disabled warning 4711 and quieter release builds for users,
	      ready for next CS release.
	    - Eliminated some un-initialized variables in cscomp.cpp.
	    - Cleaned md32spr code so that MSVC does not warn against it.
	- Clarified a few Doxygen comments in the engine.
	- Added iLightingInfo->StaticLightChanged() to notify a mesh
	  object that a pseudo-dynamic light has changed intensity.
	- Added iStatLight->AddAffectedLightingInfo().
	- Removed csStatLight->RegisterLightMap(). With this another
	  dependency between csThing and csEngine is removed. This also
	  fixes a bug where pseudo-dynamic lights changing wouldn't affect
	  lighting on a mesh rendered with DrawPolygonMesh.
	- Removed -revis commandline option. This is no longer needed.
	- Removed -recalc commandline option. This is now exactly the
	  same as -relight.
	- The thing object type now also implements iConfig. Moved
	  the cosfact option from csEngine config to thing object type config.
	- Added iEngine->AddToCurrentRegion(). This function was already
	  present in csEngine.
	- Added csThingObjectType::Warn(), Bug(), Notify(), and Error().
	- Added iEngine->GetLightmapsRequirePO2() and
	  iEngine->GetMaxLightmapAspectRatio().
	- csPolygon3D class no longer requires access to csEngine and csLight
	  classes.
	- csPolygon3D now uses iMaterialWrapper instead of csMaterialWrapper.
	- Lightmap cell size can no longer be set from within config.
	  Use the <settings> block in the map file instead.
	- Temporarily removed the ability of setting cosinus factor from
	  within config.
	- Added iFrustumView->CreateShadowBlock().
	- Added accessor functions for lightmap cell size in iThingEnvironment.
	  And removed the SetLightmapCellSize/GetLightmapCellSize() functions
	  from iEngine.
	- Added iFrustumView->GetSquaredRadius().
	- Temporarily removed the ability to set lightmap calculation quality.
	  It will now always be 3.
	- Temporarily removed the ability to control the number of reflections
	  in lighting calculations. Now hardcoded at the default 1 value.
	- Temporarily removed the ability to disable portal traversal for
	  debugging purposes.
	- Added iSector->CheckFrustum() for portal traversal.
	- Removed the 'cosfact' console command in walktest.
	- The big step! csThing is now a separate plugin!
	- Removed all includes from from the include/csengine dir from css.h.
	  Nothing (except for the engine) is supposed to include from
	  include/csengine.
	- Eric Sunshine removed the unmaintained, unfinished and unused
	  scripts/swig directory.  Tagged the files with "UNMAINTAINED" in
	  order to simplify the task of recovering them from the Attic if
	  necessary.
	- Eric Sunshine removed the unmaintained OS/2 port.  Tagged the
	  following files and directories with "OS2_OBSOLETE" in order to
	  simplify the task of recovering them from the Attic if necessary.
	    docs/texinfo/build/platform/os2.txi
	    docs/texinfo/internal/platform/os2.txi
	    include/cssys/os2
	    libs/cssys/os2
	    plugins/video/canvas/common/os2-keys.h
	    plugins/video/canvas/csdive
	    plugins/video/canvas/openglos2
19-Dec-2002
	- Philip Wyett did the following:
	    - Changed message when preferred visual cannot be used and now
	      indicates a generic visual will be used (OpenGL/X canvas).
	    - Moved XSync() out of Print() and to the window creation
	      point, where it should only be needed to force events to
	      X Server. This has not been tested with all cards and a
	      case may arise that forces a revert. If so could the person
	      please supply info on that case for future reference.
	    - Moved back too msvc_libs 0.95dev003. Until Freetype problem
	      can be fixed.
	- Norman Kramer applied update from Manju for md32spr: Now this
	  tutorial does not depend on any external depenencies.
	- Added iDynLight->AddAffectedLightingInfo(). The plan is to make
	  dynamic lights work on a base of meshes instead of curves and
	  polygons directly.
	- Added iDynLight->RemoveAffectedLightingInfo().
	- Added iLightingInfo->DynamicLightChanged() function. With this
	  function dynamic lights will notify mesh objects that a dynamic
	  light has changed. The dynamic light will only notify meshes
	  that were added using AddAffectedLightingInfo().
	- Added iLightingInfo->DynamicLightDisconnect() function.
	- The changes above disconnect the knowledge of individual
	  polygons and curves from the dynamic lighting system. Another
	  step closer towards csThing/csEngine separation.
	- Added iLightingProcessInfo->FinalizeLighting() function.
	- Added iLightingProcessData interface. Mesh objects can implement
	  this interface in order to be able to add userdata to the
	  lighting procedure. Added iLightingProcessInfo->AttachUserdata()
	  and QueryUserdata() to work with it.
	- Added csLightingProcessInfo which implements iLightingProcessInfo
	  and is directly used by the lighting system (as userdata
	  for CheckFrustum()).
	- Modified csLightingPolyTexQueue to implement iLightingProcessData
	  so that the lightmap specific lighting stuff is now separated
	  from the lighting stuff.
	- Physically separated arrays.cpp in the engine to prepare for the
	  move of thing as a separate plugin.
	- Moved csLightPatch to lppool.cpp.
	- Removed all includes from core engine to thing and vice versa
	  that are not needed. This only leaves a very few dependencies
	  before thing can be moved outside. Of course these few
	  dependencies still require some work.
18-Dec-2002
	- Daniel Duhprey did the following:
	    - Ported genmesh to new renderer, but ifdef'd to maintain
	      compatibility with the old.
	    - Also corrected for degenerate triangle error.
	    - Updated r3dtest to use genmesh.
	    - Fixed render3d to compile on linux without warnings.
	      Added csTriangle to render3d.h.
	    - Removed referrence to r3dtest.zip.
	- Anders Stenberg did the following:
	    - Fix thing.cpp for new renderer. CS_QUERY_REGISTRY can't
	      handle the iRender3D->iGraphics3D #define, and must be
	      explicitly changed when CS_USE_NEW_RENDERER is defined.
	    - Fixes engseq and frustvis compiling errors with new renderer.
	- Keith Fulton fixed errant return on void function in thingmsh.h.
	- Fixed the sprite socket vector. FreeItem() casted the item
	  to delete to the wrong type (csSpriteSocketVector instead
	  of csSpriteSocket).
	- Removed a bad DecRef() in the genmesh loader. This fixes the
	  crash at exit in walktest. Thanks to Daniel Duhprey for finding
	  this.
	- Removed 'culler_mesh' in csSector. That is no longer valid
	  with the removal of the octree.
	- Added iMovable::IsTransformIdentity() and TransformIdentity().
	  With this feature the movable will track if the transform
	  is still an identity transform. If that's the case then some
	  entities (like engine and cullers) can optimize based on that
	  fact. These two functions also make sure the engine doesn't have
	  to use the equivalent thing flags to do the same optimization.
	- Added csTransform::Identity() and IsIdentity().
	- Also added iMovable::IsFullTransformIdentity() which corresponds
	  to the GetFullTransform() being an identity transform.
	- Optimized Dynavis and Frustvis by using IsFullTransformIdentity()
	  and avoiding the transforms in that case.
	- Additionally optimized all mesh objects and parts of the engine
	  to test for the identity transform and avoid some matrix
	  manipulations or even more in some cases.
	- Added iPortal->HitBeam(). This function already existed in
	  csPortal->HitBeam().
	- Fixed csSector, csCamera, and csPortal so they no longer use
	  csPolygon3D but instead always uses iPolygon3D.
	- Continued working on separating csThing from the engine.
	  csSector no longer depends on csThing (but still uses iThingState
	  in some places).
	- Removed iFrustumView->SetFirstTime() and related. That way we
	  remove another link between csThing and the engine (this was
	  used for resetting the gouraud color but apparently this is no
	  longer needed).
	- Added iThingEnvironment->Clear() to reset the thing environment.
	- Moved the light patch and polygon pools from the engine to the
	  thing environment.
	- Cleaned up a lot more links between csEngine and csThing.
	- Added iEngine->FindLight() to find a light given an index.
	- Eric Sunshine eliminated compilation warnings.
	- Eric Sunshine worked around a linker warning from the latest MacOS/X
	  developer tools which stated "AppKit/Foundation not made a weak
	  library".
17-Dec-2002
	- Fixed the fix on reparenting of a mesh object for the culler.
	- Added 'do_popup' parameter to iStandardReporterListener->
	  SetMessageDestination(). This has default 'false' as value so
	  it remains backwards compatible. When this flag is set the
	  message will appear on a graphical dialog that goes away
	  after a while (currently 10 seconds).
	- Removed misleading comment from missing iPerfStats plugin.
	  It is now bugplug that does fps.
	- Engine now gives a clearly visible warning if relighting is needed.
	- Engine now reports (using the new popup warning) the number of
	  objects for which it couldn't load cached lighting and also
	  indicates that -relight is needed to fix that.
	- Made engine reporting a little less verbose to avoid confusing
	  people.
	- Removed SetNodeFunction, SetPolygonFunction, and SetCurveFunction
	  from iFrustumView. Instead there is now the more general
	  SetObjectFunction. That way the engine is more removed from using
	  polygons and thing specific stuff.
	- Added iMeshWrapper->GetShadowReceiver() as an optimization.
	- Removed iThingState::CheckFrustum(). It is obsolete.
	- Fixed the cullers to call the object function from the frustum
	  view instead of calling shadow receiver directly. The shadow
	  receiver will now be called from within the object function
	  that is supplied by the lighting routines.
	- Added iFrustumView->SetObjectFunction(). This function was
	  previously private to the csFrustumView class.
	- Added iEngine->CreateFrustumView() function with which an application
	  can create a frustum view that can be used with
	  iVisibilityCuller->CastShadows(). The user can use
	  SetObjectFunction() and other functions to initialize the frustum
	  view and by doing that get called for every object that is visible
	  from the given frustum.
	- First attempts at implementing shadow receiving for genmeshes.
	  Not fully operational yet and also not enabled by default.
	- Eric Sunshine added to the user manual an `md32spr' tutorial written
	  by Manjunath Sripadarao <msripada@@evl.uic.edu>.
	- Keith Fulton added a separate socket vector to the sprite3d objects,
	  which is copied from the factory at creation time and then is
	  independent.	The way sockets were only on factories, only one mesh
	  could be assigned to a socket across all parent meshes from a
	  certain factory.
16-Dec-2002
	- Peter Amstutz did the following:
	    - When an object is reparented to another object with
	      iMeshWrapper()->GetChildren()->Add(), the child gets
	      removed from the culler entirely.	 This is bad.  This
	      change fixes that so that the object is added back to the
	      culler (which is necessary for culling and HitBeam to work).
	    - Commented out an annoying debugging log msg in thing.cpp.
	- Daniel Duhprey applied fix from John Harger for fopen on windows
	  (terrbig).
	- Completely removed the old octree culler. This has a great impact
	  on the internal engine structure. It greatly simplifies both
	  csThing and csPolygon3D and it also makes sure they are a bit
	  more efficient (use less memory and a bit faster since some
	  virtual function calls are no longer virtual).
	- Moved crysball culler from csengine to csgeom as it doesn't
	  need nor depend on the engine.
	- Removed everything related to PVS from the engine. That wasn't
	  used anyway.
	- Removed several API calls in iEngine and iSector related to the
	  old culler and PVS.
	- The parser will now give an error if 'culler' or 'vistree' is
	  used in a map file.
	- Some documentation updates:
	    - Extended apimod96.txi with information about octree removal.
	    - Removed section about csParser. It is gone.
	    - Extended apimod96.txi with information about the XML format.
	    - Removed documentation about obsolete octree based commands
	      in walktest.
	    - Fixed dirhier.txi for the octree removal. Added mention
	      of frustvis.
	    - Fixed the feature list.
	    - Updated the viscull.txi document a bit. But this still needs
	      more work for Dynavis and Frustvis.
	    - Removed mention of VISTREE from thing mesh object documentation.
15-Dec-2002
	- Daniel Duhprey did the following:
	    - Fixed to remove warnings and errors in linux (glshader_arb).
	    - Fix for the for (int i ...) problem in terrbig.
	- Peter Amstutz fixed ClipLine in common canvas code.  Hopefully for
	  the last time :-)
	- Peter also fixed sector.h: uses iObject but doesn't actually
	  bring in the include, which can cause a few problems...
14-Dec-2002
	- Matthias Braun did the following:
	    - Cleaned up csvector code a bit.
	    - Removed some obsolete mesh removal code and replaced
	      with GetMeshes()->RemoveAll().
	    - Fixed it above correctly by changing csvector behaviour.
	    - Removed compilation warning in cspixmap.cpp.
	- Anders Stenberg fixed some issues with the material rendering in new
	  render3d.
	- Marten Svanfeldt did the following:
	    - Added variables to shadermanager.
	    - Improved the demo of shaders.
	    - Changed fileformat for ARB_vertex_program plugin.
	    - Fixed bug with mixmode not being set.
	    - Added basic CDATA support to XML parser. CData sections will
	      be threated as text, just that <![CDATA[ is starttag and ]]>
	      is endtag.
	    - Changed into a enum for constants.
	- Daniel Duhprey did the following:
	    - Modified terrbig to take scale as a parameter to the
	      preprocessing.
	    - Must faster/cleaner version of the terrain.
	    - Newest version of test.map to match latest terrbig.
13-Dec-2002
	- Andreas Busch cleaned up some old/unused prototypes and outdated
	  comments in walktest/handle_keys.
12-Dec-2002
	- Matthias Braun removed opengl-ext renderer, since work is going on in
	  render3d now.
	- Anders Stenberg various updates to render3d.	Materials are
	  implemented and seem to be drawn correctly.
	- Christopher Nelson added new function MouseInComponent to aws.  Takes
	  x and y and tests to see if they're inside any top-level components.
	  Returns true if the mouse is inside, otherwise false.
	- Daniel Duhprey did the following:
	    - Fixed vpath definition of shadermgr makefile to point to the
	      correct spot.
	    - Added vpath definition to find .cpp files for
	      glshader_arb makefile.
	- Philip Wyett did the following:
	    - Eliminated the 6000+ compiler warnings generated under MSVC 6
	      by the opcode plugin. Also fixed redefiniton of EPSILON.
	    - Updated link to new version of msvc_libs for MSVC 6, which
	      now incorporate Freetype 2.1.3.
	- Keith Fulton changed format of sequence delay tag from
	  <delay>1000</delay> to <delay time="1000" />.
	- Keith Fulton added min and max attributes (optional) to
	  this delay tag.  Min and max, when specified, cause a
	  random delay between those two values.
	- Keith Fulton modified flarge/world to demonstrate use
	  of this feature to simulate torch flicker in the long
	  hallway before the fog.
	- Added csHashMap::Delete() to delete individual objects from
	  a hashmap.
	- Implemented csHashSet::Delete().
	- Fixed a bug in frustvis and dynavis where it would crash
	  if an object that just moved was also deleted immediatelly
	  (i.e. this crash occured when firing missiles in walktest).
	- Andreas Busch corrected wrong/missing header definition in the
	  python and lua scripting plugins.
11-Dec-2002
	- Matthias Braun did the following:
	    - Fixed a bug in csBasicVector::Pop which wasn't testing if
	      root==NULL. Opengl should work again.
	    - Fixed a bug where CS crashs when a curve has no lightmap
	      assigned.
	    - Fixed a circular Ref: TxtMgr->texture->TxtMgr. Opengl plugin
	      unloads correctly now and software should leak less...
	    - Fixed g2dtest - however it seems the line clipping routines
	      behave wrong (or the test... someone should investigate this).
	    - Fixed yet another bug in csBasicVector::Pop.
	    - Fixed refcounting smartpointer issue in dynavis unit test.
	- Optimization in frustvis where the updates of objects in the
	  visibility culler are put on a queue and only performed when
	  actually needed. This means that movable->UpdateMove() no longer
	  causes a kdtree rebuild every time.
	- Fixed a rather big bug in the frustvis kdtree->Flatten() function.
	  It would not properly unlink objects from the parent leafs in all
	  cases. Also the leafs were not destructed which is a memory
	  leak.
	- Optimization in the frustvis kdtree so that MoveObject()
	  flattens() the affected part of the tree every 50 times it is
	  called. This greatly increases the quality of the tree while
	  keeping the overhead of calling Flatten() considerably.
	- Optimized frustvis->Flatten() by flattening directly to the
	  top-node instead of doing this in a recursive manner.
	- The result of all the optimizations in the kdtree means that
	  walktest flarge will no longer keep slowing down when looking
	  at the robot.
	- Added all frustvis/kdtree changes above also to dynavis/kdtree.
	- Keith Fulton added the <lightvalue> trigger condition tag
	  to the sequence manager.  The flarge demo now has two
	  sequences which are listening to the light on the stairs.
	  One fires when the lights get very dim and the other fires
	  when the light gets brighter again.  Note, these sequences
	  activate each others' triggers, not their own.
	- Fixed a few compile errors in the new changes in the engine
	  sequence manager.
	- Made sure that the normal calculation in terrfunc first
	  clamps the x,y values given to the height function to avoid
	  crashing. Thanks to Joseph Miller for pointing me to the bug
	  and suggesting a fix (which I didn't use).
	- Partially fixed a bug in Dynavis which causes lots of potential
	  loss in occlusion. The problem happend with occluders which
	  go beyond the screen at the right side. This fix should
	  improve performance of Dynavis levels a bit. Note that the
	  fix is not complete. I only fixed a few common trivial cases.
	  The hard general case hasn't been fixed yet.
	- Eric Sunshine fixed incorrect application invocation for MacOS/X in
	  instructions for running programs.
	- Eric Sunshine eliminated compilation warnings.
	- Eric Sunshine removed incorrect run-time dependency from netmtst.mak
	  target.  Only compile-time dependencies should be specified.
10-Dec-2002
	- Matthias Braun did the following:
	    - Fixed a big memory leak in the engine (MeshWrappers have
	      been never released).
	    - Made the opengl plugin abort if it wasn't able to find the
	      effectserver plugin.
	    - Cleaned SCF usage of effects code a bit.
	    - Cleaned up effects server code.
	    - Fixed a refcount bug in the opengl canvas.
	- Philip Wyett removed SCF_DEBUG define in OpenGL renderer.
	- Fixed a bug I introduced yesterday in parsing of HardMove.
	  The transform was inverted.
	- Apparently the meaning of HARDMOVE was inverted for factories.
	  I changed HARDMOVE for factories so that the matrix is inverted.
	  This means that if you have a <meshfact> you now have to invert
	  your matrices. For example, a matrix that scales .5 will now
	  have to be a matrix that multiplies with 2. That way it is more
	  consistent with HARDMOVE for <meshobj> but also it is more
	  correct.
	- Keith Fulton added direct application access to running sequences
	  and triggering triggers defined in the world file.  Also added
	  lightning effect to "large" room in flarge, activated with ctrl-L
	  to demo/test this feature.
	- Removed the call to 'Fire()' from Trigger() in the engine sequence
	  manager. That's not needed. Additionally fixed FireTriggerByName()
	  so it works correctly now. To do that I added
	  iSequenceTrigger::ForceFire() which forces a trigger to be fired
	  no matter what conditions are true. This is the best way to
	  fire the sequence as the trigger holds the parameters required
	  by some sequences.
	- Added 'now' parameter to FireTriggerByName() (engine sequence
	  manager).
	- When a good occluder is found, Dynavis will now use the write
	  queue but with the minimum depth instead of maximum depth.
	  That improves the usage of the coverage buffer but still maintains
	  the good potential for using the good occluder polygons.
	- Fixed a problem that Dynavis would be using outline coverage
	  or polygon coverage culling based on wrong information. This
	  happens when inserting polygons from the write queue.
	- Also fixed a similar problem with comparing a bool with a
	  non-bool value for coverage buffer insertion.
	- Fixed a crash bug in iso engine. An IncRef() was recently
	  removed.
	- <goodoccluder> was not parsed correctly.
	- Implemented -flaggood, -flagbad, and -flagclear options for
	  levtool. With these options you can control the placement
	  of <goodoccluder> and <badoccluder> in things. Check out
	  ./levtool -help for more info on how to use these options.
	- Javier Santos fixed an initialization bug in 3ds2lev.
	- Javier Santos fixed another bug in 3ds2lev where the
	  <lighting> option wouldn't be correctly saved to XML.
	- Fixed a memory leak with texture layers for a material. There
	  was no DecRef(). I fixed this by using csRef.
	- Eric Sunshine applied a large and thorough typographical-error
	  correction patch to the Texinfo documentation from Andreas Busch
	  <nobita@t-online.de>.	 Also applied a few minor corrections from Eric
	  Sunshine.
	- Eric Sunshine applied a patch from Andreas Busch <nobita@t-online.de>
	  to convert the cslua plugin over to csRef/csPtr.
9-Dec-2002
	- Fixed a bug in Dynavis where it would consider polygons as possible
	  occluders even if Z very close to 0. This could cause bad overflow.
	- Added iVisibilityObject::GetCullerFlags(). With this you can set
	  various hints for the visibility culler to help optimize
	  performance. The visibility culler can choose to ignore or honor
	  these hints. The following hint flags are defined at this moment
	  but no visibility culler honors them yet:
	    - CS_CULLER_HINT_CONVEX: object is convex.
	    - CS_CULLER_HINT_CLOSED: object is closed (i.e. if you are
	      outside the object you can only see the visible side
	      of the object.
	    - CS_CULLER_HINT_GOODOCCLUDER: this object is a good occluder
	      (i.e. it will probably be able to cull away a lot of the
	      geometry).
	    - CS_CULLER_HINT_BADOCCLUDER: this object is a bad occluder
	      (i.e. it is too small or not convex enough to be a useful
	      occluder).
	- Generalized parameter parsing for mesh objects. A large part of
	  this was now duplicated in two routines (csloader plugin).
	- The <convex/> flag now also sets CS_CULLER_HINT_CONVEX.
	- Added <closed/>, <goodoccluder/>, and <badoccluder/> flags for
	  mesh objects.
	- Dynavis now honors the <badoccluder/> and <closed/> flags. In
	  case of <closed/> it will use outline based culling in any case.
	  In case of <badoccluder/> it will simply not use the object
	  as an occluder.
	- Dynavis now also honors the <goodoccluder/> flag. In that
	  case it will not use the write queue to delay writing of the
	  occluder and it will also use polygon mode instead of outline
	  mode to have more accurate filling of the coverage buffer.
	  The idea is to only use this for large objects that don't have
	  too many small polygons.
	- Keith Fulton fixed a timing bug in spr3d animations when mixing
	  displacement frames with delay frames.
8-Dec-2002
	- Matthias Braun made 3ds2lev output XML - WARNING: This isn't really
	  tested as I had no proper .3ds files here...
	- Marten Svanfeldt did the following:
	    - Added activate/deactivate to iShaderPass.
	    - Added shader-support to user.mak.
	    - Some bugfixes in shaderprogram loading.
	    - Implemented ARB_vertex_program.
	    - Added test for ARB_vertex_program.
	    - Added new objects for render3d-shaders.
	- Experimental optimation in Dynavis for clamp in polygon mode (not
	  yet outline mode). Not enabled yet since it isn't working properly
	  yet.
7-Dec-2002
	- Philip Wyett updated links to point to new msvc_libs for MSVC 6.
	  Thanks to Lukas Erlinghagen for submitting updated ode.lib.
	- Matthias Braun fixed fontplex font server (it was looking for
	  FontServer instead of iFontServer in the object registry).  Also
	  changed it's name to multiplexer instead of multiplexor.
	- Made the following modifications to levtool:
	    - Added -splitpoly and -analyzep options. With this it is possible
	      to separate large polygons in separate objects.
	    - Fixed bug with -minsize. That option was simply ignored.
6-Dec-2002
	- Norman Kramer fixed an out of bound memory error that would prevent
	  loading of certain models.  Now you don't have to remove the line in
	  animation.cfg (md32spr).
	- Fixed a bug in the engine where children of mesh objects wouldn't
	  get registered to the visibility culler. This could cause culling
	  errors and it would also cause HitBeam to fail on mesh children.
	- Changed levtool to work in separate steps. The -dynavis option
	  will only split in parts now. After that you can run -splitunit
	  to split in separate units (takes a long time on large
	  levels).
	- Added -analyze to levtool so you can see the distribution
	  of objects and their relative size to the global bounding box.
	- Added -compress to levtool to compress all vertices (remove
	  duplicates and unused vertices). -dynavis no longer does
	  this by itself but -splitunit still does.
	- Added -splitgeom which will try to split all large objects
	  (using -minsize option which defaults to 20%) into smaller
	  objects (i.e. it will divide them in 8 sub-objects).
	- Fixed levtool so it only operates on non-movable things.
	- New Schema from Javier Santos. Is now able to validate flarge
	  and partsys fully. Not finished yet.
5-Dec-2002
	- Philip Wyett did the following:
	    - Updated msvc7_libs links.
	    - Eliminated crash at exit under MSVC/Windows (awsmain).
	    - Eliminated compiler warning (aws).
	    - Eliminated linker problem under MSVC 7 (netmtst).
	    - Hacked the world file to remove old token 'lmcache'.
	      Remember to use '-reclac' on first run to generate
	      lightmap data.
	- 'levtool' will now split all parts in separate units. A unit
	  is defined as a set of polygons that are connected and that
	  doesn't connect with any other polygon from the same part.
	  This results in a much better object separation for Dynavis.
	  Performance improves by doing this but is still not perfect.
	- Added a '-nosplit' commandline option to disable this new
	  feature so that the things are only split in parts.
	- Added '-nocompress' commandline option to levtool so that vertices
	  are not compressed and unused vertices are not removed. This
	  option implies '-nosplit'.
	- Javier Santos worked on the CS Schema definition for the map
	  format. Still incomplete but you can find it in scripts/xml.
	- Keith Fulton added support in the sequence manager for
	  dynamic ambient light.  New commands are <setambient> and
	  <fadeambient>.  See flarge world for examples of usage.
4-Dec-2002
	- Philip Wyett did the following:
	    - Eliminated struct vs. class warnings under MSVC 7 (netman.h).
	    - Removed stray IncRef() and DecRef(), fixing crash at exit
	      (isomesh.cpp).
	    - Added csperl5 project for testing.
	    - Removed csperl5 for time being. Many things need fixing.
	- Added iDocumentNode->Equals() to compare two nodes. Comparing
	  the pointers doesn't work because these are only wrappers
	  on top of the real nodes.
	- Fixed crash bug in bumptest.
	- 'levtool -dynavis' will now do a correct conversion from
	  old octree based culler to Dynavis. Here is what it does:
	    - Split all things into their 'parts'.  So for this to work nicely
	      you should make sure that you have logical objects in your
	      original world and that these logical objects are named as <part>
	      entries in the world file.
	    - Removes all <vistree /> statements.
	    - Replaces <culler>static</culler> with
	      <cullerp>crystalspace.culling.dynavis</cullerp>.
	    - Replaces <zfill /> with <zuse /> for all thing objects.
	    - Adds <settings><clearzbuf>yes</clearzbuf></settings> if not
	      already present.
	  This version of levtool does NOT yet split objects in smaller
	  objects (which would be nice for Dynavis). So if your objects
	  are not nicely defined then you will not get good performance.
	  I tried this version of levtool on dmburg and performance dropped
	  a great deal (four times slower for software renderer and about
	  two times slower for OpenGL) so this is certainly not optimal
	  yet. But don't worry :-)
3-Dec-2002
	- Fixed a bug in the engine where it would try to cache lightmaps
	  even if CS_ENGINE_CACHE_WRITE was not set (but if
	  CS_ENGINE_CACHE_NOUPDATE was not set).
2-Dec-2002
	- Charlls Al'Quarra fixed the prototype of CS_TYPEDEF_GROWING_ARRAY_EXT
	  on 79: the move must be of size length - n - 1 instead of limit - n -
	  1.  Also added a Macro Extra called HANDLECHUNKS that allow to handle
	  segments of arrays in one insert/delete call.	 I hope i didnt break
	  something this time =^)
	- Daniel Duhprey did the following:
	    - Fix for SetPosition/GetPosition in ODE dynamics.
	    - Revert fix, and parameter fix as well.
	- Moved the dynamic ambient functions from iThingState to
	  iLightingInfo. That means dynamic ambient can now also be used
	  by other objects (i.e. like genmesh). Genmesh already implements
	  the interface but doesn't use it.
	- Optimization so that the iLightingInfo interface is remembered
	  with a mesh. That makes the loop to change dynamic ambient
	  in a sector considerably faster. There is now a new method:
	  iMeshWrapper->GetLightingInfo().
	- Optimization in dynamic lighting so that a query interface
	  call is avoided for every polygon that is hit by a dynamic light.
	- Optimization in polygon->GetParent(). This call was also doing
	  a query interface for nothing.
	- Optimization in csPortal->GetReferencedObject(). Removed unneeded
	  query interface.
	- Extended iVisibilityObject with GetMeshWrapper() function. This
	  avoids a lot of extra query interface calls in the engine and
	  visibility cullers.
	- Eric Sunshine fixed a quoting problem in python.cex synthesis
	  reported by Steven Geens <steven.geens@student.kuleuven.ac.be>.
1-Dec-2002
	- Norman Kramer applied patch submitted by Manju: There was a bug in
	  which some files would come up with negative numbered frames.	 That
	  has been fixed.
	- Peter Amstutz did the following:
	  Fixed clipping bug in graph2d.cpp.
	- Fixed initialization plugin in the explosion mesh object. This
	  could cause crashes in some cases.
30-Nov-2002
	- Peter Amstutz did the following:
	    - ODE dynamics: does left handed -> right handed coord
	      transform for AttachColliderPlane.
	    - Fixes bug in SetPosition when object is static (need to
	      update the static joint using dJointSetFixed()).
	- Norman Kramer did the following:
	  Samplecount computation in wavfile.cpp didnt honor the channel
	  count.
	- Simplified the iLightingInfo interface. The concept of cache name
	  is now removed (it was totally unused). This also removes about 52
	  bytes of memory for every thing instance.
	- Also removed the id variable with ReadFromCache() and WriteToCache()
	  in iLightingInfo.
	- Removed the 'lmcache' keyword in the standard loader.
	- Genmesh now implements iShadowReceiver but the function is not
	  implemented yet. Part of the plan to implement shadows on
	  genmesh objects.
	- Genmesh now implements iLightingInfo but all functions are not
	  implemented yet.
	- Added the ability to enable shadow receiving for genmeshes.
	  At this moment this is not yet implemented but when it is
	  implemented you will be able to use the same lighting system
	  that is also present for things for genmeshes too. By default
	  genmeshes will behave like all other objects (besides thing) and
	  receive lighting information at runtime using
	  DeferUpdateLighting(). When I finish implementing this new
	  functionality you will be able to say that a genmesh should
	  receive lighting information during the lighting recalculation
	  phase. That also means that it will be able to support
	  shadows (i.e. not only shadow casting, but shadows on the genmesh
	  object itself).
	  New 'localshadows' keyword. New SetShadowReceiving() function.
	- Added new CS_ENGINE_CACHE_NOUPDATE flag for
	  engine->SetLightingCacheMode(). This flag is on by default and it
	  means that the lighting will not be updated when it is invalid
	  or missing. If this flag is off then lighting will always be
	  calculated even if CS_ENGINE_CACHE_WRITE is not set. This
	  flag means that if you forget to specify -relight or -recalc
	  on a level that doesn't have lighting you will simply get
	  black lightmaps and no length recalculation phase. The only
	  way to recalculate lighting is by using -relight or -recalc.
	- Implemented GenerateCacheName() in genmesh.
29-Nov-2002
	- Peter Amstutz did the following:
	    - Fixes planes in ODE plugin. Phystut works correctly now.
	    - The avatar (camera) is now represented by a dynamic object
	      as well :-)
	    - A bit more hacking; the box avatar now behaves more like the
	      way you'd want for a first person application.
	    - You don't need to compile ODE with any special flags any more.
	- Possibly fixed a bug in HardTransform for skeletal sprites. Instead
	  of transforming all vertices only the vertices in the root are
	  transformed and also the transforms of all children of the root.
	  This has not been tested though.
	- Implemented the missing feature for locating a mesh that is a child
	  of a hierarchical mesh parent (using the ':' notation). This worked
	  in the default case but not within regions.
	- Fixed autonormals in genmesh so it now ignores duplicate vertices
	  caused by vertices which have same coordinates but different
	  uv mapping. Before calculating normals it will first compress
	  the vertices (but ignoring uv mapping).
	- Added the ability to disable shadow casting for genmeshes.
	  New 'noshadows' keyword. New SetShadowCasting() function.
	- Fixed BugPlug so the screenshot key no longer shows the BugPlug
	  alert.
	- Added the new 3dsMax exporter that is being used by the PlaneShift
	  project to create their magnificant levels. Written by Luca Pancallo.
	  You can find the script in CS/scripts/max. Check out the documenation
	  html that is there.
28-Nov-2002
	- Eric Sunshine disabled the "experimental" render3d project by default
	  for MSVC users since its many compilation problems were causing
	  significant consternation for the masses.
	- Eric Sunshine fixed the makefiles so that the optional "local.mak" is
	  included at the appropriate place and time.  Also fixed several
	  targets which depend upon user.mak so that they also now depend upon
	  local.mak.
	- Eric Sunshine made the following changes to chkperl.sh:
	    - Fixed numerous portability problems which prevented the script
	      from functioning correctly on some platforms.
	    - Documented the imports and exports.
	    - Made aesthetic improvements.
	- Eric Sunshine fixed a slew of makefile bugs in csperl5.mak,
	  netman.mak, netmtst.mak, perl5tst.mak, and template.mak.
27-Nov-2002
	- Marten Svanfeldt did the following:
	    - Fixed some errors in shader stuff.
	    - Added shader to material.
	    - Implementation of iShaderRenderInterface.
	    - Added first shaderprogram-plugin, which is a OpenGL
	      ARB_*_program shaderplugin.
	- Mathew Sutcliffe did the following:
	  Added the network manager plugin and interface. It polls sockets
	  for data each frame, and posts csevNetwork events when data is
	  received.
	- Matthew made the perl build even nicer and added proper MSVC support.
	- Philip Wyett did the following:
	    - Added newline to end of shader.h.
	    - Eliminated re-ordering (aws).
	    - Elimated bad return in netman.h.
	    - Eliminated const char* vs char* in netman.h.
	    - Eliminated a couple of warnings under MSVC 7 in lghtmap.cpp.
	- Keith Fulton added movement commands to viewmesh to allow testing
	  of displacement-based anims.
	- Jeremy Williams fixed a bug in the explosion particle system
	  which would cause crashes when firing missiles in walktest.
	- Fixed a similar bug in the snow, emit, fire, fountain, and spiral
	  particle systems. Only rain appeared to be ok for some reason.
	- Fixed a small type in the map2cs tutorial.
	- Fixed a small compile error in Blocks for compilers that complain
	  about unsigned char* being given to csPrintf.
	- Fixed a bug in terrfunc::HitBeamObject(). The variable 'st' was
	  not initialized. I now initialized this to 'start'. I hope that's
	  the right fix as I have no easy way to actually test this now.
26-Nov-2002
	- Fixed a bug in the software renderer when materials are used without
	  textures. Reported by groton.
	- Dynavis now only complains about open objects.
	- Fixed Dynavis and Frustvis so they now clean up properly after
	  destruction.
25-Nov-2002
	- Marten Svanfeldt fixed new renderer so that it compiles when
	  CS_USE_NEW_RENDER isn't defined.
	- Daniel Duhprey did the following:
	  Fixed ODE dynamics plugin for the dCollideBP problem.
	- Anders Stenberg addition of vertex lighting in hardware if supported.
	- Marten Svanfeldt fixed problems created by dentoids
	  commit-problems.
	- Peter Amstutz did the following to ODE dynamics plugin:
	  Properly initializes contact joints, including the
	  EXTREMELY important flag dContactSoftCFM, which is
	  necessary to avoid instability (phystut is stable now!)
	- Charlls Al'Quarra made small fix to csvector.cpp.  Thanks Eric.
	- Added a new CS_POLY_VISCULL flag with which it is possible to
	  enable/disable visibility culling for individual polygons (thing
	  mesh only). By default this flag is enabled except in the following
	  cases:
	    - Polygon has an <alpha> keyword.
	    - Image associated with the texture of this polygon has keycolor.
	    - Image associated with the texture of this polygon has an alpha
	      map.
	  Note that it is the polygon loader in syntax services that
	  actually provides these defaults. If you manually create polygons
	  with the API the default is always true.
	- Extended syntax services plugin with new <viscull> keyword that
	  you can use in a polygon to enable/disable visibility culling for
	  individual polygons. Similar to the <colldet> keyword.
	- Renamed iObjectModel->GetSmallerPolygonMesh() to
	  GetPolygonMeshViscull() as this more closely describes what the
	  purpose is of this polygon mesh.
	- Renamed iObjectModel->GetPolygonMesh() to GetPolygonMeshColldet().
24-Nov-2002
	- res did the following:
	    - Devapi extracts static members as well now.
	    - SCF_VERSION isn't listed as a function in devapi now.
	    - Added some doxgen '\file' commands.
	    - Added a quirk to getopt.h so the word 'option' doesn't get
	      linked everywhere.
	- Charlls Al'Quarra did the following:
	  I suspect that i fixed some bugs on InsertChunk and DeleteChunk
	  pointed out by sunshineco. I'm not liable by any bugs introduced
	  in this fix =)
	- Thanks to groton I managed to fix the bug that newsky crashes
	  with recent versions of CS. The reason was that the default
	  visibility culler was not initialized.
23-Nov-2002
	- Charlls Al'Quarra fixed the bug in MSVC where cloth doesn't show
	  up. Now the cloth can be seen also compiled with MSVC.
	  Thanks to Groton for the remote debugging.
	- Removed the meta manager again. This is a totally unneeded
	  addition since it is already possible to attach name/value
	  data to any thing that supports iObject. Just use the following
	  syntax:
	    <key name="editor_bla" value="whatever" />
22-Nov-2002
	- Philip Wyett did the following:
	    - Removed a couple of dead links and fixed the BisonFlex links
	      for those who use it.
	    - Removed link to ssh package on CS ftp, as SF have updated
	      their software and that version no longer works correctly.
	- Norman Kramer added an "-include mk/local.mak" so developers can
	  leave the user.mak and <system>.mak unaltered.  ( I usually end up
	  removing the "<<<<<<" and ">>>>>>" after an update from cvs).
	- Mathew Sutcliffe added Perl interpreter error reporting through
	  iReporter.
	- Mike Handverger extended text box functionality (aws):
	    - Left/right/home/end keys.
	    - Inserting chars and delete key.
	    - Selecting cursor pos with mouse.
	- All spr2d instances used to have their own local copy of
	  G3DPolygonDPFX. Since this structure is more than 4K big I decided
	  to move this to the factory so that all instances created from
	  a factory reuse the same structure. For particle systems this
	  is a huge memory improvement.
	- Added forgotten 'public' to some inheritance in frustvis and
	  dynavis. This caused a warning on MSVC.
	- Implemented the start for a new optimization to make recalculating
	  lighting on huge levels faster (a lot I hope). Not ready yet!
21-Nov-2002
	- res did the following:
	    - Removed call to efed.pl after doxygen run; isn't needed
	      because a custom footer w/o date is used.
	    - Added some eyecandy to pubapi docs.
	    - Added some more doc modules.
	    - Tweaked the alphabetical index.
	    - Added some eyecandy to pubapi docs.
	    - Added csgeom headers to Geometry Utils doc module.
	    - Tweaked the doc stylesheet a bit.
	- Marten Svanfeldt did the following:
	    - Added shaders for the new renderer. A CS shader today is
	      a combination of vertex and fragment processing instructions.
	    - Added support for shaderprogram plugins.
	- Mathew Sutcliffe added support for putting meta-data in map files,
	  for level editors and such.
	- Anders Stenberg fixed a case where glShadeModel was called instead of
	  statecache->SetShadeModel, which broke the state caching (in
	  openglcommon).
	- Fixed CastShadows() implementation in Dynavis and Frustvis
	  so that it shadow casting is now correct (I hope).
20-Nov-2002
	- Mathew Sutcliffe made same changes to
	  libs/cssys/{next,win32}/*conf.sh as I did to unixconf.sh for the
	  Perl5 plugin.
	- Anders Stenberg made some changes to the new renderer API, and work
	  on clipping.
	- Paul Garceau performed minor cleanup -- eliminated comments re:
	  "dllwrap" as gcc -shared is now being used for plugin generation
	  (.dlls) instead of "dllwrap".
	- Mike Handverger initialized title_bar_height to 0 (aws) to stop
	  randomly sized title bars.
	- Philip Wyett did the following:
	    - Removed FTP mirror link until the machines relocation is
	      complete.
	    - Added test for csperl5 plugins existence in build to stop
	      the test app being built if it is not.
	- Fixed csVfsCacheManager so it no longer tries to use 'scope' if
	  that is NULL. This has an effect on 'precalc_info' which will now
	  be placed in that file instead of in '(null)'.
	- Use csRef for storing the images in the texture manager.
	- Fixed a pseudo-'memory leak' with images. After registering textures
	  the original source images are (usually) no longer needed. But CS
	  was keeping them in memory anyway. This resulted in a big overhead
	  since those textures can be very big. Now by default the original
	  image pointers (iImage instances) are removed after registering
	  a texture wrapper (iTextureWrapper->Register() will release it's
	  link and iTextureManager->FreeImages() will then release the link
	  in the renderer).
	- Added iTextureWrapper->SetKeepImage() and KeepImage() to control
	  this new behaviour. If you call SetKeepImage(true) then the
	  texture wrapper will keep a pointer to the image when Register()
	  is called.
	- Added <keepimage> option for textures so that you can indicate
	  in a map file that you want to keep the image.
19-Nov-2002
	- res did the following:
	    - Octree and lm_precalc_info now use cache id ~0 as well.
	    - iCacheManager docs mention the possibility of using ~0 as ID.
	    - Added a line about the online FAQ in the Wiki.
	- Mathew Sutcliffe did the following:
	    - Added Perl v5 Scripting Plugin and Test Application.
	    - Furthermore: Changed private member csTimer::pause to
	      csTimer::pausetime to fix case-insensitive conflict with
	      iTimer::Pause(). Perl headers define macros that conflict
	      with names of some things in CS, so added #undef's to
	      ivaria/cs.i. Added a template internal-project sub-makefile.
	- 'genmesh' objects now also cast shadows (they don't receive
	  shadows yet). Generalized the shadow casting system in the engine
	  so that this is actually possible.
18-Nov-2002
	- Daniel Duhprey brought ODE plugin up to date with latest ode cvs.
	- Norman Kramer notes: If you build the latest ode library you have to
	  set ODE_OLD_COLLISION in ode/config/user-settings.
	- Fixed software renderer procedural textures in 16-bit display
	  mode. They worked fine in 32-bit display mode and that's why
	  I didn't notice the bug :-)
	- Implemented a new fundamental change in the lightmap format.
	  Due to some HUGE levels that the PlaneShift team is making
	  (with more than 230000 lightmap files!) I had to rethink the
	  way lightmaps are stored since ZIP files are limited to 65535
	  files. So I now group all lightmaps that belong to a single
	  object in one file. That greatly reduces the number of files
	  that need to be stored and also increases loading speed
	  considerably.
	- Changed csVfsCacheManager so that it will now use one less
	  directory level if the id == ~0.
17-Nov-2002
	- Fixed a huge memory leak in the XML loader. The main document
	  node was never cleaned up which resulted in the entire node
	  tree to remain in memory. For big levels this could result in
	  70-120 Megabyte leaks.
	- Changed NEW to NEW_PROC in prfire.cpp because NEW define
	  conflicts with the same define that is used if
	  CS_EXTENSIVE_MEMDEBUG is enabled.
15-Nov-2002
	- Eric Sunshine made the following changes:
	    - Augmented the project configuration phase so that it determines
	      automatically how to enable warnings (i.e. -Wall or -Wmost), and
	      how to disable warnings about unknown #pragmas.
	    - Removed hard-coded -Wall, -Wmost and -Wno-unknown-pragmas
	      directives from makefiles.
	    - Eliminated several compilation warnings from the project.
	- Added iEngine->CreateBlackTexture(). This function is similar
	  to iEngine->CreateTexture(). Instead of creating a texture from
	  a file it will create a black texture with the given dimensions.
	  This is mainly useful for procedural textures.
12-Nov-2002
	- Marten Svanfeldt did the following:
	    - Fixed infinite loop-problem in GetTopmostVariableID (efdef.h).
	    - Effectloading problem.
	- Norman Kramer did the following:
	    - Changed shielding define names of writer.h (they were used in
	      another include already).
	    - iEventCord now inherits from iBase again. Michael D. Long
	      changed that on Sun Oct 15 22:55:52 2000 but gave no reason.
	      Now you can do csRef<iEventCord> again.
	    - Added newline to end of awsdoc.h, some compiler actually do
	      care.
11-Nov-2002
	- Norman Kramer disabled default compilation of the new opengl
	  render3d implementation and the r3dtest program.
	- Norman also added render3d/opengl to list of targets to build for
	  nightly dsp creation.
	- Marten Svanfeldt did the following:
	    - Fixed ef1.xml so that it works with ARB_vertex_program.
	    - Deprecated ms.nvv and replaced by ms.avp
	    - Fix for Mingw in efdef.h.
	    - Fixed so that efserver.cpp compiles when CS_USE_NEW_RENDERER is
	      defined.
	- Peter Amstutz added the missing GetCanvas() method... although
	  shouldn't GetCanvas() return csRef?  Also I'm not 100% sure that
	  there is actually an iGraphics2D in iImage, but it seemed like
	  the most likely place... anyway it doesn't seem to break anything.
	- Paul Garceau eliminated dllwrap dependency. Now uses gcc -shared to
	  generate .dlls (plugins, etc.).
	- Genmesh factories now support HardTransform().
10-Nov-2002
	- Anders Stenberg did the following:
	    - Fixes for the new renderer...
	    - Updates for the new renderer. (Breaks it, fixes are to come...)
	    - SetRenderTarget worked straight out of the box. :) Added a
	      test for it to r3dtest.
	    - Small fix to stdrep for compiling with new renderer.
	    - Implemented clipping.
	- res provided fixes for Cygwin.
	- Fixed genmesh so it no longer crashes when there are no vertices.
9-Nov-2002
	- Keith Fulton fixed a minor MSVC compile error.
8-Nov-2002
	- Norman Kramer did the following:
	    - News from manju: Here are the new md32spr files. The reading of
	      animation files and writing it into XML has been redone
	      completely.
	    - The animation ordering problem has been fixed.
	    - And more fixes to player model writing.
	- Christian Bayle added some icons for jngtest scene (Debian scripts).
	- Dynavis and Frustvis now make sure that their update callbacks
	  (for when the object or movable changes) are protected against
	  multiple updates. i.e. when the update is in progress the
	  callback is disabled until the update is finished again. This
	  prevents infinite loop when the call to get the object bounding
	  box from the object resulted in a call to the callback and so on.
7-Nov-2002
	- Removed a warning in Dynavis reported by valgrind. Was not
	  really harmful though.
	- Removed another warning in Dynavis reported by valgrind. Was
	  not correctly initializing the tiles in the tiled coverage
	  buffer.
	- Removed a warning in Bugplug reported by valgrind. Was
	  using 'delete' instead of 'delete[]' for a char array.
	- Slightly optimized csBox3::ProjectBox().
	- Enabled tiled culling again in Dynavis. This speed up culling
	  considerably and it seems to work fine now. However! The tiled
	  culler cannot cope will with polygons that are not coplanar
	  (i.e. a polygon of four or more vertices of which all vertices
	  are not exactly on the same plane). It is even possible to get
	  crashes in that case. You can check if your level contains
	  non-coplanar polygons by using levtool as follows:
	    levtool -validate your_level.zip
	- Replaced the vector of textures in csProcTexture with a hash
	  set. This greatly increases speed of using procedural textures
	  when the same textures is visible multiple times at once (without
	  this fix every texture would be updated as many times as it
	  was visible).
6-Nov-2002
	- Keith Fulton fixed loading/saving of binary sprites with
	  displacement anims.
	- Keith also fixed bug in latest loader.  Existing v1.1 files will
	  still work, but now their normals will be correctly loaded.
	- res fixed binary 3d sprite loader so that normals are now stored
	  in binary 3d sprite format. ("old" bsprs w/o normals should still
	  work as well).
	- Enabled tiled culling by default in Dynavis. This gives a big
	  improvement in fps and it seems to work properly.
	- Disabled tiled culling again as it seems to crash in some cases.
	- Fixed a small bug in tiled coverage buffer. I'm not convinced
	  the tiled coverage buffer is 100% ok yet since I'm still
	  experiencing crashes when I disable it. So there is some
	  memory corruption going on. That's why it is still disabled
	  by default. It does give a huge speed benefit though so if
	  you have BugPlug in memory you can enable it by pressing the
	  following keys one after the other:
	    ctrl-d v ctrl-d 5 ctrl-d v
	- Added new 'toggle_ignoresmall' command to Dynavis (assigned
	  to '6' key in BugPlug) with which you can enable the feature
	  that small objects (less than 10x10 pixels on screen) are
	  not written to the coverage buffer. Since these small objects
	  are unlikely to contribute to culling it doesn't make sense
	  to write them to the coverage buffer. This feature only works
	  when the write queue is enabled (which is the case by default).
	  This feature is disabled by default.
5-Nov-2002
	- Matthias Braun fixed cs-config so that it includes LFLAGS.GENERAL
	  now and therefore adds -lpthread.
	- Norman Kramer did the following:
	    - manju writes: I have fixed some bugs in the md32spr.cpp and
	      moved the <key> tags to a new file. This way the model is now
	      "politically correct" CS wise. Also there was some error with
	      floating point values, now if the number is less than a small
	      threshold I make it 0. This was way the model behavious is
	      more consistent.
	    - Changed qsqrt to sqrt (in dmath.cpp) to get around those
	      numerical instabilities reported on the ML (or was it a bug in
	      qsqrt ?)
	- Daniel Duhprey fixed a bad memory access in ODE dynamics plugin.
	- Fixed an old bug in frustvis and dynavis with relation to frustum
	  culling. The cause of the bug was that the kdtree node bounding
	  boxes used very large values for the other area. I decreased this
	  value now and things appear to be working better already. There
	  are still culling errors in Dynavis (not Frustvis) but these
	  have nothing to do with frustum culling. Will have to investigate
	  those later.
	- Keith Fulton submitted a small fix for csFont length measurement
	  which was using the same width for all characters even in
	  proportional fonts.
	- Added a hack to Dynavis so it will detect objects that are not
	  closed (i.e. objects that have holes in them). Dynavis cannot
	  properly work with these kinds of objects so it is best to fix
	  them. When Dynavis encounters such objects it will switch
	  to a slower culling method (for those objects only).
4-Nov-2002
	- Daniel Duhprey made System and Body in ODE dynamics csObject's.
	- Norman Kramer fixed new render3d OpenGL so it compiles with
	  gcc3.2.
	- Paul Garceau did the following:
	    - Eliminated dependency on dllwrap.
	    - Eliminated dllwrapwrap.sh
	    - (DO.SHARED.PLUGINS) now uses "gcc -shared" to generate .dll
	      files.
	- Significantly optimized walking around in walktest in sectors
	  with a huge number of objects. Walktest was doing QUERY_INTERFACE
	  for EVERY object in the current sector every time the camera
	  moved. It was doing this only to test if there was a terrain
	  with which to do visibility testing. I optimized this by attaching
	  an object to the sector which contains this information.
	- Redesigned the way the VisTest() functions for spheres and boxes
	  work in iVisibilityCuller. Now they return an iterator instead
	  of just marking the objects. This is a LOT faster in levels
	  with a huge number of objects. Fixed Dynavis, Frustvis, and
	  old style octree based culler for this change.
	- Fixed iso engine for some recent changes to CS.
	- Applied another optimization to csSector::IntersectSegment().
	  This will now only check objects that are in the box defined
	  by start->end of the segment (if only portals is true).
	- Fixed a bad bug introcuded by the previous changes in the cullers.
	  This bug caused CD in walktest to go completely wrong. The reason
	  for this bug was the iterators for VisTest() were all sharing the
	  same vector but with different data. This fix does not completely
	  fix the issue though. Still have to investigate what's wrong.
	- Fixed the bug in IntersectSegment(). It was not calculating the
	  bounding box the right way.
	- Eric Sunshine eliminated several compilation warnings in
	  gl_varbufmgr.cpp, and also replaced assert() invocations with
	  CS_ASSERT().
	- Eric Sunshine fixed scripts/python/glextgen.py so that the
	  synthesized file is more preprocessor-friendly (that it, the change
	  eliminates thousands of warnings emitted by the preprocessor when
	  processing the synthesized file).
	- Eric Sunshine made the following documentation-related changes:
	    - Fixed mark-up problems in howto/envvar.txi.
	    - Added discussion of C-shell to howto/envvar.txi.
	    - Added MacOS/X-specific discussion to howto/envvar.txi.
	    - Updated dirhier.txi.  Removed obsolete entries.  Added missing
	      entries.
	    - Scaled down an EPS image in the "Cygwin build" instructions so
	      that it actually fits on a printed piece of paper.
	    - Added a new How-To from Andreas Busch <nobita@t-online.de> which
	      illustrates creation of external CS programs using KDevelop.
	    - Applied a couple minor typographical corrections pointed out by
	      Andreas Busch.
3-Nov-2002
	- Anders Stenberg did some updates to the new renderer.
	- Changed DynaVis to use the new movable and object model
	  listeners. This significantly speeds up rendering and walking
	  through huge levels already but we're not there yet.
	- Changed FrustVis to use the same new system as DynaVis.
	- Keith Fulton implemented distance displacement between keyframes
	  of a sprite3d animation.  New attribute "displacement" can be used
	  in place of "delay" on frame definitions to indicate this.  Delays
	  and displacements can be mixed in the same sprite and same anims if
	  desired.
	  See http://www.gamasutra.com/features/20021018/hansson_01.htm
	  for more info on how this eliminates the "skating" effect from
	  walking or running sprite meshes.
2-Nov-2002
	- Justin Miler added iRigidBody::AttachColliderPlane(csPlane3&,
	  float friction, float density, float elasticity) to Dynamics (ODE).
	  Implemented iRigidBody::AttachColliderPlane in odedynam. As doxygen
	  comment notes, ODE planes are globally transformed, immobile, and
	  infinitely dense (so 'density' is ignored).
	  Changed phystut to use plane colliders for walls instead of boxes.
	  This is more efficient, more stable, and cleaner.
	- Completed implementation of the new listener system in
	  iObjectModel. The next step will be to change the visibility
	  systems to actually use this new system.
1-Nov-2002
	- Daniel Duhprey did the following:
	    - Modified the order for the libs in enginep.mak so that all
	      symbols are defined correctly.
	    - Commit from Manju to check for null in md32spr.cpp.
	    - Added the physics loader.
	- Removed userdata from iMovableListener. It is not needed.
	- Added new iObjectModelListener so you can listen to changes in an
	  object model.	 Implemented this partially in all iObjectModel
	  implementations (i.e.	 all mesh objects).  The listeners are not yet
	  fired though.
	- Eric Sunshine fixed msvcgen.mak so that it no longer instructs the
	  user to type "cvs add -kb" when adding MSVC7 project files.  These
	  are plain text XML files which do not require the -kb flag.  The user
	  is still instructed to use -kb when adding MSVC6 and earlier project
	  files, however.
	- Zephie Greyvenstein <zephie.greyvenstein@btinternet.com> contributed
	  a patch to fix a crash in md32spr when a direct reference to a shader
	  function was used instead of a image file.  For instance if the
	  shader function "/blah/blah/steam" was requested(which in turn
	  created some effect using /blah/blah/steam1.tga and
	  /blah/blah/steam2.tga) then point would be NULL(since there was no .
	  extension).
	- Eric Sunshine fixed a crasher in csLoader::ParseImposterSettings()
	  reported by Don Lavelle <dll4@lehigh.edu>.
	- Eric Sunshine eliminated compilation warnings.
	- Eric Sunshine fixed problems with the gl_render3d.mak makefile.
	- Eric Sunshine eliminated several thousand preprocessor warnings
	  from glextmanager.h.
	- Eric Sunshine fixed a problem in glsysbufmgr.h where it was applying
	  delete[] to a void*.	This is a big No-No.
31-Oct-2002
	- Optimized frustvis and dynavis by removing some SCF_QUERY_INTERFACE
	  calls.
	- Changed the way that objects are marked as visible by the
	  visibility cullers. Using this way they no longer need to be
	  marked as invisible. Instead a global number is increased which
	  automatically marks all objects as invisible. This change is
	  already an optimization but it also preparation for a more
	  fundamental and significant optimization that will follow later.
30-Oct-2002
	- Keith Fulton did the following:
	    - Added imposter code to engine in csMeshWrapper.
	    - Commented out imposter tag until that code is working.
	- Replaced ReportError() with ReportWarning() when an image couldn't
	  be loaded in the main loader.
	- Fixed a very bad bug in the bounding box calculation of things.
	  In some cases this calculation could go totally wrong.
	  This had an effect on various subsystems in CS like Dynavis which
	  heavily depend on bounding boxes.
29-Oct-2002
	- Norman Kramer did the following:
	    - Fixed compiling issues of csartstest and in the .mak file
	      uncommented the actual requesting of the csartsproxy which
	      makes the renderer fail now, yippee.
	    - Added a quake3 model (md3) converter kindly provided by
	      Manjunath Sripadarao <msripada@evl.uic.edu>.
	- Eric Sunshine updated the MinGW build instructions in the user manual
	  to discuss the new preferred MinGW+MSYS procedure for building
	  Crystal Space.
	- Eric Sunshine eliminated some overfull- and underfull-hbox warnings
	  in the Texinfo files reported by TeX.
	- Eric Sunshine applied patches to documentation and tutorial programs
	  to correct simple typographical errors.  Thanks to Andreas Busch
	  <nobita@t-online.de> for the patches.
27-Oct-2002
	- res did the following:
	    - GL texture bit depth can be specified through configs.
	    - Forcing a texture format didn't work.
	    - Moved code to prepare keycolored textures out of
	      csTextureHandleOpenGL::FindFormatType() into its own
	      method.
	    - Small adjustment so keycolored textures are compressed as well.
	- Fixed a few bugs in iThingState::GetPolygon() as reported by Groton.
26-Oct-2002
	- res did the following:
	    - Fixed disappearing textures when enabling compression.
	    - Added a function which checks for GL errors and optionally
	      reports them.
	    - Reenabled texture compression for GF.
	    - Enabled anisotropic filtering for GF.
	    - Windows GUI application now properly display a console window if
	      requested.
	    - Added OpenAL sound renderer to scf.cfg.
	    - Added MSVC libs to sndoal.mak.
	    - Changed inclusion of AL headers to better support the
	      Win 1.0 SDK.
	    - OpenAL plugin now uses event system to properly
	      initialize/shutdown.
	    - Fixed GL errors reported for wrong functions.
	    - Win-specific VFS vars work again.
	- Mike Handverger  did the following:
	    - Adding some methods to safely remove defs from awsPrefManager
	      Added awsKeyContainer::RemoveAll(),
	      awsPrefManager::FindSkinDef(),
	      awsPrefManager::RemoveWeindowDef(),
	      awsPrefManager::RemoveSkinDef(),
	      awsPrefManager::RemoveAllWindowDefs(), and
	      awsPrefManager::RemoveAllSkinDefs()
	    - Added the above to public interfaces as well.
	- Norman Kramer made destructor in rndbuf.h virtual.
	- Norman also removed a few compilation warnings and errors in the
	  new OpenGL renderer.
	- Norman restarted work on arts sound renderer ... compiles again.
25-Oct-2002
	- Anders Stenberg did the following:
	    - Added support for textures in new renderer. (Most calls in
	      iRender3D only has temporary implementations. They will be
	      neater later.) Also added a #define CS_USE_NEW_RENDERER in
	      csdef.h, but this is disabled by default. Note that only
	      r3dtest, the libraries, the engine plugin and the new renderer
	      will compile correctly with this enabled. (Other things that
	      aren't connected to the renderer might compile too, but most
	      plugins will fail.)
	- Marten Svanfeldt did the following:
	    - Minior fixes to r3dtest.
	    - Added support for VAR (Vertex Array Range) on those cards which
	      support it.
	    - Changed the buffer-locking mechanism.
24-Oct-2002
	- res did the following:
	    - Texture downsampling added again to OpenGL renderer.
	    - Fixed an uninitialized variable in OpenGL texture manager.
	    - Mipmapped textures are supported as render targets in OpenGL.
	    - Enabled all GL extensions in the config.
	    - Enabled texture compression for GeForces.
	    - Unfinished attempt to add rgb and alpha scaling to fx system.
	    - Glwin32 canvas correctly fills the pixel format.
	    - Fixed screenshots for 16-bit GL modes.
	    - Added support for anisotropic filtering.
	- Daniel Duhprey renamed the OpenAL sound files to avoid conflicts
	  with other sounds plugins.
	- Mathew Sutcliffe replaced false with NULL in a function that returns
	  a pointer, not a bool (csloader).
23-Oct-2002
	- res did the following:
	    - Disabled frequent heap consistency checking in MSVC debug builds.
	      This fixes the small pauses experienced. Consistency checks
	      stay enabled when CS_EXTENSIVE_MEMDEBUG is defined.
	    - Also added a leak dump for MSVC debug builds when exiting an app.
	    - Replaced some occurrences of http://crystal.linuxgames.com/ with
	      http://crystal.sf.net/.
	- Daniel Duhprey added an OpenAL plugin to CS.
22-Oct-2002
	- Matthias Braun did the following:
	    - Did a blind fix for cygwin threading...
	    - More cygwin fixes.
	- Justin Miler did some minor changes to bring phystut closer to
	  simple1.
	- Justin declared class csZBufMode in particle.h.
	- Mike Handverger Added GetDuration / GetLoopCount / GetLoopFlip to
	  iMotionTemplate for convenience.
21-Oct-2002
	- Matthias Braun did the following:
	    - Removed lexan from user.mak.
	    - Removed the cs syntax loader plugin, as noone was using this
	      code.
	- Anders Stenberg did the following:
	    - Work on implementing new render3d. No output yet except from
	      the 2D-driver. :(
	    - Added R3DTest, which currently shows a rotating white cube with
	      the new renderer. Also changed renamed gl_softrbugmgr.* to
	      gl_sysbufmgr.*
	    - Fixed an erroneous path in the r3dtest makefile.
	- Norman Kramer did the following:
	    - Removed lexan.h from css.h.
	    - Matze accidently removed the wromg classid, cssynldr != cslexan.
	    - Made AudioDevice inner class to csSoundDriverOSS.
	      Fixed bug reported by  Mihai Ganea <miaig2@myrealbox.com>.
	    - Removed the real cslexan class entry.
	    - Weird character 0xA= in the file scf.cfg.
20-Oct-2002
	- Matt Reda fixed a crash on MacOS X (in the loader) (that could
	  potentially affect other platforms) in which the format string
	  passed to vsprintf expected 2 strings and 2 floats but was only
	  getting a string and 2 floats.
	- Charlls Al'Quarra added two methods to csBasicVector which could be
	  handy sometimes: DeleteChunk(int n, int size) and
	  InsertChunk(int n, int size, csSome Item).
	- Anders Stenberg worked on new OpenGL renderer (render3d):
	    - Added an GL Extension manager for the new renderer. (Generated
	      from a Python script and XML file, both located in
	      scripts/python.)
	    - Started test implementations of iRenderMesh, iRenderBuffer
	      and iRenderBufferManager.
	- Matthias Braun did the following:
	    - Added CS_GNUC_PRINTF flag to the Report declarations in the CS
	      loader, so that the gcc compiler will report format errors in
	      the future.
	    - Fixed a small format error detected in prseffect.cpp.
	    - Also added the GNUC_PRINTF flag to the Report functions in
	      include/imap/services.h.
	- Removed some old palette code from the software texture manager.
	- iGraphics2D::FindRGB() now works again in palette mode.
	- Added iGraphics2D::CreateOffscreenCanvas() to make a canvas that will
	  work in off-screen mode.
	- Added iTextureHandle::GetCanvas() which will return a canvas that can
	  be used to render on the given texture.
	- Implemented GetCanvas() correctly in the software renderer.  OpenGL
	  implementation doesn't work yet.
	- Modified simplept so it 'shimmers' the proc texture portal.  This
	  gives a water like effect.
	- From Jochen Moench: patch to iCamera::SetFovAngle().
19-Oct-2002
	- After my changes yesterday the NASM version of the software renderer
	  was totally broken.  After long debugging I found out why.  Seems
	  that in scan.ash there is a mirror of the scan.h include file but for
	  assembly.  I removed several fields in scan.h but I forgot to remove
	  them in scan.ash with the result that the two structures didn't
	  match.
18-Oct-2002
	- Marten Svanfeldt started yet another new OpenGL renderer in
	  plugins/video/render3d/opengl. This also starts with a completely
	  new render API. This will be a long process.
	- Marten: manual addition of projectfiles for Render3D OpenGL driver.
	  Do not use if you don't know what you do. Not to be included
	  in default makefiles.
	- Removed support for gamma setting in the renderers.  This was only
	  supported by the software renderer and then only working properly in
	  8-bit mode.
	- Added SetGamma/GetGamma to iGraphics2D where it belongs.  Gamma is a
	  canvas feature.  Note that currently there are no canvases that
	  support this.
	- Eric Sunshine eliminated compilation warnings from several modules.
	- Eric Sunshine fixed a compilation error in cspthrd.cpp for platforms
	  which do not publish sys_errlist[].
	- Changed the way that SetRenderTarget() in the software renderer
	  works. As soon as a texture is set as a target of rendering
	  it will be converted to use a standard 332 palette (8-bit truecolor
	  palette). This makes it a lot easier to convert the screen
	  data to the texture.
	- Procedural textures are now fully working in the software renderer
	  (only in truecolor modes!).
	- Completely removed 8-bit support from the software renderer.
	  If people want it back we can always make 8-bit emulation mode
	  (by rendering internally to 16-bit and then transforming to
	  8-bit in Print()).
	- Also removed 8-bit support from the internal AWS renderer
	  and from the null3d renderer. For some reason it doesn't look
	  like the null renderer needs 8-bit display support :-)
	- Removed 8-bit support from the line renderer.
	- Moved iTextureManager->FindRGB() to iGraphics2D where it belongs.
	- Additionally removed iTextureManager->SetPalette(), ResetPalette(),
	  and ReserveColor().
	- Renamed csColorQuantizer::RGB() to DoRGB() to avoid a conflict
	  with a define.
	- Fixed bug with software renderer and line_table which was initialized
	  too late in some cases.
	- Fixed iso engine so it correctly initializes the 'effect'
	  pointer to NULL. This makes it work again in OpenGL.
17-Oct-2002
	- Removed a few additional procedural texture functions from the
	  iGraphics3D/iGraphics2D interfaces.
	- Started work on software implementation of SetRenderTarget().
	  To support this added the ability to generate inverse palettes
	  in software renderer textures. An inverse palette basically
	  transforms a truecolor color (15 or 16 bit) to a palette index
	  which is suitable for that texture (in the software renderer
	  every texture has its own 8-bit palette).
	  Other than this the SetRenderTarget() is currently not yet
	  operational.
	- Put the csQuantizeBla() functions in a new csColorQuantizer
	  class. This ensures that it is now possible to use multiple
	  instances of the csColorQuantizer by eliminating the use
	  of global variables.
	- Eric Sunshine eliminated compilation warnings from the OpenGL
	  renderer.
	- Eric sunshine eliminated compilation warnings from the csSaver
	  plugin.
	- A few improvements to SetRenderTarget() for software renderer.
	  Still disabled because not working properly yet.
16-Oct-2002
	- Keith Fulton added definitions and initial implementations for
	  iSharedVariable, iSharedVariableList and iImposter.  iEngine now
	  keeps an iSharedVariableList, and csMeshWrapper implements iImposter,
	  which uses iSharedVariable. See new flarge for examples of
	  definitions of both.
	- csProcTexture is now able to use the new SetRenderTarget() system.
	  And it seems to work fine. Converted all current proc textures
	  that inherit from csProcTexture to the new system.
	- Added 'persistent' flag to SetRenderTarget(). If that flag is given
	  then the original texture will be copied in BeginDraw() so that
	  the previous contents is preserved. If that flag is not given
	  then the previous contents is ignored and it is assumed you fully
	  update the texture yourselves.
	- simplept works nicer than ever with the new SetRenderTarget() system.
	- Completely removed the old procedural texture implementation from
	  both the software and OpenGL renderers.
	- Here is a summary on the status of the new procedural texture system.
	    - Software renderer procedural textures are TOTALLY broken. This
	      needs to be redone again.
	    - Simplept works VERY well in OpenGL (very fast and very nice
	      looking).
	    - The pixel drawing procedural textures (flame, plasma, dots,
	      water, ...) are slower in OpenGL then they were before.  The
	      reason is that drawing a pixel in OpenGL is a LOT slower than in
	      software renderer.  To solve this problem I will add new API
	      functions to either draw series of pixels or else to blit memory
	      areas to the screen (or texture).
	    - For some reason I cannot render at vertical line 0.  i.e. a
	      g2d->DrawPixel (i,0,color) will do nothing.  That means that one
	      line of the procedural texture will remain whatever contents the
	      screen has at that moment.  I have no clue on how to solve this
	      yet.
	- Fixed the bug with one line of the proc texture not rendering
	  properly.
	- Fixed the flame in flarge to be right orientation again.
	- Removed several more procedural texture related things.
	- Fixed aws for latest changes. AWS procedural texture support
	  will most likely be broken though.
	- Added iGraphics2D->DrawPixels() and Blit() which offer faster
	  ways to render pixels on a canvas. Especially for OpenGL.
	  Still not working properly though.
	- OpenGL version of Blit now works and is a LOT faster than
	  individual pixel drawing. Fixed fire and plasma procedural textures
	  to use the new Blit() routine.
15-Oct-2002
	- Keith Fulton did the following:
	    - Added support for iSharedVariables and iImposter.
	    - Added example <variables> list and <imposter> mesh.
	- Started work on the OpenGL implementation of SetRenderTarget().
	  Added code in BeginDraw() to copy the texture to the display.
	  Added code in FinishDraw() to copy the display back to the
	  texture. This is all untested for now.
	- Eric Sunshine made the following changes to the project configuration
	  phase and makefiles.
	    - Augmented chkpythn.sh so that it now also recognizes python99.lib
	      and libpython99.a, which are common names on Windows, in addition
	      to the standard libpython9.9.a Unix-style name.
	    - Configuration scripts, build scripts, and makefiles now try to be
	      more robust concerning whitespace in pathnames.  They now do a
	      better job, for example, of dealing with tools, headers, and
	      libraries which reside somewhere inside "Program Files" on
	      Windows.	While this handling still is not perfect, it is
	      considerably improved.
	    - Added function shellprotect() to confutil.sh.  This function is
	      used by client configuration scripts to protect special
	      characters, such as spaces and backslashes, from the shell.
	    - chktools.sh now exports the NASM.BIN makefile variable.
	    - Makefiles for Cygwin and Mingw now use -Wno-unknown-pragmas to
	      eliminate warnings about unknown pragmas which seem to crop up
	      often in headers intended primarily for MSVC.
	- Eric Sunshine created and released a new version of the
	  csmingwlibs_0.xx.exe archive.	 The following changes were made:
	    - Fixed typographical error in header path ("inlucde" rather than
	      "include") which prevented headers from being found by the
	      C-preprocessor.
	    - Fixed so that only short pathnames are placed in environment
	      variables.  Previously, was using long names which potentially
	      contained spaces.	 The spaces would wreak havoc with commands
	      invoked from makefiles rules.
	    - Restructured and significantly simplified the package hierarchy.
	      This restructuring also led to simplification of setupenv.sh
	      script.
	    - Added multiple-invocation protection to setupenv.sh.  This is
	      important because the uninstall phase does not "unedit" the Msys
	      "profile", and it is conceivable that someone could install
	      csmingwlibs several times.  It would be undesirable for
	      setupenv.sh to run multiple times since it would result in
	      unnecessary bloat of environment variables, thus the
	      multiple-invocation protection.
	    - Upgraded the tools and resources to the most recent versions
	      wherever possible.
	    - Simplified the library resources by providing simple statically
	      linked library archives, rather than cumbersome lib+dll
	      combinations.
	    - Cleaned up csmingwlibs.nsi and fixed some minor problems.	 Also
	      now does a better job of preserving global register state for
	      function invocations and generally is more robust.
	    - Improved documentation.  Fixed comments in build script.
	    - The setupenv.sh script now sets the PYTHON_INC, PYTHON_LIB, and
	      PYTHONPATH environment variables.	 The first two of these
	      variables are used by the CS/bin/chkpythn.sh script.  The final
	      variable is used by Python itself.
	    - Attemped to upgrade to Python 2.2 from Python 1.5 but, even after
	      several days' of attempts, failed to create a usable static link
	      library with Mingw.  Consequently, resorted to continued use of
	      Python 1.5 from deprecated cs_mingw_0.xxx.exe package.
	    - Converted README to use CRLF terminators rather than LF so that
	      Notepad.exe users will be able to read the file.
	    - Moved the generated setupenv.sh script from the root csmingwlibs
	      directory to csmingwlibs/bin.
14-Oct-2002
	- Added SetRenderTarget() and GetRenderTarget() to the
	  iGraphics3D API. Also added default (empty) implementations
	  to all renderers. This will be used for the new procedural
	  texture design.
	- Eric Sunshine worked around bug in MSVC6/7 compilers where they
	  experienced "internal compiler error" when encountering function
	  CreateSystem() in walktest.cpp which was both a local function and
	  declared "extern".
	- 'make clean' no longer deletes all .txt files.
	- Eric Sunshine worked around a Mingw gcc 3.2 optimization bug which
	  afflicted makedep and caused it to crash.  The problem would occur at
	  any optimization level above -O in remove_dotdot() which was
	  allocating about 4.5 kilobytes on the stack.	Allocating via the heap
	  rather than the stack worked around the problem.
13-Oct-2002
	- Norman Kramer did the following:
	    - Fixed long standing bug in the sound renderer where non looping
	      static sounds were never removed.
	    - Directsound3d renderer had the wrong class id.
	    - Cleaned up the embedded interface mess.
	    - ds3d now actually works.
	    - Added ZLIBS.FLAGS to map2cs.mak.
	- Fixed OpenGL/backbuffer implementation of the procedural
	  textures so that it at least doesn't crash anymore. It also
	  seems to work mostly except that the rendering of a procedural
	  texture also causes the proc texture to be rendered on the
	  main screen.
	- Eric Sunshine corrected some outdated references to the old makefile
	  variables MAKEDEP.INSTALLED and NASM.INSTALLED to reflect the new
	  names MAKEDEP.AVAILABLE and NASM.AVAILABLE, respectively.
	- Eric Sunshine made the following changes to winconf.bat:
	    - Now sets the CC, CXX, and LINK variables in config.mak since they
	      are no longer set by the makefile.
	    - Now adds -fvtable-thunks to CFLAGS.SYSTEM since this is no longer
	      done by the makefile.  Unfortunately, with gcc 3.x, this option
	      is deprecated and produces a harmless warning, but it is still
	      required for earlier releases of gcc, so we take the safe route
	      and use it.  (Note that this only affects Mingw users who are not
	      using Msys.)
	    - Now checks if the linker flag -lmingwex is required.  This flag
	      is needed by some interim Mingw releases.
	- Eric Sunshine removed the -fno-rtti check from djgpp/dosconf.bat
	  since CS should no longer employ that flag.  (The Unix and Unix-like
	  ports stopped using it quite some time ago.)
	- Eric Sunshine added CS_STRUCT_ALIGN_4BYTE_BEGIN and
	  CS_STRUCT_ALIGN_4BYTE_END to cssysdef.h to support strict packing of
	  structures.  This is needed on some platforms (such as Sparc) for a
	  couple structures used by the project.  Augmented csRGBcolor and
	  csRGBpixel to employ the 4-byte packing macros.  Thanks to Ferris
	  McCormick <fmccor@inforead.com> for reporting the packing problem
	  afflicting Sparc.
	- Eric Sunshine fixed aws.mak so that it no longer reports an error
	  about missing "plugins/aws/slp.cpp.h".
	- Eric Sunshine made the following changes to the project configuration
	  phase and makefiles:
	    - Libraries zlib, libpng, and libjpeg are now auto-detected.
	    - CFLAGS and LFLAGS for zlib, libpng, and libjpeg are now
	      determined automatically.
	    - In addition to the default paths (/usr/include, /usr/local/lib,
	      etc.), auto-detection will now check the CS/libs directory and
	      the /sw directory which is the default package installation
	      location of Fink, the MacOS/X package management facility.
	    - Auto-detection now works correctly even if directory names are
	      decorated with version numbers (for example,
	      CS/libs/libpng-1.2.4).  For libjpeg, auto-detection will
	      recognize both CS/libs/libjpeg* and CS/libs/jpeg* (which matches
	      the "jpeg-6b" directory into which the standard libjpeg archive
	      unpacks).
	    - Removed hard-coded CFLAGS and LFLAGS from platform-specific
	      makefiles.
	    - Fixed client makefiles to use the new auto-detected CFLAGS and
	      LFLAGS.
	    - zlib -I, -L, and -l directives are now used only where needed
	      rather than globally throughout the project.  In particular, they
	      are used for the vfs, pngldr, and jngldr plugins, and for csutil
	      (which contains csArchive).
	    - Worked around a bizarre bug in the Mingw/Msys "mkdir" command
	      which caused the check for "mkdir -p" in chktools.sh to fail.
	      Specifically, given the path "mkdir -p mkdtest/mkdtest/mkdtest",
	      it would mysteriously fail (creating only the topmost directory).
	- Eric Sunshine eliminated a slew of compilation warnings throughout
	  the project.
	- Eric Sunshine modified the makefiles so that, on Unix platforms,
	  the X11-related plugins are built only if the configuration phase
	  discovered the presence of X11, and the OpenGL-related plugins are
	  built only if the configuration phase discovered OpenGL.
	- Eric Sunshine eliminated several warnings issued during invocation of
	  "make depend".
12-Oct-2002
	- Norman Kramer did the following:
	    - csMutex::LockTry always returned false.
	    - MixerFunction now runs in a thread if the loaded sounddriver is
	      threadaware (currently oss driver only).
	    - Oss driver no longer implements a timer but relies on the
	      sound renderer.
	    - Added temporary ThreadAware method which returns false for all
	      but the oss driver.
	- Jonathan Tarbox eliminated some MSVC warnings from the opcode plugin.
11-Oct-2002
	- Some more cleanups in the OpenGL renderer.
10-Oct-2002
	- Fixed a bug in the OpenGL canvases where a glEnd() was called
	  (when writing text) without a corresponding glBegin().
	  Thanks to Mihai Ganea <miaig2@myrealbox.com> for spotting and
	  fixing this bug.
	- Fixed a bug in dynamic lighting where it would cause bad shadows
	  if some object enclosed another. Added an additional test to see
	  if a polygon is really covering another to avoid this.
	- Fixed a bug in the engine. When creating a dynamic light it would
	  have one reference too much. This also fixes the problem of
	  dynamic lights not deleting in walktest.
	- Fixed a few other similar bugs where a csRef was returned as
	  a csPtr and it was assumed that a DecRef() would happen in that
	  case (which no longer occurs since there is a constructor
	  from csRef to csPtr).
	- Eric Sunshine made the following changes to TiXmlString:
	    - Major optimization to methods which append and access strings and
	      characters, and which access length.  Problem was that the class
	      did not have an instance variable recording the string's length.
	      This resulted in two types of major slow down.  First, anytime it
	      needed to know its own length (which it did quite frequently --
	      even when accessing a single character with operator[], and when
	      appending), it had to scan the entire string with strlen().
	      Second, in order to append anything (even a single character), it
	      used strcat() or strncat() which resulted in yet another complete
	      string scan.  Considering that the XML parser appends characters
	      one at a time, this meant that every single character appended
	      was accompanied by at minimum two complete string scans.	For
	      large strings built up character by character, this overhead was
	      a killer.
	    - Fixed each of the comparison operators (==, <, >).  Each returned
	      incorrect results for the boundary cases.
	    - Folded out a small amount of redundant code (but in reality, the
	      bulk of the code implementing this class is redundant and should
	      be folded out).
	- Fixed a bug in lighting in combination with DrawPolygonMesh
	  (fastmesh) things. Apparently the super lightmaps were not marked as
	  dirty.
	- Eric Sunshine eliminated several compilation warnings from the OpenGL
	  renderer.
9-Oct-2002
	- Matthias Braun converted the error defines for threads to an
	  anonymous enum, this makes it nicer looking.
	- Marten Svanfeldt did the following:
	    - ARB_vertex_program testscript. Used by ef1.xml and simplevp.
	    - Added support for ARB_vertex_program.
	- For some reason include/cssys/win32/csosdefs.h was full of
	  ^M (carriage return) characters. This failed the compilation.
	- Fixed other ^M chars in other thread related files.
	- Greatly cleaned up OpenGL renderer again (super lightmap cache).
	- Eric Sunshine made the following changes related to the CS threading
	  API, implementation, and configuration:
	    - Additional cleanup of the API.  Also added and updated comments.
	    - Eliminated the csRefCounted class from cssys/thread.h.  Instead,
	      now uses the existing csRefCount class from csutil/refcount.h.
	    - Renamed iRunnable to csRunnable and derived it from csRefCount
	      rather than iBase.  The rationale for this change is that
	      threading can be considered lower-level than SCF, therefore it
	      should not rely upon SCF.	 It is conceivable, for example, that
	      SCF itself could benefit from the threading-related API in order
	      to become thread-aware, thus we do not want a circular
	      dependency.
	    - Updated the API to return csRef's rather than csPtr's since csPtr
	      is a dangerous backward-compatibility hack.  In particular, csPtr
	      will leak the resource if the caller of a function returning the
	      csPtr ignores the returned value.	 As a general rule, use csRef
	      for all new API.
	    - Eliminated the CS_SAFE_LOCKWAIT() and CS_SAFE_RELEASE() macros
	      since it proved difficult to support this functionality in an
	      abstract and portable way without resorting to extreme ugliness.
	      In particular, on many platforms, the pthread implementation of
	      these "functions" is performed with macros which must be used in
	      pairs within the same scope, thus it was not possible to
	      encapsulate them in abstract methods.
	    - Moved cspthrd.h from include/cssys to libs/cssys/general, and
	      winthread.h from include/cssys/win32 to libs/cssys/win32 since
	      these files are no longer included by the public
	      include/cssys/thread.h on account of removal of
	      CS_SAFE_LOCKWAIT() and CS_SAFE_RELEASE().
	    - Added new generic makefile variables CSTHREAD.SRC, CSTHREAD.INC,
	      CSTHREAD.CFLAGS, and CSTHREAD.LFLAGS.
	    - Augmented mk/unix.mak and mk/dos.mak to choose the proper
	      threading implementation based upon the platform's configuration.
	    - Upgraded all of the platform-specific makefiles to use the
	      threading facilities if available.
	    - Eliminated the now unused CS_THREAD and CS_THREAD.INC makefile
	      variables.  Eliminated the now unused CS_THREAD and CS_THREAD_INC
	      volatile.h defines.
	    - Fixed line-termination problem in cspthrd.cpp where it contained
	      an extra carriage return on each line.
	- Eric Sunshine fixed bug in cs.mak where the "clean" target would
	  invoke "rm -f" without any filenames.
	- Eric Sunshine made the following additional changes to the CS
	  threading API:
	    - Merged csThread::Stop() and Kill() since it was not possible to
	      reliably support both methods of killing a thread (semi-dirty and
	      completely-dirty, respectively).	For instance, Windows only
	      supports Kill()-style functionality via TerminateThread(),
	      whereas many pthread implementations only support Stop()-style
	      functionality via pthread_cancel(), though a few also support
	      Kill()-style via pthread_kill().
	    - Changed csRunnable so that it no longer inherits from csRefCount,
	      nor from any other class.	 It now declares abstract IncRef() and
	      DecRef() methods itself.	This is an interim solution for the
	      problem of an SCF class wanting to also implement csRunnable,
	      until we provide more comprehensive support for multiple
	      reference-counted interfaces per class without having to resort
	      to SCF.  (That is, csRefCount should support more flexible usage
	      in the future.)
	- Fixed a bug in the OpenGL renderer which caused all levels that
	  didn't use DPM (DrawPolygonMesh) to render incorrectly (no
	  lightmaps).
8-Oct-2002
	- Norman Kramer did the following:
	    - Threading related classes now inherit from a csRefCounter struct.
	    - The static Create method now return a csPtr.
	    - All the above mean objects of these classes can now be
	      reference counted with the csRef template.
	    - Added virtual destructor to the csRefCounter baseclass so the
	      right destructor in DecRef is called.
	    - Windows implementation for CS threading API.
	- Eric Sunshine made the following changes:
	    - Added the new makefile variable MKDIRS which, given a path
	      representing a directory, creates that directory as well as any
	      missing parent directories.  This complements the existing MKDIR
	      variable.
	    - Augmented the project configuration phase so that, for Unix and
	      Unix-like environments (including Cygwin and Mingw/Msys), it
	      automatically discovers the appropriate command for creating a
	      directory including missing parents.  Currently recognizes "mkdir
	      -p" and the old "mkdirs" commands.
	    - Created mkdirs.bat for Windows/DOS users who are not using a Unix
	      emulation shell.	This batch file emulates "mkdir -p" using only
	      DOS commands.
	- Eric Sunshine made the following changes to the "install" makefile
	  target:
	    - Fixed bugs in install.mak which prevented it from copying all of
	      the images from the CS/docs/html directory and subdirectories.
	    - Simplified some of the operations in install.mak to ease future
	      maintenance (though, this file could use a lot more work).
	    - Augmented install.mak so that it is now capable of copying files
	      into the installation directory at an arbitrary directory depth.
	    - Using the above enhancement, flarge, partsys, and isomap are now
	      copied into appropriate subdirectories of ${INSTALL_DIR}/data.
	      Although these demonstration files are not required for
	      development (that is, they do not belong in the SDK), it is now
	      deemed important that they should be present in order to reduce
	      problem reports from novice users.  As an example, if a novice
	      user installed the project and then double-clicked on WalkTest to
	      launch it, WalkTest would terminate immediately on account of its
	      inability to find its "default" map file (which is typically
	      "flarge").  This was not only confusing for novice users, but it
	      also made Crystal Space appear fragile (since the user might
	      think that it had merely crashed).  On the other hand, with the
	      map files installed, even a novice user can double-click on
	      WalkTest and successfully interact with it.
	    - Fixed a number of makefiles throughout the project which failed
	      to specify their configuration and data files for installation.
	      Also fixed a few makefiles which placed their configuration and
	      script files in the wrong locations.
	- Greatly cleaned up the OpenGL polygon buffer implementation.
	  Also reduced memory usage (removed unused colors array) and
	  fixed a memory leak.
	- Again reduced memory usage in the OpenGL renderer by
	  removing several unneeded growing arrays. More cleanups.
	- Fixed a bug in OpenGL renderer which I introduced a few moments ago.
	- Eric Sunshine fixed a bug in csArchive where it was incapable of
	  correctly reading Zip archive directories, and where it corrupted
	  Zip archives on 64-bit hardware.
	- Eric Sunshine made the following changes to support platforms for
	  which "ranlib" must be run against newly installed libraries:
	    - Augmented the project configuration phase so that it discovers
	      the "ranlib" command.  If present, it sets the CMD.RANLIB
	      makefile variable.
	    - Augmented install.mak so that it runs "ranlib" on the installed
	      static library archives.
7-Oct-2002
	- Norman Kramer added next iteration of cs threading classes.
	- Removed some obsolete texmem.{cpp|h} files in the 3D renderer
	  directories.
	- Eric Sunshine made the following documentation-related changes:
	    - Fixed Texinfo error reported by makeinfo.
	    - Made aesthetic improvements to FAQ.
	    - Worked around problem in Texinfo files where some versions of
	      makeinfo are pickier than others and dislike @xref{} references
	      which span multiple lines.
	    - Updated the Apple/NeXT build and platform-internal documentation
	      to reflect fact that it is now possible to launch applications by
	      double-clicking on them from the Finder or Workspace.
	    - Greatly expanded the discussion of CrystalSpaceRoot for the
	      Apple/NeXT platforms and gave it a more prominent position in the
	      documentation since it is important for people to set it if they
	      wish to launch applications from the Finder or Workspace.
	    - Apple/NeXT build instructions now talk about the makefile
	      "install" target, as well as INSTALL_DIR.
6-Oct-2002
	- Norman Kramer did the following:
	    - Added matrix3 includes in OpenGL_ext.
	    - Made classinterface for threading.
	    - Renamed THREAD.INC to CS_THREAD.INC.
	- res did the following:
	    - Replaced some EPS files w/ versions without
	      %%BeginBinary / %%EndBinary
	    - Removed '% -*-texinfo-*-' which appeared on the first page.
	    - Removed .vcproj and .sln files form .cvsignore.
	- Eric Sunshine upgraded CS/docs/texinfo/texinfo.tex to the most recent
	  version.
	- Eric Sunshine enabled automated MSVC7 project file generation.
4-Oct-2002
	- Jonathan Tarbox added a SquaredNorm() member function to the
	  csDVector class
	- Eric Sunshine eliminated volumes of compilation warnings throughout
	  the project.
	- Updated faq related to smart pointers and added new entry about
	  plugin loading.
	- Eliminated CS/data/tex/arial9.csf since it is considered unnecessary.
	- Fixed both engine and DrawPolygonMesh implementations so they
	  correctly work on non-lit polygons.
	- Eric Sunshine made the following changes to the Apple/NeXT port:
	    - Moved libs/cssys/next/openstep/instpath.cpp to
	      libs/cssys/next/shared/NeXTInstallPath.cpp since it is
	      sufficiently generic to be shared among the Apple/NeXT platforms.
	    - Added libs/cssys/next/shared/NeXTInstallPath.h.
	    - Cleaned up the code comprising the Apple/NeXT csGetInstallPath()
	      and NeXTInstallPath().
	- Eric Sunshine added new csGetUsername() to cssys/sysfunc.h which
	  returns the name of the user running the application.	 Added
	  implementations of csGetUsername() for Unix, Windows, MacOS/X,
	  MacOS/X Server (Rhapsody), OpenStep, and NextStep.
	- Eric Sunshine added an iFile::Flush() method.
	- Eric Sunshine made the following changes the the stdrep plugin:
	    - Works with VFS paths rather than physical paths.
	    - Creates the "debug" file in the VFS temporary directory (/tmp)
	      rather than the current working directory.
	    - The debug log file name now contains the owner's username if the
	      username can be determined.  Rather than the old "debug.txt", the
	      name is now "csdebug-username.txt" (or "csdebug.txt" if the
	      username is unknown).
3-Oct-2002
	- Matthias Braun fixed a global object that caused trouble with glibc.
	- Anders Stenberg cleaned up DrawPolygonMesh in the old OpenGL
	  renderer. This breaks fog and is a bit slower. But this will
	  hopefully get fixed soon.
	- Charlls Al'Quarra fixed the indentation in cloth plugin. Some
	  cleanups.
	- Finalized the implementation of the indexed operations in the engine
	  sequence manager.
	- Started work on actually being able to pass parameters to sequences.
	- Made sure sequences and triggers are always parsed at the end even if
	  they are not specified at the end.
	- Added parsing of <params> blocks with sequences.
	- Completely changed the way parameters are fetched in the engine
	  sequence manager.  Added new iParameterESM interface which is a
	  parameter resolver.  Removed all indexed operation versions.
	- Parameters in sequences now seem to work.  Flarge has an example.
	  There are still a few limitations left:
	    - When running one sequence from another running sequence it is not
	      possible to give parameters to that other sequence.  It is only
	      possible to give parameters from within a trigger.  When a
	      sequence fires another sequence the parameters from that sequence
	      are given to the other sequence.	This is potentially dangerous
	      and I will fix this.
	    - Some of the operations will not work properly with parameters.
	      More importantly the fade, move, and rotate type of operations
	      (the ones that cause a timed operation will not work properly).
	- Eric Sunshine eliminated compilation warnings.
	- Changed the way that timed operations are created in the
	  engine sequence manager. They are now much more optimal (only
	  query for the object on which they operate once instead of
	  every frame) and they also work properly with parameters now.
	- Changes <params> to <args> and <par> to <arg> for engine
	  sequence manager parsing.
	- Improved Doxygen documentation of engine sequence manager.
	- Eric Sunshine upgraded the build process so that the Apple/NeXT ports
	  now create application wrappers for generated GUI programs.  The new
	  script CS/libs/cssys/next/appwrap.sh knows how to wrap applications
	  for MacOS/X, MacOS/X Server (Rhapsody), OpenStep, and NextStep.
	  Support files appropriate to each platform, such as Info.plist, are
	  inserted into the wrapper.  Added .icns and .tiff application icons.
	  These are also copied into the wrapper and referenced from the
	  synthesized .plist files.  There are a couple important reasons for
	  creating appication wrappers for the CS programs:
	    - It allows programs to be launched from the Finder/Workspace.
	      Without application wrappers, programs can only be launched from
	      the command-line.	 Note that you must set the user default
	      CrystalSpaceRoot to point at the Crystal Space directory (either
	      the installed or development directory) in order for this to work
	      since Crystal Space programs need to be able to find their
	      resources.
	    - Presumably this will solve the problem on MacOS/X where CS
	      programs can not obtain keyboard input.  Apparently, Cocoa
	      considers programs not contained within app wrappers to be
	      "background" programs, thus they are never allowed to have
	      keyboard focus.  A properly formed application wrapper is
	      reported to cure this problem.
	- Removed a very old hack in the engine (camera_hack).
	- Eric Sunshine fixed compilation errors in engseq and csparser.
	- Eric Sunshine fixed a resource leak in the OpenGL procedural texture
	  renderer.  It was leaking a csOpenGLProcBackBuffer2D object.
2-Oct-2002
	- Toni added a small fix to simplevp so that false is returned if
	  vfs cannot be loaded.
	- Cleaned up new thing smoothing code (code style, please people
	  a tab == 8 spaces but indentation MUST be with 2 spaces!!!).
	- Optimized thing smoothing a little bit.
	- Added a few <smooth /> options in flarge.
	- Removed several bad IncRef() calls in csimage.
	- Fixed 'bugplug' console command in walktest.
	- Added iMeshObject functions: SetColor(), GetColor(),
	  SetMaterialWrapper(), and GetMaterialWrapper(). These functions
	  are convenience functions so that it is easier to change
	  color/material for all objects without having to query
	  for the state interface. Not all mesh objects implement
	  those functions though. For example, a thing mesh object
	  doesn't implement either of them since it doesn't have a single
	  color or material (every polygon has its own color/material).
	- The change above greatly simplifies the engine sequence manager
	  functions to set color and material.
	- Started implementing the indexed versions of the operations in the
	  engine sequence manager.
	- More implementation of the indexed versions of the operations in the
	  engine sequence manager.
	- Fixed csdemo to refer to the cs096 dir instead of cs094 for
	  demodata.zip.
1-Oct-2002
	- Philip Wyett did the following:
	    - Added a couple of fake returns to OpenGL_ext to stop MSVC
	      erroring until the final implementation is in place.
	    - Commented out assert on 'num_sides', now it has been commented
	      out of function input params (haze).
	    - Changed engseq to allow correct access and prevent crasher
	      under Windows.
	- Toni added a patch from Oriol Esteve: add Smoothing for things... to
	  enable it just set the <smooth /> in the params section of the
	  thing. It takes a bit more to recalc the lights, but i think it it
	  worth it. This code is stable but experimental, but feel free to
	  play.
	- Added the notion of parameters to the base sequence manager.
	  A parameter is a generic iBase* parameter which can be any
	  SCF interface internally.
	- Fixed csdemo and the engine sequence manager for the changes
	  above.
	- Eric Sunshine made CS/bin/arch.sh more robust.  It now correctly
	  handles the case on Linux where the user does not have permission to
	  read /proc/cpuinfo.
	- Eric Sunshine updated jobber.pl so that it now fakes up CC and CXX
	  using `false' rather than `true' for the SourceForge shell machine.
	  Using `false' allows the makefile configuration phase to complete
	  successfully, whereas `true' caused some tests to fail.
	- Eric Sunshine fixed CS/docs/support/devapi.dox so that it no longer
	  refers to the obsolete CS/support directory.
	- Eric Sunshine re-enabled the devapi documentation build and publish
	  task in jobber.pl since it appears that the new SF shell server is
	  capable of building this documentation set.
	- Eric Sunshine eliminated numerous compilation warnings throughout the
	  project.
	- Added the ability for the engine sequence manager to accept
	  parameters. This isn't finished yet so it will not work.
	  The idea is that you will be able to define sequences that can
	  work with different sets of objects (i.e. a sequence to open a
	  door that you can reuse for several doors).
	- Fixed a bug recently introduced in the sequence manager.
30-Sep-2002
	- Matthias Braun added a comment to graph2d.h describing what is part
	  of the clipping rectangle.
	- Norman Kramer modified chkxfree.sh so that it also checks for
	  libXxf86vm.a (SuSE8.0 only comes with the .a).
	- Norman Kramer fixed cs2xml so that: LIBRARY 'blah' () is now
	  tranformed into <library>blah</library>.
	- Reverted a downscaling fix in OpenGL renderer for 2D images.
	- Fixed simplept so it works again. Basically there was a problem
	  with timing of asking for the 3D interface. Still doesn't work
	  with OpenGL for some reason.
	- Added an assert in OpenGL to check for a case that should
	  never happen but which apparently occurs on some systems (texture
	  dimensions 0).
	- Eric Sunshine made the following changes to the project configuration
	  mechanism:
	    - Dynamic configuration is now verbose.  The user is notified as to
	      which checks are being performed, as well as the result of each
	      check.
	    - Added CS/bin/confutil.sh which provides configuration utility
	      functions.  These functions are used by all of the other dynamic
	      checks.  This script publishes the following functions.
		- msg_checking()
		    Reports that a check is in progress.
		- msg_result()
		    Reports the result of a check.
		- msg_inform()
		    Provides an informational message to the user.
		- precondition()
		    Asserts that the specified condition is true upon entry to
		    a block.
		- postcondition()
		    Asserts that the specified condition is true upon exit from
		    a block.
		- checkprog()
		    Checks for the presence of a program in the PATH.
		- checktool()
		    Same as checkprog(), but also reports its results to the
		    user.
	    - The precondition() and postcondition() functions are now employed
	      by many of the configuration scripts to ensure that the scripts
	      are run in the correct order.  For example, chkheadr.sh relies
	      upon CXX being properly defined, so it specifies that requirement
	      as a precondition.  If the precondition assertion ever fails,
	      this means that someone forgot to run comptest.sh first -- or
	      they forgot to manually provide a value for CXX.
	    - Removed CS/bin/checkprog.sh since its functionality was
	      incorporated into confutil.sh and enhanced.
	    - Renamed CS/bin/haspythn.sh to chkpythn.sh and greatly enhanced
	      its functionality.  In addition to locating the Python header and
	      library directories, it now recognizes corrupt/incomplete Python
	      installations (such as the MacOS/X Jaguar installation which is
	      missing the static link library), and discovers the exact
	      compiler and linker flags needed to build a Python program or
	      plugin.  The dynamically-determined compiler and linker flags are
	      now published to the makefile system, thus relieving the
	      makefiles of the duty of determining this information on their
	      own, and freeing the user from having to manually edit the
	      makefiles when things go wrong.
	    - Added CS/bin/chkpthrd.sh which determines if pthread support is
	      available, and figures out necessary compiler and linker flags.
	      This is used by chkpythn.sh, for instance, since some Python
	      builds require pthread.
	    - Added CS/bin/chkrdlin.sh which determines if readline/history
	      support is available, and figures out the necessary compiler and
	      linker flags.  This is used by chkpythn.sh since some Python
	      builds require readline/history.
	    - Made the qint() check in comptest.sh more robust to avoid the
	      problem that, on some platforms, the test program would simply
	      crash with a bus error.  Also, in the case of cross-compilation,
	      the test program would fail to run.  These cases were difficult
	      to catch, and they messed up the output from the configuration
	      scripts.	The new approach properly handles both classes of
	      problems.
	    - Augmented CS/bin/arch.sh so that it handles the following
	      additional cases:
		- Recgonizes the apparent inverted `uname -m' and `uname -p'
		  output from MacOS/X.
		- Now recognizes both upper- and lower-case, instead of only
		  lower-case, for the the following CPU types: ppc, ix86,
		  i86pc, m68k.
		- Now recognizes CPU type "powerpc" (in addition to "ppc" which
		  it already recognized).
	    - Merged cygconf.sh and msysconf.sh into win32conf.sh.  Generalized
	      win32conf.sh so that it is suitable for both environments.
	    - Augmented chkxfree.sh so that it is no longer a fatal
	      configuration error if X11 is missing.  It is conceivable that a
	      user might have only SVGA installed, rather than X11, so it
	      doesn't make sense to bomb out if X11 is absent.	It is further
	      conceivable that a user might simply want to build some of the
	      libraries and non-GUI programs, therefore it is insensible to
	      penalize a user for lack of X11.
	    - Simplified cspython.mak considerably since chkpythn.sh now
	      determines necessary compiler and linker flags automatically and
	      dynamically, thus this is no longer the responsibility of
	      cspython.mak.
	    - Added copious documentation to all of the configuration scripts.
	- Eric Sunshine eliminated several compilation warnings throughout the
	  project.
29-Sep-2002
	 - Norman Kramer fixed OpenGL_ext so it compiles again.
28-Sep-2002
	- Philipp Aumayr worked a bit more on OpenGL_ext.
	- Fixed a new bug with iSector->HitBeam() in octree based
	  levels.
	- Added new set material operation to the engine
	  sequence manager. Also added the appropriate command
	  to the sequence parser. This new command is able to
	  change the material of genmesh, ball, sprite3d, cloth,
	  and particle systems.
	- Extended new material operation so you can set a material
	  for an individual polygon too.
	- Cleaned up all unimplemented functions (can always add them
	  later while implementing them) and also removed all warnings
	  in engine sequence manager.
27-Sep-2002
	- res changed the lighting code in ball and genmesh; now it is assumed
	  that distance light-object in object space is equal to the distance
	  in world space; this is wrong with "soft" scaling.
	- Norman Kramer fixed the spr2d loader: V token was not registered.
	- Added new set and fade color operations to the engine
	  sequence manager. Also added the appropriate commands
	  to the sequence parser. These new commands are able to
	  change the color of genmesh, ball, sprite3d, cloth,
	  terrfunc, stars, and particle systems.
	- Eric Sunshine added appropriate PNG/MNG makefile definitions to
	  next.mak.
26-Sep-2002
	- res fixed a division by 0 in UpdateLighting() under some
	  circumstances (genmesh and ball).
	- Norman Kramer did the following:
	    - Uvanimation is now recognized by cs2xml.
	    - Renamed ANIMATE's "type" node to "timing" node.
	    - Added missing break in a case case (cs2xml).
	    - Empty nodes with names now also get their own "name" attribute
	      (cs2xml).
	- Matthias Braun added a missing #include "csutil/ref.h".
	- Keith Fulton added optimization at Jorrit's request which
	  uses integer add for non-overflow addition of pixels
	  instead of per component addition in dynamic ambient lighting.
	- Engine sequence manager is now registered to the object
	  registry when it is loaded by the main loader (it will also
	  first check if it is already in the registry and then use that).
	- The engine will now also try to find and load the engine
	  sequence manager. It will also feed the current camera to it
	  every frame.
	- Implemented 'onclick' trigger condition in the engine
	  sequence manager so you can now listen to clicks on meshes.
	  Untested...
	- Onclick seems to work mostly but HitBeam() is not accurate
	  enough. More work later...
	- Replaced most 'entity_...' stuff in flarge with new sequencer
	  operations.
	- Removed support for most entity related stuff in walktest.
	  A few still remain.
	- Fixed several memory leaks with functions returning
	  a csPtr casted from csRef and which still assumed that a
	  DecRef() would happen (which it doesn't now because there
	  is a constructor for csPtr from csRef which does an IncRef).
	- Added the ability to start a trigger disabled in the trigger
	  loader.
	- Started working on cleaning up the sector HitBeam() routines
	  and also making them more accurate. Unfinished so still unused
	  at this moment.
	- Implemented iMeshObject::HitBeamOutline() and HitBeamObject()
	  for things.
	- Fixed bad csRef handling of font in Dynavis.
	- Fixed frustvis and dynavis handling of IntersectSegment().
	  This fixes several problems with iSector->HitBeam() not working
	  properly in all cases.
	- Changed the API of iVisibilityCuller->IntersectSegment() to
	  make it possible to use it for non-thing meshes too.
	- Fixed implementation of frustvis and dynavis IntersectSegment()
	  to also return hits with non-thing meshes. Octree culler is
	  not fixed for this.
	- Cleaned up iSector->HitBeam() considerably.
25-Sep-2002
	- Philipp Aumayr splitted up polygon buffer to multiple files
	  (OpenGL_ext).
	- Sequence manager (the old one) can now cope with null trueSequence
	  and falseSequence in the condition.
	- Added the ability to validate triggers from within a sequence.  Using
	  this I added the ability for the door in flarge to close again once
	  the camera moves away from the door.	Disabled for now due to bugs...
	- Eric Sunshine fixed spoofdir.php so that it synthesizes valid URLs
	  for pathnames containing embedded spaces and other special
	  characters.
	- Eric Sunshine changed the Mingw port so that the CC and CXX compiler
	  settings are determined dynamically via the comptest.sh script,
	  rather than being hard-coded in the makefile.
	- Eric Sunshine augmented the Mingw port so that it determines
	  dynamically if the -fvtable-thunks compiler option should be used,
	  rather than hard-coding it into the makefile.	 Although this option
	  was recommended for earlier versions of Mingw, in the most recent
	  Mingw (gcc 3.2) it is deprecated.
	- Eric Sunshine eliminated compilation warning in ddraw and ddraw8
	  canvases regarding promotion of bool to int when passed through
	  vararg (...).
	- Finally got the door in flarge correctly opening AND closing.	 Go to
	  the door to let it open.  Then go away again and it will close.  This
	  required a lot of tweaking in the engine sequencer to get right.
	- Cleaned up the syntax of the sequences and triggers considerably by
	  using shorter keywords and more attributes.
	- Eric Sunshine added a new option to spoofdir.php which allows clients
	  to control whether or not spoofdir allows browsers to recurse into
	  subdirectories.
24-Sep-2002
	- Charlls Al'Quarra implemented the iMeshObject::HitBeam() family
	  of methods for cloth plugin.
	- res did the following:
	    - Fixed PATH=(null) bug (win32).
	    - Added downsampling of all textures to GL renderer.
	    - Created a new MSVC7 build configuration for ext. memory
	      debugging.
	    - Fixed wrong messages in csloader.
	- Relaxed the sequence and trigger loader so that you can now refer to
	  triggers and sequences that haven't been defined yet.
	- Added support for rotating along three axii in the 'rotate' sequence
	  operation.  Also added support for an additional offset to the
	  rotation.
	- Fixed a bad bug in csRefArray which manifested the first time the
	  threshold size was exceeded.
	- Implemented relative move with duration.
	- Flarge now has a nice animating model using these new sequence
	  features.
	- Relaxed the bad uv mapping test a bit (SMALL_EPSILON instead of
	  EPSILON).
	- Extended levtool with a -validate commandline option.	 This will
	  validate the level.  At this moment it will only test if all polygons
	  with more than three vertices are well-formed in the sense that all
	  vertices of the polygon must be on the same plane.
	- Cleaned up the timed operations code in the engine sequencer a bit.
	  Also made it more efficient by not requiring as much object creation.
	- Engine sequence manager: added support for testing if camera is in a
	  sector.  In addition you can also test if the camera is in a box or
	  sphere in that sector at the same time.  Extended the <sectorvis>
	  trigger so you can specify <insideonly> tag (to test if camera is in
	  sector instead of the sector being visible alone).  Also added <box>
	  and <sphere>.
	- Modified flarge so that the only door flarge has, finally opens when
	  you come near it :-)	Expect it to close too in a later commit.
	- Eric Sunshine made the following configuration-time changes:
	    - Added libs/cssys/next/nextconf.sh which replaces the individual
	      invocations of various configuration shell scripts by the
	      makefile.	 Hopefully, people making configuration-phase changes
	      will remember to update this script along with the other "conf"
	      scripts, so the Apple/NeXT ports won't lag behind.
	    - Merged libs/cssys/next/macosx.sh into nextconf.sh.
	    - Fixed bug: bin/comptest.sh failed to set the LINK shell variable,
	      thus scripts run subsequent to comptest.sh would fail if they
	      tried using LINK.
	    - Values for CC, CXX, OBJC, and OBJCXX makefile variables are now
	      determined dynamically by comptest.sh and nextconf.sh at
	      configuration time, rather than being hard-coded in the
	      makefiles.
	    - Added Objective-C++ compilation support to next.mak.
	      Objective-C++ source files should use the customary .mm
	      extension.  (As usual, Objective-C files should continue using
	      the .m extension.)
	    - Fixed incorrect comment in bin/checkprog.sh.
	- Eric Sunshine eliminated the unmaintained BeOS port.	Prior to
	  removing this port, all of the port-specific files were tagged in CVS
	  as "BEOS_OBSOLETE" in order to make it simple to recover these files
	  when/if needed.  The following directories and files were tagged and
	  removed:
	    docs/texinfo/build/platform/beos.txi
	    include/cssys/be*
	    libs/cssys/be/*
	    plugins/video/canvas/be/*
	    plugins/video/canvas/openglbe/*
	- Eric Sunshine eliminated a plethora of compilation warnings recently
	  introduced into lghtmap.cpp.
	- Eric Sunshine removed the remaining obsoleted
	  CS_SYSDEF_PROVIDE_ALLOCA from the project.
	- Eric Sunshine worked around a problem in
	  CTextureFile::SetOriginalData() where a static csRef resulted in
	  "undefined reference to `atexit'" error on some platforms.
	- Eric Sunshine eliminated compilation warnings in prsseq.cpp.
	- Eric Sunshine eliminated unused functions from syntxldr.cpp,
	  gmeshldr.cpp, spr2dldr.cpp, spr3dldr.cpp, thingldr.cpp.
	- Eric Sunshine eliminated an enormous number of compilation warnings
	  from the cloth plugin.
23-Sep-2002
	- Charlls Al'Quarra did some fixes on the cloth plugin. Fixed the
	  shear system.
	- Charlls removed the deprecated ClothIntegrator class from the source.
	  now there are two separate classes: Cloth  and Integrator.
	- Charlls added a static-constraint code branch.
	- Brandon Ehle did the following:
	    - Added a unittest data file (for saving).
	    - Add unittest to vfs.cfg.
	    - Add csSaver to scf.cfg.
	    - Add make check to the makefile system.
	    - Add unittest to the make check target.
	    - Add bool flag to iMaterial::GetFlatColor to not return
	      the texture mean color.
	    - Add iImage **image to the loader.h definition to return the image
	      pointer so that we can store this value in the iTextureWrapper
	      correctly.
	    - Add CS_REQUEST_NULL3D and CS_REQUEST_LEVELSAVER to
	      csInitializer.
	    - Fix the iso engine for GetFlatColor() changes.
	    - Fix some link errors with linex2d.
	    - First revision of csSaver committed, only support Material
	      and Texture writing for now.
	- Added new iEngineSequenceManager API. This is going to be used
	  for an engine sequence manager. More info on this new feature
	  later.
	- Added csRefArray<T> which is a templated array for csRef's.
	  It has most of the functionality of a csVector (but not all yet).
	- Added new engine sequence manager plugin (plugins/engseq). This
	  sequence manager enhances the normal sequence manager with engine
	  specific operations (like triggers, light diming, moving
	  of objects, fog, ...).
	- At this moment only the 'setfog' and 'fadefog' commands
	  are implemented.
	- Extended the standard map loader with the ability to load
	  triggers and sequences. Now you can have <sequences> and
	  <triggers> blocks in both world and library files.
	- Added a small demo of a trigger and sequences in flarge.
	  When you go to the basement (through the hole in the floor
	  in flarge) one of the corridors will start having fluctuating
	  fog as soon as you first look at that corridor.
	- Fixed a bug with metaballs which didn't work properly in fog
	  (OpenGL only).
	- Implemented 'setlight' and 'fadelight' in engine sequence
	  manager and loader. Also added enabletrigger and disabletrigger
	  commands.
	- Modified the pseudo-dynamic light in flarge to work using
	  the new sequence system instead of the Walktest specific stuff.
	- Fixed a bug in the engine sequence manager. When timed operations
	  are done they will ALWAYS be called with time==1. That ensures
	  that the end result of a timed operation is well defined.
	- Added rotation command to the engine sequence manager and modified
	  flarge to use it.
	- Added the ability for iMeshList->FindByName() to look for children
	  in mesh objects too. Use the : notation for this like:
	    name1:name2:name3:...
	  Doesn't work for region/name1:name2... yet.
	- Some new sequence stuff in flarge. Unfinished.
22-Sep-2002
	- Mathew Sutcliffe (Oktal) added a missing space to cygconf.sh which
	  was causing it not to work at all. Also added a missing forward
	  declaration of iSector.
	- Modified iMeshWrapper->SetDrawCallback() so that multiple
	  callbacks are now supported. Added RemoveDrawCallback() and
	  GetDrawCallbackCount(). Also modified GetDrawCallback() so that
	  there is an additional index parameter.
	- Modified iPortal->SetMissingSectorCallback() and
	  iPortal->SetPortalCallback() in a similar way (as SetDrawCallback()).
	  Also added the appropriate functions to remove and get
	  all callbacks.
	- The missing sector callback that is used in the loader is now
	  self-cleaning.
	- Added iSector->SetSectorCallback() and other appropriate functions.
	  This callback will be called whenever the sector is traversed
	  for lighting or renering.
	- Added a new null mesh. This mesh does not draw or do anything at
	  all. It represents a sphere of a certain radius which is handled
	  by the engine and visibility culler in all normal aspects but
	  otherwise has no influence on screen. This object is useful in
	  combination with the callbacks mentioned above. You can then
	  define triggers that activate when a certain area of space
	  becomes visible or is entered. More on triggers in later commits...
21-Sep-2002
	- Matthias Braun included windows.h in all files where directx
	  headers are used - this is needed for latest mingw. Also fixed
	  some csRef errors in ddraw8 canvas and enabled as default for
	  mingw again.
	- Matthias also included bugplug in walkall target and enabled it by
	  default for walktest.
	- Matthias removed the need for the which command in the configure
	  part. Added the checkprog function instead which I found in
	  configure scripts.
	- Charlls Al'Quarra reorganized the cloth plugin a little.
	- Keith Fulton added optimization to dynamic lightmap recalculation to
	  use tighter loops when overflow protection is not necessary.  These
	  faster loops get called about 96% of the time in flarge, so dynamic
	  and pseudo-dynamic lighting should be noticeably faster.
20-Sep-2002
	- Matthias Braun did the following:
	    - Worked around quoting problem in msys and some others fixes
	      for latest mingw.
	    - Changed plugin linking to use g++ instead of gcc.
	    - Removed braces from descriptive name of simplevp as these have
	      given another quoting problem on msys.
	    - Removed CS_SYSDEF_PROVIDE_ALLOCA and enable the ALLOC_STACK_ARRAY
	      by default. Note that direct usage of alloca is forbidden now
	      because latest mingw doesn't have it anymore.
	    - Removed all #define CS_SYSDEF_PROVIDE_ALLOCA from libs,
	      plugins and some apps.
	    - svgalib2d compiles now.
	- Keith Fulton added Dynamic Ambient Lighting capability to all Things.
	- Keith also added sector convenience function to set Dyn Ambient
	  for all things in sector.
	- Fixed XML parsing for <scale> and <shift> for material layers.
	  Thanks to Brandon for spotting this.
	- Fixed cs2xml for texture layer scale. It was incorrectly outputting
	  x,y attributes instead of u,v attributes.
	- Fixed flarge/world for scale.
	- Added 'scrshot' command to BugPlug to take a screenshot (similar
	  to old f12 command in walktest). Assigned this command to
	  'f12' key.
	- Added 'fps' command to BugPlug to show fps. By default on.
	  Assigned this command to 'p' key.
	- Removed screenshot capability from walktest.
	- Removed fps viewer from walktest.
	- Greatly simplified the OpenGL renderer at the expense of some speed
	  loss. This is only temporary until DrawPolygonMesh starts
	  operating at full efficiency. Then we can start using that
	  function a lot more. Here is what I did:
	    - DrawPolygon no longer uses any of the polygon, lightmap, or fog
	      queues and is fully stand alone.	This makes it slower but easier
	      to separate from the rest.
	    - The fog queue has been removed and merged with the polygon queue.
	      DrawPolygonFX is now the only function that uses the polygon
	      queue.
	    - DrawPolygonMesh is the only function using the super lightmap
	      queues.
	- Changed iLoader->LoadTexture() so that there is now an additional
	  parameter which indicates if you want the default material
	  to be created or not. In the past LoadTexture() automatically
	  created a material with the same name as the just loaded texture.
	  This is still true by default but you can now disable this
	  behaviour. The standard map file loader now calls this function
	  with this parameter set at 'false' so the automatic define
	  of the materials no longer happens.
	- Eric Sunshine renamed PROC_NEEDS_STRICT_ALIGNMENT to
	  CS_STRICT_ALIGNMENT.	Also moved CS_STRICT_ALIGNMENT to cssysdef.h
	  from csendian.h so that it is available to all clients (just like the
	  CS_FOO_ENDIAN macros), rather than only to those importing
	  csendian.h.  Note that in the future, CS_STRICT_ALIGNMENT should be
	  moved to volatile.h and be determined at configuration time.
19-Sep-2002
	- res did the following:
	    - On Win32, the platform-provided path expansion API
	      is used by csExpandName().
	- Daniel Duhprey did the following:
	    - Updated tbtut to reflect the changes to TerrBigState.
	    - Added new version of terrbig.
	    - Added Scale and Error settings.
	    - Fixed terrbig for lighting, speed and error correction a bit.
	- Philip Wyett did the following:
	    - Start of a code cleanup for both CS style and readablilty
	      (OPCODE plugin).
	    - Removed include in terrbig to 'sys/time.h'.
	    - Added LGPL headers to awstest.
	- Fixed some memory leaks in csInitializer.
	- Several enhancements to levtool. By default it now lists the
	  contents of the world file. It also has commandline help
	  (-help option).
	- Completely removed support for the old format from CS.  All is XML
	  now.	The csParser class has also been removed from csutil library
	  and is now in cs2xml tool only.
	- Eric Sunshine renamed the mesh loaders from "classic" to "standard"
	  since the classic format is no longer supported.
	- Eric Sunshine eliminated compilation warnings from g2dtest.cpp and
	  walkcmd.cpp reported by gcc 3.1.
	- Eric Sunshine fixed an access-beyond-end-of-string crasher in
	  NeXTGetInstallPath().
18-Sep-2002
	- res did a SW_SHOWNORMAL fix.
	- Philipp Aumayr continued implementing OpenGL_ext. Slowly getting
	  somewhere :)
	- Fixed several memory leaks in CS introduced by the new csPtr(csRef)
	  constructor added yesterday.
	- Added 'explicit' to the csPtr(csRef) constructor. This avoids
	  implicit cast from csRef to T* and then from T* to csPtr.
	- Added copy constructor for csPtr even in optimize mode.
	- The copy constructor from csRef to csPtr is now templated so that
	  you can assign csRef<T2> to csPtr<T> with T2 and T different
	  (but compatible) types.
	- Eric Sunshine changed next.mak so that it discovers zlib, libpng, and
	  libjpeg libraries within CS/libs even if those directory names
	  contain version numbers.  (Previously, it assumed that the directory
	  names were not decorated with version numbers.) Also now recognizes
	  CS/libs/jpeg in addition to CS/libs/libjpeg, since the shorter form
	  is how the directory unpacks from official archives.
	- Eric Sunshine fixed next.mak so that applications and plugins link
	  correctly on the new Jaguar MacOS/X release.	It now explicitly
	  invokes "c++" on this platform, rather than "cc" when compiling and
	  linking C++ programs, thus ensuring that they link with libstdc++,
	  which is apparently needed with Jaguar.
	- Eric Sunshine fixed token pasting in CS_HEADER_GLOBAL() and
	  CS_HEADER_LOCAL() from cssysdef.h so that they work with newer, more
	  restrictive preprocessors.  This allows the OpenGL renderer and
	  canvas to build correctly with Jaguar MacOS/X.
	- Eric Sunshine fixed a bug he introduced into cs2xml yesterday.
	  ParseGeneral() was not recognizing all known tokens.
	- Fixed UVEC, VVEC, and UV_SHIFT conversion in cs2xml.
	- Fixed UVEC and VVEC handling in XML loader (syntax services).
	- Eric Sunshine made the following changes to the Texinfo documents:
	    - Fixed a slew of Texinfo markup syntax error and warnings.
	    - Eliminated all of the overfull and underfull `hbox' warnings
	      reported by TeX.
	- Eric Sunshine elaborated the message in docs.mak which instructs
	  users to check the log file after a DVI build in order to make it
	  seem less like an error message.
	- Eric Sunshine updated the Apple/NeXT build instructions to reflect
	  present day conditions.
	- Eric Sunshine updated the "external libraries" section in the
	  documentation.
	- Eric Sunshine updated the "internal implementation detail"
	  documentation for the Apple/NeXT ports to reflect present day
	  conditions.
	- Eric Sunshine fixed a bad crasher in the new csPtr(csRef&)
	  constructor where it failed to check against NULL before applying
	  IncRef().
17-Sep-2002
	- Clarified some iMovable Doxygen comments.
	- Fixed a serious bug in the csRef assignment operator for
	  csRef and normal pointers. It would first DecRef() the old
	  pointer and then IncRef() the new one. This can cause crashes.
	- Due to a problem with VFS leaking cs2xml doesn't properly
	  work anymore because the archive writes are not done. Temporarily
	  fixed this by adding a manual vfs->Sync().
	- Optimization in cs2xml so that 'cache' dir is not considered.
	- Fix a bug in iEngine->SetCacheManager().
	- Thanks to the XML format I now managed to get a first
	  semi-operational version of levtool. This version manages to
	  parse a world generated by map2cs and splits the thing into
	  multiple parts.
	- Eric Sunshine broke apart the mother-of-all-switch-statements in
	  cs2xml into smaller functions.  This was necessary for a couple
	  reasons:
	    - In optimize mode, some compilers, such as MSVC would take an
	      enormous amount of time to compile the file (>20 minutes on even
	      fast machines, we are told).
	    - There is a limitation with the MacOS/X assembler where it is
	      unable to deal with such large jump offsets.  The assembler
	      expects such offsets to fit within 16-bits, but these offsets did
	      not, and there appears to be no way to instruct the assembler to
	      use 32-bit offsets.
	- Fixed python plugin for csPtr changes with some functions
	  that return iImage.
	- Eric Sunshine made csRef/csPtr corrections to the JNG plugin.
	- Eric Sunshine added csPtr(csRef const&) constructor to csPtr.	 This
	  is a convenience for those cases where one used to do:
	    csPtr<iFoo> func() {
	      csRef<iFoo> foo = ...;
	      foo->IncRef();
	      return csPtr<iFoo>(foo);
	    }
	  Now one can use the more direct approach:
	    csPtr<iFoo> func() {
	      csRef<iFoo> foo = ...;
	      return foo;
	    }
	- Eric Sunshine updated iEventQueue to return csPtr when appropriate.
	  Modified callers of event queue methods as needed.
	- Eric Sunshine updated a number of canvases to fix some obvious
	  csRef/csPtr problems.	 These changes should help these canvases to
	  compile more cleanly, but whether or not they actually compile is
	  unknown.  Someone who uses the various canvases will have to test
	  them.
	- Eric Sunshine upgraded the MacOS/X port to work with strict
	  csRef/csPtr.	This port is once again buildable.
	- Eric Sunshine did further work on cs2xml to make it buildable on
	  MacOS/X.  Had to further break apart the
	  mother-of-all-switch-statements in order to appease the assembler's
	  16-bit jump offset limitation.
	- Eric Sunshine eliminated compilation warnings from perftest.
16-Sep-2002
	- Charlls Al'Quarra changed the NextFrame updating in the cloth
	  plugin.
	- Matthias Braun fixed iImageIO for STRICT_SMARTIES.
	- Fixed a DecRef() problem with the g2d plugin (ddraw). Please
	  people! When replacing a normal pointer with a csRef you
	  must ALSO take care to remove the DecRef()!!! Don't blindly
	  fix things so they compile.
	- Fixed more DecRef() related problems with other plugins.
	- Reverted initapp changes which were very dangerous.
	- Fixed cs2xml so it can correctly convert isometric maps.
	- Few fixes in iso loader (XML).
15-Sep-2002
	- Daniel Duhprey did the following:
	    - Cosmetic changes to tbtut.
	    - New changes to the file structure.
	    - Fixed some of the display glitches in terrbig. Put some lighting
	      code in place, but its very poor quality.
	- res did the following:
	    - Moved CS_IMPLEMENT_STATIC_CLASSVAR to top of file as a strange
	      fix for an internal compiler error on msvc7.
	    - Added shell32.lib to MSVC6 projects.
	    - CS_STRICT_SMART_POINTERS defined for MSVC.
	- Norman Kramer added the first version of the CS threading API and a
	  pthread implementation of it.
	- Norman added typedefs for pthread/CS threading API.
	- Norman added image.h include to bumptest app.
	- Norman fixed linux joystick driver so it compiles again (csRef
	  changes).
	- Norman added threading implementation to linux files to compile.
	  Also added detection of pthreads in unixconf.sh.
	- Norman moved pthread specific typedef into separate header and
	  added definition of CS_THREADS.
	- Philip Wyett did the following:
	    - Fixed up some MSVC projects for csPtr/csRef
	      CS_STRICT_SMART_POINTERS.
	    - Eliminated struct vs. class warnings  in cloth plugin.
	    - Fixed crashers on execute under MSVC - CS_STRICT_SMART_POINTER
	      related. Still issues to be overcome - Work in progress.
	    - Fixed a few more CS_STRICT_SMART_POINTER related crashers.
	      Note: There are still problems. If you find something please
	      report it.
	    - Added shellstuff.h to project files.
	    - Removed a call to csReport () in simplecloth which was called
	      without any type of check for success or failure aka in normal
	      execution space.
	    - Fixed motion.lib so that the correct spark file is loaded.
	    - Removed DecRef() in ddraw plugin.
	- Several csPtr/csRef related changes.
	- Fixed a potential crash bug in AWS. An SCF_DEC_REF
	  was called on aws_fileinputvfs but that variable was
	  never initialized to anything.
	- Fixed a bug in the effect loader. It was calling
	  DecRef() on ldr_context.
	- Fixed decref bug in odedynam. Don't do DecRef() on
	  csRef's! (collidesys in this case).
	- Enabled STRICT_SMART_POINTERS by default. If you want to disable
	  this (for compatibility reasons) then edit mk/user.mak or
	  else do 'make <platform> STRICT_SMART_POINTERS=no'.
	- Several csPtr/csRef related changes.
	- iVertexBufferManager->CreateBuffer() now returns a csPtr.
	- Fixed crash bug in x2d canvas plugin (caused by wrong
	  csPtr changes).
	- Iso loader should now be able to load XML files for iso
	  engine (untested). Note that cs2xml doesn't support these
	  kinds of files yet and also note that data/isomap/world
	  hasn't been converted to XML yet.
14-Sep-2002
	- Matthias Braun: more renamings needed for the Create_Interface
	  declarations. It's Interface_Create now.
	- Charlls Al'Quarra fixed the time issue in the cloth plugin.
	- res did the following:
	    - Moved platform vfs var stuff into a separate cpp file.
	    - On Win32, "homedir" vfs var is translated to My Docs dir.
	    - Changed csGetInstallPath() for Win32 a bit:
		- Both HKCU and HKLM are checked when looking into registry.
		- The value type is checked for REG_SZ or REG_EXPAND_SZ.
		- Added a missing RegCloseKey().
		- In addition to hardcoded c:\Program Files\Crystal path the
		  system- specific Program Files dir is checked as well.
	- Fixed a ref counting bug in picview.
	- Fixed the bug in the OpenGL state cache (canvas). It was not
	  calling SCF_CONSTRUCT_IBASE() in the constructor.
13-Sep-2002
	- Philip Wyett did the following:
	    - Various fixes to some of the video plugins.
	- Steven Geens changed milk2spr so it converts to XML.
	- Steven also fixed mottest.cpp: the name of the motion in
	  motion.lib should be motion.
	- Brandon Ehle fixed engine.cpp: set region = NULL in contructer of
	  csEngine.
	- Matthias Braun did the following:
	    - Renamed the scfGetID_Interfacename and VERSION_Interfacename
	      macros in scf.h to Intefacename_scfGetID and
	      Interfacename_VERSION. This was needed to make constructs with
	      namespaces like this possible:
		SCF_QUERY_INTERFACE (objreg, cows::iWindowSystem)
	    - Another fix was needed to initapp.cpp.
	- Reverted sound fix from Norman since that doesn't work
	  with STRICT_SMART_POINTERS enabled. Also it seems wrong.
	  Need to investigate further.
	- Norman Kramer had a fight with Jorrit with regards to a reference
	  counting problem in loadsnd.cpp. In the end Jorrit declared
	  a victory :-)
	- Fixed the real sound bug which was in the RegisterSound()
	  function of the software sound renderer.
	- Reverted Norman's revert on my reversion again :-)
	- Fixed cspython.mak for swig again.
	- Fixed python plugin for csPtr usage.
	- Fixed bug in old style parser for lights.
	- Eric Sunshine fixed the Opcode plugin so that it builds on platforms
	  where sizeof(bool) != 1.
	- Eric Sunshine fixed formatting of help message in several new
	  makefiles.
	- Eric Sunshine fixed next.mak so that it also runs the support scripts
	  chkheadr.sh and chktools.sh at configuration time.
	- Eric Sunshine eliminated a number of compilation warnings in the
	  OpenGL renderer.
	- Fixed a bug in parsing of attenuation for XML.
	- Fixed several CreateMeshWrapper() and CreateMeshFactory() functions
	  in iEngine so that they set the logical parent of the created
	  mesh object and factory correctly.
	- Fixed another bug in attenuation parsing.
	- Keith Fulton added the ability for rain drops to do collision
	  detection (this is an optional feature that is off by default
	  since it slows down).
	- I added new <colldet> flag in rain loader to enable this.
	- Eric Sunshine fixed haspythn.sh so that it does a better job of
	  locating Python even when Python is installed in a non-standard
	  location.
	- Eric Sunshine patched cspython.mak for MacOS/X.
	- Eric Sunshine patched haspythn.sh and cspython.mak so that cspython
	  plugin only tries linking with Python's libutil.a if that library
	  actually exists.  (It seems to have existed in Python 2.0, but went
	  away for 2.1.)
	- Eric Sunshine eliminated a slew of compilation warnings from the
	  cloth plugin.
	- Eric Sunshine fixed an infinite loop bug in
	  csEffectDefinition::GetTopmostVariableID().
	- Eric Sunshine worked around an assembler limitation on MacOS/X where
	  it was unable to deal with a large switch() statement in blocks.cpp
	  since it couldn't encode the jump offset in 16-bits.	(There appears
	  to be no way to instruct the assembler to use 32-bit offsets.)
12-Sep-2002
	- Fixed a crash at exit bug in Blocks.
	- Fixed stupid bug in star loader that crashed csdemo.
	- Fixed a crash at exit bug in cswstest.
	- Fixed XML parsing of <forward> and <farplane> in <start> sectrion.
	- Andrew Craig reported a bug in the AWS menu factory.	The constants
	  'signalClicked' and 'signalSelected' were not registered.
	- Added a howto on smart pointers.
	- More csPtr/csRef changes.
	- Replaced strcmp with strcasecmp in efserver.cpp.
	- Fixed some memory leaks in odedynamics.
	- More csPtr/csRef changes.
	- Fixed a bug in csTypedObjectIterator::FetchObject().
	- Fixed docs for smart pointers.
11-Sep-2002
	- Anders Stenberg disabled temporarily the usage of effects for
	  CS_FX_ALPHA, since this didn't work.
	- Marten Svanfeldt did the following:
	    - First example of effect to load from file.
	    - Added effectsystem loader
	    - Changed example so that it uses a effect from file instead of
	      hardcoded effect.
	    - Some minior changes to efserver to allow easier loading.
	    - Cleanup in the effectinterface.
	- Charlls Al'Quarra did some small changes to the cloth plugin.
	- Charlls also fixed a syntax error in efserver.cpp: stricmp
	  instead of strcmp.
	- Further csPtr/csRef cleanups by removing the cast operator.
	- Added a new STRICT_SMART_POINTERS flag in mk/user.mak. If this
	  is set to 'yes' then smart pointers are strict which means
	  that a csPtr can ONLY be assigned to a csRef. All other usage
	  will be marked as invalid. So setting this flag to yes is a good
	  way to see if your code is correctly using smart pointers.
	  In addition, when you are in debug mode and the strict smart
	  pointer flag is set, CS will also (at runtime) test if you are
	  actually assigning the csPtr result to a csRef. If not you have
	  a memory leak and this will cause an assert error.
	- Fixed several bugs in the standard loader with regards
	  to ldr_context.
	- Fixed ref counting bugs in iEngine->CreateMeshFactory(). The engine
	  forgot to do IncRef().
	- Fixed similar bug in CreateMeshWrapper().
	- Further csPtr/csRef cleanups by removing the cast operator.
	- Fixed the void return test in csPtr a bit. Also made it
	  binary compatible.
	- Fixed handling of dynamic lights (CreateDynLight()) in the engine.
	  The engine now also keeps a reference as it should.
	- Eric Sunshine added cfg2xml.pl to the project.  This is a script
	  which automates the task of converting flat configuration file
	  property lists (*.cfg) of the form "key.subkey.subsubkey = value"
	  into XML documents.
10-Sep-2002
	- Philipp Aumayr started implementing vertex buffers in OpenGL_ext.
	- Matthias Braun did the following:
	    - Changed CreateXORPattern to use csPtr.
	    - Merged cygosdefs.h into csosdefs.h.
	    - Removed all the smart stuff from LoadImage, no checks for
	      different filenames anymore, the CheckPattern in case of
	      failer has been moved to LoadTexture.
	- Charlls Al'Quarra moved UpdateMesh from DrawTest() to NextFrame()
	  (cloth plugin).
	- iLoaderPlugin and iBinaryLoaderPlugin->Parse() now return a
	  csPtr.
	- iThingEnvironment->CreateBezierTemplate() and CreatePolyTxtPlane()
	  now return a csPtr and IncRef() the returned pointer (which
	  they didn't do in the past).
	- Fixed a ref count leak in the plugin loader.
	- Fixed ref count leaks with layout manager in aws.
	  Also iAwsLayoutManager was not inheriting from iBase.
	- Fixed some other ref leaks in aws.
	- Fixed some other ref leaks in csparser.
	- Fixed iLoader->LoadTexture(char*, char*) so that it returns
	  a normal pointer again. This function was not returning a
	  pointer that required DecRef().
	- Temporarily removed the T* cast operator from csPtr. This ensures
	  that it is ONLY possible to assign csPtr's to csRef's (which is
	  the intended use in a full smart-pointer API). With this operator
	  removed I fixed a large part of CS (but not all) to work cleanly.
	  Then I enabled the T* cast again.
	- Replaced csPtr<iBla> (NULL) with NULL everywhere since that is
	  cleaner and works just as well.
	- Further csPtr/csRef cleanups by removing the cast operator.
9-Sep-2002
	- Philip Wyett fixed OpenGL-ext to latest buffer changes.
	- Philip also fixed m2s_md2.cpp.
	- Matthias Braun changed vector to vec in util.h.
	- Charlls Al'Quarra did the following:
	    - Added cloth mesh plugin.
	    - Added simplecloth application.
	    - Added declarations to new methods in the iCollideSystem for box
	      and sphere primitives.
	    - Added plugin entry to cloth mesh object plugin.
	- Matthias Braun did the following:
	    - Added a check for luaswig.
	    - Added == operator to csRect.
	- Philip Wyett did the following:
	    - Changed from 0.5 too 0.5f (in cloth plugin) to indicate a
	      float for the benefit 'csVector3' and eliminated the operator
	      overloading ambiguity.
	- Philipp Aumayr continued working on OpenGL_ext.
	- iTextureManager->RegisterTexture() and RegisterMaterial()
	  now return csPtr. This also fixes several ref counting bugs
	  throughout CS with regards to this.
	- Fixed iso engine so it now incref()'s the given texture
	  handle in an iso material.
	- Engine material and texture wrappers now use csRef's to keep
	  track of their internal image/handle/texture references.
	- Modified a few relevant functions in iDebugHelper to return
	  csPtr.
	- Changed iCollideSystem->CreateCollider() to return csPtr.
	- Removed unittest.h app header. It is not needed.
	- Fixed unit tester of syntax services.
	- Removed lots (but far from all) DecRef() calls from entire
	  CS. Replaced with csRef usage.
8-Sep-2002
	- Marten Svanfeldt did the following:
	    - Some code cleanup in simplevp. (again)
	    - Changed to use the new way of passing variables to effectsystem.
	    - Created a new way to pass variables to effects.
	- Philip Wyett added newlines again.
	- Anders Stenberg did the following:
	    - Updated simplevp for changed syntax in effect system.
	    - Added support for user arrays to renderers.
	    - Fixed some bugs related to texture coordinates in OpenGL
	      renderer.
	- Changed iModelConverter->Load() to return csPtr.
	- Changed iModelConverter->Save() to return csPtr.
	- Fixed a lot of uses of iDataBuffer in CS to work with csRef.
	- Changed iCacheManager->ReadCache() to return csPtr.
	- Changed csSpriteBuilderFile->Build() to return csPtr.
	- Changed usage of SoundLoader->LoadSound() with regards to
	  references.
	- iSoundRender->RegisterSound() now returns a csPtr.
	- iSoundHandle->CreateSource() now returns a csPtr.
	- iSoundHandle->Play() now returns a csPtr.
	- iObjectModel->CreateLowerDetailPolygonMesh() now returns a
	  csPtr.
	- iFile->GetAllData() now returns a csPtr.
7-Sep-2002
	- Philip Wyett did the following:
	    - Eliminated a couple of compiler warnings in software renderer
	      and commented additions as such.
	    - Fixed mdltest.mak makefile. Will no longer re-link, when
	      there is nothing to be done.
	    - Added some newlines at end of some files and made some
	      destructors virtual (new renderer).
	    - Added some spurious returns to fix compile errors under MSVC
	      for OpenGL-ext. These should just be removed when real code is
	      inserted.
	    - Moved to using 'csPrintf()' as against'printf()' (in blocks),
	      this eliminates a warning under release builds with GCC 3.2.
	- Philipp Aumayr started implementing the Polygonbuffer in OpenGL-ext.
	- Norman Kramer fixed OpenGL-ext so it compiles.
	- Changed all config related Enumerate() calls to return csPtr.
	- Changed iImageIO->Load() to return csPtr.
	- Changed iImageIO->Save() to return csPtr.
6-Sep-2002
	- Philip Wyett did the following:
	    - Resolved all constructor re-ordering I believe (OPCODE).
	    - Added terrbig to default build.
	- Daniel Duhprey fixed cs2xml: length needs to be 1 bigger to
	  account for the '\0'.
	- Matthias Braun added a short description line to some applications.
	- Matthias also changed the name of parser.h to loader.h because it
	  contains iLoader and not iParser. Added a parser.h for backward
	  compatibility.
	- Christian Bayle rolled back latest changes to Debian scripts.
	- Philipp Aumayr did the following:
	    - Some changes to the clipper (to allow other clippers besides
	      stencil) (OpenGL_ext).
	    - Coding style corrections.
	    - forgot LGPL License header.
	- Philip Wyett did the following:
	    - m2s_md2.cpp: casted away of signed against unsigned warning.
	    - Added newline at end of some files.
	- Fixed cs2xml so it correctly translates AMBIENT inside
	  SETTINGS (while still keeping support for AMBIENT
	  inside MATERIAL).
	- Fixed cs2xml for UP, FORWARD, and FARPLANE inside START.
	- Added notification warnings to csloader plugin whenever
	  it detects that the old format is still used.
	- Changed iMeshObjectFactory->NewInstance() to return a csPtr.
	- Changed iMeshObjectType->NewFactory() to return a csPtr.
	- Fixed a bug in walktest (SetConfigOption) with missing
	  curly braces.
	- Eliminated a lot of DecRef()'s in walktest by using
	  csRef.
	- iEngine->CreateDynLight() returns a csPtr now.
	- Removed all calls to DecRef() in Blocks application. Uses
	  csRef now.
	- Removed (almost) all calls to DecRef() in csdemo.
	- Removed all calls to DecRef() in vsh.
	- Removed all calls to DecRef() in simpcd tutorial.
	- Removed a few more DecRef() calls in some other apps.
	- Changed iObject->GetIterator() to return a csPtr.
	- Fixed DecRef memory leak in csTypedObjectIterator when
	  the iterator was not used to the end.
	- Removed a few csPtr casts for LoadFont(). LoadFont() already
	  returns a csPtr.
	- Made csTypedObjectIterator::FetchObject() none recursive
	  (and faster). Thanks to Dave Ray for suggesting this.
5-Sep-2002
	- Daniel Duhprey did the following:
	    - Fixed some returns of void functions in terrbig.
	    - Commented out terrbig from the general CVS until its more stable.
	    - Changed iMaterialHandle to iMaterialWrapper.
	    - Texture mapping only, no lighting.
	    - Added /data/terrain under /lev/terrain.
	    - Pointing to the heightmap for texture mapping.
	- Christopher Nelson did the following:
	    - Fixed a couple of minor compile problems in terrbig where a
	      struct was declared and later referred to as a class.
	- res did the following:
	    - Moved platform memory mapping from include/cssys to libs/cssys.
	    - csMemoryMappedIO can now fall back to emulation if platform mmap
	     fails.
	    - Some documentation fixes.
	    - Turned some of getopt.h's comment into doxygen comments.
	- Philipp Aumayr started working on the new OpenGL renderer.
	- Philip Wyett did the following:
	    - Eliminated class vs. struct warnings under MSVC (xmltiny.h).
	    - Casted away a few compiler warnings in OPCODE plugin - tons to
	      go.
	    - Eliminated a few compiler warnings and a no newline at end of
	      file of effect plugin.
	    - Fixed constructor ordering in OPCODE plugin.
	- Fixed a very subtle bug in the csRef assignement operators.
	  It is very important FIRST to assign the new value to the
	  internal 'obj' pointer of csRef before doing the DecRef().
	  Otherwise it is easy to get in an infinite loop with
	  constructs like 'ref = NULL' if 'ref = NULL' causes a
	  destructor to be fired which checks on the value of 'ref'
	  again.
	- Fixed a bug in the TinyXml loader by making sure that
	  nodes also have a real reference to the system (for the pool).
	- Fixed a few compile problems in effects system.
4-Sep-2002
	- Philip Wyett fixed a constructor ordering problem in OPCODE
	  plugin and eliminated a no newline at the end of one file.
	- Charlls Al-Quarra fixed OPCODE plugin: updated Pierre changes to
	  the INIT_QUANTIZATION macro for dealing with divisions by 0.
	- Steven Geens made an addition to Slerp (in csgeom):
	  It now detects if the axices are pointing in roughly the same
	  direction. So that the the interpolation generates the smallest
	  rotation.
	- Marten Svanfeldt did the following:
	    - Added example of working vertex-programs. See notes in beginning
	      of simplevp.cpp.
	    - Sprite and vertex-program used by examples of vertex-programing.
	    - Special four entrie-vector (x,y,z,w or rgba) used internally in
	      the effectsystem.
	    - Changed to effect system to use new Set/GetRenderData and
	      Vector4 properties.
	    - Changed effectsystem so it can use vertex-programs.
	    - Added strings for vertex-programs.
	    - Rewritten DrawTriangeMesh to move out effectsystem ifs to
	      Validate. Also added support for vertex-programs.
	    - Added some errorchecking to simplevp.
	    - Changing format of realpath string to mount.
	- Daniel Duhprey did the following:
	    - Added terrbig build to mk/user.mak.
	    - Changed how the file stores.
	    - Mostly fixed the LOD and some other problem involving smart
	      culling for terrbig plugin.
	- Philip Wyett fixed vpath in simplevp.
	- Converted exploldr to XML.
	- Converted bcterrldr to XML.
	- Fixed cs2xml for exploldr and bcterrldr.
	- Fixed a bad bug in csString::ExpandIfNeeded(). MaxSize starts
	  at 0. And if GrowExponentially is true then MaxSize was
	  simply multiplied with 2. 0*2 is still 0. This bug caused
	  cs2xml to hang.
	- Attempted to optimized tinyxml parser by caching nodes.
	  For some reason this doesn't work so I commit the code
	  disabled so that I can debug this later.
	- Fixed a bug in XML version of spr3dldr. It would not correctly
	  load the names of the limbs. This prevent the motion manager
	  from working. Thanks to Steven Geens for finding this bug.
	- Found the bug in the tinyxml node pool optimization. The optimization
	  is now enabled.
	- Significantly optimized the GetAttribute() and similar routines
	  in the tinyxml implementation.
3-Sep-2002
	- Charlls Al-Quarra did a few fixes to the OPCODE plugin.
	- Charlls renormalized the pair of csReversibleTransform with the
	  *trans1 / *trans2 trick.
	- Daniel Duhprey fixed some reference counting issues in ODE
	  dynamics plugin.
	- Daniel also modified mmapio.h: fixed the parameters into mmap
	  (should have *something* in the flags. MAP_PRIVATE seems most
	  appriopriate). Added some error checking to the index.
	- Converted several functions in iEngine to return a csPtr instead
	  of a normal pointer. This means that you can now safely assign
	  the result of these functions to a csRef and no longer have to
	  worry about DecRef(). Assigning to a normal pointer still works
	  but in that case you still have to do the DecRef() on your own
	  later.
	- Converted several functions in iLoader to return csPtr as well.
	  For LoadSound() which returns iSoundWrapper this is actually
	  a change as it will now return an increffed pointer (it didn't
	  before).
	- Eric Sunshine eliminated a problem introduced yesterday into
	  next/csosdefs.h.
	- Eric Sunshine re-wrote each of the platform-specific implementations
	  of MemoryMapFile() in order to eliminate potential resource leakage
	  problems.
	- Eric Sunshine eliminated several compilation warnings.
	- Eric Sunshine added the missing csEvent(csEvent const*) constructor
	  which csKeyboardAccelerator::PostHandleEvent() expects to exist.
	- Fixed a few warnings in opcode plugin. Also replace fabsf() with
	  fabs() for more portability.
2-Sep-2002
	- Daniel Duhprey did the following:
	    - Modified scf.cfg to recognize terrbig plugin.
	    - Terrbig specific mesh information.
	    - Added workable/compilable copy of terrbig.
	    - Added a new tbconv tool to convert grayscale images into
	      heightmap data readable by terrbig.
	    - Added data used by the tbtut program.
	    - Added tutorial/test program for terrbig.
	- Charlls Al-Quarra implemented the growable stack of csCollisionPair
	  for each Collide call (OPCODE plugin).
	- Matthias Braun did the following:
	    - Removed UPPERCASE and LOWERCASE macros from cssysdef.h, you
	      can use toupper and tolower from ctype.h instead.
	    - Small change for defining socklen_t.
	    - Removed CSSYSDEF_PROVIDE_PATH from cssysdef.h, the APPEND_SLASH
	      macro has been removed and the MAXPATHLEN and PATH_SEPARATOR has
	      been moved to the platform specific files and enabled by
	      default.
	    - Added a check for swig so that cspython makefile only uses it
	      if it is really present.
	    - Marked CS_SYSDEF_PROVIDE_SOCKETS as deprecated and created a
	      new cssys/sockets.h.
	- Norman Kramer fixed PATH_SEPARATOR redefinition in makedep.
	- Norman als added include of cssys/sockets.h to socket.h.
	- res did the following:
	    - Removed signal stuff from simpmap.
	    - Added win32 specific stuff to sockets.h (basically c'n'p from
	      csosdefs.h).
	    - Changed tbconv target to tbconvert.
	    - Removed another signal thingie in simpmap.
	    - Added cssys/sockets.h to css.h.
	- Philip Wyett did the following:
	    - Fixed tbconv makefile.
	    - infinite renderer: changed unfinished variable name i.e.
	      changed from 'ismipma' to 'ismipmap' and then clipped the
	      compiler warning associated with it. Really where function
	      params are not used we should start removing them and cleaning
	      up the code where possible.
	    - Removed signal.h and unistd.h includes from simpmap. These are
	      not needed for Linux here and that unistd.h is the 'Unix
	      Standard' header and thus MSVC does not have it, so should
	      never be included in non platform specific portions of CS.
	- A bad XML token again results in an error as it should.
	- Converted motion loader so that it loads XML too. The support
	  for 'file' is removed since that is already supported by
	  'addon' in the main loader.
	- Added support for 'EULER' (motion loader) in cs2xml.
1-Sep-2002
	- res did the following:
	    - Cosmetic documentation changes.
	    - Added a "#define CSMASK_FrameProcess CSMASK_Nothing" for
	      event masks, as the name 'Nothing' seemed to confuse some people.
	    - Fixed crash after message box while in fs.
	    - Fixed a grouping error in evdevs.h.
	    - Added FindTexture() to iLoaderContext.
	    - Cosmetic changes in SyntaxService node path output.
	    - Cosmetic changes in message box display.
	    - A bad XML token emits now a warning, not an error.
	    - ParseMixmode() is smarter; it detects when more than 1 exclusive
	      mode is specified.
	    - Removed gl3d-ext from msvcgen required.mak.
	    - Commented out "#error disable exceptions" in opcode.
	- Eric Sunshine changed csVFS::MountRoot() so that it normalizes each
	  physical path it mounts so that the path ends with only a single
	  slash.  This fixes a problem on Win9x where the mount would fail with
	  a path such as "C:\\" since Win9x can not correctly handle the double
	  slashes.  Note, however, that WinNT, Win2000, and (presumably) WinXP
	  deal gracefully with the double slash, so this was not a problem on
	  those platforms.  On Unix-like platforms, MountRoot() will now mount
	  "/" rather than "//", though semantically there is no difference
	  since, internally, Unix correctly treats "//" as "/" anyhow.
31-Aug-2002
	- Norman Kramer added missing GetDescent & GetAscent to linex2d
	  plugin and changed return type of LoadFont.
	- Received two small fixes from Jochen Moench
	  <jochen.moench@de.thalesgroup.com>:
	    - Fixed some flickering when playing a sprite animation once.
	    - Converting from md2 files to spr concatenated all death
	      sequences (Fixed in m2s_md2.cpp).
30-Aug-2002
	- Philip Wyett did the following:
	    - Fixed redefinitions in for loops in freefnt2.cpp, which cause
	      compile errors under MSVC 6.
	- Charlls Al-Quarra added licensing stuff to the new OPCODE plugin.
	- Charlls also did some minor inner opcode options changes
	  (s/SPLIT_BESTAXIS/SPLIT_GEOMCENTER).
	- res changed the win32 PATH hack a bit to be more robust.
	- Matthias Braun fixed dependency of cstool in cs-config (needed
	  csgfx lib).
	- Daniel Duhprey added proper reference handling for csODEBodyGroup
	  in the ODE dynamics plugin.
	- Fixed several memory leaks in the odedynamics plugin. It had the
	  following problems:
	    - collidesys wasn't initialized so calling DecRef() on that could
	      cause crashes.
	    - CreateSystem() required DecRef() later but CreateBody() and
	      similar didn't.  Now all require DecRef() and have been changed
	      to return csPtr (also CreateGroup() and CreateLink()).
	    - Bodies and links had a reference (increased) to dynamics system.
	      And dynamics system had a reference to bodies and links.	This is
	      circular and prevents cleanup.
	  Note that these changes mean that the ODE dynamics plugin now
	  actually tries to clean up properly. Unfortunatelly this triggers
	  a crash while trying to delete an internal object of ODE itself.
	  Needs more investigation.
	- Fixed a bad bug in csPlatformStartup() for windows. In some cases
	  (for example when CRYSTAL is not set) this code would loop forever.
29-Aug-2002
	- Charlls Al-Quarra added a new collision detection plugin
	  based on OPCODE.
	- Charlls fixed OPCODE plugin: I thought that BOOL, FALSE and TRUE in
	  uppercase stuff worked for MSVC, but seems not, so i changed it.
	- res did the following:
	    - Freefnt2 now supports antialiasing.
	    - Freefnt2: the DPI value used to compute pixel from point size
	      is now 96 instead of 72 dpi.
	    - Added GetAscend() and GetDescend() routines to iFont.
	    - Changed some comments.
	    - Fixed the CSWS input to accept chars produced by Ctrl+Alt+Key.
	    - Added a minimum line gap to simpcon plugin (so fonts with small
	      line descends.
	    - Updated csfgen to use freefnt2 are better readable, but lines
	      w/ fonts with higher descends aren't too far apart).
	    - Slight change of failure report when iWin32Assistant couldn't be
	      registered.
	- Daniel Duhprey fixed terrfldr.cpp to change csPtr<iFile> to the
	  more correct csPtr<iImage>.
	- Matthias Braun did the following:
	    - Converted soundloader to use the new csPtr.
	    - Updated FontServer for csPtr and bumped versions of the
	      interfaces.
	- Added csPtr class. This is a simple encapsulator of normal
	  pointers. The only place where this should be used is when
	  you have a function that returns a pointer to an already
	  IncRef()'ed object. When csPtr's are assigned to normal pointers
	  you are then responsible for doing DecRef() yourselves later (which
	  corresponds to old API usage). When csPtr's are assigned to
	  csRef's, it behaves like Take(). In that case the csRef inherits
	  the reference and will clean it up later.
	- Changed iVFS->FindFiles() to return csPtr instead of csRef.
	  This makes this function again API compatible.
	- Changed SCF_QUERY_INTERFACE, SCF_QUERY_INTERFACE_FAST,
	  CS_QUERY_REGISTRY, CS_QUERY_REGISTRY_TAG,
	  CS_QUERY_REGISTRY_TAG_INTERFACE, CS_LOAD_PLUGIN,
	  CS_LOAD_PLUGIN_ALWAYS, CS_QUERY_PLUGIN_CLASS, CS_GET_CHILD_OBJECT,
	  CS_GET_NAMED_CHILD_OBJECT, and CS_GET_FIRST_NAMED_CHILD_OBJECT
	  to return csPtr. This means that you no longer have to use Take()
	  to put the returns of these values into a csRef.
	- Removed csRef::Take(). There are still some cases where the
	  functionality of Take() is needed. In that case use csPtr to
	  first wrap your pointer and then assign that to the csRef.
	  For example. Old code:
	    csRef<iBla> bla;
	    bla.Take (new csBla());
	  New code:
	    csRef<iBla> bla (csPtr<iBla> (new csBla()));
	- Changed iVFS->Open(), iVFS->ReadFile(), iVFS->ExpandPath(), and
	  iVFS->GetRealPath() to return csPtr. This means that VFS is now
	  fully csRef clean.
	- Did several fixes to the new OPCODE CD plugin from Charlls Al-Quarra.
28-Aug-2002
	- res did the following:
	    - Corrected a wrong comment in csver.h.
	    - On Win32 the application path is considered when looking for
	      the CS dir.
	    - On Win32 the CS dir is added to the PATH environment var.
	      (so DLLs like libpng can be found by Windows).
	- Added iPolygonMesh implementation for genmesh so it now works
	  with collision detection.
	- Eric Sunshine made the following changes:
	    - Changed csFindSystemRoots() so that it returns csRef<iStrVector>
	      instead of a string buffer (which the caller had to free) filled
	      with null terminated strings plus a final null terminator.  The
	      old return value was far too low-level.  Rewrote all
	      csFindSystemRoots() implementations.
	    - iVFS::MountRoot() now returns csRef<iStrVector> rather than
	      iStrVector*.  For consistency, iVFS::FindFiles() also now returns
	      csRef<iStrVector> rather than iStrVector*.
	    - Fixed double-delete problem affecting all strings placed in the
	      iStrVector returned by iVFS::MountRoot().
	    - Changed the behavior of iVFS::MountRoot() so that it now
	      normalizes mounted "roots" rather than mounting them in native
	      form.  For example, in vsh on Windows, we now have /native/c/,
	      /native/d/, etc. rather than /native/C:/, /native/D:/, etc.
	- Eric Sunshine made the following string class/interface-related
	  changes:
	    - Eliminated the very ugly iString::SetFastGrowing() and
	      csString::SetFastGrowing() hacks.
	    - Replaced with more flexible and generic "grows by" and "grows
	      exponentially" options.  With "grows by", the client can set the
	      capacity growth increment directly.  With "grows exponentially",
	      the string capacity grows exponentially.
	    - Eliminated the ugly grows_a_lot hack from csString::SetCapacity()
	      since that was the incorrect place to implement incremental or
	      exponential growth and interferred with clients which needed to
	      set the capacity precisely.
	    - Added a new private csString::ExpandIfNeeded() which respects the
	      "grows by" and "grows exponentially" settings and is used by
	      other methods which need to ensure proper capacity.
	    - Added iString::GetCapacity() and csString::GetCapacity() to
	      complement existing SetCapacity().
27-Aug-2002
	- res did the following:
	    - In  jng.cpp: quick fix for "'char' gefolgt von 'int' ist
	      unzulaessig" error
	    - glwin32 canvas now disables vsync (if supported).
	    - glwin32 canvas reports a warning if graphics aren't accelerated.
	    - Documentation.
	- Norman Kramer removed the MP3 plugin from CS because of the
	  recent licensing restrictions placed upon MP3 readers.
	- Eric Sunshine simplified the task of extracting version numbers and
	  release date from csver.h by external tools.	Also simplified the
	  actual sed commands used to perform the extractions.	Hopefully,
	  these changes will fix remaining problems (specifically, bizarre
	  quoting problems of make/shell/sed) with cs-config synthesis which
	  someone (Jorrit) was experiencing.
26-Aug-2002
	- Norman Kramer moved inclusion of extstat.h into ogl_initext.h.
	- Matthias Braun did several fixes and cleanups of crystal.m4.
	- res did the following:
	    - Documentation updates for various headers.
	    - Typo fix in graph3d.h.
	    - Recomitted tweaked set of windows includes.
	    - Fixed related compilation problems of some plugins.
	    - Jpeg loader now reports errors.
	    - In glwin32 canvas actual display color depth is retrieved again.
	- Removed some debug stuff from OpenGL canvas code which used iostream.
	- Added support for proper conversion of HEIGHTGEN keyword (and
	  everything that goes with that) to XML in Cs2Xml.
	- Added support for proper conversion of terrfunc keywords in
	  Cs2Xml.
	- Converted the terrfunc loader to XML.
	- Added support for UVA in cs2xml.
	- Added support for UV and COLOR loading in the syntax services.
	- Fixed a bug in Cs2Xml and 'uv' specification in 'texmap'.
	- Fixed a bug in the parsing of <uv> in <texmap> in the syntax
	  services.
	- Fixed handling of SPEED again in Cs2Xml. It was broken since
	  adding support for SPEED in sequences.
	- Fixed support for emitcylinder in Cs2Xml.
	- Removed support for flarge.zip and partsys.zip from vfs.cfg.
	- Made a few fixes to flarge and partsys.
24-Aug-2002
	- Philip Wyett replaced use of 'endl' with '\n" where 'iostream.h'
	  is not included nor really should be. This allows now successful
	  compilation of CS with GCC 3.2 in Red Hat 8.0 Beta 3 (null)
	  - Though my testing ability is slightly knackered due to the fact
	  that nVidia has yet todo any GCC 3.2 compiled drivers for kernels
	  compiled with this new compiler. :(
23-Aug-2002
	- Philip Wyett updated linex2d.h to latest font changes.
	- res added file descriptions to nulcache.h and vfscache.h.
	- Cs2Xml now supports old-style START keyword.
	- Fixed Cs2Xml so that it only adds the name attribute to some node
	  if it is actually different from the empty string.
	- Fixed a few compilation issues in csloader after changes from res.
	- Added iBinaryLoaderPlugin. This new interface will be for loader
	  plugins that are interested in parsing binary data and not
	  XML tree data.
	- The main loader will transparently handle both types of
	  loader plugins (iLoaderPlugin and iBinaryLoaderPlugin) and
	  switch behaviour accordingly. Of course binary loader plugins
	  can only be used with the <paramsfile> tag.
	- The binary sprite loader now implements iBinaryLoaderPlugin instead
	  of iLoaderPlugin.
	- <addon> will now fail if the plugin parser fails.
	- <addon> now also supports <paramsfile>.
	- All <paramsfile> options (and even the old PARAMSFILE) will now
	  detect if the file that is being load is XML and switch accordingly.
	- Added example usage of <paramsfile> to flarge. Also added a
	  new 'sprite3' in standard.zip which only contains the <params> block
	  so it can be used with <paramsfile>.
	- Applied a patch from Mendrak <mendrak@worldnet.att.net> which
	  does the following:
	      - Added csFindSystemRoots() global function to find all
		system roots.
	      - Add MountRoot() to iVFS so that you can mount the system
		dependend roots on a VFS path.
	      - Extended vsh tool to mount the system roots on 'native'.
	      - Enhanced default font server so that it can optionally take
		an alpha map that defines anti-aliasing information for
		a font.
	      - Walktest will now by default use a new font 'arial9.csf'
		which you can find in data/tex.
	      - Added howto on custom fonts.
	- Added support to Cs2Xml for converting tokens from sequences
	  (csdemo).
	- Implemented MAXCOLOR and BASECOLOR support in Cs2Xml.
	- Note that Cs2Xml can only convert old style PARAMSFILE files if
	  you manually add PARAMS (...) to those files. Otherwise it cannot
	  detect this. The same goes for paths defined for the sequence
	  manager. These need an additional PATH (...).
	- Csdemo now parses sequences and paths as XML data. Demodata.zip
	  is now fully XML. Note that saving of paths is not yet in XML
	  format!
	- Implemented XML version of the starldr.
	- Fixed a crash bug in 3ds2lev with sprites if the 3ds file doesn't
	  have texture mapping information.
	- Eric Sunshine started fixing problems caused by the introduction of
	  csFindSystemRoots().	The implementation broke linkage on several
	  platforms as a result of incorrect organization and makefile
	  modifications.  Fixes for other problems will be forthcoming.	 Other
	  problems include an apparent double-delete of allocated strings,
	  unnecessary code inefficiencies, and poor API.
22-Aug-2002
	- res did the following:
	    - Added custom CSS stylesheet for docs.
	    - Added a new doc module Engine/Lighting.
	    - Fixed typo in aws.h.
	    - Added paragraph about problems w/ non-latin chars in CS path
	      to MSVC docs.
	    - More documentation modules.
	    - Fixed a bug in csComponent::do_handle_event where a
	      crash occured after a child component destroyed itself
	      inside HandleEvent().
	    - Removed '#include "imap/services.h"' from initapp.cpp.
	    - When csLoader::LoadImage() doesn't find a file it now tries
	      various different extensions an cases.
	    - StdLoaderContext::FindMaterial() now also tries to load a
	      texture with the material name if one couldn't be found.
	    - When a material in a list couldn't be parsed this isn't fatal
	      any more.
	    - Added a 'null' cache. (does nothing)
	    - Viewmesh uses this null cache now.
	    - Viewmesh ChDir()s to the sprite's directory before loading it.
	    - Added some of Report*() flavors to csLoader.
	    - In include/cssys/win32/csosdefs.h <windows.h> isn't included
	      any more, but a set of very basic required includes. this
	      speeds up compiling of some files.
	    - <windows.h> is included in a few places where it's needed.
	    - Added same changes to cygosdef.h, but disabled, as they aren't
	      tested yet.
	- Matthias Braun fixed deps of csws in cs-config.
	- Mathew Sutcliffe (Oktal) added 'conf' command to vsh to load another
	  VFS config file.
	- Philip Wyett reverted the removal/move of Windows.h for a minor
	  compilation improvement. It broke certain plugins which is
	  un-acceptable.
	- Fixed Cs2Xml for DURATION and FRAME commands in motion loader.
	- Cs2Xml now supports the normal notation for vertices in 3D
	  sprites (i.e. V (x,y,z:u,v:nx,ny,nz)).
	- When you give a zip file as argument to Cs2Xml it will now
	  convert all CS files it can find in that zip file (including
	  subdirectories). In addition it will make backups of all the
	  files that it converts (.bak extension).
	- iLoader::LoadLibraryFile() now detects XML and switches accordingly.
	- iLoader::LoadMeshObjectFactory() now detects XML and switches
	  accordingly.
	- iLoader::LoadMeshObject() now detects XML and switches
	  accordingly.
	- Improved error handling in the standard loader again (using
	  more of the new syntax services ReportError() and ReportBadToken()).
	- Fixed a bad bug in cs2xml. The created backup file was corrupt
	  because it was already being treated by the old CS parser which
	  overwrites the string that was read.
	- Fixed another related bug in cs2xml.
	- Converted standard.zip to XML.
	- Added support for ROT and Q (quaternions) in cs2xml.
	- Converted blocks.zip to XML.
21-Aug-2002
	- Today Peter Amstutz reports: 'whee'.
	- Implemented XML version of the spiral loader.
	- Fixed a bug in cs2xml with parsing of the RADIUS
	  keyword. This RADIUS can be used for single radius (lights)
	  or vectors.
	- Fixed a similar bug with SCALE which can be used with
	  two or one parameter.
	- Converted partsys to XML. Seems to be working fine now.
	- Fixed a fundamental problem in the csPluginLoader class. Plugins
	  used to query for other components in their 'Initialize' routine.
	  However csPluginLoader calls load+initialize for every plugin
	  and only registers a plugin after it has been loaded AND
	  initialized. This means that during the call to Initialize() it
	  is possible (and even likely) that some other component cannot
	  yet be found because it wasn't yet loaded and registered. This
	  bug caused the reporter to be ignored in apps like walktest
	  and so on. The fix for this is to delay initialization of a
	  plugin until ALL plugins are loaded and registered. I had to
	  extend iPluginManager::LoadPlugin() with a new optional parameter
	  which indicates that no initialization is required.
	- Greatly improved error reporting in syntax services. There is now
	  a new ReportError() function there which takes a message id, a
	  message, and the node that causes the error. From that node it
	  will construct a path with type of the node and the optional
	  'name' attribute so that it is easier to locate the error. This
	  feature is very useful especially since there are no line numbers
	  to depend on in XML.
	- Also added ReportBadToken() to syntax services.
	- All new XML loader plugins now use the new ReportError() and
	  ReportBadToken() functions.
	- Csparser no longer reports error that it cannot load a mesh object
	  factory or mesh object. It is assumed that the mesh object loader
	  will have reported its own error already.
	- Added mention of csRef to the faq.
	- Added explanation to faq of how Z-buffer initialization works in CS.
20-Aug-2002
	- Implemented XML version of the spr2d mesh object loader.
	- Added new ParseBox() in syntax services (for XML).
	- Implemented XML version of the gtreeldr.
	- Implemented XML version of the gmeshldr.
	- Implemented XML version of the meta ball loader.
	- Implemented XML version of the emit loader.
	- Implemented XML version of the fountain loader.
	- Implemented XML version of the snow loader.
	- Implemented XML version of the fire loader.
	- In most of those loaders the error handling is also better now (in
	  some it was simply non-existant before conversion).
	- In addition I made the error handling a little bit cleaner by
	  using csRef smart pointers.
	- Implemented proper conversion of PRIORITY in cs2xml.
	- Implemented proper conversion of PLUGIN in cs2xml.
	- Fixed a bug in XML parsing of render priorities in main loader.
	- Cs2xml will remove underscores in tokens now. This fixes a lot
	  of loader issues.
	- Cs2xml correctly converts NUM(x,y) for genmesh.
	- Cs2xml correctly converts VERTICES for spr2d and genmesh.
	- Cs2xml correctly converts UV for polygons and spr2d.
	- Cs2xml correctly converts TRIANGLES in genmesh.
	- Cs2xml correctly converts F inside ACTION for 3d sprites.
	- Cs2xml correctly converts EMITBOX, EMITFIXED, AGING,
	  and RECTPARTICLES (emit particle system).
	- Cs2Xml correctly converts DROPSIZE, BOX and ORIGINBOX.
	- Fixed a bug in cs2xml with converting of old style lights.
	- Cs2Xml will now translate POLYGON to 'p' and work correctly
	  in case 'P' is used.
	- Fixed a bug in the bezier loader addon.
	- Cs2Xml correctly converts KEY.
	- Cs2Xml correctly converts RADIUS.
	- Fixed a bug in cs2xml where it would not properly recognize strings
	  if they have no quotes.
	- Cs2Xml correctly converts COLORS for spr2d.
	- Cs2Xml correctly converts W for warp.
	- Fixed a few bugs in the syntax services for parsing of polygons.
	- Cs2Xml correctly converts FOG.
	- Cs2Xml correctly converts HALO.
	- Cs2Xml correctly converts CURVECONTROL and CURVECENTER.
	- These changes are sufficient to fully convert /data/flarge/world
	  to XML. Consequently I also commited the XML version of 'world'.
	  Note that ONLY stuff that is used in flarge is guaranteed to
	  work. Nothing else has been tested and some mesh object plugins
	  are not even converted. This is true both for cs2xml and for
	  the XML loading itself. The XML loader seems a little bit slower
	  compared to the old lower although the difference isn't much.
	  There is still a lot of room for optimization though.
	- Cs2Xml correctly converts EMITSPHERE, EMITCYLINDER, EMITLINE, and
	  EMITCYLINDERTANGENT.
	- Cs2Xml correctly converts REGULARPARTICLES.
	- Cs2Xml correctly converts DIRECTION and DIRECTIONAL.
	- Cs2Xml correctly converts SOURCE.
	- Cs2Xml correctly converts HAZEBOX and HAZECONE.
	- Implemented XML version of the haze loader.
	- Cs2Xml now considers '-' as a valid token in a string without
	  quotes.
	- Fixed an error in the new XML loading stuff. Thanks to
	  MatzeB for finding this using valgrind.
	- Implemented XML version of the rain loader.
19-Aug-2002
	- Matthias Braun did the following:
	    - Removed default -lcsengine output when no libs where specified
	      from cs-config.
	    - Removed csws default as well.
	- Philip Wyett did the following:
	    - Minor fix to MSVC project file generation.
	    - Updated project to take account of CS'es dynamic nature.
	      Changed C/C++ directive /MT and /MTd too /MD and /MDd. This
	      fixes all wonky unresolved externals at link time for external
	      projects. Make the change in projects like Pinball etc and you
	      will get successful compilation again.
	    - Brought release build up to date.
	    - Fixed MSVC/Windows runtime problems or possible problems in CS
	      apps and plugins. CS no longer requires or uses the:
	      /nodefaultlib:"libname"
	      anymore under MSVC6. Chances are now if you get a conflict it
	      is at app level or another lib you are using with your project.
	      :)
	    - Removed divx plugin from MSVC project until it is fixed.
	- Implemented XML version of the ball mesh object loader.
	- Fixed a memory leak in SKELETON statement of spr3d loader.
	- Converted the 3D sprite loader to XML.
17-Aug-2002
	- Better error message is a texture could not be loaded in
	  the loader.
	- Implemented XML loading for PROCTEX in the csparser plugin.
	- Implemented HALO parsing in XML for lights.
	- cs2xml will now correctly export lights in old and new
	  syntax. Halos are not yet properly supported.
16-Aug-2002
	- Implemented XML loading in the csparser plugin for the following
	  items:
	    - Library (LIBRARY)
	    - Sounds (SOUNDS and SOUND)
	    - Lod control (LOD)
	    - Mesh factory (MESHFACT)
	    - Mesh object from factory (MESHREF)
	    - Add-on (ADDON)
	    - Settings (SETTINGS)
	    - Render priorities (PRIORITIES)
	    - Collections (COLLECTION)
	    - Start (START)
	    - Keys (KEY)
	    - Nodes (NODE)
	- Additionally implemented:
	    - Texture generation (HEIGHTGEN)
15-Aug-2002
	- Eric Sunshine changed next.mak so that it only uses the CFLAGS
	  -Ilibs/zlib, -Ilibs/libpng, -Ilibs/libjpeg and the LFLAGS
	  -Llibs/zlib, -Llibs/libpng, -Llibs/libjpeg if those directories
	  actually exist, rather than using the flags unconditionally.	This
	  change will eliminate the annoying MacOS/X (Apple/NeXT) linker
	  warnings about non-existent directories.
	- Eric Sunshine eliminated a number of compilation warnings in csutil.
	- Eric Sunshine fixed csconf.mak so that it only executes the sed
	  commands when the top-level `csconfig' target is invoked, rather than
	  when _any_ target is invoked.
14-Aug-2002
	- Peter Amstutz did the following:
	    - Replaced ClipLine() (in common canvas code) with a simpler, more
	      efficient and less buggy algorithm.
	    - More fixes to Debian scripts.
	- Removed CreateElement(), CreateText(), and CreateComment() again.
	  Will do this differently.
	- Added iDocumentNode::CreateNodeBefore() to create nodes before
	  the given node (or at end if given node is NULL).
	- Renamed csXmlNodeType to csDocumentNodeType. Also renamed
	  the CS_XMLNODE_... constants to CS_NODE_....
	- Fixed unittest of syntax services. It was performing a bad
	  test with the 'scale' token.
	- Added iString::Format() and FormatV() (similar to csString versions).
	- Renamed ParseXML() and WriteXML() to Parse() and Write() in
	  iDocument.
	- Implemented a VERY dirty hack in the TinyXML source code. We would
	  like to avoid modifying those sources too much (to make it easier
	  to upgrade if that is needed). However I needed a function to write
	  out XML to iString as opposed to FILE*. So I just redefined FILE
	  and all FILE related routines (fprintf, ...) to work on iString :-)
	  Of course, this hack is local to the TinyXml sources.
	- Added version of Write() that takes a VFS filename.
	- Implemented three versions of Write() to write out document files.
	- Removed all CreateAttribute... and MoveAttribute... functions
	  from iDocumentNode. Instead there is only SetAttribute() which is
	  now implemented.
	- Added SetValueAsInt() and SetValueAsFloat() for iDocumentNode.
	- Added iString, csString, and scfString versions of SetFastGrowing().
	  Use this new flag if you have a string that grows a lot (i.e. lot
	  of Append() calls). It will consume more memory but it is a LOT
	  faster. If you don't plan on doing a lot of Append() calls then
	  do not use this.
	- The TinyXml output now uses this option for writing out XML to
	  an iString. This GREATLY speeds up XML writing (from a minute to
	  about a second :-)
	- cs2xml now uses XML writing with TinyXML. Still not 100% operational.
	- Added a warning in mk/user.mak with regards to the usage of
	  USE_SHARED_LIBS.
	- cs2xml now does a very good job of converting flarge to XML. I
	  think it is nearly perfect now. It also translates TEXTURE to
	  'texmap' (in case we're in a polygon) and it combines PORTAL
	  and WARP keywords into 'portal' section.
13-Aug-2002
	- Philip Wyett did the following:
	    - Removed: CS_EXTENSIVE_MEMDEBUG at this time. This causes
	      problems with CalTocs and in other areas.
	    - Added section to MSVC documentation to make sure the user
	      realizes they need to add the 'include' and 'libs' directories
	      into MSVC so that the compiler can see them for the build.
	    - Updated links in docs to reflect a new msvc_libs	for v6 release.
	      This release fixes a problem with Freetype2 and halves the lib
	      size. This is work ongoing as contact with the Freetype team is
	      difficult when they don't reply to emails.
	    - Removed an include to now removed awsclip.h.
	- Matthias Braun did the following:
	    - Fixed a warning that sometimes happens in crystal.m4.
	    - Removed unused file awsclip.h and awsclip.cpp.
	- Peter Amstutz fixed Debian scripts to make thing compile more
	  nicely with recent CS.
	- Implemented XML versions of LoadMap() and LoadSector() in the
	  main loader.
	- Added XML version of ParseColor() to syntax services.
	- Added XML version of ParseStatLight() to the loader.
	- Implemented XML parsing of textures and materials in loader (things
	  like procedural textures and heightmap texture generation tools are
	  not yet converted).
	- Implemented XML parsing of 'plugins' block.
	- Implemented XML parsing of 'meshobj'.
	- Modified LoadMap() in the main parser so that it will automatically
	  switch to XML loading if the first non-blank character in the
	  read buffer is equal to '<'.
	- LoadMap() will also see if it can find an iXmlSystem in the object
	  registry. If not it will use the tinyxml parser. Using that it is
	  possible to make your own implementations of iXmlSystem using another
	  XML parser.
	- Fixed cs2xml so that it makes an XML world file that can almost be
	  read by the current loader (still need to fix a few things manually
	  but I will not continue writing cs2xml like this anyway. The plan is
	  to let cs2xml generate a node tree and output that using the XML
	  system). By doing this I could confirm that XML map loading works
	  for very simple levels now (sectors, textures, materials, lights,
	  and thing mesh objects). This is a very nice step indeed.
	- Did the following renames:
	    iXmlSystem -> iDocumentSystem
	    iXmlNode -> iDocumentNode
	    iXmlAttribute -> iDocumentAttribute
	    iXmlDocument -> iDocument
	    iXmlAttributeIterator -> iDocumentAttributeIterator
	    iXmlNodeIterator -> iDocumentNodeIterator
	    csTinyXmlSystem -> csTinyDocumentSystem
	- Renamed iutil/xml.h to iutil/document.h.
	- Added CreateElement(), CreateComment(), and CreateText() to
	  iDocument. Use these functions to create unlinked nodes. Later
	  you can add them to a parent node.
	- Removed iDocumentNode->Create...() functions.
12-Aug-2002
	- Renamed the XML version of ParseTexture() to ParseTextureMapping()
	  as that more accuratelly reflects what happens (in syntax
	  services).
	- Renamed the XML version of ParseWarp() to ParsePortal() and
	  also added parsing of the destination sector there (syntax
	  services).
	- Implemented ParsePortal() in syntax services.
	- Removed XML version of ParseShading() in syntax services. It
	  isn't that useful to keep as a separate routine.
	- Added XML version of ParseBool() to syntax services.
	- Partially implemented XML version of ParsePoly3d() for syntax
	  services. This means that syntax services nearly completely
	  supports XML now.
	- Implemented XML thing loading. This includes plane and
	  bezier addon-loaders.
11-Aug-2002
	- Philip Wyett fixed compile error under MSVC 6 for msmodel.cpp.
9-Aug-2002
	- Matthias Braun fixed registration of aws component factories.
	- Added convenience functions to get a value from a node (iXmlNode).
	  This will basically search for the first TEXT child in the node and
	  return the value of that child.
	- Changed GetType()/SetType() to GetValue()/SetValue() in iXmlNode.
	  Added GetType() which returns the type of the node.
	- Implemented ParseMatrix() in syntax services for XML.
	- The OpenGL renderer will now register the effects server with
	  the object registry after loading it.
	- Added (empty) unittest implementation for csutil. More specifically
	  for the XML parsing tools.
	- Added unittest implementation for syntax services to test the
	  new XML functions. ParseVector() already seems to work but there
	  are still a few problems.
	- Extended unittest app to call the new unittests.
	- Fixed a stupid bug in iXmlNode::GetAttribute() (for TinyXML parser).
	- Fixed a bug in iObjectRegistry::Register() where it would accidently
	  increase the ref count on the object with a given tag if that tag
	  was already defined.
	- Matrices and Vectors now parse nicely with the new XML parser.
	  The syntax loader unit test now succeeds.
	- Eric Sunshine fixed the cslexan makefile, which was recently broken,
	  so that it once again produces a plugin.
	- Implemented XML parsing for mixmodes in syntax services.
	- Implemented XML parsing for texture specifications in syntax
	  services.
	- Removed scalex, scaley, and scalez. There is now only 'scale' which
	  has four optional arguments (x, y, z, and all).
	- Added a VERY short and incomplete Schema for the CS map file format.
	  This is very much work in progress as I'm still learning Schema.
	  Look in scripts/xml.
	- Eric Sunshine fixed numerous problems introduced recently into
	  csconf.mak, including garbled sed commands, many improper quoting
	  issues, and invalid expansion of makefile variables by the shell when
	  the shell synthesized the makefile fragment in response to
	  --makevars.
	- Eric Sunshine changed csconf.mak so that cs-config now has real
	  dependencies, which means that it will be rebuilt only when its
	  dependencies change, rather than being rebuilt each time the target
	  is invoked.  The current dependencies are config.mak, mk/user.mak,
	  and the currently configured platform-specific makefile (i.e.
	  linux.mak).
8-Aug-2002
	- res did the following:
	    - Changed some clean targets to be same name as the build
	      targets (eg walkclean -> walktestclean).
	    - Reactivated plugin resource stuff.
	    - Documentation stuff. added some include file descriptions and
	      a new module, '3D Engine'.
	    - Minor changes in documentation (some doxygen stuff, no
	      content changed).
	- Philip Wyett fixed include in ms2spr.cpp for the 3rd and LAST time!!!
	- Daniel Duhprey added MeshCylinder collisions to the ODE dynamics
	  plugin.
	- Removed support/doom2cs again. This doom2cs utility can now be
	  found at ftp://sunsite.dk/projects/crystal/contrib/doom2cs.zip
	- Ryan Surkamp applied a fix to the bcterr landscape engine.
	- Removed support/gnu/bison.sim file. As far as I could see this file
	  is not used in CS. If it appears I looked wrong then we can always
	  put it back.
	- Removed the old memory debugger in support/debug. There are
	  better tools out there now (valgrind for example) and I'm not even
	  sure this system still works.
	- Moved fpu80x86.h to include/csutil.
	- Completely removed the 'support' directory from CS since it is now
	  empty.
	- Implemented basic reading of XML. You can now read an XML document
	  and parse of nodes and attributes. Writing of XML is not supported
	  yet. And not all operations for reading are supported either.
	  i.e. use the iterators. Nothing else works.
	- Added xmltest application to dump the contents of an XML file.
	- Fixed an error in mergeres.h by quoting the quotes.
	- Steven Geens fixed the motion manager plugin. Motions will now
	  work correctly if no key frame is defined for timeframe 0.
	- Extended iLoaderPlugin with a new version of Parse() that accepts
	  an iXmlNode instead of a string. This new version is not yet used.
	  Put empty implementations of this Parse() in all mesh loaders. This
	  function will provide the upgrade path to the new XML format. Once
	  the upgrade is complete the old version will be removed.
	- Internally extended the main loader plugin with new functions to
	  parse from iXmlNode instead of char*. All these new functions are
	  still empty and will be gradually implemented.
	- Extended iSyntaxService with new functions that load from XML
	  data instead of char* data. Some of these functions are actually
	  implemented and should work. This is untested though.
	- Added a few functions to iXmlNode and also changed the names
	  which refered to 'children' so that they now specify 'nodes'.
	  You can now access nodes by type and attributes by name more
	  easily.
	- Also added convenience functions to iXmlAttribute to set values
	  as int and float.
	- Steven Geens added a motion test program. With this program you can
	  see the motion manager in action.
	- Steven Geens also fixed bugs in the Milkshape 2 CS convertor.
	- Added new csStringHash class. This is a simple hash of strings
	  where you can assign unique id's to strings. The old csStringSet
	  (which differs because it automatically assigns id's) now uses
	  this new csStringHash.
7-Aug-2002
	- Matthias Braun did the following:
	    - More improvements to crystal.m4, also removed some comments
	      from diablo like "damn damnit shell".
	    - Fixed an error in cs-config I introduced with my latest changes.
	    - Removed now obsolete genscript.sh file.
	    - More fixes for cs-config.
	- res did the following:
	    - Added information about changed make targets to api modification
	      doc.
	    - Fixed an off-by-one error csGraphics2DGLCommon::GetPixelAt()
	      which sometimes caused a crash when making a screenie.
	    - Made csSpriteBuilder::Build() 'smarter': instead of making an
	      output vertex of every point of every polygon it now only
	      outputs vertices with a unique point/normal/texture coord. combo
	    - Changed default texture corrdinates for files without them
	      to a planar mapping.
	    - Added some support for normals to the 3d sprite loader
	      (optional; appear behind a texcoords [V(x,y,z:u,v:nx,ny,nz)],
	      default to zero so they are calculated by
	      csSprite3DMeshObjectFactory::ComputeNormals() when not
	      specified).
	    - csSprite3DMeshObjectFactory::ComputeNormals() now only calculates
	      normals when they are already zero and leaves non-zero
	      normals alone.
	    - Changed the new DrawTriangleMesh() so that it calls
	      OldDrawTriangleMesh() all the time. imho better for the
	      time it's not complete yet.
	    - Changed a few of bit phil's latest changes (in
	      csGraphics3DOGLCommon::PerfTest(): buf is now char[4] instead of
	      char[3]; moved config->SetStr()s out of the for loops).
	    - Added doom2cs to CVS.
	- Philip Wyett performed a little code clean up in OpenGL renderer,
	  moving some array allocation into for loops.
	- Eric Sunshine fixed a couple problems with csconf.mak.  First, it was
	  using " instead of $".  It was using the hardcoded path "out/"
	  instead of $(OUT).
	- Eric Sunshine (hopefully) worked around a problem caused by buggy
	  stat() on Win9x and WinME where a bogus result is returned if the
	  path has a trailing slash.  This causes problems with the makefile
	  dependency rules which depend upon $(OUTBASE), $(OUTOS), $(OUTPROC),
	  or $(OUT), all of which end with a slash, since make thinks that
	  those directories don't exist even when they are present.
	  Consequently, make tries invoking $(MKDIR) on already-present
	  directories.	The work-around was to redefine these variable so
	  without the trailing slash.  Also updated all makefiles throughout
	  the project to take into account that these variables are no longer
	  defined with a trailing slash.
	- Eric Sunshine removed the unmaintained and obsolete csphyziks library
	  and phyztest programs.
	- Eric Sunshine fixed bug in crystal.m4: enable_cstext versus
	  enable_cstest.
6-Aug-2002
	- Philip Wyett did the following:
	    - Using zlib again under MSVC.
	- Charles Al-Quarra moved unmaintained blender scripts to
	  'scripts/blender/unmaint' and reorganized the directory
	  in general.
	- res did the following:
	    - Added a bit of information on the rc merger script expects
	      rc files to be shaped.
	    - Deactivated resource stuff for plugins again, there are
	      still problems.
	    - Small changes to calculation of glyph bitmap height and my
	      workaround for miscalculated sizes. fonts are rendered a bit
	      better now.
	- Philip Wyett did the following:
	    - Fixed compile error in cs2xml.
	    - Png plugin now links again with png.lib in msvc_libs for time
	      being.
	    - Removed debug on copyto step, now issue is fixed.
	    - Fixed void functions trying todo returns (effects plugin).
	    - Back to using freetype2.lib for a while.
	- Extended iXmlNode with functions to create and move nodes
	  and attributes. Added iXmlDocument as a representation of a document.
	  Added iXmlSystem which represents the XML system in general.
	- Removed JNG image target from walkall. It is not an essential
	  target to have.
	- More work on cs2xml.
	- Started work on integrating TinyXml XML parser into CS. Currently
	  we integrated the TinyXml sources in csutil. Please do not start
	  modifying those sources unless needed to fix warnings or errors.
	  The TinyXml include files are not in include/csutil because they
	  are not public. To use TinyXml parser you must instantiate an
	  instance of class csTinyXmlSystem and start from there.
	- Eric Sunshine fixed a problem with libs/cssys/win32/mergeres.sh where
	  it was outputting ICON lines with a leading, but no trailing
	  quotation mark.  Also fixed this script so that it works with older
	  versions of sed which do not understand alternation (`|').
	- Eric Sunshine fixed several problems with dddraw.mak after recent
	  changes caused it to stop working.
	- Eric Sunshine fixed the "clean" target so that it removes all of
	  those annoying debug .txt files.
	- Eric Sunshine merged msys.mak into win32gcc.mak in order to reduce
	  future maintenance headaches.	 msys.mak kept lagging behind
	  win32gcc.mak.
	- Eric Sunshine fixed the following problems with the Texinfo
	  documentation:
	    - Syntax error in mapfmt.txi.
	    - Fixed to work with makeinfo program from the Mingw/MSYS
	      distribution which complains if @ref{} and cousins are split over
	      multiple lines.  The following files were affected: rain.txi,
	      snow.txi, 3dsprite.txi, internal/platform/next.txi.
5-Aug-2002
	- Philip Wyett did the following:
	    - Some documentation updates (link updating).
	    - Fixed redefinition of i spotted by groton (in OpenGL).
	- res did the following:
	    - Changed the make targets of all applications to the name of the
	      resulting binary the way Eric Sunshine suggested. e.g. 'walk'
	      becomes 'walktest'.
	    - Did the same for all plugins.
	    - In some cases, the MSVC project differed from the name for all
	      other platforms, changed those.
	    - Flipped the order of the include directories for MSVC resource
	      compiler so the right 'volatile.h' is used.
	    - Added include dirs for resource compiler to msvc7 projects.
	    - Changed imgplex so that initialization will not fail when no
	      image loading plugins are present. this avoids a crash in this
	      case.
	    - Fixed problem with make depend.
	    - Added 'mergeres.sh'. takes a couple of .rc files and
	      merges them, also fixing paths to external files (currently
	      just icons...)
	    - Killed compres.sh
	    - Mergeres is now used by msvcgen and the mingw build process.
	- Peter Amstutz added default aws data files to the Debian
	  distribution.
	- Removed CS_GNUC_PRINTF macros with iGraphics2D->PerformExtension()
	  since this doesn't make sense. PerformExtension() doesn't follow
	  printf formatting rules.
	- Avoided several warnings in ogl_g3dcom.cpp.
	- Fixed DrawTriangleMesh() in OpenGL renderer so it no longer crashes
	  if no material is given.
	- Fixed csParser so it will now also copy the token to
	  GetUnknownToken() even if the token is not known.
	- First attempt at making a conversion tool to convert the old
	  style world files to a new XML format. This is unfinished though.
	- Eric Sunshine made these additional changes to msvcgen.mak:
	    - Fixed problem where generated project files were referring to .rc
	      resource in CS/out/mk directory, rather than CS/mk/visualc[7].
	    - Fixed problems with the top-level msvcgen install and clean
	      targets where the MSVCGEN_VERSION was not being correctly set on
	      Unix.  (It probably worked on Windows, though, because shell
	      variables have a different scope on Windows than in Unix.)
	    - Folded out a bunch of common code in the root targets makefile
	      section.	This will reduce future maintenance headaches.
	    - Fixed the global "clean" target so that it works correctly with
	      the merged (msvc + msvc7) msvcgen makefile.
	- Eric Sunshine added apps/import/caltocs to msvcgen/required.mak.
	- Eric Sunshine fixed msvcgen templates so that they provide the
	  resource compiler with sufficient information so that the headers
	  #included by the .rc files can be found.
	- Eric Sunshine fixed mk/msvcgen/win32.mak so that the libcssys project
	  file is once again created correctly following the replacement of
	  DSP.PROJECT.RESOURCES with $(PROJECT.EXE).WINRSRC.
	- Eric Sunshine temporarily disabled msvcgen.mak's use of
	  $(PROJECT.EXE).WINRSRC since it causes problems at build time.  The
	  exact problem is that when WINRSRC points at
	  CS/libs/cssys/win32/rsrc/cs1.rc, the .res file is created in the same
	  directory.  However, at link time, MSVC expects to find the .res file
	  in the buid directory (CS/mk/visualc/csdebug/temp/walktest, for
	  example).  We need to devise a reasonable solution for this problem.
	- Eric Sunshine temporarily disabled use of $(PROJECT.EXE).WINRSRC in
	  win32gcc.mak since it was causing problems for users.	 In particular,
	  the Mingw resource compiler wants to know the path to the cs1.ico
	  file from the CS root directory, rather than just the relative path
	  from the CS/libs/cssys/win32/rsrc directory.	This problem is in
	  some fasion related to the problem experienced by MSVC users.	 We
	  need a proper solution.
	- Added iXmlNode and iXmlAttribute. These are proposals for the
	  XML interfaces we're going to use in CS.
4-Aug-2002
	- Matthias Braun did the following:
	    - Changed m4 macro name from AM_PATH_CS to AC_PATH_CS to indicate
	      that this macro has nothing to do with automake but only with
	      autoconf.
	    - Gave m4 macro a uniform naming crystal which is more clear.
	- res did the following:
	    - Forgot to commit an OpenGL header.
	    - Temporary fix to msvcgen. disabled .rc generation until we
	      find out how to properly fix it.
	    - Found a reason for the crash of the new DrawTriangleMesh().
	      it always passed the pointer of the original triangle data to
	      glDrawElements() which caused problems when the mesh is clipped
	      and the resulting mesh had less triangles than the original. now
	      it crashes less but isn't bug-free yet. check the sydney level:
	      walk into a sydney and look around.
	    - Merged msvcgen.mak and msvc7gen.mak into one file.
	      Upon msvcgen/msvc7gen the envvar MSVCGEN_VERSION is set
	      to either 6 or 7 and the makefile behaves accordingly.
	    - Added *.rc to .cvsignore.
	    - Added 'nice' descriptions for version info
	      and fixed some makefiles to properly support this (msvcgen).
	- Philip Wyett did the following:
	    - Implemented Effects additions iMaterial here in iso engine.
	- Eric Sunshine made the following changes to mk/msvcgen/msvcgen.mak
	  and msvc7gen.mak:
	    - Fixed numerous bugs in the .rc file generation support code which
	      was recently added.
	    - Once again works with older versions of GNU make.	 No longer uses
	      recently added features of GNU make, such as $(if ...).
	    - Now invokes .rc creation shell scripts with $(RUN_SCRIPT) to
	      ensure that it finds the correct shell.  This allows it to once
	      again run on Unix.  (The problem was that the shell scripts do
	      not have execute permission enabled in the CVS repository.  This
	      fix works around that problem.)
	    - Once again works with older versions of sed.  No longer uses
	      advanced sed features.
	    - Fixed comments which became outdated after recent changes.
	    - The "clean" target now cleans only files and directories related
	      to the particular makefile, rather than blasting the entire
	      CS/out/mk directory.
	- Eric Sunshine made the following changes to mk/msvcgen/msvcgen.pl:
	    - Fixed create_project() so that the so-called "dummy file" ends
	      with a line terminator.
	- Eric Sunshine made the following changes to libs/win32/mkverres.sh:
	    - Fixed the composition of FILEVERSION which seemed to be bonked.
	    - Fixed so that it works with older sed programs which do not
	      understand [:digit:].
	    - Fixed quoting problems in sed rules.
	    - Simplified composition of the output .rc file.
	    - Added missing line terminator at end of file.
	- Eric Sunshine made the following changes to libs/win32/compres.sh:
	    - Fixed so that it works with older sed programs which do not
	      understand [:alnum:].
	    - Added missing line terminator at end of file.
3-Aug-2002
	- Matthias Braun did the following:
	    - AWS: fixed EnterKeyPressed signal for AwsTextbox.
	    - Really fixed the aws key problem now, it was needed to have
	      KeyCode and Char in Keyboard events.
	    - Removed debug code I left in awstextcomponent.
	- res did the following:
	    - Version information is generated for MSVC projects.
	    - Small fixes for other version info stuff.
	    - Fixed weird linebreaks in csglext.h.
	    - Changed the way GL exts are detected.
	      Instead of iterating through Video.OpenGL.UseExtension now the
	      extension list from the driver is compared with an internal
	      list of supported extensions. That has the advantage that not
	      only explicitly activated exts are reported, but also supported
	      but deactivated ones.
	    - Changed the way GL exts are initialized.
	      Instead of having a single routine with lots of conditionals
	      a combination of macros and generated source files is used. so
	      instead of having to add/change code in several places it's
	      now sufficient to add a line in a single file and run a script
	      when adding support for a new extension.
	- Philip Wyett fixed something which he shouldn't have had to fix
	  in milk2spr.
	- Philip Wyett implemented fix submitted by Angel Lucas Gonzalez
	  Martinez, which elimenates a possible stack overflow.
	  Added some memory checking to backup the fix (oglg2d.cpp).
	- Added effects system plugin from Anders Stenberg.  Since I have
	  crashes with the OpenGL patches to actually use this system I am not
	  commiting those.  So at this moment the 'effects' plugin is
	  completely unused and unusable until I manage to fix the problem.  I
	  will add more documentaiton about this new system later.
	- I found out what routine is crashing.	 It is the new version of
	  DrawTriangleMesh() which seems to give problems in some cases.  As a
	  workaround I just call OldDrawTriangleMesh().	 This basically means
	  that the effect system is not yet functional although it is now fully
	  in CVS.  Still have to debug what's wrong with the new implementation
	  of DrawTriangleMesh().  Documentation and extensions to the current
	  loader for the new effects will be added soon.
	- In addition to effects the patch from Anders also adds an OpenGL
	  state cache to the OpenGL canvases.  That should optimize state
	  changes and speed up a little more.
2-Aug-2002
	- Philip Wyett added cslua plugin. Not in build by default.
	- res did the following:
	    - Merged the msvc project generators.
	    - Changed a few msvc6 project options to match their msvc7 cousins:
	      all projects use runtime dll
	      CS_EXTENSIVE_MEMDEBUG defined
	    - Windows resource files are now specified w/ <project>.WINRSRC
	      instead in DSP.<project>.RESOURCES
	    - Fixed some issues w/ ddraw palettes (g2d.cpp).
	    - Changed syntax for use of windows resources again; makefile var
	      is now "$(<project>.EXE).WINRSRC"
	    - Resource files are now used on mingw.
	    - On mingw version information for the dlls/exes is generated.
	- Philip Wyett did the following:
	    - Preparing for a fixed Freetype lib.
	    - Fixed compile errors under MSVC 6 (msmodel.cpp).
	    - Revert of above change with freetype. Will force this fix
	      inside Freetype.
	- Eric Sunshine eliminated several unnecessary, and inadvertently
	  inserted, event dispatch loops from csEventQueue::Process().
	- Steven Geens updated the milk2spr convertor so it also converts
	  the motions (for the motion manager). This works mostly but there
	  are still a few bugs. For example, sometimes there is a 360
	  degree rotation and sometimes it mirrors the model along Y-axis.
1-Aug-2002
	- Philip Wyett made constructor and destructor names match class name
	  (gl-ext).
	- Added == and != operators to compare csRef& and T* instances.
31-Jul-2002
	- Matthias Braun did the following:
	    - Changed Assign function of csRef. It now IncRefes the pointer
	      that it gets.
	     - Added Take function to csRef that takes an already IncReffed
	       object.
	     - Fixed simple1 and simple2 for new API
	- Christopher Nelson added a new function called "CreateSlot()" to
	  the SinkManager. You can use this to create embeddable slots.
	- Thomas H. Hendrick added initial revisions of the vertex manager
	  files (for gl-ext), which are just sketches of vertex buffes
	  that can be used to form triangle strips.
	- Eric Sunshine performed the following tasks.
	    - Changed csutil/ref.h and the csRef smart pointer template as
	      follows:
		- Added a `transfer_ownership' argument to the existing
		  Assign() method which tells Assign() whether or not
		  IncRef() has already been invoked upon the the incoming
		  pointer.  This defaults to false for convenience.
		- Eliminated the Set() method since Assign()'s new
		  transfer_ownership argument made Set() redundant.
		- Added a second Assign() method which accepts a csRef
		  reference. The presence of this method will smooth the
		  path for future API upgrades. For example, if
		  iSector::GetCow() currently returns a pointer to an iCow,
		  then code such as `ref.Assign(sector->GetCow())' will be
		  API-compatible even after GetCow() is upgraded to return a
		  csRef<iCow>.
		- Added an IsValid() method for checking if the referenced
		  object is valid (non-null).  This is semantically equivalent
		  to the existing boolean cast operator, but more explicit.
		- Fixed the boolean cast operator so that it works with
		  compilers which do not have a built-in bool type.
		  Specifically, it now returns (obj != 0), rather than
		  returning (obj).
		- Fixed incorrect include protection macros.
		- Improved class documentation.
	      For all of the curious folk out there, the csRef template _does_
	      work with the NextStep compiler, as predicted.
	    - Fixed incorrect header include protection macros in
	      csutil/refcount.h and improved the class comments.
	- Fixed behaviour of csRef::Assign(). By default it will now
	  transfer owner ship (for pointers) as was intended in the first
	  place.
	- Converted simple2 tutorial to use smart pointers.
	- Fixed csRef::Assign() so it now correctly tests for NULL pointers.
	- Got Yet Another Blender export script from Krishnan Shrikumar
	  <krish@urbyte.com>. This one exports entire levels. You can find
	  it in scripts/blender/sectorexport.
	- Added 'explicit' keyword to csRef constructor which takes a normal
	  pointer so that you cannot misuse the assign anymore.
	- Removed the 'bool' cast for csRef because this was
	  ambigious.
	- Eric Sunshine added csRef::operator=(T*).  Eliminated all Assign()
	  methods since they were subsumed by the equivalent functionality of
	  the assignment operators.  Fixed reference-counting bug in
	  csRef::Take().
	- Added patch from Jochen Moench <jochen.moench@de.thalesgroup.com>
	  to allow SetAction() which will stop the animation after the
	  action has completed. This also modifies iSprite3DState.
	  It is now also possible to include a speed factor for animation.
	- Changed csRef again so that the T* constructor now does IncRef().
	  This means that 'Take()' is the ONLY safe way to convert an
	  old style pointer that has already be IncRef()'ed into a csRef.
30-Jul-2002
	- Matthias Braun did the following:
	    - Even more Cleanups of awsmgr.cpp and awsslot.cpp.
	    - Fixed several memory leaks in aws.
	    - Fixed several refcount errors in aws.
	    - In the end removing windows and Sinks should work cleanly now.
	    - More leak fixes in the aws parser.
	- Daniel Duhprey fixed blender2cs.py so it can export to quads
	  if possible.
	- Philip Wyett did the following:
	    - Fixed dialog window sizes in aws, so things display correctly.
	    - Removed delete, fixing seg fault in simpvs (aws).
	    - Fixed operator ! ambiguity error under MSVC 7.
	      Example...
		if (!engine) {}
	      replaced with:
		if (engine == NULL) {}
	    - Plugged 2 memory leaks in demosky.
	- Added simple csRefCount class which does reference counting
	  without the need for iBase.
	- Added csRef class which is a smart pointer class that works
	  with both iBase and csRefCount pointers. Still in testing
	  phase! Thanks to Matze Braun for helping to write this.
	- Converted simple1 tutorial to use smart pointers. Note that I
	  only converted the code and not the documentation.
29-Jul-2002
	- Philip Wyett did the following:
	    - Fixed a bugfix in thing.cpp.
	    - Re-introduced custom memcpy() to fix errors under MSVC 6.
	    - Silenced compiler warning in map2cs.
	- Matthias Braun did the following:
	    - Made aws not crash if it can't find a sink while loading a
	      def file.
	    - Cleaned awsManager a little bit up and fixed a memory leak
	      and a RefCount error.
	    - Added abiltiy to unregisters Sinks from Sink Manager.
	    - Fixed aws compiling under linux: friend bla needs to be friend
	      class bla. Also Removed an unneeded g3d->FinishDraw in the
	      manager.
	- Christopher Nelson committed the patch from Mike Handverger
	  that allows programmatically creating connection nodes in aws.
	- Fixed a memory leak in csThing::PreparePolygonBuffer().
28-Jul-2002
	- Philip Wyett did the following:
	    - Commented and silenced some compiler warnings in various
	      files.
	    - qsqrt () and qisqrt () undefined warnings eliminated.
	      Moved include to qsqrt.h to below include to cssysdef.h
	      (meta.cpp).
	    - Fixed an #if / #elif in gtreeldr.cpp.
27-Jul-2002
	- Philip Wyett Fixed a leak in Blocks during destruction.
	- Added a new blender export script (blender2cs.py) written by
	  John Harger. This one exports to thing mesh factories and puts
	  those in a separate library.
26-Jul-2002
	- Eric Sunshine fixed problem reported by Reed Hedges
	  <reed@zerohour.net> where aws.mak neglected to install awsdef.zip.
	- Philip Wyett fixed in walktest: In CollisionDetect (); Added
	  DecRef on 'objit', fixing memory leak.
25-Jul-2002
	- Fixed a bug in FORWARD/UPWARD (START command in map files) so
	  that this now actually works. Keep in mind that both FORWARD
	  and UPWARD are relative.
	- Philip Wyett did the following:
	    - Eric helped cull more CS warnings under MSVC via pragma
	      and better do this. This involves reverts of previous fixes
	      and adding cssysdef.h with some new pragmas.
	    - Further to MSVC 7 whining removal.
	    - Added line to required.mak for 'opengl-ext' plugin, so even
	      when 'msvcgen' is run on a windows machine the project file
	      will be generated.
	    - Moved #include "cssysdef.h" to allow it to cull warnings
	      under MSVC 6 (caltocs).
	    - Code cleanup while familiarizing myself with code (glx2d.cpp).
	- Ryan Surkamp created HitBeamOutline functions, should work except
	  for the fact that the object code doesn't do anything to float
	  *pr.	Mainly due to the fact that I don't know what it is.
	  Left on my todo list is a code cleanup, maybe a debug helper, and
	  lighting (bcterr).
	- Ryan removed box / linesegment test. Worked on hit beams.
	  Still need to do normal creation. Might add a GetInclineNormal
	  for actual collision usage (bcterr). Also fixed a design flaw in
	  csBCTerrObject::FlattenSides ().
	- Ryan made outline object find nearest intersection, not tested
	  (bcterr).
	- Eric Sunshine made the following changes to the MingW/MSYS platform
	  configuration (msys.make and msysconf.sh):
	    - msysconf.sh is now run only once at configuration time, rather
	      than twice.
	    - msysconf.sh now determines whether or not executables and plugins
	      must be linked explicitly against libmingwex.a, which is a new
	      library containing functions such as opendir() (which used to be
	      in libmingw32.a).	 Newer interim versions of MingW do not link
	      automatically against this library, so we must do so explicitly.
	    - Fixed problem with msysconf.sh configuration where CC and CXX
	      were not defined, thus all of the tests invoked by this script
	      which required a compiler would fail.
	    - msys.mak will now utilize CS/libs/zlib, CS/libs/libpng, and
	      CS/libs/libjpeg, if present.
	- Eric Sunshine eliminated compilation warnings in ensocket/inet.cpp
	  and wodrv.cpp.
24-Jul-2002
	- Philip Wyett did the following:
	    - Added test for those using pre of GCC 3.1 under Cygwin and  if
	      true will remove -fvtable-thunks which is no longer supported
	      and emits a warning.
	    - Removed MSVC 5 documents. The MSVC 5 compiler is now NOT
	      supported for Crystal Space.
	    - Culled alot of compiler warnings under MSVC 7., some MSVC
	      specific required casts. These are yet to be tested on MSVC 6
	      or other compilers.
	    - Fixed no type compiler error under GCC (bcterr).
	    - Ecapsulated TargetPath with "". Mathew Caspersons indicated
	      as a problem with paths which had whitespace. Manual update
	      of MSVC project files.
	- Daniel Duhprey made csVector3 -> const csVector3& for speed
	  (ODE dynamics plugin).
	- res did the following:
	    - <memory.h> is included for MSVC (to fix unresolved external
	      fast_mem_copy)
	    - Changed slightly the implementation of OS-special VFS vars
	      for Windows.
	- Eric Sunshine corrected the formatting of some makefile help
	  messages.
	- Eric Sunshine introduced the new variable RUN_SCRIPT into the
	  makefile system.  This variable is used to run Bourne-style (Bash)
	  scripts.  Typically, its value is the same as SHELL, but some
	  platforms may need to change it.  For example, on Windows, if SHELL
	  is COMMAND.COM or CMD.EXE, then RUN_SCRIPT may be set to "bash".
	- Philip Wyett updated MSVC_libs to naming of other msvc_libs.
	  This version also features latest Freetype 2.1.2.
	- Ryan Surkamp extended bcterr with some functions for level editors.
	  Changed system lod usage. Fixed materials->IncRef() and DecRef().
	  Added support to change control points at runtime.
23-Jul-2002
	- Both walktest and cslight now support the 'cache:' keyword
	  on the commandline. If this keyword is given then the lightmap
	  and other caches will go to that file instead of the usual
	  map file. This is very useful in combination with multiple
	  levels. You can now say:
		walktest flarge room cache:test.zip -recalc
	  which will load flarge and room and then place all cached
	  lightmaps in test.zip. Similar for cslight.
	- The engine will now store 'precalc_info' in the cache manager
	  instead of VFS (as it should have done a long time ago).
	  It is also now called 'lm_precalc_info'.
	- Matthias Braun fixed a warning in aws and disabled RectRegionDebug
	  class because it only gives unresolved symbols on linux.
	- Noah Falk removed background drawing from the bitmap style in AWS.
	- Ryan Surkamp added CorrectSeams support and control point
	  manipulation (to bcterr). Untested until he creates a sample level.
22-Jul-2002
	- Also extended cslight tool with the ability to load multiple
	  maps and thus calculate lighting for all maps together. Note that
	  lightmaps will go to the cache of the last specified level for now.
	- David M. Asbell updated 3D sprites so they look in the direction
	  of the normal associated with the triangle specified in the sprite
	  socket that it is attached to. Also removed some test code and
	  extra csMatrix3 that was not needed.
	- Daniel Duhprey fixed ogl_g3dext.cpp to point to right .h.
	- res did the following:
	    - When doing CS_EXTENSIVE_MEMDEBUG w/ MSVC the crt's
	      built-in memory debugging support for filename/line is used.
	    - CS_EXTENSIVE_MEMDEBUG defined for MSVC 7 debug builds by
	      default.
	    - Fixed a very stupid typo that disbaled the whole MSVC debug
	      stuff (duh!)
	    - Fix so that memdebug.cpp w/ CS_EXTENSIVE_MEMDEBUG actually
	      compiles.
	    - When using MSVC w/ ext. memdebug malloc() will record
	      filename/line as well.
	    - Changed header inclusion in gl-ext so it compiles with MSVC.
	    - MSVC debug: calloc records filename/line now as well.
	    - Fixed a few line endings in caltocs.
	- Ryan Surkamp added a feature to groupmaterial (bcterr).
	- Ryan finally fixed material coordinate bug on edges in bcterr.
	- Ryan also fixed the cpu limiter and edited HeightTestExt.
	- Philip Wyett fixed the gl-ext makefile so it no longer wildcards
	  for .hpp files.
21-Jul-2002
	- Renamed new ogl_g3dext.hpp to ogl_g3dext.h.
	- Added a new feature to walktest. You can now say:
	    walktest room maze sydney
	  and walktest will load all specified levels in memory.  Sectors with
	  the same name will be merged (so objects from same-named sectors in
	  different map files will be joined in one sector). You can also
	  define world files that connect to sectors in other world files.
	  Using this technique you can easily make huge worlds from smaller zip
	  files (easier for artists to manage).  One problem at this moment: CS
	  will try to find and recalculate all lightmap information from the
	  last level given on the commandline.  So if you do:
	    walktest flarge room
	  it will not be able to load lights from flarge cache but only the
	  lights from room. I will try to find a solution for this later.
	- Thomas H. Hendrick <thomash@users.sourceforge.net> started work
	  on the new OpenGL_ext renderer.
	- Philip Wyett fixed the clean target of the new OpenGL_ext
	  renderer.
	- Noah Falk changed all the awsKey and KeyContainer classes over
	  to use an iXXX equivalent for the public API. This should fix the
	  build problems with awsecomp.h on external apps. Also I fixed
	  awstest to properly set up the engine view component. Finally I
	  added the csRectRegionDebug class and used it to fully debug
	  csRectRegion which had bugs in both Include() and Exclude(). As
	  best I can tell it is now bug-free.
	- Ryan Surkamp added iTerrFunc, and iPolygonMesh (to bcterr). Will be
	  creating a sample level, cleanup code, and get shared lod working
	  correctly again(design change). Still need to create a way to
	  determin max_LOD and use max_LOD. Still not lit. Edited draw
	  function, will be rewriting it soon. Will also be adding visibility
	  culling into the quadtree?
	- res fixed DLLWRAPWRAP under cmd.
20-Jul-2002
	- res added workarounds for crash & weird artifacts with
	  freefont 2.1.2 (maybe someone with a little more knowledge
	  about freetype than I have should find out the real cause).
	- Philip Wyett encapsulated the recently added crtdbg.h (msvc only
	  header) so it is only read into MSVC compiles (for freefnt2).
	- Philip did a minor fix to make line to invoke FreeType 2 font
	  server correct (data/config/walktest.cfg).
	- Philip updated links to msvc_libs (updated for FreeType 2.1.2).
	- Ryan Surkamp fixed texture coordinates to work with height
	  generated textures. The seems are still bugged but that isn't
	  my plugins fault (bcterr).
	- Ryan also added high level interface for bcterr. Will also be adding
	  iTerrFunc soon to work with Walktest.
	- Ryan added material group support to bcterr and also a feww more
	  collision interfaces.
	- 'res removed the include of crtdbg.h completely (leftover from some
	  debugging I did).
	- Philip Wyett re-ordered close of GLX 2d canvas. This fixes a bug when
	  quitting walktest from fullscreen. This involved the NVidia driver
	  freaking out re-probing and returning you back to the Linux login
	  screen.
19-Jul-2002
	- Got a new tutorial from Hariharan Bhasker. This tutorial
	  shows how to use the csPath class in csgeom to smoothly move
	  an object along a path. This class is also used in csdemo
	  to achieve the smooth movements of the ships in the space
	  demo. In addition to the position of the object, the forward
	  and up vectors are also interpolated by csPath. The tree
	  resulting vectors can then be used with SetOrigin() and
	  LookAt(). The tutorial is also speed independent so that
	  the object will move at the same speed on all hardware.
	- Got a new landscape engine (based on bezier curves) from
	  Ryan Surkamp <deathatsight@yahoo.com>. This engine is still
	  work in progress though but as I have seen the author seems
	  very fast in his development :-)  The new landscape engine
	  can be found in plugins/mesh/bcterr.
	- Fixed a new memory leak in iPluginManager::LoadPlugin() when
	  it would load the same plugin a second time.
	- Philip Wyett fixed include in milk2spr after filename change.
	  Additionally fixed some other compile errors there.
	- Philip also updated .cvsignore to add mng headers from latest
	  msvc_libs.
	- Philip fixed a type and addes tests of new gcvs beta for -m bug
	  fix (documentation).
	- res added .cvsignore for vc7 project files.
	- res fixed an error in the caltocs documentation found by
	  Scott DC <beuja@iinet.net.au>.
	- Ryan Surkamp added collision detection using quadtrees to
	  the bcterr landscape engine (currently unsupported by all apps).
	- Ryan also added HeightTest() function to bcterr interface.
	- Philip Wyett removed entry for 'ggi' canvas from linux.mak.
18-Jul-2002
	- Steven Geens fixed a bad bug in the RAPID collision detection
	  plugin. It now seems to work properly in all cases regardless
	  of the transforms that are given.
	- Jonathan Tarbox suggested a minor optimization in
	  csGraphics2DGLCommon::Write().
	- Added iTerrFuncState::GetHeightFunction() and GetNormalFunction()
	  so that you can retrieve the functions used by the landscape
	  engine.
	- Philip Wyett added jng plugin to MSVC port.
	- res activated dllwrapwrap (to work around that dllwrap bug
	  that symbols in libs aren't exported properly). tested it
	  on win2k with both cmd and bash as shell, works for me.
	- Daniel Duhprey added new group handling to ODE dynamics.
17-Jul-2002
	- Added unittest for RAPID plugin. Extended unittest app so that it
	  calls this unittest. This test now fails but I don't know why.
	  Some help would be helpful here.
	- Added a new version of CreateMeshWrapper() to iEngine. This version
	  is an easy way to make a mesh wrapper directly from the type
	  class id. It will first create a factory and if that factory
	  implements iMeshObject it will return that (useful for things).
	  If that factory doesn't implement iMeshObject it will call
	  NewInstance() and return that new mesh object instead.
	- Added iEngine::CreateThingMesh() which is a convenience function
	  that will create a thing mesh, place it in a sector, set ZUSE
	  z-buffer mode, and 'object' render priority. It is very similar
	  to CreateSectorWallsMesh() but that will use ZFILL and 'wall'
	  instead.
	- Michael O'Shea suggested a modification in csparser which makes
	  it possible to define a sector in pieces. So if you say SECTOR 'xxx'
	  with 'xxx' a sector that was previously defined you will just
	  add objects to that sector without affecting the previous contents.
	- Changed an snprintf to sprintf in caltocs.
	- Added a new MilkShape to CS/3D sprite convertor to CS. This convertor
	  is actually able to convert skeletal information! It has not been
	  tested a lot though. Thanks to Steven Geens <old_belge@hotmail.com>
	  for making this.
	- Norman Kramer renamed msModel.h to msmodel.h (milk2spr).
	- Daniel Duhprey fixed ODE dynamics plugin to optimize statics
	  so they don't collide (no reason to check it since they will
	  not respond to collision anyway).
16-Jul-2002
	- Brandon Ehle fixed caltocs so it only writes texture coordinates
	  if they are available.
15-Jul-2002
	- Fixed a compiler error in spr3d by rearranging the code a little
	  bit.
	- Temporary fix to frustvis so that all objects are marked visible.
	  This fixes a problem in levels with moving objects. Apparently
	  the kd-tree is not updated correctly. This fix will just mark
	  all objects as visible. Dynavis has the same bug but this hack-fix
	  has not been applied to Dynavis.
	- Reverted all changes to graph2d.cpp made by Noah Falk and
	  Matt Reda. These changes break procedural textures. If you looked
	  at the textured rotating cube in walktest/flarge (main room on
	  the right) then you would see that the procedural texture was
	  not mapped correctly. Please only reapply the clipping changes
	  to graph2d with a correctly functional procedural texture
	  clipping. Side note: last (buggy) revision in CVS was 1.84.
	  I reverted back to version 1.81.
	- Reverted my own reversion of graph2d.cpp. Don't know why it didn't
	  work at first.
	- Philip Wyett fixed a compile error under Linux (SDL).
	- Philip Wyett messed a bit with the star plugin.
	- Daniel Duhprey fixed ODE dynamics plugin to use the grouping
	  advantage of ODE for speedups.
14-Jul-2002
	- David M. Asbell <dasbell@users.sourceforge.net> added support
	  for SpriteSockets, a mechanism for attaching sprites to specific
	  places on other sprites. Also added support for reading and writing
	  sprite sockets in ASCII loader.
	- Daniel Duhprey added a fix to the line collision from John
	  Jarger (ODE dynamics plugin).
	- Matt Reda fixed OpenGL clipping in DrawPixel (for general OpenGL
	  canvas code).
	- Matt also fixed an instance where the clip rect was still being
	  set to (0,0,Width,Height) instead of (0,0,Width-1,Height-1) in
	  common/graph2d.cpp.
	- Peter Amstutz fixed a bug in instantiating a second copy of a textbox
	  in AWS.
	- Noah Falk made fixes to aws embedded components. They should now be
	  usable again. Also added a sample embedded component to awstest to
	  make future testing easier and as a very simple instructive sample.
	- Matt Reda reverted his earlier changes to the clipping rect, but also
	  fixed the calls in csGraphics2D::Resize().
	- Matt fixed two clipping calls in OpenGL's Resize() function.
13-Jul-2002
	- res fixed broken loading of some images in png loader.
	- res also fixed a bug when stripping alpha from paletted images.
12-Jul-2002
	- csPluginManager::LoadPlugin() is now a bit smarter. If a plugin
	  is already on the plugin list it will not add it anymore. So you
	  can now safely do CS_LOAD_PLUGIN multiple times to create multiple
	  instances of the same plugin.
	- res fixed PNG image loader to have better handling of tRNS.
	- Matthias Braun changed Execute prototype in AWS and temporarily
	  added GetThisNode() to iAwsKeyFactory because it is needed for
	  creating external components.
11-Jul-2002
	- Mathew Sutcliffe caused csTime to become useful outside of CSWS
	  by overloading the constructor to allow its parent to be
	  an iEventHandler or an iEventQueue.
	- Daniel Duhprey fixed ODE dynamics plugin to have more robust
	  handling for sharp corners.
	- Noah Falk changed the common canvas clipping code and added some
	  tests to g2dtest. Also made small bug fixes to AWS including
	  frame property, embedded components, some graphical changes
	  for fsBitmap, and making labels not pressable.
10-Jul-2002
	- Further work on levtool.
	- Peter Amstutz added support for converting quaternions to matrices.
	  Fixed bug in matrix to quaternion code, and added methods to convert
	  to/from axis-angle representation from quaternions.
	- Peter also fixed bugs in Normalize(), added Invert() and prototypes
	  for converting to a matrix, and to/from axis-angle representation
	  (quaternions).
	- res did the following:
	    - Added requirement for missing JPEG libs to jngio.mak.
	    - Some fixes to makefiles (jng).
	    - Turned off CMS use in jng.
	    - Vertex normals are now calculated from the 3ds smoothing
	      information. (however this information is not honored. vertex
	      normals are unnecessarily recalculated at a later point.
	      Need to investigate a bit more).
9-Jul-2002
	- DynaVis now correctly does frustum culling in mirrored sectors.
	  Apparently the fix that I did yesterday for FrustVis has the
	  wrong effect for DynaVis. I have no clue why but for the moment
	  Dynavis seems to work for mirrored sectors.
	- Added support for unknown tokens in csParser. If you construct
	  csParser with allow_unknown_tokens equal to true then the parser
	  will no longer consider an unknown token as an error.
	- Optimized csParser by precalculating the length of the strings
	  in the token table. This avoids strlen() at various points during
	  the parsing process. It also avoids actually trying to compare
	  tokens that are not equal. So this could avoid a lot of compares.
	- Started work on a new 'levtool' application. One of the main
	  purposes of this application will be a tool to convert an old-style
	  octree level to Dynavis. But more features will also be
	  added like world file validation and things like that. At this
	  moment this tool doesn't do much.
8-Jul-2002
	- Implemented CastShadows() in Dynavis. Not fully optimal yet
	  (i.e. no culling is actually done except for frustum culling).
	- Removed SupportsShadowCasting() from iVisibilityCuller. Shadow
	  casting is no longer an optional feature. It must be supported
	  by the culler.
	- Fixed a refcount leak on plugin manager in
	  csSector::UseCullerPlugin().
	- The crystalspace.culling.frustvis visibility culler is now the
	  default visibility culler in all cases. This means that a sector
	  will ALWAYS have a visibility culler now.
	- Fixed a bug in the frustum visibility culler. It would not mark
	  an object as visible if you were in the bounding box of that
	  object.
	- There is now better error checking when loading a culling
	  plugin for a sector.
	- Fixed a bug in the sector drawing code when used in combination
	  with a visibility culler and a space-warping portal. In such a
	  case the traversal of the portal could cause the previously
	  calculated vis culling results to be wrong. This is now solved
	  by storing an array of visible objects BEFORE drawing them.
	- The bugfix above also also fixes a bug in the sector drawing code
	  related to the alpha render priority (which will sort objects
	  back to front internally) and the use of space-warping (or mirror)
	  portals. In that case the traversal through the portal would resort
	  the objects on that priority which would mess up the order in the
	  previous recursion level.
	- The bugfix mentioned above involves changing the way the render
	  priority queue works. Now all is sorted at once and then put
	  in one big list.
	- Fixed a bug in FrustVis and DynaVis with regards to frustum
	  culling in case the sector is mirrored (i.e. looking through
	  a mirroring portal). The frustum planes need to be reversed in
	  that case. Seems that DynaVis still has some problems though.
	- Removed csSector::GetVisibleObjects() since that is no longer
	  needed (there is always a culler to do this work now).
	- Brandon Ehle did the following in caltocs:
	    - Fixed a bug regarding windows and mac text .cfg files.
	    - Fixed a bug with GCC that does not include stdc++ by default.
	- Christopher Nelson did the following:
	    - Committed fix for an error that was found by Craig Ching.
	    - Committed the changes posted by Andrew Craig. Also fixed
	      my previous fix from Craig Ching.
	    - Added a comment which notes the possible problem noted by
	      Craig Ching and Peter Amstutz.
	- res did the following:
	    - Jng plugin can now save as well.
	    - Gfxtest crashed when image saver plugin returned NULL.
	    - Gfxtest: output filename when saving is now optional.
	    - csMemFile::GetAllData() created a databuffer with the buffer just
	      freed.
	    - Small change in one of the png plugin comments.
7-Jul-2002
	- csSector::GetVisibleObjects() now uses the efficient
	  csIntersect3::BoxFrustum() routine. This also fixes a bug
	  because the old code was actually not always correct.
	- res added image loader for JNG format (JPEG with alpha channel).
	  This uses libmng.
6-Jul-2002
	- Removed -fno-rtti from comptest.sh. So this option will no
	  longer be used from the moment you do 'make linux' again.
4-Jul-2002
	- Received a binary sprite loader/saver from David Asbell
	  <dasbell@yahoo.com>. This sprite 3D loader is roughly equivalent
	  to the ASCII loader but it saves to a binary format instead.
	  Load times using the binary format are a LOT better.
	- David Asbell also extended the viewmesh application so that it
	  can now save 3D sprites to the binary format.
	- Fixed a very weird construction in AWS where the destructor
	  of the superclass was called explicitely like this:
	    this->super::~super().
	  This causes problems on some compilers and I don't see the
	  need for this either.
	- Added a 3dsMax script for converting 3dsMax levels to Crystal
	  Space. This script is written for 3dsMax version 4 but it may
	  also work with lower versions. This convertor is specifically
	  designed with Dynavis in mind so it will export separate objects
	  in 3dsMax as separate objects in CS. Thanks to Luca Pancallo for
	  creating this very useful script!
	- Daniel Duhprey fixed some problems with the mesh colliders in the
	  ODE dynamics plugin.
	- res did the following:
	    - Fixed a crash in CSWS when it was attempting to display
	      empty directories.
	    - When parsing fails (in csParser::GetObject()) *name and
	      *data become NULL (was assumed in some places).
	    - Name and data can be NULL in ase this information is not
	      wanted.
3-Jul-2002
	- Added non-functional iEngine->GetVisibleObjects(). The purpose
	  of this routine will be to return all potentially visible objects
	  from a given position. At this moment this function returns NULL.
	  It still has to be implemented. There are two versions: one accepts
	  a single point and computes visibility in a full 360 degree around
	  that point. The other has a frustum to restrict visibility.
	- Updated the documentation with regards to the SCF _FAST macros
	  that are now removed.
	- Significantly updated the map format documentation. Now it should be
	  about 95% up-to-date. However! Keep in mind that this is ONLY the
	  documentation for the basic map format. It does NOT contain
	  documentation for the loader plugins. This means that everything that
	  is INSIDE a PARAMS block is not documented by this documentation.
	- Matze did some aws cleanups:
	    - Reindented some stuff
	    - Rewrote some parts of the parser
	    - Changed some char* into const char*
	    - Changed lots of stuff that used iString* before, but since
	      everyone was using iString* without care (LEAKS!) I changed most
	      of this stuff to const char*
	    - Fixed a bug in connection parsing.
	- Daniel Duhprey added a collision callback mechanism to the
	  ODE dynamics plugin.
	- res fixed two parameters of awsParser. They had the same name.
2-Jul-2002
	- Removed an obsolete feature to show the c-buffer in walktest.
	- Removed db_cbuffer console command in walktest.
	- Added iLight->GetFlags().
	- Moved a lot of the Doxygen documentation and also a few
	  constants from the private csLight to iLight.
	- Added iEngine->GetLightIterator() to iterate over all static
	  and pseudo-dynamic lights of the engine (for a given region
	  optionally). Added iLightIterator.
	- Added iEngine->GetFirstDynLight().
	- Removed the old cludgy iEngine->GetCsEngine(). Modified walktest
	  so it no longer needs it (by using the newly added functions
	  above).
	- Fixed a bug in iDynLight->GetNext(). It would actually try to
	  get the iDynLight from a NULL csDynLight pointer.
	- Removed isoldr.h from the plugins dir.
	- Toni reports:
	    Little optimization for DPM.
	    With previous implementation all the lightmap in a FASTMESH
	    superlightmap were recalculated (because a dynamic light could
	    affect the mesh). Now the mesh polybuffer is marked as lightmaps
	    dirty and only when the mesh has dirty lightmaps recalculates the
	    superlightmap.
1-Jul-2002
	- Extended both iShadowCaster and iShadowReceiver with iMovable
	  parameter.
	- Enabled the use of iShadowReceiver instead of iThingState
	  by the lighting routines. csThing now implements iShadowReceiver.
	- Removed RegisterShadowReceiver() (and unregister) from
	  iVisibilityCuller. The culling system will have to detect this
	  on its own by doing SCF_QUERY_INTERFACE.
	- Updated a comment in iPolygon3D::SetMaterial() to indicate a
	  potential problem.
	- Fixed a bug in the octree version of VisTest(box/sphere). It
	  would use the object space bounding box instead of the world
	  space bounding box for testing.
	- Removed the following macros:
	     SCF_QUERY_INTERFACE_FAST
	     CS_GET_CHILD_OBJECT_FAST
	     CS_GET_NAMED_CHILD_OBJECT_FAST
	     CS_GET_FIRST_NAMED_CHILD_OBJECT_FAST
	     SCF_DECLARE_FAST_INTERFACE
	  All SCF macros are now declared automatically as the FAST
	  version (inside SCF_VERSION). So just remove the _FAST
	  and it will be ok.
	  CS_QUERY_REGISTRY and CS_QUERY_REGISTRY_TAG will also benefit
	  from this optimization.
	- Updated apimod96.txi for this change.
	- Mathew Sutcliffe added info on how to implement sliding along
	  walls to the collision detection howto.
30-Jun-2002
	- Thing mesh objects now implement iShadowCaster.
	  csSector::CheckFrustum() will now use that instead of directly
	  going to the thing.
	- Further work on using iShadowCaster instead of iThingState.
	  Also fixed a bug with checking of the flags for enabling
	  and disabling shadows.
	- Philip Wyett did the following:
	    - Added user.cfg to distclean.
	    - Added a line which will expand MSVC post build macros in
	      apps and plugins and copy them to
	      'CS\mk\visualc\post_build_debug.txt'. Could people who are
	      having failures in the post build step copy to 'CS\' root
	      directory please do a debug build and then send me the file
	      'post_build_debug.txt' attached to an email to
	      philipwyett@dsl.pipex.com.
	- Removed user.cfg from distclean again.
	- Norman Kramer reports: Ok, I feel better now 6 hours after the 0:2
	  defeat to Brazil.  Although the german team delivered their best
	  performance Brazil proved how important are the genial soloist.
	  Congrats.  Oh btw, I fixed a circular ref counting problem with uv
	  animations.
	- Norman also fixed another missing DecRef() in the loader if the
	  crossbuilder is used and also fixed incref/decref of the window-
	  manager inside the embedded component factory.
29-Jun-2002
	- Removed the dependency on iSector from iShadowBlock and
	  iShadowBlockList. This means that it is now easier to use
	  iShadowBlock outside the engine (i.e. from within Dynavis soon).
28-Jun-2002
	- res made some Doxygen grouping changes and also some changes
	  to the MSVC7 project file generation.
	- res did some changes to compile CS with gcc 3.1:
	    - Replaced alloca()'s with ALLOC_STACK_ARRAY.
	    - Added a typecast in win32 loadlib.cpp.
	- Christopher Nelson did the following:
	    - Button was not hiding properly.
	    - Frame styles were not registered.
	    - Fixed def file to have more pleasing results.
	    - Added a new type "Opaque" to the flexible parameter list.
	- Daniel Duhprey fixed a couple joint issues (looks at rotConstraint
	  for hinges now). Implemented MeshBox and MeshSphere collisions
	  (odedynamics plugin).
27-Jun-2002
	- Eric Sunshine fixed a significant number of problems in the Texinfo
	  source files.	 Also eliminated all TeX overfull and underfull 'hbox'
	  warnings.
	- Christopher Nelson committed a huge patch to AWS from Noah Falk.
	  He tried to make sure that the API is mostly the same but there
	  were some modifications that may break code. Specifically the
	  3dengineview is now it's own component. Here is a list of all
	  changes:
	    - awsComponent
		- Added Move, Resize funcs and protected frame. Then dredged
		  through all the other components and (I think) updated all
		  code relating to moving or resizing components.
		- Added all the necessary code to handle being a top level
		  component.
		- Changed component storage from array to linked list like
		  windows.
		- Components have a depth ordering now, needed for things like
		  child windows and even with the array depth was still
		  implicit.
		- Added a few new handlers where I needed to be alerted of
		  certain things.
	    - childHide/childShow/childMove
		- Added window flag which signifies that a component should be
		  treated like a window (so far that just means that the
		  background texture aligns to it, and windows use it to
		  determine if another component with that flag is on top of
		  them to see if they are active). The Window() func now
		  searches using that flag or returns the top level component
		  if it didn't find one.
		- Added non-client flag and client frame. components without
		  the non-client flag are clipped to the client frame while
		  components with it are clipped to the Frame().
		- Gained some stray functionality that only windows use to
		  have like Maximize and FindChild. I'm not sure if maximize
		  really belongs but it has been convenient for the being.
	    - awsPanel
		- Added this class which supports some basic drawing things
		  that many of the components were duplicating code for. It
		  handles backgrounds, styles,overlays, alpha levels, insets,
		  and child clipping. I went through many of the existing
		  widgets and overhauled their drawing code to use panel
		  instead.
	    - aws3dFrame
		- Reworked alot of the code into separate per-style functions
		  rather than one massive block. I also added some more
		  styles, and some extra versions of the draw function
		  for convenience. It also can make use of a rectRegion now
		  for more optimized drawing.
		- Fixed all the frames to draw according to the def given in
		  csRect which says that lines x = xmax and y=ymax are not
		  part of the rect area.
		- Makes a crude attempt at having a pallete, but at the moment
		  you can set your background drawing color. you could set the
		  others too but I haven't needed to yet so I haven't written
		  the setXXX funcs for them. In the end a nicer pallete
		  approach would be better I think.
	    - awsManager
		- Reworked the draw code, it clips properly at least on the
		  screen canvas. Again the clip rects are set to not include
		  x = Frame().xmax and y =Frame().ymax. Unfortunately due to
		  some discrepancies in the 2d and 3d software clip code lines
		  and pixels are clipped to the inclusive clip region while
		  boxes/pixmaps do not include y = ymax / x = xmax. So right
		  now there are some small gaps where a box or pixmap should
		  be clipped one pixel less. Disabling/enabling the always
		  redraw seems to work properly when I no longer draw the
		  engine in the background. Erasing however is better than it
		  was but I suspect there still might be some lingering errors
		  in the rectRegion code.
		- Reworked all the functions which previously required top
		  level windows, now they work with components.
		- Re-did the event handling routines.
		- Mouse events now go to the lowest level visible component
		  and then proceed up through the parent hierarchy.
		- Mouse focus now cannot go from one component to another
		  without hitting every intermediate component in the tree
		  between them.
		- You can capture the mouse in response to losing mouse
		  focus in which case you don't lose it, focus does not
		  travel further, and the would-be focused component does
		  not get to handle the event. This was very useful for the
		  popup-menus where now the popups can capture focus if the
		  mouse leaves the frame, but still have mouse events
		  delivered normally when the mouse is inside a child
		  component.
		- Keyboard events just go to the keyboard focus, something a
		  little more interesting is probably desirable but I haven't
		  messed around with it yet.
	    - awsPrefMgr
		- Added an extra background fill color to the pallete. This is
		  the color components paint their background (might be
		  different from the fill color but that is what it defaults
		  to if not specified).
	    - awsWindow
		- Stripped away ALOT, all the top level component code went
		  to component. Much of the drawing code has gone to panel
		  and 3dframe.
		- Implemented the controls using actual non-client cmd buttons
		  rather than doing it all inside of window.
		- The title bar displays a bit more nicely now when you
		  shrink the window.
		- The minimum size is a bit more intelligent for resize.
		- You can draw the a gradient title bar if you want by setting
		  a 2nd titlebar color (ala windows).
		- Engine view is now a separate component.
		- Messed around with the draw code alot so im not sure all
		  the styles/option combinations work exactly like they used
		  to. I have stopped drawing the grip for the time being as
		  it looked funny always getting overdrawn by the interior
		  components (you either have to move the client frame
		  inwards alot to include it or components over-draw it).
		- iAwsWindow is eliminated.
	    - awsTabCtrl
		- This is a more general version of the notebook button bar.
		  You provide captions and it returns sources from the tabs
		  that you can hook up to see when the tabs are gettings
		  pressed.
		- Reworked the notebook to use this tab ctrl instead.
		- I think that has made the notebook button bar obsolete.
	    - awsNotebook
		- While I am thinking of it, I think the deaf flag was only
		  used here but I think is now obsolete as well because of
		  the changes I made in the managers event handling. I can't
		  remember whether I actually removed the SetDeaf() calls
		  though.
	    - awsEngineView
		- Simple little class with a view property, you just set it
		  and thats about it.
	    - awsControlBar
		- A base class that I used to make menu and popups from. You
		  could also use it for toolbars and just about it any other
		  simple layout of components in a row. It can do various
		  things with sizing the children and itself and their are
		  some alignment options.
	    - awsMenu. awsMenuBar, awsPopupMenu, awsMenuEntry, awsMenuBarEntry
		- Bunch of classes for menus. I tried to design the menus so
		  that the actual items which you put in them are minimally
		  restrained. The defaults right now are a bit simplistic but
		  should look nicer with a little more work. Through a little
		  fudging it will work properly if you make a menu bar have
		  children which are menu bar entries, which have children
		  which are popups, which have children which are popup
		  entries, which may then recursively have popup children. I
		  included an example (I think its PopupMenuTest.def) that
		  crudely shows what can be done. The menus still lack a lot
		  of programatic access and support though. The code will also
		  work for standalone popups but you can't create them
		  properly from definitions yet.
	    - Grid bag layout:
		- Changed it so that it would only layout the components that
		  were added as opposed to all children of the owner.
	    - CmdButton:
		- I think I changed the toolbar style to more of what I
		  wanted the toolbar style to look like. The menu bar
		  entries are toolbar style buttons.
		- You can now set state as well as query it.
	    - imageView
		- You can set a color to be drawn, which I used to help me
		  see the system pallete colors. It seems like it would be
		  useful in a color picker too.
	- Christopher did some various fixes later resulting from the huge
	  AWS patch.
	- Duhprey fixed some \r\n problems with the new AWS code.
	- Norman Kramer added default implementations for the new methods
	  in iAwsComponent.
	- Christopher Nelson fixed a few compile problems pointed out by
	  Reed Hedges.
	- Christopher added debug guards so that the mouse status messages
	  don't appear unless you tyrn on the debug flags DEBUG_MANAGER and
	  AWS_COMP_DEBUG in aswcomp.cpp and awsmgr.cpp inversely respective.
	- Norman Kramer fixed odedynam.h: "ode/ode.h" -> <ode/ode.h>
	- Norman replaced SetEnvineView() with SetProperty("view", wview)
	  in awstest.cpp.
	- Norman replaced the NASM flag "-f aoutb CWITH_UNDERSCORE" with
	  the more likely flag "-f elf".
	- Chris Forno updated the Unix platform build instructions.
	- Chris also updated Justin Miller's contributions.
26-Jun-2002
	- Fixed Dynavis so that the 'freeze' visibility feature works
	  again.
	- Justin Miller did a CS-local workaround to prevent int8, uint8,
	  int32, and uint32 conflicts with ODE. Thanks to Eric Sunshine
	  for suggesting the solution.
	- Res did the following:
	    - docs: removed a couple of '\internal's.
	    - docs: added some more grouping.
25-Jun-2002
	- Added howto for a very simple map.
	- Optimized csOBB code a bit and fixed a huge number of rather
	  big memory leaks there. There is still a big bug in OBB code
	  somewhere though. It sometimes crashes with division by zero.
	- Added an (untested) frustum view culler. This culler is a simpler
	  version of Dynavis that will be used as the default culler in
	  the future for all sectors.
	- Added 'frustvis' target to walkall.
	- Added new simple csIndPrint class in csutil which can be used
	  for indented printing.
	- Added temporary debugging code to csOBB to help find a problem
	  there.
	- Found the reason for the csOBB bug but not the correct fix yet.
	  Working around the bug right now seems to work reasonably well.
	- Philip Wyett removed reference to Code Warrior from sysreq.txi
	  as there is no longer a Code Warrior port.
	- Res did some documentation updates.
	- Duhprey fixed obb.cpp for the case where length == 0. This
	  fixes a logic error in the OBB creation.
	- Norman Kramer removed incref/decref of the wmgr in the
	  awsembeddedcomponentfactory since this creates circular
	  dependencies (the factories are increffed and stored by the
	  mgr upon registration).
	- Res fixed plugin.tpl (MSVC7 project file generation): %lflags%
	  and %libs% was swapped in one place.
	- Chris Forno did some documentation updates:
	    - Unified some naming conventions.
	    - Fixed printed output in the first 34 pages of the manual.
	    - Updated documentation contributor list (added myself!).
	    - Removed ambiguous references to 'I' and 'me' in the contributor
	      list.
	- Res did more work on documentation (Doxygen documentation).
24-Jun-2002
	- Mathew Sutcliffe fixed Doxygen comments so iImageIO shows up in
	  pubapi docs.
	- Res did the following:
	    - Attempt to add some missing API documentation.
	    - Moved csEvBind from binder.h to binder.cpp.
	    - Added a pair of parentheses to defintion of CS_ALLOC_STACK_ARRAY.
	    - Moved csEvBind from binder.h to binder.cpp.
	- Chris Forno fixed a broken link in the system requirements
	  documentation.
23-Jun-2002
	- Added csIntersect3::BoxSphere() function which tests intersection
	  between a box and a sphere.
	- Extended iVisibilityCuller interface with two new VisTest()
	  variants that take a bounding box and bounding sphere. These
	  functions will mark all objects visible that intersect
	  with those bounding objects.
	- Implemented Dynavis version of these functions.
	- Implemented octree version of these functions. This implementation
	  is very naive though. It will not use the octree and instead
	  just traverses all objects to test them with the bounding
	  box or sphere.
	- Changed iEngine->GetNearbyObjects() so that it will use the
	  new VisTest(sphere) function if there is a visibility culler.
	  That way GetNearbyObjects() will actually become a lot more
	  useful and faster if a culler is used.
	- Completely rewrote the object iterator in the engine. It was
	  hard to understand and very buggy. The current one is a lot
	  more robust. GetNearbyObjects() now uses this.
	- Walktest collision detection now uses GetNearbyObjects() for
	  a LOT faster moving around now. Especially in large levels that
	  have lots of mesh objects.
	- GetNearbyObjects() now correctly supports portals (it will
	  check if the portal is in the given radius) and then
	  traverse the portal if needed. This does not (yet) work
	  for space warping portals though! This finally fixes the bug
	  when you walk around in the flarge street and you sink through
	  the floor :-)
	- Removed the old csObjectIt class. csObjectListIt replaces it
	  (used by the updated GetNearbyObjects() function).
	- Norman Kramer did the following to AWS:
	    - Windows and their child components are now destroyed if
	      awsmanager goes down.
	    - Fixed bug in slot connection where the sink was not increfed.
	    - Fixed bugs in notebookbuttonbar and scrollbar destructors
	      where some child components were decref'ed twice.
	    - Rewrote awstimer a bit to avoid keeping a reference to the
	      eventqueue which caused some nasty circular rererencing.
22-Jun-2002
	- Fixed a small bug in the adding of operations to a tiled
	  coverage buffer.
	- Fixed a bug with Dynavis: it would crash if an object
	  didn't support a polygon mesh. Fixed this by using AABB
	  instead of OBB in that case.
	- Fixed a bug in Dynavis::IntersectSegment(). The intersection
	  point was not correctly passed to the caller.
	- Fixed a severe memory overwrite bug caused by out of bounds
	  line drawing in the DrawLine function of the tiled
	  coverage buffer.
	- Small changes to Dynavis.
	- Justin Miller fixed FRAME() output generated with 3ds2lev -3.
	- Norman Kramer added an entry for the ODE physics plugin
	  (commented out) to user.mak.
	- Norman added comment where to get ode lib, what version is needed
	  and what changes to the config have to be done.
21-Jun-2002
	- Fixed a bug in csSector::IntersectSegment() (which is used
	  in HitBeam() and other functions like that). Apparently if an
	  octree was used it would test all non-octree objects twice.
	- Added iThingState::IntersectSegment().
	- Implemented IntersectSegment() in Dynavis. It is a fairly
	  optimal implementation that will use the kd-tree for rough
	  front-to-back sorting and it will also test the segment
	  against the bounding box of the kdtree nodes and objects.
	- For reasons totally unknown to me the FindOBB routine suddenly
	  started crashing. So for Dynavis I have no switched to
	  FindOBBAccurate(). This function is slower but it only happens
	  once so that's not a big problem usually. Will investigate later
	  to see what's going on.
	- csSector::IntersectSegment() now uses the culler in general
	  and not only if it is an octree culler. That way all routines
	  that use csSector::IntersectSegment() are now speed up by
	  Dynavis.
	- Some optimizations to Dynavis again.
	- Switched back to FindOBB()... Weird...
	- Mathew Sutcliffe added workaround for freopen() problems in
	  Cygwin.
	- Chris Forno updated more of the directory hierarchy documentation.
	- Chris also updated system requirements documentation.
20-Jun-2002
	- Considerably optimized AppendWriteQueue() in Dynavis. Profiling
	  showed that this is now the function that does most work.
	  The optimization I did makes this function a LOT faster but
	  less accurate meaning that the benefit of the write queue
	  will be less. In future we need to use the OBB instead of the
	  AABB to transform to camera space. That will improve accuracy
	  again without much additional performance cost.
	- Added csOBB class to csgeom. This is a subclass of csBox3
	  representing an oriented bounding box (OBB). Thanks to Daniel
	  Duhprey for making this.
	- Added csOBBFrozen which is a frozen (more optimal) version of
	  csOBB. It will do the transformation once and cache them.
	- Dynavis now uses OBB instead of AABB for the write queue
	  and for test object visibility (TestRectangle). This improves
	  the culling ability of Dynavis considerably.
	- Added csOBBFrozen::ProjectOBB() to project an OBB to a
	  screen space box (similar to csBox3::ProjectBox()).
	- Started work on csVisibilityObjectHistory class. This class
	  contains all history-related visibility information for an
	  object (and in the future also kdtree node). The reason
	  for this separation is to make it easier later on to redesign
	  this to support multiple camera positions.
	- csVisibilityObjectHistory is now an SCF class so that it can
	  be embedded more generally in the csKDTree.
	- Every tree node also has a history object now. This way history
	  based culling (i.e. marking a node as visible if it was visible
	  previous frame) is now possible. In future this can also be
	  used for VTP (Visible Point Tracking). This optimization improved
	  Dynavis a bit again :-)
	- Increased the time objects are considered visible (for history
	  culling).
	- Justin Miller applied a hinge patch by Duhprey (ODE dynamics).
	- Justin rearranged declarations of index variables in csOBB.
	- Chris Forno updated the resources section of documentation.
	- Justin Miller reports:
	    - Added iDynamicsMoveCallback,
	      iDynamicSystem::CreateDefaultMoveCallback(), and
	      iRigidBody::SetMoveCallback(). The application can now decide how
	      to move body attachments after a dynamics step. Updated physics
	      tutorial to use these.
	    - iDynamicSystem now has a default move callback member instead of
	      CreateDefaultMoveCallback(), and it gives this to all bodies when
	      creating them. The default can be retrieved with
	      GetDefaultMoveCallback().
	    - Updated physics tutorial.
	- Chris Forno updated the feedback section of the documentation.
	- Chris revised the feature set layout and updated some of the
	  directory hierarchy listing.
	- Philip Wyett added C4514 warning to be squashed and hidden by
	  MSVC 6.
19-Jun-2002
	- Clarified an API comment to indicate that the OFTEN moving
	  option for things doesn't work yet.
	- Added 'toggle_freeze' command to Dynavis (assigned to alt-f
	  in BugPlug). This will freeze the current visibility status
	  of all objects. No further visibility testing will occur. If
	  the camera moves the visibility information valid at some
	  point will be unchanged so you can walk around the level
	  and see what is visible and not.
	- Added 'exact_freeze' command to Dynavis (assigned to ctrl-f
	  in BugPlug). This will first compute exact visibility with
	  the (slow) exact visibility culler. Then it will freeze
	  that result. This will give the theoretical maximum performance
	  that a hypothetical zero-cost visibility culler could give.
	  This is the upper limit for Dynavis. Dynavis cannot get faster
	  than that. In order to improve speed further rendering optimizations
	  have to be done like DrawPolygonMesh and so on.
	- Fixed the exact visibility culler in Dynavis so that it actually
	  correctly clips polygons that go out of screen and out of
	  the Z=0 plane. Without this fix the results of the exact
	  visibility culler were actually not relevant.
	- Added an entry to the FAQ about states and mesh wrappers.
	- Added an entry to the FAQ to clarify reference counting.
	- Fixed a bug in the TestRectangle of the tiled coverage buffer. This
	  bug would accidently mark some rectangles as visible even if they
	  were not.
	- Optimized TestRectangle for Dynavis. Profiling shows that the
	  test of rectangle visibility is currently the function that
	  takes most time to calculate.
	- Several additional optimizations on the tiled coverage buffer.
	- Norman Kramer changed fd_mask to fd_maskset due to type naming
	  clash on freebsd (ensocket plugin).
	- Justin Miller added a patch to cspyhton.mak by technorama.
	- Justin added Duhprey's AttachColliderCylinder() to ODE dynamics
	  plugin.
18-Jun-2002
	- Extended iBugPlug interface with functions to setup a debug
	  view. This is a 2D view on which you can render one general
	  object (provided by application or plugin, this is done by
	  implementing iBugPlugRenderObject) and then a set of points
	  and lines.
	- Added 'debugview' command to BugPlug to switch to this view.
	  Assigned alt-s key to this command.
	- Added new 'setup_debugview' Dynavis command which setups the
	  debug view for testing of the tiled coverage buffer. Assigned
	  this command to the 's' key. This command will setup the
	  debug view with three outlines that are rendered on the tiled
	  coverage buffer. It also shows a box which does TestRectangle().
	  If the box is visible you see a small red box in the top-left
	  corner of the display.
	- Extended BugPlug so that you can now drag the points.
	- Implemented the graphical dump of the tiled coverage buffer.
	  This is now used in the setup_debugview command.
	- Optimized the tiled coverage buffer by improving the check
	  if a tile can is full.
	- Fixed a bug where tiles which are full where not marked as
	  dirty even though they have to be marked.
	- Fixed TestRectangle() so it does a smarter test now.
	- Tiled coverage culling starts to work now. Time to optimize
	  a bit :-)
	- Philip Wyett did some mysterious changes to the win32gcc
	  documentation.
	- Justin Miller applied a new patch by Duhprey to allow
	  setting of parameters before attaching body (for iJoin/ODE
	  dynamics plugin). Justin patched physics tutorial so that
	  'j' adds a jointed body.
	- Chris Forno started working on the documentation. He did the
	  first initial updates.
17-Jun-2002
	- Worked further on the tiled coverage buffer in Dynavis.
	- Fixed bug in handling of 'analyze_vis' command in Dynavis.
	- Tiled coverage buffer is still not working properly. Work
	  in progress.
	- Justin Miller added a new feature from GoGi: csString::FormatV()
	  which also takes a va_list.
	- Justin applied a new patch from Duhprey: iJoint interface and
	  implementation.
16-Jun-2002
	- Fixed a bug in csTiledCoverageBuffer::Debug_Dump().
	- Fixed a bug in the tiled coverage buffer. The operations
	  were cleared at the wrong time.
	- While still not completely correct, tiled coverage buffer
	  is starting to work a bit now.
	- Made BugPlug a little bit more friendly by showing a message
	  when it is waiting for a key.
14-Jun-2002
	- Up to now BugPlug has always been a plugin with no own interface.
	  So there was no way to talk with BugPlug. This has now changed.
	  I added the iBugPlug interface. With this interface it will be
	  possible to control various features of BugPlug.
	- Added several commands to enable a new 'debug sector' feature
	  in BugPlug. With this feature a plugin or application can
	  create a sector filled with boxes and triangles. This can be
	  used for debugging purposes. Not all features in this inteface
	  are already implemented. Currently only filled boxes and
	  triangles.
	- Added new 'debugsector' to BugPlug to enable the debug
	  sector view. Assigned to shift-s key. As soon is this mode
	  is active you don't have to press ctrl-d anymore for BugPlug
	  commands. So shift-s is sufficient to exit.
	- Added several 'ds_...' commands to move in the debug sector.
	  Assigned to arrow keys and shift-arrow keys for strafe.
	- Extended Dynavis with a new 'setup_debugsector' command. This
	  command will use BugPlug to set up a debug sector with boxes
	  for all objects. The boxes are colored according to the last
	  visibility result:
	    white=visible
	    green=out frustum
	    dark-gray=invisible because parent kd-tree node is invisible
	    dark-red=invisible because culled with coverage buffer
	  While this mode is active Dynavis will mark all objects as
	  invisible. That means that this mode can run at full speed.
	- In addition to the boxes the view frustum is also shown with
	  transparent colored triangles that fade in the distance.
	- Assigned 'setup_debugsector' to shift-3 key in BugPlug.
	- Some more debugging in Dynavis.
	- Philip Wyett updated links to msvc_libs for MSVC7 to latest
	  version 0.94e.
	- Res did the following:
	    - Removed workaround for bug in mipmap_0...
	    - Reincarnated the glwin32 window z order hack... but not that
	      ugly anymore.
	    - Added support for image output options. Currently supported by
	      png ang jpg plugins. Options are a comma-separated list and can
	      be either 'option' or 'option=value'.
	      supported options:
		compress=# - image compression, 0..100 higher values give
		smaller files, but take longer to encode or give uglier
		results.  progressive - progressive(jpg)/interlaced(png)
		output.
	      examples:
		compress=50
		progressive,compress=30
	    - Updated gfxtest to support this feature.
	- Justin Miller did an elasticity tweak to the physics tutorial.
13-Jun-2002
	- Fixed ode plugin so that it now calls DeferUpdateLighting()
	  when the object moves so that lighting is calculated. This is
	  not good though. ODE plugin should not move objects on its
	  own but instead call a callback from the application saying
	  to move the object. The application can then choose to
	  decide how exactly to move the object. This includes lighting,
	  moving through another system (i.e. pcmovable in CEL), or
	  even sending movement information over a network.
	- Changed lights in phystut a bit.
	- Further fixes on Dynavis. Doesn't crash now but culls incorrectly.
	- Enabled more plugins in win32gcc.mak since mingw installation
	  now has the needed libraries (or soon will have at least).
	- Started implementing unit tester in the tiled coverage buffer.
	- Implemented TestPoint() in the tiled coverage buffer, doesn't work
	  properly yet. So the unit tester will fail now.
	- Fixed a bug in the tiled coverage buffer.
	- Justin Miller added a simple physics application using iDynamics.
	- Justin tweaked sphere sizes in physics tutorial. Space key creates
	  random objects now.
	- Justin added a time step loop (from Duhprey). Greatly improves
	  the accuracy of the simulation (physics tutorial).
	- Justin fixed/changed: gravity amount, starting position,
	  object velocities, box collider dimensions, collider friction and
	  elasticity values (physics tutorial).
	- Justin then added another less brutal stepping algorithm to
	  physics tutorial.
	- Philip Wyett updated documentation to reflect a new msvc_libs
	  release (version 0.94d).
12-Jun-2002
	- Enabled stencil again in opengl.cfg. For some reason it
	  was disabled.
	- Added first implementation of tiled coverage buffer in Dynavis.
	  Doesn't work at all at the moment so it is disabled by default.
	  If you like segmentation faults you can enable it with the
	  new 'toggle_tiled' command in Dynavis (assigned to '5' in bugplug).
	- A few further fixes on Dynavis. Not enough to avoid crashes.
	- Justin Miller fixed ODE dynamics plugin so that mesh transforms
	  are better set.
11-Jun-2002
	- Philip Wyett added Dynavis back into default build.
	- Justin Miller applied Duhprey's fixed to MakeStatic(). Also
	  inlined GetID() (ODE dynamics plugin).
10-Jun-2002
	- Added an entry to the faq.
9-Jun-2002
	- Eric Sunshine fixed bug reported by Noah Falk <nsf@andrew.cmu.edu>.
	  In the case where csRectRegion::ClipTo() clipped a rectangle
	  completely out of existence, it then failed to clip the immediately
	  following rectangle.	Furthermore, it would access non-existent
	  elements beyond the end of the region list.
	- Matze Braun fixed csrectrg.cpp: someone forgot to declare a
	  variable.
8-Jun-2002
	- Philip Wyett did the following:
	    - Removed Dynavis from CS build until a missing file is committed.
7-Jun-2002
	- Added several entries to the faq.
	- Added new 'analyze_vis' command to Dynavis. This command
	  will first run a new exact visibility culler (a very slow one)
	  and compare the results with the visibility testing of Dynavis.
	  That way the quality of culling (and correctness) can be
	  calculated. Assigned alt-a to this command in BugPlug.
	- Philip Wyett did the following:
	    - Added checkes for GL 1.1. Compilation will stop if
	      'GL_VERSION_1_1' is not defined in gl.h.
6-Jun-2002
	- Changed 'double' to 'float' in OpenGL renderer texture cache.
	- Added 'toggle_queue' command to Dynavis. Assigned this command
	  to '4' in BugPlug.
	- Added csBox2::TestIntersect() and csBox3::TestIntersect(). These
	  functions test if two boxes have an intersection without
	  actually computing the intersection. So it complements the
	  *= operator in csBox2 and csBox3 which actually computes the
	  intersection.
	- Made the first implementation of the write queue in Dynavis. This
	  queue will prevent occlusion writes (which are expensive) unless
	  they are really needed. This seems to work rather well and gives
	  a noticable speed increase.
	- Updated faq.txi with some technical questions and answers.
	- Fixed an error in the collision detection howto.
	- Added new 'origin_z' command to Dynavis. With this command you can
	  change the distance at which the origin is rendered in the debug
	  view. By default this is 50. origin_z can have the following
	  parameters:
	    origin_z +	  (add 1 to z)
	    origin_z ++	  (add 10 to z)
	    origin_z -	  (subtract 1 from z)
	    origin_z --	  (subtract 10 from z)
	    origin_z 30.3 (set z to 30.3)
	  Assigned shift-1 to origin_z -- and shift-2 to origin_z ++ in
	  BugPlug.
	- Philip Wyett did the following:
	    - Eliminated some uninitialized variable warnings under MSVC
	      (Dynavis).
5-Jun-2002
	- Thanks to the extensive research and coding efforts of Toni
	  I managed to fix up static lighting so that it gives more correct
	  shadows in most cases.
	- Justin Miller applied Duhprey's MakeStatic()/MakeDynamic() patches
	  to the ODE dynamics plugin.
	- Christopher Nelson added CreateEmbeddableComponentFrom to AWS.
	- Christopher also added some suggestions from Barry R for
	  AWS textbox.
	- Matze Braun replaced the strange aws.log with normal CS reporter.
updated3-Jun-2002
	- Justin Miller updated scf.cfg for ODE dynamics plugin.
2-Jun-2002
	- Justin Miller changed export name of odedynam.cpp to match the
	  plugin name.
1-Jun-2002
	- Res did the following changes to the MSVC7 project files:
	    - All projects now use the runtime dll (apps, libs used the static
	      rt).
	    - Removed unused appgui template.
31-May-2002
	- Implemented a new CLEARSCREEN option in the SETTINGS block. Using
	  this you can force clearing of the screen every frame (this is
	  not done by default). There is also a iEngine::SetClearScreen()
	  function and equivalent. And an Engine.ClearScreen config option.
	- Justin Miller did some fixes on the ODE dynamic plugin:
	  iRigidBody: Added GetProperties(), typo fix in Attach methods.
	- Philip Wyett updated links for msvc_libs for MSVC 5 and 6 which
	  contains a fixed ode.lib. The new version is 0.94c.
30-May-2002
	- Removed support for the XOR buffer in the engine. The XOR buffer
	  is still used in Dynavis. Also removed 'toggle_xorbuf' command
	  in the engine.
	- Unittest application will no longer link statically with engine
	  since the XOR buffer test is removed.
	- Added new iMaterialEngine interface. The material definition of
	  the engine implements this interface (in addition to iMaterial).
	  You can use this to query for the iTextureWrapper's that are used
	  by the material. Keep in mind that not all iMaterial implementations
	  may implement this additional interface.
	- I did a quick run of all annotations that were added to the
	  user documentation and public API reference manual, and I
	  incorporated all useful suggestions, corrections, and clarifications
	  into the real manual.
	- Updated part of the Map2CS documentation that was still using
	  old syntax for map2cs.cfg config file.
	- Philip Wyett did the following:
	    - Updated links to the latest version of msvc_libs.
	    - Added Cygwin build documentation.
	    - Updated msvc_libs links for new 0.94b release.
	    - Added plugins line for new odedynam (physics plugin).
	    - Fixed link problems with GCC compilers. The makefile did
	      not have any knowledge of libode.a or any ode static library.
	    - Removed ugly CS_DEBUG hack for -fs mode. This is not advisable
	      having such code which redefines the z-order in the win32 API.
	      The IDE is visible via ALT + TAB on XP if their is an instance
	      where it is not can people mail me with this instance so I can
	      test.
	    - Minor Fix in oglg2d.cpp. Changed order From:
		ShowWindow();
		UpdateWindow();
	      to more correct:
		UpdateWindow();
		ShowWindow();
29-May-2002
	- Implemented history culling in Dynavis. This means that if an
	  object is visible then it will be kept as visible for a few
	  frames (random). This will avoid testing objects that are most
	  likely visible too much.
	- Added a new 'toggle_history' command in Dynavis to enable/disable
	  this new feature. Assigned to the '3' key in BugPlug.
	- Added a new outline debugging mode. This will render all outlines
	  on screen so you can examine if they are allright. You can go to this
	  mode with BugPlug key shift-v. Note that only the outlines of
	  visible objects are shown.
	- Added several CS_ASSERT's to csgeom and Dynavis to help debugging.
	- Added first version of the ODE based dynamics plugin to CS. This
	  plugin was made by Anders Stenberg. Source code for this plugin
	  can be found in plugins/physics/odedynam. The interface header
	  is in include/ivaria/dynamics.h. Note that there is no makefile
	  yet (and no MSVC project files). I didn't have time to actually
	  make those.
	- Fixed a severe memory overwrite bug in the coverage buffer
	  (InitializePolygonBuffer() function).
	- Fixed a newly introduced bug in the coverage buffer.
	- Corrected line-drawing in the coverage buffer of Dynavis a little.
	- Fixed a significant bug in the outline coverage buffer updating
	  which could cause severe performance degradation in some cases.
	  The problem was that the bounding box used for outline rendering
	  was using uninitialized vertices and so could result in a bounding
	  box that was too big.
	- Res added a makefile for the ode dynamics plugin (untested).
	- Christopher Nelson applied a patch submitted by Marc Haisenko
	  which fixes a bug in radio buttons not being able to tell
	  which one received the click notification.
	- Christopher added two new signals to awsRadioButton:
	  signalRadButtonTurnedOff and signalRadButtonTurnedOn. Now you can
	  easily find out if a radio button is on or off without polling.
	  Simply register for one or both of these signals. Also, these
	  signals ONLY get sent by the radiobutton losing it's on state, and
	  the radio button gaining the on state.
	- Res fixed path for polymesh.h in ODE dynamics plugin.
28-May-2002
	- Fixed visibility culling in Dynavis when the camera was inside
	  the bounding box of an object.
	- Optimized outline visibility writing a bit by avoiding unneeded
	  storage of transformed z coordinate.
	- Changed csPolygonMeshTools::CalculateOutline() so that it returns
	  the used vertices with a bool array instead of the old method.
	  This is more efficient for Dynavis.
	- There seems to be a bug in the KD-tree traversal in some
	  special cases... Need to investigate.
	- Toni reports: Oriol Esteve has done some hacks to try to avoid the
	  opengl shadow bug (lightmaps were misaligned). This code is
	  experimental though. It has been tested in some levels and seems to
	  place the lightmaps correctly and doesn't crash (and well, that's
	  important :). It seems stable, but is still under observation.
	- Res did some fixes to OpenGL/windows and ddraw canvases:
	    - In fullscreen mode glwin32 canvas now behaves the same as
	      ddraw canvas when the window is deactivated (through alt+tab
	      or win key).
	    - Window isn't always on top now. there's a method to explicitly
	      cover the task bar mentioned in the Windows Shell docs. Works
	      fine on win2000, what about the other ones?
	    - Added small hack to glwin32 debug build to work around
	      the problem that in fs mode the app window covers the IDE while
	      debugging.
	    - glwin32 and ddraw canvas now try to set the fs video mode with
	      a display frequency specified in the Video.DisplayFrequency
	      cfgvar. If the modeswitch fails the first time or the
	      cfgvar == 0 the default frequency is used.
	    - Added an #ifdef so the latest ddraw.h isn't needed
	      (display frequency frequency req. dd7; won't be enabled
	      w/ older with headers).
	- Christopher Nelson added 'State' to SetProperty() for the checkbox
	  and radio-button.
27-May-2002
	- Fixed IsZero() from Toni by using a 'float' precision instead
	  of 'double'.
	- Fixed a bug in the coverage buffer of Dynavis in case the outline
	  has a lot of vertices. Now it automatically adapts the array
	  of vertices.
	- Simplified the coverage buffer a bit by removing support for
	  left/right lines.
	- Polygon insertion into coverage buffer is now also more robust
	  and faster because it doesn't care about left/right lines anymore.
	- Implemented a work-around for csImageFile::MipMap() in case steps
	  is 0 and width or height is 1.
	- Norman Kramer added some (void)funcname to reduce the amount of
	  warnings under MSVC.
	- Res improved level 0 mipmapping of 1 pixel wide images.
26-May-2002
	- Fixed a bug in the KD-tree of Dynavis. It was possible for
	  a split axis to be outside the node bounding box.
	- Made the test on outline radius > instead >=. Otherwise it could
	  happen that the outline was recalculated every frame if radius
	  happened to be 0.
	- Extended the unittest of csKDTree in Dynavis.
	- Philip Wyett eliminated a warning in csimage.cpp (under MSVC).
25-May-2002
	- Fixed a bug in KD-tree of Dynavis which could cause infinite
	  recursion while traversing the tree. Also enabled normal Dynavis
	  processing again.
	- Extended Dynavis 'toggle_coverage' command so that it now has
	  three modes: None, Polygon, and Outline.
	- Norman Kramer added patch submitted by malverian@lockless.dyndns.org
	  (Philip Walls) : Added software cursor drawing, which is available
	  to other canvases (and now svga2d canvas) via the
	  Video.SystemMouseCursor option.
	- Philip Wyett added freefnt2 plugin back into default MSVC build.
24-May-2002
	- Fixed a bug in the handling of the polygon mesh instances in a thing.
	  If they were queried too early they could hold invalid date and
	  the vis system would not know about it.
	- This fix means that Dynavis outline culling finally works :-)
	- Added lots of debug info to Dynavis (making it totally unusable
	  for mere mortals) to help me debug a crash.
	- Toni fixed a little bug in fector3.h: IsZero method compared the
	  components of the vector with 0. Now it has a default float
	  parameter named "precision". Its default value is SMALL_EPSILON
	  (0.000001f), but other values can be passed. As a precondition
	  precision value should be > 0, the test done is
	    ABS(x) < precision && ABS(y) < precision && ABS(z) < precision
	  so if precision value is negative this will return always true.
	  It could be solved typing ABS(precision) but this is not needed if
	  we're careful.
	- Philip Wyett removed SDL canvas and FreeType2 plugins from default
	  MSVC build.
23-May-2002
	- Put back the fflush() in engine.cpp. An fflush() can NEVER
	  cause crashes unless your environment is screwed up a lot.
	- Changed csPolygonMeshTools::CalculateOutline() so that it returns
	  the output edges as sets of vertex indices instead of edge
	  indices.
	- Extended the unit tester for CalculateOutline().
	- Replaced the normals with planes in the csObjectModelManager from
	  Dynavis.
	- Fixed a bug in CS which caused problems with portals that go
	  between sectors that contain static polygon trees. The c-buffer
	  was not cleared properly when the portal was on a mesh that itself
	  doesn't have the static tree.
	- Added support for calculating position dependend outlines in the
	  model manager of Dynavis. As long as the position doesn't move
	  too much with relation to the original model then the outline will
	  also be reused from previous frame.
	- Added support for rendering outlines in the coverage buffer of
	  Dynavis. No support for unit testing yet.
	- Added first version of outline rendering support in Dynavis.
	  Currently not working properly yet.
	- Philip Wyett fixes in OpenGL windows canvas:
	  Removed association between Depth and pfd.cColorBits. This is the
	  most likely cause of corruption some are seeing, because it is
	  ignored by us in setup. This also forced Windows to use the depth of
	  the desktop and stopped setting of depth via config files.
22-May-2002
	- Updated apimod96 for new csParser class.
	- Some minor code cleanup in the new csParser class. It was already
	  formatted rather well though.
	- Fixed python plugin.
	- Added csPolygonMeshTools::CalculateEdges() which will calculate a
	  table of edges for the mesh. Also added a unit tester for this
	  routine to the csgeom unit tester.
	- Added csPolygonMeshTools::CalculatePlanes() function to calculate
	  planes for the mesh.
	- Added csPolygonMeshTools::CheckActiveEdges() function to calculate
	  the activity state of all edges.
	- Added csPolygonMeshTools::CalculateOutline() to create an outline
	  (expressed in 3D) for the given set of edges and planes. Added
	  a unit test to the csgeom unit tester.
	- Res did the following:
	    - Added a missing newline at end of win32.cpp.
	    - Removed an fflush() from engine.cpp which caused crashes.
	    - Removed redundant functions ParseMixmode() from a couple of
	      loaders; iSyntaxService is used instead.
	- Philip Wyett reports:
	    - Added support for MSYS from the MinGW project.
	      To build with MSYS do "make msys MODE=debug" in place of your
	      old method.
	    - Fixed mkdir command in CS so msys can deal with directory
	      creation. Note: This is very hacked and early support and is
	      subject to change.
	- Philip also fixed a link problem in freefnt2. This requires you
	  update to latest msvc_libs 0.94a.
21-May-2002
	- Added include/igeom/polymesh.h to css.h.
	- Fixed bug with csEvCord not calling SCF_CONSTRUCT_IBASE in
	  constructor.
	- Added new iObjectModel interface. This interface represents a
	  generic way to look at some geometry in object space. This
	  is the most generic way to look at a mesh object.
	- Added iMeshObject::GetObjectModel() and added this to all
	  mesh object implementations...
	- Removed iMeshObject::GetShapeNumber(), GetRadius(),
	  GetObjectBoundingBox(), and GetWriteObject() since these are now in
	  GetObjectModel().
	- Removed iVisibilityObject::GetShapeNumber(), GetBoundingBox(),
	  and GetWriteObject(). Replaced with GetObjectModel().
	- Added a new csObjectModelManager to Dynavis. This manager is
	  responsible for managing iObjectModel instances that are registered
	  to it from the engine. The model manager will detect (using a
	  hashmap) that two different objects in the visibility system use
	  the same model and in that case be able to optimize a lot of the
	  calculations (in future the calculation of the OBB and outline
	  can be cached per model instead of per object). At this moment
	  no objects in the engine actually support sharing models yet but
	  this is planned.
	- Added new csPolygonMeshTools class in csgeom. This class will
	  contain functions to work with iPolygonMesh instances. Currently
	  it only contains the CalculateNormals() function which will calculate
	  the normals of all polygons in the mesh.
	- Optimized csPoly3D::ComputeNormal() a bit.
	- csPolyPlane contained a virtual destructor for no particular reason.
	- Polygon perspective projection was doing an additional transform
	  of the camera plane for no particular reason.
	- Implemented backface culling for writing out objects to the
	  coverage buffer in Dynavis.
	- I discovered that meshes rendered with DrawPolygonMesh were
	  still transforming all the vertices to camera space in the engine.
	  This is totally unneeded so I removed that. This should make
	  DPM meshes a little faster again.
	- Philip Wyett added #include "igeom/objmodel.h" to metagen.h
	  for CS_BBOX_NORMAL.
	- Res added msvc7gen to jobber.
	- Res did the following:
	    - Stuffed the parser functions in csutil/parser.h into a class
	      csParser.
	    - Added method csParser* GetParser() to iLoaderContext.
	    - Parse* methods in iSyntaxService require now a csParser*.
	    - Updated loaders.
20-May-2002
	- csThing now implements GetWriteObject(). Currently it will
	  just return the full detail version of the thing. A lower
	  detail version is planned.
	- Dynavis no longer uses iThingState. Instead it uses the
	  write object which is more general.
	- Removed the construct trans1 * trans2.GetInverse() with
	  trans1 / trans2 at various places in the engine and other
	  plugins. This is a considerable implementation as the
	  latter is a lot faster.
	- Philip Wyett added (but disabled until next cs mingw release)
	  "ie3ds" and "freefnt2" (Freetype 2 plugin), these libs are fully
	  supported in the release. Yes, I'm adding these as I go to keep
	  track of what is yet to support. :)
	- Philip Wyett removed Freetype 1 plugin and added Freetype 2
	  plugin to default MSVC build.
	- Norman Kramer replaced freefont with freefont2 and fixed various
	  issues related to this.
	- Res did the following changes:
	    - Changed MSVC project name to 'freefnt2'.
	    - Added command line help for win32 -[no]console.
	    - Window icon is tried to be loaded from <excutable>.ico.
	    - glwin32 supports specification of depth buffer bits through
	      Video.OpenGL.DepthBits cfgvar.
	    - Added support for AlertV() to win32 canvases (displays a
	      message box).
	    - g2dtest didn't set the window title.
	- Philip Wyett changed scf.cfg so original odivx plugin is default
	  again for pre 4 content. This is due to the fact it is this plugin
	  which is the only one that consistently works correctly under
	  Windows i.e.	MSVC and yes MinGW. :)
	- Philip added (but disabled until release of new cs mingw) 'csavi'
	  and 'odivx' plugins.
19-May-2002
	- Also added GetWriteObject() function to iMeshObject. The
	  same function in iVisibilityObject will pass control to the
	  GetWriteObject() of iMeshObject. Implementation note: it is
	  possible that two different mesh object instances will return
	  the same polygon mesh. In this case the visibility system
	  can use that to share shape related visibility information
	  for those different mesh objects. One way to implement
	  this from the perspective of the mesh object is to let
	  the factory be responsible for the geometry.
	- Implemented GetWriteObject() in all mesh objects. Current
	  implementation just returns NULL.
	- Implemented GetShapeNumber() in csThing mesh object. This
	  number will be incremented as soon as the geometry of
	  the thing changes.
	- Added PolyMeshHelper class for csThing and put the old
	  iPolygonMesh implementation there.
	- Moved iPolygonMesh interface from include/ivaria to include/igeom.
	- New apimod96 document.
	- Res did the following:
	    - Cleaned up mipmap code a bit:
	      Now there is only 'native' support for level 0 (blurring) and
	      level 1, level 2 and 3 generation weren't used by anything but
	      gfxtest anyway. Mipmap levels >1 are now generated by creating a
	      level 1 mipmap repeatedly.
	    - Fixed incorrect handling of 1-row/column mipmaps.
	    - Added iImage::Sharpen() and csImageFile::Sharpen().
	    - Software and GL have now options to sharpen mipmaps.
	    - Updated gfxtest.
	- Philip Wyett did the following:
	    - Removed include to now removed "ivaria/polymesh.h"
18-May-2002
	- Fixed a bug in csCoverageBuffer::TestRectangle() with very
	  large boxes that exceed integer accuracy.
	- Extended iVisibilityObject with a GetWriteObject() function
	  which will be used to write the occlusion buffer. Currently
	  not implemented.
	- Philip Wyett did the following:
	    - Removed code files from MVSC howto zip.
	    - Removed redefinitions of ABS and SMALL_EPSILON.
	    - Enabled Minimal Rebuild "/Gm" in MSVC7 project files.
	    - Enabled Browse Information "/FR", under debug builds.
17-May-2002
	- Added csBox3::CalculatePointSegment() which calculates the
	  segment (between 0 and 27) of a point relative to the box.
	- Added csBox3::ProjectBox() which projects a 3D box to 2D
	  given a transform.
	- The Dynavis ProjectBBox routine is now replaced with the new
	  ProjectBox() function. We should look in the rest of CS to
	  see if we can replace it there too...
	- Added new blender export script (scripts/blender/csexp223.py).
	  Thanks to Yvon Tanguy <tanguy13@bst.bsf.alcatel.fr>.
	- Res did the following changes:
	    - Ambient color can now be specified in a world file's SETTINGS
	      block.
	    - Very dark lightmaps are now possible.
	    - Enhanced csLoader::ParseColor(): can now accept 1 or 3 input
	      values.
	    - Added version of csLoader::ParseColor() which returns csColor.
	    - Fixed wrong resetting of ambient color.
	    - MAXLIGHTMAPSIZE can now have either 1 or 2 parameters.
16-May-2002
	- Added a very efficient AABB/frustum intersection tester which
	  has an associated clipmask to avoid testing planes that are no
	  longer active. Thanks to Ville Miettinen from Hybrid Graphics
	  for giving this algorithm to me. The routine is
	  csIntersect3::BoxFrustum().
	- Implemented frustum culling in Dynavis with BoxFrustum().
	- Also enabled frustum culling for individual objects.
	- Added timing statistics to the debug view of Dynavis so that
	  we can see how many time is spent in the culling part versus
	  the rendering part.
	- Dynavis now implements the 'toggle_frustum' command so you can
	  toggle on/off frustum culling. The '1' key in Bugplug is
	  assigned to that command by default.
	- Dynavis now implements 'cycle_view' command so you can cycle
	  between different debug views. Currently two views are supported:
	  statistics only or statistics + outline overlay. By default
	  shift-v is assigned to this command in Bugplug.
	- Added a new view mode for cycle_view (Dynavis) which clears
	  the screen first.
	- Dynavis now implements the 'toggle_coverage' command so you can
	  toggle on/off coverage culling (not implemented yet). The '2' key
	  in Bugplug is assigned to that command by default.
	- Dynavis now implements 'clear_stats' command to clear all statistics.
	  The ctrl-v command in bugplug is assigned to that command by default.
	- Implement the first primitive and slow version of coverage culling.
	- Dynavis now implements 'dump_state' command to dump all vis
	  culling operations that happen during the next frame. This flag
	  will immediatelly be cleared again after one dump.
	  The alt-v command in bugplug is assigned to that command by default.
	- Coverage buffer in Dynavis now also supports a textual dump of
	  the current coverage tree content.
	- Fixed a bug in csCoverageBuffer::TestRectangle() which caused
	  problems with boxes partially outside the view.
	- Dynavis basically works now. However enabling it currently slows
	  down as compared to not doing visibility culling. This is
	  totally expected as the current way to update the coverage buffer
	  is VERY bad (individual polygons) and defeats the entire purpose
	  of culling. Here is where the real work starts :-)
	- Res fixed incorrect handling of lightmaps with cell size <8
	  (software renderer).
	- Res fixed visual artifacts occuring on very dark lightmaps
	  (software renderer).
	- Philip Wyett removed cfg related stuff from the unittest makefile
	  as this application has no config files and it is causing
	  make install problems.
15-May-2002
	- Fixed a bad bug in csKDTree::Front2Back().
	- Fixed a bug in the bounding box insertion in the KD-tree.
	  The bounding boxes were not transformed correctly to world space.
	- This fixes view frustum culling in Dynavis.
	- Fixed the graphical debug view of Dynavis again.
14-May-2002
	- Improved the visual debugger for Dynavis.
	- Started work on actually implementing frustum culling in Dynavis.
	- Norman Kramer changed aws: for windows he added BackgroundSubrect
	  and OverlaySubrect to specify a subrectangle of the texture to use
	  for drawing if window has fsBitmap style.
	- Wyatt Miler fixed plugin.txi.
13-May-2002
	- Fixed a bug in the csCoverageBuffer.
	- Small optimization to csCoverageBuffer::TestRectangle().
	- Added notion of parent to csKDTree nodes.
	- Using that parent I optimized csKDTree so that when moving
	  an object the object is moved upwards in the tree to the best
	  fitting node (so that it can later be distributed downwards
	  again).
	- Dynavis also supports graphical dump now (using iDebugHelper).
	- Enhanced Bugplug with two new commands: visculview and visculcmd.
	  The first command will enable/disable tracking of a visibility
	  culler in the current sector. With the second command you can
	  send commands to the specific visibility culler. By default
	  the 'v' key is assigned to 'visculview'.
	- Fixed a bug in Dynavis::RegisterVisObject(). It was not correctly
	  adding the visibility object to its internal list.
	- Implemented unfinished support for graphical dumping in
	  Dynavis.
	- Matze Braun fixed case of GL includes in OpenGL windows canvas.
	- Matze Braun added hack to walktest to solve the collision detection
	  problems. We just don't allow being in a wall after a move now.
	- Res updated some comments in the msvc7gen.mak makefile. Also
	  changed name of output directories.
	- Res did a couple of changes ot MSVC7 project file generation so the
	  projects better match their MSVC6 counterparts.
	- Res fixed a grammatical error in csloader.cpp.
	- Res changed redirection when disabling console output from
	  "debug.txt" to "<application name>.txt" (ie "walktest.txt").
	- Christian Bayle added support for HPPA and M68K in arch.sh.
	- Christian also updated the Debian scripts.
12-May-2002
	- Res fixed MSVC project file generator for version MSVC7.
	- Res also did:
	    - Couple of fixes for HTML Help support.
	    - Added new make target 'chmsupp'.
	    - Added a short text how to create documentation in HTML
	      Help format.
11-May-2002
	- Norman Kramer did the following:
	    - Removed include of strvec.h and util.h from several
	      mesh loader plugins, both were no longer needed - thanks to
	      j5t who spotted this.
	    - Added Jorrit's plugin howto from the mailing list.
	- Res added MSVC project file generator for version MSVC7.
10-May-2002
	- Matze Braun added a unix/linux section on 'howto setting CRYSTAL
	  var'.
	- Philip Wyett updated links to ssh in the wincvs documentation.
	- Philip added ddraw.lib to it's makefile and removed refs to
	  ddraw.lib and zlib.lib from the MSVC project file templates. Now it
	  will not appear that projects like vfs.dll link with these two
	  libs. :)
9-May-2002
	- Philip Wyett added a HOWTO on creating the CRYSTAL enviroment
	  variable at the request of other CS developers as some folks don't
	  seem to know howto do it. I have done the Windows ones. Others may
	  wish to fill in the currently blank sections for Linux and Mac OSX?
	  ;)
8-May-2002
	- Fixed a few bugs in csCoverageBuffer::TestPolygon() and
	  InsertPolygon(). Added a few additional tests to the unit tester.
	- Implemented csCoverageBuffer::TestRectangle() and added
	  extensive tests for that routine to the unit tester.
	- Implemented csCoverageBuffer::TestPoint() and added
	  extensive tests for that routine to the unit tester.
	- The Dynavis now implements VERY basic visibility culling.
	  It used the kdtree for traversal and will cull octree nodes
	  against the view frustum. But that's all for now. This is also
	  untested.
	- Added new CULLERP command in a sector. With this command you can
	  associate to a sector a visibility culler from a plugin instead
	  of from a mesh (with the CULLER command).
7-May-2002
	- Implemented csKDTree::RemoveObject().
	- Added lazy obj_bbox calculation in csKDTree. This is useful
	  so that we don't immediatelly have to recalculate the
	  obj_bbox when objects are removed.
	- Fixed a bad bug in the existing low-level csKDTree::RemoveObject().
	- Implemented an efficient csKDTree::MoveObject(). This function
	  only does RemoveObject/AddObject if it cannot resolve the move
	  more efficiently (by checking if it remains in the current
	  leafs after moving).
	- Changed the meaning of obj_bbox (and csKDTree::GetObjectBBox()).
	  It now represents only the bounding box of all objects in this
	  node and not the children.
	- Added csDepthBuffer class to the Dynavis plugin. This will
	  implement the depth buffer. The Dynavis unit tester will also
	  call UnitTest on the depth buffer. The depth buffer is not
	  yet functional though.
	- Added csCoverageBuffer class to the Dynavis plugin. This is a
	  full copy of the current csXORBuffer which is in the engine.
	  In addition the csCoverageBuffer will also maintain a maximum
	  depth value for every 8x8 pixels.
	  This will replace the csDepthBuffer that hasn't even been
	  finished yet :-)
	- Removed csDepthBuffer class again. csCoverageBuffer is not finished
	  yet.
6-May-2002
	- Added csBox2::SetMin/SetMax and csBox3::SetMin/SetMax functions.
	- Renamed csKDTree::tree_bbox to obj_bbox and added a node_bbox
	  member too. So now for every node we have a bounding box of
	  all objects that are in the node (this bbox may exceed actual
	  node dimensions because objects are not clipped by the tree),
	  and we also have a bounding box of the node itself which is
	  made by cutting an infinite box at the root with all the axis
	  planes during tree creation.
	- Fixed the comment with csIntersect3::BoxSegment().
	- Added csGeomDebugHelper class in csgeom library. This class
	  implements iDebugHelper and is responsible for unit testing in
	  the csgeom library. Unittest app will also call UnitTest() on it.
	  Currently this unit tester only contains a few tests for
	  csIntersect3::BoxSegment().
	- Fixed a bad bug in the csKDTree again. In some cases it would
	  generate an infinite tree (memory allowing :-)
	- Added more extensive unit testing for Front2Back() in csKDTree
	  implementation. Now UnitTest() tries to test that Front2Back()
	  is really front 2 back.
	- Implemented Benchmark() in iDebugHelper implementation
	  of csKDTree and Dynavis plugin.
	- Norman Kramer did the following to AWS:
	    - Update AWS documentation (added doc for notebook, ...).
	    - Added stylesheet to convert designer 2.0 output (from QT3)
	      to aws.
	    - Changed the property values for barcharts framestyle slightly
	      bcsXXX now is bcfsXXX. This brings naming in line with other
	      controls framestyle values.
	    - Added the wrong qt3aws xsl file and even there I included
	      another bug :)
	    - Added comment on when to use qt2aws.xsl and qt3aws.xsl.
5-May-2002
	- Matze Braun fixed a mistmatching new/free in moddata.h.
	- Matze changed Normans name a bit to make my xslt processor more
	  happy. Probably the correct fix would be choosing the right
	  language but I have no idea how to do that.
	- Norman Kramer did the following to AWS:
	    - Added description for awsImageView, awsMultilineEdit,
	      awsScrollBar, awsTextBox. Extended description of the other
	      controls.
	    - Two methods were void but still tried to return the value of
	      another void method, which some compilers seem to dislike a bit.
	    - Prefixed all attributes with 'me'.
	    - Added QTextView translation to Multiline Edit.
4-May-2002
	- Norman Kramer did the following to AWS:
	    - Added a multi-line edit control for AWS.
	    - Added two new actions to multi line edit control: GetText
	      and SetText.
	    - Removed a few structures from awsmled.h which were meant for
	      another control.
3-May-2002
	- Implemented delayed processing in the KD-tree. This means that
	  when objects are added they are not automatically distributed
	  to lower levels then. This happens later when really needed. This
	  greatly increases efficiency of the generated tree as more
	  information is available at the time you really want the tree
	  to be generated. It is also more optimal as tree generation
	  will be done less and more gradually as needed.
	- Added a way to print statistics of the generated tree in
	  the textual dump of the KD-tree.
	- Extended the UnitTest() function of the KD-tree to print
	  statistics about various stages of the process.
	- Made adding objects to a KD-tree node more efficient by
	  increasing growth rate of internal vector for storing objects.
	- Uses 'int' instead of 'float' for calculating quality for the
	  KD-tree splitting algorithm.
	- Implemented Front2Back() traversal of the tree.
	- Matze Braun fixed compile error on ia64 (ensocket).
	- Matze also fixed a wrong delete in oss sound driver.
	- Matze fixed uninitialized memory reported by valgrind.
	- Matze did some preparation for my oss driver fix: removed some
	  unneeded global variables.
2-May-2002
	- Removed a warning in win32.cpp.
	- Enabled console in debug mode again for Windows. I think that
	  when you are debugging you certainly want to have that console.
	- Added iDebugHelper implementation of Dynavis plugin.
	- Added new csKDTree class to the Dynavis plugin. This class will
	  manage the geometrical distribution of objects in 3D space.
	  At this moment the class only supports adding objects. It will
	  not try to reorganize the tree if the quality of the tree starts
	  degrading.
	- Added UnitTest() implementation of csKDTree for the current
	  supported operations.
	- csKDTree also supports textual dump and state test. Also
	  changed Dynavis plugin to prepare for the situation in the future
	  where it will delegate textual dump and state test to the
	  csKDTree instance it is maintaining.
	- Christian Bayle added comments in package description of Debian
	  scripts.
1-May-2002
	- Philip Wyett changed MAX_SCANCODE so it can at least read Num Lock
	  out 0x5a (90). Removed Jorrits temp fix. Apps should now not
	  crash when built with MingW which was the only way I could
	  reproduce the bug. Note: Some work needs to be done with keys and
	  remapping under Windows as there are some Virtual Key issues which
	  not harmful but need addressing.
	- Philip did some fixes to win32.cpp.
	- Res added quotes around textures and filenames in world file
	  (map2cs).
30-Apr-2002
	- Added a new iDebugHelper interface in iutil. This interface defines
	  a consistant interface for debugging CS modules. It has the following
	  features (all features are optional so some module doesn't have
	  to implement them all):
	    - Unit testing: this is basically an extensive test of the module
	      to ensure it is working properly.
	    - State testing: this is a consistency check that can be used
	      at run-time to ensure the current state of the object is
	      consistent.
	    - Benchmark: runs a benchmark for this module.
	    - Text dump: allows for a text-based dump of the internal
	      state of the object.
	    - Graphical dump: allows for a single-frame graphical dump
	      of the internal state of the object.
	    - Sending specific debug commands to a module. This way a
	      module can implement additional commands (string based) to
	      enable or otherwise perform additional debugging operations.
	- Implemented iDebugHelper in csXORBuffer. The debug helper of
	  csXORBuffer implements unit testing, benchmarking, and
	  graphical dump.
	- Cleaned up the unittest application a bit. It also uses the
	  new iDebugHelper interface now.
	- The unit tester is already useful. It showed a bug with certain
	  kinds of polygons in the XOR buffer. Fixed now.
	- Fixed a crash bug in the XOR buffer with polygons that are
	  completely out of bounds of the buffer.
	- Modified the engine to implement iDebugHelper and removed
	  the ad-hoc iEngine::DebugCommand(). The debug helper of the engine
	  currently only supports DebugCommand() though.
	- Fixed BugPlug for the DebugCommand() change in the engine.
	- Added new 'enginestate' command to BugPlug. This will call the
	  iDebugHelper::StateTest() function of the engine and report
	  the results. Assigned shift-e to this command by default.
	- Applied a patch from Peter Amstutz <amstutz@cs.umass.edu> so that
	  the 3DS importer correctly honors the double-sided triangle flag.
	  In that case the CS model will have double triangles (one for
	  every side).
	- Thanks to the debugging help of Toni Asco Gonzalez I managed to fix
	  a rather big bug in the lighting routines (more specifically
	  in iSector::CheckFrustum()). The problem was csShadowIterator
	  which is supposed to iterate over all shadows. Every separate thing
	  will cause a separate shadow block in the shadow list. The
	  shadow iterator will iterate over these shadows in the shadow block
	  list. To do that it will internally iterate over shadow blocks.
	  However it could happen that a block containing no shadows
	  got added to the shadow list. The iterator would fail in this case
	  because it would stop processing further shadow blocks.
	- Fixed a bad bug in the Windows key processing routines. Pressing
	  numpad keys (most frequently '7') could cause CS to crash
	  horribly. This happens in ALL CS apps. At this moment I only
	  avoided the crash by adding a test for this but I'm not sure if
	  this is the good patch actually. The problem is at line 781 of
	  libs/cssys/win32/win32.cpp.
	- Added empty skeleton of the new 'dynavis' plugin. This plugin
	  will contain the implementation of the new dynamic visibility
	  system.
	- Fixed CS_DBGHELP_UNITTTEST and removed one 'T' :-)
	- unittest app will also call UnitTest() on engine (not supported
	  right now) and new dynavis plugin (also not supported).
	- Philip Wyett reports:
	    - Debug console now not shown by default in MSVC debug builds. To
	      see debug console use "-console" commandline switch. You will
	      now notice if you do this from the commandline i.e. "command"
	      or "cmd" output will be now fed back to the calling console and
	      not generate a new console window anymore.
	    - Now use only use "appcon" in makefiles for "DSP.APP_NAME.TYPE =
	      ".  Use of "appgui" is now deprecated for MSVC project files.
	      Note: "appgui" "appcon" should be removed from MVSC project file
	      generation and replaced with just "app" as a generic option.
	    - Manually modified MSVC project files.
	    - Updated MSVC external project HOWTO.
	  It is advised MSVC do a clean build after updating from cvs.
29-Apr-2002
	- Eric Sunshine renamed OSXDelegate2D_CGBLit.h to
	  OSXDelegate2D_CGBlit.h (notice the case distinction) so that #include
	  "OSXDelegate2D_CGBlit.h" will work correctly on UFS filesystems which
	  are case-sensitive.  (This was not an issue for HFS+ filesystems
	  since they are case-insensitive.)
28-Apr-2002
	- Fixed another initialization bug in the OpenGL renderer found
	  by valgrind.
	- Fixed an initialization bug in csThing::IntersectSegmentFull()
	  which could cause crashes with a bit of bad luck.
	- Norman Kamer added Robs patch for unbreaking unlooped streamed sound.
27-Apr-2002
	- Worked around a bug in the mipmapping code in csImage. When
	  mipmapping is called for one dimension equal to 1 the routine
	  reads to unallocated memory. I don't really understand
	  mipmap.inc very well so I currently just worked around this
	  bug. This needs more investigation. Thanks to Matze's valgrind
	  debugging for discovering this bug.
	- Fixed a few bugs in the OpenGL renderer where some queue variables
	  were not initialized. Thanks to Matze's valgrind debugging
	  for discovering this bug.
	- Philip Wyett fixed unittest MSVC project file. This file was being
	  generated into a Win32 GUI app rather than the correct Win32 Console
	  app.
	- Philip changed links which pointed to old "linuxgames.com" site and
	  pointed them to the new homepage at SourceForge (SF).
	  Thanks to Jim Sager for spotting this error in the docs.
26-Apr-2002
	- Fixed a bad bug in the XOR buffer which could cause memory
	  overwrites. A nice side effect of fixing this bug is that it is
	  now also more optimal :-)
	- Fixed another bug in the XOR buffer.
	- Added a csXORBuffer::Debug_UnitTest() function which tries to do
	  a full test of the XOR buffer to see that it is working to
	  expectations.
	- Added a new 'unittest' application. The purpose of this application
	  is to contain tests that are useful to be repeated at any time
	  in the future too. i.e. these tests serve to test importants
	  part of CS. If a test ever fails something went wrong so we can
	  quickly detect that. At this moment this test program is non
	  graphical and only calls csXORBuffer::Debug_UnitTest().
	- Added a few more test to csXORBuffer::Debug_UnitTest().
	- Again improved performance of the XOR buffer by only clearing
	  the part of the polygon buffer that will actually be needed.
	  This optimization brings the performance of the XOR buffer
	  rather close to the c-buffer now.
	- Modified 3ds2lev so that the triangle combiner is more robust.
	  It now detects better if two triangles are on same plane
	  and also checks if resulting polygon is convex.
	- Philip Wyett fixed a bug in awstex.h: changed the second 'key_r'
	  value to 'key_b'.
	- Matze Braun added a new option to 3ds2lev that let's you choose
	  between nice looking and fast loading maps.
25-Apr-2002
	- Removed the 'togglecull' and 'togglexor' commands from BugPlug.
	  Instead added the ability to have arguments with bugplug commands
	  and added the more general 'enginecmd' command. The first argument
	  after 'enginecmd' will be given to engine->DebugCommand().
	  In data/config/bugplug.cfg defined x as 'enginecmd toggle_xorbuf'
	  and ctrl-c as 'enginecmd toggle_cullstat'.
	- 'toggle_cullstat' will now show the percentage of the complete
	  octree bounding box that is visible.
	- Extended XOR buffer so it will now make inserted polygons a little
	  bit wider while tested polygons are original size. This increases
	  chance of good culling.
	- XOR buffer will now also correctly render the last row of the
	  polygon. It was not doing that before which caused visibility
	  culling to ignore many good opportunities.
	- Optimized the XOR buffer to use the 2D bounding box of the polygon
	  for doing the XOR sweep. This gives a big boost in speed. Still
	  slower compared to c-buffer.
	- Norman Kramer did the following to aws:
	    - Added "Image" key to imageview, which has a vfs path to an image
	      as argument.
	    - Added "KeyColor" key to imageview, which defines a key color
	      for the "Image"
	    - Added fsScaled, fsTiled and fsFixed as styles to imageview,
	      which define if the image is scaled,tiled or at its fixed size
	      inside the imageview.
	    - Extended the bison file to make components aware of RGB entries.
	    - Added GetTexture (..., r,g,b) to iAwsPrefManager that
	      additionally gives keycolors.
24-Apr-2002
	- Norman disabled output of 'Texture: ""' for the pixmap button since
	  the path isnt stored in the ui file (theres the actual bitmap data
	  stored instead. To get the name of the texture in the output write
	  'l:Texture: "blah"' in the whatsThis property.
	- Norman added awsImageView to the registration of common components.
	  Doh, and i was wondering why it never showed up.
23-Apr-2002
	- Fixed parsing of FILE keyword in texture parsing so it also
	  works with quotes.
	- csScanStr() also accepts '-' for %s now (if no quotes are given).
	- Continued work on XOR buffer. It now seems to work properly.
	  I added several debugging utilities. One of those is
	  Debug_ExtensiveTest() which randomly generates triangles and fills
	  them in the XOR buffer. It then checks if the resulting buffer
	  has values in the last column. If all goes well this should never
	  happen unless the polygon drawer has leaks. After 10000000 random
	  triangles it failed to find a single leak.
	  So csXORBuffer::DrawPolygon() now correctly implements polygon
	  drawing in both directions (clockwise/anti-clockwise) and clipping.
	  There is still much room for optimization. I will first get things
	  working.
	- Implemented InsertPolygon() and TestPolygon() in XOR buffer.
	- Started supporting XOR buffer in engine. Now we'll be able to test
	  performance and see if the XOR buffer is a suitable replacement
	  for the c-buffer.
	- Added iEngine::DebugCommand(). With this new method debugging
	  commands can be performed in the engine. BugPlug can use this to
	  perform certain debug options. At this moment the only supported
	  command is 'toggle_xorbuf' which will toggle between c-buffer
	  and XOR buffer.
	- Bugplug now supports new 'togglexor' command (by default assigned
	  to 'x' key).
	- First performance results indicate that the c-buffer is still
	  a lot faster. However, there is still considerable room for
	  optimizations in the XOR buffer. Also keep in mind that even if
	  the XOR buffer turns out to be slower I still will need it for
	  the real dynamic PVS algorithms because the c-buffer cannot
	  cope with non-convex outlines.
	- Added support for printing out culling efficiency (polygons,
	  nodes, and objects). Only enabled in debug mode.
	- Added 'toggle_cullstat' command (for iEngine::DebugCommand())
	  to toggle the printing of this culling statistics.
	- Added new 'togglecull' command to bugplug which will execute
	  the toggle_cullstat command. Assigned to ctrl-c key.
	- Added csXORBuffer::IsFull() which checks if the entire screen
	  buffer is full and nothing can be visible now. Always returns
	  false at the moment.
	- Implemented csXORBuffer::IsFull(). Also added an optimization
	  to ignore completely full rows in InsertPolygon() and TestPolygon().
	  This significantly improves performance of the XOR buffer but
	  still not as good as the c-buffer.
	- Matze Braun fixed 3ds2lev, it wasn't putting '' around
	  texturefilenames which leaded to corrupted maps if the filename
	  contained special chars.
	- Norman Kramer added a param member to awsListItem. Here you can
	  store additional information you do not want to display but connect
	  with that item like record ids for instance or pointers etc. You
	  transfer them via the param%d entries in the awsParmList.
22-Apr-2002
	- Norman Kramer did the following for aws:
	    - Removed the implementation of awsEmbeddedComponents HandleEvent
	      and replaced it with a call to the embedded components
	      HandleEvent. If you build a new control from ground up using
	      this embedding component technique you can now look up the
	      component factory of awsComponent and that you let create an
	      awsComponent which you can embedd (this implements exactly the
	      HandleEvent which was implemented here before).
	    - Filled the formerly empty Create method of awsComponentFactory
	      to create an awsComponent.
	    - Registered the awsComponentFactory with awsManager.
	    - Ok, so calling the handleevent of the embedded component was
	      a stupid move, why does nobody complain ? :)
	      Put back in the original plus the handling of OnFrameStart as
	      an "excuse me".
21-Apr-2002
	- Norman Kramer did the following for aws:
	    - Aws listbox: the already present 'selectable' property of
	      listrows is now respected when rows are selected.
	    - Added support for declaring use of your own aws controls.
	    - Added documentation on how to use your own control classes
	      and still laying them out in QT designer.
	    - Moved the class type modifier from the tooltip/comment into
	      whatsThis property where the connect and literal special effects
	      already are. Class type token identifier is 't'.
	    - On Initialization the embedded component is now IncRef'ed since
	      it's DecRef'ed at destruction (only decref what you incref).
	    - Added all the missing methods since iAwsComponent has changed a
	      lot.
	    - Made the wmgr in the factory protected, so subclasses can use it.
	    - Removed the pure virtualization of the OnBlah methods and added
	      default implementations (calling the method on the embedded
	      component) - this makes it easy for instance to embedd an
	      awsLabel object in your instance of a derived class of
	      awsEmbeddedComponent and just override the methods you need.
20-Apr-2002
	- Norman Kramer did the following for aws:
	    - Fixes for awsListBox:
		- GetSelectedItem now checks if theres any selected item
		  at all .
		- DeleteItem updates selection if the deleted item was also
		  the selected one.
		- DoFindItem now looks up the iString with FindKey, previously
		  the call to Find compared the iString with a awsListRow.
	    - awsListRowVector:
		- The Compare and CompareKey methods now call strcmp instead
		  of iString::Compare, because iString::Compare returns a
		  bool (if they were not equal false would be returned and
		  with false defined as 0, the "not equal" would be
		  reinterpreted as equal for the csVector's Find algorithm).
	    - Added signals for windows being Zoomed, Minimized, Closed and
	      the broadcasting of these signals.
	    - Added GetItems method to aws listbox for requesting selected
	      data from a specific row. This is now used by GetSelectedItem
	      and a new GetItem method.
19-Apr-2002
	- Philip Wyett temporarily removed the use of precompiled headers
	  for MSVC compile.
18-Apr-2002
	- Norman Kramer reports: components received mouseentry/exit messages
	  even if they was deaf. this caused the problems with controls in
	  notebook pages (for instance buttons never broadcasted
	  signalCmdButtonClicked signals) (aws).
17-Apr-2002
	- Started working on new XOR buffer which *might* (if all goes
	  well) replace the c-buffer. Nothing functional yet though.
	- Continued the work. The basic polygon filler (based on XOR
	  fill) appears to work now.
	- Philip Wyett updated the ensocket plugin with patches from Erik
	  Namtvedt (removed Set(), added doxygen comments, general cleanup).
16-Apr-2002
	- Minor fix to inet.h: friend csNetworkSocket2 is now
	  'friend class csNetworkSocket2'.
	- Christian Bayle fixed a stupid mistake in the Debian scripts.
	- Norman Kramer says: Richard Liu reported compilation failure
	  since solaris has munmap declared slightly different. I added
	  #ifdef OS_SOLARIS to get around that (mmiounix.h).
	- Philip Wyett added LGPL copyrights and did some minor code
	  cleaning (ensocket plugin).
15-Apr-2002
	- Disabled the use of DrawPolygonMultiTexture() in OpenGL renderer
	  even if multi-texture is enabled. DrawPolygonMultiTexture() is
	  obsolete and cannot correctly support super lightmaps. It should
	  never be used. I leave the code in cvs for now as a reference
	  for future multi-texture implementations.
	- Enabled multi-texture again in GeForce specific OpenGL configuration.
	- Removed the fix in csTextureTrans::compute_texture_space() I added
	  yesterday. Instead uses __volatile__ keyword with the asm
	  statements for qsqrt() and qisqrt(). This forces the compiler to
	  keep the code intact which seems to avoid the bug with
	  qisqrt() reported yesterday. I also did a small benchmark to see
	  if adding __volatile__ has a bad effect and I didn't notice an
	  obvious speed decrease. Thanks to Matt Reda for suggesting
	  the __volatile__ keyword.
	- Norman Kramer replaced two new occurences of static csClipInfo
	  blah[100] with the CS_STATIC_* macros and magically it does no
	  longer segfault at exit in walktest (OpenGL renderer).
	- Christopher Nelson added GetError() for awsSink so that you can
	  tell if the last operation caused an error. Also updated
	  definitions with new error codes and added GetError() to the
	  interface.
	- Matt Reda added __volatile__ to PowerPC asm stuff and changed
	  asm to __asm__.
14-Apr-2002
	- In one version of csTextureTrans::compute_texture_space()
	  there were two calls to qisqrt() (equivalent to 1/sqrt()).
	  With gcc 2.96 on linux and optimize -O2 compile the second
	  qisqrt() would fail unless the first one is replaced with
	  1/qsqrt() (debug mode and -O are fine). I have no idea
	  why this is. For now I just replaced the first qisqrt()
	  with 1/qsqrt() but this needs further investigation.
	- Philip Wyett improved MSVC memcpy replacement to handle 'short'
	  more efficiently.
	- Philip also eliminated some minor MSVC compiler warnings in
	  3ds2lev.
	- Matze Braun updated 3ds2lev so that it doesn't crash anymore
	  for empty objects and outputs starting points.
	- Res did the following:
	    - Lightmap mean lighting now includes pseudo-dynamic lights.
	    - OpenGL: translucent polygons are lit by dynamic lights in
	      single-texture mode.
	- Christian Bayle changed size_t in socklen_t (for inet.h) to
	  allow compile on ia64 and s390.
	- Christian also did some changes to the Debian files.
	- Norman Kramer fixed aws: lookup for window definition looped
	  forever if def is not present. The double linked list is a
	  circular list.
13-Apr-2002
	- Reverted my csconfig fix again. It fails to generate a correct
	  csconfig file.
	- Philip Wyett fixed bug in win32 GL canvas. Our canvas was not being
	  set topmost, which allowed the desktop/taskbar to leak through and
	  become viewable while GL test were being performed and making things
	  look not too good at all.
	- Res changed OpenGL windows canvas to only set topmost in
	  fullscreen mode.
	- Matze Braun updated todo_1.0.txt.
	- Philip Wyett did the following for OpenGL windows canvas:
	    - Reorganized how/where window styles are handled.
	    - Also cleaned up the code a bit. Bringing it back into line with
	      CS coding standard.
12-Apr-2002
	- Added a fix to 'make csconfig' so that it also works on Win98
	  now. The problem was that redirecting to out/csconfig.tmp works
	  on Win2K and higher but not on Win98 (forward slashes).
	- Fixed a small waste of memory in an internal array of the
	  OpenGL renderer.
	- Philip Wyett fixed ensocket plugin so that it compiles with Win32
	  GCC.
	- Res added a comment about GetArray() in garray.h.
	- Res additionally made some OpenGL related changes:
	    - Disabled multitexturing in glnvgf.cfg.
	    - Fixed garbled metablobs.
	    - Fixed some transparency issues.
	    - A couple of visual errors w/ multitexturing magically
	      disappeared after adding a 'glEnable (GL_TEXTURE_2D)' ...
	    - Queues are flushed before drawing a multitex'ed poly; eliminates
	      some errors, too.
	- Res also fixed software renderer to avoid unwanted holes on
	  keycolored textures and dark lightmap.
11-Apr-2002
	- Replaced /bin/sh to sh in the csconf.mak makefile. Many mingw
	  installations don't have /bin/sh. So using 'sh' is preferable.
	- Reverted my change above. It is not THAT easy.
	- Philip Wyett added "ensocket" network plugin, docs and test
	  app submitted by Erik Namtvedt.
	    This is a System independent network driver. This driver
	    implements a tcp/ip networking interface. The network driver
	    and socket driver currently support BSD compliant calls.
	  Note: Some operating systems may not support all the functions of
	  this plugin.
	- Norman fixed the net ensocket plugin a bit.
	- Philip fixed an 8.3 filename issue pointed out by Norman.
	- Res did the following on Map2CS:
	    - Added "png" to the list of extensions searched in zips.
	    - Default RENDERPRIORITIES() are written to world.
	    - Added facility to set a thing's priority: add an entity
	      property "priority", value: <renderpriority>
	    - Added facility to manually specify files for texures: add a
	      map property "filename_<texture>", value: <vfs path>
	    - When a texture from a wad3 has a name starting with '{' its
	      keycolor is set to blue.
	- Res also modified flarge:
	    - Added two 2d sprites, one with alpha transparency.
	    - Added alpha transparency snow.
	- Res made some changes to OpenGL windows canvas. SetMouseCursor()
	  now uses iWin32Assistant's SetCursor() (like ddraw dir). This
	  fixes the 'always visible mouse cursor' issue in gl. Res then
	  updated walktest so that mouse cursor is hidden in freelook mode.
	- Norman replaced stricmp with strcasecmp.
	- Norman renamed nettut target to netut to avoid circular makefile
	  dependency on unix/linux.
	- Christian Bayle modified arch.sh to add support for s390.
	- Christian did some changes to the Debian files.
	- Norman Kramer indented the netut, joylins, ensocket, freefnt2, and
	  odivx4 helplines in the makefile.
10-Apr-2002
	- Philip Wyett fixed a compile error under CodeWarrior 5 for
	  awsscrbr.h.
9-Apr-2002
	- Toni did some modifications to allow DrawPolygonMesh (OpenGL version)
	  to render non-lit meshes.
	- Res tweaked displaying of keycolored textures a bit in OpenGL
	  renderer.
	- Res also did:
	    - Maximum lightmap size can be changed by user.
	    - Added iEngine::ResetWorldSpecificSettings() which reset a subset
	      of flags/settings (which may differ from one world/map to
	      another) to its defaults.
	    - Added functions to get default values for above subset of
	      flags/settings.
	    - When loading a map:
		- Engine->ResetWorldSpecificSettings() is called.
		- map.cfg isn't read any more.
		- Added to SETTINGS():
		    - LIGHTMAPCELLSIZE
		    - MAXLIGHTMAPSIZE
	- Norman Kramer fixed scrollbar knob size calculation in AWS. Also
	  the value of the knob now is between 0 and max-amntvis.
	- Norman removed setting of max value for scrollbar from the listbox'
	  OnDraw method - scrollbars idea of Max value is the count of items,
	  not the Max value its "value" member can have - this is something I
	  could clear later on :)
	- Matze Braun added an != operator to csString.
8-Apr-2002
	- Release of CS 0.94.
	- Philip Wyett updated links to latest 0.94 msvc_libs.
	- Res did the following change:
	  lightmap size check, once more:
	    - Lightmap size can not exceed a (for now) hardcoded limit of
	      256x256. If it does, lighting is disabled for the poly.
	    - Renderer is asked if it can handle this lightmap. if not,
	      poly will be rendered unlit, but lighting is still calculated.
	    - In both cases, notifications are emitted as well.
	- Christopher Nelson fixed awsecomp.h so that it is valid again.
	  Also made some fixes to support the awsecomp.h update.
7-Apr-2002
	- Norman Kramer fixed OpenGL renderer because
	  clipped_lightmap_fog_texel was accessed wrong.
	- Philip Wyett added MSVC #pragma to remove warning C4390 on
	  DEBUG_BREAK. Also added newer msvc_libs files to cvsignore.
	- Philip also updated AWS documentation as follows:
	  Removed aws->SetDefaultContext(engine, myG3D->GetTextureManager());
	  and replaced with the correct canvas creation code, which I cannot
	  be bothered nor have the time to list. :)
	  Thanks to "vrm" from #CrystalSpace for reporting the error this
	  problem created.
5-Apr-2002
	- Andon M. Coleman patched 3ds2lev so it works correctly for
	  non-texture mapped 3DS objects.
4-Apr-2002
	- Cleaned up lots of engine/csgeom comments.
	- Removed lots of exit() calls from all over CS. A module in CS
	  should almost never do exit but instead return an appropriate
	  error to the caller (using the reporter and a return code for
	  example).
	- Philip Wyett did the following:
	    - Fixed precedance under MSVC (lexan.cpp).
	    - Phyztest: Removed Text which prompts for <ENTER> to add an
	      Impulse Spring object as the object does not exist.
	    - Phyztest: Changed <DEL> to <DELETE> in text for adding chain
	      object. It is not the num pad <DEL> which creates the object and
	      was confusing. Well it initially confused me anyway. :)
	    - Code format cleanup in demosky.cpp.
3-Apr-2002
	- Added a texture-less material (green_color) to flarge so that
	  we can easily see if this still works or not. The skeletal
	  spiny tree uses this color.
	- Implemented caching of sprite normals (using SMOOTH()) option.
	  This greatly speeds up load time of a sprite when the cached
	  data is present.
	- res fixed a bug in the OpenGL renderer where sometimes
	  textures where multiplied with texture mean color. This caused
	  color seams.
2-Apr-2002
	- Eric Sunshine fixed a problem which caused a host of HTML pages in
	  the user manual to be blank.	The culprit was a missing closing brace
	  '}' for an @emph directive in msdos.txi.
	- Eric Sunshine fixed formatting of the help message for memory.mak and
	  isoload.mak.
	- Eric Sunshine fixed chkogl.sh so that it no longer yells at people if
	  they don't have OpenGL installed.  There is no valid reason for
	  yelling at and confusing people just because an optional component is
	  absent.
	- Fixed curved surfaces so that they render again after Norman
	  removed the call to GetBezierCache().
	- Eric Sunshine eliminated several overfull and underfull `hbox'
	  warnings reported by TeX for msdos.txi and qtaws.txi.
	- Temporarily disabled the experimental quaddiv in the landscape
	  engine again because there seem to be some problems with it.
	- Changed csBezier2 constructor to a static 'Initialize()' function.
	- MD5 name generation for lightmaps/cache now uses the name
	  of the mesh wrapper and containing sector to guarantee more
	  uniqueness. Previously the name of the csThing itself was used
	  but this is almost always NULL.
	- Fixed description of -n in 3ds2lev so it is now correct.
	- Optimized the MergeNormals() code of 3D sprites (SMOOTH option).
	- Wouter Wijngaards added a ReplaceAge() function in the
	  emitter particle system API.
31-Mar-2002
	- Christian Bayle added $MACHINE error message for not found arch.
30-Mar-2002
	- Matze Braun fixed a bug that prevented going to edit mode in
	  csdemo...
	- Norman Kramer did the following:
	    - Fixed a crasher - in DrawPolygonSingleTexture was a case
	      where lm_queue was not checked to own the data (reproducable
	      crasher by running few times through the fountain in flarge).
	    - Removed a printf ("dang\n") in gl extensions detection routine.
	    - Fixed destruction of csSuperLightMap.
29-Mar-2002
	- Norman Kramer reports: csEmitFixed now exposes the implemented
	  iEmitFixed interface, hinted by Florian Vielhauer <FloViel@web.de>.
	- Norman extended the static variable declaration macros with an
	  _ARRAY version that differs in the destruction process only (that
	  caused the opengl renderer to crash at exit - at least this was one
	  reason).
	- Norman extended OpenGL renderer so it uses the new _ARRAY static
	  var declaration macro.
	- Norman fixed several warnings in the OpenGL renderer.
	- Wouter Wijngaards reports: Optimized terrfunc quaddiv tree drawing;
	  for me it is now more than twice as fast as it was. It is still
	  slower than the terrfunc original, as it does not cache the normals
	  generated.
	- Wouter also reports: This commit has quaddiv_enabled=true; so that
	  the new quadtree based terrain LOD is enabled by default. The FPS
	  is now the same as the fps with it disabled, for me.
	- Philip Wyett reports:
	  Fixed Windows Procedure callbacks which were causing initial
	  crasher of simpvs under Windows. The Window(s) will now
	  successfully create however there are still many issues to be
	  resolved i.e.
	    - Two windows - No destruction of parent.
	    - GL not rendering textures corectly under simpvs under Windows.
	    - Linux lockup issues.
	  Work is progressing... ;)
28-Mar-2002
	- Reverted part of res's changes to the lightmap checker because
	  they cause big problems.
	- Toni Asco Gonzalez commited a big patch to a new version of
	  DrawPolygonMesh for OpenGL:
	  To use DrawPolygonMesh just type FASTMESH() inside PARAMS section
	  of a thing. This will use a faster way to render a thing. This
	  optimization is especially good for high polygon models that
	  are not too big (in 3D dimensions). At this moment it is not
	  possible to combine FASTMESH() with VISTREE(). i.e. the thing
	  that is responsible for visibility culling cannot use FASTMESH().
	  Keep in mind also that clipping these objects is expensive. That's
	  why they should be as small as possible (but with high number
	  of polygons).
	  Another limitation is that FASTMESH() currently only works on
	  lit objects (i.e. with lightmaps).
	- Fixed the software version of DrawPolygonMesh() so it correctly
	  sets do_fullbright to false before calling DrawPolygon. This
	  bug would cause the stairs in flarge sometimes to be full
	  bright.
	- Applied a patch from Loic Dachary for improved diagnostics
	  when loading plugins (findlib.cpp).
	- Norman Kramer updated Dos port again. Also updated build
	  instructions.
27-Mar-2002
	- Preparation for release 0.94. Updated version numbers.
	- Norman Kramer reports: awsSource and awsSlot were never
	  SCF_CONSTRUCT'ed. This caused the crash in awsTimer for
	  instance (by clicking the scrollbar handle twice).
	- Norman Kramer reports: slparse.cpp.h is now named slp.hpp. This is
	  because on dos slparse.cpp.h would be too long and not valid due to
	  the two "." in the filename. Beside this djgpp version of bison
	  creates a .hpp file. If you have a better idea how to come around
	  this (some magic bison options ?) let me know.
	- Norman removed debug output from awsTimer.
	- Norman added djgpp versions for csGetTicks and csSleep.
	- Norman fixed the embedded eventhandler in the djgpp port so that
	  it is now constructed. simple1 and simpcd work now compiled
	  in static mode.
	- res fixed crash bug when relighting polygons with lightmaps
	  the renderer can't handle.
	- res also made sure that lighting for a polygon is always
	  calculated even if the renderer can't handle the lightmap.
	- res fixed an infinite recursion in null2d canvas.
	- Matze fixed 3ds2lev optimization so it works better now.
26-Mar-2002
	- Matze added a farplane command to walktest. This command set's a
	  farplane to the camera (surprise, surprise).
	- Norman Kramer renamed multiplex to iplex due to filename limits.
25-Mar-2002
	- Matze Braun let the parser return -1 for now. This is still
	  better than bogus values.
	- Matze changed lib loading to display errors returned by the OS
	  again.
	- Christian Bayle did various changes to the Debian scripts.
24-Mar-2002
	- Matze checked in some of his 3ds2lev changes in, the face
	  optimisation is disabled by default because it still fails on
	  some levels... I hope I can find the bug that causes this soon...
	- Matze made the syntax loader outputting the name of the polygon in
	  error cases...  The real problem I have here is that the line
	  numbers are totally wrong because the parser keeps them as a static
	  variable (that isn't shared cross plugins of course), so the real
	  solution is to rewrite the parser as an object (and eventually add
	  support for compiled tokens to it to make it faster...).
	- Matze did a very small optimization for key parsing (suggested
	  by Vengeance <keith@paqrat.com>).
	- Norman Kramer did the following:
	    - The 'relevant' member in csShadowFrustum was used
	      uninitialized.
	    - 'lighted_particles' in fountain was used uninitialized.
	    - csHazeLayers were not freed.
	    - Closed leak in debug.cpp.
	    - csSprite3DMeshObject's lod_level_config was used uninitialized
	      and is now set to its factory value when SetFactory() is
	      called.
	    - Metaballs num_mesh_vertices was used uninitialized.
	    - csSkelLimbStates 'name' was not freed at destruction.
	    - 'output_connectors' in gtreeldr.cpp was destructed in the
	      constructor. I just moved it into the destructor.
	    - Software renderer protex3d.cpp: decref'ed image used for
	      palette synchronization.
	    - simplept: added missing decref of the image used for the proc
	      texture.
	    - Set cam_move_src in blocks to 0,0,0. It was used uninitialized.
	    - csCommandLineOptionVector did not free its content at
	      destruction.
	    - Walktest: plugin_mgr was not decref'ed.
	    - Walktest: added some more decref'ing.
	    - Input console: lines array was not freed.
	- res fixed three small texinfo syntax errors.
23-Mar-2002
	- Fixed a bug in the patch from Loic which prevented CS
	  from properly working if CRYSTAL var is unset and if
	  so files from current dir are being loaded (linux).
	- Additionally removed the 'stat' test completely for finding
	  out if a library can be loaded. 'stat' and 'csLoadLibrary'
	  are not compatible so 'stat' cannot be used to test if
	  'csLoadLibrary' will work or not.
22-Mar-2002
	- Fixed a bug in the calculation of LOD for sprites. This
	  bug could cause crashes due to an array access at -1.
	  Thanks to Norman for reporting this.
	- Added a patch from Loic Dachary <loic@gnu.org> to give more
	  detailed error messages when plugins can't be loaded. This
	  way it is easier to see what is wrong.
	- Replaced DLERROR with WARNING while loading a plugin because
	  failure to load a plugin is not always an error (for example
	  for the sound and image multiplexers).
	- res added function to iGraphics3D so that the engine can
	  check if a renderer can handle a lightmap. Provided implementation
	  in OpenGL/Software versions.
	- res modified engine so it now checks if the renderer can handle
	  the lightmap.
	- res also replaced some printfs() in the engine with Report().
	- Christopher Nelson did the following to terrbig:
	    - Small update to allow public setting of materials list.
	    - Made another modification to the materials list. Now it makes a
	      copy of the list, rather than just assuming control of the
	      passed in pointer.
	    - Started adding in mapping and material list functions.
	    - Moved RGBVector to it's own file in include/csutil (csRGBVector).
	    - Modified the materials list location, turned the map into
	      a sorted vector vs. an unsorted one for fast searching during
	      the map build process.
	- Norman Kramer added dummy implementation of IsLightmapOk to
	  aws iGraphics3D implementation.
	- Mathew Sutcliffe created reversible form of csHashMap which can
	  find a key from a value as well as the value from a key.
21-Mar-2002
	- Norman Kramer fixed simpcd so that the csColliderWrapper is now
	  released.
	- Norman also initialized color in partgen to black. It was
	  used uninitialized.
20-Mar-2002
	- Philip Wyett did an update to the MSVC documentation:
	  Update to msvc_libs:
	  Note: This is for developers building the bleeding edge cvs code
	  or recent cvs snapshots with either MSVC 5, 6 or 7.
	- res did some changes to the software renderer: added some
	  scanprocs for alpha/keycolor and alpha/alphamap combos. Also
	  fixed two alpha-related crash bugs.
	- Mathew Sutcliffe did a little docs fix to binder.h.
	- Matze Braun fixed a small bug in the key definition parser.
19-Mar-2002
	- Decreased maximum size of lightmaps for software renderer
	  again. 16mil is WAY too much as that will not fit in the
	  texture cache. Now it is set to 2mil which is still two times
	  as big as it was before.
	- Matze Braun improved the 3ds2lev writer.
	- Matze did 3ds2lev optimization part one: removing double vertices.
	- Matze moved mmap functions outside csosdefs.h into mmiounix.h.
	- res reverted his own alpha changes from yesterday.
	- Christopher Nelson did a small fix to mmapio.h that can cause
	  strange linking problems when all the software mmapio is not
	  included, but the header is.
	- Christopher created default and convenience constructor for
	  csTriangle. This makes code much prettier and less onerious when
	  using CS_GROWABLE_ARRAYS.
	- Christopher made a bunch of modifications to terrbig that should
	  let the system render to a 3D mesh much easier. Additionally,
	  texture coordinates are now generated, built factory for the object,
	  and added some necessary member variables to get the factory to
	  work.
	- Christopher Nelson additionally did the following to terrbig:
	    - Created triangle queues so that, for each material there is
	      a set of triangles that pertain to that material. Textures are
	      mapped on block level, so if sub-blocks have different textures
	      the texture will be ignored unless that sub-block is expanded
	      to it's full resolution. This occurs recursively for all blocks.
	    - Created sets of meshes in case I have to setup different
	      properties for each material. For the moment all meshes are
	      equivalent except for their triangle list.
	      Note: I still haven't figured out how to tell the engine what
	      material I want drawn on the triangles. G3dTriangleMesh doesn't
	      appear to have the ability to do this, so I'll keep
	      investigating. Also, if someone who knows what they're doing
	      better than me can look at the draw pipeline in
	      csBigTerrainObject::Draw and see if I even have the right idea,
	      that would be great.
	    - Discovered where to set the material.
	- res added render priority for explosion particles in walktest.
	- res increased upper limit for lit textures in software renderer.
	- res fixed alpha transparency for OpenGL again. Also fixed
	  disappearing of halos behind walls.
	- Wouter Wijngaards did further work on the terrfunc terrain engine.
	  Works nicely now but totally unoptimized so very slow.
	- Matt Reda fixed some of the mmap stuff to compile again (on
	  MacOS/X). I didn't test my changes because I'm not sure what exactly
	  uses the mmap stuff. Also did some testing with QInt() on PowerPC.
	  It works, but on PowerPC it is actually slower than a simple cast
	  (in my simple tests). So we'll leave it off for now.
18-Mar-2002
	- Fixed a bug in the octree cacher. The name used for loading
	  the cache could be different from the name used to writing the
	  cache (more specifically the name generated by the MD5 hash).
	- Fixed a bug in the octree cache. It was using *(char**)memfile
	  to get to the data. This is incorrect and has been
	  changed to (char*)memfile.GetData ().
	- Fixed yet another bug in the octree cache. It appeared that
	  debug/optimize cache could have some differences. This is probably
	  related to small changes in floating point calculations and
	  the polygon splitting routine is very sensitive to that.
	  This has now been fixed by saving additional information to the
	  octree cache. This means the octree cache is now bigger but
	  more robust on different platforms/debug/optimize mode.
	- res fixed a bug found by <lemkef@charter.net> in the bmp
	  loader by removing the check for biClrUsed.
	- Mathew Sutcliffe fixed a problem with deciding whether to use
	  event.Key.Code or .Char.
	- Norman Kramer did the following:
	    - Renamed awslistbx to awslstbx to comply with the 8.3 filename
	      rule.
	    - AWS: Added AWSF_CMP_DEAF flag for components that do not wish
	      to receive any event.
	    - Added AWSF_CMP_DEAF flag, use it through cmp->IsDeaf()
	      and cmp->SetDeaf().
	    - The event distribution code in awsmgr now checks for this flag.
	    - Made invisible tabs in a notebook deaf.
	- Christopher Nelson fixed a compile bug in inpnames.cpp so that
	  MSVC won't complain that the case statements skip it's
	  initialization by including it in it's own {} block.
	- Matze Braun applied a patch from Loic Dachary <loic@gnu.org>
	  that makes using cs-config with autoconf easier.
	- Matze fixed unix csosdefs.h to compoile at least again. But I
	  think the mmapio functions shouldn't go to that header at all.
	- res fixed alpha transparency (full transparent in OpenGL was
	  fully opaque in software and vice versa).
	- Christian Bayle added more dependencies to the Debian scripts.
	  Several other smaller changes.
	- Mathew Sutcliffe modified the comments for binder.h. Added a main
	  comment so it will show in the online docs.
17-Mar-2002
	- Norman Kramer did the following:
	    - Fixed scf for static compilation (USE_PLUGINS=no).
	    - Renamed genmesh/csTriangleVertices to csGenTriangleVertices to
	      prevent name clash with terrfunc's csTriangleVertices (if
	      compiled static).
	    - Made csTriangleVertex an inner class of csTriangleVertices to
	      prevent name clash with genmesh's csTriangleVertex (if compiled
	      static).
	    - Added removal of SRC.LIBREF to the DIR.LIBREF target (otherwise
	      no new cslibref will be created if you made it once and then add
	      a plugin and do a "make recache blah")
	    - Removed the ";" from the LIBREF.BODY because
	      SCF_REGISTER_STATIC_LIBRARY already has it (and additionally
	      djgpp gives up there with an error).
	    - ogg: made callback structure public so VC will like it too.
	    - aws: less whining by VC now.
	    - aws: fixed textbox drawing routines potential use of
	      uninitialized variable.
	    - ogl_polybuf.cpp: fixed potential use of uninitialized var.
	    - thing.cpp: poor gcc for Solaris seems to have problems selecting
	      the right convert_endian routine. So I thought I help a bit by
	      casting the input parameter.
	    - Added chkogl.sh script to detect the existance of
	      glXGetProcAddressARB. Script is called from unixconf.sh.
	    - Additionally adds CSGL_EXT_STATIC_ASSERTION to volatile.h
	      if needed.
	    - OpenGL: added define of SGIS_genmerate_mipmap.
	    - OpenGL: made all defines commented out by default, so if your
	      GL implementation does not feature glXGetProcAddressARB no
	      extension is enabled either - you have to go here and enable by
	      hand (or provide an extended chkogl.sh that detects all the
	      nitty and maybe even the gritty).
	- res added ARB_texture_env_combine to config. Changed 3dfx config.
	  Added GeForce config.
	- Richard Uren added HEIGHTMAP token to isoloader to enable heightmap
	  calculation when tiling. HEIGHTMAP lives in a TILE2D definition
	  and defaults to false/off/no.
16-Mar-2002
	- Wouter Wijngaards did further work on terrfunc. Dynamic lod and
	  seamless within one block.
	- Norman Kramer did the following:
	    - Modified the macros for globals so MSVC will (hopefully) not
	      barf.
	    - Gone through plugins to replace the globals with the cs macros.
	    - cswstest: fixed crash in layout example.
	    - Removed unused vars in various plugins and apps.
	    - Fixed pointer to scalar assignment in isoload.cpp.
15-Mar-2002
	- Wouter Wijngaards did some further work on terrfunc: still not
	  operational (the old terrfunc still works though).
	- Christian Bayle did some package correction on the Debian scripts.
	  Also added a dependency on xlibmesa. Added some mini shot used for
	  48x48 and 32x32 gifs.
	- Mathew Sutcliffe added CS_IS_INPUT_EVENT(e) macro.
	- Norman Kramer did the following:
	    - Modified the variables declared with CS_DECLARE_GROWING_ARRAY
	      so they use the new cs macros for static/global objects.
	    - Globals in aws, iso, emit, and rapid are now used via cs macros.
	    - Made the generated destruction function static.
	    - In the CLASSVAR case the class vars were never set but
	      shadowed by another variable.
14-Mar-2002
	- Norman Kramer did some fixes on the DOS port.
	- Norman fixes scf so that it again unloads unused shared libraries
	  on request only.
	- Matze Braun fixed a bug in csString when appending zero length
	  strings. Also added a comment.
	- Wouter Wijngaards did some experimental work on the landscape
	  engine (terrfunc):
	    - Removed the line RDS NOTE: Is this the same as DrawTest?
	      after the TestVisibility function.
	      Answer: No.
	      Long Answer: TestVisibility does quadtree visibility culling,
	      where parts of the terrain occlude other parts of the terrain.
	      This can and will never result in occluding the *entire*
	      terrain. Thus, it is not the same as DrawTest.
	    - Added terrain quad divisor class and terrfunc can enable this
	      (default on false). Placeholder code for now.
	    - Tiles show up, texture coordinates work for terrquaddivisor.
	- Christian Bayle did some cleanup for rules and createmenus in the
	  Debian scripts.
13-Mar-2002
	- Fixed mdl2spr so that it now correctly generates a MESHFACT
	  keyword instead of MESHOBJ.
	- csdemo will now show a list of all demo data files that it can
	  find in the current directory and the data dir if you start it
	  without commandline. In that case you can click and select the
	  data file that you want to run.
	- When you don't use LMCACHE keyword CS will now automatically
	  assign a name to every thing. Currently this name is based
	  on an MD5 checksum of the following information:
	      - Bounding box of the thing.
	      - Number of vertices
	      - Number of polygons/curves
	      - Name
	  This should guarantee sufficient uniqueness. If not we can always
	  add more data to this MD5 generation. This MD5 key will be
	  converted to a 32-byte name which is then used for caching
	  lightmaps and octree. This will make it easier to dynamically
	  load levels even when other parts of the level are already loaded
	  without the user having to manually specify LMCACHE.
	- Matze Braun added --includes to cs-config.
	- Norman Kramer did the following:
	    - Destruction functions are now called in reverse order of
	      registration.
	    - Dynamic libs are now correctly (hopefully) csUnloadLibrary'ed
	      by scf, note that this triggers a segmentation fault (at least
	      on linux (suse 7.3 - gcc 2.95.3 and binutils 2.11.90.0.29))
	      that is caused by gcc/libc's handling of static/global objects
	      in shared libraries. I will now begin to employ the new cs
	      macros to get around this.
	    - Changed a few of the static/global objects in csgeom and
	      csengine to be declared/implemented with the new CS_ macros
	      ("scfreg engine.so" no longer segfaults - that was why I started
	      all this, the guy who asked on irc why it segfaults be cursed :)
	    - Added a CS_..._REF in cssysdef that returns a reference to the
	      static object.
	    - In cssysdef.h moved forward declaration of cleanup function out
	      of extern "C" {} construct.
	- Christian Bayle did some more changes to versioning for the Debian
	  scripts.
12-Mar-2002
	- Made the lightmap cache for pseudo-dynamic lightmaps (shadow
	  maps) a bit more robust. Previously changing pseudo-dynamic
	  lights could cause the map to become unloadable because
	  old cached dynamic lightmap files made things crash.
	- Cleaned up pol2d.cpp source code which seems to have been
	  badly formatted by the C++ 'beautifier' :-)
	- Fixed a bad bug in pseudo-dynamic lights. Due to a wrong test
	  in the lighting code polygons that were fully lit by a
	  pseudo-dynamic light would not get lit at all.
	- CS demo now gives information about where to get demodata.zip
	  if you run it without demodata given on the commandline.
	- Removed the ad-hoc mount to demodata.zip from vfs.cfg.
	- csdemo now only accepts real filesystem path for the demo zip
	  or directory. So run csdemo with 'csdemo data/demodata.zip'
	  for example.
	- csdemo will no longer fail if there is no library in the demo
	  archive.
	- csdemo will now correctly move objects and camera so that they end
	  up in the correct sector if they go through a portal.
	- Changed iSaverPlugin::WriteDown() to accept iFile instead
	  of iStrVector. This will make it possible to write binary data.
	  Changed all implementations of this interface for the new
	  method signature.
	- Christian Bayle did some changes to the Debian script rules.
	- Christian added versioning/added export on tag for the Debian
	  scripts.
	- Norman Kramer did the following:
	    - Further changes to the CS_* macros to provide static/global
	      objects in shared libraries.
	    - Now everything should be in place and ready to be used (that
	      will follow in the coming days).
	- Philip Wyett added include <winsock.h> to csosdefs.h for windows.
11-Mar-2002
	- Fixed a bug in csScanStr when presented with an empty string
	  as input. This prevented the proper scanning of the format
	  string and thus also prevented some stuff that needs to happen
	  even if input is empty (like setting count variables to 0 for
	  lists like %D and %F).
	- Fixed a bug in the parsing of SMOOTH (spr3dldr) which would
	  use '%s' for a numeric parameter if an error occured. This
	  causes crashes. Additionally also fixed the error message
	  that occurs in this case.
	- Wouter Wijngaards added trailing endofline to isomap/isomap.h file.
	- Philip Wyett removed odivx4 plugin from default MSVC build.
	- Norman Kramer did the following:
	    - Added macros for declaring/implementing static/global
	      variables that can be used inside shared libraries.
	    - A Libname_scfFinalize function is called for shared libraries.
	    - The cleanup function for the main application is called in
	      DestroyApplication.
10-Mar-2002
	- Norman Kramer did the following:
	    - Changed SCF_EXPORT_FUNCTION to CS_EXPORTED_FUNCTION.
	    - Changed SCF_EXPORTED_NAME to CS_EXPORTED_NAME.
	    - Moved default definitions of both into cssysdef.h (out of scf.h).
	    - Renamed the SCF_EXPORT_FUNCTIONS in the other system dependent
	      csosdefs.h files.
	    - Declared cs_static_var_cleanup in cssysdef.h as
	      CS_EXPORTED_FUNCTION (that should fix the compiler warnings on
	      win32).
	- res renamed csCreateXORPatternImage() parameter 'patsize' to
	  clearer 'recdepth'. Changed comment a bit.
	- res fixed rle.mak for wrong output file name under MSVC (now
	  rlecodec instead of rle).
	- Philip Wyett removed 'byte' from xorpat.cpp, which is not always
	  known for unsigned char.
	- Philip fixed a bug in the video app: an attempt to centre the
	  video also resulted in the video being halved in size.
	- Philip also reports:
	    - Removed code used in odivx4 plugin which is not part of odivx
	      for Windows. You can see all the affected lines by looking for
	      lines commented out with "// PSW".
	    - Updated msvc_libs (all version) adding odivx4 support.
	      Note: The decore.h now in msvc_libs is a custom version as the
	      one one officially released is missing some definitions and also
	      one which causes crashes. :/
	    - Left all old divx headers and libs etc in for the time being.
	      I will remove later.
	    - Added divx4 plugin to default MSVC build.
	    - Updated docs in cvs ready for when we can get the new versions
	      of msvc_libs onto ftp.
9-Mar-2002
	- Norman Kramer did the following:
	   - In the OpenDivX plugin: removed FOURCC divx, which is now
	     assigned to divx4.
	   - Added new divx4 codec.
	   - In the csosdefs.h files changed CS_IMPLEMENT_PLUGIN to
	     CS_IMPLEMENT_PLATFORM_PLUGIN and CS_IMPLEMENT_APPLICATION to
	     CS_IMPLEMENT_PLATFORM_APPLICATION.
	   - Added CS_IMPLEMENT_STATIC_VARIABLE_CLEANUP and
	     CS_STATIC_VAR_DESTRUCTION_REGISTRAR_FUNCTION in cssysdef.h.
	   - CS_IMPLEMENT_PLUGIN and CS_IMPLEMENT_APPLICATION is now made
	     from CS_IMPLEMENT_STATIC_VARIABLE_CLEANUP and
	     CS_IMPLEMENT_PLATFORM_*.
	- Philip Wyett fixed all the warnings caused by the changes to
	  CS_IMPLEMENT_APPLICATION and CS_IMPLEMENT_PLUGIN. Also changed
	  lib name which MSVC will use for new divx for plugon to eliminate
	  conflicts.
	- Philip then proceeded to revert the massive commit he did a few
	  minutes ago :-)
	- Norman reverted on additional file that Philip forgot to revert.
	- res did some changes to procedural textures (plasma, fire, dots):
	  changed texflags, removed nomipmaps on plasma/fire, added
	  persistent on dots.
	- res fixed the OpenGL backbuffer procedural texture implementation
	  so that up is now up and down is down.
8-Mar-2002
	- Peter Amstutz <tetron@student.umass.edu> gave a patch which
	  does the following:
	    - garray.h will not shrink the allocated size when SetLength() is
	      called (SetLimit() can still shrink the array). He did not change
	      the allocation policy (it still allocates +8 elements at a time).
	    - In mdltest.ccp/csSingleIndexVertexSet::Add() he commented out
	      the n-factorial linear search which he believes is supposed to
	      optimize vertices, but in practice does nothing (except suck
	      up a LOT of runtime).
	    - In sprbuild.cpp/csSpriteBuilder::Build() he added code to count
	      the number of vertices in the imported model and preallocate
	      the required memory in the vertex arrays.
	    - In sprtri.cpp/csTriangleMesh2::AddTriangle() he changed the
	      resize policy from allocating +8 elements at a time to doubling
	      the array size.
	- Jorrit additionally modified the following on this patch:
	    - garray.h will still shrink the allocated size when
	      SetLength() is called which will result in a limit that
	      is 1000 (CS_GARRAY_SHRINKLIMIT) units smaller than the old
	      limit. This means that arrays will still shrink by calling
	      SetLength() if the new length is sufficiently smaller than
	      the old one.
	    - The default grow limit is now set to 16 (CS_GARRAY_GROWSTEP)
	      instead of 8.
	    - Instead of doubling the number of triangles in the spr3d
	      plugin the triangles are doubled with a maximum of 1000
	      triangles at a time. This ensures that not too much memory
	      is wasted.
7-Mar-2002
	- Matt Reda fixed an endian-related bug in the OpenGL screenshot
	  code.
	- Fixed another occurrence of an initializer in a cpp file.
	  This is not legal.
	- The cache manager is no longer registered with the object
	  registry. Instead I added iEngine::GetCacheManager() and
	  SetCacheManager(). This is a more explicit and easier way
	  to handle this. So if you want to cache something in the
	  context of the engine just ask the cache manager from the
	  engine. If you don't use SetCacheManager() then the engine
	  will still use the vfs cache manager by default.
	- Octree is now also saved on the cache manager.
	- Fixed a memory leak in csOctree::ReadFromCache().
	- Fixed a big problem in csOctree::ReadFromCache() which could
	  cause memory corruption.
	- Brandon Ehle did some fixes in caltocs for memory corruption.
	- Christian Bayle did an initial addition to build daily Debian
	  package (scripts/debian).
6-Mar-2002
	- Matt Reda made the iso engine explicitly remove all mesh factories
	  at iso engine destruction for clarity.
	- Matt Reda removed extra assignment where g3dpolyfx.mixmode was
	  being assigned the same value twice for isometric sprites
	- Matt Reda removed extra screen to world calculation in iso views
	- Matt Reda added support for splitting walktest into two views.
	  Shift-S splits to 2 views, Shift-T toggles between the two views
	  (allowing the user to navigate the level in the two views), and
	  Shift-U returns to a single view (the currently active one).
	- Added iCacheManager interface (include/iutil/cache.h). This is
	  a generic interface to describe a cache mechanism. It can be used
	  for storing data that is hard to calculate and doesn't change
	  often. Since this is an interface you can create various
	  implemetations that read/write cached items from several sources.
	  Even a networked implementation could be possible.
	- Added csVfsCacheManager implementation of iCacheManager
	  (include/csutil/vfscache.h). This is an implementation of
	  iCacheManager that will store cached items on VFS (file system).
	- The engine will now find a cache manager in the object registry
	  with the tag 'crystalspace.engine.cachemgr'. If this doesn't
	  exist it will create an instance of csVfsCacheManager and
	  register that (cache will be placed in 'cache' dir). By registering
	  your own implementation of iCacheManager to that tag you can
	  force the engine into using a different cache.
	- Extended iLightingInfo interface with a iCacheManager* parameter.
	- Lightmaps are already cached using the new system. Octree and
	  bsp tree are still a todo.
	- Philip Wyett moved the isometric map loader to plugins/isoldr
	  instead of its original location inside plugins/engine/iso.
	- Philip fixed all redefinition errors in inpnames.cpp. Note: when
	  allocating a default value to a variable in a function definition,
	  please could folks do it in the header file only and not in both the
	  .h and .cpp.
	- Richard Uren removed some debug comments from the iso loader.
	- Richard Uren also did some changes to allow the creation of mesh
	  wrappers without a class id for the iso engine.  The CLASS directive
	  in the iso map files are no longer needed.
	- Matze Braun added a missing cache.h include to polygon.cpp.
	- Matze also added declarations for iEvent and csEvent again in
	  inpnames.h. Please don't remove them again. They are needed.
	- Matze then did a small bugfix for keyparsing.
	- res changed VFS so that when a file is opened for reading the
	  directories are not automatically created.
	- res did the following changes to lightmaps:
	    - Changed the way lightmap is stored on disk: the 4th byte was 0x80
	      all the time, and the comment on line 159 in lghtmap.cpp says it
	      wasn't even known why :) now the 4th byte is stripped when
	      writing the lightmap and readded when reading.
	    - Changed lightmap file magic.
	    - Changed lmversion.
	- Mathew Sutcliffe added csInputBinder: an auxilliary support class.
	- Christopher Nelson published FindComponentFactory interface and
	  made several modifications to the interface to accomodate this.
5-Mar-2002
	- Mathew Sutcliffe (Oktal) added new csParseInputDef and
	  csGetInputDesc functions which replace the old functions in
	  cskeys.h. With these functions you can parse a key/mouse/joystick
	  event into a csEvent or vice versa.
	- Mathew added backward compatibility with cskeys and extra.
	- Fixed the csParseInputDef and csGetInputDesc so that they now
	  return bool on success/failure of conversion.
	- Richard Uren added a new loader for the isometric engine.
	- Matze Braun did the following:
	    - Small fix from Rene Dudfied <illumen@yahoo.com> to make
	      fpu80x86.h compiling with gcc >= 3.0.4.
	    - Matze added some declarations to inpnames.h.
	- Philip Wyett fixed a few issues in the new iso plugin makefiles.
	- Philip also fixed all the conflicts of having two plugins in the
	  same dir and wildcarding all the files in that dir. Isomap now
	  successfully compiles and runs under MSVC.
	- Matze Braun fixed the isomap makefile so that the target name
	  is now different from the executable name.
	- Matze additionally removed double CS_IMPLEMENT_PLUGIN, this results
	  in two main functions in linux.
	- Matze then proceeded to add the CS_IMPLEMENT_PLUGIN again. These
	  really are two plugins.
4-Mar-2002
	- Fixed the tutorials in the docs so that they are up-to-date with
	  regards to changes that happened a long time ago in csInitializer.
	- Philip Wyett implemented a strncmpi() function so MSVC can compile
	  again.
	- Matze Braun fixed inpnames.cpp for unix. Stricmp is MSVC only.
	- Jonathan Tarbox reports: while in most systems returning false
	  as a pointer will evaluate to 0, it does not within BeOS.
	  Fixed a problem in csloader.cpp related to this.
3-Mar-2002
	- Norman Kramer did the following:
	    - csRegisteredString never freed the memory assigned to its
	      String member.
	    - With much help from Matze Braun I have figured what causes
	      the segfault after engine.so gets unloaded: it's the _fini from
	      crti.o that is linked in with the link command that is issued
	      when linking with g++.
	      Why this causes a crash is still unknown, but we can avoid
	      linking this in by adding -nostdlib -lgcc to the g++ link
	      command. This is what i've changed in linux.mak (funny enough we
	      used that already back then when we used gcc instead of g++).
	    - Reverted my changes since now the static objects in engine.so
	      are no longer initialized (well, they are 0 - for instance
	      the csPoly2DFactory in csPoly2DPool).
	- Matze Braun added support for 'free()' to csMemFile (in addition
	  to not deleting and 'delete[]').
	- Matze fixed the indentation/coding style of the sound renderer
	  and also fixed a bug in the destructor.
	- Matze fixed cspython.mak to remove python.cex in pythonclean target.
2-Mar-2002
	- Norman Kramer did the following:
	  Text in the "whatsThis" property of controls are now evaluated.
	  Currently text in the form of: "c:a1,b1,a2,b2[,...]" is recognized
	  and translated into:
	    connect
	    {
	      a1 -> b1
	      a2 -> b2
		 ...
	    }
	  so if you write in the whatsThis property of a pushbutton:
	  c:signalClicked,mysink::Login you'll get:
	    connect
	    {
	      signalClicked -> mySink::Login
	    }
	- Norman also added recognition of literals in whatsThis property.
	  It is of the form "l:literal text". <literal text> will be placed
	  in the output.  "c:" and "l:" tokens have to separated by "|"
	- Norman updated the qtaws.txi documentation.
	- Norman fixed the following:
	    - Thing was not initialized in polygon constructor.
	    - xwindow.cpp: graphics context was not freed.
	    - xexstshm: XImage was leaked, moved destructor of xshmt in x2d
	      around so it happens before xwin is destroyed (xshm also
	      uses dpy variable). NOTE: If you use valgrind (memory checker)
	      you will note that it crashes if the shared memory if
	      shmdt'ed - this seems to be a bug in valgrind.
1-Mar-2002
	- Norman Kramer did the following:
	    - Made joystick code produce "old" events - that is (x,y) pairs
	      for the first 2 axis only.
	    - The keys read from joystick.cfg are now composed as
	      Device.Joystick.<Platform>.<Compiler Name>.*
	      This will possible implementations for other platforms let share
	      this config file.
	- Christopher Nelson fixed some bugs with the transition out code,
	  and modified visibility processing to make transition resets work
	  right without flicker.
	- Wyatt Miler fixed @em -> @emph in apimod94.txi.
28-Feb-2002
	- Norman Kramer did the following:
	    - Cleaned up crysball.cpp a bit.
	    - Replaced a long if-snake with a for loop.
27-Feb-2002
	- Matze changed oss sound driver to nonblocking mode while opening, so
	  if the soundcard is already used it fails now instead of
	  waiting for the sound card to become free.
	- Norman Kramer did the following:
	    - Cleaned up SCF_DECLARE_IBASE in the components, which was not
	      needed (and wrong) since they all inherit from awsComponent
	      which implements iAwsComponent already.
	    - Made awsComponentFactory a full implementation of
	      iAwsComponentFactory (that is I provided a dummy implementation
	      of Create ()).
	    - Removed all the SCF_DECLARE_IBASE stuff for ComponentFactories
	      too.
	- Christopher Nelson did the following:
	    - Made out transitions automatically Hide and Reset the window
	      frame for the in transition.
	    - Made awsStandardSink contain triggers for all out transitions.
	    - Fixed a bug in the status bar that would cause draw pixmap to
	      segfault.
	    - Added new window function: FindChild. This allows you to find a
	      child of a window by name. You must make sure and have the exact
	      same name, though, otherwise the child will not be found. Case
	      IS sensitive.
26-Feb-2002
	- Norman Kramer did the following:
	    - The styleshhet now recognizes QTabWidget which are transformed
	      into awsNotebook.
	    - Fixed bug that created layouting data even if there were none.
	    - Fixed the case where notebook pages have no caption, it now
	      correctly creates dummy captions synthesized from "Tab " + #Tabs.
	- Brandon Ehle implemented the PLUGINS section for libraries in the
	  loader.
	- Matze added a missing csPlane3 forward declaration to campos.h.
	- Christopher Nelson added window transitions for sliding in and out
	  left, right, up and down.  Note that transitions will cause
	  segfaulting if used with a proctexture, because CS proctextures do
	  not provide proper clipping.
	- Norman Kramer fixed DoButton and DoMotion of the joystickdriver
	  (for one the range checking was screwed and now joystick number is
	  in range [0, maxjoy-1] as the comment in iEventPlug suggests.
	- Norman implemented a joystick eventplug for linux that conforms to
	  the Linux Joystick API. Enable it CS/libs/cssys/unix/*.mak. There
	  is also a joystick.cfg.
25-Feb-2002
	- Michael O'Shea found a bug in iLoader::LoadMeshObject(char*fname).
	  This function was totally broken :-)
	- Matze Braun removed an assert from the standard reporter to allow
	  users to define their own severities.
	- Norman Kramer did the following to aws:
	    - Added notebook component.
	    - Events are now only broadcasted to windows that are not hidden.
	    - Added sample for notebook.
23-Feb-2002
	- Matt Reda changed size of uv array in ogl_polybuf.cpp. Array was
	  declared with size 2 but 3 elements where being accessed,
	  overwriting some of the other local variables. Adjusted size to 3
	  until someone with more insight can determine whether that is
	  correct, or if it should only be accessing 2 elements.
	- Philip Wyett fixed compiler error under MinGW Norman Kramer mailed
	  to me. This error was that ENUM_CURRENT_SETTINGS is not part of
	  the win32 api of MinGW whilst it is under MSVC. I have added a nice
	  little define to include it for those which don't have it.
	- Philip did a quick hack to get the LUA plugin to compile.
	- Philip removed include csutil/zip.h from css.h.
22-Feb-2002
	- Added iLoaderContext interface (include/imap/ldrctxt.h). This
	  new interface gives loader plugins a way to find out about
	  sectors, materials, mesh objects, and mesh factory wrappers.
	  The interface supports the notion of region-qualified names (i.e.
	  'regionname/objectname') or just normal object names.
	  Implementations of loader contexts should not be modifiable since
	  sometimes a context is stored for delayed loading.
	- Removed iLoader::FindMaterial(), FindSector(), and
	  ResolveCurrentRegionOnly() since now the loader context has
	  to be used.
	- Changed iLoaderPlugin to use the iLoaderContext instead of
	  material and factory list.
	- The standard loader now supports an iLoaderContext and gives
	  it to the loader plugins.
	- Modified all the loader plugins to use the new context object.
	- Extended iSyntaxService::ParsePoly3d() with a new
	  iLoaderContext* parameter.
	- Added iEngine::CreateLoaderContext(). With this function you can
	  create a loader context that will operate on the engine lists.
	  It also has an optional region parameter with which
	  you can get a loader context that will only search in that
	  region. You can use this function for giving it to loader plugins
	  directly.
	- Changed the new iEngine::FindBla() functions I added yesterday
	  so that they accept an optional region parameter instead of
	  a bool ResolveCurrentRegion.
	- Fixed a bug in iEngine::CreateMeshFactory(). If a factory with
	  the same name already existed it would not create a new factory.
	  This is wrong since different factories with the same name
	  are perfectly legal. It is possible for the factory to be in
	  another region for example.
	- Fixed the python plugin for the changes yesterday.
	- Added the ability to use '*' as the region name when using the
	  'regionname/objectname' syntax. i.e. you can now say:
	    MATERIAL ('*/stone')
	  This syntax forces a global search (i.e. ignoring all regions)
	  for the material 'stone' EVEN if the current loader context
	  says that only one region should be used.
	- Brendan Burns <bburns@genet.cs.umass.edu> and Peter Amstutz made
	  a memory canvas which will render to a memory buffer (and not open
	  a window). This can be useful in applications that want to save
	  a rendering to some file without having to open a window. This is
	  for the software renderer alone. Use the Screenshot() function to
	  get the image.
	- Removed 'required' from BisonFlex in msvc documentation as it is
	  no longer required.
	- Changed iTerrFuncState::LoadMaterialGroup() to use iLoaderContext
	  instead of iMaterialList. This fixes a compilation error.
	- Fixed iLoader::LoadMeshObjectFactory(char* filename) so that it
	  resets the 'ResolveOnlyRegion' to false.
	- Christopher Nelson did the following to AWS:
	    - Added new component, "Status Bar"
	    - Fixed anothe bug in the bar chart.
	    - Added component "Status Bar" to the manager.
	      Status Bar takes the following keys:
		Status: <integer between 0 and 100 (inclusive)>
		Style: <typical frame styles, sbBump. sbSimple, etc.>
		BarTexture: <a text string that is the path to the image>
		BarTextureAlpha: <an integer between 0 and 255 (inclusive)>
	    - Fixed key bug in status bar.
	    - Fixed insets in status bar to look right.
	    - Fixed command button: mouse over, bitmap issue,
	      getprefferedsize when it's a bitmap.
	    - Fixed barchart: zero barwidth issue, dies when no items.
	    - Fixed textbox: if it was too small text would be truncated
	      to zero and strlen would choke.
	    - Fixed window: if a child had a layout, but the window did not,
	      it would not function right.
	    - Added BackgroundAlpha and OverlayAlpha to window.
	    - Other fixes that I can't remember now.
	- res fixed the Windows OpenGL canvas so that the depth now contains
	  the actual instead of the wanted color depth.
	- res fixed a typo in jobber.pl ('Inovking' instead of 'Invoking').
21-Feb-2002
	- Peter Amstutz <tetron@student.umass.edu> added a patch to CS
	  to add two additional broadcast events:
	    cscmdCanvasExposed
	    cscmdCanvasHidden
	  these events are sent when the canvas becomes exposed/hidden
	  (i.e. iconify for example). Currently only the XWindow canvas
	  will actually send these!
	- Disabled default building of LUA for mingw port.
	- Added FindMaterial(), FindTexture(), FindSector(), FindCollection(),
	  FindCameraPosition(), FindMeshObject(), and FindMeshFactory()
	  to iEngine. All these functions have two parameters: the
	  name to look for and a flag which indicates if the search
	  should be restricted to current region (default false). The name
	  can take two forms: either it is a simple name of the object in
	  which case it will work as explained above, or else it uses
	  the form 'regionname/objectname'. In that case it will ignore
	  the extra flag and look for the object in the specified region.
	- The loader now uses FindMaterial() and FindTexture() from above
	  so you can now specify materials with the form 'region/matname'
	  if you want.
	- Portal loading now works differently. Previously it worked by
	  creating dummy sectors for every portal. These dummy sectors would
	  then later be resolved after the loading pass. This was a bit
	  clumsy and has been a source of bugs in the past. So I changed this
	  with a callback on the portal that is called when a sector is
	  missing. So this means that all portals are by default null-portals
	  unless it is a portal to a sector that was already defined
	  previously. The null-portal will have a callback associated with
	  it that will try to find the destination sector as soon as the
	  portal is first used. This means that worlds that have portal
	  to non-existing sectors will now work except that the portal itself
	  will not be operational (a texture will show).
	- Removed the ugly ResolvePortalSectors() function in the parser.
	  This is no longer needed with the technique above.
	- It is now possible to use the 'regionname/sectorname' notation
	  with the PORTAL command too. So you can specify portals to sectors
	  from other regions.
	- Added iLoader::ResolveCurrentRegionOnly() function to return the
	  current value of the ResolveCurrentRegion flag in the loader.
	- Removed the 'link' parameter from iEngine::CreateSector(). Since
	  this hack is no longer needed sectors are now always linked
	  to the engine as they should.
	- Matze did the following:
	    - Changed csString to handle 0ptrs correctly (a null pointer is
	      returned if a null pointer has been assigned).
	    - Changed cast operator of iString to return const char* instead
	      of char* (if you really need char* which is dangereous use
	      GetData).
	- res fixed a @ref in the next documentation.
	- res fixed description on how to make a sky brush (skybox.txi).
	- res adds support for cscmdCanvasExposed/cscmdCanvasHidden for
	  Windows.
	- res also adds cscmdCanvasExposed support to Walktest.
	- res reports that textures sizes in memory (OpenGL) were calculated
	  wrong in some cases. Also disabled mipmapping for procedural
	  textures.
	- res added support for GL_SGIS_generate_mipmap which allows
	  automagical creation of mipmaps for procedural textures.
	- Christopher Nelson fixed a dumb bug in bar chart that was making
	  display inverted.
20-Feb-2002
	- Added SetMaximumSectorVisit() and GetMaximumSectorVisit() functions
	  to iPortal. With this you can control how many times the same
	  portal can visit the same sector during one recursion level. This
	  is mainly useful for space warping portals that warp back in
	  space so that the portal can be seen from the portal itself :-)
	  By default this limit is set to 5.
	- Added MAXVISIT keyword that you can use inside a WARP() statement
	  for a polygon. This will call SetMaximumSectorVisit().
	- Added new 'entity_WavePortal' command for WalkTest. With this
	  command you can let a space warping portal 'wave' a little bit.
	  flarge contains an example of an infinite room with waving
	  portals. This is only a small illustration of what space warping
	  can do. It is not an example of nice code :-)
	  It also demonstrates a bug where the distance polygons are
	  drawing wrong for some reason.
	- Norman Kramer did the following in the glx2d canvas:
	    - Xvis, cmap and active_GLContext were not set in case the first
	      glXChooseVisual failed.
	    - Also added a test for generic RGBA+Doublebuffer+DEPTH
	      with help from Christophe Cavalaria.
	- Wyatt Miler updated libpng version that is available in
	  documentation.
19-Feb-2002
	- Toni Asco' Gonzalez implemented a faster version of DrawPolygonMesh()
	  for OpenGL. This code is still experimental but it seems to work.
	  Fog is not yet correct though. To enable this use the FASTMESH()
	  option inside the PARAMS() block of a thing mesh object.
	  The speed increase will be mostly visible on small objects with
	  a high polygon count. Don't use it on an entire level because
	  then the mesh will have to be clipped and this degrades performance
	  again.
	- Optimized the new DrawPolygonMesh() a little.
	- It is now possible to also add mesh objects to libraries.
	  Previously only mesh factory could be added. This means that you can
	  now say MESHOBJ or MESHREF from within a LIBRARY. The meaning of
	  this is a bit special. What will happen is that the mesh objects
	  are created like they would have been created inside a sector. But
	  they are not added to any sector. They are only added to the engine
	  list of meshes (engine->GetMeshes()).
	- Added a new keyword 'MESHLIB' that can be used in a sector to
	  refer to a mesh object from a library. What this will do is try
	  to find a mesh object with the given name from a previously loaded
	  library. Then it will link that mesh object to that sector.
	  Note that you can not duplicate objects this way. There is still
	  only one mesh object and after you used MESHLIB to link it to a
	  sector it is in use. Inside MESHLIB you can do everything that
	  you can do in a MESHOBJ statement. So you can specify the MOVE
	  or HARDMOVE for example. PARAMS and PLUGIN are also possible but
	  should not be used as the mesh object is already defined in
	  the library.
	  This new feature is useful for creating worlds that are made
	  from multiple libraries. For example, you can have a library for
	  every building in your world and then make one world file that
	  combines them all. This would look something like this:
	    WORLD (
	      ...
	      LIBRARY '/lib/gamedata/building1' ()
	      SECTOR 'building1Sector' (
		MESHLIB 'building1Obj' (
		  HARDMOVE (...)
		)
	      )
	      LIBRARY '/lib/gamedata/building2' ()
	      SECTOR 'building2Sector' (
		MESHLIB 'building2ObjPart1' (
		  HARDMOVE (...)
		)
		MESHLIB 'building2ObjPart2' (
		  HARDMOVE (...)
		)
	      )
	      ...
	    )
	  In this example we have two libraries for two buildings. The
	  first library contains a MESHOBJ with name 'building1Obj'.
	  The sector that is defined after that will pick up that mesh object
	  by using MESHLIB and then use HARDMOVE to position it elsewhere.
	  The second library contains two mesh objects which are then put
	  in the next sector.
	- Christopher Nelson did the following:
	    - Created new component called "Bar Chart". The bar chart
	      recognizes vertical and horizontal specifications, and it can
	      display both rolling charts and static charts.
	      (A rolling chart must be updated by your application, but the
	      component handles all the dirty work). Bar Chart has these
	      options:
		Options: bcoRolling bcoRollRight bcoRollLeft
			 bcoVertGridLines bcoHorzGridLines bcoVerticalChart
		InnerStyle: ... same as style, only for the inner frame that
			contains the bars ...
		XLegend: "Legend Name"
		YLegend: "Legend Name"
		MaxItems: 10 ... or any other reasonable integer, this is
			only used for the rolling chart ...
		Caption: "Chart Legend"
	    - Added bar chart to common components list.
	    - Added new function FindColor to preferences manager. It looks
	      for the specified RGB triplet using AWS's built-in texture
	      manager.
	    - Made some fixes to bar chart so that the vertical stuff works
	      right, and also so that the options are added in as constants.
	    - Updated test app to fill up bar chart with some sample values.
	    - Updated bar chart so that it displays a proper numerical legend
	      on the left when NOT using bcoVerticalChart.
	    - Fixed divide by zero bug. Also added new signal:
	      signalBarChartTimer which can be controlled by UpdateInterval.
	      This signal is sent every UpdateInterval milliseconds and can
	      be trapped, but ONLY if the bar chart is rolling. Otherwise the
	      signal is not mapped.
	    - Added notion of Icons that can be shown left, right, above or
	      below the text of a command button.
	      Example:
		component "East" is "Command Button"
		{
		  Caption: "East"
		  Icon: "/aws/zoom.png"
		  IconAlign: biaLeft
		}
18-Feb-2002
	- Added experimental code to allow video mode selection using
	  AWS. This does not work yet and the API is subject to change
	  so I don't recommend using this yet. Also add a 'simpvs'
	  application that uses this feature.
	- Removed dependency on AWS to libflex (for MSVC). This is not
	  required.
	- Wouter Wijngaards fixed the layout bug Patrick spotted in csmod
	  and csogg makefiles.
	- Matze fixed annotation time to be really UTC.
	- Norman reports: gridlayout is now translated into aws GridBag
	  layout (this has still some issues). Norman also added description
	  on how to use the qt2aws.xsl stylesheet.
	- res reports: fontplex now breaks loading of font servers after 2
	  consecutive failures (instead after the first failure).
16-Feb-2002
	- Philip Wyett eliminated 'no newline' warnings in some aws source
	  files.
	- Norman Kramer did the following:
	    - Modified csRectRegion::Include.
	    - This solves the flickering problem in aws.
	    - I'm sure Christopher dislikes my solution since it always splits
	      the rectangle if it partly covers the new to be included
	      rectangle, so the case where n>1 already existing rectangles
	      cover the newly to be included rectangle is ignored.
	- Philip Wyett made modification, which can be seen on cs-main.
	  changed:
	    n = ((n + threshold - 1) / threshold) * threshold;
	  to:
	    n = n + threshold - 1;
	  This bug was found by Shawn Carroll and publised to the list
	  by Patrick McFarland the creator of m4 for CS.
	- Reverted Philip's change since for integers n/a*a is not always
	  equal to n.
15-Feb-2002
	- Reverted res's change to win32gcc.mak since it breaks compile of
	  ddraw plugin. The problem is that the -lddraw library link command
	  is added after the command so it is added after the 'rm'. This is
	  obviously wrong.
	- Fixed a compile error in aws. You cannot say 'virtual Func ()'.
	  You have to specify a return type or 'void'.
	- Little code reformatting of libs/csutil/cfgmgr.cpp.
	- Reverted res's change to enginep.mak since it breaks loading
	  of the engine plugin on MingW at least.
	- res added an alternative workaround for dllwrap on MingW (but
	  not activated by default).
	- Completely reformatted the AWS source code using the GC utility.
	  Now the source of AWS finally conforms to CS coding style rules.
	- Completely reformatted the engine source code using the GC utility.
	- Completely reformatted the csgeom source code using the GC utility.
	- Fixed memory leaks in AWS related to the canvas. Changed
	  behaviour of GetCanvas() so that it no longer increases ref count
	  of returned canvas.
	- Added iConfigManager::CleanUp(). This will flush all removed
	  config files and also clean up all loaded domains.
	- Removed iConfigManager::CleanUp() again. This is not the right
	  way to do this.
	- Matt Reda fixed bug in OSX canvases. Window title never switched
	  back after being unpaused.
	- Wouter Wijngaards added a check to the new halo fading (which looks
	  good!) so that it is only done if the flare component is CS_FX_ADD.
	  Other mixmodes would be colored black, which would not be nice.
	- Jonathan Tarbox added comments on how to enable NASM for CS
	  under BeOS.
	- Christopher Nelson did the following:
	    - Renamed awslayot.cpp to awsgbl.cpp.
	    - Added BorderLayout. Should work pretty much like the Java one,
	      with the exception that it ignores "BEFORE_FIRST_LINE" and
	      similar because that has no meaning in AWS. In order to specify
	      the anchor point for children use Anchor: blNorth, blSouth,
	      blEast, blWest, and blCenter.
	    - Added BorderLayout constants to preference manager.
	    - Fixed a couple of bugs in the BorderLayout. Now functional and
	      works like the book says it should.
	    - Fixed horizontal and vertical gap in border layout. Wasn't
	      working quite right. NOW everything works just like the book
	      says it should.
	    - Updated the awstest.def definition file to include a group
	      frame in a layout WITH a layout (BorderLayout) and five kids
	      in their respective position with gap.
	    - Fixed Group Frame so that it returns insets. This lets layout
	      managers work correctly with it.
	    - Added a new flag called AWSF_CMP_INVISIBLE which means that a
	      component cannot be seen because it's too small. This keeps
	      certain errors fram happening during resizing.
	    - Fixed the two layouts to use this flag when components get too
	      small. There is still the odd refresh issue that I don't
	      understand, and there needs to be a way to lock windows into a
	      minimum frame size. If a window gets sized too small then
	      certain components will freak out. Plus, since clipping still
	      does not work correctly in most of Crystal Space's canvases,
	      something needs to be done about clipping components to a
	      specific area. I'm unsure how to proceed on that one as of
	      yet. Probably I'll wait until someone cares enough to mention
	      it, then we can have a decent discussion.
	    - Updated label to make it work right with layouts.
	- Norman Kramer added the missing AWSF_CMP_INVISIBLE flag.
	- Matt Reda fixed a copy-and-paste error he made last night.
14-Feb-2002
	- Fixed new gridbag constraints in AWS so that it is an enum
	  (static const int is not legal in C++) and also renamed
	  the constants so that they start with GBS_... Several of the
	  constants were defined in windows include files (i.e. RELATIVE
	  in wingdi.h).
	- Fixed another bug in AWS. The 'layout' field in iAwsComponent
	  was not initialized which means it might crash depending
	  on 'luck'.
	- Eric Sunshine removed the outdated and broken classic Macintosh port,
	  as well as the incomplete and unsupported PS2 port.
	- Philip Wyett eliminated a warning with MSVC and starldr.cpp.
	- Christopher Nelson did the following:
	    - Fixed some ugly bugs in awsGridBagLayout.
	    - Added constants in for GridBagConstraints (gbcCenter,
	      gbcWeightX, etc.)
	    - Enabled layouts in the window manager.
	    - Modified windows to resize using the layout if its there,
	      otherwise revert to old behavior.
	    - There are still some odd problems with layout-enabled windows.
	      I'm not entirely sure why, but they seem to have some bizarre
	      redraw problems that cause blinking during refresh. I don't
	      think that this is related to recalculating the layout, because
	      layouts are only refreshed during a resize and when a window is
	      created.
	    - GridBagLayout has a bug which may be related to that, but I'm
	      unsure. As it is, layouts work, although GridBagLayout is the
	      only one that exists and it doesn't behave quite right.
	    - Fixed the GridBagLayout bug. Assigning ymax to xmax is not
	      good :-)
	    - Fixed yet another dumb bug related to layouts. They weren't
	      getting the right settings node, so they weren't finding any
	      settings!
	    - Finally fixed all of the layout bugs. The strange refresh
	      problem still exists, trying to discover what that issue is
	      all about.
	    - Updated test app to use layouts.
	    - Fixed the zoom bug for windows and layouts. Only need to adjust
	      by inset, since layouts automatically assume zero space.
	    - Fixed additional bugs related to ScrollBar and ListBox because
	      of layouts.
	    - Slight re-adjustment of space for scrollbar so it doesn't
	      overlap.
	- res added ugly workaround to mingw dllwrap bug (functions with
	  _declspec(dllexport) are not auto-exported from libraries).
	- res modified lens flares so that they fade away.
	- Norman Kramer added inclusion of unistd.h to cssysdef.h. Somehow
	  recent changes broke compilation of socket plugin.
	- Norman did some changes to qt2aws.xsl: pretty indenting. Top level
	  widget is no longer handled in /UI but in a widget matching template.
13-Feb-2002
	- Added new tutorial app in apps/tutorial/awstut. This is a small
	  AWS using application that demonstrates how to open and use
	  one simple window. So it is easier to follow than awstest.
	- Added /tmp mount path to vfs (vfs.cfg) which should point to the
	  system dependent location of a temporary directory. This works
	  for unix and windows now. On windows it will first try
	  $(TEMP), if that doesn't exist it will try $(TMP). Otherwise it
	  will use the temp dir in the Windows directory.
	- Added fflush (stdout) to vshell so that it works on mingw correctly.
	- Matze changed map2cs to support angle in info_player_start.
	- Matze removed hugeroom from walktest and cleaned small other things.
	- Matze changed walktest to load camera position AND direction at
	  startup.
	- Matze eleminated angle vector in walktest which fixes the walking
	  through space warping portal bug.
	- Fixed several cases in AWS where SCF implementations were not
	  calling SCF_CONSTRUCT_IBASE() from the constructor. This is BAD.
	- Fixed a memory leak in aws on the font server.
	- Philip Wyett did a hack to allow compilation of linex2d. This needs
	  to be looked at in relation to recent changes with FreeType and
	  others.
	- Matt Reda added a flag that controls whether the runloop continues
	  processing events when the window loses focus (the default is NO)
	  on NeXT-derived platforms. This behavior can be toggled from a
	  config file (System.RunWhenNotFocused) and command line
	  (--alwaysruns).
	- Matt Reda fixed the next2d canvas so that it doesn't display
	  [Paused] in the title bar if the run loop is set to never pause.
	- res added missing $/ at the end of VFS.Win32.TTF_PATH. Changed
	  / to $/ in VFS.CP/M.TMP.
	- Norman Kramer removed the GetDimensions() version Philip added
	  since it is not needed (fontserv.h).
	- Christopher Nelson did the following:
	    - Fixed bug which causes awstxtbx.cpp to crash when setting a
	      string that is shorter than the previous string, and when start
	      and cursor are greater than the length, especially in the
	      case of the notorius empty string.
	    - Added getPreferredSize and getMininumSize to support layouts.
	    - Added design change fixing sill SetProperty behaviour.
	    - Update to resolve empty string issue, while keeping memory
	      consumption minimal. If a user attempts to set a caption to an
	      empty string, the SetProperty method detects it and instead sets
	      the caption to a NULL string. It does not keep track of the
	      empty string, which will most likely go away as soon as the
	      user DecRef's it.
	    - Added the awsGridBagLayout class which supports the Java
	      AWT/Swing GridBaglayout exactly as the definition lists.
	    - Added the beginnings of an awsBorderLayout.
	    - Added the base class for all layouts.
	- Philip Wyett fixed unknown M_PI and unitialized angle.
	- Norman Kramer did the following (AWS):
	    - For scrollbars Min, Max, Value and PageSize are now recognized
	      in the .def file.
	    - For scrollbars changed name "Style" to "Orientation" and valid
	      values from fsHorizontal to sboHorizontal and fsVertical to
	      sboVertical.
	    - Added recognition of QSlider which maps to awsScrollbar.
	    - Now also for QWidget some code is generated.
	    - Added the missing translation from QLineEdit to Text Box.
	    - If caption is empty then the whole caption entry is omitted.
	- Matt Reda reports: A constant is declared/defined as "RELATIVE_"
	  but used as "RELATIVE" - changed to declare/define "RELATIVE" so
	  code compiles (aws).
12-Feb-2002
	- Matt Reda moved the event-handling code in the OSX canvases
	  from the delegate to a new NSView-derived class.  The old code
	  wasn't detecting right button clicks for some odd reason, but
	  it works now.	 Events are passed back through the delegate.
	- Matt Reda updated the OSX canvases so that when entering/exiting
	  fullscreen mode, both canvases now fade in/out.
	- Fixed iLoader::LoadLibraryFile() so that it now reports an error
	  when the engine cannot be found.
	- Discovered that iEngine::LoadMeshFactory() and LoadMeshWrapper()
	  don't actually need the classId parameter. They only need the
	  loaderClassId parameter. So I removed that parameter.
	- Added new 'PARAMSFILE' keyword to the loader for mesh factories
	  and objects. This is similar to 'PARAMS' except that the
	  parameters are read from the given file.
	- Added support for HARDMOVE for mesh factories (in loader).
	- Loader will now check if HARDMOVE is allowed for the given mesh
	  object or factory. If not an error is given.
	- The csdemo app now loads materials and factories from a library
	  instead of hardcoding this in the code. This makes it a little
	  bit more general (but still not general enough).
	- Added loader plugin for loading mesh objects of type 'stars'.
	- Generalized csdemo a bit more. It now loads a file called 'world'
	  in demodata.zip which setups the sector and all objects.
	- Norman Kramer added indentation to the output of qt2aws.xsl. Also
	  QListBox and QListView are now recognized. QListBox will map to
	  an AWS listbox with Type ctList and a single column with generic
	  header "Column0".
	- Norman added recognition of QFrame which maps to an awsGroupFrame.
11-Feb-2002
	- Added csMath3::SpherePosition() which calculates the position
	  on a unit sphere given two angles.
	- Matt Reda fixed a bug in the explosion plugin which would cause
	  the dynamic light that is created by it not to be deleted at
	  destruction time.
	- Philip Wyett did a quick hack to make freefont 1 plugin compile
	  while in transition.
	- Wouter added from Rene Dudfield:
	  A preprocessor for header files to be used for swig. See README
	  for more details including a TODO.
	- Wouter Wijngaards added command line options for swig to make
	  doc strings for the python wrapper.
	- Norman Kramer added fsNone style for frames and extended the
	  controls already using frame styles with fsNone (and fsFlat that
	  was missing in some cases). Also added frame styles and image view.
10-Feb-2002
	- Philip Wyett updated freefont 2 plugin makefile for successful
	  compilation with MSVC. Also updated msvc_libs adding FreeType 2.0.8.
	  Note: This version of FreeType2 is a mod version from the official
	  Freetype 2.0.8 distro. This is due to the poor quality of MSVC
	  project file maintenance where the output filename does not match
	  the distro release number (2.0.6 is outputted and not 2.0.8 as it
	  should be. Fixed by me).
	  Also the Freetype project uses an absolutley stupid method for
	  #include which MSVC really does not like. In certain circumstances I
	  have worked around this in the Free Font 2 MSVC project file and
	  in some cases by hardcoded includes.
	- Norman Kramer did the following:
	    - Added notion of baseline (which happen to be 1 for all the
	      standard fixed fonts :)
	    - This makes csfont prepared for using with WriteBaseline.
	    - Note I leave the xfont thing in linex2d untouched since it only
	      uses a single hardcoded font (or maybe this should be made a
	      more general fontserver and placed in plugins/font ?)
	    - Added warning about using freefont/freetype1 in a commercial
	      product.
	    - Added first version of an extensible stylesheet to transform
	      QT designers .ui files to aws .def files.
9-Feb-2002
	- Norman Kramer did the following:
	    - Added WriteBaseline () to iGraphics2D. This will come in handy
	      for writing with differently sized fonts having all letters on
	      a baseline.
	    - Currently only freefont2 is prepared for being used with
	      WriteBaseline (and with the old Write), gonna prepare the others
	      tomorrow.
	    - Added new versions of GetGlyphSize, GetGlyphBitmap and
	      GetDimension to the iFont interface which return information
	      about offsets of the glyphbitmaps upper left point to a
	      penposition (which sits on the baseline).
	    - Changed major version of iFont to 2.
	    - Extended csfont and the xfont (in linex).
	    - Extended protex iGraph2d in the opengl renderer with
	      WriteBaseline.
	    - Added dummies for the new iFont interface (to freefont plugin).
8-Feb-2002
	- Matt Reda added support for displaying on any monitor on OSX
	  systems with more than one monitor.  Also added small
	  performance improvement to the OSX software canvas.
	- Matt Reda changed the pixel formats used by the base OpenGL canvas
	  to correspond to the pixel formats used by the software renderer.
	- Matt updated the OSX canvases to support being placed on a specific
	  screen for machines with more than one monitor/videocard. This can
	  be controlled with the "--screen" command line switch or
	  "Video.ScreenNumber" in video.cfg.
	  This is untested as I only have one monitor
	- Matze fixed a bug in csHashIterator - it was returning already
	  deleted elements in some special cases.
	- Philip Wyett did the following:
	    - Fixed bug described by Paul Berg "-fs under 16bpp" on CS Main
	      Mailing list (ddraw canvas).
	    - Also took the opportunity to restructure HDC to use member
	      variable rather than having many local versions.
	- Christopher Nelson added the proper stuff to AWS for fsBitmap style
	  windows. This code is tested and works fine. Note that if you specify
	  a window as fsBitmap, it currently does not try to be an engine
	  view. That's pretty easy to fix though.
	- Christopher fixed it so that Bitmap windows draw an engine view if
	  they are engine windows. This can let you make neat looking engine
	  views: there is a background bitmap, then the engine is drawn over
	  that, then there is an overlay bitmap.
7-Feb-2002
	- Christopher Nelson reports that the bigterrain mesh object now
	  compiles with no errors. But it still doesn't work.
	- Christian Bayle added the directory CS/scripts/debian.
6-Feb-2002
	- Matt Reda fixed a bug in the OpenGL renderer which caused
	  fades (F5 in walktest and fade effect in csdemo) not to work
	  correctly anymore.
	- Fixed a bug in iRenderView::TestBSphere(). This bug was fixed
	  some time ago in iRenderView::ClipBSphere() but I forgot
	  to fix TestBSphere() too.
	- Fixed a bug which affected visibility testing of objects in a
	  sector using octree which was seen through a mirror. The
	  mirror caused culling to be wrong. This means that mirrors now
	  work properly if included with the culler object (i.e. the object
	  using VISTREE() setting).
	- Fixed a stupid bug in the engine which prevented Blocks from
	  working properly.
	- When traversing a portal that is located in a sector using
	  c-buffer visibility culling then we have to clear the c-buffer
	  for the area of the portal. This used to be done in the portal
	  class but the problem is that we do it all the time then even
	  if the sector doesn't use c-buffer (i.e. we do it as soon as
	  the c-buffer is used globally). I moved this code to the polygon
	  drawer because then we can do it only when it is really needed.
	- Philip Wyett removed Squawk and all associated files.
	- res changed some settings for freetype2 plugin.
	- res swapped some pixel layouts in csOpenGLProcSoftware::Prepare().
	  Software renderer proctexes seem to work now (at least for me).
5-Feb-2002
	- Matt Reda update Next makefile to support new method of locating
	  CS installation. OpenStep and MacOS X versions no longer use
	  $CRYSTAL environment variable to locate CS installation directory.
	  It now uses the 'defaults' database value CrystalSpaceRoot
	- Matt fixed OSX so that if it does not find CrystalSpaceRoot in the
	  defaults, it will check the CRYSTAL environment variable.
	- res did a few small fixes to OpenGL renderer.
	- Norman Kramer added a font server plugin for the FreeType2 engine.
	  It is not yet enabled by default (edit mk/user.mak).
4-Feb-2002
	- Matt Reda fixed leaking ball mesh factory in demosky2.
	- Matt also reports: In csProcSky::GetSkyBlue(), started by fixing
	  some of the typecasts to int then switched to storing intermediate
	  values as floats and rounding the final value. This should give
	  more accurate result than the old method, which truncated the
	  calculated value to an int after every calculation.
	- Norman Kramer did the following:
	    - Made the cursor in the AWS textbox to blink.
	    - Ok, since christopher didn't reply to my mail I go ahead and
	      change the mousehandling for the captured mouse case the way I
	      think it should be. I only let the capturing component work the
	      event since no other component should be able to do it (that was
	      the reason the component captured the mouse in the first
	      place) - this solves the magic following of the scrollbar knob.
	    - Awstimer now only hooks itself onto the eventqueue when its
	      Start()'ed and removes itself if Stop()'ed. Otherwise the amount
	      of timers idling in the eventqueue can easily add up.
	    - Fixed dragging knob which sometimes didn't get to the min/max
	      value.
	- res did the following:
	    - Software proctex renderer works again (but flawed).
	    - Backbuffer proctex renderer works again (but flawed).
	- Christopher Nelson added the beginning of implementation for the
	  bigterrain mesh object.
3-Feb-2002
	- Philip Wyett eliminated more truncation and conversion between
	  types warnings under MSVC. Note: MSVC does not like float values
	  being expressed as '.0' or '0.' and always likes you to
	  use a trailing 'f' if you are allocating a value to the float type.
	- Philip also moved some code to user qsqrt() instead of sqrt()
	  where appropriate.
	- Philip fixed performance warning (forcing int to bool).
	- Philip fixed qsqrt() for MSVC adding a COMP_VC specific portion
	  and eliminating all the double to float conversion warnings the
	  old code generated.
	- Began fixing inconsistencies of float and double in physics library.
	- Matze fixed a 'no newline at end of file' warning (mmapio.h).
	- Norman Kramer made the following changes to AWS:
	    - Made the properties in awsCmdButton protected (instead of
	      private) so the new awsSliderButton can access them (well I
	      could have add accessor methods but I prefer it that way - feel
	      free to change it).
	    - Added a new descendend of awsCmdButton, the awsSliderButton
	      which fires signals every n Ticks which can be configured via
	      SetProperty.
	    - awsScrollBar class now uses awsSliderButton controls for the
	      dec/inc handle and the knob - which mean you can keep them
	      pressed (and the knob can be moved around) and they'll send
	      out signalChanged signals. Also the area where the knob moves
	      reacts to button pressed events now.
2-Feb-2002
	- Toxe fixed a brand new bug in csMeshWrapper::HitBeam().
	- Philip Wyett eliminated ATOM to bool warning while registering
	  class (win32.cpp). Net method leaves no need for assertion on
	  bResult, this this has been removed.
	- Philip fixed several files to stop MSVC complaining about
	  assignment inside evaluation expression and maintained execution
	  order.
	- Philip fixed a few truncations from double to float (mainly in
	  csgeom and csengine).
	- Norman Kramer set the initial value of 'stopped' to true (for
	  awstimer), so that after first call to SetTimer() you must
	  call Start() to get going.
	- Wouter Wijngaards reports: the haze.h include file was using
	  CS_SPRITE2D as the header #define. Changed it so the two no longer
	  conflict.
	- Philip fixed class access violation under MSVC 6 (bitary2d.h).
1-Feb-2002
	- Tobias Brueckner (Toxe) fixed a bug in the OpenGL 3D renderer that
	  caused it to crash when rendering materials that only had an
	  assigned flat color and no texture.
31-Jan-2002
	- Fixed a long-standing annoyance in WalkTest. WalkTest was able
	  to load levels in the following cases:
	    - If the level was mounted in vfs.cfg you would just say
	      walktest mounted_name
	    - If the level was not mounted but it was either in the current
	      directory, the data directory or the data directory of the
	      parent, WalkTest would automatically mount it. However you
	      could not use the '.zip' extension then.
	  I extended the last feature so that you can now also use the
	  full filename with extension. If WalkTest finds there is already
	  an extension included it will not try to add its own extension.
	  In addition you can now give a full pathname so walktest can load
	  levels from everywhere without requiring a mount in vfs.cfg.
	- Wouter Wijngaards modified the "Queen of all CS includes" (css.h)
	  to now include everything in CS that an app can use. (Not platform
	  specific stuff). Using #defines some parts can be left out if
	  desired.  Note this file should only be used by projects external
	  to CS.
	- Philip Wyett fixed forward declaration errors and variable
	  redefinition errors in the MSVC port.
	- Philip eliminated a couple of unitialized variable warnings.
	  One is a very MSVC specific complaint.
	- Philip removed various other warnings (MSVC specific).
	- Philip eliminated the assignments within conditional expression
	  warnings under MSVC and also cleaned up some code.
30-Jan-2002
	- Added iEngine::FindLight().
	- Improved comment with iCamera::GetHit().
	- Further work on tree loader. Still not completely functional.
	- Christopher Nelson added alpha version of the large terrain
	  renderer's implementation to the mesh directory. Currently it's just
	  the simple header file that contains all the implementation code.
	  I still have to connect it to the genmesh plugin somehow and do some
	  tests on it. Also, it has no provision for texturing at the moment.
29-Jan-2002
	- Jorge Acereda changed the MD2 importer so that it recognizes
	  sprite actions. Also, scaling and axis conventions are now
	  coherent with mdl2spr. I hope nobody was using it :-)
	- Jorge also fixed frame timing.
	- Some further experiments with tree generation. Unfinished.
	- Further work on tree. At this moment it doesn't even resemble
	  a tree :-) I'm still debugging. Added texture mapping.
	- Matze added a null canvas for the null 3d renderer, this makes it
	  possible to use CS on dedicated servers that can't display
	  anything.
	- Matze fixed destruction (memory leak) of null 3d renderer.
28-Jan-2002
	- Separated geometry and rule in the tree generator. This will make
	  it easier to setup better rules.
	- Matze changed annotation to include a link to the page in the e-mail
	  and mangles e-mail adress.
	- Matze finally fixed all issues with sky in map2cs (well it works
	  although it could be improved a bit).
	- Matze fixed a sky issue in map2cs.
	- Christopher Nelson did the following:
	    - Added new function: AllWindowsHidden(), which returns true if
	      all windows in the system are currently hidden.
	    - Added new parameter for CaptureMouse which lets you specify the
	      component that wishes to capture the mouse. Note that only this
	      component or it's children will recieve messages until release
	      is called.
	    - Fixed previously broken functionality where moving from a
	      component to the window wouldn't send out MouseEnter/Exit
	      messages. There was a slight bug in awsTextBox that was
	      breaking this. For future note:  if you want to get focus
	      messages and keep them, you must override all the mouse events
	      to return true. Otherwise the window will take back the focus
	      because it assumes that the component has not handled and does
	      not want focus.
	- Philip Wyett added AUTHORS and COPYING to .cvsignore.
27-Jan-2002
	- Norman Kramer added GetObjectRegistry() to iAws interface. Components
	  didn't have a chance to get their hands on the registry otherwise.
	- Norman also added a timer class to AWS to give pulses for cases no
	  new event is generated but actions should happen (think: keeping the
	  mouse pressed on a scrollbar button).
26-Jan-2002
	- Matze fixed skybox generation in map2cs
	- Added missing initialization of do_manual_colors to genmesh
	  object. This could cause wrong colors in some cases.
25-Jan-2002
	- Added a new GenerateBox() to iGeneralFactoryState. With this you
	  can automatically generate a box for a general mesh.
	- Extended the standard general mesh loader with a new BOX keyword
	  (for factories).
	- Added Get/SetMaterialWrapper() to iGeneralFactoryState. It is now
	  possible to set a material for the factory. When the mesh object
	  itself will not have a material it will use the one from the
	  factory.
	- Added MATERIAL keyword for the general mesh loader (for factories).
	- Completely removed the cube mesh object plugin and also its
	  associated loader. The functionality provided in the cube plugin
	  can be emulated completely with the genmesh plugin.
	  Keep in mind to call CalculateNormals() or use AUTONORMALS()
	  for genmesh so that the normals are calculated automatically.
	- Completely removed the surface mesh object plugin and also its
	  associated loader. Use genmesh.
	- Improved shape of the tree.
	- Eric Sunshine fixed campos.cpp so that it compiles on NextStep.
	- Eric Sunshine eliminated a compiler warning from rview.cpp.
	- Eric Sunshine eliminated compiler warnings from walkcmd.cpp.
	- Eric Sunshine fixed gtreeldr.cpp so that it now compiles on NextStep.
	- Eric Sunshine fixed a problem where both the engine and the Thing
	  mesh plugin were publishing the crystalspace.mesh.object.thing class,
	  which caused linking errors when attempting to load the plugin.
	- Matze hacked map2cs, because it had a problem: It was using CS
	  config files without loading vfs plugins etc...
	  This hack doesn't use vfs files anymore now, but reads CRYSTAL var
	  itself and composes $CRYSTAL/data/config/map2cs.cfg as config
	  path...
	- Matze fixed map2cs skybox export by addiong MOVEABLE() to PARAMS
	  section, still the texture mapping seems incorrect
	- Brandon Ehle did various doc fixes with hbox and item bugs.
	- res split the Windows Help files into two projects: docs and api.
	  Also added a script to create pretty TOCs/indices.
	- Christopher Nelson did the following:
	    - Made the system specializations more friendly. Now they exist
	      inside of the csosdef.h file for each platform. In order for an
	      implementation file to see them they should define
	      CS_SYSDEF_PROVIDE_HARDWARE_MMIO before the cssysdef.h include.
	      This will provide a structure called mmioInfo, and two
		functions: MemoryMapFile and UnMemoryMapFile.
	      These are platform dependent. mmioINfo is semi-opaque, meaning
	      that data and file_size members should ALWAYS be defined as they
	      are. It may contain as much additional information as the
	      platform requires.
	    - Modified the software demand pager so that it conforms to the
	      same template as the hardware one. Removed all the system
	      defines from the mmapio.h and mmapio.cpp files.
	    - Moved a couple more items around, moved all software portions
	      so that they won't be generated for hardware compiles.
	    - Moved the includes specific for mmap into the #ifdef so that
	      they'll only be included for modules that want them.
	    - Added definitions for the Mac.
	    - Made the inline function really inline.
	    - Fixed some silly bugs in the software demand pager: lack of
	      initializations, inverse check error, bad bit-field length
	      calculation, bad checks.
	    - Made a couple of fixes, and added hits and misses to the
	      software cache set so that you can tweak it.
	    - Killed the mods out of the classic Mac port.
	    - Added the mods into the next port, since that also works with
	      OS X stuff.
	    - Update, fixed a couple of dumb bugs: cache size was not
	      initialized before trying to allocate memory of
	      block_size * cache_block_size, so it was attempting allcoate
	      way too much RAM.
	    - Fixed Windows hardware memory-mapped I/O code. I was under the
	      impression that I should use one function when, in reality, I
	      needed to use another. Instead of simply using OpenFileMapping,
	      you must CreateFile(), then CreateMapping(), then
	      MapViewOfFile().  This code has been tested and works.
24-Jan-2002
	- Jorge Acereda relaxed a limit in 3ds2lev that made it crash
	  with scenes with more than 100 textures.
	- Made general mesh factory a bit safer so that you can now
	  safely set the number of triangles after initializing the
	  vertices. Previously setting another number of triangles
	  would clear whatever was set in the vertex arrays before that.
	- Added experimental tree generator. This is basically an alternative
	  loader for the new genmesh mesh object. Instead of creating a
	  genmesh the usual way it will generate a tree instead. At this
	  moment this code is very experimental and not meant to be used.
	- Brandon Ehle added cal3d to CS tutorial.
	- Christopher Nelson did the following:
	    - Added headers for the new memory-mapped I/O stuff.
	      Note that it looks for some bogus defines. The only one I'm
	      pretty sure of right now is the WIN32 define.
	      Note also, that there currently is no _HAS_MEMORY_MAPPED_IO_ in
	      the build, so that code will never compile, which means that
	      right now everything falls back to software. The hardware code
	      is in place, but I don't know if it will even compile because
	      I haven't tested it yet.
	      The mmio.cpp file compiles under MSVC, but I haven't tested it
	      under any other platforms.
	      Hopefully it doesn't cause any serious problems!	Note that the
	      code isn't quite complete yet.
	    - Added the implementation for memory mapped i/o.
	    - Filled in demand paging section for reading the cache. Uses
		1. Old, inactive blocks.
		2. New block if we have space.
		3. Least-used block in bucket.
	    - Finished software demand pager.
	    - Removed inactive blocks list since it was unused.
	    - Simplified the cache system slightly, which removed one
	      additional indirection. This should result in a slightly faster
	      implementation.
	    - Modified the code slightly to include LookupIndex right inside
	      GetPointer. This will probably increase it's chances of being
	      inlined, and remove an additional function setup/teardown even
	      if it doesn't.
23-Jan-2002
	- Jorge Acereda fixed LoadCamera() (crashed if the sector
	  wasn't found). Rewrote it to be more robust and coherent
	  (either loads all parameters or none).
	- Renamed all BOX_ constants in box.h to CS_BOX_. This includes
	  BOX_CORNER_..., BOX_EDGE_..., and BOX_SIDE_...
	- Renamed POL_FRONT, POL_BACK, POL_SAME_PLANE, and POL_SPLIT_NEEDED
	  so that they also start with CS_.
	- Renamed DECLARE_TYPED_QUEUE to CS_DECLARE_TYPED_QUEUE.
	- Created a new general mesh object. This is simply a static mesh
	  rendered with DrawTriangleMesh(). It doesn't support animation
	  except that you can directly alter the vertices in the mesh
	  if you want. For static objects that don't require any special
	  features like animation or such this is a good alternative to
	  3D sprites. The factory of this object contains the geometry
	  so it is very efficient to make multiple instances of this object
	  (just like 3D sprites).
	- Added a loader for the new general mesh objects. Added an example
	  to flarge so you can see how it works.
	- Added the ability to automatically generate normals for
	  the general mesh object.
22-Jan-2002
	- Created a crystal-docs mailing list. The doc annotation script
	  will now send mail to that mailing list.
	- Jonathan Tarbox updated the BeOS port so that it works again.
	- Matze fixed quoted slashes and makes e-mail unreadable for search
	  engines (avoid spammers) (for annotation).
	- Matze also added IP and user agent logging in the XML files.
	  Format of time has been modified.
	- Matze added a comment about circular list in doxygen comment
	  of csdllist.h.
21-Jan-2002
	- Tobias Brueckner suggested a fix for OpenGL with materials
	  that have no associated texture. The fix was incomplete
	  so I tried to complete it. At this moment the OpenGL renderer
	  no longer crashes but the color is still not used. Have
	  to investigate further.
	- Fixed a bug in the engine which caused crashes if a material
	  was defined without a texture.
	- Fixed the OpenGL renderer so that it now properly combines
	  the color defined in the mesh with the color specified in the
	  material (for materials which have no texture). This way it
	  behaves like the software renderer. Note that this is only
	  for DrawTriangleMesh for now.
	- Reformatted some new code in genmaze a little bit.
	- Fixed a bug in the engine in relation with materials without texture
	  in combination with mixmode settings different from CS_FX_COPY.
	- Eric Sunshine fixed spoofdir.php so that it now correctly interprets
	  PHP files within the virtual directories, rather than sending those
	  files back to the client's browser as raw text.
	- Eric Sunshine upgraded jobber.pl so that it can now run an optional
	  post-processing step on files generated for online browsing.	In
	  particular, it now runs a script which sets up the User's Manual and
	  the API reference to accept user-annotation.
	- Made csPortal::SetFilter() safer.
	- FINALLY fixed CAMERA objects for real. CAMERA objects will now
	  at last mirror correctly :-)
	  I fixed the problem by moving the object instead of the camera.
	  This is actually more logical and a lot easier. No more
	  transformation magic.
	- Eric Sunshine augmented spoofdir.php so that it now sends all global
	  variables to PHP files requested by the client; ensures that all
	  elements of the URI query-string are made available to the requested
	  PHP script; and ensures that $PHP_SELF is correctly set for the
	  requested script.  These modifications should now allow PHP scripts
	  requested via spoofdir to operate normally.
	- Eric Sunshine fixed the HTML tables which were being constructed by
	  CS/docs/support/annotate/annotate.php to display the annotations.
	  They were totally bonked; were not closed with </table>, and in some
	  cases, the rows were not introduced with <tr>.  Also fixed the colors
	  so that the text can be read.	 Finally, made some formatting
	  improvements.
	- Eric Sunshine augmented annotate.php so that it now stores and
	  displays the date/time of annotations.
	- Matze did the following:
	    - Made output of annotate.php a little bit nicer.
	    - Removed the unneeded "click here to view your new entry".
	- Philip Wyett updated 3ds2lev.mak to add new msvc_libs info and
	  links. Also for msvc documentation.
20-Jan-2002
	- Tobias Brueckner did the following:
	    - Fixed a potential initialization bug in the GLX OpenGL
	      canvas (for Unix).
	    - Fixed a crash bug in the terrain mesh object when
	      BLOCKS(4,4) and GRID(4,4) was used (same values).
	- Matze added iSector::GetName().
	- Removed iSector::GetName() again after Matze added this.
	  Please use sector->QueryObject()->GetName().
	- Philip Wyett added initial documentation for successfully building
	  Crystal Space with Visual C++ .NET (MSVC 7) due to be released to
	  the public on the 13th, Febuary. The docs include a link to the new
	  msvc7_libs which is solely for users of MSVC 7.
	- Matt Reda did the following:
	    - Fixed memory leak and small error where simplept was reporting
	      itself as simple1.
	    - Moved pixel format #defines (CS_24BIT_PIXEL_LAYOUT) out of
	      pixtype.inc and into their own header (pixfmt.h). This was
	      necessary because the constants are also needed in the OpenGL
	      renderer (for procedural textures).
	    - Modified OpenGL proctexes to use the same framebuffer order
	      constants (CS_24BIT_PIXEL_LAYOUT) as the software renderer.
	    - Added new file to define CS_24BIT_PIXEL_LAYOUT for platforms
	      that do not explicitly define it. The values are assigned based
	      on endianness in order to maintain the old behavior.
	    - Changed CFLAGS.SOFT3D.PIXEL_LAYOUT to CFLAGS.PIXEL_LAYOUT since
	      these flags are now also used for the OpenGL renderer.
19-Jan-2002
	- Richard Uren made the following changes to isotest app:
	    - The code that was in isotest.cpp which looped through each
	      (x,y) pair was cleaned up and moved to
	      csGenMaze::ActualSolid.  csGenMaze::ActualSolid(x,y) returns
	      true if a cell is solid or false if it is empty - makes it
	      simple to render a maze.
	    - It adds csGenMaze::PrintMaze() which prints a random maze in
	      ascii. Maze debug code removed from isotest.cpp
	    - It adds csGenMaze::ActualWidth() & csGenMaze::ActualHeight()
	      which both return either the width or height of the maze
	      with walls taken into account.
	    - AddWall() in isotest.cpp had a few fixes to render walls
	      correctly.
	- Diablo-D3 (unknown@panax.com) rewrote the autoconf macro from
	  scratch. The code is now cleaner, has more standard naming and
	  can even check for a minimum CS version number.
18-Jan-2002
	- Greatly enhanced and clarified the comments for the
	  csTransform, csReversibleTransform, and csOrthoTransform classes
	  in the reference manual.
	- Enhanced the reference manual documentation for csPlane3.
	- Changed the default behaviour of csPlane3::ClipPolygon(). It will
	  now by default clip the polygon on the negative side of the plane
	  (as opposed to positive before). You can still get the old behaviour
	  back by using reversed=true as the third parameter.
	- Added a static version of csPoly3D::Classify().
	- Changed the far-plane handling code to use Classify() instead
	  of ClipPolygon(). This means that polygons will no longer be
	  clipped to the far plane (which is inefficient anyway) but only
	  rejected/accepted. If a polygon is fully behind the far plane
	  it will be rejected.
	- Added SetFarPlane(), ClearFarPlane() and GetFarPlane() to
	  iCameraPosition. With this you can set the far plane for cameras
	  initialized from the camera position.
	- Added FARPLANE(a,b,c,d) keyword while parsing START() block in map
	  files. With this keyword you can now set the far plane in a
	  map file.
	- Removed the old csBeing references in walktest.
	- Reformatted crysbal.cpp a bit.
	- Updated apimod94.txi.
	- Slight code cleanup: removed all trailing spaces and tabs from
	  all lines in all source and make files throughout the entire project.
	  Note that this will most likely not result in a significant
	  FPS increase :-)
	- Matze added a first version of the annotated user manual hack.
	- Matze fixed GNUC_PRINTF in reporter.h.
	- res fixed a single-line comment containing line-continuation
	  character.
17-Jan-2002
	- Jorge Acereda made the following changes:
	    - Added a comment to iGraphics2D::Write() to document the
	      fact that a negative background color will not draw
	      background.
	    - Fixed a bug in the MDL/MD2 converter. Short values where
	      incorrectly promoted to int when calling convert_endian().
	    - Changed some type definitions on things intended to be
	      saved to disk to make them 64bit-friendly.
	- Removed the iCamera::SetUnmirroredCameraPos() function again
	  (and fixed iso engine for this). This turned out not to be the good
	  way to solve the bug of mirroring CS_ENTITY_CAMERA objects.
	- Added iRenderView::GetOriginalCamera(). This will return the original
	  camera before any space warping transformation occured.
	- Using the above new function it is now possible to correctly
	  render mesh objects with the CS_ENTITY_CAMERA flag set even through
	  space warping portals.
	- Matt Reda uncommented a DecRef() in CreateMipmaps() that was leaking
	  an iImage.
	- Philip Wyett removed a #warning for a comment (isoview.h) as it is
	  causing a fatal error in MSVC port.
	- Philip also reverted the change of res's yesterday as it was
	  forcing fullscreen by default. Later Philip re-implemented the code
	  with one fix and a minor alteration.
	- Philip fixed a typo in the msvc documentation pointed out by RobEG.
16-Jan-2002
	- Matt Reda fixed a memory leak in csIsoEngine::CreateMeshFactory().
	- Fixed a bug in iRenderView::ClipBSphere() in combination
	  with mirroring and a portal that clips geometry.
	- I discovered that there is a bug when a CAMERA object
	  (CS_ENTITY_CAMERA keyword, like a sky-box or sky-dome) is
	  mirrored. The position will then not be correct in the
	  mirror. To try to solve this bug I extended the iCamera
	  interface with SetUnmirroredCameraPos(). At this moment
	  the bug is still not fixed though.
	- Switched ball plugin to use ClipBSphere instead of ClipBBox.
	- Implemented slightly better edge drawing capabilities in
	  OpenGL renderer. This time the real edges of the triangles
	  are shown instead of what the OpenGL renderer will render
	  with glDrawElements. This is only for DrawTriangleMesh() at
	  the moment.
	- Philip Wyett fixed some msvc docs. Fixes pointed out by Wyatt Miler.
	- Andrew Zabolotny did an attempt to fix qsqrt() for gcc 3.0.3 and
	  later. If it causes qsqrt() to not work with gcc 2.95.2 and earlier,
	  it should be reverted back (although I don't believe the changes
	  will break it with earlier compilers).
	- Jorge Acereda did the following:
	    - Fixed a bug in the MDL/MD2 converter. Short values where
	      incorrectly promoted to int when calling convert_endian().
	    - Changed some type definitions on things intended to be saved
	      to disk to make them 64bit-friendly.
	    - Fixed building of iso engine after a few new methods were
	      added to iCamera.
	- res fixed some window/fullscreen and palette issues in the ddraw
	  canvas.
15-Jan-2002
	- Changed iIsoEngine::CreateMeshFactory() to return
	  iMeshFactoryWrapper instead of iMeshObjectFactory.
	  It also no longer does an incref on the returned factory if
	  the factory already existed.
	- Added iEngine::SetClearZBuf() and GetClearZBuf(). With these
	  functions you can let GetBeginDrawFlags() return that the Z-buffer
	  has to be cleared every frame.
	- Added a new SETTINGS section in the map loader. This block will
	  be used to contain level specific settings for the engine and
	  other plugins. At this moment this block can only contain the
	  CLEARZBUF(yes/no) keyword which will call SetClearZBuf() with
	  the given parameter. Using this new keyword it is now possible
	  to make levels that don't have any other way to initialize the
	  Z-buffer. Normal CS levels should initialize the Z-buffer themselves
	  by making sure that the outer polygons of the level are rendered
	  with ZFILL mode. Sometimes this is not possible, or sometimes it
	  would be more efficient to let the hardware clear the Z-buffer
	  in one go and then use the Z-buffer (i.e. for space type levels).
	  That's why this flag is useful.
	- Matze fixed a serious bug in csMemFile: It wasn't increasing file
	  postion while reading. (Seems like no one ever used this...)
14-Jan-2002
	- Matt Reda added 3 OSX drivers (2 canvases and an audio driver)
	  and updated various Makefiles to support these changes.
	- res changed error handling in the waveoutsd sound driver.
	- Fixed a bug in the OpenGL renderer which res introduced
	  by forgetting to test if txt_mm is non-NULL in FlushDrawPolygon().
	- Eric Sunshine committed the following changes on behalf of Matthew
	  Reda <mreda@mac.com>:
	    - Augmented csosdefs.h, macosx.mak, NeXTFrameBuffer32.cpp,
	      next.mak, pixtype.inc, scf.cfg, and sof3d.mak in preparation for
	      brand new OpenGL, CoreGraphics, and CoreAudio drivers Matthew
	      wrote for MacOS/X.
	    - Added CS_SOFT3D_24BIT_PIXEL_LAYOUT which allows platforms to
	      manually specify the pixel layout used by the software renderer,
	      rather than making the decision based upon endianess.  Platforms
	      which do not specify this fallback to the old behavior of pixel
	      layout being determined by endianess.  Apple/NeXT uses this new
	      capability to specify a uniform pixel layout regardless of
	      architecture.  This change allows a nice speed increase in the
	      CoreGraphics driver by eliminating the need to post-process the
	      pixel data.
	    - Added PowerPC-specific versions of qsqrt() and qisqrt() for use
	      by Macintosh (and any other PowerPC-based computers).
	- Eric Sunshine fixed csThing::SetCacheName() so that it once again
	  compiles successfully on NextStep.
	- Eric Sunshine fixed csLightPatchPool::Free() so that it now compiles
	  on NextStep.	Compiler was making apparently bogus complaint about
	  invocation of Free() in the parent class' parent class.
	- Eric Sunshine fixed the next2d canvas so that it once again displays
	  the correct colors in 32-bit mode following changes by Matthew Reda.
	- Philip Wyett added a few of the newer msvc_libs files to .cvsignore.
13-Jan-2002
	- Matze changed cs-config --version to only output major number, the
	  --longversion outputs all.
	- Philip Wyett updated docs to reflect new release of msvc_libs
	  (0.92d).
11-Jan-2002
	- Matze removed DEBUG_BREAK_MSG again :) csString is using CS_ASSERT
	  now.
	- res replaced CRASH macro with DEBUG_BREAK.
	- res modifed the standard reporter to have a different default
	  behaviour in debug mode (CS_DEBUG).
	- res fixed a missing ';' for csstring.h. Compiles with MSVC again.
	- res changed _control87 to csControl80x87 after Matt Reda pointed
	  it out.
10-Jan-2002
	- Matze added an autoconf macro for CS to scripts/cs-config, no
	  documentation on usage yet, but I think it should be clear how to use
	  it if you know autoconf.
	- Matze fixed a strange compiler warning in csobject.cpp (I had to add
	  a iObject() to the initializer list in the copy constructor, anyone
	  knows why this is needed?)
	- Matze also fixed a few warnings.
	- Andrew Zabolotny fixed the OS/2 port of CS. Also renamed the
	  _control80x87 debugging function to csControl80x87 to avoid
	  conflicts with same name routine from emx libc.
	- RedEye Entertainment added #defines to walktest and squawk
	  to make MSVC ignore the csControl80x87 changes of Andrew.
	- res made map2cs tutorial use a little bit less disk space.
	- Philip Wyett fixed new DEBUG_BREAK_MSG and added define so MSVC
	  can compile without errors.
	- res fixed csControl80x87 so that it works again with MSVC. He
	  then removed the MSVC specific #ifdef's from walktest and squawk.
	- res added DEBUG_BREAK macro and removed #define DEBUG_BREAK_MSG.
	- Philip Wyett added 'required' to the msvc documentation for the
	  BisonFlex library as it is needed for successful linking.
9-Jan-2002
	- RedEye Entertainment fixed make errors introduced by Andrew
	  yesterday.
	- Eric Sunshine applied a much saner patch to the makefiles to combat
	  the breakage caused by AndyZ's makefile change.  Reverted a patch
	  which Philip Wyett made to cygwin.mak since the new saner patch
	  should make the cygwin.mak patch unnecessary.
	- Matze added DEBUG_BREAK_MSG macro to cssysdef.h in order to avoid the
	  STR_FATAL macro in csstring.h (perhaps this will also useful for
	  other apps). Problem here is win32 as I had to use printf (or is
	  there a way to access the reporter wihtout having a pointer to
	  iObjectRegistry?).
	- Matze added operator == const char* to csString.
	- Matze added operator = for various types to csString.
	- Smaller cleanups for csString - there's still MUCH room for
	  optimisation.
8-Jan-2002
	- Reverted a change to the png loader plugin (in the saving part)
	  that res made some time ago. It caused quality degradation when
	  writing a big bunch of thumbnails using gfxtest.
	- Eric Sunshine fixed a problem introduced by AndyZ when he modified
	  os2gcc.mak.  His change unconditionally set the makefile SHELL
	  variable to the empty string for all platforms except OS/2, thus
	  resulting in the "make: -c: Command not found" error message
	  experienced by non-OS/2 ports.
	- Eric Sunshine fixed the next2d canvas so that it once again builds
	  successfully.	 It broke on 2001/12/27.
	- Eric Sunshine changed the next2d canvas so that it no longer bothers
	  to register the iEventHandler implementor with the event queue in
	  NeXTDriver2D::Initialize(), since its superclass'
	  csGraphics2D::Initialize() already does so.  (No need to register the
	  same event handler twice.)
	- Eric Sunshine eliminated several compilation warnings from AWS.
	- res did a fix to the png image loader.
	- Andrew Zabolotny fixed os2gcc.mak so that it always overrides
	  SHELL with $(COMSPEC) to avoid a problem with Unix shells.
7-Jan-2002
	- Corrected the includes in the collision detection howto.
	- Extended iLoader::LoadTexture() with a 'register' parameter which
	  is default false. When set to true the loader will register and
	  prepare the texture and material automatically. This is only
	  for the version of LoadTexture() that accepts a 'name' and
	  'filename'.
	- Modified the simple2 tutorial for the above change (i.e.
	  simplified it).
	- Renamed VEC_FORWARD and other similar defines to CS_VEC_FORWARD
	  (i.e. follow CS conventions). Also updated apimod94.txi for this
	  change.
	- Renamed DEFAULT_LIGHT_LEVEL to CS_DEFAULT_LIGHT_LEVEL.
	- Renamed NORMAL_LIGHT_LEVEL to CS_NORMAL_LIGHT_LEVEL.
	- Removed CS_ENTITY_BACK2FRONT as this flag is obsolete and now
	  handled by the render priority system. It was not implemented
	  anyway.
	- Deleted obsolete include/iengine/terrain.h include file. This
	  was apparantly forgotten a long time ago.
	- Rationalized many of the engine Doxygen comments. i.e. added
	  more documentation for possible CS_... values where they can
	  be used. Also updated some out-dated documentation and also
	  added missing entries.
	- Updated docs so that it no longer says CS only works with
	  Python 1.5.2.
	- Matze changed aws to use bison/flex if present.
	- Matze included a hacked flex skeleton file to avoid an msvc error,
	  where it can't find unistd.h.
	- Philip Wyett updated links in msvc documentation to correspond
	  with location of latest msvc_libs.
	- Philip also added necessary instructions for building CS Python
	  plugin with versions of Python above 1.5.2.
	- Additionally Philip reports:
	    - Removed *.flx and *.bsn files showing up in the AWS MSVC project.
	      This is no longer needed after MatzeB adding of flex skeleton and
	      no longer needed for custom build step within MSVC.
	    - Updated docs to take account of AWS/Flex changes made by MatzeB
	      and added instructions for re-generating sllex.cpp etc. from the
	      command line rather than from inside MSVC.
	  This makes dealing with AWS and MSVC alot easier - Thanks Matze. :-)
	- Philip also added info about Creative EAX 2.0 to MSVC build docs
	  with link to Creative developers website from where the SDK can
	  be obtained.
5-Jan-2002
	- Fixed a bug with the OpenGL renderer where it was trying to
	  store a value of 0, 1, or 2 in a boolean :-)
	  The result of this bug was that portals which required clipping
	  (like for the console portal command) didn't actually clip at
	  all.
4-Jan-2002
	- Eric Sunshine fixed a bad booboo from some time ago which clobbered
	  csTimer by mutating it into csTicksr.
	- Matze added python.cex to 'make install'.
	- Wouter Wijngaards fixed a spelling error in python.cin.
3-Jan-2002
	- Fixed a bug with the portal console command so that the
	  portal back to the original level is now correct.
2-Jan-2002
	- Fixed software renderer after res broke it.
	- Fixed csparser after res broke it.
	- Fixed OpenGL renderer after res broke it.
	- After fixing the csgfx makefile so that it actually uses all
	  .cpp files in the dir I reenabled the csCreateXORImage() in
	  software, OpenGL, and csparser.
	- Added initialization of 'radius' to partgen.cpp.
	- Fixed partgen/GetRadius() to first call SetupObject(). This will
	  make sure the radius returned by iMeshObject->GetRadius() is correct
	  even before the particle system is first drawn.
	- Fixed iMeshWrapper::PlaceMesh() so that it correctly transforms
	  the bounding sphere of the object it is trying to place. Previously
	  it was doing the inverse transform instead.
	- Further fixed PlaceMesh() so that it finally works as intended.
	- Optimized PlaceMesh() so it first checks if the sector has already
	  been added before doing all the calculations.
	- Changed iMeshWrapper::GetRadius() to also consider potential
	  children. In that case it will calculate the union of all the
	  bounding spheres of the children. As a consequence this means that
	  PlaceMesh() will now also consider children.
	- Fixed a bug in the iRenderView::ClipBSphere() and ClipBBox()
	  routines. They both would handle the portal clip plane inverted
	  which means that objects were culled wrong. The best place to
	  see this bug was to do 'portal sydney' in the console of WalkTest.
	- Matze did a small hack to cspython.mak so it links with -util if
	  python lib matches python2%.
	- res did the following on the OpenGL renderer:
	    - When using keycolored textures, z buffer is only used for
	      non-transparent pixels.
	    - Slight visual improvement of keycolored textures w/ bilinear
	      filtering.
	    - Fixed bug "Using software renderer proctexes with OpenGL causes
	      a crash".
1-Jan-2002
	- Fixed bug [497461] from sf.net. This bug prevented joystick
	  button handling to work properly. Reported by J.F. Miller.
	- Eric Sunshine fixed the following documentation-related problems:
	    - Texinfo mark-up errors (misplaced @end itemize and mistyped
	      @nonterm).
	    - Overfull and underfull `hbox' warnings from TeX.
	    - Invalid use of @c comment on first line of cs-unix.txi,
	      cs-mac.txi, and cs-dos.txi.
	- res updated a few places in CS so that a default image is used
	  when an image file cannot be loaded:
	    - An image file can't be loaded.
	    - A NULL image is registered with the software and OpenGL texture
	      managers.
31-Dec-2001
	- Got a patch from Tobias Brueckner <tobias.brueckner@gmx.net> which
	  does the following:
	    - Only process halos if there are halos.
	    - Keep virtual clock instance in csEngine instead of querying it
	      every time.
	- Removed the plugin manager variable in csEngine.
	- Cleaned up the RAPID collision detection plugin code a little by
	  eliminating an unneeded and confusing intermediate class. This
	  makes it (slightly) more efficient too.
	- Optimized the RAPID collision detection code a little bit.
	- Added a new function CollidePath() to iCollideSystem. This function
	  can check if an object can move from the old position to a new
	  position. It will check collisions along the way.
	- Added a first implementation of CollidePath() for the RAPID
	  plugin. This implementation is not very optimal yet and it is
	  also untested.
	- Since the implementation of CollidePath() in RAPID plugin was
	  SO extremely slow I reimplemented it completely. It appears that
	  generating colliders at real-time is not an option at all.
	- Philip Wyett added debug information switch /ZI which I forgot
	  to add after removing /Zi yesterday. Thanks to res for pointing
	  this out.
	- res updated the Ascii Art canvas to work with aalib 1.4rc4.
30-Dec-2001
	- Fixed iPolygonMesh implementation in csThing so that it will
	  check if the parent array of object-space vertices is still
	  valid. If not it will recompute.
	- Philip Wyett reports:
	    - Removed MSVC compiler switch '/Zi' from CS. This switch is
	      known to be the cause of both compiler and linker lockups
	      in complex code and some assembler code.
	    - Removed generic MSVC compiler optimization switches for
	      more specific and controlable ones. This offers the ability
	      for tweaks as you will see (/Ob2) if you attempt todo a MSVC
	      'Release' build of the cvs code and the current 6000+
	      warnings you will recieve. :-) Do not be frightened this
	      is an optimization where MSVC performs pure inline expansion
	      and also chooses functions which are not marked as inline
	      or __inline and inlines them itself if they meet it's inlining
	      criteria.
	      Note: This warning will be eliminated for Crystal Space
	      releases as to not disturb or confuse folks.
	      The addition of the above is being done in the run up
	      to CS 1.0 for optimization work on the MSVC port and CS
	      generally.
	      Other optimization switches now being employed are:
		/Og - Global optimizations.
		/Oi - Generate Intrinsic Functions.
		/Ot - Favor Fast Code; Default.
		/Oy - Frame-Pointer Omission
	- res did a small fix to awswin.cpp: engine view background now
	  works correctly with single pt canvas too.
29-Dec-2001
	- res did a fix to compile awslistbx.cpp on msvc.
28-Dec-2001
	- Small change to the scripting cs.i file so that it no longer
	  includes from plugins/csscript/cspython.
	- Added the ability to actually use the colon for specifying
	  non-standard tag names in RequestPlugins. You can now do:
	      CS_REQUEST_PLUGIN ("pluginname:alternative_tag", iWhatever)
	- Matze fixed python makefile.
	- Matze added python.cex that makes cs-config output python settings.
	- Matze also changed 'make all' so that it builds cs-config.
	- Christopher Nelson did:
	    - Updated some docs on the slot mechanism.
	    - Fixed a bug in scrollbar that caused the value to inc and dec
	      each time.
	    - Fixed scrolling in listbox so that it actually works without
	      crashing the system. It was a stupid casting bug. Casting an
	      unassigned variable to itself. Dumb dumb dumb.
	    - Note that there is an "issue" with scrolling where children
	      begin on the far left when they become the root of the display.
	      Further parents down the list are not left justified a similiar
	      amount, so it can generate confusion when scrolling. Hopefully
	      I'll have this bug fixed soon.
	    - Made another fix to the list box. The list should now scroll
	      correctly (well, mostly). There is still a slight bug that is
	      somehow related to being the child of a child with children.
	      It's annoying, but not fatal.
	    - Scrollbars now have a moving knob. While they do have a
	      provision for proportional sizing, this option is not
	      implemented yet.
	    - Added proportional scrolling to the scrollbar. The listbox now
	      makes use of this. Note that proportional scrolling will look
	      not quite perfect if the list is almost exactly the same size as
	      what can fit in the box. This is due to round-off error I
	      suspect.
	    - Added scrollbar to component manager so that they can be created
	      via the normal .def files. There is currently no documentation
	      at all on scrollbars. Sorry.
	    - Modified test app to be a little more thorough in testing the
	      listbox.
27-Dec-2001
	- Added a new csStringSet::Request() which can return the string
	  based on the ID (i.e. exactly the opposite of the old Request()
	  method in csStringSet).
	- Fixed a bug in the engine which would cause it to crash if
	  the gouraud info was missing in the lightmap cache.
	- Fixed a bug in software renderer and engine plugins. They were
	  not unregistering their event handlers at destruction time.
	  Also the event handlers are no longer embedded interfaces since
	  that prevents proper cleanup (i.e. problem with circular refs).
	- Did the same to various other plugins (aws, sequencer, iso engine,
	  canvases, renderers, ...).
	- Removed the reference to the plugin manager from the OpenGL and
	  perfstats plugins. This is also a circular reference.
	- Matze fixed SCF_DEBUG to work correctly with embeded interfaces.
	- Matze fixed some compiler warnings.
	- Matze fixed definition of int32 and uint32 should be long not int
	- Matze removed the type UByte,SByte, UShort,SShort, ULong,SLong, UInt,
	  SInt, uchar, ushort and ulong and substituted code with the
	  corresponding intxx types.
	- Philip Wyett reports: standardized and optimized methods
	  'operator /' and 'operator /=' in csVector2 and csVector3.
	  (Done by T. Michaels, Red Eye Entertainment)
	- Matze did the following:
	    - Reverted EventHandler changes in standard input console
	      since there was no Event handler in Console plugin before.
	    - Fix for perfstat plugin.
	    - Fixed the OpenGL renderer. The parent OpenGL class
	      didn't have a ref to pluginmanager anymore.
	    - Fixed SCF_DEBUG to work correctly with embeded interfaces
	    - Fixed some compiler warnings
	    - Fixed definition of int32 and uint32 should be long not int
	    - Removed the type UByte, SByte, UShort, SShort, ULong, SLong,
	      UInt, SInt, uchar, ushort and ulong and substituted code with
	      the corresponding intxx types.
	- Christopher Nelson did the following:
	    - Added scroll bar widget (finally). The widget is untested and is
	      not yet enabled in the common components part of the window
	      manager. It uses a number of somewhat experimental features of
	      AWS, so it's probably horribly broken somehow. The scrollbar
	      widget is a good example of using:
		(1) awsKeyFactory
		(2) embedded sinks
		(3) manual triggers
		(4) embedded components
	    - Added a new function to the awsKeyFactory called GetNode.
	    - Fixed a silly bug in awsImageView.
	    - Added new scrollbar widget images.
	    - Update standard skin definition to support scrollbar skins.
	    - Beginnings of scrollbar code for listbox.
	    - Had to add a couple of new skin parameters: ScrollBarWidth,
	      ScrollBarHeight, otherwise we have a chicken and egg problem.
	    - Did some more component embedding work on the list box.
	    - Fixed some embedding stuff to work right.
	    - Added a new event called OnAdded() which is called after a
	      component child is added to it's parent.
	    - Finished embedding scrollbar in listbox.
	    - Made buttons work and look right in listbox.
	    - Listbox still does not scroll.
	    - Did a LOT more work on making scrolling work with the listbox.
	      This is complex because the listbox is hierarchical and does not
	      lie flat lie a good doggy. To remedy this I've had to create an
	      indexing function which creates a map of all the visible
	      elements of the list. This map is used for scrolling, and is
	      only updated when the list is expanded, contracted, or elements
	      are added or deleted. Not that scrolling still does not work
	      right, and attempting to scroll crashes the test harness.
	- The RedEye Team corrected compile error generating typo:
	  `scfiEventHandler-DecRef();' is now `scfiEventHandler->DecRef();'
26-Dec-2001
	- Matze fixed an issue with cs-config --makevars, if $@ is in
	  a var.
	- Christopher Nelson did the following:
	    - Added comment to evdefs so people know what csevFrameStart is.
	    - Added a new action called ClearList() that deletes an entire
	      list (recursively) and makes sure to free it's rows and columns.
	      This implementation should be leak-clean, but the code is
	      currently untested.
	    - Added new widget: awsImageView. The idea behind this widget is
	      to display an image. It also supports full even redirection of
	      OnMouseUp, OnMouseDown, OnMouseClicked, and OnMouseMoved.
	      The point behind this widget is to allow you to make 2D paint
	      kind of apps by displaying a texture hooked up to a proctex.
	      I added this b/c of my landscape editor, and I think that it
	      will be universally useful.
	    - No, no scrollbars yet.
	- Matze fixed a typo in util.cpp.
25-Dec-2001
	- Matze had nothing to do and fixed hundreds of compiler warnings
	  in aws.
	- Jorrit had nothing to do and fixed Matze's history entry above
	  :-)
	- Matze also fixed plugin linking on linux.
24-Dec-2001
	- Christopher Nelson did the following:
	    - Added DeleteItem and GetSelectedItem methods to listbox.
	    - Added scripting helpers.
	    - Added a new event calle OnFrame, which is called each time the
	      frame refreshes.
22-Dec-2001
	- Philip Wyett updated cal3d in msvc_libs to current cvs to allow
	  successful compilation of latest changes in caltocs. Use the link
	  below to get the latest version.
	  ftp.sunsite.dk/projects/crystal/support/win32/msvc_libs_0.92b.zip
21-Dec-2001
	- Fixed the JPG loader so that it actually fails instead of just
	  hanging on JPG images that are too short.
	- Fixed gfxtest so that it no longer stops if it encounters
	  an error while processing multiple images. It will just skip
	  that image.
	- Added --prefix and --suffix options (-P and -U) for gfxtest.
	  The prefix will be prepended to the output filename and the
	  suffix will be appended.
	- Fixed a bug in gfxtest where it was using the Y size of the
	  first image to scale all the others too if multiple images
	  where given and scaling is enabled.
	- Fixed a potential overflow bug in the jpg image loader.
	- res did a small fix to the PNG image loader.
20-Dec-2001
	- Fixed gfxtest so it will actually write out the PNG file correctly
	  on windows (i.e. use binary mode for writing the file).
	- Added the ability to gfxtest to scale given only the X size. The Y
	  size will then be calculated proportionally.
	- Added the ability to add a filename after -S or --save option so
	  you can give the filename it should use.
	- Philip Wyett changed the output exe's name of picview to
	  picview.exe for clarity.
	- Philip also updated msvc_libs external libs package to include cal3d
	  0.6. Use the following link to download.
	    ftp://ftp.sunsite.dk/projects/crystal/support/win32/
	    msvc_libs_0.92a.zip
	- Matze improved cs-config to read .cex files. Not fully finished
	  as it only reads them from the current dir at the moment.
	- Brandon Ehle updated cal3dtocs to work with cal3d 0.7.
	- Christopher Nelson did the following:
	    - Added the ability to make a window display a view onto an
	      engine as it's background.
	    - Added a new simple window def so that I can demonstrate this
	      functionality.
	    - Added engine view to test app.
	    - Fixed panning bug by setting perspective center.
	    - Also added field of view so it tries to draw correctly for the
	      window.
	- res did a small crash fix to the standard output console.
	- res also updated awstodo.txt.
	- res fixed a typo in awstest.cpp.
	- Matze finised cs-config additions.
	- Norman Kramer fixed caltocs so that it only compiles if setup found
	  cal3d/cal3d.h include.
19-Dec-2001
	- Rationalized the far plane in the camera:
	    - Removed the special csFarPlane class in the engine and instead
	      extended csPlane3 with the ClipPolygon() routine.
	    - Added SetFarPlane() to iCamera.
	    - Changed GetFarPlane() in iCamera to return a pointer to the
	      far plane instead of the copy it does now. Should be more
	      efficient.
	    - Changed SetFarPlane() in csCamera to make a copy of the given
	      plane. csCamera is now responsible for cleaning up the far
	      plane on its own.
	    - Fixed the copy constructors of csCamera to make a new copy
	      of the far plane if present. Also fixed the destructor of
	      csCamera to actually clean up the far plane.
	    - Removed csCamera::UseFarPlane(). The fact that there is a
	      far plane is enough to indicate we want to use it.
	- Started new apimod doc for 0.92 to 0.94.
	- Moved cs.i (for python and lua scripting) from plugins/cscript/common
	  to include/ivaria. The reason is that this is also a public include
	  file. If you want to make a python plugin in your own project you
	  will need to include this file.
	- Added error checking to the lightmap writer so that it will now
	  show a warning if it couldn't open a lightmap cache file for
	  writing and it will also return without causing crashes.
	- Gouraud lighting is now also saved in the lightmap cache.
	  This also means that startup will now be a little faster EVEN
	  if the level is not using gouraud shading because it will not have
	  to calculate lighting anymore for (potentially non-existant)
	  gouraud shaded polygons.
	- Matze inlined constructor of csMatrix3 in the hope to speed it up a
	  bit (no tests made). Also did a small change to csVector3
	  constructors.
18-Dec-2001
	- Brandon Ehle added cal3dtocs application to CS. This application
	  relies on an external library (cal3d). This converts cal3d
	  skeleton-meshes and animations to LIBRARY files that load sprite3ds
	  and motions. I have some modifications to cal3d that I need to get
	  in, and I will post those patches on the SourceForge patch page
	  until they are in cal3d cvs.
16-Dec-2001
	- Norman Kramer added CS_QUERY_REGISTRY_TAG_INTERFACE macro.
	- Norman also added SSE detection bit to cpuid.h.
15-Dec-2001
	- Norman Kramer provided a solution for opengl implementations with
	  no ability to determine the address of EXT/ARB functions at runtime.
	  Those should have CSGL_EXT_STATIC_ASSERTION defined and have to
	  enable the supported extensions in extstat.h.
	- Matze optimized Makefile.template by using := instead of =, which
	  results in only 1 call of cs-config.
14-Dec-2001
	- Reverted a patch from res on the OpenGL windows canvas
	  related to the calculation of 'wwidth' and 'wheight'. This
	  patch caused OpenGL to stop working correctly for me (ATI card).
	  Don't know the reason though.
	- res did a window style change in the Windows/OpenGL canvas.
	- Christopher Nelson did the following:
	    - Created a new class called aws3DFrame which encapsulates the
	      "built-in" frame types that most components use. Having this
	      code in one class reduces the amount of extra code in the
	      system, and also allows me to more easily fix bugs in frame
	      implementations.
	    - Modified the GroupFrame and ListBox to use this new method.
	    - Added clipping constraints for rect region.
	    - Fixed the crashing bug under the software renderer. This was
	      caused by clipping to the software context's width and height.
	      I fixed it by clipping to the software context's width-1 and
	      height-1.
	    - Add awsClipper. This is simply a utility package and lets you
	      write a little more efficient code by clipping all drawing
	      operations to the clipping rectangle passed into your OnDraw
	      function. The window frame and a couple of other operations now
	      use this. I'm not sure it does any good, so it may be removed in
	      the future.
	    - Caused the dirty, updatestore, and erase regions to be clipped
	      to the correct screen coords. This probably doesn't do anything,
	      but it was done in my search to discover the software clipping
	      bug. It may sometimes be more efficient, and it may keep certain
	      bugs from happening. It may also keep regions sane.
	    - Added the manual key creation mechanism.
	- Brandon Ehle did the following:
	    - Fixed a stack overflow in MSVC when loading an object with a lot
	      of limbs in its bone hierarchy.
	    - Added '%n' to csScanStr to support the above.
13-Dec-2001
	- Applied a patch from Peter Amstutz <tetron@student.umass.edu>
	  which allows csMovable to operate nicely even if there is no
	  attached mesh object (i.e. mesh object == NULL).
	- Bumped up version to 0.93.
	- Fixed simplept from crashing with -help parameter.
	- Christopher Nelson did the following:
	    - Added a new canvas to AWS: awsScreenCanvas.
	    - Added a new method: CreateCustomCanvas().
	    - Used with a new flags AWSF_AlwaysRedrawWindows these two
	      functions allow you to draw straight to the screen with OR
	      without the engine. Note that if the engine is not drawing in
	      the background, then you should also set the
	      AWSF_AlwaysEraseWindows flag. Also note that if the engine is
	      NOT drawing in the background, this will not work quite
	      correctly. I still need to make a way to setup the background
	      color or bitmap for the engine to erase to.
	    - Modified the test app to support drawing directly to the screen.
	    - Small crash fix to awscspt.cpp.
	    - Temporary hack to work around an OpenGL renderer bug. AWS
	      works now with OpenGL.
	- res did a small change of window style to the Windows canvas.
	- Brandon Ehle did the following:
	    - Motion manager import from 3D Studio MAX is now working.
	    - Fixed a couple bugs with interpolation and looping.
	    - Enabled interpolation by default, eventually need to abstract
	      this' in the API.
12-Dec-2001
	- Bumped up version for pending 0.92 release.
	- Added GetLogicalParent() and SetLogicalParent() functions
	  to iMeshObject and iMeshObjectFactory. The idea is that using
	  these functions you can set the logical parent of an iMeshObject
	  or iMeshObjectFactory. When mesh objects are being used in the
	  3D engine the logical parent for iMeshObject will be an iMeshWrapper
	  holding that mesh object and the logical parent for
	  iMeshObjectFactory will be an iMeshFactoryWrapper. When mesh
	  objects are being used in the isometric engine the logical
	  parent for iMeshObjectFactory will be the same but the logical
	  parent for iMeshWrapper will be iIsoMeshSprite.
	  Note that the mesh objects themselves will not use this logical
	  parent. It is only for convenience of the engine that is using
	  them.
	- Fixed all iMeshObject implementations (all mesh plugins, the thing
	  implementation in the engine and the two mesh objects in bugplug)
	  for this change.
	- Changed csparser plugin to set this logical parent correctly for
	  both new loaded mesh objects and mesh factories. Additionally
	  use the logical parent from the parent factory (iMeshObjectFactory)
	  from the loaded mesh to be able to set the parent factory
	  (iMeshFactoryWrapper) for the iMeshWrapper as well.
	- Changed csparser plugin so that it no longer gives a context
	  to the mesh object and factory loaders. This context is now no
	  longer needed since csparser will handle everything using the logical
	  parent. The only exception is for the mesh factory loaders
	  where it is possible to append additional information to an already
	  loaded factory.
	- Changed all plugin loaders not to use the context (except for the
	  3D sprite loader for factories which can append additional
	  information to a previously loaded factory).
	- The changes above allow the use of the mesh object loaders together
	  with the isometric engine. The changes yesterday already allowed
	  this for the factory loaders already but it was still not possible
	  for the mesh objects since the iso engine does not have an
	  iMeshWrapper implementation. Now the plugin loaders no longer
	  depend on iMeshWrapper.
	- Fixed a bug with closing brackets on 3ds2lev. This is untested
	  though.
	- Added some information to the second tutorial about render
	  priorities and Z-buffer mode.
	- Fixed a bad bug in the parsing of the START keyword. It would
	  simply crash.
	- res fixed aws so that it doesn't require source files from
	  outside its directory. Also added transparency.
	- res did a small fix to the OpenGL procedural textures.
	- Fixed fire proc texture.
	- Luca Pancallo fixed 3ds2lev for real.
	- Fixed a bug in things when polygons were split. This caused
	  mazedex to crash.
	- Martin Geisse removed some of the typed vector macros which were
	  not really needed. Martin also added documentation about typed
	  vectors.
	- Release of CS 0.92r001.
	- Brandon Ehle did the following:
	    - Partial motion manager rewrite. The new architecture accomplishes
	      all of what the old architecture could do, but faster, and in a
	      more easily expandable way.
	    - Doxygen documentation for motion manager.
11-Dec-2001
	- Thanks to Matze we finally got debugging to work properly with
	  cygwin and mingw ports. In the past there was no useful debug
	  info when debugging inside a dll. Now this is solved at the cost
	  of vastly bigger dll's (i.e. from 92K to 726K in one case).
	  The dll's are only bigger in debug mode though.
	- Philip Wyett did the following:
	  Updated links etc. to take account of new release packages.
	    - msvc_libs 0.92
	    - csMinGW 0.92 - now incorporating bash shell
	  For those who want to find out more about bash read
	  the docs available in: X:\mingw32\usr\doc\bash-2.05a.
	- Christopher Nelson did the following:
	    - Made some improvements to the single proctex mode. It now
	      works again.
	    - Added SetFlag, ClearFlag, and GetFlags.
	    - There is a new flag: AWSF_AlwaysEraseWindows. This flag makes
	      the system always erase behind windows in case you want to use
	      it for a proctex surface or as the primary draw system.
	    - Erasing is fairly optimal, and shouldn't result in overdraw.
	    - Added Inset, Outset, and Join methods to csRect.
	    - Made another fix that allows a user to optimally draw single
	      proctextures to the screen if they want.
	    - Fixed one of the die! bugs in single proctex mode.
	      Still looking for the other.
	    - Made some mods to this, including the removal of the #defines
	      in favor of the more lexicographically stable const bool method.
	    - Made some changes to demonstrate how to use the flags and the
	      two different ways you can draw an aws canvas to the screen.
	- res did some bugfixes to AWS.
10-Dec-2001
	- Toni Asco' Gonzalez found a bug in 3ds2lev.
	- Added thanks to Ted Nguyen for donating two copies of MSVC
	  to Jorrit Tyberghein and Eric Sunshine (one each :-)
	- Added iIsoEngine::GetMaterialList() and removed all other material
	  related functions (except the one to create a material from
	  a VFS filename) from iIsoEngine. This makes iso engine more
	  consistant with the 3D engine.
	- Added iIsoEngine::GetMeshFactories(). Also created
	  iMeshFactoryWrapper and iMeshFactoryList implementations for iso
	  engine. Removed iIsoEngine::AddMeshFactory(), FindMeshFactory(),
	  and RemoveMeshFactory().
	- Removed csIsoNamedVector and csIsoObjWrapper classes since these
	  are now no longer used.
	- During this small redesign of the iso engine several bugs where
	  fixed. Mostly in functions that were never used so never tested
	  (i.e. mostly functions for finding and removing mesh factories and
	  materials).
	- Changed iTerrFuncState::LoadMaterialGroup() so that the first
	  parameter is now a material list (iMaterialList) instead of iEngine.
	- Removed weird 'const' from iMeshFactoryWrapper::SetParentContainer().
	  How can a function that modifies an object be const?
	- Changed iLoaderPlugin to accept a material list and mesh factory
	  list (iMaterialList and iMeshFactoryList) instead of an iEngine
	  instance. This allows the loader plugins to work fine with the
	  isometric engine too. In the past this was hard to do because
	  the isometric engine doesn't implement iEngine so there was no
	  useful pointer to give to the loader plugins.
	  Note that this will not work for the thing loader. At this moment
	  things are tied to the real 3D engine and cannot work in the
	  isometric engine. So the thing loader refuses to work if the
	  3D engine is not present.
	- For similar reasons I removed the iEngine pointer from
	  iSaverPlugin::WriteDown().
	- Modified all loader and saver plugins in CS to conform to the new
	  API.
	- Matze enabled python in cygwin port. (I didn't touch anything, but as
	  I tried it again today, it suddenly worked :)
	- Matze did a small fix after Jorrit's changes (terrfldr.h).
9-Dec-2001
	- Optimized the matrix multiply routine considerably (the
	  *= operator) by avoiding the copy of 'this'. Instead
	  of 663234 multiplications per second I can now do
	  715651 matrix multiplications per second. This should give
	  a considerable speed increase all over CS since this is used
	  a lot.
	- Optimized the *= operator of csReversibleTransform by using
	  the *= operator of csMatrix3. This should speed that routine
	  a little as well. In general it would be nice to try to find
	  all places where '*' is used on matrices and transforms
	  and try to replace it with *= if possible or useful.
	- Optimized csReversibleTransform *= operator a little more.
	- Optimized csReversibleTransform * by inlining it.
	- Optimized csReversibleTransform *= by inlining it.
	- Eric Sunshine fixed the Apple/NeXT ports so that they are once again
	  buildable following Philip's change to MAXPATHLEN.
	- Did a big optimization in the plasma procedural textures
	  (moved the Animate function from first place in profile to
	  third place).
	- Did an additional optimization to plasma procedural texture
	  by avoiding array access and using normal variables.
	- Did several optimizations to the fire procedural texture. With
	  no big effect on framerate however.
8-Dec-2001
	- Fixed a closing brace in mapfmt.txi.
	- res fixed "unreferenced local variable" msvc warning in awswin.cpp.
7-Dec-2001
	- Added a new tutorial application (no doc yet) for collision
	  detection. This tutorial contains a hierarchical mesh object
	  (one stick with two other stick children) that rotates around.
	  The children also rotate and will change rotation direction when
	  they hit each other.
	- Fixed a very significant bug in the RAPID collision detection
	  plugin. It turned out that if the second transform given to
	  iCollideSystem::Collide() was different from the identity transform
	  then collision detection would very often fail. To make fixing
	  this bug easier (more performant) I changed the API for the
	  Collide() function to accept csReversibleTransform instead
	  of csTransform (I need to get the inverse of the transform).
	  This bug was not discovered earlier because in most cases
	  the second transform will be an identity transform (since the
	  second transform is often used for static geometry).
	- Toni Asco' Gonzalez did the following:
	    - Modified Map2cs to support generic mesh placing, using NODES
	      to store information in world files.
	    - Modified Walktest to be able to reading and interpreting those
	      new nodes (SEED_MESH_OBJ) and be able to load model files
	      (3ds, mdl, it's supposed to work wit all CS supported model
	      formats).
5-Dec-2001
	- Added a new HOWTO to explain how to attach game objects to Crystal
	  Space objects.
	- Added iEngine::PrepareTextures() and PrepareMeshes().
	- Fixed a leak in the engine which wasn't destroying the default
	  render priorities in the destructor (note that iEngine::DeleteAll()
	  will delete all render priorities and then create the four
	  default ones again).
	- Extended 'START' keyword in map loader so it now has a new syntax:
	    START (SECTOR ('mySector') POSITION (x,y,z)
		UP (x,y,z) FORWARD (x,y,z))
	  This new syntax means that you can now also specify up and forward
	  vector in the map file. The old syntax (sector,x,y,z) is still
	  supported. Note that walktest will not respect the up and forward
	  vector because it has its own way to express view direction and I
	  have not yet converted this.
	- Also updated the map format documentation for this change.
	- Fixed a bug in csCameraPosition. It was using strdup() instead
	  of csStrNew().
	- Fixed two other strdup bugs in csws and cslexan.
	- Fixed a bug in iPolygon3D::SetAlpha() (actually the bug is elsewhere
	  but it reflects in that routine). The problem is that once alpha
	  is set it is not possible to clear it. Also setting different
	  values for alpha for the same polygon (i.e. changing alpha
	  dynamically) will not work correctly as the new alpha value is
	  simply or-ed on top of the previous one.
	- Added CS_RENDPRI_NONE, CS_RENDPRI_BACK2FRONT, and
	  CS_RENDPRI_FRONT2BACK. Also extended
	  iEngine::RegisterRenderPriority() with an optional extra parameter
	  for this new flag (default is CS_RENDPRI_NONE).
	- Added iEngine::GetRenderPrioritySorting() which returns the value
	  of this flag for a given render priority.
	- Extended the parser to support these flags (it already parsed all
	  of them).
	- The default 'alpha' render priority is now by default initialized
	  with the CS_RENDPRI_BACK2FRONT flag.
	- Extended csSector::Draw() so that it will now sort the objects
	  in a render priority based on this sorting flag.
	- Matze added a -L/usr/lib/w32api to fix some issues on cygwin (the
	  compiler is looking there by default but some external tools like
	  libtool didn't).
	- Philip Wyett commented out wrong plugin. Fixed.
	- Philip also changed MAXPATHLEN to CS_MAXPATHLEN to eliminate
	  a warning under the Cygwin Windows port of CS. This change
	  is done blind into some CS ports, so sorry in advance if this
	  causes any problems.
4-Dec-2001
	- Enabled aws in user.mak.
	- Created a dummy thing object plugin. This plugin allows applications
	  to use things just like any other mesh object (i.e. load the plugin
	  implementing iMeshObjectType and then do NewFactory() from that).
	  Previously applications had to use engine->GetThingType().
	  Note that since things are still implemented inside the engine
	  this dummy plugin actually does little more than redirect
	  NewFactory() calls to engine->GetThingType(). So
	  engine->GetThingType() cannot be removed yet.
	  The use of engine->GetThingType() is now deprecated (noted this
	  in the apimod doc).
	- Removed most usages of GetThingType() in the engine. Only the
	  engine itself and everything related to things now use
	  GetThingType().
	- Modified bugplug so that it now has an event handler as a separate
	  object instead of putting the event handler in the bugplug
	  plugin itself. This avoids a circular reference.
	- Fixed a bug in csThing::HardTransform(). Polygon texture planes
	  and polygon normal planes were sometimes shared between polygons
	  and even between polygons belonging to other things (for texture
	  planes). This improves (but does not fully fix) lighting and texture
	  mapping in the partsys level.
	- Matze changed win slashes '\' in aws.mak to unix ones '/' to make it
	  at least compiling with unix. I'm not sure if it still works in win
	  now :)
	- Matze changed bin/arch.sh to use the value of the CPU, MACHINE and
	  PROC vars if they are alread set in environment
	- Matze also changed comptest to use a already set ARCH var (Eric,
	  please check if it still works with older shells).
	- Philip Wyett did the following:
	    - Removed references to non base/out of date DDRAW and D3D plugins
	      to avoid any WARNING messages or confusion in the 0.92 release.
	      This was mentioned on the mailing list...
	    - Removed DDRAW 8 plugin due to it causing more confusion than
	      hell.
	    - Removed references to D3D renderer from cfg files to stop
	      confusion.
	    - Updated docs to remove some old stuff and make clear that the AWS
	      plugin is not in the default MSVC build process and those
	      wushing to add if unsure contact me to find out howto re-add it.
	    - Scratched the above change after noticing AWS is back in build
	      process.
	    - Added link to a second CS WorldCraft wad file I created which
	      has twice the amount of textures and most of better quality for
	      better development.
	    - A little Windows docs cleaning.
	    - Fixed function param redifinition error under MSVC.
	    - Removed some old dependancy stuff ref'ing cswin32exe and
	      cswin32dll.
	- res changed filenames of awssmpt.* to awscspt.* and also
	  did some small fixes in aws.
3-Dec-2001
	- Toni Asco' Gonzalez fixed the 3ds loader so that it now correctly
	  supports normal and texture mapping information.
	- Fixed another memory leak (in csparser) with images. Now there
	  only seems to be a remaining leak with procedural textures and
	  OpenGL.
	- Removed MarkVisible(), IsVisible() and MarkInvisible() from
	  iMeshWrapper. These are private functions and not to be used
	  from user code.
	- Removed RelinkMesh() from iSector. This is a private function
	  and not to be used from user code.
	- Added apimod appendix between 0.90 and 0.92.
	- Chen Puning <chenpuning@hotmail.com> discovered a bug in
	  csMeshWrapper::GetScreenBoundingBox(). It was incorrectly ignoring
	  the movable transformation so it would not work on mesh objects
	  that were moved away from the default identity position.
	- Christopher Nelson did the following:
	    - Commited F. Richter (res) 's updates to allow for multiple
	      procedural textures that span the entire view space. Thanks to
	      him, AWS windows can now occuppy the entire window. Note that
	      this incurs a heavy speed penalty.
	    - Fixed a couple of bugs that he had introduced, and introduced a
	      couple of my own bugs.
	    - Heavily modified for speed, and also fixed a couple of other
	      items for simplicity.
	    - The single-proctex mode might be broken now.
30-Nov-2001
	- res added missing SCF_CONSTRUCT_IBASE to awsfparm.cpp.
	- res redefined macro CRASH to call DebugBreak().
28-Nov-2001
	- Made the test on bad UV coordinates for a polygon a little
	  bit more strict so that it rejects more polygons. There were
	  still polygons that came through which could crash the lighting
	  calculator otherwise.
	- res added a missing @end example to simpmap.txi tutorial.
27-Nov-2001
	- Considerably optimized memory usage of graph debugger by
	  reorganizing the data a little.
	- Fixed a bug in the the parsing of NODE keyword. Every node
	  was added twice to the sector.
	- Fixed definition of CS_GNUC_PRINTF in case an old gcc is used.
	  Also fixed definition of CS_GNUC_SCANF.
	- Matze removed CS_GNUC_PRINTF from pubapi and devapi docs
	- Philip Wyett fixed a compiler warning in csstring.cpp.
26-Nov-2001
	- Added documentation for terrain engine.
	- Extended documentation on the format of the plugin loaders by also
	  adding the format of every keyword.
	- Fixed EMITSPHERE and EMITCONE keywords in emit loader.  The
	  csScanStr() used there had the wrong number of parameters.
	- Increased the number of hardcoded vertices in a limb (skeletal
	  animation) from 1000 to 20000. Still hardcoded though.
	- Made several functions in iThingState `const':
	    CurveTexel()
	    CurveVertex()
	    GetCurveVertices()
	    GetCurveVertexCount()
	    GetCurveCount()
	    GetCurvesScale()
	    GetMovingOption()
	    GetPortalCount()
	    GetPortal()
	    GetPortalPolygon()
	    GetVertexCount()
	- Renamed two functions in iThingState:
	    CurveVertex() to GetCurveVertex()
	    CurveTexel() to GetCuveTexel()
	- Added several functions to iThingState:
	    FindPolygonIndex()
	    RemovePolygon()
	    RemovePolygons()
	    SetVertex()
	    DeleteVertex()
	    DeleteVertices()
	    SetCurveVertex()
	    SetCurveTexel()
	    ClearCurveVertices()
	    FindCurveIndex()
	    RemoveCurve()
	    RemoveCurves()
	- Fixed a bug with things when adding a polygon that already contained
	  a portal.  In that case the array of portals for that thing would not
	  be updated.
	- Fixed a bug in iCamera::GetHit(). If there was no hit it would
	  crash.
	- Matze used the gnu c extension for checking printf argument strings,
	  to use it in your own functions, add a CS_GNUC_PRINTF at the end of
	  your function declaration. You should give the argument number from
	  the format string as a first argument, and the argument number of the
	  first var argument as a second number. Note that counting arguments
	  starts with 1 for function but with 2 for member functions (prolly
	  because of the implicit this pointer...). Example:
	    void Report (void *bla, const char *str, ...) CS_GNUC_PRINTF (2,3);
	- Fixed a very minor bug in a format string (I hoped to find more to
	  demonstrate usefullness of the above thing :)
	- Eric Sunshine made the following changes to csString:
	    - Fixed a nasty bug where Format() was using vsprintf() rather than
	      vsnprintf(), and thus blasting past the end of the allocated
	      buffer.
	    - Fixed a crasher where Format() failed to ensure that a buffer had
	      been allocated for use by vsnprintf().
	    - Fixed bugs in LTrim() and RTrim().  Neither worked correctly if
	      the string was composed entirely of whitespace.  In this case,
	      they didn't trim anything at all.
	    - Completely rewrote Collapse() since the original implementation
	      was unnecessarily complex and convoluted.
	    - Fixed a lot of cases where methods were treating the `Size'
	      instance variable inconsistently.	 In some cases, methods assumed
	      that Size included the implicit null terminator.	In other cases,
	      it was assumed that Size did not account for the null terminator.
	      Now, all methods treat Size uniformly.  It does _not_ include the
	      null terminator.	Also documented this attribute of Size.
	    - Rewrote Reclaim() so that it actually works again.  Reclaim()
	      broke when the behavior of SetCapacity() changed recently.  In
	      the past, SetCapacity() would actually shrink the buffer's
	      footprint, but now it merely ensures that enough memory is
	      allocated.  To shrink the footprint, use Reclaim() or Free()
	      instead of SetCapacity().
	    - Changed the behavior of PadCenter() so that, for cases when a
	      string can not be centered exactly, it is placed slightly to the
	      left of center, rather than to the right of center.
	    - Fixed many cases where methods were blindly assuming that the
	      `Data' instance variable was non-null.
	    - Fixed numerous cases where the unsafe sprint() was being used
	      instead of the safe cs_vsnprintf().
	    - Updated incomplete and outdated documentation for many methods.
	- res fixed 'text background not transparent' bug in OpenGL.
24-Nov-2001
	- Added more debug graph commands for iImage.  Also added links to
	  iImage and the texture manager for the 3D renderers.	This reveals a
	  number of additional memory leaks.
	- Solved one small memory leak by removing a suspicious IncRef() in
	  plugins/video/renderer/common/txtmgr.cpp.  That IncRef() even had the
	  following comment with it:
	    'Increment reference counter on image since NewTexture() expects a
	    image with an already incremented reference counter'
	  I don't think this is true however.  The software version of
	  NewTexture() did an IncRef() on its own while the OpenGL version of
	  this function doesn't even store the image pointer.  Removing this
	  IncRef() solves a few of the leaking images at exit but not all.
	- Fixed a few remaining memory leaks in the 3D renderers by
	  DecRef()'ing the images after mipmapping. This doesn't fix all
	  memory leaks related to iImage yet.
	- Some more iImage related DG_LINK's.
23-Nov-2001
	- Fixed test for default noconsole on mingw and cygwin by testing on
	  COMP_GCC instead of _MINGW_.	_MINGW_ doesn't seem to be defined.
	- Fixed a bug with csDebuggingGraph.  The debugging graph registers
	  itself with the object registry.  However when the object registry is
	  cleared it may try to reregister itself.  However this would fail
	  causing crashes.  Now csDebuggingGraph will check if Register()
	  actually succeeds.  If it doesn't then it will do nothing.  This
	  fixes a crash at exit for programs that use the debugging graph.
	- Extended iThingEnvironment with ClearPolyTxtPlanes() and
	  ClearCurveTemplates().  With these two functions you can clear all
	  planes and curve templates in the thing environment.
	  iEngine::DeleteAll() will now call these two functions to further
	  clean up.  This fixes several memory leaks when reloading a map file.
	- Fixed another memory leak in the engine with the START keyword.
	- In an effort to fix more memory leaks I also added debug graph
	  commands to the texture manager of the 3D renderers.
	- Added more DG_LINK() commands in the engine so that the object graph
	  is better defined in the graph debugger.
	- Fixed a significant memory leak with textures in the OpenGL renderer.
	  There is still a memory leak with procedural textures though (and
	  this leak is OpenGL specific).
	- Fixed a potential problem in the OpenGL proc textures implementation
	  (a missing init to NULL if setup of texture failed).
	- Restructured the map loading tutorial a little so that it now has a
	  LoadMap() function.  Also updated the tutorial documentation.
	- Temporarily added a handler for the 'l' key in the map loading
	  tutorial (code only) to reload the current level. This is for
	  debugging memory leaks in the engine. Also enabled the debugging
	  graph.
	- Added yet more DG_LINK() commands in the engine so that the object
	  graph is better defined in the graph debugger.
	- Philip Wyett did the following:
	    - Removed unused and unneeded variable in csosdefs.h, which
	      hindered the developemnt of external DLL's which had there own
	      DllMain.
	    - Fixed a couple of ; at the end if statements (OpenGL) :-)
	    - Fixed problem where a CS GUI app creates a frame, but the Window
	      body does not appear until a level is loaded - simplept on
	      slower systems was a good example of this. Added a stock default
	      black RGB brush to fill until everything is ready.
	    - Fixed link error in vsh, brought about by my change of this
	      morning.
22-Nov-2001
	- Further work on documentation. Created a 'Documentation Guide'
	  section which guides the CS game writer through some of the more
	  useful sections in the documentation.
	- Fixed a few errors throughout the mesh object documentation.
	- Fully updated the 'thing mesh object' documentation.
	- Some smaller documentation updates.
	- Removed everything from the parser documentation that is no
	  longer valid. The parser documentation also doesn't try to explain
	  anything related the loading of mesh objects. For this you should
	  go to the mesh object chapter. This does not mean that the parser
	  documentation is already up-to-date though. But it is more accurate
	  now. Also started added some of the new things to the documentation.
	- Matze fixed console for win32 mingw and cygwin - they just don't need
	  one.
	- Eric Sunshine fixed a number of Texinfo errors and formatting
	  problems in mapfmt.txi.  Also eliminated all underfull and overfull
	  `hbox' warnings reported by TeX.
21-Nov-2001
	- Worked a bit on documentation. The 'intro' section in the
	  tutorials was heavily outdated. It was still referring to
	  the system driver for example.
	- Moved the 'basic concepts' and 'minimum requirements' from the
	  simple tutorial to the 'Tutorial Introduction' chapter.
	- Eric Sunshine fixed a bug in cs-config.temppost.  Was interpolating
	  $@ instead of ${id_rest}.
	- Eric Sunshine fixed variable interpolation for older Bourne shells in
	  cs-config.temppost.
	- Eric Sunshine made the following changes to the AWS Texinfo sources:
	    - Fixed some fairly minor mark-up problems.
	    - Improved formatting of certain subsections.
	    - Fixed a number of typographical and grammatical errors.
	    - Eliminated a number of overfull and underfull `hbox' errors
	      reported by TeX.
	- Eric Sunshine fixed a few Texinfo mark-up errors in the `intro'
	  section of the tutorial.
20-Nov-2001
	- Small fix in csObject::SetName() with relation to the debugging
	  graph.
	- There is a problem with the lightmap and octree cache in that
	  it assumes uniqueness of the id for things. Unfortunatelly this
	  is not true when parts of the world are loaded dynamically and
	  the order of loading can no longer be guaranteed. To fix this
	  I added a new keyword to the loader called LMCACHE. With this
	  keyword you can give every mesh object a cache name. All lightmaps
	  and octree information will then be saved in a directory with
	  that name instead of the usual 'lm' dir. If you correctly give
	  every thing mesh object a unique LMCACHE name then lighting will
	  be correct even if the thing is loaded at another time later.
	  If the name is not given then the lightmap will be cached in
	  the default 'lm' dir. Note that in the future we might try
	  to use md5 to generate a unique name automatically from the
	  geometrical data of the mesh object.
	- partsys level in CVS now uses LMCACHE. This means you'll have to
	  recalculate lighting for this.
	- Fixed a bug in the engine. When adding polygons or curves the
	  bounding box of the thing would be invalid. Added code to
	  invalidate the bouding box so that it will be recalculated later.
	- Philip Wyett updated simplept and bumptest to preferred coding
	  techniques and changed some basics which look like an overflow
	  from copy and pasting from the simple1 app.
	- Matze added a small fix from Rene Dudfield to csparser plugin.
19-Nov-2001
	- Added iEngine::RemoveObject() which is a convenience function to
	  'remove' a CS object from the engine.	 This will not clear the object
	  but it will remove all references to that object that the engine
	  itself keeps.	 This function works for: iSector, iCollection,
	  iMeshWrapper, iMeshFactoryWrapper, iCameraPosition, iDynLight,
	  iMaterialWrapper, and iTextureWrapper.  In addition this function
	  also knows about iCurveTemplate and iPolyTxtPlane from the thing
	  environment and will be able to clean those up too.  This function
	  will also remove the object from the region it may be in.
	- Made csMaterial::SetTextureWrapper() safer by first
	  incrementing the new texture before decrementing the old one.
	  Did the same for csMaterialWrapper::SetMaterial() and
	  csMaterialWrapper::SetMaterialHandle(). Also did the same
	  for csTextureWrapper::SetTextureHandle().
	- Fixed a memory leak with textures. The texture which is associated
	  with a material had one ref too many.
	- Changed the behaviour of iRegion::FindBla() routines (i.e.
	  FindSector(), ...). These functions no longer increase the ref
	  count of the returned objects. This is an undesired behaviour
	  which caused a memory leak in some cases.
	- Fixed a problem in the thing loader which would not check
	  the current region to loads it's material.
	- Reverted the memory leak fix with textures. This was in fact not
	  a bug and my fix caused crashes.
	- Norman Kramer did the following:
	  This fix will actually make use of the replacements of general/*
	  in their respective subdirectories like unix/ etc. .
	  Problem was that sorting put the general directory in front of unix
	  directory for instance and if instpath.cpp (for example) is
	  requested to compile its taken from the general directory.
	  Note that this fix is considered a hack (by Eric (and me too - thats
	  why I consulted him first:))
	- Norman added unistd.h and CS_SYSDEF_PROVIDE_PATH, before it failed
	  compiling what noone noticed since it never was compiled due to the
	  cssys.mak problem.
	- res fixed errors in the AWS documentation he added yesterday.
18-Nov-2001
	- Philip Wyett did the following:
	  By popular demand...
	  This changes the outputted CS libs names under MSVC debug
	  builds adds a "_d" to indicate the lib is of a debug build. I.E. now
	  a debug built csengine lib will be named "libcsengine_d.lib",
	  however the release built lib will keep the name "libcsengine.lib"
	  this facilitates distinction between builds and allows project
	  developers to create one libs directory in which they can drop both
	  debug and release CS binary libs in without conflict.
	  Note: Project developers please remember to adjust the names of the
	  libs you are linking to in debug builds to account for this change,
	  but hey adding "_d" is no hardship. :-)
	- Matze made cs-config generation robust to wrong file attributes
	  (non-executable).
	- Matze also added a small robustness patch in addition to the patches
	  yesterday (aws).
	- res converted Christopher Nelson's AWS documentation to texinfo.
	- Martin Geisse fixed a circular reference between the map loader
	  and the syntax services plugin.
17-Nov-2001
	- Added some additional DG_DESCRIBE0 statements to some
	  constructors of engine objects in order to be able to do
	  better debugging using the csDebuggingGraph.
	- Made csDebuggingGraph a little bit more relaxed so that it
	  no longer requires object_reg to be non-NULL. If object_reg
	  is NULL it will simply do nothing.
	- Fixed a memory leak on dynamic and static lights in the object
	  iterator in the engine.
	- Fixed a significant memory leak on sectors. Every time a
	  mesh would move to a different sector a ref count would
	  be increased without it being decreased ever.
	- Added RemoveCurveTemplate() and RemovePolyTxtPlane() to
	  iThingEnvironment. The region code will now also correctly
	  clean up curve templates and polytxt planes from the thing
	  environment using these functions. Another memory leak
	  fixed :-)
	- Added the notion of types to the csDebuggingGraph tool.
	  This means that you can now also indicate the type of the
	  object in the graph. This is purely to make the dump
	  easier to read. Use DG_TYPE to set the type.
	- Added DG_TYPE to lots of common csObject's in the engine.
	- Reverted part of Martin's changes to csObject because
	  this causes problems in some cases. i.e. re-added ObjReleaseOld().
	- Matze fixed bad dllist usage in aws
	- Matze changes aws Skin language loading to use vfs
	- Martin Geisse did the following:
	    - Fixed a bug in csMovableSectorList where it would IncRef an
	      object that is not stored at all.
	    - Removed ObjReleaseOld and the special destructor behaviour
	      from csObject since it is no longer needed.
	    - Fixed an old bug in the constructors of csObject and
	      csConfigFile. When I changed these functions some time ago, I
	      made the wrong assumption that it is possible to call one
	      constructor from another one to handle common work. Instead,
	      this creates another instance of the class on the stack,
	      which is of course not the desired behaviour.
16-Nov-2001
	- Removed csDebuggingGraph::AddInterface() and instead added
	  a 'bool scf' parameter to AddObject().
	- Rewrote the graph debugging tool to also allow adding of links
	  between objects that don't exist (yet). Also added timestamp's
	  to object and link creation in order to better evaluate
	  strange situations like a link being created before some object
	  was added and so on.
	- Removed the 'exact' mode from the csDebuggingGraph. The mode
	  is now always exact.
	- Since the output from csDebuggingGraph is now a little bit more
	  complex here follows a little explanation:
	    R(0) 00A136D8(r1,t17) csObject(ps) (fil.cpp,111) #p=0 #c=97
	      C(20) 00A280C8(r5,t18) csObject(txt.jpg) (fil.cpp,111) #p=1 #c=0
		P(19) 00A136D8(r1,t17) csObject(ps) (REF)
	      C(23) 00A02190(r2,-t21) csObject(mat) (BAD LINK!)
	  Every line corresponds with an object. The first character is either
	  'R' (root), 'C' (child), or 'P' (parent) depending on the type
	  of link it is. The number directly after this type is the timestamp
	  when the link was created (not the object!).
	  After that follows the pointer to the object in hexadecimal notation.
	  Directly after this (between brackets) is the ref count 'r...' (only
	  for SCF objects) and the timestamp 't...' when the object was
	  created. If there is a '-' in front of the 't...' then the object
	  is currently deleted again.
	  After this follows the user-defined description of the object.
	  Then there are three possibilities:
	    - (REF): the object is a valid link but it already expanded
	      elsewhere in the graph. In that case you can find the
	      expansion of that object by looking for the pointer again.
	      In the example above (REF) occurs for the reference to the
	      parent since we are already in the expansion of the parent.
	    - (BAD LINK!) this is a link to an object that no longer exists.
	      This is an error situation and most often indicates a bug
	      in the code (or else a bug in the placement of the DG_...
	      macros).
	    - Otherwise the file and linenumber where the object was added
	      to the debug graph is shown and the number of parents and
	      children. The object is then expanded to show all its
	      parents and children.
	- Fixed a memory leak in the parsing of KEY statements in the loader.
	- Made output of csDebuggingGraph::Dump() a little nicer in the
	  case where you have a pointer back to a parent that is already
	  mentioned in this recursion level. In this case we simply print
	  out the pointer and the timestamp of the link and add '<-' to
	  indicate the information can be found upwards.
	- More cleanup of the output of csDebuggingGraph::Dump(). Added
	  curly brackets for the children to group children more clearly.
	- res fixed a stupid bug in proctex.h.
15-Nov-2001
	- Added DG_ADDI and csDebuggingGraph::AddInterface() with which you
	  can add an SCF interface (instance of iBase) to the debug graph.
	  This will make no difference except that when the graph is
	  dumped the ref-count will be shown.
	- Fixed a bad bug in csDebuggingGraph where it would fail to
	  properly unlink objects if objects were created and deleted
	  and happened to get the same pointer (which is not too unlikely).
	- Fixed a memory leak in csEngine::SelectRegion(). It did a new
	  csRegion and then added this region to the regions vector. This
	  made the ref count equal to 2 but it should be one as the only
	  ref is the one from the regions vector. So added an additional
	  DecRef().
	- Matze Braun changed cs-config to report errors on stderr.
14-Nov-2001
	- It is very hard to properly debug the huge graph or tree structures
	  that are used a lot in Crystal Space. Using 'printf' just doesn't
	  cut it (too much information) and a debugger is hardly better.
	  That's why a new static class is added (csDebuggingGraph) which
	  helps with debugging any kind of graph or tree. Using that class
	  you can build a debug-graph of any kind of pointer with description.
	  Later you can dump the resulting graph given a good idea on how
	  everything is linked together. To use it you basically use macros
	  like this:
	    DG_ADD (object_reg, pointer1, "Object 1");
	    DG_ADD (object_reg, pointer2, "Object 2");
	    DG_ADD (object_reg, pointer3, "Object 3");
	    DG_LINK (object_reg, pointer1, pointer2);
	    DG_ADDCHILD (object_reg, pointer2, pointer3);
	    DG_REM (object_reg, pointer2);
	    csDebuggingGraph::Dump (object_reg);
	  You can issue such commands in the constructors/destructors
	  of the objects you want to debug.
	  Note that this tool has two modes. With exact mode (default)
	  the graph will exactly follow the commands that are issued. This
	  means that if you remove an object (DG_REM) without removing
	  links to it (DG_REMCHILD, DG_REMPARENT, ...) then the graph will
	  be invalid and the Dump will show the invalid links. This is
	  VERY useful for debugging.
	  With non-exact mode you can let this graph do the maintenance
	  of removing dead links on its own. When you remove an object
	  in this scenario all links (parent or child) to that object will
	  be removed automatically. This means that the debug graph cannot
	  get invalid in this scenario (although the real graph you are
	  debugging can).
	- Added a new command 'debuggraph' to bugplug. This will call
	  csDebuggingGraph::Dump() so you can use it to dump the graph
	  that is in memory. It is assigned to the ctrl-g key.
	- WARNING! Dirty hack ahead!
	  To make the new csDebuggingGraph debugging tool work nicely in
	  all places (and especially the place where I plan to use it:
	  csObject) I need a global pointer to the object registry (csObject
	  has no access to the object registry). I see no other solution at
	  this moment then to add this global pointer to the only other
	  global object we already have: iSCF::SCF. This is of course very
	  very dirty so I only make this pointer available in debug mode.
	  This means that it is not possible to misuse this pointer because
	  it will not be there in release/optimize mode. To initialize
	  this pointer you must call csDebuggingGraph::SetupGraph() with
	  a correct object registry. Later on you can then use
	  csDebuggingGraph methods with a NULL object_reg pointer in which
	  case it will get it from iSCF::SCF.
	  I also added new DB_... macros which don't have an object_reg
	  pointer. These macros will only work in debug mode. In optimize
	  or release mode they will produce no code.
	- Added the ability to attach a new description to an object
	  in the debug graph.
	- Fixed a few bad bugs in csDebuggingGraph which actually prevented
	  it from working properly with high number of objects (> 100).
	- Improved output of csDebuggingGraph::Dump() a little.
	- Relaxed the restriction in RemoveParent() and RemoveChild() that
	  both objects had to be present in the graph.
	- Added a new define CS_USE_GRAPHDEBUG which is disabled by default
	  and which you can enable in include/csutil/debug.h. This define
	  enables the DG_... macros. Otherwise these macros will do
	  nothing.
	- Added some DG_... defines to csObject code in an effort to find
	  a bug that is pestering CEL.
	- Eric Sunshine fixed snapshot.py so that its removefile() function
	  correctly removes symbolic links even if the link is invalid.
	- Fixed a bug in csDebuggingGraph so that it is also able to
	  remove links between two objects if one or both of the objects are
	  already deleted. This fixes a number of invalid bad links I got
	  during debugging csObject.
	- res added to vfs:
	    - Recursive resolution of variables.
	    - Support for platform-specific built-in variables.
13-Nov-2001
	- Small comment fix in vfs.h.
	- Fixed a bad bug in csObject destructor. It appears that it could
	  happen that a given object was destructed twice! This is caused
	  by a weird construct around ObjReleaseOld(). To prevent deletion
	  I had to add an additional IncRef() to the object being deleted.
	  See the comment with ObjReleaseOld() for more detailed information.
	- Matze made cs-config to fail if it couldn't detect CS.
12-Nov-2001
	- Fixed a MAJOR bug in the cslua and mp3 makefiles!!! This bug
	  caused 'make' to show the description of both plugins
	  misaligned compared to all the others! Lucky I catched this bug
	  in time before it did any major harm.
11-Nov-2001
	- Wouter Wijngaards gave stars mesh a code filler. It works but it
	  is extremely slow. It does use boxes to clip away stars, and
	  seeding to no avail.
	- Added a starfield to csdemo. It looks mer like space dust that
	  is flying by the camera. Good framerates by restricting the maximum
	  distance of visibility and density.
10-Nov-2001
	- Wouter Wijngaards added documentation to the cs-config HOWTO for
	  the new plugin-capable template makefile. Also fixed the template
	  makefile depend target.
	- res added a request to canvas to perform extensionk
	  'configureopengl'.
9-Nov-2001
	- Reverted the SCF changes made to scfFactory yesterday since they
	  completely break CS. The problem seems to be when attempting
	  to load plugins that are not there. This seems to crash SCF now
	  while in the past it only returned NULL to the entity attempting
	  the load. Since I don't fully understand neither the original
	  nor the new code I decided to revert the changes for now.
	- Small cosmetic change to csEngine::SelectRegion().
	- Added iLoader::FindMaterial() and iLoader::FindSector(). These
	  functions are relevant while busy loading a world. They correctly
	  take account of the value of ResolveCurrentRegion which is given
	  to iLoader::LoadMapFile().
	- Modified the functions in the syntax loader services to correctly
	  use the new functions in iLoader. This makes region loading useful
	  again. The presence of iLoader is still optional though. If the
	  loader cannot be found in the registry the syntax services will
	  simply use the engine to find the material (ignoring
	  region information).
	- Fixed a bug in csparser with regards to loading a world in
	  a region. The sector resolver (for finding out to which sector
	  a portal goes) was finding any sector in the region with the
	  given name. The problem is that this also finds the dummy
	  sectors that are created in the loading process and which are not
	  linked to the engine (but they are in the region). Solved this
	  bug by manually looping over all sectors in the engine and
	  seeing if they have the right name and are in the right sector.
	  That will make sure we only find sectors that are linked to the
	  engine AND are in the region.
	- Eric Sunshine fixed a small error in winconf.bat where it was not
	  properly making use of the result of its Bash quote-test.  (Was
	  invoking the wrong filename.)
	- Eric Sunshine reverted Jorrit's reversion to Eric's changes to SCF.
	  Also, fixed the bug which was causing SCF to crash when a plugin
	  module failed to load (if, for example, it didn't exist).
	- Eric Sunshine reverted res' <resqu@gmx.ch> changes to
	  CreateEnvironment() and `initapp' for a couple reasons.  First, his
	  changes were not sufficiently generalized for applications which
	  perform their own initialization -- those that don't invoke
	  CreateEnvironment() -- to benefit from them.	Second, his changes
	  would leak a reference to iObjectRegistry if csPlatformStartup()
	  failed.  Instead, Eric merged CreateCommandLineParser() and
	  SetupCommandLineParser() the correct way; such that the result is
	  sufficiently generalized that it is as useful for applications which
	  do not use the CreateEnvironment() convenience function, as it is for
	  those which do.
	- Eric Sunshine fixed csdemo so that it no longer requires that the
	  "simple" console be loaded; since it wasn't making use of the console
	  anyhow.
	- Optimized __calc_area in csgeom (used for lighting). An optimization
	  of this routine was suggested by Laurent Delepine but his
	  optimization was not correct. However, his code triggered several
	  optimization ideas which were easy to implement and give a
	  small (but noticable) speed improvement.
	- Eric Sunshine made the following repairs to F. Richer's modification
	  to the OpenGL renderer to detect hardware and use configuration
	  settings appropriate to that hardware:
	    - When it loads a hardware-specific configuration file, it assigns
	      a higher priority to that file than the priority assigned to the
	      "default" OpenGL settings.  This ensures that the
	      hardware-specific settings will take precedence over the default
	      settings, via a supported mechanism (rather than relying upon an
	      implementation detail of the configuration class).
	    - Removed the Win32-specific hack which was added to the OpenGL
	      renderer and moved it to the Win32 OpenGL canvas where it
	      belongs.	(Please, let's try to keep platform-specific
	      specializations out of the platform-independent renderers.)
	    - Merged CS/data/config/opengl/_default.cfg back into
	      CS/data/config/opengl.cfg.  Since hardware-specific configuration
	      files are assigned a higher priority than
	      CS/data/config/opengl.cfg, it is no longer necessary for the
	      _default.cfg information to reside in a separate file.
	    - Moved CS/data/config/opengl/3dfx.cfg to
	      CS/data/config/gl3dfx.cfg.
	    - Merged the contents of CS/data/config/opengl/opengl.cfg into
	      CS/data/config/opengl.cfg.  This file contained the
	      "Video.OpenGL.Config" keys which are used to make
	      hardware-specific configuration selection.  However, there is no
	      reason for this information to be in a separate file, so it has
	      been merged into the generic OpenGL configuration file.
	    - Eliminated the CS/data/opengl/*.cfg files and subdirectory.
	      Unfortunately, the makefile's `install' mechanism is not
	      currently capable of reproducing subdirectories of
	      CS/data/config.  This directory, and these files are no longer
	      needed, anyhow, following my changes.
	    - Eliminated several memory leaks.
	  Be forewarned that, as usual, my changes to the OpenGL renderer and
	  canvas are untested since I do not have access to OpenGL hardware.
	- Eric Sunshine fixed csEventQueue so that it no longer leaks its
	  "default" iEventOutlet.  This problem was pointed out by Jorge
	  Acereda Macia <drslump@ono.com>.
	- Fixed a bug in OpenGL renderer in combination with the new use
	  of csStrVector. When pushing a new string on the vector you MUST
	  allocate a copy because csStrVector doesn't do that automatically.
	  However csStrVector will delete the string at destruction time
	  so it was actually deleting a string which was already deleted
	  because it belonged to a csString that was previously destructed.
8-Nov-2001
	- Jorge Acereda fixed a leak in ieplex.cpp where the result of a
	  SCF::QueryClassList() wasn't DecRef()ed.
	- Eric Sunshine fixed a problem in which the `testecho' target from
	  CS/libs/cssys/win32/winconf.mak would be seen by GNU `make' before
	  any other targets, and thus become the "default" target.  Typically,
	  the `help' target from CS/Makefile is supposed to be the default
	  target, but `testecho' was subverting it.
	- Eric Sunshine fixed several modules which were leaking iEventOutlets
	  which they had created.
	- Eric Sunshine made scfFactory's handling of reference counts for
	  scfSharedLibrary objects more sane (and less insane).	 Also fixed a
	  bug where scfFactory was decrementing the reference count of the
	  scfSharedLibrary one too many times.
	- res moved the windows icon in apps/win32 to libs/cssys/win32/rsrc.
	- res removed csInitializer::SetupCommandLineParser() and added
	  new parameters for csInitializer::CreateEnvironment() (argc and
	  argv).
	- res added a facility to the OpenGL renderer to detect different
	  hardware and use different configs.
	- res fixed the windows port so that it uses the commandline parser
	  to read -noconsole option.
7-Nov-2001
	- Eric Sunshine fixed simpcon.cpp so that it now uses an octal
	  character constant for cursor assignment, rather than using an 8-bit
	  character, since not all compilers are capable of correctly dealing
	  with 8-bit charactes.
	- Reverted the code from res to read the commandline in windows
	  port. This is not the right way to do this. The best way is to
	  do this through the commandline parser. If needed this will have
	  to be delayed until the commandline parser IS ready.
	- Eric Sunshine made the following changes to the standard input
	  drivers:
	    - Eliminated the clever but confusing synthetic-embedded
	      iEventHandler object from csInputDriver.	Replaced with true SCF
	      embedded iEventHandler objects in csKeyboardDriver,
	      csMouseDriver, and csJoystickDriver.  Though this approach is
	      more verbose and involves a bit more copy/paste code, it is
	      simpler, more robust, easier to understand, and its correctness
	      is readily verifiable.
	    - Fixed a problem where, upon creation, each of the input drivers
	      had a reference count of 2, rather than 1.  This problem was a
	      direct result of the manner in which the pseudo-embedded
	      iEventHandler object was synthesized.  Thanks go to Jorge Acereda
	      Macia <drslump@ono.com> for notifying me that the drivers
	      instances were being leaked.
	    - csInputDriver no longer caches a pointer to the shared event
	      queue.  Previously, it was trying to cache this pointer without
	      calling IncRef() on it (to avoid a circular reference), but this
	      was a very dangerous thing to do, so now it doesn't even bother
	      with caching the pointer.	 Unfortunately, this means that access
	      to the event queue from the csInputDriver subclasses will be very
	      slightly slower, but it will also now be completely safe.
	    - Fixed several potentially nasty, nasty, nasty bugs which were
	      introduced into the input drivers at the time that the behavior
	      of CS_QUERY_REGISTRY() was changed.  Several places in the code
	      were accessing SCF objects _after_ DecRef() had been called.
	      This is a big No-No.
	- Matze fixed config scripts to remove temp files on cygwin too.
	- Matze fixed cs-config issues on older shells.
	- Matze fixed cygwin port and csFileDialog.
	- Christopher Nelson did the following:
	    - Fixed some bugs that were causing very busy or detailed
	      textures to look bad on windows because they weren't being
	      aligned properly. Everything now looks much better.
	    - Made lots of bug fixes (redraw, resize, etc.)
	    - Fixed window frame so that it's better looking now when textured.
	    - Made some changes to the defintions file and texture file to
	      help me fix alignment and visual bugs.
6-Nov-2001
	- Eric Sunshine fixed the derivation of Win32Assistant.	 It was
	  incorrectly inheriting iEventPlug and iEventHandler privately, rather
	  than publicly.  I believe that this problem was responsible for the
	  compilation error reported by C++Builder5 as mentioned on the mailing
	  list by Stephen Crocker <melkior13@hotmail.com>.
	- Eric Sunshine turned the CS_EXTENSIVE_MEMDEBUG flag into a makefile
	  "sticky" option.  Previously, this option could only be enabled or
	  disabled by editing a header file.  Now, however, the option can be
	  enabled or disabled via the makefiles.  There are two ways to
	  accomplish this.  1) Edit user.mak and set the EXTENSIVE_MEMDEBUG
	  variable accordingly.	 2) Set the value of EXTENSIVE_MEMDEBUG from
	  the command-line when configuring the makefiles.  For example:
	  "make EXTENSIVE_MEMDEBUG=yes linux".	CS_EXTENSIVE_MEMDEBUG is now
	  disabled by default, whereas in the past it was enabled by default.
	  Therefore, if you wish to use utilize the extensive memory debugger,
	  you must now explicitly enable it.  The Apple/NeXT and BeOS makefiles
	  automatically override the setting of EXTENSIVE_MEMDEBUG in order to
	  disable it, since the extensive memory debugger's overloaded `new'
	  operators are incompatible with those platforms.
	- Eric Sunshine stripped the "i" prefix off of the following filenames
	  in the CS/include/iaws directory: iaws.h, iawsdefs.h, iawsparm.h
	- Eric Sunshine continued his crusade to eliminate monolithicism from
	  the project, and to promote modularity.  The following platform- and
	  domain-specific files from the CS/bin directory were relocated:
	    chkxfree.sh	  --> libs/cssys/unix/chkxfree.sh
	    cygwinconf.sh --> libs/cssys/win32/cygconf.sh
	    dosconf.bat	  --> libs/cssys/djgpp/dosconf.bat
	    dosconf.var	  --> libs/cssys/djgpp/dosconf.var
	    dosupd.bat	  --> libs/cssys/djgpp/dosupd.bat
	    dosupd.bat	  --> libs/cssys/win32/winupd.bat
	    nodefix.pl	  --> docs/support/nodefix.pl
	    os2conf.cmd	  --> libs/cssys/os2/os2conf.cmd
	    os2link.cmd	  --> libs/cssys/os2/os2link.cmd
	    os2upd.cmd	  --> libs/cssys/os2/os2upd.cmd
	    texi2html	  --> docs/support/texi2html
	    unixconf.sh	  --> libs/cssys/unix/unixconf.sh
	    win32conf.bat --> libs/cssys/win32/winconf.bat
	    win32conf.mak --> libs/cssys/win32/winconf.mak
	    win32conf.var --> libs/cssys/win32/winconf.var
	- Fixed a problem in mingw config.
	- Jorge Acereda added a missing DecRef() in initapp.cpp.
	- Eric Sunshine made the following changes to cs-config.temppost which
	  allow it to work with older Bourne shells:
	    - Rewrote the `while' loop in addlib() so that it no longer relies
	      upon the negation operator (`!') since that operator is not
	      understood by older shells.
	    - Rewrote argument handling in the functions so that they work even
	      with older shells which do not scope input arguments on a
	      per-function basis.  Specifically, with older shells, variables
	      such as $@, $*, $1, $2, etc. are _always_ global; so if one
	      function invokes another function, the input arguments of the
	      first function get overwritten.  Therefore, functions must cache
	      input arguments before invoking other functions, assuming that
	      they want to continue referring to those arguments.
	- Martin Geisse did the following:
	    - Added RelinkMesh() to iSector.
	    - Added GetFactory(), MarkVisible(), MarkInvisible() and
	      IsVisible() to csMeshWrapper.
	    - Removed the unused and obviously non-working Rotate() and
	      ScaleBy() methods from csMeshWrapper.
	    - Removed the custom DecRef implementation from csMeshWrapper.
	    - Added SetParentContainer() to csMeshFactoryWrapper.
	    - Removed GetPrivateObject() from csMeshFactoryWrapper.
	    - Cleaned the code, mainly in csMeshList (and subclasses),
	      csMeshWrapper, csMeshFactoryList (and subclasses) and
	      csMeshFactoryWrapper.
	- Christopher Nelson did the following:
	    - Fixed hierarchical drawing code so that it properly offsets
	      children with children.
	    - Added another nested level to test children with children.
	    - Added image drawing capabilities to the list box. This is
	      currently untested, but it should work reasonably well. It's
	      supposed to also check to see if there's in case they're both
	      aligned the same, that way they don't write each other badly.
	      Whether or not this works correctly is unknown at this time.
	      Note: although items and images can be independently aligned in
	      a single item, and they can coexist with the tree boxes in the
	      same column with alignment, it is recommended that you not try
	      to right or center align images and text if they will be in the
	      zeroth column of a tree control. It won't look right, and
	      trying to make it look right is silly, since the tree controls
	      are all left aligned and center or right aligning them doesn't
	      make any sense at all.
	    - Made listbox now understand mouse clicks. For the moment you can
	      only collapse and expand the tree, but I will next attempt the
	      state buttons. This is also the code that will eventually allow
	      lines to be selected.  It works by registering hotspots during
	      the draw (since drawing is recursive), that way you don't have
	      to worry about calculating offsets and depths and worrying
	      about height stuff.
	    - Made a couple of fixes to the listbox hotspot code.
	    - Fixed the expand and collapse images to look prettier.
	    - Made state items work correctly. They now switch on and off,
	      and group items also work correctly. As per my standards,
	      grouping is controled by container level. Therefore, all
	      containers on the same level will be grouped together.
	    - Made selection work. The listbox is now almost 100% functional.
	      Visually I haven't tested images, I also haven't tested column
	      header images. Other than that, I think that it's visually
	      complete.	 On the functional side, I have to add in two actions:
		"GetSelectedItem" that lets you retrieve the currently
		selected item's properties.
		Second, "GetFirstItem" and "GetNextItem" which let you iterate
		through the whole list.
	      "GetFirstItem" and "GetNextItem" will let you specify a boolean
	      parameter "IterateWholeList". If you specify that as true,
	      then the iterator mechanism will descend into all branches.
	      Otherwise, it will only descend into visible branches.
	- res fixed win32 port so that disabling console via commandline
	  works now. Moved csSleep() to timing32.cpp.
5-Nov-2001
	- Fixed a bug in bin/chkheadr.sh which caused that test to always
	  fail with the result that CS_USE_FAKE_SOCKLEN_TYPE would always
	  be set to 'yes'. Thanks to Markus Korth for finding and fixing
	  this bug.
	- Fixed a bug in spr3d->SetAction(). This function will now
	  correctly reset the 'last_time' for frame interpolation so that
	  frame interpolation works nicely when SetAction() is done.
	- Fixed iSector::HitBeam() and IntersectSegment() routines so that
	  they ignore invisible meshes (CS_ENTITY_INVISIBLE) flag.
	- Eric Sunshine fixed a problem which affected several model- and
	  sprite-related modules where memory allocated with malloc() was being
	  destroyed via delete[].  This problem occurred in a number of places
	  where csDataBuffer() was constructed from the return value of
	  csString::Detach().
	- Eric Sunshine applied a patch to csInitializer::InitializeSCF() from
	  resqu@gmx.ch.	 Eric also made some modifications to the patch to make
	  it more robust.  This patch causes InitializeSCF() to look for *.scf
	  files in the installation directory (alongside scf.cfg).  These files
	  can be used to augment the information contained in scf.cfg without
	  actually having to edit scf.cfg.  *NOTE* This patch is only a
	  temporary measure to address the nasty monolithic nature of scf.cfg.
	  Plans are already laid, for the near future, for eliminating scf.cfg
	  entirely, thus this patch will cease to exist at that time.
	- Matze Braun did some small cleanup of cs-config.
	- Wouter Wijngaards modified cs-config to work with mingw and cygwin
	  ports.
	- Matze Braun fixed a bug in csFileDialog for DOS/Win like platforms.
	- Jorge Acereda fixed a memory leak with window title in
	  xwindow.cpp.
	- Christopher Nelson did the following:
	    - Moved aws include files to include/iaws.
	    - Updated the csRectRegion code to fix the bug noticed by Mike
	      Handverger. Moved the ++j out of the loop code since it needs to
	      be incremented irregardless of whether there are free
	      fragments. If it doesn't find a free one, those fragments are
	      discarded.
	    - Fixed a compilation bug that got introduced.
	    - Fixed dumb error on his part when he introduced awsParmList.
	      Forgot that it would have to be derived from iBase so that users
	      could get to it in other modules. This class is now
	      instantiatable from the WindowManager using CreateParmList.
	    - Fixed more dumb errors introduced by this change.
	    - Fixed awstest to work properly with flexible parameter lists.
	    - Fixed more compile errors introduced by iAwsParmList.
	    - Did lots of work on the listbox. It now can actually draw
	      headers and non-hierarchical tree items. It doesn't know how to
	      draw group buttons yet, nor can it draw images.
	    - Modified parser so that it works with attributes with numbers
	      in them.
	    - Added Clear() method to Flexible Parameter List.
	    - Updated test app so that it adds list items.
	    - Did some more work on the list box. It now understands group
	      buttons and can draw items hierarchically. The hierarchical
	      drawing needs some work still, but overall it's pretty decent.
	    - Fixed the little tree-vline image to make it look right.
	    - Fixed tree code so that it now draws properly and doesn't leave
	      little danglies at the end of a child list.
	- res corrected wrong interface in iaws.h.
	- Matze Braun made nasm test stronger again - older nasms which
	  didn't work with CS passed before.
4-Nov-2001
	- Matze Braun cleaned up config scripts for Unix and cygwin.
	- Eric Sunshine made the following changes:
	    - Patched the makefile configuration phase for the Apple/NeXT ports
	      so that it once again works following the recent decomposition of
	      unixconf.sh and modification of the other configuration scripts.
	    - Fixed comptest.sh so that it no longer makes the invalid
	      assumption that all C++ and C compilers respond to --version.
	      Only GCC is known, for certain, to understand --version.	Other
	      compilers, such as the native Sun compiler, do not recognize this
	      option, therefore this test was inappropriate.
	    - Made the BeOS port a bit more robust for the makefile
	      configuration phase.  No longer assumes that the scripts in the
	      CS/bin directory have execute-permission.
	- res fixed demo.mak which he modified yesterday.
	- Wouter Wijngaards did the following with regards to cs-config:
	    - Added --makevars option to cs-config, this will echo a portion of
	      a makefile with settings that the user can use. With these
	      settings more platforms should be supported by the cs-config
	      makefiles, such as linux, mingw, next, without making any
	      changes.
	    - Updated the Template makefile in scripts/cs-config so that it
	      supports compiling shared plugins as well.
	    - Small fixes to the template makefile as well.
	    - Added variables to cygwin and win32gcc ports that communicate
	      their flavors of shared plugin linking to be used cs-config
	      creation.
3-Nov-2001
	- Jorge Acereda changed csLoadLibrary() in unix.cpp to call dlopen()
	  always, so that csPrintLibraryError() can get the correct error
	  message with dlerror().  Also fixed an unaccuracy in csGetTicks() and
	  changed it to use sysconf() correctly.
	- Martin Geisse did the following:
	    - Simplified csSector::Draw() a lot by removing duplicate code.
	    - Split csLightList into two parts. There is now a basic light
	      list, called csLightList, which is simply a vector with an SCF
	      interface. csSector uses csSectorLightList, a subclass of
	      csLightList, which adds sector-specific functionality.
	    - Continued to cleanup the sector code:
		- Removed FindLight (x,y,z,r) since it was not clear what
		  exactly the function does, nor was it used anywhere.
		- Moved FindLight (id) to iLightList.
		- The culler mesh is now stored as an iMeshWrapper.
	    - Cosmetic cleanup work.
	- res reports that disabling windows mouse cursors works now.
	- res added support for native console in windows port and
	  also added application-specific icon support (apps/win32).
	- Matze Braun did a small viewmesh fix/cleanup.
2-Nov-2001
	- Matze Braun reports: The new viewmesh is ready: you can now select
	  state and rotate around and the possibility to load material/texture
	  libs and meshes with GUI.
	- Christopher Nelson did the following:
	    - Fixed a couple of bugs in aws listbox.
	    - Continued work on the uberListBox.
	- Martin Geisse did the following:
	    - Fixed some problems with CS_DECLARE_OBJECT_POOL.
	    - Reimplemented csLightPatchPool with the above macro.
	    - Moved priority queue functionality out of csSector and into its
	      own class.
	    - Fixed a bug that I introduced in my latest changes and continued
	      to cleanup the sector code.
1-Nov-2001
	- Fixed a bug in csRenderView::ClipBSphere.  The bug was actually a
	  false CS_ASSERT based on a wrong assumption that TestBSphere() is
	  perfect which it isn't.
	- Changed one of csIntersect3::Plane() to return true/false on
	  intersection.
	- Eric Sunshine applied a very obvious optimization to csGetTicks() in
	  CS/libs/cssys/unix/utiming.cpp.  This optimization was modeled
	  loosely after a suggestion made by Rene Dudfield
	  <illumen@yahoo.com.au> to cache the value returned by __sysconf(2),
	  rather than invoking that expensive function each time csGetTicks()
	  is called.  Note that this modification is untested since I don't
	  have access to GCC3.
	- Luca Pancallo improved 3ds2lev so that textures are now correctly
	  uv mapped when the -tl option is used.
	- Matze Braun fixed csFileDialog again.
	- Matze also did various fixes to static linking and static install.
	- Matze fixed a bug in csApp::Printf.
	- Matze added menu for state selection to viewmesh.
	- Martin Geisse did the following:
	    - Added Clone() to iCamera, iCameraPosition, iMaterialWrapper and
	      iTextureWrapper. This is the interface version of a copy
	      constructor. It creates a clone of the object, which contains
	      the same characteristics and has all original child objects
	      from the csObject hierarchy linked to it. However, it is not
	      added to the csObject parent nor to any engine object list
	      automatically.
	    - Added a copy constructor to csObject.
	    - Added GetHit() and a 'const' GetTransform() to iCamera.
	    - Added missing comments to iCameraPosition.
	    - Continued to remove GetPrivateObject() from engine interfaces.
	    - Performed interface cleanup in iCameraPosition.
	    - Added missing comments to iCamera, iCameraPosition, csBox2
	      and csBox3.
	- Christopher Nelson did the following:
	    - Added new component, "List Box". This component is a work in
	      progress, but it supports:
		- Multicolumn lists (with headers)
		- Tree-like lists (hierarchical)
		- Aligned images and or text in every column and the header
		- Stateful items (check boxes/radio buttons)
		- Fully skinnable (background, header backgrounds,
		  highlights, stateful images, tree boxes and lines)
	    - Created a new csVector subclass for the listbox so that rows
	      can be sorted by column, and can be quickly searched.
31-Oct-2001
	- Removed the windows pen support added by res.	 I don't have the
	  needed include files on mingw.
	- Matze added VFS support to csFileDialog and also did some small
	  changes to viewmesh.
	- res fixed pen support in windows port.
	- res fixed csFileDialog so that it compiles on MSVC.
	- Jorge Acereda fixed infinite renderer. It failed to overload
	  iGraphics2D::Write() because it had a different argument list.
	- Martin Geisse removed GetPrivateObject() from iCollection.
	- Norman Kramer defined GLX_GLXEXT_PROTOTYPES to please MESA 4.0.
30-Oct-2001
	- Matze changed code structure of viewmesh a bit. I'll add csws
	  interfaces tomorrow.
	- Jorge Acereda fixed wrong NASMFLAGS.SYSTEM for NetBSD.
	- Jorge also fixed newlines (unix format) in viewmesh.*.
	- Jorge did some minor symbol name fixes, commited just to test if
	  my problems with CVS have vanished.
	- Wouter Wijngaards added some debug code to iso engine.
	- Christopher Nelson did the following:
	    - Missed awscmdbt.h when I was moving stuff back to the private
	      directory.
	    - Fixed some fragmentation rule errors.
	    - Fixed the exclude code so that it works correctly.
	    - Fixed a bug in DeleteRect that would cause it not to move
	      stuff properly.
	    - Updated awsWindow to use a more optimal redraw method. Since
	      windows are always containers, they now maintain a csRectRegion
	      of areas where it should draw. The entire frame is included,
	      and then all child components are excluded. It doesn't attempt
	      to recurse children because all children are contained inside
	      their parents. This should reduce overdraw by quite a lot and
	      make full screen windows much more optimal.
	    - Add Flags(), SetFlag(), and ClearFlag() to the component
	      definition. This lets me extend behavior without always having
	      to modify the interface. The hidden flag is now embedded into
	      the flags dword.
	    - Components which expect the parent window to erase them before
	      each redraw can now call set the "AWSF_CMP_ALWAYSERASE" flag.
	    - Fixed a few small bugs here and there in csrectrg.cpp.
	    - New header iawsdefs.h.
	- Martin Geisse removed UnregisterTexture() and UnregisterMaterial()
	  from iGraphics3D. To unregister a texture or material, all
	  references to the handle should be released. This behaviour was
	  already assumed by all renderers and other code, but not yet
	  reflected in the interface functions and comments.
	- Martin Geisse added csRegionList and iRegionList. It is now possible
	  to access the regions in the engine as such a list.
	- Martin added an 'applicationID' parameter to SetupConfigManager().
	  This parameter is used for the application ID, unless overridden by
	  the application's config file.
	- res added mouse cursors: cross, pen. Windows mouse cursors
	  can now be turned off via Video.SystemMouseCursor.
	- Philip Wyett did some quick compile fixes on the changes from res.
29-Oct-2001
	- Eric Sunshine augmented the makefile configuration procedure for the
	  Apple/NeXT ports so that they work even if executable permission has
	  been lost on the scripts in CS/bin.  (Unfortunately, this fix is too
	  late for the 0.90 package in which none of the scripts in CS/bin had
	  executable permission.)
	- Christopher Nelson did the following:
	    - Added "Check Box", trivial modification from RadioButton.
	    - Added component into the common components automatic register.
	    - Added new container "Group Frame".
	    - Container can have several border types and a caption:
		% "gfsBump", sort of a bump border, goes up and down.
		% "gfsRaised", "gfsSunken", just like a button being up and
		  down.
		% "gfsSimple", A simple black border.
	    - Updated test definition to show new group frame and how it
	      acts with radio buttons.
	- res fixed a bug in CSWS: if button dismisses parent, command
	   isn't send (to parent, causing crash).
28-Oct-2001
	- res fixed map2cs so that a proper message is given when a token
	  is too long (instead of crash). Texture names with special chars
	  (like ~, + in half-life) are now corrected so CS parser will
	  recognize string.
	- res fixed some of the OpenGL 2D routines so that they properly
	  restore disabled states.
	- res also fixed wrong screen resolution on voodoo2 (openglwin).
	- res fixed a crash in 8 bit mode with ddraw canvas.
27-Oct-2001
	- Markus Korth <mkorth@military.de> fixed a bug with
	  unixconf.sh which would use -mcpu=486 instead of -mcpu=i486.
	- Fixed the link to cstex_1.zip in documentatoin to point to the
	  new location at:
	    sunsite.dk/projects/crystal/support/map2cs/cstex_1.zip.
26-Oct-2001
	- Jorge Acereda fixed warning introduced in his latest fix.
	- Philip Wyett added private function to openglwin canvas for restoring
	  display mode. Also swapped round so context is deleted before it
	  is made current which is the correct way of performing the
	  destruction.
	- Christopher Nelson did the following:
	    - Fixed include error in awsecomp.h pointed out by Eric.
	    - Added toggling capability to Command Button via attribute
	      "Toggle". This lets a command button act just like a toolbar
	      button: staying pushed down when clicked, and then staying
	      unpushed when clicked again.
	    - Added "State" property to command button to find out whether
	      a button is pushed or not. This is mostly only useful for
	      toggle buttons.
	    - Moving files back around so that 'private' header files can't
	      be included into external projects.
	    - Fixed all the files to not include out of 'aws/' now.
	    - Created new component "Radio Button".
	    - Added this component to the window manager.
	    - Notes: As with normal radio buttons, these buttons are one
	      on/rest off items. This was accomplished by creating a new event
	      called GroupOff and overriding handle event so that it would
	      turn off this component when receiving that event.
	    - New definition of evdefs.h.
	    - Added awsdef.zip.
	    - Added another attribute to "Radio Button": this component can
	      now be aligned to the right or to the left of it's bounding
	      box. Also properly truncates it's caption if the text is too
	      long.
	    - Fixed small bug with command button.
	    - Added GroupClear functionality to the command button so that it
	      can properly be used for toolbars now. Push buttons in the
	      toggle mode have one extra ability over radio buttons: all
	      buttons can be deselected. This is NOT the case with Radio
	      Buttons. I intend to have an additional attribute called
	      AllowAllUp that will disable this ability.
	- Norman Kramer fixes compile problems with versions of mesa that
	  declare GLenum as an enum (later versions simply typedef it as an
	  int).
	- Norman Kramer changed inclusion of freetype to be loaded as
	  freetype/freetype.h.
	- Philip Wyett removed the no longer existant winhelper.h from the
	  MSVC project file.
	- Philip Wyett updated documentation to new version of msvc_libs for
	  cvs code. This adjusts dirs to bring into line with Norman Kramer's
	  Freetype change.
	  The new version of msvc_libs can be obtaine via:
	    ftp://ftp.sunsite.dk/projects/crystal/support/win32/
	    msvc_libs_0.91a.zip
	  Note: This version is NOT to be used with CS 0.90 release.
25-Oct-2001
	- Jorge Acereda fixed coredumps when passing options to the
	  software renderer.
	- Christopher Nelson did the following:
	    - Fixed textbox so that it has a cursor now (Non flashing).
	    - Updated the event handling system so that it properly delivers
	      messages only to the component that has the keyboard focus.
	    - Keyboard focus now properly sends out gain/lost focus events.
	    - Added csevGainFocus and csevLostFocus to the evdefs.h file.
	    - Added a check so that, if the mous is clicked on a component,
	      that component receives the keyboard focus. I may eventually
	      extend this to add the normal tabbing behavior, but that will
	      require a slight retrofit of existing component architecture.
	    - Implemented "disallow" and masking.
	    - Fixed small bug regarding click focus.
	    - Updated awstest to show a text box with masking on. Updated
	      previous textbox to disallow numbers and spaces.
	    - Updated definition of a pseudo-login session in awstest.
	    - Fixed a minor bug in focus-change order.
	    - Added HideWindow action.
	    - Fixed bug where hidden windows still received events.
	    - Made the test a little more interesting and useful by first
	      displaying a login window, then demonstrating how you can make
	      a signal do something, hide the source window, and then show
	      another window. This uses static member functions, but you
	      could do something similiar with normal functions and a struct
	      or something.
	    - Added new attribute "Align" to labels. Now they can be aligned
	      left, right, or centered. Also, the text will be clipped if
	      it's too long to display.
	    - Fixed small bug in window that was forgetting to get the title.
	    - Added Title line to awstest to make window be titled.
	    - Fixed possible bug in component that could make it crash if the
	      user called HideWindow action on a window.
	    - Fixed awsWindow so that titles are clipped to the frame.
24-Oct-2001
	- Bumped up development version of CS to 0.91.
	- Added iSectorIterator interface to iterate over sectors.
	- csSectorIt and csObjectIt are now private classes for csengine
	  and they implement iSectorIterator and the already existing
	  iObjectIterator.
	- Changed GetNearbySectors() and GetNearbyObjects() to return
	  the iterator and work with SCF objects. Also added both functions
	  to iEngine.
	- Also added GetNearbyLights() to iEngine and changed prototype
	  to work with SCF interfaces.
	- Christopher Nelson did the following:
	    - Fixed bug where hidden windows were still displayed.
	    - Added a close button to awstest that hooks into the standard
	      sink and makes the main window go away.
	    - Modified test definitions to include label.
	    - Added awsTestBox to manager.
	    - Added new component awsTextBox, named "Text Box". This component
	      currently acts like most other text boxes you've ever seen,
	      with the additional benefit that it can be textured and you can
	      completely replace it's background with a bitmap if you like.
	      It also has support for character disallowing. I also plan to
	      add character masking so that it replaces the view on screen
	      with a random number of asterisks or user defined character.
	      This component is currently missing a cursor.
	    - Added a text box to awstest so you can play with it.
	    - Added trivially simply static label component named "Label".
	    - Added this to the common components registry.
23-Oct-2001
	- Michael Voase improved lighting on water procedural texture in
	  flarge.
	- Fixed SCF dependencies for fancy console and standard console.
	  Thanks to res <resqu@gmx.ch> for spotting this.
	- Fixed a problem that precalc_info is written even if caching
	  of lightmap data is disabled. Thanks to res <reque@gmx.ch> for
	  spotting this.
	- res <reque@gmx.ch> added alpha support for TGA images.
	- Eric Sunshine made the following changes to the documentation:
	    - Fixed a number of Texinfo mark-up errors.
	    - Eliminated numerous overfull and underfull `hbox' warnings
	      reported by TeX.
	- Matze Braun fixed 'cs-config' so it no longer uses the 'find'
	  utility but instead uses 'ls' which is more common.
	- Fixed cs-config so the dependencies are more correct (for libraries).
	- Also added Makefile.template to scripts/cs-config. Use this makefile
	  as a template for a project that uses Crystal Space. It has to
	  be used together with cs-config. I'm planning a howto for this
	  very soon now.
	- Added a new howto which explains how to use Crystal Space in
	  an external application using the new cs-config script that Matze
	  added.
	- Philip Wyett added a similar howto for MSVC.
	- Jorge Acereda added #include "cssysdef.h" to loadlib.cpp, it must be
	  included by all source files. Removed #include "csutil/csstring.h",
	  no longer needed.
	- Eric Sunshine made the following changes to the new External MSVC
	  Application HOWTO:
	    - Fixed a lot of Texinfo mark-up problems.
	    - Fixed a number of spelling errors.
	    - Fixed several occurrences of nonsensical sentences.  (This
	      document apparently had not been proof-read.)
	    - Fixed a number of formatting problems.
	    - Fixed some (but not all) of instances of poor grammar.
	    - Eliminated several `overfull hbox' warnings emitted by TeX.
	    - Made numerous enhancements for Info mode.
	    - Renamed the screenshots from `snap_NN' to `snapN' since TeX can
	      not grok the underscore (`_') in filenames.
	    - Removed the simple1.cpp and simple1.h files from the simple1.zip
	      archive which accompanies this HOWTO.  These files were just
	      verbatim copies of the files in CS/apps/tutorial/simple1.	 Having
	      them in the ZIP archive is a bad idea since it is guaranteed that
	      they will become outdated in about two seconds flat.  Instead,
	      the HOWTO just mentions that they can be grabbed from
	      CS/apps/tutorial/simple1.
	- Eric Sunshine made the following changes to the new External
	  Application HOWTO:
	    - Fixed a number of Texinfo mark-up problems.
	    - Minor re-writing of some paragraphs.
	- Fixed a small error in project.txi where it refered to the
	  non installed CS as installed CS.
	- 'Fixed' -infinite option for walktest by making it a bit simpler.
	  Note that the performance is not very good when creating new
	  rooms. This is something that will have to be looked into later.
	  But at least it no longer crashes.
	- res <reque@gmx.net> fixed several problems in the software
	  renderer with some cases of scanline renderers (keycolor, alpha,
	  ...).
	- Eric Sunshine eliminated another `overfull hbox' TeX warning from
	  project.txi.
	- Eric Sunshine updated the Apple/NeXT build instructions
	  (CS/docs/texinfo/build/platform/next.txi) which were slightly
	  outdated.  Also update the Apple/NeXT internal documentation
	  (CS/docs/texinfo/internal/platform/next.txi), part of which had
	  become obsolete following all of the major changes to the "system
	  driver" (in preparation of the system driver's ultimate removal).
	- Jorge Acereda added NetBSD alias in vfs.cfg.
	- Jorge Acereda removed unneeded includes in csfont.cpp.
	- Creation of R0_90 branch.
	- Matze added csphyzik to cs-config.
	- Release of CS 0.90r001.
	- Christopher Nelson did the following:
	    - Committed the embedded component header. Please note that this
	      hasn't really been tested, so some bugs certainly exist in it.
	    - Fixed some bugs. Added Execute. Added some other stuff to make
	      the some useful things in StandardSink work.
22-Oct-2001
	- Fixed a bug in the 'addghost' console command. It would fail
	  if you used it more than once.
	- Fixed a bug in Blocks with the menu entries having a weird
	  color when fog was enabled (used for fading in/out). Fixed this
	  by not using fog but csfxFadeOut() instead.
	- Fixed a very dangerous bug introduced yesterday in
	  csEngine::SelectRegion(). Do not blindly convert a csBla class
	  to iBla by taking the address of (...->scfiBla). If the csBla
	  pointer happens to be NULL this causes bad problems.
	- Eric Sunshine eliminated a compilation warning from syntxldr.cpp.
	- Eric Sunshine made a small adjustment to the interopolate function in
	  msvcgen.pl to allow it to work cleanly with old Perl version 5.001.
	- Eric Sunshine made the following changes to the MSVC project file
	  synthesis facility:
	    - msvcgen.mak now publishes a DO_MSVCGEN variable.	This variable
	      is set to `yes' during the msvcgen build step.
	    - Removed the dangerous and inflexible $(OS) override capability
	      which was added to linux.mak.
	    - Patched mp3.mak so that it correctly omits the Unix `xfermem'
	      extension when generating the MSVC project file.
	- Eric Sunshine applied a quick-patch to macosx.mak to allow command-
	  line tools to link.  The problem is that the lack of fine-grained
	  initialization and object-file symbolic management require that
	  command-line tools now be linked against the AppKit framework.  In
	  the past, this was not required, but now that csPlatformStartup()
	  registers a NeXTAssistant with the object-registry, it is needed.
	  The proper fix to this problem requires more fine-grained control
	  over the initialization process, as well as more fine-grained control
	  over symbolic distribution within the object files.
	- Matze Braun fixed static make walkall.
	- Philip Wyett reports:
	  Released new versions of both CS MingW and msvc_libs.
	  These relates to tomorrows release of CS 0.90 and match that
	  release as to their file naming to make this release as transparent
	  as physically possible for folks wishing to use CS, be they old heads
	  or new users coming to CS.
	    - Uploaded CS MinGW 0.90 and msvc_libs_0.90 to CS ftp.
	    - Updated CS\bin\win32conf.bat to show CS MingW 0.90 as the latest
	      and supported version as all the tests are going on.
	    - Updated date in version.txi.
	    - Updated links to new version of CS MinGW in docs.
	    - Updated links to new msvc_libs in docs.
	    - Added Windows XP under CS MingW setup instructions.
	    - Removed links to my personal site as this is due for a revamp and
	      creating future dead links is not a good idea!  :-)
	- Christopher Nelson did the following:
	    - Made a few adjustments to component.
	    - Added Get/Set property methods.
	    - Added awsStandardSink, which registers some standard triggers
	      that you might want to use with any component.
	    - Several dumb bug fixes.
	    - Updated the test platform so that SetProperty and GetComponent
	      is demonstrated. This shows how you can find out stuff about a
	      source or set stuff in a source's component owner after
	      recieving a signal from a source.
	    - Added a new class to AWS called awsParmList. The point of this
	      class is to provide a type-safe and portable mechanism for
	      passing a number of parameters to a component, without having to
	      specify at compile time what order they are in. This class
	      is similiar to BMessage in that it maintains a list of
	      parameters of various types and lets to get them back. This will
	      be used in conjunction with a new method in components called
	      "Execute" or maybe "PerformAction" which will let sinks tell
	      components to do something that they think they can do, without
	      incurring a seg-fault if they are wrong. For example, if you
	      have a Listbox and a trigger needs to clear that listbox, it's
	      not really sure if the component that it's given is really a
	      listbox, or if the programmer of the listbox decided to call
	      it's clear method something else. So instead of a cast and a
	      call to comp->ClearListbox() you can simply call
	      comp->PerformAction("Clear", parmlist); and the component will
	      do the thing you want if it can and return true, otherwise it
	      will return false.
21-Oct-2001
	- Martin Geisse did some clean-up in the region code.
	- Justin Miller added a few basic build speed/size Q/As to msvc FAQs.
	- Philip Wyett extended one of the new additions in msvc documentation
	  to put emphasis on the problems which can be caused by unloading
	  projects which are dependant on other parts of CS. :-)
20-Oct-2001
	- Removed several warnings throughout the project.
	- Fixed a bug in GetLODPolygonCount() in spr3d.
	- Matze: cleaned up cs-config and fixed some bugs.
	- Matze: fixed linking of csfgen.
	- Norman Kramer made the lib3ds includes system includes, this will
	  avoid all the warning when running mkdep.
	- Norman additionally reports:
	  Removed the local lib3ds include files. Get the lib3ds instead and
	  install that one. Using a local set of include file is dangerous
	  anyway. Note you need to get a version after July 7th 2001 (that
	  was when the io_seek function signature has changed (what caused
	  problems with our local includes which still had the old return
	  type)).
	- Norman also made vorbis includes system includes to get rid of
	  warnings during mkdep.
	- Norman also updated freefont readme to indicate that version
	  1.x of freetype is required.
	- Norman fixed compile errors for linux (xfermem.* in mp3 loader).
	- Norman also updated the mp3 makefile.
	- Norman fixed a warning in ie3ds about virtual destructor and
	  unused variables.
	- Philip Wyett did some updates to MSVC documentation.
	- Eric Sunshine reports:
	  3ds2lev.dep is no longer built by default when invoking the `depend'
	  makefile target.  This eliminates the plethora of error messages
	  encountered by most people when running `make depend', since most
	  people do not have lib3ds installed.	You can still create the
	  3ds2lev dependency file by manually invoking the `3ds2levdep'
	  makefile target.  In the future, we should auto-detect the presence
	  of lib3ds at configuration time (as we do with other optional
	  facilities) and enable the 3ds2lev makefile based upon the result
	  of the auto-detection.
19-Oct-2001
	- Removed diagnostic messages from image multiplexer. Those are
	  not really needed.
	- Removed diagnostic message from csparser. Changed one
	  notify message to an error message (the inability to find VFS
	  is an error).
	- Removed csInitializer::Initialize() since it does nothing more
	  than initialize the hidden system driver variable. Since the
	  system driver is going to be removed it is better to remove
	  Initialize() as well. Since on some platforms this Initialize()
	  is still needed we just delay it to later (in OpenApplication()).
	- Updated the simple1 tutorial in code to make it look cleaner.
	- Updated the simple1 tutorial documentation. Simple2 tutorial is
	  still outdated though.
	- Updated the simple2 and simpmap tutorials in code similar to
	  simple1.
	- Updated the simple2 and simpmap tutorial documentation.
	- Renamed apimod19.txi to apimod90.txi and updated the file for the
	  latest changes.
	- Updated several of the howto's with regards to recent global
	  changes.
	- Updated version of CS to 0.90 to indicate the imminent release
	  of CS 0.90.
	- Changed the behaviour of csPluginLoader class. This class has
	  three sources for requesting plugins: commandline (-plugin,
	  -video, and -canvas options), config file (System.PlugIns....),
	  and the CS_REQUEST_... options given to
	  csInitializer::RequestPlugins() (which uses csPluginLoader
	  internally). In the past the CS_REQUEST_ options had highest
	  priority, followed by commandline and lastly config. Now this
	  is different. Commandline has highest priority, followed by
	  config, and finally the requested plugins. This means that
	  it is now safe to use CS_REQUEST_SOFTWARE3D in your initialization
	  of the application so that you know you'll at least get the
	  software 3D renderer if there is no config file and nothing
	  specified on the commandline.
	- Removed unneeded reference to plugin manager in csfont.
	- Updated the glossary. Added several new entries and fixed
	  several old entries.
	- Updated the FAQ.
	- Updated the mesh object documentation. Added new sections for
	  'thing', 'haze', 'terrfunc', and 'metaball' mesh objects but
	  these sections are still empty.
	- Matze: cs-config now computes dependices!!
	- Wouter Wijngaards added a stream of particles from the portal
	  in flarge/basement. Also disabled lighting so it looks better
	  in software. The portal in the basement now has a matrix associated
	  which rotates the view, it looks over the ballustrade, at the
	  cube&ball meshes. When stepping through the camera is not rotated
	  btw.
	- Christopher Nelson did the following:
	    - Created a new sub-directory for AWS include files. The reason
	      that this has to happen is that if a person wants to sub-class
	      a component or window or sink or slot, etc.  then they need
	      access to the headers which define the implementation version
	      of those components too. Otherwise this is not possible
	      (unless they add source directly into AWS's core module.)
	    - Added support for connect into lexical analyzer.
	    - Removed .h files from aws plugin directory.
	    - Various fixes to make all work again.
	    - Accepted the patch by res for cosmetic fix. Thanks!
	    - Lots of changes in interface for slots. Trying to get handlers
	      right.
	    - Made (probably) final changes to slot mechanism to allow them
	      to be used by applications not inside the aws plugin. The idea
	      now is to simply embed a sink into some class. Using either
	      static member functions or just normal C++ functions, you
	      register trigger callbacks for a sink. These are automatically
	      resolved by the parser and window builder at runtime. When a
	      signal that you want to listen to is generated, the trigger is
	      activated and passed an additional void * parameter that you
	      pass in to the sink when it's created. This lets you use static
	      member functions or some sort of general memory buffer
	      associated with a particular sink.
	    - Updated awstest to have a test sink and to register to use it.
	    - Made a few additional modifications to the slot API so that it
	      would be more optimal for memory usage.
	    - Added functionality: the window builder now scans for
	      connection maps and connects all signals to their sinks. Note
	      that a connection is only created if the sink was found at
	      parse times.
	    - Added printf's into awstest triggers to prove that they work.
18-Oct-2001
	- Michael Voase shifted water and fire proctex down to the basement.
	- Removed usage of cs_snprintf in cfgfile.cpp and
	  plugldr.cpp because it causes linking errors on Linux.
	- csInitializer::SetupConfigManager() will now first check the
	  registry for iVFS. If that fails it will trey CS_QUERY_PLUGIN.
	  If that fails it will try to load VFS and register it.
	- Eliminated a few additional usages of CS_QUERY_PLUGIN and
	  replaced them with CS_QUERY_REGISTRY. In a few places where
	  CS_QUERY_PLUGIN was absolutely needed I replaced them with
	  explicit calls to QueryInterface(). That way the define
	  CS_QUERY_PLUGIN can be removed.
	- Removed CS_QUERY_PLUGIN. Now only CS_QUERY_PLUGIN_CLASS remains.
	  But that macro is safe and will stay there.
	- Added iPluginManager::Clear(). This function will unload all
	  loaded plugins from the plugin manager.
	- csInitializer::DestroyApplication() now calls iPluginManager::Clear()
	  to remove all plugins. This is needed because some plugins keep
	  a reference to the plugin manager. As long as these plugins
	  are in memory the plugin manager cannot be removed for that reason.
	- The plugins vector in the plugin manager did not have a destructor
	  calling DeleteAll(). This means that plugins would actually never
	  get deleted.
	- csInputDriver no longer keeps a reference to the iEventQueue.
	  Keeping this reference prevented proper cleaning up of the
	  event queue.
	- The three fixes above fix the dangling references at exit (this
	  bug was present since yesterday). The only remaining dangling
	  references have to do with the reporter and reporter listener
	  which keep references to each other. This has to be investigated.
	- Moved eventqueue->DecRef() to before ImmediateBroadcast() in
	  csCommandLineHelper.
	- Fixed csView::SetEngine(), SetCamera(), and SetContext() which
	  were doing IncRef()/DecRef() in wrong order.
	- Also fixed the dangling references on the reporter and reporter
	  listener. The reporter listener should not keep a permanent
	  reference to the reporter.
	- Fixed a bug in csThing::AppendShadows(). If there was a portal
	  in the thing it would ignore all polygons as shadows that
	  came after that portal. Thanks to Norman Kramer for spotting this.
	- Matze Braun fixed bugs with cs-config.  The script now also works
	  when CS is not installed.
	- Matze also did another cygwin fix.
	- Matze also fixed a cs-config bug for multiple builds.
	- Eric Sunshine made the following changes to the cs-config generation
	  facility:
	    - Now works with older /bin/test programs which do not understand
	      the -e test.
	    - The package version information is now gleaned automatically
	      from CS/include/csver.h rather than being hardcoded into the
	      cs-config/genscript.sh script.
	  Unfortunately, cs-config still has a number of shortcomings on some
	  platforms, and will require some more work before it can be useful
	  on those platforms.
	- *Probably* fixed the problem with cs_snprintf not linking
	  correctly. It works correctly for me on linux now. I fixed
	  it by removing the 'extern "C"' around the declarations
	  of cs_snprintf. Reenabled the use of cs_snprintf in three
	  of the csutil files.
	- Renamed snprintf.c to snprintf.cpp to avoid all problems
	  above related to extern "C" and not extern "C" for declarations.
	  That way the functions are at least normal C++ functions like
	  we're used to in CS.
	- Philip Wyett reports for the mp3 loader:
	  Moved xfermem to it''s own dir away from inclusion in the MSVC
	  project. Modified makefile for Win32 and non Win32 ports to use
	  the correct files.
	  Added waveoutstd to default MinGW build process.
	  Added Normans mp3 plugin to both MinGW and MSVC default build
	  processes.
	  Manually updated MSVC project files.
	- Wouter Wijngaards made a new portal in the flarge basement so it
	  is easier to get out the basement again.
17-Oct-2001
	- Michael Voase performed a small typo fix to data/walktest.cfg.  This
	  just fixes up the PerfStats loading problem, but doesnt fix the fact
	  that the plugin was taking the name tag from the walktest config
	  file.
	- Updated comment on iObjectRegistry::Get(scfInterfaceID, int)
	  to say that it does return the pointer to the requested interface
	  so there is no need to do QueryInterface().
	- Updated iObjectRegistry::Get(scfInterfaceID, int) so that this
	  function again returns the requested interfaces. Eric changed
	  this yesterday to return the original object pointer.
	- Did a fundamental change to CS_QUERY_REGISTRY and
	  CS_QUERY_REGISTRY_TAG. These macros are now guaranteed to
	  increase the reference count of the returned object. In the
	  past they didn't.
	- Fixed a bad bug in csObjectRegistry::Unregister(). It would
	  only delete the 'registry' vector and not the 'tags' vector.
	  Why this bug only presented itself now I don't know.
	- At this moment my changes cause big leaks in SCF at exit. I have
	  not yet been able to find out why.
	- Matze Braun fixed static build with Linux.
	- Matze added cs-config system for easy usage of CS outside the
	  CS tree.
	- Added first experimental version of the cs-config script for systems
	  with unix shell. compile simple1 with 2 (short) lines:
	    g++ `cs-config --cxxflags csengine` -c simple1.cpp -o simple1.o
	    g++ -o simple1 simple1.o `cs-config --libs csengine`
	- Philip Wyett added new Mik Mod plugin to default MSVC build.
	  Changed part of class to public to allow MSVC to access to read.
	  Updated docs for new msvc_libs release.
	- Jorge Acereda added linker flag (in netbsd.mak) to export symbols
	  in executables to the dynamic symbol table. This fixes wrong
	  behaviour of memdebug.cpp when using plugins.
	  Added /usr/include to the include path to fix a makedep problem
	  (makedep doesn't search in /usr/include).
	- Michael Voase moved water and fire proctex in flarge down to the
	  basement.
	- Christopher Nelson did the following:
	    - Updated AWS to fix some virtual inlines that might be causing
	      problems on some distributions.
	    - Changed patch over to the defines method (snprintf.cpp). If
	      someone could test this and let me know if it works, I would be
	      grateful.
	- Philip Wyett tested snprintf.cpp and reports:
	  After all the patching (Chris's seems to be a winner :-) ) and
	  loads of testing...
Re-enabled use of cs_snprintf as all seems to be well again.
	- Philip also fixed a function parameter redefinition error under
	  MSVC.
16-Oct-2001
	- iObjectRegistry::Register() will now return false if something
	  is registered with a duplicate tag (exception is the NULL tag).
	- csPluginLoader will now check the return value of Register() and
	  report an error to the reporter if it returns false.
	- Added proper error handling for Register() to various other
	  places in the project.
	- Removed newlines from error messages sent to the reporter in
	  awstest. When using the reporter don't end your errors/warnings
	  with newline. The reporter will take care of that.
	- The thing loader plugin now uses the reporter to report error
	  situations.
	- Changed the text syntax services so that they now use the
	  reporter instead of the SetError() mechanism. Removed
	  GetLastError() from iSyntaxService.
	- Fixed Doxygen comments for iSyntaxService.
	- Reverted all calls to the new cs_...printf() to original printf()
	  calls because they caused bad problems. There seems to be a
	  bug in the cs_snprintf() implementation which corrupts the output.
	  One sympton of this problem was that -video=opengl didn't work
	  anymore.
	- Michael Voase did the following:
	  - Update bin/unixconf.sh to separate gcc from g++
	- Added iLODControl interface file which will be used in the future
	  for the LOD manager.
	- Removed all LOD related functions from iMeshObject. Instead this
	  will go to iLODControl.
	- Removed the LOD setter/getters for iSprite3DState and
	  Sprite3DFactoryState. The LodConfig setters/getters are still there
	  because they are not in the iLODControl interface.
	- The sprite3d mesh object, mesh factory, and mesh type all implement
	  iLODControl now. Currently this can be used to set/get the LOD
	  level for that object. The iLODControl at the mesh type level
	  controls access to the global LOD setting for all 3D sprites.
	  iLODControl at a factory level controls access to the LOD settings
	  for all 3D sprites made from that factory. And the iLODControl for
	  the mesh object controls LOD settings for an individual 3D
	  sprite. On a sprite level you can choose which level to use by
	  setting the LodConfig value.
	- Fixed all other mesh objects for the changes above.
	- csparser plugin can now also load LOD control objects. You can
	  now use the LOD keyword with mesh factories or mesh objects.
	  Currently you can only use one keyword in LOD and that is LEVEL
	  which is used to set the LOD level. In future more will be possible.
	- Walktest calls PlaceMesh() on the explosion particle system.
	  This should have fixed the problem with the explosion mesh not
	  visible when it crosses a portal but it doesn't. So PlaceMesh()
	  needs some debugging.
	- Fixed a bug in Blocks where it would crash when starting the
	  second game.
	- Eric Sunshine re-added `gcc' to C++ compiler search list used by
	  unixconf.sh.	Also added `cc' to the C++ compiler search list, since
	  `cc' is a valid way to invoke the C++ back-end on some platforms.
	- Eric Sunshine eliminated several compilation warnings from
	  awsmgr.cpp.
	- Eric Sunshine fixed problem where aws_adler32() was defined by
	  multiple implementation files.
	- Eric Sunshine worked around a couple new problems which started
	  afflicting jobber.pl today:
	    - The unixconf.sh script now expects to find a C-compiler in
	      addition to the C++ compiler which it always expected.Since the
	      SourceForge shell machines do not have developer tools installed,
	      had to fake out the unixconf.sh script.
	    - It appears that some configuration may have changed today on the
	      SourceForge shell machine which is causing the makefile
	      configuration step performed by jobber.pl to crash when building
	      the makefile cache.  As a stop-gap measure, rather than spending
	      an inordinate amount of time trying to track down another
	      SourceForge shell machine problem, I simply disabled makefile
	      caching for now.
	- Eric Sunshine made the following changes to the project:
	    - Converted the Windows port over to the new csPlatformStartup()
	      and csPlatformShutdown() paradigm in preparation for the removal
	      of the system driver.
	    - Removed all code and functionality from the Windows system driver
	      subclass.	 This class is now _completely_ empty and ready for
	      removal.
	    - Fixed a bug in the OpenGL Windows canvas where it was stealing a
	      reference to the Win32 "helper" object from some other module by
	      calling DecRef() even though it didn't own a reference.
	    - Fixed win32/csosdefs.h so that the #pragmas for disabling
	      warnings appear before the Windows system headers are included.
	      This change eliminates the thousands upon thousands of warning
	      messages emitted by MSVC5 when building the project.
	    - Temporarily disabled cs_snprintf() (again) because MSVC users are
	      experiencing linking problems.In particular, the following errors
	      are produced:
		libcsutil.lib(snprintf.obj) : error LNK2001: unresolved
		    external symbol __pctype
		libcsutil.lib(snprintf.obj) : error LNK2001: unresolved
		    external symbol ___mb_cur_max
	      Hopefully, we will get these problems resolved soon.
	    - Eliminated a number of compilation warnings from snprintf.c which
	      were reported by MSVC.Unfortunately, a couple additional warnings
	      are still present.
	- Eric Sunshine fixed a potential bug in
	  csObjectRegistry::Get(scfInterfaceID,int) where it was accessing
	  an interface pointer after it had invoked DecRef() on that interface.
	  It was making the potentially invalid assumption that the interface
	  was pointing at the same object from which it was queried (which may
	  not always be true).
	- Eric Sunshine fixed some compilation problems in AWS which affected
	  older compilers.
	- Philip Wyett reports:
	  The PI defines are back. The amount and new naming i.e.
	  PI, HALF_PI, TWO_PI remain for convenience and one of the
	  original objectives of removing a few in code casts to float.
	- Philip changed code and docs for latest release of msvc_libs
	  (0.19a).
	- Jorge Acereda switched to better CFLAGS.debug in netbsd.mak.
	- Christopher Nelson:
	    - Added a new version of snprintf that supports floating point
	      from the Apache project.
	    - Added a macroized header cersion of ctype that is required by
	      the apache snprintf implementation.
	    - Modified cscmdbtn so that it's factory just returns an
	      awsComponent. This should help older compilers not to have
	      heart attacks.
	    - Made a few changes to some csutil files. Changed sprintf to
	      snprintf as test cases. I tested these pretty thoroughly on my
	      system, but it may possibly cause problems on other systems.
	    - Fixed SCF interfaces for iAwsSlot, iAwsSource, iAwsSink, and
	      iAwsComponent.
	    - Made updates for components and windows so that AWS reacts
	      correctly in real environments.
	    - Embedded awsSource in awsComponent.
	    - Embedded awsComponent in awsWindow.
	    - Fixed awstest so it no longer does illegal stuff.
	- Jorge Acereda fixed csloader.cpp to return false; in iMeshWrapper*
	  LoadMeshObjectFromFactory().
15-Oct-2001
	- All func-id's are now changed so that they are equal to their
	  interface name. Basically this means:
	    VFS -> iVFS
	    VideoDriver -> iGraphics3D
	    VideoCanvas -> iGraphics2D
	    SoundRender -> iSoundRender
	    ImageLoader -> iImageIO
	    SoundLoader -> iSoundLoader
	    LevelLoader -> iLoader
	    FontServer -> iFontServer
	    NetDriver -> iNetworkDriver
	    Console.Output -> iConsoleOutput
	    Console.Input -> iConsoleInput
	    Engine -> iEngine
	    MotionManager -> iMotionManager
	    Reporter -> iReporter
	    Converter -> iModelConverter
	    CrossBuilder -> iCrossBuilder
	    TextSyntaxService -> iSyntaxService
	  This change was done in preparation for the removal of the function
	  ID's.
	- All 'System.Plugins' entries in the config files have to be modified
	  to the new func-id's above. For example, instead of:
	    System.Plugins.VideoDriver = crystalspace.graphics3d.software
	  you will now have to say:
	    System.Plugins.iGraphics3D = crystalspace.graphics3d.software
	- In the future loading plugins like above (with interface name) will
	  mark them as the default plugin for that interface (using the object
	  registry).  So if you do
	    CS_QUERY_REGISTRY(object_reg, iGraphics3D);
	  you will get the default plugin implementing iGraphics3D.  If you
	  want to load additional plugins implementing some interface but not
	  mark them as default you can do this like this:
	    System.Plugins.iGraphics3D.Extra = ...
	  This will put them in the object registry with the tag
	  "iGraphics3D.Extra" (not at this moment though).
	- CS_LOAD_PLUGIN no longer accepts the FuncID argument.	 Instead it
	  will use the interface name as the FuncID.  This conforms well with
	  the rename of the FuncID's above.  If you still want to load a plugin
	  with another FuncID then you can temporarily use CS_LOAD_PLUGIN_OLD.
	- Renamed the _CS_LOAD_PLUGIN (mark the additional underscore in front)
	  to CS_LOAD_PLUGIN_ALWAYS.  Also removed the FuncID parameter.
	- Removed the FuncID parameter from CS_QUERY_PLUGIN_CLASS.  Instead the
	  interface name is used as the FuncID.
	- Made networking driver optional in Blocks (it gave an error when this
	  plugin wasn't present).
	- csInitializer::RequestPlugins() no longer needs a func-id after the
	  plugin name.	This means that if you use CS_REQUEST_PLUGIN you better
	  remove everything after the ':' in the plugin name (including the
	  ':').	 Note that in the future this notation will still be useful.
	  If given this will be used as the tag to register this plugin with
	  the object registry.	That way you can request plugins with another
	  tag (normally it would be the default tag which is the same as the
	  interface name).
	- Removed an arbitrary limit in csPluginLoader of 255 plugins.	This
	  limitation was only there for an optimization which is certainly not
	  very important.  Remember the time when people said 640K was PLENTY!
	- Plugins or components implementing some interface as default are now
	  registered to the object registry using the interface name as tag.
	  CS_QUERY_REGISTRY has been modified to search for tag name instead of
	  interface (syntax doesn't change).  CS_QUERY_REGISTRY_FAST has been
	  removed because this doesn't make sense anymore.  Note that
	  CS_QUERY_REGISTRY will still check if the given interface is actually
	  implemented and it will also return the pointer to that interface and
	  not just the plugin.
	- Added iObjectRegistryIterator with which you can iterate over objects
	  in the object registry.  Removed iObjectRegistry::Get() with which
	  you could query the object registry based on SCF interface.  Instead
	  there is now iObjectRegistry::Get() with which you can query all
	  objects in the object registry that implement a given interface.
	  This will return an iterator.	 Also added iObjectRegistry::Get()
	  which returns an iterator to iterate over all objects from the object
	  registry.
	- csPluginLoader now uses everything after the ':' as the tag to
	  register the loaded plugin in the object registry.  Make sure to use
	  a tag name equal to the interface name if you want to mark a plugin
	  as the default plugin for that interface.  This will then be the
	  plugin that is returned with CS_QUERY_REGISTRY.
	- Eliminated all usage of the FuncID's.	 This means that the defines
	  CS_FUNCID_...	 are now removed.  CS_QUERY_PLUGIN_ID is also removed.
	  CS_QUERY_PLUGIN is still there but it should be considered unsafe to
	  use.	Everything related to FuncID is also removed from the plugin
	  manager.  Note!  This has been said before but you should now use the
	  object registry to find plugins.  The csPluginLoader class (which is
	  used by csInitializer::RequestPlugins()) will actually register all
	  plugins with the tag found in the config file.
	- Added a new version of 3ds2lev from Luca Pancallo.  Read README.1st
	  for more information.	 Keep in mind that this version now requires
	  the lib3ds library!
	- Eric Sunshine eliminated an "unused variable" compilation warning
	  from cswseng.cpp.
	- Eric Sunshine modified the makefile for the new 3ds2lev application
	  so that the `3dslev' makefile target no longer appears in the `all'
	  or `apps' targets since most people do _not_ have the lib3ds package
	  installed.  If you want to build this program, then you must
	  explicitly mention the `3dslev' target.
	- Eric Sunshine fixed a problem in wodrv.mak which prevented the driver
	  from linking into an application with USE_PLUGINS=no.
	- Eric Sunshine eliminated an "unused variable" compilation warning
	  from isotest.cpp, mdltest.cpp, and sqksystm.cpp.
	- Eric Sunshine updated NeXTAssistant.cpp to take into account today's
	  semantic change to shared-object registry queries where the argument
	  to CS_QUERY_REGISTRY() is now compared against the registered `tag'
	  before being compared against the actual registered SCF type.
	  Unfortunately, the semantic change broke code which accessed
	  NeXTAssistant since, although the assistant is published with the
	  object-registry under a single name, it implements multiple SCF
	  interfaces.  (It is no longer possible to query the registry for an
	  object based solely upon an SCF interface.)
	- Eric Sunshine fixed a problem in ogl_g3dcom.cpp where GCC 3.0
	  complained about trying to paste `::' to a token.
	- Jorrit updated history.txt in order to have the honor of update
	  number 2000 of this file :-)
	- Eric Sunshine changed csAppPlugin so that it now implements
	  iEventHandler via embedding rather than multiple-inheritance.	 This
	  allows CSWS to once again operate correctly (not crash) on a certain
	  nameless platform.
	- Eric Sunshine made the following changes to the documentation:
	    - Repaired a number of Texinfo mark-up errors.
	    - Worked around a bug in texi2html where it complains if a
	      @heading has the same name as a @node.
	    - Eliminated a significant number of overfull and underfull `hbox'
	      reported by TeX.
	- Wyatt Miler did a few more documentation updates.
	- Philip Wyett fixed various config files.
	- Jorrit then fixed Philip's 'fixes'.
	- Norman Kramer added 2*src*dst for multitexture lighting; as jorrit
	  pointed out multitexturing should be moved to flushpolygon but
	  I'll commit this version anyway just to have a refpoint in cvs
	  before I move it to flushpoly.
	- Norman fixed a warning about unused var in mipmap.inc.
	- Norman fixed 3ds2lev so it compiles again.
	- Philip Wyett added lib3ds lib to makefile for MSVC.
	- Philip Wyett removed static from all PI's.
	- Philip also did some project file updates.
	- Christopher Nelson did the following:
	    - Fixed nasty SIGSEGV bug caused by his own terminal stupidity.
	    - Added the snprintf.h header file and modified it a bit to keep
	      it from thinking that it wanted to specify certain things
	      depending on certain defines.
	    - Renamed all the xxsnprintfxx functions to cs_xxsnprintfxx.
	    - Added the snprintf.cpp files.
	    - Was snprintf.c, so I renamed it.
	    - Also fixed some defines. This file now exports the following
	      functions:
		cs_snprintf
		cs_vsnprintf
		cs_asnprintf
		cs_asprintf
	    - Fixed some signed/unsigned comparisons by changing a local
	      variable 'n' in each case to unsigned int. Each change is
	      marked with My initials (CN).
	    - Did NOT enable any compatibility flags. This is supposed to
	      keep the code more portable. I suppose that someone could
	      create a configure script to enable these based on platform,
	      but I didn't, and it's not supposed to be necessary.
	    - Did NOT enable functions:
		cs_vasprintf
		cs_vasnprintf
	      because these functions require va_copy. This function is not
	      available on all platforms and compilers.
	    - Renamed a couple of other instances of snprintf and vsnprintf to
	      cs_xx.
	    - Changed all instances of sprintf in the csutil directory to
	      cs_snprintf.
	- Justin Miller re-enabled csString::Format(const char*, ...) using
	  the new cs_vsnprintf().
	- Justin also fixed a minor typo in phyztest.cpp.
	- Norman Kramer added a sound loader plugin using mikmod for all your
	  favourite trackers.
14-Oct-2001
	- The 'stdrep' plugin now depends on output console and reporter
	  plugins in SCF.  This means that it will be loaded after those two
	  other plugins by csPluginLoader.  This fixes a bug where the stdrep
	  plugin was not correctly initialized in some cases.
	- Eric Sunshine eliminated a compilation warning from ogl_txtmgr.cpp.
	- Norman Kramer did the following for OpenGL renderer:
	    - Removed inclusion of glext.h from the files. There seem to be
	      dozens of version of glext out there and sometimes all of glext
	      is included in gl.h and no glext.h exist at all. Added the
	      defines from glext.h to csglext.h, renamed the functiontypes to
	      csPFNGL* to prevent collision with types defined in some gl.h
	      variations.
	    - New values for polygonqueue are now only updated if they changed.
	    - Added detection of ARB/EXT_texture_env_combine, will use this
	      later to apply 2*src*dst for lightmaps in the multitexturing
	      case.
	    - In multitexturing case, the env_mode is now changed to
	      GL_REPLACE instead of GL_MODULATE if the alpha value is 1.0.
	- Wyatt Miler did various fixes and corrections to the documentation.
	  Also completed parts of the unix 'user.mak' option list section.
13-Oct-2001
	- Fixed compilation error in OpenGL Canvas for X.
	- Norman Kramer added test to OpenGL renderer to see if all
	  extension function addresses could be retrieved.
	- Norman fixed problem with generation of 1xN mipmaps.
	- Norman added a fix by Matthias Braun, csVector3Array is already
	  used in csgeom/poly3d.h - this caused strange behaviour when
	  compiled with gcc3. This bugfix also fixes the memory leak in the
	  visibility system.
	- Jorge Acereda fixed err vs. libc's err symbol conflict under FreeBSD.
	- Philip Wyett altered refrences to old winlibs and changed to
	  msvc_libs. Many thanks too Niels Gierse for bringing this to my
	  attention.
12-Oct-2001
	- Fixed a bug in AWS where it would try to load something from VFS ONLY
	  if VFS could NOT be loaded.  I think it should be the opposite
	  rather.  :-)
	- Avoided nearly all usage of CS_QUERY_PLUGIN and CS_QUERY_PLUGIN_ID
	  in CS. The reason CS_QUERY_PLUGIN is bad is that it queries the
	  plugin manager based on interface but there is no way to control
	  which plugin it will return if there happen to be more plugins
	  that implement the same interface. The reason CS_QUERY_PLUGIN_ID is
	  bad is that we want to remove the FUNCID's that are now used in
	  the plugin manager. The object registry is designed to replace
	  the need for FUNCID's.
	  Most CS_QUERY_PLUGIN and CS_QUERY_PLUGIN_ID calls have been replaced
	  with CS_QUERY_REGISTRY. Keep in mind that CS_QUERY_PLUGIN increases
	  the reference count of the returned plugin while CS_QUERY_REGISTRY
	  doesn't! So take care of those IncRef()/DecRef() calls.
	  Note that at this moment CS_QUERY_PLUGIN and CS_QUERY_PLUGIN_ID
	  cannot yet be removed because it is still needed in some specific
	  cases and also to initialize the object registry itself. However,
	  this is due to change soon when csPluginLoader will become
	  responsible for registring loaded plugins with the right tag to
	  the object registry.
	- Modified csPluginLoader so it registers all loaded plugins with
	  the object registry. Note that all plugins will be registered
	  with the NULL tag which is not good but a temporary solution until
	  we have a more clever way to find out which tag to use from within
	  csPluginLoader. This means that all plugins loaded by
	  csInitializer::RequestPlugins() will be registered (as it uses
	  csPluginLoader).
	  Note! If you manually load plugins using CS_LOAD_PLUGIN after
	  csInitializer::RequestPlugins() then these will not automatically be
	  registered. If you want to do that (which can be important for
	  some of the standard plugins like iGraphics3D, iConsoleOutput, ...)
	  then you must register them manually.
	- Fixed terrain loader. It wasn't storing the object registry but
	  it was still using it later on.
	- Philip Wyett did the following:
	    - Added 'WIN32_LEAN_AND_MEAN' to remove rarely used Windows
	      stuff. This works for all Windows compilers.
	    - Replaced defines for PI, M_PI, and M_PI_2 with static const
	      floats to increase efficiency. For castle this gives an
	      improvement of 14 -> 19 FPS which is nothing to sneer at!
	- Fixed CS a little for compilation on Solaris/X86. Fixes given
	  to me by Markus Korth <mkorth@military.de>.
	- Eric Sunshine eliminated "unused variable" compilation warning from
	  csgfxppl.cpp.
	- Eric Sunshine added missing CS_SYSDEF_PROVIDE_ALLOCA to plugldr.cpp.
	- Eric Sunshine eliminated a compilation complaint about Get() being
	  re-declared as virtual in csTokenVector (though it was not virtual
	  in the parent class).
	- csMeshFactoryWrapper instances are now also added to the current
	  region. iCurveTemplate and iPolyTxtPlane instances are now correctly
	  deleted from regions. Thanks to Thiago Ramon for mentioning this.
	- Eric Sunshine made the following changes to the project:
	    - Added the new function csDefaultRunLoop().  This function
	      replaces csInitializer::MainLoop(), which was non-portable.  This
	      function should be called by applications which do not otherwise
	      implement their own run-loop.  The run-loop implemented by this
	      function is guaranteed to be portable across all application
	      (since each platform is given the opportunity to provide an
	      appropriate platform-specific implementation).  Each time through
	      the run-loop, it advances the virtual clock and processes the
	      Crystal Space event queue.  csDefaultRunLoop() only returns when
	      a csevBroadcast event is posted to the Crystal Space event queue
	      with command code cscmdQuit.  Note, that if your application
	      already implements its own run-loop, then you should _not_ call
	      this function, since it would more-or-less permanently interrupt
	      your own run-loop and prevent it from doing its work.  For
	      instance, if you are adding Crystal Space to an existing
	      Microsoft Windows application, which already has its own run-loop
	      to process the Windows event queue, then do _not_ call this
	      function.
	    - csDefaultRunLoop() is intended to be implemented by each platform
	      in a fashion which is appropriate for implementing run-loops on
	      the given platform.  For instance, with Apple's Cocoa frameworks,
	      csDefaultRunLoop() should arrange to have the NSApplication class
	      implement the run-loop; with BeOS's Application Kit,
	      csDefaultRunLoop() should arrange to have the BApplication class
	      implement the run-loop; etc.
	    - A default implementation of csDefaultRunLoop() is provided in
	      CS/libs/cssys/general/runloop.cpp for platforms which do not
	      otherwise have any special run-loop needs.  The default
	      implementation, however, is very simple-minded in that it merely
	      advances the virtual clock and processes the event queue until
	      cscmdQuit is received.  It is not particularly platform-friendly
	      since it makes no attempt to yield the CPU, nor does it make any
	      attempt to interact nicely with a platform's native GUI.
	    - Implemented a platform-specific csDefaultRunLoop() for the
	      Apple/NeXT ports.	 This function is essentially a one-liner which
	      merely asks the NeXTAssistant (from the object registry) to
	      invoke the platform-specific run-loop, which is implemented by
	      Cocoa's NSApplication class.
	    - All other platforms currently employ the default implementation
	      of csDefaultRunLoop() from runloop.cpp.  In the future, however,
	      some platforms, such as BeOS, will implement their own versions
	      of csDefaultRunLoop().
	    - Added new functions csPlatformStartup() and csPlatformShutdown().
	      These functions are called by csInitializer::Initialize() and
	      csInitializer::DestroyApplication(), respectively, though they
	      can also be called manually in cases where csInitializer is not
	      utilized.	 These functions provide hooks for platform-specific
	      initialization and shutdown.  csPlatformStartup() and
	      csPlatformShutdown() are intended to be implemented by each
	      platform in some appropriate fashion.  One common use for these
	      functions is to publish platform-specific "helper" objects via
	      the shared-object registry (iObjectRegistry).
	    - Created default implementations of csPlatformStartup() and
	      csPlatformShutdown() in CS/libs/cssys/general/sysinit.cpp.  The
	      default implementations of these functions do nothing.
	    - Implemented platform-specific csPlatformStartup() and
	      csPlatformShutdown() for the Apple/NeXT ports.  These functions
	      publish an iNeXTAssistant with the shared-object registry.
	    - All other platforms currently employ the default implementations
	      of csPlatformStartup() and csPlatformShutdown() from sysinit.cpp.
	      In the future, however, some platforms, such as BeOS, Windows,
	      etc., will implement their own versions of these functions in
	      order to publish their platform-specific "helper" objects.
	    - The functional version of csInitializer::SetupEventHandler() now
	      accepts an event mask, just like the object-oriented version.  It
	      also provides a default event mask, which includes all event
	      types in which the typical application is interested.
	    - With the introduction of csDefaultRunLoop(), csPlatformStartup(),
	      and csPlatformShutdown(), it become possible to remove _all_ code
	      from the Apple/NeXT csSystemDriver subclass, thus the system
	      driver for the Apple/NeXT ports is now _completely_ empty and can
	      be removed (though this will not happen until all remaining code
	      is removed from the csSystemDriver subclasses of the other ports,
	      as well).
	    - Adjusted the Apple/NeXT ports to take into account all of the
	      recent changes to application initialization and run-loop
	      mechanics.  These ports once again compile cleanly, and the
	      programs run.  (The only exception is that programs which utilize
	      the 3D renderer crash with a BUS error on address 0x0 when the 3D
	      renderer tries to load the 2D canvas.  I will look into this
	      problem shortly.)
	- Eric Sunshine eliminated a couple "unused variable" warnings from
	  perftest.cpp.
	- Eric Sunshine fixed a bad bug in mk/subs.mak where it neglected to
	  include mk/static.mak.  Without static.mak, applications built with
	  USE_PLUGINS=no would fail miserably at run-time since none of the
	  modules (such as VFS, soft3d, etc.) would get linked into the
	  application.	Technically speaking, without static.mak, the derived
	  cslibref.cpp file was never generated.
	- Eric Sunshine fixed a bug in csInitializer::CreateEnvironment() where
	  it would leak an iObjectRegistry if any of the invoked "creation"
	  functions failed.
	- Eric Sunshine changed the order of application initialization so that
	  csPlatformStartup() is now called as the final step of
	  csInitializer::CreateEnvironment(), rather than being called by
	  csInitializer::Initialize().	The consequence of this change is that
	  csPlatformStartup() is now called considerably earlier in the startup
	  sequence, thus any platform-specific "helper" objects published by
	  csPlatformStartup() will now be available in the later initialization
	  step when plugins are loaded.	 This change was necessary since some
	  plugins expect the "helper" objects to be available at load time.
	- Eric Sunshine fixed a nasty bug in csEventQueue where, at destruction
	  time, it would unconditionally delete all event outlets even if other
	  objects held references to those outlets.
	- Eric Sunshine fixed the documentation for
	  iEventQueue::CreateEventOutlet() so that it informs the caller that
	  it is the caller's responsibility to send DecRef() to the outlet
	  when no longer needed.
	- Eric Sunshine fixed a bug in NeXTAssistant where it failed to send
	  IncRef() to the shared event queue which it caches even though it was
	  sending DecRef() at destruction time (thus stealing some other
	  object's reference to the event queue).
	- Eric Sunshine fixed the Apple/NeXT ports so that applications which
	  utilize a 3D renderer no longer crash at launch time.	 The problem
	  was that csPlatformStartup() was getting invoked too late in the
	  initialization process, with the result that the platform-specific
	  "helper" object, NeXTAssistant was not available at plugin load time.
	- Christopher Nelson did the following:
	    - Made copy constructor of csPoint use a const reference to fix
	      no-compile bug in csws.
	    - Made maximize button active, and made it work correctly with
	      moving controls.
	    - Added recursive MoveChildren function that allows a component
	      to make one call and move all children and nested children.
	    - Plugified the awsSinkManager.
	    - Renamed iAwsPrefs interface to iAwsPrefManager.
	    - Made skeleton implementation of sink manager.
	    - Fixed parser to support connection maps.
	    - Added support code for connection maps.
	    - Note that connection maps are created, and that a certain amount
	      of compile-time checking is done on them in skin definitions,
	      but the connections are not actually made yet. This means for
	      the user that a sink MUST EXIST before you load a definition
	      file that uses it.  e.g.:
		component "LoginBtn" is "Command Button"
		{
		  ....
		  connect
		  {
		    sButtonClicked -> UserValidation::Login
		  }
		}
	      This connection map requires that the sink "UserValidation" be
	      registered with the SinkManager in order to compile the
	      definition correctly. If a sink does not exist the connection
	      is ignored and the compiler moves on to the next one.
	- Jorge Acereda fixed compilation problem on FreeBSD: dlerror()
	  returns const *.
	- Norman Kramer fixed unloading of fontserver in linex2d.
	- Norman did the following for OpenGL:
	    - Added static function pointer variables to opengl 3d renderer.
	      They are filled with pointers to opengl extension functions, or
	      left NULL if extension is not present for a card (or disabled in
	      opengl.cfg). Extensions to check for are now listed in
	      opengl.cfg. These changes allow us to drop the #define
	      USE_EXTENSION. Dropped use of #define USE_EXTENSION :)
	      To find the function pointer to an extension function one needs
	      platform specific opengl functions.
	      For windows this is wglGetProcAddress, for glx its
	      glXGetProcAddressARB. To access such functions i created a new
	      interface iOpenGLInterface, which is implemented currently
	      in the glx canvas (tested) and windows opengl canvas (untested).
	      Other platforms i dont know - platform maintainers please check!
	    - Added use of compressed textures (if available). Read opengl.cfg!
	    - SourceFormats for opengl textures can now be directed to a
	      specific TargetFormat (that is, how they are stored in the
	      texture memory of the card).
	    - For RGB and RGBA textures i added some code to possibly select
	      a "better" sourceType for textures.
	      Better here means smaller. That is, texturedata is transformed
	      to another base format (like RGB5_A1).
	      Until now the base format was always stored in RGBA. This new
	      approach hopefully accelerates transfer of texture data to the
	      card.
	    - Upon preparation of the texture all mipmaps are now generated
	      (if needed) and stored. Before mipmaps had to be regenerated if
	      texture was dropped and then loaded again.
	    - For procedural textures only mipmap level 0 is generated.
	      Before all were generated but only the 0-th was used. (currently
	      only software procedural textures work, the backbuffer
	      proctextures all show up in the lower left of screen, funny but
	      annoying).
	    - Added support for textures other than RGB and RGBA (read Alpha,
	      Luminance, Intensity and others). Those are not used yet, but
	      for native alpha maps the first use comes to mind if one thinks
	      of the halo implementation.
	    - Added calculation of Luminance and Intensity to csRGBpixel.
	    - csImage now calculates the mipmap correctly for 1xN (or Nx1)
	      size mipmaps if you increase the level by 1 only (that is: it
	      becomes 1x(N>>1) size).
	- Philip Wyett fixes OpenGL for MSVC and Mingw.
11-Oct-2001
	- Moved the plugin manager implementation out of the system driver
	  into csPluginManager (in csutil/plugmgr.h). Modified
	  csInitializer::CreatePluginManager() to create an instance
	  of csPluginManager.
	- Created a new class csPluginLoader (in csutil/plugldr.h) which
	  will take the requested plugins, the config file, and the
	  commandline and try to load all plugins it can find there. This
	  functionality used to be in the system driver.
	  csInitializer::RequestPlugins() now uses this class.
	- The two above changes mean that the csSystemDriver is now
	  completely empty. It cannot yet be removed because some subclasses
	  of csSystemDriver (system specific subclasses) contain some
	  code.
	- Moved isys/vfs.h and isys/plugin.h to iutil.
	- Fixed a bug in the curve static lighting which could cause
	  curved surfaces to be completely unlit if there were polygons
	  in the level. One polygon was enough to shadow the curve even
	  if the polygon was nowhere near the curve.
	- According to some suggestions by Luca Pancallo I fixed viewmesh
	  so the light placement there is better. This makes the viewed
	  models look nicer.
	- Protected the csEventQueue implementation in csutil so that it
	  is now safe in the sense that an event handler can call
	  RemoveListener() without disrupting event handling itself. The
	  problem was that the event handler is busy in the loop calling
	  HandleEvent() on all the event handlers. Having an event handler
	  delete itself while in the loop could cause various problems.
	- Eric Sunshine eliminated a compilation warning from parser.h
	  regarding implicit conversion from void*.
	- Eric Sunshine eliminated a potential leak of scfSharedLibrary
	  instances in SCF.  Shawn Carroll <spanky@aci.on.ca> put Eric onto the
	  scent of this leak, but after investigation, it turned out to be much
	  more obfuscated and convoluted than originally suspected.
	- Eric Sunshine fixed the bizarre declaration of csInvalidStringID
	  in strset.h which was pointed out by Heiko Jakob <buffalo@the7lg.de>.
	- Christopher Nelson did the following:
	    - Made a few minor corrections to awstest.
	    - Made the control images look better.
	    - Took the csPoint object out of cslayout.h in CSWS and moved it
	      into this file, since it is useful and I don't need all the
	      cslayout stuff.
	    - Added a copy constructor and Set function for csPoint objects
	      to csPoint.
	    - Added the ability to get Points in skin definitions.
	    - Added the ability to get Int's in skin definitions.
	    - Added new awsPointKey key.
	    - Fixed redraw bug in windows which caused children to disappear.
	    - Added new functionality to awsWindow which lets you specify
	      exactly where the controls go on the window's face, relative to
	      the top, right frame point.
	    - Added functionality for buttons, which lets you set the alpha
	      level of the global texture for buttons. This causes buttons to
	      have a more "liquid" appearance when used with textures.
	      This does nothing for textureless skin definitions.
	    - Added LookupPointKey to AwsPrefs def.
	    - Modified the interface to AwsPrefs to add LookupPointKey support.
	    - Made some more changes to allow rects in the skin definition.
	    - Added more window functionality: you can now the rectangle where
	      window controls will appear on a window. Remember that these are
	      relative to the top, right corner. Currently awsWindows don't
	      check for vaild control rects, so if you mess up you'll only
	      know it when you see that the rects are not where you thought.
	      Look at awstest.def for an example.
	    - Added 3d-ish buttons for the controls. These are drawn around
	      the rects, and behave exactly as you expect. Realize, though,
	      that they currently do nothing other than look pretty.
	    - Modified default images so that they work with the skin
	      definition properly.
	    - Modified skin def to put the images in the right place. Note
	      that if you don't like the way windows look you can change a
	      number of things about them already, including their colors and
	      where and how big controls are, and what they look like.
	    - Modified event handler to use depth-first traversal so that
	      embedded children get a chance to see the message before their
	      parents. While this may make the critical path for event
	      handling longer, it's the only realistic way i can see for proper
	      functioning of nested components, and especially embedded nested
	      components.
	    - Fixed a bug in resizing that would make the controls disappear.
	    - Fixed a bug in event handling that kept MouseEnter and MouseExit
	      from happening.
	    - Added a mouse focused event to awsCmdButton to illustrate how
	      this works. When the mouse is over a button, it now draws a
	      dotted-boxed line around the text.
	    - Totally revamped the signal/slot system so that it can work like
	      the document I sent out says. There were a few changes needed. I
	      also tore out uses of the unholy csDlinkList. please note that
	      the parser does not yet support this architecture. I also have
	      to finish making the iAwsSinkManager into a plugin, which is not
	      yet done.
	    - Fixed references here and there and fixed the test def file a
	      litte bit.
	- Jorge Acereda fixes a bug in Blocks:
	  Pressing cursor up/down keys while loading crashed the application
	  due to a divide by zero error. This fix ignores events at screen
	  initialization time.
10-Oct-2001
	- Slight optimization in csSector::IntersectSegment() where it
	  would transform back the intersection point even if there
	  was no intersection.
	- Small change in bugplug.
	- Changed iVisibilityCuller interface so that the IntersectSegment()
	  now also returns the mesh that was hit (or NULL if the mesh
	  corresponding with the culler was hit).
	- Changed iSector::HitBeam() to use the mesh returned by
	  iVisibilityCuller::IntersectSegment() now. This fixes a bug where
	  HitBeam() would sometimes return the right polygon that was hit
	  but not the right mesh (i.e. it would always return the static
	  mesh in those cases).
	- Commandline parser is no longer initialized in csSystemDriver.
	  Instead there is now csInitializer::SetupCommandLineParser().
	  csInitializer::RequestPlugins() no longer has argc,argv parameters.
	  Take care to fix your code! The compiler will not catch this!
	- Removed the now obsolete csInitializeApplication().
	- Removed csSystemDriver::Open() and Close(). The few ports that
	  actually did something in those routines (Win32 and DOS) now listen
	  to cscmdSystemOpen and cscmdSystemClose instead.
	- csInitializer::OpenApplication() and CloseApplication() now send
	  the cscmdSystemOpen/cscmdSystemClose messages instead of letting
	  the system driver do it.
	- Added cssys/sysfunc.h which contains the declarations of the
	  global system dependent functions like csSleep(), csGetTicks(),
	  csPrintf(), and csGetInstallPath().
	- Removed the unneeded includes from cssys/system.h and cssys/sysdriv.h
	  from most of CS.
	- Slightly updated the simple.txi tutorial. Work in progress though.
	- Philip Wyett did a few fixes that Jorrit forgot to do.
	- Christopher Nelson did the following:
	    - Fixed an irritating bug that caused nested controls to not be
	      able to get their settings by implementing a recursive storage
	      system based on a novel idea called mid-rule parsing actions.
	      I was previously unaware of their existence.
	    - Fixed a forever recursion bug in the child draw loop.
	      csDLinkList is evil, methinks, since it is a circular list.
	    - Miscellaneous minor bug fixes here and there.
	    - Also fixed draw bug in awsCmdButton so that it draws the right
	      side of the button properly.
	    - Apparently introduced another forever recursion bug somewhere,
	      but I think I know where that is.
	    - Improved the look of awsCmdButtons.
	    - Cleaned up some debugging output.
	    - Fixed bug where children of windows wouldn't move with them
	      properly.
	    - Added functionality to button so that it now does text and gets
	      the frame and alpha types from the definition. Buttons don't
	      look half-bad, actually.
	    - Fixed small bug related to centering of text.
	    - Fixed a bug related to the awsTexture manager. It seems that
	      textures must ALWAYS be registered with the CS_TEXTURE_3D flag in
	      order to work. Therefore, I fixed that problem, and also fixed a
	      couple of other stupid bugs (like not calling Prepare...)
	    - Added images to window to see how they look. Still need to
	      surround them with buttons. Also need to fix windows getting
	      messages ahead of children. That will break things in the
	      future. Also need to add user interface for adding keys into a
	      specific level for run-time component controls.
	    - Fixed another dumb bug by getting rid of DLinkList entirely.
	      Components now rely on csBasicVector. Repeat after me:
	      csDLinkList is evil, csDLinkList is the antichrist.
	    - Took out some more debugging stuff. unfortunately, I have some
	      odd debugging something somewhere, so there are transparent
	      lines through windows when they get fragmented.
	    - Implemented full draw functionality for buttons. Well, almost
	      full. Haven't implemented the icon drawing function, but
	      textures are now active.
	    - Added some more functionality for windows, so they now get
	      their options from the definition.
	    - Made some changes in the definition file and the default
	      textures file. Made them a little bit different.
	- Martin Geisse removed ptlab since it is no longer needed.
9-Oct-2001
	- Removed iSystem::GetObjectRegistry().
	- The object registry is now a parameter to the system driver and
	  is no longer created by the system driver itself. Instead
	  csInitializer::CreateObjectRegistry() will now create the object
	  registry.
	- Moved the cleanup of the object registry to
	  csInitializer::DestroyApplication(). Also moved the cleanup of
	  SCF to there.
	- Added Clear() to the iObjectRegistry interface.
	- Several system drivers performed some special code right before
	  NextFrame() was being handled (Win32, BeOS, ...). This special
	  code has now moved to an event handler in the system driver instead.
	  The system driver will now listen to cscmdPreProcess and perform
	  the functionality that used to be in NextFrame().
	- Removed NextFrame() from iSystem, csSystemDriver and all subclasses
	  of csSystemDriver (SysSystemDriver for all platforms). In case
	  you needed to explicitely call this function (in CS only CSWS did
	  this) then you can call iVirtualClock::Advance() followed by
	  iEventQueue::Process().
	- csApp now calls Advance()/Process().
	- The result of this is that the iSystem interface has become empty.
	  So it can finally be removed!!! In addition CS_GET_SYSTEM is now
	  also gone.
	- Moved the virtual clock implementation in the system driver to
	  a separate csVirtualClock in csutil. The system driver no longer
	  creates and manages the virtual clock. The already existing
	  csInitializer::CreateVirtualClock() will now create and register
	  the virtual clock.
	- Fixed a crash-on-exit bug introduced with the changes above.
	- Got a patch from Jorge Acereda Maci which adds the -logo/-nologo
	  commandline option and the Walktest.Settings.DrawLogo config
	  option. With this option you can disable the CS logo in Walktest.
	  It is still enabled by default.
	- Moved the creation of the input drivers (mouse, keyboard, and
	  joystick) from the system driver to
	  csInitializer::CreateInputDrivers(). CreateInputDrivers() is
	  automatically called from csInitializer::CreateEnvironment() so
	  this should have no effect on all current applications.
	  Note that CreateInputDrivers() has to be called after creating
	  the config manager (csInitializer::CreateConfigManager()).
	- csInitializer::MainLoop() now creates its own event handler to
	  listen for cscmdQuit. It no longer depends on csSystemDriver::Loop().
	- csSystemDriver no longer has its own iEventHandler to listen
	  for cscmdQuit. In addition csSystemDriver::Loop() has been removed.
	  Note that this breaks the Macintosh port as it was doing a lot
	  of processing in its subclass of Loop(). To fix this I think the
	  best approach is to move part of this to the initialization of
	  the system driver and another part to a cscmdPreProcess stage.
	- csInitializer::DestroyApplication() now calls CloseApplication()
	  first.
8-Oct-2001
	- Moved the creation of the config manager and the command line
	  parser from the system driver to the respective csInitializer
	  function.
	- Some sub-classes of the system driver (Win32, DJGPP,
	  and Mac) created an iEventOutlet in the constructor. The problem
	  is that I want to move the creation of the event queue away
	  from that constructor. So I changed those system drivers to
	  create the event outlet later when I'm sure the event queue
	  will be created and registered in the object registry.
	- Moved the creation of the event queue from the system driver
	  to csInitializer::CreateEventQueue().
	- Moved the initialization of SCF from the system driver to
	  csInitializer::InitializeSCF().
	- Moved the initialization of the config file from csSystemDriver
	  to the new csInitializer::SetupConfigManager(). This function
	  must now be called to initialize the config manager (after
	  calling either CreateEnvironment() or else CreateConfigManager()).
	  Removed the parameter 'configName' from
	  csInitializer::RequestPlugins(). RequestPlugins() is no longer
	  responsible for loading the config file. It will simply use
	  the already loaded config files. If you don't need a config
	  file then you don't have to call this new routine. RequestPlugins()
	  or Initialize() will call it automatically in that case.
	- Removed the VFS variable from the system driver.
	- Removed csSystemDriver::SetSystemDefaults().
	  This change breaks the Windows -noconsole/console option. I will
	  have to fix this later using another technique.
	- Jorge Acereda Maciá <al004046@anubis.uji.es> fixed two bugs in
	  csSector::HitBeam() when no mesh was hit. In that case a null
	  pointer would result in a crash.
	- Thanks to some research from Matze Braun I fixed a fairly big
	  bug in csVector3Array. There was no constructor in that class
	  which means that the constructor from the parent csPoly3D
	  was not called. This resulted in a non-initialized csPoly3D which
	  could cause big problems in some cases.
	- Norman Kramer added new options in opengl.cfg for selecting internal
	  RGB format (RGB/RGB16/compressed). compressed is only working if you
	  enable the USE_EXTENSIONS define. This is for the OpenGL renderer.
	- Christopher Nelson did the following:
	    - Did some fixes in awstest.cpp for changes to iLightList.
	    - Added iAwsComponentFactory as an interface so that
	      it works correctly with the SCF stuff. Note that components CAN
	      be loaded from any library (shared or static, of course), but
	      they don't necessarily HAVE to be. Probably the best thing would
	      be if you had all the components in a specific plugin or
	      something, and you called one function to load the plugin and
	      give you an interface to it, then passed in the handle to the
	      window manager so that it could in turn register all of it's
	      components. Currently, all the components that come stock with
	      Aws are all in the same library and are registered by the
	      window manager since it knows that they exist.
	    - Made a bunch of changes to fix awsComponentFactory bugs that
	      cropped up the first time I made a new component that actually
	      has to be built the normal way. (Windows are exceptional.)
	    - Added the awsCmdButton class as a component. Also as an example
	      of how to do a component correctly. Don't look at awsWindow,
	      because it's a very unusual component.
	    - Added the awsCmdButtonFactory class to build buttons. Also
	      serves as an example of a proper component factory.
	      (awsWindow doesn't even HAVE a factory.)
	- Norman Kramer fixed initapp.cpp so it returns false if VFS could
	  not be loaded (spotted by Matze Braun).
	- Norman fixed g2dtest where a destructor was returning false.
	- Norman added a fix to line_g3d.cpp submitted by Jorge Acereda.
	- Norman fixed vsh where the call to Initialize() contained an
	  invalid NULL entry.
	- Philip Wyett fixed csfgen where the call to Initialize() contained an
	  invalid NULL entry.
	- Justin Miller added patch for NetBSD from Jorge Acereda.
	- Philip Wyett updated ext_w32.inc to take account of Normans changes.
	- Philip Wyett updated win32gcc.txi to take account of new 0.70
	  release of CS MingW.
	- Wyatt Miler did various typo corrections to the documentation.
	  Also updated version.txi.
7-Oct-2001
	- Wouter Wijngaards removed a warning in isomesh.cpp.
	- Norman Kramer added several fixes submitted by Jorge Acereda
	  <al004046@alumail.uji.es>:
	    - Added netbsd makefile.
	    - Added another patch for netbsd and a general fix.
	    - Bug in csparser. Returns NULL instead of false.
	- Wouter Wijngaards fixed a bug in csparser where it returned false
	  when a pointer was expected. Changed to return NULL instead.
	- Norman Kramer changed SoundRenderer to SoundRender in blocks.cfg.
	- Norman also added a new version of 3ds2lev contributed by
	  Luca Pancallo. Check out the readme.1st for more info.
	- Norman added code to make sure the mp3 loader sees input last (if
	  there is any mp3 loader). Reason for this is that the mp3 loader
	  scans for valid mp3 headers until it finds some and the bigger the
	  input the more likely it will find some.
	- Norman says he added some more sanity chacks to mp3data.cpp. I
	  wonder if he meant 'snack' instead of chacks :-)
	- Philip Wyett moved int64_t to the Win32 OS def file from the Ogg
	  Vorbis plugin where I origionally placed it. This version wil
	  cover both MSVC and GCC compilers on the Win32 platform.
6-Oct-2001
	- Martin Geisse made the following changes:
	    - Modified iLightList, iMeshList, iMeshFactoryList,
	      iCameraPositionList and iCollectionList to the new standard
	      list interface.
	    - Removed the custom FreeItem from some of these lists where it
	      was not needed. The function just DecRef'ed the removed objects,
	      which is already done by the parent object vector class.
	    - Removed the custom destructor in some of these lists where it
	      was not needed. These destructors did nothing but a DeleteAll(),
	      which is only needed if a custom FreeItem() is present.
	      Otherwise they can rely on the parent object vector class to
	      call DeleteAll().
	    - Removed special AddBla() and RemoveBla() functions from the
	      actual vector classes. They co-existed with the normal Push(),
	      Delete() and other functions and contained special code that was
	      not invoked by the normal vector methods. The special code was
	      moved to PrepareItem() and FreeItem().
	    - Fixed some bugs in the typed vector code.
	    - Added csBasicVector::Top() which works like Pop() but does not
	      remove the object. Also added Top() to typed vectors.
	    - Removed the PopItem() function from csRestrictedAccessVector.
	      FreeItem() is now also called for items that are removed with
	      Pop(). csIBaseVector achieves its special Pop() behaviour by
	      overriding Pop() directly.
	- Philip Wyett fixed several apps after Martin's changes.
5-Oct-2001
	- Removed csInitializer::SetupObjectRegistry(). Instead
	  csInitializer::Initialize() will now setup the object registry
	  will all known objects.
	- Removed csInitializer::LoadReporter(). Instead load the
	  reporter and reporter listener using csInitializer::RequestPlugins().
	  Added CS_PLUGIN_REPORTER and CS_PLUGIN_REPORTERLISTENER for that
	  purpose.
	- Significantly changed the syntax of csInitializer::RequestPlugins().
	  Instead of a bitmask for requesting additional plugins the
	  function now accepts a var-arg list for all needed plugins. For
	  every plugin you need, you must give the name (like
	  "crystalspace.graphics3d.software"), the SCF ID of the
	  interface implemented by that plugin and the version number of
	  that interface. To make this easier there is a macro
	  CS_REQUEST_PLUGIN which works as follows:
	    CS_REQUEST_PLUGIN("crystalspace.graphics3d.software", iGraphics3D)
	  To make things even easier there are even defines for a few standard
	  plugins:
	    - CS_REQUEST_VFS
	    - CS_REQUEST_FONTSERVER
	    - CS_REQUEST_IMAGELOADER
	    - CS_REQUEST_SOFTWARE3D
	    - CS_REQUEST_OPENGL3D
	    - CS_REQUEST_ENGINE
	    - CS_REQUEST_LEVELLOADER
	    - CS_REQUEST_REPORTER
	    - CS_REQUEST_REPORTERLISTENER
	    - CS_REQUEST_CONSOLEOUT
	  You need to end the list with CS_REQUEST_END. The simple1
	  tutorial contains an example of this.
	  NOTE! For a very short period it is actually required to
	  also included the FuncID in the name of the plugin (similar to
	  what you used to give with System->RequestPlugin() in the past).
	  The above defines already do that so if you use them you're safe.
	  Otherwise you have to keep in mind that this FuncID will have to
	  be removed in the near future.
	- Changed all apps using the new system to the above modifications.
	- Converted the demo app to use the new csInitializer system.
	- Added iObjectRegistry* parameter to
	  csInitializer::DestroyApplication(). DestroyApplication() will now
	  also remove the registered iEventHandler (with
	  csInitializer::SetupEventHandler()) from the event queue.
	- When an application does CS_QUERY_REGISTRY() to obtain the pointer
	  to some plugin it also has to do IncRef() on that pointer to
	  indicate to the system that it is using that pointer. At destruction
	  time a DecRef() should happen. A few apps (demo and blocks) where
	  not following that system so I fixed them (reminder: unlike
	  CS_QUERY_PLUGIN, CS_QUERY_REGISTRY does NOT increase the reference
	  on the returned pointer).
	- Converted cswseng application to use the new csInitializer system.
	- Converted cswstest application to use the new csInitializer system.
	- Converted picview application to use the new csInitializer system.
	- Converted demosky application to use the new csInitializer system.
	- Converted demosky2 application to use the new csInitializer system.
	- Removed the metademo application since flarge also demonstrates
	  the metaballs plugin.
	- Converted isotest application to use the new csInitializer system.
	- Converted mdltest application to use the new csInitializer system.
	- Converted perftest application to use the new csInitializer system.
	- Converted ptlab application to use the new csInitializer system.
	- Converted phyztest application to use the new csInitializer system.
	- Converted pysimple application to use the new csInitializer system.
	- Converted video application to use the new csInitializer system.
	- Converted awstest application to use the new csInitializer system.
	- Converted g2dtest application to use the new csInitializer system.
	- Converted gfxtest application to use the new csInitializer system.
	- Converted viewmesh application to use the new csInitializer system.
	- Converted simple2 application to use the new csInitializer system.
	- Converted simpmap application to use the new csInitializer system.
	- Converted simplept application to use the new csInitializer system.
	- Converted cslight application to use the new csInitializer system.
	- Converted csfedit application to use the new csInitializer system.
	- Made csSystemDriver::NextFrame() and HandleEvent() private so
	  that it is no longer possible to inherit from SysSystemDriver.
	- Removed Sleep() from csSystemDriver and iSystem. Instead there
	  is now csSleep() which should be called instead.
	- Eric Sunshine fixed some bugs in cygwin.mak.
	- Eric Sunshine eliminated "unused variable" compilation warnings from
	  csutil/parser.cpp, initapp.cpp, system.cpp.
	- Eric Sunshine removed dead code from system.cpp which resulted after
	  Jorrit's recent changes.
	- Eric Sunshine fixed a number of documentation errors in virtclk.h.
	- Eric Sunshine fixed the Apple/NeXT ports so that they once again
	  compile following Jorrit's recent changes to the system driver and
	  related facilities.  In particular, these changes were made to
	  NeXTAssistant:
	    - Now suspends and resumes the virtual time clock using the new
	      iVirtualClock object which is available via the object registry,
	      rather than invoking csSystemDriver's newly protected
	      SuspendVirtualTimeClock() and ResumeVirtualTimeClock() methods.
	    - Since csSystemDriver::NextFrame() is now private,
	      NeXTAssistant::advance_state() now advances the state of the
	      engine manually by invoking iVirtualClock::Advance() and
	      iEventQueue::Process(), thus duplicating the two bits of
	      remaining functionality in csSystemDriver::NextFrame().
	- Eric Sunshine added an Apple/NeXT-specific implementation of
	  csSleep() so that applications once again link on Apple/NeXT
	  platforms.  This is needed now that the default implementation in
	  csSystemDriver::Sleep() has been removed.  Ultimately, however, this
	  function needs to be eliminated since it is an improper way to
	  release the CPU on platforms which employ a native black-box run-loop
	  mechanism.  It also causes the native user environment to incorrectly
	  hang, and is therefore a bad-thing.
	- Eric Sunshine added a implementation of csSleep() to the BeOS port.
	- Eric Sunshine eliminated an "unused variable" warning from
	  ogl_g3dcom.cpp.
	- Norman Kramer removed the "old" mp3 parts (which only played layer
	  3 frames) and replaced it with a strip-off from the mpg123 package.
	- Norman fixed wrong targetname for the ogg .dep file.
	- Philip Wyett did the following:
	    - Removed ref to old win32itf.h and added winhelp.h (libcssys.dsp).
	    - Reverted Erics changes due to it breaking csStrNew and the
	      entire MSVC port.
	    - Modified mp3.mak so unix specific files are *not* added to
	      MSVC project files for attempted compilation.
4-Oct-2001
	- Removed support for old and obsolete 'debug_level' in system
	  driver.
	- Made a new class csCommandLineHelper (in csutil/cmdhelp.h) which
	  now has the functionality to give commandline help to the user
	  (i.e. support the '-help' commandline option).
	  Previously this functionality used to be in the system driver.
	  If you want to have commandline help in your application you need
	  to do something like:
	    if (csCommandLineHelper::CheckHelp (object_reg))
	    {
	      csCommandLineHelper::Help (object_reg);
	      exit (0);
	    }
	  This should be done after loading all plugins so that those plugins
	  get a chance to give their commandline help.
	  WARNING! This change breaks commandline help for ALL applications
	  except simple1 tutorial. The other apps will get commandline help
	  back as soon as they are converted to the new csInitializer system.
	- Implemented commandline help in Walktest to use the new system.
	  This means that it will use the new csCommandLineHelper to check
	  for commandline help and it also means that listens to the
	  global cscmdCommandLineHelp message to give its own additional
	  help (csCommandLineHelper will send such a global broadcast message).
	- Since we have an event handler in WalkTest now I also used it
	  to drive the frame drawing. This means that WalkTest now has a
	  SetupFrame() and FinishFrame() which are called in cscmdProcess
	  and cscmdFinalProcess respectively. As a consequence bugplug will
	  now again work correctly with WalkTest.
	- Did the same as I did with WalkTest to all other apps that also
	  required their own commandline help (metademo, ptlab, pysimp,
	  and squawk). Those programs now also use SetupFrame() and
	  FinishFrame().
	- csInitializer::RequestPlugins() no longer loads the image loader,
	  the level loader and the font server by default.
	- Changed csInitializer::RequestPlugins() so that it accepts a
	  bit-field for all plugins that need to be loaded. The following
	  values are currently accepted:
	    - CS_PLUGIN_NONE
	    - CS_PLUGIN_3D
	    - CS_PLUGIN_ENGINE
	    - CS_PLUGIN_LEVELLOADER
	    - CS_PLUGIN_IMAGELOADER
	    - CS_PLUGIN_FONTSERVER
	    - CS_PLUGIN_DEFAULT
	    - CS_PLUGIN_ALL
	  CS_PLUGIN_DEFAULT corresponds to CS_PLUGIN_3D, CS_PLUGIN_ENGINE,
	  and CS_PLUGIN_FONTSERVER.
	- Modified Blocks so it no longer inherits from SysSystemDriver.
	- Fixed a bug in the software sound renderer where it would not
	  test if the sound driver was actually there in Open().
	- Fixed a signficant bug in the sound renderer. The Initialize()
	  routine could fail if the sound driver was not found. In that
	  case the plugin will not be loaded. However, earlier in the
	  Initialize() routine the sound renderer was actually registering
	  it's iEventHandler to the event manager. And this was not
	  unregistered if there was an error. The end result was that
	  the next event send to the system would cause a crash since the
	  registered event handler was no longer valid. I fixed this problem
	  by moving the registration of the event handler after checking
	  if the sound driver is there. However this is an IMPORTANT point
	  and I hope there are no other plugins that are making the same
	  mistake!
	- Converted Bumptest so it no longer inherits from SysSystemDriver.
	- Converted WalkTest so it no longer inherits from SysSystemDriver.
	- Converted Squawk so it no longer inherits from SysSystemDriver.
	- Justin Miller added static csString::Format() methods for safely
	  formatting integral types.
3-Oct-2001
	- Added the following functions to csInitializer:
	    - InitializeSCF()
	    - CreatePluginManager()
	    - CreateEventQueue()
	    - CreateVirtualClock()
	    - CreateCommandLineParser()
	    - CreateConfigManager()
	  These functions are responsible for splitting up the initialization
	  process even more. The functions above are practically essential
	  for any CS application.
	- Added new csInitializer::CreateEnvironment() which calls all
	  of the above new functions and also calls CreateObjectRegistry()
	  (and returns it). Since most apps will want to call those functions
	  anyway it makes sense to have one call to do all that.
	- Christopher Nelson did the following:
	    - Updated AWS for bug help.
	    - Slightly modified interface in aws.h.
	    - Added support for MouseEnter and MouseExit messages.
	    - Fixed awsPrefManager so that it properly cleans up registered
	      constants.
	- Martin Geisse made the following changes:
	    - Renamed the following methods in iSectorList, iMaterialList and
	      iTextureList: AddBlah() to Add(), RemoveBlah() to Remove()
	      and GetBlahCount() to GetCount()
	    - Fixed an old bug that was present in many sub-subclasses of
	      csVector. If a subclass of csVector calls DeleteAll() in the
	      destructor, and a subclass of that class overrides FreeItem(),
	      it must also override the destructor again and call DeleteAll()
	      there.
	    - Added a new kind of typed vector called 'restricted access
	      vector'. These vectors do not allow to assign elements
	      directly, but only through methods like Push() and Replace().
	      They also contain three virtual methods, PrepareItem() which is
	      called for every added element, FreeItem() which is called for
	      every deleted element, and PopItem() which is called for every
	      item that was removed with the Pop() function.
	    - Re-implemented iBase-vectors with this new kind of typed vector,
	      since they are actually a subset.
	- Norman Kramer did the following:
	    - Updated iso engine for latest changes to iMaterialList.
	    - Additional readme to point to the ogg vorbis package on the net.
	    - MP3 playing for CS based on mpg123 by Michael Hipp. I used the
	      mpglib from that package, which imposes some restriction
	      currently (for instance no 192kbit resolution). Also there
	      is a problem that playing starts to stutter after a while and
	      application becomes unresponsive - this can be, however, a bug
	      in the oss driver, we'll see.
	- Philip Wyett fixed Win32 GL canvas so it correctly clips to screen
	  in fullscreen mode.
	- Philip also fixed the python and lua plugins.
2-Oct-2001
	- Changed the csInitialize... functions in cstool to static member
	  functions of the class csInitializer. There are now the following
	  functions in csInitializer:
	    - CreateObjectRegistry()
	    - RequestPlugins()
	    - Initialize()
	    - LoadReporter()
	    - SetupObjectRegistry()
	    - OpenApplication()
	    - CloseApplication()
	    - SetupEventHandler()
	    - MainLoop()
	    - DestroyApplication()
	  SetupObjectRegistry() will now try to find the following plugins
	  and if present it will add them to the object registry as default
	  plugins (with NULL tag):
	    - iVFS
	    - iGraphics3D
	    - iGraphics2D
	    - iFontServer
	    - iEngine
	    - iConsoleOutput
	    - iLoader
	    - iImageIO
	    - iReporter
	    - iStandardReporterListener
	- Added cscmdProcess and cscmdFinalProcess. There are now the following
	  broadcast events relevant to frame processing:
		- cscmdPreProcess: this is called first and allows apps and
		  plugins to basically do some preprocessing before rendering.
		- cscmdProcess: in this pass the application should render
		  to the screen. But NOT the actual printing of the display.
		  That should happen in cscmdFinalProcess.
		- cscmdPostProcess: in this pass plugins or apps can add
		  additional information on top of the previously rendered
		  display. Some uses are HUD overlays or debugging information.
		- cscmdFinalProcess: this is the final pass. The application
		  should use this pass to actually print the resulting
		  display to the 3D driver.
	  So most apps will be interested in catching cscmdProcess and
	  cscmdFinalProcess.
	- Modified the simple1 tutorial app to all the changes above.
	  Instead of NextFrame() there is SetupFrame() and FinishFrame().
	- Fixed BugPlug so that it no longer does FinishDraw() and
	  Print() in its cscmdPostProcess handler. This will now have to be
	  done by the application in cscmdFinalProcess. This has the very
	  nice effect that BugPlug can now properly overlay messages on
	  top of the 3D view without the flicker effect. Note that BugPlug
	  will now only work correctly (for these overlays) for apps that
	  actually use the new cscmdFinalProcess system. Add this moment
	  only simple1 does that.
	- Added iVirtualClock which is a new interface that implements some
	  stuff that used to be in iSystem. The following functions are there:
	    Advance(), Suspend(), Resume(), GetElapsedTicks(), and
	    GetCurrentTicks().
	- Removed iSystem::SuspendVirtualTimeClock(), ResumeVirtualTimeClock(),
	  and GetElapsedTime(). Use iVirtualClock now.
	  The system driver now implements iVirtualClock and puts it in the
	  registry with NULL tag.
	- The system driver will now register a lot of the common objects
	  using the NULL tag instead of a name. The NULL tag is meant to be
	  for default objects so this is better.
	- Wouter Wijngaards changed picview app:
	    - Title of main window is now 'Image view' not '3d view' :-)
	    - Main window has smaller border, no menus/buttons, and cannot be
	      moved/sized.
	    - Redraw is OK when no image is being displayed.
	    - Image is positioned nicely at original size.
	- Christopher Nelson did the following:
	    - Fixed a couple of bugs related to searching for a window def
	      when there are none.
	    - Added in the text-attribute to the parser. This means that a
	      user can now specify Frame styles as follows:
		Style: wfsNormal | wfsMinMaxClose
	    - Text constants are part of the expression solver, so you can use
	      all normal arithmetic operators (+, -, *, /, &, |, ^, "()", etc.)
	      with them.  The expression is solved at parse-time, so it
	      becomes a constant when queried. Text constants resolve to an
	      integer value in all cases.
	    - Added RegisterConstant(), ConstantExists() and
	      GetConstantValue() to the awsPreferenceManager so that constants
	      can be used by the parsing engine.
	    - These types of parameters are queried the same way that all
	      other parameters are, so there is no additional syntax needed
	      for component designers.
	    - Fixed a few minor bugs regarding component naming.
	- Philip Wyett fixed fullscreen bug in OpenGL canvas for Windows
	  where display misses depth.
	- Norman Kramer did the following:
	    - Extended AddToBufferStatic to handle streamed sounds.
	    - Since everybody talks about it but no one seems to implement it:
	      here is ogg vorbis fo CS :)
1-Oct-2001
	- Christopher Nelson removed debugging output in csrectrg.cpp since
	  csRectRegion now seems stable.
	- Martin Geisse made the following changes:
	    - Modified iTextureList, iMaterialList and iSectorList to
	      contain equivalent functions and also added some functions.
	      This means that iSectorList::GetSector() has been renamed to
	      Get().
	    - Added Delete(pointer) to csBasicVector, csVector, typed vectors
	      and object vectors.
	    - Changed csMovableSectorList to use the object vector macro
	      (nodelete version).
	    - Started to clean up the region code.
	- Norman Kramer fixed iso engine so it compiles again.
	- Christopher Nelson did the following:
	    - Fixed a small bug that had to do with invalidating windows
	      when focus changed.
	    - Added a bit of code to awsWindow::OnDraw() that makes the
	      titlebar of the focused window be bright.
	    - Fixed the dumb bug where if you had two window on screen, one
	      of them would disappear if you moved the other.
	    - Next up for windows:  close, max and minimize buttons.
	    - Fixed the resize bug. Window moving and resizing should now be
	      fine. Except for the "core dump on move to low" bug.  Not sure
	      what's causing that, and I have a feeling that it could be in
	      the proctex code.
	    - Added event broadcast to children. Events propagate as follows:
		- The window first gets a chance at all events.	 If it uses
		  them, then propagation stops there.
		- Mouse events propagate to the window that contains it.
		  Equally, mouse events only propagate down the hierarchy to
		  components that contain the mouse.  Mouse events are NEVER
		  propagated to any component that does not contain the mouse,
		  except for MouseExit messages which are sent to the component
		  that just lost the mouse.
		- Keyboard events propagate to EVERY child of the active window
		  until one decides to accept them.  This will change in the
		  future so that the currently focused component gets keyboard
		  messages.  The other common way to do this is to limit
		  keystrokes to the field that the mouse is over.  I dislike
		  this way of doing business, however, since it requires you to
		  not bump the mouse.
30-Sep-2001
	- Norman Kramer removed some token defs from the thing loader.
	- Martin Geisse added some safety checks for missing plugins to the
	  level loader and removed the unused reference to the motion manager.
29-Sep-2001
	- Norman Kramer did the following:
	    - ballldr: Replaced last two printf with Report.
	    - ballldr: Fixed classname in error msg of mixmode.
	    - Added GetVertices, GetVerticesC and GetVerticesW to
	      iThingState to return a const csVector3*.
	    - Added ParseTexture, ParseWarp and ParsePoly3d to syntaxservices.
	      This will be handy for writing your own thing addons.
	    - Thing loader now uses syntax services to parse polygons and
	      stuff.
28-Sep-2001
	- Drastically increased quality of OpenGL texture mapping
	  in 16-bit mode. An alpha channel was selected for all textures
	  even if no alpha was needed which means that the texture
	  was convert to 4-4-4-4 mode (4 bits for every color and alpha).
	  This causes image degradation. Thanks to Norman Kramer for
	  spotting this.
	- Fixed a bug with the change above.
	- Fixed additional bug in OpenGL texture mode selection so that
	  textures with alpha channel are now also correctly transparent
	  like before (i.e. GL_RGBA is used).
	- Christopher made the following changes:
	    - Some bug fixes on awswin.cpp.
	    - The redraw system was optimized even more. Instead of blitting
	      the whole proc texture on every redraw, the proc texture is only
	      blitted when there are window move or size events. Otherwise
	      the system maintains an update store of regions that contain
	      windows. Only those regions are blitted. Of course, this
	      doesn't save very much if you have a big, full-screen window,
	      but it does if you have only a few small windows. This was
	      implemented primarily because:
		- if you plan on having big full-screen windows (like for an
		  editor, etc.) then you should run AWS on the primary canvas
		  rather than the proc texture.
		- most games also have small HUD widgets that display useful
		  information.	Usually these are pretty small items, and
		  they're all over the screen.	Developing these with AWS lets
		  you use the built-on event handlers and they're automatically
		  updated.
		- for systems with smaller windows, it's a huge speed increase.
		  In the software renderer it's at least twice as fast.
	    - Added a fragment buffer to the region so that collisions can
	      be handled more simply and correctly.
	    - Reworked the include function to understand the fragment
	      buffer.
	    - Broke the exclude function when he added the fragment buffer.
	    - Made a small optimization to the fragmentation routines that
	      fix the fragment operation for some cases where the smaller
	      rect needs to be fragmented.
	    - Added fragment marking and gathering operations.
	    - Killed chopIntersection because it didn't work right.
	    - Added more documentation to the header.
	    - Turned of clipping because he wasn't doing it right.
	    - Added a fragment rect display so that you can visually see
	      what areas of the screen are being redrawn and copied each
	      frame. Note that the ideal here is no overdraw. I think that
	      the current system accomplishes that.
	- Norman Kramer added new syntaxloader plugin for common syntax
	  elements. This plugin contains functions for loading matrices,
	  vectors, polygons and other common objects that have to be parsed
	  by several of the loader plugins.
	- Norman also fixed the 3ds.mak makefile.
	- Norman extended syntax services with writing capabilities.
	- Norman rewrote ball and cube loaders to use the syntax services.
	- Martin Geisse slightly improved the comments in some interface
	  headers.
	- Philip Wyett defined a FUNCID for new TextSyntaxService, fixing
	  compile errors in ball and cube loaders. Creator can redefine as
	  they see fit this just repairs errors.
	- Wyatt Miler fixed a few typos in msvc5.txi and msvc6.txi.
27-Sep-2001
	- The alphamap for textures in the software renderer was not cleaned
	  up at destruction.
	- Added iTextureHandle::GetOriginalDimensions() which returns the
	  dimensions of the image used to create the texture. This is
	  most often equal to GetMipMapDimensions(0) but in some cases
	  hardware restrictions require that the texture is resized (i.e.
	  maximum texture size or power of two).
	- Implemented GetOriginalDimensions() in default texture manager
	  for all 3D renderers and added a specialized implementation
	  in OpenGL renderer because there the resize of textures can
	  happen in some cases.
	- Fixed csSimplePixmap to use GetOriginalDimensions() instead
	  of GetMipMapDimensions().
	- Fixed csWSTexture (CSWS) to use GetOriginalDimensions() instead
	  of GetMipMapDimensions().
	- Fixed OpenGL::DrawPixmap() so that it correctly scales the image
	  to display when the image was resized.
	- All the above changes make sure that pixmaps now behave the same
	  with software and OpenGL even if the image for the pixmap has
	  sizes that are not OpenGL conformant. In the past this was not
	  the case.
	- Added apps/tools/picview which is a primitive application to
	  show images. Currently it doesn't accept commandline arguments
	  but just lets you go over all images in a directory. Future
	  enhancements are going to be useful and the layout for the
	  button window must be improved.
	- Norman Kramer added missing decref of terrfunc mesh object.
	- Christopher Nelson fixed the following:
	    - More problems with fragment rules being slightly incorrect, and
	      one rule being completely wrong.
	    - The Include method, which is now slightly less optimal because
	      I couldn't get chop edge intersection to work consistently.
	    - A few items here and there related to accuracy.
	- Christopher also did the following:
	    - Along with the fixes to csRectRegion, I made a few changes
	      to the redraw code which will hopefully eliminate droppings.
	      I realize that there are a few cases where this still occurs,
	      and I'm unsure why.
	    - The critical path to redraw a window is now a little shorter.
	    - Redraws are now a little cleaner, and less complicated. As
	      well, handling events is now cleaner as well. Top windows are
	      checked for containment of the mouse before being sent events.
	      If a window is not the container window, it is lowered and the
	      container is risen. MouseEnter and MouseExit do not work yet,
	      since they require a little more functionality from container
	      components.
26-Sep-2001
	- Added the following new initialization functions to initapp (cstool
	  library):
	    - csInitializeApplication() which creates and returns an
	      object registry. Should be called first.
	    - csInitializeQueryPlugins() which requests a few standard
	      plugins (3D, engine, ...) and also makes sure the commandline
	      and config file are queried for other plugins.
	    - csInitializeStartApp() which initializes all loaded plugins.
	    - csInitializeReporter() which optionally creates a reporter
	      and reporter listener.
	    - csInitializeRegistry() which will update the registry with
	      a few common objects (like 3D, engine, ...).
	    - csInitializeOpenApp() which will open the application.
	    - csInitializeEventHandler() which initializes the event handler
	      so that the application knows when to draw a new frame
	      and also gets other events (keyboard, ...).
	    - csStartMainLoop() to start the main event loop for the
	      application.
	    - csDestroyApp() to destroy the application.
	  The purpose of these functions is to provide a new way to
	  initialize the application. Keep in mind that the system driver
	  will be removed in the future. Using the functions above you can
	  now make an application that doesn't have to inherit from
	  SysSystemDriver. At this moment the old way to create an
	  application still works (inheriting from SysSystemDriver) and
	  the old csInitializeApplication() is also still there. I will
	  not remove the old system until I got enough feedback from the
	  new system to see if it is indeed the appropriate way to do this.
	- Modified the first simple tutorial to use the new initialization
	  technique. Simple1 no longer inherits from SysSystemDriver.
	- Shawn Carroll found a bug in the OpenGL texture cache where
	  'if (thhack = 0)' should be 'if (thhack == 0)'.
	- Philip Wyett added missing 'struct iEvent' and 'struct
	  iEventHandler' to initapp.h.
	- Norman Kramer added missing include of evdefs.h.
25-Sep-2001
	- Fixed a bug in csTransform::Other2This and This2Other for
	  csSphere. The radius was not always calculated correctly.
	  This bug could cause errors in visibility culling. Sometimes
	  an object was considered invisible even if it was visible.
	- Fixed Python plugin for recent CS changes (const GetVertex...).
	- Fixed LUA plugin for recent CS changes (const GetVertex...).
	- Norman Kramer added makeEmpty to csrectrg.h and did another fix
	  with regards to setting a pointer to NULL.
	- Norman Kramer made some changes to the parser so that the problem
	  is solved where you have 2 tokens and one being a substring of
	  another. Previously you had to write the longer first. This is
	  solved by sorting the tokentable according to the length of their
	  elements.
	- Christopher Nelson did the following:
	  Modified Norman's changes because:
	    - The makeEmpty code was already present in the .cpp where it
	      should have been implemented anyway.
	    - Norman's code, while certainly not incorrect, did a lot more
	      work than is necessary or possibly even advisable. makeEmpty is
	      called at the end of each frame. So much deallocation and
	      reallocation would thrash the heap and would create much more
	      work than is needed. The point of makeEmpty is not to empty
	      the memory out, but to empty the list. The easiest way to do
	      that is simply to reset the count.
	- Philip Wyett removed the aws plugin and test application from the
	  default CS build process.
24-Sep-2001
	- Christopher Nelson did the following:
	    - Fixed some more bugs in the RectRegion code. Hopefully there
	      are no more serious bugs. There is some small test code in
	      awstest now.
	    - Added csRectRegion into the awsManager instead of the older
	      bucket format. This method is more flexible and probably
	      faster. It's also cleaner because there's no special case code.
	      All rects are assumed to be optimal in the region.
	    - Cleaned up a couple of items related to older redraw code.
	- Philip Wyett did the following:
	  Updated winlibs version number to 0.19h.
	  Note this version of winlibs is the same as 0.19g but the
	  zlib and png libs and dll's have been built with VC6 using
	  the /LINK50COMPAT so they are again VC5 compatible.
	  The new version of winlibs can be obtained via the
	  Crystal Space documentation under MSVC specific build
	  instructions - where links to the file on both the CS ftp site
	  and my own mirror can be found.
22-Sep-2001
	- Norman Kramer did some fixes on emit loader with regards to
	  reference counting.
21-Sep-2001
	- Fixed csSector::IntersectSegment() so that it no longer ignores
	  all the other meshes if there is a culler. The culler is now
	  used in addition to the other meshes.
	- Added a new optional parameter to csSector::IntersectSegment()
	  to return the mesh wrapper that is hit.
	- Changed the return value of csSector::HitBeam() to csMeshWrapper
	  (instead of csObject) and the return value of iSector::HitBeam()
	  to iMeshWrapper.
	- Modified csSector::HitBeam() so that it will actually return the
	  mesh wrapper that is hit instead of the csObject. This mesh will
	  also be returned in all cases now.
	- Accordingly modified csPortal::HitBeam().
	- Wouter Wijngaards added better comments for iBallState.
20-Sep-2001
	- Fixed the bug in csFrustum::Classify() and BatchClassify().
	  It now seems to work properly in all cases I could find.
	- Made iPolygon3D and iThingState; GetVertex(), GetVertexW() and
	  GetVertexC() return a const csVector3. Also made Vwor, Vobj, and
	  Vcam in both csThing and csPolygon3D return a const csVector3.
	- Added VBLOCK statement for the thing loader. That statement
	  will generate 8 vertices in the shape of a block. Extended
	  the parsing of VERTICES (or V) statement inside polygon so that
	  you can now say:
	    VBLOCK (x1,y1,z1, x2,y2,z2)
	    P 'north' (V (n))
	    P 'south' (V (s))
	  It is also possible to use:
	    P 'north' (V (n,8))
	  with 8 the index of the first vertex generated by VBLOCK.
	  If that index is not given then it is assumed that the 8 vertices
	  from the block were generated last (i.e. no other vertices
	  are added between the VBLOCK and P statements).
	- Also added VROOM statement which is equivalent to VBLOCK but
	  it will generate the vertices in reverse order. This means that
	  polygons generated from this will be visible from the inside.
	- If only TEXLEN is given for a polygon and the polygon happens
	  to be coplanar with the X, Y, or Z plane then one of the default
	  planes will be used. i.e. saying:
	    TEXLEN (5)
	    P 'n' (V (...))
	  is now completely equivalent to saying:
	    P 'n' (V (...) XPLANE (x,5))
	  (provided the polygon is coplanar with the X plane at the location
	  'x'). This change makes it very easy to align the textures on
	  polygons that are adjacent. In fact they will now be automatically
	  aligned if you use TEXLEN.
	- Also made it possible to issue a LEN statement outside the
	  TEXTURE statement. So you can now say:
	    P 'n' (V (...) LEN (5))
	- The above modification to TEXLEN and LEN makes the commands
	  XPLANE, YPLANE, and ZPLANE obsolete so they are now removed.
	- Added csThing::RemoveUnusedVertices(). This function will remove
	  all unused vertices for a thing. It is currently always called
	  when CompressVertices() is called. So by default it is now called.
	- Optimized csThing::CompressVertices() so that it doesn't do anything
	  when there are no duplicate vertices.
19-Sep-2001
	- Wouter Wijngaards did the following:
	    - New command: PaintSky for the ball mesh. demosky2 animates it,
	      see the sun move across the sky, day and night.
	    - Slightly fixed nighttime to be blacker. FPS is good! Computation
	      of a frame costs about 0 msec for me :-) Drawing is the ball
	      mesh only, so it performs well.
	- Norman Kramer fixed OpenGL software proctextures so that they
	  are now released fine.
	- Norman hopefully fixed the text problem in OpenGL 16 bit modes.
	- Norman added the created proctexture as child to the materialwrapper
	  of that proctexture - this ensures the object is destructed.
	- Norman fixed a crasher in the fire procedural texture due to an
	  unitialized fireline variable.
	- Christopher Nelson did the following:
	    - Finished all cases for the rectangle fragment function. Code
	      is untested.
	    - Also updated Exclude to actually do something useful.
	      This code is still untested, and incomplete since the inverse
	      edge intersection part is still unwritten. This means that it
	      does not generate correct regions for some cases.
	    - Realized that code for proper fragmentation of edge cases in
	      exclude already exists, I simply have to call it for an
	      intersection rather than a whole. Changed code to perform this
	      function. Regions should now be correct and optimal. Note that
	      the code is still untested.
	    - Fixed a bug in fragmentRect that caused pushRect to
	      accidentally overwrite the ymax member of r1 when called.
	      I did this by renaming the reference parameters and copying
	      them into two local parameters made on the stack. While this
	      functions correctly, the old method SHOULD have worked fine
	      too. I suspect that this may have to do with either a memory
	      leak somewhere, or an odd compiler bug.
	    - Added some diagnostic messages to fragmentRect to help me find
	      out which rules are behaving incorrectly.
	    - Added A new function Count() which retrieves the number of
	      rects in the region.
	    - Added a new function RectAt() which retrieves the rect at the
	      specific location.
	- Philip Wyett removed a redefinition of 'i' in ball mesh.
	- Matze Braun <matze@braunis.de> made a cygwin port for CS.
	- Fixed a bug in csFrustum::Classify() and BatchClassify().
	  Unfortunatelly this does not yet fix the routine completely
	  as there still is a test-case where it fails (returns COVERED
	  instead of OUTSIDE).
	- Fixed a delete to delete[] in prsky.cpp
	- Added CS_THING_NOCOMPRESS flag which can be used to disable
	  vertex compression for a thing (removal of duplicate vertices).
	  This removal of duplicate vertices is now on by default (used
	  to be off).
	- Added iRenderView::TestBSphere() which is a simpler version
	  of iRenderView::ClipBSphere(). It doesn't initialize the
	  clip_xxx variables but only tests if the object is (partially)
	  visible or not.
	- csThing::DrawTest() now uses the new TestBSphere() function instead
	  of doing this test on its own. This also fixes a bad bug in this
	  routine. The old DrawTest() function was actually badly broken.
	  In some cases it would actually cull away meshes that were visible.
	  This happened mostly if the following three conditions are true:
	    - The bounding box of the mesh closely matches the mesh itself
	      (which is usually the case with room meshes since they are
	      often square-shaped).
	    - The bounding box of the mesh is very large.
	    - Only a small part of the bounding box was visible.
18-Sep-2001
	- Changed orientation for default XPLANE so it matches better
	  with ZPLANE.
	- Philip Wyett Removed VC on exit crasher workaround. Under dev team
	  agreement a crasher is preferred to a possibly forgotten
	  workaround until the errors true source is located.
	- Wouter Wijngaards added a new idea for doing skydomes that should
	  be performant. This uses the ball mesh and gouraud shading. Added
	  demosky2 app with a small demo of current options:
	    - A vertical gradient can be displayed easily.
	    - A lightspot can be created - for the sun for example.
	- Norman Kramer removed a debugging message in thing.cpp.
	- Norman Kramer did the following for OpenGL renderer:
	    - Refcounting is fine now for normal textures.
	    - Refcounting is screwed for procedural textures but at least the
	      openglrender does not crash :)
17-Sep-2001
	- Added the following short-hands to the thing loader:
	    - V for VERTEX in a thing or thing-part.
	    - V for VERTICES in a polygon or bezier.
	    - P for POLYGON.
	- It is now also possible to use the PLANE statement outside
	  the TEXTURE statement. This is shorter to specify. i.e. instead
	  of POLYGON 'p' (... TEXTURE (PLANE ('xxx'))) you can now
	  say: POLYGON 'p' (... PLANE ('xxx')).
	- Added new XPLANE, YPLANE, and ZPLANE statements for a polygon.
	  These will create a texture plane with the given direction,
	  position, and density. If the plane was already created then
	  it will be reused. Notation is XPLANE (x,dens). 'dens' is
	  the tile value for the texture. dens==2 means the texture will be
	  tiled once in an area of 2x2 units.
	  Note that these new statements are for convenience. They don't
	  give much control over how the texture will be aligned on the
	  polygon (i.e. the uv shift). If you want full control you still
	  have to use the ADDON keyword with the plane plugin.
	- Fixed a bug in the thingldr plugin.
	- Norman Kramer did the following:
	    - In ObjRemoveAll the counting was from 0 to vec-length, of
	      course it should be the other way around. that prevented
	      removal (and thus destruction) of added objects. fixed.
	    - The GetColliderWrapper did not decref its results.
	    - Walktest now cleans up the colliderwrappers and thus the
	      collision plugin (did not test with -hugeroom and -infinite),
	      now only the proc texture issue remains for cleanly exiting.
	    - Ok, could not go sleep w/o having tested the -infinite and
	      -huge switches. inifite now works and huge does at least not
	      crash (previously a NULL material was assigned to polygons),
	      however, nothing can be seen.
	- Philip Wyett added an IncRef to sprstate in demosky.
16-Sep-2001
	- Print out polygon name in error message indicating overflow
	  in number of vertices.
	- Print out error message if a plane cannot be found
	  (TEXTURE (PLANE (...)) statement.
	- Martin Geisse reverted his latest change to scfreg.
	- Norman Kramer did the following:
	    - awscomp.cpp: mgr and hidden variable were not explicitly
	      initialized, also the first condition in Setup was wrong
	      (that was the reason that prevented showing the Splash window
	      on systems where the variable are initialized to zero by
	      default).
	    - csloader.cpp: Meshreferences never made it into the engines
	      meshlist, thus they were never freed.
	    - Childs of an hierachic meshobject needed an incref after they
	      were added to the containing childs list of children.
	    - In ControlMeshes added same precaution for removing mesh from
	      list as in DeleteAll.
	    - Added RemoveMesh to csEngineMeshList which encloses the removal
	      with and IncRef/DecRef, removed the enclosing of RemoveMesh
	      with IncRef/DecRef from the remaining of engine.cpp.
	    - walktest: Did some more work on refcounting.
	    - walktest: Simplified some code.
	    - walktest: In few cases changed from csBlah to iBlah.
	    - Changed GetData() in dataobj.h so it does no longer IncRef's the
	      found child.
	- Philip renamed of timing.cpp to timing32.cpp to avoid conflict with
	  general/timing.cpp.  First seen and reported by: turboj@gmx.de.
15-Sep-2001
	- Martin Geisse fixed a problem with scfreg where it only entered the
	  library file name to scf.cfg but not its path.
	- Norman Kramer did the following:
	    - Added GetDimensions() to csProcTexture.
	    - Removed fire, water and plasma and replaced their use with the
	      respective classes from cstool .
	    - The remaining procedural textures are now derived from
	      csProcTexture.
	    - Cleaned up refcounting, the remaining unreleased references are
	      due to an issue with mesh hierachies.
	    - csdllist.cpp: SetCurrentItem did set the current item to NULL
	      if the searched object was not found, this was bad, since
	      subsequent call to AddCurrentItem and similars fail if
	      currentItem is NULL. Now the methods sets it only if the item
	      actually exists and returns its container, otherwise returns
	      NULL.
	    - csloader.cpp did not release the reporter.
	    - The refcounting police is at it again (aws), there were also few
	      other resources not released that are now hopefully cleanly
	      destroyed.
	    - Safer version of SetImageFile in texture.cpp.
	- Philip Wyett fixed a bad delete from const char* to void* in pttex.h.
14-Sep-2001
	- Eric Sunshine eliminated a compilation warning in meshobj.cpp
	  regarding unused variable.
	- Eric Sunshine eliminated several copmilation warnings from 3dsco.cpp
	  regarding implicit conversion of float to int.
	- Philip Wyett did the following:
	    - Added missing DM_BITSPERPEL.
	    - Added use of 'SetForegroundWindow(m_hWnd);' Use of this
	      function adds a higher priority to the thread which created this
	      window, than is normally given to Window creation and brings
	      it to the foreground.
	- Norman Kramer found a case where texturehandle inside materialhandle
	  was not decref'ed.
13-Sep-2001
	- Norman Kramer did the following:
	    - Solved the double T problem in demosky (hitting 't' two times
	      caused crashing). Problem was that althought not all animated
	      textures were prepared yet, they were updated when syncing with
	      current time.
	    - Another batch of refcounting changes.
	    - The revisited refcounting finally led to really destructing the
	      low level classes like shadowmaps etc.. this revealed another
	      problem with the staticarray, where in the destructor a pure
	      virtual function was called.
	    - Curve now implements the iVertexBufferManagerClient interface.
	    - Changes to the destructor of csThing: the polygons need to be
	      deleted prior to deleting the portal_polygons.
	- Philip Wyett removed MSVC quick square root asm code as there's
	  nothing quick about it, once the pragmas are removed and it works
	  without error again.
12-Sep-2001
	- Norman Kramer did the following:
	    - Fix to cswseng problem (before it worked for me 2 out of 3
	      times, now it does 3 of 3 :)
	    - Refcounting for imagehandles in software renderer was screwed.
	    - Other refcounting errors.
	    - Fixed bumptest and demosky.
	- Martin Geisse made the following changes:
	    - Added SetParentContainer() and WantToDie() to iMeshWrapper.
	    - Changed the 'object' pointer in csMovable from iMeshWrapper to
	      csMeshWrapper.
	    - Cleaned up the movable code a bit.
11-Sep-2001
	- Norman Kramer did the following:
	    - Added enclosing IncRef/DecRef pair when moving a sprite, so its
	      not destructed by accident.
	    - metasys.cpp: CS-ified and refcounting.
	    - Ok, i can't watch those horrible pictures from NYC any longer,
	      back to work .. refcounting.
	    - Meshobjectfactory in engine.cpp was not decrefed upon loading.
	    - A missing incref to spr3dldr.cpp in case the factorywrapper
	      had an objectfactory attached already.
	    - csdemo now releases all (?) references - well at least the
	      visible ones.
	    - isocell.cpp: a DecRef on removed sprites was missing.
	- Jan Dvorak fixed some compilation warnings in lots of source files.
	- Jan also fixed initialization of G3DTriangleMesh in perftest and
	  thus segfault when using OpenGL renderer.
10-Sep-2001
	- Andrew Zabolotny fixed OS/2 port so that it can use more than 32Mb
	  of memory. As it turned by default the EMX C library allows heap
	  to grow just till 32Mb of RAM.  This fixes various random crashes
	  even in levels of moderate sizes.
	- Andrew added *.exe, *.zip, *.txt and some other patterns to ignore
	  list.
	- Norman Kramer did the following:
	    - Applied Jan Dvorak's patch (for gcc3).
	    - Jan Dvoraks macro patch for slightly moderater use of ##, this
	      will make the gcc3 compiler (and 2.96-x afaik) more happy.
	    - Removed *.cfg from ignore list.
	    - Get and [] of csNamedObjectVector no longer increfing the
	      objects (Pop still does).
	    - csLoader::LoadTexture now has an additional DecRef on the
	      texturehandle (since the csTextureWrapper keeps track of it).
	    - All csEngine::CreateMeshFactory now return an IncRef'ed pointer
	      to the factory wrapper (prior to this it only was incref'ed for
	      newly created factorywrappers and not for factories that were
	      found in the factorylist).
	    - Bumptest now also terminates without leaving plugins unloaded.
	    - Demosky joins the growing list of "good" programs not leaving
	      unreleased instances (still something fishy with the seagull
	      texture - I don't know why I have to IncRef() it).
	    - CswsEng now nicely exits.
	    - Refcounting revisited for the isometric engine.
	    - Isotest joins the list of "good" programs.
9-Sep-2001
	- Norman Kramer did the following:
	    - Added a fix submitted by Luca Pancallo:
	      Fixed 3ds2lev. when we use -xzy or other conversion of coords, we
	      must convert also triangle generation or the texture will be
	      inside out. This is now fixed.
	    - Added decRef after a child factory was added, the previous
	      way to keep it increfed was wrong, since upon adding it to the
	      child list it gets incref'ed automatically.
	    - Modified simple2: added decref'ing of the created
	      meshwrapper, now simple2 also cleanly unloads the 3d meshobject
	      factory plugin.
	    - The incref police is at it again. there is still one
	      issue - it doesnt free the thingobjecttype.
	    - Updated the docs to the recent incref related changes.
	    - Added a new force to the physics library by Anders Stenberg
	      (Dentoid).
	    - The mother of all increfs has now been decref'ed (nobjvec.cpp).
	    - Implemented iVertexBufferManagerClient for the other meshes that
	      use the vertex buffer manager.
	- Philip Wyett made the following changes:
	    - Added missing ';' at the end of on eof the lines. :-)
	    - Changed class to match Terrain class rather than the
	      Surf one where it was copy and pasted from.
	- Justin Miller made some copied-and-pasted comments in several
	  sources more relevant (snow.* fountain.h fire.h).
8-Sep-2001
	- Philip Wyett fixed an inconsistency between MingW port and others
	  using GNU compilers.	All other ports use GCC for CC and G++ for CXX.
	  The MingW port was using GCC for both.  Changed to use G++ for CXX
	  rather than using GCC.
	- Martin Geisse changed the type of the 'parent' pointer of mesh
	  wrappers to (iMeshWrapper*). Meshes without a parent can store NULL
	  instead.
	- Norman Kramer added iVertexBufferManagerClient interface which
	  should be implemneted by objects using the vertexbuffermanager.
	  They will be called if the manger is closing, so the objects can
	  request a new buffer next time.
	- Implemented iVertexBufferManagerClient in spr3d as a testcase.
	- Norman added implementation of RemoveClient() and AddClient()
	  to the vertex buffer manager.
7-Sep-2001
	- Norman Kramer added DecRef() for lights that were added to sectors
	  (the lightlist does an IncRef() to the lights).
	- Norman added solution for meshes that are only held by the meshlist
	  which causes trouble when destructing the meshlist (see in-code
	  comment).
	- Norman added DecRef for the iMeshWrapper returned from
	  CreateSectorWallsMesh.
	- Norman changed the classname for simple2 from
	  crystalspace.application.simple1 to ...simple2.
6-Sep-2001
	- Fixed a bug in iLoader::LoadTexture(). This function would still
	  return a texture wrapper even if no texture handle could be loaded.
	  Now it will return NULL.
	- Fixed a bug in perftest with initialization of G3DTriangleMesh
	  structure.
	- Eric Sunshine reverted Norman's complex change to csinput and applied
	  a simple 3-line patch instead.  (In fact, when Eric designed the
	  csInputDriver class, he had intended that these three lines be
	  present, but simply forgot to type them.)
	- Eric also reports:
	  The reference count on csInputDriver::FocusListener's scfParent is
	  now correct.	I had forgotten that the default behavior in scf.h
	  had changed so that the parent's reference count is now only
	  incremented when a child object is created; rather than each time
	  the child's reference count increments (the old behavior).  Also now
	  ensures that the parent's and child's reference counts are properly
	  initialized before being registered as an event listener.
	- Philip Wyett updated links to CS MingW package to correspond with
	  new 0.60 version.
	- Philip Wyett did the following:
	    - Disabled profiling on by default in debug builds of CS plugins.
	      Profiling should only be enabled when is actually needed.
	    - Manually updated MSVC project files where applicable.
	- Norman Kramer reports while modifying csinput.h:
	  Moved the IBASE from the base class to the subclasses and made it an
	  embedded ibase. The previous let one register an inputdriver as an
	  eventhandler but the refcount was never incremented (because it was
	  an ibase and not embedded ibase). Thus it led to a deleted
	  inputdriver while the eventqueue still had the listeners
	  registered (which caused the crash at exit since the eventqueue
	  decrefs the listeners at destruction time). erm, did that explain
	  anything?
	- Norman added IncRef() of objects queried from the registry (returned
	  objects from registry have to be incref'ed if you want to store the
	  pointers).
	- Norman added test to prevent the "Warning: extra call to ..."
	  problem in stdrep.cpp.
	- Martin Geisse fixed a minor problem that occurs when using an
	  interface as the outer class for an embedded class.
5-Sep-2001
	- Eric Sunshine eliminated several compilation warnings from aseie.cpp.
	- Eric Sunshine removed the obsolete igame/csgame.h.
	- Norman Kramer did the following:
	    - Attempt to fix that crash in the eventhandler that occurs for
	      csws progs. the problem seems to be that the csws app does not
	      exist anymore (removed from stack before the systemdriver is)
	      if the close event is posted. also the csApp was modified to
	      remove the listener from the eventqueue when the csApp object
	      is deleted.
	    - Plugins variable in system driver is now really emptied.
	    - Added decref'ing of VFS in AddConfig().
	    - Removed the IncRef() on the reporter related stuff in
	      csInitializeApplication(). The CS_LOAD_PLUGIN already
	      IncRef's it.
	    - Added test if returned configmanager is null in the destructor.
	      It is not assured that the configmanager is still available
	      at this time.
	    - Added decref() of xf86vm in xwindow.cpp.
4-Sep-2001
	- Fixed the ASE importer plugin for missing 'isspace'.
	- Fixed the cslua plugin by regenerating the swig file with luaswig.
	- Also fixed the scripts/lua/pysimp.lua so that pysimp -lua
	  actually works.
	- Philip Wyett made the following changes to CS project:
	    - Replaced MSVC port specific "better_memcpy()" with
	      a new more efficient version "fast_mem_copy()", which
	      has more chance of getting L1 cache hits on higher
	      end processors.
	    - Updated winlibs version to take account of new release.
	      Also added a second download link on my personal site to
	      act as a mirror.
	    - Minor tweak of the new "fast_mem_copy()" for MSVC port,
	      shaving a few more tenths off. Profiler function timing notes
	      just to give you an idea of the difference between new
	      "fast_mem_copy()" function against the old "better_memcpy()"
	      one.
		Func	      Func+Child	   Hit
		Time   %	 Time	   %	  Count	 Function
		-------------------------------------------------------
		129.867	 33.2	   129.867  33.2  1000000 better_memcpy
		126.196	 31.5	   126.196  31.5  1000000 fast_mem_copy
		118.228	 30.2	   375.859  96.0	1 _main
		.... extra runtime timings snipped ...
	    - Minor loop optimization and conformation with CS coding style
	      and standard in AWS, some csutil classes, eax sound renderer,
	      line 3d renderer, spr2d mesh object, terrfunc mesh object,
	      system driver, ASE importer plugin, spr builder, csrectrg.cpp,
	      and povie plugin.
	- Martin Geisse made the following changes:
	    - Removed the old converter and crossbuilder classes.
	    - Removed the following 'new' converter frame classes: DXF, HRC,
	      IV, SMF, STLA, VLA.
	    - Fixed a bug in the ASE importer.
	- Christopher Nelson added texture.png and fixed definition for window
	  texture.
3-Sep-2001
	- Philip Wyett did a minor typo fix to the msvc5/msvc6 documentation.
	- Philip Wyett made the following changes to CS:
	    - Fixed "C1001: INTERNAL COMPILER ERROR" when
	      doing release builds of CS with MS Visual C++. This
	      problem was brought about by my fixing of typo
	      "COMP_MSVC" I gave this bug the kiss of life and
	      brought it back into being. :-/ For time being I've
	      re-initialized the typo until I have more time to
	      look at this in depth.
	    - Added '/Ox' full optimization on release builds.
	    - Manually updated MSVC project files.
	- Norman Kramer added mountpoint /aws which is needed by awstest.
	- Martin Geisse made the following changes:
	    - Added iModelDataVertices::FindVertex, FindNormal, FindColor,
	      FindTexel.
	    - Aoved the ASE importer to its plugin.
	    - Fixed bugs in csDataStream, the ASE exporter and the MDL
	      importer.
2-Sep-2001
	- Various documentation changes:
	    - Updated the engine/portals document.
	    - Updated the engine/lighting document.
	    - Updated the engine/viscull document.
	- Philip Wyett made the following changes to the Crystal Space project:
	    - Updated winlibs version to the latest 0.19e.
	    - Added BisonFlex links and build instructions.
	- Martin Geisse made the following changes:
	    - Added a Clone() method to most model data components.
	    - Slightly increased performance of
	      csModelDataTools::MergeObjects ().
	    - Fixed some bugs in mdltest and in the MDL importer.
1-Sep-2001
	- Various documentation changes:
	    - Updated plugins overview so it mentions recent developments.
	    - Updated library overview so it mentions recent developments.
	    - Mention the pending removal of the system driver.
	    - Significantly updated the world components section. It
	      didn't even mention mesh objects...
	- Philip Wyett made the following changes:
	    - Removed non-standard trailing comma's in enum's CS wide.
	      e.g.  enum { A, B, C, }; when it should be enum { A, B, C };
	    - Made destructors of following base classes virtual.
		csBasicVector
		csCBuffer
	      This stops Intel C++ 5.0 compiler whining.
	- Philip later reverted use of "virtual" on destructor for csCBuffer.
	  Intel compiler currently reports also a #444 again alot
	  of CS variables as being "set but never used". This like
	  above revert is a bug in the Intel compiler, which has been
	  now reported to Intel.
	- Philip changed incorrect COMP_MSVC to correct COMP_VC in qsqrt.h.
31-Aug-2001
	- Fixed a bug with curved surfaces with dynamic lighting. If
	  there were no lights in the level and/or the curve was never
	  reached by static lights then adding a dynamic light near the
	  curve would cause a crash because some data wasn't calculated
	  yet (uv2World). Fixed this by testing for this case and
	  then calculating uv2World if not already done.
	- Fixed a bug with the iPolygonMesh implementation for csThing. It
	  was accidently using the world space vertices instead of object
	  space vertices. In most cases this would be no problem (for things
	  that cannot move) but for things that move this doesn't work very
	  well.
	- Removed iCollider::GetGeometry(). It is not a good idea that
	  the created collider keeps a reference to the iPolygonMesh
	  instance. That is not needed. So GetGeometry() has to go as well.
	- Modified the rapid plugin so that it no longer keeps the reference
	  to the iPolygonMesh. It uses the iPolygonMesh to get the geometry
	  but then it doesn't reuse the pointer later.
	- Added iPolygonMesh::Cleanup(). This function is called by the
	  collision detection system when it no longer needs the data in
	  the iPolygonMesh. This can be used by iPolygonMesh to clean up
	  temporary data it used. Note that the other functions in iPolygonMesh
	  MUST still work after Cleanup() has been called. In that case
	  they will just have to recalculate the temporary data. This change
	  should reduce memory usage considerably as some of the iPolygonMesh
	  implementations actually have a considerable amount of temporary
	  data (especially for csThing).
	- Both the thing and sprite3d mesh objects now support
	  iPolygonMesh::Cleanup() and give back a considerable amount of
	  temporary data which was previously just remembered.
	- Implemented full support for iPolygonMesh with curved surfaces
	  as well. At this moment the curved surfaces are tesselated at
	  maximum resolution for this. Maybe this needs to be a parameter?
	  In any case this means that collision detection will now work
	  nicely with curved surfaces too.
	- Martin Geisse did the following:
	    - Added the csSingleIndexVertexSet class to cstool/mdltool.
	    - Moved the ASE exporter to its plugin. The original converter
	      is still in place because the new one is not yet guaranteed
	      to work correctly.
30-Aug-2001
	- Added full transformation capabilities to csTransform and
	  csReversibleTransform for the new csSphere class.
	- Changed iRenderView::ClipBSphere to work with csSphere instead of a
	  center and a radius.
	- Fixed iMeshWrapper::PlaceMesh() so that it now also works with
	  transformations that scale the object.
	- Made a number of methods and fields private in csSystemDriver to
	  ensure that applications are not using them.	This includes the
	  'Shutdown' field which some of the applications were using.  Instead
	  of 'Shutdown' you should use:
	    iEventQueue* q = CS_QUERY_REGISTRY (object_reg, iEventQueue);
	    if (q) q->GetEventOutlet ()->Broadcast (cscmdQuit);
	- Fixed the isometric engine for the change to iRenderView.
	- Norman Kramer did the following:
	    - Squawk: iKeyboardDriver was demanded from pluginmanager
	      instead of objectregistry.
	    - Squawk.cfg: added convertor plugin.
	    - Update scf.cfg to reflect the dependency of level.loader on
	      model.converter.
	- Eric Sunshine modified NeXTAssistant so that it now listens for
	  cscmdQuit, rather than checking the csSystemDriver::Shutdown
	  variable, in order to know when to shutdown the AppKit's run-loop.
	  (Note that NeXTAssistant already correctly used cscmdQuit in order to
	  request a shutdown of the CS run-loop.)
	- Fixed the Hurd, FreeBSD, Irix, and Solaris makefiles to also
	  include the helper plugins for the X canvases.
	- Added iEngine::SetEngineMode().
	- Removed support for the obsolete and not-working lighting
	  callback.
	- Removed csStatLight::LightingFunc().
	- Renamed CALLBACK_... to CS_CALLBACK_...
	- Fixed several of the howto's to some of the recent changes.
	  Also completed the howto on collision detection.
	- Philip Wyett removed un-necessary:
	    #include <windowsx.h>
	    #include <ddraw.h>
	  added:
	    #include <windows.h>
	  Removed an extra/stray ";" at the end of a line.
29-Aug-2001
	- Andrew Zabolotny reports: OS/2 port strikes back :-)
	    - Fixed csdive plugin.
	    - Renamed xextf86vm plugin to xext86vm because OS/2 doesn't allow
	      shared libraries with basename length >8 :-(
	- Andrew Zabolotny also fixed csConfigAccess so that it won't crash
	  when object_reg is NULL in destructor (this can happen for example if
	  you compiled imgplex but didn't compile the individual GIF, BMP
	  etc... loaders).
	- Andrew added "imgplexall" target which makes imgplex and all
	  available graphics format loaders.
	- Corrected the ^M chars in csstring.cpp. These prevented proper
	  compilation.
	- Added patch to fix 3dsie loader from Norman Kramer.
	- Fixed md2ie for the latest csString changes.
	- Added a new constructor for csPlane3 which accepts two vectors.  This
	  will calculate the plane through the origin and the two given points.
	  Also added an equivalent Set() function.
	- Fixed reference counting in csRenderView with regards to iview
	  (clipper).
	- Added csRenderContextFrustum which holds the bounding frustum for the
	  current clipper (for csRenderView).
	- Added iRenderView::ClipBSphere() which is equivalent to
	  iRenderView::ClipBBox() except that it clips the bounding sphere to
	  the current render view.  It is considerably faster but slightly less
	  accurate since a bounding sphere is in many cases larger than a
	  bounding box (not in all cases though).
	- Added iRenderView::GetTopFrustum() which returns a
	  csRenderContextFrustum for the top-level portal.
	- Fixed the fake iRenderView implementation in the isometric engine to
	  also implement the new functions.
	- 3D sprites and cube mesh plugin now use the new ClipBSphere() as
	  opposed to ClipBBox().  I didn't convert the other mesh objects yet
	  as I first want be sure that everything is ok.  ClipBSphere() hasn't
	  been tested a lot yet.
	- Removed iMeshObject::HitBeamBBox().  The implementation of this is
	  (nearly) always the same (except for spr2d but that's not very
	  important) so the implementation is now put in
	  csMeshWrapper::HitBeamBBox() instead.
	- Eric Sunshine reverted his changes to next2d.mak since they caused
	  the build process to attempt to compile files from the NextStep port
	  on MacOS/X, MacOS/X Server 1.0, and OpenStep.	 At any rate, the
	  changes to this file weren't really needed.  They had only been
	  applied as an interim solution to a problem during design of the
	  makefile caching system, since errors in the caching facility (now
	  fixed) were causing next2d.mak to misbehave.
	- Eric Sunshine eliminated several printf()-related compilation
	  warnings from AWS.
	- Eric Sunshine made the following changes to the project:
	    - Upgraded the build environment to work with MacOS/X 10.1.	 Made
	      every effort to keep changes compatible with 10.0, though I am
	      unable to actually test compatibility (but I am reasonably
	      confident that I succeeded).
	    - Eliminated use of the "-undefined suppress" linker flag for
	      building plugins since this flag is incompatible with 10.1's new
	      two-level namespace symbol scheme.
	    - No longer links command-line utilities with "-framework AppKit",
	      as this causes even those applications to attempt to make a
	      connection to the window server (which is obviously undesirable).
	      In the past, linking with this framework was a no-op if the
	      application did not explicitly use anything from the framework.
	    - Added the configuration script CS/libs/cssys/next/macosx.sh which
	      checks if the linker recognizes the "-multiply_defined suppress"
	      option.  This option is needed with 10.1 when an application is
	      linked against the Foundation framework if that application does
	      not actually employ any Objective-C.  In the past, linking a
	      program against the Foundation framework was a no-op if the
	      application did not use Objective-C, but 10.1 is less forgiving
	      (i.e. more broken).  The macosx.sh configuration script is
	      invoked at makefile configuration time, and augments
	      CS/config.mak as needed.
	- Added new csSphere class to csgeom. This class is not yet used
	  but it will be extended to handle operations on bounding spheres.
	  At this moment it has a function to calculate the union of two
	  bounding spheres. This is untested however.
	- Norman Kramer fixed a bug in the cubic spline code: in
	  precalculation of derivates in cubic spline there was an access
	  beyond the bounds of time_point which led to some funny results.
28-Aug-2001
	- Norman Kramer reported a fix for the freefont plugin.
	- Added aws and ie3ds to mk/user.mak.
	- Added iLight::GetLightID().
	- Removed iSector::AddLight, GetLightCount, and GetLight.
	  Instead there is now GetLights() which returns an object of type
	  iLightList. Note that iLightList::AddLight() accepts an iLight
	  instead of iStatLight. You can get the iLight from an iStatLight
	  by calling QueryLight().
	- Fixed a bad bug with terrain engine and the new vertex buffers.
	  This bug would cause crashes in various cases.
	- Added iCollectionList and iCameraPositionList.
	- Added iCameraPosition::Set().
	- Removed the following functions from iEngine:
	    - FindTexture() (either use iRegion::FindTexture() or else
	      GetTextureList()->FindByName())
	    - FindMaterial() (same)
	    - FindCameraPosition() (same)
	    - FindCollection() (same)
	    - FindLight() (same)
	    - CreateCollection() (use new iCollectionList::NewCollection())
	    - GetCollectionCount() (same)
	    - GetCollection() (same)
	    - GetCameraPositionCount() (use new iCameraPositionList)
	    - GetCameraPosition() (same)
	    - CreateCameraPosition() (same)
	  Added the following two functions:
	    - GetCollections() (returns new iCollectionList)
	    - GetCameraPositions() (returns new iCameraPositionList)
	- Removed two versions of csEngine::FindObjectInRegion().
	- Moved the list of planes and the list of bezier templates from
	  the engine to the csThingObjectType class. These are private for
	  things.
	- Removed csEngine and iEngine::CreatePlane().
	- Removed the following functions from iEngine:
	    - CreatePolyTxtPlane()
	    - FindPolyTxtPlane()
	    - CreateBezierTemplate()
	    - FindCurveTemplate()
	- Added new iThingEnvironment interface which is implemented by
	  the iObjectType of things. This interface contains access to all
	  objects that are global to things (currently planes and curve
	  factories). It now contains the four functions deleted from
	  iEngine (see above).
	- Added iThingState::QueryObject().
	- Eric Sunshine fixed a problem in csutil.mak where CFG.CSUTIL was
	  incorrectly given the value "scf.cfg mouse.cfg", rather than the
	  correct value of "scf.cfg data/config/mouse.cfg".
	- Eric Sunshine fixed the following problems with the new makefile
	  caching facility:
	    - The cache file was not correctly updated following changes to the
	      PLUGINS variable in user.mak (or the platform-specific makefile).
	      Although the change to user.mak would be noted, and although the
	      cache file was rebuilt automatically as intended, the refreshed
	      cache file did not reflect the changes to PLUGINS.  The problem
	      was essentially that the caching mechanism was getting tripped up
	      by itself.  Cached information made the facility believe that its
	      idea of the selected list of plugins was already up-to-date, so
	      even though it rewrote the cache file, it wouldn't actually
	      bother to add or remove any makefile content from it.
	    - At project configuration time, the makefile cache was being
	      created too soon, with the result that plugins auto-detected by
	      the configuration process would not appear in the cache.	This
	      occurred because the cache was being created before the
	      finalization of config.mak.  This was a problem because
	      auto-detected plugins, such as cspython, are added to the PLUGINS
	      list via entries in config.mak.
	    - The makefile configuration cache was being deleted too early
	      during the `distclean' target's run.  The result was that
	      `distclean' did not benefit from cached makefile information as
	      much as it should have benefitted.
	- Eric Sunshine fixed the awstest.mak makefile so that it only adds the
	  `awstst' target to the "help" list if the AWS plugin is present in
	  the PLUGINS list.
	- Philip Wyett fixed video app to Jorrit's changes.
	- Philip added missing #include "iengine/material.h" in terrfldr.cpp.
	- Philip updated Python plugin to the removal of
	  iEngine::CreatePlane().
	- Christopher Nelson did a commit of awstest.cfg.
	- Justin Miller reports:
	  Added csString methods PadLeft(), PadRight(), PadCenter(). These
	  pad the object to a specified length with a specified [or default
	  space] char.
	  Added csString methods AsPadLeft(), AsPadRight(), AsPadCenter().
	  These return new strings formatted respectively with the
	  aforementioned methods.
	  Added static cover methods PadLeft(), PadRight(), PadCenter() for
	  all the common variants.
	  Intend to similarly implement Format().
	  Changed scfString and csString to take size_t instead of int for the
	  reserved-length constructor.
	  Tested (though not yet exhaustively) on gnu/linux (gcc) and
	  win32 (msvc). Thanks to those who offered suggestions and feedback.
27-Aug-2001
	- Fixed a linking error in povie.mak.
	- Did a new change to iPolygonBuffer.  Materials for polygons are now
	  treated indirectly.  So AddPolygon() accepts an index into a table
	  with materials instead of a material handle.	In addition added the
	  functions iPolygonBuffer::AddMaterial(), GetMaterial(),
	  GetMaterialCount(), and SetMaterial() to operate on the material
	  array.  This change was done to make it easier to replace the
	  material handles from the wrappers when needed.  This replacing is
	  needed in two cases:
	    - The material wrapper is registered/prepared again (possibly for
	      another 3D renderer) so the handle has changed.
	    - The procedural software renderer for OpenGL also wants to
	      replace material handles.
	- Changed the treatment of DrawPolygonMesh (FASTMESH flag) in csThing
	  by sorting the polygons on material first and then creating a
	  material table. Also the material handles are correctly updated
	  every time the thing is drawn which is how it should be.
	- Renamed G3DTriangleMesh::fxmode to mixmode for consistency with other
	  similar structures.
	- Added G3DPolygonMesh::mixmode.
	- Set G3DPolygonMesh::mixmode to CS_FX_COPY for now. This fixes a bug
	  with the mixmode not being initialized correctly resulting
	  (sometimes) in semi-transparent things.
	- Fixed the OpenGL renderer so that DrawPolygonMesh correctly replaces
	  the texture handles when going to the software renderer for a
	  procedural texture.
	- Removed iWin32SystemDriver and merged the three functions
	  (GetInstance(), GetIsActive(), and GetCmdShow()) with iWin32Helper.
	- Philip Wyett fixed ddraw/ddraw8 canvases which still contained an
	  include of the obsolete win32itf.h.
	- Moved implementation of iObjectRegistry from system driver to csutil
	  (csObjectRegistry class).  Replaced the object registry in the system
	  driver with this implementation.
	- Made CS_QUERY_REGISTRY variants safe by putting brackets around the
	  first argument.
	- Split iPlugin interface into iComponent and iEventHandler and removed
	  iPlugin interface.  iComponent now contains the Initialize() function
	  and iEventHandler contains HandleEvent.  The idea is that event
	  handling is a separate concept from plugins so HandleEvent does not
	  belong in iPlugin.  In addition the notion of initializing is not
	  plugin specific either so it also doesn't belong to iPlugin.	This
	  means there is actually nothing left in iPlugin so it is removed.  To
	  change code to work with this you basically have to replace iPlugin
	  with iComponent.  If you also need events (i.e.  you used
	  HandleEvent) then you have to additionally create a new embedded
	  iEventHandler interface object.
	- Eric Sunshine added a dummy constructor to G3DPolygonDPFX to pacify
	  the NextStep compiler which complained that it wasn't able to
	  instantiate the object.  This problem cropped up when the
	  subcomponent G3DTexturedVertex was re-derived from csVector2 (which
	  has a constructor).
	- Eric Sunshine fixed incorrect documentation for the new iComponent
	  and iEventHandler interfaces.
	- Eric Sunshine added a makefile caching mechanism to the project.  The
	  caching mechanism can significantly reduce the amount of time each
	  `make' invocation takes to actually start building the desired
	  target.  Details follow.
	    - The makefile caching facility is aimed at speeding up the build
	      process on machines with slow disk subsystems.  In general, the
	      build process is slowed considerably by GNU make having to search
	      out and read subcomponent makefiles repeatedly during a build
	      session.	At the time of this writing, the makefile system
	      invokes CS/mk/subs.mak a total of five times in order to search
	      out and read nearly every single makefile in the project.	 On
	      machines with slow disk subsystems, this repeated searching and
	      reading can be agonizingly time-consuming.  In order to alleviate
	      this particular problem, makefile information is cached so that
	      it can be retrieved quickly when later needed.
	    - Makefile caching is controlled by the USE_MAKEFILE_CACHE
	      variable.	 The default value of this variable is set to `yes' in
	      user.mak.	 This variable can also be set from the command line at
	      makefile configuration time and becomes a persistent setting in
	      config.mak.  Example: make linux USE_MAKEFILE_CACHE=yes
	    - In order to prevent the makefile cache from becoming outdated, it
	      can be refreshed automatically anytime any of its source
	      makefiles is changed.  However, monitoring the source makefiles
	      for changes slows down the build process slightly, so this option
	      can be disabled, if desired, by setting the
	      MONITOR_MAKEFILE_CACHE variable to `no'.	By default, for safety
	      and accuracy, this variable is set to `yes' in user.mak.	It can
	      also be set from the command line at makefile configuration time
	      and becomes a persistent setting in config.mak.
	      Example: make linux MONITOR_MAKEFILE_CACHE=yes
	    - Note that the makefile cache is also refreshed any time user.mak
	      or the configured platform-specific makefile is changed.	These
	      two files are monitored unconditionally, regardless of the
	      setting of MONITOR_MAKEFILE_CACHE.
	    - The makefile target `recache' can be used to manually refresh the
	      makefile cache at any time.  This can be useful after editing a
	      makefile if automatic refresh has been disabled by setting
	      MONITOR_MAKEFILE_CACHE to `no'.
	    - USE_MAKEFILE_CACHE and MONITOR_MAKEFILE_CACHE are written to
	      config.mak at makefile configuration time in order to make the
	      settings persistent.
	    - The actual cache is stored in the file cache.mak in the root
	      directory of the project.	 It is removed when the makefile
	      targets `distclean' and `unknown' are invoked.
	  The new makefile CS/mk/cache.mak contains the above description, as
	  well as documentation explaining how caching is carried out
	  internally.  The cache is created using the `echo' and `cat'
	  commands.  If you find that these commands are not available on your
	  platform, you can disable caching altogether by using
	  "USE_MAKEFILE_CACHE=no" on the command line when configuring the
	  makefile system.  If this is a permanent or persistent issue, then
	  USE_MAKEFILE_CACHE=no can be inserted into the appropriate
	  platform-specific makefile.  For anyone using a machine with a slow
	  disk subsystem, consider setting MONITOR_MAKEFILE_CACHE to `no' to
	  make the build process even speedier.	 On my machine, the difference
	  is considerable.  Be aware, however, that if developers change
	  makefiles (*.mak) in the CVS repository, you will need to manually
	  refresh the makefile cache by invoking "make recache" after updating
	  from CVS.
	- Eric Sunshine fixed the new makefile caching facility so that it
	  works correctly with the DOS `echo' command which had trouble with
	  the emitted backslashes and which also printed its own status
	  information ("ECHO is on") instead of merely emitting a blank line as
	  desired.
	- Philip Wyett attempted to fix a problem where the automated MSVC
	  generation procedure was not interacting well with the new makefile
	  caching facility.
	- Eric Sunshine made the following changes to the project:
	    - Fixed a problem where the MSVC generation mechanism was not
	      properly interacting with the new makefile caching facility.  The
	      problem was that the `msvcgen' makefile target temporarily
	      augments the PLUGINS variable on-the-fly, but the makefile
	      caching facility knew nothing about this augmentation, thus it
	      assumed that the cache was up-to-date.
	    - Reverted Philip's change to jobber.pl in which he attempted to
	      fix this same problem.  Unfortunately, Philip's change attempted
	      only to address the problem for the automated MSVC generation
	      phase, but did nothing to fix it for manual runs invoked via the
	      `msvcgen' makefile target.  The correct fix which Eric applied
	      handles all such cases.  (Also, although Philip altered the
	      jobber.pl script in the CVS repository, he neglected to update
	      the actual live script on the SourceForge shell machine which
	      gets invoked by `cron'.)
	- Christopher Nelson writes:
	  Awstest is the first commit of the AWS test harness. I expect this
	  code to change often, but I need to be able to demonstrate some of
	  the bugs that I'm experiencing, and this is as good a place as any.
	  This project relies on another file which must be in the same
	  directory as the awstest executable: test.def.  The def file
	  contains currently acceptable syntax for skin and window
	  definitions.
	- Norman Kramer did the following for awstest:
	    - Fixed paths.
	    - Changed target names to be different from output (remember on
	      unix there is no default extension for executables so
	      awstest$(EXE) will be awstest and if u then have a target
	      awstest we get a circular dependency).
	    - Added include of csutil/csevent.h.
26-Aug-2001
	- Removed G3DVertex class since this is equivalent to using
	  csVector2 instead.
	- DefaultDrawTriangleMesh now also understands lazy clipping but
	  this is not yet used by the software renderer.
	- Added clip_portal, clip_plane, and clip_z_plane to G3DPolygonMesh
	  to support the same kind of clipping capabilities as with
	  G3DTriangleMesh.
	- Implemented clipping in DefaultDrawPolygonMesh.
	- Renamed POLYMESH keyword and flag to FASTMESH instead.
	- Michael Voase did the following:
	    - Fixed walktest crasher in line 3d caused
	      by proctex (ignoring PrepareAnim() failure)
	- Eric Sunshine made the following changes to the project:
	    - Removed all event related code and functionality from
	      csSystemDriver and the cssys library as part of the continuing
	      effort to eliminate the monolithic system driver concept.	 All
	      event related functionality has been generalized and moved into
	      the csutil library.
	    - Rather than the system driver being responsible for event related
	      activities, an object of type iEventQueue is now available to
	      clients via the shared object registry (iObjectRegistry) and is
	      registered with the name "crystalspace.event.queue".
	    - Added new SCF interface iEventQueue.  All event-related
	      activities in CS are now performed by interacting with an object
	      implementing this interface.  Everything related to a particular
	      event queue is now maintained by that queue rather than being
	      manually maintained by the system driver.	 Examples of ancillary
	      functions and objects now maintained by the event queue include
	      event outlets, event cords, and event handlers.  iEventQueue
	      provides the following main functions (along with some other
	      minor ones):
		- Process(); Processes the event queue, dispatching each
		  contained event to the appropriate event handler.  Also
		  responsible for sending the cscmdPreProcess and
		  cscmdPostProcess events to interested listeners.  This method
		  takes over all the major functionality which used to be
		  handled by iSystem::NextFrame().  Re-implemented
		  iSystem::NextFrame() as a very thin cover over this method.
		- Dispatch(); Actually dispatches each event retrieved from the
		  queue by Process().  This method takes over all the major
		  functionality which used to be handled by
		  iSystem::HandleEvent().
		- RegisterListener(); Entities interested in listening for
		  events register with the event queue via this method.	 This
		  replaces the old iSystem::CallOnEvents() method.  Also added
		  RemoveListener() to provide a way for entities to stop
		  listening; and ChangeListenerTrigger() to provide a way for
		  entities to alter the set of event types in which they are
		  interested.
		- CreateEventOutlet(); Returns a new event outlet to the
		  caller.  Replaces iSystem::CreateEventOutlet().
		- GetEventOutlet(); Returns the shared event outlet for this
		  particular event queue (for those cases where creating a new
		  one is overkill).  Replaces iSystem::GetSystemEventOutlet().
		- GetEventCord(); Returns the event cord for a particular
		  category and subcategory.  Replaces iSystem::GetEventCord().
	    - The system driver now registers itself as an event listener with
	      the shared event queue just like all other modules which are
	      interested in events.  This allows csSystemDriver to listen for
	      the cscmdQuit event in order to set its `Shutdown' variable
	      appropriately.  It also allows the HandleEvent() method in
	      subclasses of csSystemDriver to function as expected.  Note that
	      this is a merely a temporary state of affairs, as the system
	      driver will soon cease to exist.
	    - Converted all applications, plugin modules, and other support
	      code to work with the new event system organization.
	    - Because the generic input drivers, csKeyboardDriver,
	      csMouseDriver, and csJoystrickDriver, are tied closely to event
	      outlets, they were also moved from cssys to csutil.
	    - The generic input drivers, csKeyboardDriver, csMouseDriver, and
	      csJoystrickDriver, are themselves now responsible for listening
	      for the cscmdFocusChanged event, rather than relying upon the
	      system driver to do so on their behalf.
	    - Added new SCF interfaces: iKeyboardDriver, iMouseDriver,
	      iJoystickDriver.
	    - Objects implementing iKeyboardDriver, iMouseDriver, and
	      iJoystickDriver are now made available via the shared object
	      registry (iObjectRegistry) under the following names,
	      respectively:
		crystalspace.driver.input.generic.keyboard
		crystalspace.driver.input.generic.mouse
		crystalspace.driver.input.generic.joystick
	    - Converted all applications and plugin modules to access the
	      generic drivers directly from the shared object registry rather
	      than calling upon iSystem methods to interact with these objects.
	      Removed all knowledge of these drivers from iSystem and
	      csSystemDriver.
	    - Moved the utility functions csParseKeyDef() and csGetKeyDesc() in
	      cskeys.h and cskeys.cpp from cssys to csutil since they are
	      totally generic and have no platform-specific bindings.
	    - Fixed a nasty bug in csEventCord where it failed to unlock itself
	      in some cases when posting an event.
	    - Fixed a bad bug in csEventCord where it was leaking all events
	      posted to it.
	    - Fixed broken logic in iObjectRegistry::Unregister() where it did
	      not actually remove the entry for the object, but instead just
	      left a dangling (and potentially) dead pointer.
	    - iObjectRegistry implementation now correctly reference counts the
	      contained objects.  It also now protects itself against
	      modification during its own destruction, since some of the
	      objects which it is removing from itself might also get destroyed
	      and might try modifying the registry.
	    - Moved mouse driver settings out of system.cfg and into mouse.cfg.
	      csMouseDriver is now responsible for accessing these settings
	      itself rather than relying upon the system driver to do so.
	    - Fixed bug in definition of SCF_IMPLEMENT_IBASE table for
	      csSystemDriver.  The table neglected to mention that
	      csSystemDriver implements iObjectRegistry and iPluginManager.
	      Added mention of iPlugin which csSystemDriver now implements so
	      that it can listen for events from the event queue.
	    - Eliminated compilation warnings in aseie.cpp, dxfie.cpp,
	      hrcie.cpp, ivie.cpp, objie.cpp, povie.cpp, smfie.cpp, stlaie.cpp,
	      and vlaie.cpp about non-virtual destructor.
	    - Eliminated compilation warning about unused variable in
	      md2ie.cpp.  Also fixed a memory leak.
	    - Eliminated compilation warning about `float' assigned to `int' in
	      spr2d.cpp.
	    - Fixed broken header-protection macros in intarray.h.
	    - Fixed g2dtest so that it once again actually displays a window.
	      This had been broken for quite some time.
	    - csSchedule no longer unnecessarily depends upon the system
	      driver.
	    - csSchedule no longer publishes its private utility class.
	    - The cssys library no longer relies upon the csgeom library.
	    - Eliminated several compilation warnings from AWS.	 Worked around
	      a couple NextStep compiler shortcomings.
	    - Rewrote csRectRegion in csgeom so that it no longer relies upon
	      the csutil library.  I think it is best if we keep csgeom free of
	      any csutil dependencies.
	    - Fixed csRectRegion so that, at destruction time, it no longer
	      leaks each of the csRect structures in its `region' list.
	    - Fixed the comment-style in csrectrg.h so that Doxygen will
	      produce proper documentation for csRectRegion.
	    - Repaired some overfull and underfull `hbox' warnings reported by
	      TeX for tutorial/wincvs/step1.txi.
	    - Finally, note that I eliminated quite a few unnecessary #include
	      directives from the event-related headers and from isys/system.h
	      & cssys/system.h.	 Since I am unable to test-compile every single
	      port of CS and every driver, port maintainers may have to add an
	      #include statement here and there in platform-specific and/or
	      driver-specific code.
	- Michael Voase did the following: mesh/surface: Fixed a small bug,
	  vertex buffer was not being assigned to g3dTriangleMesh.buffers[0].
	  Fixed a couple of error message typos (said ball instead of surface).
	- Eric Sunshine eliminated a warning in datastrm.cpp regarding
	  undeclared function isspace().
	- Martin Geisse made the following changes:
	    - Added the MDL converter to scf.cfg.
	    - Moved the OBJ importer and exporter to its plugin.
	    - Added LookChar, ReadTextInt, ReadTextFloat and SkipWhitespace
	      to csDataStream and fixed a bug in GetString.
	- Norman Kramer fixed compilation error in csrectrg.cpp by adding
	  'const' to Exclude parameter. In addition in Include made the
	  reference to the region members non-const since they are changed in
	  the chopEdgeIntersection routine (gcc did choke on that).
	- Norman also added ctype.h include to the OBJ importer plugin.
	- Norman added missing argument to CS_QUERY_REGISTRY in xwindow.cpp.
	- Norman fixed the double window problem in case the softdriver was
	  requested via RequestPlugin but then overriden on the commandline
	  via -video option. A more general solution is still needed for this
	  as this solution is specific to the 3D driver.
	- Philip Wyett added a return value to Initialize() in csSystemDriver.
	- Philip fixed link error with OBJ importer.
	- Philip did a blind fix on app g2dtest. Currently cannot test as
	  no CS app compiled with MSVC runs because of crashers on execute at
	  the moment.
	- Philip Wyett did a fix for crashers in graph2d.cpp. Now instead of
	  doing a CS_ASSERT on the un-initialezed member "iObjectRegisrty*
	  object_reg" to performing it on the function parameter
	  "iObjectRegistry* r".
25-Aug-2001
	- Extended iPolygonBuffer to have more specific support for
	  lightmapped polygons. This means that iPolygonBuffer will be more
	  closely tied to DrawPolygonMesh() which will be changed to
	  work with iPolygonBuffer.
	- The DefaultDrawPolygonMesh() now works with the new polygon buffers.
	  Note that there are still some bugs with it though. The main problem
	  is that clipping doesn't work yet.
	- When the new CS_THING_POLYMESH flag is set for a thing the new
	  DrawPolygonMesh will be used. This flag can also be set in the
	  map file for things (POLYMESH keyword).
	- Removed a few obsolete keywords in thing loader.
	- Removed obsolete support for CS_ENTITY_INVISIBLE and
	  CS_ENTITY_CAMERA in csThing. This support is already present
	  in csMeshWrapper and is not needed in csThing.
	- Removed a piece of totally unneeded code in thing drawing. It
	  was actually calculating the tesselation resolution for curves
	  and then never using the result (nor needing it at all).
	- Fixed a bad bug in csThing::GetRadius(). It would only return
	  a valid center the first time it was called. Otherwise it would
	  return bogus values.
	- Implemented csThing::DrawTest() so that a thing will not be
	  even considered for rendering if behind the Z=0 plane. This can
	  significantly speed up rendering for levels containing lots of
	  things. Even for flarge this actually speeds up FPS a little
	  (one example: 31.6 FPS -> 32.6 FPS).
	- Extended the test in csThing::DrawTest() to also include frustum
	  clipping. This also gives a small additional speed increase.
	- Martin Geisse made the following changes:
	    - Moved the MDL importer to its plugin. It compiles but is not
	      yet tested.
	    - Added csDataStream::Skip().
	    - Changed the Push() method of growing arrays to return the
	      index of the pushed element.
24-Aug-2001
	- Philip Wyett tried to fix the metaballs plugin from crashing.
	- Fixed metaballs plugin so that it really works again now.  This
	  caused walktest+flarge to crash.
	- Fixed ptlab and metademo.  These apps were not calling
	  csInitializeApplication so a lot was missing in the object registry.
	  Some of the changes I did yesterday assumed that there was an
	  instance of iGraphics3D in the object registry.
	- Added iPolygonBuffer.	 This represents an object that holds the most
	  efficient way to represent a set of polygons for a given 3D renderer.
	  For a software renderer the polygons can just be stored as such.  For
	  a hardware renderer it may be more efficient to store the polygons as
	  a triangle mesh or a vertex fan/strip.  The vertex buffer manager
	  also serves as the class that implements polygon buffers.  Polygon
	  buffers are supposed to work together with vertex buffers as the
	  polygons are given as indices in such a buffer.  Implemented a
	  primitive polygon buffer support for all renderers.  Currently
	  polygon buffers are not used.	 In the near future DrawPolygonMesh
	  will use them.
	- Changed the way that vertex buffers work.  In addition to the vertex
	  information that was already present there is now also texel (texture
	  mapping) and color information.  This means the 3D renderer will also
	  be able to optimize for those.  This also means that the
	  vertex_colors and texels arrays are gone from G3DTriangleMesh.
	- Removed the 'extern "C"' arround the include of Python.h in the
	  python plugin.  This caused problems with MSVC in combination with
	  Python 2.0.  Since the extern "C" doesn't seem to be needed for
	  Python 1.5 I removed it.  One disadvantage of this removal is that
	  there is now a warning about ignored pragma though.  Note that I
	  could not remove the extern "C" in cs_pyth.cpp since that file is
	  automatically generated.  We have to fix that somehow.
	- Matze Braun <matze@braunis.de> and Jorrit investigated a bug with the
	  QInt() function which triggers on gcc 2.96 or higher (gcc 3) if
	  optimization level -O2 is selected (or higher).  After speaking with
	  some people from the gcc community we discovered that this is
	  actually a bug in gcc and not a bug in the QInt() implementation that
	  we use.  We came up with a work-arround which unfortunatelly doesn't
	  seem to work for MSVC.  So Matze extended the configuration pass by
	  adding an additional test in bin/comptest.sh which tests if this bug
	  is present or not.  This means that the right version of QInt() will
	  automatically be selected after you do 'make linux' (or 'make
	  win32gcc' whatever).
	- Christopher Nelson did the following:
	  Added csRectRegion: a class for optimal sets of rectangles, supports
	  including and excluding of non-contigous rectangular spaces. The
	  region itself is non-contiguous, but operations can only be
	  performed on rectangular areas.
	  A rect region is a class that implements splittable 2d rectangles.
	  The region may be composed of one or more rectangles that do not
	  need to occupy the same area. The idea being that you need to be
	  able to have a number of disparate rectangular regions for updates.
	  This class uses csRect for nearly all rectangle operations.
	  To use you can Include and Exclude rectangles from this region.
	  When finished, this class will have a list of optimal rectangles
	  that occupy a region. If used properly, it will result in faster
	  overall painting performance, since several areas will not
	  require overwriting.
23-Aug-2001
	- Fog should now work for the metaballs plugin.
	- Started work on vertex buffer support in the 3D renderers.  There is
	  now a new iVertexBufferManager which you can get by calling
	  iGraphics3D::GetVertexBufferManager().  The vertex buffer manager
	  manages objects of type iVertexBuffer.  The plan is that everything
	  that wants to use vertex buffers creates one using the vertex buffer
	  manager.  When the vertex buffer is going to be used it must be
	  locked.
	- Modified G3DTriangleMesh to use the new vertex buffers.  The
	  'num_vertices' field has gone (since that is now part of the vertex
	  buffer) and the 'vertices' array is replaced with a 'buffers' array
	  (DrawTriangleMesh currently supports maximum two such buffers).
	- Put a default implementation of vertex buffers in
	  plugins/video/renderer/common/vbufmgr.*.
	- Modified all renderers in cvs to support the vertex buffer feature
	  although the current implementation doesn't do anything special yet
	  (i.e.	 it will not perform better than the old system at the moment).
	- Modified all mesh object plugins in cvs to support the new vertex
	  buffer feature.  The current implementation in case of 3D sprites is
	  very naive at the moment.  It will just use one vertex buffer which
	  is modified every time.  This has to be fixed later.
	- Note that one implication of all this is that
	  iRenderView::CalculateFogMesh() for G3DTriangleMesh can only operate
	  on a mesh with locked vertex buffers.
	- Added CS_ASSERT() at various places to make sure the locked status of
	  the vertex buffer is as expected.
	- Christopher Nelson added ability to grab title bar of windows to move
	  them.
	- Martin Geisse did the following:
	    - Added the framework for an MDL converter.
	    - Fixed a bug in the MD2 converter.
22-Aug-2001
	- Norman Kramer made a few comments in polygon.h a bit better.
	- Norman saved a few cycles in min_z calculation in software renderer.
	- Philip Wyett removed ';' at end of 'if()' which was creating a
	  compiler warning and empty control statement.
	- Received a patch from Matze Braun <matze@braunis.de> which fixes the
	  apps crashing when plugins (reporter and standard reporter) are
	  missing.  Added a bool return value to csInitializeApplication for
	  this purpose.
	- Added GetTransform() and SetTransform to iMeshFactoryWrapper.	 This
	  transform is a transformation relative to the parent of the factory
	  wrapper.  It is only useful when a factory wrapper is part of a
	  hierarchy.
	- Removed iMeshFactoryWrapper::GetChildTransform() as the transform is
	  now part of the iMeshFactoryWrapper itself.
	- Generalized csMeshFactoryList (similar to csMeshList) so that
	  AddMeshFactory and RemoveMeshFactory can now be overriden by
	  subclasses for additional functionality.
	- Added csMeshFactoryFactoryList which implements functionality
	  specific for keeping mesh factories in another mesh factory.
	- Removed iMeshFactoryWrapper::GetChildCount, GetChild, AddChild, and
	  RemoveChild.	Instead there is now iMeshFactoryWrapper::GetChildren()
	  which returns iMeshFactoryList.
	- Removed SCF_DEBUG calls in OpenGL renderer. These are not needed.
	- Removed iEngine::FindMeshWrapper, FindMeshFactory, and FindSector.
	  Use the FindByName in the respective lists instead (using GetSectors,
	  GetMeshes, and GetMeshFactories).  To search for an object in a
	  region first get the current region and then call iRegion::FindBla().
21-Aug-2001
	- Made destructor of new MD2 importer virtual.
	- Fixed makefile linking for MD2 importer.
	- Standardized csMeshList so that it can be reused better for other
	  mesh lists.  This means that AddMesh and RemoveMesh are now virtual
	  functions in csMeshList so that they can be overriden by subclasses.
	- csSectorMeshList now inherits from csMeshList making that code a lot
	  easier.
	- Added csEngineMeshList (subclass of csMeshList) which is now used by
	  the engine (instead of csMeshList).
	- Added csMeshMeshList (subclass of csMeshList) to hold to children of
	  a mesh wrapper.
	- Removed iMeshWrapper::GetChildCount, AddChild, RemoveChild, and
	  GetChild.  Instead there is now GetChildren() which returns an
	  iMeshList.
	- Added iMovable::SetParent().
	- Removed a few warnings regarding not using the plugin manager.
	- Fixed Blocks after yesterdays changes.
	- Norman Kramer fixed a few comments in the software renderer.
	- Philip Wyett fixed a compile problem in the iso engine caused by the
	  addition of SetParent() to iMovable.
20-Aug-2001
	- Philip Wyett removed duplicate commented out entry for cslua plugin.
	  Manually updated MSVC project files with CSLUA.  This I do not out of
	  choice because of SWIG library (or lack of) for VC.  Philip also
	  fixed the LUA plugin so it compiles again for Visual C++.
	- Philip fixed a compile error in phyztest.
	- Philip did a commit of cspace.py which Jorrit forgot to commit
	  yesterday.
	- Martin Geisse moved the MD2 importer to its plugin.
	- Added virtual destructor to csSpriteBuilderFile to remove warning.
	- Made destructor of csModelConverterSPR private.
	- Added iThingState::GetPortalPolygon() which returns the polygon of
	  the portal (given with index).  It complements GetPortalCount() and
	  GetPortal().
	- Added iPolygon3D::IntersectSegment, IntersectRay,
	  IntersectRayNoBackFace, IntersectRayPlane, and PointOnPolygon.  These
	  functions were already in csPolygon3D.
	- Removed the duplicate iMovable::AddSector(), GetSector(int), and
	  GetSectorCount(). This functionality is present through iSectorList
	  which you can get with iMovable::GetSectors(). Also actually added
	  the implementation for iSectorList::AddSector() and RemoveSector().
	- iMovable::GetSectors() no longer returns a 'const' pointer since you
	  now have to use that object to actually add sectors.
	- Completed iMeshWrapper::PlaceMesh().	The function currently has the
	  following limitations:
	    - Does not work correctly if the movable transform is not
	      orthonormal (i.e. the transform scales the object in some way).
	      In general this is not recommend either since there are other
	      parts of CS (like collision detection) that don't work well in
	      that case.
	    - PlaceMesh() only goes one level deep.  i.e. it only checks all
	      portals in the current sector and adds the destination sectors
	      from those portals.  It will not recurse into those sectors to
	      continue the test there.	This limitation will only be a problem
	      if you have portals that are very close to each other and an
	      object happens to cross them all.
	    - This function ignores children of the mesh object. So only the
	      bounding sphere of the parent object is considered.
	    - This function will only test against portals of things that
	      cannot move (i.e. have flag CS_THING_MOVE_NEVER set).
	    - This function is not super-efficient as it assumes no previous
	      knowledge except for one sector.	It would be nice to have extra
	      PlaceMesh() versions that take a displacement vector and
	      calculate the new set of sectors based on the old one (assuming
	      this can be done more efficiently).
	    - For huge sectors containing lots of portals or mesh objects this
	      function should be optimized.  This can probably be done by
	      keeping an efficient portal representation structure on the
	      csSector level.
	  Otherwise it should work just fine but it is untested.
	- Removed iSector::AddMesh, UnlinkMesh, GetMeshCount, and GetMesh (two
	  versions). Instead there is now iSector::GetMeshes() which returns
	  an implementation of iMeshList.
19-Aug-2001
	- Added iThingState::GetPortalCount() and GetPortal(int) so you can
	  query all portals from a thing.
	- Added iMeshWrapper::PlaceMesh() function which will take position the
	  mesh in all relevant sectors.	 To do that it will use the bounding
	  sphere of the mesh and ONE sector which should already be initialized
	  in the movable of the mesh BEFORE calling PlaceMesh().  Note that
	  this routine is not finished yet.  It only goes one level deep so it
	  will fail to correctly place meshes that cross several consecutive
	  portals.  Also it doesn't take child mesh objects in consideration
	  yet.	NOTE: The function doesn't do anything useful yet!  I have to
	  continue implementation.
	- Fixed the crossbld makefile so that it actually links.
	- Haze Mesh: Implement HitBeamBBox.
	- Michael Voase did the following:
	    - Sprite2D: Implement HitBeamBBox and HitBeamOutline.  Modified
	      SetupObject() to always calculate the radius when the object is
	      setup, reguardless of the lighting setting.
	    - Introduced a GetObjectBoundingBox method, but it is as yet
	      invalid. More work to be done here yet.
	    - Sprite3D: Tidying up HitBeam.
	- Martin Geisse moved the SPR exporter to its plugin, using a subclass
	  of csSpriteBuilder.
	- Philip Wyett fixed a linking error in spr.mak by adding CSTOOL.
	- Philip also added EAX plugin entry into SCF for it's imminent
	  re-insertion back into CS after being updated by Peter Nimmervoll.
	- Philip reports: Re-inserted EAX after repair by Peter Nimmervoll -
	  Many thanks.	Added EAX plugin to MSVC port and MSVCGEN process.
	  Manual update of MSVC project files.	Note: To build the EAX plugin
	  you will need the EAX 2.0 SDK available from:
	  "http://www.developer.creative.com" 10Mb download.  Please remember
	  to add the "include" and "lib" directories to point to the respective
	  files in-order to successfully compile.
	- Philip Wyett did some documentation changes:
	    - Added "isotest" to app overview list.
	    - Changed round MSVC 5 & 6 in menu of Windows build docs.
	    - Added a missing ")" and changed link to ssh for win32 from RedEye
	      entertainment to my personal webserver.
	- Philip cleaned up header defines and brought into line with CS coding
	  style and standards.
	- Philip renamed class: TextureTrans -> class csTextureTrans.
	- Philip changed the SCF config line from
	  "crystalspace.sound.render.eax" to "crystalspace.sound.render.ds3d",
	  being EAX plugin is supposed to be a higher layer on top of Direct
	  Sound plugin.
18-Aug-2001
	- Martin Geisse made the following changes:
	    - Registered all converter plugins in scf.cfg.
	    - Added csString::Detach().	 This function empties the string
	      without deleting the contents (which is faster than copying the
	      contents and then delete the string).  The content buffer is also
	      returned.
	    - Moved the POV converter to its plugin.
	    - Moved sprite building out of the crossbuilder and into its own
	      'sprite builder' class. This makes it possible to create a
	      subclass of the sprite builder which writes the data to a file
	      (will be used for the SPR exporter).
	    - Moved BuildVertexArray() from the crossbuilder to
	      csModelDataTools.
	    - Removed the obsolete pobject.h from csutil.
	- Philip Wyett removed incorrect ".cvsignore" and added new one in
	  "\lib" directory to ignore the extracted libs from winlibs package.
	  In addition Philip updated several .cvsignore files.	He reports that
	  this change is in advance of a new winlibs release which will change
	  the "lib" dir to "libs" and skip the already in cvs directory "lib"
	  and allow this "cvsingore" to be correctly applied.  Note: You need
	  to now use winlibs 0.19d.
17-Aug-2001
	- Integrated a few patches from Matze Braun <matze@braunis.de> to make
	  sure that CS compiles cleanly with gcc3.0.  To enable one patch for
	  timing you have to add -DCOMP_GCC3 to the commandline for compiling
	  or else you have to edit libs/cssys/unix/utiming.cpp and make the
	  define there.	 This should be done automatically by the makefile
	  (configure time) but I don't know how to do this.
16-Aug-2001
	- Martin Geisse updated the list of contributors in the docs.
	- Martin also added the following files to '.cvsignore':
	    - In "cs/": *.dll
	    - In "cs/include/cssys/win32/": freetype.h, fterrid.h, ftnameid.h,
	      jconfig.h, jerror.h, jinclude.h, jmorecfg.h, jpeglib.h,
	      lauxlib.h, lua.h, luadebug.h, lualib.h, png.h, pngconf.h,
	      zconf.h, zlib.h, divx, lib3ds.
	    - In "cs/libs/cssys/win32": lib
	- Martin fixed a bug in the engine where it was using typed vectors the
	  wrong way and added a note to typed vectors to prevent others from
	  doing the same mistake.
	- Christopher Nelson did the following:
	    - Updated AWS interface again for font and event handling.
	    - Added event handling hook. In your main event handler, you
	      should now call aws->HandleEvent(Event) to allow the windowing
	      system to process events.
	    - Updated window draw code, improved window look.  Windows can now
	      be resized by grabbing onto the grip.
	    - Fixed the mark code a little bit to increase efficiency. The
	      window redraw now checks to see if the window covers the entire
	      dirty area that is being redrawn. If so, no background erasure
	      is performed.
	    - Added font handling abilities to the preference manager.
	- Eric Sunshine made the following changes to the Texinfo user's
	  manual:
	    - Repaired the seriously broken navigational structure which
	      resulted from changes made to the Windows build instructions.
	      The navigational links were so messed up that links for most
	      other platforms actually appeared within the documentation for
	      Windows.	It was very difficult to even locate information
	      specific to a particular platform (other than Windows).
	    - Repaired a lot of Texinfo mark-up errors which were recently
	      introduced into the documentation; especially into portions of
	      the Windows build instructions.  Also fixed a lot of email
	      addresses in contrib.txi so that they correctly use `@@' rather
	      than the bare `@'.
	    - Added some missing @menu blocks, the absence of which made
	      navigation difficult.
	    - Eliminated all of the overfull and underfull `hbox' warnings
	      reported by TeX.
15-Aug-2001
	- Philip Wyett removed the cslua plugin from the MSVC port.
	- Christopher Nelson added awsdef.zip which is the binary resource
	  package for aws.  Currently it has only three .png bitmaps for
	  windows.  It will eventually serve as the default skin repository and
	  contain a number of other images.
14-Aug-2001
	- Christopher Nelson reports regarding AWS: redrawing code works now,
	  updated some stuff.  Had to had some reset code into the top-level
	  redraw function.  Noticed clunky bug in OpenGL, and odd transparency
	  bug in software mode when you start in fullscreen mode.
	- Christopher Nelson made the following changes to AWS:
	    - Added a number of new colors to the preference manager:
		AC_HIGHLIGHT2: a slightly darker highlight
		AC_SHADOW: a slightly lighter highlight
		AC_BLACK, AC_WHITE: black and white
		AC_RED,AC_GREEN,AC_BLUE: colors that are always midpoint red,
		    green, and blue solid colors.
	      Note that these colors are, in the case of HIGHLIGHT and SHADOW
	      derived BUT NOT SPECIFIED by the user.  The constant colors, Red,
	      Green, Blue, etc are not user definable.	They are intended to be
	      those colors ALWAYS.  I'm contemplating taking the POV-Ray colors
	      definition file and turning it into a symbolic list of colors
	      that can be specified via the definitions file so that you don't
	      have to figure out what RGB colors you want.  I'm thinking this
	      might be nice for non-programmers who don't have a good grasp on
	      RGB composition.
	    - Added a bunch of drawing code for windows, and all the
	      frame_style and frame_options flags.  These still need to be
	      extended into the constant-ref so that they can be looked up.  I
	      also need to extend options fields so that we can make lists of
	      options like:
		Window "My Window"
		{
		  ...
		  FrameOptions: Control, Zoom, Minimize, Beveled
		}
	- Philip Wyett fixed a missing variable "i" in for loop for awsmgr.cpp.
	- Fixed a bug in the lighting code which prevented the falling blocks
	  in Blocks to be lit correctly.
	- Fixed a bug with the ball mesh not clipping correctly to the screen
	  boundaries.  It appeared that the transformed bounding box was not
	  calculated correctly.
	- Fixed a bug with the software renderer where an alpha texture was
	  used together with a non-COPY mixmode.  This caused the blend tables
	  not to be set up correctly.  This bug causes the partsys level to
	  crash in the room at the far left (software renderer only).
	- Fixed a bug with the software renderer where flat rendering (without
	  texture) would not correctly check which z-buffer mode (NONE, FILL,
	  TEST, or USE) to use.
	- Fixed a potential memory overwrite bug in xwindow.cpp.  It was doing:
	  `new char [strlen (title+1)];' instead of: `new char [strlen
	  (title)+1];'
	- Fixed the VERY VERY bad bug in the isometric engine which could cause
	  crashes when using the isometric engine in combination with the
	  OpenGL renderer.  The problem was that the fake iRenderView which is
	  used by the iso engine didn't correctly implement the functions
	  CalculateFogPolygon() and CalculateFogMesh().	 This functions are at
	  least supposed to initialize the 'fog' variables in the
	  polygon/meshes to false.  Otherwise the OpenGL renderer will think
	  fog has to be used.  This caused no problem for all iso stuff itself
	  but it did cause problems for external mesh objects.
	- Michael H. Voase did the following: HitBeam updates: Fleshed out
	  HitBeam interface.  HitBeamBBox now does exactly that and returns the
	  face number hit.  The HitBeamOutline and HitBeamObject methods now
	  line up with their names.  Hitting the outline of a mesh object will
	  return upon the first hit.  HitBeamObject still returns the nearest
	  hit, which means that it scans through all triangles looking for the
	  closest hit.	csSector::HitBeam() now uses the outline for faster
	  processing.
13-Aug-2001
	- Philip Wyett started the beginings of a optimization schedule.
	    - Loop optimization.
	    - Removed over-use and bad use of variables in some code.
	    - Altered some code code to use bitwise shifting for "if (var ==
	      1)" etc.	testing.  This is an optimization which eliminates
	      assembler level CMP in speed critical code.  Some may not like
	      this and can be removed if it makes people un-comfortable.
	    - Did some altering of code to bring within CS coding style.
	  Work in progress.  The benefits of changes can been seen in Windows
	  port with faster apps starts (by-product), more efficient proc
	  textures i.e.	 animation speed of certain elements improved.	e.g
	  demosky and screen FX (F4 - F6) keys when running walktest.  General
	  FPS is also up a fraction...
	- Philip Wyett did a pedantic change to PI and PI / 2 :-) Removed over
	  use of variables in "for" loops within fuctions.  This is well
	  illustrated by the amount of "int i"'s there were in "protex2d.cpp"
	  :-) Did a little bit of loop optimization.  Bug to be verified: In
	  csvid->opengl, are videos palying upside down for others are they are
	  for me?
	- Christopher Nelson reports: Finally!	Got all the bugs straightened
	  out.
	     - There was a circular dependency which I accidentally introduced
	       in some test code.  Previously, the palette setup was in the
	       SetDefaultContext code.	It's now inside the SetDefaultSkin
	       code, which makes more sense, since the palette is dependent on
	       the skin anyway.
	     - Some miscellaneous blunders were fixed, and a lot of debug code
	       was added.  Modules which have a const bool DEBUG_xxx at the top
	       contain debug code which can be activating by setting the
	       DEBUG_xxx switches to true.  All modern compilers can eliminate
	       this dead code in release builds, so it doesn't slow down an
	       optimized system.  This was recommended in last months C/C++
	       Programmers Journal vs.	#ifdef's because it keeps you from
	       maintaining two or three separate programs, as is the case when
	       using #ifdef debugging.	I mention it in case anyone wonders
	       why, and the rational in case anyone would like to use this
	       technique as well.
	- Brandon Ehle did the following:
	    - Fixed csLua for recent engine interface changes
	    - Removed junk from both csPython and csLua
	    - Changed iScript::Store interface to handle both csPython and
	      csLua and hopefully and new languages.
	    - Made both csPython and csLua store their object_reg ptrs throught
	      Store().
	    - Fixed cslua.mak for luaswig-1.2.1
12-Aug-2001
	- Eric Sunshine converted the Apple/NeXT ports over to the new
	  platform-specific shared `helper' object paradigm as much as possible
	  at this time.	 The changes include:
	    - Added iNeXTAssistant interface which declares methods for use by
	      canvases, the AppKit delegate object, and the C++ to Objective-C
	      bridging code.
	    - Added NeXTAssistant which implements iNeXTAssistant.  This object
	      lives within CS/libs/cssys/next and has inherited much of the
	      functionality performed in the past by NeXTSystemDriver.
	      Unfortunately, this object still has some reliance upon the
	      system driver since some system driver functionality has not yet
	      been relocated to stand-alone utility modules.
	    - Removed almost all functionality from NeXTSystemDriver.  This
	      class is now relatively tiny.
	    - Updated NeXTDelegate, the Objective-C AppKit delegation object,
	      to work via iNeXTAssistant rather than
	      iSystem::PerformExtension().
	    - Updated NeXTDriver2D, the AppKit-based software canvas, to work
	      via iNeXTAssistant rather than iSystem::PerformExtension().
	- Eric Sunshine fixed a bug in CheckActionConflict() from mdltool.cpp
	  where the Action2 object was being accessed after DecRef() was called
	  on it.
	- Eric Sunshine eliminated several compilation warnings in mdltool.cpp.
	- Eric Sunshine modified garray.h to work around a really bone-headed
	  bug in the OpenStep C++ compiler.  Specifically, with this type of
	  code:
	    class A {
	    private:
	      CS_DECLARE_GROWING_ARRAY(Vertices, csVector3);
	    };
	    class B {
	    private:
	      CS_DECLARE_GROWING_ARRAY(Vertices, int);
	    };
	  The compiler would claim that the typedef of __Vertices::ga_type in
	  class A (csVector3) conflicted with the one in class B (int) even
	  though the typedefs are both scoped _and_ private to their own class.
	- Eric Sunshine eliminated several compiler warnings from
	  csNamedObjectVector where it was trying to implicity convert (void*)
	  to (iObject*).  The problem is that not all compilers recognize
	  `NULL' specially, and the definition of NULL in some system headers
	  is (void*).  Therefore, returning NULL from a method which is
	  declared as returning a specific type results in this warning
	  message.
	- Eric Sunshine eliminated a compiler warning from polytext.cpp where
	  it was trying to implicitly convert (void*) to (iLight*).
	- Eric Sunshine removed some unnecessary and incorrectly used `-F'
	  directives from CFLAGS in the MacOS/X, MacOS/X Server 1.0, and
	  OpenStep makefiles.
	- Martin Geisse added the model importers to the build process.
	- Martin also added the plugin framework for all model importers.
11-Aug-2001
	- Michael Voase made the following change: Texture manager (all
	  drivers): Removed GetRefCount() kludge in the delete method.	This
	  results in csfedit not cleaning up the texture manager correctly, but
	  I will correct this in due course.
	- Received a patch from Jonathan Hudson <nathanoj@realmail.2ndmail.com>
	  to implement quick visibility testing for particle systems (i.e.  the
	  DrawTest() method).  This means that putting a lot of particle
	  systems in a sector will now be more efficient as only the ones that
	  need to be drawn will be considered for drawing.
	- Michael Voase did the following:
	    - csengine/material.cpp and texture.cpp: Started addressing
	      outstanding memory leaks, starting with the ones caused by
	      myself.  Some of the texture and material handles should start
	      deleteing automatically now.
	    - csws/cswstex.cpp: Started addressing outstanding memory leaks,
	      starting with the ones caused by myself.	The texture manager
	      will now clean up correctly and completely under csfedit and some
	      csws based applications.
	- Martin Geisse did the following:
	    - Added the model converter and crossbuilder plugins to walktest.
	    - Did some minor changes to the mdltest level to make it look
	      better.
	    - Disabled the old 3ds importer (it is no more invoked
	      automatically when the .3ds extension is found).
	    - Changed the way the model converters give information about
	      supported formats. GetFormat(index) no longer returns the name
	      of the format, but a struct which contains the name and
	      additional information, such as supported features.
	    - Removed SupportsFormat() from the converters.
	    - Removed the 'converter test' in the initialization of Walktest.
	      This test seemed to do nothing, and the old converter is to be
	      removed anyway.
	    - Walktest now queries the model converter and the crossbuilder and
	      uses them in load_meshobj() if the old converter fails.
10-Aug-2001
	- Martin Geisse fixed a bug in the sprite crossbuilder.
	- Martin also changed the way csLoader imports model files: First, the
	  old converter is used.  If that fails, the new one is used.  Also
	  added a test level that imports a model to cs/data/mdltest.
	- Samuel Humphreys fixed a bug in xextshm.cpp pointed out by Andrew
	  Topp.
9-Aug-2001
	- Martin Geisse reverted recent changes to csObject because they
	  contradict with the ideas of reference counting.
8-Aug-2001
	- Michael Voase did the following: csObject: Changed the vector used to
	  CS_TYPED_VECTOR_DECREF() then changed the delete routines to feed the
	  RefCount of an object as the FreeIt flag.  This staunches cyclic
	  reference runaways and prevents RefCounts on csObject's from going
	  below zero.  Also removed unecessary while() loop in
	  csObjectIterator::Next().  This loop was never used.	The engine now
	  exit's *slightly* faster.
	- Samuel Humphreys did several fixes to get -mode working again for X
	  windows.  He broke this yesterday.  He additionally fixed a few other
	  2D clipping bugs.
	- Philip Wyett fixed the python plugin through MSVC.  Also updated the
	  python plugin to AllowResize().
	- Martin Geisse fixed bugs in csModelDataTools, csObject and the
	  convertor multiplexer.  csModelDataTools::Describe() also prints the
	  RefCount of all objects now.	mdltest now uses the converter
	  multiplexer.
	- Matthew Tang added a full export plugin for Blender to export CS
	  world files complete with sectors, things and portals.  There is also
	  a tutorial included.	Check it out in scripts/blender/blend2cs.
7-Aug-2001
	- Removed PerformExtension() in the Windows system driver.  Instead the
	  Windows system driver now creates an object Win32Helper which
	  implements iWin32Helper.  That object contains the function
	  SetCursor().	The Win32Helper object is registered with the object
	  registry.  The ddraw and ddraw8 canvases now use CS_QUERY_REGISTRY to
	  query the iWin32Helper and then use SetCursor on that.
	- Removed PerformExtension() in the DOS system driver.	Instead the DOS
	  system driver now creates an object DosHelper which implements
	  iDosHelper.  That object contains the functions SetMousePosition()
	  and DoEnablePrintf().	 I also modified the raw and allegro canvases
	  for these modifications.  Note that I made all the modifications but
	  am not able to compile the DOS port.	So it may not work correctly.
	- Removed PerformExtension() in the BeOS system driver.	 Instead the
	  BeOS system driver now creates an object BeHelper which implements
	  iBeHelper.  That object contains the functions UserAction(),
	  SetCursor(), BeginUI(), Quit(), and ContextClose().  I also modified
	  the BeOS and OpenGL BeOS canvases for this.  Note that I made all the
	  modifications but am not able to compile the BeOS port.  So it may
	  not work correctly.
	- Removed PerformExtension() in the OS/2 system driver.	 Instead the
	  OS/2 system driver now creates an object Os2Helper which implements
	  iOs2Helper.  That object contains the function StartGUI().  I also
	  modified the csdive and OpenGL/OS/2 canvases for these modifications.
	  Note that I made all the modifications but am not able to compile the
	  OS/2 port.  So it may not work correctly.
	- Did NOT remove PerformExtension() for the NeXT system driver.	 The
	  problem is that the code seems slightly complicated and I will most
	  likely mess it up completely without being able to test it.  So the
	  NeXT port will be broken now.
	- Removed support for PerformExtension() and PerformExtensionV() in the
	  system driver (csSystemDriver) and iSystem.  All ports (except
	  NeXTStep) have been fixed for this (I could only test the Windows
	  port).  If your system needs to provide an extension for other system
	  dependent modules (usually canvases) then you must create an SCF
	  interface (something like iMyOsHelper) and implemented the needed
	  additional functionality there.  Then the OS specific system driver
	  can register an instance of this object with the object registry.  To
	  use such an extension from a system dependent canvas you can then do:
	    iMyOsHelper* help = CS_QUERY_REGISTRY (object_reg, iMyOsHelper);
	    CS_ASSERT (help != NULL);
	    help->MySpecialFunction (myspecialargs, ...);
	- Michael Voase did the following:
	    - Texture Manager: All drivers
		- Continued fortification of texture manager..	It should now
		  behave like the rest of the engine, handing over the
		  reference to the texture handle without needing an IncRef().
		  This ends the circular reference contract and resumes normal
		  behaviour.  To release a texture handle, simply DecRef() it,
		  and the texture manager will do the rest.
	    - Texture Manager: soft3d
		- Tracked down and fixed the annoying tcache crash at exit.
		  Under opengl, software texture managers and caches can be
		  shared between different instances of the software driver.
		  Soft3dcom now respects the shared resources and deletes
		  correctly, I have only the csThing leaks to track down now.
		  Also removed bug flag in Clear().
	    - OpenGL software procedural textures and cswstex:
		- Removed now uneeded reference to parent procedural texture
		  manager.  Handles should now clean up with a DecRef() the
		  same as most other engine objects.  The handle will
		  unregister itself.
	- Philip Wyett removed lua from MSVC compilation process.
	- Philip fixed compile error in csfgen.
	- Philip updated MingW docs to reflect new version 0.50.
	- Philip changed compiler switches for build and optimization.	Now
	  uses /G5 (Pentium) over /Gx (Blended 386, 486 etc.)  The Windows
	  maintainer doesn't envisage any developer with MSVC will be
	  targetting 486 or lower processors.  :-) Added /Ox (Full
	  Optimization) to release builds.
	- Wyatt Miler fixed a markup error in msvc5.txi.
	- Martin Geisse continued work on the model importer multiplexer.  It
	  still crashes on loading, so it isn't used yet.  Also fixed a bug in
	  the 3ds importer.
	- Martin added a short piece of documentation about the new converter
	  system.
	- Samuel Humphreys rewrote the X drivers:
	    - Working Full screen + on the fly resolution changing.
	    - Each Xdriver now loads an XWindow plugin.
	    - XWindow plugin dynamically configures to take advantage of
	      X-extensions, i.e. shared memory and XFree86VideoMode.
	    - No more #ifdef statements.
	    - Rewritten window creation, resizing and so optimized event
	      handling.
	    - iGraphics2D slight changes to full screen and resizing related
	      methods, but have bumped up the version.
6-Aug-2001
	- Removed almost all usage of iSystem in the entire CS system. Instead
	  a pointer to the object registry (iObjectRegistry) is used. This
	  includes the following:
	    - iPlugin::Initialize().
	    - csConfigAccess class.
	    - csInitializeApplication().
	    - Constructor of csApp.
	    - Various others...
	- Because iSystem is still needed in some cases (still busy with the
	  removal of that) there are some cases where you need to have a
	  pointer to the system.  To get that pointer you can now use the new
	  CS_GET_SYSTEM define like this:
	    iSystem* sys = CS_GET_SYSTEM (object_reg);
	  Note that this define will go away as soon as iSystem is removed.  So
	  it is only a temporary measure.  CS_GET_SYSTEM is implemented by
	  asking the object registry where iSystem is now registered.  The use
	  of iSystem is still required for using everything related to events
	  (this includes the iEventOutlet pointers and also the elapsed time
	  (GetElapsedTime()), GetMouseButton(), GetKeyState(), Sleep(),
	  NextFrame(), ...).
	- For Python scripts this also means that the 'system' variable is gone
	  and has been replaced with 'object_reg'.
	- Since they were not used I removed iSystem::Initialize(), Loop(),
	  Open(), and Close().	The csSystemDriver versions of these functions
	  are not removed though.  They are still needed at this moment.
	- Michael Voase made the following changes:
	    - Feature update:
		- CS/include/csutil/typedvec.h: Added
		  CS_DECLARE_TYPED_VECTOR_DECREF convenience macro.
	    - Texture manager cleanup: common
		- CS/include/ivideo/texture.h: Added UnregisterTexture() and
		  UnregisterMaterial() to the scf interface.
		- CS/libs/csengine/texture.cpp: Texture wrapper now keeps a
		  reference to the texture handle when registered with a
		  texture wrapper.
		- CS/libs/objects/meshobj.cpp: FreeItem(): Added NULL
		  assignment to object being free'd to prevent dangling
		  pointers.
		- CS/libs/objects/thing.cpp: Added portal polygon delete
		  routine to thing destructor, in preparation for an audit.
		- CS/libs/csws/cswstex.cpp: Changed how csws textures are
		  treated.  The csws textures now use the freshly added
		  UnregisterTexture() scf interface to unregister textures.
		  Note: Texture Manager now destructs correctly in csfedit and
		  a couple of other csws apps (finally ;).
		- Changed csMatVector and csTexVector to use
		  CS_DECLARE_TYPED_VECTOR_DECREF.
		- Added UnregisterTexture() and UnregisterMaterial() to
		  iTextureManager interface.  You should now be able to
		  Register/Unregister textures and materials with impunity.
	    - Texture Manager all drivers:
		- Changed procedural texture Prepare() methods to adhere to the
		  scf contract.	 This includes the opengl software procedural
		  textures, which seemed to have a blatant habit of deleteing
		  every texture handle it touched....  Ouch.  The health of the
		  software proctex manager is not good.	 Although the current
		  round of bugfixes allows it exit cleanly, a corrupted texture
		  cache does not.  If one temporarily disables the 'delete
		  tcache' line in sft3dcom.cpp, Clear(), the engine does exit
		  cleanly.  I have not traced this back as yet as the texture
		  cache is another animal altogether.
		- Modified Unregister[Material|Texture] to check for a zero
		  reference count on incoming handles.	This breaks an endless
		  loop issue between csMat/TexVector, the destructor and
		  unregister (it is a circular reference).
	- Philip Wyett did some more cleaning and loop optimization etc in
	  csgeom, csutil, and other libraries.
5-Aug-2001
	- Fixed a small bug in haze.  Now it shows in OpenGL but not correctly
	  right yet.
	- Wouter Wijngaards writes: the haze now adaptively draws polygons to a
	  certain quality setting.  This makes hazes get fuzzy borders and
	  retain shape.	 Also added two new haze meshes, to a total of four in
	  the red room of the partsys level.  Work in opengl and software.
	- Wouter also fixed the problem where weird glitches would occur for
	  hazes when they tried to draw when not onscreen.
	- Martin Geisse made the following changes:
	    - Added csIntArray, a growing array of integers (using
	      CS_TYPEDEF_GROWING_ARRAY), which adds some convenience functions
	    - Added PushSmart() to csVector which uses Find() to detect if the
	      object is already in the vector.
	    - Fixed a bug in growing arrays.
	    - Added iModelDataVertices::CopyFrom() to copy all data from
	      another vertex frame. Also added copy and concat constructors to
	      csModelDataVertices.
	    - Added csModelDataTools::CompressVertices(). This looks for
	      duplicate vertices in either one or all objects and removes them.
	    - Added a function to the crossbuilder plugin to build a
	      hierarchical sprite factory from all objects of an imported
	      scene. In combination with SplitObjectsByMaterial() this can
	      also be used to import sprites with multiple materials. mdltest
	      uses this feature: It now merges all imported objects, builds a
	      thing from them, then splits by material and builds a sprite
	      hierarchy.
	- Philip Wyett changed 'class csHazeHull : iHazeHull' to 'class
	  csHazeHull : public iHazeHull' This fixes C2243 compile error under
	  MSVC.	 Problem was all a matter of VC inheriting a private not
	  public.  :-/
	- Philip renamed class Bot ptLabBot.  This fixes class name conflict
	  warning in devapi docs generation process.
	- Philip did a clean-up and some minor code optimization in memimage.h
	  and bumpmap.h.
4-Aug-2001
	- Wouter Wijngaards did the following:
	    - Added a loader for the haze mesh object, hazeldr. The loader
	      compiles and works. The haze itself seems to compute all right.
	      The outline looks peachy keen, but nothing gets drawn...
	    - Later fixed a bug where the triangles would be drawn backfaced.
	      Still does not show up in OpenGL though.
	    - Added proper bounding box drawtest visibility testing.  Drawing
	      at an almost 90' angle (with bad vis testing) would give visual
	      anomalies.
	    - Added a hazy circular texture to stdtex.zip.  This texture is
	      called hazecirc.zip looks slightly yellow and has motes of dust
	      in it.
	    - Added another texture for hazes, this one is a very basic whitish
	      glow.  in stdtex.zip, hazebasic.png
	    - Added a new Hull prefab to the haze: The Cone - it is really two
	      y-axis facing circles connected.
	    - Making things neat. Also added two haze meshes to the partsys
	      level. A 'cubic haze' which looks plainly weird :) and a cone
	      haze - which looks like a search light of some kind. The
	      occasional glitches when turning around are due to DrawTest
	      sometimes saying the bounding box is visible when it isn't.
	- Dan Bogdanov did the following:
	    - Almost fixed DOS configuration batch to output a proper
	      config.mak file.
	    - Fixed DJGPP compile.
	    - Fixed perftest.mak so it will not fail a static build.
	    - Fixed vsh.mak so it will not fail a static build.
3-Aug-2001
	- Removed iSystem::AddConfig(). Use iConfigManager::AddDomain()
	  instead.
	- Removed iSystem::RemoveConfig(). Use iConfigManager::RemoveDomain()
	  instead.
	- Removed iSystem::CreateSeparateConfig(). Use a new instance of
	  csConfigFile instead (like 'new csConfigFile (filename, VFS)').
	- Removed iSystem::SaveConfig().  Use iConfigManager::Save() instead.
	- For all above funtions you can get a pointer to the config manager by
	  asking the object registry like this:
	    iConfigManager* cfg = QUERY_REGISTRY (object_reg, iConfigManager);
	- In addition to the above changes also moved the enum values
	  ConfigPriority??? from iSystem to iConfigManager.
	- Removed iSystem::GetInstallPath(). Removed
	  csSystemDriver::InstallPath(). Instead there is now the global
	  csGetInstallPath() function.
	- Removed all 'fatal_exit' calls and also removed fatal_exit() itself.
	- Dan Bogdanov made the following changes:
	    - Fixed (a typo) and updated djgpp.mak
	    - Fixed dosconf.bat to output a more useful config.mak
	    - Changed perftest and vsh so that they can be linked statically
	- Wouter Wijngaards added a patch by E.Allen Soard (esp@espsw.net),
	  that will enable a build on linux for the ipaq. It modifies
	  unixconf.sh to detect the strongarm processor.
	- Martin Geisse made the following changes:
	    - Added iModelDataAction::GetTotalTime() which returns the length
	      in time of a complete animation cycle.
	    - Added merging of different actions.  As the resulting action may
	      be longer than the input actions if they have different length in
	      time, merging is only done if no input action has to be repeated
	      more than three times.  However, this test is independent from
	      the merging algorithm itself, so it can easily be changed to
	      allow higher repetition counts.
	    - Fixed a bug in the sprite factory crossbuilder.
2-Aug-2001
	- Eric Sunshine eliminated a compilation warning about unused variable
	  in mdltool.cpp.  (In fact, this particular variable was being
	  shadowed by another variable in another scope.)
	- Michael Voase did the following:
	    - Texture manager: Implement DecRef() FreeTypedItem() in
	      csMatVector, this corrects a memory leak in csMatVector and
	      with some minor corrections to all video driver, permits the
	      material handles to cleanup correctly. *NOTE* I havent tested
	      the opengl driver. If the opengl driver does not cleanup
	      correctly on exit please let me know.
	    - Added a debug message to the destructor of csTextureManager.
	      When the texture manager is closing down correctly, this
	      message will go away...
	- Philip Wyett reports:
	  This adds VC project file specific extras which with the aid of
	  GPL "BisonFlex" for MSVC aids my fixing of AWS plugin
	  compilation errors under MSVC and allows VC users to take
	  advantage of "Flex" and "Bison" in there own projects.
	  Note: Not fully implemented yet, due to an MSVCGEN issue.
	- Philip also writes: As of tomorrows CRON run the AWS plugin will be
	  added to the MSVC global build.  Thus as of then bleeding edge cvs
	  users/developers using MSVC will need to unload the aws plugin or
	  work through the following instructions in-order to compile.
	    - Downloading "BisonFlex"
	      Firstly you need "BisonFlex Wizard" developed and released by
	      "FG Soup Sofware" http://www.fg-soup.com under General Public
	      License (GPL). BisonFlex will not only allow you to build the
	      AWS plugin, but will also allow you to use the included
	      appwizard and associated features to make use of lexers etc. in
	      your own software. :-)
	      For MSVC 5: http://www.philipwyett.dsl.pipex.com/crystal_space/
	      msvc/downloads/bfwizard-1.5.zip
	      For MSVC 6: http://www.philipwyett.dsl.pipex.com/crystal_space/
	      msvc/downloads/bfwizard-1.6.zip
	    - Installing "BisonFlex"
	      Next you need to unpack the ".zip" you downloaded and then
	      run the "setup.exe" and follow the instructions. Please take
	      your time with the install process! :-)
	    - Setting Up Custom Build
	      Open "CS\mk\visualc\csall.dsw". In the left hand "Workspace"
	      window click on the "FileView" tab at the bottom, then in the
	      window look for and find the project "plgaws". Now expand the
	      aws project in the tree and then the "Resource Files" directory.
	      Right click on "skinlang.flx" and click on "Settings".  You will
	      now be presented with the "Project Settings" dialog for that
	      file. Click on the "Custom Build" tab. In the text box "Commands"
	      enter the following:
		flex.exe -Plex_cpp -L -t ..\..\plugins\aws\skinlang.flx
		    > ..\..\plugins\aws\sllex.cpp
	      Now in the "Outputs" text box enter the following:
		..\..\plugins\aws\sllex.cpp
	      Next click on the "General" tab and check the box "Always use
	      the custom build step". Now just "Ok" out of that dialog box and
	      do a "Save all" and re-build CS.
	    - Notes for CS Developers
	      This custom build step re-generates "sllex.cpp" with a VC
	      friendly version and is slightly different from the one
	      currently in cvs. However, the file generated by MSVC/BisonFlex
	      is CS Mingw compatible. :-) Please remember not to commit the
	      locally modified "sllex.cpp" to cvs. :-)
	    - ToDo: Try get rid of this setup and integrate into MSVCGEN.
	- Philip also started a massive restructuring and rewrite of the
	  windows 32 docs. Changed titles for Windows menu.
	  The new internal per compiler menu under a Window (Win32) subsection
	  will allow future addition of docs for other Windows ports i.e.
	  Borland or OpenWatcom easier.	 I hope! :-)
	  Completed new Windows menu page which options/leads to Compiler
	  specific sections.
	- Martin Geisse made the following changes:
	    - Added a debug dump feature to csModelDataTools (which outputs
	      into a csString).
	    - Enabled csModelDataTools::SplitByMaterial() and usage of action
	      conflict detection (objects with unmergeable actions are not
	      merged) and material conflict detection (objects with different
	      materials are not merged if the user doesn't want that to
	      happen) in ::MergeObjects().
	    - Fixed a bug in csObject.
	- Justin Miller started reimplementing csString::Format().
1-Aug-2001
	- Martin Geisse added some missing 'inline' keywords to objiter.h.
	- Christopher Nelson did the following:
	    - The awsTextureManager is now completely functional, if untested,
	      other than the register/unregister functionality.	 Once I
	      figure out how to unregister a texture from the texture manager,
	      that will work as well.
	    - I still need to make some updates to the AwsPrefs class so that
	      it will expose the functionality of the texture manager.
	      With this update I can now begin to actually test drawing code,
	      since nearly all of the AWS enhancements require access to
	      bitmaps for background textures and for bitmapable buttons/etc.
31-Jul-2001
	- Martin Geisse moved high-level model data manipulation functions
	  out of the model data classes themselves and into their own
	  namespace wrapper, csModelDataTools.
	- Added csexport.py (in scripts/blender). This script is written by
	  Sebastian Düll <wastel7@gmx.de>. Note that it needs Blender 2.14!
	  There are instructions on usage in scripts/blender/csexport.txt.
30-Jul-2001
	- Renamed csTime to csTicks and removed iSystem::GetTime().
	  Now use the global csGetTicks() instead.
	- Fixed a 'for (int i')' construction in mdldata.cpp so it compiles
	  on linux.
	- Martin Geisse made the following changes:
	    - Added a flag to iModelData::MergeObjects() that prevents
	      merging of objects with different textures. Also, merging
	      objects with conflicting actions is prevented. Both features are
	      still untested and thus commented out.
	    - Added iModelData::SplitByTexture() to split objects with
	      multiple different textures. Still commented out.
	    - Added a macro that defines a 'typed object iterator'. This is
	      a wrapper class for an iObjectIterator which only returns
	      child objects with a specific interface.
	    - Cleaned up the model data code using typed iterators.
29-Jul-2001
	- Eric Sunshine renamed csGetClicks() to csGetTicks().
	- Eric Sunshine eliminated the now unnecessary inclusion of
	  cssys/system.h from NeXTTime.cpp.  Also changed file's comment so
	  that it no longer mentions csSystemDriver.
	- Eric Sunshine renamed csVPrintf() to csPrintfV() for consistency with
	  other `vararg' functions in the project, such as PerformExtensionV(),
	  ReportV(), etc.
	- Eric Sunshine worked around a problem where not all compilers allowed
	  the global `vararg-style' function csReport() to be declared inline.
	  In particular, the NextStep compiler exhibited this behavior.
	- Eric Sunshine cleaned up the reporting code which was recently added
	  to NeXTDriver2D.cpp.
	- Eric Sunshine fixed the prototype of NeXTDriver2D::Open() so that it
	  matches the recently changed prototype of iGraphics2D::Open().
	- Eric Sunshine implemented iNativeWindow::SetTitle() in NeXTDriver2D.
	- Eric Sunshine eliminated the now unnecessary inclusion of
	  cssys/system.h from cssys/general/printf.cpp.
	- Eric Sunshine fixed a bug in csStaticArray::ReAlloc() where it was
	  applying delete[] to a void pointer, which is an illegal operation.
	- Michael Voase writes the following (NOTE!!  this comment has been
	  proven to be untrue later): txtmgr.cpp: Removed bogus bug flag from
	  the texture manager.	The bug that I am seeing is due to more brain
	  dead behaviour of my system.	I am also suspending my activities on
	  CS pending an audit of my system.  If there is anyone out there
	  running RH 6.2 Linux and you have a crash in the texture manager
	  every time walktest exits, then you have the same problem as me.  If
	  not, I would like to hear about it.  Otherwise, for me, it is time to
	  upgrade and I would recommend upgrading your system if it exhibits
	  the same behaviour.  To test this, first your system must be crashing
	  at exit on walktest.	If so, then go
	  toCS/plugins/video/renderer/common/txtmgr.cpp on line 216 ( the third
	  line in csMaterialHandle::~csMaterialHandle()), comment out the line
	  `texman->DecRef();' and recompile your 3D renderer (in my case the
	  software renderer).  If walktest now cleans up correctly upon exiting
	  walktest, then you have the same problem too.
	- Martin Geisse made the following changes:
	    - Restructured the static array code. All static arrays now derive
	      from a main class, csStaticArray, which contains most of the
	      code. This should reduce executable size a bit.
	    - Added some texture loading code to mdltest. It doesn't work
	      yet so it is currently disabled.
	    - Updated the SCF documentation and added documentation for
	      csObject.
	- Justin Miller added Format() to csString.
27-Jul-2001
	- Removed csSystemDriver::Warn() and Alert().
	- Removed the console pointer in csSystemDriver.
	- Removed ConsoleOut() from system driver. It was not used a lot
	  and in all cases it was defined as a normal puts. Also removed
	  specific ConsoleOut() implementations for some OS'es.
	- Instead of ConsoleOut() there is now csPrintf() which works
	  more like printf (i.e. exactly like printf) but which can be
	  defined by the platform. The DJGPP port has its own implementation
	  of csPrintf() which can disable itself if graphics are enabled.
	  In general csPrintf() should always be used instead of printf.
	  Little of the code is doing that however.
	- Also added csVPrintf() which is similar to vprintf().
	- Removed Time() from system driver.
	- Instead of Time() there is now csGetClicks(). Currently
	  iSystem::GetTime() has not been removed yet but that will call
	  csGetClicks().
	- Moved the initialization of SCF from csSystemDriver::Initialize()
	  to the constructor of csSystemDriver. The problem is that SCF
	  is now required even before Initialize() is called in order to
	  be able to access the object registry and various objects in
	  that registry (like the commandline which typically is needed
	  BEFORE Initialize).
	- Fixed a crash bug in Blocks.
	- Fixed a problem with static linking for height generation
	  classes in both terrfunc and csparser.
	- Wouter Wijngaards added a haze mesh object. It is capable of
	  taking a set of convex hulls, where each one fits inside the next
	  one, and render them. It will compute the outline in linear time.
	  For now this is the (untested but compiling) mesh object only.
	- Wyatt Miler updated NeXTTime.cpp after a recent removal of
	  csSystemDriver::Time().
26-Jul-2001
	- Removed iSystem::Printf() and iSystem::PrintfV(). The plan is now
	  to use the reporter instead. To do this you can use the following
	  initialization code somewhere in your app or plugin init:
	    #include "ivaria/reporter.h"
	    iReporter* reporter = CS_QUERY_REGISTRY (object_reg, iReporter);
	- Added csReport() convenience function. This function will use
	  the object registry to see if there is a reporter. If so it will
	  use it, otherwise it will print to standard output. Example:
	    csReport (object_reg, CS_REPORTER_SEVERITY_ERROR,
		"crystalspace.???.???", "Bad error in '%s'!", filename);
	- Keep in mind when replacing Printf() with Report() that report
	  will automatically add a newline at the end of the string.
	- In addition removed CS_MSG_ constants. Use the CS_REPORTER_SEVERITY_
	  constants instead. You can use the following translation:
	    CS_MSG_WARNING -> ..._WARNING
	    CS_MSG_FATAL_ERROR -> ..._ERROR
	    CS_MSG_INITIALIZATION -> ..._NOTIFY
	    CS_MSG_CONSOLE -> ..._NOTIFY
	    CS_MSG_STDOUT -> ..._NOTIFY
	    CS_MSG_INTERNAL_ERROR -> ..._BUG
	    CS_MSG_DEBUG_? -> ..._DEBUG
	- Changed the csTextProgressMeter so that it now has an output
	  console as a parameter and not the msg type (CS_MSG_...) and
	  iSystem pointers.
	- Did the same for csProgressPulse.
	- Removed the 'mode' parameter (which used to be one of CS_MSG_...)
	  from the iConsoleOutput interface. None of the output console
	  plugins were using it and it is obsolete anyway.
	- Added ... to iConsoleOutput::PutText() and also added PutTextV().
	- Changed all libraries, apps, and plugins in CS to use the reporter
	  instead of iSystem::Printf(). This affects LOTS of files...
	- Martin Geisse did the following:
	    - Committed a big cleanup of typed vectors. This fixes
	      some cases where one could bypass the type-safety of these
	      vectors.	Also, all public macros are now grouped at the top of
	      typedvec.h and nobjvec.h, and the private macros are grouped
	      together in the 'private' parts of these files.
	    - Added NULL-testing to iBase vectors and object vectors, i.e.
	      it is possible to push NULL's on these vectors now
	    - Added action merging to iModelData*. It is now possible to
	      merge two objects as long as they don't have actions with the
	      same name. If that happens, the actions should be merged, but
	      this is not done yet.
	- Philip Wyett removed a dead link in os2.txi.
25-Jul-2001
	- Added interfaces iNativeWindowManager and iNativeWindow (in
	  include/ivideo/natwin.h). In the future these interfaces will
	  be extended to allow access to the native window system and also
	  to allow putting canvases (iGraphics2D instances) on native
	  windows. At this moment iNativeWindowManager only has an Alert()
	  function which will show a modal alert and iNativeWindow has
	  SetTitle() with which you can set the title for a native window.
	- The current implementation of Alert() simply prints a message on
	  standard output. Canvases should override this for a more useful
	  alert. The windows system driver has an alert implementation
	  internally. That should move to the windows canvases.
	- Fixed g2dtest so the colors are ok now (was broken by the changes
	  yesterday).
	- Extended iGraphics2D with GetNativeWindow() to get the native
	  window corresponding with a canvas.
	- csGraphics2D will now implement iNativeWindowManager. This is
	  a temporary measure until we decide to do this redesign (but that
	  is not for 1.0).
	- csGraphics2D will now implement iNativeWindow too.
	- Removed 'Title' parameter from iSystem::Open(). This is obsolete
	  now. To set the title on your window you need to do:
	    iNativeWindow* nw = g2d->GetNativeWindow ();
	    if (nw) nw->SetTitle ("bla");
	  It is best to do this before iSystem::Open() is called as not
	  all canvases support changing the title when the window is
	  already open (in fact, none of the current canvases support
	  that).
	- Also removed 'Title' parameter from iGraphics2D::Open() and
	  iGraphics3D::Open().
	- The default title for windows is now 'Crystal Space Application'
	  which is much nicer than 'Dummy title' :-)
	- Added CS_REPORTER_SEVERITY_DEBUG severity level. This way the
	  reporter will be able to do debug logging too.
	- Added various convenience functions to the iReporter interface:
	  ReportError, ReportWarning, ReportNotify, ReportBug, and
	  ReportDebug.
	- Fixed a bug in reporter plugin. It was returning true in
	  HandleEvent() for every event. This effectively eats up all
	  events.
	- Added new standard reporter listener plugin (plugins/stdrep).
	  If you load this plugin it will listen to an available
	  reporter plugin and perform the following actions:
	    - Warnings will go to output console (if present) or to standard
	      output.
	    - Errors will given an Alert through the iNativeWindowManager.
	      Additionally they will be reported on the console, standard
	      error, and debug.txt.
	    - Bugs are handled the same way as errors.
	    - Debug messages are sent to debug.txt.
	    - Notify messages go to the output console.
	  Using the new iStandardReporterListener interface you can have
	  control on where all messages go.
	- Removed the specific iReporterListener implementation in
	  WalkTest and now use the stdrep plugin instead.
	- Changed the implementation of the iObjectRegistry::Get() in the
	  system driver. It will now first return the object implementing
	  the interface with NULL tag. If none such are found it will return
	  a random one which has a non-NULL tag but still implements
	  that interface.
	- Added new csInitializeApplication(). This function will setup
	  the object registry for the application for most common
	  global plugins (VFS, G3D, G2D, Reporter, OutputConsole, Engine,
	  Loader, ...). In addition it will also load the reporter plugin and
	  the standard reporter listener plugins. After calling this function
	  you can do CS_QUERY_REGISTRY() to obtain the singleton instances of
	  above interfaces. The loading of the reporter and reporter
	  listener are optional (you can disable it by giving false,false
	  parameters). This function can be found in include/cstool/initapp.h.
	- Changed most apps to use csInitializeApplication(). Also updated
	  the tutorials. Also changed most apps to use CS_QUERY_REGISTRY
	  as much as possible (as opposed to CS_QUERY_PLUGIN or
	  CS_QUERY_PLUGIN_ID).
	- Tried to fix the DOS port. Couldn't test if it really works though.
	- Martin Geisse did the following:
	    - Added GetIndexByName() to named object vectors. This works like
	      FindByName() but returns the index of the object.
	    - Added object merging to iModelData. This can be used to merge
	      all contained objects into a single one. Animation is not yet
	      handled correctly.
	    - Fixed a bug in the crossbuilder.
	- Eric Sunshine changed the CVS snapshot and documentation generation
	  scripts so that these resources are now published via the HTTP
	  protocol only, rather than via both HTTP and FTP.  This was done
	  since SourceForge plans to discontinue project-specific FTP service.
	- Philip Wyett fixed LUA plugin for latest changes.
	- Philip fixed level loading in video.cpp.
	- Martin Geisse added a missing dependency to csfgen.
24-Jul-2001
	- Further work on the decomposition of the system driver.
	    - The iObjectRegistry in the system driver is now more complete.
	      You can now register and unregister objects to it.
	    - The system driver will now register the
	      plugin manager (iPluginManager), the commandline parser
	      (iCommandLineParser), and the config manager (iConfigManager).
	      In the future this registration will have to be done by another
	      entity.
	    - Removed iSystem::GetCommandLine(). Use the object registry
	      instead to get the commandline like this:
		iCommandLineParser* cmdline = CS_QUERY_REGISTRY (object_reg,
		    iCommandLineParser);
	    - Removed iSystem::GetConfig(). Use the object registry instead
	      to get to the config manager (iConfigManager).
	    - Made VFS, G3D, G2D, and Console members in csSystemDriver
	      private. Eventually they need to be removed. This is step one
	      to check if something is still using those variables.
	    - Made BugPlug more robust so it can handle the case where there
	      is no G3D.
	    - All canvases (in video/common/graph2d.cpp) will now listen
	      to cscmdSystemOpen and cscmdSystemClose. On receiving those
	      messages Open() and Close() are called. This removes the need
	      for the system driver to have explicit knowledge about G2D
	      and G3D in order to open or close those plugins.
	      This has one current consequence though: Open() will no longer
	      get a valid title so we need another way to set the title of
	      the canvas.
	    - Another important consequence is that the order in which
	      plugins get cscmdSystemOpen messages is undefined. This means
	      that you cannot depend on G3D/G2D being open in the open
	      message of another plugin! In the past this was possible
	      because G3D and G2D were explictely opened BEFORE all the other
	      plugins. This seems to work ok but this can be because the
	      Open messages are sent in the right order already (i.e. G3D
	      and G2D plugins are loaded early so this could be the case).
	      But it is not good to depend on this!
	    - Close() is called in the same order as Open() and there we
	      have a problem. The engine::Close handler is called after the
	      G3D::Close handler and this causes a crash because the engine
	      will then start unregistering materials and textures. This
	      seems to cause a crash at exit but at the moment I'm not sure
	      yet how to solve this and why exactly it crashes. Will
	      investigate later.
	    - Protected the canvases so that it is now safe to call Open/Close
	      multiple times. Did this by adding is_open flag in csGraphics2D.
	    - All 3D renderers will now also listen to cscmdSystemOpen and
	      cscmdSystemClose.
	    - Because of the above changes the system driver no longer has
	      the internal G2D and G3D pointers. It still keeps pointers
	      to Console and VFS for other reasons. Those will be removed
	      later.
	- Added new 'viewmesh' tool which allows one to quickly load a mesh
	  factory and view one instance of it in a room. It accepts four
	  parameters of which the last three are optional:
	    - The first parameter is the VFS filename of the mesh factory.
	      For example: /lib/std/sprite1
	    - The second parameter is the filename of the texture to wrap on
	      the mesh. Example: /lib/std/spark.png
	    - The third parameter is the name of the material to which the
	      above texture will be assigned. This must correspond with
	      the name of the material that is mentioned in the mesh
	      factory itself (i.e. /lib/std/sprite1).
	      Example: spark
	    - The fourth parameter is a scale factor. Default is 1.
	- Philip Wyett fixed a VFS plugin load failure in simplept.
23-Jul-2001
	- Continued work on the decomposition of the system driver. The
	  following items were performed:
	    - Added iObjectRegistry interface to iutil. In the future there
	      will be an implementation of this interface that will be used
	      to register many common CS global objects (like the plugin
	      manager, commandline manager, config manager, ...). At these
	      moment these facilities are all given by iSystem but in the
	      future iSystem will go away so iObjectRegistry will replace
	      that. The object registry also supports the notion of 'tags'.
	      These tags will in the future be used to replace the current
	      FuncID system that is used by the plugin system.
	    - csSystemDriver now implements iObjectRegistry. This is a
	      temporary measure until there is a sufficient stand-alone
	      implementation of iObjectRegistry. Note that the iObjectRegistry
	      implementation in csSystemDriver is incomplete. It is only
	      there as a placeholder to be able to get the plugin manager (see
	      later).
	    - Added iSystem::GetObjectRegistry(). Use this function now
	      to get the object registry. Later the object registry will
	      be obtained using other methods.
	    - Added CS_QUERY_REGISTRY define to query an object from the
	      object registry. The first parameter is the object registry
	      implementation. The second parameter can be either a tag
	      name or an interface name. There is also CS_QUERY_REGISTRY_FAST
	      which is a fast version (similar to SCF_QUERY_INTERFACE_FAST).
	    - Added iPluginManager to isys. This interface represents the
	      entity in CS that manages plugins. Currently this is implemented
	      by csSystemDriver. To get the plugin manager you now do
		iPluginManager* plugin_mgr = CS_QUERY_REGISTRY (object_reg,
		    iPluginManager);
	      iSystem no longer directly implements all the plugin related
	      functions. The macros CS_LOAD_PLUGIN, CS_QUERY_PLUGIN and others
	      have all been modified to use iPluginManager instead of
	      iSystem. So where you would do:
		iVFS* vfs = CS_QUERY_PLUGIN (system, iVFS);
	      you must now do:
		iObjectRegistry* object_reg = system->GetObjectRegistry ();
		iPluginManager* plugin_mgr = CS_QUERY_REGISTRY (object_reg,
		    iPluginManager);
		...
		iVFS* vfs = CS_QUERY_REGISTRY (plugin_mgr, iVFS);
	      It is probably easiest to just store object_reg and plugin_mgr
	      together where you are also storing the iSystem pointer.
	      Don't forget to include "isys/plugin.h" and "iutil/objreg.h".
	    - Fixed all apps and plugins in CS that I could compile. Also
	      tried to fix the others but no guarantees.
	- Philip Wyett Updated winlibs version num and links. Should have
	  done this at the time, sorry my bad.
	- Philip changed features.txi to add "(32 bit)" to where spec'ed for
	  Windows as to avoid people thinking CS will run on 16 bit version
	  of Windows.
	- Philip also updated the LUA plugin for Jorrit's changes.
	- Philip fixed redefinition of a function parameter in system.cpp.
	- Norman Kramer fixed linex2d canvas plugin for Jorrit's changes.
	- Eric Sunshine repaired several `overfull hbox' and `underfull hbox'
	  warnings reported by TeX for the Texinfo documentation.
21-Jul-2001
	- Justin Miller added extended instructions for setting up external
	  projects.
	- Justin also fixed levload.txi because Static reg. hint is no longer
	  needed.
	- Wouter Wijngaards adjusted the cosinusfactor of the wooden floors
	  and ceilings in the partsys level. Wood is grainy, and reflects the
	  light from more directions, than say, hard plastic. Thus a higher
	  cosinusfactor is in order, and looks nicer.
	- Wouter also adjusted lighting in the partsys level so that lights
	  no longer shine on exits of neighboring rooms. This looks bad, so
	  I reduced the radius.
20-Jul-2001
	- Michael Voase did the following:
	    - pttex.cpp: Bug hunting. if EngineProcTex::Animate(),
	      changed reference to csSector to iSector. Squashes bug
	      in bot cam. Changed reference from csMeshFactoryWrapper
	      to iMeshFactoryWrapper. This squashes a crasher that was
	      occuring in 16bpp software renderer. Also corrected
	      reporting about speed of the metaballs, and switched on
	      the lighting for the metaballs so the texture can be seen.
	      Note: After a little experimentation, it seems to me the
	      CS_TEXTURE_PROC_ALONE_HINT flags dont seem to be
	      necessary. I have not removed them, but if needed, they
	      could possibly be removed. Further testing on other
	      platforms would be required.
	    - ptlab.cfg: Decrease the size of the metaballs and the
	      window size. Makes the metaballs clearly visible and
	      the window decrease is to allow the console messages
	      to be seen during initialization (and to be considerate
	      to those few individuals that are still on 640x480 res).
	      Knocked the iso_level down ( increases size slightly,
	      but also gives a more 'blobbier' effect ;), and
	      icreased the speed slightly.
	    - sproctex.cpp (simplept tutorial): Added
	      CS_TEXTURE_PROC_ALONE_HINT flag the the
	      procedural texture. This stops it from crashing
	      in 3d software mode. *WARNING* If this causes
	      simplept to crash under other renderers (eg, opengl)
	      then please let me know, and I willrevert this patch
	      and look closer at the problem. AFAIK the procedural
	      texture in this case is truly alone, so the hint is
	      probably valid in this instance.
	- Philip Wyett added csfgen to VC++ global build process.
	  Fixed error i.e. csfgen's lack of a csSystemDriver pointer.
	- Philip also added libttf (FreeType) linker flag.
	- Added iMeshWrapper::Draw() so that it is now possible to draw
	  mesh wrappers on your own. This can be useful if you want to display
	  an object in a CSWS window for example. Normally applications
	  will rarely use this function.
	- Martin Geisse did the following:
	    - Added to 3d sprite factories the possibility to set
	      a default mixing mode for new sprites. The model crossbuilder
	      uses this feature to enable tiling for generated sprite
	      factories if required.
	    - Mdltest accepts a file name to load a model file. Currently it
	      only uses the 3ds importer for this. Finally, it should use
	      the converter-multiplexer instead.
	    - The model crossbuilder now takes an iModelDataObject as
	      parameter instead of an iModelData.
	    - Fixed a bug in the 3ds importer.
	- Wouter Wijngaards did the following:
	    - Changed isotest debug condition. The invisble grid is now
	      positioned at the old maze position.
	    - Fixed isocell traverse, which was broken when > 2 elements were
	      present.
	    - Made emitter particle system draw sort the particles back to
	      front when this is needed (In CS_FX_ADD mixmode no sorting is
	      needed). Uses qsort to do it.
	    - Added new texture fpart.png to stdtex.zip.
	    - New fire in the yellow room of 'walktest partsys' now has a
	      nicer texture.  (Currently only works in opengl, software does
	      not seem to like the alpha channel & mixmodes).
	    - Added a patch from Jeff Cours (jeff@penguin.moriarti.org) that
	      fixes win32gcc compilation on the winME platform.
	- Added CSVAR_STRING for the csVariantType enum. This allows iConfig
	  to use string type options. Made csVariant safer by not allowing
	  access to the variable anymore. Instead use Set<Type>()
	  and Get<Type>(). Fixed all plugins that implemented iConfig
	  for this change. Get<Type>() will also fail (using CS_ASSERT)
	  if type doesn't match.
	- Added ChangeDimension() to csGraphics2D. This is a virtual function
	  that is only accessible to implementations of csGraphics2D
	  (canvases) and is called whenever the width/height changes
	  (through the config interface). Specific canvas implementations
	  can do their own processing in that function to actually change
	  the size of the canvas.
	  Also added ChangeDepth() and ChangeFullscreen().
	  Note that none of the canvases currently override this method
	  so calling any of these routines after the canvas is already
	  Open() will most likely fail horribly.
	- Removed the -mode,-depth, and -fs commandline options from the
	  system driver and moved them to the canvases (in
	  plugins/video/canvas/common/graph2d.cpp). csGraphics2D now
	  implements iConfig through which these settings can be queried.
	  The system driver will now treat these options like all
	  plugin specific options (i.e. not). This change has a few
	  consequences:
	    - The windows driver will no longer switch to non-fullscreen
	      when an alert appears in fullscreen mode. This needs to be
	      fixed.
	    - The FrameWidth, FrameHeight, Depth, and FullScreen variables
	      are removed from SysSystemDriver which means that apps
	      have to store them on their own if they need them.
	    - iSystem::GetSettings() has been removed. Instead you should
	      ask the canvas (G2D) for the appropriate values.
	  This is a fairly dangerous modification and I could only test
	  the MingW port (which means the ddraw and OpenGLwin canvases).
	  Please let me know if there are problems.
	- Martin Geisse fixed several compilation errors in some of the
	  apps related to the above change.
19-Jul-2001
	- Added iMeshList and iMeshFactoryList. Added iEngine::GetMeshes()
	  and GetMeshFactories() and removed several mesh/mesh factory
	  related routines (like RemoveMeshWrapper(), GetMeshWrapperCount(),
	  ...). This is similar to iSectorList.
	- Made the UV syntax for specifying a texture a little bit more
	  robust by testing if it is actually a valid texture mapping
	  specification. This avoids a crash. It will print a warning
	  if invalid. In addition it will select some default valid
	  texture mapping.
	- Martin Geisse enabled both the sprite and the thing conversion of
	  the generated model in mdltest with different position.
	- Martin also fixed a memory leak in csSectorList.
	- Michael Voase did the following:
	    - terrfunc.cpp: improved current hit beam ready for HitBeam()
	      rewrite. I have rewritten the while loop to be a for loop.
	      This has improved performance reasonably. The movement of
	      the loop through the terrain is now governed by the result
	      of the csintersect3::BoxSegment() interface. The beam moves
	      through the terrain by initially sampling the main bounding
	      box of the terrain, then setting up a recursive loop through
	      the terrian if the bbox test is successful. The loop uses
	      the result of the reverse bbox test on a bounding box that
	      is the full height of the terrain to acquire the exit
	      point of the beam, then indexes the block array accordingly.
	      If the beam terminates inside the box, or the beam exits
	      through the top or the bottom of the box, then the loop exits.
	      This manner of beam testing scales well and can be adapted
	      to a 3 dimensional grid. One small point is the structure
	      of the loop catches intersections through a given block even
	      if the beam terminates inside the block. I take this as a
	      good omen as I didnt expect it.
	      Added into the bundle, terrafunc should be free of all accuracy
	      bugs. The old increment method has been disposed of safely (and
	      permanently ;). It was causing blocks to be missed through
	      its scan.
	      Lastly, the debugging messages have been dropped completely.
	    - terrfunc.h: Preening.
18-Jul-2001
	- Reworked the cstool texture generation tool to also use a
	  SCF structure for the slope and height function instead of a
	  regular callback. This also solves a memory leak problem.
	- Changed csTextureCallback (used by iTextureWrapper) to
	  the iTextureCallback SCF structure.
	- Changed DeleteNotify() callback system in iFont to iFontDeleteNotify.
	- Changed csConsoleExecCallback() callback system to
	  iConsoleExecCallback. Renamed ExecuteCallback() to
	  SetExecuteCallback(). Added GetExecuteCallback().
	- Changed GridChangeCallbackType (in iso engine) to
	  iGridChangeCallback.
	- Also made iIsoCellTraverseCallback to be used by
	  iIsoCell::Traverse().
	- The sequence manager was already using reference counted callbacks
	  but I changed it so that they use SCF too.
	- Note for everyone. When adding a new callback to something please
	  use the system with SCF interfaces instead of the traditional
	  callback function with void* userdata. It is very hard to do good
	  memory management with that type of callback. With SCF callbacks
	  reference counting is used which is a lot cleaner.
	- Wouter Wijngaards fixed another bug in iso engine.
	- Added iMeshObject::HitBeamBBox() and iMeshObject::HitBeamOutline().
	  Those are supposed to be faster versions of HitBeamObject().
	  HitBeamBBox() will only test against the bounding box.
	  HitBeamObject() will test correctly with object but will not
	  return the exact place the hit occured. HitBeamObject() is
	  (supposed to be) exact. Currently all mesh objects simply
	  call HitBeamObject() for HitBeamBBox() and HitBeamOutline().
	  More optimal versions will be made later.
	- Also added these functions to iMeshWrapper.
	- Eric Sunshine modified static.mak so that it no longer overflows the
	  short DOS command-line input buffer when synthesizing cslibref.cpp.
	  This change should allow the DJGPP port to correctly generate
	  cslibref.cpp when USE_PLUGINS=no.
	- Eric Sunshine renamed csColorMapLine to csColorMapNull in the `null'
	  renderer in order to avoid symbolic naming conflicts with the `line'
	  renderer when USE_PLUGINS=no.
	- Eric Sunshine eliminated compilation warning from radiosity.h
	  regarding undefined csCoverageMatrix.
	- Eric Sunshine eliminated compilation warning from radiosity.cpp
	  regarding variable `visibility' being used uninitialized.
	- Michael Voase did the following:
	    - polytext.cpp: hid the overloaded *PutPixel and *DrawBox
	      by prepending underbars to the overloaded methods. Adapts
	      polytext to egcs 2.91.66 brain death.
	    - flarge: added metaball to the basement. Added a couple of
	      lights so its not so dark down there
	    - stdtex.zip: added blobby.jpg.
	- Eric Sunshine eliminated an `implicit conversion of float to int'
	  compilation warning from crossbld.cpp.
	- Eric Sunshine eliminated a compilation warning from ieplex.cpp
	  regarding non-virtual destructor.
	- Eric Sunshine added the `metaball' and `mballldr' targets to
	  `walkall' since `flarge' now requires these modules.
	- In an effort to eliminate the big iso engine bug I added
	  some asserts.
	- Wouter Wijngaards fixed another bug in iso engine.
	- Michael Voase removed two debugging messages in software renderer.
	- Philip Wyett moved struct RGB to be public in class awsRGBKey.
	- Philip Wyett updated his mail address in the docs to:
	      philipwyett@dsl.pipex.com
17-Jul-2001
	- Worked around an internal compiler error (for MingW compiler) in
	  recent changes to crossbld.cpp by completely rearranging the
	  routine. I have no idea what caused the internal error but the
	  code is now even a little more readable :-) In addition added
	  a missing poly->DecRef().
	- Implemented hierarchical mesh factories. Extended the
	  iMeshFactoryWrapper with functions to manipulate them.
	- Added iMeshFactoryWrapper::CreateMeshWrapper() which will create
	  a mesh wrapper (or hierarchy of mesh wrappers if it is a hierarchical
	  factory). csEngine::CreateMeshObject() will use that function
	  now.
	- iMeshFactoryWrapper::CreateMeshWapper() will now by default
	  use the name of the factory wrapper for the names of the enclosed
	  objects.
	- Renamed all iEngine::CreateMeshObject(), FindMeshObject(),
	  GetMeshObject(), ... to CreateMeshWrapper(), FindMeshWrapper(), ...
	  as those functions really operate on mesh wrappers and not on
	  mesh objects.
	- Added support for hierarchical mesh object factories to the
	  world file. Just use MESHFACT inside another MESHFACT. You can
	  then also use MOVE keyword to define relative transformation.
	- To create mesh objects from such a hierarchical mesh factory it
	  is not enough to use the MESHOBJ keyword. For this a new keyword
	  is added called MESHREF. This works a bit like MESHOBJ but the
	  first thing you have to specify is the factory to use. This will
	  then create a mesh object hierarchy from that factory. Note that
	  with MESHREF it is not possible to specify further mesh object
	  specific options (i.e. things that would normally go inside
	  the PARAMS block of a mesh object). These objects have to be
	  manipulated from within the code.
	- Added an example hierarchical mesh factory to flarge. Also
	  demonstrates how to use the new MESHREF keyword.
	- Added CS_ prefix to the following defines:
	    - DECLARE_GROWING_ARRAY
	    - DECLARE_GROWING_ARRAY_EXT
	    - DECLARE_GROWING_ARRAY_REF
	    - TYPEDEF_GROWING_ARRAY
	    - DECLARE_ACCESSOR_METHODS
	    - DECLARE_ARRAY_INTERFACE_NONUM
	    - DECLARE_ARRAY_INTERFACE
	    - DECLARE_OBJECT_INTERFACE
	    - DECLARE_EMBEDDED_OBJECT
	    - IMPLEMENT_EMBEDDED_OBJECT
	- Fixed a bug which occured when portals were being split by a bsp
	  tree.
	- Added 'name' parameter to Setup in iVisibilityCuller. This is
	  used to cache the data better (important for the cached octree,
	  especially if there are multiple such octrees).
	- Changed the terrain engine to use an SCF class for getting height
	  and normal information instead of the traditional callback system.
	  Basically this means that csTerrainHeightFunction and
	  csTerrainNormalFunction are now iTerrainHeightFunction and
	  iTerrainNormalFunction.
	- Since 5 July texture mapping was broken in the terrain engine.
	  The block textures were mapped to the wrong blocks giving a
	  patch-work like result. Fixed now.
	- Eric Sunshine applied a patch to SCF_DECLARE_FAST_INTERFACE() to
	  prevent the DJGPP compiler from complaining about semantics of the
	  static scfInterfaceID variable generating multiple copies.
	- Philip Wyett changed documentation with the following comment:
	  Removal of one of my email addresses in preperation of big email
	  address switch by me in the next two weeks.
	- Martin Geisse continued work on the model crossbuilder and mdltest:
	    - Actions are now handled correctly.
	    - mdltest builds an action into the default model. This is not
	      visible though because by default a thing is built, but the
	      action is only visible in sprites.
16-Jul-2001
	- Cleaned up new lighting system and CheckFrustum() a little more.
	- Added iLightingProcessInfo interface. A callback for a null-portal
	  can query this interface from the userdata in iFrustumView to
	  get information about the light that is being processed.
	- Fixed a small bug in the first simple tutorial (documentation
	  only).
	- Fixed curve static and dynamic lighting so it is correct with
	  space warping portals.
	- Fixed a memory leak in curve code.
	- Added -lightqual commandline option to influence the quality of
	  lightmap generation. By default this is equal to 3 which is rather
	  good. Higher values give better quality but then calculation takes
	  a LOT longer. I would not go beyond 4 or 5 really. Lower quality
	  values are a lot faster to calculate but don't look as nice. 2
	  is still good but below that it starts getting ugly (but fast) very
	  soon.
	- Also added equivalent Engine.Lighting.LightmapQuality config option
	  (in data/config/engine.cfg) which holds the default for this setting.
	- Added a test for adjacent polygons for lighting. This is really
	  very clumsy code and it should be rewritten preferably using some
	  precalculated stuff. But it does improve lighting quality a lot,
	  especially with low quality setting. Note that it slows down lighting
	  again.
	- Removed warning in CS_DECLARE_TYPED_VECTOR_NODELETE.
	- Removed a few warnings in engine and WalkTest.
	- Martin Geisse made the following changes:
	    - Added a note to the comment of
	      iSprite3DFactoryState::AddVertices() about the fact that at
	      least one frame has to exist.
	    - Changed the model data representation for converted models.
	      Normals, colors and texture coordinates are now stored together
	      with vertex positions in iModelDataVertices, but in separate
	      lists (i.e. there may be different numbers of vertices and
	      normals, for example). Polygons now use one index for each list
	      per vertex.
	    - Added sprite factory building to the crossbuilder plugin.
	      This is not yet tested completely and there are still some
	      problems.
	- Wouter Wijngaards did various fixes to iso engine:
	    - Fixed potential bug in GetCell for grids.
	    - Cells can now be emptied correctly.
	    - Fixed a bug which caused empty grids to crash lighting.
15-Jul-2001
	- New lighting system starts to work good enough so that I
	  now removed the old system. There are still a few small problems
	  with lighting but it does look a lot better than the old system.
	  Also the new system doesn't support warping portals yet.
	- Significantly cleaned up the iFrustumView code by removing all
	  lighting specific stuff.
	- Philip Wyett removed following piece of old glide stuff.
	  #define CS_GLIDE_2D_DRIVER "crystalspace.graphics2d.glidewin"
	- Michael Voase did the following:
	    - simplept: Changed this tutorial to use the inbuilt water
	      procedural texture.
	    - walktest: Very slight change to walktest to clip the 2d window
	      closer to the 3d window.	Also added CS_DEBUG check to disable
	      before- the-edge testing when in optimize mode.  It should make
	      walktest a little more presentable during demonstrations.
	    - sprite3d: Modified HitBeamObject() to do a full scan of a mesh.
	      This now returns the first intersecting triangle in a mesh.  This
	      is slower, but at least it is closer to correct.
	- Michael Voase later reverted his changes to simplept.
14-Jul-2001
	- Fixed pseudo-dynamic lighting again (broke it yesterday).
	- Continued work on new lighting system.
	- Philip Wyett added:
	    #pragma inline_depth (255)
	    #pragma inline_recursion (on)
	    #pragma auto_inline (on)
	  to win32/csosdefs.h. This works round MS's default implementation
	  of the "inline" keyword in MSVC and makes the compiler do a true
	  "inline" when we ask for "inline".
	- Michael Voase did the following:
	    - Graph2D: Fixed procedural texture clip problem (introduced by
	      my last patch). DrawPixeln() now checks up to and including the
	      bouding box values.
	    - 2D drivers (Mac, linux, OS/2, opengl): Corrected SetClipRect()
	      to set the correct parameters for the clipper.
	    - awsmdg.cpp: Changed SetClipRect() call to fix out of bounds
	      setting ( 639, 479 ) instead of ( 640 x 480 ).
	    - graph2d: Did a general audit of all drawing routines, some
	      context problems found with csRect and DrawBox(), however, the
	      new clip settings seem to prevent invalid pixels being drawn.
13-Jul-2001
	- Removed a hard-coded limit to the number of lightmaps that
	  can be affected by a pseudo-dynamic light. This used to be
	  2000 but I implemented this by using a csVector now.
	- Changed the callback functions in iFrustumView with an additional
	  'vis' parameter. This means that those functions will now also
	  be called when a polygon or curve is totally shadowed. In this
	  case 'vis' will be set to false.
	- Continued working on the new lighting system. It is almost
	  starting to work now. But the last straw is always the most
	  difficult one :-) It is still not enabled by default.
	- Michael Voase did the following:
	    - Bugplug: Added NULL assignment to poly ( line 274 ).
	      This was allowing bugplug to use an unassigned Polygon3D
	      pointer.
	    - Terrfunc: Removed unecessary increment from hit beam.
	    - linex2d, x2d, common/graph2d.cpp: Decreased width and height
	      of clipping rectangles by 1. Since the screen is represented
	      by an array that starts at (0,0), trying to access pixel
	      (*, height), was out of bounds causing a segfault in the
	      2d driver. All widths and heights of clipping rectangles
	      should be height - 1 and width - 1. This is due to the
	      clipper protecting a pixel array.
	    - Sprite3D: Improved GetRadius() a little to provide
	      the center of the bounding box as a radius center.
	    - BugPlug: Quick and dirty Hack on HitBeam() debug
	      command to work on mouse button 1 as well as mouse
	      button 3. Not all platforms have multiple mouse
	      buttons ( ie Mac ). This is to aid the debugging
	      of the graph2d driver on all platforms.
	- Wouter Wijngaards made isogrid more resistant against overflows.
	- Christopher Nelson did the following:
	    - Changed csDLLinkList in awsKeyContainer to csBasicVector.
	    - Fixed circular list bugs in FindWindowDef and SelectDefaultSkin.
	    - Fixed Consume bug, where consume was deleting the items at the
	      wrong time, and keys weren't getting consumed properly.
	      Consume and lookup now works 100%.
	    - Fixed a couple of other functions to work properly with the
	      circular nature of csDLinkList.
	    - Added aws_debug const bool for turning on and off printf
	      output in key areas.
	    - Fixed small potential bug in PeekFirstItem (csDLinkList),
	      in case the first item does not exist.
12-Jul-2001
	- Added iPolygon3D::GetPolygonID ().
	- Extended BugPlug to show the name and ID of the selected polygon.
	  BugPlug will also dump some additional information to debug.txt.
	- Worked further on the new lighting system. It starts to work
	  mostly now but there is still a lot to do. Quality is less that
	  optimal now and so is speed.
	- Prepared some classes in csThing in order to be able to generate
	  an edge table so that adjacent polygons can be easily detected.
	  Unimplemented at the moment.
	- Changed the shadow caster not to cast shadows from meshes with
	  the CAMERA option set.
	- Fixed a bad bug in the isotest maze generator. However the way
	  the maze is used now it will not cause harm since width==height.
	- Fixed another related bug in isotest maze generator.
	- Christopher Nelson did the following changes to AWS:
	    - Fixed parser to allow RGB values like:
		Highlight: 255,255,0
	    - Added in Get/SetColor and SetPalette to awsPrefs for global
	      colors.
	    - Fixed the color indexes, made them into an enum.
	    - Fixed silly problem where the canvas wasn't drawing properly.
	- Wyatt Miler applied a fix reported by garrett@memesis.org to
	  linex2d.mak.
	- Martin Geisse added a description of his recent iSprite3DFactory
	  changes to apimod19.txi.
11-Jul-2001
	- Removed csLight::CorrectForNoColor() since it is obsolete.
	- Added a virtual destructor to mdldata.h.
	- Removed deletion of the 'void*' userdata in terrfunc. This
	  is not legal. The correct solution to be able to clean up
	  this data is to rewrite the callback system using SCF interfaces
	  as I have already done at other places. This is on my todo.
	  So please leave the memory leak there for the moment.
	- Made a lot of functions in csPolyTexture inline.
	- Started a fundamental rewrite of the lighting system. I'm far
	  from satisfied with the quality of the current lightmap generator.
	  In big levels using octree there are LOTS of small and not-so-small
	  lighting errors. Also the current code is WAY to complex to
	  actually maintain. So I'm not going to start to try fixing that.
	  This is only the fourth time the lighting system has been rewritten
	  though :-)
	- Added new csShadowBitmap class. This class will hold shadow
	  information for a single lightmap. Shadows will be rendered on
	  this bitmap during the lighting process. Later on the shadow bitmaps
	  will be used to update the lightmaps.
	- Added iFrustumViewUserdata SCF interface which will be used to
	  attach user data to iFrustumView (used by CastShadows() and
	  CheckFrustum()). Added SetUserdata() and GetUserdata() to
	  iFrustumView interface.
	- Added csLightingPolyTexQueue class which will hold the data for the
	  lighting process. It implements iFrustumViewUserdata.
	- Continued work on the new lighter. Almost starts to work now but
	  it still isn't enabled by default.
	- Martin Geisse changed the following for 3d sprites:
	    - Removed GetTexelCount() and GetNormalCount() for 3d sprite
	      factories. As there is always the same number of vertices,
	      normals and texels, GetVertexCount() should be used instead.
	    - Made GetVertex(), GetNormal() and GetTexel() return 'const'
	      references. To change these objects, corresponding Set*()
	      functions have been added.
	    - Removed the 'count' parameter from SetVertices(), SetNormal()
	      and SetTexels(). These functions assumed that 'count' is always
	      equal to the current number of vertices, therefore it was not
	      needed as a parameter.
	- Christopher Nelson did lots of little changes so that AWS works
	  better in the "real world".
	  AWS now assumes that it will be loaded as a plugin, and during
	  initialization it finds and loads the default bundled preference
	  manager.  The user no longer has to do this separately.  You can,
	  however, replace that preference manager with a totally different
	  one if you so desire.
	  A couple of tweaks, also added color definitions for standard UI
	  items like highlights and shadows.
	  The preference manager will automatically look those up for you and
	  keep track of them so that components don't need to query the
	  texture manager.  This also lets you make global UI color changes
	  at any time.
	  Colors are specified in skin definitions, and MUST BE PRESENT.
	  Alternatively, the system may provide default values for missing
	  color keys.
	- Philip Wyett fixed some struct vs. class mismatches in AWS header.
10-Jul-2001
	- Michael Voase did the following:
	    - Next installment on terrfunc, this patch adds some bound
	      checking to HitBeamObject(), this should stop once and for all
	      the current infinite loop problems. Also prevents out of
	      bounds block indexes from being used.
	    - Modified the intersect triangle stuff to check the triangle in
	      both orientations. This is due to
	      csIntersect3::IntersectTriangle() being picky about vertex
	      orientation. Note this does slow down the HitBeam routine
	      in terrfunc, but at least provides 100% accurate intersections.
	      I will add a similar step to ball, sprite and metaball. Cube
	      and surface need no change.
	    - Reworked how HitBeam uses its increment during box crawl. The
	      increment is now only added during the Object2Block calc. This
	      should squash the tiny error that allowed triangles that were
	      close to the intersect point on the block bounding box being
	      missed.
	    - Lastly, this patch also implies HitBeam in terrfunc should be
	      100%. If it is not, please report any bugs found.
	- Martin Geisse added a call to MakeRoom() to csPoly2D::SetVertices()
	  and csPoly3D::SetVertices ().
	- Christopher Nelson added the aws registrations for SCF into scf.cfg.
	- Eric Sunshine eliminated several compilation warnings from
	  curve.cpp and polytext.cpp.
	- Martin Geisse applied a small change to SCF_DECLARE_FAST_INTERFACE:
	  The static interface variable is now defined outside the wrapper
	  function, because static variables inside inline functions seem to
	  cause problems on some platforms.
	- Eric Sunshine reverted Martin's change since it unconditionally
	  allocated storage for every `id' variable in every compilation unit
	  even if the variable was never accessed.  I suggested, to Dan
	  Bogdanov, a different potential work-around for the DJGPP port.
	  If this work-around is successful then it will be applied instead.
9-Jul-2001
	- Added csThing::IntersectSegmentFull() which does the same
	  thing as IntersectSegment() except that the latter doesn't (anymore)
	  test objects in the visibility tree.
	  iVisibilityCuller::IntersectSegment() (implemented by csThing)
	  will actually call IntersectSegmentFull().
	- Renamed proctex.cpp in simplept to sproctex.cpp. Due to a limitation
	  in the makefile system we cannot have source files that have
	  the same name even if they are in separate sub-projects.
	- Renamed csPoly3D::SetGetVertexCount() to SetVertexCount().
	- Renamed csPoly2D::SetGetVertexCount() to SetVertexCount().
	- Renamed csWfPolygon::SetGetVertexCount() to SetVertexCount().
	- Fixed a significant bug in the transformation of bounding boxes
	  in the octree. It could happen that it was not updated enough.
	  Now it uses the camera number to see if it needs updating those
	  vertices and it will also make sure the number of vertices in the
	  camera array is the same as the number of vertices in the object
	  array.
	- Fixed a bug in CheckFrustum() code. Detail objects would not
	  be correctly treated by the visible_set csHashSet.
	- Fixed another bug in CheckFrustum(). The visibility objects would
	  not be correctly initialized which means that the initial lighting
	  step would not be able to see them (i.e. detail objects got no
	  lighting).
	- Philip Wyett removed all 'foreign' includes and libraries from
	  include/cssys/win32 and libs/cssys/win32. Those libraries are not
	  part of CS and should not be in CS CVS. You can download all needed
	  files from thew new winlibs0.19b.zip which you can find
	  at ftp:://sunsite.dk/projects/crystal/support/win32
8-Jul-2001
	- Fixed a bug in the destructor of the emit particle system
	  which could cause crashes at exit.
	- Fixed a bug in the handling of precalc_info in the engine
	  lightmap calculator. This would prevent cslight from writing
	  out a precalc_info file.
	- Added the Crystal Space logo to cslight.
	- Extended iVisibilityCuller with IntersectSegment().
	- Moved the implementation of IntersectSegment() from csSector
	  to csThing. There it is now implemented much more efficiently
	  by using the visibility algorithms for detail objects.
	- The above optimizations greatly optimize speed of moving
	  around in very big levels that use an octree for visibility
	  culling (several factors faster).
	- Things now keep a list of polygons which have a portal.
	  This is maintained by csPolygon3D itself through the
	  functions csThing::AddPortalPolygon() and
	  csThing::RemovePortalPolygon(). This list is going to be
	  used for a more optimal camera movement system. The camera
	  movement system currently does a full FollowSegment() but
	  this is rather expensive in big maps considering that it
	  has to test ALL objects and polygons. It is much more
	  efficient to just test the portals and let collision detection
	  do the rest.
	- Added 'only_portals' parameter to iSector::FollowSegment()
	  and csSector::FollowSegment(). When this flag is true (default
	  and old behaviour is false) then only portals will be checked
	  and no collision detection with walls will happen. This is a lot
	  faster but it does mean that the application will need another
	  way to do collision detection with objects and walls.
	- Added equivalent 'only_portals' flag to
	  csThing::IntersectSegment() and csSector::IntersectSegment().
	- Added OnlyPortals() and GetOnlyPortals() functions to iCamera
	  with which you can control if MoveWorld() will check collision
	  with portals alone or also with other polygons. By default
	  this is 'true' (which is a lot faster).
	- Fixed a bug with map2cs where it would put the MOVEABLE()
	  keyword outside the PARAMS() block. It must go inside the
	  PARAMS() block instead.
	- Martin Geisse added a simple tutorial application, called simplept.
	  It should demonstrate how to create a procedural texture and let
	  the engine render into it (and by this it should finally replace
	  the unmaintained ptlab application). Currently there is still a
	  crasher at shutdown for opengl.
	- Michael Voase did the following:
	    - Improved HitBeamObject() somewhat in terrfunc. I have fixed
	      the endless loop situation so that it doesn't hang the engine
	      when used in certain circumstances. It should be fairly acurate
	      now with two small caveats. The first being sometimes the
	      method will fail to hit a triangle even though it is obvious
	      that a triangle is intersecting the beam. Secondly, due to the
	      first failure, the other side of an object is sometimes
	      intersected. I have changed the routine so that it tries to
	      find the closest intersection, but sometimes it just plain
	      fails. I have no idea why at this stage, further investigation
	      is required.
	    - Changed HitBeamObject() in cube to detect intersection only on
	      the bounding box. Since the cube is a box anyways, checking the
	      individual triangles is not necesary. Since the orientation of a
	      cube cannot be changed using HardTransform(), only the
	      translation, this should be adequate. Note: If someone DOES
	      change HardTransform() in cube, then they WILL need to change
	      the HitBeamObject() method as well.
	    - Changed the HitBeamObject() in ball to find the closest
	      intersection. This seems to work rather well, but is
	      somewhat slower than the original.
	- Philip Wyett removed new simlept due to a very bad memory problem.
	  Note: This took my Dual PIII with a 1Gb of RAM down
	  to a low memory alert inside a minute and a half on Win2K. :-/
	- Philip also fixed includes in proctex.cpp and simplept.cpp.
	- Philip added several include files and libs from the lib3ds
	  project to make sure the ie3ds importer builds on VC.
	- Martin Geisse did the following:
	    - Added iEngine::GetContext () which returns the current renderer.
	    - Fixed a bug in camera code with MoveWorldUnrestricted() and
	      MoveUnrestricted(). The camera number was not correctly
	      updated.
	    - Replaced lots of SCF_QUERY_INTERFACE calls in the engine with
	      SCF_QUERY_INTERFACE_FAST.
	    - Added Insert() to growing arrays.
	    - Added csModelDataVertices to the model data structures. It can
	      be used to keep a list of vertices.
	    - Model data objects don't store their vertices directly anymore.
	      Instead, they keep a pointer to a 'default vertex set' of type
	      iModelDataVertices.
	    - Added csModelDataAction, which is intended to be a set of key
	      frames, but it is currently unused.
	    - Added missing bounds check to the Insert() method of growing
	      arrays.
7-Jul-2001
	- Richard D. Shank updated the 3ds model converter. It requires a
	  post release 1.1.0 of lib3ds.
	- Martin Geisse continued to change phyztest to use engine objects
	  through SCF interfaces.
6-Jul-2001
	- Christopher Nelson fixed two silly problems in AWS.
	- Philip Wyett did the following to AWS:
	  Function param mod for VC.
	  Chris: The only errors in AWS now are in the mouse
	  and key fuctions in "awswin.cpp" which should
	  have boolean returns but are not yet finished.
	- Christopher Nelson fixed boolean non-returns to make all the
	  compilers happy (in the AWS plugin).
	- Martin Geisse changed phyztest, ptlab, and walktest in many cases
	  to use engine objects through SCF interfaces.
	- Fixed a bug in Blocks with the vertical raster lines. Some of
	  them were visible from the wrong side.
	- Converted Blocks, Demosky, Bumptest, Metademo, Pysimple,
	  Squawk and Video apps to use the engine as a plugin.
	- Isotest was linking with engine and parser for no visible reason.
	- Csfedit was linking with engine and parser for no visible reason.
	- Fixed a few descriptions in makefiles so that they align properly.
	- Removed link with CSPARSER from all makefiles. csParser is now
	  a plugin.
	- Added iEngine::ShineLights() for manually calculating lighting.
	- The engine plugin can now be initialized without requiring a
	  G3D plugin. This is useful for using the engine in a server
	  setup or for calculating stuff (like lighting).
	- Tried to modify the engine and parser so they work nicely without
	  a 3D renderer. For the parser this is ok but it appears to be
	  more complicated for the engine so I aborted this attempt.
	- Removed EnableLightingCache() and IsLightingCacheEnabled()
	  from the engine (iEngine and csEngine). Instead added
	  SetLightingCacheMode() and GetLightingCacheMode(). There
	  are two flags that you can combine and give to that function:
	    CS_ENGINE_CACHE_READ
	    CS_ENGINE_CACHE_WRITE
	  If CS_ENGINE_CACHE_READ is set then the engine will try to
	  read lightmaps from the cache. If this fails then no lighting
	  will be present. If CS_ENGINE_CACHE_READ is not set then the
	  engine will recalculate lighting.
	  If CS_ENGINE_CACHE_WRITE is set then the engine will cache
	  the resulting lighting.
	- Added Lighter application which will do the lighting on a level.
	  It even shows a graphical progress bar (this is now possible
	  with the new iProgressMeter interface I made yesterday)
	  Don't expect too much fancy graphics though! That's for later :-)
	- Collections are no longer objects that can be added to a sector.
	  They no longer have a movable. This is not very useful and
	  it simplifies the engine again.
	- Philip Wyett added lua support to VC port of CS. VC6 users
	  can through the cslua plugin take advantage of the lua as a
	  scripting choice for your development.
	  Commented out a compile error lua maintainer should
	  look at - search for REDEYE tag in "cs_lua.cpp"
	  Jorrit fixed a compile error where a bad l-value was
	  being attempted to be set.
	  Added cslua to MSVCGEN process.
	  Added a SCF entry for cslua plugin.
	  Note: You need to download the new 0.19a winlibs
	  archive with the lua dlls to test or use the new
	  cs lua plugin/test app.
	  The new winlibs can be obtained from:
	    ftp.sunsite.dk/projects/crystal/support/win32
5-Jul-2001
	- Removed Glide renderer and canvases due to lack of
	  maintenance. It was not functional either.
	- Michael Voase writes:
	    - In the ongoing quest to implement HitBeam() in all
	      mesh objects, todays victim is terrfunc. Unfortunately,
	      I have been slightly side-tracked into correcting bugs
	      and stabalizing various algo's.
	    - Corrected the behaviour of csIntersect3::IntersectTriangle()
	      which had a habit of failing when the triangle was co-planar
	      with origin. IntersectTriangle() will now shift the points
	      away from origin if necessary. *WARNING* If you are using
	      WhichSide3D() please be aware you will need to do the same
	      trick to get a valid result.
	    - Added ALLMATERIAL keyword to terrain func loader. Mostly
	      added for testing purposes cause I was really jack of
	      having to add dozens of materials every time I changed
	      block count (esp since they were all the same texture).
	    - Added a bound check to CalculateCost() to prevent a divide
	      by zero error. This happens when you have small blocks with
	      lots of grid points.
	    - Added a NULL assignment to the node field in the csTerrBlock
	      class constructor. This prevents unnassigned nodes getting
	      past the CS_ASSERT() in csTerrFuncObject::Draw(). This doesnt
	      really fix anything, just prevents the invalid pointers from
	      being used. This seems to occur when the QUADDEPTH value is
	      set too low.
	- Fixed texture mapping of one of the sides of the skybox in csdemo.
	  Two weeks ago Norman changed this for some reason?
	- Added iReporterListener interface. Added the notion of listeners
	  to the reporter. You can now register listeners that will listen
	  to new messages that arrive with the reporter. The listeners
	  can handle that message and then let it be discarded.
	- Changed the engine to use the reporter to tell about loading
	  progress instead of using CsPrintf. Changed WalkTest to add a
	  reporter listener which will listen to NOTIFY and WARNING messages
	  and will display them immediatelly.
	- Removed CsPrintf() in engine.
	- Eric Sunshine removed a bunch of Glide references from documentation,
	  sources, headers, and makefiles.
	- Fixed a few dependencies on csengine in csphyzik (related to
	  debugging mostly). Also removed the conditional CRYSTALSPACE
	  define.
	- Added iProgressMeter SCF interface. This is a general interface
	  for reporting progress for a lengthy calculation.
	- Renamed the old csProgressMeter to csTextProgressMeter and let it
	  implement iProgressMeter.
	- Extended iEngine::Prepare() with a parameter for an optional
	  progress meter. This means that it is now possible to let the
	  engine process reports be displayed through another method (or
	  not at all).
	- WalkTest now uses the csTextProgressMeter and gives it to the
	  engine.
	- Martin Geisse did the following:
	    - Fixed a compile warning in the reporter plugin.
	    - Added missing 'const' specifiers to iSectorList.
	    - Did some cleanup in the movable code using typed vectors.
	    - The list of sectors for a movable is now returned as an
	      iSectorList instead of a csVector which actually contains
	      csSector objects. Note that the movable uses another
	      implementation of iSectorList than csEngine does.
	    - Fixed a compiler warning in spr3d.cpp (hope that this is the
	      correct fix, but it's the only one that makes sense to me).
	    - Changed the way lightmaps are represented in the engine.
	      Instead of a simple array of simple, an array of csRGBpixel's
	      is now used. This should not change the actual binary
	      representation, which is important for the renderers.
	    - All this is done in csRGBMap. csRGBLightMap has been removed.
	    - Added a generic macro to csutil (sarray.h) that lets you
	      define a non-growing but resizable array, similar to the newly
	      added csRGBMap but for any given type. Removed csRGBMap again;
	      the lightmap code uses the above macro for this.
	      Also re-implemented csShadowMap using the macro.
	    - Added Find(iSector*) to iSectorList and cleaned up the movable
	      code to use objects through interfaces (though they are not
	      yet reference-counted correctly).
	    - Fixed the impexp multiplexer and POV importer to compile again
	      and added both to the build process.
	- Michael Voase did the following:
	    - In the ongoing quest to implement HitBeam() in all
	      mesh objects, todays victim is terrfunc. Included
	      is the first draft for HitBeamObject(), several
	      core changes to the engine. I have changed
	      csIntersect3D::BoxSegment() to return the code
	      for the box side where the intersection was found, -1
	      otherwise.
	    - Changed MeshObject::GetRadius() to use two parameters
	      to return the radius and the center.
	    - Added several methods to terrfunc for translating values
	      from one space to another.
	    - Cleaned up a small memory leak in Terrfunc.
	    - Two small bugfixes to sprite3d and isoengine
	      after my last commit. This corrects HitBeamObject()
	      in Sprite3d and isoengine.
	- Christopher Nelson did the following: AWS had the following items
	  added:
	    - Iterators for awsComponentNode settings.
	    - FindWindowDef for finding the node for a window definition
	      in the preferences manager.
	    - CreateWindowFromDef: This is the high-level key to the whole
	      definitions architecture.	 While the user does have to specify
	      defintions files to parse, the rest is all automatic.
	      When creating a window from a definition template, the user
	      calls this function, which returns an awsWindow *.  This
	      function takes care of creating the window to the specifications
	      in the defintion file, and also recursively constructs children,
	      adding them into the parent.  This is really the last big step
	      in the AWS system.  Next, I will begin to create a number of
	      components, and test the actual drawing and implementation.
	      If there are any functionality requests, now would be a good
	      time. I will also post a message to that effect on the main
	      list.
	    - Updated definition to support FindWindowDef.  The iAws
	      definition has not yet been updated to support factories.
	- Philip Wyett fixed a function parameter redefinition error under
	  VC6. Note on another error:
	  awsmgr.cpp(294) : error C2660: 'AddChild' : function does not
	  take 1 parameters
	  All other errors are I think are un-finished stuff... :-)
4-Jul-2001
	- Added iCamera::SetTransform() which should be used to directly
	  set the transform. It is illegal to assign to the result of
	  iCamera::GetTransform() directly but I did not make the result
	  'const' since it is legal to do modifications on the returned
	  transform using other methods (like RotateThis() and SetPosition()).
	- Removed dungeon plugin and test app due to lack of maintenance.
	- Removed csgame plugin and test app due to lack of maintenance.
	- Philip Wyett did the following:
	    - Added SDL 2D canvas to MSVC build & MSVCGEN process.
	    - Updated MSVC docs for SDL 1.2.1.
	    - Updated command line docs to add -canvas.
	- Removed t3d2cs app since it doesn't work and is unmaintained.
	- Created apps/import and moved map2cs, mdl2spr, 3ds2lev there.
	- Created apps/tools and moved scfreg, makedep, csfgen, csfedit,
	  uninst, and vsh there.
	- Eric Sunshine eliminated additional resources and references to
	  obsolete applications and modules such as dungeon, vfstest, MazeD,
	  t3d2cs, etc.
	- Changed the loader plugin so it no longers unloads all plugins
	  after LoadMapFile(). This is not efficient as LoadMapFile() can
	  be used multiple times to fill up several reasons. Instead the
	  plugins are now unloaded in the destructor of the loader plugin.
	- Changed the scale and shift parameters for a layered texture
	  from int to float. Also added a logical change. CS_FX_TILING
	  should now be used when you want the layer texture to tile on
	  the base texture. This used to be default but it isn't any more.
	  Note that the OpenGL renderer currently only supports the tiling
	  option so the presence of CS_FX_TILING or not will not have
	  an effect currently.
	- Added support for TILING() keyword in the map loader and all loader
	  plugins.
	- Removed the obsolete support for libraries (regions should be
	  used instead).
	- Fixed cs.i for scripting plugins. Regenerated SWIG files for
	  Python plugin and manually tried to fix cslua plugin.
	- Eric Sunshine fixed a nasty plugin-leak in SCF which was introduced
	  when iBase was substituted for csBase as the base class of
	  scfSharedLibrary.  The specific problem was that, although SCF
	  removed scfSharedLibrary objects from its list of loaded plugins, the
	  scfSharedLibrary objects were never actually getting destroyed.  The
	  result was that the dynamically loaded plugin code never got unloaded
	  even though SCF though that it had.
	- Eric Sunshine fixed csSCF::QueryClassList() so that it no longer
	  leaks an scfStrVector object.	 The reference count on the returned
	  object was incorrect; it should have been 1 but was actually 2.
	- Eric Sunshine changed the Apple/NeXT plugin loading mechanism so that
	  it now keeps track of currently loaded plugins.  This is necessary
	  since plugins can only be unloaded in reverse order on Apple/NeXT,
	  whereas SCF expects a platform to be able to unload plugins in any
	  order.  This issue is further complicated by the fact that SCF
	  blindly assumes that plugin unloading operations always succeed.
	  This creates problems if, for example, SCF requests to have a plugin
	  unloaded, the unload fails, and then SCF later requests to have it
	  re-loaded.  By manually maintaining a list of loaded plugins, the
	  Apple/NeXT plugin loading mechanism can simply return the handle of
	  an already-loaded plugin (one which could not be unloaded), if
	  necessary.
	- Eric Sunshine added a "CS_" prefix to the following macros from
	  iutil/object.h:
	    GET_CHILD_OBJECT()		  --> CS_GET_CHILD_OBJECT()
	    GET_CHILD_OBJECT_FAST()	  --> CS_GET_CHILD_OBJECT_FAST()
	    GET_NAMED_CHILD_OBJECT()	  --> CS_GET_NAMED_CHILD_OBJECT()
	    GET_NAMED_CHILD_OBJECT_FAST() --> CS_GET_NAMED_CHILD_OBJECT_FAST()
	    GET_FIRST_NAMED_CHILD_OBJECT()
		--> CS_GET_FIRST_NAMED_CHILD_OBJECT()
	    GET_FIRST_NAMED_CHILD_OBJECT_FAST()
		--> CS_GET_FIRST_NAMED_CHILD_OBJECT_FAST()
	- Eric Sunshine added a "CSWS_" prefix to the following skin-related
	  macros from CSWS:
	    SKIN_DECLARE()		--> CSWS_SKIN_DECLARE()
	    SKIN_SLICE()		--> CSWS_SKIN_SLICE()
	    SKIN_DECLARE_END		--> CSWS_SKIN_DECLARE_END
	    CSWS_SKIN_DECLARE_DEFAULT() --> CSWS_CSWS_SKIN_DECLARE_DEFAULT()
	- Martin Geisse made the following changes:
	    - Added proper texture and material information to the model
	      data structures.
	    - The thing crossbuilder now uses the stored textures in the
	      thing.
	    - Mdltest shows this feature on the floor polygon.
3-Jul-2001
	- Fixed the Python plugin after Martin's changes.
	- Added iEngine::GetCameraPosition() which takes a name as a parameter
	  instead of an index.
	- Fixed a warning in engine.cpp.
	- Added new apps/examples dir. This dir will contain small applications
	  that demonstrate a single feature.
	- Added apps/examples/cswseng which is a small app that demonstrates
	  how to use CSWS and Engine in same application. It is a derivative
	  from the old levtool but a few bugs are fixed and it is simpler.
	- Removed levtool since the demo functionality is no longer needed
	  (cswseng does this) and it is otherwise not functional.
	- Eric fixed the new CS_BEGIN_TYPED_IBASE_VECTOR_WITH_SUPERCLASS macro
	  so that it compiles error-free on NextStep.  It was reporting this
	  error: "type `foo' is derived from private `csIBaseVector'".	Also
	  made the TestIBaseVectorInhertiance() implementation more obvious.
	- Philip Wyett did the following changes:
	    LoadPlugIn -> LoadPlugin
	    QueryPlugIn -> QueryPlugin
	    UnloadPlugIn -> UnloadPlugin
	    RegisterPlugIn -> RegisterPlugin
	    GetPlugIn -> GetPlugin
	    GetPlugInCount -> GetPluginCount
	    csPlugInsVector -> csPluginVector
	    iSaverPlugIn -> iSaverPlugin
	    FindPlugIn -> FindPlugin
	    FindPlugInRec -> FindPluginRec
	    ConfigPriorityPlugIn -> ConfigPriorityPlugin
	    NewPlugIn -> NewPlugin
	  This change is a change of PlugIn for Plugin in
	  all instances inside the libs, plugins and apps.
	  Docs and config files also updated.
	- Fixed csEngine::FindMaterial(), FindTexture(), and FindSector()
	  so that they actually don't crash when they couldn't find
	  an object in the specified region. They were blindly doing
	  SCF_QUERY_INTERFACE without first checking if the returned
	  object was not-NULL.
	- Fixed an SCF bug in csRegion. It was doing SCF_DECLARE_IBASE
	  instead of SCF_DECLARE_IBASE_EXT.
	- Fixed a bug in csEngine::SelectRegion(). It would crash if
	  a NULL region was given.
	- Eric Sunshine eliminated a couple compilation warnings in surf.cpp
	  regarding possible use of unitialized variables.
	- Eric Sunshine fixed a few minor problems with the SDL canvas which
	  prevented it from compiling.	Whether or not the canvas actually
	  works at run-time is unknown, but it does compile cleanly with the
	  the SDL 1.2.1 headers.
	- Eric Sunshine removed the special hack from the Apple/NeXT ports
	  which allowed the AppKit's run-loop to be invoked recursively.  This
	  feature is no longer required since CSWS no longer recursively
	  invokes iSystem::Loop().  Furthermore, this hack used private API of
	  the AppKit and relied upon implementation details of the AppKit's
	  black-box run-loop mechanism.	 Therefore, by removing this code, the
	  Apple/NeXT ports are now 100% API clean (that is, they now use only
	  public AppKit API).
	- Eric Sunshine eliminated the unmaintained `ggi' and `mgl2d' canvases.
	- Wouter Wijngaards commented out -ldl on the LIBS line of the sdl
	  canvas. The SDL canvas works (--canvas=sdl2d option) for me on
	  mingw, SDL 1.2.0. Even gives a 4% speedup, over regular plugin :-)
	- Eric Sunshine eliminated compilation warnings about "non-virtual
	  destructor in class with virtual methods" from the following classes:
	  csModelDataObject, csModelDataCamera, csModelDataLight,
	  csModelDataMaterial, and csModelData.
	- Eric Sunshine eliminated several compilation warnings about implicit
	  conversion from double to integer in csEngine::SetAmbientLight().
	- Eric Sunshine fixed several problems in mdltest.mak and crossbld.mak
	  which prevented the modules from building correctly on Unix.
	- Eric Sunshine renamed csutil/crossbld.{h|cpp} to crossb.{h|cpp} in
	  order to avoid conflicts with the crossbld.o file which is generated
	  from plugins/mesh/crossbld/crossbld.cpp.  This is actually a
	  limitation of the current makefile system where all object files are
	  dumped into the same `out' directory, which means that no two source
	  files in the entire project can have the same name.  I plan to
	  address this problem sometime soon.
	- Philip Wyett fixed the SDL canvas so it does SDL_ShowCursor = true
	  on Open().
	- Philip also fixed SDL driver kicking out following message on Win32:
	  WARNING: Your operating system is not tested	yet with sdl2d
	  video driver.
	  SDL plugin works on Win98/SE/ME and Win2k. I cannot test on
	  NT4, but all seems to be well on OS's tested via VC6 buillds. :-)
	- Philip did some manual updates to VC project files.
	- Philip fixed Walktest after Eric renamed a few crossbuilder
	  include files.
	- Philip added CSTOOL to crossbld.mak to fix a link error on mingw.
	- Philip added crossbuld plugin to glbal process so mdltest works. :-/
	- Philip fixed an include error in mdltest.
	- Philip removed the EAX sound renderer due to lack of maintenance.
	- Brandon Ehle did the following:
	    - Fixed csLua scripting plugin and removed all global
	      variables where applicable. Changed the architecture such
	      that you use the global system variable rather than calling
	      GetSystem() at startup.
	    - Added some new classes to cs.i and fixed some existing problems.
	    - Regenerated both python and lua swig interfaces.
	    - Added the options -python and -lua to pysimple so that world
	      geometry doesn't get generated twice by both plugin tests.
	- Martin Geisse added iEngine::GetAmbientLight() and SetAmbientLight().
	- Martin also did the following:
	    - Fixed the header protectors in imesh/mdlconv.h and
	      imesh/mdldata.h (they had the wrong directory in their name).
	    - Moved all model data related classes to cstool. Although they
	      are primarily used by the model file converters, it also makes
	      sense to use them from elsewhere (for example, the
	      crossbuilder test app :-)
	    - Added a first implementation of the crossbuilder (a plugin that
	      can be used to create mesh objects from imported model files).
	      Currently it cannot do more than extract vertices and polygons
	      into things.
	    - Added a test app for the crossbuilder (mdltest).
2-Jul-2001
	- Removed the bad and global 'thisclass' pointer from the Python
	  plugin.  Removed the 'GetSystem()' call from 'cs.i'.	The Python
	  plugin now sets the pointer to iSystem in 'cspace.system' Python
	  variable.  So if a Python script does 'import cspace.*' then you can
	  just use 'system' in your script.  This change breaks the LUA plugin
	  though.  A similar change has to happen there but I don't know how.
	- Eric Sunshine fixed the csPython plugin so that it once again
	  compiles cleanly under NextStep following the removal of `thisclass'.
	  The problem was that the NextStep compiler disallows C++ expressions
	  in functions which have been declared `extern "C"'.
	- Eric Sunshine added DSP.CSPYTHON.CFLAGS to cspython.mak to define
	  "SWIG_GLOBAL" for MSVC.
	- Eric Sunshine removed some outdated scripts from CS/scripts/blender.
	- Eric Sunshine removed the unneeded vfstest and textconv applications.
	- Eric Sunshine took advantage of the new iSystem::PerformExtensionV()
	  method which accepts a va_list argument in order to simplify the
	  system_extension() methods and plain-C forwarding wrappers in the
	  Apple/NeXT system driver and AppKit-based 2D driver.
	- Eric Sunshine eliminated several compilation warnings from
	  cmdline.cpp and cmdline.h.
	- Michael Voase made the following changes:
	    - In the ongoing quest to implement HitBeam() in all mesh objects,
	      todays victims are cube and surface.  Both should now respond to
	      bugplug and show their bounding boxen and radii.	I have
	      optimized surface a little by adding a set of corner vertices to
	      shortcut the bbox and HitBeamObject() methods.
	    - Fixed a small bug in csSector::HitBeam().	 This now returns the
	      closest intersection be it a mesh or polygon ( previously, was
	      returning furthest mesh or polygon ).  Only the intersect vertex
	      was affect, no other methods or fields were harmed during this
	      procedure...
	- Martin Geisse updated apimod19.txi with his latest changes.
	- Martin also did the following:
	    - Removed csTextureWrapper::GetPrivateObject().
	    - Changed csMaterialList to derive from a typed vector.
	    - Sectors are now stored in a typed vector too. This vector has
	      its own interface, iSectorList. Removed all functions from
	      iEngine which are already available through iSectorList.
	- Martin made the following changes to the typed vector system:
	    - Moved all macros to their own header file, typedvec.h.
	    - Internally, an even more flexible macro is used that allows
	      usage of a user-defined superclass for the vector.
	    - Modified the vectors for SCF objects.  The contained class no
	      longer needs to be defined at the time the vector is declared.
	      On the bad side, it is now a requirement that the contained class
	      must be a subclass of iBase.  It is no longer sufficient that the
	      class has IncRef/DecRef methods.	However, this should not be too
	      much of a limitation.
	    - Vectors for normal objects and for SCF objects again use the same
	      concept in their macro hierarchy.
	- Martin also added a new system of object vectors:
	    - This system should finally replace csNamedObjVector.  The common
	      superclass for those vectors is currently called
	      csNamedObjectVector and is kept in the same source/header files.
	      It extends the macros for typed vectors to produce type-safe
	      object vectors.
	    - In addition, csNamedObjVector itself provides all methods that
	      are safe even if you don't know the type of contained objects.
	      In this case, the objects are exposed to the user as (iObject*)
	      pointers.	 This way you can deal with object vectors that store
	      objects of unknown type, although the range of possible
	      operations is of course limited.
	    - Finally, I re-implemented csTextureList using typed object
	      vectors. Seems to work so far.
	- To make sure our shift keys will not wear out too easily Philip
	  Wyett did the following changes:
	    csPlugIn -> csPlugin
	    iPlugIn -> iPlugin
	    scfiPlugIn -> scfiPlugin
	    iLoaderPlugIn -> iLoaderPlugin
	    eiPlugIn -> eiPlugin
	  This change is a change of PlugIn for Plugin in all instances inside
	  the libs, plugins and apps.  Work in progress...Hope will be finished
	  today...  Also removed my commit log which for some reason appeared
	  in some files :-/
	- Philip also did some work on documentation:
	    - Changed extlibs.txi to tell that winlibs is for those using the
	      MSVC compiler ONLY.  Have been meaning to do this for a while -
	      finally done.  :-)
	    - Modified dirhier.txi (CS dir hierarchy) for the csparser change
	      from library to plugin.
	    - In resource.txi: removed link pointing at 3D downloads as a D/L
	      location for CS releases.
	    - In faq.txi: Removed Borland C++ compiler from FAQ, what do I need
	      to compile Crystal Space.	 This port is broken / never used, so
	      will be removed.
	    - In feedback.txi: added ones own name to copyright section.  Added
	      Windows XP to feedback/bug reporting docs.
	    - In cpyright.txi: added ones own name to copyright section.  Added
	      Windows XP to feedback/bug reporting docs.
1-Jul-2001
	- Eric Sunshine repaired the new cmdline.cpp and cmdline.h so that they
	  compile error-free with the NextStep compiler.
	- Eric Sunshine repaired a fundamental flaw in the new
	  csCommandLineParser class which caused most CS applications to crash.
	  The problem was that csCommandLineParser::Initialize() emptied the
	  option list (thus forgetting all existing options) before it
	  processed the incoming argv[] vector.	 This had the unfortunate
	  side-effect of wiping out all iSystem::RequestPlugin() invocations
	  which had occurred prior to the call to Initialize(), thus requested
	  plugins were not being loaded, and programs would crash in the
	  absence of those plugins.
	- Eric Sunshine renamed the following methods for API consistency:
	    iSystem::SystemExtension()		--> PerformExtension()
	    iConsoleOutput::ConsoleExtension()	--> PerformExtension()
	    iConsoleOutput::ConsoleExtensionV() --> PerformExtentionV()
	  These names now complement the existing PerformExtension() method of
	  iGrahpics2D.
	- Eric Sunshine added PerformExtensionV(va_list) variations to iSystem
	  and iGraphics2D to complement the existing PerformExtension(...)
	  methods.  Note that iConsoleOutput already had a
	  PerformExtensionV(va_list) method, so no changes were needed there.
	  The actual worker code in all the csSystemDriver and csGraphics2D
	  subclasses is now contained in PerformExtensionV() rather than
	  PerformExtension(), and PerformExtension() is now implemented as a
	  very thin wrapper over PerformExtensionV().
	- Eric Sunshine added iSystem::PrintfV(va_list) to complement the
	  existing Printf(...) method.	Printf() is now implemented as a very
	  thin wrapper over PrintfV().
	- Eric Sunshine renamed csApp::printf(...) to Printf(...) and also
	  added a PrintfV(va_list) variation.  Printf() is now implemented as a
	  very thin wrapper over PrintfV().
	- Eric Sunshine eliminated a compilation warning about
	  csMeshFactoryWrapper having private destructor but no `friend'.
	- Philip Wyett did the following:
	    - Added forward declaration struct csFog (to thing.h).  This fixes
	      compile error in Python plugin.
	    - Changed some CrystalBall internal naming:
		- class crysVec -> class csCrystalBallVec
		- class trinode -> class csTriNode
	      These 2 changes do not affect app writers...
	    - Added another CSTOOL to eliminate link error for csdemo on MingW.
	    - Changed cs_time to csTime.  Now follows CS naming convention more
	      closely and generally is a heck of alot more
	      distinguishable/readable in code.	 :-)
	    - Removed some no longer in existence includes from python plugin.
	      Manually updated VC project files.
	    - More function name standardization:
		do_key ()    -> DoKey ()
		do_button () -> DoButton ()
		do_motion () -> DoMotion ()
		debug_out () -> DebugTextOut ()
		console_out  -> ConsoleOut ()
		cleanup and CleanUp -> Cleanup ()
		sys_fatalerror () -> SystemFatalError ()
	    - Fixed on exit crasher under Windows for demosky.
	    - Fixed "sys_fatalerror" to report a fatal error is in
	      "glwin32.dll" and not "OpenGL2D.dll"
	- Martin Geisse did the following:
	    - Added iSector::Draw(), iThingState::HasFog() and
	      iThingState::GetFog ().
	    - Some changes to use engine-related objects though interfaces.
	    - Removed several forward and 'friend' declarations of the Dumper
	      class.
	    - Cleanup of the curve code.  Added some missing methods.
	      Materials are now correctly reference-counted.  Functions are
	      sorted by class in the file, and bezier-specific code is clearly
	      separated from the rest.
	    - Moved csMapNode and csView from csengine to cstool.
	    - Updated simple tutorial to take account of changes.
	    - Continued to split up csparser into several files.  Also renamed
	      some functions to keep a uniform naming style.  None of these
	      changes affects the interface.
	    - Removed the global 'System' variable.  Applications can still use
	      their own global system variable, but then they must define it
	      themselves.  Some of the CS applications do that.	 The Win32
	      system driver also requires a global system variable and thus
	      defines it, but it does so as a 'static' variable to avoid
	      pollution of the global namespace.  WARNING: He could only test
	      this for Win32 / MSVC!
	    - Updated the documentation to take account of the removal of the
	      global system variable.
	    - Fixed a compile error in g2d.cpp.
30-Jun-2001
	- Martin Geisse did the following:
	    - Removed the SoundDriver, NetworkDriver and MotionManager members
	      from the system driver because they are not used anywhere.
	    - Removed command line parsing code out of the system driver and
	      into its own class which is then used by the system driver.
29-Jun-2001
	- Got an Insure log from Philip Wyett.	Using this I fixed a number of
	  small problems and one rather bad problem.  The bad problem that is
	  fixed is:
	    - Terrain visibility had a memory overwrite bug with the horizontal
	      index lookup table.
	- Added 'csparser' to 'make walkall' target.
	- Fix to python plugin for csparser.
	- Fixed the balls in csdemo.
	- Eric Sunshine repaired a bad assumption which plagued most SCF
	  interfaces implemented by plugin modules.  The problem was that most
	  such interfaces inherited from iPlugIn rather than iBase.  This made
	  the potentially invalid assumption that these interfaces would always
	  be implemented as plugin modules.  The reason that this is an invalid
	  assumption is that the packaging into a plugin is merely an
	  implementation detail.  For instance, since the iImageIO interface
	  was derived from iPlugIn, all image loaders were expected to
	  implement HandleEvent(), which is a rather silly requirement for an
	  image loader.	 All interfaces which were inheriting from iPlugIn now
	  instead inherit from iBase.  Actual plugin modules now directly
	  implement iPlugIn, as well as implementing the various interfaces
	  which used to be derived from iPlugIn.
	- Eric Sunshine fixed a number of canvas implementations which were
	  using SCF_DECLARE_IBASE() and SCF_IMPLEMENT_IBASE() rather than the
	  _EXT() versions.
	- Eric Sunshine fixed a number of 2D canvases which implemented
	  iEventPlug but neglected to mention iEventPlug in the
	  SCF_IMPLEMENT_IBASE() block.
	- Eric Sunshine eliminated the cscmdConsoleStatusChange event and
	  re-implemented this notification facility via an SCF class named
	  iConsoleWatcher.
	- Eric Sunshine augmented `haspython.sh' so that it now also checks
	  /usr/local/python in addition to /usr and /usr/local.
	- Eric Sunshine changed the `soft' makefile target to `soft3d' to be
	  consistent with other renderer targets such as `gl3d', `null3d', and
	  `line3d'; and to disambiguate from the "software" sound renderer.
	  Also changed `infinite' target to `inf3d'.
	- Eric Sunshine renamed FindBone() and FindFrameSet() to csFindBone()
	  and csFindFrameSet() in order to avoid pollution of the global
	  namespace.
	- Eric Sunshine removed the obsolete igraphic/loader.h header.
	- Eric Sunshine removed the cumbersom, ill-conceived and
	  monolithic-oriented csSystemDriver::CheckDrivers() method.
	- Eric Sunshine removed the csjava plugin since it was completely
	  unimplemented.
	- Eric Sunshine added a "CS_" prefix to the following platform-specific
	  configuration macros:
	    SOFTWARE_2D_DRIVER --> CS_SOFTWARE_2D_DRIVER
	    OPENGL_2D_DRIVER   --> CS_OPENGL_2D_DRIVER
	    GLIDE_2D_DRIVER    --> CS_GLIDE_2D_DRIVER
	    SOUND_DRIVER       --> CS_SOUND_DRIVER
	- Eric Sunshine added a "CS_" prefix to the following csVector-related
	  macros.  Furthermore, DECLARE_TYPED_SCF_VECTOR has been renamed to
	  CS_DECLARE_TYPED_IBASE_VECTOR in order to more clearly indicate that
	  this array type works with reference-counted iBase objects.
	    BEGIN_TYPED_VECTOR()       --> CS_BEGIN_TYPED_VECTOR()
	    FINISH_TYPED_VECTOR()      --> CS_FINISH_TYPED_VECTOR()
	    DECLARE_TYPED_VECTOR()     --> CS_DECLARE_TYPED_VECTOR()
	    DECLARE_TYPED_SCF_VECTOR() --> CS_DECLARE_TYPED_IBASE_VECTOR()
	    DECLARE_TYPED_VECTOR_HELPER()
		--> CS_CS_DECLARE_TYPED_VECTOR_HELPER()
	    DECLARE_TYPED_VECTOR_NODELETE()
		--> CS_CS_DECLARE_TYPED_VECTOR_NODELETE()
	- Eric Sunshine added a "CS_" prefix to the following `sysdef' request
	  macros.  Furthermore, each macro name now contains the word "provide"
	  since these macros are used by client code to request that
	  cssysdef.h provides certain facilities.
	    SYSDEF_ACCESS  --> CS_SYSDEF_PROVIDE_ACCESS
	    SYSDEF_ALLOCA  --> CS_SYSDEF_PROVIDE_ALLOCA
	    SYSDEF_CASE	   --> CS_SYSDEF_PROVIDE_CASE
	    SYSDEF_DIR	   --> CS_SYSDEF_PROVIDE_DIR
	    SYSDEF_GETCWD  --> CS_SYSDEF_PROVIDE_GETCWD
	    SYSDEF_GETOPT  --> CS_SYSDEF_PROVIDE_GETOPT
	    SYSDEF_MKDIR   --> CS_SYSDEF_PROVIDE_MKDIR
	    SYSDEF_PATH	   --> CS_SYSDEF_PROVIDE_PATH
	    SYSDEF_SELECT  --> CS_SYSDEF_PROVIDE_SELECT
	    SYSDEF_SOCKETS --> CS_SYSDEF_PROVIDE_SOCKETS
	    SYSDEF_TEMP	   --> CS_SYSDEF_PROVIDE_TEMP
	    SYSDEF_UNLINK  --> CS_SYSDEF_PROVIDE_UNLINK
	- Eric Sunshine updated apimod19.txi to mention the above macro name
	  changes.
	- Martin Geisse fixed several compilation errors in g2d_dd8.cpp,
	  wodrv.cpp, video.cpp, and texfile.cpp.
	- Martin moved several functions out of csloader.cpp and in their own
	  source files, grouped by their purpose.  This is an attempt to make
	  the loader code more readable.
	- Norman Kramer fixed CallOnEvent in glx2d.cpp.
	- Norman fixed bumptest.cpp and demo.cpp (loader -> imageio).
28-Jun-2001
	- Fixed error handling in spr2dldr (for mixmode) a little.
	- Added error reporting to ballldr (using reporter plugin).
	- Added back some include files from WalkTest that Martin removed
	  but which are needed hard.
	- Richard D. Shank added header files for 3ds importer.
	- Richard D. Shank made the start to moving terrain object to a mesh
	  object.  Jorrit continued his work.  terrfunc is now a mesh object
	  like all others.  There is a new newsky.zip on the ftp site for this
	  change.
	- This also means that TERRAINFACTORY and TERRAINOBJ are gone in
	  map files (use MESHFACT and MESHOBJ). Everything related to
	  terrains is gone from the engine. A terrain is a mesh object.
	- The engine also had functions for manipulating terrains in
	  iEngine, iRegion, and iSector. These are now gone.
	- Fixed WalkTest terrain dynamic lighting for this change.
	- Fixed WalkTest terrain collision detection for this change.
	- Fixed BugPlug ability to enable/disable vistesting for terrains.
	- Added SCF_SET_REF() to safely set a reference in a variable.	This
	  will make sure the old reference (if any) gets released and the new
	  reference will be increased.	Will safely work in combination with
	  NULL.
	- Martin Geisse removed lots of unneeded include statements from
	  walktest and squawk.	Also made some changes to squawk, so it now
	  uses the engine only through interfaces.
	- Martin also did:
	    - Renamed BEGIN_TYPED_VECTOR_EXT to BEGIN_TYPED_VECTOR and
	      END_TYPED_VECTOR_EXT to FINISH_TYPED_VECTOR.
	    - Added GetArray() to typed vectors which returns the array of
	      pointers as a (TYPE**) pointer.
	    - Cleaned up the arrays from csengine/arrays.cpp using typed
	      vectors.
	    - Changed DECLARE_TYPED_VECTOR slightly.  The user-defined
	      FreeTypedItem method must now be given as a complete function
	      (i.e. with function name and brackets).  This makes it possible
	      to move the implementation outside the macro call and also to add
	      other user-defined methods.
	    - Removed the non-const operator [] from SCF vectors again. It
	      is unsafe because it allows to replace items but ignore their
	      reference count.
	    - Did a little cleanup in mdldata.h.
	    - Added 'position' member to csModelDataLight.
	    - Added 'GetRefCount' Implementation to all model data components.
	    - Removed two unneeded include lines from win32.h.
	- Martin Geisse moved the csparser library to a plugin.
	- Martin Geisse updated documentation to reflect the csparser changes.
	- Martin changed the crossbuilder class to take an (iSystem*) as a
	  parameter in the constructor instead of using the global system
	  variable.
	- Martin moved the converter, crossbuilder and sound wrapper classes
	  from csparser to cstool.
	- Philip Wyett created the makefiles for the new csparser plugin and
	  did various other makefile/dsp changes related to this.
	- Philip moved "DirectDetection" out of the Win32 portion of the
	  system library and created a "directxcommon" repository from
	  where the files can be picked up in plugins for which they are
	  needed. This pre-empts the known removal of CSSYS and fixes an
	  anomoly where this code was being compiled twice.
	  Once into CSSYS and then in DirectX related plugins.
	  Tested with MingW and VC and is fine. :-)
	  May need cleaning up, Work in progress...
	- Philip added ddraw and zlib to plugin.tpl, appgui.tpl, and appcon.tpl
	  as compiling with VC and the Insure++ runtime debugger throws out
	  link errors. :-(
	- Philip added CSGFX to demo.mak and csgamtst.mak to make compatible
	  for building with MSVC and Parasoft Insure++ runtime debugger.
	- Philip fixed some bad returns from void functions in terrain
	  plugin.
	- Michael Voase did the following:
	    - First installment in the HitBeamObject() updates. First victim
	      is ball. *WARNING* I have reset the size of the ball back to its
	      correct value. What was being declared as a RADIUS, was in fact,
	      the diameter. Ball now works, but there are some problems with
	      hard transforms, and they are all twice the size they used to be.
	    - I have also added a few small bugfixs to csloader incorrectly
	      returning a false, instead of a NULL. Probably overlooked
	      earlier...
27-Jun-2001
	- Renamed csFilenameMatches() to csGlobMatches() because it is
	  useful for more than just filenames (in csutil).
	- Added a new 'reporter' plugin. This is going to be used for
	  error reporting and message reporting in general. In order to use
	  this reporter, the application has to load the plugin. When
	  the reporter is present other plugins will use it to report
	  errors. If no reporter plugin is present then no reporting
	  will happen.
	- Fully support the reporter plugin in spr2dldr.
	- Fully support the reporter plugin in spr3dldr.
	- WalkTest now loads the reporter plugin and uses it to test
	  if the loading of the level succeeded.
	- Fixed the level loader so that it now returns failure when
	  loading mesh objects fail. The map loader will also report
	  more errors to the reporter.
	- Also fixed the map loader so that it will check for errors
	  almost everywhere and return false/NULL if so.
	- Martin Geisse added documentation about the changes to SCF,
	  csObject and the pseudo-RTTI system to apimod19.
	- Wouter Wijngaards removed maze from isotest as it corrupts display
	  in opengl. Not sure why yet.
	- Philip Wyett did a manual commit to ogl_g3dcom.cpp to stop VC
	  bitching about a bad CR in the file.
	- Eric Sunshine removed the now obsolete csevQuitLoop event.  This is
	  not needed anymore since CSWS no longer invokes iSystem::Loop()
	  recursively.
	- Eric Sunshine removed the csSystemDriver::ExitLoop instance variable
	  and all associated support code.
	- Eric Sunshine removed the following outdated documents from the
	  CS/docs/incoming directory: collide.txt, csupdate.txt, extmodel.txt,
	  glossary.tex, makecreat.tex, mazed.html, mazed.txi,
	  mazed_interface.html, mazed_preface.html, mazed_tutorial.html,
	  octree.tex.  Also removed the following files from the
	  CS/docs/incoming/images directory: cswhite.jpg, csws.gif, MazeD.gif,
	  ObjMaker.gif, smalllogo.jpg, smcslogo.jpg, texture6.gif, tutor1.gif,
	  tutor2.gif.
	- Eric Sunshine added a new glossary.txi to the Appendix in the user's
	  manual.  This is based upon the old glossary.tex from the `incoming'
	  directory.
	- Eric Sunshine moved the content of CS/docs/incoming/csupdate.txt
	  directly into the csupdate.py script.	 This information is now
	  accessed via the --detailed-help option.
	- Eric Sunshine eliminated a float-to-int compilation warning from
	  isotest.cpp.
	- Eric Sunshine changed the SCF name for the 3D engine from
	  crystalspace.engine.core to crystalspace.engine.3d in order to
	  complement the existing crystalspace.engine.iso SCF class name.
	- Eric Sunshine added the CS_HEADER_GLOBAL() and CS_HEADER_LOCAL()
	  preprocessor macros to cssysdef.h.  These macros are used to compose
	  header file include paths.  This is useful in cases where the
	  location of a header file varies from platform to platform and one
	  does not have the opportunity to augment the preprocessor's header
	  file search path.  For instance, on most platforms, OpenGL headers
	  are located in a `GL' subdirectory, however on other platforms they
	  are located in an `OpenGL' subdirectory.  For instance, assuming that
	  a platform has defined the preprocessor macro GLPATH with the value
	  `OpenGL', then it can include the gl.h header by invoking:
	    #include CS_HEADER_GLOBAL(GLPATH,gl.h)
	- Eric Sunshine adjusted plugins/video/renderer/opengl and
	  plugins/video/canvas/openglcommon to respect the OpenGL path
	  specified via CS_OPENGL_PATH by utilizing the new CS_HEADER_GLOBAL()
	  macro when including OpenGL headers.
	- Eric Sunshine eliminated several Texinfo mark-up problems which were
	  introduced into apimod19.txi.	 Also rewrite and clarified several
	  portions of the new SCF, csObject, and RTTI documentation in
	  apimod19.txi.
26-Jun-2001
	- Philip updated the win32gcc.txi doc to add explanation about
	  PYTHONPATH environment variable.
	- Fixed a problem in apimod19.txi. The document incorrectly stated
	  that you had to do SCF_QUERY_INTERFACE() in order to get the
	  pointer to VFS, G3D, and other plugins from the system driver.
	  This should be CS_QUERY_PLUGIN().
	- Eric Sunshine fixed several minor issues in the Texinfo files.
	  Also upgraded apimod19.txi to mention CS_QUERY_PLUGIN_ID() rather
	  than CS_QUERY_PLUGIN().
	- Did a fundamental change in CSWS. csApp::Execute() is
	  removed as it did some very bad recursive system loop calling.
	  This prevented us from doing a proper redesign of the system
	  driver. Instead there is now a csApp::StartModal() and
	  csApp::StopModal(). For the GUI user the effect is that of modality
	  (i.e. there is no difference with calling Execute() from the view-
	  point of the user: the top-modal dialog has focus and all other
	  components are disabled). However it will not be modal for the
	  application. StartModal() returns immediatelly. Instead you have
	  to wait for the cscmdStopModal command which will be called
	  to the csApp::HandleEvent() when the modality has finished. LevTool,
	  CSWSTest, and csfedit have been fixed for this. MazeD hasn't been
	  fixed and will soon be removed.
	- A change which is related to this is that csMessageBox() now
	  returns immediatelly. If you are interested in the result you need
	  to catch the cscmdStopModal command and see if the userdata
	  implements iMessageBoxData. If so then you have the result from
	  csMessageBox().
	- Removed MazeD (it doesn't work anymore). I put the source of
	  MazeD in a zip file at ftp://sunsite.dk/projects/crystal.
	- Eric Sunshine fixed CS/mk/static.mak to account for new "SCF_" prefix
	  on SCF_REGISTER_STATIC_LIBRARY().
	- Eric Sunshine fixed 3dsout.cpp so that it now emits `CULLER' rather
	  than the obsolete `STATBSP' keyword.
	- Eric Sunshine repaired some Texinfo mark-up problems which were
	  introduced into apimod19.txi.	 Also rewrote some of the newly added
	  discussion and repaired several `overfull hbox' warnings reported by
	  TeX.
	- Eric Sunshine removed the now obsolete MazeD.cfg and MazeD.zip.
	- Wouter Wijngaards added a randomly generated maze to isotest
	  application.
	- Philip Wyett fixed a small compile problem in iso engine.
	- Michael Voase implemented radius calculation on metaball,
	  'borrowed' HitBeamObject code from sprite3d and fixed shape
	  number update.
25-Jun-2001
	- Added iBase::GetRefCount(). This way you can now get the reference
	  counter from any SCF interface. Note that this is ONLY for debugging
	  purposes! Any misuse of this function for anything but debugging
	  will be severly punished! :-)
	- BugPlug now has the ability to select a mesh on screen (by clicking
	  on it). It will automatically detect when the mesh is deleted and
	  correctly unselect it then. BugPlug uses the new GetRefCount()
	  function to do that (yes! BugPlug is about debugging, so it can
	  do that!)
	- Eliminated csEngine and iEngine::NextFrame(). Now this is done
	  automatically in csEngine::Draw() and DrawFunc().
	- Made iSector::HitBeam() a little bit more efficient and also
	  fixed a small bug: the polygon was not filled in.
	- Fixed csMeshWrapper::HitBeam() so that it now takes the full
	  transform instead of the transform. That way it works for
	  hierarchical objects too.
	- Fixed a bad bug in Spider (BugPlug). DecRef() was called on Spider
	  before it was removed from the engine. This has recently been
	  forbidden. This bug caused BugPlug to crash whenever Spider catched
	  a camera.
	- Added 'meshbbox' and 'meshrad' commands in BugPlug. 'meshbbox'
	  shows the bounding box of the currently selected mesh. 'meshrad'
	  shows the bounding sphere of the currently selected mesh.
	- BugPlug is the hiding place for many dark creatures. While Spider
	  only places a curse on the country and any unsuspecting wanderer
	  that might visit the country, Shadow takes possession of some
	  creature and clings to it with all its power. Unless Shadow
	  willingly releases the creature there is nothing that can be done
	  to unbind Shadow. The Shadow slowly devours the poor creature from
	  all its knowledge.
	- Fixed a small bug in BugPlug. The new Shadow mesh object is now
	  added with a higher render priority (the one from the alpha
	  channel) to ensure that it gets rendered later.
	- Eric Sunshine fixed a problem with mdl2spr where it failed to load
	  the PNG plugin.  Also fixed it so that it only attempts to load the
	  PNG plugin if absolutely required (for instance, to save skins from
	  Quake1 MDL files), rather than loading it unconditionally.
	- Eric Sunshine repaired the doubled `cscs' prefix on the following
	  functions:
	    cscsByteSwap16bitBuffer()
	    cscsByteSwap32bitBuffer()
	- Eric Sunshine altered the OpenGL renderer so that it builds cleanly
	  on MacOS/X.  The following changes were made:
	    - Added a new preprocessor flag, CS_OPENGL_PATH, which indicates
	      where OpenGL header files live.  If CS_OPENGL_PATH is defined,
	      then header files are included from that directory rather than
	      the standard "GL" directory.  This is needed on MacOS/X, since
	      OpenGL headers live in a subdirectory named "OpenGL" rather than
	      the standard "GL" as with most other platforms.
	    - Added CFLAGS.GL3D and LIBS.OPENGL.SYSTEM to macosx.mak with
	      appropriate values.
	    - Added a NEXT.PLUGINS variable to the Apple/NeXT makefiles and
	      defined it with the value "video/renderer/opengl" in macosx.mak
	      so that the OpenGL renderer makefile is consulted when building
	      on MacOS/X.
	    - Added a definition of OPENGL_2D_DRIVER to next/csosdefs.h.
	- Eric Sunshine fixed ogl_halo.cpp so that it no longer unnecessarily
	  includes <windows.h>.
	- Michael Voase added half of the animation documentation. He
	  added the links accidentally during his last commit, so he added
	  what he had completed so far.
	- Michael also added SetVertices() methods to Sprite3d, modified
	  metagen to hand over the pointer to its vertex buffer (and all
	  the other arrays it uses ).
	- Michael added some further documentation to tesselat.h to explain
	  what it does and how it does it.
	- Eric Sunshine eliminated references to non-existent motion.txi and
	  skelbone.txi from anim.txi.
	- Eric Sunshine fixed numerous Texinfo mark-up problems and other
	  related errors in the new texinfo/plugins/anim documentation.
	- Eric Sunshine repaired the documentation in tesselat.h so that
	  Doxygen will be able to make use of it.
	- Eric Sunshine fixed the new SetTexels(), SetVertices(), SetNormals(),
	  and SetTriangles() methods which were added to the 3D sprite class so
	  that the array argument is now `const'.  This helps to indicate that
	  the incoming array is not intended for modification.	Also clarified
	  the documentation to make this point painfully clear.
	- Eric Sunshine made the following name changes throughout the project
	  in order to avoid global namespace pollution:
	    - All SCF macros are now prefixed by "SCF_".
	    - All MSG_BLAH macros are now prefixed by "CS_".
	    - All QUERY_PLUGIN macros are now prefixed by "CS_".
	    - All LOAD_PLUGIN macros are now prefixed by "CS_".
	    - All IS_BLAH_EVENT macros are now prefixed by "CS_".
	- Eric Sunshine eliminated compilation warnings about unused variables
	  in metasys.cpp.
	- Eric Sunshine added documentation to apimod19.txi for the recent API
	  changes regarding SCF_ and CS_ prefixes.
	- Eric Sunshine eliminated all overfull and underfull `hbox' warnings
	  reported by TeX following the API changes regarding the SCF_ and CS_
	  prefixes.
	- Eric Sunshine changed the Apple/NeXT ports so that they access the
	  `next.cfg' configuration file via iConfigManager rather than
	  iConfigFile.	This allows application, plugin module, and
	  user-specific configuration options to override options from
	  `next.cfg'.
	- Eric Sunshine added a "NeXT." prefix to keys in `next.cfg' in order
	  to distinguish them from keys in other configuration files.  This was
	  necessary since the Apple/NeXT ports now access configuration
	  information from `next.cfg' via iConfigManager, rather than
	  iConfigFile,
	- Eric Sunshine made the following changes to the installation path
	  gleaning mechanism:
	    - Added class method csSystemDriver::InstallPath().	 Since this is
	      a class method, installation path information is now available to
	      clients even when no iSystem is available.  This may be useful
	      for certain utility programs which never actually instantiate a
	      system driver.
	    - csSystemDriver now implements iSystem::GetInstallPath() as a
	      simple wrapper over the class method InstallPath().
	    - Added libs/cssys/unix/instpath.cpp which implements
	      csSystemDriver::InstallPath() for Unix platforms.
	    - Added libs/cssys/win32/instpath.cpp which implements
	      csSystemDriver::InstallPath() for Windows.
	    - Added libs/cssys/general/instpath.cpp which generically
	      implments csSystemDriver::InstallPath() for other platforms.
	    - Adjusted makefiles and project files to reference the new
	      instpath.cpp source files as appropriate.
	    - Eliminated the apparently useless PS2 override of
	      iSystem::GetInstallPath().
	- Eric Sunshine modified the Apple/NeXT plugin loading mechanism so
	  that it utilizes the new csSystemDriver::InstallPath() method so that
	  installed plugin modules may be found even when a system driver has
	  not been intantiated.	 (Not every application instantiates a system
	  driver.)  Previously, NeXTSystemDriver::Initialize() was responsible
	  for adding the `install path' to the plugin module search list, but
	  this is now handled entirely by the plugin loading mechanism.
	- Eric Sunshine fixed the PS2 system driver so that it no longer
	  includes the Unix port's system driver header (cssys/unix.h).
	- Eric Sunshine fixed a couple problems with bugplug.mak.  First, it
	  neglected to install its configuration file `bugplug.cfg' at `make
	  install' time.  Second, it failed to add `bugplug.cfg' to the
	  generated MSVC DSP file.
	- Eric Sunshine fixed a couple problems with simpcon.mak.  First, it
	  neglected to install its configuration file `simpcon.cfg' at `make
	  install' time.  Second, it failed to add `simpcon.cfg' to the
	  generated MSVC DSP file.
	- Philip Wyett removed "vc_asm.inc" and all it's supposed assembler
	  optimizations from CSGEOM and other programs. These when not broken
	  in fact offer no real optimization than the VC 6 compiler
	  generated code.
	- Philip removed now under DX8 COM helper FINAL_RELEASE. Also
	  aids in compliance for CS eventually being able to be used for
	  XBox Development.
	- Philip fixed a compiler warning in mdl2spr.
	- Philip fixed some documentation about Win32 port. Added links to
	  ftp.sunsite.dk.
	- Wouter Wijngaards tested the use of multiple grids. This works fine.
	    - Fixed groundhitbeam to also work when the beam is (partially)
	      outside the grid. You can thus make lights the are positioned
	      outside a grid (say in another grid) and shine to the grid.
	      So you can add two identical lights, to two grids, to have them
	      both seem affected by the 'same' light.
	    - Isotest now has a 2nd grid, more playground :-)
24-Jun-2001
	- 'Fixed' the lightmap overflow bug in software renderer. It is
	  not really an elegant bug fix as I simply test for overflow
	  but it seems to work.
	- Correctly implemented GetRadius() for the sprite2d mesh object.
	- Optimized skeletal sprite bounding box calculation by doing
	  the calculation on the vertices instead of the bounding box
	  if a limb has less than 8 vertices. Even if the limb has slightly
	  more than 8 vertices we also do this for the increased accuracy
	  this gets us.
	- Calculation of radius for 3D sprites is now very accurate and
	  correctly accounts for current frame and skeletal state.
	- Eric Sunshine repaired DemoSequenceLoader::LoadPath() so that it no
	  longer allocates 10,000 element arrays of `float' and 'csVector3' on
	  the stack, since such huge arrays are frequently unportable.	In this
	  case, they blew the OpenStep stack, resulting in abnormal program
	  termination.
	- Eric Sunshine worked around a complaint from the compiler about
	  csCameraPosition, csMaterialWrapper and csTextureWrapper having
	  private destructors but no friends.
22-Jun-2001
	- Fixed a bug in Walktest with the deletion of the legs/body
	  collider. They were deleted with DecRef() but that is illegal
	  since it is now required that they are deleted with
	  engine->RemoveMesh().
	- Implemented RemoveFromCache() in OpenGL 3D renderer. This is
	  important for dynamic worlds because when a polygon is deleted
	  the OpenGL renderer would not release information associated with
	  that polygon. In particular the lightmap data was not released.
	- Fixed a missing DecRef() on iThingState in the thing loader. That
	  would leak a reference.
	- Fixed a missing DecRef() in the thing loader when loading polygons.
	- Removed csPolygonArrayNoFree. It is not used.
	- Fixed a bug in csSector::FollowSegment(). It would not
	  work correctly for null portals. Now it correctly detects
	  that case.
	- Removed the ref from csPolyTexture to csPolygon3D. It is a
	  circular reference.
	- Worked on a very old bug in the software renderer texture cache.
	  Actually I tried to worked around the bug. I don't understand the
	  real nature of the bug though. The code is commented because
	  it doesn't work correctly yet. There are also underflows it seems!
	- Eric Sunshine fixed a problem with csSystemDriver::LoadPlugIn() where
	  the returned object had an inconsistent reference count.  In some
	  cases, the caller of LoadPlugIn() was responsible for invoking
	  DecRef() on the returned object to dispose of it, but in other cases
	  the system driver maintained authority over the returned object and
	  the caller was not allowed to invoke DecRef().  Now, the reference
	  count of the returned object is consistent in all cases, and the
	  caller must _always_ invoke DecRef() to dispose of the returned
	  object.
	- Eric Sunshine removed the unused and namespace-polluting ResultType
	  enumeration from ivaria/script.h
	- Eric Sunshine updated the URLs in the build instructions for the
	  Apple/NeXT ports to refer to the new sunsite.dk location rather than
	  the old 3ddownloads.com location.
	- Eric Sunshine updated the "Final Notes" section of the
	  platform-specific internal-description of the Apple/NeXT ports.
21-Jun-2001
	- Fixed a bug in the cleanup of sectors in the engine.	The portal
	  references were not cleaned up.
	- Made the destructors of the following classes private:
	    - csTextureWrapper
	    - csMaterialWrapper
	    - csCollection
	    - csSector
	    - csMeshFactoryWrapper
	    - csTerrainFactoryWrapper
	    - csCurveTemplate
	    - csCameraPosition
	- Removed csCurveTemplateArray. It was not used.
	- csThing no longer puts itself in the current region.	That is not
	  needed since csMeshWrapper already does that.
	- Completely reworked the callback system for portals.	A portal
	  callback is no longer a function.  Instead it is an SCF class
	  (iPortalCallback) that you have to implement.	 This allows cleanup of
	  that callback when the portal is deleted.  There are also two types
	  of portal callback now:
	     - Missing sector: this is the old type. When a sector is missing
	       (null portal) this will be called.
	     - Portal callback: this will be called when the sector is not
	       missing.
	- Made a few things in the Window canvases static (ddraw, ddraw8, and
	  glwin32) so that they can be static linked with each other.
	- Fixed static linking for apps using the engine as a plugin by adding
	  engine/3d to the PLUGINS section (instead of PLUGINS.DYNAMIC) in
	  mk/user.mak.
	- Fixed a bug in csMeshWrapper::DecRef() and
	  csTerrainWrapper::DecRef().  The custom code there would do
	  scfRefCount++ in the assumption that the engine would decrease it
	  again.  But this only happens if the object was in the engine which
	  is not always the case (in fact it should never be the case now).  So
	  this was a big memory leak.  I kept the custom DecRef() and put some
	  testing code there (using CS_ASSERT) to make sure that it is not
	  misused.
	- Fixed handling of csRegion::DeleteAll(). It should now work a lot
	  better and actually delete everything.
	- Replaced csDrawCallback with iMeshDrawCallback (similar to the
	  iPortalCallback).  This new callback can even return false to prevent
	  the drawing to take place.
	- Replaced csMeshCallback with iMeshObjectDrawCallback.	 Can now also
	  prevent drawing.
	- Replaced csDrawFunc with iDrawFuncCallback.
	- Norman Kramer removed UnlinkCollection() from csEngine.
	- Norman added missing DecRef() of iMeshObjectType in engine.cpp.
	- Norman fixed a stupid typo Jorrit made in the calling of the callback
	  in the spr3d plugin.
	- Norman says: due to wrong method signature of csPlugIn::FreeItem
	  it did not override and hence never got called.
	- Norman added meshwrapper removal in csEngine::Clear().
	- Norman fixed iso engine after Jorrit broke it due to the callback
	  changes (uses new iDrawFuncCallback).
	- Fixed a problem with the transparent sphere in flarge.
	- Eric Sunshine removed several outdated DO_BLAH references from
	  the documentation, and from mac/volatile.h and win32/volatile.h
	- Christopher Nelson did the following to AWS:
	    - Implemented children for components.
	    - IMplemented almost all of the redraw algorithm.
	- Philip Wyett fixed ptlab (changed delete to DecRef()).
20-Jun-2001
	- Made the resolving of portals to sectors a bit more robust
	  by not resolving portals that point to sectors that already
	  contain geometry.
	- The CS loader will now by default call DeferUpdateLighting()
	  on all loaded meshes (except the ones loaded with
	  LoadMeshObject(char*filename)) so that the lighting looks ok
	  directly after loading.
	- Added iEngine::SelectRegion() which accepts an iRegion as a
	  parameter.
	- Added iRegion::GetPrivateObject().
	- Fixed region handling for mesh wrappers (calls DecRef() now).
	- Added iReference and iReferencedObject.
	  This is a general system to keep references (iReference) to any
	  kind of object (iReferencedObject). If some object wants to keep
	  track of all other objects which hold a reference to this object
	  then it can implement iReferencedObject and the other objects can
	  implement iReference. When the referenced object is deleted it
	  will call SetReferencedObject(NULL) on all the references.
	- iPortal now subclasses iReference.
	- csSector now implements iReferencedObject.
	- By implementing this it is now safe to delete a sector. All portals
	  to that sector will be automatically set to NULL portals (i.e.
	  closed). If the portal has a callback associated with it then
	  this will be called the next time the engine needs that portal.
	- Eric Sunshine fixed the following problems in win32gcc.txi:
	    - Repaired some incorrect Texinfo mark-up.
	    - Removed a redundant @noindent.
	    - Re-wrote the new Troubleshooting section in order to eliminate
	      sentence fragments and other incomprehensible wordage.
	- Eric Sunshine fixed a problem in iCamera::GetSector() where the
	  compiler didn't like casting (void*) to (iSector*).  This occurs on
	  some platforms where NULL is defined as ((void*)0).
	- Eric Sunshine worked around an OpenStep compiler bug where it emitted
	  assembly with an unresolveable symbol for the csClipInfo class.
	- Eric Sunshine eliminated the hard-coded maximum framerate limitation
	  (15 frames per second) from the Apple/NeXT ports.  Rather than using
	  a timer to trigger calls to iSystem::NextFrame() at a fixed interval
	  (15 times per second), it now feeds a dummy event into the AppKit's
	  event queue after each call to NextFrame(), which triggers a
	  subsequent call to NextFrame(), etc.	This allows the frame rate to
	  run as high as the hardware allows rather than artificially limiting
	  it to a timer's fixed interval.
	- Wouter Wijngaards fixed the bug where perftest incorrectly reported
	  the fps when spacebar was pressed to advance to the next test.
	- Fixed SCF stuff in csMaterialWrapper, csTextureWrapper,
	  csCameraPosition, and csMapNode.  Please don't use CONSTRUCT_IBASE
	  (NULL) for classes that get iBase from a superclass.
	- csPortal now also extends csObject and embeds iPortal instead of
	  inheriting from it.  Added iPortal::QueryObject().
19-Jun-2001
	- Removed verbose output of lightmap calculation if recalculation
	  of lighting is not enabled. Now the progress bars are only
	  displayed when lighting is actually being calculated.
	- Removed some totally useless init message in the parser with regards
	  to lightmap cell size.
	- Added iLightingInfo class which encapsulates lighting systems
	  for mesh objects. Currently only thing mesh objects implement
	  this. This class contains method to initialize lighting and
	  also for lighting cache management.
	- Removed all lightmap related stuff from iSector. This is now
	  handled by the thing mesh object.
	- Removed all lightmap related stuff from iThingState.
	- Fixed a bug in the 'portal' command. It would try to query
	  iMeshWrapper from the iMeshObject. Note that this fix doesn't
	  fix the crash though.
	- Changed the name of the cached lightmaps again. This means that
	  levels will be black unless you use -recalc or -relight!
	- Eric Sunshine made the following changes to the documentation:
	    - Fixed a slew of Texinfo mark-up problems in dirhier.txi and
	      apimod19.txi.
	    - Performed clean-up and unification of the new material added to
	      apimod19.txi.
	- Eric Sunshine fixed a problem in linux.mak, hurd.mak, and freebsd.mak
	  where the values of SYSCONFIG and MAKE_VOLATILE_H were being set
	  twice (so, for instance, CS_UNIX_PLUGIN_REQUIRES_MAIN appeared twice
	  in the generated volatile.h).
	- Eric Sunshine fixed csLoader so that it no longer emits misleading
	  warning messages when one of the `optional' plugin is not loaded.
	- Eric Sunshine fixed a memory leak in the DiskFile constructor in
	  vfs.cpp.  It was unnecessarily duplicating the `NameSuffix' argument
	  and then leaking the duplicate.
	- Eric Sunshine repaired several minor Texinfo mark-up problems in the
	  new emit.txi.
	- Eric Sunshine updated the formatting of all Apple/NeXT-related source
	  and header files to reflect the CS formatting guidelines.  This
	  change involved some very simple whitespace transformations.
	- Norman Kramer added non-const TYPE*& operator [] (int idx) to
	  csVector.
	- Philip Wyett added include "imesh/lighting.h" to bumptest.cpp.
	- Robert Bate updated Macintosh project files.
18-Jun-2001
	- Fixed a bug in the region checking code from the loader.
	- Renamed csCollider to csColliderWrapper and moved it from csengine
	  to cstool.
	- Moved csKeyValuePair from csengine to cstool. csMapNode is still
	  in csengine though. Renamed the include/source for csMapNode
	  from keyval.* to mapnode.*.
	- Also removed csEngine::CreateKey() and CreateKeyValuePair()
	  (similar for iEngine).
	- Added include/imesh/thing and moved all thing mesh object includes
	  from include/iengine to that dir (thing.h, polygon.h, lightmap.h,
	  polytmap.h, portal.h, ptextype.h, and curve.h).
	- Moved include/iengine/collider.h and polymesh.h to
	  include/ivaria.
	- Wouter Wijngaards fixed a bug in iso engine clipping detection
	  (ClipBBox).
	- Wouter also fixed linux.mak. The 'make install' didn't work anymore
	  because a += was used where an = should be used (for SYSCONFIG).
	- Wouter fixed the ddraw.mak makefile so it no longer tries to install
	  the removed directx5 and 6 config files.
	- Worked on apimod19.txi.  Also updated dirhier.txi to add the sequence
	  plugin.
	- Philip Wyett fixed the video app after Jorrit's changes.
	- Michael Voase shifted the tesselator from MetaBall to csgeom. It
	  is a general purpose utility that better serves CS in the geometry
	  library. Performance has been checked and a slight speedup has
	  been noticed in metagen, however, no significant improvement has
	  been observed in metaball.
	- Eric Sunshine repaired a problem with plugins/chapter.txi where it
	  was referencing plugins/anim/anim.txi even though that file does not
	  (yet) exist.
	- Eric Sunshine eliminated a slew of TeX `hbox' warnings from the
	  Texinfo documentation.
	- Eric Sunshine expanded several sections in apimod19.txi.
	- Eric Sunshine added a discussion of CS_IMPLEMENT_APPLICATION and
	  CS_IMPLEMENT_PLUGIN to apimod19.txi.
	- Eric Sunshine made the following changes to the new tesselator
	  facility in csGeom:
	    - Reworked the file comments so as to be Doxygen compatible.
	    - In order to avoid global namespace pollution, wrapped a class
	      named csTesselator around the bare structure name GridCell and
	      the bare function Tesselate().
	    - Removed ttables.h from CS/include/csgeom.	 The information in
	      this file is merely an implementation detail of the tesselator
	      and didn't belong in a plubic include directory.	Moved the
	      contents of this file directly into tesselat.cpp since it merely
	      defines two static tables used by the implementation.
	- Eric Sunshine made the following changes to the MetaGen facility:
	    - Moved the EnvMappingModes type and the constants TRUE_ENV_MAP
	      and FAKE_ENV_MAP inside iMetaGen interface rather than allowing
	      them to pollute the global namespace.
	    - Fixed several bugs in metagen.mak, including one which caused it
	      to use the wrong commands when building the plugin module itself
	      (.so, .dll, etc.); and which consequently prevented the plugin
	      from building on some platforms (Mingw, NextStep, etc.).
	    - Fixed the module description in the makefile's DESCRIPTION
	      variable.
	- Eric Sunshine added class-level comments to csConfigFile and
	  csConfigManager so that Doxygen will emit documentation for these
	  classes.  (Doxygen ignores classes which have no class-level comment
	  even if the class is documented internally.
	- Eric Sunshine eliminated compilation warning about csAnimatedPixmap
	  having virtual functions but non-virtual destructor following removal
	  of csBase.
	- Eric Sunshine fixed next2d.mak so that it correctly augments
	  CSFLAGS.INCLUDE when building with USE_PLUGINS=no.  This ensures that
	  the proper CFLAGS will be used even when the next2d driver is built
	  as a result of being a dependency of some other module (even when
	  not explicitly built via the next2d makefile target).
	- Eric Sunshine added the `static' qualifier to several stand-alone
	  functions in the MetaBall and MetaGen plugins in order to avoid
	  pollution of the gobal namespace.  Preventing this pollution allows
	  applications to link when USE_PLUGINS=no.  When the global namespace
	  was polluted, applications failed to link on account of multiply-
	  defined symbols (since both plugins implement at least one function
	  in common).
	- Eric Sunshine eliminated a compilation warning about signed versus
	  unsigned comparison in datastrm.cpp.
	- Eric Sunshine eliminated a compilation warning about instance
	  members of csDataStream being initialized in an order different from
	  the declaration order.
	- Christopher Nelson made some changes to AWS:
	    - Made some minor changes, fixed some silly errors.
	    - Created the csComponentFactory class.
	    - Made some mods to the interface and manager to support
	      component registration.
	- Norman Kramer removed csBase in favor of iBase (or in many cases it
	  is just removed).  Did various changes throughout the project for
	  this.
	- Norman als changed csObjVector so that it DecRef()'s the items in
	  FreeItem().
	- Norman made csLightArray descendant of iBase.
	- Norman changed scfSharedLibrary so it no longer derives from iBase.
	- Norman changed csRect so it no longer derives from iBase.
	- Norman moved pulse and meter from csengine to csutil.
17-Jun-2001
	- Fixed a bug in 'facedown'/'faceup' commands (walktest). Reported
	  by Thiago Ramon.
	- Did a very trivial optimizaton. It appeared that a lot of code
	  on curve drawing setup was done every frame for every thing
	  that is drawn. This code is totally unneeded in most cases
	  (except if there really is a curve).
	- Renamed csfx to cstool. This is to prepare for addition
	  of additional features which are not really special
	  effects.
	- Eric Sunshine fixed a problem with the rlecodec makefile where the
	  SCF.STATIC was given an incorrect value.  This caused linking to fail
	  when USE_PLUGINS was set to `no'.
	- Christopher Nelson made a small algorithmic change to the dirty
	  rect update scheme.  It's a little less silly about what to do
	  when all the buckets fill up:	 it sets a flag \, merges all
	  previous rects into bucket zero, and then uses bucket zero for all
	  subsequent updates.  This eliminates overdraw in the sinplest way,
	  without making the algorithm overly complex.
	- Michael Voase added a new metagen mesh object plugin.
	- Martin Geisse applied some major changes to the initial model
	  converter interface:
	    - All model data components now implement iObject
	    - Removed lists of sub-objects from all objects (e.g. the list
	      of polygons from mesh objects). Sub-objects should be added
	      as iObject children.
	    - Vertex positions are no longer stored per-vertex. Instead, all
	      vertices in a solid object are kept in one big list and
	      polygons use indices in this list.
	- Philip Wyett fixed a warning in metagen (struct vs class).
	- Philip also fixed the tutorial makefiles with regards to csfx
	  vs cstool. Jorrit forgot to fix those. Philip also fixed a bad
	  include in cstool itself.
	- Norman Kramer added call to PrepareAnim() to bumptest.cpp.
	- Norman Kramer renamed the following methods throughout the entire
	  project:
	    GetMiniBspNumVerts	-->  GetMiniBspVertexCount
	    GetNumActions  -->	GetActionCount
	    GetNumChars	 -->  GetCharCount
	    GetNumCameraPositions  -->	GetCameraPositionCount
	    GetNumPolyTxtPlanes	 -->  GetPolyTxtPlaneCount
	    GetNumCollections  -->  GetCollectionCount
	    GetNumCollisionPairs  -->  GetCollisionPairCount
	    GetNumCurveVertices	 -->  GetCurveVertexCount
	    GetNumCurves  -->  GetCurveCount
	    GetNumDimensions  -->  GetDimensionCount
	    GetNumEdges	 -->  GetEdgeCount
	    GetNumElements  -->	 GetElementCount
	    GetNumFonts	 -->  GetFontCount
	    GetNumFormats  -->	GetFormatCount
	    GetNumFrames  -->  GetFrameCount
	    GetNumMaterials  -->  GetMaterialCount
	    GetNumMeshFactories	 -->  GetMeshFactoryCount
	    GetNumMeshObjects  -->  GetMeshObjectCount
	    GetNumNormals  -->	GetNormalCount
	    GetNumObjects  -->	GetObjectCount
	    GetNumPalEntries  -->  GetPalEntryCount
	    GetNumPlanes  -->  GetPlaneCount
	    GetNumPlugIns  -->	GetPlugInCount
	    GetNumPoints  -->  GetPointCount
	    GetNumPolygons  -->	 GetPolygonCount
	    GetNumRepeats  -->	GetRepeatCount
	    GetNumShadows  -->	GetShadowCount
	    GetNumSpokes  -->  GetSpokeCount
	    GetNumTexels  -->  GetTexelCount
	    GetNumTextureLayers	 -->  GetTextureLayerCount
	    GetNumTextures  -->	 GetTextureCount
	    GetNumTriangles  -->  GetTriangleCount
	    GetNumVertices  -->	 GetVertexCount
	    GetNumberMetaBalls	-->  GetMetaBallCount
	    GetNumberParticles	-->  GetParticleCount
	    NumVertices	 -->  GetVertexCount
	    ReportNumberTriangles  -->	ReportTriangleCount
	    SetNumEdges	 -->  SetEdgeCount
	    SetNumPolygons  -->	 SetPolygonCount
	    SetNumSpokes  -->  SetSpokeCount
	    SetNumVertices  -->	 SetVertexCount
	    SetNumberMetaBalls	-->  SetMetaBallCount
	    GetNumberEmitters  -->  GetEmitterCount
	    GetNumberAging  -->	 GetAgingCount
	    SetNumberParticles	-->  SetParticleCount
	    GetNumVertsToLight	-->  GetVertexToLightCount
	    GetStaticNumSamples	 -->  GetStaticSampleCount
	    Update_Num	-->  UpdateCount
	    SetNumber  -->  SetCount
	    ======= global functions ========
	    RndNum  -->	 csRndNum
	    strnew  -->	 csStrNew
	    Combinations  -->  csCombinations
	    expandname	-->  csExpandName
	    splitpath  -->  csSplitPath
	    fnamematches  -->  csFilenameMatches
	    ScanStr  -->  csScanStr
	    iSwap  -->	csSwapInt
	    fSwap  -->	csSwapFloat
	    fSquare  -->  csSquareFloat
	    ByteSwap32bit  -->	csByteSwap32bit
	    ByteSwap16bit  -->	csByteSwap16bit
	    ByteSwap32bitBuffer	 -->  csByteSwap32bitBuffer
	    ByteSwap16bitBuffer	 -->  csByteSwap16bitBuffer
	    FindNearestPowerOf2	 -->  csFindNearestPowerOf2
	    IsPowerOf2	-->  csIsPowerOf2
	    GenerateHalo  -->  csGenerateHalo
	    GenerateNova  -->  csGenerateNova
	    get_token  -->  csGetToken
	    get_token_float  -->  csGetTokenFloat
	    get_token_int  -->	csGetTokenInt
	    skip_token	-->  csSkipToken
16-Jun-2001
	- Fixed a bad bug in iPolygon3D::CreateNullPortal(). This function
	  should be used to create portals that point nowhere yet. A
	  callback associated with that portal will be called whenever
	  the engine needs to go through the portal. This function did not
	  work correctly though. It would set garbage to the sector pointer
	  instead of a valid NULL pointer.
	- Fixed a bug in the map loader when used in combination with
	  regions. It would actually start resolving sector portals again,
	  even from sectors not loaded in this region.
	- Martin Geisse made the following changes:
	    - Added first, incomplete version of the converter system.
	    - Added csDataStream, a utility class that takes a buffer of
	      data and lets it use as a stream.
	    - Added a macro that lets you define a 'pool' class. This pool
	      can be used to store unused objects instead of deleting them.
	      When you need an object of the same class again, the pool gives
	      the object back.
	- Philip Wyett added VFS paths for Red Eye Entertainments current
	  4 CS technical demo levels. As the levels are worked on and tested
	  daily, it is much easier for these to be in CVS, I hope nobody
	  minds? I will remove if someone complains or there is general
	  objection...
	- Christopher Nelson did the following (to AWS):
	    - Updated AWS interface to allow Mark().
	    - Created the Mark routine in the window manager using simple
	      scatter/gather techniques to make more efficient use of bandwidth
	      for updates which have many small regions.
	    - Created Invalidate, which calls Mark with the frame of the
	      compent's area to be marked.
	    - Created signal and slot architecture.  Slots are signal
	      conduits that end at a sink.  Slots are currently component to
	      component conduits.  A signal is emitted by calling Emit
	      with a reference to the emitting component and an unsigned long
	      that represents the signal. A sink is always a component member
	      function.	 I realize that that is a silly restriction, so I
	      will modify that to allow any class that sub-classes a new
	      class called awsSink to be a signal sink.	 Components will then
	      inherit from this class.
	    - Cleaned up some code involving drawing contexts. The drawing
	      contexts are now stored in the window manager, and referenced
	      by components from there.	 Two new functions SetContext and
	      SetDefaultContext can be called to setup these contexts.	One
	      or the other MUST be called.  SetDefaultContext sets the
	      contexts to an internal procedural texture.  The user
	      can get the iTextureHandle of this (though I don't currently
	      have it exposed.)
	    - I would caution anyone who modifies sllex.cpp to be aware that
	      this file, and it's associate slparse.cpp are both automatically
	      generated.  Any changes you make will disappear if there are any
	      modifications to skinlang.flx or skinlang.bsn.  If possible, it
	      would be better to fix problems in the soure parser and lex
	      language files rather than their generated results.
	    - Modified the slot/signal system to support a special type called
	      iAwsSigSrc as signal sources.  Signal sources have some
	      special helper functions for registering and unregistering
	      slots, as well as broadcasting to the lot of them.
	    - Slot sinks can now be any member function of a class derived
	      from iBase. This should make the system much more general and
	      useful.
	    - For now signal is an unsigned long, but I have run into the
	      question of how to figure out who a signal source really is,
	      and how to get the changed value from them.  Originally I
	      wanted to have all signal sources simply be components, but
	      that limits the system somewhat. For example, what if i want
	      the WindowManger to be a signal source? Or the preferences
	      manager?	I may move the ID functionality from components to
	      iAwsSigSrc classes so that you can ask the window manager just
	      exactly who and what the signal source is.  I thought about
	      using the SCF system, but that's a little too heavyweight for
	      what I want to do.
	      I think that mostly the signal should identify the type of
	      source, for example, push buttons and radio buttons would have
	      different signals for a mouse click.  However, this introduces
	      the problem of namespace collision.  Perhaps signals should be
	      registered in a signal source and mapped to an unsigned long
	      like ID's.  Then signals themselves can be referenced by index,
	      much like the colors for csws components.
		e.g.
		#define PB_MOUSEDOWN 1
		signals[PB_MOUSEDOWN] = NameToID("pushbutton_mousedown");
	      The signal itself would still have to be sent using the real
	      value.  This would mess up switch statements, though, because
	      you'd never know ahead of time what the values would be.
	      They wouldn't be.	 Hm... const.
	    - Fixed small compile bug introduced by my incorrect handling
	      of the RCS merge of different versions.
15-Jun-2001
	- Added the ability to the parser to load proc textures (fire,
	  water, dots, and plasma). Instead of saying 'TEXTURE' in the
	  textures block of the world file you can say 'PROCTEX'. Check
	  out data/flarge/world for an example (in the large hall there
	  is a rotating cube with all the proc textures on).
	- Added 'FLARE' type to the possible NOVA types in the loader
	  (in addition to 'NOVA' and 'CROSS'). Added an example of
	  this in flarge (go to the street).
	- Updated the first part of the simple tutorial so that it works
	  again with latest CVS. Also brought back simple to the tutorial
	  state (i.e. removed halos and proc textures).
	- Also added a transparent floating sphere which has the plasma
	  proc texture on it (in flarge).
	- Fixed a bug in the procedural textures. They tried to initialize
	  themselves too early, even before the Prepare() of the texture-
	  manager happened.
	- Removed simple app. Instead added new 'tutor' dir which will
	  contains sub-dirs for all tutorial sections in the manual.
	  Currently there are two simple tutorials so there are also
	  two simple directories in 'tutor'. The targets are 'tutsimp'
	  and 'tutsimp2'.
	- Wouter Wijngaards writes: the clipping of mesh objects should now
	  be correctly handled in the iso engine.
	- Renamed widht2/height2 to asp_center_x/y in OpenGL renderer.
	  This is really the center of the perspective aspect and not
	  just width or height divided by two. Fixed a related bug in the
	  edge drawing which would not work correctly with iso engine for
	  this reason.
	- Added 'simpmap' tutorial app. This app is not yet in the tutorials
	  because it doesn't work yet. I have to investigate why it is
	  crashing.
	- Seems like simpmap is working after all.  I only had to recompile the
	  engine plugin :-)
	- Added a new simple tutorial to the documentation.  Now there are
	  three chapters.
	- Philip Wyett fixed other sub makefiles in an attempt
	  to find why MSVCGEN process cannot parse the apps/tutor dir.
	- Philip Wyett changed to remove sub of apps to a wildcard "*"
	  for msvcxgen process rather than "tests" which was before. Now can
	  generate any "app/../../" projects with msvcgen process.
	- Philip Wyett extended previous commit by changing
	  "TESTS_SUBMAKEFILES" to "SUBAPPLICATION_SUBMAKEFILES" as now it is
	  searching both "apps/tutor/*" as well as the old "apps/tests/*".
	- Eric Sunshine eliminated the new SUBAPPLICATION_SUBMAKEFILES variable
	  from subs.mak and replaced it with TESTS_SUBMAKEFILES and
	  TUTORIAL_SUBMAKEFILES.
	- Eric Sunshine renamed apps/tutor to apps/tutorial.  Also renamed the
	  `simple' tutorial to `simple1' to complement the `simple2' tutorial.
	- Eric Sunshine reverted Philip's changes to gfxtest.mak, vfstest.mak,
	  and g2dtest.mak.  Most of the changes were unnecessary, but in a few
	  cases they were also undesirable.
	- Eric Sunshine reverted Philip's change to sllex.cpp because it broke
	  compilation on all platforms other than Visual-C++.
	- Eric Sunshine eliminated a compilation warning about member
	  initialization occurring in wrong order in keyval.cpp.
	- Eric Sunshine worked around a bogus error in the NextStep compiler
	  where it claimed to know nothing about the embedded ~awsCanvas() in
	  the awsmgr.cpp file.
	- Eric Sunshine added the missing `aws' entry to the PLUGINS.DYNAMIC
	  list in user.mak.  (Currently commented-out, though).
	- Christopher Nelson did lots of changes to AWS:
	    - Implemented most of awsWindow's basic functionality. Windows
	      are arranged in a doubly-linked list hierarchy. The top window
	      is pointed to by the window manager, and the hierachy follows
	      downwards from there. awsWindow implements Raise() and Lower(),
	      and implements two new triggers, OnRaise() and OnLower().
	    - Expanded awsComponent. Implemented default Setup() function to
	      automatically pull the frame and id of a component out of the
	      component's setup information gleaned from the defintion file.
	      Also setup the default triggers like OnMouse*() and OnKeypress().
	    - Fixed makefile to include CSGFX and CSFX.
	    - Expanded awsManager to include tracking of a top window. Also
	      embedded a subclass of csProcTexture in it to allow components
	      to draw to this canvas.  The manager actually uses the
	      user-provided iGraphics3D to draw the window manager's canvas
	      to the screen.  I may also allow the user to specify a virtual
	      screen size and a texture size, and then perform drawing over
	      NxN textures based on the virtual screen and rect tests.
	- Philip Wyett fixed sllex.cpp so will compile on MSVC.
	  This fix has been tested on MSVC, MingW (GCC)
	  and the GCC 2.96 from Linux Mandrake 8 and
	  works fine. This all could be altered at a later date
	  when the plugin becomes active, but for testing
	  purposes on MSVC it is adequate.
14-Jun-2001
	- Made the terrain visibility checker more efficient and more robust.
	  The calculation of the extent works completely different now and
	  first calculates the left/right indices of the bounding box.	Then it
	  will compute the angles only of those two vertices instead of all
	  four vertices.  This speeds up vis testing a little.	Unfortunatelly
	  it doesn't solve a bug which seems to cull away terrain blocks
	  wrongly.
	- Added csBox2::SquaredOriginDist() similar to the already existing
	  csBox3 version.
	- Added csBox2/3::SquaredOriginMaxDist() which returnes the maximum
	  squared distance instead of the minimum one.
	- Using the above functions added another optimization to the
	  terrain visibility checker. Again this does not solve the bug though.
	- Fixed the bug in the visibility checker. The minimum and maximum
	  heights were correctly calculated but not scaled and translated
	  according to the parameters given by the terrfunc user.
	- Set default quad-tree depth to 6 instead of 4. This seems to give
	  much better results for newsky.zip.
	- Did a VERY small optimization to the octree traversal code with
	  regards to selecting front2back/back2front modes.
	- BugPlug will now also work for apps that don't have a font
	  server. But a lot of functionality will not work.
	- Eric Sunshine eliminated all of the special platform-specific glue
	  libraries and objects with which applications and plugin were
	  required to link in the past.	 Rather than maintaining special object
	  files and static libraries, the platform-specific glue is now
	  implemented on-the-fly via macros.
	    - Eliminated all of the platform-specific special implementation
	      files:
		cssys/os2/dllentry.cpp
		cssys/ps2/dummy.cpp
		cssys/unix/dummy.cpp
		cssys/win32/dllentry.cpp
		cssys/win32/exeentry.cpp
	    - Removed the Windows-specific special static link libraries along
	      with their project files:
		cswin32exe.lib
		cswin32dll.lib
		libcswin32exe.dsp
		libcswin32dll.dsp
	    - Eliminated the MSVC dependencies upon libcswin32exe.dsp and
	      libcswin32dll.dsp.
	    - Eliminated the SRC.SYS_CSSYS_EXE and SRC.SYS_CSSYS_DLL
	      system-level makefile variables which controlled how the special
	      implementation files were inserted into the build process.
	    - Added the new macro CS_IMPLEMENT_PLUGIN to cssysdef.h.  This
	      macro should be placed at the global scope in exactly one
	      compilation unit comprising a plugin module.  For maximum
	      portability, each plugin module must employ this macro.  Some
	      platforms override the definition of this macro in order to
	      augment the implementation of the plugin module with any special
	      implementation details required by the platform.	For example,
	      the Windows port uses this macro to implement the DllMain()
	      function.
	    - Added the new macro CS_IMPLEMENT_APPLICATION to cssysdef.h.  This
	      macro should be placed at the global scope in exactly one
	      compilation unit comprising an application.  For maximum
	      portability, each application should employ this macro.
	      Platforms override the definition of this macro in order to
	      augment the implementation of an application with any special
	      implementation details required by the platform.	For example,
	      the Windows port uses this macro to implement the WinMain()
	      function.
	    - cssysdef.h for OS/2 now defines CS_IMPLEMENT_PLUGIN to implement
	      _DLL_InitTerm() and a version of getenv() which works for plugin
	      modules.
	    - cssysdef.h for Unix now defines CS_IMPLEMENT_PLUGIN to implement
	      main() in plugin modules if requested by the platform-specific
	      makefile.	 Currently, the Linux, FreeBSD, and Hurd makefiles
	      request this augmentation.
	    - cssysdef.h for Windows now defines CS_IMPLEMENT_PLUGIN to
	      implement DllMain(), and CS_IMPLEMENT_APPLICATION to define
	      WinMain().
	    - Completely re-worked and simplified the convoluted `main' versus
	      `csMain' versus `WinMain' issue on Windows.  In the past, the
	      Windows port tried renaming all `main' functions to `csMain' (via
	      the C-preprocessor), and then implemented its own `main' and
	      `WinMain' functions which acted as covers to `csMain'.  With the
	      new, much simpler scheme, `WinMain' is merely a thin cover over
	      `main' and global renaming is unnecessary.
	    - Augmented all applications and plugin modules with the new
	      CS_IMPLEMENT_APPLICATION and CS_IMPLEMENT_PLUGIN macros.
	- Martin Geisse fixed a missing bracket in DECLARE_TYPED_SCF_VECTOR.
	- Philip Wyett fixed some includes in aws plugin:
	  Fixed #includes so only GCC compilers use
	  "unistd.h" and MSVC 5/6 use "io.h"
	- Philip removed zlib png and jpeg libs from MSVC projects files and
	  placed in the makefiles for apps or plugins in which they are
	  required.
	- Eric Sunshine added a makefile debugging facility which allows the
	  user to easily view the expansion of any makefile variable.  To use,
	  invoke the makefile target `show' and set the makefile variable `V'
	  to the name of the variable of interest.  For instance, to display
	  the expansion of $(SRC.SOFT3D), invoke "make show V=SRC.SOFT3D".
	- Eric Sunshine eliminated a couple compilation warnings reported by
	  MSVC in 3dsload.cpp.
	- Eric Sunshine fixed the `drivers' makefile target so that it also
	  builds the Socket network driver.
	- Martin Geisse did the following:
	    - Cleaned up the code for csPortal, csKeyValuePair and csMapNode.
	    - Added several csPortal methods to iPortal.
	    - Renamed iPortal::GetPortal / SetPortal to GetSector and
	      SetSector.
	    - Added the missing SetKey to iKeyValuePair.
	    - Removed the unused 'MyOwner' member of csMeshWrapper.
	    - Added some missing const specifiers to methods of csFlags.
	- Martin also added dummy files for the model import/export,
	  crossbuilder and sprite/thing impexp loader plug-ins. The plugins
	  are still work in progress, and the dummy files are there to make
	  the makefiles work.
	- Philip Wyett added makefiles for the new impexp plugins (thingie,
	  spr3die, povie, crossbld, and multiplex.
	- Philip also added a fix from Jason Moyers which changes return
	  'false' to return 'NULL' (in libs/csparser).
	- Christopher Nelson updated interface definitions for aws.
	- Christopher also added useful querying classes to the preference
	  manager to select a current skin, and to be able to get values from
	  the skin tree. Also added NameToId mapping function.	Added some
	  more items to the interface definition files.
13-Jun-2001
	- Increased robustness of the Spider in BugPlug a little. If there
	  are no sectors it will not start hunting. There is also a timeout
	  of 20 frames. If the camera has not been found in that time then
	  the hunt will be canceled.
	- Added the ability to do mouse selection in BugPlug.
	- Added a small patch from Alistair Leslie <AlistairL@optushome.com.au>
	  to make sure that the impexp importer doesn't crash when it cannot
	  write to ivcon.log. In that case it will write to standard
	  output.
	- Discovered an obsolete ddg.h include. Removed it.
	- Thanks to Wouter we finished visibility testing for the terrain
	  engine.
	- Extended the iTerrFuncState interface to enable/disable this
	  visibility testing (enabled by default).
	- Also added VISTEST keyword to the terrain loader plugin.
	- Added new command in BugPlug to enable/disable terrain visibility.
	- Martin Geisse added a 'const' version of 'operator []' to
	  DECLARE_GROWING_ARRAY.
	- Martin removed an include of ddg.h.
	- Philip Wyett removed unused libs from MSVC project files.
	  Moved ddraw and other libs to makefiles where it is required.
	  A work in progress...
	- Fixed SCF_TRACE for embedded SCF interfaces. scfRefCount is
	  no longer part of the embedded interface.
	- Martin Geisse added DECLARE_TYPED_SCF_VECTOR again (a version of
	  typed vectors that controls the reference count of the contained
	  objects). This time it should work correctly.
	- Christopher Nelson did more work on the parser, as well as some
	  additional work on the preferences manager. The parser now adds
	  window and skin definition trees into the preference manager. (In
	  other words, the parser is now useful. :-)
	  There is a difference between skin and window definitions that may
	  not seem obvious at first.  That is, skin definitions specify
	  global options for components and window defintions specify local,
	  unique options.  In other words, the background texture for all
	  items would be specified in a skin definition.  As would the
	  texture used for buttons, for checkboxes, scrollbars, etc.  A
	  window definition is used to specify stuff like the caption, where
	  the component goes, exactly what type of window it is, etc.
	  Window definitions currently take a skin definition as a parameter
	  of their grammatical structure.  I'm not sure this is a good idea,
	  and I will probably change that.  Multiple skin definitions and
	  window definitions can exist in a single file.  There is no need to
	  predeclare anything, since there are no interdependencies.  I may
	  add an include statement which will allow a single file to include
	  other files that it may depend upon.
	  I am thinking through the ramifications of allowing modular code,
	  e.g.:
	    component "Sex Frame" is "Frame"
	    {
	      component "Male" is "Radio Button"
	      { ... }
	      component "Female is "Radio Button"
	      { ... }
	    }
	  then later:
	    window "new player"
	    {
	      named component "Sex Frame"
	    }
	  This may make some things a lot easier, especially when you have
	  gui constructs that you'd like to use in other places.
	- Norman Kramer fixed a bug in the texture manager: materials are
	  freed now. Also fixed this in the software renderer.
	- Norman also added Clear to OpenGL similar to softrenderer, now
	  bumptest wont crash at exit but still leaves unreleased instances
	  when using opengl renderer.
12-Jun-2001
	- Fixed a compile error and warning in SCF.
	- Removed dumper.cpp and dumper.h. They are obsolete and BugPlug
	  will soon get nearly all the functionality which was in Dumper.
	- Removed obsolete (and useless) unix specific signal handling
	  in walktest.cpp.
	- Removed the commands 'gamma', 'dblbuff', 'dump', 'coorddump',
	  'fov', and 'fovangle' from WalkTest. Extended BugPlug to have
	  the equivalent functionality.
	- Added the ability to open an edit line (to enter text) in
	  BugPlug. This works but unfortunatelly the display flickers.
	  I'm not sure how to avoid that.
	- Beware! In the dark recesses of BugPlug there now lives a creature
	  so awful and fierce that even the mightiest heroes don't dare to
	  look at it! When the sun shines over the mountains and fields,
	  everything is well and Spider remains hidden in its dark cave.
	  However, when the moonlight is dim or shaded, and nasty bugs crawl
	  over the country, Spider will weave its web of deceit over the
	  infected land! Unaware of the great danger, an unsuspecting wanderer
	  might look over the country. Here Spider will strike! It will put
	  a curse on the wanderer which will reveal his whereabouts to Spider
	  at any time in the future! The only remedy to this curse is death!
	- Fixed a bug with BugPlug. It will now work correctly together with
	  Iso engine and other applications that don't use the 3D engine.
	  Previously it assumed there always was an iEngine. Now it just
	  disables all functionality that has to do with iEngine (like the
	  Spider). All other functionality will work though.
	- Fixed some documentation with regards to recent changes.
	- Fixed a bug in a CS_ASSERT in spider.
	- Eric Sunshine applied a more correct fix to SCF following Jorrit's
	  patch today.	DECLARE_FAST_INTERFACE() now correctly employs the
	  opaque scfInterfaceID rather than uint32.
	- Eric Sunshine removed the now obsolete DO_COREDUMP makefile variable.
	- Martin Geisse did the following:
	    - Some cleanup of csparser: Renamed some functions that
	      involve parsing to Parse??? (example: load_vector to
	      ParseVector). The goal of this is to make a clear difference
	      between functions that load data from files and functions that
	      interpret parts of the world file. Also changes usage of
	      fatal_exit() to returning 'false' in some cases.
	    - Continued work on csparser (renaming functions and removing
	      fatal_exit). To make the code more readable, I added a function
	      to handle the error output for unknown tokens (as all those
	      error messages were up to 3 lines of identical code except one
	      word). Also added a convenience method to csObject that adds
	      all child objects of another object as children. Using this
	      method I fixed the bug that allowed static lights to have
	      only one key-value pair attached to them.
	- Christopher Nelson made some more progress on the parser.
	  Implemented the very helpful patches sent to me by Eric Sunshine,
	  so the test harness now functions properly with the plugin.
	  The parser now recognizes complete skin definitions, and constructs
	  a proper parse tree of the results, though it currently discards
	  the results at the top level.
	- Christopher reports:
	  Lots more work on the parser. The parse tree is nearly completely
	  constructed, only discarded at the very top layer. The parser can
	  currently properly parse the following definition:
	    skin "Normal Window"
	    {
	      Texture: "/lib/windows/texture.png"
	      Another: "/lib/tex/windows/defbackgr.png"
	      Wack:  "/libandstuff/dir/garbage.png"
	    }
	    window "New User" from "Normal Window"
	    {
	      Frame: (100, 200) - (400, 500)
	      Style: Bitmapped
	      Overlay: "/lib/windows/newuserovl.png"
	      Back:    "/lib/windows/newuserbck.png"
	      component "User Name" is "Textbox"
	      {
		Frame: (10, 30) - (390, 45)
		Style: NoFrame
		Caption: "Name:"
	      }
	      ...
	  Components can be nested as deeply as you want. So far I'm assuming
	  that coordinates of children are expressed inside their parent's
	  rectangle. Any integers that occur can be normal infix expressions
	  using addition, subtraction, multiplication, and division
	  (parenthetical solving is, of course, included).  I don't expect
	  you to need more than that, but if you do let me know.
	  I'm vaguely thinking of adding some sort of macro variable system
	  where you can assign certain variables a value, and then use those
	  values later down as offsets. As in:
	    define FirstRadFrame = (10,10) - (100,35)
	    component "bla" is "Radio Button"
	    {
	      Frame: (FirstRadFrame.Left, FirstRadFrame.Top+15)
		    - (FirstRadFrame.Right, FirstRadFrame.Bottom+15)
	    }
	- Justin Miller fixed a bug in OpenGL renderer so that resize
	  of window should work correctly. I have been told however that
	  it is still not working completely ok.
11-Jun-2001
	- Created a new 'bugplug' plugin. This plugin will give debugging
	  functionality to any CS app. To use it just add the following
	  line to your config:
	    System.PlugIns.BugPlug = crystalspace.utilities.bugplug
	  or load the plugin from the code with:
	    LOAD_PLUGIN (System, "crystalspace.utilities.bugplug",
		"BugPlug", iPlugIn);
	  That's all you have to do. The plugin will nest itself in the
	  application event loop and listens to keys. In
	  data/config/bugplug.cfg you can control to what keys it listens.
	  The most important key is assigned to the 'debugenter' key.
	  When this key is pressed (by default it is ctrl-d) the next key
	  will be given to BugPlug which will perform the associated
	  command. The other keys and commands are also defined in
	  bugplug.cfg.
	- Added 'bugplug' to the WalkTest config file (commented) and also
	  added new 'bugplug' console command. The best way to get
	  BugPlug working in all your apps automatically is to add the
	  following line to data/config/user.cfg:
	    Global.System.PlugIns.BugPlug = crystalspace.utilities.bugplug
	- Removed 'edges', 'cacheclear', 'cachedump', 'texture', 'lighting',
	  'bilinear', 'trilinear', 'ilace', 'mmx', 'gouraud', 'transp',
	  'mipmap', 'inter', and 'fclear' debug commands from walktest
	  since BugPlug can do those now.
	- Fixed a crash at exit bug in OpenGL renderer.
	- Extended csObject with an optional 'parent' object (NULL by default).
	  This can be used to create csObject's with another SCF parent.
	- csThing now sets up the SCF parent chain. This is to try to make sure
	  that csThing will now implement iFactory indirectly. Unfortunatelly
	  it still doesn't work.
	- Gregory Austwick (g.austwick@virgin.net) contributed a few patches
	  to CS: fix for dungeon plugin, fix for standard output console,
	  fix for DDraw canvas and a fix in the DirectDetection code
	  for Windows.
	- Moved all csObject stuff from csObject library to csUtil library.
	  This means that the csObject library is now gone.
	- Eric Sunshine eliminated a Doxygen warning from clip2d.h.
	- Eric Sunshine removed the unused and broken borland.mak.  If someone
	  wants to revive this in the future, it can be resurrected from the
	  CVS Attic.
	- Eric Sunshine corrected the makefile DESCRIPTION variables for the
	  MetaBalls plugins.
	- Eric Sunshine made the following changes:
	    - Moved the contents of plugins/engine to plugins/engine/3d.
	    - Moved plugins/iso to plugins/engine/iso.
	- Eric Sunshine re-organized the plugins/mesh directory.  Whereas, in
	  the past, components for a single type of mesh were spread across
	  multiple locations in the mesh directory hierarchy, now each mesh
	  type is self-contained.  For example, in the past, we had:
	    plugins/mesh/object/ball
	    plugins/mesh/load/ball
	  We now have:
	    plugins/mesh/ball/object
	    plugins/mesh/ball/persist/classic
	  The `persist' directory contains plugins which manage object
	  persistence (such as loading and saving to files).  The `classic'
	  subdirectory contains code to manage persistence for the so-called
	  classic CS file format.  Other theoretical future subdirectories
	  might include (among others):
	    plugins/mesh/ball/persist/xml
	    plugins/mesh/ball/persist/binary
	- Eric Sunshine renamed plugins/colldet to plugins/collide.
	- Eric Sunshine renamed the SCF class name for the Rapid plugin from
	  crystalspace.colldet.rapid to crystalspace.collisiondetection.rapid.
	- Eric Sunshine re-organized the plugins/motion directory hierarchy to
	  resemble the new plugins/mesh directory organization.	 Instead of
	  these directories:
	    plugins/motion/object/default
	    plugins/motion/loader/default
	  We now have:
	    plugins/motion/standard/object
	    plugins/motion/standard/persist/classic
	- Eric Sunshine re-organized the plugins/terrain directory hierarchy to
	  resemble the new plugins/mesh directory organization.	 Instead of
	  these directories:
	    plugins/terrain/object/terrfunc
	    plugins/terrain/loader/terrfunc
	  We now have:
	    plugins/terrain/function/object
	    plugins/terrain/function/persist/classic
	- Eric Sunshine modified the `msvcgen' template files so that they now
	  define CS_DEBUG when building in debug mode in order to be consistent
	  with the Unix build process.
	- Eric Sunshine modified msvcgen.mak so that it now disables makefile
	  NASM flags, thus preventing NASM assembly files from appearing in
	  generated DSP files even if the environment which is generating the
	  DSP files has NASM enabled.
	- Fixed a bug with G3DRENDERSTATE_INTERLACINGENABLE and software
	  renderer. The setting was not correctly processed.
	- Eric Sunshine eliminated a compilation warning in walkcmd.cpp
	  regarding "computed value not used."
	- Eric Sunshine re-introduced some extra searching-logic into
	  csFindLoadLibrary in NeXTDynamicLibrary.cpp so that scfreg can once
	  again find plugin modules which are stored in the "components"
	  subdirectory of the current directory.
	- Martin Geisse changed the way the ID numbers for
	  QUERY_INTERFACE_FAST are stored. There is now an inline wrapper
	  function around each ID variable, DECLARE_FAST_INTERFACE.
	  This has two advantages: Firstly, it requires much less code (just
	  one macro per interface compared to three). Secondly, as inline
	  functions are local to their compilation unit, there are no more
	  problems with duplicate symbols (as it was the case with global
	  variables).
	- Martin Geisse changed the incorrect usage of IMPLEMENT_IBASE to
	  IMPLEMENT_IBASE_EXT in two cases.
	- Robert Bate updated the Mac project files for the new BugPlug
	  plugin and also updated all project files to the new directory
	  structure and added targets for emit, metaball, and stars mesh
	  objects.
	- Robert also did a fix to the emit particle system for the picky
	  CodeWarrior compiler.
	- Christopher Nelson added interface includes for AWS in ivaria.
	- Christopher also made some modifications to AWS so that it can be
	  a plugin. Still doesn't load properly.
	- Eric Sunshine made the following changes to AWS:
	    - Fixed up the SCF goop so that the plugin loads properly and
	      registers all of its plublic classes.  In particular, added
	      registration for the awsPrefManager class.  Also added a missing
	      IMPLEMENT_FACTORY() for this class.
	    - Replaced use of static_cast<> with STATIC_CAST() for better
	      portability.
	    - Removed the `i' prefix from the names of the AWS files in
	      CS/include/ivaria and merged them into aws.h.
	    - Repaired a couple minor makefile defects.
	- Norman Kramer fixed g2dtest so that it works again. To fix this he
	  made the G2D variable in csSystemDriver protected. This is a
	  temporary solution.
	- Norman also fixed some include paths in some of the files of
	  the 3D sprite mesh plugin.
10-Jun-2001
	- Norman Kramer did the following:
	    - Blocks now decrefs its queried soundwrapper, releases/stops the
	      background sound and decrefs the loaded font ... this all
	      results in blocks not leaving any unreleased instances at exit
	      anymore.
	    - csEngine::Clear now releases all collected objects via
	      ObjRemoveAll (this will assure for instance soundwrappers are
	      decref'd correctly).
	    - DecRef'ed the created proc_image (think there must be a Ref
	      bug in the software procedural texture interface - boy do I
	      hate that).
	    - Made iSoundHandle::Play return a soundsource for looping sounds.
	    - Soundsources parent is the originating soundhandle instead of
	      soundrender: this prevents circular dependency with
	      IncRef/DecRef.
	- Michael Voase did the following:
	    - Normalized metaball default rendering area to be symmetrical
	      on all axes.
	    - The metaballs should now render around (0,0,0) where you place
	      them rather than at (0,0,10).
	- Wouter Wijngaards fixed his latest fix to terrvis.
9-Jun-2001
	- Fixed a bug in csRenderView::ClipBBox() with regards to clipping
	  to the near plane in combination with mirroring. This would
	  result in meshes not being culled away when seen through a mirror
	  when they should have been culled away.
	- Fixed a crash in terrain engine where dx/dy for the height
	  function would go slightly out of bounds.
	- Norman Kramer added missing engine->DecRef() in csView.
	- Norman did: interface id has been requested for every plugin loaded
	  when querying an interface.
	- Wouter Wijngaards did a few fixes to terrain visibility:
	    - Fixed a bug where the terrainvis front to back was not
	      working. Need to XOR, not add to the camchild.
	    - Fixed GetHorIndex() routine, now the angle-indices are arranged
	      so that idx=0 and idx=horsize/2 have the x-axis running through
	      their middle. So z<0 or z>0 will not make much of a difference
	      anymore in these cases.
8-Jun-2001
	- Added iMeshObjectType::GetFeatures(), also added iMeshObject
	  GetLODFeatures(), SetLODFeatures(), GetLOD(), SetLOD(), and
	  GetLODPolygonCount(). These are all functions that have to do
	  with LOD (both on polygon count and enabling/disabling features).
	  In the future we'll be able to make a LOD manager in the engine
	  using these new calls.
	- Extended all existing mesh objects with these new features. Note
	  that the implementations are empty at the moment. The calls
	  will work but don't do anything useful yet.
	- Did a fundamental change in how the engine manages mesh wrappers.
	  engine::CreateMeshObject() used to make a new mesh wrapper and
	  then call IncRef() on it (resulting in a ref-count of 2). The
	  explicit IncRef() is removed (the engine only has one ref to the
	  mesh wrapper and not two). In addition engine::UnlinkMesh() is
	  removed. Instead you have to use engine::RemoveMesh(). If you
	  want to keep a mesh (but still want to remove it from the engine)
	  you should make sure you did IncRef() on the mesh as well.
	- Also modified engine::NextFrame() to call RemoveMesh(). This
	  means the mesh will be unlinked from the engine and all sectors
	  and also removed IF the engine was the only one with a reference
	  to that mesh.
	- Added iEngine::RemoveMesh().
	- Also removed engine::UnlinkTerrain() and added
	  iEngine::RemoveTerrain(). Also removed the additional IncRef() that
	  was happening in CreateTerrainObject().
	- Removed the non-const version of csMeshWrapper::GetChildren().
	  This is no longer safe to use. The method AddChild() take care of
	  correctly managing ref counts.
	- Added iMeshWrapper::RemoveChild() to remove a child in a
	  hierarchical mesh setup.
	- Added iMeshWrapper::GetParentContainer() to get the parent
	  (either iEngine or iMeshWrapper) from a mesh wrapper.
	- Added clip_z_plane to G3DTriangleMesh. Clipping to the z-plane
	  or to the (optional) near plane should be considered separate.
	  It is possible for an object to go beyond both planes independently.
	- Extended csRenderView/iRenderView::ClipBBox() with a new
	  clip_z_plane parameter.
	- Fixed all mesh plugins to correctly fill the triangle mesh
	  with the new clip_z_plane parameter from ClipBBox().
	- The OpenGL renderer will now correctly look at the new clip_z_plane
	  flag and handle it accordingly. The software renderer still ignores
	  plane clipping though.
	- Fixed a bug in OpenGL edge drawing. It was not disabling GL_BLEND
	  before drawing the line.
	- The OpenGL renderer will now always clip geometry to the z=0
	  plane if needed (for DrawTriangleMesh). It appears that with this
	  feature the need for screen clipping is no longer there. The
	  flag is still in opengl.cfg though in case it IS still needed
	  but it may be that everything is ok now.
	- Fixed an EXTREMELY stupid bug in OpenGL renderer which caused
	  all polygons to be rendered twice :-)
	- Added callback functionality to iRenderView (copy from csRenderView).
	  Reduce the number of callbacks to 4: CALLBACK_SECTOR,
	  CALLBACK_SECTOREXIT, CALLBACK_MESH, and CALLBACK_VISMESH.
	  iEngine::DrawFunc() is now working again but will no longer fire
	  callbacks for every individual polygon. It will stop at the
	  mesh level.
	- Removed 'frustum' command from WalkTest. It was never very useful
	  and was broken anyway.
	- Removed 'dumpvis' command from WalkTest. It was also broken.
	- Eric Sunshine changed the prototype of iSCF::QueryClassList() so that
	  it now returns matches via an iStrVector object rather than a (char
	  const**) which was free()'d by the caller.  It was necessary to
	  return a reference-counted object in order to avoid the problem of
	  allocating memory from one heap (the application's) and freeing it
	  into another (a plugin's, for instance).  I am not terribly happy
	  about using an SCF interface (iStrVector) in the declaration of the
	  core SCF since it introduces a sort of circular dependency, however
	  SCF was already polluted in this fashion by use of iConfigFile.  In
	  the future, in order to address this chicken-and-egg problem, I think
	  that we should eliminate both iConfigFile and iStrVector from the
	  core scf.h interface.
	- Eric Sunshine repaired an outdated reference to the metaball plugin
	  in metaball.cfg which prevented the plugin from loading.
	- Eric Sunshine removed an out-of-date reference to the old MetaBall
	  plugin from user.mak.
	- Eric Sunshine fixed a crasher in the metaball plugin which he
	  introduced the day before.  Also made the G3DTriangleMesh a simple
	  instance variable of csMetaBall rather than specially allocating it
	  from the heap.
	- Eric Sunshine removed the binary meta.zip file from CVS and re-added
	  the `world' as a simple text file in CS/data/metaball/world.	Updated
	  vfs.cfg to point at this new location.
	- Robert Bate did updates to the Classic Mac port again:
	    - Codewarrior is very picky with the floating point constants
	      passed to templated routines.  Making sure they all are floats.
	    - Enhanced carbon compatibility.
	    - Updated all Mac project files.
	    - Cleaned up the 2d driver code for OpenGL.
	    - Added the Mac to the extension detection code.
	- Norman Kramer changed format directives in scf.cfg.
	- Norman also fixed the iso engine after Jorrit broke it (missing
	  Callback related methods in iRenderView implementation of iso
	  engine).
7-Jun-2001
	- Justin Miller fixed a minor syntax error in csview.h.
	- Wouter Wijngaards gave the start to implementing a visibility
	  system for the terrfunc terrain engine and I tried to finish
	  it but things are not yet working. So at the moment it is
	  still disabled.
	- Fixed a bad bug in the bsp traversal code with regards to object
	  visibility testing. In the Front2Back code the bounding box polygons
	  have to be traversed BEFORE the real polygons because they
	  really are in front of the polygons of the node itself. When
	  bounding box polygons are inserted in a bsp tree they will not
	  cause bsp leafs to be split further. So perfect sorting is not
	  guaranteed. Normally this does not matter as this is only used
	  for visibility testing but we have to make sure that at least
	  the real polygons are traversed after the bounding box polygons
	  because the real polygons update the c-buffer and the bounding
	  box polygons test against it.
	- Eric Sunshine fixed the new meta.cpp so that it compiles on NextStep.
	- Wouter Wijngaards fixed CS_ASSERT. It had a printf of the assertion,
	  printf("..." #x ), but if the assertion contains % signs, (perhaps
	  even %s!), this could give serious problems. Changed to
	  printf(".... %s", .., #x).
	- Christopher Nelson added experimental AWS plugin.  AWS is the
	  experimental alternate window system, which aims to create a
	  lightweight window manager that doesn't take over the software,
	  supports definition files, and implements slots and signals.
	  This plugin has not been added to the global make.  It is still in
	  it's initial stages, but is committed so that people can look at
	  it.  Eric and I discussed a number of changes that we'd like to make
	  to csws, but they would require too much modification of the
	  existing code.  That would be both difficult, and would break a lot
	  of other peoples code.  All the existing CSWS components will be
	  "ported" over to the new code.
	  I would like to emphasize that this is completely experimental,
	  and is not meant to replace anything.	 (yet.)
	- Norman Kramer fixed a bug in meta.cpp.
6-Jun-2001
	- Removed support for the quadtree, coverage mask tree, coverage mask
	  cube, and solid tree from CS. I parked the code locally and it will
	  also be in the CVS attic. Some of that code (especially the 3D
	  quadtree) will be useful to resurrect later but at this moment
	  it is just confusing me :-)
	- Added cs/iMovable::GetSectorCount() and also made a lot of the
	  functions 'const'.
	- Made a number of cs/iCamera members const.
	- Made a number of cs/iMeshWrapper members const.
	- Made a number of cs/iMeshFactoryWrapper members const.
	- Made a number of iVisibilityObject members const.
	- Made a number of iMeshObject members const.
	- Made a number of iMeshObjectFactory members const.
	- Added 'const' to a number of mesh object implementations and
	  state interfaces.
	- Added G3DRENDERSTATE_EDGES. This can be used by a 3D renderer
	  to enable edge drawing for debugging purposes.
	- OpenGL renderer implements this debugging feature (but software
	  doesn't right now).
	- Walktest will now enable edge drawing using this new functionality
	  instead of with callbacks. This means that with OpenGL the 'e'
	  command works again. Note that there is a difference compared
	  to the past. The 'e' command with OpenGL will now show the
	  resulting triangles that every polygon is triangulated too.
	- Eric Sunshine implemented iGraphics2D::SetMouseCursor() in the OpenGL
	  and Glide BeOS drivers.  (This method was already implemented in the
	  software driver.)
	- Michael Voase did the following:
	    - Moved metaball to a mesh object.
	    - Added meta ball loader.
	    - Modified metasys to suit new meta ball.
	- Norman Kramer fixed ptlab to the new meta ball plugin.
	- Martin Geisse did the following:
	    - Removed DECLARE_TYPED_SCF_VECTOR(). This macro created a
	      subclass of csVector that was intended to store SCF objects.
	      It was useless because it never did an IncRef() on the
	      contained objects, only a DecRef().
	    - Made iSoundWrapper a subclass of iBase.
	    - Completely rewrote csObject. It now stores a list of iObject
	      pointers and does not cast to csObject anymore. The reference
	      count of contained objects is correctly increased and
	      decreased. In addition, a csObject keeps a 'parent' pointer
	      that is set when an object is added or removed, but has no
	      further meaning and it is not IncRef'ed / DecRef'ed either. The
	      user can decide how to make use of this pointer.
	    - The remake of csObject required some changes in the whole of
	      CS. Mainly, where an object was added with ObjAdd (), a DecRef
	      to the added object had to be done. Calls to ObjRelease()
	      should be replaced by an IncRef() to the object-to-release and
	      then a RemoveObject, although there was no such case in the
	      current CS code.
	    - Removed csObjectNoDel and csPObject.
	- Wouter Wijngaards added visibility routine for terrfunc. The
	  computation in the quadtree.
	- Wouter also fixed a number of potential bugs in that code.
	  Fixed a warning, CS_ASSERT(a%b == 0) will give warnings,
	  CS_ASSERT(a%d) will put the %d in a printf even...
	- Martin Geisse fixed a compilation problem in the terrfunc plugin.
5-Jun-2001
	- Reduced the optimization level in linux.mak from -O6 to -O2.	This
	  will probably not do much anyway and -O6 seems to give problems with
	  gcc 2.96.  I hope -O2 works well enough.
	- Removed 'sndload' from 'make walkall'.
	- Norman Kramer made the Sound, VFS, G3D, G2D, MotionMan, Config and
	  NetDrv variables of csSystemDriver private.  If you want to access
	  the plugins represented by those variables first do a QUERY_PLUGIN to
	  get a pointer to them.  Also changed code in remainder of project to
	  accomodate this change.
	- Added a lot of 'const' qualifiers to many functions in csEngine and
	  iEngine.
	- Removed a few obsolete functions from iEngine having to do with
	  polygon texture planes.
	- Added 'const' to functions in csNamedObjVector.
	- Removed iSector::GetID().
	- Added iObject::GetID().
	- Added a lot of 'const' qualifiers to many functions in csSector and
	  iSector.
	- Fixed a warning in keyval.
	- Wouter Wijngaards fixed the isometric transform.  It has a LOT less
	  distortion now.  The cube is exactly 1x1x1 now, and you can see,
	  while changing the view that it stays in shape.
	- Wouter also added mesh factory convenience functions, and a list
	  of mesh factories is kept by the iso engine (by name).
	- Philip Wyett fixed MSVC project files which were committed as ASCII.
	- Avoids the bug with levels with multiple sectors and bsp trees.  The
	  level itself will now be rendered ok.	 But the bug isn't gone for
	  real though.	Objects are still culled wrongly.
	- Started cleaning everything other than the c-buffer culler from CS
	  engine.  The rest isn't working either and is only useful for
	  reference (which CVS will hold).  This simplifies the engine
	  considerably.
	- Removed 'culler' command from WalkTest.
	- Eric Sunshine made the following changes to SCF.
	    - Further optimized IncRef(), DecRef(), and QueryInterface() for
	      embedded interface.  No longer checks for non-null scfParent.
	      scfParent is now always assumed non-null for embedded interfaces.
	    - Added a new opaque type `scfInterfaceID' which represents a
	      registered SCF interface name.  This is used in place of the bare
	      `uint32' which represented registered names in the past.
	    - Added a bunch of new macros for providing finer control over the
	      implementation of the standard iBase methods.  These macros make
	      it easier to implement custom IncRef(), DecRef(), or
	      QueryInterface() calls while still providing automatic
	      implementations of functions which are not specially customized.
	      The new macros are:
		IMPLEMENT_IBASE_INCREF()
		IMPLEMENT_IBASE_DECREF()
		IMPLEMENT_IBASE_QUERY()
		IMPLEMENT_IBASE_QUERY_END
		IMPLEMENT_EMBEDDED_IBASE_INCREF()
		IMPLEMENT_EMBEDDED_IBASE_DECREF()
		IMPLEMENT_EMBEDDED_IBASE_QUERY()
		IMPLEMENT_EMBEDDED_IBASE_QUERY_END
		IMPLEMENT_IBASE_EXT_INCREF()
		IMPLEMENT_IBASE_EXT_DECREF()
		IMPLEMENT_IBASE_EXT_QUERY()
		IMPLEMENT_IBASE_EXT_QUERY_END
	      These macros are now employed by the higher-level convenience
	      macros IMPLEMENT_IBASE(), IMPLEMENT_IBASE_END,
	      IMPLEMENT_EMBEDDED_IBASE(), IMPLEMENT_EMBEDDED_IBASE_END,
	      IMPLEMENT_IBASE_EXT(), and IMPLEMENT_IBASE_EXT_END.
	    - Changed the prototype for iSCF::QueryClassList() so that it no
	      longer returns the array of matching class names via a csVector.
	      It didn't seem correct for the SCF header file (scf.h) to rely on
	      a high-level class such as csVector considering that scf.h is
	      intended to be extremely bare-bones and low-level.  Now the array
	      of matching class names is returned as a (char const**).	Also
	      rewrote and simplified QueryClassList().
	- Eric Sunshine worked around a nasty problem on NextStep where
	  csMeshWrapper and csTerrainWrapper objects were not being removed
	  from their containing sector(s) when either of these objects was
	  deleted.  When a C++ object is destroyed, its destructor is invoked.
	  After the destructor completes, the object's `vptr' is modified to
	  point at the `vtbl' of its immediate superclass, and then the
	  destructor for that class is invoked.	 This process repeats until the
	  destructors of all superclasses are invoked.	In this way, an object
	  transmogrifies into each of its superclasses until the raw memory for
	  the object is finally freed.	This transmogrification into an
	  object's superclass is supposed to occur _after_ the destructor for
	  the current class is finished.  Unfortunately, the NextStep compiler
	  performs the transmogrification immediately _before_ the destructor
	  for the current object is invoked.  This means that virtual methods
	  which are invoked in an object's destructor will actually invoke
	  methods from its superclass instead of correctly invoking its own
	  methods.  In the case of csMeshWrapper and csTerrainWrapper, their
	  destructors were invoking an engine method to remove themselves from
	  their occupied sectors, and those methods were invoking the virtual
	  QueryInterface(iMeshObject) method of each of these objects.
	  Unfortunately, since these objects had already been transmogrified
	  into their superclass (csPObject) by the time
	  QueryInterface(iMeshObject) was invoked, they were unable to respond
	  with an iMeshObject (since csPObject does not implement iMeshObject).
	  The failure to respond with an iMeshObject resulted in these objects
	  not being removed from the containing sectors, which later resulted
	  in a crash since the objects themselves had been deleted (thus the
	  sectors had dangling pointers to these objects).  To work around this
	  problem, it was necessary to invoke the code for removing the objects
	  from the sector(s) prior to destruction time.	 This was accomplished
	  by writing a custom DecRef() method for each class and having that
	  method perform the removal.  Since these objects must now be detroyed
	  via DecRef() rather than via `delete', their destructors were also
	  made private.
	- Eric Sunshine eliminated several compilation warnings from
	  portal.cpp.
	- Norman Kramer removed #ifdef DO_SOUND and replaced it with test
	  for soundrenderer being not NULL (blocks and walktest).
	- Justin Miller fixed some bugs in the OpenGL renderer with regards
	  to trying to cache textures for materials without them.
4-Jun-2001
	- Added csTransform This2OtherRelative() and Other2ThisRelative()
	  which operate on csPlane3.
	- Removed a couple of csIntersect3::Plane() routines to make things
	  simpler.
	- Did a little work on plane clipping in OpenGL renderer. It is
	  almost working perfectly now but there are still a few problems/bugs
	  here and there.
	- Fixed two bugs with csPolygon3D::IsTransparent() and polygons using
	  MIXMODE. When such a polygon was used on a portal the portal would
	  not detect that the polygon was transparent and the texture would
	  not be drawn.
	- Philip Wyett fixed output of OpenGL clipper detection by using
	  SysPrintf.
	- Wouter Wijngaards did the following to the iso engine:
	    - Fixed the transform for iso mesh objects. The current transform
	      causes MUCH less disforming than the previous. The secret to
	      this is by not translating 0,0,minz, but by  -minz*3/4,
	      -minz/4, +minz/4. Which is soooo obvious...
	    - Fixed potential mesh lighting problems.
	    - Adjusted the fountain to look nicer (a bit wider).
	- Christopher Nelson updated table code so that it works, with the
	  caveat that named tables are still not up. Changed all "char"
	  references to "unsigned char" in case someone needs the upper 128
	  characters of the UTF-8 or ASCII table in matching.  This is
	  primarily for international codepage support.
	- Christopher Nelson also added final code for named table
	  recognition in the BuildTableLeaf function. Named tables (character
	  classes like alpha, alnum, space, upper, lower, print, graph,
	  cntrl, xdigit, digit) are now fully supported syntactic elements.
	- Martin Geisse did further work on the RTTI system:
	    - Added iDataObject as an interface for csDataObject.
	    - The above change makes it possible for walktest to use SCF
	      instead of RTTI.
	    - Rewrote csNodeIterator to use SCF instead of RTTI.
	- Martin Geisse removed the now unused 'old' RTTI system.
	- Norman Kramer did a lot of cleanup on CS with regards to querying
	  plugins (like iVFS, iGraphics3D, ...).
	- Norman split sound loaders into multiple plugins.
	- Norman added QueryClassList to scf.
	- Norman removed entries for soundloaders other than multiplex.
	  Removed imgplex.cfg. No longer needed. The image multiplexer now
	  uses QueryClassList.
	- Norman: the sound loader multiplexer now uses QueryClassList to
	  determine the list of sound loaders to use.
	- Eric Sunshine updated out-of-date Mingw comment in enginep.mak.
	- Eric Sunshine fixed the makefiles for map2cs, mdl2spr, scfreg,
	  scftutor, and gfxtest so that these applications successfully link on
	  NextStep in `debug' mode.
	- Eric Sunshine fixed the makefile `clean' target so that it only
	  strips the trailing slash (/) from the $(OUTBASE) and $(OUTDLL)
	  variables rather than removing all slashes.
	- Eric Sunshine fixed the makefile `install' target so that it now
	  takes the makefile variable $(OUTDLL) into account when installing
	  plugin modules.  Plugin modules are now installed into
	  $(INSTALL_DIR)/$(OUTDLL) when $(OUTDLL) exists, rather than
	  $(INSTALL_DIR)/lib.
	- Eric Sunshine worked around a very nasty problem where the `install'
	  target would try to build out-of-date or missing plugin modules using
	  the wrong commands!  It would try building these modules using with
	  the commands to build a static library.  This problem was caused by
	  the `install_all' target depending upon the generated plugin module
	  files.  Plugin modules must be built with the makefile variable
	  MAKE_DLL set to `yes', and unfortunately, by the time the
	  `install_all' target runs, it is already too late to set that
	  variable.  Furthermore, there is no way to individually set that
	  variable for each out-of-date or missing plugin module which must be
	  built.  There is no simple solution to the problem of MAKE_DLL=yes
	  not being set at the time that `install' runs, thus for now, I
	  modified the `install' target so that it no longer depends upon the
	  generated plugin module files.  It will still try to install all of
	  the plugin modules, but it will no longer automatically build
	  out-of-date or missing ones.
	- Eric Sunshine fixed several problems with the new sound loader plugin
	  makefiles.
	- Eric Sunshine fixed a bug in imgplex.mak where it neglected to
	  install its imgplex.cfg configuration file.
	- Eric Sunshine fixed a bug in csws.mak where it neglected to install
	  its csws.cfg configuration file.
	- Eric Sunshine fixed the Apple/NeXT ports so that they are now capable
	  of finding their plugin modules based upon the setting of the CRYSTAL
	  environment variable.
3-Jun-2001
	- Added new version of csFrustum::ClipToPlane() which accepts a
	  general plane instead of two vertices.
	- Renamed csPlane3::GetNormal() to Normal(). Also for csDPlane.
	- Martin Geisse added iDynLight::GetNext() and moved csObjectIt from
	  the old RTTI system to SCF.
	- Martin extended iCameraPosition and iEngine with functions from
	  csCameraPosition and csEngine. Levtool now uses the engine only
	  through interfaces.
	- Martin also added GetWarp() to iPortal and continued to change
	  levtool to use the engine through interfaces (seems like I
	  overlooked some cases last time :-)
	- Wouter Wijngaards extended iso engine so that you can now use mesh
	  objects in the iso engine. They are wrapped in a iIsoMeshSprite
	  class, and can be handled like any other iso Sprite. In the isotest
	  app you can see a fountain mesh, and a cube.
	- Wouter Wijngaards enabled lighting for mesh objects used in the
	  iso engine. Iso engine now exports a fake iLight interface.
	- Wouter fixed the perspectiveaspect, turned out to be a simple
	  mistake. The cube mesh now shows up at the correct spot - but looks
	  a bit weird due to uninited lighting.
	- Wouter added csgeom to the linex2d canvas, to fix csRect reference.
	- Philip Wyett started adding the new Direct Draw 8 plugin (not
	  Direct3D yet!).
	- Michael Voase did some more work on motion manager.
	- Eric Sunshine eliminated a couple compilation warnings in isoview.cpp
	  regarding assignment of float to integer.
	- Eric Sunshine eliminated several compilation errors from metasys.cpp.
	- Eric Sunshine made the following changes to the cslexan plugin:
	    - Renamed csrdparse.cpp and csrdparse.h to rdparse.cpp and
	      rdparse.h, respectively, for DOS 8.3 conformance.
	    - Added missing `#include "cssysdef.h"' to all .cpp files.
	    - Removed inclusion of cssysdef.h from ivaria/lexan.h.  (This file
	      should never be included by headers.)
	    - Now compiles with compilers which do not natively support the C++
	      `bool' type.
	- Eric Sunshine improved efed.pl so that it prints a meaningful error
	  message when the user specifies an invalid Perl regular-expression,
	  rather than printing some apparently unrelated error message about an
	  unknown function much later in the script.
	- Eric Sunshine fixed jpgio.mak and pngio.mak so that they work when
	  USE_PLUGINS=no is specified.
	- Eric Sunshine fixed vsh.mak and vfstest.mak so that these programs
	  can link when USE_PLUGINS=no.
	- Eric Sunshine fixed the makefiles so that g2dtest, perftest, and
	  csdemo can link successfully when USE_PLUGINS=no.  These programs
	  required the CSGFX library.
	- Eric Sunshine fixed a dormant bug in csCurveTemplate where it
	  incorrectly invoked DECLARE_IBASE_EXT() with an argument of csObject
	  rather than csPObject.
	- Eric Sunshine worked around a bizarre NextStep compiler bug where
	  calls to csBezierTemplate::QueryInterface() incorrectly invoked
	  csObject::QueryInterface() rather than correctly invoking
	  csCurveTemplate::QueryInterface().
2-Jun-2001
	- Fixed a very old bug in the OpenGL renderer. Triangle meshes as
	  seen through a mirror did make backface culling operate differently.
	  This resulted in the inside of the object being visible through
	  a mirror.
	- Fixed another bug in OpenGL clipper with regards to mirroring.
	- Martin Geisse changed the 'bumptest', 'demosky', 'metademo' and
	  'video' applications to use the engine only through SCF interfaces.
	- Philip Wyett removed the DirectX 6.1 plugin.
	- Wouter Wijngaards created a start for an iso mesh sprite.
	  Wraps around a mesh object, and that becomes a nice sprite in the
	  isometric engine. I've fudged the transformations now, so that the
	  perspective transformation will be almost like the isometric one,
	  for small objects (say for animated 3d sprites ;) ). It does not
	  work yet. The code is commented out in apps/isotest, with a #if.
	- Christopher Nelson made some changes to the cslexan parser, added
	  most of the table support.  Still need to add character classes
	  (named tables) and finish the table build sequence.
	- Philip Wyett removed cslexan from build process until repaired.
	- Christopher Nelson writes:
	  Dumb me: I forgot that the make files automatically compile ALL
	  .cpp files in the source directory, not just specific ones.  I
	  hadn't intended csrdparse.cpp to be included in the build process
	  yet, but I also wanted to update the repository so that I could
	  work on it at home too.  I fixed the build problem, so cslexan
	  should compile normally again.  Sorry for the trouble Philip, and
	  thanks for letting me know.
	- Philip Wyett added cslexan to build process.
1-Jun-2001
	- Martin Geisse changed the way in which csEngine represents a
	  csObject. It is no longer a subclass of csObject but instead has
	  a csObject as a member. More accurately, this member is not a
	  csObject but a subclass which overrides the SCF methods to serve
	  as an embedded interface. Also added an accessor method for it,
	  QueryCsObject().
	- Martin also optimized SCF in two cases:
	    - Normal (non-embedded) SCF objects increase and decrease the
	      reference count of their scfParent only once at construction
	      and destruction.
	    - Embedded interface have no longer a reference count because
	      it was not used anyway.
	- Christopher Nelson writes:
	  These are the new general RE parsing routines. They support
	  alternates, all wildcards, and have rudimentary support for
	  tables. Nesting alternates and wildcards is allowed.	Silly
	  syntax is ignored, and some syntactical errors are recovered from.
	  Forgetting ')', ']', or specifying an unknown named table are fatal.
	- Philip Wyett fixed compiler warning in "Create2DSprites(void)"
	  caused by:
	    csEngine* engine = (csEngine*)engine;
	  when it should be:
	    csEngine* engine = (csEngine*)Engine;
	- Philip also modified video app to use iThingState and brought
	  into line with Jorrits changes.
	- Michael Voase fixed a couple of additional bugs in motion
	  manager. Changed csAppliedFrameVector from TYPED_VECTOR to
	  TYPED_VECTOR_NODELETE. Note, motion manager now throws a compiler
	  warning, however it is due to the NODELETE typed vector. I could
	  fix csVector, but I would need to clear it with Jorrit first since
	  CS is HEAVILY dependent on csVector. If I break it, there will be a
	  lot of pieces to keep 8).
	- Michael Voase did more bug stomping in motion manager. Removed
	  reverse flag, its now handled by setting a negative rate. Recoded
	  UpdateAppliedMotion() to actually *work*. Removed the total time
	  from ACTIONSET. Total time is now taken as the last frame time as
	  it was before. Added a frame count check to ApplyMotion. It will
	  not compile a frameset with less than two frames ( however, if
	  people want this feature please say so and I will add it... I
	  just dont think its necessary ).  Adjusted spr3dldr and walktest
	  to suit. I would consider motion manager now at beta and ready for
	  general testing and possible inclusion into RC 1.0 ( ie, I have
	  used and tested all available features ). SCF versions for
	  motion.h have been bumped to 0.9.x to indicate beta test phase.
	  Note: You will need to do a recompile with depend to get spr3dldr
	  and walktest going again.
	- Removed the old and obsolete iThing interface. Added
	  GetPrivateObject() to iThingState.
	- Extended iSector with functions to query/add/remove collections.
	- Extended iSector with GetNumLights() and GetLight().
	- Added iSector::HitBeam().
	- Added GetPrivateObject() to iCollection.
	- Added iEngine::GetNumMeshFactories() and GetMeshFactory().
	- Rationalized a bit of the engine API. Changed the following (replace
	  'Bla' in the following with whatever it is you are working on):
	    - csSector: GetNumberBla() to GetBlaCount()
	    - iSector: RemoveBla() to UnlinkBla()
	    - iSector: FindBla(char* name) to GetBla()
	- Changed csCameraPosition::Load() to work with iCamera and iEngine
	  instead of csCamera and csEngine.
	- Added iMeshWrapper::GetChildCount() and GetChild().
	- Added iMeshWrapper::GetRadius().
	- Reworked walktest so that it uses SCF interfaces more instead of
	  the direct classes. This avoids a lot of GetPrivateObject() calls.
	- Fixed all other apps to the changes above.
	- Removed the DDG landscape engine.
	- Fixed a bug in the landscape engine. If a light is after a triangle
	  it would actually subtract from the base color. Thanks to Wouter
	  Wijngaards for spotting this. This also improves speed of dynamic
	  lighting because there is no more need to clamp down.
	- Further improved walktest by removing references to csBla classes
	  and replacing them with iBla.
	- Added iMeshWrapper::GetScreenBoundingBox().
	- Added GetCollider() which works with iObject.
	- Added iSector::FollowSegment().
	- Eric Sunshine removed obsolete references to
	  crystalspace.string.server from several files.
	- Eric Sunshine worked around a NextStep compiler limitation where it
	  disallows C++ expressions in functions declared `extern "C"'.	 This
	  problem was triggered by the SCF module_scfInitialize() function,
	  which is created by the EXPORT_CLASS_TABLE() macro, and which
	  contains the C++ expression `iSCF::SCF = SCF'.
	- Eric Sunshine repaired the NextStep plugin generation process
	  (DO.SHARED.PLUGIN.POSTAMBLE in nextstep.mak) to take into account
	  the name change: module_GetClassTable() -> module_scfInitialize().
	  Also repaired the NextStep documentation in this regard.
	- Eric Sunshine fixed a problem which prevented `simple' from
	  successfully linking on NextStep.  The problem was that the csparser
	  library still had dependencies upon csengine on NextStep.  The
	  problem was that the NextStep compiler has the peculiar behavior of
	  generating references to all symbols which are seen by it even if no
	  actual code refers to those symbols.	Thus, even unnecessarily
	  including a header file will result in dependencies upon the symbols
	  in the header.  In this case, impexp.cpp, which is part of csparser,
	  was unnecessarily including csengine/thing.h and csengine/meshobj.h.
	  Furthermore, csloader.h was unnecessarily including the obsolete
	  loadinfo.h header which contains forward references to a couple
	  csengine classes.  I also moved loadinfo.h to the CVS Attic since it
	  is no longer used.
	- Philip fixed some warnings in the python plugin.
	- Eric Sunshine disabled CS_EXTENSIVE_MEMDEBUG for the Apple/NeXT ports
	  since some of the Apple/NeXT compilers can't properly grok it.
	- Eric Sunshine modified the following classes to embed SCF interfaces
	  rather than inheriting them in order to work around multiple-
	  inheritance problems with the NextStep compiler:
	    iPolyTexFlat     -> csPolyTexFlat
	    iPolyTexGouraud  -> csPolyTexGouraud
	    iPolyTexLightMap -> csPolyTexLightMap
	- Eric Sunshine fixed a nasty bug in csEngine where a call to
	  QUERY_INTERFACE(engine,iObject) would fail even though csEngine
	  inherits from csObject which implements iObject.  For the technically
	  inclined, the problem was that csEngine was using DECLARE_IBASE and
	  IMPLEMENT_IBASE when it should have been using DECLARE_IBASE_EXT and
	  IMPLEMENT_IBASE_EXT.
31-May-2001
	- In an effort to understand how the keyframer section in 3DS
	  works I extended 3ds2lev verbose option to also list the contents
	  of that section. Unfortunatelly I don't understand how I'm supposed
	  to extract frame animation from that. Any help would be appreciated.
	- Fixed a bug in iso engine. The clipper was one pixel too big.
	- Added several CS_ASSERT's in another effort to nail the iso+OpenGL
	  bug.
	- Wyatt Miler fixed NeXTSystemDriver.cpp and NeXTDriver2D.cpp to
	  reflect Phlip's rename of version.h to csversion.h
	- Eric Sunshine renamed csversion.h to csver.h to conform to DOS 8.3
	  naming convention.
	- Eric Sunshine performed some textual re-ordering of csvector.h in
	  order to work around an OpenStep compiler bug where unlinkable object
	  files are generated if an inline function calls a second inline
	  before the compiler has seen the definition of the second function.
	- Fixed a VERY bad bug in the iso-engine. It was not initializing
	  a structure correctly. This caused very bad crashes with OpenGL
	  (because sometimes use_fog was set to true).
	- Eric Sunshine eliminated a new circular reference which showed up
	  when the global iSCF::SCF variable was introduced into scf.cpp.  The
	  problem was that plugin modules require this variable, thus making it
	  necessary to link plugins with scf.o.	 Unfortunately, scf.o makes
	  reference to several other symbols, such as those in findlib.o from
	  cssys.  The upshot was that making plugins rely upon iSCF::SCF in
	  scf.cpp caused plugins to also depend upon findlib.o, among others.
	  I fixed this by moving the definition of iSCF::SCF to its own
	  implementation file (scfimp.cpp).  Now plugins only need to link with
	  scfimp.o rather than scf.o.  This removes the plugins' dependency
	  on findlib.o and other object files.
	- Martin Geisse changed the QUERY_INTERFACE_FAST macro slightly. It
	  now doesn't take the ID variable as a parameter anymore, but instead
	  assumes that a variable with the name scfID_InterfaceName exists.
	  Also added macros to make declaration of this variable easier. All
	  these changes should make usage of QUERY_INTERFACE_FAST a bit
	  easier. If they cause problems, it is still possible to use
	  QueryInterface() directly. Finally, I replaced the csObject-based
	  RTTI system with SCF in many cases.
	- Martin Geisse replaced usage of the 'new' RTTI system with SCF in
	  many cases.
	- Martin Geisse further worked to replace the pseudo-RTTI system
	  with SCF: The GET_CHILD_OBJECT and related macros now use SCF. In
	  addition, there are now two versions of each macro, a fast and a
	  slow one, with similar differences as the fast and slow versions
	  of QUERY_INTERFACE.
	- Martin Geisse removed the now unused 'new' RTTI system and the
	  string server plug-in.
	- Martin fixed a problem with the gamecore where it was using the
	  old SCF functions.
	- Michael Voasse did the following:
	    - Added a couple of calls to motion manager ( IsLast & IsFirst ).
	    - Fixed a couple of bugs in MM.
	    - Added a general purpose thread safe queue, csQueue, based on
	      the system event queue and inspired by csVector. Inside are
	      two macros, DECLARE_TYPED_QUEUE( name, type, queue length ) and
	      DECLARE_TYPED_QUEUE_BASE( same params ). This isnt wonderfully
	      user friendly yet, but it is tested and does work.
30-May-2001
	- Completely removed Crystal Clear from CS. It is now obsolete
	  and no longer maintained. This removal was done with the permission
	  of Michael Dale Long.
	- Enhanced iMaterial with a number of methods to set various
	  stuff.
	- Added iEngine::CreateBaseMaterial() to create a csMaterial
	  and return the iMaterial. This allows the engine to be used
	  as a plugin in more places.
	- Changed the procedural textures in csfx to use iEngine,
	  iMaterialWrapper, and iTextureWrapper instead of csEngine,
	  csMaterialWrapper, and csTextureWrapper. That way these classes
	  can be used together with the engine as a plugin.
	- Rewrote the crossbuild/impexp part of the loader to use iThingState
	  instead of csThing directly. In additional also use iTextureWrapper
	  and iEngine instead of csTextureWrapper and csEngine.
	- Added iKeyValuePair and iMapNode which are SCF interfaces for
	  csKeyValuePair and csMapNode.
	- Added iEngine::CreateMapNode() and iEngine::CreateKeyValuePair()
	  to create above objects.
	- The above changes make the loader independent of the engine library.
	- Fixed a bug in the SCF code of csCameraPosition. Please people,
	  do NOT use DECLARE_IBASE if you inherit from something that already
	  declares IBASE. Use DECLARE_IBASE_EXT()!!!! In addition use
	  IMPLEMENT_IBASE_EXT!!!
	- Rewrote simple to use the engine as a plugin.
	- Removed simplep since that app is now no longer useful (as its
	  only purpose was to demonstrate how to use the engine as a plugin,
	  but simple does that now).
	- Philip Wyett moved snddata.o from libs to include to aid creation
	  of a CS developers SDK release package and aid in the porting of
	  walktest outside the CS tree.
	- Philip eliminated compiler warning in terrfunc.
	- Fixed a bug in OpenGL renderer with procedural textures. They
	  were calling glTexEnv() to set the mode to GL_REPLACE but this
	  caused problems for the rest of CS since the rest of CS wants
	  GL_MODULATE.
	- Fixed iso engine, bumptest, mazed, and demosky after my changes
	  above.
	- Eric Sunshine made the following changes to CS/bin/win32conf.mak:
	    - Eliminated unnecessary use of >>.	 Now uses simple >.  This
	      change should prevent confusion by some future maintainer.
	    - Eliminated several unnecessary makefile statements which could
	      also have confused a future maintainer.  Also simplified the
	      existing makefile statements.
	- Eric Sunshine eliminated a compilation warning in csloader.h
	  regarding `texh' possibly being used uninitialized.
	- Michael Voasse added accessor functions to iCameraPosition for
	  sector, position upward vector and forward vector.
	- Eric Sunshine added a test to CS/bin/comptest.sh to determine if the
	  compiler is able to understand CS/include/qsqrt.h.  If the compiler
	  is unable to deal with this file, then the CS_NO_QSQRT flag is set in
	  both config.mak and volatile.h.  This test should allow users of
	  RedHat version 7 to build the project without undue effort, since the
	  compiler which shipped with RedHat 7 is quite buggy and is known to
	  fail disastrously with an `internal compiler error' on qsqrt.h.
	- Eric Sunshine worked around a silly texi2html bug where it complained
	  about a @node and @subsubheading both named "Lighting" (even though
	  the @subsubheading wasn't even related to the @node).
	- Eric Sunshine made the following changes to the Texinfo documenation:
	    - Repaired a very significant number of Texinfo mark-up errors and
	      problems which were introduced into the documentation over the
	      last couple months.
	    - Eliminated all overfull and underfull `hbox' warnings from TeX.
	    - Removed unnecessary PNG images which duplicated JPG images for
	      the WinCVS tutorial.
	    - Renamed the WinCVS tutorial images so that they respect DOS 8.3
	      naming conventions.
	    - Fixed the WinCVS tutorial so that it also builds in Info mode
	      where images are not available.
	    - Fixed several INTEL -> X86 references which Philip missed when
	      he made a symbolic change of INTEL to X86 to a couple facets of
	      the project.
	    - Updated Robert Bate's email address in several locations.
	    - Updated out-of-date URLs in the MacOS/X, OpenStep, NextStep
	      documentation.
	- Philip Wyett renamed CS/include/version.h to csversion.h in order to
	  avoid some conflict he encountered with a version.h from some other
	  project being included instead.
	- Martin Geisse applied a change to Norman's fix (regarding the
	  assignment of -1 to the unsigned variable scfID_?). The correct
	  value IS -1, not 0. -1 represents an invalid value, while 0 is the
	  first valid value. The correct term is therefore (uint32)-1.
	- Added some asserts in iso plugin in an effort to find a bug in
	  iso+OpenGL.
	- Michael Voasse added csversion.h to cswsaux.h and sequence.cpp.
29-May-2001
	- Michael Voasse added accessor functions to iCameraPosition for
	  sector, position upward vector and forward vector.
	- Philip Wyett fixed Michaels change by adding missing 'const' from
	  GetSector().
	- Wouter Wijngaards did the following:
	  Fixed the shell detection on win32gcc. It was broken.
	  Both Erics and Philips changes were not correct :-). Though I
	  like the new win32conf.mak in bin, this file is used instead of
	  the Makefile still.
	    - Copied some settings from the main Makefile so the same
	      conditions are applied in the win32conf.mak.
	    - In win32conf.mak >> is used instead of >.
	    - Removed the $" from the testecho in win32conf.bat
	    - The cat conftest.1 and cat conftest.2 statements I have left
	      removed. They seem unneccesary now. If later, some glitches
	      arise (probably due to weirdness in cmd.exe), these statements
	      may need to return in order to fix.
	  Detecting the difference between cmd.exe and some fancy shell is a
	  matter of fine detail.
	- Started working on visibility algorithm in terrain engine. Does
	  not work yet.
	- Wouter Wijngaards added data/stdtex.zip to the files to install.
	- Martin Geisse did another major SCF change:
	    - QueryInterface() now takes the interface ID number as the
	      parameter, not the interface name. The IMPLEMENT_IBASE code
	      should already become faster by this.
	    - Added another macro, QUERY_INTERFACE_FAST, that takes the
	      ID number as parameter instead of the name.
	- Martin Geisse also fixed a bug in the hashmap iterator code.
	- Norman Kramer fixed a compile error in scf.h: static scfId_ ->
	  static uint32 scfId_ also initialized to 0 since its an uint32.
	  I just submit that fix since nothing compiled on linux without it,
	  dont know if everything will now work, but at least it compiles.
28-May-2001
	- Fixed all the plugins makefiles so that they now have an additional
	  CSUTIL in their link line. This satisfies one-pass linkers after
	  the changes Martin did to SCF.
	- Added virtual destructor to scf.
	- Added an experimental optimization by using the GL_TEXTURE matrix
	  to scale texture layers instead of scaling manually. On my ATI
	  this does not seem to speed-up so it is currently disabled. Will
	  try on other cards later. To enable it set EXP_SCALE_MATRIX to 1.
	- Removed the now obsolete 'alpha' member in G3DPolygonDP. 'alpha'
	  is now part of the mixmode that is also in that structure.
	- Added CS_FX_SETALPHA_INT() which accepts an alpha between 0 and
	  255 (and complements the already existing CS_FX_SETALPHA which
	  accepts alpha between 0 and 1). Various parts of CS were actually
	  calling CS_FX_SETALPHA with alpha between 0 and 255 which is
	  obviously wrong. This fixes a number of loader bugs (in particular
	  parsing ALPHA/MIXMODE of material layers, ball loader, cube loader,
	  emit loader, explo loader, fire loader, fountain loader, rain loader,
	  snow loader, spiral loader, spr2d loader, spr3d loader, surf loader,
	  and thing loader).
	- Cleaned up OpenGL renderer a little with regards to setting up
	  blending modes. The SetupBlend() routine can now do all this setup.
	- Optimized OpenGL renderer a little by removing all calls to
	  glTexEnvf() and calling that routine once at init. The same parameter
	  was used in all cases (GL_MODULATE). This increases FPS considerably.
	- Optimized OpenGL::SetupBlend() by remembering the previous blending
	  state.
	- The common OpenGL canvas no longer disables depth testing and
	  blending. It is now the OpenGL 3D renderer which does that right
	  before going into 2D rendering mode.
	- Fixed a bug in the common OpenGL canvas handling. It disabled
	  GL_DITHER without restoring it.
	- Another optimization: client states (used for glDrawElements())
	  are now also cached.
	- Martin Geisse confirmed that the global iSCF pointer is valid for
	  plugins and CREATE_INSTANCE works from within plugins. Consequently,
	  the system driver's implementation of iSCF was obsolete and removed.
	  The global iSCF pointer is now used everywhere, possibly through
	  the standard SCF macros.
	- Martin did some further work on SCF:
	    - Removed some obsolete comments in scf.cpp.
	    - Fixed a (char*) argument which should be (const char*).
	    - Added a string set member to csSCF which serves as a registry
	      for interface names. Added an iSCF method to request a string
	      from it.
27-May-2001
	- Philip added CSSYS dependency to gamecore plugin.
	- Martin Geisse changed the main export function for dynamic
	  libraries used by SCF: This function is now called
	  'ModuleName_scfInitialize' and takes an iSCF* as argument which is
	  used to initialize the global iSCF::SCF variable for each module.
	  If NULL is passed instead, the class table is returned but no SCF
	  functions may be used in the module (scfreg is an example for this).
	- Martin changed SCF cleanup functions. csSCF::Cleanup () now deletes
	  the main csSCF object, which de-initializes everything in its
	  destructor.
	- Martin fixed a problem in SCF: To get the name of the exported
	  function in a dynamic library, SCF now splits the input name into
	  path and file name and only uses the file name to construct the
	  function name. This makes it possible to move the dynamic libraries
	  to another directory.
	- Norman Kramer added -tl option to 3ds2lev for making texture origin
	  lower left instead of upper right.
26-May-2001
	- Martin Geisse started modifying SCF:
	    - iSCF now contains a static member that is an (iSCF*) and points
	      to the only existing instance. This instance is now created and
	      managed by SCF itself. This was done by the system driver
	      before. The system driver still implements iSCF. When this
	      interface is queried, the global iSCF is returned instead.
	    - SCF functions no longer exist (in fact they still do, but they
	      are private to SCF now). Instead the methods of iSCF should be
	      used. The only exception is scfInitialize, which now also
	      creates the global instance.
	    - As a consequence, REGISTER_STATIC_CLASS and
	      REGISTER_STATIC_LIBRARY now call scfInitialize if the global
	      iSCF is NULL.
	    - The methods of iSCF have been renamed to remove the 'scf'
	      at the beginning of each method name. This conforms to CS
	      naming style.
	    - Removed the C-style functions and the wrapper functions of
	      csSCF. The member functions of csSCF contain this code
	      directly now.
	    - Removed some calls to scfInitialize from within SCF functions.
	      Previously it was possible that SCF functions are called before
	      the first call to scfInitialize; this is not possible anymore.
	- Martin removed the obsolete iSCF implementation of the system driver.
	- Philip Wyett fixed cs.i by removing "scf" from begining of
	  "CreateInstance ()" to bring into line with Martins changes. Also
	  manually updated "cs_pyth.cpp" to take account of the changes,
	  which I know I really shouldn't as it's is generated
	  automatically - so if I did it wrong it will be corrected
	  eventually - hey but it compiles again. ;-)
25-May-2001
	- Eric Sunshine removed a win32gcc-specific shell-related test case
	  from CS/Makefile in order to avoid polluting this otherwise
	  platform-independent resource with platform-specific specializations.
	  Instead, moved the win32gcc-specific test case to the new file
	  CS/bin/win32conf.mak.
	- Eric Sunshine provided a slightly more generalized solution in
	  enginep.mak to the problem of `dllwrap' failing to export
	  engine_GetClassTable() when Mingw is used.  Also added a verbose
	  explanation of the problem to enginep.mak.  Ultimately, however,
	  someone who uses Mingw needs to figure out how to force dllwrap to
	  correctly emit symbols exported from csengine.lib.  Perhaps this
	  person can contact people on the Mingw mailing list.	Finding a more
	  correct solution to this problem is important, as the current hack is
	  really unacceptable in the long run.
	- Eric Sunshine eliminated a couple compilation warnings about negative
	  values being assigned to unsigned quantities in demo.cpp.
	- Eric Sunshine fixed outdated comments in rgbpixel.h.
	- Eric Sunshine fixed a couple compilation errors which were recently
	  introduced into simple.cpp where iTextureWrapper and iTextureHandle
	  were unknown.
	- Eric Sunshine fixed several problems where Brandon Ehle committed
	  changes to dead files in CVS's Attic.
	- Eric Sunshine removed a PS2 specialization which Brandon Ehle added
	  to CS/include/cssys/unix/csosdefs.h.	Why Brandon placed this
	  specialization in the Unix configuration file rather than the PS2
	  configuration file (which is the obviously correct place) is a
	  mystery.
	- Eric Sunshine added a CSGFX dependency to enginep.mak so that the
	  engine plugin can load on NextStep.  This probably shouldn't be
	  required, but some file somewhere in the engine is probably
	  unnecessarily including csimage.h.  The real solution is to find this
	  unnecessarily inclusion and eliminate it.
	- Eric Sunshine changed the `sequence' plugin so that it implements
	  iPlugIn via embedding rather than inheritance in order to work around
	  NextStep compiler bugs.
	- Philip Wyett fixed broken fog with ATI Radeon.
	- Philip made CSENGINE a dependency of engine plugin (but Eric reverts
	  this change later).
	- Norman Kramer changed the sound arts test program to use the new
	  renderer (now have some weirdo effects with ifstrem in the mcop
	  library). Rewrote the makefile.
24-May-2001
	- Eric Sunshine fixed several problems in lexan.mak.
	- Eric Sunshine eliminated compilation warning from csobject.cpp about
	  csObjectIterator having virtual functions but non-virtual destructor.
	- Eric Sunshine eliminated compilation warning about implicit
	  declaration of strncmp() in NeXTMenu.m on MacOS/X.
	- Eric Sunshine fixed several compilation errors on big-endian
	  platforms in wavefile.cpp.
	- Eric Sunshine eliminated several compilation warnings about unused
	  variables in wavefile.cpp.
	- Eric Sunshine eliminated several compilation warnings from NeXTView.m
	  and NeXTDelegate2D.m by including needed header files on MacOS/X.
	- Eric Sunshine eliminated several compilation warnings from
	  inf_g3d.cpp regarding mismatch of printf() format directive and
	  incoming argument.  The warnings were caused by different definitions
	  of cs_time on various platforms.
	- Eric Sunshine eliminated several compilation warnings in bmptest.cpp
	  regarding unused variables.
	- Eric Sunshine fixed map2cs so that it uses the portable strcasecmp()
	  rather than the unportable stricmp().
	- Eric Sunshine eliminated a compilation warning in demoop.cpp caused
	  by mismatch of printf() format directive and incoming argument.
	- Eric Sunshine eliminated a compilation warning from cthing.cpp
	  regarding unused variable.
	- Eric Sunshine fixed a compilation error recently introduced into
	  bumptest.cpp where the type iTextureWrapper was unknown.
	- Eric Sunshine fixed several compilation errors recently introduced
	  into demosky.cpp where iGraphics2D was unknown.
	- Eric Sunshine added CSUTIL to the DEP.NEXT2D dependency list in
	  next2d.mak so that the `next2d' plugin can be loaded by scfreg.
	  Without this dependency, the csConfigAccess class was unresolved.
	- Eric Sunshine fixed bug in scftutor which prevented the `dog' and
	  `worm' plugins from loading.	When Philip changed the names of the
	  associated plugins from `Dog' and `Worm' to `dog' and `worm' in the
	  makefile, he forgot to change the SCF module names in dog.cpp and
	  worm.cpp.
	- Eric Sunshine converted use of `static_cast' in cslexan to the
	  `STATIC_CAST' macro so that the plugin can build cleanly with
	  compilers which do not support the new casting syntax.
	- Eric Sunshine worked around another bizarre NextStep compiler bug
	  where it failed to grok an iDataBuffer reference (&) in the
	  csLexicalAnalyzer::stream_state structure.
	- Eric Sunshine removed rogue and incorrect `inline' keywords from
	  scfstr.h and scfstr.cpp which were causing linking problems on some
	  platforms.
	- Eric Sunshine made the following changes to the `cslexan' plugin:
	    - Added a bunch of missing SCF goop.  The plugin module can now
	      be successfully loaded.
	    - iLexicalAnalyzer::GetMatchedText() now returns an iString rather
	      than a csString.	Returning an iString will prevent heap-related
	      problems on some platforms.
	    - iLexicalAnalyzer no longer incorrectly inherits from iPlugIn.
	      iPlugIn is just an implementation detail and was placing an
	      unnecessary restriction on the iLexicalAnalyzer interface.
	      (This is actually a common problem throughout the project, so it
	      is not surprising that it showed up here as well.	 We need to fix
	      all of those other incorrect cases.)
	- Michael Voasse did the following:
	    - Rewrite of csMotion.
	    - Modify csMotionLoader accordingly.
	    - Modify spr3dldr and walktest for new applymotion parameter.
	- Philip Wyett did some quick code cleanup and optimization to the
	  motion plugin.
	- Martin Geisse modified levtool, bumptest, and demosky in several
	  places to use the engine through SCF.
	- Martin fixed a case in almost all mesh loaders where they did not
	  use the engine through interfaces.
	- Martin made the following changes:
	    - Added Draw(), DrawFunc() and SetContext() to iEngine.
	    - The above functions now take an iCamera and iClipper2D as
	      parameters (instead of csCamera and csClipper).
	    - csPoly2D::ClipAgainst also takes an iClipper2D now.
	    - Added GetClipper() to iView.
	    - Cosmetic cleanup of csView.
	    - Removed some unused csClipper includes and forward declarations.
	- Thomas Hieber writes about map2cs:
	  Hurray! Walktest doesn't crash any more, when loading my converted
	  sample map. It now crashes a few seconds after loading, when I
	  turn to the left in the map. (change was some more adjustments to
	  the new map file format) I am pretty sure, that some untested
	  features (like 3D models or sprites) still don't work. (I don't have
	  map files that use these features, so I can't test this...)
23-May-2001
	- Philip Wyett changed the directory structure of where VC outputs
	  files. For example for a CS build you will now see the new structure:
	    CS\mk\visualc\csdebug (OR) csrelease
	       |
	       |-- bin
	       |    |
	       |    |-- libs
	       |
	       |-- temp
	  Now all ".lib" files are placed in "bin\libs"
	  Now all ".exe" and ".dll" files via a new "copy to", are
	  copied to the "bin" directory as well as the default "CS\"
	  root directory.
	  All object and VC intermediate files are created sub of "temp".
	  This change will allow, the much easier collection and copying
	  of files and/or working with both a debug or a release build of
	  CS via copy and pastes to the "CS\" root directory and or setting
	  of enviroment variables to use these directories as working ones.
	  Also makes it easier for file collection for own projects and
	  possible binary releases of the CS files.
	  *** WARNING ***
	  If you compile both debug and release builds of CS you must expect
	  the disk space used on your system to be around "1.1Gb" and the
	  the possibilty of mixing debug and release files inside the "CS\"
	  root directory is possible, so must be done only with care...
	  *** IMPORTANT ***
	- Added 'virtual' before the csView destructor and also fixed a
	  warning in the csView constructor.
	- Fixed a warning in csLightMap.
	- Fixed a compile error in map2cs.
	- Improved OpenGL super-lightmap handling a little. If there is
	  no more room in the current super-lightmap it will try the
	  two older ones first before creating a new super-lightmap. This
	  should improve usage of the super-lightmaps a little.
	- Added new Video.OpenGL.FpsLimit config for OpenGL with which you
	  can artificially decrease FPS speed. This is useful on some cards
	  where very high framerates actually cause congestion in the OpenGL
	  queue (or something like that) and slowing down helps to get
	  smoother results. This is disabled by default.
	- Made the number of super-lightmaps configurable (default is still
	  10). Also made the size configurable (default 256). The options
	  are Video.OpenGL.SuperLightMapNum and Video.OpenGL.SuperLightMapSize.
	  Note that the super-lightmap size will automatically be capped
	  to the maximum allowed texture size. So you can safely set it
	  to 10000000x10000000 :-) Also note that this size should be a power
	  of two.
	- I have been told that state changes in OpenGL are expensive.
	  So I started implementing buffering on state changes and indeed
	  it seems to improver performance a bit even by doing
	  only simple changes. At this moment only the z-buffer state
	  is cached like this.
22-May-2001
	- Implemented improved OpenGL lightmap cache. There is now the notion
	  of a super-lightmap which is a collection of smaller lightmaps.
	  At this moment there are 10 super lightmaps of 256x256. In the
	  future this will be configurable. Even though the engine currently
	  does not sort on lightmap yet, there is already a performance
	  improvement. Because of this change the OpenGL renderer no longer
	  requires that lightmaps are converted to power of two dimensions.
	  This is not needed since the lightmaps are now put in a larger
	  texture. This saves a lot of space too. For example, if you would
	  have a 33x33 lightmap then the old OpenGL renderer would convert
	  this to a 64x64 lightmap. This is nearly four times too big!
	  At this moment there is still some waste though. This is caused
	  by the (currently unoptimized) csSubRectangles class.
	- Apparently not all OpenGL drivers correctly support glTexImage2D
	  with a NULL pointer as input data. OpenGL specs say this is allowed.
	  So I added a work-around for this by giving a dummy array.
	- Wouter Wijngaards added some code in the Print method to delay
	  (using System Sleep()). This is needed for a G400. It needs a
	  limit of 50 fps. (which is a 40 msec setting, probably due to
	  bad timers/sleep inaccuracy). This code is currently disabled.
	  A config option needs to be made to enable this optionally.
	- Lightmaps are now sorted on lightmap. Every super lightmap has
	  its own cache and they are rendered one by one when needed.
	- Fog has its own separate queue now and this is rendered in a
	  totally separate pass.
	- Martin Geisse continued cleanup of the engine.
	- Thomas Hieber updated map2cs again. Still not completely ready
	  though.
	- Michael Knorr (damage-list@freenet.de) by way of Thomas Hieber
	  fixed curve handling in map2cs (for the new map format).
	- Norman Kramer did some fixing to the new aRts sound renderer.
21-May-2001
	- Added non-functional emit loader/saver which Wouter can complete.
	- Wouter worked on emit loader. I did a small enhancement too.
	- Finished the first version of csSubRectangles. It seems to work
	  now so it is ready for using in the lightmap combination code.
	  Note however that the algorithm used in csSubRectangles is not
	  very sophisticated. It is a start to see how far we go. Optimization
	  can come later.
	- Wouter Wijngaards made a new particle systems demo level in cvs.
	- Wouter also did several fixes to the emit particle system including
	  an unititialized variable. Also it would not function correctly
	  with very low fps.
	- Wouter Fixed a bug in spiral particle system. It forgot to do
	  SetNumber(max) on the Newtonian parent system.
	- Martin Geisse committed a remake of the WAV loader by
	  Andreas Höfler.
	- Norman Kramer added missing CSGEOM to link with glx2d.
20-May-2001
	- Philip Wyett started a big overhaul of CS/Visual C++ docs.
	- Wouter Wijngaards added an emittor particle system. This is a very
	  configurable particle system. It has the following options:
	    - You can set the particle start position, start speed, start
	      accel from a host of generation functions.
	    - During the lifetime of the particle, the color, alpha,
	      swirlyness of movement, rotationspeed and scale are animated.
	      These values are interpolated from given values.
	    - You can specify an attractor for the particles. Particles tend
	      to go towards the attractor point. The attractor point is
	      gotten per particle. You can also use a NULL attractor - none
	      will be used.
	    - The bounding box of the system is now pretty smart - each time
	      a particle is started or moves, the bbox is updated.
	    - You can use either rectangular sprite2ds or you can use regular
	      shaped (n-sided) sprite2ds with this particle system.
	  This particle system should be able to also do the behaviour of
	  the fountain, rain, snow, fire and explosion particle systems.
	  (But those are probably a little more efficient at what they do).
	- Norman Kramer added a sound renderer using the artsd soundserver
	  that comes with the aRts system (see www.arts-project.org). This
	  is not operational yet (well at one point the tt testprogram worked,
	  but after an evening full of moving code back and forth im sure it
	  wont now).
19-May-2001
	- Moved csRect from csutil to csgeom. First I believe it belongs
	  there, and secondly I need csRect for another new class that
	  I'm going to put in csgeom.
	- Started new csSubRectangles class. This class represents a region
	  from which you can allocate smaller rectangles until the region is
	  empty. This class is going to be used for combining lightmaps
	  efficiently into a bigger texture (OpenGL). It is currently not
	  operational yet.
18-May-2001
	- Since the new lightmap format seems to work well I removed the
	  optional support for the old format.
	- Did yet another optimization in the OpenGL renderer. When dynamic
	  lighting modifies a lightmap no new texture will be generated but
	  instead the old cached lightmap state will be reused (using
	  glTexSubImage2D).
	- Philip Wyett updated map2cs tutorial with path to cstex_1.wad.
	- Wouter Wijngaards fixed texture generation to be sure of good
	  computation (made constant a float instead of int).
	- Wouter also fixed the slopefunction so it now is much more robust
	  in several respects. The values it returns can be pretty large,
	  say in 0.. 4xterrainheight or so.
	- Wouter fixed procedural water, so that it will look nice in
	  software mode. No more pixelized look. By removing the
	  proc.texture.only flag.
	- Thomas Hieber made the output format of map2cs even better.
	  (but Walktest still decides to crash when loading).
17-May-2001
	- Fixed Blocks so it compiles again.
	- Did an experimental optimization. CS will now keep the lightmap
	  in another format which is more suitable for hardware. Instead
	  of three separate maps of red, green, and blue data we now have
	  r,g,b,0 in one array. Disadvantage: 4 bytes per lightmap entry
	  instead of 3. Advantage: no more need to convert the lightmap
	  in OpenGL as this format can be used like that. This gives a speed
	  up which is especially visible if there are dynamic lights and
	  you are moving a lot (and there are lots of lightmaps). Otherwise
	  it will not give a slow-down.
	  The new format can be turned off by setting NEW_LM_FORMAT to 0
	  in iengine/lightmap.h.
	  WARNING! Lightmaps will have to be relalculated (-relight).
	- Removed a bunch of code in OpenGL lightmap handling which used
	  to be needed but now I can't see a difference in visual output.
	  The code is between #if 0/#endif so I can revert if needed.
	- Implemented a lot of new functionality from the new texture
	  generation tool. Will write some documentation on this later.
	  A new version of newsky.zip is required!
	- Eric Sunshine applied an interim solution to the problem with the
	  "extensive debug" facility breaking builds on certain platforms.
	  In particular, this facility breaks compilation on platforms which
	  define their own custom operator `new' overloads.  The extensive
	  debug facility can now be disabled on a platform-by-platform basis
	  and is now disabled, by default, on BeOS.
	- Thomas Hieber did a little bit more work on map2cs. It now starts
	  to look ok but walktest still crashes on it.
16-May-2001
	- Philip Wyett did a quick update to eliminate 3000 compiler warnings.
	  Pragma'ed C4291 out, for time being, will come back to this.
	- Fixed a bad bug with lazy clipping in the OpenGL DrawTriangleMesh
	  implementation. This would cause crashes on some cards (like ATI).
	- OpenGL::DrawPolygonFX will now also use the DrawPolygon queue.
	  This makes the code a lot simpler and also a lot faster if
	  multiple texture passes are used (gouraud shading, fog, multiple
	  texture layers). If only one pass is used the overhead of the
	  queue makes DPFX slightly slower.
	- Removed OpenGL::RealStartPolygonFX.
	- Wouter Wijngaards did a zoomy whoomy change of terrain image
	  generator. Now all the components, textures, functions, blending
	  can be mixed and matches as you like, to create all sort of nice
	  effects. Like: splotches of a texture irrespective of terrain
	  height. (for roads and so on).
	  Also slopes could be used, perhaps even blended with height-mapped
	  terrain image.
	- Fixed csparser so that it works with the new API of the
	  terrain generator but the new features are not yet supported.
	- Philip Wyett did a bug fix to the OpenGL Canvas for Windows:
	  Changed default Window style for windowed apps.
	  This fixes the seeing of a nasty little 2 pixel black
	  border at top and right side of window in apps like
	  csdemo.
	- Fixed a bug with the terrain heightmap function not being completely
	  correct. This fixes both collision detection (i.e. walking on the
	  terrain which used to be very bumpy) as well as texture mapping
	  using the texture generation process.
	- Added a new subsection to all howto's giving a short summary of
	  the relevant include files for the example code in that section.
	- Fixed a bug in csThing (creation of bounding box) which was
	  harmless but nevertheless it did cause an assert to fail
	  (and rightly so).
	- Thomas Hieber writes the following: tried to get map2cs to work
	  with the new map format, but I really have the impression, the new
	  map format was designed for obscurity. My head is now buzzing with
	  meshfactories and plugins and all that stuff. To make it short:
	  I am giving up on it. I have committed my effort in the hope there
	  is somebody out there who understands the new map format and can
	  fix it. At least my changes to the material stuff and the plane
	  stuff seem reasonable.
	  I also output the "plugins" section right so maybe this is a start.
	  I don't have a clue, how to convert bezier curves. I have put
	  everything together on curves that I thought I had understood,
	  but maybe I am wrong there.
	  Sectors and things are a lot more difficult. I don't know how to
	  connect polygons to texture planes, and all the stuff with these
	  factories and parts is over my head.
	  I don't think the old format of CS map files was easy to
	  understand, but the new format is much more complicated.
	  At least to complicated for me.
	- Norman Kramer writes: years after Raider was renamed to Twix I
	  now renamed MESHOBJ to MESHFACT in the meshobj documentation.
	- Martin Geisse added a generic 'string set' utility class. Its
	  functionality is the same as of the string server plug-in.
	- Martin also did a bugfix to the material code.
15-May-2001
	- Philip Wyett added the new cslexan to global build process.
	  Philip also changed MSVC project file generation process to create
	  project files with a higher internal VC compiler warning flag.
	- Added some code to cssysdef.h which will enable a memory debugger
	  to get more information (file name and line number). Enabling
	  this requires that operator new (and new[]) are overloaded with
	  two additional parameters. csutil/memdebug.cpp contains such
	  operators. The memory debugger can be enabled with
	  CS_EXTENSIVE_MEMDEBUG. This flag is disabled by default in
	  optimize mode and enabled in debug mode. If CS_EXTENSIVE_MEMDEBUG
	  is enabled while the memory debugger is not, the memory debugger
	  will still provide the needed overloaded operators so you can
	  leave CS_EXTENSIVE_MEMDEBUG on safely.
	- Greatly extended the memory debugger. It now keeps track
	  of much more information and it can also (optionally) keep track
	  of deleted memory to see if it is later used again. Of course this
	  slows down CS a huge amount.
	- Fixed a potential memory overwrite bug in csThing with the cam_verts
	  array. I think that this might be THE bug I have been hunting for
	  a few days. Thanks to the new memory debugger! :-)
14-May-2001
	- Fixed a bug in csShadowBlock, why doesn't a compiler warn on stupid
	  assignments like 'a=a'? There is a very small chance that this
	  fix may fix the dynamic lighting bug I'm experiencing. Not sure
	  though. UPDATE: it didn't :-(.
	- Put in lots of sanity checks in csShadowBlock and related classes.
	  Also lots of CS_ASSERT calls.
	- Added support for KEY keyword in loader for lights.
	- Added new cmd_AnimateDynLight which will animate a pseudo-dynamic
	  light.
	- Added new cmd_AnimateDynLight to flarge to test this.
	- Added new id's to csLight to solve a problem with lightmap saving
	  (for pseudo-dynamic lights).
	- Changed csEngine::FindCsLight() to work with this new ID instead
	  of the CS_ID. Also changed csSector::FindLight().
	- The two changes above fix a bug with pseudo-dynamic lights not
	  loading correctly.
	- Fixed a bug with pseudo-dynamic lights not setup correctly if
	  the lighting is recalculated (i.e. not read from lm cache).
	- Started new doc for api modifications from 0.18 to 0.19. Far from
	  finished though.
	- Worked a bit on the howto section again. Added section about pixmaps.
	  Completed section about level loading.
	- Removed StartPolygonFX and FinishPolygonFX completely. Only
	  the glide and Direct3D renderers are not updated. For now just call
	  DrawPolygonFX(). That function is itself responsible for testing
	  it texture information needs to be updated or not.
	- csEngine::CreateSectorWallsMesh() will put the created mesh in
	  the 'wall' render priority queue now.
	- Further updated apimod19.txi.
	- Added HOWTO on render priorities.
	- Michael Voasse did the following changes to the motion system:
	    - Made the motion loader a plugin.
	    - Fixed a malloc/realloc bug in motion.cpp.
	    - Fixed a small memory leak in csMotion.
	    - Did a fix to keep bone transforms.
	- Martin Geisse did some cleanup of the material wrapper code.
	- Christopher Nelson updated the lexical analyzer definition,
	  changed the iString's to csString's since they aren't
	  interchangeable currently.
	- Christopher also implemented the lexical analyzer's VM (mostly).
	  Currently missing features are:
	    - custom table matching ([a-z] or [bfsf] etc.)
	    - implementation of push and pop stream currently does nothing.
	    - implementation of match currently does not call Exec().
13-May-2001
	- Added CS_ASSERT to some of the functions in growing arrays to
	  make sure we catch those kinds of errors early.
	- Norman Kramer fixed simplep for Martin's changes yesterday.
	- Michael Voase added APPLY_MOTION to spr3dldr.cpp. Modified
	  walktest.cfg to correctly load motion manager.
	- Removed all 'friend' declarations (except Dumper) from
	  csLightPatch. Instead added SetPolyCurve(), AddPolyList(),
	  AddLightList(), RemoveLightList(), SetLightFrustum(), and
	  GetLightFrustum(). Added a few CS_ASSERT's again.
	- Added some CS_ASSERT's to various classes in csgeom.
	- Added CS_ASSERT to dynamic light calculation code.
	- Martin Geisse changed bumptest to use the engine as a plugin.
	- Martin cleaned up the code for csMaterial and csTextureWrapper.
12-May-2001
	- Thanks to Philip Wyett I fixed a bad bug in the OpenGL
	  software clipper. Some arrays were not correctly sized to the
	  number of clipped vertices (which could be more than the
	  number of vertices). It now seems to work ok.
	- Martin Geisse moved csLight accessor functions from csDynLight
	  to csLight. They belong there, even if they are useless for
	  static lights. Added missing accessor functions. Changed Blocks
	  in several cases to use the engine through interfaces.
	- Christopher Nelson added Dynamic Lexical Analyzer interface
	  definition file.
	- Christopher also added base regular expression and regular
	  expression compiler objects (new cslexan plugin).
	- Martin Geisse moved textrans.cpp (.h) from csengine to csgeom.
	- Martin did further work on engine interface and Blocks.
	  Removed SetPosition() from iCamera because direct access
	  to the transform should be used.
	- Philip Wyett fixed bad bug in GL renderer.
	  "uv_mul_verts.SetLimit (num_vertices);"
	  to update of work table(s) at line: 2302
	  This was done because a crash out occurred at
	  line: 2599, when variable "uv_mul_verts" accesses
	  "GetArray ()".
11-May-2001
	- Added additional HOWTO sections.
	- Moved the FOG constants from OpenGL to ivideo/graph3d.h. They
	  are general enough for any hardware accelerated fog implementation.
	- Fixed fog in OpenGL. It now works again. For some reason it got
	  broken. It is also faster (since no fog array needs to be copied
	  anymore) and it uses less memory.
	- Added a 'name' parameter to iEngine::CreateLight().
	- Added GetLastAnimationTime() to csEngine.
	- Removed csMeshWrapper::NextFrame(). csMeshWrapper will now use
	  the last animation time from the engine to automatically detect
	  if meshobj->NextFrame() has to be called. This is an optimization.
	- Put 'mixmode' in G3DPolygonDPFX for DrawPolygonFX. This is in
	  preparation for the removal of StartPolygonFX and FinishPolygonFX.
	- Removed the support for Shortcut routines in OpenGL renderer. It
	  was not used and did not work anyway.
	- Fixed a memory leak in the software clipper used in OpenGL.
	- Fixed a bug with the software clipper in OpenGL with meshes that
	  resulted in no triangles after clipping.
	- Fixed a bug with the software clipper in OpenGL. It would not
	  clip correctly for meshes that were already transformed by the
	  engine (this can happen for skeletal sprites).
	- Fixed two small bugs in csEngine::Draw() and csEngine::DrawFunc().
	- StartPolygonFX and FinishPolygonFX in OpenGL are now empty.
	  DrawPolygonFX will automatically detect the need for doing
	  initialization.
	- Fixed a very small robustness bug in the lighting code.
	- Fixed a bug in OpenGL renderer. The ref count of rgba_verts
	  was not properly incremented.
10-May-2001
	- Fixed a bug in clipper detection for OpenGL. In some cases it
	  would select 'N' for the required clipper which is not allowed.
	- Renamed the VERY old Sparse3D and WideSparse3D classes to conform
	  to CS coding guidelines (i.e. csSparse3D and csWideSparse3D) and
	  also made the functions start with a capital letter.
	- Fixed a bug in the new software OpenGL clipper (in csFrustum/
	  ClipToPlane). It now seems to work perfectly in all cases as far
	  as I can see.
	- Added code to save the result of auto-detection (OpenGL renderer).
	  The result of this test is saved in user.cfg. I had hoped to save
	  it with 'Global' put in front so that the test results would work
	  for all apps but at this moment they are saved with the app prefix.
	  This means that as long as you use the same app it will reuse the
	  saved config.
	- Fixed a bug in the fire plugin which was accidently broken by
	  Eric a few days ago. I also optimized Eric's solution a little by
	  avoiding the test for Colors==0 every time.
	- Added texture state caching for OpenGL::DrawPolygon. If the engine
	  sends in polygons with the same material together then OpenGL
	  will cache them and send them all to OpenGL at once. This is
	  especially the case when detail textures and fog. Depending on the
	  level this can be a big optimization. But the engine itself still
	  needs some enhancements to actually sort polygons on material and
	  so on.
	- Started work on HOWTO section in documentation.
	- Philip Wyett changed link for locaction to obtain WinCVS
	  client software. "http://www.wincvs.org" now seems to be
	  deprecated, so link now points to "http://www.cvsgui.org".
	- Martin Geisse did the following changes:
	    - The prefix config files can take an optional alias name that
	      is returned from GetFileName() instead of the real file name.
	      All other functions use the real file name.
	    - The config manager does not use the VFS pointer anymore to
	      identify single domains (only the file name).
	    - The user-specific, global domain is now called "User.Global",
	      the user-and-application-specific domain is now called
	      "User.Application".
	- Martin also optimized csHashCompute and changed hash iterators so
	  they now have a public constructor that initializes all elements,
	  removing the GetIterator() methods from csHashMap and csHashSet.
	  This allows creating these iterators on the stack in time-critical
	  situations.
9-May-2001
	- Martin Geisse added a version of typed vectors that don't delete
	  their elements.
	- Martin cleaned up the hashmap code using typed vectors.
	- Philip Wyett hacked round commits of yesterday because of the
	  following:
	    - Commented out case constant "cslfsTexturedNoFrame"
	      which does not exist.
	    - Added member variable "bool DrawTextOnHighlightOnly",
	      which was being initialized at construction, but
	      which also did not exist.
	    - After diffing and finding out this was wrapping
	      existing code. Commented out code which made calls
	      to "GetDrawTextOnHighlightOnly()", which also does
	      not exist.
	  libcsws now compiles again and all csws dependant
	  apps seem to be Ok.
	  In order to find the changes, just do a search for
	  "redeye", which marks all the changes.
	- More work on a better way to select mesh clippers for OpenGL.
	- Added Video.OpenGL.Caps.HWPlanes to opengl.cfg to select the
	  number of hardware OpenGL planes. Set to 0 if you don't have
	  any or don't want to use this.
	- Implemented hardware plane clipping in OpenGL.
	- Implemented additional lazy clipping phase.
	- Finished a totally new clipping selection system for OpenGL.
	  Read data/config/opengl.cfg for more info. The default is to
	  run a performance test (setting 'auto') which takes 14 seconds.
	  To avoid this delay you can copy the three lines that are
	  put on screen after this performance test to data/config/opengl.cfg.
	  The lines are the one with Video.OpenGL.Clip*.
	- Added missing support for fog in terrfunc terrain engine.
	- Christopher Nelson fixed his broken CVS commit from yesterday.
	  Here are his changes:
	    - csListBox is now skinnable, and has been for a while. I just
	      forgot to mention it.
	    - csListBox has 3 new framestyles: Textured, Bitmap, and
	      BitmapNoFrame.  Just as with the other controls, you can set
	      a bitmap with transparency to be the background.	Listbox items
	      were also skinned, but nothing special was done with them.
	      I may in the future implement a function which lets you set a
	      bitmap for the highlight.	 Currently the highlight is the same
	      as it always has been.
	    - csButton has a new member called SetDrawTextOnHighlightOnly().
	      I know it's long, but I wasn't sure how to reduce it's size and
	      still keep the meaning clear.  If you pass true to this member,
	      button text will only be drawn when the mouse is over this
	      button, or when the button is pressed.  This is very useful if
	      your buttons are all bitmaps, and you have the text displaying
	      beneath them.  If this doesn't make any sense, there is an
	      attatched .jpg file which shows a screen shot of what can be
	      done with the current version of csws using the bitmap frame
	      types.
8-May-2001
	- Martin Geisse did some changes in the RTTI macros:
	    - Extended object interfaces now use DECLARE_OBJECT_INTERFACE,
	      just like normal object interfaces. The parent class is now
	      given in IMPLEMENT_OBJECT_INTERFACE_EXT.
	    - Added wrapper macros for csObject::GetChild().
	- Made some small enhancements to csIntersect3::IntersectSegment().
	- Added new version of csIntersect3::Plane().
	- Finally managed to implement a new software triangle clipper
	  for OpenGL. This triangle clipper will be used when all other
	  options are not possible. It is funny to see that this software
	  clipper is FASTER than letting OpenGL clip the triangles to the
	  screen boundaries on my card (ATI Rage PRO Mobility).
	- Moved the new ClipToPlane() routine which was specifically written
	  for the OpenGL clipper to csFrustum and generalized it.
	- Christopher Nelson did some minor bugfixes to the buttons to make
	  drawing work better with transparent/translucent overlays.
7-May-2001
	- Martin Geisse started to change the engine to use the new RTTI
	  system. Also changed IMPLEMENT_OBJECT_INTERFACE and
	  IMPLEMENT_OBJECT_INTERFACE_EXT. They now take the class they are
	  applied to and add it implicitly to the list of support cast types
	  (so you don't have to do that explicitly for every class).
	- Added 'strserv' to walkall target.
	- Fixed OpenGL multiply mode. It was using GL_DECAL when it should
	  use GL_MODULATE.
	- Added two new options to OpenGL config file (data/config/opengl.cfg):
	  Video.OpenGL.Caps.Stencil and Video.OpenGL.Caps.NeedScreenClipping.
	  Stencil is false by default but you can set it to true if you have
	  support for hardware stencil buffer. NeedScreenClipping if false
	  by default but you can set it to true if you experience bad
	  crashes with OpenGL.
	- Fixed a bug in the terrfunc interpolation routine for reading from
	  a heightmap. It was accessing past the heightmap boundaries.
	- Added iTerrFuncState::CorrectSeams() and GetCorrectSeams(). With
	  these you can enable correction for texture seams between adjacent
	  textures of the landscape for the given texture size. By default
	  no such correction happens.
	- Also added CORRECTSEAMS keyword to terrfunc loader.
	- Added MULTIPLY keyword to HEIGHTGEN in parser. This makes it easier
	  to quickly switch texture sizes for the generated terrain.
	- Added csIntersect3::IntersectSegment() to intersect a segment
	  with a frustum given by planes.
	- Continued working on a faster clipper for OpenGL meshes. It is
	  *almost* working but not yet :-)
	- Eric Sunshine worked around a NextStep compiler idiosyncrasy in
	  terrfunc.cpp and terrfunc.h where the compiler complained about
	  division by zero when expanding an inline function even though the
	  code correctly checked for this case.
6-May-2001
	- Martin Geisse made the following changes:
	    - csengine now depends on the string server. All apps have
	      been changed accordingly.
	    - Added RTTI interface to iObject and csObject.
	- Moved G3D->SetPerspectiveAspect() to init in csEngine::Draw()
	  instead of everywhere else.
	- Removed the obsolete inv_aspect field from the structures
	  sent to iGraphics3D.
	- Fixed the python plugin again.
	- Started work on improved DrawTriangleMesh for OpenGL. OpenGL
	  renderer will now keep a 3D frustum in camera space and recalc
	  this when needed (not finished yet).
	- Added static version of csFrustum::Intersect() and also added
	  a version to interesect a triangle.
	- Started working on better version of clipping DrawTriangleMesh
	  for OpenGL. Doesn't work yet.
	- Eric Sunshine eliminated compilation warning about variable being
	  clobbered by longjmp() in jpgimage.cpp.
	- Eric Sunshine fixed several problems which were recently introduced
	  into various makefiles.
	- Eric Sunshine fixed a portability problem in the Fire plugin where it
	  was relying on implicit initialization of several static global
	  tables.  Unfortunately, not all platforms correctly initialize such
	  data structures at plugin load time, so these tables must be
	  explicity initialized by the plugin itself.
	- Eric Sunshine eliminated compilation warnings from stars.cpp and
	  ddgterr.cpp.
5-May-2001
	- Added HardTransform() to iMeshFactoryWrapper and
	  csMeshFactoryWrapper.
	- Received a new shuttle from Thomas Hieber. It is now used
	  as the main shuttle in the demo.
	- Made softer transitions in the demo between camera switches.
	- Martin Geisse added string server plugin and new pseudo-RTTI
	  system. Both still unused.
	- Philip Wyett eliminated some compiler warnings in MSVC
	  and MingW ports.
	- Philip also added Martins strserv plugin to global build process.
4-May-2001
	- Philip Wyett fixed the signed/unsigned warnings in the
	  sequence manager.
	- Wouter Wijngaards fixed a typo in the simple tutorial in the docs.
	  A const char const* argv[] was missing the first const.
	  This caused Initialize not to override SysSystemdriver Initialize,
	  and this caused people to go crazy at the broken example. :-)
	- Wouter fixed some bugs in the terrain image generator.
	  Works now. But the debug printf needs to be enabled, otherwise
	  the blue channel seems to be lost (images turn yellow). Weird.
	- Added iTerrFuncState::SetHeightMap() to set a heightmap instead
	  of a function. Any iImage can be used. It will average the
	  red, green, and blue components. Size of the image is also not
	  important (except for terrain accuracy of course). Linear
	  interpolation is used to get inbetween values.
	- Added HEIGHTMAP keyword to the terrfunc loader.
	- Added new HEIGHTGEN keyword to the loader. With this keyword it
	  is now possible to use the new class from Wouter to dynamically
	  generate textures in combination with a heightmap.
	- Fixed a bug with 3D sprites which would crash on lighting if
	  the sprite contained vertices that were not used in triangles.
	  The function to calculate normals now sets the normal to 1,0,0
	  in such case (previously it was undefined which could cause
	  crashes).
	- If a sprite has only one frame then tweening will be disabled
	  by default. This should increase performance a little for them.
	- Fixed a bug in the new HEIGHTGEN keyword. Added SIZE and
	  PARTSIZE to make it easier.
	- Did a quick hack in the terrain engine so that it will correctly
	  align for textures of size 64! Need to make it more general so
	  that it works for all texture sizes though.
	- Robert Bate updated the Classic Mac port again:
	    - Codewarrior is very picky with the floating point constants
	      passed to templated routines. Making sure they all are floats.
	    - Updating the JPEG, PNG anf ZLIB libaries to the latest and
	      greatest.
	    - New project files for CW Pro 6. These projects are Carbonized
	      (Run on both 9 and X).
3-May-2001
	- Wouter Wijngaards did the following:
	  added a class that can generate iImages for terrain textures on
	  the fly. It is untested for the moment. You give some layers to it.
	  Each layer has a height where it is predominantly visible. Each
	  layers texture will show when the heightmaps is near that height.
	  In between the textures are blended.	You can also give layer
	  offset and scale. The textures are scaled up using trilinear
	  interpolation.
	  You can use this by creating the class. Then set the height
	  function to use. Then add some layers. Then generate parts of the
	  terrain texture, as iImages.
	- Philip Wyett removed the Direct3D and related Direct Draw plugins
	  from the win32 build process. This affects both mingw and
	  MSVC ports.
	- Philip Wyett changed Win32 OpenGL2D canvas from using a
	  standard popup window. to using a complete and correct caption
	  window with full system menu support.
	- Martin Geisse removed a few warnings in stars and OpenGL.
	- Changed the do_clip parameter in G3DTriangleMesh to clip_portal
	  and clip_plane.
	  There are two kinds of clipping: portal clipping (clipping to the
	  boundaries of the last portal we went through) and portalplane
	  clipping (clipping to the plane of the portal itself). Both are
	  handled separately.
	  There are three cases for both portal clipping as portalplane
	  clipping (these are set in the fields clip_portal and clip_plane):
	    - No clipping required (CS_CLIP_NOT): in this case the
	      engine is sure that the mesh will not need any clipping.
	    - Clipping needed (CS_CLIP_NEEDED): in this case the
	      engine thinks that clipping may be needed. Depending on
	      the type of clipper (see later) this clipping is optional
	      or not.
	    - Clipping for toplevel (CS_CLIP_TOPLEVEL): in this case the
	      engine knows that no clipping is needed to the current
	      clipper but clipping may be needed for the toplevel
	      clipper (or Z=SMALL_Z plane if used for plane clipping).
	  The engine will give a clipper to G3D. There are three cases:
	    - Optional clipper (CS_CLIPPER_OPTIONAL): the clipper is
	      optional. This means that the z-buffer contents can
	      be trusted to clip the object. But a renderer for which
	      overdraw is slow can choose to do a lazy clip or exact
	      clip if it wants.
	    - Toplevel clipper (CS_CLIPPER_TOPLEVEL): the clipper is
	      the toplevel clipper (i.e. the outermost portal, usually
	      close to the size of the window or screen). In this
	      case clipping is required but the renderer may have
	      some special ways to do this (like initializing the
	      Z-buffer around the borders of the portal).
	    - Required clipper (CS_CLIPPER_REQUIRED): in this case the
	      clipper MUST be used (if CS_CLIP_NEEDED is set in the
	      mesh) and clipping must be exact (i.e. triangles may
	      not overlap the clip area).
	- Did the following changes to iGraphics3D:
	    - Changed SetClipper() and GetClipper() to work with iClipper2D.
	      This avoids a copy of the clipper.
	    - Added 'cliptype' parameter to SetClipper() which will be
	      one of the flags CS_CLIPPER_?
	    - Added GetClipType() function.
	    - Added SetNearPlane(), GetNearPlane(), ResetNearPlane(), and
	      HasNearPlane() to set the near clipping plane.
	- Fixed all 3D renderers except glide and Direct3D. These are now
	  totally outdated. Note that the handling in the renderers is not
	  yet smart. This is the framework. Now I need to do some work
	  to use the framework for very efficient mesh handling.
	- Changed the engine to call SetClipper() and SetNearPlane() every
	  time we go through a portal and at init time. This is much faster
	  than letting every single mesh object do this.
	- Changed csRenderView and iRenderView::ClipBBox() to return the
	  right clip_portal and clip_plane flags depending on the given
	  bounding boxes (screen and camera space).
	- Extended csCurve::GetScreenBoundingBox() so that it also returns
	  the camera bounding box.
	- Fixed all mesh and terrain plugins to use the new system when
	  talking to DrawTriangleMesh.
	- Changed terrfunc terrain plugin to be more clever about clipping
	  now. This also means that the bug with disappearing polygons
	  in front of the camera is now completely gone (touch wood!).
	- Philip Wyett fixed compile errors with null 3D renderer.
2-May-2001
	- Fixed the color bug in OpenGL DrawTriangleMesh with multi-
	  texturing.
	- Fixed several cases in the parsers where a boolean was read
	  but put in 'int'. This doesn't work since a recent change where
	  ScanStr works correctly on the 'bool' type. If %b is used for
	  ScanStr then the parameter should be 'bool' and not 'int'.
	  This mostly affected the LIGHTING() flag in several of the mesh
	  object loaders.
	- Enabled stencil buffer for Windows OpenGL canvas.
	- Enabled stencil buffer for X OpenGL canvas.
	- Experimented a bit with the stencil buffer for clipping and
	  DrawTriangleMesh. Not enabled by default yet since I have to
	  experiment with it.
	- Removed the obsolete and unused support for multiple textures
	  in G3DTriangleMesh. This now solved with materials.
	- Fixed an allocate of 0 size in the engine.
1-May-2001
	- Fixed a bug in software renderer so that tiling really works.
	- Extended the iMaterial structure in preparation of multi-texturing
	  support.
	- Extended the loader of materials in preparation of multi-texturing
	  support. There is now a new LAYER keyword in the definition
	  of a MATERIAL. In LAYER you can specify the texture, scale, shift,
	  and mixmode to use for that texture layer.
	- Fixed iso plugin for latest material changes.
	- Fixed MazeD for latest material changes.
	- Wouter Wijngaards added CS_FX_TILING to the bumptest bump layer.
	  It works perfectly nice in software now!
	- Wouter Wijngaards added small fix to demo.
	  if(elapsed_time == 0) return;	 from NextFrame().
	  This avoids (almost 99%) of the jerkyness I experienced in
	  opengl mode. The reason was that high framerates and bad timer
	  caused 0 elapsed time, and a redraw of exactly the same frame,
	  filling up queues inside my bad driver, and causing a tug when
	  real work needed to be done.
	- Extended texture layer support in the engine so that maximum
	  four additional layers are supported (this means one base
	  texture and four extra). Note that none of the 3D renderers
	  currently support this.
	- The material manager in the 3D renderers is now capable of
	  holding four texture layers too. They are still not used
	  however.
	- Fixed a small bug in the OpenGL renderer with regards to
	  transparency that I introduced yesterday.
	- FINALLY fixed the very bad bug which completely locked up
	  my machine when a sprite was visible in fog using OpenGL
	  on an NVidia GeForce. It appears that the NVidia doesn't like
	  the use of glTexCoordPointer with 1 as the first parameter
	  (i.e. only one texture component). So fog and DrawTriangleMesh
	  finally works right with OpenGL!
	- Also fixed fog for DrawPolygonFX itself. DPFX was using perspective
	  correct texture mapping but fog was not doing that.
	- Added support for multi-texturing in OpenGL renderer for DrawPolygon,
	  DrawPolygonFX, and DrawTriangleMesh. data/flarge shows two
	  examples (one on the initial room and one on the sprites in the
	  large hall). Software renderer currently ignores the extra
	  textures. There is still a bug in the DrawTriangleMesh version
	  though. The color of gouraud shading seems to shift.
	- Martin Geisse fixed a lot of cases where the system driver was
	  IncRef'ed and DecRef'ed, which should not happen
30-Apr-2001
	- Philip Wyett fixed csVector3 up (); so that you/camera
	  is the right way up in ptlab. :-)
	- Brandon Ehle reports: PS2 Port working, will post external libs soon,
	  hopefully source code for them will follow, if I find that Sony's
	  OpenGL library is horrid.  There are also changes to software
	  renderer and iG3D interface regarding uint32 ULong issues.  You
	  should not assume that ULong is a 32 bit datatype, but rather a
	  datatype thats big and goes really fast on the target platform.
	- Added support for FX mode scanline drawing to DrawPolygon.
	  So you can now use CS_FX_ADD (for example) with both lighted
	  and unlighted polygon drawing. Only CS_FX_TRANSPARENT is not
	  supported. Added 'mixmode' to G3DPolygonDP.
	- Moved MixMode from csPolyTexNone to csPolyTexType.
	- Removed csPolyTexNone and iPolyTexNone. This functionality is now
	  in csPolyTexType and iPolyTexType.
	- The changes above mean that MIXMODE() keyword for thing loader
	  will now work for all polygons.
	- Added FPS counter to csdemo. Currently displays on stdout.
	- Modified csdemo to make the stars using a single tiled polygon
	  with CS_FX_ADD mode (using the above new routines) instead of
	  a surface mesh object. This increases speed in the software renderer
	  from 10FPS to 14FPS!
	- Also added support for new FX polygon drawing in OpenGL/DrawPolygon.
	- Consistently renamed all GetMixmode() and SetMixmode() functions
	  to GetMixMode() and SetMixMode().
	- Added support for tiling in DrawPolygonFX and DrawTriangleMesh
	  (software renderer). This is enabled by the CS_FX_TILING flag
	  for mixmode. This is somewhat slower though so only use this if
	  you really need it. Tiling is not supported for images
	  with an alpha map. This tiling is untested for now.
29-Apr-2001
	- Fixed the python plugin again.
	- Fixed a bug that caused stray particle systems to be visible
	  in csdemo. This bug was actually rather bad and would case
	  children of mesh objects to be drawn several times unneeded.
	- Martin Geisse did further work on csparser and csengine.
	- Philip Wyett made csbumptest use a config file.
	- Wouter Wijngaards did two small fixes to bumptest:
	    - Improved efficiency of the procedural bumpmap, added a
	      RecalcFast method. The new method is >10x faster. Although
	      theoretically the quality should be lower, I cannot see
	      any difference.
	    - Procedural bump texture is now independent of u,v direction size.
	    - Bumptest only does engine::Prepare once now.
	- Wouter also ran into a const problem with a SetTextureSpace method
	  when trying to fix Tunnel Fighter.
	- Philip Wyett fixed a few VC compiler warnings in csdemo and phyztest.
28-Apr-2001
	- Removed a type->DecRef() in engine.cpp. The mesh object type
	  plugins can remain in memory. This DecRef() caused crashes
	  for csdemo.
	- Small fix in the sequence manager.
	- Fixed demo so that timewarping backwards with the big jump
	  ('<' key) will now restart the entire sequence manager which
	  means that child sequences will be correctly respawned. This
	  does not happen with the ',' key though.
	- Several small enhancements to csdemo:
	    - Fix with time warping again. Paths were not correctly cleaned up.
	    - Slowed down entire demo 50% because speed was a bit too fast
	      to see everything good. However, this does mean that some
	      parts of the demo are a bit too slow now. So I will have
	      to do some path modifying again or else add extra stuff
	      to look at at those slow moments.
	    - Added '/' key to restart sequence manager and go back to the same
	      point in time.  This is useful to get all paths running ok again.
	    - The forward/up vector editor now correctly sets all objects
	      to the time of the point you are editing.
	    - Added new shuttle model from Michael Voase.
	    - Added new station model from Thomas Hieber (as yet untextured).
	- Wouter Wijngaards added a bumpmapping test application.  It contains
	  a procedural texture that is used to approximate bumpmapping.	 3d
	  hardware may be able to do bumpmapping nicer looking and faster, if
	  it supports bumpmapping.  If it does not support bumpmapping, the
	  procedural texture is a good fallback option, that will run on almost
	  any hardware (and software too if we fix that).  Note that the
	  software renderer does not really like the tiling and DPFX calls, so
	  the texture is stretched a bit - there is one triangle where you can
	  see what it should look like.	 Under opengl the results look nice.
	  Note that this is a test for now.  The code has not been optimized at
	  all.	And the computed overlays could be cached too.	So don't look
	  at framerates.  When you start the application, you can see some wood
	  texture on the left (unbumpmapped).  You can see a stone texture on
	  the right (the bumpmap texture).  And the wood bumpmapped with stone
	  is in the middle.  In the lower right hand corner you can see a debug
	  view of the bumpmapping.
	- Norman Kramer fixed the bug that made indexed bmp images fully
	  transparent.
27-Apr-2001
	- Martin did some further work on csparser and csengine.
	- Philip Wyett added csdemo.cfg to makefile inorder that it is
	  generated into MSVC project workspace.
	- Did some work on 3ds2lev:
	    - Added -3 option to allow convertion to 3D sprites. Seems to
	      be more or less working but it is not yet complete. I want
	      to add support for multiple objects.
	    - Added -vv option to do a very verbose output. With this option
	      it will show all chunks in the 3DS files that it encounters.
	    - Made level output a little more compatible with current CS
	      world file syntax.
	    - Removed unused -m option.
	    - Removed unused -f option.
	    - Renamed -l to -pl.
	    - Added new -l to list all objects in 3ds file.
	    - Added new -m option to convert one specific object
	      from the 3ds file. Specify the object with a number that you
	      get from -l. This technique is useful for converting one
	      3ds file to several 3D sprites.
	    - The -v option will now also show the local transformation matrix
	      and translation vector of all objects in the 3ds file. That
	      is useful for making hierarchical objects in CS.
	    - Added -r option to relocate the 3ds objects inside. -r is
	      executed AFTER -s.
	    - Renamed -y option to -f (force).
	    - Added -xyz, -xzy, -yxz, -yzx, -zxy, and -zyx commandline options
	      to change the order of the x,y,z components from 3DS to CS.
	      Default is -xyz.
	- Probably fixed a bug in the csdemo sequence manager with regards
	  to time-warping. Not sure though. This is complicated stuff and
	  I'll have to look a little closer at it.
	- Added iSequence::GetMainTime() to get the current time from
	  the sequence manager.
	- Using the above new function I greatly simplified processing
	  of time in the demo sequence manager. All operations that are
	  supposed to be handled by the sequence manager now operate
	  on sequence manager time and no longer use the real time.
	  This possibly fixes a time misalignment bug that sometimes
	  seemed to occur when doing big time warps.
	- Norman Kramer added saving to bmp plugin.
	- Norman also added the ability to save tga files.
26-Apr-2001
	- Philip Wyett fixed gcc outputting Worm.dll and Dog.dll. Now
	  outputs worm.dll and dog.dll.
	- Philip changed the makefile system so that INTEL is replaced
	  with X86. This will please people that have an AMD processor :-)
	- Extended the fire particle system loader with a new ORIGINBOX
	  keyword which allows the origin to be specified as a box. The
	  fire particle system could already do that but the loader didn't
	  support it. Fixed saver to save to ORIGINBOX instead of ORIGIN.
	- Additionally added support for DIRECTION keyword in fire loader
	  and saver.
	- Updated documentation to reflect above changes and also added
	  BASECOLOR keyword to the spr3d doc.
	- Added iEngine::DeleteMeshFactory(), LoadMeshFactory(), and
	  LoadMeshObject() convenience functions. The last two are especially
	  nice as they give an easy way to load a mesh object or factory from
	  a loader plugin.
	- Added iMeshWrapper::AddChild() to add a child mesh to some parent
	  mesh. This routine correctly unlinks the mesh from its previous
	  parent (can be the engine or another mesh).
	- Fixed sector handling in mesh wrapper so that children will now
	  automatically be moved to the correct sector when the parent is.
	- Added iEngine::NextFrame() (to complement csEngine::NextFrame()).
	- Added subtract operations to csColor.
	- Did many optimizations to the fire particle system by
	  precalculating a lot.
	- Did an optimization in the engine. When a mesh is marked as
	  invisible (CS_ENTITY_INVISIBLE) csEngine::NextFrame() will not
	  process it.
	- Did an additional optimization so that mesh objects will only call
	  NextFrame() as soon as they are really drawn on screen. i.e. as
	  soon as DrawTest() returns true. This should increase global
	  speed of the engine if there are many particle systems and sprites
	  in the world but they are all currently invisible.
	- Worked more on csdemo.
	- Martin Geisse did a small bug fix in engine.cpp.
	- Simplified the sequencer in csdemo. There is now no special handling
	  of the camera path as opposed to mesh object paths. There are
	  simply paths that are attached to either a mesh or a camera.
	  Remove PATHMESH and PATHCAMERA commands and replaced with PATH.
	  Also added the possibility to replace the object on a path with
	  another. That way you can let the camera view be replaced by
	  some object and set the camera else-where for example. This
	  can be set with the ATTACH command.
	- Martin Geisse changed csdemo to use a config file.
	- Martin did some further work on csparser and csengine.
	- Norman Kramer removed the DO_<image format> variables. select
	  the image plugins by commenting in/out the appropriate PLUGIN
	  lines.
	- Norman Kramer added the ability to save jpg files to the jpg
	  plugin.
25-Apr-2001
	- Philip Wyett cleaned up formatting in ptlab.cfg.
	- Martin Geisse added an SCF interface for collection (iCollection).
	- Martin renamed csEngine::CreateCamera to CreateCameraPosition
	  which better describes its purpose. It also returns the
	  iCameraPosition now. CreateCollection now looks if a collection
	  with the given name exists before creating one.
	- Extended 3D sprite mesh plugin with SetBaseColor() and
	  GetBaseColor(). This color is added to the color of all vertices.
	  This works both with or without lighting. Also added BASECOLOR()
	  keyword for the loader of 3D sprites.
	- Further improved csdemo with new path editing capabilities.
	  Added laser beams for the fighers. Added photon torpedo.
	  Increased the resolution of the star-field...
	- Fixed all image loader plugins to make a global var static.
	  If this doesn't happen then it isn't possible to statically link
	  the image loaders.
	- Eric Sunshine modified user.mak so that the gif, png, jpg, and mplex
	  image loaders are listed under PLUGINS rather than PLUGINS.DYNAMIC.
	  These image types are used very commonly, so they will almost
	  certainly be required by any application which is linked statically.
	  Therefore, they should appear in PLUGINS.  The other less commonly
	  used image loaders, bmp, tga, sgi, and wal are still listed under
	  PLUGINS.DYNAMIC.
	- Eric Sunshine added a $(Z_LIBS) reference to LIB.PNGIMG.SPECIAL in
	  pngio.mak.  It is necessary to link this plugin with zlib since
	  libpng requires it.
24-Apr-2001
	- Martin Geisse possibly fixed the lockup that Philip get when
	  exiting Blocks. The bug was in the WaveOut sound driver.
	- Tried to fix OpenGL colors on my system but it fails for text.
	  Don't know what is wrong. I did fix a few things though. Colors
	  should now be right for lines and other 2D features.
	- Did a lot of enhancements on csdemo with regards to online editing
	  of all the paths. Also improved the looks of the flare.
	- Wouter Wijngaards did the following:
	  you can now override the default for the 3d card capabilities.
	  In data/config/opengl.cfg.
	- Martin Geisse fixed a warning for Win32/csosdefs.h.
	- Further extended csdemo with a more descriptive display of the
	  current selected point in the selected path (in edit mode).
23-Apr-2001
	- Norman Kramer fixed phyztest. Now compiles again, the chain seems
	  to work, but the spring falls through the sector walls.
	- Norman changed CSFX to CSGFX in video.mak.
	- Norman swapped red and blue in avi plugin.
	- Philip Wyett did further work on the WinCVS tutorial.
	- Fixed 'walkall' target. Removed obsolete 'imgload' target and
	  added 'imgplex', 'gifimg', 'jpgimg', 'pngimg', and 'bmpimg'.
	- Added csCubicSpline::InsertPoint(), RemovePoint(), SetTimeValue(),
	  and SetDimensionValue().
	- Made a csSpline superclass. Let csCubicSpline inherit from this.
	  Added csBSpline and csCatmullRomSpline.
	- csPath now inherits from csCatmullRomSpline. This is much nicer.
	- Added csPath::SetXxxVector() and GetXxxVector().
	- Added iCamera::Perspective() and InvPerspective().
	- Added a new generic demo application. At this moment it is still
	  not totally generic. For that I need the loader as a plugin which
	  isn't possible yet. So at this moment you have to modify the app
	  to have other objects. The sequences are load dynamically however.
22-Apr-2001
	- Norman Kramer split the image loader into several plugins
	  (iImageIO). Also added support for image saving (currently only
	  implemented by the png plugin).
	- Norman Kramer fixed several apps so that they use the new png
	  saver plugin.
	- Added iBaseHalo, iCrossHalo, iNovaHalo, and iFlareHalo SCF interfaces
	  to access halo's.
	- Added CreateCrossHalo(), CreateNovaHalo(), and CreateFlareHalo()
	  to iLight.
	- Fixed a bug in software renderer GetZBuffValue(). When the z-buffer
	  was initializes to 0 it would return 0. But it does return 1/0 so
	  instead we now let it return a very big value. This fixes halos
	  for example for apps that initialize the Z-buffer (walktest doesn't).
	- Did a similar fix to the OpenGL version of GetZBuffValue().
	- Added 'stars' mesh object plugin. This can be used to simulate
	  movement in space. At this moment this plugin doesn't work yet.
	- Philip Wyett did a temporary hack to fix compile errors introduced
	  by Wouter's changes yesterday.
	  x, y and z are not part of csBox3, thus "state->GetOrigin().x",
	  "state->GetOrigin().y", "state->GetOrigin().z" generates errors.
	  Changed to "state->GetOrigin().MinX" etc. as a temp fix which still
	  leaves the 'flame' working when introduced into 'walktest'.
	- Fixed a small compiler error in the fire loader.
21-Apr-2001
	- Changed csCubicSpline so that it is no longer required to first
	  set the time values and then the dimension values. Precalculation
	  of derivatives is delayed until later.
	- With the help of Wouter Wijngaards, fixed csCubicSpline so that
	  it doesn't oscilate into infinity. But it isn't as smooth anymore.
	- Wouter Wijngaards did the following for the iso engine:
	  Added optimization to the iso Engine:
	    - A complex system of material registration (by the engine object)
	      which allows the polygons in the main pass to be rendered out
	      of order, sorted by material. This is supposed to be very good
	      for certain hardware. But not my hardware. Perhaps someone
	      with better hardware can test if framerates have improved.
	    - The iso engine can create iMaterialWrappers for you. Those
	      have the same interface as the regular 3d engine of CS.
	      Except that private object returns the iso object (which
	      is almost compatible). Also they implement
	      iIsoMaterialWrapperIndex, an interface that allows the iso
	      engine to get the index to sort by material. If no such
	      interface is detected, the polygon is drawn immediately.
	    - The isorenderview contains the buckets for sorting by
	      material. The buckets are kept preallocated (in an ever
	      growing queue).
	  For all this, the framerates in my software and opengl renderers
	  is exactly as it was before :-)
	- Wouter Wijngaards also says:
	  After getting a request to make a 3d fire particle system,
	  and due consideration of how other fire particle systems look,
	  I have come to the conclusion that the current fire particle
	  system is adequate for the task.
	  I have, however, ameliorated the current fire particle system
	  by allowing the starting origin to be given as a Box (possible
	  min=max, a point). Each particle is randomly started in the box.
	  The walktest demo 'flame' now starts the particles in a
	  square upon the ground. This is already pretty fiery. An
	  improvement would be having the artists for your game make a
	  nice particle texture.
20-Apr-2001
	- Philip Wyett added WinCVS tutorial to the CS docs.
	- Moved all flags from csMeshWrapper to iMeshWrapper.
	  Also added GetFlags() to iMeshWrapper.
	- Added SetMeshObjectFactory() to iMeshFactoryWrapper.
	- Added SetZBufMode() and GetZBufMode() to iMeshWrapper.
	- Made ball plugin more efficient for OpenGL by setting do_clip
	  right.
	- Added a new surface mesh plugin which will make a surface for
	  DrawTriangleMesh.
	- Added HardTransform(), GetWorldBoundingBox() and
	  GetTransformedBoundingBox() to iMeshWrapper.
19-Apr-2001
	- Martin Geisse did further work on csparser.
	- Martin also rewrote the DECLARE_TYPED_VECTOR macro to be really
	  type-safe.
	- Added a new sequence manager plugin. With this plugin you can manage
	  operations that have to be done at specific times. You define
	  sequences containing sequence operations. Sequences can be inserted
	  in the sequence manager which will perform the operations in that
	  sequence at the right time. Sequences can also contain operations
	  to spawn new sequences and sequences also have conditional
	  statements. The main purpose of this sequence manager is to allow
	  demos or intros which are controlled by this system.
	  The sequence manager is completely time correct (if it has no bugs
	  of course). The 'Do' function which you have to provide for
	  every sequence operation will get the difference between the time
	  now and the time that the operation had to be executed so you can
	  take corrective measures. The reason that operations are not always
	  executed at the right time is that frame rate can be low and
	  the sequence manager only gets executed once every frame.
	- Added cylindrical texture mapping option to the ball mesh plugin.
	  Normally the ball will only use a circle in the texture for both
	  the top and bottom halves. This is good for skydomes and so on but
	  not very useful for planets. So with cylindrical mapping the entire
	  texture is used. There is a new CYLINDRICAL keyword in the ball
	  loader as well.
	- Eric Sunshine reverted Philip Wyett's changes to blocks.cpp.	Philip
	  was trying to eliminate a hang at termination time on Win2000, but
	  only ended up side-stepping the issue by leaking the csSystemDriver.
	- Norman Kramer added a few missing DecRef()'s from WalkTest.
	- Wouter Wijngaards says:
	  Although Jorrit's fix for the out of bounds error in procedural
	  plasma, (an exact value of 256 could be generated) was correct,
	  I moved the fix to another, precalculated phase. This moves the
	  bounds test from the inner loop to the table precalculation.
	- Moved all flags from csEngine to iEngine.
	- Wouter Wijngaards added the distinction between static and
	  dynamic lighting to isometric engine. Lights are by default
	  static. Static lights are only recalculated when a static light
	  is changed in a grid. Dynamic lighting is calculated per frame.
	  The isotest now uses a dynamic light for the player, the
	  blue light is a static light.
	- Philip Wyett did some code cleanup in win32/csosdefs.h.
18-Apr-2001
	- Removed the test for stencil buffer since it seems that just doing
	  that test is enough to break significant parts of OpenGL on some
	  3D cards.
	- Fixed a bug with the software renderer which was introduced
	  by me yesterday. The bug caused DrawPolygonFX to give incorrec
	  results in some cases.
	- Fixed a small bug in the copy constructor of csFrustumContext.
	  The field first_time was not copied.
	- Added csColor::ClampDown() which will make sure color components
	  are not negative.
	- Fixed the terrain engine so that it will no longer generate negative
	  colors. This resulted in colorful displays on some 3D hardware using
	  OpenGL.
	- Eric Sunshine repaired the funky csPortalSectorCallback declaration
	  so that it is now sane.  (This fix also helps to appease VC++.)
	- Eric Sunshine eliminated a printf() format conversion warning from
	  lghtmap.cpp.
	- Eric Sunshine fixed csLoaderStats so that it compiles on OpenStep.
	  The OpenStep compiler is buggy and requires that an inline function
	  calling a second inline functions only do so after the second inline
	  function has already been seen by the compiler.
	- Fixed a bug in csCubicSpline. It was ignoring the dimension in
	  GetInterpolatedDimension().
	- Fixed csReversibleTransform::LookAt(). The was interpreting the
	  up vector in a negative way. I fixed Blocks too.
	- Fixed several bugs reported by a memory checker:
	    - In archive.cpp: free (buffer) with buffer == NULL.
	    - Fixed a bug in plasma procedural texture. It was sometimes
	      trying to access palette index 256 which is one out of bounds.
	      I fixed this by adding an overflow test for this which is
	      probably not the best way.
	    - Found a bad memory access in the software texture
	      cache. This is a bit more complicated so I did
	      not fix it yet but put a '@@@' comment there.
	      This bug could very well be the cause for the
	      bad texture cache contents that happens with very
	      thin polygons.
	- Martin Geisse added QueryObject() method to engine objects
	  (subclasses of csObject). This returns the iObject interface
	  for these objects, just like QUERY_INTERFACE, but is faster.
	- Christopher Nelson updated header files for skinned listbox
	  and scrollbar and also added sdscrbar.cpp default scrollbar skin.
	- Christopher also did the following:
	    - Updated csListBox to be a skinned object, now supports
	      cslfsTextured and cslfsBitmap.
	    - Updated csScrollBar to be a skinned object.
	    - Fixed dumb bug with csListbox and csScrollBar not being drawn.
	    - Fixed bug where bitmapped or textured dialogs don't
	      redraw children right.
17-Apr-2001
	- Martin Geisse eliminated some warnings in the function terrain
	  loader.
	- Philip Wyett eliminated three uninitialized variable warnings to ch
	  under VC6 (avi plugin).
	- Implemented TEST and NONE z-buffer modes for all perspective correct
	  texture mapping routines in the software renderer.  Also implemented
	  TEST z-buffer mode routines for all perspetive incorrect texture
	  mapping routines.  This completes support for all Z-buf modes in the
	  software renderer.
	- Fixed a bug in the OpenGL renderer with regards to clearing of the
	  Z-buffer.  When the last operation in the previous frame disables the
	  Z-buffer writing (glDepthMask()) then the clear of the Z-buffer will
	  not happen.  This is because glClear() actually listens to the buffer
	  write masks and doesn't update the buffer when the mask is disabled.
	  This affected iso mostly as CS normally doesn't require a clear of
	  the Z-buffer.
	- Started preparation work for stencil buffer support in OpenGL
	  renderer.
	- Added csCubicSpline to csgeom.  This is going to be used for an algo
	  to calculate a smooth path between points.
	- Wouter Wijngaards did the following update: The isometric sprites now
	  use zbuffer TEST mode when the sprite is transparent.	 This removes
	  some glitches in drawing overlapping transparent sprites.
	- Eric Sunshine reverted Philip Wyett's changes to blocks.cpp.
	  Philip's intention was to fix a problem with Blocks locking up at
	  termination time on Windows 2000.  Unfortunately, his changes were
	  entirely invalid for the following reasons:
	    - He moved the `delete' call for the system driver into its own
	      destructor.  Thus, the object's own destructor was trying to
	      destroy itself.
	    - He removed all code which performed termination-time clean-up and
	      shut-down.  Rather than actually solving the lock-up problem on
	      Windows 2000, he simply side-stepped the issue entirely by not
	      performing any application clean-up.  This is _not_ an acceptable
	      solution.
	- Eric Sunshine reverted Philip Wyett's change to walkdbg.cpp.	The
	  problem with this change was that Philip was addressing the symptom
	  of the problem rather than the problem itself.  Additionally, his
	  change added unnecessary pollution to the global name space.
	  Instead, I (Eric) solved the problem in a more correct fashion.
	- Eric Sunshine repaired the following makefile-related problems which
	  were recently introduced into the project:
	    - Removed the video/loader reference from mk/msvcgen/required.mak.
	      This was not the appropriate place to list this module.
	    - Removed the video/loader reference from mk/subs.mak.  This was
	      not the appropriate place to list this module.
	    - Added a video/loader reference to mk/user.mak.  This _is_ the
	      appropriate place to list such modules.
	    - Removed the obsolete csstdldr reference from mk/user.mak.
	- Eric Sunshine repaired imgload.mak so that it works correctly on
	  platforms which define a custom DO.PLUGIN makefile variable.	(In his
	  CVS log message for the previous version of this makefile, Norman
	  correctly speculated that I would end up changing things around.)
	  Fixing the problem required the introduction of distinct plugin build
	  steps in a fashion analogous to the DO.DEP1/DO.DEP2 solution of yore.
	  Also repaired glrender.mak, cspython.mak, csjava.mak, and cslua.mak;
	  all of which experienced the same problem.
	- Eric Sunshine added assignment operators for object duplication to
	  csFrustumContext and csLightingInfo in order to appease the NextStep
	  compiler which had difficulty synthesizing default assignment
	  operators for these objects.
	- Eric Sunshine eliminated several compilation warnings in
	  csSector::IntersectSphere().
	- Eric Sunshine commented out several bits of code in `levtool' which
	  broke following major changes by Jorrit to the engine.  This quick
	  patch allows the application to compile cleanly without crashing the
	  build process, despite the fact that the application is in need of a
	  major overhaul.  Also added CSGFX to the dependency list in
	  levtool.mak.
	- Eric Sunshine fixed SetGridChangeCallback() and
	  GetGridChangeCallback() in iso.h and isospr.h so that they compile
	  error-free with the broken NextStep compiler.	 Function pointer
	  references were confusing the electronic fellow.  In the process,
	  increased the likelihood that humans will be able to parse these
	  function protyptes as well.
	- Eric Sunshine added missing CSGFX dependency to blocks.mak.
	- Eric Sunshine added missing CSGFX dependency to cctest.mak.
	- Eric Sunshine added missing CSGFX dependency to csfedit.mak.
	- Eric Sunshine added missing CSGFX dependency to cswstest.mak.
	- Eric Sunshine added missing CSGFX dependency to map2cs.mak.  Also
	  worked around circular reference problem at link time between cssys
	  and csutil.
	- Eric Sunshine added missing CSGFX dependency to meta.mak.
	- Eric Sunshine added missing CSGFX dependency to squawk.mak.
	- Christopher Nelson added modified csdialog header for overlay
	  support. Also support for skinned listbox headers.
	- Christopher also did some further updates to cslistbox to make
	  it work better as a skinned control.
	- Christopher also implemented alpha with listbox.
	- Christopher squashed some bugs with display mess-ups using
	  bitmap frames and buttons in CSWS.
	- Implemented LookAt(), RotateOther(), and RotateThis() in
	  csReversibleTransform. These functions used to be in csCamera
	  but now csCamera simply inherits them.
	- Also removed LookAt() from iCamera. This is now in the
	  return transform.
	- Removed RotateWorld() and Rotate() from csCamera and iCamera.
	  Use RotateOther() and RotateThis() in csReversibleTransform.
	- Added csPath to csgeom library. This is a subclass of
	  csCubicSpline that will interpolate over 9 dimensions (position,
	  up-vector, and forward-vector). This is ideal in combination with
	  csReversibleTransform::LookAt() to have an object or camera move
	  along a path. This code (as well as the cubic spline code) is
	  totally untested at this moment.
	- Fixed the python plugin and pysimp applications so that they
	  work again.
	- Philip Wyett fixed Blocks on Windows 2000 again after Eric
	  reverted his previous (bad) fix.
	- Norman Kramer added a new export script for Blender 2.12 (scripts/
	  blender/csexp212.py). This script can export all meshes in a scene
	  to mesh factories. All the factories are placed in a LIBRARY called
	  scene.lib.
16-Apr-2001
	- Added iEngine::CreateSectorWallsMesh().
	- Fixed simplep (plugin version of simple) so that it works again.
	- Philip Wyett fixed a little nasty bug under Windows 2000 for Blocks.
	  Removed void cleanup() and all it's calls and moved all it's contents
	  to the blocks destructor.  This fixes where Windows 2000 could not
	  successfully close the app and locked up (non responding).
	- Philip also removed lots of compiler warnings in VC6 port.  85% of CS
	  warnings many VC specific and some which should have been apparrent
	  in other compilers.
	- Wouter Wijngaards did some more work on the isometric engine:
	    - Changed size of front facing sprites to be more correct.	(less
	      fat).
	    - Added a 'halo' sprite for the blue light in isotest - you can see
	      the alpha problems using both transparent sprites now.  However,
	      when I try to enable ZBUF_TEST, the effect is ZBUF_NONE.
	- Wouter also changed the demo particle systems in walktest to use
	  ZBUF_TEST mode.  This makes them look a lot better.  For the 'flame'
	  commans (a fire particle system), this helps a lot.
	- Martin Geisse extended the iEngine interface and added iTextureList.
	- Martin also added lots of methods to iTextureWrapper.
15-Apr-2001
	- Martin Geisse removed csstdldr, the test application for it, the
	  iLoader interface and renamed iLoaderNew to iLoader.
	- Martin also made the csparser stats counter a non-static member of
	  csloader
	- Martin added a parameter to the Delete(), Replace() and DeleteAll()
	  functions of csVector that lets you choose whether to free the
	  deleted element.
	- Philip Wyett did the following:
	  Brought VC6 port into the new millennium by updating png lib used
	  from 1.0.0.2 to 1.0.1.0.  This update offers many little texture
	  artifact fixes/improvements which I will not bother to list, check
	  the apps for yourselves.  ;-)
	  Updated MSVC project file auto-generation process to elimate
	  '/NODEFAULTLIB: "LIBC"' warnings generated by the change.  Updated
	  docs to point to location of new winlibs package (version 16) where
	  it will be stored on the 3D Downloads site.
	  NOTE:
	  The new lib requires use of a new "png.dll", which can be
	  obtained temporarily from the Red Eye Entertainment server.
	  "winlibs16.zip" can be obtained via the following link:
	  http://www.redeye-entertainment.co.uk/downloads/cs/winlibs16.zip
	- Significantly updated the new function terrain engine. The main
	  structure has basically been totally restructured. There is a
	  new LOD algorithm that works with edge collapsing. This works
	  a lot better than the old algorithm but I'm still not completely
	  statisfied. Either there is a bug in the algo somewhere (likely)
	  or else the algo itself is flawed because at high lod levels
	  the triangle distortions are rather large.
	  There is also a big speed improvement for the terrain engine
	  on 3D cards that support hardware accelerated transform and
	  lighting. When a terrain block is fully visible the no_clip
	  variable will be set to false meaning that the renderer can
	  use the fast version of DrawTriangleMesh. This makes the
	  terrain almost four to five times faster on a GeForce. This
	  is still not the best solution. The best solution is that the
	  hardware itself performs the clipping somehow (stencil?).
	- Philip Wyett did a minor update to win32.txi.
	- Richard D. Shank did a minor update to win32.txi.
14-Apr-2001
	- Philip Wyett added 'include imap/parser.h" and fixed many of a slew
	  of compiler errors in the app.  App is still broken though at
	  present.
	- Martin Geisse fixed a few more applications with regards to the
	  csparser stuff.
	- Martin also did further work on csloader:
	    - Added a new image format flag that indicates an invalid format.
	      This flag may not be used in csImage or the image loader, but
	      higher-level modules such as csloader may use this flag to say
	      'use the default format'.	 It's much like the NULL pointer.
	    - Extended csLoader::LoadImage() so you can choose an alternate
	      format for the image.
	    - Extended csLoader::LoadTexture() so you can choose an alternate
	      texture manager for the texture.
	    - Ptlab uses the extended LoadImage() instead of its own function.
	    - Cleaned up the way csloader handles plugins.
13-Apr-2001
	- Martin Geisse did the following changes:
	    - Added texture loading methods to iLoaderNew.  The loader now uses
	      these functions for texture loading.
	    - Added a temporary function to iTextureWrapper to get the private
	      csTextureWrapper object.
	    - Fixed a bug in csTextureWrapper.
	    - Fixed VC compilation problems in csPortal.
	    - Made all static functions non-static.
	    - Removed all unneeded static variables and cleaned up some
	      temporary stuff.
	    - Added interface methods for all public loading functions.
	    - Parser plugins are now unloaded at destruction.
	    - Moved loading mode definitions to imap/parser.h.
	    - Removed a lot of unneeded csloader.h includes.
	    - Changed csparser to use iLoaderNew for sound loading.
	- Wouter Wijngaards updated the iso engine. The engine now has
	  colored, dynamic lighting. Shadows are calculated in realtime.
	  In addition he did the following things:
	    - Smaller player.
	    - Added a stone pillar to the isotest app to show the lighting and
	      shadows.
	    - Added a nice doorway to show off lighting.
	    - The blue light now uses another attenuation type, nicely casts
	      through the door opening now.
	    - The vertical scale has been corrected for the skew.
	    - Performed some speed optimisations.
	    - Added mouse support to isotest.  You can click where you want to
	      move to.
	    - Made keyboard cursorskeys in isotest more intuitive.
	    - Added support for transparency in the isometric engine.
	    - Changed the player sprite in isotest to be partially transparent.
	- Michael Voase declared spr_write() in impexp.h. csparser now
	  compiles.
	- Fixed Philip's fix on the terrain engine. Now it works AND
	  compiles on VC.
	- Philip Wyett fixed texture loading errors in ptlab and video.
	- Luca Pancallo extended ASE importer in impexp. Luca also added
	  a CS sprite exporter.
	- Fixed a VERY old bug in all 3D renderers with DrawTriangleMesh.
	  The bug was that triangles that are very close to the camera (i.e.
	  one or more vertices are behind the view plane) were simply rejected.
	  But this means that triangles could get clipped away completely
	  even when visible. This badly affected the terrain engines (both
	  DDG as terrfunc). At this moment the problem seems 95% solved. There
	  are still situations where polygons disappear when close to the
	  camera but it is rare now. I will look at this later.
	- Worked on a better LOD system for new terrain engine. This LOD
	  system is based on the principle of edge collapsing (but with
	  a better cost function than the one that is used for sprites).
	  It isn't finished yet so there is nothing to see at the moment.
12-Apr-2001
	- Philip Wyett fixed a couple of function declaration redefinition
	  compile errors under VC6.
	- Philip fixed a problem in VC with the terrain engine.
	- Added support for 'KEY' nodes in terrain objects.
	- Extended iTerrainObject with GetDirLightPosition(),
	  GetDirLightColor(), and IsDirLightEnabled().
	- Added new cmd_AnimateDirLight key command to WalkTest. This will
	  animate a directional light for a terrain object.
	- Added SetReversed(), IsReversed(), SetTopOnly(), and IsTopOnly()
	  to the ball mesh plugin. With reversed mode you can let the
	  triangles be visible from the inside instead of outside. With
	  top-only only the top half of the sphere is generated. Using
	  these two flags you can make a skydome. Also extended the ball
	  loader with the keywords REVERSED and TOPONLY.
	- In addition also added SetLighting() and IsLighting() and the
	  LIGHTING keyword.
	- Finally added SetColor() and GetColor() and COLOR keyword to set
	  the base color for the ball.
	- Added a new terrain engine. This one is a lot simpler than the
	  DDG engine and is based on a function instead of a heightmap.
	  You can of course use a function that reads from a heightmap. In
	  the future there will be a convenience function that does this.
	  You can also optionally give a function that will return normals
	  (for lighting). If you don't give such a function it will try
	  to calculate the normals itself. The terrain engine supports
	  LOD (four levels of LOD). You can divide the terrain in blocks.
	  Every block has its own texture and has four levels of LOD.
	  The terrain engine also supports dynamic directional lighting.
	  Note that this is unfinished work. There are still some bugs in
	  CS to solve (same bugs that make the DDG terrain engine not
	  look nice) and better visibility testing is also needed.
	  The default function for the terrain is a sin+cos function.
	  Also LOD is not really implemented at the moment.
	- Removed SKYDOME keyword from thing loader. Skydomes can now
	  be done using the ball mesh plugin.
	- Fixed an initialization bug in the new terrain engine. It should
	  now work.
	- Also started working a little on LOD support. Not finished yet.
	- Norman Kramer fixed a VERY weird bug in ScanStr. If you used
	  ScanStr with %b it would actually crash in very rare cases
	  (like with the ball loader plugin). Fixed it by replacing
	  the va_arg type for %b by 'bool'. It used to be 'int'. I have
	  no idea what is going on here and I also don't know why this
	  problem suddenly pops up now.
11-Apr-2001
	- Norman Kramer fixed ptlab.
	- Norman Kramer fixed the video app so that it works completely
	  through the new mesh object system.
	- Wouter Wijngaards added an isometric engine plugin. This is only
	  the first version and it still needs a lot of work. But it
	  compiles and runs. There is an isometric engine plugin and
	  an isotest application.
	- Added the notion of recursion level in csRenderContext. Also added
	  GetRenderRecursionLevel() and SetRenderRecursionLevel() to
	  iRenderView. Using this the engine will be able to test how deep
	  it is with going through portals.
	- Added the notion of render context data. This is data that can
	  be attached to a recursion level in the render context and can
	  also be retrieved while that recursion level is active. If a
	  recursion level is deleted (when coming back from a portal for
	  example) all the render context data will also be deleted.
	  Render context data has a key (void*) and a value (iBase*).
	- Using the above changed I fixed a potentially serious bug in the
	  visibility culling system. The visibility culling and drawing
	  are now separate actions. However the thing which does the
	  visibility culling wants to remember all polygons that were found
	  visible in a queue so that when the same thing is rendered later
	  only those polygons are rendered. This worked fine before I
	  implemented render priorities because the thing containing the
	  culler (bsp/octree) was rendered first. However with render
	  priorities this is no longer guaranteed and there can be situations
	  in which there are other things that are rendered first before
	  the thing containing the culler. In really bad cases those other
	  things could in theory contain portals to sectors and those portals
	  could eventually cause the same thing with the culler to be
	  rendered. But this would cause an overwrite of the polygon
	  queue! This is now fixed by attaching the render queue as
	  render context data to the current recursion level. When a portal
	  is traversed it may potentially also want to use this queue but
	  it will use another one because it is in another recursion level
	  so other render context data is used.
	- Added csSector::RelinkMesh(). This is used to relink a mesh
	  when conditions in the mesh have changed (like render priority).
	  The sector needs to know this to put the mesh in the right render
	  priority queue.
	- Fixed csMeshWrapper::SetRenderPriority() so that it will notify
	  all the sectors where the mesh is by calling RelinkMesh().
	- Added SetLighting() and IsLighting() to iSprite3DState. Extended
	  sprite loader plugin with LIGHTING keyword. Extended sprite saver
	  plugin with support for saving LIGHTING value. Extended 3D sprite
	  plugin to disable lighting based on this flag (default is lighting
	  enabled).
	- Fixed 3D sprites so that they use GetFullTransform() for lighting
	  too. This means that lighting will now be correct if a sprite is
	  used from within a hierarchical transformation.
	- Fixed a bug with lighting for 3D sprites and other mesh objects.
	  When there were no lights reaching a sprite anymore (after having
	  been hit by one or more lights before) the lighting would not be
	  disabled.
	- Extended RENDERPRIORITIES system with a sorting parameter. This
	  sorting parameter is not yet used but the parser already parses
	  it. Possible values are BACK2FRONT, FRONT2BACK, or NONE.
	- Fixed a few small problems in the DDG landscape plugin (mostly
	  source code cosmetic ones).
10-Apr-2001
	- Implemented render priority queues in sectors. All meshes added to
	  a sector will automatically be placed in the right queue. At render
	  time they will be rendered in the right order.
	- Fixed a bug with visibility culling. Meshes that are already in
	  the sector at the time the culler is created were not registered
	  to the visibility culler.
	- Added csEngine::GetSkyRenderPriority(), GetWallRenderPriority(),
	  GetObjectRenderPriority() and GetAlphaRenderPriority().
	- When a new mesh object is created it will by default get object
	  render priority.
	- Fixed a crasher bug when cleaning up the mesh priority queues
	  in csSector.
9-Apr-2001
	- Michael Voase did a slight visual change to MazeD.
	- Michael also removed bogus comment about non existant bug
	  in the loader.
	- Norman Kramer fixed the case insensitivity problem in scf
	  classname construction (for avi) (hopefully there aren't codecs
	  that distinguish by case only).
	- Norman also fixed a color problem in the avi plugin.
	- Removed the 'movable' from csThing. The 'movable' is part of the
	  mesh wrapper and the one in csThing should not be used.
	- csThing no longer implements iVisibilityObject as the mesh wrapper
	  already does this.
	- Removed MarkVisible() and related functions from csThing.
	- Removed sky and template flags from csThing. Sky support will soon
	  be reimplemented using render order techniques.
	- Removed zbufMode from csThing. This is part of mesh wrapper.
	- Made csThing::Draw() and DrawCurves() smarter. If a thing cannot
	  move (which is default and occurs a lot) these functions will not
	  try to use the movable anymore. This makes it a bit more efficient.
	- Removed csLight::CalculateLighting() for csThing.
	- Also removed csSector::ShineLights() for a csThing.
	- Fixed a bug in the use of csPortal::CompleteSector(). When this
	  function returns false all routines will now correctly stop
	  processing that portal.
	- Fixed a bug in infinite maze (-infinite option of WalkTest) which
	  makes it work a little better but still not good enough (still
	  crashes when trying to complete the first sector).
	- Added iVisibilityCuller::Setup(). This function will setup the
	  visibility culler. It replaces csThing::BuildStaticTree().
	- Removed iSector::CreateBSP().
	- Added a parameter to csSector::UseStaticTree() which indicates
	  the mesh object to use for visibility culling. In addition the
	  STATBSP keyword in map files now requires an additional parameter
	  which is the name of the mesh object to use for visibility culling.
	  At this moment the only way to use this is to have a thing mesh
	  object and add the VISTREE() flag to that.
	- Renamed csSector::static_thing to culler_mesh. Also made it a
	  mesh wrapper instead of a thing.
	- I disabled a lot of more of the octree debugging stuff in WalkTest.
	  This is all broken now.
	- Removed the 'things' console command. It is broken now and needs
	  to be replaced with something more general.
	- Renamed STATBSP to CULLER. This is more accurate.
	- Renamed csSector::UseStaticTree() to UseCuller().
	- Stared work on render priority system. The engine will keep a list
	  of all named render priorities (to avoid using numbers by the
	  objects). Internally every render priority name corresponds with
	  a number. In every sector objects are rendered sorting on this
	  render priority (low numbers first). In future it will also be
	  possible to render all objects of the same priority using some
	  other sorting criterium (like material or distance to camera for
	  transparent objects). There are always four predefined named
	  render queues. They are called 'sky' (2), 'wall' (4), 'object' (6),
	  and 'alpha' (8). The values between the brackets are the default
	  values of those queues.
	- Added SetRenderPriority() and GetRenderPriority() to iMeshWrapper.
	- Added RegisterRenderPriority(), GetRenderPriority(), and
	  ClearRenderPriorities() to csEngine.
	- Added RENDERPRIORITIES section in world file. There you can define
	  the names of priority queus which can then be used for all objects.
	  This command causes all previously defined render priority queues
	  to be undefined except for sky, wall, object, and alpha. These
	  will be preset to the default values of (2, 4, 6, or 8).
	- Added support for PRIORITY keyword in MESHOBJ. For a MESHOBJ
	  the default depends on other settings. If ZFILL is given for the
	  object the default will be 'wall'. If ZNONE or CAMERA is given
	  the default will be 'sky'. If ZTEST is given the default is
	  'alpha'. Otherwise the default is 'object'.
	- Other than all the support above render priorities are still not
	  used by the engine.
	- Fixed csclear library so that it compiles.
8-Apr-2001
	- Extended iPortal with SetPortalSectorCallback() to set a callback
	  that is called whenever a sector for a portal is missing. This
	  callback will get either a reference to a iRenderView (when drawing),
	  a iFrustumView (when doing CheckFrustum) or else NULL (for HitBeam).
	- Changed csPortal::CompleteSector() to a function which
	  completes the sector using the new callback above.
	- Added CheckFrustum() to iPortal.
	- Added iPolygon3D::CreateNullPortal() to create a NULL portal
	  (a portal pointing to a NULL sector).
	- Added iFrustumView::StartNewShadowBlock().
	- Added iFrustumView::CopyFrustumContext() and SetFrustumContext().
	  These functions are specifically used to be able to remember
	  the current context and restore it later.
	- Using all the above I tried to fix infinite maze but it still
	  crashes somewhere. Will look at this later.
	- Same for -huge option. It compiles but doesn't work (but I suspect
	  it wasn't working before either: todo for later).
	- Fixed WalkTest to use mesh wrappers instead of csThing.
	- Removed csSector::Prepare() as this is no longer needed (Prepare()
	  is called transparently by the thing).
	- Removed csEngine::PrepareSectors().
	- Removed support for things and skies in csSector. Only mesh objects
	  are supported now.
	- Removed csPolyIt and csCurveIt (polygon and curve iterators) in
	  csEngine. Since polygons and curves are private to things these
	  iterators don't make sense anymore.
	- Side note: in the process of this entire engine redesign many
	  debug commands in WalkTest are broken now. They will probably
	  be resurrected soon.
	- Side note: radiosity is now broken too!
	- Removed the list of skies, things, and thing templates from
	  the engine and all functions related to those (like FindThing(),
	  ...).
	- Fixed several other apps to the change from things to mesh objects.
	- Also fixed MazeD so that it compiles again but MazeD is now getting
	  more and more broken. MazeD can only revive if it gets the ability
	  to edit mesh plugins (preferably through other plugins as well).
	- Martin Geisse updated the sound system documentation.
	- Martin fixed the garbled output from streamed sound in ds3d.
	- Norman Kramer added interfaces iSprite2DUVAnimation and
	  iSprite2DUVAnimationFrame. Also extended iSprite2DState
	  and iSprite2DFactoryState accordingly. With those new interfaces
	  it is now possible to do UV animation (texture coordinate
	  animation) for 2D sprites.
	- Norman added ANIMATE keyword to the spr2d object to select
	  an uv animation.
	- Norman also documented UV animation for 2D sprites and added
	  an example.
7-Apr-2001
	- Renamed MESHOBJ to MESHFACT in the map file format wherever
	  a mesh factory is wanted. This is less confusing.
	  This affects library and map files.
	- Fixed a bug in the thing loader when there is no default material
	  specified in the thing itself but only in the polygon.
	- Completely converted flarge to use mesh objects alone.
	- Removed all support for THING, SIXFACE, and SKY keywords in
	  the standard loader. This means that sky objects are now no longer
	  supported. To implement sky objects in the future we will use the
	  proposed render order setting for mesh objects in general. This
	  is a todo for later (but not long from now).
	- The old LoadThing() to load a thing from a file is replaced
	  with a LoadMeshObject() that can be used to load any mesh object
	  in general. For LoadThingTemplate() to load a thing template you can
	  use LoadMeshObjectFactory() instead.
	- Removed all obsolete token keywords from the default loader.
	- Fixed a bug in LoadMeshObjectFactory(). It was deleting all loaded
	  plugins for nothing.
	- Changed csPolygon3D::UpdateVertexLighting() to use iLight instead
	  of csLight and extended iPolygon3D with UpdateVertexLighting().
	  This is also a temporary function though.
	- Added GetPolygon(name) to iThingState.
	- Converted Blocks to use mesh objects instead of csThing directly.
	- GetRadius() and GetObjectBoundingBox() in iMeshObject of csThing
	  are now correct.
	- Martin Geisse did some clean-up work in the image loader.
6-Apr-2001
	- Martin Geisse did the first changes towards moving csparser to
	  a plugin:
	    - Added iLoaderNew interface which should finally replace iLoader
	      (in imap/parser.h).
	    - csLoader no more contains only static member functions. It is
	      also an implementation of iLoaderNew. In the end the static
	      member should all disappear. In the meantime, it csLoader
	      contains a static pointer to an instance of that class, as
	      soon as an instance is created. This is used by the static
	      functions to access non-static functions. This means that if you
	      want to use csLoader functions, even static functions, you
	      should first create an instance of it. You should do this
	      by loading it as a plug-in. The plug-in must be statically
	      registered (e.g. with REGISTER_STATIC_LIBRARY).
	    - Changed the load_image function to a plugin method (as the
	      first of all).
	    - Changed the applications to match the above rules.
	- Martin Geisse fixed a bug in cctest.
	- Martin fixed a bug in csstring.
	- Martin fixed a bug with the ball mesh plugin. He added the missing
	  do_clip parameter in csBallMeshObject::Draw().
	- Martin removed some unneeded dependencies on csgfx.
	- Philip Wyett fixed a bug in simple.
	- Philip updated MingW package version number to 0.20.
	- Wouter Wijngaards added /usr/lib/crystalspace to the installation
	  search for the unix driver.
	- Fixed a bug in drawing of things which are represented in the
	  mesh object system. The movable is now taken from the mesh
	  wrapper.
	- Fixed bug in lighting of things (CheckFrustum). The movable
	  is now a parameter to CheckFrustum.
	- Fixed lighting for mesh object things used in a BSP tree as well.
	- Added new iMaterialList interface and let csMaterialList implement
	  it.
	- Fixed SCF declarations for csMaterialWrapper. It was using
	  DECLARE_IBASE() when it should have used
	  DECLARE_IBASE_EXT (csPObject).
	- Added iEngine::GetMaterialList().
	- Extended iThingState with ReplaceMaterials().
	- Using all of the above I implemented material sets in the
	  thing loader plugin.
	- Added support for SKYDOME keyword in thing loader plugin.
	- Removed support for TEXTURE statement in bezier template loader.
	  I have absolutely no idea why it was there but it was making
	  life difficult for me :-)
	- Moved loading of bezier templates from THING to WORLD level where
	  it belongs. The new CURVE command in THING will no longer load the
	  template but instead make a curve based on a named curve template.
	- Curved surfaces are fully working again (also with HARDMOVE).
	  It was a combination of several bugs that prevented the donut
	  in flarge from looking ok.
	- Added temporary CreateBezierTemplate() and FindCurveTemplate()
	  functions to iEngine. These are going to be used for a new addon
	  that loads bezier templates in the engine. Later bezier templates
	  will move to the thing plugin itself and then these functions
	  can be removed.
	- Changed crystalspace.mesh.loader.plane to
	  crystalspace.mesh.loader.thing.plane.
	- Added new bezier loader and saver to the thing loader plugin.
	  Bezier curve templates now have to be loaded through the ADDON
	  system as well (using crystalspace.mesh.loader.thing.bezier).
	- Added SetVertex() to iCurveTemplate.
	- Added iThingState::CreateCurve() to create a curve for a thing
	  from a given curve template.
	- Added iThingState::AddCurveVertex().
	- These changes make the thing loader plugin complete (except for
	  saving which is not implemented yet).
	- Removed support for loading BEZIER curve templates from the
	  standard loader. This should now be done using the ADDON
	  mechanism described above. Update flarge for these changes. Look
	  there for an example.
	- Fixed a bug in HARDMOVE command for mesh objects in loader. This
	  bug would cause things to be transformed wrong (at least their
	  transformation matrix) when used as a mesh object. It also affected
	  other mesh objects.
	- Added a new optional PLUGINS section to the world file. With that
	  you can give shorter names to plugins. This shorter name can be
	  used later in PLUGIN (...) statements instead of
	  'crystalspace.mesh.loader...'. The long plugin name is stil.
	  supported. Also note that a plugin will only be loaded if used.
	  So you can safely mention all plugins in the PLUGINS statement.
	  They will not be loaded until used.
	- Discovered that nearly all of the mesh loaders forgot to call
	  SetFactory().
	- Made the thing loader a bit easier with regards to the difference
	  between loading a mesh object and mesh object factory. For csThing
	  there is no difference. The difference is only in how the thing
	  is used in the engine. This means that things are the only mesh
	  objects that don't need a factory for creation.
	- Extended a hack in csloader with another temporary hack so that
	  portals in thing mesh objects are actually resolved to the right
	  sector. We need a better solution for this. Not sure how yet.
	- Added 'link' parameter to iEngine::CreateSector(). By default this
	  is true. When link is true the created sector will be added to the
	  list of sectors of the engine. This should be set to false if
	  you want to create a temporary sector that should not be added
	  to the engine sector list. A good example of this is when the
	  portal command generates a dummy sector that is resolved later.
	- Fixed collision detection bug in walktest. Walktest was trying
	  to query the csMeshWrapper for iPolygonMesh. It should query
	  the mesh object that is in the wrapper instead.
	- Extended csSector::IntersectSegment() to also look at things
	  inside mesh wrappers. This is an ugly solution and as many things
	  I'm doing these days it begs for a better solution. But first
	  getting things working again...
	- Also added initialization of collision detection for meshes
	  inside sectors. Now thing meshes will have proper collision
	  detection as well.
	- Added Yet Another Ugly Hack so that the engine will see if a thing
	  (inside a mesh wrapper) has CS_THING_VISTREE set and then use
	  that for visibility culling. People, keep in mind that all these
	  hacks are temporary :-)
5-Apr-2001
	- Fixed a bug in iPortal which prevented proper linking of all
	  CS apps on some platforms.
	- Fixed compile problem for python plugin.
	- Added the concept of general loader plugins to the loader. With
	  the new 'ADDON' keyword you can now use any loader plugin in
	  general. This can be used for loading game entities for example.
	  ADDON is supported for WORLD, LIBRARY, SECTOR, MESHOBJ (both as
	  factory and object), and TERROBJ (both as factory and object).
	  ADDON will in the future also be supported for COLLECTION and
	  NODE. The Parse() function in the plugin will be called with the
	  given parent object as the context.
	- The Parse() function for mesh and terrain loader plugins will now
	  also be called with the wrapper object as context. Unfortunatelly
	  this breaks a fix from Michael Voase which allowed the setting
	  of actions on 3D sprites loaded with the impexp importers.
	- Added 'SetFactory()' to iMeshWrapper.
	- Added 'GetPrivateObject()' to iMeshFactoryWrapper.
	- Fixed some ugliness in csparser where it would have to find the
	  original factory again after loading a mesh object. All loader
	  plugins are now responsible for setting the factory itself. They
	  can do this now because they receive the wrapper pointer as a
	  context.
	- Managed to re-fix the problem with actions being usable in
	  combination with models loaded as 3DS or MDL. This is a temporary
	  fix until these loaders have moved to a plugin but for now it
	  will do.
	- Created iPolyTxtPlane interface and let csPolyTxtPlane implement it.
	- Added temporary CreatePolyTxtPlane() and FindPolyTxtPlane()
	  functions in iEngine. These will be used until these planes are
	  managed by the thing plugin.
	- Implemented plane loader and saver (saver not working yet). Planes
	  are a bit special. They are objects that should be private to the
	  thing mesh object system (they are only used by things) so the
	  engine should not manage them. However planes can be shared accross
	  several thing meshes so it is not suitable to make them private
	  to one thing mesh either. So planes will be loaded by a general
	  (non-mesh object) loader plugin. This plugin is closely associated
	  to the thing loaders (implemented by the same shared library)
	  so it knows how to create planes for things. In the future planes
	  will be kept by the thing type plugin itself (global to all things).
	  For now this loader will load the planes in the engine.
	- Removed support for PLANE in library and world. Planes now have
	  to be loaded using the ADDON keyword and the
	  crystalspace.mesh.loader.plane plugin.
	- Added iPolygon3D::SetTextureSpace() with iPolyTxtPlane* as a
	  parameter.
	- Added SCF interfaces: iPolyTexType, iPolyTexNone, iPolyTexFlat,
	  iPolyTexGouraud, and iPolyTexLightMap. They are implemented by
	  csPolyTexType, csPolyTexNone, csPolyTexFlat, csPolyTexGouraud,
	  and csPolyTexLightMap respectively.
	- Added GetPolyTexType() to iPolygon3D.
	- Using the above interfaces I fixed the thing loader to correctly
	  load texture mapping information (lightmapping, gouraud shading,
	  flat shading, ...)
	- Extended the loader with HARDMOVE for mesh objects.
	- The thing loader plugin is still not working correctly but we
	  are getting there.
	- Added polygon ID which I will use for caching the lightmaps
	  instead of the old sector/thing/ID way. This will mean that
	  adding a polygon to a level will invalidate a lot of lightmaps
	  but on the other hand it is safer and easier. The previous
	  method depended on things and sectors having unique names.
	- Added curve ID as well for a similar reason.
	- Changed caching of lightmaps for polygons and curves using the
	  new ID system.
	- The above change fixes a bug where things loaded with the thing
	  loader plugin would not correctly behave with regards to the lighting
	  cache because those things don't have a name (their name is inside
	  the mesh wrapper instead).
	- The thing loader now works a lot better. There is still a problem
	  with movable things (as you can see from the new version of flarge
	  that I committed). The problem is that there is still a movable
	  instance in csThing itself which is used instead of the correct
	  movable in csMeshWrapper.
	- Michael Voase did the following:
	    - Document discovered bug in csloader.cpp / crossbuild.
	    - Fixed documentation bug in phyztest. Now displays
	      instructions on the tab, del and enter keys.
	    - Fixed bug where QUERY_INTERFACE was being called
	      on a mesh wrapper.
	    - Fixed bug where incorrect object was being used in
	      collision detection. Now extracts the csThing from
	      the sector where the walls are stored.
	- Bob Ham fixed several errors in the documentation.
	- Martin Geisse fixed another compiler error in ptlab.
	- Christopher Nelson fixed source code formatting errors in his CSWS
	  patches.
4-Apr-2001
	- Started work on thing loader and saver. Although things haven't
	  moved to a plugin yet it is already possible to make real
	  plugins from the loader and saver.
	- Moved the CS_THING_... flags from csThing header to iThingState
	  header.
	- Extended iThingState with GetFlags(), SetFlags(), SetMovingOption(),
	  GetMovingOption(),  GetCurvesScale(), SetCurvesScale(),
	  GetCurvesCenter(), SetCurvesCenter(), CurveVertex(), CurveTexel(),
	  GetNumCurveVertices(), GetCurveVertices(), GetNumCurves(),
	  GetCurve(), and MergeTemplate().
	- Extended iPolygon3D with GetMaterial(), GetVertexIndices(),
	  GetTextureType(), SetTextureType(), GetCosinusFactor(),
	  SetCosinusFactor(), and a few additional versions of
	  SetTextureSpace().
	- Added new csPolygon3D::CopyTextureType() (and also added this to
	  iPolygon3D). This function will copy the texture information from
	  a given polygon to this polygon. Note that the material itself
	  is not copied. Only the information on how to apply the texture
	  mapping.
	- Extended iMaterialWrapper with GetMaterial().
	- Moved the POLYTXT_... flags from csPolygon3D header to iPolygon3D
	  header.
	- Also moved CS_POLY_COLLDET.
	- Added iEngine::GetThingType().
	- Added iCurve and iCurveTemplate SCF interfaces and let csCurve
	  and csCurveTemplate implement them.
	- Removed 'default_texlen' from csThing::MergeTemplate() since it
	  wasn't working.
	- Removed the csThing::MergeTemplate() version which also replaced
	  materials. Instead added new csThing::ReplaceMaterials() function
	  which does the same thing (except merge). So where you would
	  use MergeTemplate() in the past (the version that replaces
	  materials) you will now use the other MergeTemplate() and then
	  call ReplaceMaterials().
	- Changed csThing::MergeTemplate() to work on SCF interfaces
	  (iThingState, iMaterialWrapper, ...).
	- The thing loader compiles now but is far from complete and usable.
	- Made access to flags in iPolygon3D and iThing more consistant
	  so that it works like iPortal. There is now a 'GetFlags()' which
	  returns an object of type csFlags.
	- Added iPortal::SetWarp(csTransform&).
	- Added support for portals in the thing loader.
	- Added support for setting materials in the thing loader.
	- Added support for CIRCLE command in the thing loader.
	- Eric Sunshine fixed a silly typographical error in csHashCompute()
	  which rendered the function almost completely inoperative.
	- Martin Geisse fixed a bug in csPrefixConfig.
3-Apr-2001
	- Norman Kramer fixed a warning about explicit initialization
	  of iBase in copy constructor of csCamera.
	- Norman Kramer fixed a batch of warnings about conversions and
	  comparisons in the software sound renderer.
	- Created new iThingState interface and let csThing implement it.
	  iThingState is almost the same as iThing but with extras.
	  iThing will probably be removed in the future.
	- Fixed a bug in csThing::MergeTemplate(). It would not correctly
	  copy the new zbufMode flags.
	- Removed 'sector' member from curves. Removed 'sector' parameter
	  from csThing::MergeTemplate(). Removed 'sector' parameter from
	  load_thing() and load_thing_part().
	- Removed 'sector' from csPolygon3D::Finish() and csThing::Prepare().
	- Removed the ability to have ambient settings per sector. This was
	  never used and I don't think it is very useful either. Ambient
	  settings are now global and still stored in csLight.
	  csSector::SetAmbientColor() and GetAmbientColor() are now gone.
	- Removed 'engine' member from csThing and also removed 'engine'
	  parameter to csThing.
	- Created a new csThingObjectType class which is the mesh object
	  type class for things. For now it is not in a plugin yet but
	  embedded inside csEngine. Added csEngine::GetThingType() to fetch
	  the reference to this type. This is a temporary function.
	- Added csEngine::CreateSectorWallsMesh() which is similar to
	  CreateSectorWalls() but creates a thing as a mesh object instead
	  of a normal thing.
	- Avoided the use of csFrustumView in csThing. Now uses iFrustumView.
	- Avoided the use of csFrustumView in csSector. Now uses iFrustumView.
	- Added csLight::CalculateLighting() for iMeshWrapper. This will
	  query if iThingState is known.
	- Added csSector::ShineLights() for iMeshWrapper.
	- Added iFrustumView::SetDynamic() and IsDynamic().
	- Added iMovable parameter to csThing::AppendShadows().
	- Extended iSector interface with GetRecLevel().
	- It is now possible to use things through the mesh object API. When
	  this is done the mesh wrapper takes control of some of the issues
	  (like where the thing is positioned, what the Z-buf mode is,
	  the entity flags, ...). The similar items in csThing are ignored
	  (and will later be removed when csThing moves to a plugin).
	  Note that things added through the mesh object API will not be
	  included in the 'things' arrays that you can find in both csEngine
	  and csSector. Instead they are added to the 'meshes' arrays like
	  all other mesh objects. Note that in the short future the support
	  for the 'things' array will be removed.
	- Lighting on things which are added through the mesh object API
	  will now also work. For now this is solved by the engine recognizing
	  this as a special case of mesh objects (by checking if iThingState
	  is implemented). In the future the engine should now know about
	  iThingState so we need a more general solution. For now it will do.
	- Converted simple to use the new iThingState and use things as
	  if they are mesh objects. This seems to work very well.
	- Christopher Nelson <paradox@BBHC.ORG> did the following changes
	  to CSWS:
	    - Fixed silly problems in csButton with textures and bitmaps
	      drawing wrong.
	    - Fixed ugliness with texturing not moving with the button on
	      shiftable buttons.
	    - Fixed artifacting problem with csButton not drawing correctly
	      when the whole parent window is a transparent bitmap.
	    - Fixed bug with button not immediately redrawing when
	      highlighted (in case there's a visual change) .
	    - Changed drawing of all buttons so that the currently
	      highlighted button's text draws in a lighter color than
	      other buttons.
2-Apr-2001
	- Norman Kramer did the following to CSWS:
	    - csGrid now has a cursor (3 types: row, column or cell cursor).
	    - csGrid notifies its parent if the cursor changed.
	    - csGridView has a new border that is colored differently
	      based on the active state of the gridview.
	    - Added GetStringAt() to csGrid.
	- Michael Voase did the following:
	    - Added iBase parameter to iLoaderPlugIn::Parse() command.
	    - Added factory passing between LoadMeshObjectFactory()
	      in csloader and spr3dldr.
	    - Corrects bug with sprite frames and smoothing.
	- Renamed csSector::GetVisibleThings() to GetVisibleObjects() and
	  let it return a list of general objects instead of only things.
	- Added csMeshWrapper::GetWorldBoundingBox() to calculate the bounding
	  box of a mesh object in world space. This function will also cache
	  the bounding box.
	- Renamed CS_ENTITY_VISTREE to CS_THING_VISTREE. Moved all remaining
	  CS_ENTITY_... flags from thing.h to meshobj.h. They will now be
	  global to both things and mesh objects (useful when things are later
	  merged with mesh objects).
	- csLoader will now also recognize the flags: NOLIGHTING, NOSHADOWS,
	  BACK2FRONT, INVISIBLE, DETAIL, CAMERA, and CONVEX for mesh
	  objects. They are currently ignored.
	- Implemented INVISIBLE and CAMERA flags for mesh objects.
	- Extended iMeshObject::Draw() with an extra zbuf mode parameter
	  to control what Z-buffer drawing mode to use (NONE, FILL, USE,
	  or TEST). USE is default.
	- Extended all mesh plugins to implement this mode.
	- Added zbufMode flag to csMeshWrapper and two functions to access
	  it (SetZBufMode() and GetZBufMode()). The mesh object will be drawn
	  with this mode.
	- Also added zbufMode and same functions to csThing. This means that
	  you can now let things be drawn using mode NONE and TEST as well
	  (this was not possible in the past).
	- Extended iParticle with a zbufMode parameter as well.
	- Extended the loader to recognize the keywords ZNONE, ZUSE, and
	  ZTEST in addition to ZFILL for both things and mesh objects.
	- Added 'imgload' to the 'make walkall' target.
	- Added nine new console commands to walktest to demonstrate the new
	  full screen effects. The commands are: fs_inter, fs_red, fs_green,
	  fs_blue, fs_whiteout, fs_fadecol, fs_fadeout, fs_fadetxt, and
	  fs_shadevert. Note that fs_fadetxt does not seem to work well
	  with OpenGL. Probably a limitation in DrawPolygonFX. Also note
	  that fs_fadetxt and fs_fadecol do work in software but since the
	  software renderer is limited to five steps of alpha (0%, 25%, 50%,
	  75%, and 100%) there is no smooth transition. Also assigned
	  F4 to fs_inter, F5 to fs_fadeout, and F6 to fs_fadetxt spark.
	- Integrated patches from Bob Ham to compile Crystal Space on
	  the Hurd operating system.
	- Bob also did some proofreading of the docs and did a few
	  corrections.
	- Integrated patches from Christopher Nelson <paradox@BBHC.ORG> for
	  CSWS. With these patches csws components get a notification when
	  the mouse enters or leaves a component. There is also a new
	  notification message that is called when a component is deleted.
1-Apr-2001
	- Martin Geisse split up the csgfxldr library into two parts. The
	  first part contains the image classes and now exists as the csgfx
	  library. The second part contains the image file loaders and now
	  exists as a plugin.
	- Philip Wyett fixed demosky, perftest, pysimp, simple, simplep,
	  video app, and phyztest for the new image loader plugin.
	- Philip also added new image loader to required MSVCGEN process.
	- Norman Kramer added video/loader to the plugins to build by default.
	- Norman delayed query of imageloader in the fancy concole. Its now
	  requested on a SystemOpen event.
	- Norman made destructor in imgload.cpp virtual.
	  Made a DYNLIB.IMGLOAD where the -lpng and -ljpeg is collected
	  (bet Eric wont like it, but it works for now).
	- Norman removed some remaining gfx includes.
31-Mar-2001
	- Wouter Wijngaards did the following for the spr3d plugin:
	    - Added GetChildren to iSkeletonLimb scf interface, to make
	      complete access possible.
	    - Added Sprite3DFactorySaver and Sprite3DSaver.
	      Please note that the SMOOTH(...) information is lost. The
	      value read is not stored in memory.
	- Wouter also added FountainFactorySaver, FountainSaver,
	  RainFactorySaver, RainSaver, SnowFactorySaver, SnowSaver,
	  SpiralFactorySaver and SpiralSaver plugins.
	- Wouter added Sprite2DFactorySaver and Sprite2DSaver.
	- Wouter added a new csfx full screen effects file. It contains
	  various nice full screen visual effects.
	    - For drawing interference on the screen.
	    - For fading out the screen (to black).
	    - For fading to a picture.
	    - For fading to a chosen color.
	    - Emulating the old green-only monitors.
	      (als red or blue can be used).
	    - Creating a white-out effect.
	    - Creating a vertical shading (nice for backgrounds).
	    - And a multipurpose screendpfx routine.
	  All these routines try to use the 3d hardware efficiently.
	- Martin Geisse first changed the system driver to ignore plugins
	  with no class ID in the config file instead of printing an error.
	  This is needed if one plugin loads another by a line in its
	  config file, so the user can override this line with a no-value
	  line.
	- Martin then proceeded to revert the above change because it is
	  useless. Adding plug-ins in a plugin-specific config file is not
	  the right way. Sorry for this.
29-Mar-2001
	- Martin Geisse added a note about the use of C++ templates
	  to the documentation.
	- Let csSector::CheckFrustum() work through iVisibilityCuller::
	  CastShadows(). This is another stip in the rewrite. Moved all
	  static_thing specific frustum code (i.e. the traversal of the
	  octree) from csSector to csThing.
28-Mar-2001
	- Wouter Wijngaards added GetNumberParticles and GetSource methods
	  to the spiral particle system SCF interface.
	- Wouter also added the following methods to the rain particle
	  system scf interface: GetNumberParticles, GetDropSize, GetBox,
	  GetLighting, GetFallSpeed.
	- Wouter added the following methods to the snow particle system
	  scf interface: GetNumberParticles, GetDropSize, GetBox,
	  GetLighting, GetFallSpeed, GetSwirl.
	- Philip Wyett added necessary fontserver plugin to test app.
	- Finished the split of csFrustumView and csFrustumContext.
	- Fixed a bug in the sprite loader with regards to skeletal sprites.
	- Added a normal sprite, a skeletal sprite, and the hierarchical
	  robot to flarge.
	- Added 'meshes' target to 'walkall'.
	- Philip Wyett attempted to fix a heap-related crasher in skel3d.cpp.
	- Eric Sunshine reverted all of Philip Wyett's changes to skel3d.cpp
	  since they were incorrect and introduced several memory leaks.  The
	  problem was that Philip was addressing the symptom rather than the
	  bug itself.  Instead, I (Eric) repaired this heap-related crasher by
	  eliminating the actual bug.  In this case, the bug was that
	  csSkelLimbState's `name' instance variable was never being
	  initialized, and the uninitialized value was later being sent to
	  free().
27-Mar-2001
	- Philip Wyett eliminated VC6 compiler warning about empty control
	  statement.
	- Philip also did some code cleanup in the video plugins.
	- Norman Kramer added precalculations in csCamera to save a few
	  multiplications in Rotate and RotateWorld.
	- Norman also made config file keys case insensitive.
	- Wouter Wijngaards added end of line to canvas font server warning.
26-Mar-2001
	- Philip Wyett did some minor updates to the docs.
25-Mar-2001:
	- Removed iShadowSystem and merged its functionality with
	  iVisibilityCuller. iShadowCaster and iShadowReceiver are still
	  there but (logically) depend on iVisibilityObject now.
	- Started iFrustumView SCF interface for csFrustumView.
	- Fundamentally changed the way csFrustumView works. Added a
	  csFrustumContext which is changing for every recursion level.
	  csFrustumView remains constant now. This way csFrustumView works
	  in a similar way to csRenderView (and csRenderContext).
	- Philip Wyett fixed runtime memory reference error in csconin.cpp
	  under windows.
	- Philip Wyett fixed null reference error in csconin.cpp under Windows.
	- Eric Sunshine reverted above change to csconin.cpp by Philip Wyett
	  since Philip's change was incorrect.	Eric applied the correct fix
	  instead.
	- Eric Sunshine applied a patch to csNodeIterator which was sent to the
	  mailing list by Malcolm Peacock <malcolm@mpeacock.demon.co.uk> on
	  August 13, 2000.  This patch fixes a problem where the csNodeIterator
	  bug was always one element out-of-step with the actual underlying
	  csObject iterator.  The symptom of the bug was that
	  csNodeIterator::IsFinished() reported the end of iteration one
	  element too early.
	- Eric Sunshine renamed iConsoleOutput::SystemExtension(va_list) to
	  SystemExtensionV() since some compilers failed to grok the overload.
	- Martin Geisse changed the way walktest determines the word path.
	  If the path begins with a slash, it is considered an absolute path
	  and copied. Otherwise '/lev/' is prepended.
	- Philip Wyett did the following changes to docs:
	    - Update all docs to point to the new location at 3ddownloads.
	    - Removed refs to old/no longer needed MingW files.
	    - Updated links to DOS Nasm and other support files,
	      with respect to new location at 3D Downloads.
24-Mar-2001:
	- Further changes to avoid using world space coordinate system.
	- Made all the members in csFrustumView private and added accessor
	  functions.
	- Created new csLightingInfo class which holds all information specific
	  to lighting and CheckFrustum. This information used to be in
	  csFrustumView but csFrustumView is supposed to be independent
	  of 'lighting'.
	- csThing now implements iShadowSystem.
	- Philip Wyett added Python plugin to MingW build process. This
	- Eric Sunshine reverted Philip Wyett's changes to cspython.mak for a
	  couple of reasons.  First, as Philip mentioned in his log message,
	  his changes were a bit of a hack.  Second, they actually broke the
	  makefile with unbalanced instances of if/else/endif.	Instead, I
	  generalized the makefile so that it should be able to handle Python
	  via Mingw without any special hacks.
	- Philip Wyett added Python plugin to MingW build process.  This
	  addition also adds the compilation of CS Python test app, thanks
	  to Unix makefile system.  Edited 'cspython.mak' in order to allow
	  MingW to build the Python plugin correctly.  Is a bit of a hack.
	  Eric will probably find a more elegant way... :-)
	- Eric Sunshine made the following changes to the project:
	    - Repaired an ultra nasty bug in csSystemDriver::LoadPlugIn().
	      This bug has been present since the introduction of SCF on
	      November 5, 1999.	 Rather than returning the explicitly requested
	      SCF interface, LoadPlugIn() was _always_ returning the plugin's
	      iPlugIn interface.  The problem was further compounded by the
	      LOAD_PLUGIN() macro which then performed a blind cast of the
	      returned pointer to the requested type, with the result that a
	      completely bogus pointer was being returned to the caller.  It
	      was only by pure luck that this problem was not noticed earlier.
	      It remained hidden because, up until now, all SCF interfaces
	      implemented by plugin modules have themselves inherited from
	      iPlugIn.	Thus, by pure chance, the returned iPlugIn pointer also
	      happened to be the correct pointer to the requested type.
	      However, if embedding or multiple-inheritance is instead used to
	      implement iPlugIn, then the one-to-one pointer relationship no
	      longer applies and the application crashes on account of receipt
	      of a pointer to iPlugIn when it was expecting something entirely
	      other.
	    - Renamed iConsole to iConsoleOutput for consistency with existing
	      iConsoleInput.
	    - The iConsoleInput and iConsoleOutput interfaces no longer
	      incorrectly inherit from iPlugIn.	 This was incorrect because it
	      made the assumption that anything implementing these interfaces
	      _must_ also be a plug-in module.	This was an unnecessary
	      restriction.
	    - Relocated plugins/cscon to plugins/console/output/standard.
	    - Renamed csConsole to csConsoleOutput.
	    - Relocated plugins/simpcon to plugins/console/output/simple.
	    - Renamed csSimpleInput to csConsoleInput and moved the related
	      implementation files from plugins/simpcon to
	      plugins/console/input/standard.  This implementation now resides
	      in its own plug-in module rather than being bundled with the
	      `simple' output console.
	    - Relocated the `funky' console from plugins/cscon to
	      plugins/console/output/fancy.  This console is now a stand-alone
	      plug-in module rather than being bundled with `cscon'.  Instead
	      of inheriting directly from csConsoleOutput, it now loads and
	      utilizes the csConsoleOutput plugin.
	    - Renamed funConsole to csFancyConsole.
	    - Renamed funcon.cfg to fancycon.cfg.
	    - Renamed funcon.zip to fancycon.zip.
	    - Fixed several positional computation bugs in csFancyConsole.
	- Eric Sunshine modified jobber.pl so that it now batches CVS `add' and
	  `remove' operations rather than invoking them indiviudally for each
	  file or directory added to, or removed from the repository.  This
	  speeds up the script significantly when many files need to be added
	  and removed since the old method of invoking a CVS command for each
	  file was quite slow on account of the fact that a new session with
	  both the SSH and CVS servers had to be initiated for every single
	  file.	 Takes special care to add directories before files, and also
	  batches binary files separately from text files so that `-kb' can be
	  applied as appropriate.
	- Eric Sunshine removed the `coord' file from standard.zip since that
	  was an inappropriate location for that file.	standard.zip is a
	  static, system-level library which should be considered (and may very
	  well be) read-only.  `coord' on the other hand, is a user-level file
	  which dynamically changes each time the user asks WalkTest to record
	  its camera position.	Instead of expecting `coord' to be in either of
	  the VFS volumes /this or /lib/std, WalkTest now expects to find it in
	  /temp.  Also renamed `coord' to `walktest.cam'.  Likewise, renamed
	  `coord.bug' to `walktest.bug'.  This file has also been relocated
	  from /this to /temp.
	- Martin Geisse made the following changes:
	    - Walktest no more plays unrecognized sounds in loop mode
	      at startup.
	    - Moved the 'coord' file to standard.zip.
	    - The system driver now prints debug messages on calls to
	      Initialize(), Open(), Close() and the destructor.
	    - The initial debug level can now be set in the command line.
	- Norman Kramer fixed an iConsole -> iConsoleOutput reference in a
	  couple files which Eric missed.
23-Mar-2001:
	- Wouter Wijngaards made 'make win32gcc' correctly detect the
	  presence of a bash (or other) shell used by the makefile system.
	  It will then autoconfigure for that. If run from command prompt,
	  it will configure for that.
	- Wouter also added Get methods to iParticleState for the
	  ChangeRotation, ChangeSize, ChangeColor, ChangeAlpha and so.
	- Philip Wyett did some re-work of MingW docs to take account of
	  new all in one CS MingW package...
	- Did an optimization in the CheckFrustum routines. It was apparantly
	  doing a copy of every polygon without actually using that copy.
	- Changed the polygon handling functions in CheckFrustum to use object
	  space instead of world space. For bsp type polygons (for visibility
	  testing of object) world space == object space and for normal
	  polygons this is also true for all things that are merged in a
	  bsp tree.
	- Added csThing::GetBoundingBox() which takes a movable and calculates
	  a bounding box based on the object space bounding box and that
	  movable. It will automatically cache the bounding box so that when
	  the object doesn't move nothing is recalculated.
	- By using this new GetBoundingBox() function I completely avoided
	  the use of world space coordinates for things in csSector which is
	  as it should be.
22-Mar-2001:
	- Rewrote the CheckFrustum and shadow stuff so that most of it now
	  uses the SCF interfaces instead of the classes.
	- Wouter Wijngaards added a host of Get methods to the fountain
	  mesh plugin.
	- Norman Kramer did a few fixes to the sound renderer:
	    - Replaced / with \ in #include directive.
	    - Fixed virtual destructor.
	    - Fixed vpath in makefile.
	- Martin Geisse split up the sound loader into several plugins.
	  There is now one loader plugin for every sound format, plus one
	  plugin that lets all others look like a single loader for
	  convenience (called multiplexer). Currently all these plugins
	  remain in the sndload library.
21-Mar-2001:
	- Martin Geisse did a big redesign and cleanup of the sound system:
	    - Merged static and streamed sound data classes.
	    - Sound data must now be registered before playing to get a
	      sound handle -- just like textures.
	    - When playing streamed sounds, all sound sources created from
	      the same sound handle always play the same sequence at the
	      same time.
	    - Moved common stuff of all renderers together in
	      plugins/sound/renderers/common.
	- Removed a few unneeded includes to lview.h. As few things as
	  possible should include that file since we're going to do
	  that through SCF soon.
	- Reverted the fix from Philip to python plugin and did the fix the
	  'right' way.	Please don't modify cs_pyth.cpp directly.  It is an
	  automatically generated file and it makes no sense to modify it.  You
	  have to modify the source file called plugins/cscript/common/cs.i and
	  then run the target 'make cspythonswig' (provided you have swig).
	- Eric Sunshine fixed a bug in the WAL image loader where it was
	  unconditionally trying to access 100 bytes of the incoming image
	  even if the image contained fewer than 100 bytes, thus it was
	  potentially accessing memory beyond the end of the allocated block.
	  This would result in a crash on some platforms.
	- Eric Sunshine fixed several problems in mdl2spr where it was
	  accessing strings as though they were null-terminated even though it
	  had neither ensured null-termination nor even ensured that the
	  allocated buffer was large enough to hold the null-terminator.
	- Eric Sunshine fixed a fundamental flaw in mdl2spr which completely
	  corrupted converted Quake 2 models.  The conversion process was
	  essentially throwing away valid vertex coordinates and substituting
	  incorrect coordinates in their stead.
	- Eric Sunshine eliminated the very annoying behavior of csSimpleInput
	  where it would erase the console's input line when the user pressed
	  Return.  The result was that after pressing Return, the user could
	  not see what had been typed.	Now the input line is preserved.
	- Eric Sunshine fixed a bug in csSimpleInput where it would corrupt
	  memory when Delete was pressed at the end of the input line.
	- Eric Sunshine changed the location of inclusion of `video/renderer' &
	  `video/canvas' in the PLUGINS variable.  These items used to be
	  specified in user.mak.  However, since they are not optional, it did
	  not make sense to place them in a user-configurable file.
	- Wouter Wijngaards added the following methods to the fire mesh API:
	  GetNumberParticles, GetDropSize, GetOrigin, GetDirection,
	  GetLighting, GetSwirl, GetColorScale and GetColorScale.
	- Wouter added FireFactorySaver and FireSaver plugins.
20-Mar-2001:
	- Philip Wyett altered his email address in the docs.
	- Wouter Wijngaards added the following methods to explosion
	  particlesystem: GetNumberParticles, GetCenter, GetPush, GetNrSides,
	  GetPartRadius, GetLighting, GetSpreadPos, GetSpreadSpeed,
	  GetSpreadAcceleration and GetFadeSprites.
	- Wouter also added a method GetColor() to iParticleState, to get the
	  particle color.
	- Wouter added the ExplosionSaver and ExplosionFactorySaver PlugIns.
	- Split rview.cpp and rview.h into rview and lview.  rview contains
	  csRenderView and lview contains everything related to the shadow
	  calculations.
	- Robert Bate brought the Mac projects files up to date.
	- Philip Wyett manually updated the VC project files.
	- Philip also did a fix to the python plugin.
18-Mar-2001
	- Fixed skydomes so that they need to be in the same part. Without
	  this fix the circle command could only correctly be specified in the
	  first part.
16-Mar-2001
	- Eric Sunshine renamed all of the pure SCF interface header files.
	  Considering that that these files were recently organized into
	  well-named subdirectories, it is possible to use more descriptive
	  names for the files themselves.  Also dropped the `i' prefix.	 Here
	  are just a few examples of the new more meaningful and descriptive
	  names:
	    iengine/idlight.h  --> iengine/dynlight.h
	    iengine/imeshobj.h --> iengine/mesh.h
	    imesh/imeshobj.h   --> imesh/object.h
	    imesh/mfire.h      --> imesh/fire.h
	    imap/ildrplug.h    --> imap/reader.h
	    imap/isvrplg.h     --> imap/writer.h
	    isound/isnddrv.h   --> isound/driver.h
	    isound/isndlstn.h  --> isound/listener.h
	    ivideo/imater.h    --> ivideo/material.h
	- Fixed Python scripting after the changes from Eric.
15-Mar-2001
	- Let csShadowIterator implement iShadowIterator.
	- Let csShadowBlock implement iShadowBlock.
	- Let csShadowBlockList implement iShadowBlockList.
	- Philip Wyett fixed on exit errors under VC6 builds/Windows for
	  demosky.  Removed cleanup function from app and moved delete System;
	  to apps destructor.
	- Wouter Wijngaards fixed a bug in the procedural sky - when you
	  stopped animation, different polygons could be out of synch.	Now all
	  skytextures of a procedural sky are set to a forced rerender for the
	  next time they become visible.
	- Wouter also got animated sky to work correctly.  SetAnimated(false,
	  ...) now takes a *lot* of time.  (like a second or so).  But during
	  this time all sky textures are brought up to date.  This makes the
	  sky look seamless, and you are guaranteed no more slowdowns.
14-Mar-2001
	- Fixed a bug in csRenderView.	IncRef() should be DecRef().  Thanks to
	  Norman Kramer for spotting this.
	- Philip Wyett changed Visual C++ service pack recommendation to 5.
	- Norman Kramer fixed the crashes that occured when farplanes were used
	  (overlooked the problem a few times before realizing whats going
	  on!).
13-Mar-2001
	- Philip Wyett fixed VC6 compile error in 'plgengine', created by move
	  of 'int ApplicationShow;'.  Modification was made to SCF interface to
	  allow correct usage of it and leaving Martins intention of being able
	  to create apps without 'cssys' intact.
	- Reverted part of the patch from Philip because otherwise OpenGL would
	  not open a window when running apps (if using MingW).
12-Mar-2001
	- Robert Bate updated the Mac project files and added project files for
	  terrain plugin.
	- Martin Geisse did a small update to the windows docs.
	- Martin also fixed a bug in the system driver.
	- Martin moved the 'ApplicationShow' variable from cssys to cswin32exe,
	  so you can create applications that don't use cssys.
	- Added a new constructor csFrustum with which you can create a frustum
	  that already has place for the right number of vertices but the
	  vertices are not initialized yet.
	- Added new csVector3 and csVector2 Set() routine that accepts another
	  csVector3 or csVector2 respectively.
	- Did more work on cleaning up the shadow frustum code in order to make
	  it easier to make it SCF interfaces.	For example, csShadowFrustum is
	  now completely private to the shadow block classes.
	- Eric Sunshine performed some rewriting of material recently added to
	  simple.txi.
	- Eric Sunshine eliminated an `overfull hbox' warning reported by TeX
	  for tutorial/map2cs/step3.txi.
	- Eric Sunshine applied a patch to Squawk from Michael H. Voase
	  <mvoase@midcoast.com.au> which allows the camera to be moved forward
	  and backward.
11-Mar-2001
	- Norman Kramer renamed avi codec classnames from codec.*
	  to codec.avi.*.
	- Norman also removed iCodec interface and replaced it with
	  iAVICodec that lives in plugins/../format/avi.
	- Norman added entry for rel codec to the makefiles.
	- Norman added iAVICodec interface. csAVI now handles format-
	  extension.
	- Philip Wyett added new RLE plugin to workspace.
	- Philip also fixed a compile error in AVI plugin.
	- Wouter Wijngaards added cube factory saver and cubesaver plugins.
	- Eric Sunshine fixed some Texinfo mark-up problems in win32.txi.
	- Eric Sunshine fixed formatting of help message in rle.mak.
	- Eric Sunshine added DSP.DDG.CFLAGS to ddg.mak in order to augment the
	  generated DSP file with an appropriate "/I" directive.
	- Added interfaces iShadowBlock, iShadowBlockList, and iShadowIterator.
	  These will be used by the iShadowSystem. Extended iShadowSystem,
	  iShadowCaster, and iShadowReceiver a bit.
	- Changed the csShadowIterator a bit so that it will be easier
	  to let it implement iShadowReceiver. The basic idea is that
	  csShadowFrustum must become a private concept of the shadow
	  blocks and that only csFrustum is used.
	- Eric Sunshine applied patches to mdl2spr from Matt Keith
	  <keith@www.keithcom.com> which allow mdl2spr to generate sprite files
	  which conform to the new mesh plugin architecture.
	- Eric Sunshine fixed an error in the `motion-anim' rule in mapfmt.txi.
10-Mar-2001
	- Cleaned up layout in DDG loader and also made a small fix
	  in csTerrainWrapper constructor declaration.
	- Added interfaces iShadowSystem, iShadowCaster, and
	  iShadowReceiver. These new interfaces will be the basis for
	  a system to replace CheckFrustum.
9-Mar-2001
	- Fixed some include files in the Direct3D6.1 plugin which were
	  not converted to the new structure.
	- Wouter Wijngaards committed six textures to stdtex.zip, which
	  will be useful for making nice lens flares. They are:
	  flare_center.jpg flare_grcir.jpg flare_picir.jpg flare_pink.jpg
	  flare_purp.jpg flare_rbow.jpg.
	  These will look nice when added in different sizes, with mixmode
	  CS_FX_ADD.
	- Wouter also added a method to scf's iFactory: QueryClassID that
	  will return the class ID of the plugin from which the object
	  originates. Of course this will cause massive re-compilation,
	  but the header changes require compilation anyway.
	- Wouter also added to csutil/util.h the function csFindReplace,
	  that copies a string from source to dest, whilst find&replacing
	  substrings inside. It will also check destination buffer overflow.
	- Wouter started support for saving in the mesh loader plugins.
	- Wouter added access methods for Radius and Shift in iBallState.
	- Wouter implemented the ball factory and object savers.
	- Wouter fixed another halo bug (a line of garbage on the top side
	  of the halo).
	- Thomas Hieber separated the Loader from the actual data storage.
	  This will allow easy saving of modified data, and conversion to
	  other formats like binary formats.
	- Seth Galbraith fixed sprites in squawk to work with new
	  mesh object system. Sprites actions still don't work and
	  sprite smoothing is also broken.
8-Mar-2001
	- Eric Sunshine moved all of the pure SCF interface header files (the
	  filenames beginning with `i') into subdirectories of CS/include.
	  They no longer reside directly in CS/include.	 The new subdirectories
	  within CS/include are iengine, igame, igeom, igraphic, imap, imesh,
	  inetwork, iobject, isound, isys, iterrain, iutil, ivaria, and ivideo.
	  Also, several files were decomposed into multiple new files, so you
	  may need to include one or more of the new files in place of the old
	  ones.	 The files which were specially split are:
	    itexture.h -> iengine/itexture.h & ivideo/itexture.h
	    imater.h   -> iengine/imater.h   & ivideo/imater.h
	    imeshobj.h -> iengine/imeshobj.h & imesh/imeshobj.h
	    iterrobj.h -> iengine/iterrobj.h & iterrain/iterrobj.h
	  Also updated all source & header files, documentation files, and
	  makefiles to reflect this change.
	- Eric Sunshine eliminated several compilation warnings throughout the
	  project.
	- Brandon Ehle did the following:
	  Mostly scripting updates, but also a modification to the common.mak
	  that enable multiprocessor compiles 'make -j5' etc
	    - Various fixes to the cs.i file concerning the lack of
	      iPolygonSet.
	    - Updated cspython swig interface.
	    - Fixed some cslua swig bugs, and added a default script
	      'pysimp.lua'.
	    - Added support to pysimp to run test code in python and in lua.
	- Thomas Hieber did the following changes:
	    - Added classes.xml which is a protype of a gameclass definition
	      XML file. He is going to use this file for testing in the
	      future, and also for reference on the file format.
	      (until there is a real spec on it).
	    - Changed the interface of the XML file another time.
	      I really like this change, because the code is more powerful
	      now, _and_ is simpler too.
	- Martin Geisse did the following:
	    - Removed the old iConfigFile interface.
	    - Renamed iConfigFileNew to iConfigFile.
	    - Renamed icfgnew.h to icfgfile.h.
	    - Removed many references to the old config system.
7-Mar-2001
	- Martin Geisse changed CSWS to use the new config system.
	- Thomas Hieber completely changed the way data from XML maps to
	  iDataLoader. The way it is done now will introduce far less
	  typing overhead, and looks nicer too.
	- Thomas Hieber did the following:
	  csString stores a NULL pointer if you set an empty string.
	  (This seems to be some optimisation) Now, it will return an empty
	  string in these cases, instead of a NULL pointer, when you ask
	  for the string.
	- Thomas fixed some potentially uninitialized variable.
	- csThing::MergeTemplate() now works through object space coordinates
	  all the time.
	- Fixed a bug in the new camera system. When the camera didn't update
	  then moving objects would not be refreshed correctly. The reason
	  is that the camera vertices were only updated when the camera
	  changes but they also need to be updated when the movable changes.
	- Added the terrain engine plugin from Richard D. Shank. This is
	  the same terrain engine we used to have all the time. But this
	  time it is implemented as a plugin. Great work Richard!
	  Note that the old terrlod is currently no longer supported.
	  Richard will do that one soon.
	- Fixed several bugs in the new terrain plugin.
	- 'make walkall' will now also compile the standard canvas that
	  belongs with the software renderer and the OS. The way this works
	  is that every such canvas which is for the software renderer
	  and which is default adds itself to 'softcanvas' target.
	  'make walkall' then depends on 'softcanvas' target as well.
	- Fixed a 'delete[]' vs 'delete' bug in md2 loader.
	- Eric Sunshine removed all remaining `csterr' library references from
	  the project.
	- Eric Sunshine added missing Texinfo mark-up to win32.txi.
	- Eric Sunshine eliminated an "underfull hbox" warning from TeX in
	  config.txi.
	- Eric Sunshine changed the makefile system so that __CRYSTAL_SPACE__
	  is defined when building all files in the project.  (Previously, this
	  was only defined when building the DDG library.) This change had
	  already been applied to the Visual-C++ project files several months
	  ago.
	- Eric Sunshine resolved a problem with the new ddg.mak makefile were
	  CFLAGS.DDG was not being employed in all cases.
	- Eric Sunshine fixed a potential #include problem in pol2d.h which was
	  reported by Navdeep S. Tinna <nst7@cs.columbia.edu>.
	- Eric Sunshine added `autoexec.cfg' to CFG.WALKTEST in walktest.mak.
	  This ensures that it will get installed with `make install'.
6-Mar-2001
	- Changed the following functions to work in object space instead
	  of world space:
	    - csPolygon3D::IntersectSegment()
	    - csPolygon3D::IntersectRay()
	    - csPolygon3D::IntersectRayNoBackFace()
	    - csPolygon3D::IntersectRayPlane()
	    - csPolygon3D::Overlaps()
	    - csPolygon3D::SetTextureSpace(...)
	    - csPolygon3D::PointOnPolygon()
	    - csPolyPlane::IntersectSegment()
	    - csThing::IntersectSphere()
	- Modified the csSector versions of IntersectSphere() and
	  IntersectSegment() to correctly use the movable of the things
	  if relevant to map world space to object space.
	- Further converted the following functions to work in object space
	  instead of world space:
	    - csPolygon3D::ClipFrustum()
	- Made some of the functions in csTransform virtual so that they
	  can be overriden by subclasses (i.e. csCamera in this case).
	- csCamera now has a number called 'cameranr' which is updated
	  whenever a new camera is created or a camera is updated. This
	  number can be used to check if an object transformed to camera
	  space is still valid. You can get this number with GetCameraNumber().
	- Also added iCamera::GetCameraNumber().
	- Removed csPolygon3D::ClipFrustum() and csPolygon3D::ClipPoly().
	- Removed csThing::GetCameraMinMaxZ().
	- Removed csThing::IntersectCameraZPlane().
	- Redesigned csThing and csPolygon3D camera vertex handling so that
	  they no longer go through the transformation manager. Instead they
	  use the camera number which is now defined in csCamera.
	- Consequently removed the transformation manager.
	- Fixed all mesh plugins that were using the transformation manager
	  (cube, ball, and spr3d). They are now using the camera number
	  instead.
	- Fixed a bug in csThing::MergeTemplate(). The function would not
	  copy the new moving flag from the template thing to the new instance.
	- Eric Sunshine repaired the csgamtst.mak makefile.  Apparently it
	  was just a verbatim copy of the pysimple makefile.
	- Eric Sunshine fixed the gamecore makefile so that the plugin no
	  longer links with csEngine or any of its supporting libraries.
	- Eric Sunshine repaired numerous compilation problems in the gamecore
	  plugin.  Unfortunately, there is still one problem with the
	  DECLARE_SCF_STRINGMAP() macro where the compiler complains that it is
	  derived from a `private' csVector.  I have not yet looked closely at
	  this problem.	 It is possible that it is specific to the NextStep
	  compiler.
	- Eric Sunshine removed a bunch of #include directives from gstd.h
	  which were importing csengine, csparser, csfx, csgfxldr, and cssys
	  headers.  Plugins should only interact with the system via SCF
	  interfaces, so it was incorrect to include these headers.
	- Thomas Hieber added a new class for XML loader.
	- Thomas also updated vfs.cfg with a path to csgam data.
	- Martin Geisse fixed a compilation problem in the linex canvas.
5-Mar-2001
	- Thomas Hieber did the following to the gamecore plugin:
	    - Added to scf.cfg.
	    - Added test application (csgamtst) for the plugin (not working
	      yet).
	    - Some minor adjustments to make the plugin loadable.
	    - Added project file for gamecore test application.
	    - Work on the gamecore plugin itself.
	- Removed the old and obsolete pvs code. It wasn't working anyway
	  and when I revive it I'm going to totally rewrite it.
	- Also removed a lot of functions that were only used by PVS.
	  I still kept a copy and they are also in CVS attic if it turns
	  out they were useful after all.
	- Changed several of the routines in csPolygon3D to operate on
	  object space coordinates instead of world space. This it make
	  it easier to make the world space coordinate array optional.
	- Eric Sunshine applied an obvious optimization to efed.pl.  It no
	  longer bothers reading the content of each file if the user only
	  requested file-rename operations (that is, no content-edit
	  operations).
	- Jorrit further removed some references to world space vertices
	  from csPolygon3D.
	- Eric Sunshine eliminated a compilation warning from system.cpp
	  regarding unused `cfgacc' variable.
	- Eric Sunshine reworked the shared vertex pools in vtpool.h and
	  vtpool.cpp to be more NextStep compiler friendly.  The compiler was
	  looping infinitely when trying to compile vtpool.cpp.
	- Eric Sunshine removed flarge.zip from the CVS repository and added
	  its plain text `world' file instead.	vfs.cfg was then adjusted so
	  that the `world' file is read from the real filesystem, whereas all
	  of the transient lightmap and visibility information is still cached
	  on the virtual filesystem within flarge.zip (which is _not_ part of
	  the CVS repository).	This change should prevent people from
	  committing transient binary data to the repository.  It also makes
	  better use of CVS, since the `world' file is plain text, which is
	  what CVS does best.
4-Mar-2001
	- Finalized the first rewrite of the data structures that are used
	  in CheckFrustum. A further rewrite and conversion to SCF will
	  follow in the near future.
	- Added support for HardTransform() to curved surfaces but it doesn't
	  work yet. The curve in flarge is thus currently not looking very
	  well.
	- Martin Geisse did another small optimization to the config manager.
3-Mar-2001
	- Martin Geisse added a speed optimization to the config manager.
	  If the same config file is used several times, it is now only
	  loaded once and IncRef'ed every time.
2-Mar-2001
	- Martin Geisse added a new domain in the configuration hierarchy
	  that can be used for user-specific configuration on multi-user
	  systems. Martin also added documentation for the user config
	  domain.
1-Mar-2001
	- Eric Sunshine fixed a compilation error which was recently introduced
	  into NeXTSystemDriver.cpp.
	- Eric Sunshine fixed a bug in NeXTSystemDriver where it was
	  incorrectly requesting next.cfg from a physical volume rather than a
	  VFS volume.
	- Brandon Ehle added modifications for Lua scripting language:
	  The SWIGLua modifications were fairly easy, so here's the "goop."
	  Everything, SHOULD work now.	I don't know much about LUA, but it
	  appears to Query the system driver just fine and use it to make
	  function calls.
	- Martin Geisse did the following changes:
	    - Moved the default graphics configuration to video.cfg.
	    - Added iSystem::RemoveConfig to remove config files from the
	      config manager.
	    - Fixed a wrong header protector in cfgacc.h.
	    - Restructured csConfigFile a bit to make overloading the
	      core Load() and Save() methods easier.
	    - Added csPrefixConfig. This works like csConfigFile, except
	      that it only works with those keys in a config file that
	      begin with a certain substring, and leaves the other keys
	      untouched.
	    - Changed most modules to correctly remove any added config
	      files (using the csConfigAccess class).
	    - Changed the system driver to remove its private config file
	      as well.
	- Robert Bate did some work setting up the TARGET_API_* flags.
	- Robert removed the quit and the separator from the file menu if
	  running on OSX.
	- Robert renamed timing.cpp to avoid name collision.
	- Robert did some updates on the Mac project files.
27-Feb-2001
	- Eric Sunshine eliminated numerous mark-up (and other) errors which
	  were reported by Doxygen throughout the headers.
	- Brandon Ehle checked in PS2 specific port stuff.
	  Everything works excepts lightmaps, only you need a couple of
	  external libraries that will be available soon.
	- Norman Kramer did the following change: when determining the
	  crystal dir it now looks up the scf.cfg instead of vfs.cfg.
	  Before this you could run an app w/o the CRYSTAL var set and no
	  vfs.cfg around.
	- Norman Kramer: now additional codec initdata chunks and stream
	  naming chunks are recognized (strd and strn).
	- Paul Garceau added flarge.zip and stdtex.zip to CVS.
26-Feb-2001
	- Wouter Wijngaards fixed the procedural texture blending mode
	  bug where procedural textures would corrupt the blending table
	  used for alpha blending (only for software rendering).
	- Fixed Simple for the latest thing changes (SetMovingOption()).
	- Fixed Blocks for the latest thing changes.
	- Fixed PtLab for the latest thing changes.
	- Fixed 'portal' command in WalkTest for latest thing changes.
	- Added new version of csPooledVertexArrayPool.
	- Changed csFrustum so that it will now use a pool to allocate
	  vertex arrays. Which pool is used depends on the frustum user.
	  By default it will now use the default pool which means that
	  vertex arrays are still allocated with new[] and delete[].
	- Continued work on a new CheckFrustum.
	- Philip Wyett added EAX 2.0 plugin for Windows developed by
	  Nathaniel Saint Martin. This plugin will require for
	  compilation the Creative Labs EAX 2.0 SDK from either Creative
	  Labs website or you can obtain a cut down version from:
	    http://noote.multimania.com/CrystalSpace/sdk/eax20.zip
	- Eric Sunshine moved specification of the special EAX sound libraries
	  from mk/msvcgen/plugin.tpl to sndeax.mak.
	- Eric Sunshine added extra clarification to the various discussions of
	  scfreg to further indicate that its use is entirely optional.
25-Feb-2001
	- Added csVertexArrayPool, csPooledVertexArrayPool, and
	  csDefaultVertexArrayPool. These will be used for pooled
	  vertex arrays.
	- Renamed csPooledVertexArrayPool to csStackedVertexArrayPool.
	- Started work on a completely redesigned CheckFrustum routine.
	  I will start by making it a separate function first and mark
	  every thing I have to modify with FRUSTNEW. If all works well
	  I can later remove the old routines.
	- Wouter Wijngaards did the following:
	    - Touched up the flare a little.
	    - Removed the second engine::Prepare call, it is no longer
	      needed. This also makes the flare work in 8 bit mode -
	      try simple -sdepth=8 16 and 32 bit are still dark though.
	    - Sized the flare in simple to more modest (non-debugging)
	      proportions.
	    - Fixed a bug in the halo drawing code of the software
	      renderer. Due to Qrounding the scan could go on for one more
	      line, below the actual height of the halo. I changed those
	      relevant QRound calls to QInt, in order to round down. This
	      skips this line, preventing the appearance of a line with
	      small random dots below a halo.
	- Norman Kramer added support for index list (this solves the
	  weird pictures in ToolSober.avi).
24-Feb-2001
	- Wouter Wijngaards did the following:
	    - Enabled the existing halos to fade out. This was disabled.
	      Not sure if this was intentional. Seems to work fine in
	      software/opengl.
	    - Added a 'flare' halo. This type of halo is a lensflare.
	      You can design your own flares, stateing pixmaps and mixmodes.
	      Added classes csFlareHalo, csLightFlareHalo to deal with this.
	      Added support in the engine for the FlareHalo.
	    - Added a 2 halos and a lensflare to simple.
	      The lensflare works fine in opengl, but software mode not
	      seem to work right (the pictures look wrong, it is a 'black'
	      flare).
	- Philip Wyett removed very restrictive code which forces
	  DIRECTINPUT_VERSION to 0x0300 and replaced it with test statement
	  block which uses WINVER to set DIRECTINPUT_VERSION.
	    - For Win 98/SE/ME/2000 or above DIRECTINPUT_VERSION is set to
	      0x0800. Don't worry if your using a lower DX SDK as any
	      DX SDK 5 or above in <dinput.h> uses the '#if
	      DIRECTINPUT_VERSION >=' thus makes this method totally
	      backward compatible.
	    - For Win95 and NT4. DIRECTINPUT_VERSION is set to 0x0300 as
	      it's the highest NT4 supports and you cannot separate NT4
	      and 95 by version so have to be set to the same value.
	  Have tested on most flavors of Windows and both VC and MingW...
	- Norman Kramer added dummy audio stream and did further work on AVI.
23-Feb-2001
	- Started work on a big change to the way that things control movement.
	  The CS_ENTITY_MOVEABLE flag is gone.	Instead there are now three
	  options.  But they don't work yet.
	- Added csThing::SetMovingOption()/GetMovingOption().
	- Added csThing::WorUpdate().
	- Wouter Wijngaards did the following improvements to demosky:
	    - Fixed procedural sky and demosky. You can now control the
	      animated better. You can stop the animation whenever you
	      like, and later on, have it continue either where it would
	      have been if it had been running, or where it would was when
	      you stopped the animation. Demosky resumes where it left off.
	    - Added a flock of seagulls to demosky. They fly around the
	      center. Added seagull texture to standard.zip (6.5Kb).
	    - Fixes crash at exit.
	- Robert Bate moved some files from libs/cssys/mac.
	- Robert also enhanced carbon compatibility for the Mac port.
22-Feb-2001
	- Martin Geisse added iConfigManager::SetDynamicDomain().
	- Wouter Wijngaards made clouds blow across the sky by a
	  configurable wind (direction/speed) when animated in demosky.
	- Robert Bate updated the Macintosh port.
	- Robert started work to Carbonize the Mac port.
	- Robert added CSPro6 compatibility to the Mac port.
	- Philip Wyett removed: 'System.Win32.DebugConsole = yes/no'
	  from system.cfg and re-coded 'SetSystemDefaults' so if you do a
	  debug build you get the debug console windows and if you do a
	  release build you do not. This is prep work for a Win32 fix to
	  come and new DX8 drivers.
	- Added iPolygon3D::GetWorldPlane(), GetObjectPlane(),
	  GetCameraPlane(), GetPortal(), and IsTransparent().
	- Added const versions of csPolyPlane::GetCameraPlane() and
	  GetObjectPlane().
	- Replaced iPortal::SetFlags() with GetFlags() :-)
	- Added iCamera::GetSector().
	- Replaced all csXxx fiels in csRenderView with iXxx fields (if
	  applicable).
	- Added iEngine::GetTopLevelClipper().
	- csRenderView no longer inherits from csCamera. I added
	  csRenderContext which contains all the fields that can change
	  from one recursion level to another. So the iRenderView
	  interface has changed a lot (check it out).
	- Fixed CS_ENTITY_CAMERA flag for things. It is even slightly more
	  efficient than it was before.
	- Merged csDetailedPolyTreeObject into csPolyTreeBBox.
	- Merged csPolyTreeObject into csPolyTreeBBox.
	- Merged csObjectStub with csPolygonStub.
	- Merged csObjectStubFactory with csPolygonStubFactory.
	- Renamed csObjectStubPool to csPolygonStubPool.
21-Feb-2001
	- Wouter Wijngaards made animation of procedural sky work. The
	  clouds move and change when you animate the sky.
	- Added iMeshObject::GetShapeNumber(). Using this number one can
	  check if the object has changed shape enough so that the maximum
	  bounding box is no longer valid. All mesh object plugins implement
	  this function now.
	- Added a similar iMovable/csMovable::GetUpdateNumber() which serves
	  the same function but is updated when the object moves (i.e.
	  in movable.UpdateMove()).
	- Extended iVisibilityObject with GetShapeNumber(). Implementations
	  should call GetShapeNumber() on the underlying object.
	- csThing no longer implements iMovableListener. I reimplemented this
	  using the GetShapeNumber() and GetUpdateNumber() above.
	- csThing now implements iMeshObject. The implementation is not
	  yet working though.
	- csThing now implements iMeshObjectFactory.
	- Extended iRenderView with AddedFogInfo(), GetThisSector(),
	  GetPreviousSector(), GetFrustum(), and SetFrustum().
	- Extended iSector with GetID() and HasFog().
	- Extended iCamera with GetFarPlane() and SetMirrored().
	- Added csPoly2D::ClipAgainst() which accepts iClipper2D instead
	  of csClipper.
	- Added iClipper2D::ClipInPlace().
	- Added iEngine::IsPVS().
	- Fully changed csThing so that it now uses iRenderView instead
	  of csRenderView. This will help to move to a plugin later.
	- Added new constructor to csPlaneClip which accepts a csPlane3.
	- Changed csCurve::GetScreenBoundingBox() to use iCamera instead
	  of csCamera.
	- Note that these changes break CAMERA things and reflecting
	  portals. Not sure why yet.
	- Reflecting portals work again. The bug was very nasty. You
	  have to be very careful when defining copy constructors (or
	  forgetting to define them) for classes implementing SCF interfaces.
	  If you are not careful scfParent is simply copied and you get
	  bad and unexpected results of scfParent still pointing to the
	  original class. Even worse is when you have classes that inherit
	  from classes that implement SCF interfaces. This was the case
	  with csRenderView. As an unexpected bonus this fix also fixes
	  the problem that sprites and particle systems were not visible
	  in mirrors.
	- Removed csSphere... classes related to polygon tree visibility.
	  They were not used and would have to be redone anyway in order
	  to be useful.
	- Eric Sunshine resolved a circular reference problem between the
	  system driver and the VFS plugin.  The actual problem was that the
	  VFS plugin was utilizing the new configuration manager module even
	  though it should not have been doing so.  There are a couple of
	  reasons why utilization of the configuration manager by VFS was
	  problematic.	First, this introduced an unwanted circularity since
	  the configuration manager and the VFS plugin each relied upon the
	  services of the other.  Second, it does not make sense for the VFS
	  plugin to utilize the configuration manager at initialization time
	  since the VFS plugin is loaded very early in the application start-up
	  sequence.  In fact, it is loaded before any other configuration files
	  have been loaded (indeed, all other configuration files are typically
	  loaded from a VFS volume; thus this was a chicken-and-egg issue).
	  Now the VFS plugin manually loads its own configuration file
	  (vfs.cfg) rather than relying on the configuration manager mechanism.
	  In the future, we should introduce some new API into the VFS plugin
	  which allows an application to override or augment the initial
	  configuration from vfs.cfg.  This will allow a client application to
	  provide its own VFS.Mount settings if desired.  Also note that when
	  this API is finally added it should be in the form of a method in the
	  VFS plugin which is invoked by the client application (or system
	  driver) and that method should accept an iConfigFile* as its
	  argument.  The VFS plugin can then query this configuration object
	  for the desired information.	There is no need to re-introduce any
	  circularity with iConfigManager.
	- Eric Sunshine converted several modules to use the new configuration
	  manager which were missed by Martin when he made his conversion sweep
	  through the project.
	- Eric Sunshine modified all makefiles project-wide so that the
	  individual `clean' targets (such as `softclean', `x2dclean', etc.) no
	  longer remove the dependency information (.dep files).  In theory,
	  having a module's `clean' target remove the .dep file was a sensible
	  idea, however in actual practice, it turned out to be quite obnoxious
	  to lose dependency information each time an individual module's
	  `clean' target was invoked.  You can still remove dependency files by
	  invoking one of the standard and existing targets `cleandep' or
	  `distclean'.
	- Eric Sunshine renamed WalkTest's configuration file from cryst.cfg to
	  walktest.cfg.	 Updated all documentation, source code, and other
	  references to reflect this change.
	- Eric Sunshine eliminated a couple `hbox' warnings reported by TeX for
	  the Texinfo documentation.
20-Feb-2001
	- Wouter Wijngaards applied fix to demosky as suggested by Seth
	  Galbraith. This fixed the crackes in the skydome. It aligns
	  perfectly now.
	- Wouter also did a big speed improvement in procedural sky.
	  Demosky is friendlier now, displaying a help line, and you can
	  toggle the sky animation/recalculation. Procedural sky is faster,
	  since the scaling is now done in advance, perhaps the quality
	  improved too.
	- Martin Geisse moved system driver specific configuration to
	  system.cfg (except the list of plug-in modules); moved simple
	  console specific configuration to simpcon.cfg.
	- Martin changed the following in the config system:
	    - Plugins using a private config file now use the config manager.
	    - Renamed iSystem::CreateConfig to iSystem::CreateINIConfig.
	    - Renamed iSystem::CreateConfigNew to
	      iSystem::CreateSeparateConfig.
	- Martin also moved engine-specific config keys to
	  CS/data/config/engine.cfg.
	- Martin added documentation for the config manager system.
	- Wouter Wijngaards fixed config call in OpenGL x2d canvas.
	- Philip Wyett did a small fix to the Map2CS tutorial.
	- Norman Kramer cleaned up the unresolved instances for meshes,
	  loaders and factories.
	- Norman switched the X11 canvases to iConfigManager.
	- Norman added a destructor to csRenderView so that there are no
	  memory engine.core leaks.
	- Eric Sunshine resolved several compilation problems on MacOS/X which
	  were reported in a series of build-logs sent by Travis McLane
	  <tmclane@swt.edu>.
	    - Several AppKit and Foundation headers needed to be imported into
	      various source files.  In the past, these headers got pulled in
	      by other system headers which were already being imported, but
	      this is no longer the case as of MacOS/X.
	    - NSDPSContext was replaced by NSGraphicsContext.  The code now
	      conditionally references the correct class depending upon
	      platform.	 Also centralized the graphics context flushing
	      mechanism into NeXTDelegate.m since it is needed from a couple
	      different places.	 Added a new extension to
	      NeXTSystemDriver::SystemExtension() named "flushgraphicscontext".
	- Added useful defaults for some of the fields of the explosion plugin
	  so that it doesn't crash when those fields are not set.
	- Moved 'initialized' flag from specific particle systems to the
	  general particle system code. If a material is now set initialized
	  will be reset to false so that the particle system is reinitialized.
	- Changed the way that iMeshObject::GetObjectBoundingBox() works.
	  Instead of the 'accurate' flag there is now a 'type' flag which
	  has three possible values:
	    - CS_BBOX_NORMAL: get a normal bounding box which
	      may or may not be recalculated depending on the changing
	      geometry of the object.
	    - CS_BBOX_ACCURATE: get a totally accurate bounding
	      box. Not all plugins support this. Some will just return
	      a normal bounding box.
	    - CS_BBOX_MAX: get the maximum bounding box
	      that this object will ever use. For objects that don't have a
	      preset maximum bounding box this just has to be a reasonable
	      estimate of a realistic maximum bounding box.
	- Modified all mesh object plugins for this change.
	- Changed csMeshWrapper so that the GetObjectBox() function in
	  the iVisibilityObject implementation returns the CS_BBOX_MAX
	  bounding box from the mesh.
	- Added a 'meshes' target to the makefile to compile all mesh
	  object and loader plugins at once.
	- The changes above 'fix' the particle systems from being invisible
	  when used with the visibility culler but the fix is far from
	  perfect. This needs a small design change.
	- Cleaned up sector.h and removed some of the obsolete fields.
	- Removed sector argument from csSector::Prepare().
	- Release of 0.18r001.
19-Feb-2001
	- Norman Kramer changed all csSector::GetNumberXxx() to GetNumXxx().
	- Martin Geisse modified the system driver to use the config
	  manager as its main config object. Currently the manager uses
	  the application config as its dynamic config, but no other
	  config files. So this modification should not change any behaviour.
	- Wouter Wijngaards changed procedural sky so that it can now run
	  in a special non-animated mode. With this setting demosky is
	  now a LOT faster.
	- Fixed a bug in csMeshWrapper::SetMeshObject().
	- Fixed a bug in csMovable. The parent reference should not
	  be incref'ed/decref'ed as that creates a circular reference.
	- Fixed a bug in the handling of iMovable by csMeshWrapper. This
	  caused simple to crash at exit.
	- Fixed an additional bug in simple which would cause another
	  crash at exit.
	- Fixed a bug in WalkTest. If you pressed the mouse button WalkTest
	  would just continue going forward even after releasing it again.
	  Bug fixed by Navdeep S. Tinna.
	- Added iMovableListener interface instead of the
	  csMovableListener callback function.
	- csThing now implements iMovableListener.
	- Added GetEngineMode() to iEngine.
	- Added GetVisibilityCuller() to csSector and iSector.
	- csThing and csMeshWrapper now implement iVisibilityObject.
	- Made all the object vectors in csSector private and added
	  accessor functions to add or remove objects from them. The
	  reason for this is that the sector may want to do extra processing
	  on the objects (like registering them to the culler for example).
	  These are the accessor functions that are added:
	    - AddMesh, UnlinkMesh, GetNumberMeshes, GetMesh(1), GetMesh(2).
	    - AddThing, UnlinkThing, GetNumberThing, GetThing(1)
	    - AddSky, UnlinkSky, GetNumberSkies, GetSky(1)
	    - AddCollection, UnlinkCollection, GetNumberCollections,
	      GetCollection(1), GetCollection(2).
	    - UnlinkLight, GetNumberLights, GetLight(1), GetLight(2).
	    - AddTerrain, UnlinkTerrain, GetNumberTerrains,
	      GetTerrain(1), GetTerrain(2).
	- Fixed all the CS apps to work with the above functions.
	- Optimized csMovable::SetSector() so that it does not do anything
	  if the object is already in that sector.
	- Removed 'owner' from csPolyTreeObject since it is actually not
	  used and we will not be able to give it anyway with the new
	  system.
	- Removed the csPolyTreeObject's from csThing and csMeshWrapper.
	  This is now the responsibility of the visibility culler.
	- Continued working on the visibility plugin system. It is now
	  working mostly. The next step will be to really separate it
	  more cleanly from the engine. Note that there are still bugs
	  in the vis system. It sometimes says something is invisible
	  when it is visible.
	- Fixed crasher in phyztest.
	- Eric Sunshine eliminated several compilation warnings from MSVC
	  (reported by Martin Geisse) in sft3dcom.cpp and avistrv.cpp about
	  variables possibly used uninitialized.
	- Cleaned up the csThing.h header a lot. Made a lot private
	  and added GetCurvesScale/SetCurvesScale and GetCurvesCenter/
	  SetCurvesCenter.
	- Eric Sunshine performed a major update to the Apple/NeXT
	  documentation in the user's manual.
	    - Overhauled to reflect all the recent major work done to the
	      Apple/NeXT ports.
	    - Now mentions new (untested) MacOS/X port.
	    - Added and updated resource URLs.
	    - Reworked port-specific file-description section.	Now takes into
	      account recent distillation of Objective-C++ into pure C++ and
	      pure Objective-C.
	    - Discusses new CrystalSpaceRoot and CrystalSpaceRootIgnore
	      defaults.
	    - Added key-mapping discussion for NextStep.
	    - Added several new To-Do and Bugs items to the `NeXT Notes'
	      section.
	    - Many other clarifications and enhancements.
	- Eric Sunshine updated the BeOS-specific documentation in the user's
	  manual.
	- Eric Sunshine repaired a significant number of TeX formatting
	  problems which were recently introduced into the Texinfo source
	  files.
	- Eric Sunshine converted several of the map2cs tutorial EPS images
	  back to gray scale so that they will look nicer in typical printed
	  output.  They also display correctly once again on NeXT.
18-Feb-2001
	- Martin Geisse added some missing 'volatile' keywords to the
	  waveout driver.
	- Renamed csPolygonSetBBox to csThingBBox.
	- Moved the octree from csSector to csThing. Added
	  csThing::BuildStaticTree() to create this tree.
	- Changed the implementation of csSector::UseStaticTree() so that
	  it will now call BuildStaticTree() for all things having the
	  CS_ENTITY_VISTREE flag set. At this moment only one such thing
	  will be properly handled by csSector (at least what visibility
	  is concerned). In the past the octree was built for all things
	  which were then merged into one big thing. Now the tree is
	  built on one thing alone.
	- Added new CS_ENTITY_VISTREE flag for csThing which means this
	  thing will get an octree. Removed CS_ENTITY_NOBSP flag which is
	  no longer useful now. Added 'VISTREE' flag for loader and
	  removed 'NOBSP' flag.
	- csPolygonTree (octree and bsp trees) are now attached to a csThing
	  instead of a csSector.
	- Removed support for 'BSP', 'LIGHTX', 'ACTIVATE', 'TRIGGER',
	  and 'MAX_TEXTURES' statements in the loader. These have been
	  obsolete for a long time.
	- Added support for parts in things. In the loader it is now possible
	  to define a thing which contains parts. This is mainly
	  useful for the representation of the static thing as you can
	  then still maintain a logical division of the static thing into
	  separate sub-things. Note that at this moment the engine doesn't
	  keep track of the logical units. It is simply the loader that
	  allows this syntax. A 'PART' is completely similar to a THING
	  except that it can only occur as part of another THING or PART
	  and that it has no engine representation (at the moment). All
	  part's in a thing are simply merged.
	- Updated all CS apps to work with all the recent changes.
	- csThing is now responsible for drawing its own static tree if
	  it has one.
	- Started work on iVisibilityCuller and iVisibilityObject. Using these
	  two SCF interfaces it will be possible to separate visibility
	  culling logically and physically from the engine itself.
	  Objects that implement iVisibilityCuller know how to test visibility
	  for objects. The visibility culler will work with objects that
	  implement iVisibilityObject. This will eventually make it
	  possible to plug in other visibility systems into CS without
	  changing the engine. This system is not yet working.
	- Extended iMovable and csMovable with a list of movement listeners.
	  A movement listener is some other object that is interested
	  in hearing whenever the movable changes (i.e. the object moves).
	  This will be used for visibility testing. The visibility culler
	  will add itself as a listener to the movable of the objects it
	  wants to test.
18-Feb-2001
	- Eric Sunshine eliminated a compilation warning in levtool.cpp on
	  BeOS.
	- Eric Sunshine finished the conversion of the Glide 3D driver to the
	  new configuration file system.  This conversion had been started by
	  someone else previously, but was incomplete.
	- Eric Sunshine fixed g2dtest.cpp so that it now explicitly closes the
	  iGraphics2D context which it creates (much like the 3D context is
	  explicitly closed by 3D applications).
	- Eric Sunshine began updating the documentation for the Apple/NeXT
	  port:
	    - Mentions new (untested) MacOS/X port.
	    - Major changes in code and file organization.
	- Eric Sunshine fixed a problem on MacOS/X Server 1.0 (Rhapsody) where
	  a system header was defining a macro named Free().  Unfortunately,
	  this macro was conflicting with several Crystal Space classes which
	  have methods named Free().  This problem only manifested when certain
	  facilities were requested via the SYSDEF_* macros and <libc.h> was
	  imported.
	- Eric Sunshine fixed the default setting of INSTALL_DIR in install.mak
	  so that it now works correctly with the GNU make shipped with
	  MacOS/X Server 1.0 (Rhapsody).
	- Eric Sunshine changed next/csosdefs.h so that it only fakes up the
	  strdup() function on OpenStep and NextStep.  It is no longer faked
	  up for MacOS/X or MacOS/X Server 1.0 (Rhapsody).
	- Eric Sunshine worked around a bug in the OpenStep compiler which was
	  triggered by cfgmgr.cpp.  The problem is that the compiler creates
	  unlinkable code when an inline method invokes a second inline method
	  which the compiler has not yet seen.
	- Eric Sunshine added an ugly (and hopefully temporary) OpenStep/Sparc
	  hack to pol2d.cpp to work around "local relocation entries in
	  non-writable section" linkage errors.
	- Eric Sunshine fixed several Texinfo mark-up errors in the User's
	  Manual.
17-Feb-2001
	- csSector is now properly separated from csPolygonSet. Sectors
	  no longer contain polygons.
	- Added csEngine::CreateSectorWalls() which is a convenience
	  function that will create the thing which is supposed to
	  contain the convex outline of the sector. This function is added
	  to make it easier to convert old code that adds polygons to the
	  sector to new code where the same polygons are added to the
	  'outline thing'.
	- Added iSector and csSector::CalculateSectorBBox() to calculate the
	  bounding box of all objects in a sector (mesh objects and things
	  currently).
	- Rain and snow console commands in WalkTest now use
	  CalculateSectorBBox() to calculate the bounding box for the
	  particle system.
	- Moved support for SKYDOME command in csloader to the thing
	  loader instead of the sector loader.
	- Removed iPolygonSet and put all functionality in iThing.
	- Removed all the Dumper::Memory() functions. They were incorrect,
	  difficult to maintain and almost impossible to correctly implement
	  with all the geometry moving to plugins.
	- Removed the class csPolygonSet and moved all functionality to
	  csThing.
	- Eric Sunshine defined the missing DESCRIPTION.OS.beos variable in
	  lib/cssys/beos/beos.mak.
	- Eric Sunshine eliminated a compilation error in cfgfile.cpp on BeOS.
	- Martin Geisse fixed a bug in the pysimp application.
	- Martin also removed two unused options from cryst.cfg.
	- Martin changed the VFS documentation to deal with the new
	  config format.
	- Norman Kramer changed the test for NASM slightly. Also removed
	  writing of entry NASM=nasm.
16-Feb-2001
	- Dynamic lights do not traverse through mirroring portals anymore.
	  This caused a bug because the dynamic lighting routine can't handle
	  this correctly. Rather than fixing this routine (which would make
	  it slower) I choose to just disable this feature.
	- The dynamic lighting routine also accounts for space warping
	  portals now.
	- Added new flags for things: CS_ENTITY_ZFILL to use Z-fill instead
	  of Z-buffer for rendering, CS_ENTITY_INVISIBLE to not render at
	  all, CS_ENTITY_NOSHADOWS for not casting shadows,
	  CS_ENTITY_NOLIGHTING to disable lighting, CS_ENTITY_NOBSP
	  to exclude this object from bsp or octrees, and CS_ENTITY_BACK2FRONT
	  to render this object back to front (together with objects in
	  the same render order queue).
	- Removed 'use_z_buf' parameter to csThing::Draw(). This is now
	  controlled with the CS_ENTITY_ZFILL flag.
	- Sky objects automatically get the CS_ENTITY_ZFILL flag.
	- Added support in the thing loader for the flags INVISIBLE, ZFILL,
	  NOSHADOWS, NOLIGHTING, NOBSP, and BACK2FRONT.
	- Added 'shadow_thing_mask' and 'shadow_thing_value' to csFrustumView.
	  Every thing that is processed will be tested against this flag.
	  If it matches it will be used for shadow generation. Otherwise
	  not. The lighting routines will set these values so that
	  only things which have CS_ENTITY_NOSHADOWS NOT set will generate
	  shadows. This is for csSector::CheckFrustum().
	- Added 'process_thing_mask' and 'process_thing_value' to
	  csFrustumView. Every thing that is processed will be tested
	  against this flag. If it matches CheckFrustum() will recursively
	  call itself for this thing too. The lighting routines will set
	  these values so that only things which have CS_ENTITY_NOLIGHTING
	  NOT set will be further processed.
	- Removed a lot of the obsolete tokens in csparser.
	- Fixed a bug in csThing::MergeTemplate(). The function did not
	  correctly copy the flags from the template to the thing.
	- Started a VERY fundamental change in the engine. The sector will
	  no longer inherit from csPolygonSet and will thus no longer be
	  able to hold polygons. A sector is simply a container of objects.
	  The outer walls of a sector can be created using a thing object.
	- Finally removed the very old and ugly obsolete ROOM and SIXFACE
	  statements from the loader. Old levels will no longer be supported.
	- Fixed a bug in simple.
	- Eric Sunshine fixed a couple of problems in
	  ddgTriangle3::intersectPointTriangle() which were reported by
	  Jonathon Doran <jon.doran@nsc.com>:
	    - The `d23' vector was being incorrectly computed.
	    - The Borland compiler was not able to grok computation of the
	      `d1', `d2', and `d3' vectors on account of very questionable
	      mixing of references and pointers.
15-Feb-2001
	- Updated various parts of the documentation. The most important
	  change is that the simple tutorial has been updated to the mesh
	  object plugin system.
	- Martin Geisse updated the documentation to deal with the new
	  config system. Martin also added some hints from Paulo Candido
	  to the win32 docs.
	- Fixed an old bug in the OpenGL canvas. The ScreenShot() function
	  did not work correctly on big-endian systems in 32-bit display
	  mode. The colors were wrong.
	- Fixed a bug in csMaterialHandle::FreeMaterial(). It would
	  accidently clean up the texture as well.
	- Fixed another bug in csMaterialHandle::Prepare(). This function
	  will now look if the material is still there and copy the
	  data again. This is useful to change material settings later.
	- Fixed a bug in csMaterialWrapper::Visit(). It would call
	  visit on the texture even if there is no texture for the material.
	  This naturally caused a crash.
	- Eric Sunshine eliminated several compilation warnings in cfgmgr.h
	  and cfgmgr.h.
14-Feb-2001
	- Continued making use of QUERY_INTERFACE in the engine more sensible.
	  This involves:
	    - csMovable::SetParent()
	    - csMeshWrapper::Draw()
	    - csMeshWrapper::GetMovable()
	    - csPolyTexture::GetPolygon()
	    - csOctree::Cache()
	- Also did the same for all mesh object plugins and loaders, csparser
	  library, and csclear library.
	- Added csEngine::current_iengine which is a reference to the main
	  iEngine.
	- Fixed a bug in csMeshFactoryWrapper::SetMeshObjectFactory().	This
	  function would not correctly call DecRef() on the old factory and
	  IncRef() on the new one.
	- Renamed csEngine::meshobj_factories to csEngine::mesh_factories.
	- Changed all UpdateLighting routines everywhere to work directly with
	  iLight instead of csLight pointers.  That is easier and also avoids
	  some problems with the need to conver them.  This also fixes
	  iMeshWrapper::UpdateLighting().
	- csEngine::GetNearbyLights() now returns references to iLight instead
	  of csLight.
	- Fixed a few bugs in the explosion loader which prevented that loader
	  from working correctly.
	- Fixed a reference to zlib-win32-bin in the documentation.
	- Added full documentation for all the existing mesh object plugins in
	  CS.
	- Cleaned up mapfmt.txi documentation.	i.e.  removed all the
	  documentation related to sprite and particle systems.	 This is now
	  documented with the mesh object plugin documentation.	 Also added
	  documentation about MESHOBJ keyword.
	- Eric Sunshine made the following changes:
	    - Modified static.mak so that cslibref.cpp now depends upon the
	      system makefile (such as linux.mak) in addition to user.mak and
	      config.mak (upon which it historically depended).	 This new
	      dependency catches the cases where the user modifies the PLUGINS
	      variable in the system makefile.
	    - Fixed a couple minor problems with ddraw.mak and fountain.mak so
	      that they work correctly with static linking.
	- Eric Sunshine made the following changes to snapshot.py, the CVS
	  snapshot generation script.
	    - Improved error reporting when external (shell invoked) commands
	      fail.  The actual command is now reported (in addition to the
	      error message which has always been reported).
	    - Added the missing `-P' flag to the `cvs checkout' command.
	- Martin Geisse added a "Sound System Changes" section to apimod18.txi.
	- Eric Sunshine made the following changes to the user's manual:
	    - Fixed a significant number of Texinfo errors and warnings which
	      were recently introduced.
	    - Normalized a lot of Texinfo mark-up usage.
	    - Eliminated all overfull and underfull hbox warnings reported by
	      TeX.
13-Feb-2001
	- Philip Wyett did some proof reading of the docs:
	    - Added two missing web links for required mingw
	      external dll's jpeg and png.
	    - Grammar changes and added links.
	    - Expanded MSVC version requirements for CS compilation (i.e.
	      service pack 4, MS processor pack, ...).
	    - Many typo's and cosmetic changes.
	    - Update to Map2CS tutorial. Brings into line with use of
	      WorldCraft 3.3 and simplified setup and usage instructions.
	- Wouter Wijngaards did an update to the procedural sky so that
	  it looks good in software too (disabled CS_PROC_TEXTURE_ALONE_HINT
	  for the texture, so that the colormap is (re)computed in 8bit
	  mode).
	- Martin Geisse updated the apimod18.txi documentation on how
	  to go from version 0.17 to 0.18 with regards to the config
	  changes.
	- Made all the members of csRenderView private and provided
	  proper accessor functions. In particular added:
	    - SetEngine(), GetEngine()
	    - GetClipPlane()
	    - SetCallback(), GetCallback(), CallCallback(),
	      GetCallbackData()
	    - GetFrustum()
	    - SetThisSector(), GetThisSector()
	    - SetPreviousSector(), GetPreviousSector()
	    - SetFogInfo(), GetFogInfo(), AddedFogInfo(), ResetFogInfo()
	    - GetG3D(), GetG2D()
	    - SetPortalPolygon(), GetPortalPolygon()
	    - GetView()
	    - HasClipPlane(), UseClipPlane()
	    - HasClipFrustum(), UseClipFrustum()
	- Also added a copy constructor to csRenderView to correctly
	  fix the ref counts.
	- Since QUERY_INTERFACE does an implied IncRef() a lot of current
	  code is not correctly handling this (i.e. does not call DecRef()).
	  In addition QUERY_INTERFACE is not very efficient. So I rewrote
	  a lot of the QUERY_INTERFACE calls so that the QUERY_INTERFACE
	  result is remembered. The class remembering this result is
	  now responsible for doing DecRef() when appropriate. This should
	  make things slightly more efficient and certainly more correct:
	  Here are the places where this is done:
	    - csView::SetCamera()
	    - csRenderView::SetView()
	    - csRenderView::SetEngine()
	    - csRenderView::camera
	- Also fixed all of the apps where this DecRef() was missing.
	- Fixed csEngine where this DecRef() was missing.
	- Fixed csEngine::FindMeshObject() so that it will no longer crash
	  when it cannot find the mesh.
	- Fixed csEngine::FindTexture() so that it will no longer crash
	  when it cannot find the texture.
	- Fixed csEngine::FindCameraPosition() so that it will no longer
	  crash when it cannot find the texture.
	- Since csMeshWrapper is now the only class subclassing from
	  csSprite it makes better sense to merge both classes into
	  csMeshWrapper. So csSprite is now removed and the engine only
	  talks about csMeshWrapper objects. This has the following
	  additional consequences:
	    - csEngine::sprites is renamed to csEngine::meshes
	    - csEngine::UnlinkSprite/RemoveSprite renamed to <Xxx>Mesh.
	    - csEngine::PrepareSprites renamed to PrepareMeshes.
	    - csSector::sprites renamed to csSector::meshes
	- Updated apimod18.txi with the full info on how to port csSprite3D
	  to mesh object system.
	- Fixed MazeD so that it correctly saves the new spr3d format
	  instead of the old csSprite3D format.
	- Extended iMeshObject with HitBeamObject() function. Only
	  the spr3d plugin supports this at the moment. This is a todo
	  for the other plugin types. csMeshWrapper will call this function
	  now.
	- Martin Geisse fixed a few problems in ptlab and csview that came
	  with the removal of csSprite.
	- Wouter Wijngaards fixed a compile error in terrddg.cpp.
12-Feb-2001
	- Wouter Wijngaards fixed the loading crash for csfedit. Now
	  csfedit will create a new font called 'LoadingError' when
	  loading fails.
	- Wouter also made a big quality improvement on the procedural
	  sky. Adjusted several parameters. The result is that clouds
	  look much wispier then before. This also makes the texture
	  look smoother.
	- Martin Geisse fixed a bug that crashed levtool when loading
	  a non-3d-sprite mesh object.
11-Feb-2001
	- Martin Geisse fixed a bug that crashed cctest when map file
	  was not found.
	- Martin also fixed a very old msvc compiler warning (msvc doesn't
	  like usage of 'this' pointer in member/base class initialization
	  list in constructors).
10-Feb-2001
	- Martin Geisse did the following changes to the config system:
	    - Added the config manager object. This object takes several
	      config files and makes them look like a single config object
	      to the outside.
	    - Removed Prev() method from iterators because they caused
	      problems with the config manager.
	    - Fixed a case where the dirty flag was not set.
9-Feb-2001
	- Wouter Wijngaards added default =0 to csPixmap function.
	- Philip Wyett fixed memory reference errors on app exit under
	  Windows. "->DecRef ();" both cube and ball inside the destructor.
	- Added incomplete doc on transition from 0.17 to 0.18. Will work
	  further on this.
	- Added GetTransformedBoundingBox() and GetScreenBoundingBox() to
	  csMeshWrapper.
	- Changed sprite selection code in WalkTest to work on mesh objects.
	- Spr3d plugin now also implements iConfig so that you can set
	  sprite configuration options through that. Currently the supported
	  options are 'sprlod' (sprite lod level) and 'sprlq' (sprite
	  lighting quality).
	- Modified WalkTest to use the iConfig interface of the spr3d
	  plugin to implement the 'lod' and 'sprlight' console commands.
	  Added GetConfigOption() and SetConfigOption() routines in WalkTest
	  to make this easier.
	- WalkTest is now completely free of the old csSprite3D and is
	  fully converted to the new spr3d plugin.
	- Converted cctest app and csclear lib to use new spr3d plugin.
	- Added SetFactory() and GetFactory() to csMeshWrapper.
	- Added GetFactory() to iMeshObject and removed GetFactory() from
	  iSprite3DState. Changed all mesh object plugins accordingly.
	- Fixed MazeD for the new spr3d plugin.
	- Fixed Physics test appliation to use the new spr3d plugin.
	- Fixed levtool app to use the new spr3d plugin.
	- Changed GetRadius() in iMeshObject to return a csVector instead
	  of a float.
	- Completely removed csSprite3D and csSpriteTemplate from the engine.
	  This means that csFrame, csSpriteAction, csSkeleton... are all
	  gone now. Also removed csLoader::LoadSpriteTemplate and LoadSprite.
	  The 'SPRITE' keyword is no longer recognized.
	- Removed FindSprite() in iEngine, csEngine, iRegion, and csRegion and
	  added FindMeshObject() instead.
	- Removed iSprite and iSpriteTemplate interfaces.
	- Eric Sunshine made the following changes to the API transition
	  documentation:
	    - Re-organized so that there is a single appendix for API
	      transitions rather than multiple appendices.  The API transition
	      appendix now contains a sub-section for each transitional
	      version.
	    - Ran nodefix.pl (make repairdoc) to repair out of date @node and
	      @menu directives.
	    - Eliminated underfull and overfull hbox warning messages reported
	      by TeX.
	    - Performed a bit of clean up in apimod18.txi.
	- Eric Sunshine modified the Apple/NeXT system driver so that it now
	  recognizes the new defaults `CrystalSpaceRoot' and
	  `CrystalSpaceRootIgnore'.  The first setting allows the user to
	  configure the location of the root directory which contains the
	  Crystal Space resources.  This allows any Crystal Space application
	  to locate its resources even when launched from the Workspace.  The
	  reason that this is necessary, is that the Workspace launches the
	  application without providing any path information (that is, argv[0]
	  is the bare program name) and without setting the current working
	  directory to a meaningful value.  The use of this setting is similar
	  to the CRYSTAL environment variable, but since the Workspace does not
	  allow environment variables to be set, the Apple/NeXT defaults system
	  is used instead.  The second setting tells the application to ignore
	  the first variable.  This is useful in cases when the first variable
	  is set in the "global" domain, but a particular application wants to
	  ignore the setting.  The upshot of this change is that it is now
	  possible to launch Crystal Space applications via double-click in the
	  Workspace on NextStep.  Unfortunately, this does not yet work on
	  OpenStep due to some, as yet, undetermined problem where the
	  NSApplication object throws an exception.  On MacOS/X and OpenStep,
	  these defaults can be set as illustrated below:
	    defaults write NSGlobalDomain CrystalSpaceRoot /Library/CS
	  On NextStep, the following command would be used:
	    dwrite -g CrystalSpaceRoot /LocalLibrary/CS
8-Feb-2001
	- Martin Geisse changed DirectInput version number from 0x0700
	  to 0x0300.
	- Philip Wyett fixed VERY VERY long standing compile errors
	  in the MingW port. There are no code changes, just a code move
	  around. Still compiles in VC6. Other platforms say Linux etc.
	  will have to compile to verify this hack (and it is a hack :-))
	  is OK?
	- Changed 'bot' code in Walktest and ptlab to use the new spr3d
	  plugin instead of csSprite3D.
	- Initialization of collision detection in WalkTest will now work
	  for all mesh objects that actually support iPolygonMesh (currently
	  only spr3d plugin does this).
	- Fixed spr3d plugin so that GenerateLOD() and ComputeBoundingBox()
	  will now be called upon the first creation of a sprite instance
	  from a factory. Previously this was not done so this could give
	  problems.
	- Changed csDrawCallback in meshobj.h to use iMeshWrapper and
	  iRenderView instead of csMeshWrapper and csRenderView.
	- Extended iMeshWrapper interface with SetDrawCallback() and
	  GetDrawCallback().
	- Added 'add_meshobj' to walktest which is equivalent to 'add_sprite'.
	- Ported the skeletal tree from WalkTest to use the new spr3d
	  plugin.
	- Added ObjAdd(), ObjRemove(), ObjRelease(), and GetObjectParentI()
	  to iObject SCF interface so that they can be used from within
	  plugins too.
	- Added a new constructor to csCollider which accepts an iObject*
	  as a parent. This will help to attach csCollider objects to
	  mesh object plugins.
	- Fixed bug in csMeshWrapper. It did not use the correct SCF macros
	  to indicate that it was actually getting iBase from the parent
	  csSprite.
	- Fixed a bug in the spr3d plugin where it would reset the value
	  of MixMode to CS_FX_COPY the first time it was used.
	- Converted the crossbuilder importer (i.e. the routines that can
	  read MD2 and 3DS files to sprite templates) so that they use
	  the new spr3d plugins.
	- Added support for 'FILE' in MESHOBJ for factories. This is only
	  temporary. The real solution is to move the 3DS and MDL/MD2 loaders
	  which are now in impexp to plugins similar to the spr3dldr plugin.
	  For now you can use this to import such a sprite template. If
	  you use 'FILE' then you don't have to specify a 'PLUGIN' or use
	  the 'PARAMS' statement. In addition also supported the MATERIAL
	  keyword to set the material here. Note that you should only use
	  MATERIAL in combination with the FILE keyword. In normal use
	  MATERIAL is part of the PARAMS statement and parsed by the plugin.
	- Converted Squawk to use the new spr3d plugin.
	- Added 'loadmesh' and 'addmesh' console commands which complement
	  the old 'loadsprite' and 'addsprite' commands. These work for
	  meshes now. 'loadsprite' and 'addsprite' are now deleted.
	- Renamed 'delsprite' to 'delmesh'.
	- Renamed 'listsprites' to 'listmeshes'.
	- 'listactions', 'setaction', and 'setmotion' use the new spr3d
	  plugin system too. As a consequence, they no longer work for
	  the old sprites.
	- Changed name of csTriangleVertex to csTriangleVertex2 temporarily
	  in spr3d plugin so that static build works again. After csSprite3D
	  is removed this can be restored.
7-Feb-2001
	- Martin Geisse removed sound volume division by number of sources
	  from software sound because it did not sound very good.
	- Martin also fixed an old bug with distorted 8-bit software sound.
	- Philip Wyett added missing line: "virtual void NextFrame ();"
	  dec into section 5.2.4 of the Simple tutorial.
	  The fact of this ommission was brought to my attention
	  by Menachem Pastreich - Thanks :-)
	- Philip also fixed a compile error in gamecore with regards to
	  the move of cspixmap.h from csengine to csfx.
	- Wouter Wijngaards added missing CreateInstance routine to
	  csAnimationTemplate.
	- Wouter also ixed another bug: the order of pushes in
	  csAnimationTemplate::AddFrame was wrong. Also fixed the
	  GetLength(). csAnimationTemplate and csAnimatedPixmap
	  work now. (Tested in Tunnel Fighter).
	- Converted the missile in walktest to use the new mesh object
	  spr3d plugin instead of csSprite3D. Also modified standard.zip
	  accordingly.
	- Finished support for spr3dldr (added support for TWEEN and
	  ACTION). Now it can correctly load sprites.
	- Added SCF interface iMeshWrapper which is the SCF version of
	  csMeshWrapper. Also put a few functions in there so that it
	  is possible to actually use it.
	- Added CreateMeshFactory() and CreateMeshObject() convenience
	  functions to iEngine. The first one creates a factory and the
	  second one will create a mesh object given a factory and place
	  it correctly in the world.
	- Updated simple to use the new convenience functions.
	- Norman Kramer started optimizing AVI plugin using u/v pipe.
	- Added csLoader::LoadMeshObjectFactory() to load mesh object
	  factories.
	- Simple now uses mesh object system for the sprite too.
6-Feb-2001
	- Continue implementation of spr3d loader plugin. The factory
	  loader should work now.
	- Added support for loading MESHOBJ factories in library files.
	- Also added spr2d and spr2dldr to walkall because the explosion
	  needs it.
	- Eric and Jorrit fixed a bad bug in spr3d which caused the entire
	  system driver to be included in the plugin. Plugins should not
	  link with plugins. But if they do then can only use iSystem and
	  not anything inside cssys (like fatal_exit in this case).
	- Eric Sunshine fixed a couple copy/paste errors in linex2d.mak which
	  were pointed out by Jan Dvorak <johnydog@go.cz>.
	- Martin Geisse did the following changes to cspixmap and
	  csanimation2d:
	    - Moved both from csengine to csfx.
	    - csPixmap is now a more general interface-like class.
	    - csSimplePixmap is now what csPixmap was before.
	    - Changed the animation system to work on a template-instance
	      basis.  Templates are called csAnimationTemplate and instances
	      of a template are called csAnimatedPixmap. These instances
	      inherit from csPixmap.
	    - Animations can now handle frames with different delay values.
	- Wouter Wijngaards fixed a bug in csfedit where the mouse would draw
	  on the character when the mouse was not down.
	- Norman Kramer fixed a scaling bug in the AVI plugin.
5-Feb-2001
	- Eric Sunshine eliminated a couple compilation warnings in
	  csfedit.cpp.
	- Added GetFOVAngle() to iCamera.
	- Created the spr3d plugin (untested). The old csSprite3D is still
	  there and will remain there until everything is ported to the
	  new plugin. I also still have to implement spr3dldr (the loader).
	- Added spr3d, spr3dldr, explo, and exploldr targets to 'walkall'
	  because these are really required by WalkTest.
	- Started work on spr3dldr (the Sprite3D loader plugin). The
	  plugin currently works but only supports a tiny subset of what
	  needs to be supported (i.e. not enough to be useful).
	- Wouter Wijngaards changed csPixmap to allow subclassing. Made
	  a subclass of csPixmap, that is csAnim2D - an animated pixmap.
	  Each time you draw the correct frame of the animation is
	  substituted, and drawn. Use like a csPixmap, and redraw each frame
	  (if not already a 2d overdraw).
	- Wouter removed the already present csAnimation2D in csengine.
	- Norman Kramer did the following:
	    - Fixed bug in the c yuv2rgba routine: u,v values were taken
	      for 4 sequential pixel, instead the were meant for a 2x2
	      pixelblock.
	    - Started NASM mmx routine for yuv2rgba: doesnt work yet and
	      is not scheduled either.
	- Removed glu.h includes from OpenGL plugins. We don't need it and it
	  adds an unneeded dependency.
4-Feb-2001
	- Wouter Wijngaards changed includes, so that make depend works
	  nicer for csfedit.
	- Norman Kramer fixed a bug in the AVI plugin. Red and blue
	  chrominance values were swapped.
3-Feb-2001
	- Wouter Wijngaards added full functionality to the .csf font
	  editor. You can edit characters, see a preview, change individual
	  character widths, change font names, widths, save, load, etc.
	- Philip Wyett started integration of DivX into CS tree.
	- Philip also added plggamecore and added "DSP.GCORE.LIBS = xmlparse"
	  to generate correct VC6 project file and fix link errors in
	  the plugin.
2-Feb-2001
	- Wouter Wijngaards continued work on csfedit. You can now load
	  a font (or make a new font) and see its contents in a window.
	  The window also has working scrollbars now.
	- Norman Kramer added initialization of pG2D to NULL (for avi plugin).
	- Fixed a compile error in csfedit (only in debug mode) and
	  fixed the makefile so that the description of the make target
	  aligns correctly with the other descriptions.
	- Extended iSkeletonConnectionState with GetTransformation() and
	  SetTransformation().
	- csSprite3D now implements iSprite3DState (similar to the work that
	  has been done yesterday on csSpriteTemplate).
	- Walktest now uses this new iSprite3DState for the skeleton and
	  the ghost.
	- Eric Sunshine enabled generation of MSVC DSP files for the csPython
	  plug-in module and the PySimp application since we have one or two
	  Windows users who would like to build these modules.
	- Martin Geisse fixed two bugs in the sound system.
1-Feb-2001
	- Martin Geisse changed the sockets driver to use system events
	  instead of Open() and Close() methods.
	- Martin also fixed a bug which caused the sound drivers to stop
	  'open', 'close' and 'pre-process' system events from further
	  processing.
	- Norman Kramer set ApplicationShow to SW_SHOWNORMAL in main().
	  For some reason the mingw links main and not WinMain for guio
	  apps. In that case ApplicationShow was initialized to 0 which
	  means HIDE which in turn was the reason the window was invisible
	  when running with opengl/mingw. I remember that it worked before,
	  so probably some linker options slightly changed when linking
	  with mingw - I dont know.
	- Wouter Wijngaards added the csf edit application (font editor).
	  Now it can read files. Note that the csws querydialog for
	  filedialog now only returns full system paths. Not VFS paths.
	  I worked around (prob. unix specific) using stat() and fread().
	- Philip Wyett updated levtool to take account of Andrew's changes
	  yesterday. Move to csTreeBox and changed to new mouse handler
	  csevMouseClick. App now compiles and runs OK again under Windows.
	- Philip also added new avi plugin to autogeneration process. This
	  will generate both the VC6 project files for the plugin and
	  the test application.
	- Added GetAnmIndex() and GetTexIndex() to iSpriteFrame.
	- Added MergeNormals() to iSprite3DFactoryState.
	- Changed csLoader to use the new iSkeletonLimb, iSkeletonConnection,
	  iSkeleton, and iSprite3DFactoryState to load a sprite template.
	  Only partially done though. The impexp loaders still need a pointer
	  to csSpriteTemplate.
	- Fixed QUERY_INTERFACE_SAFE so that it doesn't evaluate it's
	  parameters multiple times.
	- Changed skeletal demos in WalkTest to use the new
	  iSprite3DFactoryState interface (and related).
	- Eric Sunshine fixed a serious bug in cspython.cpp where the contents
	  of several csString objects was potentially being used _after_ the
	  csString was destroyed.  This was one of those object-lifetime
	  issues which differ from compiler to compiler.
31-Jan-2001
	- Martin Geisse fixed a compile-time error in CSWS.
	- Added GetPrivateObject() to iMaterialWrapper.
	- Added QUERY_INTERFACE_SAFE() which will first test if the given
	  object is NULL. In that case it will return NULL. Otherwise
	  equivalent to QUERY_INTERFACE().
	- Let csSpriteTemplate implement iSprite3DFactoryState. This is in
	  preparation of the csSprite3D move to a plugin.
	- Norman Kramer did further work on the video plugins:
	    - Extended PLUGIN var to build AVI and optionally opendivx.
	    - Added output of what is currently done when trying to load video.
	- Philip Wyett altered path to file 'video.avi' to data directory.
	- Andrew Zabolotny did the following changes to CS:
	    - Now the toolbox toolbar tracks the active editor window
	      (model or world) and changes accordingly. I have drawn a few
	      more icons for MazeD in GIMP, and switched the toolbar
	      texture format to truecolor PNG with alpha channel. Now
	      toolbar icons can have (and some already have) semi-transparent
	      parts :-)
	    - CSWS buttons with pictures are grayed (pictures are displayed
	      semi-transparent) when the buttons are disabled. Also they do
	      not emit the cscmdRightButtonClick message when they are
	      disabled (in MazeD this was manifesting as second-level
	      toolbars popping up even from disabled buttons).
	    - Floating hints will disappear properly even if some window
	      has captured the focus (such as a dialog window). To do so
	      they grab the mouse.
	    - Rewrote much of the csTreeCtrl (treeview) control. The
	      basical interface is very similar (except that I've renamed
	      csTreeCtrl into csTreeBox); most of the changes are related
	      to the internal implementation. Other features: a completely
	      new look-and-feel; a extended, more flexible and less
	      cumbersome API (and a simpler implementation). Also I have
	      changed cswstest so that you can switch miscelaneous tree
	      control styles at runtime and see them in effect instantly
	      (like for notebook control).
	    - Made the csLayout class to set the CSS_TRANSPARENT flag
	      (again?) since otherwise the dialog background "under" the
	      layout isn't drawn, and since the layout itself does not paint
	      anything, you get an hall-of-mirrors like effect (when you
	      move the window).
	    - Dialogs with no children will SuggestSize 8x8 rather than
	      2x2 like it did before. This allows for better identification
	      of windows with wrongly set CSWS_TOOLBAR style bit set :-)
	      (toolbar is a dialog too, so if you wrongly set this bit when
	      creating the window, you'll get just a couple of thin black
	      lines which are confusing, at least they were for me :-)
	    - Changed a little the behaviour of csComponent::NextChild()
	      and PrevChild(): now it returns the next/previous *visible*
	      and selectable child rather than just selectable. This has
	      the effect of not showing anymore the hidden windows when
	      closing a visible window (per Jorrit's request). However, if
	      there is nothing left than hidden window, a hidden window
	      will be focused anyway (but not shown).
	    - Changed a little listbox behaviour and look. No lightblue
	      frame on the focused item anymore; when listbox is active,
	      the focused item is denoted by a solid background, otherwise
	      it is denoted with a thin frame of the same color.
	    - Added a method csComponent::OtherToThis (csComponent, x&, y&)
	      which will convert coordinates from coordinate system of
	      other component to this component's coordinate system. This
	      is faster than the using the LocalToGlobal -> GlobalToLocal
	      pair if the `from' component is a child (or grandchild, or
	      grandgrandchild etc) of `this' component.
	    - Made the toolbars resizeable in MazeD. By default toolbars
	      are now four buttons wide (rather than two like it was
	      before), to reserve a little space for coming "world tree"
	      and "material selector" toolbars.
	    - Added a new kind of events: csevMouseClick. This is generated
	      by mouse event manager (AKA mouse driver) when it detects that
	      the mouse button has been pressed and then released within
	      "DoubleClickTime" and the mouse haven't been moved further
	      than "DoubleClickDist". That is, when you quickly press and
	      release the mouse button twice in sequence, you will
	      generate the next events:
		csevMouseDown
		csevMouseUp
		csevMouseClick (at the same time with MouseUp)
		* This event is emmited only if the mouse haven't moved too
		* far between MouseDown and MouseUp and the time between
		* them haven't exceeded some threshold value.
		csevMouseDown
		csevMouseDoubleClick (at the same with MouseDown)
		* This event is also generated if the same conditions are true.
		csevMouseUp
		csevMouseClick (at the same time with MouseUp)
		* Yet another mouse click event, if the conditions are met.
	      You can notice a slight conceptual difference in Click and
	      DoubleClick because Click is generated after mouse is
	      released, and DoubleClick is generated when mouse is pressed.
	      Well, this is so for historical reasons - most GUIs uses
	      mouse this way.
	      ---
	      Also note that the behaviour of double clicks event has
	      slightly changed: now DoubleClick is emmited *in addition*
	      to MouseDown rather than *instead* like it was before. That is,
	      you will *always* get all the MouseDown and MouseUp events
	      disregarding whenever click and doubleclick events have
	      occured; these events are additional and are introduced just
	      to help the programmer to track these conditions; in general
	      he could do it himself by using timer, remembering position etc.
	      ---
	      This has a slight impact on some seldom-encountered code
	      sequences: if before to catch absolutely all mousedown
	      events you had to catch both MouseDown and MouseDoubleClick
	      events, now you have to catch just MouseDown and don't bother
	      about MouseClick and MouseDoubleClick - the event you are
	      looking for will be always emited. In fact, if you will
	      leave the code as before, you will intercept now two
	      events instead of one; while in most cases it doesn't matter,
	      in some cases it can.
	    - Added a small context menu to every toolbar in MazeD.
	    - Started implementing world tree toolbar. Now it is one of the
	      standard toolbars. It displays in a tree fashion the structure
	      of the 3D world. At the "top" level there can be only sectors
	      (AKA rooms), inside them you can nest things and sprites
	      (but not rooms).
	    - Remove ?= from assignment to CSSYS.OBJ since GNU Make 3.77
	      doesn't expand the text after such an assignment. That is,
	      "CSSYS.OBJ ?= $(...)" is treated literally, e.g. the text
	      inside the brackets is not expanded. If someone really needs
	      ?=, use ifndef instead -- although I don't see any assignments
	      to CSSYS.OBJ, so I can't understand why somebody have put ?=
	      there.
	    - Removed "dep: ..." after last line of "clean:" target - it
	      seems like traces of a CVS conflict introduced by someone in CVS.
	- Eric Sunshine fixed cssys.mak to again support conditional setting
	  of OBJ.CSSYS.	 (This feature was disabled in the most recent
	  revision).
	- Eric Sunshine fixed video.mak so that the `vid' target only appears
	  in the application list if the platform is also able to build
	  video-related plugins.  Also fixed formatting of help message.
	- Eric Sunshine fixed several compilation problems in MazeD and CSWS.
	  Also resolved some const vs. non-const problems in these modules.
	- Eric Sunshine fixed a slew of compilation warnings in cswstest.cpp.
30-Jan-2001
	- Norman Kramer did further work on the video plugins:
	    - Removed some debug code and a stupid comment.
	    - Divx codec works (AVI).
	    - For opengl the pic is flipped vertically , eek (this is because I
	      abused the csImageArea and filled it myself while it was actually
	      meant to be filled by the renderer.  Jorrit talked about
	      introducing a FillPixelArray, which should solve this problem -
	      or the csImageArea can be extended to do that ).
	- Eric Sunshine changed the behavior of the -simdepth option in the
	  AppKit-based Apple/NeXT 2D driver.  If the user specifies an illegal
	  depth, then a suitable warning message is issued and the request is
	  ignored.  Previously, it would return a failure status from
	  iGraphics2D::Initialize() in this circumstance.
	- Eric Sunshine fixed SED_DEPEND in cs.mak so that it works more
	  portably across different versions of GNU make.  In particular, the
	  old definition failed to work correctly on MacOS/X Server 1.0
	  (Rhapsody).
	- Martin Geisse eliminated a few compiler warnings in csgfxldr,
	  glcommon2d.cpp and MazeD.
	- Martin also eliminated a few cases where options have different
	  names in walktest sources and in config file.
	- Eric Sunshine fixed potential a memory leak which Martin introduced
	  in glcommon2d.cpp.
	- Eric Sunshine fixed CS/include/cssys/next/csosdefs.h so that it
	  respects SYSDEF_ACCESS.
	- Eric Sunshine made the following changes to jobber.pl:
	    - Now allows user-specification of the temporary working directory
	      (default is "/tmp").
	    - Added a --version option.
29-Jan-2001
	- Martin also modified the sound drivers so that they are now opened,
	  closed, and updated via system events.
	- Brandon Ehle added documentation for the Skeletal Animation format,
	  and the INCLUDESPRITE macro.
	- Philip Wyett added a divide by zero check in csSprite3D.  This fixes
	  ptlab on Windows.
	- Jorrit fixed the fix from Philip Wyett to make it slightly more
	  robust.
	- Eric Sunshine fixed a bug in csConfigFile where the SetInt(),
	  SetFloat(), and SetBool() methods would not actually set the key
	  of a newly created node if the value being set was 0, 0.0, or false,
	  respectively.
	- Eric Sunshine fixed a bug in csConfigFile where the SetInt(),
	  SetFloat(), and SetBool() methods were applying `delete[]' to the
	  Data value twice.
	- Eric Sunshine made the following changes to the project:
	    - Added a makefile (macosx.mak) for MacOS/X.  This makefile is for
	      Apple's new MacOS/X platform using the Cocoa-based Apple/NeXT
	      port.  Since I do not have access to either MacOS/X or recent
	      Macintosh hardware, this makefile is currently untested, but I
	      believe that the project should build cleanly.
	    - Added new menu definition to next.cfg for MacOS/X which respects
	      the new Aqua-style interface.  This differs from the existing
	      menu definition for MacOS/X Server 1.0 (Rhapsody) which is
	      specific to the Platinum-style interface.
	    - Eliminated reliance upon the Objective-C++ compiler for the
	      Apple/NeXT port by reorganizing the code and writing plain-C
	      stubs which interface between the C++ world of Crystal Space and
	      the Objective-C world of the AppKit frameworks of Cocoa,
	      OpenStep, and NextStep.  By eliminating the need for an
	      Objective-C++ compiler, the project can now be built on MacOS/X
	      (which does not ship with an Objective-C++ compiler).  The
	      port-specific .cpp files now contain only pure C++ code.	All of
	      the Objective-C code has been moved to .m files.	(The standard
	      file extension for Objective-C source files is .m.)
	    - Added icursor.h.	This is a pure-C header which contains the
	      csMouseCursorID constants which used to reside in igraph2d.h.
	      Also added ievdefs.h.  This is a pure-C header which contains all
	      of the event-related constants which used to reside in ievent.h.
	      These files are pure-C, rather than C++, because they must be
	      included by the Objective-C source files of the Apple/NeXT port.
	    - Added NeXTDynamicLibrary.cpp, which is the C++ portion of the
	      plugin loading facility for the Apple/NeXT ports.	 The existing
	      NeXTLoadLibrary.m is now pure Objective-C and publishes a plain-C
	      interface for use by NeXTDynamicLibrary.
	    - Added NeXTConfigFile which is a plain-C wrapper over the C++
	      Crystal Space configuration facility.
	    - Added rules and support facilities to the Apple/NeXT makefile
	      (next.mak) for recognition and compilation of Objective-C (.m)
	      files.  Also added Objective-C support to next2d.mak.
	    - cssys.mak now sets OBJ.CSSYS conditionally; only if it has not
	      already been set.	 This allows the platform-specific makefile to
	      override the list of object files for the system driver.	This
	      facility is used by the Apple/NeXT port to mention Objective-C
	      (.m) object files in OBJ.CSSYS as well as C and C++ files.
	    - cssys.mak now automatically invokes `vpath' for all C files in
	      the system driver source directories (in addition to the `vpath'
	      for C++ files which it has always invoked).
	    - NeXTSystemDriver::SystemExtension() understands the following new
	      messages: "timerfired", "continuelooping", "continuerunning",
	      "dispatchevent", "hidemouse", "showmouse", and "requestshutdown".
	    - De-coupled the tight binding which existed between the
	      AppKit-based NeXT 2D canvas and the NeXT system driver's
	      Objective-C delegate.  Some of the functionality in NeXTDelegate
	      was actually specific to the AppKit-based canvas and may not have
	      been useful or correct for other drivers, such as the planned
	      OpenGL and CoreGraphics drivers.	The following functionality has
	      been moved from NeXTDelegate into the canvas plugin:
		- Setting of "Paused" status message on window when application
		  is suspended.	 The canvas now listens for cscmdFocusChanged
		  events to implement this behavior.
		- Creation and management of the window's tracking-rectangle as
		  well as the associated behavior.
		- Window event mask management.
		- Window position adjustment for video optimization.
		- Response to user initiated window-close events.
	      Other functionality which may be useful to any canvas
	      implementation for Apple/NeXT is published by the system driver
	      via iSystem::SystemExtension().  The messages which may be useful
	      to 2D drivers include "dispatchevent", "keydown", "keyup",
	      "mousedown", "mouseup", "mousemoved", "hidemouse", "showmouse",
	      and "requestshutdown".  Furthermore, the canvas no longer
	      communicates directly with the system driver's Objective-C proxy
	      object; nor vice-versa.  All platform-specific communication with
	      the system driver is now accomplished via
	      iSystem::SystemExtension().
	    - The default NeXT 2D canvas plugin no longer includes
	      NeXTDelegate.h from the CS/libs/cssys/next directory.  2D drivers
	      now communicate with the platform-specific library strictly via
	      iSystemDriver::SystemExtension().
	    - The Objective-C application delegate in the Apple/NeXT port now
	      listens for application-activation and application-deactivation
	      notifications in order to suspend and resume the engine rather
	      than relying on window-activation and window-deactivation
	      messages.	 Not only is this more sensible, but it also helped to
	      de-couple the AppKit-based 2D canvas from the system driver.
	    - Fixed a simple logic problem in the AppKit-based Apple/NeXT 2D
	      graphics driver where it failed to emit a warning message when
	      the user selected an invalid display depth via the -simdepth
	      option.
	    - The AppKit-based 2D canvas for the Apple/NeXT port no longer
	      relies upon the WindowServer to report its own preferred
	      bit-depth.  It turns out (so I discovered) that this is an
	      unreliable operation on OpenStep since the WindowServer will
	      actually report a different value the very first time the program
	      is run versus subsequent runs.  Instead, the driver now relies
	      upon the preferred depth as reported by the NSWindow or Window
	      class.
	    - Mouse tracking in the canvas' window is now more accurate when
	      user switches away from the window or application and then
	      returns.	In particular, the driver now pays attention to the
	      mouse's location at the time that it once again begins tracking
	      the mouse.
	    - Fixed a problem with the AppKit-based Apple/NeXT 2D driver.  If
	      the mouse was hidden prior to the application being paused, it
	      would not be re-hidden when the application resumed.
	    - The special CFLAGS needed to build the AppKit-based 2D driver
	      (next2d.mak) are now only applied when explicitly building that
	      driver rather than being applied to all modules.
	    - Added a new `inherit' keyword to the list of keywords understood
	      by NeXTMenu when processing a menu item entry.  This keyword
	      allows a menu item to inherit attributes from some other menu
	      item.  These attributes can then be overridden locally.  This
	      facility is useful, for example, when one menu item definition
	      differs from another only by its title.
	    - Added a copious amount of documentation to next.cfg describing
	      all of the supported configuration options.
	    - Fixed a bug in NeXTMenu on NextStep where it would fail to
	      properly build submenus on account of a mis-constructed submenu
	      key prefix.
	    - Converted NeXTMenu and NeXTConfigFile to work with new
	      csConfigFile and related SCF interfaces rather than the
	      deprecated csIniFile.
	    - Fixed vfs.cfg so that it works with MacOS/X Server again
	      following Andrew's change to the meaning of CS_PLATFORM_NAME.
	    - Fixed the Apple/NeXT system driver and next.cfg so that they once
	      again work following andrew's change to the meaning of
	      CS_PLATFORM_NAME.	 More importantly, re-added the
	      OS_NEXT_DESCRIPTION macro since it is needed to properly
	      distinguish between platform options in next.cfg.	 This is
	      necessary since the menu layout differs between MacOS/X and
	      MacOS/X Server 1.0 (Rhapsody).  However, Andrew's change made it
	      impossible to make this distinction.
	    - Fixed the csMaterial(csTextureWrapper*) constructor so that it
	      works correctly for the Apple/NeXT platforms when the engine is
	      used as a plugin module.	The problem was that this constructor
	      was invoking another constructor in the same class.  The result
	      of invoking a constructor in this situation is undefined at best
	      since the C++ specification leaves the behavior up to the
	      compiler implementation.	In this case, the result was that none
	      of the instance variables, except `texture', were being
	      initialized.  In particular, the lack of initialization of the
	      SCF goop resulted in IncRef() being called infinitely.  Having
	      fixed this bug, Simplep finally works on Apple/NeXT.
	    - Fixed a problem where many `friend' functions of ddgMatrix4 and
	      ddgVector2 were not declared as `inline' in the respective
	      headers.	This resulted in implementations of these functions
	      appearing in every file which included those headers, which
	      ultimately caused linkage errors.
	    - Eliminated all remaining imports of the deprecated <malloc.h>
	      from platform-independent project sources files.	(Some
	      platform-specific files may still include malloc.h, though.)
	    - Eliminated several compilation warnings reported by the OpenStep
	      compiler throughout the project regarding implicit conversion of
	      void* to some other type.
	    - Eliminated a compilation warning reported by CodeWarrior in
	      csEventQueue::Lock().  The compiler did not like the empty
	      statement following the while() loop.
	- Eric Sunshine fixed a overfull hbox TeX warning in meshobj/using.txi.
	- Martin Geisse changed csConfigFile and iConfigFileNew so that
	  comments at the end of a file are now preserved and can be modified
	  by the application.
	- Eric Sunshine fixed the following problems in csConfigFile introduced
	  by Martin's changes:
	    - Fixed a dangling-pointer bug in csConfigFile::Clear().
	    - Fixed several problem spots in csConfigFile::LoadFromBuffer()
	      where it could assign the wrong comment as the "end-of-file"
	      comment.
	- Philip Wyett changed dnp_tab.cpp to include malloc.h on Windows.
	- Eric Sunshine reverted Philip's change to dnp_tab.cpp and solved the
	  missing malloc.h problem in a different fashion.  The problem with
	  Philip's change was that his #if test was not well formed, and he
	  also forgot to apply the change to CS/support/gnu/bison.sim, from
	  which dnp_tab.cpp is built.
28-Jan-2001
	- Eric Sunshine fixed a crasher in PTLab where it was trying to
	  access a texture (cslogo.gif) which it had never loaded.
	- Philip Wyett removed the reference to the non-existant texture
	  archive at http://server.empathy.com/crystal.
	- Norman Kramer fixed Save & RestoreArea in iGraphics2D to be
	  good with PixelBytes == 2.
	- Norman also did some fixes on the OpenGL texture cache:
	    - Texture size on caching is now only calculated when needed.
	    - Keycolor setting is now remembered so that it is not processed
	      again when texture handle is created again.
27-Jan-2001
	- Martin Geisse moved the main system/application config files to the
	  new config system.
	- Martin Geisse fixed a bug in the sound loader.
26-Jan-2001
	- Norman Kramer did further work on the video plugins.
	  With exception of yuv2rgb conversion AVI is working.
	- Wouter Wijngaards did nothing important to radiosity.
	- Eric Sunshine eliminated a compilation warning in prsky.cpp.
	- Eric Sunshine Made the following changes to inifile.cpp:
	    - Eliminated compilation warnings about implicit conversion of
	      void* to some other type.
	    - GetYesNo() now also recognizes "1" as true in addition to "yes",
	      "true", and "on".
	- Wouter Wijngaards fixed several bugs in radiosity:
	    - Normals when really close up for both lumels. Taking only one
	      normal value would give bad results. This the code now averages
	      for the corners of all lumels.
	    - Set source_patch_size in the config to 1 (did not debug that
	      yet). Vectors a,b when a*b is taken (to get cosinus), lengths
	      must be one. a*b/length(a)/length(b) is only a valid approx
	      when both a and b are pretty large. Close to zero this fails.
	    - When lumels overlap in space (i.e. two polygons with the same
	      texture seamlessly aligning) the distance would become almost
	      zero. Added a test, and at such a moment a derivative of
	      radiosity is applied (the diffuse*area*visibility/PI is taken,
	      no angles/distances are used). This seems to remove all
	      glitches from the radtest level.
	    - To avoid light explosion with radiosity we do a Normalize()
	      for each step now.
25-Jan-2001
	- Wouter Wijngaards fixed mazed compilation, by adding csutil
	  library after the cssys for linking.
	- Norman Kramer is still working hard on the new video codec plugins.
24-Jan-2001
	- Small update to Python scripting system.
	- Norman Kramer added dummy audio stream and did some further work
	  on AVI support.
	- Eric Sunshine made the following changes to csConfigFile and
	  iConfigFileNew:
	    - Added SubsectionExists(), which is similar to KeyExists() except
	      that it tests if at least one key exists with the supplied
	      prefix, rather than testing if a particular key exists.
	    - Renamed KeyExist() to KeyExists().
	    - Added GetVFS() to complement existing GetFileName().
	    - Renamed arguments in several method prototypes to clarify and
	      better document their usage and intention.
	    - Upgraded and clarified header comments.  Also removed incorrect
	      references to INI-format files from comments.
	- Eric Sunshine made the following changes to csConfigFile:
	    - Now preserves blank lines in configuration files at save time
	      instead of folding them out.  The blank lines are considered part
	      of the comments.
	    - Fixed bug: SaveNow() was not respecting assertion made by
	      comments in header that a comment could be present but empty.
	    - Now performs more thorough whitespace checking in
	      LoadFromBuffer().
	    - Eliminated the ugly `goto' statements from LoadFromBuffer().
	    - Fixed bug: LoadFromBuffer() was not properly handling CRLF line
	      terminators (though it was handling LF and CR individually).
	    - LoadFromBuffer() now keeps track of the line number of the file
	      being parsed.
	    - LoadFromBuffer() now emits diagnostic messages if it encounters
	      parse errors rather than silently ignoring them.
	    - Fixed bug: LoadFromBuffer() was setting the comment on a node
	      even if the source file did not include a comment.
	    - The methods SetStr(), SetInt(), SetFloat(), SetBool(), and
	      SetComment() are now much smarter about setting the Dirty flag,
	      and only do so if the new value actually differs from the old.
	    - GetBool() now recognizes the string "1" as true in addition to
	      "true", "yes", and "on".
	    - Augmented FindNode() so that it can search for a subsection as
	      well as a full key.  This functionality is used by the new
	      SubsectionExists() method.
	    - csConfigIterator::CheckSubsection() now works correctly when
	      enumerating the entire database (rather than just a subsection).
	    - Resolved several const vs.  non-const issues.  Eliminated the
	      ugly casting of pointers from const to non-const.
	    - Moved the csConfigNode and csConfigIterator class declarations
	      out of cfgfile.h and into cfgfile.cpp.  These are entirely
	      private classes, so there was no need to publish them in a public
	      header.
	- Eric Sunshine fixed scfreg so that it works with the new csConfigFile
	  class.  (Martin forgot to do this when he converted SCF to use the
	  new configuration file format.  The result was that scfreg would
	  blast the contents of scf.cfg.)
	- Eric Sunshine augmented cspython.mak so that it is more permissive
	  about locating the Python static link library.
23-Jan-2001
	- Martin Geisse moved the following to the new config system:
	    - SCF.
	    - Map2CS.
	    - Freetype plugin.
	    - Funcon plugin.
	- Norman Kramer created new stream interface iStream, iAudioStream,
	  iVideoStream, iCodec, iStreamIterator and iStreamFormat. These
	  are mainly for the new video plugins.
	- Norman Kramer did a beginning of AVI implementation (where the
	  opendivx will live as an CODEC). Dont try to compile :)
	- Norman also reorganized the new video plugin system a bit (for
	  playing video's on a texture).
	- Wouter Wijngaards improved texture alignment for the procedural
	  sky. Now colors are computed for the center of a texel - not a
	  corner point.
22-Jan-2001
	- Norman Kramer added a plugin for opendivx (MP4 decoder), note
	  that you need the decoder lib from www.projectmayo.com (its
	  opensource). Plugin compiles now, gonna test it tonite.
	- Removed support from sprites and lights for an old and never-used
	  dynamic lighting registration system. If we still need this later
	  we'll have to redo it another way.
	- Extended iSprite3DState a bit.
	- Extended iMeshObject with GetRadius() function which will return
	  the radius of the object in object space. Also added GetRadius()
	  to csMeshWrapper.
	- Extended all mesh object plugins to support this function.
21-Jan-2001
	- Martin Geisse moved the following modules to the new config system:
	    - Glide renderer/canvas.
	    - DirectX renderer/canvas.
	    - Null renderer.
	    - OpenGL renderer/canvas.
	    - Software renderer.
	- Wouter Wijngaards added intersection point caching to the
	  procedural sky. Speed improvement is only 10%, using several
	  Megs of memory.
20-Jan-2001
	- Martin Geisse removed the remaining entries about the DirectX 5
	  renderer from the config files.
	- Wyatt Miler fixed compiling problems with Codewarrior 6.
	  Also a temporary hack for Codewarrior 6. CW 4&5 users should see
	  if this still works for you.
	- Philip Wyett added include for csgeom/transfrm.h to rain and
	  snow plugins.
19-Jan-2001
	- Martin Geisse moved the sound modules to the new config system.
	- Fixed a 'delete' vs 'new[]' bug in csPolygonSet and csSprite3D.
	- Fixed the bug which Martin Geisse reported with sprite frames
	  and actions. They were contained within a csNamedObjVector
	  which is not right because they are not csObject's.
	- Added a 'virtual' to the destructor of the new ini file stuff
	  because otherwise gcc gave warnings.
	- Extended iMeshObject with HardTransform() to do a hard
	  transform on the object. Also added this to csMeshWrapper.
	  Also added SupportsHardTransform() so that an application
	  can test if HardTransform() is supported.
	- Extended iMeshObjectFactory with the same two functions. Sometimes
	  HardTransform() only makes sense on the factory.
	- Implemented HardTransform() in all mesh object plugins. Note
	  that this transformation doesn't affect the orientation of
	  the mesh object. Only the location is changed. Even for particle
	  systems and cube although it could be useful there.
	  Note that for spr2d, snow, and rain HardTransform() don't do
	  anything.
	- Fixed a bug in ball plugin if some setting was changed after
	  already being initialized.
	- Eric Sunshine removed some old COM (pre-SCF) goop from the Macintosh
	  port.
18-Jan-2001
	- Wouter Wijngaards fixed Martin's stricmp() in cfgfile.cpp.
	  stricmp is not portable, please use strcasecmp.
	- Martin Geisse added a new module for configuration files with
	  another format than INI. This format uses a flat list of config
	  files with pseudo-hierarchy instead of the sections in INI
	  files. The new system is intended to replace the current system
	  soon.
	- Martin also moved the dungeon plug-in to the new config system
	  and fixed some bugs in both modules.
	- Extended iMeshObject interface with SetVisibleCallback() and
	  GetVisibleCallback(). This function will essentially provide
	  the same functionality as SetDrawCallback2() does for csSprite3D.
	  i.e. callback the application when the object is really (or almost
	  really) visible. Note that you are not allowed to significantly
	  change the layout, position or anything else that might affect
	  visibility in this callback (for obvious reasons).
	- Modified all the current mesh object plugins to support this new
	  callback.
	- Added SetDrawCallback() and GetDrawCallback() to csMeshWrapper.
	  This has the same functionality as the SetDrawCallback() in
	  csSprite3D. i.e. this callback is called when the object is
	  considered for drawing. This means that there is a chance it
	  is visible (but not guaranteed). It is allowed to do minor
	  changes to geometry here as long as you don't change the sectors
	  where this object lives.
	- Added support for frames and actions to iSprite3DFactoryState.
	- Fixed Mazed for my iSpriteFrame changes yesterday.
17-Jan-2001
	- Wouter Windows added more error messages to openglwin32 canvas.
	- Martin Geisse removed current support for threading from the
	  wave-out driver because it produced strange gaps in sound output.
	  It was a bug in the concept. This does not mean that threading
	  won't be supported at all, but not the way it was done till
	  now. Wave-Out is now based on function callback mode, which is
	  also modified to remove the sound gaps.
	- Renamed iskeleton.h to iskel.h to make it work on DOS.
	- Extended iskel.h with several new interface to represent the
	  skeleton structure of a 3D sprite: iSkeletonLimb,
	  iSkeletonConnection, iSkeleton, iSkeletonLimbState,
	  iSkeletonConnectionState, and iSkeletonState. iSkeletonBone
	  is retained and moved to iskelbon.h. It is used by the motion
	  manager and independent as it could be implemented by other
	  bone systems.
	- The skeleton state classes no longer extend csObject. This is
	  not needed and it is not useful because skeleton state classes
	  are going to be moved outside the engine anyway. However, some
	  applications (like WalkTest) require the ability to attach
	  data to state objects so I extended the SCF interfaces with
	  that ability.
	- Modified WalkTest to use the new user-data instead of the
	  csObject system.
	- Extended the iSprite3DFactoryState interface with
	  EnableSkeletalAnimation() and GetSkeleton(). Also extended
	  iSprite3DState with GetSkeletonState().
	- Also added GetFactory() to iSprite3DState.
	- Extended the iSprite3DFactoryState with various functions to access
	  the vertices, texels, normals, and triangles.
	- Added iSpriteFrame SCF interface and let csFrame implement this.
	- Added iSpriteAction SCF interface and let csSpriteAction implement
	  this.
	- Fixed the 2D sprite plugin so that the initial color table is
	  correctly copied to the real color table at initialization time
	  when lighting is disabled.
	- Changed the 2D sprite plugin so that order of SetColor() and
	  SetLighting() doesn't matter anymore.
	- Eric Sunshine fixed a syntax error in irix.mak.
	- Eric Sunshine made the following changes to document.txi:
	    - Fixed a couple factual errors.
	    - Fixed several Texinfo mark-up problems.
	    - Eliminated all of the over- and underfull `hbox' warnings
	      reported by TeX.
	    - Fixed the example @example block so that the Texinfo directives
	      are actually displayed in the output rather than being eaten by
	      the conversion process.
	    - Minor rewriting and enhancement of various topics.
	- Eric Sunshine changed the following classes so that they embed
	  particular SCF interfaces, rather than inheriting them, in order to
	  be NextStep-friendly:
	    csSkeleton		      -> iSkeleton
	    csSkeletonState	      -> iSkeletonState
	    csSkeletonConnection      -> iSkeletonConnection
	    csSkeletonConnectionState -> iSkeletonConnectionState
16-Jan-2001
	- Eric Sunshine changed the image-copying rule in docs.mak so that it
	  should once again work on Windows/DOS.  (It used to work, but the
	  command-line for copying images became too long, at some point, for
	  the DOS command-line input buffer.)
	- Eric Sunshine removed the broken and unuspported cygwin.mak file.
	- Martin Geisse added some hints to the docs about how to write
	  docs.
	- Wouter Wijngaards fixed redefinition errors in OpenGL canvas by
	  explicitly testing for each macro before defining it. This
	  helps opengl canvas compilation on mingw32.
15-Jan-2001
	- Martin Geisse added a patch to csloader by Ed Halley.
	- Fixed a serious bug in csMeshWrapper::SetMeshObject(). This
	  function would do a DecRef() on the given mesh (possibly
	  deleting it).
	- Fixed a bug in WalkTest. It would not release the reference
	  to all created particle systems. This caused memory leaks.
	- Fixed another bug in WalkTest where the particle system was
	  created with the wrong position. Actually, it is the right position
	  but set through the wrong method. Now correctly uses
	  movable.SetPosition() to set the position.
	- Added the first and incomplete include/imspr3d.h which contains
	  the iSprite3DState and iSprite3DFactoryState SCF interfaces that
	  will be used by to access the sprite3d plugin (when it is ready).
	- Wouter Wijngaards increased the speed of skydem (and sky proc
	  texture in csfx) by making the floor simpler.
14-Jan-2001
	- Eric Sunshine fixed vfs.cfg so that it works with MacOS/X Server
	  again following Andrew's change to the meaning of CS_PLATFORM_NAME.
	- Eric Sunshine added several missing /lev/* entries to vfs.cfg.
	- Norman Kramer removed empty and svga displaydrivers for MESA.
	- Norman also did some small modifications to the OpenGL X2D canvas
	  in general:
	    - Explicit set of dispdriver to NULL.
	    - Slightly changed error message when not being able to load
	      from opengl.cfg.
	- Norman did the following changes to the OpenGL renderer:
	    - Enabled the perspective patch in DrawPolygonFX (although its
	      a slowdown i'd rather trade that for a correctly mapped
	      texture).
	    - Perspective patch expected 1/z instead of z as the 3rd
	      coo-value. Since this seemed not consistent with software
	      renderer i changed it to expect a plain z-value.
13-Jan-2001
	- Wyatt Miler did some minor Mac project file adjustment and updated
	  for the new mesh object plugins.
12-Jan-2001
	- Eric Sunshine fixed several bugs in soundraw.cpp where it was
	  applying `delete[]' to a void*.
	- Eric Sunshine fixed the makefiles for vsh and vfstest so that they
	  link with the VFS plugin when built `statically'.  These broke for
	  static builds when VFS was moved into its own plug-in module.
	- Wouter Wijngaards added a method to csmeshwrapper to get a
	  pointer to the mesh back again.
	- Wouter also updated win32/directdetection.h to make it
	  backwards compatible to dx3 define. It should compile fine now
	  for dx8. (Also it still compiles fine with older dx versions).
	- Wouter made similar changes in the make install target as the
	  changes in docs from htm to html. The make install target
	  should work once more.
11-Jan-2001
	- Wyatt Miler updated the Macintosh project files.
	- Eric Sunshine made the following changes to the project:
	    - Renamed the following project directories:
		CS/plugins/meshldr --> CS/plugins/mesh/loader
		CS/plugins/meshobj --> CS/plugins/mesh/object
	    - Renamed the following SCF class names, prefixes, and suffixes:
		crystalspace.meshldr --> crystalspace.mesh.loader
		crystalspace.meshldr.ZZZfact
				     --> crystalspace.mesh.loader.factory.ZZZ
		crystalspace.meshobj --> crystalspace.mesh.object
		crystalspace...explo --> crystalspace...explosion
		crystalspace...fount --> crystalspace...fountain
		crystalspace...spr2d --> crystalspace...sprite.2d
	    - Fixed all makefiles, source files, header files, documentation,
	      and `world' files to account for the directory and SCF class name
	      changes.
	- Eric Sunshine moved selection of the software renderer for PLUGINS
	  out of the platform-specific makefiles (CS/libs/cssys/*.mak) and
	  into CS/mk/user.mak since it is not specific to any particular
	  platform.
10-Jan-2001
	- Martin Geisse fixed some minor naming and comment flaws in the
	  idungeon interface file.
	- Martin changed the win32 docs: grouped msvc5 stuff in one section and
	  added a FAQ entry.
	- Martin also committed a patch to win32.cpp from Ed Halley.
	- Martin added some information to the procedural texture docs and
	  added better explanation of the Print() function of the 2D and 3D
	  video driver.
	- Eric Sunshine fixed a typo in win32.txi and made several other minor
	  changes.
	- Eric Sunshine changed the file extension on the HTML files in the
	  docs/html and docs/pubapi directories from .htm to .html at Andrew's
	  insistence.  :-)
	- Eric Sunshine lowered the verbosity level of the build process for
	  the HTML version of the User's Manual (make htmldoc).
	- Andrew Zabolotny fixed qsqrt() so that both binutils 2.9.1 and 2.9.5
	  assemble it exactly the same way.
9-Jan-2001
	- Wouter Wijngaards fixed a compile warning in WalkTest.
	- Eric Sunshine fixed a problem in bmpimage.cpp which caused loading
	  of BMP files on big-endian Solaris to fail.
	- Andrew Zabolotny made the following changes:
	    - Started implementing "hints" at startup.	Actually just wrote a
	      number of them in MazeD.zip::hints.cfg
	    - I decided to change a little the ideology of MazeD.  The
	      ex-"Draft View" will be split now into two different kinds of
	      windows: Model Editors and World Editors.	 In Model Editor you
	      will edit models (rooms, things, sprites) and in the World Editor
	      you will place them (without being able to change the models
	      itselves).  mzDraftView component is the common ancestor now for
	      both mzModelEditor and mzWorldEditor components, and can draw the
	      coordinate axis and grid, nothing mode.  The split between
	      DraftView and ModelEditor is finished.
	    - Created the mzWorldEditor window.	 It doesn't do much yet, but
	      already has basic functionality.	As the world is loaded, the
	      rooms are "centered" around origin, and a respective
	      mzModelInstance with the respective translation transform is set
	      up.  This allow to edit every room as if it is located in the
	      origin, which is easier.
	    - Fixed a bug recently introduced by somebody.  For software
	      renderer iTextureHandle::Prepare() did no remap_texture() which
	      results in NULL palette->global palette conversion table.	 This
	      means you cannot use texture after you do Prepare, but can if you
	      do PrepareAllTextures().	Or alternatively you can call Prepare()
	      then SetGamma() :-) In short, a mess.
	    - Fixed a lot of bugs in fullscreen switching logic for all three
	      X11 canvas plug-ins (x2d, linex2d, glx2d):
		- Moved all the code relevant to fullscreen switching to two
		  files, x2dfs.h and x2dfs.inc for easier maintainance.	 All
		  three X11 plugins include them from the relevant .h and .cpp
		  files.
		- Fixed a bug: when a fullscreen mode not matching current
		  canvas size is not available, the canvas may be cleared,
		  which is not desirable.
		- Bug: when current XFree86 videomode is the "best match"
		  videomode for the current canvas size, the canvas driver
		  would hang (loop forever in XWaitEvent).
		- Bug: If videomode does not match canvas size, and canvas
		  resizing is allowed, the canvas size will be adjusted to
		  match videomode.  It was supposed to work before but it
		  didn't.  If canvas resizing is not allowed, the canvas is not
		  resized, but centered instead.
		- Bug: If an unexpected ConfigureNotify would arrive to our
		  window, canvas may be suddenly resized to an erroneous size.
		  I've added a check for ConfigureNotify to be related to our
		  window.
	    - Re-implemented "model instances" in MazeD to allow arbitrary
	      hierarchical structures.	For now the top level of the hierarchy
	      can contain only rooms, although this is not a MazeD limit, it is
	      a engine limit.  Each instance has its move vector and space warp
	      matrix, which are relative to parent object.  Moving/rotating
	      parent object will move/rotate child objects as well.  Model
	      instance position and warp are stored either as a MOVE(), or a
	      HARDMOVE() statement (for rooms and for instances that have the
	      "LockedPos" flag set).  Alas, for now engine doesn't allow rooms
	      at any level other than top level, maybe it makes sense to remove
	      this limitation.	For example, a castle (which would be a room)
	      would contain a hall (child room of castle) which contains
	      something even smaller (child of hall).  Also for now we don't
	      have sector templates, which is bad again (if you duplicate a
	      room multiple times, you'll get it multiple times in output,
	      although it could be avoided).
	- Eric Sunshine fixed several compilation problems in MazeD following
	  Andrew's changes.
	- Eric Sunshine fixed a long-standing bug in archive.cpp where
	  csArchive::ArchiveEntry::FreeBuffer() was clobbering the
	  uncompressed-size value.  The bad side-effect of this was that if an
	  attempt was made to re-read the entry's contents later on, the read
	  operation would mysteriously return zero bytes.  This particular
	  problem was often triggered during caching of PVS and Octree data
	  structures.
	- Eric Sunshine fixed a bug in the Octree caching code where, in one
	  circumstance, the `write' routine would emit more data than the
	  `read' routine was expecting; with the result that the data stream
	  would become unsynchronized.
	- Eric Sunshine made csPolygonTree's ReadString(), ReadBox3(),
	  ReadVector3(), ReadPlane3(), ReadLong(), ReadUShort(), ReadByte(),
	  and ReadBool() methods more robust by checking for VFS read errors
	  and returning somewhat sensible values rather than returning complete
	  garbage values.
8-Jan-2001
	- Wouter Wijngaards fixed procedural sky for OpenGL.
	- Wouter also optimized it a little to use the new qsqrt().
	- Made some initial documentation on the MeshObject system.  Not
	  finished but already useful.	Check it out in
	  docs/texinfo/plugins/meshobj.
	- Eric Sunshine made the following changes to the Mesh Object
	  documentation which Jorrit wrote:
	    - Fixed a bunch of Texinfo mark-up errors and problems.
	    - Normalized mark-up and typographical usage to be consistent with
	      other idioms established throughout the manual.
	    - Corrected several typographical and gramatical problems.
	    - Eliminated a bunch of over- and underfull `hbox' errors reported
	      by TeX.
	- Eric Sunshine made the following changes to the project:
	    - Added appropriate PIXEL_PREPROC() and PIXEL_POSTPROC()
	      invocations to scanalph.inc in the software renderer so that
	      these functions operate in the same manner as all other functions
	      which take PIXEL_PREPROC() and PIXEL_POSTPROC() into account.
	    - Entirely eliminated the TOP8BITS_R8G8B8_USED flag/mode from the
	      software renderer.  There were several problems with this `patch'
	      which was supposed to handle the case where some of the RGB pixel
	      data occupied the top-byte of the 32-bit pixel:
		- It was fragile.  Each time someone modified or added code to
		  the software renderer, that code had to be checked for
		  breakage.  If broken, then such code had to be fixed.
		- It was difficult and time-consuming to fix these problems.
		  Often, the affected code was spread about in several areas of
		  the renderer.
		- It coupled the software renderer far too tightly to the 2D
		  driver by hardcoding the pixel layout of the 2D driver into
		  the 3D renderer.  (This occurred in pixtype.inc.)  This made
		  it impossible to use an alternate 2D driver with different
		  pixel layout.
	    - Removed the `pixel adjust' value from the software renderer.
	      This was used as part of the TOP8BITS_R8G8B8_USED mechanism.
	    - Note that even though the TOP8BITS_R8G8B8_USED mechanism was
	      removed, I left all of the invocations of PIXEL_PREPROC() and
	      PIXEL_POSTPROC() in place for posterity since they illustrate
	      every place in the renderer where one must take special care to
	      correctly deal with the hard-coded assumptions about pixel
	      layout.  These two macros have been relocated (from various
	      files) to a new master location in scan.h where they are provided
	      with empty definitions.
	    - The default Apple/NeXT 2D driver now post-processes the 32-bit
	      RGB data delivered by the software renderer by re-arranging it
	      into a secondary frame buffer.  This change was necessary for the
	      following reasons:
		- The fragile TOP8BITS_R8G8B8_USED mechanism was removed in
		  order to decouple the 3D renderer from the 2D driver.
		- Without the TOP8BITS_R8G8B8_USED mechanism, the software
		  renderer is hardcoded (for performance reasons) to produce
		  pixel data in a particular format (ARGB on little-endian, and
		  ABGR on big-endian)
		- The pixel data generated by the software renderer is
		  unsuitable for default the Apple/NeXT 2D driver which expects
		  the layout to be ABGR on little-endian and RGBA on
		  big-endian.  (This is a limitation of the AppKit, which is
		  what the default 2D driver is based upon.)
	    - Removed the apparently unused RED_PREPROC() macro from
	      haloscan.inc.
	    - Fixed several copy/paste bugs in csLightMap::ReadFromCache().
	    - Fixed a problem where `make depend' failed on Apple/NeXT when
	      configured for multiple architectures via the TARGET_ARCHS
	      makefile variable.  (Specifically, the compiler could not grok
	      use of -MM with multiple -arch flags.)
	    - Disabled the `quick' versions of QRound() and QInt() on M68K for
	      NeXT.  Even though these methods work correctly on NeXT M68K in
	      general, there were some cases where the compiler botched their
	      invocations and generated incorrect results.
	    - Disabled the new `quick' square-root (in qsqrt.h) for NeXT since
	      the compiler can not grok the contained assembly.
	    - Renamed the preprocessor flag NO_QSQRT to CS_NO_QSQRT.
	    - Fixed a minor problem in -[NeXTDelegate localize:toView:x:y:]
	      where the conversion of the mouse's Y-coordinate was off by one.
	- Eric Sunshine fixed the QUERY_PLUGIN() macros in isystem.h so that it
	  is possible to call them as QUERY_PLUGIN(&object, iBlah) rather than
	  having to resort to the ugly QUERY_PLUGIN((&object), iBlah).
	- Eric Sunshine fixed vfstest.cpp so that it no longer instantiates
	  the VFS plug-in twice.
	- Eric Sunshine changed all of the platform-specific makefiles so that
	  they consistently use LIBS.SOCKET.SYSTEM to specify the Socket
	  library.  Eliminated the old, unix-specific NEED_SOCKET_LIB flag.
	- Eric Sunshine fixed problems in socket.mak where it did not link with
	  the correct libraries when static linking was used.
	- Eric Sunshine fixed the platform-specific makefiles so that they
	  consistently use the makefile variables CFLAGS.D, CFLAGS.I, LFLAGS.L,
	  and LFLAGS.l.
7-Jan-2001
	- Made usage of qisqrt() more sensible. First test if square
	  is less than some amount then you don't have to do the entire
	  qisqrt().
	- By making use of the new qisqrt() I optimized csCamera::LookAt()
	  a little more.
6-Jan-2001
	- Created snow and rain mesh object plugins (for the snow and rain
	  particle systems).
	- Created iSnowState and iRainState interfaces to access these plugins.
	- Modified WalkTest to use the new snow and rain plugins instead of
	  the old particle systems in csfx.
	- Finished the snow and rain loader plugins.
	- Moved spiral particle system to plugin. Note that this particle
	  system currently crashes. Also created the loader and modified
	  WalkTest.
	- Removed native support for loading particle systems in csloader.
	  Particle systems are now loaded through the new MESHOBJ keyword
	  and the plugins. This means that the flarge.zip you can find
	  on the CS site will no longer work. I will soon put a replacement
	  there.
	- Removed dependency on CSFX library from most apps (all except
	  simple) since the loader no longer depends on csfx itself.
	- Removed particle support from csengine. All particles have now
	  moved to plugins.
	- Fixed the new qsqrt and qisqrt from Andrew. It appears that it
	  was returning the negative square root. I negated the result.
	  I modified several places in csengine and csgeom where either
	  FastSqrt (the old one) and normal sqrt were used and replaced it
	  with qsqrt() and qisqrt(). All seems to work well but in case
	  something bad happens I added a define NO_QSQRT to include/qsqrt.h.
	  If you enable this define the fast versions of qsqrt will not be
	  used. I'd like to be notified of this if there are problems.
	- Made a new ball plugin just for demonstration purposes and also
	  because it is a very efficient way to make a ball :-)
	  Extended simple application to show such a ball with a plasma
	  texture on top of it (just turn around to see it). It looks
	  really nice :-)
	- Philip Wyett fixed several compile errors in demosky.
	- Philip also fixed the ddraw canvas to actually open windowed
	  when it is told to.
5-Jan-2001
	- Wouter Wijngaards Added a procedural skybox texture.
	  And a demoing program (ala simple) to show it. 'demosky'.
	  the bottom half of the skybox is filled with a mock watery splotch,
	  the top half with clouds and a sunlighted spot.
	- Wouter Wijngaards says: From Harald Fielker
	  (fielker@informatik.fh-augsburg.de) I got an addition to csloader,
	  a LoadThing and LoadThingTemplate methods. You can load a thing
	  from a vfs file with them.
	- Norman Kramer replaced AdvanceSpriteFrames with engines NextFrame
	  for cctest.
	- Fixed a big initialization bug in the spr2d plugin. This would
	  cause strange and hard to debug crashes sometimes.
	- Fixed a very similar initialization bug in the fountain and
	  explosion plugins.
	- Fixed another bug in the general particle code for the particle
	  plugins. Particles were DecRef()'ed once too many.
	- Fixed csMeshWrapper::NextFrame() so that it also calls NextFrame
	  on the children.
	- csSprite no longer implements iParticle. In the future it will
	  be the mesh objects themselves that implement iParticle. At this
	  moment however, it means that only the 2D sprite mesh objects
	  work as particles (which is fine since these are actually the
	  only objects that are really useful as particles).
	- Also removed csSprite::AddColor() and SetColor() since they
	  were actually only ment for the particle systems. Moved AddColor()
	  and SetColor() as specific functions for csSprite3D.
	- Moved implementation of csSprite::Rotate() and ScaleBy() to
	  csSprite and made non virtual. The implementation was the same
	  for all subclasses anyway.
	- Changed iParticle interface to make it possible to use relative
	  transforms for particle systems. The transform of the parent
	  particle system is given with Draw() and UpdateLighting().
	  SetPosition() should now be specified in the particle system
	  coordinate system.
	- The particle system plugins now render correctly in a hierarchical
	  transformation context. This gives really very nice effects.
	  For example, I put a fountain particle system on the hand of the
	  robot (which is rotating). This looks as if the robot is shooting
	  around with fountain particles.
	- Finished the explosion particle system loader plugins.
	- Started working on the fire particle system (in
	  plugins/meshobj/fire).
	- Added iFireState interface for the fire plugin system.
	- Finished the fire plugin and changed WalkTest to use it instead
	  of the old version in csfx.
	- Finished the fire loader plugins.
	- Implemented MIXMODE command in all mesh object loader plugins.
4-Jan-2001
	- Martin Geisse moved volume control from the sound drivers to
	  the software sound renderer. Also cleaned up the wave-out driver
	  a bit.
	- Andrew Zabolotny fixed the disaster caused to VFS by one of
	  Eric's changes. CS_PLATFORM_NAME was not the strict name of
	  platform like it should be, but rather a free-form description
	  of the platform, which is wrong.
	- The sprited2D plugin now also implements iParticle which means
	  it can be directly used as a particle for the particle systems.
	- The particle systems now use the sprite2d plugin directly instead
	  of using csSprite2D.
	- As a consequence of this I'm now able to remove csSprite2D
	  from the engine. In addition I also removed support for loading
	  2D sprites directly. Instead the new MESHOBJ token should be used.
	- Forgot to implement support for the MATERIAL keyword in the
	  sprite2d loader (the factory loader did support it).
	- Started work on moving particle systems to plugins. There is
	  now a directory plugins/meshobj/partgen which contains the
	  general classes for particle systems (csParticleSystem
	  and csNewtonianParticleSystem).
	- Added iParticleState interface which represents the general
	  settings common to all particle systems. csParticleSystem
	  implements this.
	- Started moving fountain particle system to plugins. Source can
	  be found in plugins/meshobj/fountain.
	- Added iFountainState interface which represents the general
	  settings specific for the fountain. csFountainParticleSystem
	  implements this.
	- Fixed SCF macros for csPolygonSet, csSprite, csSkeletonLimbState
	  and csPolygon3D. They were all using IMPLEMENT_IBASE_EXT
	  but forgot to close this with IMPLEMENT_IBASE_EXT_END (instead
	  they used the default IMPLEMENT_IBASE_END).
	- Added NextFrame to csSprite and implement this in all the
	  current remaining subclasses (csParticleSystem, csMeshWrapper,
	  and csSprite3D).
	- Added similar NextFrame() to iMeshObject.
	- Added empty implementation of NextFrame() to cube and 2D sprite
	  plugins. They don't have animation so they don't need a NextFrame().
	- Added a functional implementation of NextFrame() to the general
	  particle system plugin code.
	- Renamed csEngine::AdvanceSpriteFrames() to NextFrame(). In
	  addition it will now also control animation and deletion of
	  particle systems.
	- Removed UpdateParticleSystems() because csEngine::NextFrame()
	  does this.
	- Finished the fountain plugin. The fountain plugin itself uses
	  the 2D sprite plugin to create the fountain particles.
	- Added WantToDie() to iMeshObject. With this function a mesh
	  can indicate that it wants to die. This is most useful for particle
	  systems that have only a limited time to live (like an explosion).
	- Also added default WantToDie() to csSprite and implemented it
	  in csMeshWrapper by asking the mesh. By doing this the auto-delete
	  system of particle systems is generalized to all mesh objects.
	- Started moving explosion particle system to plugins. Source can
	  be found in plugins/meshobj/explo.
	- Added iExplosionState interface which represents the general
	  settings specific for the explosion. csExploParticleSystem
	  implements this.
	- Added iDynLight SCF interface for dynamic lights. This is needed
	  for the explosion plugin.
	- Extended iLight SCF interface with SetColor() and SetSector().
	- Extended iEngine with CreateDynLight() and RemoveDynLight().
	- Finished the explosion plugin. Note that there still seems to be
	  a bug with lighting and the particles of the particle systems.
	  Sometimes the lighting routine on the particle system is not
	  called (UpdateLighting).
	- Changed walktest to use the fountain and explosion plugins instead
	  of the still existing fountain particle systems in csfx.
	- Fixed a CSFX dependency error in the blocks makefile.
	- Implemented the fountain loader plugin (in plugins/meshldr/fountain).
3-Jan-2001
	- Andrew Zabolotny did the following changes to CS:
	    - Enhanced a little software DrawPixmap for
	      textures-with-alphamap, where in 16 and 8 bpp modes alpha=0
	      still would lead to a changing background a little.
	    - Added a nice logo to MazeD's About box.
	    - Fixed a few things here and there in MazeD.
	    - A new QInt and QRound that will work on some big-endian CPUs
	      as well.
	    - Fix to slow QRound so that it works correctly for negative
	      numbers.
	    - A new fast sqrt() and 1/sqrt() implementation. Not used
	      anywhere for now (I'll leave this on Jorrit's behalf) but it
	      has a big potential. Engine is using 1/sqrt() in a lot of
	      places, and computing 1/sqrt() in one go is a big win. Plain
	      sqrt() is about 31% faster (on PII and Celeron) than FPU's
	      FSQRT instruction, and 1/sqrt() is 38% faster than FSQRT
	      (dunno how fast than actually computing 1/sqrt(x) - division
	      is quite a slow operation, almost as slow as sqrt itself - 42
	      and 71 clocks respectively).
	- Wouter Wijngaards improved the portal more. It has a border around
	  the portal polygon, showing a part of the portal texture mapped
	  on it.
	- Added GetObjectBoundingBox() to iMeshObject.
	  Added implementation for this method to the cube plugin.
	- Implemented UpdateInPolygonTrees() in csMeshWrapper so that
	  mesh objects will now correctly be drawn in BSP type levels too.
	- Implemented csMeshWrapper::Rotate().
	- Started porting csSprite2D (2D sprites) to the new mesh
	  plugin system. Created new directory plugins/meshobj/spr2d
	  where it will be located.
	- Also created iSprite2DFactoryState SCF interface which will
	  be used to set the characteristics of 2D sprite factories. Also
	  added iSprite2DState to set the characteristics of 2D sprite
	  instances.
	- Renamed iCubeMeshObject to iCubeFactoryState because I think this
	  is a better name which also fits the name of the 2D sprite
	  state interfaces better.
	- Also created the 2D sprite loaders.
	- Plugin 2D sprites are now working mostly. The old 2D sprites are not
	  yet removed because the particle systems still depend on them.
	- Extended iMovable and csMovable with GetFullPosition() which returns
	  the position of the movable but keeps track of the hierarchical
	  transformations (similar to GetFullTransform()).
	- Fixed a serious bug in csloader with regards to the new plugin
	  loaders. The wrong type plugin was taken in some cases.
	- Removed MoveToSector from iParticle. It is not needed and wrong
	  if used in combination with the new mesh object system (they have no
	  notion of sectors).
	- Removed DeferUpdateLighting() from iParticle.
	- Changed iParticle::UpdateLighting() to take an array of iLight
	  instead of csLight. SCF classes should not refer to engine classes.
	- Changed iParticle::Draw() to use iRenderView instead of csRenderView.
	- Added iLight::GetPrivateObject() and iRenderView::GetPrivateObject().
2-Jan-2001
	- Philip Wyett fixed a small VC compiler warning.
	- Wouter Wijngaards fixed a compile warning.
	- Completed a fix Eric Sunshine did (previous millenium) with regards
	  to CalculateFogMesh. Eric missed a tiny detail. Oops! :-)
	- Added an extra level of abstraction in the mesh object system.
	  Created a plugin called iMeshObjectType which represents a type
	  of mesh objects. From this you can created instances of
	  iMeshObjectFactory. So iMeshObjectFactory is no longer a plugin
	  but instances have to be created through iMeshObjectType.
	- Added csCubeMeshObjectType in the cube plugin to implement
	  iMeshObjectType.
	- Added new QueryPlugIn to iSystem and system.h with which you can
	  query for a loaded plugin on class ID. This complements the two
	  other existing QueryPlugIn functions which could look for Func ID
	  and interface name. The reason for this function is that you
	  sometimes want to load a plugin with a certain class ID but you
	  only want one. If there already is one you reuse the previously
	  loaded plugin instance. So in that case you do QUERY_PLUGIN_CLASS
	  first and if that fails (returns NULL) you do LOAD_PLUGIN.
	- Also added QUERY_PLUGIN_CLASS which will use the new QueryPlugIn.
	- Added GetNumPlugIns() and GetPlugIn() to iSystem and system.h.
	  With this you can query the list of currently loaded plugins in
	  the system.
	- Fixed a bug in csloader which would cause the loader plugins to
	  be loaded multiple times instead of only once.
	- csCubeMeshObjectType now also implements iConfig through embedding.
	  Using this you can set the default size (x, y, and z) and the default
	  shift (x, y, and z) for all factories created from this object
	  mesh type.
	- Added 'plugins' console command to WalkTest with which you can
	  ask all loaded plugins (loaded into the system driver).
	- Added 'conflist' console command to WalkTest with which you can
	  ask all config options for some loaded plugin (use the 'plugins'
	  command to get the list of plugins). You also get the current values
	  of the options. For example 'conflist 3' will list all the config
	  options and values for the plugin with number 3 (from the list
	  given by 'plugins').
	- Added 'confset' console command to WalkTest with which you can set a
	  config option to some value. Arguments are <plugnr>,<name>,<val> with
	  <plugnr> the number you get from the 'plugins' command.
	- Eric Sunshine eliminated a compilation warning from walkcmd.cpp.
1-Jan-2001
	- Added 'children' array to csMeshWrapper. By this we will support
	  hierarchical objects and transformations.
	- Added support for MESHOBJ keyword in MESHOBJ. This will be used
	  to specify the hierarchical objects. i.e. the mesh objects can
	  be children of a parent mesh object. The transformation specified
	  in the children is relative to the parent position and orientation.
	- Generalized csRotatingObject in the entity system of WalkTest
	  so that it will now also be able to rotate sprites instead of
	  only things (sprites in the general sense: csSprite, so the new
	  plugin objects are also included).
	- Added support for KEY keyword in MESHOBJ.
	- Modified WalkTest so that it will also recognize the children
	  of csMeshWrapper and parse the KEY statements for them.
	- Changed iCubeMeshObject to make it more general. You can now
	  specify the sizes for x, y, and z separately. So the cube does
	  not have to be a cube anymore :-)
	- Also added shift values so that you can shift the (0,0,0) point
	  of the cube to another place.
	- Fixed a bad bug with UpdateLighting for the cube plugin. In some
	  cases it would actually crash because UpdateLighting was called
	  before the cube object was properly initialized. Added SetupObject()
	  function to initialize cube properly and if needed.
	- Hierarchical objects are now working :-)
31-Dec-2000
	- Eric Sunshine fixed compilation warnings in engine.cpp, rview.cpp,
	  meshobj.cpp, prdots.cpp, prfire.cpp, proctex.cpp, cubeldr.cpp, and
	  cube.cpp.
	- Eric Sunshine fixed a bizarre bug in csRenderView's
	  CalculateFogMesh() where a local `fog_info' variable was incorrectly
	  initialized.	(There is no way that this code could have ever worked
	  correctly prior to being repaired.)
	- Eric Sunshine fixed a bug in cspython.mak where it would potentially
	  try to compile cs_pyth.cpp twice.
	- Eric Sunshine modified the Python plug-in makefile so that
	  compilation warnings are disabled for the Swig-generated cs_pyth.cpp
	  source file.	This was done since cs_pyth.cpp is known to spew many
	  compilation warnings, yet because it is auto-generated, it is out of
	  our control to eliminate the warnings.
	- Eric Sunshine fixed the broken `linex2dclean' makefile target.
30-Dec-2000
	- Philip Wyett fixed some of the 3D renderers that Jorrit forgot
	  to fix yesterday.
	- Got two nice textures from Wouter Wijngaards to use for the
	  'portal' console command. The textures are in standard.zip.
	  Only the texture for the box of the portal is used for now.
	  There are some technical problems to getting the other texture
	  working correctly.
	- Added iLoaderPlugIn interface. A mesh object plugin (or something
	  else, it is general enough) can implement this in order to
	  provide extra loading functionality for the loader.
	- Renamed csMeshObject to csMeshWrapper in order not to let people
	  think that csMeshWrapper actually implements iMeshObject
	  (it does not).
	- Added csMeshFactoryWrapper which is a class similar to what
	  csSpriteTemplate is for sprites.
	- Added iMeshFactoryWrapper and let csMeshFactoryWrapper implement
	  this through embedding.
	- Extended iEngine and csEngine with FindMeshFactory().
	- Extended iRegion and csRegion with FindMeshFactory() and extended
	  csRegion to actually support mesh object factories as well.
	- Added new array of mesh object factories in csEngine
	  (meshobj_factories).
	- Implemented cube loader plugins. One for cube factories and one
	  for regular cubes. These plugins are placed in plugins/meshldr/cube.
	- Added support for MESHOBJ keyword in WORLD (loader). This will
	  generate a general csMeshWrapper object for the specified
	  plugin. For example, to load an instance of the cube factory
	  in the world you can do:
	    MESHOBJ 'cubeFact' (
		PLUGIN ('crystalspace.meshldr.cubefact')
		PARAMS (
		    MATERIAL ('stone')
		    SIZE (.5)
		)
	    )
	  The section in the 'PARAMS' block will be passed to the plugin
	  loader.
	- Added support for MESHOBJ keyword in SECTOR or ROOM. This is
	  based on the factory above:
	    MESHOBJ 'cube1' (
		PLUGIN ('crystalspace.meshldr.cube')
		PARAMS (
		    FACTORY ('cubeFact')
		)
		MOVE (V (-4,0,9))
	    )
	- Fixed some of the FindXxx() routines in csEngine so that they
	  actually return NULL if the object is not found instead of
	  some low (but invalid) value.
29-Dec-2000
	- Added iRenderView::ClipBBox() to test if a screen bounding box
	  is visible and needs to be clipped. In addition it does far plane
	  clipping. Thus it provides a quick and easy way for a mesh object
	  plugin to test if some object is visible and needs to be clipped.
	  The code is a straight copy from the code that was in csSprite3D.
	  csSprite3D now also uses this function.
	- Made iClipper2D and csClipper::ClassifyBox use a 'const' parameter.
	- Cube also uses clipping correctly now.
	- Extended iMeshObject with DrawTest() and UpdateLighting().
	  DrawTest() is the first part of Draw() which is responsible for
	  testing quick visibility. Draw() will do the real work. In between
	  UpdateLighting() can optionally be called.
	- Added IsMirrored() to iCamera.
	- Fixed the Python plugin for the change of GetAspect() to GetFOV().
	- Changed iGraphics3D::GetObjectToCamera() so that it returns a
	  reference to the transformation. Modified all the 3D drivers
	  accordingly.
	- Extended iLight SCF structure to make it useful for calculating
	  lighting in the cube plugin.
	- Changed csLight to let it implement iLight through embedding
	  instead of inheritance.
	- Fixed UpdateLighting() for csMeshObject.
	- Added SetMixMode() and GetMixMode() to iCubeMeshObject interface.
	- Did some cleanup to various of the SCF include files (comments
	  and CS code style).
	- All the above changes accomplish the following for the cube plugin:
	    - Lighting works now (similarly to how sprite lighting works but
	      a bit simpler).
	    - Cube will be correctly rendered through a mirror.
	    - Changed Simple so that the new cube moves around at the
	      same rate as the dynamic light at the top of the room.
	      That way you can see how the lighting is dynamically updated.
	    - Cube now uses the plasma procedural texture.
	    - Cube is now drawn with CS_FX_ADD mixmode for a nice blending
	      effect. This does not work correctly in software mode though
	      because there is a bug with blending and procedural textures.
	      The initialization of the procedural textures (which are
	      8-bit textures) overwrites the blend tables for the 16/32-bit
	      render mode as well.
28-Dec-2000
	- Philip Wyett made a small fix to the cube plugin header.
	- Seth Galbraith added more error checking to the MD2 importer.
	- Added Visit() to iMaterialWrapper.
	- Cube plugin now renders using DrawTriangleMesh().
	- Added CalculateFogMesh() and CalculateFogPolygon() to iRenderView.
	  Mesh object plugins can call this function to update the fog
	  information in the mesh or poly object. Removed the badly
	  placed same functions from pol2d.cpp.
	- Cube plugin now supports fog.
	- Added iTransformationManager SCF interface for the transformation
	  manager. Only contains GetCookie() function at the moment.
	  csTransformationManager implements this interface through
	  embedding.
	- Added iEngine::GetTransformationManager().
	- Added iRenderView::GetEngine().
27-Dec-2000
	- Added iCubeMeshObject interface. The cube plugin implements
	  this interface in addition to iMeshObjectFactory. Using
	  iCubeMeshObject you can specify the geometric constraints
	  and appearance of the cube (size and texture). Every mesh object
	  plugin will have such a companion interface to specify appearance.
	- Added GetMaterialHandle() to iMaterialWrapper interface.
	- Extended Draw() in iMeshObject with an iMovable parameter.
	- Added GetTransform() in iCamera.
	- Made QUERY_INTERFACE macro a wee bit safer.
	- Fixed a bug in csCamera. One of the constructors didn't properly
	  initialize the SCF stuff for iCamera. Also changed csCamera
	  so that iCamera is now implemented through embedding instead
	  of inheritance.
	- Changed GetAspect() and GetInvAspect() to GetFOV() and GetInvFOV()
	  in iCamera.
	- Added GetShiftX() and GetShiftY() to iCamera.
	- Fixed the SCF stuff for csRenderView. It was not properly done
	  given that csCamera itself implements iBase.
	- Continued work on csCubeMesh plugin so that it now renders a
	  wireframe version.
26-Dec-2000
	- Samuel Humphreys did the following:
	    - Little clean up of ptlab.
	    - Fixed procedural textures after AndyZ's recent changes.
	    - Removed Jorrit's additional PrepareTextures() from protex3d.cpp.
	    - Fixed Simple to display procedural textures properly with the
	      global palette properly communicated.
	    - Cleaned up csphyzik library file formatting.
	- csParser no longer deletes all textures and materials in the
	  MATERIALS and TEXTURES statement. This caused bad crashes with the
	  portal command. The portal command is now working properly again.
	- Added iRenderView and let csRenderView implement this through
	  embedding.
	- Added iClipper2D and let csClipper implement this through
	  inheritance.
	- Removed csClipper::IsInside(x,y) so that only the csVector2 version
	  remains.
	- Renamed the in-place clipper from 'Clip' to 'ClipInPlace' to avoid
	  C++ inheritance clashes.
	- Added iMeshObject interface which will eventually be used
	  to move sprites, and particle systems outside the engine as plugins.
	- Additionally added iMeshObjectFactory plugin. This is a plugin
	  that can be loaded in the engine will generate instances of
	  one type of mesh object.
	- Added csCubeMeshObject as a plugin (in plugins/meshobj/cube) which
	  represents a simple cube that is going to be used as a test-base
	  for the new iMeshObject system. Only when csCubeMeshObject is
	  working properly; I am going to port csSprite3D and csParticleSystem
	  to iMeshObject.
	- Added csMeshObject which is the engine's implementation of
	  iMeshObject. csMeshObject is eventually going to replace csSprite.
	  It will controll all aspects of mesh objects which are global and
	  pass them on to the various implementations of iMeshObject.
	- Added code to Simple to query this new cube plugin.
25-Dec-2000
	- Norman Kramer changed csPixmap so that it calls IncRef() and
	  DecRef() on the contained iTextureHandle.  He states that he came
	  across this issue when someone added an `engine->StartEngine()'
	  invocation to LoadMapFile(); all his pixmaps that held
	  iTextureHandles created via LoadTexture() before LoadMapFile() was
	  invoked became invalid.
24-Dec-2000
	- Norman Kramer added CSFX lib to several of the makefiles.
	- Eric Sunshine made a slight modification to handling of the Backspace
	  key in the OpenStep port so that it works in the expected fashion in
	  Crystal Space.
	- Eric Sunshine added documentation for the `walkall' makefile target
	  to the output of the `help' makefile target.
23-Dec-2000
	- Norman Kramer fixed a bug in the bmp loader.
	- Moved snow, rain, spiral, fountain, fire, and explosion particle
	  systems from csengine to csfx library. Only the basic particle
	  and newtonian particle systems remain in csengine.
	- Found out that materials and textures were not correctly searched
	  in the current region. Fixed csloader for this.
	- Fixed a potential bug with polygons that had no texture. The
	  new Visit() would crash on them. It seems however that there is
	  still a bug somewhere. The portal command is very unreliable now.
	  To be investigated.
	- Extended csLoader::FindMaterial() with a regionOnly parameter.
	- Added csEngine::FindCsTexture() and FindCsMaterial() which return
	  a csTextureHandle and csMaterialHandle respectively.
22-Dec-2000
	- Eliminated a bug in the procedural texture manager for the software
	  renderer.  The problem was that only the first 8-bit proc texture was
	  correctly initialized.
	- Fixed csfx so that there is only one Initialize() method now as was
	  originally intended.
	- Disabled lighting for the fire and water polygons that are created in
	  simple.  Now fire and water will actually look like fire and water
	  without having a green tint (from the nearby green light).
	- Eric Sunshine made the following changes to the project:
	    - Upgraded the NextStep port of Crystal Space to be fully
	      compatible with Andrew's National Keyboard Support.  Implementing
	      this required reverse engineering internal NextStep data
	      structures and writing code to extract the appropriate
	      information.  See the discussion in the new NeXTKeymap.cpp file
	      for a detailed explanation.  (National Keyboard Support had
	      already been enabled for the MacOS/X Server and OpenStep ports
	      several days earlier.)
	    - Fixed a long-standing problem with keyboard handling in the
	      NextStep port.  Keystrokes modified by the Alternate key were
	      never interpreted correctly by Crystal Space.  The reason for
	      this was that NextStep had already cooked the keystroke
	      completely out of recognition by the time Crystal Space had a
	      chance to see it, and there was no way to retrieve the original,
	      unmodified keystroke.  Reverse engineering the internal NeXT data
	      structures for National Keyboard Support made it possible to fix
	      this problem by making the unmodified (raw) keystroke available.
	    - Implemented F1 - F12 function key translation in the NextStep
	      port.  (These keys had already been implemented in the MacOS/X
	      Server and OpenStep ports several days earlier.)
21-Dec-2000
	- Philip Wyett fixed a small bug in texture.h.
	- Philip also found a bug in ~SoftwareCachedTexture () which
	  causes an on exit error in "appptlab" in Windows. Because of
	  possible side effects I have merely commented above the offending
	  line for resolution at a later date/more convenient time..
	  Hope that is OK.
	- Wouter Wijngaards fixed the macintosh pow() command for radiosity.
20-Dec-2000
	- Continued work on csfx library. Implemented support for a random
	  dot proc texture, plasma, fire and water (the last three are
	  taken from ptlab and were added to that application by Wouter
	  Wijngaards).
	- Added the notion of a use-callback for a csTextureWrapper.
	  This callback will be called right before a texture is used. Using
	  this callback you can make sure that procedural textures are only
	  updated when really needed (i.e. a polygon/object using the proc
	  texture is visible). Note that the callback can be called several
	  times in one frame if visible. The callback should keep this in
	  mind and use the current time to check if the callback should do
	  something.
	- Extended csTextureWrapper and csMaterialWrapper with a Visit()
	  function. The engine will call Visit() whenever the texture or
	  material is used. Visit() will call the use callback.
	- Note that this Visit() function is on csTextureWrapper and
	  not on iTextureHandle. This means that (for example) csPixmap
	  will not be able to fire this callback. If you use a procedural
	  texture on a csPixmap then you'll have to do the call to Animate
	  on your own.
	- Added GetMaterialWrapper() to csCurve.
	- Extended simple with a demo on how to use the new csfx
	  library. Added a cube with six sides demonstrating the various
	  procedural textures. Due to the new texture callback system the
	  procedural textures are only updated when needed.
	- There is currently an ugly hack in csProcTexture because there
	  seems to be a bug in the software procedural texture implementation
	  when several procedural textures are initialized from Register
	  to Prepare (i.e. interleaved Register/Prepare as opposed to first
	  doing all Register and then all Prepare). That's why there is
	  now an Initialize1 and Initialize2. If the bug is fixed this will
	  be removed.
	- Eric Sunshine eliminated a compilation warning in me_matmn.cpp.
	- Eric Sunshine made the following changes to MetaBalls:
	    - Fixed bug which prevented statistical text from displaying.  This
	      bug has existed since the beginning of time but was only
	      triggered recently.  The problem was that the `count' instance
	      variable, which plays a role in determining when statistics
	      should be displayed, was never initialized.
	    - Added default initializers for all other instance variables (in
	      addition to `count').
	    - Removed unnecessary call to csSystem::GetElapsedTime().
	    - Fixed bug: MetaSys::Help() was printing null-pointer for default
	      texture name.
	    - No longer crashes when unable to load texture.  Now prints
	      meaningful error message and exits cleanly.
19-Dec-2000
	- Andrew Zabolotny did the following changes:
	    - Fixed a error in inifile.cpp. The array allocated with
	      new[] was realloc()'ated. Now it is new/memcpy/delete'd.
	    - Fixed a minor memory leak in system driver. Event cords
	      weren't deleted at shutdown.
	    - Fixed a bad error in inifile.cpp triggered by [Macintosh]
	      section in vfs.cfg: the loader switches to base64 mode due
	      to empty assignments like:
		HOME =
	      (such lines are used to denote base64 keys) and then
	      doesn't switch back when it detects invalid base64 symbols.
	      I changed the ini loader so that it switches to base64 mode
	      by '==' statement, e.g.:
		HOME ==
		ODAwMDAwMDAgd2hpbGUKICAgIHNoYXJlZCBs
		aWJyYXJpZXMgdXN1YWxseSBoYXZlIGFkZHJl
		c3NlcyBsaWtlIDB4NHh4eHh4eHgpLgo=
		===
		;/HOME
	      If you want to assign the '=' value to a key, insert a space,
	      e.g:
		HOME = =
	      is interpreted as a normal key, not the head of a base64
	      stream. csIniFile::Save() inserts spaces automatically, thus
	      a saved ini file should read perfectly. Also if something other
	      than newline follows the second equal sign, it is also
	      interpreted as a normal key.
	    - Fixed a few memory leaks in MazeD.
	    - Finished material manager dialog. Now it is functional, use
	      Ctrl+m to invoke it, model manager has moved to Ctrl+M. Fixed
	      several bugs that leads to MazeD crashes related to materials.
	    - Fixed a bad bug in common texture manager object (txtmgr.cpp):
	      the constructor did no CONSTRUCT_IBASE.
	    - I have enhanced the memory debugger so that on Linux and OS/2
	      it is able to debug malloc/realloc/free's as well as new's and
	      delete's. There is a drawback on Linux though: it will
	      intercept all malloc/free's from all dynamic libraries (even
	      from libX11.so) thus you will see a lot of memory leaks
	      belonging to other libraries (notably libc and libX11). You can
	      filter them by address (in Linux program address is >
	      0x80000000 while shared libraries usually have addresses like
	      0x4xxxxxxx). If you want to debug memory leaks in plug-ins,
	      build executable in static link mode.
	    - Fixed a memory leak in csfont plug-in.
	    - Rearrangement of some aspects of the texture manager to simplify
	      interface API for textures and materials. Previously you had to
	      call texture manager's RegisterXXX (where XXX is Texture or
	      Material) then you had to call PrepareXXX to force texture
	      manager recompute the internal representation of the
	      texture/material; when you are done you had to call
	      UnregisterXXX. Now it works a little different: by calling
	      RegisterXXX you create a new texture/material handle, and
	      further you work only with that handle: call handle->Prepare()
	      to prepare texture or material for usage; call handle->DecRef()
	      enough times to destroy the handle (you don't have to call
	      UnregisterXXX anymore).
	      I have fixed all the 3D renderers for this, however I'm not
	      sure about Direct3D and Glide renderers (haven't compiled
	      them). All others are fully functional.
	      You can still call PrepareTextures() and PrepareMaterials()
	      on texture manager object to call Prepare on all objects at once.
	    - Renamed csTextureMMSoftware into csSoftwareTextureHandle and
	      csTextureMM into csTextureHandle for cleaner names.
	    - Before closing the system (System::Close) the engine will
	      free all texture and material handles since after closing
	      the graphics driver the handles become invalid no matter
	      whenever we did IncRef or not.
	    - Implemented alpha textures support for DrawPolygon, DrawPFX
	      and DrawPixmap in OpenGL renderer.
	    - Re-worked OpenGL texture cache. Texture unloading happens now
	      in a centralized routine, which minimizes the effort required
	      to fix any bugs in it (one of which was causing SIGSEGV on
	      exit).
	- Fixed python plugin after Andrew broke it with the changes
	  above (i.e. remove PrepareTexture() from the cs.i file).
	- Philip Wyett fixed a few compile errors in OpenGL renderer
	  after Andrew's commit.
18-Dec-2000
	- Rene Dudfield fixed a bug in sprite3d. The rand num generator
	  was not initialized.
	- Rene Dudfield also made the sprite3d lighting functions only
	  light the vertices that are used for the lod level.
	- Fixed a bug in WalkTest with ms->snd not being initialized to
	  NULL on systems that don't have sound support. This could result
	  in crashes when firing missiles.
	- Eric Sunshine made the following changes to the project:
	    - Repaired the MacOS/X Server, OpenStep, and NextStep ports of
	      Crystal Space after they had sat idle for several months.	 Many
	      core-level changes to the project during the idle time broke
	      these ports rather severely.  The ports are probably about 97%
	      functional now compared to how functional they were once.	 Some
	      problems still exist which will be addressed in subsequent repair
	      and upgrade sessions.  For instance, the NextStep port is not yet
	      fully compatible with Andrew's new National Keyboard Support.
	      Full compatiblity requires reverse engineering internal NextStep
	      structures.  The MacOS/X Server and OpenStep ports, on the other
	      hand, are now compatible with the National Keyboard Support.
	      Further, certain portions of the software renderer (which Andrew
	      updated since the last time I repaired all such problems) are
	      broken for the Apple/NeXT ports running at 32-bit mode on
	      big-endian hardware.  Future plans also include a port to the
	      upcoming MacOS/X, as well as further decoupling of the 2D driver
	      from the system driver.
	    - The default NeXT 2D canvas is now responsible for the querying
	      and interpreting its own `simulated depth' option.  This is no
	      longer the responsibility of the system driver.
	    - Eliminated iNeXTSystemDriver (NeXTSystemInterface.h) which
	      published a method to report the simulated-depth value to the 2D
	      canvas.  The canvas is now entirely responsible for this feature,
	      so the system driver need not publish this any longer.
	    - NeXTSystemDriver now manages an iEventOutlet which the 2D canvas
	      can use for default handling of mouse and keyboard events.
	    - NeXTSystemDriver now implements SystemExtension() to provide
	      default mouse and keyboard event handling on behalf of canvases,
	      as well as other functionality.
	    - Promoted the ability to suspend the engine's virtual-time clock
	      into csSystemDriver from NeXTSystemDriver where this feature was
	      originally implemented.  This is useful for ports which allow the
	      user to suspend the entire engine (for instance, to be friendly
	      on multi-tasking systems).  Suspending the virtual-time clock
	      prevents temporal anomalies from occurring within the engine even
	      though the real-time clock continues to elapse.  An example of a
	      temporal anomaly would be the firing of a missile just prior to
	      suspension of the engine.	 Upon engine resumption, if the
	      virtual-time clock was not also suspended, the missile would
	      suddenly jump forward as though much engine time had elapsed.
	    - Updated Apple/NeXT plug-in loading (NeXTLoadLibrary.cpp) to work
	      correctly with new plug-in search-path capabilites.  Also now
	      implements a meaningful csPrintLibraryError()
	    - Enhanced keyboard handling in the MacOS/X Server and OpenStep
	      ports to be compatible with Andrew's National Language Support
	      functionality.  (This feature is not yet fully implemented in the
	      NextStep port.  Doing so requires reverse engineering internal
	      NextStep data structures.)
	    - Implemented F1 - F12 function key translation in MacOS/X Server
	      and OpenStep ports.  (These keys are not yet implemented in the
	      NextStep port.)
	    - csEngineConfig is no longer an inner-class of csEngine.  This
	      change was made in order to work around a bug in the NextStep
	      compiler which was triggered after csObject (from which csEngine
	      inherits) was changed so that it inherits from iObject.  Somehow,
	      the compiler was getting confused by the QueryInterface(),
	      IncRef(), and DecRef() methods declared in csEngineConfig as well
	      as in iEngine and csObject (both of which csEngine inherits
	      from).  Making csEngineConfig stand-alone works around the
	      problem.
	    - In order to work around a multiple-inheritance bug in NextStep
	      compiler, changed the following classes so that they embed an SCF
	      interface rather than inherit from it:
		iCameraPosition	 -> csCameraPosition
		iMaterialWrapper -> csMaterialWrapper
		iRegion		 -> csRegion
		iSpriteTemplate	 -> csSpriteTemplate
		iTextureWrapper	 -> csTextureWrapper
	      The compiler's symptom was that it did not think that IncRef(),
	      DecRef(), and QueryInterface() were implemented in classes which
	      inherited from iBase multiple times (through different paths).
	      *BEWARE* There were many places where the engine was dangerously
	      and blindly casting pointers between the interface and the
	      implementing class.  For instance, a pointer might be cast from a
	      csMaterialWrapper to an iMaterialWrapper or vice-versa.  Although
	      this worked when the implementing class inherited from the SCF
	      interface, it does _not_ work when the interface is embedded.
	      The danger here is that the compiler does not warn about this
	      problem since it assumes that the programmer knew what he or she
	      was doing when using the cast operation in the first place.  I
	      tried to repair all such broken and dangerous blind casts in
	      which the above classes were involved, but it is possible that I
	      missed one here or there.
	    - Added an assignment operator to ddgTriangle3 in order to appease
	      the NextStep compiler.
	    - Added a missing `inline' keyword to csCovMaskTriage::GetState().
	      The lack of this keyword resulted in this function being
	      implemented and exported from every single source file which
	      included the header.
	    - Unified the case of the `full-screen' extension as understood by
	      iGraphics2D::PerformExtension().	Some canvases expected
	      "fullscreen", whereas others expected "FullScreen".
	    - Added a preprocessor flag to Blocks which allows all of the
	      broken networking code to be disabled in one fell-swoop.
	    - Eliminated compilation warning in pttex.cpp.
	    - Minor modification to csphyzik/entity.h to appease broken
	      OpenStep compiler which wasn't instantiating template methods
	      early enough.  Worked around problem via simple textual
	      reordering of header so that templatized variables are declared
	      before they are actually referenced by inline methods.
	    - Augmented TrueType to CS font converter makfile (csfgen.mak) so
	      that its target only shows up on platforms which also build the
	      TrueType font server plug-in.
	    - Eliminated several compilation warnings in ddgchull.cpp regarding
	      use of enumeral and non-enumeral types in conditional expression.
	    - Added missing SYSDEF_ALLOC define to halogen2.cpp.
	    - Worked around minor compiler bug on NextStep which affected
	      csapp.cpp and txtmgr.cpp.
	    - Eliminated several compilation warnings about "unused computed
	      value" in CSWS and several applications which utilize CSWS, such
	      as cswstest and levtool.
	    - Worked around NextStep compiler limitation in null_pix.cpp and
	      drawpmap.cpp.
	    - 3dsout.cpp now includes cssysdefs.h in order to fake up a `bool'
	      type for compilers which do not support `bool' natively.
	    - Fixed error in me_app.cpp.  Was assinging an
	      mzModificationOriginDepth constant to a csVector3 instance.
	    - imotion.h no longer imports matrix3.h and quaterni.h.
	      iskeleton.h no longer imports transfrm.h.	 Not only was this
	      unnecessary, but it also caused csSystemDriver to depend upon
	      these classes on NextStep, which was a less-than-desirable
	      consequence.  This resulted in linkage errors when linking the
	      csSystem library into applications which do not otherwise link
	      with the csGeometry library (such as scfreg).  (This problem is
	      specific to the NextStep compiler which generates references to
	      every mentioned class even if the class isn't actually used.)
	    - All source files in apps/t3d2cs and apps/t3d2cs/libt3d now import
	      cssysdef.h as the very first included file.  This ensures that
	      the `bool' type is faked up, if necessary, before it is used by
	      any other imported headers.
	    - Eliminated an "unused variable" warning in tBrush.cpp.
	    - Worked around a bizarre NextStep compiler bug which manifests as
	      an apparent corruption of the virtual table for csSprite2D.
	      Calls to QueryInterface() from a csSprite2D pointer would never
	      actually invoke the real, inherited csSprite::QueryInterface(),
	      and would instead always return NULL.  It is not even clear
	      which, if any, method was being called in lieu of the real
	      csSprite::QueryInterface().  Calls to QueryInterface() from a
	      local instance of csSprite2D would succeed as expected (since the
	      virtual table is not consulted in this case).  The work around
	      for this problem (for magical reasons) is to declare
	      QueryInterface() in csSprite2D which overrides the inherited
	      csSprite::QueryInterface().  It is sufficient for this method to
	      simply exist in csSprite2D.  Its actual implementation merely
	      invokes its superclass' QueryInterface().
17-Dec-2000
	- Brandon Ehle fixed a quaternion bug, with r initializer in the
	  wrong spot. The motion manager bug was fixed by this and
	  motions now look correct.
	- Started work on csfx library. Not finished yet. The csfx library
	  will contain stuff that is not general enough to be placed in the
	  engine but is general enough to be useful for several games. At
	  first I plan to add some procedural textures (i.e. like fire, water,
	  and plasma from the ptlab demo) and some of the particle systems
	  (like rain, fire, fountain, snow, ...).
	- Eric Sunshine temporarily disabled the sumlog.awk script which
	  performs CVS commit-time mailings.  This was necessary since gawk is
	  not present on the new CVS server which SourceForget installed, thus
	  all invocations of sumlog.awk were failing.
15-Dec-2000
	- Bugfix in csPolygon3D::ClipToPlane(). If the portal has a clipping
	  plane (can happen with floating portals) then it was possible that
	  this clipper would result in badly formed polygons generating
	  crashes or at least render errors in some cases. This problem
	  was visible with the new 'portal' console command. Note that
	  the problem is numerical. I'm not sure that my current fix will
	  eliminate the problem completely but at least I wasn't able to
	  reproduce it anymore.
	- Fixed the portal command so that the created portal always
	  faces the camera (at creation time only). The portal itself also
	  has the correct space warping transformation so that it appears
	  again at the starting point of the loaded world.
	- Changed csCameraPosition so that it inherits from csPObject
	  instead of csObject.
	- Added iCameraPosition and let csCameraPosition inherit from this.
	- Added iRegion/csRegion::FindCameraPosition().
	- Added iEngine/csEngine::FindCameraPosition().
	- csCameraPosition objects are now also supported by csRegion.
	- The portal command now correctly uses the real start position of
	  the loaded level (instead of just room,0,0,0) as given by the
	  'START' command.
	- The portal console command will now check if a region is already
	  loaded. If so then it will just open a new portal to the already
	  existing region.
	- The portal command will now also generate a portal back to the
	  world from which you created a portal. This only happens once though.
	  i.e. if you do 'portal maze' then you will get a portal from the
	  current position towards maze and a portal back from maze towards
	  the current position. If you then move to another position and
	  again do 'portal maze' you will only get a portal to maze and
	  not one back.
	- Renamed WalkTest::InitEngine() to InitCollDet() because that's
	  what it is doing.
	- If a new map file is loaded with the portal command the collision
	  detection stuff will be correctly initialized.
	- Moved the portal so that it is standing on the ground (relative
	  to the position of the player).
	- Known remaining issues with portal command:
	    - If you move through the portal your direction will not be
	      correct. This is caused by WalkTest having its own angle
	      vector which is not yet updated when passing a space
	      warping portal.
	    - If you started WalkTest from flarge (for example) then
	      typing 'portal flarge' will load a new instance. The reason
	      is that the default world is not placed in a region so the
	      portal command can't see that it is already loaded.
	    - Missiles can't penetrate the portal.
	    - Dynamic lights don't shine through the portal.
14-Dec-2000
	- Optimized csRegion::IsInRegion(). Replaced the loop over all
	  the objects in the region with a single test if the parent
	  of the given object is equal to the region.
	- Changed the behaviour of csEngine::FindSector, FindThing, FindSky,
	  FindThingTemplate, FindSprite, FindSpriteTemplate, FindTexture,
	  and FindMaterial. If onlyRegion is false then the behaviour is
	  as before but if onlyRegion is true then these functions will now
	  only return objects that are in the region AND also connected
	  to the engine. This contrasts with the old behaviour where these
	  functions could actually return objects that were not connected
	  to the world (example: do new csSector() and the created sector
	  will automatically be added to the current region, however it will
	  not be added automatically to the list of sectors in the engine).
	  The same functions in csRegion behave like they did before (i.e.
	  they can return objects that are not connected to the engine).
	- The previous change fixes the portal command so that it now
	  correctly loads another world and is able to create a portal to
	  that other world. Note that this doesn't complete the portal
	  command yet. A few extra things need to be done to make it
	  truely usable (initialize collision detection, engine mode
	  specific to sector instead of global to engine).
	- Added a warping transformation to the portal generated by the
	  'portal' command so that the portal destination matches the
	  starting point of the loaded level.
13-Dec-2000
	- Did a little further work on the engine SCF interfaces:
	    - Added iEngine/csEngine::FindTexture().
	    - Added iEngine/csEngine::CreateMaterial().
	    - Added iRegion/csRegion::FindTexture().
	    - Changed FindTexture/FindMaterial to return the pointer
	      to the texture/material on success instead of boolean.
	    - Added iView::Draw().
	    - Moved several defines for vectors in csCamera to iCamera.
	    - Added iEngine::GetBeginDrawFlags().
	    - Added iEngine::CreateLight.
	- The result of the SCF changes today and yesterday is that
	  simplep (the version of simple that uses the engine plugin) is
	  actually able to create geometry and show it.
	- Added iTextureWrapper SCF class and let csTextureWrapper implement
	  it.
	- Made some fixes to cs.i so that the Python plugin is now up-to-date
	  to the latest SCF changes.
12-Dec-2000
	- Thomas Hieber added two files to gamecore plugin which he
	  forgot to add in the past.
	- Michael Dale Long fixed the cctest console. Also did some
	  cosmetic code cleanup. Funky console is now enabled again.
	- Philip Wyett fixed a memory write error in the OpenGL texture
	  cache. This was causing an exit memory write error when exiting
	  'Blocks' in Windows.
	- Rene Dudfield made sprite lighting settings local to sprites so
	  that different sprites can use different settings.
	- Added ShineLights to iRegion/csRegion.
	- Added IsInRegion to iRegion/csRegion to check if some object
	  is in a region.
	- Extended csEngine::ShineLights with an optional csRegion
	  parameter to restrict recalculating lighting for some region.
	- Extended csPolyIt, csCurveIt, and csLightIt (iterators that
	  are defined in csEngine) with an optional csRegion parameter
	  to restrict iteration over the objects in that region.
	  Also extended csEngine::NewPolyIterator() and NewLightIterator()
	  functions.
	- Added GetLastSector() to csCurveIt and csLightIt (like csPolyIt).
	- The 'portal' console command works better now. In some cases
	  it 'almost' seems to be doing what it should. But it is still not
	  good enough. It crashes while trying to load some levels and
	  the portals in the other levels don't seem to be correct.
	  'portal sydney' is the only one which seems to work nicely
	  from flarge.
	- Did a little further work on the engine SCF interfaces:
	    - Added Prepare() to iEngine.
	    - csView now extends the already existing but empty iView.
	    - Added a few methods to iView.
	    - Added CreateView() to iEngine.
	    - Added lots of functions from csCamera to iCamera.
10-Dec-2000
	- Eric Sunshine made the following changes to the project:
	    - Finally eliminated the evil monolithic apps/support/static.cpp
	      file which caused repeated maintenance headaches.	 The problem
	      with this file was that every time a plug-in module was added or
	      removed from the project, a developer also had to remember to
	      edit static.cpp to reflect the change.  Thus, the perceived
	      modularity of plug-ins was offset by the very real monolithic
	      disposition of this file.
	    - As a replacement for static.cpp, the new makefile
	      CS/mk/static.mak automatically and dynamically synthesizes C++
	      code which forces hard symbolic references to each plug-in module
	      being linked into the application (assuming that the application
	      is being linked statically---that is, with USE_PLUGINS=no).
	    - Information used by the synthesis process is gleaned from the GNU
	      makefiles, project-wide.	The old CFLAGS.STATIC_SCF makefile
	      variable has been removed.  A new variable, SCF.STATIC, contains
	      a list of plug-in module basenames (such as `soft3d', `vfs',
	      etc.), and this information is used to synthesize the hard
	      references needed when linking applications statically.
	    - The static.mak makefile is smart enough to regenerate the
	      synthesized symbolic references when certain events occur; such
	      as when the user edits the list of plug-in modules in user.mak or
	      reconfigures the project's makefiles.
	    - Note that the new synthesis process is geared toward platforms
	      which utilize the GNU makefile system to build the project.  It
	      does not apply to ports which use `project files'.  However,
	      historically, none of the ports which rely on project files has
	      ever supported static linking, so this is no loss.  If, in the
	      future, a port does wish to support static linking via project
	      files, it would be a simple matter to set up an automated
	      synthesis task, and commit the result to the CVS repository on a
	      regular basis, much as is already done with MSVC project files.
	    - Added $(DEP.EXE) to the dependency lists of the following GUI
	      applications.  This should allow them to successfully link
	      statically (that is, when USE_PLUGINS is `no'):
		cctest
		g2dtest
	    - Removed $(DEP.EXE) from the dependency list of the following
	      console applications, since they need not link against the
	      various plug-in modules:
		csfgen
		makedep
		scfreg
		scftutor
		textconv
		uninst
9-Dec-2000
	- Added 'regionOnly' parameter to all 'FindXxx()' methods in
	  csEngine and iEngine. When this parameter is 'true' (default is
	  'false') only objects in the current region will be searched.
	- Added 'FindSky' to csEngine and iEngine.
	- Added all the 'FindXxx()' methods to csRegion and iRegion as well.
	- In addition added a general 'FindObject()' method to csRegion with
	  which you can find any object of a given name and type.
	- Added csThing::IsSky() which returns true if the thing is a sky
	  object.
	- Added optional is_template parameter to the constructor of csThing.
	  This is just to mark a thing as being a template. Usually this
	  should be set to true if the thing is pushed on the template list
	  in the engine. Also added IsTemplate() function to csThing to
	  query the status of this flag. Modified csLoader to correctly
	  set this flag in the constructor.
	- Added 'FindThingTemplate()' to csEngine, iEngine, csRegion, and
	  iRegion.
	- Added iSprite and iSpriteTemplate SCF classes and let csSprite
	  and csSpriteTemplate implement them. csSprite implements iSprite
	  through embedding (similar to how csThing implements iThing).
	  csSpriteTemplate implements iSpriteTemplate with (multiple)
	  inheritance.
	- Because iSprite is now implemented it is possible to actually
	  implement csRegion and csEngine::FindSprite. In addition because
	  iSpriteTemplate now exists I also added csRegion and csEngine::
	  FindSpriteTemplate. Also added to iRegion and iEngine.
	- Added iObject SCF interface. csObject now implements iObject.
	  iObject is currently almost empty (only contains GetName and
	  SetName). It's main purpose is to allow further definition of the
	  engine SCF interface for all methods that expect or return csObject
	  instances. This rather fundamental change triggered a number of
	  other changes in the engine classes with regards to where they
	  get the iBase implementation. Previously some of those classes
	  implemented iBase for sake of embedding or subclasses. Now, those
	  classes can use the iBase provided by csObject.
	- Fixed a bug in Blocks which caused crashes if no network driver
	  was present. Now it simply doesn't attempt to open a connection
	  if there is no network driver.
	- Implemented 'onlyRegion' support in csLoader by using the new
	  FindXxx() routines that were added to csEngine.
	- Extended csPObject thus that it correctly unlinks itself from its
	  parent at destruction time. Previously it didn't care which could
	  cause bad problems.
	- Also fixed csObject::ObjRelease() so that it actually resets the
	  parent to NULL at release time.
	- In addition fixed the csObject destructor so that the children
	  are destroyed the correct way now (given that destroying a child
	  will automatically remove it from the 'children' array).
	- The csObjectNoDel destructor has also been fixed so that it
	  sets the parent of all children to NULL (since they are now
	  unlinked).
	- All engine classes that can be added to a region now extend
	  csPObject instead of csObject. This is to make sure that they
	  actually maintain the parent (which is the region they are in).
	  When such an object is then deleted it will safely unlink itself
	  from the parent (region).
	- Added iRegion/csRegion::PrepareTextures() to prepare all textures
	  and materials that were loaded in the context of this region.
	- Renamed iRegion::Prepare() to PrepareSectors() and added a new
	  Prepare() which calls PrepareTextures() followed by PrepareSectors().
	  This way it works more like csEngine does.
	- All the above changes done today result in the 'portal' console
	  command not crashing anymore and loading the world given as a
	  parameter (probably) correctly in a new region. The 'portal' command
	  still doesn't work though because something is still wrong with
	  the portal.
8-Dec-2000
	- Samuel Humphreys did the following changes to phyztest:
	    - First stage of reformatting csphyziks to be more consistent
	      with itself and the Crystal Space style.
	    - Fixed the dissappearing block in phyztest..thx to Michaels
	      guidance.
	    - Added reportage of the main variables associated with the
	      block object.
	    - Changed the room to be a cube of 10 units each side centred
	      on the origin.
	- Samuel also fixed the bot cam so that it can traverse into the
	  new room of visual feasts (plasma, water, and fire).
	- Fixed a bug in cs.i for python. Eric Sunshine accidentally removed
	  the essential '3' after csVector3 :-)
	- Eric Sunshine moved command.cpp and command.h from apps/support to
	  apps/walktest since these files are only used by WalkTest. Updated
	  makefile and other source files to reflect this change.
	- Martin Geisse added a missing lib in the ds3d makefile.
	- Norman Kramer added missing include to a file in MazeD.
	- Wouter Wijngaards improved fire a bit. You can now show single
	  flames as well as a tiling wall of flame. Also added water and
	  plasma textures (all viewable in ptlab).
7-Dec-2000
	- Wouter Wijngaards made the fire polygon unlit in ptlab. This
	  looks better.
	- Eric Sunshine made the following changes:
	    - Renamed the following classes and SCF interfaces.	 Fixed all
	      source files, header files, and documentation to reflect these
	      changes.
		iWorld --> iEngine
		csWorld --> csEngine
		csWorldConfig --> csEngineConfig
		csWorldState --> csEngineState
		csWorldStateVector --> csEngineStateVector
	    - Renamed the following files.  Fixed all source files, header
	      files, and documentation to reflect these changes.
		iworld.h --> iengine.h
		world.h --> engine.h
		world.cpp --> engine.cpp
		worldfmt.txi --> mapfmt.txi
	    - Eliminated the old iEngine SCF interface and the iengine.h header
	      file.  This interface was just a very thin wrapper around the
	      existing iWorld (now iEngine) functionality.  However, since the
	      engine library already contains sufficient SCF goop to pass as a
	      plug-in module, the old thin iEngine wrapper was not actually
	      needed.  The new iEngine is now the one and only interface for
	      accessing the engine regardless of whether or not it is in a
	      plug-in module or statically linked.  There is no longer any
	      distinction.
	    - Renamed all `world' variables to 'engine' throughout the project
	      and documentation.  Renamed all variations of `world' (such as
	      `World', etc.), as well.	Also renamed `world file' references to
	      `map file' references.  Code and documentation which specifically
	      refers to `world space' or `world coordinates' has not changed.
	      In this case, the `world' terminology is appropriate and has been
	      retained.
	    - Added a bunch of missing `const' qualifiers to Dumper class.
	    - Renamed Dungeon plug-in's SCF name from
	      crystalspace.worldrnd.dungeon.std to crystalspace.dungeon.random.
	    - csProgressPulse now uses iSystem::Printf() rather than
	      CsPrintf(), thus it is no longer tied to the engine.  Also added
	      Doxygen comments.
	    - Enhanced the check for new C++ casting syntax in comptest.sh to
	      be more thorough.	 It now checks for all casting variations.
	      This was necessary, since someone at NeXT botched the OpenStep
	      Objective-C++ compiler so that it fails to understand
	      reinterpret_cast even though it understands static_cast,
	      const_cast, and dynamic_cast.
	    - Eliminated compilation warning in csbaglay.cpp regarding one
	      variable shadowing another.
	    - NeXT csosdefs.h now defines __NEED_GENERIC_ISDIR for SYSDEF_DIR
	      so that the generic isdir() gets defined.	 This is now required
	      by CSWS.
	    - Added missing `const' qualifier to SetName() and GetName()
	      methods of csFrame and csSpriteAction.
	    - Eliminated several compilation warnings from the sound loader
	      plug-in.
	    - Eliminated compilation warning about redefinition of RED_PREPROC
	      macro in haloscan.inc.  This warning only showed up on platforms
	      which have TOP8BITS_R8G8B8_USED defined.
	    - Eliminated several compilation warnings in g2dtest regarding
	      implicit conversion of float to int.
	    - Added missing `const' qualifiers to several methods in
	      mz3DSprite.
	    - Fixed quite a lot of multiple-include protection macros in
	      include/csengine so that they are now prefixed by `CS' (for
	      instance __CS_STATS_H__ rather than STATS_H).  This should help
	      to avoid naming collisions with non-CS packages.
	    - Eliminated compilation warning in ptlab.cpp.
	    - Eliminated compilation warning in dnfnodes.cpp.
6-Dec-2000
	- Fixed a comment in iGraphics2D.
	- Extend csObject::GetChild() with a new 'derived' parameter similar
	  to how GetIterator() works. With 'derived' set to true GetChild()
	  will return the first child that matches the type or is a type
	  derived from the given type. To get the first child you can now
	  use GetChild (csObject::Type, true);
	- Added iRegion SCF interface which csRegion extends.
	- Extended iWorld and csWorld with SelectRegion and GetCurrentRegion.
	- More work on csRegion class. DeleteAll(), Clear(), and Prepare()
	  should all work now. But untested at the moment.
	- All objects that should belong to a region will now add themselves
	  to the current region automatically.
	- Added new 'REGION' keyworld to WORLD in loader. This keyworld
	  will create/select a new region and all subsequent sectors,
	  collections, sprite templates or thing templates, will be added
	  to that region. If the name of the region is empty then the default
	  NULL region will be used. Note that it is possible to interleave
	  region selection. For example, you can first create a few sectors
	  in region 'east', followed by a few sectors in region 'west',
	  followed again by a few sectors in region 'east'.
	- Fixed a bug in csWorld::CreateThing(). This function accidently
	  added the thing twice to the list of things for every sector (once
	  by doing SetSector on the movable and once explicit). In addition
	  this routine forgot to add the thing to the list of things in the
	  world.
	- Added 'portal' console command to WalkTest. This will create a new
	  region with the given name and load the same named level into
	  that region. Then it will create a portal on the spot you are
	  standing to the start position of the new level. For example,
	  you can do 'portal maze' to load maze.zip into the 'maze' region.
	  Then you can enter 'maze.zip' through the new portal :-)
	  WARNING! This command does not work at the moment and the only
	  effect is crashing WalkTest! Work in Progress!
	- Added csLoader::AppendWorldFile() which will load a world
	  file without first clearing the original world.
	- Added a parameter 'onlyRegion' to AppendWorldFile(). If true then
	  then portals will only connect to the sectors in the current
	  region, things will only use thing templates defined in the
	  current region and sprites will only use sprite templates
	  defined in the current region.
	- Small fix in OpenGL which SHOULD support alpha for DrawPixmap
	  but for some reason doesn't.
	- Eric Sunshine fixed unixconf.sh so that it respects the CXX setting
	  from the environment if such a setting already exists, rather than
	  completely ignoring such a setting.
	- Eric Sunshine fixed some problems in cspython.mak and csjava.mak.
	- Eric Sunshine added automatic detection of SVGALIB to unixconf.sh.
	- Eric Sunshine removed the dead cygnus.mak makefile.
	- Eric Sunshine eliminated several compilation warnings from
	  crysball.cpp.
	- Eric Sunshine added missing RequestPlugin(FontServer) to simplep.cpp.
	- Samuel Humphreys added a fire procedural texture to ptlab. The fire
	  algorithm was contributed by Wouter Wijngaards.
	- Martin Geisse fixed a bug which caused the sound modules to ignore
	  some config settings.
5-Dec-2000
	- Wouter Wijngaards created csBox3::SquaredOriginDist which returns
	  a float with the squared distance of the box to (0,0,0). It
	  is extremely fast (algo taken from sector.cpp).
	- Norman Kramer did the following changes:
	    - Caught a div by zero in LOD calc for sprites.
	    - Sprites are now clipped if shortest distance is greater than
	      D() value of the farplane (squared version).
	- Started work on csRegion class. Not functional at the moment.
	- Eric Sunshine made the following changes:
	    - Removed all platform-specific specializations from of csdef.h.
	      These specializations have been moved to platform-specific
	      makefiles and include files, where appropriate.  The idea here is
	      to eliminate the mentality of monolithicism by moving as much
	      platform-specific goop into platform-specific configuration files
	      rather than polluting generalized project resources with
	      platform-specific crud.
	    - Moved all OS_NEXT-specific specializations out of csdef.h and
	      into next/csosdefs.h.
	    - csdef.h is no longer responsible for setting the OS_UNIX flag for
	      Solaris, Linux, Irix, BSD, BeOS, NeXT, and PS2.  It is now the
	      responsibility of each platform's makefile to set the OS_UNIX
	      flag, instead, if that designation is appropriate for the given
	      platform.
	    - Upgraded volatile.mak so that it has an understanding of
	      operating system `families', such as Unix, Win32, etc.  If it
	      sees that a platform-specific makefile has designated itself as
	      belonging to a particular family, then volatile.mak includes an
	      appropriate definition (such as OS_UNIX) in volatile.h.  All
	      platform-specific makefiles which require OS_UNIX now obtain it
	      via the new `family' mechanism.
	    - Added comptest.sh which tests for different compiler capabilities
	      at project configuration time.  Both unixconf.sh and next.mak now
	      invoke comptest.sh.
	    - Merged booltest.sh into comptest.sh.  Removed booltest.sh.
	    - Added a compiler capability test for new-style C++ casting syntax
	      to comptest.sh.  If the compiler does not understand this syntax,
	      then the makefile variable CS_USE_OLD_STYLE_CASTS is defined.
	      volatile.mak then defines the preprocessor variable
	      CS_USE_OLD_STYLE_CASTS which is recognized by csdef.h.
	    - Added a compiler capability test for the new C++ `explicit'
	      keyword.	If the compiler does not understand this keyword, then
	      the makefile variable CS_USE_FAKE_EXPLICIT_KEYWORD is defined.
	      volatile.mak then defines the preprocessor variable
	      CS_USE_FAKE_EXPLICIT_KEYWORD which is recognized by csdef.h.
	    - Renamed makefile and preprocessor variables DO_FAKE_BOOL to
	      CS_USE_FAKE_BOOL_TYPE.
	    - Renamed makefile and preprocessor variables DO_FAKE_SOCKLEN_T to
	      CS_USE_FAKE_SOCKLEN_TYPE.
	    - Moved initial definition of MAKE_VOLATILE_H out of Makefile and
	      into volatile.mak.
	    - Reworked the STATIC_CAST, DYNAMIC_CAST, REINTERPRET_CAST, and
	      CONST_CAST macros so that the user is no longer responsible for
	      remembering to add extra parentheses around the expression which
	      is being casted.
	    - Eliminated Linux-specific specializations from makedep/parse.cpp.
	    - Eliminated NextStep-specific specializations from bspbox.cpp.
	    - Eliminated platform-specific specializations from scf.h and moved
	      them into the appropriate platform-specific csosdefs.h files.  In
	      particular, the Windows, BeOS, and OS/2 configuration files now
	      override the default function export mechanism rather than
	      hard-coding such platform-specific knowledge into SCF.
	    - Created include/cssys/csosdefs.h which takes over the
	      responsibility of including the platform-specific csosdefs.h from
	      cssysdef.h.  This helps to remove some platform-specific
	      specialization from cssysdef.h.
	    - Eliminated all platform-specific specializations from version.h.
	      It is now the responsibility of the platform-specific makefile
	      and project files to provide this information on behalf of
	      version.h.  The idea here is to eliminate the mentality of
	      monolithicism and promote the concept of modularity, rather than
	      polluting generalized project resources, such as version.h, with
	      platform-, processor-, and compiler-specific crud.  For all
	      platforms which use the GNU makefile system, this information is
	      now provided automatically by volatile.mak by gleaning the
	      necessary information from the existing GNU makefiles.  In
	      particular, volatile.mak examines the makefile variables
	      $(DESCRIPTION.$(TARGET)), $(PROC), and $(COMP) in order to
	      provide useful human-readable information to version.h.
	    - Renamed the following preprocessor identifiers from version.h
	      (some of which are now defined by platform-specific project files
	      rather than being defined directly in version.h):
		CS_VERSION    --> CS_VERSION_MAJOR
		CS_SUBVERSION --> CS_VERSION_MINOR
		VERSION	      --> CS_VERSION
		RELEASE_DATE  --> CS_RELEASE_DATE
		OS_VERSION    --> CS_PLATFORM_NAME
		PR_VERSION    --> CS_PROCESSOR_NAME
		CC_VERSION    --> CS_COMPILER_NAME
	    - Renamed the plug-in file extension for MacOS/X Server, OpenStep,
	      and NextStep from .dylib to .csplugin.
	    - Added general/findlib.cpp to SRC.SYS_CSSYS in next.mak.
4-Dec-2000
	- Norman Kramer implemented farplane culling for sprites.
	- Added 'sndload' to the 'walkall' target because without the
	  sound loader WalkTest will not run.
	- Fixed a number of compile errors that trigger with VC5.
3-Dec-2000
	- Norman Kramer did some work on CrystalBall (his polygon culler).
	- Norman also did the following with relation to the c-buffer
	  culler:
	    - GetConvexOutline (in csBox) has a new parameter: bVisisble.
	      If true it returns all visible corners, if not then just
	      the outline.
	    - The farplane is now recognized in the octree culling and
	      polygon culling process.
	- Noah L. Gibbs added support for change to libs/csphyzik/qtrbconn.cpp.
	  Also some prototypes for new functions. Here is the comment:
	      Checking in code that's almost enough to make the rigid-body
	      connectors useful. They now successfully take derivatives of
	      an arbitrary point and its velocity on the rigid body with
	      respect to all state variables of that body -- except for the
	      derivative of the velocity with respect to the rigid body's
	      angular momentum.	 Ouch.	Working on it.
	- Eric Sunshine made the following changes to the documentation:
	    - Fixed several Texinfo mark-up problems in msdos.txi, win32.txi,
	      win32gcc.txi,
	    - Performed some re-writing and clean-up of features.txi.
	    - Performed some minor reformatting of csgeom.txi, graphics.txi,
	      and plugins/overview.txi.
	    - Performed some minor re-writing of cssys.txi.
	    - Replaced Doc++ references with Doxygen references in coding.txi.
	- Eric Sunshine made the following changes to CVSROOT/sumlog.awk (and
	  cousins):
	    - Minor beautification of generated output in order to facilitate
	      ease of reading.
	    - Now ensures that all developers have write access to temporary
	      working directory.  This should prevent the problem of
	      "permission denied" errors which occurred for some users when
	      committing files.
	- Eric Sunshine added missing FontPlex registration to static.cpp.
	- Eric Sunshine fixed copy/paste error in fontplex.mak.
	- Eric Sunshine removed references to the obsolete and long dead
	  Amiga and Watcom ports.
	- Eric Sunshine removed the following modules and resources from the
	  project.  Also removed all references to these modules from
	  documentation, source and header files, configuration files, etc.
	  All removed resources were tagged with the name "PURGE_1" just before
	  being purged to CVS's "Attic".  This tag may be used to easily
	  recover any module or resource back to the state it was in just prior
	  to removal.
	    - Defunct NetSpace project and its supporting modules:
		apps/demonets
		apps/nstp
		docs/incoming/nstpimp.html
		include/iauth.h
		include/icmdmgr.h
		include/inetcmd.h
		include/inetman.h
		include/iproto.h
		plugins/csauth/simple
		plugins/net/netman
		plugins/netspace/nsmgr
		plugins/netspace/nstp
	    - Defunct and unmaintained video drivers:
		plugins/video/canvas/dosalleg
	    - Defunct and unmaintained sound renderers:
		plugins/sound/renderer/a3d
		plugins/sound/renderer/eax
	    - Old networking resources and poorly designed cruft:
		apps/ndrvdemo
		mk/mwcw/NetworkDriverNull.mcp
		mk/mwcw/NetworkMgrNull.mcp
	    - Old csGame resources and Shooter demonstration program:
		apps/shooter
		data/shtlib_g.zip
		data/shtlib_m.zip
		data/config/shooter.cfg
		include/csgame
		mk/mwcw/Shooter.mcp
	    - Limited-value applications:
		apps/wscs3d
		data/config/wscs3d.cfg
	    - Old scripting cruft left around by Brandon:
		apps/support/spawn.cpp
		apps/test/pytest
		include/css/cssint.h
		include/ispawn.h
		include/tests.h
	    - Out of date documentation:
		docs/incoming/changes.txt
		docs/incoming/mazedtut.txi
		docs/incoming/mazed123
		docs/incoming/script.txt
	    - Out of date scripts and makefiles:
		bin/helpread.tcl
		bin/launcryst.tcl
		bin/makeman.py
		bin/mshelp.py
		bin/win32link.bat
		libs/cssys/os2/os2wcc.mak
		libs/cssys/win32/win32vc.mak
	    - Other useless and out of date flotsam:
		coordper
		bin/indent.pro
		data/entry.t3d
		include/cssys/wcc
		scripts/python/unrmap.py
	- Martin Geisse added some sections and items to the libs and
	  plugins chapters of the docs.
2-Dec-2000
	- Seth Galbraith did the following changes to sprites:
	    - Automatic level-of-detail adjustment based on distance and
	      field-of-view.
	    - cfg_lod_detail (the "lod" setting in Walktest) is now
	      basically the distance at which full detail is visible
	      instead of a fractional value.
	- Seth also added -mconsole to the linking flags for win32gcc.mak.
	  He also added comments explaining what to expect if you
	  comment-out the -mconsole option.
	- Wouter Wijngaards improved WalkTest as follows:
	    - Finetuned the parameters for the 'flame' demo particle system.
	      It looks better now, less blocky.
	    - Removed those irritating 1 pixel wide margins where pixels
	      from the console text could still be seen. At the end of
	      initialize, ClearAll() is called.
1-Dec-2000
	- Andrew Zabolotny tried to fix OpenGL library problems.
	  LIBS.OPENGL.SYSTEM is now the correct variable to define the
	  system libraries for OpenGL support. For example (in system
	  makefile or in config.mak):
	    LIBS.OPENGL.SYSTEM=-L/usr/local/include/MesaGL -lMesaGL
30-Nov-2000
	- Martin Geisse changed the following in the documentation:
	    - Moved vfs docs to the plugins section.
	    - Added basic docs for cssys, csutil and csgeom.
	    - Added some missing applications to the apps section.
29-Nov-2000
	- Seth Galbraith added the following changes to sprites which he
	  got from Rene Dudfield:
	    - UpdateLightingFast () method.
	    - lighting_quality instead of do_quality_lighting.
	    - [Lighting]->LightingQual config option.
	    - Plus some cleanup work and optimization by Seth.
28-Nov-2000
	- Seth Galbraith did an update to sprites:
	    - Fixed lighting normals interpolation.
	    - Don't need obj_verts for UpdateLightingLQ.
	    - MergeNormals functions now take a "base" parameter.
	    - MERGE_ tokens removed, replaced with SMOOTH.
	- Martin Geisse did a minor change to the input syntax for dungeon.
27-Nov-2000
	- Martin Geisse fixed some compiler warnings in 3ds2lev.
	- Martin also fixed a bug in ptlab.
	- Wouter Wijngaards added csgeom library to csfgen app.
	- Fixed a bug in sprites recently introduced by Seth. The problem
	  was a divide by zero when normalizing the null vector.
	- Andrew Zabolotny did the following changes:
	    - Removed all inline assembly code (GAS and MSVC): both were
	      broken (GAS because of gcc 2.95.2 and MSVC because it was
	      unmaintained). The only working assembly code now is NASM
	      code. We should think of a way to make NASM assembly available
	      to MSVC users.
	    - Removed outdated drline.h file (which wasn't used anyway).
	      Line drawing should be very accurate; I doubt this assembly
	      routine is as accurate as the C version is (and I'm not sure
	      it is faster).
	    - Removed outdated m68k assembly code; I doubt it was in a
	      working state.
	    - VERY nice hack borrowed from FreeType OS/2-specific source
	      code: now all OS/2 executables are compiled as console
	      executable (rather than GUI executables); the canvases that
	      need GUI (such as csdive or OpenGL) will call
	      System->SystemExtension ("StartGUI") and the executable will be
	      re-qualified (at runtime!) as a GUI executable. This is
	      simply VERY VERY nice for debugging since it allows to use
	      normal console for debugging now (like in X11). Also it
	      allows for autodetection of canvas - if the program is
	      launched in full screen, the MGL driver is used; if it is
	      launched from a GUI console, the GUI canvas is used. Also
	      this means that ASCIIART canvas (and any other non-GUI canvas)
	      can be used without any bother.
	    - Fixed a bug in freetype font server that caused sometimes
	      characters to be displayed out of character cell (shifted
	      vertically too much). It was caused by the incorrect (I
	      believe) usage of the OS/2 TTF header.
	    - Rewrote from scratch the ttf2fnt converter. Now it is called
	      csfgen, it doesn't use the engine and unneeded plugins (it
	      uses only VFS and freetype plugins), uses normal command
	      line interface (and getopt()).
	    - I have changed the format of .csf files (which are binary
	      bitmap fonts), so that they are easier to parse. Also I have
	      changed the format of binary fonts so that they are a lot
	      smaller, esp. for proportional fonts - every character is
	      stored separately rather than using a fixed NxM grid. This is
	      also used for C++ format fonts. Also added ability to use a
	      subset of the entire character set; for example you can create
	      fonts which contains only characters 32-127, if you need
	      only basic Latin character set.
	    - Further progress of Material Manager dialog in MazeD.
26-Nov-2000
	- Martin Geisse modified the dungeon plugin:
	    - Now uses the old parser again.
	    - Renamed 'auto-connections' to the more appropriate name
	      'cross-connections'.
	- Chris Bruner fixed a few problems that were causing compile
	  errors with the Borland compiler.
25-Nov-2000
	- Seth Galbraith added MergeNormals to sprite templates and world
	  format to smooth out sprite seams.
	- Seth also removed the object_verts parameter from ComputeNormals.
	  Use less accurate direction from light to center of sprite
	  instead of direction from light to vertex in UpdateLightingLQ.
	  Tried to implement normal interpolation in UpdateLightingLQ/HQ,
	  but it doesn't do anything! Added MergeNormals to sprite templates
	  and world format to smooth out sprite seams.
24-Nov-2000
	- Fixed a bug in alpha map support for DrawPixmap and software
	  renderer when used on a 32-bit display. It was actually completely
	  wrong.
	- Wouter Wijngaards did the following: Now transparent gifs should make
	  the texture pixmap keycolour preset to the value stored in the gif
	  file.
	- Norman Kramer added csCrystalBall which is an attempt for a new
	  kind of culler for CS.
	- Andrew Zabolotny removed 'dep' from rm -f line in make softclean.
	- Eric Sunshine applied a couple simple patches from Jan Dvorak
	  <johnydog@go.cz>:
	    - Trivial documentation typo in Makefile.
	    - Fixed texture resizing bug in mdl2spr (was using texture width
	      in calculations where height should have been used).
23-Nov-2000
	- Martin Geisse did some clean-up work for dnapp.
	- Martin also fixed a bug in csIniFile which crashed when the
	  first line of the INI file was empty.
	- Wouter Wijngaards added support for keycolor to csImage.
22-Nov-2000
	- Martin Geisse made dnapp a console application and fixed a
	  minor bug in it.
21-Nov-2000
	- Eric Sunshine made the following changes to the Texinfo
	  documentation:
	    - Added several missing @menu blocks following Martin's most recent
	      reorganization.  The absence of these menus made navigation
	      rather difficult and non-obvious in the HTML output.
	    - Moved memdebug.txi from the "Building and Installing" chapter
	      to the "Internals" chapter.  (Sorry, Martin.  The dicussion of
	      a low-level diagnostic tool just did not seem appropriate for
	      a chapter about compilation and installation.)
	    - Repaired several Texinfo mark-up errors in libs/overview.txi,
	      contrib/porting.txi, and apps/overview.txi.
	    - Cleaned up a few other minor issues.
20-Nov-2000
	- Michael Dale Long removed last remnants of impulse code from
	  CrystalClear and also some dead CC plugins.
	- Eric Sunshine removed a bunch of files left over in the 'concepts'
	  directory after Martin moved them to 'plugins/engine'.
	- Eric Sunshine removed a duplicate @menu block from
	  plugins/chapter.txi.
	- Eric Sunshine fixed a bunch of Texinfo mark-up errors in win32.txi
	  and sound.txi.
	- Martin Geisse finished restructuring the docs by removing
	  the anatomy chapter.
	- Andrew Zabolotny fixed (once again) halo drawing for 32-bit
	  modes. Now only 64 levels of alpha map are used (vs 128 levels
	  before); this has absolutely no impact on 8- and 16- bit modes,
	  and very little impact on 32 bit modes (in fact, I wasn't able
	  to note any difference). Instead, it does not overflow now (after
	  my previous changes which have fixed the case when one of R,G,B
	  was bigger than 1.0d some other was less than 1.0).
19-Nov-2000
	- Martin Geisse did various documentation updates:
	    - Moved sections from the 'concepts' and 'anatomy' chapters of
	      the docs to the 'plugin' and 'libs' section.
	    - Added the 'internals' chapter to the docs and moved the
	      'makefile' section into it.
	    - Restructured the plugins section of the docs.
18-Nov-2000
	- Implemented alpha-channel support for software renderer
	  and DrawPixmap. This means that if you have a PNG image with
	  an alpha channel then it will be used for transparency.
	- Seth Galbraith fixed sqk1 world file for Squawk so that the
	  texture seams are gone.
17-Nov-2000
	- Norman Kramer did the following change:
	  VC doesnt like creating variable arrays on the stack. I changed
	  it to use new/delete.
16-Nov-2000
	- Martin Geisse did some updates to documentation.
	- Thomas Hieber provided the base implementation of gamecore
	  iEntity and iEntityComponentIterator is now done.
15-Nov-2000
	- Martin Geisse added streamed sound sources to ds3d module.
	  Output is still distorted but you can at least hear what it
	  should be like.
	- Seth Galbraith updated Squawk so that you can now control the
	  views simultaneously. Also added simplified keyboard controls
	  and todo list.
	- Thomas Hieber had another idea on how to make iEntity _really_
	  generic. I really think you can't make this class any simpler now.
	  I guess I should be able now to provide a simple and efficient
	  implementation for iEntity soon.
	- Andrew Zabolotny did the following:
	    - Fixed a bug in DrawPolygonFX introduced by my last changes,
	      caused by an minor `optimization' I've added near the end
	      after I rewrote it.  Reverted to non-`optimized' version,
	      works better and possibly even faster :-)
	    - Fixed a small bug in oblique button drawing: buttons with
	      width less than height (weird case) were incorrectly painted.
	    - Fixed a bug in G2D::ClipLine which causes infinite looping
	      in certain circumstances.
	    - Made csLayout a subclass of csDialog. This adds the following
	      bonuses to the layout class:
		- Layout can be a separate root window now, like a toolbar.
		  The ::Draw routine uses the skin capability, which means
		  layout background is now configurable through csws.cfg (along
		  with normal dialog background).  If you still want the old
		  behaviour, just set the CSS_TRANSPARENT flag and it won't
		  draw anything anymore.  This flag is automatically set for
		  level two layouts (e.g.  layouts inserted into another
		  layouts).
		- Tab and Shift+Tab cycling for components inserted in a
		  layout.
	    - Fixed Shift+Tab handling for all X canvases. On XFree86
	      (don't know about other X11 implementations) Shift+Tab is a
	      different keysym XK_ISO_Left_Tab. I have added that case,
	      protected by an #ifdef XK_ISO_Left_Tab.
	    - Added csMenu::SuggestSize to determine the optimal size for
	      a menu.
	    - Reorganized cswstest to make it less clumsy as new
	      widgets are added day after day. Now it consists of a empty
	      screen with a root menu, every action is chosen from that menu.
	    - Partially rewritten notebook widget since it used to reposition
	      its sub-widget components directly inside its ::Draw() method.
	      Now with the new redraw architecture it is illegal to resize
	      and/or reposition anything inside ::Draw, inside ::Draw you
	      just draw, that is.
	- Samuel Humphreys did the following:
	    - Cleaned up csview, now resizes box views properly again and now
	      polygon views.
	    - Added emacs fontification to boxclip.
	    - Experimental fix for G2D line clipper.  The layout widget freezes
	      in cswstest, caught in an infinite loop within the line clipper.
	      Tested on linux.	I presume the fuzz to fxmax and fymax was added
	      for some purpose...it seems to work better for me without it.
	- Eric Sunshine fixed an inconsistency with handling of reference
	  counts in LoadFont() in the csFont and FreeFont font servers.
14-Nov-2000
	- Eric Sunshine eliminated the obsolete crystalspace.sound.driver.null
	  entry from scf.cfg.
	- Thomas Hieber reworked the interface of iEntity, to make the design
	  much more modular and lightweight, without sacrificing any
	  funtionality and only little performance.  This change was inspired
	  by Jorrits description of the Entity System of Dreams Eternal.
	- Norman Kramer added triangulation of high order polygons when
	  creating a sprite (for model importer).
	- Norman also modified the wavefront (.obj) reader to recognize
	  texture information.
13-Nov-2000
	- Philip Wyett added /nodefaultlib:"LIBC" to template/plugin.tpl.
	- Eric Sunshine corrected the long standing misnomer where USE_PLUGINS
	  was incorrectly specified as USE_SHARED_PLUGINS.  Updated all
	  makefiles, scripts, and documentation to reflect this change.
12-Nov-2000
	- Eric Sunshine enabled automatic DSP generation for 3ds2lev.
	- Eric Sunshine removed the obsolete and unused CS/bin/build.pl script.
	  (It can always be recovered from the CVS Attic if someone wants to
	  revive it.)
	- Eric Sunshine fixed efed.pl and msvcgen.pl so that they open files in
	  "binary" mode to be Windows-correct; since these scripts treat a file
	  as a raw stream of bytes rather than as text.
	- Eric Sunshine updated the mechanism for generating Visual-C++ project
	  files so that it is now possible to individually specify extra
	  Windows-specific libraries, linker directives, and compiler
	  directives for any given project.  Details follow:
	    - Modified msvcgen.mak so that it now pays attention to the
	      following new makefiles variables when generating Visual-C++ DSW
	      and DSP files:
		- DSP.PROJECT.LIBS -- List of extra Windows-specific libraries
		  with which this module should be linked in addition to those
		  already mentioned in the template file for this project type.
		  A .lib suffix is automatically added to each item in this
		  list if absent.  Typically, libraries are only specified for
		  executable and plug-in projects.  This variable differs from
		  DSP.PROJECT.DEPEND in that it refers to libraries which exist
		  outside of the project graph (such as wsock32.lib or
		  opengl32.lib), whereas DSP.PROJECT.DEPEND always refers to
		  modules which are members of the project graph.
		- DSP.PROJECT.LFLAGS -- Specifies extra Windows-specific linker
		  options which should be used in addition to those already
		  mentioned in the template file.  Typically, linker options
		  are only specified for executable and plug-in projects.  Keep
		  in mind that these flags are passed through the (Bourne)
		  shell during the project file generation process, thus it may
		  be necessary to specially protect any embedded quote
		  characters.
		- DSP.PROJECT.CFLAGS -- Specifies extra Windows-specific
		  compiler options which should be used in addition to those
		  already mentioned in the template file.  Keep in mind that
		  these flags are passed through the (Bourne) shell during the
		  project file generation process, thus it may be necessary to
		  specially protect embedded quote characters.
	    - Added a copious amount of new documentation to msvcgen.mak
	      explaining the entire spectrum of variables and information which
	      it imports, along with the files and makefile targets which it
	      exports.
	    - Added new command-line options --library, --lflags, and --cflags
	      to msvcgen.pl.  The arguments to these options are used as
	      replacement values for the new template variables %libs%,
	      %lflags%, and %cflags%, respectively.
	    - Incorporated the new template variables %libs%, %lflags%, and
	      %cflags% into the template files appcon.tpl, appgui.tpl,
	      group.tpl, library.tpl, and plugin.tpl.
	    - Added DSP.GL3D.LIBS and DSP.GLWIN32.LIBS to glrender.mak and
	      glwin32.mak, respectively, and set the value of each to
	      "opengl32.lib glu32.lib".
	    - Added DSP.FREEFONT.LIBS to freefont.mak and set its value to
	      freetype.lib.
	    - Removed wsock32.lib from plugin.tpl.  This library is now
	      mentioned explicitly by DSP.SOCKET.LIBS and DSP.CSNETMAN.LIBS,
	      instead.
10-Nov-2000
	- Samuel Humphreys did some fixes for bit rot in the procedural
	  textures and prepared for dumping dtsimple.
	- Samuel removed dtsimple and replaced it with ptlab which is
	  a more object oriented version of dtsimple.
	- Fixed solaris.mak because it suddenly appears needed to
	  compile oglempty for OpenGL.
	- Martin Geisse changed the DirectSound renderer to use the new
	  sound interfaces.
	- Norman Kramer fixed the sound software renderer so that it decref's
	  the sounddriver at destruction.
9-Nov-2000
	- Small type problem in ogl_halo.cpp (GLuint instead of GLenum for
	  blend mode).
	- Eric Sunshine made a small correction to canvas.mak in response to a
	  bug report from Jorrit regarding glx2d.mak's failure to correctly
	  build files from the canvas/openglcommon directory following Eric's
	  major makefile changes on 6-Nov-2000.	 I (Eric) can not actually test
	  this fix, but I think that it should correct the problem.  It was a
	  vpath issue.	The Glide canvases were probably also broken in the
	  same fashion.
	- Martin Geisse restructured the sound modules.
8-Nov-2000
	- Andrew Zabolotny did the following changes:
	    - Fixed the SIGSEGV at program exit when OpenGL driver is used
	      due to font cache callback being called after the font cache
	      object was destroyed in iG2D::Close().
	    - Fixed halo drawing in OpenGL. It seems like halos in OpenGL
	      never worked because backface culling was enabled in hardware,
	      and the halo polygon was defined anti-clockwise (in OpenGL
	      coordinates).
	    - Fixed a very old bug in software halo drawing. The color
	      components sometimes were incorrectly clamped; this was
	      noticeable when one of the components was > 1.0 and others
	      were < 1.0 (e.g. 2,0,0). Alas, this slows down halo drawing
	      a little.
	    - Made halo brightening/fading speed independent of frame rate.
	      Currently halo fades in steps of 0.05 every 20msecs, this
	      means a complete transition from intensity 0 to intensity 1
	      (or vice versa) occupies about 400 msec, e.g. 4/10 seconds.
	    - Added limited support for 2*SRC halos (e.g. halos with R,G,B
	      > 1.0) in OpenGL renderer. However I wasn't able to add 100%
	      correct support for it; software renderer still does it
	      better. However results looks approximatively similar,
	      although software halos are brighter.  Maybe someone with
	      better knowledge of OpenGL can fix it; I don't have OpenGL
	      docs handy right now. The basic formula for computing a
	      pixel with halos in theory (and in software renderer) is:
		output_color = src_color * alpha + dst_color * (1 - alpha).
	      This results in normal glBlendFunc (GL_SRC_ALPHA,
	      GL_ONE_MINUS_SRC_ALPHA).	However, for case when
	      src_color > 1.0 OpenGL will clamp the color to 1.0 thus
	      producing incorrect results. To circumvent this, if renderer
	      detects that at least one component is greater than 1.0, it
	      divides every color component by two, and uses the following
	      blending function: glBlendFunc (GL_SRC_ALPHA, GL_ONE);
	      This is not mathematically correct, however it gives similar
	      visual results except that "bright" halos are still darker
	      than those from software renderer.
	    - Separated most halo-related code into a new file called
	      libs/csengine/light/halo.cpp.
	    - Finished hint objects in CSWS.
	    - Added hints to most buttons in MazeD. Move the mouse above
	      some button on a toolbar and wait three seconds to see a
	      short description of this button.
	    - Fixed iSystem::UnloadPlugin() so that plugin is correctly
	      unloaded if it implements the iConfig interface (plugin's
	      options are removed as well).
	    - Added support for keypad '+', '-', '/', '*' and center
	      keys to all X11 canvas drivers.
	    - Fixed a bug in event cords which caused hotkeys to not work
	      in MazeD (and keyboard accelerators in general).
	    - Fixed an accuracy problem with line drawing (actually two).
	    - Fixed the problem with $" and $| introduced after Eric's
	      last changes.  The problem was that on some systems with
	      non-Unix-like shells (e.g. OS/2) " is defined to empty, thus
	      `ifdef "' branch was taken.  Now " and | are defined prior
	      to including config.mak from cs.mak, exactly same way as it
	      works from root makefile.
7-Nov-2000
	- Fixed a bug to csSprite3D::HitBeamObject(). It was taking the
	  wrong frame from the sprite to do the collision detection with.
	- Norman Kramer fixed the glide canvas makefiles after Eric's changes
	  yesterday.
6-Nov-2000
	- Eric Sunshine made the following changes to the project:
	    - Visual-C++ DSW and DSP project files are now automatically
	      generated and updated.  Information gleaned from GNU makefiles,
	      project-wide, is used to synthesize DSW and DSP files on-the-fly.
	      The project file synthesis procedure attempts to enforce the
	      invariant that if a module builds correctly via the GNU makefile,
	      then the same module should build correctly via the Visual-C++
	      project file which was built from information gleaned from the
	      makefile.	 Thus, the headache associated with manual maintenance
	      of the Visual-C++ project files should be a thing of the past.
	    - Added a new directory, CS/mk/msvcgen, in which all resources
	      related to automatic generation of Visual-C++ project files
	      reside.
	    - Added msvcgen.pl, which is a Perl script capable of generating
	      Visual-C++ DSW and DSP files based upon input arguments and a set
	      of template files.  The script accepts a useful array of options
	      for controlling several aspects of the synthesis process, and is
	      also independent of Crystal Space, thus it may be useful in other
	      arenas as well.  A copious amount of documentation related to the
	      generation of DSW and DSP files, including a description of the
	      special variables which may appear in template files, may be
	      viewed by invoking msvcgen.pl with the --help option.
	    - Added the directory CS/mk/msvcgen/template, which contains
	      template files used by msvcgen.pl during the synthesis of
	      Visual-C++ DSW and DSP project files.  The master level templates
	      are appgui.tpl, appcon.tpl, group.tpl, library.tpl, and
	      plugin.tpl, which represent the five different types of DSP files
	      which can be generated.  These templates are supplemented by the
	      template-include files dspgroup.tpi and dspfile.tpi, which
	      combine to form resource groups within each DSP.	The master
	      level template dsw.tpl is used for synthesizing DSW files and is
	      supplemented by dswgroup.tpi and dswdep.tpi, which combine to
	      form dependency groups within the DSW.  Refer to the --help
	      output of msvcgen.pl for a description of the special variables
	      which may appear in each of the template files.
	    - Added msvcgen.mak, which is the Crystal Space-specific makefile
	      responsible for generating, and optionally installing, Visual-C++
	      DSW and DSP project files.  It performs this task by gleaning
	      information from GNU makefiles throughout the project and then
	      invoking msvcgen.pl with the appropriate arguments to synthesize
	      each DSP file represented by a makefile, as well as the master
	      DSW file, csall.dsw.  Also added the supplemental makefiles
	      win32.mak and required.mak.  The first, win32.mak, contains
	      additional Windows-specific DSP targets (such as grpall,
	      grpplugins, libcswin32dll, etc.) which are not otherwise
	      represented by makefiles.	 The second, required.mak, supplements
	      the normal PLUGINS makefile variable with a list of modules for
	      which DSP files must be generated regardless of the platform
	      which is performing the project file generation procedure.  This
	      allows any platform (such as Unix) to generate the complete set
	      of Visual-C++ project files.
	    - Added two makefile targets which are specific to Visual-C++
	      project file generation and installation.
		- 'msvcgen' builds the entire set of DSW and DSP files
		  represented by the GNU makefiles, project-wide.  The
		  generated files are placed in CS/out/mk/visualc.
		- 'msvcinst' copies the DSW and DSP files from
		  CS/out/mk/visualc to their official location at
		  CS/mk/visualc.  Furthermore, this target instructs the user
		  as to exactly which CVS commands must be invoked in order to
		  properly commit the newly generated files to the CVS
		  repository.  For instance, if a new plugin named "foo" is
		  added and an old library named "bar" is dropped, the
		  'msvcinst' target will instruct the user to invoke the
		  commands "cvs add -kb plgfoo.dsp", "cvs remove libbar.dsp",
		  and "cvs commit" in order to make the changes permanent.  The
		  'msvcinst' target automatically invokes the 'msvcgen' target,
		  so the synthesis and installation procedures can be performed
		  as one operation.
	    - Added support for automated Visual-C++ DSW and DSP project file
	      generation to all of the GNU makefiles, project-wide.  Project
	      file synthesis is performed by gleaning the values from some
	      existing makefile variables as well as some newly added ones.  In
	      the following discussion, assume that "PROJECT" is the core name
	      of the module represented by a particular makefile.
		- In addition to the existing makefile variable SRC.PROJECT,
		  the following new general-purpose variables were added to
		  support Visual-C++ project file creation:
		    - INC.PROJECT -- Complements SRC.PROJECT, but lists header
		      files related to this project.
		    - DEP.PROJECT -- Although this variable already existed in
		      some makefiles, its meaning has been altered slightly.
		      The value of this variable is the list of projects
		      (typically library projects) upon which this module
		      depends.	Each item in this list is the core name of some
		      other module, such as "CSGEOM", "CSUTIL", or "CSSYS".
		    - LIB.PROJECT -- This variable now assumes the roll which
		      DEP.PROJECT used to play in some makefiles.  It lists the
		      libraries upon which this module depends.	 The value of
		      this variable is normally derived automatically from
		      DEP.PROJECT, but may be specified manually in very
		      special cases if necessary (though doing so is frowned
		      upon).  If specified manually, each entry should be of
		      the form "$(PROJECT.LIB)".
		    - CFG.PROJECT -- List of configuration files related to
		      this module.
		- Furthermore, the following new variables specifically control
		  DSW and DSP project file creation.  These variables should
		  only appear in makefiles for which a corresponding DSP file
		  should be generated.
		    - MSVC.DSP -- This is the master list of modules for which
		      project files should be generated.  Entries must be
		      *appended* to this list with the "+=" operator.  Each
		      entry is the core name of a module as used within its
		      makefile.	 For example, soft3d.mak, ensures that a
		      project file is created for the 3D software renderer by
		      invoking "MSVC.DSP += SOFT3D".
		    - DSP.PROJECT.NAME -- Base name (such as "soft3d") for the
		      generated project and target.  This name is used to
		      compose the DSP file name, the end target (such as
		      "soft3d.dll"), and the displayed project name in the
		      Visual-C++ IDE.  In general, it should be identical to
		      the base name of the target which is generated for
		      non-Windows platforms.
		    - DSP.PROJECT.TYPE -- The module's type.  It should be one
		      of "appgui", "appcon", "library", "plugin", or "group",
		      which stand for GUI application, console application,
		      static library, plug-in module, and pseudo-dependency
		      group, respectively.
		    - DSP.PROJECT.RESOURCES -- Lists any extra human-readable
		      resources related to this module which are not covered by
		      CFG.PROJECT.  These resources may be browsed in the
		      Visual-C++ IDE as a convenience to the user.  Some good
		      candidates, among others, for this variable are files
		      having the suffixes .inc, .y (yacc), .l (lex), and .txt.
		    - DSP.PROJECT.DEPEND -- Lists extra dependencies for this
		      module.  Entries in this list have the same format as
		      those in the DEP.PROJECT list.  This variable is
		      generally only used for pseudo-dependency group projects
		      (see win32.mak).
	    - Renamed docproc.pl to jobber.pl and modified it to also rebuild
	      and commit Visual-C++ DSW and DSP project files in addition to
	      its normal duties of rebuilding and publishing project
	      documentation.  The script is automatically invoked twice daily.
	      As always, the script is smart enough to add new project files,
	      and remove obsolete project files from the CVS repository in
	      addition to committing those which were only modified.  It also
	      takes special are to use the "-kb" option when adding Visual-C++
	      project files to the repository in order to preserve the CRLF
	      line terminators (which Microsoft requires).  Also, when scanning
	      directories to determine which files to add and remove from the
	      repository, ".cvsignore" files are now ignored (along with all
	      other CVS administrative files which have always been ignored).
	    - Performed significant unification and clean-up of makefiles
	      throughout the project.  Simplified several makefiles which had
	      unnecessarily complicated innards.  Also added missing makefiles:
	      snda3d.mak, sndds3d.mak.
	    - Changed suffix of OpenGL extension-detection files from .cpp to
	      .inc since they are use as include-files rather than stand-alone
	      sources.	Also performed much clean-up of these files.
	    - The standard system-dependent makefiles now define the additional
	      utility command definitions CD, PWD, and PERL (in addition to
	      other existing definitions such as RM, MV, CC, etc.).  The
	      default definitions are specified in unix.mak and dos.mak.
	    - The makefile fragment common.mak now specially defines $" and $|
	      if they are not already defined.	This allows recursive 'make'
	      invocations to use these variables with "echo" commands within
	      targets in exactly the same way as top-level makefile targets can
	      do so.
	    - Fixed the makefile 'clean' targets of all library modules so that
	      they also remove the generated dependency (.dep) file.  (Other
	      makefiles around the project had already been repaired in this
	      manner.)
	    - Removed obsolete memory-debugger support from cssys.mak.	Andrew
	      had removed the remainder of this cruft from the rest of the
	      project on 2000/10/30 but missed cssys.mak.
	    - Added better documentation and more correct protection to ddg.h's
	      inclusion of cssysdef.h.
	    - Removed references to obsolete "null" sound driver from makefiles
	      and documentation.
5-Nov-2000
	- Norman Kramer added comments to layout classes in CSWS.
3-Nov-2000
	- Brandon Ehle added the INCLUDESPRITE command in the world
	  file so that external sprite templates can be included. By default
	  the extension for these is .css.
	- Andrew Zabolotny fixed font drawing in OpenGL canvas (this was
	  not my bug, it is a very old bug - glBindTexture() cannot be
	  invoked between glBegin() and glEnd() -- it just happened my
	  changes to trigger that bug, previously it was triggered by fonts
	  occupying more than one texture).
	- Andrew Zabolotny also tried to fix OpenGL halos but failed: I'm
	  not sure, maybe the software OpenGL I have here does not support
	  alpha textures properly. Will continue at home with TNT2.
2-Nov-2000
	- Andrew Zabolotny did the following changes:
	    - Replaced the csInsets object with the standard CSWS rectangle
	      csRect.
	    - Replaced the csVector2 with a new small class csPoint. There
	      is no need to use csVector2: first it uses floats for x,y
	      and second it pulls a lot of unneeded code from csgeom.
	    - Made csLayout a fully transparent class (CSS_TRANSPARENT).
	      Now the real window background is seen through the layouts,
	      e.g. try "cswstest -skin=Colorful".
	    - Re-indented code to match better CS coding standards.
	- Robert Bate did some fixes on the Macintosh port.
1-Nov-2000
	- Wouter Wijngaards reintroduced ReadFntFile from csfont.cpp. This
	  function had disappeared by a previous change from Andrew.
31-Oct-2000
	- Philip Wyett fixed the CSWS VC project file after Andrew's
	  changes.
	- Added csSprite3D::GetWorldBoundingBox() to get an inaccurate
	  bounding box of the sprite in world space.
	- Added csSprite::HitBeam() and HitBeamObject() which hit a beam
	  with a sprite. It will return true if the sprite is hit and it
	  will also return the intersection point. HitBeamObject() works
	  in object space while HitBeam() works in world space.
	- Added csSector::HitBeam() which is similar to the already existing
	  HitBeam but this version returns the first object that is hit.
	  So it also looks at sprites. The original HitBeam() only looks
	  at things and sectors. For particle systems and 2D sprites this
	  function will currently always return false. This is something
	  to be implemented. Note that this function will first test the
	  bounding box of the sprite for an easy reject. So that's fast. But
	  if this test succeeds then it will test every triangle of the
	  current frame. This is not very fast but it is accurate. In
	  the future this function might change to do this with a lower
	  LOD version of the sprite instead.
	- Extended csIntersect3::BoxSegment() with an optional 'r' parameter
	  so that you can get a number between 0 and 1 indicating where
	  in the segment the intersection happened. Also fixed this function
	  so that it will return a correct value for 'isect' if the start
	  of the segment is in the box. This return was undefined before.
	- Added csIntersect3::IntersectTriangle() to intersect a segment
	  with a triangle.
	- Eric Sunshine fixed a number of compilation problems throughout
	  the project which were reported by Visual C++.
	- Eric Sunshine fixed 'simple' so that it once again works correctly
	  with csConsole following Andrew's changes.
30-Oct-2000
	- Two fixes to csws. Andrew: you forgot SYSDEF_ALLOCA and
	  also default parameters cannot be repeated in the cpp file.
	- Norman Kramer fixed dtsimple after Andrew's changes.
	- Norman also fixed ttf2fnt, glide, and svgalib.
	- Eric Sunshine fixed a compilation problem in csfont.
	- Eric also fixed null and line renderers so that they compile
	  with VC5.
	- Andrew Zabolotny did the following changes:
	    - Fixed a bug in default window theme that caused background
	      texture to not be drawn if the window is not semi-transparent.
	    - Fixed (I hope this is the last fix) clipping so that in very
	      complex window configurations CheckDirtyTD and CheckDirtyBU are
	      called as much times as required (until nothing changes).
	    - Added gradient backgrounds!  In general background for all skins
	      is now one csBackground object which accepts one of the following
	      modes: textured, gradient, flat-color, none (default flat color
	      from CSWS).  Gradients can be horizontal (two rgb values),
	      vertical (two rgb values) and four-corner (four rgb values).
	    - Fixed DrawPolygonFX in software renderer which works incorrectly
	      for more than three-vertex polygons (it did not take into account
	      neither z,u,v,r,g,b values for the fourth, fifth, ...  vertices
	      of the polygon).	It is a bit more costly now (one division per
	      scanline) but that's the price we have to pay for correct
	      drawing...
	    - Modified cswstest to be able to change skins at runtime.	You can
	      either set the [CSWS] Skin.Variant = ...	option in main config
	      file, or use the "-skin=..." command line option.	 The skin
	      variants themself are defined in csws.zip file; for example use
	      -skin=Colorful for a demonstration of gradient background
	      textures; -skin=Marble for a marble-texture-background skin
	      variant.
	    - Fixed back the awful behaviour introduced by someone: when a
	      drop-down submenu is visible, and the parent menu hides, the
	      submenu stays visible.
	    - Re-formatted and commented (doc++ style) the csGrid class.
	    - Re-implemented font server interface from scratch.  Added the
	      iFont interface.	Any font is an iFont object now.  You pass the
	      iFont object to iGraphics2D for drawing characters.  The font
	      server is not anymore a class private to the canvas driver; it is
	      a public plugin like most others.	 You can avoid using a font
	      server at all, if you aren't going to type text through
	      iGraphics2D::Write().  This implies some need for rewriting code
	      outside CVS that deals with fonts.  The basic rules are:
		- Instead of using csFontCourier, csFontTiny etc you should
		  `load' the font first.  You can do it this way:
		    iFontServer *fs = G2D->GetFontServer ();
		    iFont *courier = fs->LoadFont (CSFONT_COURIER);
		    iFont *police = fs->LoadFont (CSFONT_LARGE);
		    iFont *italic = fs->LoadFont (CSFONT_ITALIC);
		    iFont *tiny = fs->LoadFont (CSFONT_SMALL);
		  Note the new names for the fonts (you can find them in
		  ifontsrv.h).
		- Then you use the iFont object to query text width, height
		  etc:
		    int fw, fh;
		    font->GetDimensions ("Hello world", fw, fh);
		    font->GetMaxSize (fw, fh);
		    ...
		- The only method in G2D that accepts an iFont object is
		  Write():
		    G2D->Write (font, x, y, fg, bg, "Hello world!");
		  All other font-related methods (e.g.	SetFontID, GetFontID,
		  GetTextWidth and so on) are gone (mostly moved to iFont).
	    - Changes in CSWS due to above font server change:
		- TextWidth() and TextHeight() are gone.  Instead there is a
		  new method called int GetTextSize(char *, int *) which
		  returns the width of given text and possibly height (if
		  second argument is not NULL).
		- Added a new csComponent method - int GetTextChars(char *,
		  int) which will return how much characters if written with
		  current font will fit in given width.
	    - Added "floating hints" capability to CSWS. These hints can be
	      attached to absolutely any csComponent's; if the mouse stays
	      unmoved over such an component for more than three seconds
	      (adjustable) a new csHint object is created. As soon as you
	      touch mouse or keyboard (or joystick :-) the hint will vanish.
	      These hints helped to find a lot of errors in clipping
	      algorithm related to clipping of foreign "clip childs"; this
	      was not tested very good because of limited use of "clip
	      childs". csHint objects are direct childs of the objects the
	      hint is attached to, but they are "clip childs" of the csApp
	      to avoid being clipped by parent object. Not complete yet
	      (the size for hints is arbitrary right now :-)
	    - Added some debug capabilities to SCF. You can add
	      #define SCF_DEBUG at the top of certain SCF module and you will
	      see (via printf()) all the IncRef's, DecRef's, class
	      initializations and so on. On GCC > 2.8.0 it also types the
	      address the methods were called from, use GDB's "l *address"
	      command to find out what file/line/function corresponds to
	      given address.
	    - Added to VFS the ability to translate VFS paths into real
	      filesystem paths. This works only for non-archive files. This
	      is means as a last-resort for libraries that can't handle
	      VFS directly (e.g. freetype can load fonts only from
	      real-world files). If the VFS path refers to multiple paths,
	      all of them will be searched for the existence of given path
	      or filename. If the file is non-existent, the first one will
	      be returned.
	    - Ooops. Fixed a "bug", or rather an unimplemented yet feature.
	      For some reason I was under impression that VFS understands
	      expressions like: $(VAR:text), e.g. "get the value of VAR, if
	      it is not defined, use the "text". It did not, now it does.
	      It even should understand very complex things like:
	      $(VAR1:VAR2:VAR3:sometext$(VAR4:plaintext)othertext)
	    - Removed the last traces of the old memory debugger from
	      makefiles and support/debug/memory,(h|cpp)
	    - Added correct window resize support to GLX canvas.
	      Re-implemented font support in GLX driver; now it will work
	      even if you load fonts at runtime (old "glfontserver" code
	      was able to display only fonts that are available at program
	      startup, e.g. built-in fonts from font server). Now there is
	      a "font cache" object which loads and frees fonts on demand.
	    - Added runtime full-screen switching via Alt+Enter for the
	      following X11 drivers: x2d, linex2d, glx.
	    - Fixed "double-backbuffer" support in OpenGL canvases. All
	      OpenGL canvases do NOT support double backbuffer mode. Note
	      that "double backbuffer" is NOT the same as "double buffer",
	      these are completely different things. All CS canvases should
	      support double-buffering for smooth animation, while they may
	      or may not support double-backbuffer mode, mainly for
	      performance reasons.
28-Oct-2000
	- Changed iCollideSystem::Collide to accept 'const' transform
	  pointers.
27-Oct-2000
	- Added GetSector(idx) to the swig interface file (cs.i) so that
	  Python scripts can use it.
	- Eric Sunshine made the following changes to efed.pl:
	    - Fixed bug: Was ignoring files mentioned on the command-line and
	      only processing directories.
	    - Addressed shortcoming: Was not applying --rename patterns to
	      directory names.
	    - Added filename suffix convenience to --rename.  Now
	      automatically translates 'old=new' or 'old:new' to the
	      expression 's/\.old$/\.new/' to change the filename's suffix
	      from '.old' to '.new'.
	    - Added --quiet option.
	    - Worked around differences between Perl versions in
	      File::Basename::fileparse().  Some versions return the directory
	      portion of a path as '.', whereas others return './' for a path
	      containing only a filename.
26-Oct-2000
	- Norman Kramer made these changes to the CSWS layout managers:
	    - Added suggestsize to inputline and listbox.
	    - Fixed disappearing elements in gridbaglayout.
	    - Now uses the original size of the component and not the one
	      after last resize.
25-Oct-2000
	- Brandon Ehle disabled console printing for the python script plugin.
24-Oct-2000
	- Philip Wyett eliminated a compiler warning in
	  csFlowLayout::SuggestSize().
	- Andrew Zabolotny did the following change: Made the
	  csArchive::Write() method a lot faster in the case when you did not
	  specify the max file size when you opened the file for writing, by
	  the following means:
	    - The buffer size is increased in 1K blocks rather than
	      adding just the size of appended block. This means the
	      memory will be allocated just once per many calls (in the
	      case you're writing in small chunks) rather than doing
	      one memory allocation per call (which is VERY slow).
	    - Using realloc() instead of new[] and memcpy() which also
	      should increase the speed a lot on platforms with properly
	      implemented realloc().
	  Now writing files into archives in small chunks (e.g. PVS) should
	  work a lot faster (same speed as csMemFile).
23-Oct-2000
	- Norman Kramer added various layout managers for CSWS.
	- Norman Kramer added an example for the layoutmanager to cswstest.
20-Oct-2000
	- Andrew Zabolotny reverted his previous change to vfs.mak. Instead
	  he has fixed win32gcc.mak. DO.SHARED.PLUGIN should contain
	  a reference to $(LIBS). This was not the case for win32gcc.
	- Andrew Zabolotny fixed the dependency file name from "waveout.dep"
	  to "wos.dep".
	- Set minimum canvas size for X to 32x32 instead of 320x200.
	- Eric Sunshine made the following changes to the installation target:
	    - csengine.mak is no longer responsible for vfs.cfg and scf.cfg.
	    - Installation of vfs.cfg is now controlled by vfs.mak.
	    - Installation of scf.cfg is now controlled by csutil.mak (since
	      SCF is currently part of csutil).
18-Oct-2000
	- Thomas Hieber did some fixes to cctest for MSVC.
	- Andrew Zabolotny did the following changes:
	    - Fixed a small bug in csRect::Exclude() that was there for a
	      very long time. Effectively it caused CSWS to do some extra
	      work when resizing windows by dragging their bottom margin.
	    - Fixed a bug in iG2D::DrawPixmap() when drawing
	      alpha-transparent non-tiled textures.
	    - Found and eliminated a clash between ex-cscmdRedraw and
	      cscmdAreYouDefault. Ooops. I believe this caused a lot of
	      unneeded redraws before.
	    - Changed substantially the clipping subsystem in CSWS. Now it
	      could be even faster, besides it allows now semi-transparent
	      windows to be repainted correctly. Previously it did not care
	      how many times the window redraws; not it allows every dirty
	      window to repaint exactly once, thus excluding visual artifacts
	      that existed before with semitransparent components.
	      The current clipping algorithm is much more sophisticated
	      and tries hardly to minimize the number of dirty regions;
	      it tests for much more complex cases (e.g. a opaque button
	      in a transparent window inserted into another component
	      covering, say, a button inserted into desktop will completely
	      avoid redrawing the desktop button).
	    - Fixed all the X11 drivers so that the "csmcNone" mouse cursor
	      is really empty. Previously it was an uninitialized 1x1
	      pixmap, which sometimes was visible like a black pixel.
	    - Had a flash about making clipped drawing in CSWS a lot
	      faster. Now before every Draw() method being called, the
	      Redraw() method caches a "visible region" which is
	      effectively just a set of rectangles. Then every draw
	      operations just clips against this set of rectangles (if
	      we're lucky, we'll have just one rectangle in the visible
	      region (e.g. for top windows), thus doing just one
	      clip-against-rectangle operation) rather than clipping every
	      graphic primitive against all childs, neightbours, parent's
	      neighbours and so on in the window hierarchy. MazeD should
	      gain a lot from this since for complex models it performs a
	      lot of line and pixel drawing.
	      As a side effect any drawing outside the ::Draw() method will
	      not work (it will be "clipped away" because the visible
	      region cache will be empty at that time). This is not a
	      problem, and if turns to be so it could be solved (but I
	      would prefer not to).
17-Oct-2000
	- Andrew Zabolotny fixed a rather inserious bug which caused
	  out-of-bounds values to be accessed from the "shadows" array.
	  However, the retrieved value was not used (when it's out of
	  bounds). This was caught by recent addition of CS_ASSERT into
	  csVector::Get().
16-Oct-2000
	- Martin Geisse fixed some compiler warnings.
	- Martin updated the MSVC project files.
	- Changed the meaning of csBox3::GetEdge so that it more conforms to
	  the new indices defined in GetEdgeInfo().  Added a second variant of
	  GetEdge which fills in a given csSegment3 structure.
	- Also did similar things to csBox2 (i.e. add GetEdgeInfo(), GetEdge(),
	  ...).
	- Fixed 3ds2lev texture mapping. I think it now works correctly.
	- Eric Sunshine fixed a Texinfo error in beos.txi which was reported
	  by 'makeinfo'.
	- Eric Sunshine fixed some out-of-date information and discussion in
	  simple.txi.
	- Eric Sunshine fixed a number of mark-up problems and other errors in
	  csws.txi.  Also eliminated 'overfull hbox' errors reported by TeX.
	- Eric Sunshine fixed an out-of-date URL in the map2cs tutorial.
	- Eric Sunshine fixed out-of-date URLs for Win32 resources in
	  extlibs.txi.
15-Oct-2000
	- Added csBox3::GetEdgeInfo() and GetFaceEdges() which can be
	  used to extract winged-edge information from a csBox3.
	- Michael Dale Long did a big CrystalClear update. Most of it is
	  related to moving CC away from impulses and towards using csEvent.
	  csEventCords is in this update as well. cctest input changes
	  are in this commit as well.
	- Norman Kramer solved the walktest problem with the 12 remaining
	  instances of colldet at exit.	 When a thing deletes its attached
	  objects it calls their destructors, wentity destructor itself
	  removed  _this_ object from parent and shifted others down.
	- Norman added a curve_templates member to the world. Parser
	  now saves the loaded templates there (until now it forgot about
	  it and never freed memory for them).
	- Norman closed three memory leaks in sector.cpp and particle systems.
	- Norman added a proper DecRef to iSoundData in csparser.
14-Oct-2000
	- Norman Kramer added initialization of BackTex member in csws, now
	  cswstest works again (window background look good).
	- Further work on leaf BSP builder in LevTool. Finished BSP
	  builder and started work on portalizer.
13-Oct-2000
	- Martin Geisse improved the sound loading function of csparser.
	- Martin also updated the MSVC project files.
	- Eric Sunshine made the following maintenance changes to the BeOS
	  port:
	    - Repaired so that it once again compiles and works following the
	      many core-level changes to the project over the last three months
	      when this port was idle.	Now works with BeOS 5.
	    - Worked around a compiler optimization bug caused by
	      'schedule-insns2' which resulted in QInt() returning completely
	      bogus values when called from csGraphics2D::DrawLine().  This bug
	      crashed any program which drew lines, such as g2dtest, but was
	      particularly damaging to CSWS.
	    - Eliminated iBeLibSystemDriver (icsbe.h) interface.  BeOS system
	      driver now implements iSystem::SystemExtension() instead.	 All
	      communication from plug-in modules is now done via
	      SystemExtension() rather than iBeLibSystemDriver.
	    - Works with new iEventPlug/iEventOutlet mechanism.	 Implements
	      iSystem::GetPotentiallyConflictingEvents() and
	      QueryEventPriority().  The system driver now instantiates an
	      iEventOutlet specifically for keyboard and mouse events generated
	      by the canvasses.	 These events are handed to the system driver
	      from canvasses via SystemExtension().
	    - Rewrote keyboard handling to work with Andrew's new
	      "International Keyboard Encoding" support.
	    - Added the new findlib.cpp and the newly mutated getopt.cpp from
	      libs/general/cssys to SRC.SYS_CSSYS in beos.mak.
	- Eric Sunshine performed another semi-major overhaul of the BeOS port:
	    - Re-organized the threading model.	 Previously, Crystal Space
	      would run in the main thread until the first time iSystem::Loop()
	      was called.  At that point, the BeOS application loop began
	      running in the main thread, and Crystal Space was shuffled over
	      to a sub-thread.	This was a somewhat complex model.  Under the
	      new implementation, Crystal Space always inhabits the main thread
	      and the BeOS application loop runs in the sub-thread.
	    - Furthermore, the BeOS application thread is now spawned and
	      BApplication::Run() invoked much earlier.	 Previously this task
	      occurred when iSystem::Loop() was first called.  Now the
	      application thread is spawned and run as soon as the first window
	      is created.  This allows the application and window to begin
	      responding to events, such as window-exposed events, even before
	      Crystal Space has entered its own run-loop.  Canvasses now
	      request a "BeginUI" extension via iSystem::SystemExtension() to
	      trigger the invocation of the BeOS application's run-loop.
	    - Access to the Crystal Space event queue is now entirely
	      thread-safe.  Previously, the event queue was accessed from both
	      the Crystal Space thread and the BeOS application thread.	 All
	      messages which are generated by the BeOS application thread are
	      now placed into a thread-safe message queue which is processed by
	      the Crystal Space thread in SysSystemDriver::NextFrame().	 This
	      applies to mouse and keyboard events as well as other
	      pseudo-events such as those generated by the closing of a window
	      or an application termination request.
	    - Eliminated the custom BApplication subclass (CrystApp).  All
	      functionality which was previously handled by CrystApp is now
	      handled directly by SysSystemDriver.  The system driver now also
	      inherits from BHandler and registers itself as the BApplication's
	      preferred message handler.  This allows the system driver to
	      receive and act upon the standard BeOS messages without having to
	      employ a custom BApplication subclass.
	    - SysSystemDriver now only instantiates a BApplication if one has
	      not already been instantiated.  Along with the obsolescence of
	      CrystApp, this allows BeOS-specific Crystal Space clients to
	      easily employ custom BApplication subclasses rather than being
	      locked into CrystApp, which was entirely private.
	    - Fixed the BeOS 2D canvas and Glide canvas so that they implement
	      BView::Draw().  This gives them the ability to redraw any portion
	      of the window when requested by BApplication, such as on a
	      'expose' event when a portion of the window which was occluded
	      becomes exposed.	The OpenGL canvas always had this capability.
	    - Canvasses now respect the 'area' argument passed to
	      iGraphics2D::Print().
	    - BeOS-specific csosdefs.h now manually works around problem with
	      redefinition of MAX() and MIN() in <sys/param.h> rather than
	      relying on source code to include headers in proper order.  This
	      was needed on account of csbe.h now including BeOS headers since
	      the BeOS system driver inherits from BHandler and directly embeds
	      a BMessageQueue.
	    - Removed the BeOS-specific "anatomy" discussion from the Crystal
	      Space Manual (anatomy/platform/beos.txi).	 This document was
	      originally written by David Huen to explain some of the
	      operations of the BeOS system driver and the BApplication
	      subclass CrystApp.  However, following the current overhaul, the
	      document was no longer accurate in any way.  In fact, its
	      accuracy had slowly eroded over time, anyhow.  Moved the Bugs and
	      To-Do lists from this document into the BeOS installation
	      document (build/platform/beos.txi).
	- Eric Sunshine made the following changes to the BeOS Glide driver:
	    - Finally brought the BeOS Glide 2D driver (canvas) up to speed (as
	      much as possible).  This driver has languished in a completely
	      broken state for a very long time, and has certainly been broken
	      since my original major overhaul of the BeOS port some time ago.
	      The driver is untested since I do not have the proper hardware,
	      but it does compile.
	    - Fixed several problems with the BeOS Glide canvas makefile.  Also
	      fixed the 'depend' target.  Fixed the BeOS system makefile to
	      automatically configure Glide if present on the development
	      system.
	    - Unified the SCF name of BeOS Glide canvas to match the format of
	      names of other Glide canvasses.  Added 'glidebe2d' to scf.cfg.
	    - Updated documentation to reflect that the Glide driver now
	      compiles but is untested.	 Previously, documentation only stated
	      that it was entirely broken.
	- Eric Sunshine made the following changes to the shared Glide
	  implementation:
	    - Eliminated compilation warnings in glide/glcache.cpp and
	      glide/glhalo.cpp about variables used uninitialized.
	    - Fixed Glide renderer makefiles so that it is possible to specify
	      an alternate Glide library.  This feature is used by the BeOS
	      port.
	    - Fixed Glide renderer makefiles so that they take the makefile
	      variable $(OUTDLL) into account when computing the DLL name.
	    - Fixed out of date Glide entries in scf.cfg.  Added missing Glide3
	      2D entry.
	    - Removed BeOS-specific garbage from the common Glide canvas
	      implementation.
	- Eric Sunshine fixed the 'clean --> cleandoc' chain rule in docs.mak
	  which broke on September 29, 2000.
12-Oct-2000
	- Thomas Hieber fnished implementing the attribute System, including
	  all container classes specified in icsgame (untested).
	- Improved the leafy BSP tree builder in LevTool.
	- Disabled a new CS_ASSERT that was put in csVector::Get(). The
	  problem was that some code in CS assumes that Get() also extends
	  the array. It is a bit too complicated to fix this now (I'm busy
	  fixing another problem and don't want to get sidetracked).
	- Renamed csWorld::PrepareParticleSystems() to PrepareSprites() and
	  also changed the routine so that it updates all sprites and not
	  only particle systems.
	- Fixed a bug as reported by Samuel Humphreys. Sprites that are
	  in nodes containing no geometry (i.e. no polygons) are not correctly
	  marked visible. The reason is that there is no bsp tree for those
	  nodes and the bsp tree is needed to hold the visibility stubs for
	  sprites. I solved this by creating a dummy bsp tree (empty) at
	  those nodes. Note that this will require a -recalc of levels
	  using STATBSP. This also holds for particle systems.
	- Samuel also reported an additional bug. Sprites that are outside
	  the entire octree are never reported as visible. The reason is
	  similar, there is no bsp tree there to hold the visibility stubs.
	  The solution in this case is not so simple so for now I suggest
	  a workaround: just add dummy small polygons to the bounds of the
	  world where you want sprites to be visible. This will make the
	  octree larger.
	- Andrew Zabolotny did the following changes:
	    - Renamed csPixmap::DrawTiledShifted into DrawTiled. There is
	      no need to use long clumsy names like
	      DrawARoundBoxWithALittleRedDotInLeftUpperCorner ().
	    - I have extended iGraphics3D::DrawPixmap() method with one
	      argument - uint8 alpha, and also enhanced the function a lot
	      in software renderer.  Now if the tx,ty,tw,th rectangle
	      exceeds texture size, texture is tiled across the screen
	      rectangle. The alpha is from 0 to 255 and defines the
	      transparency of the pixmap, 0 being opaque and 255 full
	      transparency.
	    - Semi-transparent windows in CSWS! (cswstest -> Theme button).
	      This is a bit buggy though because sometimes the window gets
	      repainted twice, with alpha-blended textures this results in
	      visual artifacts :-( Will take a look at this later.
	      Both windows and dialogs are allowed to be transparent now.
	      Also simple non-transparent textured backgrounds (which are
	      faster of course) are allowed for both windows and dialogs.
	      Note that if you insert a dialog into a window, and set both
	      to semi-transparent, their textures will overlap, and thus
	      you will see the desktop (and the windows behind) through
	      *two* transparent textures. In general it is recommended that
	      if you insert a semi-transparent dialog into a window, you
	      set that window's alpha to 255 (e.g. fully transparent).
	    - Removed the NULL_SOFTWARE_2D_DRIVER macros from null3d renderer.
	      The NULL3D renderer is not a NULL renderer, it is a *NULL 3D*
	      renderer, that is, it does not have any 3D primitives
	      implemented (e.g. polygons) - everything other is like in
	      the "normal" renderer, thus it uses same default canvas like
	      the normal renderer. NULL3D renderer is mainly an alternative
	      renderer for those CSWS applications that do not need any
	      3D drawing. Now it supports semi-transparent and tiled textures
	      as well.
	    - Fixed other renderers in order to be able to compile. I
	      believe tiling will work with at least the OpenGL driver
	      without any change; alpha is not implemented yet but its
	      easy to implement.
	- Eric Sunshine reverted Jorrit's change to csVector::Get().  I (Eric)
	  had already removed the offending CS_ASSERT() call in the previous
	  revision of csvector.h.  Jorrit actually removed the wrong one.  It
	  could not have been the source of the problem he was experiencing
	  since Get() is a 'const' method and does not alter the array at all.
	  If Jorrit's code was indeed using this 'const' method to access
	  beyond the end of the array, then that represents an actual bug in
	  the calling code, and needs to be fixed.  The Get() method has never
	  automatically extended the array for out-of-bounds indexes; only the
	  non-const version of operator[] does so.
	- Eric Sunshine updated the class comments in csvector.h.
11-Oct-2000
	- Thomas Hieber did the first preliminary integrated of the XML
	  parser for the gamecore library.
	- Norman Kramer fixed the glx2d canvas so that the xwindow is
	  now destroyed after gl context is destroyed (other way around
	  resulted in crash).
	- Some small changes from Michael Robellard <miker@vetechno.com>:
	    - New SetValue in csKeyValuePair.
	    - Added 'const' to csMovable::Transform.
	- Philip Wyett fixed a bug in csapp.cpp. He removed 'const'
	  from 'const char* filename'.
	- Philip also updated the VC project files to conform to recent
	  commits (ltbsp.cpp and ltbsp.h, and also the new motion
	  stuff from Brandon).
	- Brandon Ehle did the following changes:
	    There are some issues with frames where no interpolation
	    occurs, but Quaternion based skeletal animation is in and
	    amazingly fast even before attempting to optimize.	Matrix
	    mode animation is supported, but no interpolation code exists
	    yet.  Tons of changes to the csQuaternion class as it appears
	    that nobody has used it yet and one function added to
	    csMatrix3 to support Quaternion initialization.  Also
	    revamped the iMotion interfaces a bit, and added a hacky SCF
	    implementation for the csSkeleton classes until someone with
	    better knowledge can fix them so they are correct.
	- Cleaned up the formatting in the commits from Brandon.
	- Removed some unneeded dependency stuff from unixconf.sh.
	- Further work on leafy BSP generator in levtool.
	- Eric Sunshine fixed several compilation errors in MazeD following
	  Andrew's changes from yesterday.
10-Oct-2000
	- Norman Kramer did some fixes after Andrew's changes.
	- Andrew Zabolotny renamed fontserver to fontplex.
	- Andrew Zabolotny did the following changes:
	    - Fixed makedep so that it will work unde Unix (well, at
	      least under Linux :-) Added autodetection of system include
	      directories to unixconf.sh.  You will have to re-configure
	      in order "make depend" to work.  Added a new AWK script
	      bin/includes.awk which parses the output of "gcc -H" and
	      outputs a line like this:
		MAKEDEP.INCLUDES=-I/usr/include;/usr/local/include
	      Maybe I'll enable later this script for mingw32 port as well,
	      since mingw32 needs these includes too; currently you have to
	      specify them as "C_INCLUDE_PATH" environment variable.
	    - Changed Unix makefile so that makedep is used now on Unix
	      for dependency generation. This is about five times faster
	      (a random evaluation though :-)
	    - Re-implemented former `themes' from scratch. It was a nice
	      try, but did not fit well with CSWS concept; besides they
	      involved too much overhead.
	      They are called now "skins". A "skin" is a collection of
	      "skin slices", every "slice" is responsible for a certain
	      class of components, e.g.	 buttons, titlebars and so on. When
	      a component is created or when the skin is changed the
	      component queries the skin for the slice it wants and
	      remembers it; then it uses it for miscelaneous operations
	      such as drawing and so on.
	      There are three skinnable components right now: buttons,
	      windows and dialogs. There is just one (default) scheme
	      right now thus you won't notice any difference :-) The code
	      for exterior look of these components is completely separated
	      (and can be replaced by other code, e.g. Motif, Windoze,
	      OS/2 look (um... the default look is quite close to OS/2
	      already :-) etc).
	    - Changed CSWS configuration file format. Now it use csIniFile.
	      This is a preparation so that themes could be easier configured
	      through config file in future.
	    - Updated CSWS docs so that it can be used to gather basic
	      information about CSWS. All beginner CSWS users are highly
	      recommended that; I have tried to respond to the most
	      frequently asked questions on the mailing list there.
	    - Renamed csApp::InitialSetup() into csApp::Initialize(const
	      char *iConfigName) for uniformity (all other classes uses
	      Initialize()). I have fixed the applications in CVS, for
	      applications outside CVS this have to be done yet. The
	      iConfigName passed is the name of CSWS configuration file
	      (usually "/csws/csws.cfg"). This allows to create CSWS
	      applications without having a system configuration file
	      (previously CSWS config name was read from the [CSWS] section
	      of system config file).
	    - Added the notion of "color schemes". There is a function
	      called csSetColorScheme() which in fact applies a (tricky)
	      function onto the entire application palette (in HLS space).
	      There are just too many colors in all palettes to enumerate
	      them separately; I would prefer some automatic way to
	      process all colors in the palette; I'm not sure the method
	      that is currently implemented is flexible enough (I'm going
	      to finish the "Theme" window in cswstest in order to see
	      schemes in action dynamically).
	    - Fixed a small bug in CSWS that caused transparent windows
	      to leave visible traces on neightbour's child components.
	      The solution was simple and elegant - just a single line
	      change! :-) Now you can even drag a window *below* the
	      transparent window (e.g. try to drag the "CSS_TOPSELECT"
	      window under the "Theme test" window in cswstest!). This
	      looks cool, although it will look much better when I will
	      implement support for alpha backgrounds! :-)
	    - Removed the #ifdef MSC_VER from csapp.cpp. Grrrr.... such
	      things make me angry.
9-Oct-2000
	- Brandon Ehle fixed some compile errors in imotion.h and
	  also restructured the API a bit.
	- Brandon also added CS_ASSERT to some calls in csVector.
	- Further work on leafy BSP generator in levtool. Added a 'bsp'
	  button to test it. Select a sector from the list below and it
	  will take the static thing (if present, else the sector polygons)
	  to make a bsp. Not useful yet at the moment.
	- Eric Sunshine made the following changes:
	    - Added csHashCompute(char const*) to hashmap.{h|cpp} which
	      quickly and effectively computes a hash key from a string.
	    - Eliminated the bogus and broken GetReducedHash() which Brandon
	      added to csMD5.  Brandon was using this as a bizarre form of
	      very expensive string hashing.  To say that this was overkill is
	      an understatement.  It was like using a sledge-hammer to kill an
	      ant.  Furthermore, GetReducedHash() was buggy and failed to be
	      endian-correct.
	    - Modified Brandon's motion.cpp to use the inexpensive
	      csHashCompute() rather than the overkill and bogus
	      GetReducedHash().	 Also reformatted motion.cpp to follow CS
	      formatting guidelines.  (Brandon, please use tab size 8!)
	    - Fixed a memory corruption bug in motion.cpp.  Was writing past
	      the end of an allocated buffer when copying a string.
	    - Removed garbage which brandon left in motion.mak.
	    - Added Motion plugin to user.mak and static.cpp since Brandon
	      forgot to do so.
	    - Removed one of the CS_ASSERT() calls which Brandon inserted into
	      csBasicVector since it fundamentally changed the behaviour of
	      the class, even though he neglected to modify the rest of CS to
	      take this fundamental behavioral change into account.  (Brandon,
	      if you make fundamental behavioral changes like this, then you
	      must also fix every place in the project which is affected by
	      such changes.  Do not expect other people to keep cleaning up
	      after you.)
8-Oct-2000
	- Brandon Ehle added the motion interface for sprites to the CVS tree.
	  The SCF interfaces & the loader are 90% done, but the plugin and
	  rendering loop still need to be implemented.
7-Oct-2000
	- Martin Geisse also updated the VC project files.
6-Oct-2000
	- Thomas Hieber added a macro for safe ADD_REF and DEC_REF
	  to scf.h.
	- Thomas also fixed a few warnings in CSWS and updated the VC
	  project files.
	- Thomas did some small changes to the gamecore plugin.
	- Wouter Wijngaards fixed a bug in the image loader:
	  Sometimes imgloaders were registered twice (double linking?),
	  and the list of loaders becomes a ring. And if loading fails it
	  gets into an infinite loop. I fixed the problem by having Register
	  check if the loader is already present.
	- Andrew Zabolotny added a check for empty scf.cfg file so that
	  it will not bomb out.
	- Wouter Wijngaards added scripts/python/*.py for installation.
	  Expensive operations are guarded.
	- Philip Wyett fixed a compile error in csfont plugin.
	- Eric Sunshine made the following changes to csVector:
	    - No longer tries to malloc() zero bytes, as that will crash on
	      some platforms.
	    - No longer tries to realloc() a null pointer, as that will crash
	      on some platforms (rather than performing malloc as documented).
	    - Now checks for null pointer before calling free().
	    - Now enforces valid values for 'ilimit' and 'ithreshold'.
	- Eric Sunshine made the following changes to the csFont plugin:
	    - Fixed bug: Was leaking a VFS reference.
	    - Fixed bug: The destructor was leaking every csFontDef record
	      added by LoadFont().  The contents of the records were being
	      freed, but the records themselves were not.
	    - Fixed a really significant number of memory leaks in
	      ReadFntFile() which would occur on error conditions.  It's
	      currently using a 'goto' (yuck!) to handle such conditions.  In
	      the future, this code should be reorganized to avoid having to
	      use 'goto' at all.
	    - ReadFntFile() now ensures that the font metrics are valid
	      before trying to read the font file contents.  In particular,
	      it asserts that the width, height, and bytes-per-char have
	      valid values.
	    - Performed a number of very obvious optimizations.
	    - Simplified and cleaned up a lot of the code; but ReadFntFile()
	      still needs a reorganization (as noted earlier with regard to
	      'goto').
	    - Downgraded severity level of diagnostic messages from FATAL to
	      WARNING.
	- Started work on leafy BSP builder in levtool. This will eventually
	  be used for PVS.
	- Fixed a bad bug in lighting. It was doing delete [] data
	  instead of data->DecRef ().
5-Oct-2000
	- Samuel Humphreys fixed particle systems in STATBSP worlds. Their
	  bsp bounding boxes would otherwise remain uninitialized and so
	  always invisible. The loaders call to Movable.UpdateMove() has
	  no effect as the sectors are not yet prepared.
	- Norman Kramer did some fixes to icsgame.h and gamecore plugin so
	  that it compiles on GNU/Linux. Norman also added a makefile.
	- Wyatt Miler fixed campos.h so that it compiles on Mac.
	- Wyatt also updated the Mac project files:
	    - Added VFS plugin to MakeShared
	    - Removed the Glide renderer from MakePlugins.
	- Extended iPolygon3D interface with one of the SetTextureSpace
	  functions so that I can get the python script pysimp.py working.
	- Added iMaterialWrapper interface so that there is now an SCF
	  interface for csMaterialWrapper.
	- Added iWorld::FindMaterial() to look for a loaded material.
	- Fixed iPolygon3D::GetVertex (and the W/C versions). They were
	  completely broken.
	- Updated cs.i input file for SWIG so that it is more up-to-date
	  with regards to the current state in CS. The interface is far
	  from complete. First we need more and better defined SCF interfaces
	  for the engine itself and second we need to extend cs.i to actually
	  use all those interfaces. At this moment cs.i is extended
	  just enough so that I could get pysimp.py working.
	- The pysimple test application now behaves almost exactly like
	  simple (without the sprite though) but the geometry of the
	  room is created in python instead of C++. Check out
	  scripts/python/pysimp.py to see how this works.
	- SWIG generates a file called cs_wrap.doc. I also added this file
	  to CVS since it is useful to read and not everybody has SWIG.
	- cspython plugin now also looks at the install path with
	  iSystem->GetInstallPath() to see where it should load the standard
	  CS Python support scripts (i.e. in scripts/python). So this means
	  that it is easier to use Python from external applications (games
	  outside of the CS directory structure).
4-Oct-2000
	- Norman Kramer updated config access in freefont plugin according
	  to Andrew's latest changes.
	- Philip Wyett did some small changes to the VC project files.
	- Added a change from Luca Pancallo to 3ds2lev so that floating
	  point values near zero are better printed.
	- Added '-l' option to 3ds2lev. If you use that option the
	  LIGHTING(no) will not be added.
	- Made cspython plugin a real plugin (i.e. let it inherit from
	  iPlugIn).
	- Fixed a bug in the cspython plugin which would initialize
	  System to NULL. I have no idea why that code was there.
	- Some experimentation with pysimple. Tried to update it so that
	  it works more like the normal simple but instead it creates
	  part of the geometry in python. However it does not work yet.
	- Eric Sunshine removed the unused, unfinished, and broken Macintosh
	  Glide canvas.	 By all accounts, it appears that this driver has
	  never worked.	 Most of the content of these source files is actually
	  old code left over from X-windows and Win32.
	- Andrew Zabolotny did a few remaining fixes so that all the
	  apps compile again.
	- Wouter Wijngaards added a LoadFont(name,file) method to G2D.
	  It returns the new fontid or -1 on failure. Use this to load
	  fonts.
	- Thomas Hieber continued work on the gamecore plugin.
3-Oct-2000
	- Fixed a bug in the 3dslev convertor where it would accidently
	  remove small polygons.
	- Fixed two bugs in the new UV coordinate setter. The new code
	  was actually just ignored.
	- Eric Sunshine replaced out-of-date crystalspace.console.stdout
	  references in several programs (nstp, perfest, ttffnt) with new
	  crystalspace.console.output.standard.
	- Andrew Zabolotny fixed vshell so that it compiles again after his
	  latest changes.
	- Andrew also fixes system so that it is allowed to have apps with
	  no config files. This fixes the crash bug in simple.
	- Fixed a crash bug in lighting if precalc_info was missing.
	  This bug was caused by Andrew's changes.
	- Eric Sunshine disabled shooter.mak since the csgame library is now
	  defunct.
	- Eric Sunshine eliminated a slew of compilation warnings in 3ds2lev.
	- Eric Sunshine fixed a problem following Andrew's config-file change
	  of yesterday where several plugins modules were applying 'delete'
	  to iConfigFile rather than DecRef().	Also fixed one plugin which
	  was leaking an iConfigFile reference.
	- Eric Sunshine added documentation for 'make all' to the "pseudo
	  targets" help section of the makefile.
	- Eric Sunshine eliminated a compilation warning in vsh.cpp
	- Eric Sunshine fixed compilation errors in these files following
	  Andrew's big changes: blocks.cpp, inputcmd.cpp, map.cpp,
	  metasys.cpp, perftest.cpp.
	- Thomas Hieber did further changes to icsgame.h and the gamecore
	  plugin.
	- Thomas Hieber removed Crystal Shooter project file.
	- Wouter Wijngaards fixed radiosity when there are no polygons
	  to light.
2-Oct-2000
	- Andrew Zabolotny did the following changes to CS:
	    - Overhauled the csIniFile class. There is now a new
	      iConfigFile interface which is implemented by csIniFile. It
	      is highly recommended all libraries and plugins to work
	      through this interface rather than using csIniFile
	      directly. Removed some exotic csIniFile methods such as
	      saving and loading the config file to/from a csString,
	      overhauled the iterators (they are exposed through
	      interfaces now as well).
	      This is a preparation to excluding csIniFile usage from
	      plugins. The iSystem interface will expose a method to
	      create iConfigFile objects, this will avoid duplicate code
	      in main executable and plugins. Also the ConfigGetXXX
	      methods will go away from iSystem, instead there will be
	      an GetConfig() method to retrieve the basic iConfigFile object.
	    - Implemented a new interface iDataBuffer which is meant as an
	      extremely lightweight data container (as opposed to
	      csString). The interface is meant for exchanging abstract
	      data between plugins. For example:
		... iVFS *vfs;
		iDataBuffer *data = vfs->ReadFile (filename);
		... data->GetData ();
		... data->GetSize ();
		data->DecRef ();
	      Another example:
		iDataBuffer *path = vfs->ExpandPath ("../test");
		printf ("Expanded path: %s\n", **path);
		path->DecRef ();
	    - Added minimal locale support to Unix systemdriver
	      (setlocale (LC_XXX, "")) because without that XFree4.0 won't
	      (always) display national characters. If your specific Unix
	      doesn't have <locale.h> see the instructions in unix.cpp...
	      basically if we find that there are such systems we rather
	      should add detection of setlocale to unixconf.sh.
	    - Added Xsetlocale() to all X11 canvas drivers. I don't know
	      whenever this is really required but it won't hurt in any
	      case, and for some languages this could help.
	    - I did all said above related to iConfigFile. Namely the
	      iSystem interface has been changed: removed all the
	      GetConfigXXX() methods; instead (the simplest but dirty way)
	      you can just use GetConfig()->GetXXX() instead of older
	      GetConfigXXX(); a better way is to first store the GetConfig()
	      aside, then use the variable multiple times to query all the
	      needed values. All the plugins and applications have been
	      updated to accomodate this new change; of course I maybe
	      forgot something so if you get compilation errors you have
	      to check first if the old GetConfigXXX method is used (and
	      proceed as above if so) and second check if the "icfgfile.h"
	      file is included at the top of source file.
	- Fixed compile bug in Blocks that I caused by a change yesterday.
	- Fixed similar compile bug in dtsimple.
	- Fixed engine plugin so that it is again enginep.so.
	- Added new conversion utility to convert 3DS files to CS world
	  files. This is only a very primitive first version. It converts
	  geometry in a 3DS file to one big sector. The polygons and
	  vertices are correct but there is no texture or lighting
	  information yet.
	- Added new csPolygon3D::SetTextureSpace() function which accepts
	  three vertices and three uv coordinates and extracts the
	  texture matrix from that information. This is sometimes easier
	  to handle as many formats actually give uv coordinates for every
	  vertex.
	- I also extended csloader with a new format for the texture mapping
	  specification. You can now say:
	    POLYGON 'p' (
		VERTICES (1,4,2,5)
		TEXTURE (
		    UV (0,.5,.5,1,0,1,2,.9,.9)
		)
	    )
	  The format is as follows:
	    UV (i1,u1,v1, i2,u2,v2, i3,u3,v3)
	  i1, i2, and i3 are the local indices of vertices in the polygon
	  (so i1==0 corresponds to vertex 1 from the set).
	  ux,vx are uv coordinates for that vertex.
	- Added support for UV coordinates in 3ds2lev convertor by using
	  the above new feature.
	- Eric Sunshine fixed some compilation warnings in wave.cpp.
	- Eric Sunshine fixed potential memory leak in memfile.cpp which was
	  introduced by Andrew's Big Change(tm) today.
	- Thomas Hieber did some fixes on various apps and libraries after
	  Andrew's changes.
	- Thomas added first real code for the gamecore plugin. Thomas
	  also added project files for this plugin.
	- Thomas did some fixes to the VC project files.
	- Robert Bate updated the Mac project files.
1-Oct-2000
	- Since Martin fixed a bug in the sound code Blocks sound is now
	  working so I enabled it by default.
	- Fixed bug with adding of SIXFACE templates.
	- Fixed bug with deletion of sky things.
	- Fixed bug with thing templates containing curved surfaces. This
	  bug could cause walktest to crash at exit (for flarge).
	- Wouter Wijngaards made ttf2fnt more robust. Fixed a big
	  memory leak in reading binary fnt files.
	- Philip Wyett fixed some compile errors in appLevTool.dsp related
	  to ltsave. Philip also fixed some problems with plgVFS.dsp.
	- Martin Geisse committed a fix to the MSVC project files from
	  Adam Bailey.
30-Sep-2000
	- Martin Geisse updated the MSVC project files.
	- Martin also fixed a bug in the sound system.
	- Eric Sunshine fixed nasty bug in csHashMap/csHashSet where it would
	  happily access negative array elements.
	- Eric Sunshine fixed bug in csHashMap::DeleteAll(csHashKey) where it
	  was deleting a non-existent element beyond the end of the bucket
	  array.
	- Eric Sunshine fixed a memory leak and compiler warnings in
	  ddgcntxt.cpp and ddgchull.cpp.
	- Eric Sunshine reintroduced code into support/gnu/bison.sim to clear
	  yyval before its first use.  Without this code, at least four of the
	  compilers I use complain that yyval is used uninitialized.  I had
	  added this code in the past, but Andrew misunderstood its
	  implementation and removed it.  (It was specifically engineered to
	  gracefully handle the case for which he thought it failed.)  The new
	  implementation is even simpler and more flexible.
	- Eric Sunshine fixed a problem in dtsimple.cpp.  It was passing NULL
	  to csThing::MergeTemplate where it should have been passing 'false'.
	- Eric Sunshine eliminated a compilation warning in levtool.cpp.
	- Eric Sunshine fixed problems in simple.cpp and scf.cfg which
	  prevented the 'simple' application from loading the console.
	- Wouter Wijngaards added -binary flag to ttf2fnt, that will create
	  a binary .fnt file. Not usable for #include, but csfont can
	  read it very quickly.
	- Wouter changed csfont server. It not only serves the preloaded
	  fonts now, but it also serves dynamically added fonts (use
	  ttf2fnt to make those .fnt files, read them from VFS).
	- Thomas Hieber added interfaces for animated 3D objects to
	  icsgame.h. Thomas also added definition of the collider selected
	  classes interface and added basic network interface declaration.
29-Sep-2000
	- Philip Wyett removed references to dynlight.cpp/.h and
	  thingtpl.cpp/.h from the VC project files.
	- Wouter Wijngaards changed the file format of ttf2fnt output so
	  that crucial information is added as comments starting with
	  //XX. This makes the file readable at runtime.
	- Eric Sunshine made the following changes to install.mak and the
	  installation-related makefile targets:
	    - Consolidated all of the installation-related makefile goop into
	      install.mak rather than having it spread around Makefile,
	      cs.mak, and install.mak.	This is a much cleaner approach.
	    - Now only performs the very expensive $(wildcard) operations when
	      'install' is invoked, rather than performing them for _all_
	      build targets project-wide.  This helps to reduce the lengthy
	      pause and excessive disk-thrashing which occur between the time
	      when the banner is displayed and the time when actual
	      compilation commences (for non-install targets).
	    - install.mak is now a 'standard' CS makefile in every sense.  It
	      now employs the standard MAKESECTIONS and ROOTCONFIG mechanisms.
	    - The INSTALL_DIR setting is now persistent (it gets written to
	      config.mak).  This means that it can be specified at makefile
	      configuration time (i.e. 'make INSTALL_DIR=/usr/local/crystal
	      linux'), and will be remembered and used automatically by the
	      'install' target.
	    - INSTALL_DIR now has a default value (/usr/local/crystal).	 The
	      user can override this value at configuration or installation
	      time if desired.
	    - The configuration summary printed by the 'help' target now
	      indicates the value of INSTALL_DIR along with the other standard
	      settings such as USE_SHARED_PLUGINS, MODE, etc.
	- Eric Sunshine made the following changes to docs.mak:
	    - Now only performs the expensive $(wildcard) operations when
	      documentation targets are invoked, rather than performing them
	      for _all_ build targets project-wide.
	    - Removed some variables which became obsolete with the
	      introduction of efed.pl.
	- Eric Sunshine fixed formatting of the help message in
	  fontmanager.mak.
	- Martin Geisse cleaned up sound code a bit.
	- Thomas Hieber added interfaces for movement control to iccsgame.h.
	  He also cleaned up some interfaces to make everything more
	  consistent.
28-Sep-2000
	- Philip Wyett updated a few VC project files.
	- Thomas Hieber did a very small update to icsgame.h.
	- Added a single stepper for radiosity. This is mainly useful
	  for debugging. To use it you first need to enable radiosity
	  in cryst.cfg. Then at startup you use the -radstep option.
	  This will initialize the radiosity process but not start it yet.
	  Using the console command db_radstep you can single step radiosity
	  one iteration at a time (or more if you give an argument). This
	  command is assigned to 'shift-r'. Before doing this you can also
	  hilight the polygon that is going to be used next for radiosity.
	  This is with the db_radhi command (assigned to 'alt-r').
	  There is also the db_radtodo command which toggles between showing
	  the current static lightmaps and the delta maps. This is useful
	  for showing what radiosity is going to use next. Note that
	  this toggle will be safely restored if you continue radiosity
	  with 'db_radstep'. This command is assigned to 'ctrl-r'.
	  Some notes. If you start walktest using this setup all lightmaps
	  will initially be black. This is because the radiosity algorithm
	  starts by removing all lighting info from the lightmaps and
	  putting it in 'todo' lightmaps. If you continue the iterations
	  the lighting info will gradually reappear.
	  WARNING! This feature only works correctly with the software
	  renderer. The problem is that the radiosity algorithm assumed
	  the lightmaps are in original format but for OpenGL/D3D the
	  lightmaps are converted to power-of-two format later.
	- Added csWorld::InvalidateLightmaps() which can be used after
	  changing the static lightmaps so that the changes will take
	  effect. This is a slow function though! It is used by the
	  radiosity debugger.
27-Sep-2000
	- Fixed bug in csparser which would cause things defined with
	  the SIXFACE command to be added twice to the sector. This was
	  apparant in flarge.zip.
	- Cleaned up some old remnants of csThingTemplate in csparser.
	- Optimized csPolygon3D::MarkRelevantShadowFrustums by letting
	  it use csFrustum::BatchClassify instead of csFrustum::Classify.
	  This should improve the speed of radiosity and lighting somewhat.
	- Continued work on levtool. Now saving of things and templates
	  for things works better again.
	- Levtool saved world file is now also less verbose by using
	  %g instead of %f for floating point format output.
	- Wouter Wijngaards and Jorrit Tyberghein did a lot of debugging
	  and improvement of the radiosity code. At this moment it seems
	  to be working reasonably well now.
	- Wouter fixed sourcepatchsizes above 1 for radiosity.
	- Michael Dale Long integrated a patch to input in cctest from
	  admin@wwwconsulting.com to improve input under Windows.
	- Michael also added inverted mouse option to cctest.cfg.
	- Fixes to csphyzik from Michael Ewert.
	- Thomas Hieber did some cosmetic updates to icsgame.h.
	- Further cosmetic changes to icsgame.h. I also added Doxygen
	  comments to the methods.
26-Sep-2000
	- Jerry A. Segler Jr did the following changes to theme code:
	    - Added different size font test on the theme window.
	    - Added Set5 to the freetype.cfg (X Windows TTF fonts)
	      Did not change default from Set1 (windows TTF fonts).
	    - Added font manager plugin. This allows csfont and freetype
	      to be used simultaneously. Technically any number of font
	      servers but we only have 2 at the moment.
	    - Fix: cstheme was using the wrong pallet entries for borders.
	- Did a few small fixes to the makefiles and csgame so that the apps
	  link again after Andrew's changes.
	- Added thing saving to levtool.
	- Andrew Zabolotny did the following changes:
	  - Made VFS a separate plug-in. This involves some minor changes
	    in programs that use Crystal Space outside of CVS (all the
	    sources in CVS have been updated): you have to remove all lines:
	      REGISTER_STATIC_PLUGIN (vfs)
	    from main source file; also you have to replace
	      #include "csutil/vfs.h"
	    with
	      #include "ivfs.h"
	    if you didn't this before (in any case VFS is always used through
	    the SCF interface, so it is not likely there is any code left that
	    makes use of the csVFS class directly).
	  - Fixed a bug in perfstat plugin that sometimes leads to "0.00"
	    being steady displayed instead of FPS.
	  - Added the ability to determine file size without opening the
	    file on VFS.
	  - Changed walktest to maximal theoretical FPS of 100. Previously
	    walktest never would *move* faster than at 40FPS. That is, the
	    refresh rate can be even 500 FPS but you will never see anything
	    moving faster than 100FPS. This should make the motion more
	    smooth on powerful videocards.
	  - Added acceleration ("run") to walktest by pressing SHIFT key.
	    I have moved all "immediate move" commands (i_up, i_left and so
	    on) to ctrl+# key bindings; that is, what previously has been
	    achieved with shift+up you will get now by pressing
	    ctrl+shift+up and so on. These commands are for debugging
	    mostly anyway, and they conflict (they were conflicting before
	    as well) with normal motion.
25-Sep-2000
	- Optimized radiosity inner loop a bit. This could give a
	  significant speedup.
	- Andrew fixed the modifications from Jerry with regards to
	  CSWS themes to conform more to CS coding style.
24-Sep-2000
	- Eric Sunshine worked around namespace collisions in csUtil/Parser
	  and csLoader caused by Microsoft Windows' namespace pollution.  All
	  macros and identifiers defined by csUtil/Parser are now prefixed
	  with "CS_".  All functions are now prefixed with "cs".  Now
	  publishes csGetParserLine() and csResetParserLine() instead of
	  global "parser_line" variable.
	- Jerry A. Segler Jr did further changes to Theme code.
23-Sep-2000
	- Jerry A. Segler Jr continued work on theme code.
	- Fixed a bug in csPolygonSet::IntersectSegment introduced yesterday.
	  This bug could cause crashes in some cases.
	- Integrated new simple terrain engine from Roland Reckel
	  <luxx@yahoo.com>. Jorrit made csTerrain a virtual abstract base
	  class for all types of terrain engines. Made new csDDGTerrain
	  which is the old csTerrain that implements the terrain engine
	  from the DDG toolkit. Added csLODTerrain from Roland.
	  There is now a new keyword 'TYPE (lod)' that you can use in the
	  world file (in a TERRAIN statement) to use the new terrain type.
	  Note that you cannot just switch as such because the LOD
	  terrain engine expects a TGA file as input for the height field
	  while the DDG terrain engine expects a .ter file. Also note
	  that currently the LOD terrain engine only supports one
	  texture.
22-Sep-2000
	- Fixed csPolygonSet::IntersectSegment so that it actually
	  returns the first polygon. This also fixes csSector::HitBeam.
	- Fixed a bad bug in the creation of the octree. On average
	  half of the things that should be used for the octree were
	  just deleted and ignored.
	- Improved memory usage a lot by just removing the PVS for now.
	  It is unfinished anyway and needs to be rewritten in any case.
	  For one big level this improved memory usage from 80Megs to
	  30Megs.
	- WalkTest doesn't use g3d->GetZBufValue anymore to calculate
	  the selected polygon (right mouse click) but only uses engine
	  information.
	- The bsp trees are a little bit more memory efficient (not much).
21-Sep-2000
	 - Eric Sunshine created a new tool, efed.pl (Eric's File Editor),
	   which is a regular-expression-based, batch-oriented file editor.
	   This tool resides in the CS/bin directory.  It can rename files and
	   apply a series of edit operations.
	 - Eric Sunshine modified the Public and Developer's API documentation
	   generation makefile targets in docs.mak so that they now invoke
	   'efed' in order to post-process the HTML files generated by Doxygen.
	   Using 'efed' instead of 'sed' speeds up documentation generation
	   significantly.  For example, post-processing of the developer's API
	   took almost one minute on crystal.sourceforge.net using 'sed'.  With
	   'efed', on the other hand, it takes just under three seconds!
20-Sep-2000
	- Jerry A. Segler Jr added initial CSWS Theme support.
19-Sep-2000
	- Andrew fixed a small bug in csws/cscomp.cpp.
	- Andrew updated csComponent comment to reflect the fact that
	  components can be partially transparent.
	- Andrew fixed a bug in csArchive which would trigger when
	  the archive contains directories that have no files.
18-Sep-2000
	- Jerry A. Segler Jr fixed linux compilation problem in cs_pyth.cpp
	  on new GCC's.
17-Sep-2000
	- Seth Galbraith did the following to docs:
	    - Removed section on separate vertex, texel, and normal arrays
	      (which didn't work out very well :-)
	    - Added ideas for smoothing unwanted shading edges
	      (by interfering with vertex normal calculation).
	- Finished csThing::MergeTemplate(csThing*).
	- Removed the obsolete CLights class (uniform dynamic lighting,
	  it wasn't working anyway).
	- Made csPolygon3D::ComputeNormal() public.
	- Removed csThingTemplate completely. Instead of csThingTemplate
	  you can now make a copy of a normal csThing (using
	  csThing::MergeTemplate). It is still possible to push csThing
	  instances on the csWorld::thing_templates list. Things that
	  are on that list are only for template use.
	  Note that one other implication of this is that csPolygonTemplate
	  is also removed. 90% of the work of fixing your applications
	  is done by just replacing csThingTemplate with csThing. The other
	  10% boils down to replacing the old API from csThingTemplate
	  with the mostly similar API from csThing.
	- Fixed (or tried to fix) most of the apps with regards to this.
	  I think this worked out well except for MazeD. MazeD compiles
	  but I cannot give any other guarantees. I didn't fix shooter
	  nor csgame.
16-Sep-2000
	- Martin Geisse added the interface for music support.
	- Started the first work towards removing csThingTemplate. This
	  involves changing the way that curves are loaded. Now it is possible
	  to define a curve in a thing. Previously it was only possible to
	  define curves in thing templates. This also allows curves
	  to be defined in a sector but this will currently be ignored by
	  the engine. Note that internally csBezierTemplate and csCurveTemplate
	  are still used even if a curve is defined in a thing (without
	  thing template). Basically a curve template is the definition
	  of the geometry.
	- Start work on csThing::MergeTemplate which works with csThing
	  instead of csThingTemplate. This is also with the removal
	  of csThingTemplate in mind. This function is not finished yet.
15-Sep-2000
	- Wouter Wijngaards removed several less useful files from install.
14-Sep-2000
	- Wouter Wijngaards made the following change to the install
	  procedure:
	    - Now also copies the great pubapi docs (.htm .gif and .css files).
	    - And copies docs/README.htm as well.  docs/html is now copied to a
	      install/docs/html dir too.
	    - Only the history.txt, history.old and incoming/ links do not work
	      in README.htm now.  But these I feel not to be essential.
13-Sep-2000
	- Wyatt Miler added perfstat plugin to the shared lib project file.
	  Updated cspython, however, it still doesn't link.
	- Martin Geisse updated the msvc project files.
	- Implemented csSprite3D::HardTransform similar to csPolygonSet.
	  With this you can move all sprite vertices so that (for example)
	  the origin is at another place.
11-Sep-2000
	- Eric Sunshine made the following changes to worlfmt.txi, the Crystal
	  Space World File Format description documentation:
	    - *Major* typesetting and formatting overhaul.  This section now
	      looks *much* nicer in the printed manual, and quite a bit better
	      in the HTML and Info translations as well.
	    - Eliminated the overfull 'hbox' warnings reported by TeX.
	    - Added discussion about world loading semantics.
	    - Added section explaining grammar of world file syntax.  Added
	      grammar examples, as well.
	- Eric Sunshine upgraded texi2html to version 1.64.
	- Eric Sunshine moved texi2html.init configuration file from CS/bin to
	  CS/docs/support.  Adjusted makefile, docs.mak, appropriately.
	- Eric Sunshine made the following changes to texi2html 1.64.  Also
	  sent patches to its maintainer so that these changes become
	  permanant (hopefully).  These changes were necessary to make
	  texi2html handle the newly re-formatted worldfmt.txi file.  Without
	  these changes, texi2html would crash and burn on that file.
	    - Fixed severe bug in macro expansion logic.  Macro argument
	      parsing code did not handle nested braces ('{' and '}')
	      at all, thus valid macro invocations such as
	      "@mymacro{Hello @emph{there} @strong{world}.}" would fail.
	      Prior to this fix, @mymacro would be handed the argument
	      "Hello @emph{there", which is clearly incorrect.	Now @mymacro
	      correctly receives "Hello @emph{there} @strong{world}." as its
	      argument.	 This fix also deals properly with the protected brace
	      sequences \{, \}, @{, and @}.
	    - Fixed severe macro expansion bug.	 Macro argument parsing code
	      did not handle arguments split over multiple, such as
	      "@mymacro{Hello \n world.}".  Now it correctly handles macro
	      invocations split across any number of lines, and properly flags
	      an error at the correct location if the user forgets the closing
	      brace '}'.
	    - Fixed formatting errors in expansions of @SPACE, @TAB, and @NL
	      (where SPACE, TAB, and NL represent the actual space, tab, and
	      newline characters).  The Texinfo manual explicitly states that
	      each of these sequences should expand to a "printable" space in
	      the [rendered] output.  The example given in the manual
	      shows that "Spacey@ @ @ @ example" should expand to
	      "Spacey	 example".  However, texi2html was only emitting
	      the insignificant whitespace ' ' and '\n' into the HTML
	      output which did not properly preserve the hard spaces in
	      "Spacey	 example".  Now each of these directives expands to
	      '&nbsp;' instead.
	    - Made aesthetic improvement to the output of @file{}, @option{},
	      and @samp{}.  The argument string is now quoted with ` and '
	      _after_ the style has been applied.  For instance, @samp{perl}
	      now expands to "`<samp>perl</samp>'", whereas it used to expand
	      to "<samp>`perl'</samp>".	 In my tests, this change results in
	      more aesthetically pleasing rendered output on various browsers.
	- Eric Sunshine modified docs.mak to disable verbose output from TeX
	  and dvips.  The output from these commands (particularly from TeX)
	  was far too excessive to be of use in a terminal session.  Now the
	  output of TeX is maintained in out/docs/dvi/cs-unix.log, instead.
	  You should check the log file for under- and overfull 'hbox'
	  warnings and other errors (usually denoted by '!') instead of
	  relying on terminal output.
	- Eric Sunshine modified cs.txi so that @value{TITLE} now expands to
	  just "Crystal Space" rather than "Crytal Space" plus the version
	  number.
	- Andrew Zabolotny improved, yet again, text drawing speed both with
	  transparent and filled background from 340.000 & 345.000 characters
	  per second to respectively ~380.000 and ~520.000 characters per
	  second (11% and 50% speed increase without and with transparent
	  background respectively).
	- Andrew Zabolotny fixed a bug in text clipping introduced by previous
	  batch of improvements to the canvas plugins that resulted in text
	  caret moving sometimes twice for one character (this was seen as
	  misplaced menu text in MazeD for example).
	- Andrew Zabolotny made the following changes to MazeD:
	    - Changed the term "modification axis" into more correct
	      "modification origin" everywhere.
	    - The "Slide view" mode now allows to position the depth position
	      of the "camera target" point.  This is done by entering the
	      "slide view" mode (by clicking the "oblique arrow surrounded by
	      a square" button on lower toolbar) and by holding down left
	      mouse button in the target view; then move it with SHIFT key
	      pressed to change the depth of the point that camera is looking
	      at.  This does not change the position of the view, but changes
	      the behaviour when you rotate around it (for example with arrow
	      keys).  Same applies to "modification origin define" mode (e.g.
	      SHIFT key allows to modify the depth rather than shifting origin
	      in the view plane).
	    - Fixed a bug with cloning an already cloned light (SIGSEGV).
	    - World save is back.  I have reorganized saving to allow future
	      extensions for saving to different file formats.
	- Eric Sunshine reverted the change to dnparse.h which Wyatt Miler
	  made on 7 July 2000, since it introduced incorrect and buggy
	  behavior.  Applied a different patch which should be acceptable even
	  to his compiler.  String-constant concatenation is a standard
	  feature of all ANSI-C compilers.  If the Macintosh compiler he is
	  using can not deal with it, then that represents a bug in the
	  compiler.  Note, also, that this type of string concatentation is
	  used at many other places within the project.
9-Sep-2000
	- Added support for thing and polygon templates in the levtool
	  world saver.
8-Sep-2000
	- Eric Sunshine renamed several classes from the NetSpace suite which
	  only differed from other classes in the case of the name.  This was
	  a problem for documentation generated by Doxygen on platforms which
	  have case-insensitive filesystems.  Doxygen generates HTML filenames
	  using the class name so, for instance, it would generate files such
	  as class-iCmdMgr.htm and class-iCMDMGR.htm.  These filenames result
	  in CVS conflicts on platforms with case-insensitive filesystems.
	  Renamed the following classes:
	    csNSMGR --> csNetSpaceManager
	    iPROTO  --> iNetSpaceProtocol
	    iCMDMGR --> iCommandManager
	    csNSTP  --> csNetSpaceTransportProto
	- Received patched VC project files from Philip Wyett
	  <philipwyett@leedsalumni.org.uk>.
	- Eric Sunshine fixed quite a few formatting problems reported by TeX
	  when building the Crystal Space manual from the Texinfo files for
	  printed output.  Also fixed several errors in apimod17.txi which
	  prevented TeX from building the manual at all.  (The only formatting
	  problems not yet fixed are those in worldfmt.txi.  This document
	  contains several hundred formatting problems and is going to require
	  a significant effort to fix correctly.)
	- Eric Sunshine modified several of the Texinfo documents which
	  contain instructions for building Crystal Space on various platforms
	  so that they now direct the user to use "make -k" (rather than
	  "make") when building compound targets such as "all" and "drivers".
	- Eric Sunshine upgraded the NeXT documentation Texinfo files in
	  several ways:
	    - Upgraded out-of-date URLs.
	    - Added links to the zlib, jpeg, and png libraries at LinuxGames.
	    - Added instructions for building new required plug-in modules.
	    - Upgraded and clarified instructions for finer control over build
	      process.
	    - Added special note about having to run applications from the
	      command line rather than by double-clicking on them from the
	      file viewer.
	- Eric Sunshine overhauled README.htm.	Added a large number of
	  missing links.  Made aesthetic improvements.
	- Eric Sunshine fixed several Texinfo mark-up problems in
	  worldcmp.txi.	 Also cleaned up and rewrote some of the discussion.
7-Sep-2000
	- Continued work on saver in levtool.  The saved world file works very
	  well already.	 But a few important things are still missing (like
	  things, sprites, etc.).
	- Eric Sunshine updated the documentation-related URLs in the User's
	  Manual Texinfo files.	 Also added several new links to resource.txi.
	- Eric Sunshine fixed a really significant number of Texinfo mark-up
	  errors in msdos.txi, win32gcc.txi, general.txi, simple2.txi,
	  worlfmt.txi, phyziks.txi, apimod17.txi.
	- Eric Sunshine eliminated todo.txi.  Use the To-Do facility on Source
	  Forge instead.  Also eliminated (the unused) history.txi.
6-Sep-2000
	- Patch from Mark Welch to fix a compile error on MSVC.
	- Small fix to OpenGL canvas from Nicholas Blumire.
	- Removed an assertion error from curve.cpp
	- Started work on world saver for levtool.
	- Eric Sunshine made the following changes to the API documentation
	  generation procedure:
	    - Changed the 'pubapi' and 'devapi' makefile targets to use
	      Doxygen rather than Doc++.  Doc++ is so excessively buggy that I
	      could not conscientiously support its use.  Doxygen is a far
	      superior tool.  It puts Doc++ to shame in almost every way
	      imaginable.
	    - Added docs/support directory which contains support files needed
	      for building documentation.
	    - Added pubapi.dox and devapi.dox which are Doxygen configuration
	      files for building the Public API Reference and Developer's API
	      Reference, respectively.
	    - Added apifoot.htm which is a custom HTML footer used when
	      generating the API reference manuals via Doxygen.	 A custom
	      footer is needed since the default footer displays the date/time
	      when Doxygen was run.  The date/time on each HTML document is
	      undesirable because it would cause the automated API building
	      script to consider the documents as having been modified even if
	      no actual content had changed.
	- Eric Sunshine made the following additional changes to the API
	  documentation generation targets:
	    - Makefile targets 'pubapi' and 'devapi' now perform special post-
	      processing of HTML files generated by Doxygen.  Unfortunately,
	      Doxygen unconditionally embeds a hidden generation-date string
	      in each file.  This string plays havoc with the daily automated
	      API building job since it makes the file appear modified even
	      when no content has changed.
	    - Worked around Doxygen limitation where it unconditionally
	      generates files with an .html extension.	Makefile now does
	      special post- processing to rename files to .htm.
	- Eric Sunshine made even futher changes to the API documentation
	  generation targets:
	    - Now transforms .html to .htm within each HTML file as well, thus
	      allowing embedded relative links to work correctly.
	    - Cut in half the number of commands invoked during the
	      post-processing step.  This reduces the number of commands from
	      about 2800 to 1400 for 'pubapi', for instance.
	- Eric Sunshine committed new CS/docs/pubapi directory to CVS
	  repository.
	- Eric Sunshine made the following changes to docproc.pl:
	    - Now builds the 'pubapi' and 'devapi' makefile targets.
	    - Automatically updates CS/docs/pubapi in the CVS repository if
	      any documents have changed.
	    - Now makes docs/pubapi and docs/devapi available for online
	      browsing.
	    - Now makes 'pubapi' and 'devapi' packages available for
	      downloading in various formats (gzip, bzip2, zip).
	    - Building, updating CVS, and online publishing tasks are now
	      table driven (new @TARGETS array).
	    - Modification summary is now more clearly delimited (not so
	      easily lost in output).
	    - Upgraded usage statement which was rather out of date even prior
	      to these changes.
	    - Added special case to work around fact that Doxygen is not
	      installed on SourceForge machine.	 Uses local copy instead.
	- Eric Sunshine added link for CS/docs/pubapi to README.htm.
	- Eric Sunshine added links to the jump-start page
	  (http://crystal.sourceforge.net/) pointing at the new browseable and
	  downloadable 'pubapi' and 'devapi' resources.
	- Eric Sunshine updated the annotated directory listings (via
	  spoofdir.info files) to reflect fact that 'pubapi' and 'docapi'
	  resources are now available online.
	- Eric Sunshine modified the automated documentation and CVS snapshot
	  generation jobs so that they now send mail to the CVS mailing list
	  instead of only to Eric.  Also the scripts for these jobs have moved
	  from his home directory to /home/groups/crystal/bin.	Hopefully,
	  this way if problems arise with the automated tasks, other people
	  may be able to address the problems in the event that Eric is
	  unavilable.
5-Sep-2000
	- Norman Kramer corrected writestring function signature in glide
	  canvas.
	- Eric Sunshine made the following changes to spoofdir.php:
	    - The $indexfile[] array is now specified as a set of regular-
	      expressions rather than a fixed set of filenames.
	    - Case-sensitivity can now be specified individually for each
	      regular-expression in the configuration section rather than
	      always being assumed case-sensitive.  Currently applies to
	      $ignore[] and $indexfile[] arrays.
	    - Now much more strict about canonicalization of filenames prior
	      to matching.
	- Eric Sunshine made the following changes to the CS Jump Start page
	  at http://crystal.sourceforge.net/.
	    - Added link for online CVS browsing.
	    - Aesthetic improvements.
	- Brandon Ehle did some enhancements to Python scripting.
	- Eric Sunshine made the following changes to the automated
	  documentation building process:
	    - docproc.pl now places downloadable documentation package files
	      in the FTP area rather than the HTTP area.
	    - Modified spoofdir.cfg to access FTP space instead of HTTP space
	      in order to satisfy HTTP requests for documentation.
	    - Documentation packages can now be downloaded via HTTP or FTP
	      rather than being restricted only to HTTP.
	    - Updated the Jump Start page (http://crystal.sourceforge.net/) to
	      reflect fact that documentation packages can now be downloaded
	      via HTTP and FTP.
	    - Updated documentation directory annotations (in spoofdir.info
	      files) appropriately.
	- Fixed a bug in loader so that collision detection is now also
	  enabled for mirror surfaces in the ROOM syntax.
	- Fixed an init bug in csPolygon3D with regards to materials.
	- Added /lib/stdtex to VFS. This new archive contains a bunch of
	  textures that are used by most CS levels (stdtex.zip).
	- Andrew Zabolotny did the following:
	    - Added to win32conf.bat display a note about which packages
	      you should have installed. This depends upon which compiler
	      you use (e.g. it displays slightly different help depending
	      on whenever you use msvc or mingw32).
	    - Enhanced the configure help for DJGPP.
	    - Fixed both dosconf.bat and win32conf.bat (very old bug) to
	      detect correctly whenever makedep is installed. Earlier it
	      considered makedep to be always installed.
	    - Added `walkall' target to compile just the plugins that are
	      needed for walktest. Currently `make walkall' is equivalent to:
		make walk soft csfont simpcon perfstat rapid
	    - Fixed DOS/DJGPP build in debug mode with shared libraries.
	      Added functions that are usually inlined (e.g. strcmp, memcmp,
	      strcpy) to the list of exported functions in djgpp/loadlib.cpp.
	      Fixed a bug in dosraw driver related to the fact that transfer
	      buffer is overwritten by printf() (which is used in debug
	      mode to print some videocard information). So, in overall,
	      DOS port now works in both static/dynamic and optimize/debug
	      modes.
	    - Added perfstat plugin to static.cpp if SCL_PERFSTAT macro is
	      defined. Effectively this adds FPS display for static mode
	      build.
	    - Enhanced (fixed) linex2d driver: now it uses "helvetica" font
	      and GetTextWidth/Height are implemented properly. Also
	      DrawText() works properly now (previously it painted text
	      shifted up by some amount).
	    - Added DrawBox() method to linex2d driver. Also I have fixed
	      Clear() which were not clearing one pixel horizontally and
	      vertically.
	    - Added AllowContextResize(bool) method to iGraphics2D. By default
	      context resizing is *disallowed*. This is because most
	      applications won't handle the cscmdContextResize broadcast
	      correctly, and will misbehave.  Applications which handles
	      this broadcast correctly should issue AllowContextResize
	      (true). Note that engine already does this (since engine
	      handles context resizes) thus you should do this only for
	      applications that don't use the engine.
	    - Fixed x2d driver to allow width and height only in steps of 2.
	      The reason is to not allow odd window width, because in some
	      cases XFree86 (?) does not like that (every scanline is
	      shifted by one pixel). I don't think this is a limitation,
	      but if somebody don't like this, it should limit at least
	      width to be even.
	    - Moved glMatrixMode(), glOrtho(), glViewport() to 2D common
	      OpenGL driver. This was done to allow 2D driver to function
	      standalone (without 3D).
	    - Added (not replaced) a new gl2d_font2.cpp, another OpenGL
	      font "server". I have used glBitmap() to draw font, which
	      will help on platforms with buggy OpenGL support for
	      alpha-mapped textures (such as OS/2 and MacOS). We still
	      have to see how compatible this approach is; but it at least
	      works with OS/2 software OpenGL 1.0 (previous font rendering
	      did not). Maybe we should make this a runtime option in
	      opengl.cfg, I'm not sure. Also I have implemented text
	      clipping. Vertical clipping seems to work, horizontal
	      clipping should also work but I cannot fully test it due
	      to non-implemented "xorig" parameter in glBitmap() in OS/2
	      OpenGL.
	    - Implemented runtime context resizing for the OS/2 OpenGL
	      canvas. Also it respects AllowContextResize(bool).
	    - Added a new test application: G2DTEST. As you may conclude
	      from his name, this small application is meant to test most
	      aspects of 2D graphics canvas plugins. Also it is a curious
	      example of a application which uses just the graphics canvas
	      plugin (without 3D renderer).
	    - Fixed line drawing in graph2d.cpp (this affects most canvas
	      plug-ins). Now line drawing is absolutely perfect,
	      floating-point coordinates are correctly used. Even OS/2
	      OpenGL shows little errors with line drawing, compared to
	      graph2d.cpp (and OS/2 OpenGL is known to be accurate).
	      This effectively broke CSWS which was designed for the
	      "incorrect" line drawing behaviour :)
	    - Fixed a bug in csOpenGLCommon2D::SaveArea which caused a shift
	      to the area which is going to be saved.
	    - Fixed CSWS after last changes to line draw routines. Now
	      CSWS works with OpenGL, at least on OS/2.
	    - Added PerformExtension ("flush") to OpenGL common graphics
	      canvas. This can be used to do performance measurements.
	    - Improved software line drawing performance from ~5.5
	      MegaPixels/sec to approximatively ~15.8 MP/sec on Celeron/433.
	      I think the assembly line drawing routine (which is used only
	      in Win32/MSVC) should be removed since first of all I think
	      it is slower, and secondly I doubt it is accurate (e.g. I'm
	      sure it fails most of the accuracy tests in g2dtest). (for
	      comparison: OS/2 OpenGL canvas gives just 3MP/sec, XFree86
	      linex2d driver gives 7.3MP/sec :-). Hurray, we have the
	      fastest-and-most-accurate line drawing routine in the world! :-)
	    - Removed the WriteChar() routine from iGraphics2D interface.
	    - Slightly improved software text drawing speed fom ~300000
	      characters/sec to ~330000 characters/sec. For comparison:
	      OS/2 software OpenGL gives ~26000 characters/sec and linex2d
	      driver gives about ~241000 characters/sec.
	    - Moved some OpenGL initialization stuff (realted to OpenGL
	      start-up settings) from 3D driver to the 2D (canvas) driver
	      (to the common part), to make possible to use OpenGL 2D
	      driver without the 3D driver.
	    - Added a note about C_INCLUDE_PATH needed to be set up correctly
	      before you do "make depend" to the win32gcc.txi file.
	- Release of 0.17r001.
	- Eric Sunshine made the following documentation-related changes:
	    - Renamed documentation targets: apidoc --> pubapi, devdoc -->
	      devapi.
	    - Worked around obnoxious bug in DOC++ 3.4.2 where it accidentally
	      creates hidden output files.  (Maybe we should move to Doxygen,
	      as DOC++ seems excessively buggy.)
	    - Minor modifications to scf.h and dungeon/dnfnodes.h to pacify
	      DOC++.
4-Sep-2000
	- Brandon Ehle did some maintenance to the Python scripting stuff.
	  Need to wait for next SWIG release for everything to fall in place.
	- Added more information to the object list of levtool app.
	- Added a detail window to show the individual polygons and curves of
	  a thing or sector.
	- 'Levtool' recalculated lighting every time a new level was loaded.
	  No longer does so.
	- Eric Sunshine made several changes to the PHP script which allows
	  browsing of the FTP space from HTTP space.
	    - Major overhaul.
	    - Renamed from cvssnap.php to spoofdir.php.
	    - Now very general in nature, highly configurable, and generates
	      much more aesthetically pleasing directory listings.
	    - Now capable of providing virtual HTTP access to any directory
	      within or outside of the web space.  No longer tied to _only_
	      spoofing 'cvs-snapshots' directory from FTP space into HTTP
	      space.
	    - Directory listings can now be annotated.	The annotation is
	      displayed along with the directory listing and can be used to
	      describe the directory contents in human-readable terms.	See
		http://crystal.sourceforge.net/cvs-snapshots/
	      and
		http://crystal.sourceforge.net/docs/
	      and any of their subdirectories for an example of how this works
	      and how useful it can be.
	    - Overhauled index.php at http://crystal.sourceforge.net/.	Added
	      many missing links; particularly for documentation.
	    - Eliminated old dirlist.php which vended the docs/download
	      directory.  spoofdir.php now handles this functionality plus
	      much more.
	    - Eliminated Frank's 'build_fake' and cousins since spoofdir.php
	      can now handle this functionality as well.
2-Sep-2000
	- Fixed bug in csWorld::Clear() where that function would forget
	  to clear the texture cache in G3D. This could result in crashes
	  when reloading a world in OpenGL for example.
	- Added a test in OpenGL to prevent ClearCache() from crashing
	  when it was called at destruction time.
	- Changed fatal error 'Light 'xxx' not found' into a warning.
	  This makes sure that old levels that still use the old
	  collection syntax will work (but without the light in the
	  collection).
	- Added ObjectView window to levtool. This contains all objects
	  in the world in a csTree component. Currently this list is only
	  a subset. It will be completed later.
	- Martin Geisse added a patch to the VC project files from Mark
	  Welch.
1-Sep-2000
	- Robert Bate updated the Mac port projects a little.
	- Fixed a bug in the WalkTest entity system which could cause
	  crashes at exit (especially with flarge).
	- Made csEntityList a csVector. It appears that csPObject's can
	  only safely have one parent.
	- Updated apimod17.txi documentation.
	- Fixed 'new view' in levtool app.
31-Aug-2000
	- Martin Geisse fixed two compiler warnings.
	- Added csView::SetWorld() to change the world that is used
	  for the view. This is useful for programs that reload the world
	  later.
	- Extended csTransformationManager so that you can initialize
	  it again. Then call this initialize from csWorld::Clear().
	  This means that it is now safe to clear the world and reload
	  it.
	- Added the ability to load levels in levtool. Now you just can
	  use the 'Load Level' button and select a ZIP file using the
	  archive. This will load the level in all available engine views.
	- Added the first useful feature to 'levtool'. A 'cleanup' button
	  that will remove all lightmaps and PVS info from a level archive.
	- Added 'New View' button to add a new engine view window.
	- Made the Control Window in levtool dragable.
	- Found a bad bug in the loader (related to the recent changes
	  with things) which caused things to be added twice to the sector
	  list. This caused crashes when loading levels which had things
	  with portals, caused things to be lit too much, and also caused
	  things to be drawn too much.
	- Removed some comment from Andrew about a
	  csPolygonClipper::ClassifyBox which was wrong according to
	  Andrew. But it isn't. The function is correct.
	- Fixed a bug in WalkTest with regards to particle systems. The
	  new GetMovable().UpdateMove() function was not called which
	  resulted in the particle systems not being visible in STATBSP
	  levels.
	- Added csMovable/iMovable GetFullTransform() which will return
	  the full transformation with regards to hierarchical
	  transformations (i.e. it will combine the local transform
	  with the one from the parents).
	- Added csWorld::FindLight(char*name) to find a named light.
	- Changed collection syntax in loader to only allow adding
	  lights based on the name of the light and not on the sector/index.
	- Added support for adding sprites to collections in the loader.
	- Removed csWorld::GetThing since that can now be done by using
	  the 'things' and 'skies' public vectors
	  (i.e. world->things.FindByName(name)).
	- Removed csWorld::NewSector since this is obsoleted by the
	  newer csWorld::CreateSector or csWorld::CreateCsSector.
	- Things and skies are now also added to the world by the
	  loader.
	- Updated apimod17.txi.
	- Fixed WalkTest so that collision detection with moving things
	  is now ok.
	- Fixed a bad bug with STATBSP level caused by recent changes.
	  The static thing could get corrupted in some cases. Also I forgot
	  to add the static thing to the world.
	- Andrew Zabolotny did the following:
	    - Fixed all textures in MazeD and csws to be power of two.
	      This includes notebook textures. Previous csws.zip had some
	      strange dithering applied, and color wheel was broken (it
	      was designed to be 129x129, and it was resized to 128x128
	      which caused one scanline of garbage below the color wheel).
	      Also the csws.zip archive is almost twice smaller now (all
	      pngs were saved as truecolor, while 256 color format suffice
	      for most PNGs except wheel).
	    - Fixed an almost unnoticeable bug in csws listboxes which
	      leads to directory listbox sometimes to have two focused
	      items (when you switch directories).
	    - Re-generated the color wheel bitmap to size 128x128 rather
	      than 129x129. This leaded to small changes in code as well.
	    - Added error reporting for OS/2 loadlib.cpp.
	    - Some fixes for OpenGL canvases. CSWS now looks better
	      but still bad.
	- Increased CS version number to 0.17r001 to indicate the new
	  release which is going to happen soon.
	- Put back the double buffer stuff in openglcommon which Andrew
	  removed.
30-Aug-2000
	- Andrew Zabolotny:
	    - Some fixes to MazeD. Now it works, but is unusabled due to
	      some #if 0's I had to insert here and there. There are lots
	      of changes to be done before MazeD will become useable again.
	    - Transformed LibPath vector back into a static variable.
	      I think the problem with unix/loadlib.cpp is solved now,
	      I have removed the *real* source of problems, I believe. I
	      hate half-solutions.
	    - Fixed the problem with multiple similar errors popping up
	      when a shared library is missing. I have added the
	      csPrintLibraryError() function which prints dlerror() or
	      whatever. It is invoked once at the end of csFindLoadLibrary,
	      if library loading has failed.
	    - Added csHalo::Get/SetIntensity methods. To change halo
	      intensity, do light->Halo->Set/GetIntensity (float).
	- Removed csSprite::GetSector and GetSectors since that is now
	  part of the csMovable. Forgot to do that yesterday.
	- iCamera::GetAspect and GetInvAspect returned the wrong values
	  (GetAspect returned inv_aspect and vice versa).
	- Moved calculation of the FOV angle to csCamera. This makes
	  the engine a bit more efficient since this was now done every
	  time a portal was traversed. This saves four divides, five
	  multiplies, an acos, and an sqrt for every portal every frame.
	- Added csCamera::SetFOVAngle() to set the FOV using an angle
	  in degrees.
	- Added a 'width' parameter to csCamera::SetDefaultFOV() and
	  csCamera::SetFOV() so that the FOV in angles can be computed.
	- Added 'fovangle' console command to get/set the FOV with degrees
	  as a parameter.
	- Added support for csMovable in csCollection too. The plan is
	  to support hierarchical animation with this technique. Not
	  done yet.
	- Added a vector of collections in csSector. This way collections
	  work similar to sprites and things.
	- Removed csWorld::GetSpriteTemplate and GetThingTemplate since
	  this can easily be done on the public vectors instead.
	- Added csWorld parameter to csCollection constructor.
	- Fixed a bug in csWorld::RemoveSky.
	- Added csWorld::UnlinkCollection and csWorld::RemoveCollection.
	- Fixed the apps in CS due to the latest changes (forgot to do that).
	- Eric Sunshine worked around an instruction scheduling optimization
	  bug in the MacOS/X Server compiler for PowerPC (Macintosh hardware).
	  This bug was triggered by code in edgeclip.inc and would cause the
	  compiler, itself, to hang indefinitely while compiling polyclip.cpp.
29-Aug-2000
	- Integrated a new SDL canvas made by George Yohng
	  <cspace@mmts.nsys.by>.
	- Fixed default HALO parsing. If a NOVA halo was used in a level
	  all following halo's would be NOVA too.
	- Fixed a bug in csSector::RemoveThing. This function didn't
	  delete the thing in the past but it did now. I changed it back
	  to the old behaviour. This fixes Blocks again.
	- Added two new vectors 'things' and 'skies' to csWorld. The plan
	  is to make things and skies have almost exactly the same API with
	  regards to movement and placement in sectors. The move to csMovable
	  is one step. But this list is another one.
	- Removed csSector::RemoveThing/RemoveSky since that happens the
	  same way as with sprites now. Added csThing::RemoveFromSectors()
	  and csThing::MoveToSector().
	- Added csMovable and iMovable::UpdateMove(). Made RemoveFromSectors(),
	  MoveToSector(), and UpdateMove in csThing and csSprite private
	  since this will now be called by the csMovable. This means
	  that when you did:
	    sprite->UpdateMove ()
	  you have to change this to:
	    sprite->GetMovable ().UpdateMove ();
	  Also instead of calling RemoveFromSectors() you now need to
	  call GetMovable ().ClearSectors() and instead of calling
	  MoveToSector() you need to call GetMovable ().SetSector().
	  And don't forget the UpdateMove()!
	- The change above allow application developers to make movement
	  routines based only on a csMovable without having to care about
	  what object is being moved (csThing or csSprite).
	- Made MoveToSector, UpdateMove, and RemoveFromSectors in
	  csSprite and csThing virtual so that subclasses can override
	  them. This happens for csParticle for example. It overrides
	  MoveToSector for its specific purposes.
	- Added is_sky parameter to the csThing constructor so that a
	  thing knows it is a sky object or a normal thing.
	- Fixed all the apps with regards to the above changes.
	- Update the apidoc17.txi documentation with regards to the above
	  changes.
	- Update simple.txi and simple2.txi tutorials.
	- Norman updated worldfmt.txi for TEX_SET_* to MAT_SET_* change.
	- Did various other updates to the worldfmt.txi to reflect recent
	  changes with materials, shading, ...
28-Aug-2000
	- Martin Geisse added movable.cpp to the MSVC project files.
	- Norman Kramer added a 'const' modifier to csMovable.
	- Norman changed TEX_SET_* to MAT_SET_*, tex set was broken after
	  recent changes.
	- Norman fixed another instance of thing First/NextThing calls
	  which Jorrit forgot to update.
	- Update from Brandon Ehle to the PS2 port:
	  PS2 completely compiles in static mode, need to fix the
	  unresolved externals now.
	- Added GetPosition() to csMovable and iMovable.
	- Fixed a bad bug in sprites. When a sprite was deleted it
	  could potentially delete it's parent sector with it. Not very
	  good :-)  I fixed this by changing the csNamedObjVector of
	  sectors to a normal csVector.
	- Removed csSprite3D::GetW2TTranslation(). This function is obsolete
	  and exactly the same as csSprite3D::GetPosition().
	- Similarly removed csSprite3D::GetW2T() and GetT2W() and replaced
	  with the more general GetTransform().
	- Removed csSprite3D::SetPositionSector() since this function
	  needs to be implemented in csMovable and using a better
	  algorithm. It wasn't used anyway.
	- Fixed documentation for csCamera::LookAt() a little.
	- Added csMovable to csSprite. Added GetMovable() and UpdateMove().
	  Similar to how it works with things.
	- Removed SetPosition, MovePosition, GetTransform, and GetPosition
	  from csSprite since that is now in csMovable. IMPORTANT NOTE! You
	  should now call sprite->UpdateMove() after updating the position
	  in the csMovable returned by GetMovable(). If you don't do this
	  then important information in the sprite structure may not be
	  updated. Note that this change makes movement of sprites more
	  efficient since UpdateMove() has some cost. In the past it was
	  called on every movement/transformation call which means it was
	  called too often sometimes.
	- Fixed all the CS apps for the new csMovable change for sprites.
	- Changed csSprite2D to use the position from csMovable.
	- Added csMovable/iMovable SetPosition() with only a position
	  as a parameter.
	- Added csMovable SetParent() and GetParent() which are going
	  to be used for hierarchical transformations later. This is
	  not done yet though.
	- Changed the list of sprites in a sector from csNamedObjVector
	  to csVector. This is a big bug. If a sprite got deleted it
	  could delete its parent sector with it.
	- Made the list of things and sky objects a csVector instead of
	  a double linked list. Also removed the GetFirstSky()
	  and GetFirstThing() calls from csSector (and GetNumSkyThings(),
	  GetNumThings(), AddThing(), and AddSky()).
	- Also removed GetParent/SetParent and GetNext/SetNext for polygon
	  sets since that is no longer needed now.
	- Note that Blocks is broken now (crashes when you return to menu).
	  I will fix this later.
	- Andrew Zabolotny did the following:
	    - Fixed unlighted textures in 32 bit videomodes.
	    - Fixed halo drawing in 32-bit modes. Halos with R > 1 used
	      to overflow because the highest of the 32 bits is used for
	      sign. Now halos are limited to R [0..2] G [0..2] B [0..2].
	    - Changed HALO() keyword a bit; the old syntax is supported
	      for backward compatibility still. The new syntax is:
		HALO (halo_type, ...)
	      The arguments after halo_type depends of the halo type.
	      Currently there are two types of halo supported:
		- CROSS: the old halo type.  Two arguments are expected: halo
		  intensity (float) and "cross-factor" (float).
		- NOVA: a new halo type (stolen from GIMP).  Three arguments
		  are expected: initial random seed (integer), number of spokes
		  (integer) and roundness (float).
	      Nova halo looks best if used with bright whitish lights
	      (e.g. R||G||B > 1).  Example: LIGHT (CENTER (xx,xx,xx)
	      RADIUS (xx) COLOR (1,1.2,1.4) HALO (NOVA))
	    - Changed a bit the loader: added the FindMaterial(char*)
	      routine which tries to find a material with given name; if
	      not found it tries to find a texture with this name; if it
	      is found a material is created from it.
	      This way it is compatible with old worlds, and with new
	      worlds as well.
	    - Changed the loader so that polygons with portals and with
	      alpha == 0 (e.g. absolutely transparent) will get the
	      POLYTXT_NONE shading type. If you are going to change the
	      alpha value later (e.g. to make a portal dynamically
	      appear/disappear) you should call poly->SetTextureType ()
	      manually. This conserves quite a bit of memory which is
	      normally not used. For example, with flarge.zip this reduces
	      the size of lightmaps from 415K to 312K.
	    - Cleaned up the opengl makefiles a little.
	- Added MATERIALS support to LIBRARY keyword.
	- Fixed standard.zip to the changes from Andrew (i.e. added a
	  MATERIALS section to standard.zip).
	- Fixed apps to refer to the right materials now.
27-Aug-2000
	- Made new iMovable interface and let csMovable implement it (through
	  embedding).
	- Changed csThing to use the new csMovable. This has the following
	  implecations with regards to the API for moving things: the
	  functions, SetSector(sector), GetSector(), SetPosition(),
	  SetTransform(), GetTransform(), MovePosition(), And Transform(matrix)
	  are all gone and have moved to the csMovable. This means that
	  for example:
	    thing->SetSector(sector);
	  becomes:
	    thing->GetMovable ().SetSector (sector);
	  In addition Transform() itself has been renamed to UpdateMove().
	  You must call UpdateMove() after doing a change to the csMovable
	  so that internal data structures are updated correctly.
	  Note: GetSector() now has an index parameter telling which sector
	  to take. To get the old behaviour just use 0 as index.
	- Changed iThing to use the new iMovable.
	- changed csNamedObjVector to csVector (in csMovable) because
	  csNamedObjVector deletes the children at destruction.
26-Aug-2000
	- Added a new csMovable class which encapsulates moving entities.
	  It does not hold geometry but everything needed to do the
	  object to world transformation and move that around.
	  Class is not yet used but preparation work for the usage
	  of this class has started. The main benefit of this class will
	  be to make sure that the API for moving sprites and things
	  is the same by putting that API in a separate class.
	- Removed strange 'sector' pointer from csPolygonSet and put it
	  in csThing instead. Sectors don't have a need for a 'sector'
	  pointer as this is equal to 'this'. Also this will make it easier
	  to use the new csMovable.
	- Removed 'sector' pointer from csPolygon3D because it is unused
	  and dangerous (redundant) to keep it there since this information
	  is implicit in the parent of the polygon (which can move to another
	  sector). (note: this also removed SetSector() and GetSector()
	  calls). This removal had lots of repercusions in the entire
	  engine so several things have been slightly rewritten.
	- csRenderView now contains a this_sector and previous_sector pointer
	  (also triggered by the removal of csPolygon3D::sector).
	- Martin Geisse added some safety checks to 2d animations.
	- Norman Kramer added missing rootdefines section to sndload.mak,
	  fresh rebuilds ("make linux" for instance) lost information what
	  sound decoders to build, which then resulted in "sound file ...
	  corrupt" upon loading.
25-Aug-2000
	- Brandon Ehle added fixes to python to get it to compile again.
	- Brandon Ehle started check in of Playstation 2 port.
	  Don't get too excited just yet, may not be able to check in
	  the platform specific code.
	- Andrew Zabolotny implemented the following for levtool:
	    - Implemented the per-window key handling.
	    - Implemented multiple views. Right now there are two engine views
	      created upon startup.
	- Andrew changed TEXTURING into SHADING.
	- Andrew added a check for NT's CMD.EXE to win32gcc.mak.
	- Andrew: now PLUGINS.DYNAMIC will compile if USE_SHARED_LIBS=yes.
	  It used to be broken after my yesterday change.
	- Andrew Moved <stdarg.h> to be before <stdio.h>. Please always
	  put <stdarg.h> before any other system includes as on OS/2
	  this gives compilation errors.
	- Martin Geisse added a missing include in csutil/halogen2.cpp.
24-Aug-2000
	- Wouter Wijngaards did a few optimizations on the makefiles
	  so that compilation should be somewhat faster.
	- Andrew Zabolotny did the following:
	    - Now for builds with enabled shared libraries all cross-platform
	      plugins will be built by default. For static builds only
	      the most needed plugins are built (and linked against every
	      executable).
	    - Documented the -fs/-nofs switch in help (fullscreen toggle).
	    - Fixed the 32-bit unlighted texture drawing bug (long-standing).
	- Fixed the WaveOut sound driver makefile so that the description
	  is correctly showed.
	- Enabled the WaveOut sound driver in the win32gcc.mak makefile
	  because it works fine.
	- Fixed the win32gcc.mak file so that it works better on Windows
	  NT (replaced '/' with '\' in two places).
	- Fixed the d3ddx6.mak file so that it's description is aligned
	  correctly with 'make help'.
	- Fixed ddraw61.mak so that the description is a little shorter.
	- Fixed Makefile so that it correctly displays help for the install
	  target with win32gcc.mak.
	- Added the first (VERY primitive) version of the new 'levtool'
	  application. This will be a CSWS based application (and also
	  commandline based) with which you will be able to do various things
	  on levels. Here are a few uses that I see:
	    - Recalculating lighting with graphical dialog for
	      controlling the lighting optionsl (radiosity, ambient, ...)
	    - Recalculating PVS.
	    - Portalizing a level.
	    - Deportalizing a level.
	    - Extracting entities and objects.
	    - Adding entities and objects.
	  It will have a 3D preview of the level too.
	  Current version is just a version of csws3d that is modified
	  a little.
	- Andrew Zabolotny implemented a nice engine-in-a-window in the new
	  levtool application. This is the best try of this kind of
	  application written until now; the engine is fully integrated
	  into the windowing system and doesn't look alien.
	- Andrew also committed some fixes to SGI alpha channel loading
	  which he received from someone else.
	- Martin Geisse updated the VC project files.
23-Aug-2000
	- Martin Geisse fixed a bug in the console plugin.
	- Gary Haussmann enabled GL-level backface culling. This makes
	  the OpenGL renderer more consistent with the software renderer.
	  When used together with the engine this should make little
	  difference as the engine does backface culling. But it may make
	  a difference if you use G3D on your own.
	- Forced recalculation of lightmaps now only happens if you
	  change the lightmap size (i.e. from 16x16 lumels to 8x8) or
	  a global format change happens. In the past it also happens
	  if you changed parameters like ambient and so on. For changes
	  of ambient to have effect you now have to do '-relight' or
	  '-recalc' explicitelly.
	- Norman Kramer included missing ievent.h to csclear.
	- Norman fixed the OpenGL renderer with fog. There was one bit
	  that wasn't properly stored with glPushAttrib. This causes
	  crashes on the voodoo3 and very likely also the big crash
	  that I have on the GeForce (to be checked).
	  (NOTE: after checking this it doesn't appear to be enough.
	  I'll have to experiment further).
	- Norman fixed csclear.cfg for the right console.
22-Aug-2000
	- Got a small patch from Rene Dudfield with new console command
	  (for WalkTest) 'listactions', and a new sprite name argument
	  for 'addsprite'.
	- Added apimod17.txi documentation which explains how to go
	  from 0.16 to 0.17. It is not complete though.
	- Martin Geisse added the sound information to apimod17.txi.
	- Fixed loadlib.cpp so that it again prints the error message
	  from dlerror. This is ugly but it is the only way to get the
	  useful error messages back.
	- Wouter Wijngaards did some fixes to the install system.
	- Andrew Zabolotny found one BigBug {tm} and one small bug that
	  prevented DOS port from working. Now it works in both static
	  and dynamic linking mode, with gcc 2.95.2 and binutils 2.9.5.
	  Hurray. FPS for some reason stays at zero, but I'm not sure this
	  is DJGPP-specific.  Also for static linking mode
	  csAddLibraryPath() is not called since it is not even present.
	- Norman Kramer made the csBitSet members protected (were private
	  before).
21-Aug-2000
	- Andrew Zabolotny did the following:
	    - Changed perfstat plugin to compute fps once per 1/2 second
	      rather than once per 10 frames. This will compute more accurate
	      values in high-fps environments and also makes fps numbers
	      more steady. Also iPerfStat::SetResolution sets the interval
	      in msecs rather than in frames.
	    - Changed FPS display in walktest to display just two numbers
	      after dot. I don't think you really care whenever you have
	      20.111 or 20.112 fps :)
	    - Created the iEvent interface. It is really a very special
	      interface since its the first time (as far as I know) an SCF
	      interface with member variables is used. However, this is
	      supposed to work on all platforms. Be warned though.
	    - csEvent is now just a particular implementation of iEvent.
	      You can create your own objects implementing iEvent interface.
	      PLEASE always use QueryInterface (or rather QUERY_INTERFACE
	      macro) to get access to extended fields; NEVER do direct
	      typecasts.
	    - Added a new halo generation routine - csutil/halogen2.cpp. It
	      is not used anywhere yet though. The algorithm has been
	      borrowed from GIMP (`SuperNova' plugin).
	    - Started to work on MazeD material support. Not finished
	      though (even not compilable).
	    - Improved material support. The MATERIALS() statement in
	      world file now looks like this:
		MATERIALS (
		  MATERIAL 'material name' (
		    TEXTURE ('texture name')
		    COLOR (float, float, float)		; R,G,B = 0..1
		    DIFFUSE (float)			; 0..1
		    AMBIENT (float)			; 0..1
		    REFLECTION (float)			; 0..1
		  )
		  ...
		)
	      I have added the GetFlatColor() method to iMaterial and
	      iMaterialHandle. For now the flat_color_X members in
	      iGraphics3D polygon structures are still present; however I
	      hope one day they will be gone and a material handle will
	      be always present, since materials also support flat color.
	      For now only software renderer supports materials with flat
	      colors; I hope with time other renderers will be also
	      updated for this.
	    - Renamed RGBcolor -> csRGBcolor and RGBpixel -> csRGBpixel.
	      In general, we should think where to put all
	      library-independent header files such as rgbpixel.h and
	      cspixmap.h. I would say they could live in main include
	      directory since those classes are absolutely independent
	      and completely inline.
	    - Changed the way engine defines and uses texturing. There are
	      four polygon texturing types now: POLYTXT_NONE (no texturing,
	      useful when using materials without textures -- it defines no
	      texturing parameters at all thus saves memory), POLYTXT_FLAT
	      (flat-shading, only the angle between light and polygon
	      normal is considered if CS_POLY_LIGHTING flag is set, and
	      entire polygon is painted with one lighting value; every
	      vertex has an U/V pair associated), POLYTXT_GOURAUD (every
	      polygon vertex has a color and those colors are interpolated
	      across scanlines) and finally POLYTXT_LIGHTMAP (a polygon
	      which has an associated lightmap and a texture plane). Now
	      it is possible to define and use objects which have flat-color
	      but still receive light with Gouraud as well as without
	      Gouraud interpolation; in general this open a whole new area
	      for experimenting.
	    - New keyword in world file inside the POLYGON () context:
		TEXTURING (NONE | FLAT | GOURAUD | LIGHTMAP)
	      This defines one of the texturing modes above.
	    - MIXMODE() keyword is applicable to all texturing types
	      except LIGHTMAP. Alpha transparency for such polygons can be
	      defined in two ways:
		POLYGON (... ALPHA (50) MIXMODE (MULTIPLY2))
	      or
		POLYGON (... MIXMODE (MULTIPLY2 ALPHA (0.5)))
	      To be honest, I don't like having two different ways to
	      specify alpha. I don't like the different scale either
	      (0..1 and 0..100).  Polygon always keeps alpha as a value
	      0..255 (and iGraphics3D always receives alpha in this
	      range, the old 0..100 scale is gone).
	      In general, I would say that giving colors and alpha as
	      floating-point value looks like a bad idea. I would store both
	      them as 0..255 value, or as a floating-point 0..1 value.
	      Maybe it makes sense to change this in the new loader?
	    - DECLARE_GROWING_ARRAY does not have a reference counter
	      anymore. If you need a reference counter, use
	      DECLARE_GROWING_ARRAY_REF. This gives slight less memory
	      usage in some places. I have changed thing and polygon
	      template objects to use growing arrays for vertices. This
	      does not change memory footprint and gives better readable
	      code (and maybe a little less binary size).
	    - Simplified polygon template class a lot by moving most state
	      variable into a csFlags variable. Added support for COLORS()
	      keyword in polygon templates. GOURAUD keyword is now obsolete
	      in both normal polygons and polygon templates; use
	      TEXTURING (GOURAUD) instead. This gains us a little memory.
	    - In addition to TEXNR() everywhere it appears MATTERIAL is
	      accepted as a synonym; one day TEXNR should die.
	    - Some fixes for DJGPP. Will work with latest binutils and
	      djgpp (binutils 2.9.5 and gcc 2.95.2). Latest binutils seems
	      to spit on __attribute__((constructor)), thus I have used a
	      C++ class for startup initialization of loadlib.cpp. The
	      keyboard doesn't respond now though... dunno, maybe its
	      related to my (weird) system configuration.
	- Norman Kramer updated the win32gcc.txi documentation to make it
	  a little clearer.
	- The big change from Andrew triggered a strange behaviour in
	  the dynamic linker (dlopen) on Unix. Andrew renamed csMaterialMM
	  in the texture manager to csMaterialHandle. However csMaterialHandle
	  is already another class in the engine. When loading the software
	  renderer dynamically it will use the already loaded csMaterialHandle
	  in the application which is wrong. I fixed this by renaming
	  csMaterialHandle in the engine to csMaterialWrapper. Not only does
	  this solve the problem but it is actually also a better name.
	  I also renamed csTextureHandle to csTextureWrapper and replace
	  Get/Set MaterialHandle with Get/Set MaterialWrapper in various
	  places. No doubt you'll have to modify your applications for this.
	- Martin Geisse fixed a compiler warning under msvc5.
20-Aug-2000
	- Norman Kramer updated the install documentation for the win32gcc
	  target.
	- Wouter Wijngaards did the following:
	    - removed memory.h from csdef.h since it is not used anymore
	      (and memory.h is not in include).
	    - Added DrawTiled and DrawTiledShifted methods. These draw the
	      pixmap on a rectangle of the screen, tiling the pixmap. A
	      shift can be applied for animation, or to make several calls
	      align properly.
	    - Fixed uninstall of docs.
19-Aug-2000
	- Norman Kramer did the following:
	    - Added csutil to mdl2spr.mak, gfxtest.mak and t3d2cs.mak to
	      resolve link error with mingw.
	    - Added include statement to ptests3d.cpp to make it compileable
	      with mingw.
	    - Added libs to the makefiles to link with mingw.
	    - In the include statement of d3d_txtcache were 2 invisible
	      chars that prevented compiling with mingw they were
	      invisible in notepad but luckily wordpad showed them.
	- Martin Geisse updated the MSVC project files.
18-Aug-2000
	- Martin Geisse fixed the error output in the sound loading function
	  of csparser.
	- Wouter Wijngaards:
	    - Unix system now checks $CRYSTAL or defaults to
	      /usr/local/crystal/ dir. Thus you can create .rpms, or .tgzs
	      that are easy to install, by installing to /usr/local/crystal.
	    - Fixed various compiler errors and warnings.
	    - Fixing install a bit.
		- make install now requires all files to be built.  (all except
		  mazed build now)
		- for unix, when /usr/local/crystal is not a valid install (no
		  vfs.cfg can be opened in it), the current dir is used.  Thus,
		  people unaware of the install changes will be able to run the
		  binaries from CS/ as usual.
		- DLERROR: warning is now only printed once, not while
		  searching, but only when finding fails.  It is printed for
		  all platforms now.
		- install now works correctly with the funky tutorial/map2cs
		  directory.  (uninstall will not delete the tutorial
		  directory, as it contains no files)
	    - Added registry searching to find install path for win32. If
	      that fails the environment variable CRYSTAL is used. If that
	      fails too, the default C:\Program Files\Crystal\ is used.
	      I cannot compile this code, it is untested. Also, the registry
	      entry 'SOFTWARE\CrystalSpace', key 'installpath' is a guess for
	      a reasonable value.
	- Wouter fixed lib/ addition to be platform independent.
	- Norman Kramer made LibPath in findlib.cpp a pointer. Previously it
	  caused trouble with plugins binding CSSYS itself like the enginep
	  plugin (LibPath was created again but was zeroed out) (NOTE:
	  its not destructed - os has to take care of it).
	- Norman fixed a bug in software sound renderer:
	    Sources vector was initialzed with NULL which is intresting
	    since Sources is not a pointer :) Not that the compiler
	    complained about, but at some point programs using the
	    soundrenderer segfaulted.
	- Accidently left on PVS building. I wonder why nobody complained
	  about dmburg needing several hours to start up :-)
	- Fixed BMP loader so that it doesn't enable ALPHA anymore.
	- Removed the particle list that was still in csSector. This is
	  not needed as particles are in the 'sprites' list.
	- Added new csWorld::GetNearbySectors() which returns an iterator
	  to iterate over all sectors near some position and a radius. This
	  function takes space warping portals into account.
	- Added csWorld::GetNearbyObjects() which returns an iterator
	  to iterate over all nearby objects. You can specify the type
	  of object to iterate over. It supports sectors, sprites, things,
	  lights, ... Currently this function does returns all things
	  and sprites that are in reachable sectors. It needs to do
	  distance calculation there too.
	- Changed WalkTest collision detection to use the new iterator
	  to find nearby sectors. This is better because:
	    - Easier to read like this.
	    - Correct: the old version only looked at adjacent polygons
	      and not further.
	    - Takes space warping portals into account.
17-Aug-2000
	- Martin Geisse fixed a bug in csloader related to sound.
	- Martin also added the cssysdef.h include to getopt.cpp.
	- Martin changed appvsh.dsp to binary in CVS.
	- Martin cleaned up software sound a bit.
	- Norman Kramer added a /lib/csws entry to a zip containing csws
	  textures in power of 2 sizes (almost all - not the toolbar tho).
	- Did some cleanup on terrain.cpp and also started support
	  for directional lights. i.e. a directional light is a light
	  with no position (only a direction) and infinite radius.
	  This will be one way to (dynamically) light the terrain.
	  In the future we will also add real lightmapping support
	  (which will allow shadows for buildings and objects on the
	  landscape). This directional lighting is not working yet.
	- Made the perfstat plugin optional for walktest.
	- Some fixes to csphyzik from Michael Ewert.
	- Increased far clipping plane in csTerrain::SetDetail() and
	  decreased near clipping plane.
	- Wyatt Miler updated the Mac project files and fixed a compile
	  bug in dtsimple.
	- Wouter Wijngaards: In addition to adding the install_dir to the
	  shared library search path, now also the install_dir/lib/ is added to
	  the shared library search path.  So that files in that dir may also
	  be found.
	- Wouter also changed install so that it will install html docs as
	  well.
	- Martin Geisse updated the MSVC project files.
16-Aug-2000
	- Norman Kamer fixed scfreg.mak.
	- Alex Pfaffe fixed a bug in the terrain engine where it would
	  underestimate the size of the vertex buffer.
	- Martin Geisse patched the ds3d sound renderer so that it works
	  again and cleaned up the software sound renderer.
	- Martin fixed a bug in his last update to the MSVC project files.
	- Andrew Zabolotny did the following:
	    - Changed InferInstallPathOf() into GetInstallPath(). Unlike
	      before, the memory is not allocated inside the routine;
	      instead you pass a pointer to a buffer and the size of the
	      buffer; this solves the problem on platforms with different
	      heaps in different modules.
	    - Latest changes created the dependency SCF -> cssys which is
	      bad.  I have fixed that by adding an additional method called
	      scfAddLibraryPath which should be used to set the directory
	      where SCF should look for shared libraries. The effect of
	      scfAddLibraryPath is incremental, that is, you may call it as
	      many times as you wish; all these directories will be searched
	      by scfLoadLibrary () to find shared libraries, in the order
	      they were passed to scfAddLibraryPath ().
	      The initial contents of this list is system-dependent, but
	      as a general rule of thumb they will prefer the current
	      directory first. This is so that any local installation of
	      CS will override the global one.
	- Andrew Zabolotny changed the way csLoadLibrary works. Now it
	  accepts a full file name. There is a new routine called
	  csFindLoadLibrary which does exactly the same like csLoadLibrary
	  before.
	- Alex Pfaffe fixed texture coordinate generation in the terrain
	  engine. This makes the terrain look MUCH nicer.
	- Worked around a compiler bug in Solaris/gcc 2.7.2 with collision
	  detection and terrain engine.
	- Wouter Wijngaards fixed a 'make solaris' bug with detection
	  of XFree86.
	- Wouter moved a lot of include files to the 'include' directory.
	  This is to make sure that 'make install' only needs to copy
	  the include directory.
	- Wouter removed the reference to the watcom port since that port
	  has gone away.
	- Wouter moved imetabal.h to the include dir.
	- Wyatt Miler fixed a compile error in csSystemDriver header.
15-Aug-2000
	- Norman Kramer removed cstools.
	- Paul Garceau added -fvtable-thunks to cygwin.mak.
14-Aug-2000
	- Norman Kramer added sound NULL driver entry.
	- Norman also made soundloader load on startup.
	- Norman added section [Driver] to sound.cfg to override the
	  default sounddriver that is selected.
	- Norman made DiscardBuffer in isnddata.h pure virtual. Otherwise
	  sndloader could not be loaded (linker thinks its a real class
	  otherwise and demands a nonexistant constructor).
	- Norman added sound entries to mk/user.mak.
	- Norman added missing isndrdr.h include to OSS driver.
	- Norman added soundloader makefile. Corrected SCF stuff, and
	  made Data member in soundwav an unsigned char (in the sound
	  loaders).
	- Norman added csgeom to sndsoft.mak makefile and removed all
	  warnings about float to something conversion.
	- Norman added overriding of system default sounddriver by the
	  entry in [Driver] in /config/sound.cfg and made the SoundData
	  object the parent of soundsource object at creation, thus you
	  can decref your sounddata object after creation of soundsource
	  if you dont need it around nowhere else.
	- Moved call to GetElapsedTime in walktest after the call
	  to SysSystemDriver::NextFrame(). Otherwise the current time
	  would not be valid the first time.
	- Fixed aspect ratio for terrain engine.
	- Initialization of terrain engine uses correct display dimensions.
	- Increased far clipping plane of terrain engine to prevent
	  far away terrain polygons from disappearing too soon.
	- Decreased near clipping plane of terrain engine. This doesn't
	  completely fix near triangle disappearing though.
	- Added csPolygonSet::HardTransform(). With this function you can
	  do a hard transform of the object space coordinates of a thing
	  or sector. This function will also transform the object and
	  world space planes of all polygons in the thing or sector.
	  The easiest way to think about HardTransform is that it does
	  an ObjectToWorld transform and then freezes the resulting world
	  space coordinates so that they become the new object space
	  coordinates.
	- Added csPolyTxtPlane, csPortal, and csPolygon3D::HardTransform()
	  to do the hard transform of the polygon plane, lightmap info, and
	  portal plane.
	- Added support for new HARDMOVE keyword in loader. This is similar
	  to MOVE that was already supported for THING but it does a hard
	  move instead.
	- Added support for FILLONLY zbuffer mode in OpenGL renderer
	  (for DrawPolygon).
	- With the above changes the terrain engine and indoor engine are
	  now better integrated. It is now possible to add sprites and
	  buildings (things) to a sector with terrain. There is no visibility
	  culling done yet so this is still one thing that remains to be done.
	  The terrain also isn't lit yet so you'll get no shadows from the
	  objects that are on it. Other than that and a few small bugs in
	  the rendering of the terrain itself it works reasonably well.
	- Implemented support for fog in terrain engine.
13-Aug-2000
	- Martin Geisse committed a big redesign to the sound system.
	- Fixed a big memory leak in dynamic objects in polygon trees
	  (i.e. sprites in a STATBSP level). Whenever a sprite moved
	  it would add six polygons to the bounding box. This ever growing
	  bounding box would eat up memory and cause enourmous slowdowns
	  for moving sprites in the end.
12-Aug-2000
	- Martin Geisse added some missing error output in WalkTest.
	- Martin also added a missing dependency entry in the MSVC
	  workspace file.
	- Martin fixed a compile-time error in the perfstat plugin.
	- Thomas Hieber removed some warnings in the perfstat plugin.
	- Wouter Wijngaards did the following:
	  Make install now works on Linux, set CRYSTAL to the installdir,
	  including a trailing /. For this I made some changes. engine: now
	  installs vfs.cfg and scf.cfg into TO_INSTALL.ROOT in vfs.cfg	@ is
	  the install dir, with /. Thus $@data/standard.zip.  isystem has
	  an added InferInstallLocationOf(file), used during startup. This
	  has an implementation in csSysDriver, that looks at $CRYSTAL or
	  returns "" (current dir). It can be overridden for other platforms,
	  i.e. for win32 it could look in the registry first, or default to
	  something smarter (like /usr/local/crystal, or
	  C:\Program Files\Crystal). csLoadLibrary has an added const char*
	  installpath, containing installation directory (probably).
	  The 'make install' target now reports the environment setting to
	  set. I also changed the loadlib.cpp files, for unix it is used
	  now, looking in <installpath>lib/ for .so files. The other
	  platforms have it as an unused variable for now. Perhaps they
	  wish to use it? if possible.
	- Norman added "" as installpath, so for scfreg you have to give either
	  the full path to the shared libs or the current is taken as
	  default.
	- Fixed a big memory leak and slow-down with sprites in a STATBSP
	  level. Everytime the sprite moves the old position was not removed
	  from the octree/BSP tree. There is still a memory leak remaining
	  though.
	- Thomas Hieber adjusted some Win32 files for the new install
	  system. Thomas also fixed a few compilation errors.
	- Thomas also removed a few warnings in cscon, perfstat, and
	  opengl canvas.
	- Martin Geisse fixed a bug in the MSVC workspace file.
11-Aug-2000
	- Andrew Zabolotny removed console_open and console_close from all
	  ports. Every system driver has lots of opportunities for
	  initializing/shutting down its printf system, so there is no need
	  in these. The console in Win32 port is driven by the cryst.cfg
	  file as well as the command line. You may use the -[no]console
	  switch to turn on/off the debug console, and you may set the
	  DebugConsole=yes|no option in the [Microsoft Windows] section
	  of the respective .cfg file.
	- Andrew also added zlib/libpng/libjpeg to linkage command.
	- Andrew fixed one msvc-specific error (for (int i = ...)) and
	  removed a few msvc warnings.
	- Andrew also added dxguid library to dx6 driver linkage command.
	- Andrew fixed a small work-around so that Matrix Millenium II
	  AGP will work with the Direct3D driver (45 fps but no lighting).
	- Added 'const' to matrix paramter for csSprite3D::Transform().
10-Aug-2000
	- Added new GetEdges() function to csPolygonEdges which returns
	  an iterator to iterate over all edges in the structure.
	- Fixed a bug in the PVS routine to combine adjacent polygons.
	- Completely rewrote csPoly2D::ExtendConvex() to make it more
	  mathematically robust and faster.
	- Michael Dale Long did more fixes on cctest. Can quit and fire
	  rockets again. Still no console.
	- Martin Geisse fixed a few compile time errors.
9-Aug-2000
	- Mike Bond: The cd command in bash for RedHat 7.0 outputs directory
	  after change if CDPATH is set, changed script to ignore this.
	- Norman Kramer removed cstools.
	- Norman corrected the path to the opengl 2d driver for windows
	  and added some comments (win32gcc.mak).
	- Norman edited glwin32.mak so that either -lGL or the libs in
	  OPENGL.LIBS.DEFINED are linked. Also added CDS_* defines, they
	  were undefined when compiling for win32gcc.
	- Norman reversed the time_t handling for file timestamps. The
	  cs_time way does not compile on linux and im not sure if its
	  safe here to cast cs_time to time_t. But since the computed
	  time_t values are local here and not propagated to the outside
	  its ok to leave it as time_t.
	- Andrew Zabolotny writes: A lot of files have been changed but the
	  change is trivial.  As it turned, there are platforms where "time_t"
	  is signed and there are platforms where "time_t" is unsigned.	 This
	  was causing movement to not work sometimes in walktest, for example.
	  Also this is a potential source of problems in future.  Because of
	  that, I have added a new type in csdefs.h: cs_time which is basically
	  an unsigned long.  Then I have replaced time_t everywhere with
	  cs_time.  Don't use time_t anymore; use cs_time instead.
	- Fixed solaris.mak after Andrew broke it for me.
	- Fixed bug in csPolygonEdges. The iterator was not correctly
	  initialized.
	- Fixed bug in csPoly2D::ExtendConvex().
	- Fixed bug in PVS with regards to combining adjacent polygons
	  for shadow casting.
	- Samuel Humphreys did the following:
	    - Updated walktest documentation for new perfstat related console
	      commands.
	    - Fixed the proc textures after I broke it with the
	      delete [] Scan.GlobalCMap :)
	    - Removed some unnecessary if tests from sft3dcom.cpp.
	- Andrew Zabolotny put back cscmdPostProcess which was removed
	  by Samuel. Andrew also fixed perftest so that it doesn't suffer
	  from garbage caused by Pre and PostProcess events.
8-Aug-2000
	- At last! Fixed one of two big bugs that prevented PVS from working
	  correctly.
	- Changed number of edges in csPolygonEdges class to a prime to make
	  more efficient use of the hashmap.
	- Fixed a small memory leak in csPolygonEdges.
	- Fixed a big memory leak in csHashMap and csHashSet!
	- Michael Dale Long did some fixes for CrystalClear after the recent
	  set of big patches. Not everything works yet, notable the console
	  and quit key do not work.
	- Wouter Wijngaards committed a patch from illume (Rene Dudfield)
	  adding cmds for setting sprite actions to walk console.
	- Wouter Wijngaards changed csSprite3D::SetAction to return a bool
	  on success.
	- Thomas Hieber made WalkTest compilable again.
	- Thomas Hieber removed the 'app' prefix from the executable names
	  for the Windows apps.
	- Thomas added perfstat plugin to the VC project files and did
	  various other updates to the project files.
	- Norman Kramer added missing libs/cssys/general/getopt.cpp to
	  linux.mak.
	- Norman fixed a crash that occured if one press PGUP too often
	  in the console.
	- Norman did an optimization in the OpenGL renderer. He saved
	  a multiplication in fog calculation.
	- Paul Garceau did the following cleanup:
	    - Removed hard library links (-Llibs/zlib, etc.) from Mingw.mak
	      libpng.a, libjpeg.a and z.a now are only available from
	      compilers' include directory.
	    - Updated system dependent source file variables to accomodate
	      AndyZs changes.
	    - exeentry.cpp, as of this update, is once again enabled for both
	      static library and dynamic library builds.  Before this update,
	      only the dynamic library build (USE_SHARED_PLUGINS=yes)
	      was allowed to invoke exeentry.cpp.
7-Aug-2000
	- Samuel Humphreys removed the delete [] Scan.GlobalCMap from
	  PrepareTextures. It must have been some debugging junk I'd left
	  in. Sorry Andy :) (it was also deleted in the destructor as
	  originally intended).
	- Fixed linking bugs with engine plugin. Also added the install
	  targets to enginep.mak.
	- Added WalkTest::DrawFrameDebug3D() to have a routine that contains
	  all debugging stuff that is rendered in 3D.
	- Added support for debug boxes in walktest. This is going to be
	  used for debugging PVS.
	- Added csBox2::SetCenter and csBox3::SetCenter to set the center
	  point of a box without changing size.
	- Added csBox2::SetSize and csBox3::SetSize to set the size of a box
	  without changing the center.
	- Added db_boxshow, db_boxcam1, db_boxcam2, db_boxsize1, and
	  db_boxsize2 console commands to control the visibility, location,
	  and size of the boxes.
	- Added db_boxvis command to test the visibility between the two
	  debug boxes in an octree. This visibility test basically corresponds
	  to the routine that is used for calculating the PVS and as such
	  is useful for debugging the PVS.
	- Added db_boxnode1 and db_boxnode2 console commands to set the size
	  of the respective debug boxes to the size of the current octree
	  leaf.
	- Added public csOctree::BoxCanSeeBox() to test if one box can see
	  the other box.
	- Extended db_curleaf command to give more information about the
	  current leaf.
	- Wouter Wijngaards added wscs3d.cfg to installed set of files.
	- Wouter Wijngaards fixed an internal compiler error for solaris
	  by permutating the code a little (polyset).
	- Andrew Zabolotny did the following changes:
	    - Enhancements to win32gcc.mak. In fact, win32gcc is a fully
	      working port with same features found in other programming
	      environments:
		- dynamic libraries are supported
		- DirectDraw canvas
		- DirectDraw 6.1 canvas
		- Software renderer
		- Direct3D renderer
	      I have not tried other Windows canvases (e.g. glide and
	      OpenGL) but I think they will work as well, with minimum
	      changes required.
	    - Fixed makedep to not generate readonly files when they are
	      missing. This is sometimes caused by uninitialized garbage
	      in st_mode member of `struct stat'.
	    - I have renamed libs/cssys/win32/printf.cpp into
	      win32printf.cpp because it conflicts with
	      libs/cssys/general/printf.cpp.
	    - Moved WinMain() from win32.cpp back to exeentry.cpp. The
	      reason why this is needed (Thomas, hear me!) is that some
	      programs need just the WinMain() routine and don't need the
	      SysSystemDriver (which is in win32.cpp). For example scfreg,
	      makedep, gfxtest and other console programs don't use the
	      SysSystemDriver, thus they don't need to be linked against
	      DirectInput, DirectDraw, GUI libs and so on. They just become
	      a lot smaller. This is also the case with DLLs - for some
	      reason DLLs made with MinGW32 needs the WinMain function,
	      thus every plugin gets the full load of routines in win32.cpp
	      (just because WinMain was there).
	    - Enhanced ddraw driver a lot (the one for software render).
	    - Setting mouse cursor now works (persistent)
	    - Moving window does not cause the image to stay at old position.
	    - Moving other window on top of CS window does does not leave
	      ugly traces (e.g. non-refreshed portions of window).
	    - The region argument passed to ::Print() is handled properly.
	    - The window now has a titlebar and even a minimize button.
	    - Alt+Enter now toggles fullscreen/windowed mode.
	    - The contents of backbuffer are preserved during fullscreen/
	      windowed mode toggle.
	    - Fixed the double buffering. In windowed mode only
	      single-buffering is allowed, in fullscreen both
	      double-buffering (page flipping) and single-buffering
	      (blitting from backbuffer) works. CSWS works a lot faster
	      in single-buffering mode.
	      Hmm, strange. Just tried and found that even walktest works
	      A LOT faster with single-buffering. With page flipping it gives
	      about 20fps, when blitting from system memory it runs at
	      31fps (!!!) I will set double buffering to disabled by
	      default...
	      I have encountered a bug on Windows NT SP3 (with a Matrox
	      Mystique videocard, don't know if this matters) - if you
	      request an 16bpp videomode in fullscreen, you will really
	      get just an 15bpp mode. This leads to strange colors if you
	      started the program in windowed 16bpp mode and then switch
	      with Alt+Enter to fullscreen or vice versa. On Windows98
	      this does not happen.
	    - Applied same enhancements to DX61 driver. Tested only with
	      software renderer though, I hope it will work with D3D
	      renderer as well...
	    - Enhancements to Windows system driver:
		- SetMouseCursor() is implemented now in system driver.	 From
		  canvas driver you have to call:
		    System->SystemExtension ("SetMouseCursor", CursorID);
		- When mouse is pressed inside CS window, the pointer is
		  captured.  Thus even when you move the cursor outside
		  window the mouse position is continuously tracked. The
		  mouse coordinates are send to system driver as signed
		  values (they were unsigned).
		- DirectInput keyboard handling is not needed anymore. I
		  have implemented perfect keyboard handling through normal
		  Windows window messages. You can use DirectInput if you
		  like buzzwords, but it won't give you absolutely
		  anything. In fact, DirectInput handling is worse because
		  it does not support national characters right now, and
		  WM_CHAR supports it.
		  In general, CSWS/MazeD works perfectly now with
	    - Fixed history in simple console. It used to crash sometimes
	      due to an uninitialized variable.
	    - Fixed the Direct3D renderer. Well, my Matrox Mystique lacks
	      alpha blending so I can't see if lightmaps really works,
	      but without them it works.
	    - Moved getopt.c && getopt1.c into cssys/general. Also I have
	      unified these two files into one C++ files. Thus we have
	      no plain C anymore anywhere.
	- Norman Kramer fixed Shooter and csgame (for material and CD mostly)
	  so that it compiles and runs. But there are a few undecrefed
	  plugins at exit.
	- Norman changed lib sequence in csstdldr.mak to please the
	  linux linker.
	- Thomas Hieber fixed CS_ASSERT and made sure that CS_DEBUG
	  is defined when building in debug mode (for Windows).
	- Thomas Hieber did some other various updates to get the windows
	  port working again.
6-Aug-2000
	- Samuel Humphreys did the following:
	   - Added a new plugin called perfstat, and updated walktest so
	     that it could 'benefit' from its functionality. Perfstat is
	     basically a nested statistics gatherer which can print out
	     formatted results to a file. It also prints out system info
	     as the header. This is meant to be a tool mostly to test the
	     drivers. The nested bit means it will also gather
	     separate statistics for a configurable 'subsection' of the
	     main section it is gathering statistics for.
	     Walktest has a max of three nested perfstats with the
	     recsubperf command (see below).
	   - Changes to walktest:
	    - Perfstat now takes care of fps calculations according
	      to user specifiable resolution. Defaults to 10 frames per
	      update.
	    - The demo playing and recording now pauses when you switch
	      to console
	    - Suitable commands are now recorded too, like fire missile,
	      addskel addlight etc. A couple of macros are defined in
	      walkcmd.cpp as a convenience.
	    - Modified commands:
	       loadrec <file> can take an optional name argument to specify a
		       <file>.rec to use as its demo file, otherwise it
		       defaults to 'record' as before.
	       saverec <file> can take an optional name argument to specify
		       a <file>.rec to save to.
	       play    has optional arguments, otherwise works as before.
	       play <file> This outputs summary statistics for the demo
		       played to <file>.rps (Recorded Performance Statistics).
	       play res, x, <file> The 'res'(olution) option tells perfstat
		       to record statistics every 'x' frames and output
		       to <file>.rps
	       play break, x  The break option when compiled in debug mode
		       will trip off a signal trap on the 'x'th frame.
		       Useful once you take note of the frame number of
		       something interesting in a <file>.rps
	    - New command:
	       recsubperf <name> Once a recording has begun this command
		       is used to record the statistics of a subsection
		       of the demo and is reported as such in the outputted
		       <file>.rps when played back. To finish the subsection
		       call the command again without an argument.
		       Stands for 'rec(ord)sub(section)perf(ormance)'
	- Jorrit committed the engine plugin which he forgot to do
	  some time ago. Now simplep should really work.
	- Wouter Wijngaards did the following changes:
	    - Make install, and make uninstall for Linux/unices should
	      work, i.e. copy files and delete files. The install is not
	      used yet. Also an extremely portable app 'uninst' is added,
	      that will uninstall. It will also delete empty directories
	      that held files.
	      install.mak will install files in several places. In each
	      apps/libs/plugins.mak file you can add files for
	      installation. I have already modified all makefiles
	      correspondingly (for all apps, libs, plugins).
	      Places you can add for installation:
		TO_INSTALL.ROOT : files will be added in the
				$(INSTALL_DIR)/ dir itself.
		TO_INSTALL.EXE	: files will be put in bin/
		TO_INSTALL.DATA : files will be put in data/
		TO_INSTALL.CONFIG: files will be put in data/config/
		TO_INSTALL.STATIC_LIBS: files will be put in lib/
		TO_INSTALL.DYNAMIC_LIBS: files could be put in lib/, but
				could also end up in a platform specific
				location (e.g. System folder).
	      TO_INSTALL.INCLUDE does not exist, the entire include/
	      hierarchy is copied to include/. (max 3 levels deep now)
	      The INSTALL_DIR is autodetected at 'make <platform>' time,
	      and saved in config.mak. (It can be overridden, e.g. by make
	      linux INSTALL_DIR=/usr/crystal) also it can be overridden
	      when make install is called (or make uninstall)
	- Norman Kramer fixed metademo so that it works again.
	- Norman fixed the ndrvdemo and nstp applications.
	- Norman fixed perftest.
	- Norman fixed phyztest.
	- Norman fixed simplep.
	- Norman fixed wscs3d.
	- Norman fixed OpenGL renderer:
	    - m_textured was used uninitialized in meshdrawing.
	    - made some minor optimizations to meshdrawing.
5-Aug-2000
	- Wouter Wijngaards did the following:
	  - install safer for people that do not update config.mak.
	  - Beginnings of a make install option. Xfree86 (fullscreen
	    extension) is detected now for unix.
	- Samuel Humphreys did the following:
	  - system.cpp: two Nothing events were emitted each frame, now
	    only one.
	  - light.cpp : an unitialised data member, caused walktest to
	    crash with 'dellights'.
	- Norman Kramer disabled deleting of the csTextureHandle in
	  csMaterial since this is done when the csTextureList is deleted
	  (and crashed when MaterialList was deleted thereafter).
	- Norman also added DecRef of VFS in destructor of csapp.
	- Norman removed G3D from funcon since it is now in cscon.
	- Norman also added IncRef to G2D in cscon, so it wont crash when
	  its decrefed.
	- Norman added x11-keys.cpp to the unxglide canvas makefiles.
4-Aug-2000
	- Thomas Hieber further extended the new csgame CD system.
	  Still not functional at all. But given the current CVS status,
	  I guess I will stop working on it anyway. I think it makes
	  sense to wait for the release of 1.0 so these permanent API
	  changes will come to an end, or at least slow down a bit. I
	  guess I don't have enough time, to keep running after these
	  changes _and_ add new code.
	- Wouter Wijngaards fixed unix.cpp for usleep.
	- Alex Pfaffe fixed various things in the landscape engine
	  again. Now it is mostly working again except for a few small
	  strange bugs.
	- Continued work on the API for materials. Started replacing
	  all communication between csengine and g3d with iMaterialHandle
	  instead of iTextureHandle. This means that txt_handle in
	  G3DPolygonFX has been replaced with mat_handle for example.
	- Replaced SetTexture and SetTextureHandle everywhere with
	  SetMaterial and SetMaterialHandle. This is a huge change which
	  will no doubt break ALL apps using CS and textures.
	  Also replaced most iTextureHandle variables with iMaterialHandle
	  and most csTextureHandle's with csMaterialHandle.
	- Fixed the software renderer to use the new material API.
	- Fixed the OpenGL renderer to use the new material API.
	  (temporarily broke DrawPolygonMesh for procedural textures in
	  software mode. Will fix this later).
	- Fixed WalkTest to work with new materials.
	- Fixed Blocks to work with new materials.
	- Tried to fix funcon console but failed for now. Will look at
	  this later.
	- Fixed DrawPolygonMesh for procedural textures (OpenGL).
	- Fixed Squawk so that it compiles and runs.
	- Fixed wscs3d so that it compiles and runs.
	- Fixed simple so that it compiles and runs.
	- Fixed phyztest so that it compiles and runs.
	- Fixed cctest so that it compiles and runs.
	- Fixed line 3D renderer.
	- Fixed null 3D renderer.
	- Fixed infinite 3D renderer.
	- Fixed perftest so that it compiles and runs.
	- Fixed funcon plugin.
	- Fixed metaballs plugin.
	- Added iTextureManager::RegisterMaterial() which takes a texture
	  handle instead of an iMaterial. This is for convenience to make
	  materials based on a single texture easily.
	- Andrew Zabolotny did a HUGE, HUGE update to CVS. This will cause
	  big problems so stay away from CVS if you are not interested in
	  trying to fix this. Here is the chage list:
	    - Implemented a new low-level event system architecture. Most
	      programs won't notice any difference in top-level interface,
	      only low-level interaction has been changed a little.
	      Events are generated by iEventPlug objects. Any event plug
	      plugs into an iEventOutlet which is the "front door" into the
	      system driver event queue for the respective event source.
	      When you register an iEventPlug object with the system driver,
	      you get a pointer to the respective iEventOutlet.
	      The QueueXXXEvent() methods are gone from iSystem. Instead,
	      use the respective methods from iEventOutlet interface. Also
	      there is an default system outlet (the 'back door' :-) which
	      may be queried through GetSystemEventOutlet, use it if you
	      don't consider that your plugin is worth to have a
	      full-fledged connection with the system driver event queue.
	      Note that the new event system allows to write a new generic
	      "record/play" plugin which will, in record mode, record all
	      events that pass through the system queue, and on other hand,
	      emit all recorded events back into the system event queue.
	      Writing one is left as homework for the reader :-)
	    - New file: include/ievent.h. It defines the interface for any
	      plugin which desires to generate events into the system event
	      queue. Also it defines the interface for iEventOutlet
	      objects, which are provided by system driver.
	    - No more SetSystemDefaults routine in system-dependent drivers.
	      Any settings must be queried from the respective plugins.
	      For example if some canvas needs the "-shm/-noshm" option it
	      should query it itself rather than relying on iUnixSystem
	      driver to do it.
	      Also most system-dependent interfaces (such as iDosSystem,
	      iUnixSystem, iOS2System) are gone. I believe there is no
	      need anymore in a private interface, and if you need just
	      one-two additional system-dependent functions, you can
	      always implement them through the new SystemExtension
	      method of iSystem.
	    - Cleaned up the iSystem interface. Lots of methods are gone,
	      several new have been added.
	    - The canvas-dependent command-line options have been moved
	      to respective canvas drivers. The respective command-line
	      help have been moved there as well. From now on: if you
	      want to display any plugin-specific help, you should
	      implement HandleEvent and handle the cscmdCommandLineHelp
	      broadcast event. Upon reception of such an event you should
	      display something like:
		Options for X-Windows 2D graphics driver:
		    -sdepth=<depth>    set simulated depth
		    -shm/noshm	       SHM extension (default 'shm')
		    -[no]sysmouse      use/don't use system mouse
	    - Note that because all QueueXXXEvent methods are gone from
	      iSystem interface, some canvas drivers may not build. Here
	      is the list of canvas drivers that I have fixed, use any of
	      the drivers below for reference when fixing other canvas
	      plugins.
		- Fixed and tested:
		    - CSDIVE canvas.
		    - X-Windows 2D canvas
		    - X-Windows Line2D canvas
		    - OS/2 OpenGL canvas
		    - MGL 2D canvas
		    - AsciiArt canvas
		- Fixed but not tested:
		    - csalleg (cross-platform Allegro) canvas
		    - unixglide canvas
		    - svgalib canvas
		    - gl/x canvas
		    - ggi driver
		- Not fixed at all:
		    - BeOS drivers
		    - Mac drivers
	      Sorry, couldn't understand how they work :-)
	      Some system drivers also can generate events. The
	      following drivers were converted and tested to use new
	      event architecture:
		- DOS/DJGPP
	      Converted but not tested:
		- MacOS
		- Win32
		- BeOS
	      Not converted (Objective C :-():
		- NeXT
	    - Implemented National Keyboard Support. Every event plug has
	      to provide two key codes - one is the "raw" keycode
	      (Event.Key.Code) and one is the "cooked" code
	      (Event.Code.Char). Old programs that use Event.Key.Code will
	      still work but they will get just low-case characters (e.g.
	      even Shift and/or Ctrl will be ignored). This also means
	      that hotkeys like "shift+!" won't work anymore (instead
	      use shift+1). I have fixed autoexec.cfg for this.
	      National Keyboard Support should already work with most
	      canvas drivers. I have tested it with X-Windows driver,
	      OS/2 DIVE driver, MGL driver. If some driver cannot provide
	      the "cooked" keycode (such as the DOS driver) it should
	      provide "-1" as the character code, and the system driver
	      will "cook" it itself.
	    - Fixed X-Windows drivers so that they handle correctly the
	      MappingNotify event. This enables support for languages
	      that need more than one keymap (e.g. Cyrillic and others,
	      maybe Japanese).
	    - Removed elapsed_time and current_time arguments from
	      NextFrame. Instead, I have added a new method called
	      GetElapsedTime (time_t&, time_t&) into the iSystem
	      interface. Call it if you really need the elapsed time.
	      You can call it any times per frame you need. The time is
	      updated only at the start of every frame. The NextFrame()
	      method has no arguments now.
	    - Redesigned the main application loop. The Loop method in
	      system driver is still there, but it is basically just an:
		while (!Shutdown) NextFrame();
	      If your application does not need the loop, feel free to
	      call NextFrame without arguments at appropiate times.
	      Fixed all applications in CVS to use the new NextFrame
	      prototype. However, for applications not in the repository
	      you will have to fix this yourself.
	    - Added the new -I or --info switch to gfxtest tool. Using
	      this switch you can easily see the cause of translucent
	      cubes in blocks: the respective png files (cubef3 and
	      cubef4) have an alpha channel.
	    - Added -a or --strip-alpha switch to same tool. Note that
	      the blocks data file in repository has NOT been fixed;
	      somebody still have to do it.
	    - Fixed dependency generation with makedep - instead of
	      $(OUT) prefix it used the expanded value of $(OUT) - thus
	      when switching compilation mode, it was needed to rebuild
	      dependencies. Not the case anymore.
	    - Added Z-none counterparts to ALL DrawPFX modes. In this
	      mode the Z-buffer is ignored at all, thus it is the fastest
	      mode. It can be used to display non-3D graphics with
	      DrawPFX, for example user interface elements and so
	      on (and even 3D graphics in depth sorted order).
	    - Added Z-none, Z-fill and Z-use modes to per-pixel alpha
	      routines. Now you can do:
		G3D->SetRenderState(G3DRENDERSTATE_ZBUFFERMODE, CS_ZBUF_ZUSE);
		G3D->DrawPolygonFX(...)
	      The CS_ZBUF_NONE routine has the lesser overhead, of course.
	    - Implemented Z-use and Z-fill modes for alpha-mapped walls
	      (DrawPolygon).
	    - Redesigned the iConsole interface. Basically I have tried
	      to simplify it as much as possible; having very
	      sophisticated interfaces does not make easy to write new
	      plugins. Removed the dumb iCursor interface. The cursor
	      should be provided by the console; if you don't like the
	      cursor, write your own console. Redesigned the
	      iConsoleInput interface.
	    - Reimplemented cstools/simpcons as a new plugin. cstools
	      library is now empty; don't know if it is really needed.
	    - Fixed walktest to use the new console plugin. It is not
	      tied anymore to csSimpleConsole private interface, thus
	      can use any console plugins you will write in future :-)
	      Also walktest will run now without a console at all.
	    - Fixed a very seldom happening bug in software 3D driver
	      that leads to crashes due to division overflow.
	    - When the palette changes in 256-color modes, the texture
	      manager will emmit an broadcast event so that all
	      interested plugins (including consoles) can intercept it
	      and query the appropiate drivers for new information.
	    - Fixed the cscon plugin. The "xstdin" plugin has been
	      removed (use the one in simpcon instead, it has absolutely
	      same functionality), the "console.output.standard" and
	      "console.output.funky" consoles works.  You can even enable
	      them in walktest application by uncommenting the
	      respective lines from cryst.cfg.
	    - Fixed an strange bug in software texture manager - in 8-bit
	      modes the Scan.GlobalCMap was deleted at the end of
	      PrepareTextures() although it is extensively used while the
	      program is running ...
	    - Fixed an very old bug in DrawPolygonFX() for software 8-bit
	      modes. DST was incorrectly missed the screen palette table,
	      thus all modes that involved DST (fixed-value alpha
	      transparency and blending) did not worked.
	    - Due to above event system redesign, Crystal Space Windowing
	      System has been redesigned a little as well. The csApp class
	      is now a plugin from system driver's point of view and
	      receives events absolutely same way like any other plugin.
	      Thus the look of the simplest CSWS application has been
	      changed a little. See cswstest for details.
	    - Crystal Space Windowing System does not implement its own
	      system driver anymore. Instead, the csApp class is an
	      "almost-normal" plugin now, except that it is created not
	      via SCF (but rather with `new'). Also CSWS works with the
	      system driver completely through the iSystem interface;
	      this means CSWS and system driver don't have to be in
	      the same module anymore.
	    - Fixed MazeD so that it works with the new CSWS architecture.
	      No other enhancements though :-(
	- Fixed a bug in walktest related to the patch above.
	- Samuel Humphreys fixed dtsimple after the big Andrew/Jorrit
	  changes.
	- Norman Kramer fixed commandline processing after Andrew broke
	  it again...
	- Norman fixed glide renderer after Jorrit's changes. Code is
	  untested though.
	- Norman fixed OpenGL:
	    - Added missing PerformExtension() dummies.
	    - Replaced QueueContextCloseEvent with the new EventOutlet method.
3-Aug-2000
	- Norman Kramer added clipping code to openglcommon canvas code,
	  especially to font drawing.
	- Norman also added missing GetFlags() method for glide renderer.
	- Thomas Hieber made ndrvdemo compileable again on MSVC.
	- Thomas also fixed prototype of ResetCollisionPairs() in
	  iCollideSystem.
	- Thomas worked a bit on creating a new CD system in csgame.
	  csgame is currently broken though.
	- Thomas split csVector in csBasicVector and csVector to have au
	  more lightweight baseclass, that can be used, where csVector
	  is to big. (memory footprint)
	  To make it smaller, csBasicVector has no virtual methods and
	  defaults to create an empty array. (csBasicVector will be used
	  in the new csgame CD system in very large numbers - up to
	  100000 instaces will not be impossible!)
	- Samuel Humphreys rearranged perftest for 2d testing aswell.  Added
	  tests for pixmaps, lines, pixels and text.
	- Alex Pfaffe commited a few fixes to terrain engine (still not
	  working properly though).
	- Renamed csPluginCollider to csCollider. This class is a convenience
	  class that csengine users can use to attach iCollider's to
	  engine objects (or game objects). Usage of this class is optional
	  and the engine will never use it itself.
	- Fixed WalkTest so that it REALLY compiles now.
	- Added debug info to libs/csengine/terrain.cpp for Alex Pfaffe.
	- Tried to fix csgame library with regards to the new collision
	  detection system but I didn't manage to fix all. Particularly
	  in libs/csgame/gcollide.cpp there are a few things that I
	  didn't manage to fix. I hope Thomas Hieber can look at this.
	- Fixed csclear library and cctest app with new collision detection
	  system. It compiles and runs now but collision detection seems a
	  bit broken. Not sure why.
	- Fixed phyztest due to the latest collision detection changes.
	- Wouter, Samuel and Jorrit experimented a bit with some problems
	  with 'usleep' in unix.cpp.
	- Added iMaterial and iMaterialHandle. Extended iTextureManager
	  to have the ability to register materials. Provided a default
	  implementation for this for the 3D renderers. Nothing related
	  to materials really works right now. These are only stubs to
	  make a future implementation easier.
	- Let csMaterial implement iMaterial. Added csMaterialHandle
	  which represents the connection between csMaterial (or iMaterial)
	  and iMaterialHandle. Added csMaterialList which is a list of
	  loaded materials.
	- Added list of loaded materials to csWorld.
	- Added support for materials to csparser. Stubs only.
	  New MATERIALS keyword similar to TEXTURES.
2-Aug-2000
	- Martin Geisse added 2d animations and aligned pixmaps.
	- Norman Kramer fixed funcon plugin so that use_fog=false for DPFX.
	- Norman also fixed the glx2d canvas because color shift values
	  were not computed.
	- Norman did the following change to OpenGL renderer: after Open the
	  pixelformat is requested from the G2D (since they are calculated
	  there after window open only).
	- Changed API in iCollideSystem to make it easier to collect
	  collisions with multiple objects.
	- Added csPolygonSet::GetRadius() which will return the radius
	  in object space. Also added csSprite3D::GetRadius().
	- Converted WalkTest to use the new collision detection plugin.
	  Seems to work ok.
	- Fixed a bug in the iPolygonMesh embedded in csPolygonSet which
	  caused a wrong number of polygons to be returned to iCollideSystem.
	- Removed rapid implementation from csengine now that the plugin
	  is working. This might break several other things though. Especially
	  your own apps if you used CD. I think csgame is broken too. Will
	  fix later.
	- Michael Ewert send in a patch to make sure that phyztest
	  compiles again. Still doesn't work completely correctly though.
	- Removed several warnings.
	- Samuel Humphreys did the following:
	    - Fixed another command line processing bug.
	    - Added emacs fontification friendly comments to some more .inc
	      files.
	    - Added further options to dtsimple (bots, lights,
	      portals--on/off).
	    - Print (csRect*) now prints subregions with the software proc
	      textures in 16bit/32bit sharing modes
	    - Rearranged software procs implementation somewhat so that
	      mip-mapping flags are accessible in the right places. This
	      has also simplified the code somewhat.
	    - Got rid of the proc texture enum data type in iGraphics2D.
	    - iGraphics2D->CreateOffScreenCanvas arguments changed slightly.
	    - Reduced verbosity of proc texture MSG_STDOUTs
	    - Cleaned out x2d of commented out code
	    - isprotex.h interface changed slightly (internal to proc
	      textures).
	- Wouter Wijngaards committed a patch to mdl2spr by Luca Pancallo:
	  a commandline option that limits the number of frames exported.
	  Also a bugfix.
	- Alex Pfaffe updated the terrain engine to remove an obsolete
	  clipbox variable, fixed plane normalization and did some
	  optimizations.
1-Aug-2000
	- Norman Kramer fixed a crash scenario in OpenGL renderer: sprite is
	  textured and has FX_ALPHA set but no vertex colors -> boom, now it
	  uses flatcolor (1.0) + m_alpha.
	- Samuel Humphreys did the following:
	    - Hand merged relevant parts of Mike Bonds patch into the
	      glx2d/x2d/linex2d drivers.  Bar the resizing and change of
	      variable names the rest of it had been already fixed last
	      weekend.
	    - Resizing still crashed after patch with x2d.  I have partly
	      fixed this, dtsimple doesnt crash out but gets weird zbuffery
	      like artifacts, but walktest does...investigating :)
	    - Walkest now responds to resizing events, so doesnt crash out
	      anymore on resizing.
	- Fixed bug in embedded iPolygonMesh in csSprite3D.
	- Fixed a bug in the rapid CD plugin.
	- Fixed bug in WalkTest so that walking through CD enabled portals
	  would not work if the level had only one sector.
	- Fixed bug in csengine with portals and c-buffer (or other culler).
	  Portals and mirrors and other space warping portals in general
	  should now work perfectly in combination with STATBSP levels.
	  Provided you correctly use the CLIP and ZFILL keywords where
	  needed.
31-Jul-2000
	- Fixed a number of remaining black border problems with lighting.
	  These were especially visible in the mazedex level but could
	  occur everywhere.
	- Wouter Wijngaards updated lighting.txi document with some info
	  about the radiosity options.
	- Removed several old-fashioned and obsolete flags which were
	  (in the past) used to control lighting. i.e. I removed all the
	  settings related to 'Shadows....' in the Lighting section.
	- Changed ambient setting from 40 to 20 as I personally think
	  that 40 is too high.
	- Updated the documentation to reflect the above changes to
	  the settings.
	- Updated various other things in the documentation.
	- Alex Pfaffe did an update to the terrain engine to improve
	  visible popping.
	- Added CS_POLY_COLLDET flag to polygons with which you can
	  enable and disable collision detection for a single polygon.
	  By default collision detection is enabled for polygon, disabled
	  for portals, and enabled again for mirrors (so other space warping
	  portals have no CD by default).
	- Also added this flag to the polygon templates used in thing
	  templates.
30-Jul-2000
	- Samuel Humphreys did the following:
	    - Little re-organisation of dtsimple, improved comments
	    - Updated comments in dtsimp.cfg
	    - Added ability to create csTextureHandles from preprepared
	      iTextureHandles (in preparation for something new).
	    - Updated comments in csengine.cpp with regards multi-context
	      support.
	    - Added a conditional to the delete [] Scan.GlobalCMap to prevent
	      destruction if this resource is shared in the software renderer
	      texture manager.
	    - Added a new function to the software texture cache which removes
	      all cached_textures dependent on a texture handle
	    - Commented out last reference to proc textures within
	      soft3dcom.cpp as now protex3d.cpp takes care of uncaching and
	      only when the proc texture is updated. Dtsimple suffers slight
	      performance degradation, ..perhaps add another proc_texture flag
	      i.e. CS_TEXTURE_PROC_UNCACHE_ALWAYS.. or would this be an
	      unwanted complication? An app which utilises and benefits from
	      this is forthcoming.
	    - Fixed minor bug in system.cpp which broke command line argument
	      processing
	    - Added accessor to iTextureHandle to be able to retrieve which
	      flags have been set.
	    - I believe this propagates the changes made to x2d.cpp to
	      glx2d.cpp which allows exit without pipe broken error (it
	      works for me :).
	    - Propagated Normans changes to regain the title on GLX windows.
	    - Fixed the multi-context support in the engine which broke after
	      the recent changes to the engine.
	    - Added the emission of cscmdContextClose events from the GL and
	      software proc textures.
	    - Fixed the GL proc texture bug which created new proc textures
	      each time PrepareTextures was called.
	    - dtsimple now responds to contextClose events, and exits without
	      crashing.
	- Norman Kramer fixed the glide canvases so that they work after
	  Andrew's changes yesterday.
28-Jul-2000
	- Norman Kramer fixes the x2d canvas so that the title is set
	  to the right window.
	- Added csPoly3D::ComputeNormal() and ComputePlane() as static
	  functions with the polygon given as a parameter.
	- Fixed a big bug in the lighting routines which could cause
	  some polygons not to be reached by a light even though they
	  should have been affected. Turned out the distance between the
	  light and the polygon was not computed right.
	- Fixed another severe bug in CheckFrustum which affects both
	  lighting and radiosity. It appeared that back-face culling
	  of polygons was done too late with the effect that even
	  invisible polygons would fill up the c-buffer (c-buffer does
	  not care about orientation of polygons). This bugfix seems
	  to remove the last lighting errors from dmburg. There are still
	  a few black borders here and there but I see no more real
	  lighting errors.
	- Norman Kramer added csFrustum::BatchClassify() which is meant
	  to be used if you plan to do a number of classifies with the
	  same frustum. It is faster that way.
	- Andrew Zabolotny did the following changes:
	    - Added detection of XFree86/OS2. Now softx driver compiles
	      and works well on OS/2 with shm and vidmode extensions! :-)
	    - Added a command-line option: "-canvas=xxx" will tell the
	      renderer which canvas plugin to use. If "xxx" does not
	      contain dots (e.g. something like "x2d", "dive" and so on)
	      "crystalspace.graphics2d." is prepended.
	    - Fixed a bug in softx driver related to fullscreen extensions.
	      Close() calls LeaveFullScreen() but if we close the driver
	      due to a failed initialization dpy and window variables were
	      not initialized.
	    - Removed GetVFS method from iSystem. Use QUERY_PLUGIN_ID instead.
	      I have fixed all drivers to use QUERY_PLUGIN_ID.
	    - Removed iUnixSystem interface. Moved the functionality needed
	      to decide whenever to use shm, simdepth etc to the respective
	      X11 drivers (moved to a new file video/canvas/common/x11comm.cpp
	      which is included in all X11 drivers that really need it). In
	      general, system-dependent part of csSystemDriver becomes thinner
	      and thinner. This is good :-)
	      Due to extensive changes through many canvas plugins some may
	      encounter syntax errors during compilation. Use the softx
	      driver for reference, which compiles and works fine.
	    - Fixed the linex2d driver (it wasn't working properly after
	      the last fullscreen change).
	    - Changed TEX_2D, TEX_3D and TEX_2D3D into FOR_2D(yes|no)
	      FOR3D(yes|no). Using these two keywords you can achieve same
	      effect as with older three. Besides, csstdldr plugin supports
	      them for a long time.
	    - Split the "int Type" field of csEvent into four: char Type,
	      char Category, char SubCategory and char
	      ReservedForGreatFutureExtensions. No application should be
	      affected by this since Type is anyway effectively a 5-bit
	      value...
	- Fixed two bugs for compiling in Unix after Andrew's changes.
	- Fixed embedded iPolygonMesh classes for both csPolygonSet
	  and csSprite3D so that they are correctly specified now.
	- Martin Geisse fixed a small bug in the docs as suggested in
	  the mailing list.
27-Jul-2000
	- Martin Geisse converted some more docs to texinfo format
	  (including the much asked for worldfmt.tex file).
	- Added TEX2D keyword to parsing of textures in world file.
	  So you can mark textures as being 2D only.
	- Added TEX3D and TEX2D3D keywords to complete the functionality.
	- Added a missing menu to the world format texinfo documentation
	  file.
	- Alex Pfaffe fixed visibility determination for CS in the terrain
	  engine.
	- Fixed sndsoft.mak makefile after Paul Garceau broke it
	  yesterday.
	- Martin Geisse fixed a compiler warning in polyset.h.
26-Jul-2000
	- Paul Garceau fixed sndsoft.mak makefile for Win32/MingW.
	- Started completing support for the rapid collision detection
	  plugin and also completing support for the interfaces needed
	  to do good collision detection. As soon as this is finished
	  the old colldet dir in csengine will be removed.
	- csPolygonSet and csSprite3D also implement (through embedding)
	  iPolygonMesh now so that they can be used with the CD system.
	- Norman Kramer fixed Yet Another csFrustum::Classify(). This
	  function must hold the record for one of the most difficult
	  ones to get right :-)
	- Norman Kramer updated the name of the glide 3d target drivers.
	- Thomas Hieber did another update to map2cs:
	    - Now it will properly detect wrong plane definitions in
	      the map file and eliminate these. (Workaround for problems
	      in the editor!)
	    - Significant speedup when removal of hidden surfaces
	      is wanted. (using bounding boxes for brushes and polygons)
	    - Skyboxes are now being written using the CAMERA() modifier,
	      so they don't move any more, while walking.
25-Jul-2000
	- Thomas Hieber did a small maintainance release to Map2CS
	  (labeled 0.82):
	    - Unique names for entities, if no explicit name has been given.
	    - Manual sectors will now use the name of the entity instead of
	      "s" plus a number.
	    - If the entity has not been assigned a name, it will be called
	      "e" plus a number.
	    - Skybox now uses the new keyword "SKY". The result is
	      already  better than the previous version, which used things,
	      but sky is still being moved  (which shouldn't happen
	      any more). The problem probably is,  that skyboxes from
	      map2cs are usually being looked at through a portal, and
	      maybe that code in the engine is still broken.
	    - Cleaned up and reformatted some odd code I came across.
	- Norman Kramer did another fix to csFrustum::Classify().
	- Engine plugin is now working!
	- Extended iWorld with a few functions from csWorld.
	- Extended simplep app with more functionality. Still doesn't show
	  any 3D yet.
	- Scott Bowden continued work on the Unreal convertor (t3d2cs).
	  The following changes have been made:
	    - Added the friend function 'dMsg(char *message)'
	      to all classes in t3d2cs. It is used to print a
	      debug message, and can be disabled.
	    - Rearranged the internal data representation used
	      in most of the classes in t3d2cs. Mainly this was
	      a mass rename of a lot of variables to d_[var] to
	      specify that it is internal data. This allows me,
	      for example, to have a public function in tLocation
	      called .x() to get the x value without causing confusion.
	    - Added the tRotation class [tRtation.h]. Should work
	      fine.
	    - Add the tPolygon and tPolyList classes [tPolygon.h /
	      tPolyLst.h ]. They do not fully work yet. I am aware
	      of this fact :)
	    - Added in the tLcation [tLocation (8.3, grr!)] class to
	      handle brush locations. I have also moved setFloatVal
	      to setDoubleVal and changed the handling of precision
	      variables accordingly to doubles instead of floats.
	- Big update to csphyziks from Michael Ewert. Two changes:
	    - First are joint angle constraints.  So you can say a
	      joint only swings between 0 and 180 degrees, like an
	      elbow.
	    - Second is connecting a jointed body to a kinematically
	      controled entity, that moves however the user
	      specifies.  This is used to attach a jointed body to
	      other game-world objects that are not controlled by
	      physics, like a character or door or whatever.  The
	      correct physical behavior will still result even
	      though one entity isn't in the physics engine.
	- Fixes from Mike Bond to linex2d and glx2d canvas plugins
	  related to his latest changes. These fixes restore keyboard
	  focus when the window pops up.
24-Jul-2000
	- Started work on new engine plugin. This plugin will link statically
	  with csengine but will itself be a plugin that can be used
	  by apps instead of linking to csengine directly. This method
	  serves as the future prefered base for working with CS and it
	  also allows to dynamically load the (large) engine plugin into
	  memory. This engine plugin also makes it easier to conform to
	  the LGPL. Not working yet.
	- Added new 'simplep' application which will eventually be similar
	  to 'simple' except that it will use the engine plugin instead
	  of statically linking to 'csengine'.
	- Added csWorld parameter to csPolygonSet (and thus to csThing
	  and csSector as well) to help the removal of the current_world
	  static variable.
	- Removed the iostream dependency in t3d2cs app because I don't
	  have the C++ libraries here.
	- In WalkTest console: bound 'd' to 'emode front2back' which will
	  mainly make sure that it behaves like it used to in the past
	  except that it doesn't toggle. Bound 'shift-d' to 'emode
	  back2front' which is the prefered engine mode for portal worlds.
	  Bound 'alt-d' to the new 'emode zbuffer' mode. Bound 'ctrl-d'
	  to 'culler next' to switch between the various cullers (cbuffer,
	  quad3d, and covtree).
	- Added new CS_POLY_SPLIT flag to csPolygon3D which is set for
	  a polygon that is split by a BSP split. Previously the flag
	  CS_POLY_NO_DRAW was used for that but this is now used for what
	  it is actually ment: i.e. to indicate a polygon that should not
	  be drawn. This fixes the new CS_ENGINE_ZBUFFER engine mode.
	- Got an updated doc to csPhyziks from Michael Ewert.
	- Andrew Zabolotny did the following changes:
	    - Added dynamic loader support for DJGPP. Added required
	      detection routines to bin/dosconf.bat. If you have libdl
	      installed (available from Crystal Space ftp site, and in
	      near future from ftp.simtel.net) it will set
	      USE_SHARED_PLUGINS to yes, otherwise to no.
	      Also you may want to use shared versions of libpng, zlib,
	      libjpeg. The dosconf.bat script looks for these libraries,
	      and if available turns on the usage of shared version of
	      respective libraries. You may have as well just one library
	      in shared version, and other twos - in static version,
	      each one is detected individually.
	    - Removed someone's #ifndef YY_NO_NULLIFY_YYVAL from
	      support/gnu/bison.sim. This is a very incorrect change since
	      YYVAL is not always an int, in my case (csstdldr) it is a
	      structure, and as such cannot be assigned NULL.
	      A better approach would be to do:
		#ifdef YYVAL_ZERO
		  yyval = YYVAL_ZERO;
		#endif
	      But, in any case, I don't see the need for it - I don't get
	      any warnings about uninitialized variables, at least with
	      pgcc 2.95.2 in optimize mode.
	    - Further work on the new loader.
	    - Fixed a warning in csFrustum::Classify().
23-Jul-2000
	- Cleaned up some coverage mask tree statictics.
	- Added csWorld::SetEngineMode() with which you can control how
	  the engine will render the world. The setting is there but
	  actual engine functionality is still lacking. There is also
	  an auto-detect mode (which is default) which will try to detect
	  the best engine mode for the loaded world.
	- Implemented the three engine modes now.
	- Cleaned up csWorld::Draw() and csWorld::DrawFunc() (added new
	  StartDraw()).
	- IMPORTANT change! csWorld now has a function GetBeginDrawFlags()
	  which returns flags that the engine requires for G3D->BeginDraw().
	  Since BeginDraw() is called by the application it is now the
	  responsibility of the application to actually call this function
	  and or the returned flags with the flags the application wants to
	  use. This is used because some engine modes require the Z buffer
	  to be initialized when BeginDraw() is called.
	- Added csWorld::SetCuller() to set the 2D/3D culler to use. This
	  replaces the functions EnableQuad3D, EnableCovTree, and
	  EnableCBuffer. c-buffer is now default but will only be used
	  when the engine mode is equal to CS_ENGINE_FRONT2BACK. And this
	  depends on the loaded level.
	- Removed console commands 'cbuffer', 'quad3d', and 'covtree'
	  and replaced with 'culler' command.
	- Added console command 'emode' to switch between the different
	  engine modes. Options are 'auto', 'back2front', 'front2back',
	  and 'zbuffer'.
	- In an effor to minimize the use of the global current_world
	  variable from csWorld I added a world pointer to csRenderView.
	- Gary Haussmann added code (for OpenGL renderer) to try and
	  determine the proper lightmap blend mode automatically.
	  With the blend mode set to 'auto' the code will draw polys in both
	  the SRC*DST and 2*SRC*DST blend mode, comparing the two and
	  picking the more appropriate one for use in drawing lightmaps.
	  Also added extension detection #ifdef's to assume Mesa-style
	  extension detection on Linux with GCC, even if the MESA_*
	  macros are not defined.
	- Gary Haussmann added some info the the lightmap blend mode comment
	  in opengl.cfg. Now the comment includes the newly supported
	  'auto' lightmap blend code.
	- Gary removed superfluous diagnostic messages from glx2d.
	  With the addition of autodetect for lightmap blends, the OpenGL
	  code is starting to spew out a lot of initialization diagnostic
	  messages :)
	- Norman Kramer removed the empty destructor in cssfxldr.
	  The same problem like the one in the graphics loader lib.
	  If the lib is bound to a plugin then it crashes on program exit
	  (class destructor is called in atexit).
22-Jul-2000
	- New 'txt' map mode nearly works. Texture mapping is not ok
	  though.
	- Changed clear color for 'fclear' command. Now it is the same
	  color on all systems.
	- Scott Bowden added the first version of t3d2cs which is an
	  app that will read Unreal t3d files and produce CS files.
	- Scott Bowden put back the entry.t3d file so that people can
	  work on it for the t3d2cs convertor.
21-Jul-2000
	- Added an extra 'txt' map mode to do an orthographic texture
	  mapping map. Not functioning yet.
	- Alex Pfaffe removed the ddgHistogram dependency for CS. This
	  fixes the problem with the file that could not be found.
	- Wouter Wijngaards enabled terrain again after Alex fixed
	  the missing file problem.
	- Wyatt Miler updated the Mac project files.
	- Wyatt also added a couple of comma's to the dungeon plugin so
	  the mac compiler doesn't die. Check lines 116 and 119. I'm not
	  sure how this was supposed to work anyway.
20-Jul-2000
	- Alex Pfaffe did an update to the terrain engine. Should now
	  be faster since less vertices are sent to the 3D rasterizer.
	- Because Alex forgot to commit some files I disabled the terrain
	  engine for now.
	- Wouter Wijngaards improved the csQuadTree3D code. Faster and
	  more reliable for TestPolygon.
	- Norman Kramer fixed csFrustum::Classify(): corrected the
	  CS_FRUST_PART, still in #if 0 - i guess jorrit want to double
	  check this :)
	- Fixed csFrustum::Classify() again!!
	- Changed lightmap caching to make it more robust and system
	  independent. This means that the format has changed completely.
	  If you don't do -relight or -recalc CS will simply ignore
	  the old lightmaps (i.e. everything becomes black).
	- Added csSector/csWorld::FindLight() with CS_ID as a parameter.
	  This can be used to locate a light with a given id.
	  This is mainly useful for the lightmap cache.
	- Added back face culling to the test for csQuadTree3D. Still
	  doesn't solve the culling bugs though.
	- Solved a very old bug (in data/config/autoexec.cfg) where movement
	  keys didn't autorepeat in 3d-move and map mode.
19-Jul-2000
	- Updated 'simple' tutorial and 'simple' application a little bit.
	- Extended 'simple' application to load a 'sprite1' template from
	  standard.zip and show it. Also added a new tutorial 'simple2.txi'
	  to show how this sprite stuff works.
	- Removed some non-existing functions from
	  include/csparser/csloader.h.
	- Added csLoader::LoadSpriteTemplate() function to load a sprite
	  template from a file.
	- Reverted Norman Kramers patch to csFrustum::Classify() because
	  it seems to be wrong.
	- Wyatt Miler enabled TGA image format for Mac as some levels now
	  are using it, and it works.
	- Wyatt also updated the Macintosh project files.
	- Wouter Wijngaards disabled some debug prints in csQuadTree3D.
	- Wouter also set radiosity.stoppriority from 25.0 to 0.1 now,
	  since radiosity is fixed by the Classify changes.
	- Added support for orthographic projection in the csWireFrame
	  class. This is going to be used for three types of orthographic
	  maps (X, Y, and Z). These maps are going to be used for debugging
	  mainly (i.e. PVS).
	- Added 'mapproj' console command to change the projection mode
	  for the 'map' command to either persp (default), x, y, or z.
18-Jul-2000
	- Did an optimization in csFrustum::Classify() as suggested
	  by Norman Kramer.
	- Fixed another bug in csFrustum::Classify() where it would
	  misclassify adjacent frustum/polygon as covered instead of
	  outside.
	- Fixed another bug in csFrustum::Classify() where it would
	  misclassify overlapping frustum/polygon as outside instead
	  of partial. In this case the bug was that the edges either
	  fully cover each other or intersect at corners.
	- Renamed cmd_Door to entity_Door in WalkTest.
	- Added entity_Light and entity_Rotate entities. With entity_Light
	  you can control the animation for a light at activation time.
	  With entity_Rotate you can have an object that rotates all
	  the time or one that rotates at activation time.
	  entity_Rotate has the following syntax:
	    KEY ("entity_Rotate", "x,y,z")
	  (with x,y,z the x, y, and z angles in degrees).
	  These angles represent the rotation in one second.
	  entity_Light has the following syntax:
	    KEY ("entity_Light", "sector,light,r1,g1,b1,r2,g2,b2,time")
	  Sector and light are the name of the sector and light to find
	  the light that is controlled by this entity. The two given
	  colors are the start and end color (start is at activation time).
	  'time' is the time (in miliseconds) to go from start to end.
	- Fixed explosion bounding box (partsys) so that it isn't updated
	  every frame. This makes it faster but slightly less accurate.
	  It is possible (but not very likely) that the partsys will
	  not be drawn even if it is visible.
	- Added a bounding box to csPolyTreeObject. This bounding box
	  is used to fix a bug that when the camera is inside the bounding
	  box of a dynamic object, the object cannot be seen.
	- Moved updating of the dynamic object to csPolyTreeBBox.
	  Makes the code for csSprite, csThing, and csParticleSystem simpler.
	  Note that visibility culling for particle systems still doesn't
	  work correctly at the moment. I'm investigating.
	- Removed support for LIGHTX in worlds. The parser will still
	  recognize the keyword and say that it is obsolete.
	- Removed support for SCRIPT, ACTIVATE, and TRIGGER in the world file
	  (keywords still recognized). The scripting system is now obsolete
	  and replaced with the new entity system in WalkTest.
	- Added support for named lights in the world file parser.
	- Completely removed support for the obsolete csscript from CS.
	  This is a significant change with lots of small effects at various
	  places.
	- 'activate' console command is now completely obsolete and
	  doesn't work anymore. Use 'action' instead which fires the
	  new entity system.
	- Fixed a bug in csengine which caused the new csQuadTree3D
	  optimization not to work at all. Note that this optimization
	  still doesn't work at the moment.
	- Removed an assert in map2cs to make converting some badly
	  formed levels easier :-)
	- Frank O' Connor updated the VC project files for the removal
	  of csScript.
	- Wouter Wijngaards commited code made by Mike Bond
	  <mbond@cox.rr.com>. It enables fullscreen mode for the line X
	  2d driver, the opengl X 2d driver, and the software X 2D driver.
	  I have verified that software mode now runs fullscreen OK
	  (Xfree86 4.0, 32 bpp, 640x480). Also, the border of funny pixels
	  at the edge of the screen is not caused by this commit.
	  Note that the line USE_XFREE86VM = yes should be added to
	  config.mak before compiling this, if you have XFree86
	  (most people running linux use XFree86).
	  Use alt-enter or 'fullscreen' console command to switch between
	  fullscreen and not.
17-Jul-2000
	- Added LGPL notice to a few .inc files.
	- Change to OpenGL renderer so that lightmaps are only cached
	  when lighting is enabled. This speeds up rendering considerably
	  when you disable lighting. This speed increase suggests that
	  sending over new lightmaps to the hardware is slow. So combining
	  lightmaps makes sense probably.
	- Samuel Humphreys did the following changes:
	    - Fixed perftest so that it exits after finishing tests.
	    - dtmesh.cpp (I think) didnt take into account
	      mesh.use_vertex_color = false; and so segfaulted into
	      perftest..I have fixed it I think :)
	- Extended the fix from Samuel (to dtmesh.cpp) to some other
	  places in the same code.
	- Paul Garceau modified mingw.mak to fully accomodate Working
	  Static Library Build.
	- Fixed a bug in the parser with SKY and SKYDOME commands.
	- Fixed two bugs in csFrustum::Classify. Fixing these bugs has
	  the unfortunate side-effect of breaking lighting a bit (not
	  completely, but shadow calculation has more errors now). But
	  we will fix those later.
	- Fixed a third bug in csFrustum::Classify which fixes lighting
	  again :-)
	- Added visibility culling system to particle systems. This
	  will make them visible even if you turn on the c-buffer.
	  Note that this will probably not work in all cases now because
	  the bbox calculation in particle systems is not completely
	  ok at the moment.
	- The limitation of 1000000 texels for lighting has now moved
	  from the engine to the software renderer. This means that for
	  OpenGL, D3D, and Glide, this limitation is gone and you can have
	  bigger lighted polygons. Note that there is still a limitation
	  though. If the lightmap is bigger than 256x256 it will not
	  be used. This is to avoid problems with some cards that have
	  this texture size limitation.
	- Wouter Wijngaards completed bounding box support for particle
	  systems.
16-Jul-2000
	- Samuel Humphreys did the following changes..
	    - Added two new procedural textures to dtsimple.  This is to
	      complete dtsimple as a test suite for all the current procedural
	      texture implementations and flags.  If you enable both test1 and
	      test2 then all the procedural textures get printed to the screen
	      with DrawPixmap as this uses a different rendering pathway than
	      DrawPixmap to the texture.  These changes highlighted a
	      fundamental bug in the implementations within the software
	      driver.
	    - Fixed all known bugs in the software and opengl implementations
	      of procedural textures.  Cleaned up the code, things are looking
	      much better now, and I don't anticipate needing any further
	      overhauls.  Three features remain to be done: mip mapping and
	      the ability to update sub rectangles of the texture buffer.
	      These changes will be propagated up into the mip map as
	      subrectangles also.  Lastly the flag
	      CS_TEXTURE_PROC_MIPMAP_ON_SYNC needs to be implemented.  Then a
	      few optimisations...
	    - Changed the metaball texture so instead of clearing the screen,
	      it prints the bot_view texture as a background...this gives an
	      unexpected but IMHO seriously cool effect.  Check it out :)
	    - Removed the opengl 16bit procedural texture pathway for now.  As
	      its very slow on my machine.
	    - Added some emacs fontification friendly comments to .inc files
15-Jul-2000
	- Wyatt Miler updated the Macintosh project files.
14-Jul-2000
	- Brandon Ehle restarted work on Crystal Script (python).
	  New layout is interface based, which allos for more dynamicism
	  and lower runtime memory requirements.
	- Tried to use csQuadTree3D for doing 3D visibility culling
	  (in contrast with c-buffer which does 2D culling). It doesn't
	  work yet though.
	- Added 'quad3d' console command to enable the new culling system.
	- Extended the Dumper class with a set of Memory() functions that
	  are useful to estimate how much memory some geometry uses.
	  It only calculates the static memory (i.e. no runtime information
	  like light patches, or transformed coordinates, ...). And it
	  only gives an estimate.
	- Extended csHashSet so that you can give the size of the hashmap
	  that is used. Also added a few example primes that can be used
	  for good sizes.
	- The number of estimated bytes for all world geometry and all
	  bsp/octrees is calculated and displayed at startup.
	  In addition the number of texels (not bytes) of all loaded
	  textures is also displayed.
	- Optimized csRAPIDCollider so that it only considers unsplit
	  polygons (i.e. the original polygon and not the ones that are
	  caused by a BSP or octree split). This speeds up CD init, speeds
	  up CD itself and also reduces memory consumption somewhat.
	  For the large level that I'm creating this reduced the number
	  of triangles in the CD data from 47871 to 19294.
	- Got a networking update to Blocks from Rene Dudfield.
	    - New Server=yes/no option in blocks.cfg.
	    - Blocks can now be either a server or a client.
	    - Check out apps/blocks/todo.txt for more information.
	  Note that this is work in progress. Currently you cannot really
	  do a network game yet.
	- Wouter Wijngaards improved the spiral particle system. It
	  looks a little nicer but not yet very good.
13-Jul-2000
	- Removed 'solidbsp' command from documentation.
	- Added SetMainFrustum to csQuadTree3D to change the frustum for an
	  already created csQuadTree3D.
	- Started work on using csQuadTree3D as a 3D visibility culler.
	  Not finished.
	- Added csCamera::Perspective() which calculates the perspective
	  projection for a 3D point given a camera.
	- Added csCamera::InvPerspective() which calculates the inverse
	  perspective projection for a 2D point (with a given Z).
	- Removed the csPolygon2D::AddPerspective... versions that take x,y,z
	  parameter and only kept the csVector3 ones.
	- Added PROCEDURAL and PERSISTENT keywords to textures in the world
	  file. With these you can make a texture procedural. If you make a
	  texture PERSISTENT as well as PROCEDURAL you can render on parts
	  of the texture and the previous contents will still be there.
	- Wouter Wijngaards added csMaterial class. Is now used by polygons.
	  The API is backwards compatible though, only resulting in a
	  separate material for each polygon if used the old way.
	- Wouter added bumpmap class, it will store a bumpmap in different
	  formats given a source image.
	- Wouter improved fountain command. Now uses spark
	  texture and has 400 particles, nice color and rotation; which
	  looks nice.
	- Wouter also fixed rain so that the texture should no longer be
	  upside down, snow had the same problem and should be fixed too.
12-Jul-2000
	- Added new csHashSet class. This is a class that you can use
	  to add objects and to test if some object is already in the
	  set. It uses csHashMap so it should be fairly quick.
	- Use the new thing visibility system for lighting too. This
	  should speed up the calculation of static lighting a lot
	  (and dynamic lighting if things cast shadows). This new system
	  uses the csHashSet class from above.
	- Greatly cleaned up the csSector::RealCheckFrustum() code and
	  added some comments.
	- Fixed a small bug in engine/Dumper where it crashes for polygons
	  having no name.
11-Jul-2000
	- Paul Garceau did an update to the Mingw makefile.
	- Andrew Zabolotny did some fixes to dos configuration batch
	  files.
	- Seth Galbraith fixed one of the files that Andrew fixed.
	- Changed csPolygonSet::GetBoundingBox() to fill in a csBox3
	  instead of two vectors.
	- Implemented support for dynamic bounding boxes in polygon trees
	  (octrees and BSP trees) for moveable and detail things.
	- Added is_visible flag for a thing.
	- Addd GetNumSkyThings() and GetNumThings() to csSector to get
	  the number of sky and normal things.
	- Removed 'home' and 'other' pointers in csThing because they
	  were not used and obsolete.
	- Detail and moveable things are now only drawn when visible
	  through the c-buffer. This greatly speeds up rendering big
	  levels with lots of small detail objects.
	- Removed support for 'solidbsp' for rendering. It wasn't properly
	  working in any case. Also removed 'solidbsp' console command.
	- The 'thing' toggle to render things (console command) now doesn't
	  affect the static thing anymore. This means that on a level using
	  an octree only detail and moveable things will not be rendered
	  when this flag is set.
	- Cleaned up the very important csSector::Draw() a little and added
	  more comments to make it clearer.
	- Fixed a bug in the derived iterator change from yesterday (in
	  csObject). It was not actually iterating over derived types
	  but doing something completely bogus instead. This fixes the
	  crash bug that I had in the new WalkTest entity system.
	- Renamed csBusyList to csEntityList.
	- Fixed a bug with flat-shading. This could cause crashes
	  with for example funky.zip (recent bug).
	- Made csPolygonSet::GetBoundingBox() more efficient.
	- Fixed csPolygonSet::GetBoundingBox() and CreateBoundingBox()
	  for polygon sets that contained nothing but curved surfaces.
	  These fixes visibility algorithm using c-buffer and curved
	  surfaces.
	- Samuel Humphreys did the following changes:
	    - Fixed bug in software drivers where if the viewing rectangle was
	      set to the window co-ordinates, polys where being unnecessarily
	      clipped.	When the clipper clips to x=0,y=0 double precision
	      calculations on occasion gave slight negative values.  The
	      software drivers silently rejected these polys.  I have added an
	      EPSILON fuzz so vertex +/- EPSILON is tested instead.  I notice
	      that the draw fog polygon member doesnt test at all for the
	      cases where vertices exceed screen dimensions, perhaps its safe
	      now to do away with these tests altogether?
10-Jul-2000
	- Samuel Humphreys did the following changes:
	    - Added messages to distinguish between backbuffer and software GL
	      implementations
	    - Cleared out debugging junk I left in.
	    - Adjusted Zbuffer clear...
	    - Added new Clear (RGBPixel &colour) function to csImageMemory.
	      This clears the image to the specified colour.
	    - Implemented new procedural texture flag:
	      CS_TEXTURE_PROC_PERSISTENT This has been implemented for opengl
	      backbuffer & software versions aswell as the pure software
	      drivers...see documentation for further details.	Only
	      mip-mapping to deal with now.
	    - Fixed the software 32bit RGB transpositions problem, I think :)
	      32bit software procedural colours should now be correct.	Please
	      people on big endian machines check this!!
	    - Optimised the GL back buffer implementation so it now clears
	      Zbuffer and/or screen with QUADS rather than the whole screen.
	    - Fixed the garbling which occured on the first frame in opengl.
	    - Various changes to dtsimple.  Currently the meta balls texture
	      is set to be persistent over the top of the squawk background,
	      so the metaballs smear over the texture rather than being
	      cleared each frame
	- Extended csObject::GetIterator() with a new parameter that indicates
	  if you want to iterate over derived objects as well. Normally
	  the iterator that is returned only iterates over the objects of
	  exactly that type. The parameter is defaulted to false so normally
	  no code should be modified for this change.
	- Added a new entity model to WalkTest. csWalkEntity is the main
	  abstract superclass. You can attach a csWalkEntity subclass to
	  any sector or thing in CS. In WalkTest there is a function
	  called ActivateObject() which will activate all entities that
	  are attached to some object. The main WalkTest loop (NextFrame)
	  will also call NextFrame() on all 'busy' entities. By default
	  entities are not busy but an entity can push itself on that list
	  at activation time (and release itself later when it is no longer
	  active).
	- Added 'action' command to WalkTest which will replace the old
	  'activate' command (for the obsolete scripting system). This
	  'action' command will trigger ActivateObject() in the parent
	  of the first polygon it can find in front of the camera (less
	  than 3 units away). Bound 'a' to this new command (meaning
	  'activate' is unbound now). WARNING! This new system is not
	  operational yet and crashes still.
	- Added first subclass of csWalkEntity: csDoor. This entity
	  represents a door that can be opened or closed. To use
	  this in world files add a key/value KEY ("cmd_Door", "X,Y,Z") to
	  the thing that you want to let act as a door. The x,y,z location
	  is the location of the hinge.
8-Jul-2000
	- Samuel Humphreys did the following changes:
	    - Fixed the opengl back buffer procedural texture so it now
	      displays curves and sprites non-inverted.	 The back buffer uses
	      an inverted orthographic projection matrix, which was being
	      overwritten by the DrawTriangleMesh routine.
	    - Added emacs friendly comments that these .inc files are really
	      C++ files.
	    - Fixed a bug in the shared initialisation and open routines in
	      the opengl renderer, the backbuffer proc texture looks much
	      better.
	    - Cleaned up a little the shared initialisation and open routines
	      in the software renderer
	    - Upped the res on the level_texture, and changed the start
	      position to look at it
	    - The shared open code in the software driver now properly sets
	      the z_buf_mode variable
	    - Cleaned out all the csCamera->SetPerspective calls from the
	      engine..	its now the app writers responsibility to update the
	      camera on context resize events.
	    - Added preliminary documentation for the procedural texture
	      subsystem.
	    - Small corrections to some txi files.
	    - Added new flags to itxtmgr which I have written documentation
	      for.  Now all I need to do is write the code for it :)
	- Seth Galbraith did some fixes to some of the DOS setup scripts.
7-Jul-2000
	- Moved alpha setting from portals to polygons. In most cases this
	  setting only makes sense for portals but you can use it on a thing
	  as well (and for a second skybox for example). Extended
	  csPortal::CheckFrustum() so that it has the alpha as a parameter
	  now because it needs it.
	- Fixed Map2CS so that it works on big endian machines and also
	  works on processors that don't allow writing short/long on
	  odd addresses.
	- Norman Kramer fixes glide canvas so that it now intercepts
	  WM_WINDOW_CLOSE messages from X.
6-Jul-2000
	- Samuel Humphreys did the following changes:
	    - Removed indentation from bin/dosupd.bat..hope the unix eol stuff
	      doesnt break it entirely.
	    - Added the last procedural texture.  Now you can watch levels on
	      the wall.	 Just execute 'dtsimple flarge' to see flarge.	To
	      navigate hold down the control key while cursoring around.
	    - Added a method to LanguageLayer to allow delaying of setting of
	      camera.  This will also allow one to change the camera.
	    - #ifdefed with OPENGL_1_2 the GL_UNSIGNED_SHORT_5_6_5 data type,
	      which Mesa supports but windows doesn't.	The native 16bit
	      display path for procedural textures now works again.
	    - Added a temporary box to the top left corner of dtsimple which
	      should be the same colour which proc textures clear to...this is
	      for testing...
	    - Clumsily fixed the problem with the 32bit software procedural
	      textures.	 From canvas/common/protex2d.cpp:197 I have added byte
	      shuffle code which probably isn't the best way to do it, and
	      probably not correct for all endianness and frame buffer pixel
	      types.  Hopefully Eric or AndyZ will take a look and do it
	      properly :)
	    - The portal procedural texture now correctly appears.
	    - Cleaned up proc texture detection in sftcom3d.cpp.
	    - Added more comments to remind myself what Ive done.
	- Added csPortal::CompleteSector() as a virtual function. This
	  function is responsible for creating a new destination sector
	  if this sector would be NULL. It can be used by subclasses of
	  csPortal to dynamically create sectors.
	- Added csPortal::Warp() to warp one vector.
	- Simplified csPortal by removing IntersectSphere and FollowSegment.
	  Those functions are now specific to csSector.
	- Added CS_ENTITY_CAMERA flag for csThings. With this flag set
	  things will only be rotated to the camera and not translated.
	  This is useful for skyboxes and skydomes.
	- Added SetMixMode and GetMixMode to csGouraudShaded so that you
	  can now render a gouraud shaded polygon with another mixmode.
	  This can be used to create transparent things and so on.
	  Note that the engine needs a little better support to actually
	  support transparent things in a good way (i.e. sort them the
	  right way).
	- Added CAMERA() keyword to the world file format for csThings.
	- Added MIXMODE() keyword to the world file format for polygons.
	- Added additional support for 'sky' objects in a sector. These
	  are basically just things like the others but you have the guarantee
	  that they will be drawn first with Z fill before anything else
	  is drawn.
	- Added functions AddSky(), RemoveSky(), GetFirstSky(), and GetSky()
	  to csSector to manage sky objects.
	- Added support for SKY() keyword in 'ROOM' and 'SECTOR'. This
	  keyword behaves EXACTLY the same as a normal THING except that
	  it will be added as a sky object.
	- Added new support for sector commands in WalkTest. If you add
	  something like KEY ("cmd_whatever", "...") to a sector in the
	  world file then WalkTest will recognize it as a command to
	  execute. Other apps will ignore the keyword. There is currently
	  only one command: KEY ("cmd_AnimateSky",
	  "<thing-name>,<dir>,<speed>"). When this command is present
	  WalkTest will animate the sky object indicated with <thing-name>.
	  The rotation <dir> will be 'x', 'y', or 'z'. The speed will
	  be relative to 1 meaning one full rotation in 1 second.
	- Norman Kramer made some glide fixes: not only was the hardware
	  framebuffer deleted in the derived class (which was stupid already)
	  - we (read "i") did it here again :) when the doublebufferstate
	  is changed we now call FinishDraw until the framebuffer is
	  unlocked (this is important if DoubleBuffer() is called
	  between BeginDraw()/FinishDraw()) - this will ensure the
	  framebuffer is relocked upon next LFB access and points to the
	  right buffer.
	- Norman also removed deleting of hardwareframebuffer at exit, wonder
	  why it did not segfaulted earlier - weird (for glidex2d).
5-Jul-2000
	- Samuel Humphreys did the following changes:
	    - Rearranged iGraphics2D/3D so that related functions are
	      grouped... ;)
	    - Fixed transparent images in dtsimple which showed up with
	      the opengl backbuffer proc texture.
	    - Fixed text rendering on the backbuffer proc textures.
	    - Fixed an omission from my last commit.
	    - Simple optimization in the gl font server gives a 12.5x
	      speed up for font rasterization :)
	    - Also skips rasterizing spaces.
	- Travis McIntosh added curve radiosity support as well as an
	  updated interface into the Bezier math.
	- Travis did a quick bug fix in radiosity (SetKeyColor -> GetKeyColor).
	- Norman Kramer fixed memory leak in csTree, now treenodes delete
	  their children from last to first because csVector::Delete shifts
	  the contents of the vector.
	- Norman also added cscmdTreeRemoveAll to remove all treeitems
	  (for csTree in CSWS).
	- Received new halo code from FragDance for OpenGL. Cleans up a
	  little but otherwise works the same.
4-Jul-2000
	- Samuel Humphreys did the following changes:
	    - Backbuffer now works without being inverted. Re-reversed the
	      orthographic projection from its default setting of reversed,
	      for the duration of rendering to the back buffer.... this
	      seems strange that the opengl driver has this setting.
	    - Sets glviewport in the back buffer 3d driver within the
	      begin/finish draw calls.
	- Eric Sunshine fixed csQuadTree3D so that it compiles on NextStep.
	  The embedded node_pos_info class was triggering a compiler bug (for
	  some reason).	 Also added some missing 'const' qualifiers and
	  cleaned up the files.
	- Eric Sunshine hacked Squawk to keep it from depositing precalc_info
	  files where they are not wanted.
	- Norman Kramer removed const qualifier from GetCorner, now
	  compiles again (csQuadTree3D).
3-Jul-2000
	- Seth Galbraith cut skybox in half to save 200 KB for Squawk.
	- Andrew Zabolotny did the following changes:
	    - Renamed everywhere the term "transparent" to the correct
	      term "keycolor". It was a misunderstanding because the term
	      "transparent" is related to both alpha transparency and key
	      color. Now "transparent" is used only where alpha
	      transparency is involved.
	    - Changed naming convention of csScan_X_draw_scanline_xxx
	      routines. I tried to make the names shorter and at the same
	      time add the information of what the routine actually does
	      into its name.
	    - Added a lot of new scanline routines:
		- Textured Gouraud-shaded polygons with key color
		  transparency.
		- Textured flat-shaded polygons with key color transparency.
		- Textured flat-shaded polygons with table-driven effects (FX).
		- Flat-color flat-shaded polygons with table-driven
		  effects (FX).
		- Flat-color Gouraud-shaded polygons with table-driven
		  effects (FX).
	      The routines were added for all supported modes (8, 15, 16,
	      32 bits). Note that not all of them were tested (time for a
	      G3D test app?) thus some may be buggy. If you find bugs, tell
	      me and I will fix them.
	    - Added support for 15-bits modes to MGL 2D driver.
	    - Fixed 8-bit fog. There was a strange error in there (strange
	      because it was in its initial state (nobody has changed
	      anything) and still gcc generated wrong code (unsigned shift
	      instead of signed)). I wonder how it worked when I initially
	      wrote it.
	    - Implemented alpha-mapped textures support. Preliminary though,
	      several details about how the Z-buffer is to be filled are
	      unclear for now. The routines work surprisingly fast, and were
	      implemented for all supported modes (8, 15, 16, 32 bits).
	      The following drawing modes support per-pixel alpha-blending:
		- DrawPolygon() with Z-fill and Z-use modes.  This means you
		  may use alpha-mapped textures for walls and things; the
		  engine does not support this too well for now.
		- DrawPolygonFX() supports just flat-shaded alpha-mapped
		  textures.  That is, if the texture has an alpha channel, the
		  blending modes and Gouraud shading flag are ignored for now.
	      Usage is pretty simple: no changes to world file is required
	      for this. Simply create a texture with alpha-channel and save
	      it to a format that supports alpha channel (I have used .PNG).
	      Then use it as a regular texture; anywhere you use it (walls,
	      things and sprites) it should work.
	- Andrew also replaced REGISTER_STATIC_CLASS with REGISTER_STATIC_LIB
	  which is shorter (in CSWS).
	- Andrew removed REGISTER_STATIC_CLASS (csVFS) from cswssys.
	  Note that things like this should be done ONLY from applications.
	  No library should register static SCF classes and/or plugins because
	  several libraries may require same class, and the class will be
	  registered several times in the best case.
	- Andrew fixed dnapp to link as a console executable (vs. GUI).
	  Also replaced all Sys->Printf() with regular printf's. There
	  is no much sense in using Sys->Printf from console apps.
	- Norman Kramer added missing CheckAlpha() calls to various parts
	  in the CS project (which Andrew forgot to do).
	- Norman also copied GetAlphaMap() to csTextureMM from
	  csTextureManager and renamed GetAlphaMap to GetAlphaMapData since
	  it clashed with the new GetAlphaMap from iTextureHandle.
2-Jul-2000
	- Samuel Humphreys did the following fixes to dtsimple:
	    - Thanks to AndyZ's mem debugger, plugged all the memory leaks
	      I'd introduced :) From (cough) ~1.5k to 0.
	    - Also fixed a couple of memory leaks in the software texture
	      manager while in 8bit.
	    - Fixed the crasher in dtsimple in 8bit software mode.
	    - Context close messages now sent on procedural texture canvas
	      destruction.
	    - Fixed various comments.
	- Cleaned up the code to load and save a recording. The format
	  is now endian correct and somewhat shorter.
	- Added 'clrrec' command to clear the recording in memory.
	  Multiple recording sessions will otherwise just be appended to
	  each other.
	- Made the size of the saved recording smaller again by not
	  repeating the sector name if it is the same as the previous
	  entry.
1-Jul-2000
	- Added a primitive recording function for LinuxTag. Will clean
	  it up for general use later (in WalkTest).
	- Added 'loadrec' and 'saverec' commands to load and save
	  a recording. VERY primitive now...
	- Wouter Wijngaards improved the snow texture.
	- Wouter also worked on the 3D quadtree (which is possibly
	  going to be used for fast visibility).
	- I decreased the snow particle size from 1 to .7.
30-Jun-2000
	- Andrew Zabolotny fixed class tree a little in CSWS.
29-Jun-2000
	- Added csOctree::GetLeaf() function that calculates the leaf where
	  the given position is in.
	- Added db_curleaf console command to WalkTest. This command
	  shows the dimensions of the current octree leaf you are in. This
	  command only works if the current sector has an octree.
	- Fixed a severe bug with the octree. The vertices were not correctly
	  transformed to camera space anymore!
	- Continued further debugging work on the PVS.
	- Samuel Humphreys did several changes to dtsimple. Mostly
	  rearrangements for aesthetic reasons. Big improvement in software
	  but still problems with OpenGL.
	- Andrew Zabolotny added support for statically linking NULL 3D
	  renderer.
	- Andrew reverted back a recent change from Thomas which
	  breaks SCF. Unused static variables are simply not included
	  with GCC.
	- Andrew also removed unneeded inclusion of math2d.h.
	- Andrew fixed a serious bug in the DOS rawvideo driver that
	  caused CS to crash on many videocards in many videomodes.
	- Andrew fixed a BigBug{tm} in the line and null renderers. inv_cmap
	  wasn't initialized to NULL.
	- Andrew added support for dithered textures to the NULL 3D
	  renderer.
	- Robert Bate added 'class' after the friend declaration in
	  csHashMap so that the file will compile with CW Pro5.
	- Robert also did some changes so that some files will compile
	  on both CW Pro5 and Pro5.
	- Paul Garceau added the latest version of mingw.mak.
28-Jun-2000
	- Norman Kramer fixed FindFirstSelectedItem and FindAllSelectedItems
	  in CSWS.
	- Rene Dudfield <illumen@yahoo.com> contributed a set of Python
	  scripts for Blender to convert Blender entities to CS objects.
	  You can find them in CS/scripts/blender. There is also a README
	  there which explains how to use the scripts in Blender.
	- Fixed a severe crash bug with dynamic lights and room.zip. The
	  fix is not very satisfactory because I simply worked around the
	  bug. When I have a little more time this needs to be investigated
	  better.
	- Eric Sunshine removed obsolete reference to CS/newdocs from subs.mak.
	- Eric Sunshine changed the location of specification of the null,
	  infinite, and line renderers in the makefiles.  Compilation of these
	  renderers is now controlled by user.mak since they are platform-
	  independent.	They are no longer controlled by platform-dependent
	  makefiles.
	- Eric Sunshine eliminated a few compilation warnings in wscs3d, and
	  a linking problem on NextStep caused by (unnecessarily) including
	  the simple.h header.
	- Samuel Humphreys resolved texture mapping for the mirror stand
	  in dtsimple.
27-Jun-2000
	- Samuel Humphreys fixed dtsimple:
	    - Fixed the portal...it was the gouraud shading which broke it,
	      turned it into a mirror for the time being.
	    - Fixed non-coplanar wall.
	    - Re-organised the lighting, added a stand for the view screen.
	    - Added a vector texture space method to csPolygon3D.
	    - some other trivialities :)
	- Andrew Zabolotny fixed wscs app so that it will not create two
	  instances of 3D and 2D drivers (and will not crash at exit due
	  to this) and it will also refresh the screen correctly (implemented
	  missing support for that in CSWS).
	- Andrew also changed ForceFullRedraw() into a more flexible
	  pplInvalidate() call which allows for invalidating a random screen
	  rectangle instead of entire screen.
	- Andrew fixed OS/2 video driver so that BeginDraw/EndDraw can be
	  called multiple times before doing Print() in double-buffered mode.
	- Andrew fixed common graphics class so that it can be Close()'d
	  without being Open'ed and so that it won't crash if we just create
	  it and destroy instantaneously.
	- Wyatt Miler updates the Mac project files.
	- Fixed the bug when that could cause severe problems when
	  loading a world for which the octree isn't valid anymore. The
	  partially loaded octree was not cleaned up properly.
	- Fixed a compile bug in DDraw61::GetClipper().
	- As from a suggestion from Terrence Stewart I implemented
	  csPolygon2D::FillZBuf() which will fill the Z buffer for
	  that polygon (and not do texture mapping). This is now used
	  after drawing a portal so that sprites drawn in the same
	  sector as the portal cannot accidently go inside the portal
	  contents (Z buffer cannot be used in case of floating portals
	  for example). This z filling for portals is optional though.
	  It is a (slight) overhead and it is not needed for many
	  kinds of portals (like outgoing portals on sector walls).
	  WARNING! Currently only the software renderer supports this
	  Z-buffer filling.
	  WARNING! If you enable this option it requires sprites to
	  be correctly placed in all the sectors that you want the sprite
	  to be visible in. If you don't do that and you use a ZFIL portal
	  then you'll get the effect that the sprite will be clipped to
	  the portal.
	- Removed a number of 'bool' settings in csPortal and replaced them
	  with a single public 'flags' field. Also removed a lot of the API
	  calls to set those flags. All access should be through the 'flags'
	  field instead. A portal now accepts the following flags:
	    CS_PORTAL_CLIPDEST:	  clip geometry in destination sector.
	    CS_PORTAL_ZFILL:	  do z-fill after rendering portal.
	    CS_PORTAL_WARP:	  warp space (set with SetWarp()).
	    CS_PORTAL_MIRROR:	  mirror space (automatically set).
	    CS_PORTAL_STATICDEST: static destination for portal.
	- Added support for new ZFILL keyword in world files. This can
	  be used inside a WARP statement (which is actually a bit badly
	  named but this describes various portal settings).
	- Moved CLIP from polygon to WARP because it belongs with the other
	  portal settings. This will break the 'room.zip' level but it
	  is easy to fix.
	- Added csFlags::SetBool(unsigned,bool) to set all values in a mask
	  to either 1 or 0 depending on the bool value.
	- Eric Sunshine adjusted the 'clean' target in the dnapp makefile.
	- Eric Sunshine implemented support for CSKEY_PADPLUS, CSKEY_PADMINUS,
	  CSKEY_PADMULT, and CSKEY_PADDIV in the OpenStep port.	 Andrew
	  recently added these constants to csevent.h.
	- Eric Sunshine fixed a couple copy/paste errors in NeXTDelegate.cpp
	  for NextStep.
	- Thomas Hieber made REGISTER_STATIC_CLASS really static (removes a
	  linker warning on msvc).
	- Thomas moved HINSTANCE to win32 instead of having it in exeentry/
	  dllentry. This removes a warning on the linking of libAll. Anyway
	  it looks better that way too. Maybe we should eliminate exeentry
	  and dllentry completly. These files seem pretty redundant to me
	  (it could all be done by win32.cpp IMHO).
	- Thomas also did a few minor cleanups here and there and a few
	  minor changes to VC project files.
	- Norman Kramer fixed CSWS (cstree) so that it compiles on Windows
	  now.
	- Norman added support for ZFILL_ONLY in glide renderer.
	- Martin Geisse cleaned up the code of the wave-out sound driver.
26-Jun-2000
	- Fixed memory leak while building BSP/octree.
	- Eric Sunshine eliminated a slew of compilation warning in cstree.cpp
	  and cswstest.cpp.
	- Eric Sunshine fixed several broken comments in sft3dcom.h.
	- Eric Sunshine worked around an OpenStep compiler bug triggered by
	  cstreend.h where unlinkable code is generated when an inline method
	  calls a second inline before the compiler has seen a declaration of
	  the second method.
	- Eric Sunshine implemented support for CSKEY_PADPLUS, CSKEY_PADMINUS,
	  CSKEY_PADMULT, and CSKEY_PADDIV in the NextStep port.	 Andrew
	  recently added these constants to csevent.h.
	- Eric Sunshine brought simple.txi (the Simple tutorial) up to date.
	- Eric Sunshine fixed several problems in the CrystalClear tutorial
	  document.
	- Release of 0.16r001.
	- Andrew Zabolotny removed the ugly inclusion of iworld.h and
	  isector.h from icmdmgr.h which in turn means that cssys depended
	  on csengine.
	- Andrew also removed the unneeded inclusion of lightdef.h from
	  3D renderers. lightdef.h should go into include/csengine in the
	  end.
	- Andrew added a small NULL 3D renderer for use with simple CSWS
	  programs. It contains a full-featured texture manager and
	  displays only 2D pixmaps, the DrawPoly* functions are empty.
	  It is very small and is useful if you want to statically link
	  in a small project that makes use of CSWS.
	- Norman Kramer did a coding style change to csTreeNode.
	- Norman fixed glide renderer after Jorrit broke it yesterday.
	- Norman added ForceFullRedraw() to CSWS for integration of CSWS
	  into usual 3D programs.
	- Norman added wscs3d app to demonstrate how to combine CSWS
	  with the 3D engine. Press 'd' when running this app to open
	  a CSWS dialog.
25-Jun-2000
	- New tree control in CSWS from Norman Kramer.
	- Did an experiment for speeding up OpenGL by putting the setup
	  commands for DrawPolygon in a display list. Did not seem to
	  help much though.
	- Added CALLBACK_MESH in the engine to support edge drawing for
	  meshes.
	- Added iGraphics3D->GetObjectToCamera(), GetClipper(),
	  GetPerspectiveCenter(), and GetPerspectiveAspect() to
	  fetch those respective entries from G3D.
	- Implemented mesh drawing for DrawTriangleMesh in WalkTest.
	  This means that when you press 'e' (to enable edges) you'll
	  see the edges of all rendered triangles for terrain, curved
	  surfaces, and 3D sprites in green.
	- Eric Sunshine fixed a bug in the 'depend' target of the BeOS
	  OpenGL makefile.
	- Eric Sunshine eliminated some compilation warnings in the OpenGL
	  renderer.
24-Jun-2000
	- Received another lighting patch from Travis McIntosh.
	  Dynamic lighting on curves should be better now with no
	  artifacts.
	- Disabled multi-texture extension support again. At the moment
	  it is not given much performance benefits (at least for me)
	  and there are some bugs (i.e. disabling texture mapping doesn't
	  work and blending mode isn't correct).
	- OpenGL::DrawPolygon was doing some unneeded work. I removed
	  it so this should speed it up a little.
	- Moved scaling of lightmap from OpenGL::DrawPolygon to the
	  lightmap cache so that this doesn't have to be repeated
	  every time.
23-Jun-2000
	- Made tweening default again for sprites. Also added missing
	  initialization of the tween setting in sprite templates.
	- Received a new patch from Travis McIntosh to speed up dynamic
	  lighting for curved surfaces.
	- Eric Sunshine made another fix to Dungeon plug-in in response to a
	  fix by Martin to Eric's fix to Martin's fix. :-)  Martin's most
	  recent change triggered an internal NextStep compiler error again.
	  *Hopefully* this fix will be acceptable to all compilers.
	- Wouter Wijngaards added the start for a bounding box implementation
	  for particle systems that will help for visibility culling of them.
	- Eric Sunshine fixed a bug in map2cs where it failed to assign unique
	  names to the Things which represent curved surfaces.	This had the
	  unfortunate side-effect of causing the engine to cache several
	  lightmaps in the zip file with the same name.	 For instance, in
	  Nicholas Blumire's funky.zip map, the lightmap name "room__c2_0"
	  appeared nine times.	This, in turn caused csArchive to to fail to
	  write the zip file when changes were made to it following the
	  initial lightmap creation (for instance, if -revis was used later).
	  In fact, once the archive was marked as dirty, csArchive would
	  attempt and fail to write it out each time an entry, such as a
	  lightmap, was read from it.  Since there are nearly 4,400 lightmaps
	  in funky.zip, this meant that csArchive tried and failed to write
	  out funky.zip nearly 4,400 times during a single run of WalkTest!
	- Eric Sunshine fixed a few compilation problems with vfs.cpp which
	  manifested when VFS_DEBUG was defined.
	- Eric Sunshine added a new class to csUtil named csMemFile.  This
	  class represents a raw memory buffer which implements the iFile
	  interface.
	- Eric Sunshine reworked the code which caches PVS information in the
	  zip file so that it now works via the new csMemFile class rather
	  than working directly with VFS.  This change had the remarkable (and
	  intended) effect of reducing time taken to cache PVS information
	  from nearly 25 minutes to less than 1 second!
	- Eric Sunshine reworked the code which caches Octree information in
	  the zip file so that it also works through the new csMemFile class.
22-Jun-2000
	- Got a new patch from Travis McIntosh.	 This patch finished
	  dynamic lighting for curved surfaces. Still a bit slow but it
	  works very well already. WARNING! Please do -relight or -recalc
	  on levels that have curved surfaces! The lightmap format has
	  changed (lightmap got bigger).
	- I discovered that sprite tweening is enabled by default. Because
	  this makes things slower I disabled it by default and added a
	  function csSprite3D::EnableTweening() with which you can enable
	  it again. I also added csSpriteTemplate::EnableTweening() and
	  provided support for a new TWEEN keyword in the world file for
	  both sprites and templates.
	- csPolygonSet::GetBoundingBox() will now try to create the bounding
	  box if it doesn't exist.
	- Rene Dudfield experienced a strange crash in WalkTest which seemed
	  to have been caused by using 'fabs'. I replaced most occurrences
	  of 'fabs' with the 'ABS' macro throughout the source to avoid this
	  problem. Maybe this problem is cyrix related? (Rene has a cyrix
	  processor).
	- Eric Sunshine made the definition of the explicitly sized types
	  int8, uint8, int16, uint16, int32, and uint32 optional in
	  cstypes.h.  Definition of these types is now controlled by makefile
	  and C-preprocessor variables named CS_BUILTIN_SIZED_TYPES.  This
	  change was necessary in order to support BeOS since the BeOS system
	  headers already define these types.
	- Wouter Wijngaards fixed rain and snow so that particles will not
	  disappear on slower systems.
	- Eric Sunshine eliminated a compilation warning in the Dungeon
	  plug-in which was reported by BeOS compiler.
	- Eric Sunshine eliminated a couple compilation warnings in the
	  OpenGL renderer.
	- Eric Sunshine fixed a typographical error in cssysdef.h
	  (OS_BEOS --> OS_BE) to allow the networking code to compile on
	  BeOS.
21-Jun-2000
	- Norman Kramer added new SetViewArea for gridviews to retsrict the
	  area they can show.
	- Added 'colors' to the tesselated version of a curve so that
	  drawing curves will be much more optimal. This means that we'll
	  have to update this whenever the lightmap or tesselation changes
	  of course.
	- Use DrawTriangleMesh now for drawing curved surfaces. Still not
	  complete though. I need to implement correct clipping (currently
	  the curve will always be clipped which means you'll get the
	  non hardware accelerated version of DrawTriangleMesh) and vertex
	  fog is also not implemented. Note it should already be somewhat
	  faster since lighting is now cached with the tesselated curve
	  and is only recalculated when either lighting or the tesselation
	  changes.
	- Removed AddBoundingPolygons from csCurve because it is obsolete
	  and needs to be implemented otherwise.
	- Added GetObjectBoundingBox(), GetCameraBoundingBox(), and
	  GetScreenBoundingBox() to csCurve. This is now used to cull
	  away curved surfaces that are off-screen or off-portal and
	  to indicate if they should be clipped. This should greatly
	  speed up curved surfaces now and use DrawTriangleMesh to its
	  (current) fullest potential.
	- Implemented vertex fog for curved surfaces too.
	- Eric Sunshine repaired the Dungeon plug-in following Martin's fix
	  to Eric's fix.  Martin's fix triggered an internal compiler error on
	  NextStep, so Eric re-fixed it in a manner which should suit everyone.
	- Eric Sunshine eliminated a "signed vs. unsigned comparison"
	  compilation warning in Blocks which was reported by MacOS/X Server.
	- Fixed the alpha test in perftest which stated that it would
	  do texture mapping while it didn't.
	- Added a patch from Thomas Krug to enable perspective correct
	  texture mapping for OpenGL DrawPolygonFX. The patch is disabled
	  though becuase it is slower (does a divide) and also not consistant
	  with how DrawTriangleMesh behaves. I think this is a feature
	  that needs to be optional.
	- Norman Kramer did a dramatic speed increase in the glide renderer.
	  Performance went up with 0.1 FPS!!! :-)
	- Eric Sunshine eliminated a warning about 'yyval' possibly being used
	  uninitialized in support/gnu/bison.sim.
	- Eric Sunshine made the following changes to the Dungeon plug-in:
	    - Eliminated 65 apparently bogus compilation warnings about 'this'
	      (or 'a' in some cases) possibly being used uninitialized.	 This
	      warning appeared each time a parser rule assigned to $$ and then
	      used $$ in a following expression.  The warning appears to have
	      been completely bogus since it's obvious from simple inspection
	      that $$ had a valid value before being used in the subsequent
	      expression.  This warning was issued by at least three different
	      versions of the GNU C++ compiler which I used.
	    - Modified the makefile so that it automatically recreates
	      dnp_tab.cpp and dnp_tab.h from dnp.y if they are missing or out
	      of date.
	    - Modified the makefile so that it uses CS's support/gnu/bison.sim
	      to generate the parser in dnp_tab.cpp since our own bison.sim
	      has been fixed to eliminate the warning about 'yyval' being used
	      uninitialized.
20-Jun-2000
	- Changed csDynLight::SetColor() so that it will work without
	  having to call Setup() later. This is MUCH more efficient if you
	  have a dynamic light that doesn't move but only changes color.
	  It is also more consistant.
	- Changed default halo parameters a bit to more resemble a cross.
	- Added SNOW, RAIN, FIRE, and FOUNTAIN keywords to the world
	  file format.	For a simple fountain use:
	    FOUNTAIN 'fount1' (ORIGIN (x,y,z) TEXTURE ('green.gif'))
	  For snow use:
	    SNOW 'snow' (BOX (x1,y1,z1,x2,y2,z2) TEXTURE ('snow.jpg'))
	  There are many more options.	See docs/incoming/worldfmt.tex for a
	  list.
	- Wouter Wijngaards added a fountain particle system.
	- Added 'fountain' console command to create a fountain.  The first
	  argument is the texture (default is 'green.gif' until we find a
	  better splash texture).  The second argument is the number of
	  particles (default is 50).
	- Wouter added a fire particle system.
	- Added 'flame' console command to create a flame.  The first
	  parameter is the texture (default is 'raindrop.png'). The
	  second argument is the number of particles (default is 50).
	- Enabled extensions in OpenGL renderer.
	- Disabled the experimental optimization in DrawPolygon for OpenGL.
	  It had a bad effect on performance.
	- Provided a default extension detection code for operating systems
	  other than Windows and Unix (with Mesa). Also made the extension
	  detection safe so that extensions are not used if you have
	  Mesa 3.0 or older.
	- Extend makefies for OpenGL so that OPENGL_PATH is used if USE_MESA=0
	  (similar to MESA_PATH).
	- Eric Sunshine made the following changes to the Blocks game:
	    - Fixed a nasty memory corruption bug.  HandleLoweringPlanes() was
	      writing one past the end of the States::filled_planes[] array
	      and clobbering the States::encodedData variable which followed
	      it.  This bug occurred at all times, but only manifested itself
	      when the network plug-in was available since encodedData is only
	      used by the networking code.
	    - Fixed a really bone-headed error where States::Init_game_cube()
	      was accessing 'zone_dim' before it had been initialized, thus it
	      failed to initialize the playing field in a meaninful manner.
	      This resulted in all sorts of bizarre problems on platforms where
	      'game_cube' isn't filled with NULL by default (and by accident).
	    - Fixed some memory leaks.
	    - Cleaned up the source and header files and removed a bunch of
	      dead code.
	    - Updated comments for Doc++ compatibility.
	    - Fixed the makefile's 'clean' target.
	- Eric Sunshine made the following changes to csBitSet:
	    - Constructor no longer attempts to allocate zero bytes from heap.
	    - Bits are now 'false' by default in new bitsets as a convenience.
	      Same applies to bits added when a bitset is grown with Resize().
	    - Resize() no longer tries to allocate zero bytes.
	    - Resize() no longer calls realloc() with a null pointer since
	      doing so crashes on some systems though it works on others.
	    - Resize() now frees byte array if resized down to zero.
	- Eric Sunshine repaired the Dungeon plug-in so that it once again
	  builds with the NextStep compiler.  A recent, large update to the
	  plug-in triggered several particularly rare NextStep compiler bugs.
	  This is almost certainly a new record for number of severe compiler
	  bugs triggered by a single update to a single module.	 :-)
	- Eric Sunshine eliminated a few compilation warnings in the Dungeon
	  plug-in which were reported by George Yohng <cspace@mmts.nsys.by>,
	  though the bulk of them had already been fixed by Eric even before
	  receiving the problem report.
	- Changed curve system so that tesselated vertices are kept in a more
	  DrawTriangleMesh friendly format.
	- Did first attempt to use DrawTriangleMesh for curved surfaces. Not
	  enabled now because it doesn't work very optimal due to the way
	  lightmaps and lighting for curves work. We need to find a solution
	  for this. Maybe putting lighting in the tesselated curve might help.
	- Eric Sunshine made a pass through the makefiles for all plug-in
	  modules to ensure that every plug-in defines an SCL_* flag and
	  defines the correct parameters for use with static linking.
	- Eric Sunshine made a pass through the makefiles for all applications
	  to ensure that each one which uses plug-in modules also links with
	  static.cpp.
	- Eric Sunshine added a lot of missing entries to static.cpp.  All
	  plug-in modules which can be built with the CS makefile system now
	  have entries in static.cpp.  Also fixed several incorrect or out-of-
	  date entries.
	- Eric Sunshine fixed the 'clean' target in all application and
	  plug-in makefiles.  He also fixed several other errors and problems
	  found throughout the makefile system.
	- Thomas Hieber removed a problem for Map2CS on a map created by
	  Nicolas Blumire using q3radiant. Also some other minor fixes.
	- Thomas also did a small adjustment to the VC project files.
	- Andrew Zabolotny added pplBeginDraw() to CSWS for apps that need
	  low-level access to the CS plugins.
	- Martin Geisse fixed more compiler warnings.
	- Frank O'Connor fixed ext_w32.cpp so that it compiles on VC.
	  It was including cssysdef.h which is not legal for a file that
	  is being included (although technically it is a cpp file).
19-Jun-2000
	- Martin Geisse fixed a number of compiler warnings all over
	  the place.
	- Wouter Wijngaards added a new snow particle system.
	- Added 'snow' console command that works almost the same as the
	  'rain' console command.
	- Wouter also fixed a bug in csQuadTree as reported by Martin
	  Geisse.
	- Fixed a bug in 'rain' and 'snow' commands with speeds other than the
	  default.  Also made raindrop.png and snow.jpg default so you can
	  type just 'rain' or 'snow'.  Default number of particles is now 500.
	- Tried an experimental change to OpenGL to minimize the amount of
	  processing between glBegin/glEnd.  There is an OpenGL performance
	  FAQ which says you should do almost nothing except
	  glVertex,glNormal, glTexCoords, ...  calls between glBegin/glEnd.
	  So I changed DrawPolygon so that it first calculates and copies the
	  results in a few arrays.
	- Did another optimization in addition to the above one by using
	  glVertex4fv instead of glVertex4f (similar to glTexCoord2). According
	  to the same FAQ this should also improve matters.
	- Did another optimization but this is more a quick hack. In order
	  to avoid unneeded glBindTexture calls I now created a csglBindTexture
	  which remembers the old glBindTexture. I'm not sure that this
	  approach is totally safe and it is not tested well. Also it might
	  not work well with multi-texture extension. This is something
	  we need to test. I let it in for now so that it will actually
	  get tested :-)
	- Fixed a bug in csString as reported by George Yohng
	  <yohng@drivex.dosware.8m.com>.
	- Got a new patch from Travis McIntosh.	 This patch finished
	  pseudo-dynamic lighting for curved surfaces.	Works nicely now.
	- Andrew Zabolotny made the following changes:
	    - Fixed the titlebar title that someone had broken for software
	      renderer (the window heading used to be empty last week).
	    - (Finally! :-) fixed the polygon clipper routines so that 2D
	      sprites (and 3D sprites as well) are clipped in 2D correctly.
	      The problem was not with the CS_VERTEX_INSIDE case, but with the
	      fact that sometimes for some CS_VERTEX_ONEDGE vertices it used
	      to generate incorrectly the 't' parametric value.	 More
	      specifically, it happened when an edge was clipped more than
	      once (against several clipper edges).
	    - Fixed a bug in software renderer - all polygons were drawn one
	      pixel up.	 E.g.  with the default renderer view with a 2 pixel
	      border on each side it worked like 3 pixels border at bottom and
	      1 pixel border at top.
	    - Implemented polygon drawing (clipped against other windows!) in
	      CSWS.  This is the first step towards implementing the solid
	      view window.
	    - Implemented a little bit of solid view window in MazeD.  It is
	      very limited and buggy for now, but thats a start.  Texture
	      mapping doesn't work (all vertices get u/v == 0) thus you will
	      see strange colors for textured polygons.	 Flat-shaded polygons
	      work.
	    - Added a new random number generator class to csutil library.
	      Currently it is unused but I'm going to use it in future,
	      besides we can switch existing code from rand() to it.
	- Eric Sunshine worked around OpenStep problem where run-time
	  construction of global BSP-polygon pool was being botched.
	- Eric Sunshine eliminated several compilation warnings throughout the
	  project which were flagged by the OpenStep compiler.
	- Eric Sunshine eliminated several compilation warnings in the
	  Dungeon plug-in.
	- Eric Sunshine fixed a couple bugs in the Dungeon plug-in:
	    - Was applying delete[] to the middle rather than the beginning of
	      a character array in yywrap().
	    - Was leaking the 'filename' string of an included dungeon file.
	- Eric Sunshine csRandomGen so that it works with compilers which do
	  not provide a native 'bool' type.
18-Jun-2000
	- Norman Kramer fixed Squawk and csgame following the recent
	  modifications in sprite creation.
	- Martin Geisse removed another compiler warning in dungeon plugin.
	- Added two new tests to 'perftest' to test how grouping of textures
	  in the 3D rasterizer might benefit performance.  It seems that this
	  would give a great benefit indeed.
	- Got a new patch from Travis McIntosh to start work for supporting
	  pseudo-dynamic lights and curved surfaces.  Not finished yet.
	- Eric Sunshine made the following changes to the Crystal Space
	  documentation:
	    - Repaired all of the errors and warnings reported by 'makeinfo'
	      after recent changes to the Texinfo source documents.
	    - Repaired all of the TeX formatting problems which cropped up
	      with recent changes to the documentation source files.  Mostly
	      these problems involved overfull and underfull hboxes.
	    - Overhauled portals.txi.  Performed a much more thorough Texino
	      conversion on it.	 Replaced the ASCII-art with real images.
	      This looks much nicer in the printed and HTML output.
	    - Cleaned up the win32.txi build documentation following some
	      recent changes to it.  Fixed several mark-up problems and also
	      re-wrapped source file to 80-column width.  Added a slew of
	      missing cross references.
	    - Performed a more thorough Texinfo conversion on memdgb.txi and
	      also renamed it to memdebug.txi.	Fixed several Texinfo mark-up
	      problems as well.
	    - Created a new section (portable.txi) which discusses portability
	      issues when writing code and creating resources for Crystal
	      Space.  Most of the content of this section actually comes from
	      the older coding.txi file which now contains only Coding Style
	      guidelines instead of a mixture of both.	Also expanded the
	      portability guidelines and added a lot of missing discussion.
	      Corrected some mis-information which was recently added to these
	      discussions.
	    - Overhauled lighting.txi.	Cleaned up much of the Texinfo mark-up
	      and also rewrote sections of the document.  Replaced the
	      ASCII-art with real images.
	    - Removed the mipmap.txi and texcache.txi files which Martin
	      recently converted since they were excessively out of date,
	      meaningless, and confusing to the reader (since they didn't
	      reflect reality).
	    - Added missing Texinfo mark-up to viscull.txi.
	- Eric Sunshine syncrhonized the contributor lists on the Crystal
	  Space web page and the one in the Crystal Space manual
	  (intro/contrib.txi).	This involved adding contributors to each
	  document which appeared in only one or the other document, and in
	  some cases neither.
	- Eric Sunshine repaired the particle system so that it once again
	  works on NextStep.  Recent changes to the class hierarchy managed to
	  trigger a NextStep multiple-inheritance compiler bug which caused
	  particle systems to crash.
17-Jun-2000
	- Wouter Wijngaards changed quadtree so that the potentially confusing
	  up and down terms are gone (trees were apparently upside down in the
	  Netherlands).
	- Fundamental change in how the particle systems work.
	  A particle system now also inherits from csSprite and
	  is controlled like other sprites. So for the engine as
	  such a particle system behaves just like any other sprite.
	  In addition a particle system will now control its own
	  children. So sprites inside a particle system will not be
	  added to the entire world anymore but will be local to
	  the particle system. This will make optimizations (i.e.
	  DrawTriangleMesh) and visibility for the entire particle
	  system easier to manage. A particle system of 1000
	  particles would cause 1000 visibility checks in the engine.
	  Now the entire particle system can be handled with one check.
	- csSprite now expects a new 'parent' csObject which can currently
	  be either csWorld or csParticleSystem. This is an important
	  change which will require changes in potentially all applications
	  using CS. csSpriteTemplate::NewSprite() also has the new
	  parent parameter.
	- Norman Kramer added a new grid and slider (splitter handle) class
	  and a WindowToClient method for csWindow (for CSWS).
	  Norman also added this new csGrid dialog to cswstest.
	- Martin Geisse removed some warnings in dungeon plugin and
	  removed a non-useful feature. In addition he added some new
	  features.
16-Jun-2000
	- Improved the 'rain' console command in WalkTest so that it
	  adds rain to the entire current sector. There are now three
	  parameters: 'rain raindrop.png,100,2'. 100 is the number of
	  particles. Use more particles for bigger sectors. 2 is the
	  speed in meters per second.
	- Fixed a pretty severe memory leak in the c-buffer. This leak
	  could trigger in any use of the c-buffer but it was most
	  obvious when doing lighting or radiosity.
	- Fixed another bug with 'rain' command in sectors that have
	  no polygons.
	- Martin Geisse fixed a small compilation error in mdl2spr.
	- Martin also removed cleanup() call from Win32 system driver.
	- Martin did a minor bugfix to dungeon plugin.
	- Eric Sunshine fixed an error in MazeD.cfg.
	- Wouter Wijngaards did some fixes on csQuadTree again to make
	  it easier to grok by other compilers.
	  Wouter also added a rediculously fast TestRectangle routine
	  to csQuadTree :-)
	- Robert Bate updated the Mac project files.
15-Jun-2000
	- Cleaned up some debugging stuff for c-buffer from WalkTest.
	- Moved csOjbectStuffFactory::Initialize to csObjectStub.
	- Moved csPolyTreeObject::RemoveData to csObjectStub.
	- Added new classes csSphereStub, csSphereStubFactory, and
	  csSphereTreeObject. These will be used for adding bounding
	  spheres to a polygon tree. The implementation of these classes
	  is not finished though.
	- Moved glViewport() from OpenGL 3D renderer to the 2D canvas
	  drivers for OpenGL. The reason for this is that some specific
	  canvas (used for embedding for example) may want another
	  viewport.
	- Cleaned up debug_dump() and cleanup() junk from all apps.
	  WalkTest now does this on its own with code inside
	  #ifdef OS_UNIX. This isn't pretty but it is debugging stuff
	  anyway and at least it doesn't contaminate other apps that
	  don't need this.
	- Wouter Wijngaards added new csRainParticleSystem to simulate
	  rain.
	- Added 'rain' console command to create a new rain particle
	  system. Experimental right now. Doesn't work perfectly yet.
	- Martin Geisse added new features to dungeon plugin.
14-Jun-2000
	- Added new command 'db_frustum' to debug the CheckFrustum routine.
	  This function expects an integer parameter and will draw an outline
	  around the first 'num' polygons that are reached by CheckFrustum.
	- Changed csFrustum constructor to accept a 'const' parameter.
	- Did the same fix to csCBuffer::TestPolygon() as was done with
	  csCBuffer::InsertPolygon() a few days ago.
	- Fixed a small bug in CheckFrustum which could cause different
	  results in different runs. i.e. it made the result of CheckFrustum
	  a bit unpredictable in some cases.
	- FINALLY fixed a very severe bug in the c-buffer which really
	  triggered only in VERY rare cases indeed. This bug caused errors
	  in lighting, PVS, rendering (in some cases), radiosity, ... (you
	  name it :-)
	- Got the first patch from Travis McIntosh
	  <Travis.McIntosh@student.oc.edu>. He changed the dynamic lighting
	  system to work on lightmaps instead of polygons. This is the
	  first step towards getting dynamic lights working with curves
	  too.
	- Andrew Zabolotny added a new CS_ZBUF_FILLONLY mode for
	  DrawPolygon() to be able to draw non-textured polygons with
	  Z-Fill mode. The hardware guys still need to implement it.
	- Norman Kramer fixed a warning about unused parameter in
	  freefont.cpp.
	- Norman also cleaned up some of the changes that Samuel did to the
	  glide port.
	- Martin Geisse converted more docs to TexInfo.
	- Thomas Hieber fixed CSWS so that it compiles with MSVC again.
	  Thomas also updated some VC project files and removed a few
	  warnings in dungeon plugin and software renderer.
13-Jun-2000
	- Samuel Humphreys made the following changes:
	   - Changed names from dynamic textures to the more correct term
	     procedural textures.
	   - The iGraphics3D method CreateOffScreenRenderer is now gone. All
	     drivers are updated.
	   - The software drivers procedural textures are now more memory
	     efficient.
	   - By default the software procedural textures use the main
	     renderers texture manager, which makes it more consistent
	     with the glide and back buffer opengl implementations. Within
	     this mode the engine can render to the texture.
	   - The CS_TEXTURE_DYNAMIC_SHARE_HINT is now gone. In its place is a
	     new hint CS_TEXTURE_PROC_ALONE. When this flag is selected the
	     software procedural textures run internally at 8bit, they share
	     and utilise their own 8bit texture manager. (Before each
	     procedural texture had its own texture manager and cache..
	     this is no longer the case :). The engine cannot render to the
	     texture in this mode.
	   - The iTextureHandle->TextureDynamicSyncPalette is now gone. This
	     is no longer needed, and makes the interface more consistent
	     across implementations. In its place is ProcTextureSync (),
	     which currently is an empty method, but is in preparation for
	     fine grained control of mip-mapping. The software texture
	     manager now keeps a single linked list of all 8bit canvases
	     it services.
	   - Rewritten the OpenGL software procedural texture implementation.
	     So that it can be rendered to by the engine.
	   - Added a force32bitsoftware additional flag to opengl.cfg, which
	     performs better with mesa and 16bit displays with a voodoo2.
	     However, the problem with the transposition of red and
	     blue returns, this is probably a bug in Mesa3.3beta.
	   - This is how it now works: csOpenGLProcSoftware now wraps an
	     instance of csSoftProcTexture3D. This instance is created via
	     a new interface iSoftProcTexture. csSoftProcTexture3D creates
	     its own texture manager and canvas. Subsequent software
	     procedural textures share this texture manager. Each
	     procedural texture registers itself with the software texture
	     manager, and passes its handle back to the
	     csOpenglProcSoftware class which stores it in a vector along
	     with its opengl texture handle. The app writer registers and
	     prepares all textures with the opengl texture manager, and then
	     starts rendering. Each texture handle not already present
	     within the vector is registered and prepared with the software
	     texture manager and its handle stored with its opengl
	     counterpart in a vector. Each iGraphics3D call which utilises
	     a texture is intercepted and the opengl texture handle
	     swapped for its software counterpart. On Print (csRect) the
	     opengl texture is updated with the new procedural texture
	     state, and also its software counterpart.
	   - This change has required modifying the software drivers so
	     that the texture handle is not referred to within the
	     iPolygonTexture structure.
	   - The CS_TEXTURE_PROC_ALONE_HINT has the effect of disabling the
	     updating of the software texture managers versions of the
	     procedural textures, which improves performance but disallows
	     the engine from rendering to any procedural textures. For
	     this mode to operate all textures need to possess this flag
	     otherwise it'll revert to the slower mode.
	   - Fixed the colours on the opengl back buffer implementation.
	     Voodoo2 owners now need Mesa beta3.3 from cvs for this to work.
	     Unfortunately glCopySubTexImage2D is now broken in cvs so I
	     cant implement this optimisation. The texture probably still
	     renders inverted, it does on the Voodoo2. I dont think there
	     is an opengl trick to reinvert the texture, but I could be
	     wrong. Possible solutions are to intercept every draw call
	     and invert these or to copy over from the framebuffer
	     to the texture line by line. The latter way is going to be
	     *slow*, the former would involve modifying transformation
	     matrices (i.e.  rotating by 180 degrees the world to camera
	     matrix about the lookat vector) within the driver and
	     inverting all vertices which are in screen co-ordinates.
	     I wait for a better suggestion :).
	   - Lastly Ive destroyed the performance of the opengl procedural
	     textures, oops, need to investigate this :( Used to get about
	     70fps with the astext texture alone, this is now down to 10ish
	     with software textures. This might be Mesa3.3beta.
	   - dtsimple is updated to demonstrate how to do things with the
	     cleaner, more consistent interface.
	   - Added new constructor for csImageMemory.
	   - Fixed typo in memdbg.sh.
	- Added csPoly2D::Random() to generate a random convex polygon
	  (triangles only right now). This is going to be used for
	  debugging the c-buffer.
	- Cleaned up all compressed vertex/normal/texel stuff in csSprite3D.
	  This cleans up sprite code considerably. If this funcationality
	  needs to go back we'll have to implement it again in a cleaner
	  way.
	- Added csCBuffer::TestPoint() to test a single point in the
	  c-buffer.
	- Fixed LOD for 3D sprites. Looks as ugly as before but at least
	  it works again :-)
	- Wouter Wijngaards did some changes on csQuadTree again.
	  Now uses a more transparent storage ordering. Untested code,
	  but functionality for full culling should be present. Print()
	  method should work now (for debug). Perhaps I have removed
	  K. Robert Bate's mac port fix. But that fix provably breaks theu
	  VC port.... Anyway, perhaps I should look up the correct syntax
	  somewhere?
	- Andrew Zabolotny did the following changes:
	    - Fixed my fix regarding Eric's fix regarding halos yet again :)
	      2*SRC lighting did not work for halos.
	    - Fixed csFrustum::Classify(). Now it seems to work okay.
	    - Removed delaying of draw operations in CSWS. From now
	      on graphics pipeline always draws at the time the draw
	      routine is called. This both reduces memory usage by CSWS
	      programs (by ~500K) and removes the limit on the
	      number of graphics primitives that can be painted in one frame
	      (this was seen as uncomplete redraws when loading complex 3D
	      models in MazeD). Also it should be a little faster now.
	    - Fixed an old-standing bug that caused wrong window resizes
	      when switching MazeD screen resolution.
	- Andrew also updated the dimensions of the player in WalkTest
	  to be more realistic.
	- Frank O' Connor fixed a VerticesAreCompressed() call which Jorrit
	  forgot to remove in MazeD.
	- Frank also updated some of the VC project files.
	- Frank fixed a bunch of redefinition errors caused by defaults
	  in both the header and implementation (from Samuels large patch),
	  and removed the cases that resulted in the use of the
	  GL_UNSIGNED_SHORT_5_6_5. This is undefined on win32 GL.
12-Jun-2000
	- Thomas Hieber added basic support for WC3 (WorldCraft) file
	  format to Map2CS.
	- Robert Bate made a few fixes to csQuadtree so that it will
	  compile on Macintosh. Robert also added 'alloca.h' include
	  to cssys/mac/malloc.h.
	- Robert updated the Mac project files.
	- Frank O' Connor updated the VC project files for the dungeon
	  plugin changes that Martin did.
10-Jun-2000
	- Started a reasonably big redesign of the dynamic object system.
	  csObjectStub and csPolyTreeObject don't care about polygons
	  anymore. They are now simply objects and stubs that can be placed
	  in an octree (bsp tree). Specific subclasses (csPolygonStub
	  and csDetailedPolyTreeObject for example) can add the functionality
	  needed for splitting polygons for a bounding box of a sprite.
	  This allows easier and lighter versions of those classes as well
	  which don't split polygons but only store the nods where they
	  are visible.
	- 3D sprites now use the new design. 2D sprites haven't been
	  updated yet so they are still not visible with c-buffer enabled.
	  There is also a pure virtual function call at exit right now which
	  needs to be solved.
	- New db_dumpstubs console command to dump the stubs of the current
	  octree and the last added sprite to the world.
	- Fixed bug in BSP traversal with polygon stubs. 3D sprites could
	  sometimes disappear because of this bug.
	- Added csCBuffer::GfxDump() to debug the c-buffer.
	- New db_cbuffer console command to debug the c-buffer contents.
	  It will show the c-buffer online (all empty spans will be blue and
	  a small red line will be put in front of every completely full line).
	- Fixed a serious bug in the c-buffer. This bug could cause some
	  polygons to be span converted completely wrong in the c-buffer.
	  This could an occasional error in rendering (rather rare) and is
	  probably also the reason for various lighting errors using
	  the c-buffer cube (enabled yesterday) and visibility errors with
	  PVS.
	- Martin Geisse committed a huge update to the dungeon plugin.
9-Jun-2000
	- Moved a lot of PVS algorithm code into csPVSAlgo. That cleans
	  up csOctree a little.
	- Created new db_osolid debug command. This command will create
	  things for all solid space boundaries in an octree node.
	- Implemented bbox/octree visibility culling for 2D sprites. This
	  is probably a bit overkill (maybe we should only cull groups
	  like particle systems instead) but it will fix the bug that
	  2D sprites are not visible with c-buffer enabled.
	- Switched to C-buffer cube for lighting. This improves lighting
	  speed for dmburg from 30 seconds to about 8 seconds and it
	  seems to work reasonably well. This also improves speed of dynamic
	  lighting with about the same factor. Radiosity will also improve
	  by this.
	- Thomas Hieber fixed some of the VC project files and removed a
	  warning in the metaballs plugin.
8-Jun-2000
	- In an effort to completly fix PVS and make sure that everything is
	  ok I started adding extensive comments everywhere.
	- Changed the eight frustums in PVS to only one. This is more
	  efficient because we only need to clip the occluder polygon once
	  in that case.
	- Further work on csQuadtree from Wouter Wijngaards.
	- Wouter also made csBox2::Intersect() a const routine.
	- Did a very significant bug fix in PVS. This seems to improve
	  quality ENOURMOUSLY. It also results in a few errors but I'll have
	  to debug these separately. This looks very promising indeed.
	- Fix for OpenGL 8 bit mode and palette from Thomas Krug
	  <thomas.krug@assix.de>.
	- Thomas Hieber fixed csQuadtree to make it compile on VC again.
	  MSVC was complaining about the various function pointer operators.
7-Jun-2000
	- Paul Garceau added RMDIR equivalent to mingw.mak for cross platform
	  compatibility.
	- Gary Haussmann added support for RGBA (transparent meshes) to
	  DrawTriangleMesh.
	- Fixed a serious bug in csPoly3D::CutToPlane(). It was completely
	  messed up.
	- Fixed a potential bug in PVS. Some of the routines didn't clear
	  the polygon as they should.
	- Fixed a bug in the frustum calculation of PVS. The planes were
	  computed completely wrong.
	- Restored body dimensions and disabled radiosity. The body
	  dimensions were changed to make flarge look more natural. But it
	  is flarge that should be fixed.
	- Made csloader more robust. It now detects planes which are badly
	  specified.
	- Wouter Wijngaards reimplemented the quadtree. It is likely
	  that this is going to be used for the PVS as well.
	- Fixed another bug in PVS.
	- Did a new optimization for PVS. If all children of a node are
	  not visible then the node itself will not be visible as well.
	- Wouter Wijngaards further worked on the new csQuadTree code.
6-Jun-2000
	- Fixed OpenGL GLX driver (2D driver for OpenGL/X Windows).
	  It was trying to find a visual with AUX buffers.
	- Wouter Wijngaards fixed a bad nested if construct in
	  libs/csengine/polygon/polytext.cpp that could cause compile
	  errors in some cases.
	- Wouter did some further improvements on radiosity.
	- Added csPoly3D::CutToPlane() to cut a polygon with a plane
	  and only keep the front side.
	- Added csPlane3::Set() to initialize a plane given three vectors.
	- Some work on PVS again. Tried to fix a serious bug with shadow
	  projection. Not sure that I actually fixed it. Will have to do
	  some more tests.
5-Jun-2000
	- Added a few const methods to csPoly2D as well.
	- Added a speed improvement to PVS. Before considering an
	  occluder (octree node) and the contents of that occluder we
	  first cast a shadow from that occluder on the plane. If the
	  shadow is non-existant (i.e. the plane is too far away from the
	  node) then the node will not be considered as a potential
	  occluder. If the shadow does exist then CS will also first test
	  it against the c-buffer on the plane to see if that part of
	  the c-buffer still contains unshadowed parts. If not then it
	  makes no sense to consider this occluder either.
	- Robert Bate updated the Mac project files and changed
	  max_texture_size from int to GLint so things will compile with CW.
4-Jun-2000
	- Fixed serious bug with csPoly2D::Intersect() and csPoly2D::
	  ClipPlane() that could cause clipping errors in some cases.
	  This bug probably caused the bugs in the solid 2D BSP tree
	  that I never managed to find in the past.
	- Did an optimization reported to me by Norman Kramer with
	  regards to backface culling polygons. This happens throughout
	  CS and should increase performance a tiny bit (maybe not
	  noticable).
	- Removed a few unneeded methods in csPolyPlane. These methods
	  are only shortcuts to csPlane3 and are a little confusing
	  to have. Removed csPolyPlane::VisibleFromPoint(),
	  csPolyPlane::Classify() and csPolyPlane::Distance().
	- Concluded implementation of csPoly2D::ExtendConvex().
	- Further work on adjacent polygon merging for PVS. Not
	  finished.
	- Samuel Humphreys has been busy with the opengl drivers:
	    - Rewrote the ogl backbuffer dynamic texture implementation, it now
	      inherits from csGraphics3DOGLCommon and implements a dummy
	      iGraphics2D which transforms vertex info to lower bottom left
	      subregion of back buffer, and reports correctly width and height
	      information. This has required splitting the old ogl_g3d.* into
	      ogl_g3dcom.* and ogl_g3d.* Also two new private functions are
	      added SharedInitialize and SharedOpen which have the same
	      functionality as those in the software drivers.
	      The engine now renders to backbuffer textures, but they are
	      still inverted and have corrupt colour information.
	    - Added verbose visual information reporting to glx. Now reports
	      about auxiliary buffers and properly fills in pfmt.
	    - The ogl texture manager now detects and deals with maximum
	      texture constraints i.e. my voodoo2's 256x256 :)
	    - Removed old software dynamic texture implementation.
	    - Small fixes for canvas/common & dtsimple.
	- Wouter Wijngaards contributed newest radiosity version. Works
	  for portal levels. Now source patch size can be specified, say at
	  16x16 lumels. It allows radiosity to work in 16x16 lightmapsize
	  mode. Default is 2x2 lumels, but cryst.cfg has a 16x16 lumels.
	  Note that the destination patch size is still 1x1 lumel, thus
	  shadows are perfect, and lightmaps smooth.
	- Gary Haussmann added a line to bin/unixconf.sh to compile on
	  Linux/ia-64 platform.	 Currently maps the ia64 to "PROC = UNKNOWN".
3-Jun-2000
	- Reworked the hashmap iterators. They didn't work that well in
	  all circumstances.
	- Added new csPolygonEdges class that takes a list of polygons
	  and creates a set of indexed edges.
	- Added 'const' to two csPolyIndexed methods.
	- Split octree.cpp into octree.cpp and pvs.cpp.
	- Added csPoly2D::ClipPlane() to clip a 2D polygon to a 2D
	  plane (i.e. line) and return the right side of that polygon.
	- Added csPoly2D::ExtendConvex() to extend a convex polygon
	  with another polygon while keeping the resulting polygon convex
	  again. This function is not fully implemented yet.
	- Started work on optimization for PVS that will try to merge
	  adjacent convex polygons into bigger occluders. Not finished
	  yet.
	- Burton Radonsxi commented out all traces of Unix in the allegro
	  driver and added in the "main" symbol defragilator.
2-Jun-2000
	- Samuel Humphreys added some further options to dtsimple and fixed
	  cleaning up. Dynamic textures clean up after themselves properly now.
	- Samuel also did some changes which gets the metaballs texture
	  working.  Mainly to do with many iGraphics3D refering to one
	  iGraphics2D
	    - The engine now keys of iGraphics3D rather than iGraphics2D,
	      to determine whether it needs to swap states.
	    - Metaball plugin now queries iGraphics3D for width and height of
	      context.
	    - Opengl: Converted back buffer dynamic texture vertex co-ordinates
	      to render to the upper left subregion of the backbuffer.
	- Samuel added some keys in dtsimple so that you can play with
	  the warp transformation on the fly.
	    - ',' & '.' vary the x component of the before vector.
	    - 'b' & 'n' vary the x component of the after vector.
	    - 'v' flips the transformation matrix on the x-axis.
	    The value of these parameters are reported on screen on the LHS.
	    Added a frame around the portal to make things easier to see.
	- Gary Haussmann added a workaround to allow Mac users to see text;
	  apparently the current Mac drivers do not support a pure GL_ALPHA
	  texture, so for the OS_MACOS platform we use GL_LUMENENCE textures
	  instead.  This means that text is not shaped (all letters are on
	  a black background instead of showing the picture behind them) but
	  at least you can see the text!
	- Made almost all variables in csCamera private and added some
	  accessor functions.
	- Made csCamera::SetFOV() virtual and override it in
	  csRenderView::SetFOV() so that we can calculate the angle of the
	  FOV in degrees there. This is needed for the terrain engine.
	- Use the new angle for FOV in terrain engine.
	- Fixed terrain engine so that the correct forward facing vector
	  is used.
	- Fixed terrain engine so that it will run correctly on software
	  renderer. This will make the OpenGL version slower so this is
	  a temporary fix until we implement a better solution.
	- Eric Sunshine fixed the CS_ASSERT() macro so that it now works as
	  expected; that is, it "asserts" that some condition is true.
	  Previously, the logical sense of the conditional test was reversed.
	- Eric Sunshine enhanced CS_ASSERT() so that it now prints a useful
	  error message before breaking into the debugger or crashing the
	  application, instead of dying silently.
	- Added csCamera::GetDefaultInvFOV() too. Fixed MazeD and csgame
	  for the csCamera changes.
	- Changed csPolygon3D::Covers() to csPolygon3D::Overlaps() as
	  this is actually what the function is calculating (and needs
	  to calculate). Suggested by Norman Kramer.
	- Added new csHashMap class to csutil. This is the first version of
	  a new hashtable class that can be used for several things.
	  This is untested code right now.
	- Fixed a bug in the iterator code of the new csHashMap class.
	- Norman Kramer changed config for Glide to access Glide section
	  instead of Glide2x.
	- Split octree.h into octree.h and pvs.h. Was getting a bit big.
	- Fixed bug 106203 on SF. Test for coplanar polygons at startup
	  was wrong. Should be ok now.
	- Eric Sunshine fixed a crasher in csSystemDriver::Initialize() where
	  it would try to dereference the null pointer when loading plugins.
	- David Durant removed myapp functions in WalkTest and replaced them
	  by chopping up several functions into finer details and making
	  them virtual.
	- Alex Pfaffe now clips blocks in terrain engine as needed. This
	  speeds up terrain considerably for OpenGL (still not fully
	  optimal but it is a lot better already).
	- Alex also added top level visibility info for bintree.
1-Jun-2000
	- Experiment with new octree generation method. Instead of only
	  favoring a center with few splits I also try to favor centers which
	  cause may polygons to fall exactly on the boundaries. This
	  could improve occlusion. However, this doesn't seem to improve
	  at all so it is disabled right now.
	- Samuel Humphreys did various updates to dtsimple. He added another
	  dynamic texture, this time with a portal. Unfortunately he hasn't
	  worked out the warp transform yet so the animation is disabled.
	- Samuel also did various fixes to some of the X 2D canvas drivers:
	  migrated the 'behave well under cantankerous window managers code'
	  into glx and linex. Also fixed a bug he introduced into metademo.
	- Alex Pfaffe added new terrain.zip for the new terrain engine
	  (with low-res textures).
	- Alex also fixed the terrain engine for software rendering and
	  reenabled fixed frustum clipping for Crystal Space.
	- Eric Sunshine eliminated several compilation warning in the terrain
	  library.
	- Eric Sunshine eliminated several compilation problems throughout the
	  project.
	- Eric Sunshine worked around a NextStep compiler shortcoming where it
	  failed to grok subclasses of csFrustumView::CleanupAction.
	- Eric Sunshine fixed a nasty bug where VFS was being created and
	  destroyed twice in applications which requested VFS explicitly with
	  RequestPlugin().  In addition to other problems caused by double
	  instantiation, this had the particularly undesirable effect of
	  creating and destroying VFS's global ArchiveCache twice, thus
	  resulting in a crash on some platforms.
	- Eric Sunshine fixed the 'clean' makefile target for Simple.
	- Robert Bate added rview.cpp to the Mac project files.
31-May-2000
	- Added a new allegro canvas driver from Burton Radonsxi
	  <loth@pacificcoast.net>.  This allegro driver is developed on Linux
	  and should work on Linux.  It will probably not replace dosalleg yet
	  since the new one depends on iunix.h.	 We're looking into that.
	- Paul Garceau did another change to mingw.mak to accomodate auto-gen
	  of include\volatile.h for Mingw.mak.
	- Patch from Andrew Zabolotny:
	    - Removed the unneeded VFS->IncRef in systemdriver::initialize.
	      This removes the "1 unreleased instances" error at cleanup.
	    - Fixed the vshell plugin (it was creating a second instance of
	      VFS although VFS plugin is written such that it allows just one
	      instance).
	    - Slightly improved csFlags class.	WARNING: The former Set(int)
	      method is renamed to SetAll(int) now, Set(int) has a different
	      meaning!
	    - Moved bool csPolygon3D::dont_draw and bool
	      csPolygon3D::delete_portal to csPolygon3D::flags.	 Another 8
	      byte win for csPolygon3D.
	    - Added macro CS_ASSERT for system-independent assertions.	It
	      will fire a debug breakpoint if the assertion fails (rather than
	      printing a error message which is useless in CS for many
	      platforms).
	    - There is also a DEBUG_BREAK macro (which is empty for non-debug
	      mode).  You can use it if you want to fire a debug breakpoint
	      under some complex conditions (for simple conditions you may use
	      CS_ASSERT).  Currently it is defined only for x86 processor.
	    - Found and fixed a bug (that maybe the one reported by Jorrit in
	      past) with VFS creating invalid archives.	 The problem was that
	      the contents of "lazy" array were simply appended to "dir" array
	      (after csArchive::Flush) while they should be InsertSort'ed.
	    - Removed csFrustum::Intersect and csFrustum::IntersectFull
	      methods.	Added instead csFrustum::Classify() which is faster
	      and less buggy.  There is still a bug somewhere but its already
	      better than the old one.
	    - Caught and fixed a bug in software halo drawer introduced by
	      Eric.
	    - Many other small changes I don't remember now.
	- Added csBox2 and csBox3::Contains() functions to test if some box
	  contains another one.
	- Fixed PVS test with adjacent nodes.  It was not correctly testing if
	  one box contained the other.
	- Eric Sunshine fixed compilation errors on some platforms in
	  soft_txt.cpp where it was trying to implicitly cast void* to
	  RGBPixel*.
	- Eric Sunshine eliminated a compilatioin warning in polytext.cpp and
	  also made it work with the buggy OpenStep compiler.
	- Eric Sunshine eliminated more linkage problems caused by
	  inconsistent use of 'inline' in csterrain library.
	- Eric Sunshine fixed software renderer halos (again) for big-endian
	  32-bit NeXT machines following Andrew's change which broke them.
	- Eric Sunshine fixed out-of-date key names in several configuration
	  files (in data/config) following renaming which Andrew performed in
	  the source code.
	- Eric Sunshine fixed the 'clean' target for ndrvdem.
	- Eric Sunshine reverted Andrew's changes to csVector's Find() and
	  FindKey() since they broke other parts of the system.	 He changed
	  the functions so that they search the vector from tail to head
	  rather than head to tail.  Unfortunately, other parts of the system
	  (even Andrew's own code) rely on the head to tail order.  An example
	  of this is csSystemDriver::GetOptionCL(), which broke after Andrew's
	  change.
	- Martin Geisse fixed a VC5 specific compilation error.
	- Frank O'Connor updated VC project files for new MetaBall plugin
	  and some other stuff.
	- Norman Kramer fixed a bug in CreateOffScreenRenderer for Glide
	  that someone introduced, now compiles again.
30-May-2000
	- Alex Pfaffe did some minor fixes and cleanup in the terrain
	  engine. Alex also fixed a bug w.r.t. vertex reuse in buffers.
	- Fixed an inline problem in DDG terrain engine and a small other
	  fix.
	- Added a number of 'const' declarations to members in csPoly3D.
	- Fixed a number of warnings in the WalkTest changes from David
	  Durant.
	- Still show the warning when RAPID plugin cannot be loaded by
	  WalkTest but doesn't fail anymore.
	- Extended BSP tree traversal with an extra flag 'same_plane' so
	  that the BSP traversal routines know if all given polygons are
	  on the same plane or not. This could be used for optimizations.
	- Changed BSP building so that it better detects the case where
	  all polygons are coplanar and indicates that in the node.
	- Added csPolygon3D::IntersectRayPlane() to intersect a ray
	  with the plane of a polygon.
	- Wyatt Miler did a few fixes to terrain engine as well.
	- Debugging version of radiosity from Wouter Wijngaards.
	- Got a large patch from Samuel Humphreys with the following changes:
	    - Adds a couple of new walls, bots and another dynamic texture
	      to dtsimple. The new dynamic texture is rendered by the engine
	      as the bots point of view, or as a manually configurable view
	      from (0,0,0). Only works with the software drivers currently
	      in 8, 16 & 32 bit modes. The opengl software texture version
	      will not work...it will crash. The backbuffer opengl version
	      will not work, but won't crash. I think the glide version will
	      work, can't test this though.
	    - Added new flag to iTextureManager: CS_DYNAMIC_TEXTURE_SHARE_HINT.
	      See explanation there.
	    - Added many more keys to fiddle with in dtsimple.
	    - Added another software dynamic texture implementation to the
	      software drivers. This implementation shares the texture manager
	      with the parent context. This allows you to render to it with
	      textures that you have already registered with the parent
	      context i.e. a map view courtesy of the engine.
	    - In pursuit of this added functions to the software 3d drivers
	      which allows the initialisation and opening of the driver
	      according to another driver while sharing resources. The
	      sharing software dynamic texture utilises these functions.
	      This is also in preparation for the window manager...coming
	      soon!
	    - Pluggified metaballs and updated metademo and dtsimple as
	      appropriate.
	    - Added more parameters to vary to see what happens in metademo.
	    - Added a couple more functions to iSystem, which are implemented
	      in system.h/cpp, so shouldnt break anything. These are queuing
	      functions for two new windows messages.
	    - Added two new windows messages. ..ContextResize and
	      ..ContextClose.
	    - Updated the engine to deal with new messages
	    - 'Multiplexed' the engine. Added new function
	      csWorld->SetContext(iGraphics3D *g3d). This allows the engine
	      to swap states according to g3d. The new dynamic texture
	      demonstrates this.
	    - Fixed the annoying bug in the Xlib software drivers where on a
	      fresh Xserver session the window placement wouldn't behave for
	      the first three or four times. Borrowed the trick from gdk :).
	      Much more window manager friendly now...i.e. Crystal Space is
	      beginnning to behave politely!
	    - Migrated XLib changes into the line drivers.
	    - Added resizing to the line drivers.
	    - Got rid of a static file scope variable in the software
	      texture manager.
	    - Small makefile fixes for blocks and csauth.
	- Did a fix to dump(csPolygon3D*) for polygons with no name.
	- Eric Sunshine removed the Crystal Space-specific includes and macros
	  which had been added to ddgutil.cpp.	In general, we want to keep
	  the terrain files as free of CS stuff as possible so that the same
	  code works well for Alex in DDG.  The typical place to put CS code
	  is in ddg.h, and only within a __CRYSTAL_SPACE__ block.
	- Eric Sunshine eliminated several compilation errors and warnings in
	  the terrain library.
	- Fixed terrain engine so that it renders triangles again. Still
	  have to work a bit on speed and other issues.
	- 'Probably' fixed the solid space calculation for real now :-)
	- Now that solid space calculation works I fixed PVS to use it
	  in a safe way. Solid space for node boundaries is not reflexive.
	  Even if node A cannot see B it is still possible that B can see A.
	- Eric Sunshine worked around NextStep compiler multiple-inheritance
	  problem in dtsimple's Bot code where it called SetPosition() and
	  crashing the application.
	- For debugging: control precisely what parts of PVS are done
	  and what not.
	- Added 'bool cd' parameter to csCamera::Move and MoveWorld to
	  allow moving around the world without collision detection to
	  sector walls and vice versa. Portals are still checked though.
	- Fixed collision detection option in WalkTest so that it now
	  also works for STATBSP levels (i.e. you can walk through
	  things).
	- Fixed db_octree console command in WalkTest so that you can
	  actually use db_octree -1 to show the leaves.
	- Fixed a serious bug in PVS again. The solid boundary optimization
	  was in fact used completely wrong. Unfortunatelly this decreases
	  PVS quality a bit. PVS is still not completely right though.
	- Changed PVS building so that first pass is now the solid space
	  PVS pass and second pass is full PVS. This improves speed and
	  quality a bit.
	- Changed solid space point tester so that it now requires a
	  number of directions for which the solid space test succeeds.
	  This decreases the chance of an error cause by bad polygons
	  in the input data.
	- Extended dump of octree nodes with the values of the calculated
	  solid masks for the six directions.
	- Updates to Macintosh projects from Robert Bate.
	- Samuel Humphreys added some comments to the x2d.cpp code.
29-May-2000
	- Alex Pfaffe did some fixes on terrain engine. He also resynced
	  with DDG. Various bug fixes and optimizations.
	- Small fix to terrain engine (removal of bogus 'inline').
	- Found a serious bug in PVS (more exactly the calculation of solid
	  space between nodes). Note that I didn't fix the bug yet :-)
	- Added more debugging information when dumping the octree/bsp tree.
	- David Durant started reworking myapp functionality in WalkTest
	  using proper subclassing.
	- Eric Sunshine eliminated a compilation warning about multi-line '//'
	  comment in ddgbtree.cpp.
	- Eric Sunshine fixed several warnings throughout the project reported
	  by EGCS 1.1.2.
	- Eric Sunshine added a lot of missing 'const' qualifiers to csrect.
	- Eric Sunshine fixed the 'clean' target in mazed.mak.
28-May-2000
	- Changed the way csPolyTree::ClassifyPoint() works. Instead
	  of assuming space is open and testing six directions to prove
	  it is solid (all six directions must be solid) we now
	  assume space is solid if we find only one direction for
	  which space is solid.
	- Added csPoly3D::GetCenter() which computes the center of the
	  polygon and returns it.
	- Improved the solid space generator so that it is now much more
	  likely to say that a node boundary is solid. This should improve
	  PVS considerably.
	- Added patch from Michael Ewert on csphyzik library.  Here is his
	  comment: I made some good progress on csphysiks.  I've got collision
	  response working for articulated bodies quite nicely.	 This is an
	  important milestone for me, and adds some very cool functionality.
	  One of the more common things that game developers get excited about
	  when talking about physics packages is realistic response of
	  characters to being shot or being hit with a 2x4, or other equally
	  pleaseant events :) Anyways, thats what I've got working now.	 I will
	  update documentation and add a decent test app sometime in the near (
	  or not so near ) future, so other people can actually use this stuff.
	- David Durant added myapp hook functionality.
27-May-2000
	- Worked a bit more on 'perftest'.
26-May-2000
	- Fixed bug in PVS building. The selection of the plane for the
	  c-buffer could fail with nodes that are close together.
	- Added csBox3::GetVisibleSides() to return all visible sides of
	  a box as seen from a point in space.
	- Added csIntersect3::BoxSegment() routine to test if a segment
	  intersects with a box. This routine will also return the
	  intersection point.
	- Greatly optimized csSector::HitBeam() so that it is now LOTS
	  faster. It now uses the octree node hierarchy to avoid traversing
	  nodes that the beam doesn't intersect with.
	- Added iPolygonMesh interface so that the engine can communicate
	  3D geometry to other plugins. This will be used by the collision
	  detection system plugin. iPolygonMesh is not implemented yet
	  though.
	- Added iCollider and iCollideSystem interfaces. iCollideSystem
	  is an SCF plugin that implements a particular collision
	  detection algorithm. Further work will be to make the current
	  RAPID CD system a plugin implementing this interface.
	- Added implementation for RAPID CD plugin (UNTESTED). This
	  should be our current implementation of RAPID CD.
	- WalkTest now loads the iCollideSystem plugin at startup.
	- Implemented csPluginCollider inside the engine which encapsulates
	  a collider using the plugin system. This is temporary until
	  the plugin CD system has been debugged. After that engine will
	  only work through plugins.
	- Did various cleanups on the include/i*.h files. Many files are
	  missing Doc++ comments and some were missing LGPL header.
	- Paul Garceau did some changes to terrain renderer to set default
	  for P-III to zero (for the SIMD code that is in the terrain engine).
	- Wouter Wijngaards did some further debugging on radiosity.
	- Created new 'perftest' application to test the performance
	  of a 3D renderer. This application will try various tests to
	  see how fast the 3D renderer is.
	- Eric Sunshine reverted Paul's change to ddgUtil::DetectSIMD() since
	  it broke Alex's DDG.	Re-implemented it in a fashion which should
	  work for everyone.
	- Eric Sunshine reverted Paul's change to the #includes of ddgutil.cpp
	  since they broke the terrain library for all other Windows compilers.
	  Reimplemented his change in a way which won't break other stuff.
	- Eric Sunshine reverted Paul's change to ddg.h since it unnecessarily
	  complicated the already complicated conditional compilation
	  controls.  Re-implemented Paul's change in a much simpler fashion
	  and also simplified the rest of the conditional compilation controls
	  at the same time.
	- Eric Sunshine reverted Paul's changes to the volatile.h generation
	  code in the makefiles for several reasons:
	    - He changed the semantic meaning of MAKE_VOLATILE_H, making it
	      less flexible, order dependent, and less robust.	That is, after
	      his change, one had to be very careful about the context in
	      which MAKE_VOLATILE_H was used, whereas previously no such
	      restriction applied.
	    - He added a large section of copy/paste code to mingw.mak which
	      unnecessarily increased maintenance costs and fragility.
	    - Most of the changes were simply unnecessary.  It appears that
	      much of the trouble was caused by a misplaced definition of $".
	  My fixes were twofold.  Fist I corrected the $" problem so that it
	  is in scope in the proper contexts.  Second, I further generalized
	  and abstracted the actual emission of volatile.h so that
	  platform-specific makefiles can intercede at all points of the
	  process, if necessary.  Having accomplished this, I added very
	  simple special-case code to mingw.mak to perform the transformations
	  on volatile.h which Paul required.  This allowed me to eliminate all
	  the copy/paste code which he had added while still retaining
	  flexibility.
	- Eric Sunshine updated documentation to reflect fact that WalkTest
	  now requires that new "rapid" plug-in exist at run-time.
	- Eric Sunshine finished the task of renaming "font renderer" to "font
	  server" by renaming all classes, files, variables, and interfaces.
	- Frank O'Connor did some fixes to MSVC project files and added new
	  RAPID plugin.
	- Frank also removed a few warnings in OpenGL dynamic texture
	  implementation.
25-May-2000
	- Moved initialization of 2D culler cube into CheckFrustum.
	  This fixes radiosity. As it was now it simply could not work
	  correctly because of this bug.
	- Fixed another bug in radiosity with handling of the light
	  frustum.
	- Extended csSector::HitBeam() with an extra parameter that returns
	  the intersection point with the polygon that is hit.
	- Added csOctree::BoxCanSeeOccludeeSuperSlow() function. This function
	  tests if two nodes can see each other. It is very very slow and
	  will actually NEVER return if the nodes cannot see each other.
	  So the only expected result of this function is 'true' or
	  else infinite loop. This function is for debugging only.
	- Fixed the huge room so that it no longer crashes (-huge option
	  for WalkTest).
	- Wouter Wijngaards fixed various other problems in radiosity
	  based on the fixes from Jorrit.
24-May-2000
	- Some changes to terrain engine from Alex Pfaffe.
	- Fixed another problem in octree building which could cause
	  differences in the octree on various problems. This is not really
	  a bug but I like to have the generated octree the same on all
	  platforms to easy debugging and make bugs more reproducable.
	- Received a patch from Samuel Humphreys for dynamic textures:
	    - Separates metademo into reusable chunks and cleans up some stuff.
	    - dtSimple now has two animated textures. The second is the
	      metaballs.
	    - Use F1 to toggle on/off first texture animation; F2 for other.
	    - INS/DEL/BS/HOME/END/TAB to control MetaBalls.
	- Eric Sunshine fixed a bug in the 'depend' target of csfont.mak and
	  freefont.mak which prevented dependencies from being computed.
	- Eric Sunshine performed phase one of the renamed of "font renderer"
	  to "font server".  This phase involved the physical rename of the
	  directory in the CS/plugins hiearchy as well as patching of the
	  makefiles.  (Still To-Do: Must rename font renderer to server in
	  source code, configuration files, etc.)
	- Eric Sunshine clarified documentation in user.mak.
23-May-2000
	- Fixed a small potential problem with the polygon Covers function.
	  It compared a float to 0 which seems to be a little system
	  dependent.  I made the test more robust.  The effect of this bug was
	  that the generated octree could be different on various platforms.
	- Wouter Wijngaards fixed a bug in radiosity.  Portals are traversed
	  now.	Slower, but looks great.  More array bound errors, though.
	  Perhaps the frustum code is buggy.  Radiosity can also handle
	  portals without lightmaps now.
	- More debugging on octree/PVS stuff.
	- Added a patch from Samuel Humphreys with the following changes for
	  dynamic textures.
	    - OpenGL renderer now employs software renderer through its SCF
	      interface rather than linking with it directly.
	    - Add a back buffer style implementation for opengl based on
	      Normans implementation.  However on my system, it runs at half
	      the speed as the software version, and it renders flipped in the
	      x-axis, I've tried lots of stuff to get it working properly, but
	      to no avail.  Need other people to have a go at this.  Also with
	      mesa and voodoo2 the texture shifts into the blue spectrum,
	      whereas it doesnt with software opengl...Im investigating this.
	    - Added further configuration stuff to opengl.cfg, so you can
	      choose dynamic texture implementation.  See comments there.
	    - Implemented some outstanding methods to the opengl driver:
	      SaveArea, RestoreArea
	    - Fixed bug in DrawPixmap, it now correctly renders sub region of
	      textures whose size has been modified.  This was highlighted by
	      cswstest.
	    - Modified glx2d.cpp so that it'll give a single buffer for CSWS.
	      An outstanding issue with paletted mode, i.e.  the glx drivers
	      will not work in paletted mode, but it wouldn't have done before
	      my modifications anyway....a todo!
	    - Small modification to csws so it requests a single buffer before
	      opening the graphics drivers.
	    - Change of signature to iGraphics3D->CreateOffScreenRenderer,
	      have attempted to update all drivers, but I may of missed
	      something.
	    - Promoted default implementation of
	      iGraphics2D::CreateOffScreenCanvas to csGraphics2D (as Eric
	      suggested), updated all other drivers too.
	    - oglglide now compiles again.
	- Eric Sunshine made the following changes to the recent Texinfo
	  conversions from Martin Geisse:
	    - Fixed quite a few warnings and errors reported by 'makeinfo'.
	    - Performed a much more thorough Texinfo conversion.
	    - Fixed all the formatting problems reported by TeX (mostly
	      involving overfull and underfull hbox's.
	    - Major overhaul of camera.txi, warping.txi, and texmap.txi so
	      that mathematical formulas and variables are correctly (and
	      nicely) typeset; especially when formatted with TeX.  This was a
	      big job, but it looks *very* nice, indeed.  :-)
	    - Removed appendix/resource.txi since the type of information it
	      presented was more-or-less the same as intro/resource.txi.  Also
	      much of it was extremely out-of-date.  However, I did add the
	      IRC reference to intro/resource.txi.
	    - Upgraded the documentation for mdl2spr.  Added a lot of missing
	      filler.
	    - Completely removed miscnote.txi since its contents were
	      incredibly out of date and mostly (if not entirely) meaningless
	      at this point in time.  The only thing I saved from this file
	      was the discussion of dynamic worlds and lighting which I placed
	      in a new file named dynworld.txi.
	    - Completely removed tcache.txi since it was 100% out-of-date and
	      inaccurate.  It no longer reflected reality.
	- Eric Sunshine eliminated compilation warning about */ appearing
	    outside of comment from many of the files which Samuel patched.
	- Eric Sunshine fixed a signed-vs-unsigned compilation warning in
	  the terrain library.
	- Eric Sunshine added a note to version.h instructing anyone updating
	  CS_VERSION and CS_RELEASE that they should also update
	  docs/texinfo/version.txi.
	- Frank O'Connor did the following changes:
	    - Added windows.h to csosdef.h
	    - Removed windows.h from other places.
	    - Removed scattered undef's that related to this file.
	    - Fix misc bugs resulting in this inclusion.
	    - Updated win32 opengl drivers with latest dynamic texture code.
	    - Misc fixes/cleanup.
	    - Initialize GfxPpl to null in CSWS. Prevents crash when a
	      video plugin is unavailable.
	    - Made GraphicsPipeline call G3D->FinishDraw before Print (in
	      CSWS). This allows the DDraw plugin to work correctly now.
	    - Fixes to VC project files.
22-May-2000
	- Added csPoly2D::GetSignedArea() and csPoly3D::GetSignedArea() to
	  calculate the signed area of a polygon.
	- Fixed another small bug in PVS building.
	- Added a new function to csFrustumView that is called for every
	  octree node that is visited.
	- Use CheckFrustum to optimize PVS building.  Added a QAD PVS that is
	  not correct but very fast to build.  It is not correct in the sense
	  that it will incorrectly mark nodes as invisible even if they are
	  visible.  But all nodes marked visible are SURE to be visible and
	  this is important.  This means that we can use the PVS in the first
	  place to debug the other PVS.	 The real PVS should never cull nodes
	  that are marked visible by the QAD PVS.  Later we can use this QAD
	  PVS to optimize building the real PVS because nodes marked visible
	  by the QAD PVS do not need to be tested.
	- Martin Geisse added Texinfo conversions for tcache.txi, texmap.txi,
	  and csws.txi.	 He also moved phyziks.txi into a new texinfo/libs
	  chapter.
	- Added Dumper::dump() for csOctree.
	- Norman Kramer adjusted vpath for oss.mak so that it compiles again.
21-May-2000
	- Performance optimizations to terrain engine from Alex Pfaffe.
	- Fixed big bug in PVS building which could cause significant
	  amounts of nodes NOT to be culled.
	- Eric Sunshine made the following changes to the terrain library.
	    - Fixed quite a few additional compilation warnings and errors,
	      some of which were introduced with Alex's latest changes; some
	      earlier.
	    - Ported to OpenStep by working around a compiler problem where it
	      generates unlinkable code when an inline method calls a second
	      inline method before the compiler has seen the second method.
	      Working around this problem is as simple as textually reordering
	      the file.
	- Eric Sunshine once again renamed instance variable Protocol to
	  NetProtocol in NSMGR to avoid name collision with Objective-C class
	  of same name.	 Apparently Thomas Riemer reverted this change after
	  the last time the patch was applied.
	- Eric Sunshine fixed a couple typographical errors in cvs.txi and
	  updated anatomy/chapter.txi.
	- Eric Sunshine made the following changes to the NSTP plugin and its
	  interfaces:
	    - Cleaned up the relationship between iNetCmd and csNetCmd.	 Many
	      places in the code made the potentially dangerous assumption
	      that iNetCmd was always implemented by csNetCmd.	This is no
	      longer the case.	Access to this type of object is now performed
	      via the iNetCmd interface exclusively except for actual creation
	      (at which time it is necessary to interact directly with
	      csNetCmd).
	    - Cleaned up ownership issues (to some extent).  Now invokes
	      IncRef() and DecRef() as appropriate.
	    - Added a lot of missing 'const' qualifiers.
	    - Published methods in the SCF interface for creating objects of
	      type iNetCmd.
	    - Fixed several instances where CONSTRUCT_IBASE() was not being
	      invoked, or not being invoked for all execution paths.
	    - Added CS_NETCMD_* variations to csNetCmd for all of the
	      represented types.  No longer makes dangerous assumptions about
	      when it is safe to access or free the string pointer 'sval'.
	    - Fixed memory leaks of strings and other objects.
	    - Now uses 'delete[]' where appropriate rather than 'delete'.
	    - Implemented all the missing cases of csNetCmd::Stringify().
	- Eric Sunshine made the following changes to the NSMGR plugin:
	    - Fixed it so that it is now completely self-contained.  No longer
	      directly accesses classes (such as csNetCmd) from the NSTP
	      plugin.  Now access to NSTP (and iNetCmd) is done strictly
	      through the published SCF interfaces (some of which I had to
	      augment in order to allow this type of proper abstraction).
	    - No longer makes the potentially dangerous assumption that
	      iNetCmd is always implemented by csNetCmd.
	    - Removed the special-case hack from the makefile which forcibly
	      linked NSTP object files into the NSMGR plugin (which was
	      required because NSMGR was incorrectly accessing NSTP objects
	      directly rather than through an SCF interface).
	    - Now access engine objects indirectly through their published SCF
	      interfaces iWorld and iSector rather than referencing them
	      directly via csWorld and csSector.
	    - Cleaned up ownership issues (to some extent).  Now invokes
	      IncRef() and DecRef() as appropriate.
	    - Fixed several instances where CONSTRUCT_IBASE() was not being
	      invoked.
	    - Fixed memory leaks of strings and other objects.
	    - Now uses 'delete[]' where appropriate rather than 'delete'.
	- Eric Sunshine fixed the csClear plugin so that it is now entirely
	  self-contained (linkage-wise) by patching the makefile to link the
	  plugin against all libraries which it references.
	- Eric Sunshine was finally able to remove the special-case NeXT-
	  specific makefile hack from scfreg.mak which was needed because some
	  plugins (specifically csclear and csnsmgr) were not self-contained.
	- Eric Sunshine patched bin/makefile.py so that it tries just a little
	  bit harder to keep the generated makefile under 80 columns.
	- Eric Sunshine performed the Texinfo conversion on the VFS
	  documentation and merged it into the CS manual.
	- Martin Geisse performed Texinfo conversions on camera.tex,
	  mdl2spr.txi, miscnote.tex, render.tex, resource.tex, sound.html,
	  and warping.tex.
19-May-2000
	- Alex Pfaffe did various changes to terrain engine again.
	- Various small changes to csTerrain to help Alex integrate his
	  engine again.
	- Frank O'Connor fixed Win32 release build.
	- Andrew Zabolotny added int8, uint8, int16, uint16, int32,
	  uint32 types. They are supposed to replace UShort, ULong and so
	  on in the future.
	- Fixed cstypes.h to remove the unportable #ifdef __32BIT__.
	- Some improvements to PVS statistics for debugging it better.
	- Changed csBox3::Adjacent() to return the side of the box that
	  it is adjacent with.
	- PVS now also works for adjacent nodes. If two nodes are adjacent
	  then the solid mask on the border will be checked.
	- Eric Sunshine eliminated some compilation warnings in the terrain
	  library.
	- Eric Sunshine added a brand new section to the detailed "anatomy"
	  portion of the documentation for the MacOS/X Server, OpenStep, and
	  NextStep ports describing how dynamic linking of plug-in modules
	  now emulates the model used by other platforms.
	- Eric Sunshine eliminated 'underfull hbox' warnings in the detailed
	  "anatomy" portion of the documentation for the BeOS port.
	- Eric Sunshine eliminated compilation warnings about */ used outside
	  of comment in the network manager source code.
18-May-2000
	- Frank O'Connor added __CRYSTAL_SPACE__ define to VC project file.
	- Another small terrain update from Alex Pfaffe.
	- Started work on multiple passes in PVS.
	- Small optimization on PVS building speed.
	- Added csBox3::ManhattanDistance.
	- Implemented first version of multi-pass PVS calculation.
	  It is not yet very useful though because quality isn't high
	  enough right now.
	- Eric Sunshine fixed many additional compilation warnings in the
	  terrain library; mostly reported by MSVC.
	- Eric Sunshine fixed many warnings throughout the project which were
	  reported by MSVC.
	- Eric Sunshine added YY_NEVER_INTERACTIVE to the Dungeon plugin in
	  order to resolve the isatty() warning under MSVC.
	- Eric Sunshine had to re-add some special case code to scfreg.mak in
	  order to allow all plugins to register correctly on NeXT.  In
	  particular, csclear and csnsmgr were having difficulty.
	- Wouter Wijngaards fixed an array bounds bug in radiosity.
	- Norman Kramer fixed a non-const with rvalue assignment.
	- Added csPoly3D::ComputePlane() and csPoly3D::ComputeNormal().
	- Further work on PVS solid boundary optimization. This optimization
	  seems to work very well. Quality of PVS improved considerably
	  (still not enough!).
17-May-2000
	- Thomas Riemer added scaffolding functions to allow loading world
	  into NetSpace world.
	- Paul Garceau updated jpgimage.cpp for Win32/GCC.
	- Added csPolygon3D::PointOnPolygon to test if a point is on a
	  polygon.
	- Added csBox3::GetSide() with corresponding BOX_SIDE_??? defines to
	  get the side of a box as a 2D box.
	- Added csBspNode/csOctreeNode::CountPolygons() that will be used to
	  gather statistics about the quality of the generated PVS.
	- Added and printed additional statistics gathering for the PVS.  You
	  can now see the percentage of polygons culled.
	- Did a few compile fixes on terrain engine.
	- Paul Garceau did a few additional fixes on terrain engine.
	- Reverted a few problematic changes from Paul Garceau (mk/user.mak
	  and terrain engine).
	- Wouter Wijngaards fixed the depend target of the terrain engine.
	- Eric Sunshine reverted more problematic changes and fixed errors or
	  potential problems which Paul Garceau introduced.
	- Changed a fix from Eric to octree.cpp to make it a bit more
	  readable.
	- Eric Sunshine changed the NeXT ports so that they utilize the
	  makefile's $(OUTDLL) facility to locate dynamic load libraries in a
	  subdirectory ("components") rather than polluting the root CS
	  directory with them.
	- Eric Sunshine made the following changes to the network interfaces,
	  socket driver, and network manager.
	    - Removed socket-specific functionality from inetdrv.h which was
	      added when NetSpace was introduced into the project and which
	      completely corrupted the abstract nature of the interface.
	    - Removed all the junk which was unnecessarily added to the socket
	      driver when NetSpace was introduced.
	    - Moved (almost) all of the platform-specific socket configuration
	      and select()-configuration information out of socket.cpp and
	      into platform-specific csosdef.h files where it belongs by
	      expanding the meaning of SYSDEF_SOCKETS.
	    - Added a new SYSDEF_SELECT to cssysdef.h which is used by
	      implementations to indicate that they require select() and the
	      FD_* file-descriptor macros.  Added appropriate configuration
	      information to platform-specific csosdefs.h files where
	      necessary.
	    - Added (potentially temporary) iNetworkSocket interface which
	      represents an abstract socket-based connection or listener.
	      This interface provides a clean way for the network manager to
	      deal with file-descriptor sets and select() without having to
	      corrupt the pure and abstract inetdrv.h.	I expect this
	      interface to disappear once the networking system is upgraded to
	      allow select()-style functionality in a completely generalized
	      fashion, however in the meantime, this provides a clean solution
	      to the problem of the network manager wanting to have inside
	      information about socket-driver specifics.
	    - Reworked Thomas Riemer's network manager just enough so that it
	      works via the new iNetworkSocket interface instead of relying
	      upon the corruption of inetdrv.h (which has been removed).
16-May-2000
	- Alex Pfaffe did some minor changes/cleanup to the terrain engine.
	- Removed a few warnings in terrain.cpp.
	- Added csOctree::ClassifyRectangle() that will be used for PVS
	  calculation.	This function calculates a 4x4 bitmap representing the
	  solid space in some rectangle.
	- At octree calculation time the solid masks are precalculated for
	  every node.  The octree cache format version has been bumped up so
	  that recalculation of the octree is automatic.
	- Modified db_octree command so that it will show all leaves
	  (disregarding depth) if -1 is given as an argument.
	- Added csPolygon3D::IntersectRayNoBackFace() which does the same as
	  csPolygon3D::IntersectRay() but without back-face culling.
	- Wouter Wijngaards made a small quality increase in radiosity.
	- Fixed csPolygonTree::ClassifyPoint().
	- Fixed solid mask calculation to make it more correct and
	  faster.
	- Made solid polygon iterator which is going to be used by PVS.
	- Disabled the new routine to calculate the solid mask because it is
	  too slow.  I need to make this faster.
	- Eric Sunshine and Jorrit performed repair work on the new terrain
	  library merge, bringing the makefile and source code into shape.
	  Eliminated compilation warnings and errors.
	- Eric Sunshine eliminated all the remaining build-time problems
	  with the new terrain library.
	    - Eliminated all the remaining compilation errors and warnings in
	      the new terrain library.	This mostly involved missing I/O
	      streams, lack of bool type (on some platforms), implicit
	      conversion from float to integer, etc.
	    - The terrain makefile now defines __CRYSTAL_SPACE__ when building
	      for Crystal Space.  Currently this define is used to control
	      whether or not cssysdef.h and cstypes.h are included.
	    - Enabled all the code in csengine/terrain.cpp which was protected
	      within DDG_FIXME blocks.
	    - Updated makefile so that Crystal Space applications once again
	      link against the terrain library.
	- Eric Sunshine worked around a problem with the NextStep compiler in
	  octree.cpp where it failed to correctly create an array of csPoly3D
	  objects.
	- Frank O'Connor did a small fix to ddgcolor.cpp as well.
	- Frank also update VC project files for csterr.
15-May-2000
	- Added const version of csPoly3D::operator[].
	- Added csPoly3D::SplitWithPlaneXYZ().
	- Implemented csPolygonTree::ClassifyPoint() and csBspTree/
	  csOctree::ClassifyPolygon. This functions respectively test a
	  point/polygon against the tree. The test returns wether or not
	  the object is in solid space.
	- Wouter Wijngaards added a temporary bugfix for radiosity. This
	  fix only avoids the bug but does not really solve it. It makes
	  radiosity (and lighting) a bit slower but at least it doesn't
	  crash anymore.
	- Eric Sunshine cobbled things back together just enough so that the
	  project can once again be built on Unix following phase one of
	  Alex's merge of the new terrain code.	 For now terrain functionality
	  is completely disabled.  For Windows, the project file maintainer
	  will probably need to adjust include paths in the csparser and
	  csengine projects to refer to libs/csterr.
	- Eric Sunshine eliminated compilation warnings in octree.cpp.
	- Eric Sunshine renamed the following files and fixed references to
	  them throughout the project:
	    def.h	 --> csdef.h
	    sysdef.h	 --> cssysdef.h
	    types.h	 --> cstypes.h
	    frustrum.h	 --> frustum.h
	    frustrum.cpp --> frustum.cpp
	- Eric Sunshine eliminated compilation warnings from csnsmgr.cpp.
	- Eric Sunshine eliminated compilation warnings from octree.cpp,
	  polytree.cpp and bsp.cpp.
	- Implemented new 'TEXTURE' keyword for upcoming terrain engine.
	  With this keyword you set the basename for all the textures
	  used by the terrain. The base should be something like
	  'MyTexture%d.jpg'. %d will be replaced with 0 to 127 for example.
	- Thomas Riemer added stubs for AddWorld and AddSector.
	- Frank O'Connor fixed a few files which were incorrectly modified
	  by Eric Sunshine for his large rename of some include files.
	  More in particular: many files in Blocks and CCTest were empty.
	- Frank did a few minor updates to the VC project files.
	- Norman Kramer added a missing cssysdef include to cspython/swig.
14-May-2000
	- Added csPoly3D::ClassifyXYZ() routines.
	- Started work on new optimization for PVS.
	- Eric Sunshine fixed rendering of fog by software renderer in 32-bit
	  mode on NeXT for both big- and little-endian.	 There were several
	  problems:
	    - Inconsistent interpretation of TOP8BITS_R8G8B8_USED.  When
	      Andrew first introduced TOP8BITS_R8G8B8_USED it was interpreted
	      as meaning that the display driver might _possibly_ use the high
	      byte of a 4-byte pixel value.  However, in some of his more
	      recent code, it was interpreted as meaning that the high byte
	      was _positively_ used.  As a consequence, DrawFogPolygon() chose
	      completely incorrect values for csScanSetup's FogR, FogG, and
	      FogB values on little-endian machines.
	    - Inconsistent interpretation of csScanSetup's FogR, FogG, and
	      FogB values.  In some cases, the fog scanline functions expected
	      these values to be normalized to 0x00RRGGBB (note that the high
	      byte is unused), but DrawFogPolygon() initialized these values
	      without normalizing them.	 Furthermore, even the scanline
	      functions were inconsistent in their expectation of these
	      values.  In particular, the calculation of 'fog_pix' neglected
	      to take normalization into account.
	    - Incorrect definition of PIXEL_PREPROC() and PIXEL_POSTPROC().
	      For instance, PIXEL_POSTPROC() was defined as "x << 8".  When
	      invoked with PIXEL_POSTPROC(r|g|b) this had the unfortunate
	      side-effect of only shifting the blue color rather than the
	      composite value, since it expanded to the equivalent of
	      (r|g|(b<<8)).  The correct definition should have been
	      "(x) << 8", which would expand to ((r|g|b)<<8) as desired.
	    - Signed rather than unsigned values in several places, including
	      the scanline routines as well as csScanSetup's RGB values.
	      During right-shift operations, this could result in unwanted
	      sign-extension.
	- Eric Sunshine fixed a bug in the software renderer's fog scanline
	  drawing routines where they failed to clamp the blue color to
	  0x000000ff when recomposing the 'destination' pixel.	(Note that the
	  red and green colors were correctly clamped to 0x00ff0000 and
	  0x0000ff00, respectively.)
	- Eric Sunshine fixed rendering of halos by software renderer in
	  32-bit mode on NeXT for big-endian machines.	There were several
	  problems:
	    - Overflow during computation of a halo color component, which led
	      to corrupt composite color.  The problem was that
	      csSoftHalo::Draw() was computing color values based upon color
	      masks using the formula "(int)(C * pfmt.mask + 0.5)" where C is
	      a floating point number.	On big-endian NeXT machines, where the
	      red mask is 0xff000000 this formula overflows (even in the
	      obvious case when C is 1.0).
	    - Inconsistent interpretation of csScanSetup's FogR, FogG, and
	      FogB values.  The halo scanline functions expected these values
	      to be normalized to 0x00RRGGBB (note that the high byte is
	      unused), but csSoftHalo::Draw() initialized these values without
	      normalizing them.
	    - Signed rather than unsigned values in several places, which
	      could have resulted in unwanted sign-extension.
	- Eric Sunshine fixed trilinear filtering in the software renderer for
	  32-bit big- and little-endian on NeXT.  The problem was that the
	  32-bit 'filt2' routines neglected to apply PIXEL_POSTPROC() to the
	  composed pixel value.
	- Thomas Riemer added lock functions to skeleton (iAuth).
	  Add CmdList - change NetProtocol variable to Protocol.
	- Paul Garceau did an update for Mingw/NT4/Win98.
	  user.mak commented to ignore PLUGINS reference.  PLUGINS are
	  determined by Mingw.mak, win32vc.mak, unix.mak, etc.	If you
	  require that PLUGINS be referenced in user.mak,  then
	  uncomment PLUGINS references in user.mak, etc.
	- Eric Sunshine reverted several of the files which Paul committed
	  since he forgot to commit several supporting files and also
	  accidentally blasted many useful default values and replaced them
	  with his own custom settings.
	- Eric Sunshine removed more obsolete CHK() and CHKB() references.
	- Big update of terrain engine from Alex Pfaffe. Currently broken
	  though.
13-May-2000
	- Did some fixes on PVS again. For the very first time PVS seems
	  to be doing what it is supposed to do: cull invisible nodes :-)
	  Quality of the PVS is still bad (too few invisible nodes) but
	  Wouter and me discussed various techniques to solve that.
	  Note that polygons are not yet included in PVS. This is only
	  the node -> node PVS part.
	- Added PVS optimization suggested by Wouter Wijngaards which
	  treats nodes that cannot see an occludee as completely solid.
	  This both makes PVS creation faster and increases the quality
	  of the PVS as well. This is still not the full set of quality
	  improvements that is planned.
	- Frank O'Connor changed main signature of mdl2spr for Win32/CSsys
	  compatibility.
	- Frank O'Connor did part 2 of the big MSVC/win32 overhaul.
	    - Split cspace into multiple smaller libs, more like the make
	      file system.
	    - Removed all unused libs from projects. Projects attempt
	      to link to things the explictly need only.
	    - New naming scheme for projects. Groups them by their function
		plg* = plugin
		lib* = libaray
		grp = project use for grouping only
		app = application
	    - Converted a few more apps they didn't have MSVC projects
	      built for them.
	- Norman Kramer fixed csview which Wouter accidently broke.
	- Paul Garceay modified ddraw.mak to once again allow for all
	  required source files in plugins/video/canvas/common.
	  Extended vpath to include plugins/video/canvas/common.
12-May-2000
	- Michael Dale Long did some bug fixes to csConsole. No longer has
	  crashes when editing history items.
	- Added 'freezepvs' command to freeze the PVS at some position. This
	  is useful to debug the PVS. After freezing the PVS you can walk
	  around and examine what is visible and what not.
	- Added 'pvsonly' command so that you can force visibility culling
	  to operate ONLY with the PVS and not use any other culling
	  mechanisms (like c-buffer).
	- Worked a bit more on PVS. Still not working :-)
	- Made PVS caching more robust.
	- Updated the 'help' in WalkTest so that commands are grouped
	  logically.
	- Andrew Zabolotny fixed the Software renderer makefile that
	  Paul broke a little.
	- Eric Sunshine fixed a bug in iNetCmd.	 The Push() method was not
	  declared abstract.
	- Eric Sunshine added a very ugly patch to the csnsmgr makefile to
	  allow it to link.  For some reason, this plugin is including files
	  from the nstp plugin and uses its classes directly instead of
	  going through the SCF interface.
	- Eric Sunshine fixed a bug in the 'depend' target of for BeOS OpenGL.
	- Andrew Zabolotny added a new CSWS component: notebook control
	  AKA "property shit". Only used in cswstest for now. Going to be
	  used in MazeD.
	- Removed all CHK and CHKB from the code. That memory debugger
	  is now obsolete.
	- Fixed bug in OpenGL makefile. The inclusion of the software
	  renderer caused problems if the CS version of NASM was present.
	  The NASM asm files were not included in the OpenGL makefile
	  causing undefined symbols in the included software renderer.
	- Fixed bug in PVS. Correctly does backface culling now.
	- ProjectAxisPlane() in csgeom now returns a boolean to indicate
	  if the projection was possible.
	- Eric Sunshine eliminated a compilation warning in csnotebk.cpp.
	- Eric Sunshine moved declaration and definition of cspExtDialog
	  outside of the function within which it was defined since the BeOS
	  compiler was generating unlinkable code.
	- Eric Sunshine added dynamic-texture support to BeOS software and
	  OpenGL 2D drivers.
	- Eric Sunshine modified the BeOS system driver so that it now
	  automatically changes the current working directory to path the
	  which contains the executable.  This allows CS applications to find
	  their resources even when launched via double-click from the Tracker
	  application.
	- Wouter Wijngaards added SetLastFrustumId(int) public routine
	  to csLightMap. He needs it for radiosity.
	- Wouter cleaned up the radiosity code a lot and removed various
	  unused routines. Should be somewhat faster. Ambient and
	  priority are calculated better (better formulas). Extra fixes
	  for bound check overflow.
11-May-2000
	- Michael Dale Long made the following changes:
	    - Added a CHK_DECREF() macro to cctest.h that checks if an
	      object is not NULL and performs a DecRef() on it if so.
	      Should be used only used when it is _possible_ for a SCF
	      interface to be NULL (i.e. aborted init).
	    - Rewrote iPawn interface (include/csclear/ipawn.h). I plan
	      to begin implementing it soon.
	- Frank O'Connor added dtSimple to application build list.
	- Frank updated VC project files for dynamic textures (OpenGL).
	- Paul Garceau did a modification for software renderer makefile.
	  Changed vpath to consider plugins/video/renderer/common
	  as well as plugins/video/renderer/software.
	- Finished caching of PVS. Also added dummy PVS calculator that
	  is used for now and just creates a PVS that says that everything
	  is visible :-)
	- Added quick and dirty memory debugger in WalkTest that's a bit
	  easier to setup than the one from Andrew and also works immediatelly
	  in a debugger. Just go to the end of WalkTest and change #if 1
	  to #if 0. It catches memory overwrites, double deletes, and
	  allocs with 0 bytes.
	  It will also catch mismatches in new[]/delete[] and new/delete.
	- Fixed a bug in radiosity. It was calling 'delete' on an array
	  allocated with 'new[]'.
	- Changed calloc/free in polytext.h (csCoverageMatrix) to
	  new[]/delete[] in order to help debugging it (memory debugger
	  only works on C++ memory allocators).
	- Added 'pvs' command to toggle pvs usage (note that PVS is still
	  not working properly).
	- Norman Kramer added a method to iGraphics2D to set the font
	  size.
	- Norman changed CSWS so that components can now draw with their
	  own fontsize.
	- Norman merged the two glide2 and glide3 renderers into one
	  glide renderer.
	- Norman fixed a bug in the freefont plugin. The font was closed
	  twice at closing time.
	- Wouter almost fixed a bug in radiosity: Now, the bug is almost fixed.
	  And I know why it happens.  The light frustum given to GetCoverage
	  must be clipped to responsability rect, and this was not done yet.
	  csPolyTexture::GetLightmapBounds will need some small change to work
	  with this (the frustum_id check / code must go back to csPolygon I
	  think.)
10-May-2000
	- Michael Dale Long did a major update for CrystalClear.  A lot of
	  work has been done on iActor.	 The main thing was adding multiple
	  velocity support.  A lot of other bugfixes and other things I can't
	  remember right now, too.
	- Frank O'Connor updated VC project files for new dynamic texture
	  system.
	- Modified makefile system to add an extra 'dyn' or 'stat' in the
	  'out' directory to differentiate between dynamic or static linking.
	- Fixed an internal compiler error for gcc 2.7.2 in the Crystal Clear
	  code.
	- Andrew Zabolotny did a few code style fixes for csfont plugin and
	  misc fixes for OS/2 DIVE canvas.
	- Eric Sunshine added dynamic-texture support to the NeXT ports.  He
	  also removed unused junk from dyntex2d.
	- Samuel Humphreys sent me a new patch to clean up his dynamic
	  textures and also implement them for OpenGL.
	- Eric Sunshine eliminated symbolic naming conflict in several of the
	  NetSpace sources where a variable named "Protocol" conflicted with
	  the Objective-C class of same name.
	- Eric Sunshine fixed a bug in csFont where it incorrectly computed
	  FontCount (as one too large).	 This could have been responsible for
	  the crasher in OpenGL AddFont().
	- Norman Kramer removed the explicit IncRef of VFS that caused the
	  warning about unreleased instance of kernel.vfs.
	- Eric Sunshine overhauled the approach used for dynamic (plug-in)
	  linking on MacOS/X Server, OpenStep, and NextStep ports.
	    - These ports now do a fairly good job of emulating dynamic
	      linking as it is done on most other platforms in which symbols
	      within a plug-in are private unless explicitly exported.
	      Historically, with the NeXT ports, all symbols were
	      automatically public.  This naturally leads to severe symbolic
	      conflicts since many plug-ins link with the same static
	      libraries.  As a consequence, in the past I had to devise
	      elaborate mechanisms to work around these conflicts.
	    - The NextStep port emulates private plug-in symbols by actually
	      stripping all public (resolved) symbols, except for the SCF
	      GetClassTable() hook, from the plug-in module at build time.
	      This technique provides fairly decent insurance against symbolic
	      conflicts at plug-in load time even when multiple plug-ins have
	      linked against the same static libraries.	 The only big drawback
	      to this approach is that it makes symbolic debugging impossible.
	      I had tried the alternate approach of parsing the error stream
	      from RLD and calling rld_forget_symbol() for symbolic conflicts,
	      and then attempting a reload, but the RLD run-time is
	      sufficiently buggy that it would actually crash within
	      rld_forget_symbol().
	    - The MacOS/X Server and OpenStep ports emulate private plug-in
	      symbols by taking advantage of DYLD's NSLinkEditErrorHandlers
	      which allows the loader to ignore duplicate symbols at load
	      time, thus there is no need to strip them away at build time.
	      This approach has the advantage that symbolic debugging
	      capability is retained.  I had attempted to use the same
	      approach as I used for the NextStep port (that of stripping
	      aways symbols at build time), but discovered that the
	      Objective-C run-time is more picky in OpenStep than NextStep.
	      In particular, it couldn't deal with the fact that symbolic
	      references to Objective-C classes defined locally in the plug-in
	      had been stripped away.  It would be possible to manually
	      instruct the 'strip' utility to retain certain symbols, but
	      doing so would have introduced a potential maintanence headache
	      as future changes are made to the code.
	    - Eliminated all the special-case hacks which had been placed in
	      various applications to force symbolic references in the
	      executable itself so that the symbols would be available for
	      dynamically loaded plug-in modules.  Since plug-in modules now
	      link with all the libraries which they, themselves, require, the
	      application no longer needs to do so.
	    - Eliminated special-case makefile hacks which forced applications
	      to link with extra libraries required by plug-in modules which
	      they might end up loading.  In particular, scfreg makefile was
	      considerably simplified.
	- Frank O'Connor switched dtsimple to use cryst.cfg.
	- Robert Bate updated the Mac port and project files again.
	  He fixed up access paths and runtime libraries and added a
	  shared library target.
	  He also moved projects that make plugins to the new
	  MakePlugins.mcp project.
	- Norman Kramer added dynamic texture rendering support for Glide.
	  His support does not use the software renderer but native hardware
	  rendering.
	- Frank O'Connor added a check to the OpenGL texture manager before
	  calling DecRef in destructor.
9-May-2000
	- -revis commandline option will now work to force recalculation
	  of the octree. -norevis will not work for this as CS cannot
	  live with an octree that is invalid. If the octree is found
	  not to match with the level it HAS to be recalculated.
	  This is different with the PVS. When we cache this then
	  -norevis will be useful there.
	- Frank O'Connor changed directory and naming scheme of normans
	  font plugins to maintain consistency among the new plugins.
	- Frank also fixed bug in blocks where current menu item was not
	  visible on win32. This was because of improper intialization.
	- Norman Kramer added FontRender entries to all the config files.
	- Norman also added FUNC_ID for fontrenderer to isystem.h.
	- Norman disabled freetype engine plugin to prevent default
	  compilation, user should enable it itself.
	- Norman added missing methods for dynamic textures (still dummies).
	- Thomas Riemer did a minor fix for initialization of name for
	  command for NetSpace.
	- Frank O'Connor did some fixes with regards to the new font
	  renderer plugin.
	- Norman Kramer changed program name to avoid naming conflicts
	  between rule and program name on unix systems.
	- Norman fixed gfxtest to change %ld to %d.  Eric Sunshine then fixed
	  this fix to be more portable regardless of how size_t is defined on
	  any particular platform.
	- Norman removed various unused variables.
	- Norman Kramer fixed mixup of glxclean and glx2dclean rules in
	  makefile.
	- Eric Sunshine fixed the formatting of the help message for csfont.
	- Eric Sunshine fixed pytest.mak so that it only adds its target if
	  Python was detected on the system.
	- Eric Sunshine made dnapp more Unix-friendly.	It now uses -h for
	  help rather than -?.	The problem with -? is that '?' is a filename
	  wildcard to the Unix shell.  (Renamed the old -h option to -q.)
	- Received a patch from Samuel Humphreys which allows you to render
	  on texture dynamically. Currently this only works for the software
	  renderer. Support for the other renderers will have to be added.
	  There is also a new 'dtsimple' demo app to show of the new
	  feature.
	- Paul Garceau modified win32/volatile.h to enable user to decide
	  whether or not Trocchus' DO_DINPUT_KEYBOARD should be enabled.
	- Paul also did some Mingw specific modifications. He added an option
	  to decide which processor you want to use (default is i386).
	  If you wish to use another Intel processor you will need to modify
	  CFLAGS.GENERAL.
	- Eric Sunshine fixed several compilation problems throughout the
	  project.
	- Eric Sunshine updated next.txi and beos.txi to make reference to new
	  csfont plugin.
	- Eric Sunshine eliminated an apparently bogus warning from the
	  OpenStep compiler in inifile.cpp.
8-May-2000
	- Eric Sunshine re-enabled -kb flag and re-added CRLF line terminators
	  for all .dsp files so that they will work even from CVS snapshot
	  which is created on a Unix machine.
	- Eric Sunshine made the following configuration file-related changes:
	    - All Crystal Space application and plug-in configuration files
	      are now loaded from virtual filesystems via VFS rather than the
	      physical filesystem, with the exception of scf.cfg and vfs.cfg
	      which can not be loaded from VFS for (hopefully) obvious
	      reasons.	(scf.cfg is needed to initialize SCF which is used to
	      load the VFS plug-in, and vfs.cfg is used to actually define the
	      VFS volumes.)
	    - Moved all configuration files onto the VFS volume /config which
	      happens to be mounted at physical location CS/data/config.  Note
	      that using the /config volume is a convenience, rather than a
	      requirement.  Programs written using Crystal Space can choose to
	      locate their own configuration files anywhere they like; even on
	      a physical filesystem, if desired (though this is frowned upon).
	- Eric Sunshine modified WalkTest so that script files which it
	  executes are now loaded from VFS rather than from a physical
	  filesystem.
	- Eric Sunshine fixed a lot more 'const' problems throughout the
	  project.  Most of these involved changing (char*) to (const char*).
	- Eric Sunshine added 'bool' variations of the Append() method, and
	  operator+= and operator<< to csString.
	- Eric Sunshine made the following changes to ScanStr():
	    - Fixed bug: Wasn't able to parse strings which used only
	      whitespace as delimiters, such as "%f %f %f".  In this case, it
	      would only scan the first "%f" and skip the remainder of the
	      string.  (It has always been able to parse strings which use
	      non-whitespace delimiters, such as "%f,%f,%f".)
	    - Is now much more tolerant of Macintosh and Windows/DOS line
	      terminators (CR and CRLF).
	- Eric Sunshine made the following changes to WalkTest's 'coord' file
	  handling:
	    - WalkTest now saves and loads 'coord' files via VFS rather than
	      via a physical filesystem.
	    - The format of the 'coord' file has changed slightly.  The stored
	      sector name is now quoted (with double-quotes) rather than bare.
	- Eric Sunshine worked around a limitation of Wouter's Solaris
	  compiler which could not grok the 64,000 byte "Data" buffer built
	  into dnFileBuffer.  Therefore, the Data buffer is now allocated from
	  heap.
	- Thomas Riemer added auth interface/plugin and NetCmd interface.
	  Change icmdmgr.h and iproto.h to use NetCmd interface.
	  Added first nstp implementation documentation.
	  Upgrade nstp client demo - now it allows login to server.
	- More work on saving/loading octree. The octree save/load
	  now seems to work perfectly. PVS is not cached yet.
	  The cached octree format contains a few consistency checks
	  to make sure that the octree is really valid for the current
	  level. If it fails then the octree will be recalculated
	  again.
	- Martin Geisse changed standard textures in dungeon plugin from
	  GIF to JPG. Martin also fixed a bug in the dungeon sample input
	  files.
	- Frank O'Connor changed csAll.dsw to binary.
	- Frank also removed very outdated glide projects for Win32.
	- Frank also redid some of cspace project to put all interfaces
	  under one logic group.
	- Frank also did various other VC project file changes.
	- Frank converted legacy SysPrintf to m_piSystem->Printf.
	- Eric Sunshine fixed several compilation warnings throughout the
	  project.
7-May-2000
	- More work on PVS. Still not working properly though.
	- Started working on saving and loading of octree and PVS.
	  This will help debugging this thing as computing it is
	  time consuming.
	- Frank O'Connor added the ability to change dynamically
	  between window/fullscreen. This is implemented via iGraph2D::
	  PerformExtension() (called 'fullscreen'). Currently only
	  DirectDraw2d handles this. Added new 'fullscreen' console
	  command to use this extension.
	- Frank also rewrote a lot of DirectDraw. Work on unifying all
	  DirectDraw drivers into one.
	- Gary Haussmann added patch submitted by
	  samuel@metalog.softnet.co.uk, to fix segfaults when using
	  Voodoo/glide based X server.
	- Eric Sunshine pored through the project several times to correct
	  problems caused by relocation of 2D, 3D, and sound drivers from
	  CS/libs to CS/plugins.  He updated source, headers, makefiles,
	  scripts, and documentation.  The directories which were relocated at
	  this time were:
	    libs/cs2d --> plugins/video/canvas
	    libs/cs3d --> plugins/video/renderer
	    libs/cssnddrv --> plugins/sound/driver
	    libs/cssndrdr --> plugins/sound/renderer
	- Eric Sunshine fixed csnetman.mak so that it properly classifies
	  itself as a plug-in module rather than driver.
	- Eric Sunshine fixed several additional compilation warnings which
	  were recently introduced into the project.
	- Eric Sunshine fixed an error in the mingw.mak makefile.
6-May-2000
	- Fixed several bugs in PVS and routines used by PVS. It finally
	  starts to resemble doing PVS work for real.
	- Norman Kramer changed DRIVERS into PLUGINS for the linux
	  makefile.
	- Norman also changed all references to the old directories
	  cs2d and cs3d.
	- Eric Sunshine fixed a bug in the 'depend' target of openglx/glide.
	- Eric Sunshine added ugly debug_dump() and cleanup() to scfreg.cpp
	  for glooky Linux system driver.
5-May-2000
	- Andrew Zabolotny removed some relatively expensive unneeded
	  code from lighting routines which should make lighting (both
	  static and dynamic) work faster :-)
	- Andrew split FillLightMap routine into two: GetCoverageMatrix
	  and FillLightMap. The first one can be used to get the coverage
	  matrix for any frustum projected on the polygon lightmap.
	  Wouter is going to use it for radiosity.
	- Frank O'Connor fixed post-build copy macro for VC project files.
	- Frank also fixed bug where DirectDraw 2d plugin was exporting
	  a class name that did not synch with SCF.CFG or the MSVC output
	  name. The (default) directdraw 2d class is now named csddraw. The
	  ddraw.mak and static.cpp have been updated as well.
	- Fixed bug in csIntersect2::Planes(). It always returned false
	  even if there was an intersection.
	- Paul Garceau modified mingw.mak to accomodate static lib builds
	  for COMP_GCC. Added libdinput.a link reference.
	- Paul also forced scf to use Dx3 for Windows NT4 under COMP_GCC.
	- Fixed a fix by Eric to radiosity (suggested by Wouter Wijngaards).
	- Fixed memory leak in new lighting code from Andrew.
	- Further debug work on PVS. Still not working properly though.
	- Wouter Wijngaards updated radiosity. It is still buggy though.
	- Fixed bug in csPoly3D::ProjectXPlane (and Y/Z).
	- Eric Sunshine fixed a bug in cs2d/common/scrshot.cpp where it was
	  applying an incorrect cast to the abstract "Data" which it was about
	  to delete[].	But was pointed out by samuel@metalang.softnet.co.uk.
	- Eric Sunshine eliminated several newly introduced compilation
	  warnings from the project.
	- Eric Sunshine performed the (hopefully) final unification and
	  correction of the DDraw naming problems/conflicts.  To summarize:
	    - Unified on name "csddraw" everywhere.
	    - Removed old duplicate, legacy names from g3d and scf.cfg which
	      referred to same driver by multiple names.
	    - Makes proper use of SOFTWARE_2D_DRIVER everywhere.
4-May-2000
	- Chris Bruner did some various cleanups in some files.
	- Brandon Ehle did an attempt to unify makefile for all Win32
	  compilers.
	- Frank O'Connor did a big win32 project overhaul to standardize
	  (re-standardize) the settings, defines, paths whic the projects
	  use. Defined debug/ and release/ directories, added a macro for
	  copying output to root directory. Prevents clutter from debug
	  info, browse files, ilk's and other files that MSVC makes.
	- Martin Geisse did some update and clean-up work for dungeon
	  plugin.
	- Andrew Zabolotny fixed another lighting bug. Now every light
	  frustum has a unique numeric ID which can be used to uniquely
	  identify that frustum. This is used to avoid duplicate lighting
	  of same shared lightmap by same light.
	- Eric Sunshine fixed a slew of compilation problems throughout the
	  project.
	- Eric Sunshine fixed a bug in the Dungeon plugin in which virtual
	  base classes were not used for multiple-inheritance even though it
	  was required.	 In particular, these objects were cast to type csBase
	  even though they inherited from csBase multiple times, thus the
	  compiler was (correctly) unable to choose which csBase parent to use.
	  Now csBase is a virtual parent, so there is only one instance of it
	  per derived child.
	- Eric Sunshine made the following changes to csMD5:
	    - Fixed bug: MD5 algorithm wasn't taking endianess into account at
	      all.  (The original MD5 implementation by the author -- Peter
	      Deutsch -- did take endianess into account, but somehow this
	      code was omitted from the MD5 implementation which ended up in
	      csutil/csmd5.)
	    - Performed a complete overhaul of csMD5.  (What else did you
	      expect from me?)	Not only does this simplify usage but also
	      exposes Peter Deutsch's original API for people who want super-
	      fine control over the process.  (The old csMD5 implementation
	      did not allow access to the original API and was less flexible,
	      as a result.)
	    - Fixed bug in Michael Long's GetReducedHash() function.  It
	      wasn't taking endianess into account.  I also moved this
	      function to cctest (which is the only place it was used) since
	      it is inappropriate for a general MD5 class, IMHO.
	- Robert Bate made some more InputSprocket changes.
	- Robert also updated the Mac project files.
3-May-2000
	- Fixed bug in Blocks which caused the menu not to work
	  properly (left/right arrows were gone).
	- Andrew Zabolotny did a large update:
	    - Removed all stuff related to the old way to do high-quality
	      lightmaps. Removed csPolygon3D::ScaleLightmaps2X,
	      csPolygon3D::UpdateLightmapSize, csLightMap::Scale2X.
	      Removed all stuff required to support 2x lightmaps from csWorld.
	    - Implemented a totally new way to do high quality lightmaps.
	      It is supposed to produce more high quality lightmaps. Last
	      but not least the new algorithm removes both infamous Black
	      Borders {tm} problem as well as the old White Borders {tm}
	      problem (WB were resolved in the previous implementation,
	      but my new approach allows to resolve WBs even for dynamic
	      lightmaps! Not done yet though...). My measurements also
	      shows it is a lot faster... maybe it is a result of some bugs
	      that are still left. dmburg level -recalc's with the old
	      algorithm on my machine for 118 seconds, with the new
	      algorithm it takes just 49 seconds. This could be due to bugs
	      that are still existing though (very likely).
	    - Fixed typo: frustrum replaced with frustum. There were
	      thousands of such errors. The only thing left is to rename
	      frustrum.cpp and frustrum.h.
	    - "fclear on" in walktest now will clear zbuffer on every frame.
	    - Separated the "antialiased polygon" code from polytext.cpp
	      into a separate file in libs/csgeom. Now it is useable from
	      any application/library.
	- Eric Sunshine changed the CVS snapshot script (bin/snapshot.py) so
	  that it now uses /tmp as its working directory rather than polluting
	  the snapshot directory with temporary files.
	- Eric Sunshine made the following additional changes to csIniFile:
	    - Completed the list of Save() methods so that they now complement
	      the Load() methods.  In particular, Save(iVFS,path) was
	      conspicuously absent.
	    - Added Load(csString) for convenience.
	    - Renamed TextualRepresentation() to Save(), thus making it just
	      another one of the Save() methods (which returns a textual
	      representation of the INI as a csString, in this case).
	      This complements Load(csString).
	    - There is now a distinction between Save() methods which check
	      and affect the 'dirty' flag, and those which do not.  Previously,
	      Save() methods would only actually save the INI if it was dirty.
	      This made it impossible to save the INI to a new file if you
	      hadn't made any changes to it.  In other words, the following
	      sequence would fail to emit a new INI file ("b.cfg"):
		cfg.Load("a.cfg"); cfg.Save("b.cfg");
	    - Added IsDirty() and ClearDirty() for finer control by client.
	- Andrew Zabolotny fixed the first of the many lighting bugs that
	  are left after his changes.
	- Andrew Zabolotny fixed the second of the many lighting bugs that
	  are left after his changes.
	- Andrew Zabolotny fixed the third of the many lighting bugs that
	  are left after his changes. It is a theoretical bug though,
	  nobody has seen it in action yet :-)
	- Fixed a memory leak in csClipper. The destructor was not virtual.
	- Some further fixes on PVS.
	- Frank O'Connor did some various bug fixes.
	- Wouter Wijngaards did various changes to radiosity:
	    - Fixed ambient, use standard ambient values again.
	    - Slightly faster.
	    - Can do specular gloss.
	    - Options configurable in config.
2-May-2000
	- Added csPoly3D::ProjectAxisPlane() which is similar to
	  ProjectXPlane() but for a general axis aligned plane.
	- Added assignment operator for csPoly2D.
	- Some further work on PVS.
	- Frank O'Connor defaulted DO_DINPUT_KEYBOARD in Win32 built.
	- Frank also fixed hardware cursor problem for DDraw.
	- Frank also did several VC project file changes.
	- Paul Garceau modified ddraw makefile to accomodate generic ddraw
	  make.	 Added ifdefs to accomodate Borland, COMP_GCC, and COMP_VC.
	- Gary Haussmann corrected bad transform in DrawTriangleMesh.
	- Gary added detection of other extensions
	  (GL_EXT_compiled_vertex_array and GLX_ARB_get_proc_address).
	- Gary disabled code to detect opengl extensions, as this will break
	  compiles on some platforms.
	- Martin Geisse fixed a bug in dungeon plugin.
	- Eric Sunshine fixed several compilation warnings and problems
	  throughout the project.
1-May-2000
	- Norman Kramer added CSSTA_CHARWRAP and CSSTA_WORDWRAP to show
	  text in a static text control that is longer than the control
	  (csws).
	- Added csBox2 and csBox3 Min() and Max() functions that accept
	  a component index (x=0, y=1, z=2).
	- Added csIntersect3::PlaneXPlane(), PlaneYPlane(), PlaneZPlane()
	  and PlaneAxisPlane() to intersect a general plane with an
	  axis aligned plane. The result is a 2D plane.
	- Added csIntersect2::Planes() (but unimplemented right now)
	  to calculate the intersection between to 2D planes (i.e. lines).
	- Further work on PVS. Made the realization that it is better
	  to work with a single 2D culler plane instead of a cube.
	  This simplifies the code a bit.
	- Eric Sunshine fixed several build problems with the Dungeon plug-in
	  which showed up with the introduction of Bison and Lex.
	- Eric Sunshine eliminated several compilation warnings and problems
	  throughout the project.
	- Eric Sunshine repaired the project enough that it builds on NextStep
	  once again.  Most of the programs even run, though some suffer from
	  link problems when loading plug-in modules.
	- Eric Sunshine made NeXTFrameBuffer15 more robust and tolerant of
	  bugs elsewhere in Crystal Space.  The 15-to-16 bit lookup table
	  which is used to convert CS format 15-bit RGB to NeXT format 16-bit
	  RGBA is now allocated twice as large as necessary since CS does not
	  always respect the request for 15-bit colors.	 By allocating the
	  table twice as large as necessary for 15 bits, errant 16-bit values
	  will no longer access memory beyond the end of table (potentially
	  causing a segmentation fault).  This problem has arisen when CS's
	  software renderer incorrectly paints polygons from garbage memory
	  rather than using properly prepared 15-bit textures.	(This is a bug
	  in the software renderer.)  It is also possible for poorly written
	  programs to use hard-coded 16-bit color values in a 15-bit
	  environment.	Thus the NeXT 2D driver now tolerate such buggy
	  behavior.
	- Eric Sunshine added automatic detection of socklen_t to unixconf.sh.
	  If absent, defines DO_FAKE_SOCKLEN_T in config.mak and volatile.h,
	  and fakes up socklen_t with int.  Hopefully this will resolve (at
	  least one) problem with compiling network socket driver on Solaris.
	- Eric Sunshine renamed NEED_FAKE_BOOL/NO_BOOL_TYPE to DO_FAKE_BOOL in
	  booltest.sh, volatile.mak, and types.h for consistency's sake.
	- Eric Sunshine made the following changes to the engine's command-
	  line options:
	    - Renamed the -recalc and -inhrecalc options to -relight and
	      -norelight, respectively.	 This was done in preparation of
	      caching of other types of information per level (such as
	      visibility data), at which time it will be important to be able
	      to selectively distinguish between which portions of cached
	      information should be recalculated.
	    - Added -revis and -norevis options which force and inhibit
	      recalculation of cached visibility data, respectively.  (Note:
	      This information is not yet cached.)
	    - Added (new) -recalc and -norecalc options which perform the
	      composite operations of forcing and inhibiting, respectively,
	      recalculation of all cached information (such as visibility and
	      lighting data).
	- Robert Bate added class keyword to a friend declaration so that
	  CWPro5 is happy.
	- Norman Kramer did a small fix in pixmap clipcode for glide.
	- Eric Sunshine made the following changes to csString:
	    - Added variations of Append() and operator+= for all of the basic
	      types (including signed and unsigned).
	    - Added handy left shift operators for all of the basic types.
	      These operators provide a way to compose string in a simple,
	      convenient, and completely type-safe fashion.  For example:
		str << "Hi " << name << ".  Your age is: " << age << '\n';
	    - Fixed a bug in SetSize() where the resultant string size was one
	      byte larger than requested.  Thus, when Clear() called
	      SetSize(0), the string actually ended up with a length of one.
	    - Renamed SetSize() to SetCapacity() for clarity.
	    - Added Truncate() which shortens a string without freeing the
	      storage.	(You can still call Reclaim() to free storage.)
	    - Clear() now calls Truncate(0) for fast-and-dirty operation.
	      For the old behaviour where storage was freed, call Reclaim()
	      after Clear().
	- Eric Sunshine cleaned up the implementation of scfString and iString.
	- Eric Sunshine performed another partial overhaul of csIniFile.  The
	  following changes were made:
	    - Completely generalized and unified composition and decomposition
	      of INI files regardless of input or output medium (physical
	      filesystem, VFS, iFile, etc.).
	    - Entirely eliminated all the special-case code (without any loss
	      of functionality) which was added to csIniFile so that it could
	      deal with abstract iFile.	 The removal of this code _grealy_
	      simplified the implementation.
	    - Now uses iVFS rather than csVFS, thus no longer tied to any
	      particular implementation.
	- Eric Sunshine fixed a compilation error in math2d.cpp and a
	  compilation warning in octree.cpp and csstatic.cpp.
30-Apr-2000
	- More work on the PVS.
	- Added csBox2 and csBox3::GetCenter().
	- Added csBox3::Between() to test if a box is between two others.
	- Martin Geisse added framework for object conditions and cleaned up
	  thing handling for the DUNGEON plugin.
	- Chris Bruner changed inline asm code to be Borland Compatible.
	- Martin Geisse added framework for object conditions and cleaned
	  up thing handling for DUNGEON plugin.
	- Norman Kramer corrected halo drawing for Glide.
	- Thomas Riemer moved csnstp/nstp.h to netspace/nstp. Thomas also
	  added parser functionality to nstp.cpp to echo valid NSTP back.
	- Gary Haussmann moved the perspective projection in
	  DrawTriangleMesh. The projection was being placed into the OpenGL
	  Modelview matrix. Now the code places perspective projection into
	  the OpenGL projection matrix where it belongs.
29-Apr-2000
	- Desmond Fletcher extended Map2CS with the option to add
	  TRIGGER to activate scripts in a THING.
	- Brandon Ehle refixed the ddraw.mak to avoid ddraw2d.dll
	  and ddraw.dll name collisions within windows. The name
	  ddraw5.dll does not exist within windows, and therefore won't
	  cause names collisions as they other possible names do.
	- Norman Kramer enhanced glide to show cursors, though it
	  produces a nice trail in csApp derived apps ( where Print()
	  is not called in every case ). I used andyz cursors from mazed,
	  but its easily changeable ( extended XPM format, see glidcurs.h).
	- Norman Kramer fixed glide so that ti no longer leaves a trail
	  of mouse backimages (but still not optimal).
	- Frank O'Connor did some changes for redo of network stuff.
28-Apr-2000
	- Paul Garceau modified for COMP_GCC/COMP_VC Win32 implementation:
	    - Re-enabled "make ddraw".
	    - Enabled necessary library references for COMP_GCC static build
	      process.
	    - Re-defined process to accomodate COMP_BC, COMP_VC & COMP_GCC.
	    - Modified ddraw.mak to generate ddraw2d.dll for COMP_VC and
	      COMP_GCC when shared libraries or "plugins" are being built.
	- Andrew Zabolotny did a small fix to the Unix system driver with
	  regards to time handling.
	- Update to VC project files from Frank O'Connor for new multiprotocol
	  communication manager.
	- Some other VC project file changes from Frank.
	- Eric Sunshine fixed docproc.pl so that when a command fails in
	  run_command(), the actual error message from the command is output
	  along with the command which failed.	(In the past, the error
	  message was accidentally lost.)
	- Eric Sunshine updated tutorial/simple.txi to reflect new call
	  format of RequestPlugin().
	- Eric Sunshine fixed a couple of errors introduced into authors.txi
	  when Desmond Fletcher was added.
	- Eric Sunshine fixed some Texinfo syntax and mark-up errors which
	  were recently introduced into map2cs/ref2.txi, and which caused
	  texi2html to fail spectacularly.  This also had the unfortunate
	  side-effect of crashing the automated Texinfo to HTML conversion.
	  Also rewrapped ref2.txi to fit within 80-columns.
	- Eric Sunshine fixed a nasty bug in the way DECLARE_IBASE_EXT() was
	  used by csSector.  It was passed csSector as the parent class which
	  resulted in method implementations which looped infinitely, such as
	  "csSector::IncRef() { csSector::IncRef(); }".	 Now properly passes
	  in csPolygonSet as the parent class.
	- Eric Sunshine fixed the help message formatting in several recently
	  added makefiles.  He also fixed several makefiles which were recently
	  moved from CS/lib to CS/plugins to use PLUGINHELP rather than
	  DRIVERHELP.
	- Eric Sunshine fixed the STATIC_SCF define in several makefiles.
	- Eric Sunshine renamed the "Protocol" instance variable in
	  csSystemDriver to "NetProtocol" in order to better reflect its true
	  meaning.  This also works around a name clash with the Objective-C
	  class "Protocol".
	- Eric Sunshine removed a significant number of out-of-date references
	  to obsolete 'null' drivers from platform makefiles.  Also updated to
	  reflect fact that network drivers have moved to CS/plugins
	  directory.
	- Eric Sunshine removed the obsolete libs/csnetdrv and libs/csnetman
	  directories.	These modules were moved to the plugins directory
	  several days ago.  (The directories should have been removed from
	  CVS at that time but were not for an unknown reason.)
	- Eric Sunshine relocated socket network driver from plugins/csnetdrv
	  to plugins/net/driver/socket and made a few minor changes.  Note
	  that the distinction of "socket" within the "driver" directory.
	  This distinction is important since it is possible to have drivers
	  of many different types.  When the socket driver was originally
	  moved to plugins/csnetdrv from libs/csnetdrv/sockets this
	  distinction was lost.	 FURTHER NOTE: This is just a prelude to
	  actually repairing the damage which was done to the abstract
	  networking interfaces when socket-specific junk was added to
	  inetdrv.h for NetSpace, thus corrupting and polluting the pure
	  abstract interfaces defined therein.
	- Fixed a problem with the OpenGL 2D X driver for very high
	  framerates. Added XSync() to synchronize to the X server.
	  I don't know if this means a slow-down on OpenGL systems
	  that don't have such high performance (i.e. more than 100 FPS).
	  This needs to be tested.
	- Reverted a recent change that made csPolygonSet inherit first
	  from iPolygonSet and then from csObject. This change had
	  some bad consequences for some code that assumed csObject
	  can be casted directly to csObject. This assumption could
	  cause crashes in some cases.
	- Eric Sunshine went on another cleaning spree and removed many, many
	  old, unused, and perpetually unfinished files from the CS source
	  tree, including the Amiga and WCC ports, and the aborted autoconf
	  conversion, among others.
	- Wouter Wijngaards: weird crash bug in optimize mode is fixed now.
	  Warning to any sane programmer: the fix was holistic in nature.
	  The code now feels much more in balance, and because of the good
	  vibes the bug went away, I hope. At least the bug disappeared
	  for me :-).
	- Frank O'Connor added a new multiprotocol communication manager.
27-Apr-2000
	- Frank O'Connor updated VC project files for NetComm and
	  the scfTutor apps (zoo, dog, worm).
	- Frank also modified zoo.cpp so that it compiles on Win32.
	- Fixed a small compile error in libs/cssys/unix/unix.h which
	  prevent compilation on Unix.
	- Did some significant improvements on sprite performance
	  (thanks to Seth Galbraith for starting this). Unfortunatelly
	  I had to break LOD for this (temporarily). Luckily LOD is not
	  used by the engine right now.
	- Fixed missile code so that there is now only one particle
	  system created for an explosion. This bug was caused by
	  a misconception that there are five explosions for a single
	  missile. This is not true.
	- Desmond Fletcher added ACTIVATE option to Map2CS for thing
	  scripts.
	- Norman Kramer changed ClassID of glide drivers for unix.
	- Norman also unified unix glide 2D driver. Now both can be build
	  at same time. See linux.mak file.
	- Norman also implemented the DoubleBuffer() call in Glide
	  3D driver.
	- Brandon Ehle did various fixes for the Borland compile.
	- Thomas Hieber replaced a fatal_exit() by exit() in csgeom.
	- Martin Geisse did some updates to dungeon.
26-Apr-2000
	- Fixed csMath3::FindObserverSides().
	- Added csBox2 and csBox3::GetEdge() to iterate over all edges
	  of a bounding box.
	- Fixed csMath3::OuterPlanes() to work with the new GetEdge().
	- Continued work on PVS.
	- Desmond Fletcher added option to change world zipfile extension.
	- Desmond Fletcher added new classnames and keys to map2cs to extend
	  map editing capabilities.  Updated documentation for map2cs.
	- Thomas Riemer did some fixes to NSTP.
	- Thomas also removed obsolete code: Refresh/StartServer from
	  the network manager, and also added preliminary error handling
	  via GetLastError() at each level.
	- Chris Bruner did a fix for Borland (doesn't know _getpid()).
	- Andrew Zabolotny removed the above fix for _getpid(). The fix
	  is now applied to include/cssys/win32/csosdefs.h.
	- Frank O'Connor updated VC project files for csnstp project and
	  cswstest.
25-Apr-2000
	- Added csBox3::Adjacent() function to test if two boxes
	  are adjacent.
	- Added csMath3::FindObserverSides() to find all sides of one
	  box that can see another box.
	- Added BOX_CORNER_xyz and BOX_CORNER_xy defines for csBox3 and
	  csBox2::GetCorner().
	- Andrew Zabolotny added functionality for testing line clipping
	  in cswstest (Ctrl+mouse click).
	- Chris Bruner fixed 'makedep' so that it compiles for Borland.
	- Michael Dale Long wrote a dnapp.mpk (for the Python Makefile
	  generator) for the dungeon app. Michael also made a few simple
	  fixes in dnapp.cpp (i.e. use cross platform functions in cssys).
	  Some other dungeon changes.
	- Denis Oliver Kropp <dok@master.fischlustig.de> did a small fix
	  to Map2CS (itoa is missing).
	- Frank O'Connor updated many VC project files for the new networking
	  code and NSTP.
	- Robert Bate did a small fix on the phyztest app.
	- Robert also worked on DrawSprockets code for the Macintosh port.
	- Robert did the first step to adding support for InputSprockets
	  for the Mac port.
	- Robert also updated the Mac project files.
	- Thomas Riemer redefined code to connect objects in network manager.
	- Gary Haussmann cleaned out some commented code in the OpenGL
	  2D driver for X. Added some more diagnostic messages in the code
	  that tries to find a good X Visual. Changed the visual selection
	  code so that it accepts only visuals with depth buffers with
	  precision >= 8 bits.
	- Gary finished converting DrawTriangleMesh() to use OpenGL
	  transforms; the entire transform (both the world->camera
	  transform and the perspective projection) is embodied in OpenGL
	  matrices so it will be hardware accelerated if the Graphics
	  hardware supports such things.
	- Gary also added glViewport() calls provided by Denis Oliver Kropp
	  to get the driver working on certain platforms (such as
	  the current utah-glx builds).	 Some drivers work fine without
	  calls to glViewPort(). Is this required by the standard?
24-Apr-2000
	- Martin Geisse added the first working version of the DUNGEON
	  plugin (random level generator).
	- Frank O'Connor did a RequestPlugin fix for NetSpace test apps.
	- Frank also removed dnapp project (leaving only the dnappc console
	  version).
	- Frank fixed infinite loop in walktest.cpp (in DO_SOUND ifdef).
	- Eric Sunshine added another official revision of texi2html 1.62
	  from the maintainer containing the patches which I sent to him.
	- Robert Bate fixed an include for the Macintosh in the network
	  driver code.
23-Apr-2000
	- Added csPlane3 constructor with three points.
	- Added csMath3::OuterPlanes() function which calculates the
	  outer planes between two axis aligned boxes.
	- Continued work on PVS.
	- Frank O'Connor added new networking model by Thomas Riemer
	  <triemer@apt4g.a3nyc.com>. Foundation work for protocol
	  independent network communication infrastracture. The begining of
	  the NSTP is also in this update (via NSTP protocol plugin).
	  The structure is as such:
	    csnsmgr (Command Manager)
	    csnstp (Protocol Layer)
	    csnetman (Network Management Layer)
	    csnetdrv (Network Driver Level)
	- Also added 'demonets' and 'nstp' applications to demonstrate
	  the new networking code.
	- Frank readded cleanup() and debug_dump() to the above test
	  applications.
	- Frank created a console mode VC project for dnapp (Dungeon App).
	- Desmond Fletcher added code to Map2CS to write sprites (code
	  from Pete Mistich).
	- Desmond also added WriteSounds (accessed from zipfile; registered
	  in vfs.cfg in lib/sounds).
	- Desmond also did various other changes to Map2CS (added gif in
	  CreateTexture, added textures for all 2D cs_sprite entities).
	- Desmond added 2D Sound iterator.
	- Desmond added sounds_loaded to csLoaderStat to report sounds
	  loading.
	- Martin Geisse did a fix for memcpy() with MSVC and enabled it
	  for all VC users.
	- Martin did a massive update to the Dungeon plugin.
	- Eric Sunshine fixed the MingW makefile (CRLF->LF) and disabled
	  the -kb sticky flag.
22-Apr-2000
	- Made csTextureTrans a little bit more robust for badly specified
	  texture coordinates. In fact this is a level error and probably
	  something that should be detected by CS at load time.
	- Wouter Wijngaards changed radiosity with slightly better
	  quality loop detection code.
21-Apr-2000
	- Andrew Zabolotny changed 'int' back to 'ceil' in CompressVertices()
	  (i.e. change from Frank O'Connor).
	- Andrew also fixed all warnings and compilation errors left in
	  dungeon plugin.
	- Andrew made a fix after his last plugin system changes.
	  Simple application now properly specifies the function ID for
	  every requested plugin.
	- Found a bug in Newtonian particle system. SetAccel() sets the
	  speed array instead of the acceleration array.
	- Spiral particle system now looks like a fountain :-)
	- Made OpenGL DrawTriangleMesh a bit faster. It now does less
	  copy of data.
	- Spiral particle system now looks like a spiral a bit.
	- Wouter Wijngaards made a speed improvement to radiosity (several
	  factors faster now). It also works for bsp levels and has no more
	  black borders. White borders on lightmaps are still there though.
	- Paul Garceau eliminated a warning from the Mingw build which was
	  generated by a malformed (syntax) comment statement.
	- Paul also updated to fully support build differences between
	  COMP_GCC and COMP_VC/COMP_BC.
20-Apr-2000
	- Andrew Zabolotny did another try to fix the Windows port
	  by adding an assembly version of memcpy.
	- Chris Bruner did a small fix to the Windows port.
	- As suggested by Chris Bruner, Jorrit did a small fix to Blocks
	  so that it doesn't confuse the Borland compiler and is also more
	  robust (i.e. don't compare floats with 0).
	- Fixed line driver so that it uses the line 2D driver on Unix
	  again.
	- Andrew Zabolotny did a batch of changes:
	    - Fixed the DOS/DJGPP that was slightly broken after my
	      last changes to csinput system.
	    - Fixed MGL 2D driver. Now it always uses the backbuffer
	      in system memory, now it run at least as fast as RAWDOS VBE
	      2.0 driver. Hmm... strange I see absolutely no gain by
	      using hardware accelerated BitBlt over memcpy().
	    - Added a simple new tool called "textconv" which can be used
	      to convert text back and forth between Unix and DOS line
	      ending formats.
	    - Improved the new loader of course. Now it loads sectors and
	      things, I already see light at the end of tunnel.
	    - Fixed a lot of 2D drivers. The iGraph2D interface defines
	      a function called GetDoubleBufferState () while some drivers
	      still define the old fashioned DoubleBuffer() function which
	      effectively made the application unable to query the real
	      double-buffering state.  This can fix some problems with
	      double-buffering on Windows, for example.
	    - Started to fix a part of the infamous Black Borders (BB)
	      problem.	The work is not finished so the lightmaps will be
	      for now even worse than they were before, but it will be
	      changed in near future. Please do not spend time fixing it.
	    - Added a new macro DEBUG_BREAK in sysdef.h that is handy
	      for setting debugger breakpoints (e.g. the debugger will
	      break when that macro will be invoked). It is defined
	      only in CS_DEBUG mode.
	- Added experimental spiral particle system. It does not look
	  nice yet. This is intended for a special spiraling effect.
	  Added the 'spiral' console command to use it.
	- Frank O'Connor <frank@oconnors.org> is now the new Windows port
	  maintainer. He did the following changes:
	    - Removed tunnelfighter.dsp from csAll.dsw
	    - Changed win32 debug optimization setting to "default" (avoids
	      compiler error while debug/testing).
	    - Commented out "iTextureMap *piTM = NULL;", unreferenced and
	      iTextureMap is undeclared.
	    - Fixed DrawPolygonMesh for d3d_g3d.h.
	    - Removed references to /csinput/* and replaced with /cssys/*.
	    - Changed rint to rint to int in "csPolygonSet::CompressVertices()"
	- Martin Geisse did some fixes to dungeon plugin.
19-Apr-2000
	- Andrew Zabolotny did a few changes to the windows port to
	  try to get it working after his large changes from a few
	  days ago.
	- Clarified the comment for csSector::HitBeam() a little.
	- Fixed a bug with the bounding box for static-thing being
	  corrupted after CompressVertices(). Modified CompressVertices()
	  itself so that it recalculates the bounding box if it is
	  there.
	- Did a big change to csSector::CalculateLighting(). It is now
	  called CheckFrustrum() instead. It is now a general function
	  used to check what is visible in a frustrum. The csFrustrumView
	  (used to be csLightView) that you give to this routine contains
	  two callback routines (one for polygons and one for curves) which
	  will be called for every visible polygon or curve. You can do
	  your stuff there. The engine itself uses this for lighting.
	  Note that there is still some stuff to clean up here. The
	  csFrustrumView structure contains too much that is specific to
	  lighting.
	- Wouter Wijngaards made radiosity faster, fixed it a bit and
	  added support for colored diffuse reflection.
	- Radiosity is now omitted when -inhrecalc is given and otherwise
	  only done when recalculation is forced.
	- Eric Sunshine fixed csSector so that it embeds iSector rather
	  than inheriting from it in order to work around
	  multiple-inheritance bug in NextStep compiler.  It can't deal
	  with two parents inheriting from the same base class (iBase,
	  in this case), though it has no problem with multiple
	  inheritance in general.
	- Eric also fixed another problem with NextStep compiler complaining
	  about subclasses of csObject (polygon.h and polyset.h) redeclaring
	  GetName() and SetName() as virtual even though they
	  were not so in the parent class.
18-Apr-2000
	- Norman Kramer added QueueExtendedKeyEvent to support regional
	  keyboardlayouts. For an example see HandleEvent in x2d.cpp.
	- Robert Bate did several updates to the Macintosh port to get it
	  working again.
	- Andrew Zabolotny fixed the crash for "walktest -help" due to
	  texture manager not initialized.
17-Apr-2000
	- Andrew Zabolotny made the following changes:
	    - Moved (yet again :-) get_driver_2d() to unix/csosdefs.h.
	      Now it is a static inline function thus it should work for
	      software driver. There is no more system-dependent stuff in
	      soft_g3d.cpp anymore. OS/2 implements its own get_driver_2d()
	      which selects the MGL 2D driver (see below) if the executable
	      is run in a full screen session.
	    - Changed a bit one of 2D/3D driver paradigms: previously it
	      was supposed that the pixel format is available before
	      calling Open() (it was supposed to be clarified inside
	      Initialize() call), from now you cannot know which pixel format
	      will be used unless you Open'ed the drivers. This is because
	      there are a lot of hardware environments with this limit,
	      and up to now they just tried to guess the pixel format which
	      will be used after Open().  Besides, this is a preparation to
	      the changes that will allow us to dynamically switch the
	      resolution/screen depth. Changed the csConsole plugin to
	      load textures when system opens the main window rather than
	      in Initialize() (texture manager is not available during
	      Initialize()).  Other than that, no other changes were
	      required (to my surprise :-).
	    - Finished the new SciTech MGL 2D driver. It is completely
	      system-independent and should work more or less on all
	      platforms supported by MGL (there is a catch though: I
	      don't know how it will work on systems that implement
	      keyboard/mouse input inside the system driver: the MGL event
	      system and the one inside the system driver may interfere on
	      some systems). It works perfectly on OS/2 although it is quite
	      slow for now: I presume it is because I use the backbuffer
	      in video RAM and video RAM is quite slow on my machine. The
	      driver should be enhanced to be able to use back buffer
	      in system memory. The driver supports a lot (I mean A LOT :-)
	      of different resolutions and screen depths. We need some
	      functionality (todo) in the 2D driver to query about
	      available resolutions/screen depths.
	    - Redesigned quite significantly the input system. Added
	      preliminary joystick support. It almost works with the new
	      MGL 2D driver (the joystick poll is commented out for now
	      because it is a relatively slow operation). We need some way
	      to enable joystick on demand, also we need a way to implement
	      joystick calibration. The entire csinput library has been
	      merged into cssys library. There is a new driver:
	      csJoystickDriver. The keyboard and mouse drivers were
	      removed from all system drivers, thus there may be minor
	      compilation errors if I forgot something (I hope I didn't but
	      who knows).
	    - Redesigned a bit the plugin system: there is no RegisterDriver/
	      UnregisterDriver paradigm anymore. Instead of that, a new
	      plugin attribute called "functionality identifier" is
	      introduced. Read include/isystem.h for more information about
	      it.
	    - And of course lots of changes to the new loader.
	- Andrew fixed a crash bug on Solaris in his csinput code.
	- Andrew also changed 'make depend' so that it always regenerates
	  the dependencies and added 'make dep' which tries to be clever
	  about this.
	- Andrew fixed a bug with the 'gamma' setting of the software
	  renderer.
	- Made a few fixes to the large batch of changes from Andrew.
	- Norman Kramer removed several warnings.
	- Eric Sunshine removed all references to the obsolete csInput library
	  from the documentation and from the makefiles ("$(CSINPUT.LIB)").
	- Eric Sunshine back-ported his nodefix.pl script to earlier versions
	  of Perl, such as 5.001 which ships with OpenStep.  The shortcomings
	  in 5.001 which had to be addressed were:
	    - No 'use vars' pragma; had to use explicit "main::" references.
	    - No FileHandle class; had to resort to file handles and typeglobs
	      (ugly!).
	    - Much less feature-rich Getopt::Long; had to resort to old and
	      implicit 'opt_' style variables (yuck).
	    - Can not use 'my' within another statement; use as a stand-alone
	      statement instead.
	- Eric Sunshine patched texi2html so that it works with the older Perl
	  which ships with OpenStep (5.001, in this case).  Perl croaked when
	  asked to magically create hash and array references out of thin air.
	  (Newer Perl can do this, but older Perl can not.) He also sent my
	  patches to the maintainer of texi2html in the hope that he will
	  incorporate them.
16-Apr-2000
	- Eric Sunshine completed Phase Seven of Eric's Big Documentation
	  Overhaul(tm).
	    - Modified bin/docproc.pl so that it now publishes the generated
	      HTML documentation for online browsing and as several archives
	      for downloading.
	    - The HTML conversion of the Crystal Space manual is now available
	      for online browsing.  It is updated four times daily (provided
	      that the underlying Texinfo documentation changed).  The
	      documentation can be viewed at this location:
		 http://crystal.sourceforge.net/docs/online/manual/
	    - The HTML conversion of the Crystal Space manual is now available
	      for download for offline browsing.  Archives are available as
	      'tgz', 'zip', and 'tar.bz2'.  The archives are updated four
	      times daily (provided that the underlying Texinfo documentation
	      changed).	 Archives may be downloaded from this location:
		 http://crystal.sourceforge.net/docs/download/
	    - Performed a full Texinfo conversion of the map2cs documentation.
	      Split the documentation into two major components: (1) The
	      application reference which is part of the "Applications"
	      chapter within the Crystal Space manual, and (2) the tutorial
	      which is part of the "Tutorials" chapter.
	   - Converted all of the GIF files from the map2cs documentation to
	      PNG format.  Added EPS conversions for printed (TeX) output.
	   - Made minor corrections to some of the other Texinfo documents.
	- Wouter Wijngaards added GetArea() function to csPolygon3D to
	  compute the area of a polygon.
	- Wouter added GetCSLightMap() to csPolyTexture as he needed the
	  csRGBLightMaps for radiosity. Also added SetupPolyFill and
	  DoPolyFill as static functions, they are useful.
	- Wouter added new radiosity system:
	  Set the NEWRADIOSITY=yes in cryst.cfg to enable it.
	  Caveat: it is not stored in precalc.info, so always use -recalc.
	  Note: flarge takes an hour with 64x64 lightgrid for me.
	  Reduce your ambient white before using radiosity - it will light up
	  as well. Remove 20 to 40 from it.
	  The handbooks say that a small patch size is necessary, thus
	  16 is 'okay'. But time increases ^2 or ^3 in the number of
	  patches... So beware.
	  A feature is needed to really use radiosity: ambient_color for
	  a polygon, so that a polygon is 'self lit', radiosity will then
	  spread the light to surroundings.
	  The global ambient color is removed before radiosity
	  calculation, and put back afterwards.
	  Also the old pseudo-radiosity algorithm is not useless, it is
	  a global-reflection algorithm, and having a 'reflection' fraction
	  per polygon would be nice, as well as the global_reflection.
	  When you're adding params to polygons add 'diffuse' for the diffuse
	  reflection used by the radiosity algorithm. 0.7 now, not often
	  changed.
	- Norman Kramer fixed Z-buffer calculation in glide renderer.
15-Apr-2000
	- Martin Geisse added a world randomize plug-in.
	- Martin Geisse added example application for the dungeon plug-in.
	- Norman Kramer made python plugin compilable.
14-Apr-2000
	- As by a suggestion of Wouter Wijngaards, Andrew Zabolotny
	  converted the poly_fill routine in polytext.cpp (static lighting)
	  completely to integer.
	- Andrew Zabolotny also fixed a bug in the gif loader that could
	  cause it to loop forever on some gifs.
	- Andrew removed ambient_white variables from csLight class.
	  Now csWorld just adds the AMBIENT_WHITE value to
	  csLight::ambient_r/g/b and that's all.
	- Andrew also optimized the lightmap routines a little bit.
	- Removed QRound in the same routine because it is totally
	  wasted and only slows down.
	- Eric Sunshine updated the VC project files (received them
	  from Nicholas Blumire <empathy@empathy.hostingcheck.com>).
	- Wouter Wijngaards created iParticle to use with csParticleSystem.
	  csParticleSystem itself implements iParticle.
	- Eric Sunshine completed Phase Six of Eric's Big Documentation
	  Overhaul(tm).
	    - Completely eliminated all remaining warnings which were reported
	      by TeX.  Mostly these involved overfull and underfull 'hbox'.
	      Now all conversions (TeX, HTML, Info) build warning-free.
	    - Added a 'pdfdoc' target to the makefile which converts the
	      Crystal Space manual from Texinfo to PDF.	 This complements the
	      other output formats, PS, DVI, HTML, and Info.  (PDF generation
	      still requires a bit more tweaking.  As it stands, it does not
	      preserve the print margins, thus the printed material appears
	      immediately adjacent to the border of the sheet of paper.)
	    - Overhauled the NeXT compilation and NeXT detailed information
	      documents so that they make sense in the context of a larger
	      manual.  Also sensibly merged the old INSTALL.NeXT and
	      INSTALL.NeXT-Binary documents into a single section within the
	      manual.
	    - Performed an overhaul of texinfo/intro/contrib.txi, the Crystal
	      Space "contributors" document.  Unified its layout with the
	      layout of authors.txi.  Also subjected it to a much more
	      thorough Texinfo conversion.
	    - Overhauled resource.txi.	Provided much more up-to-date
	      information regarding accessing Crystal Space in its various
	      forms (such as CVS snapshots, etc.).
	    - Completely overhauled faq.txi to bring it much more up-to-date.
	      It was extremely outdated.
	    - Overhauled coding.txi and cvs.txi within the "Contributing"
	      chapter.	Some of the information in cvs.txi was also relevant
	      to coding.txi in one form or another, so I added the information
	      there as well.
	    - Major cleanup of a significant number of Texinfo document files.
	      (I would name them here, but the list would be too long :-).
	      Also performed a much more thorough Texinfo conversion on many
	      of the existing documents.
	    - Finished overhauling the Simple tutorial so that the discussion
	      now agrees with the sample code; rather than often being
	      independent of it.
	    - Upgraded to texi2html version 1.62.  This version fixes six or
	      seven additional bugs which I reported to the maintainer.
	      Unfortunately, it also introduces several new bugs (some of
	      which are severe).  I have sent off appropriate bug reports and
	      am awaiting response.  In the meantime, I manually patched the
	      most severe problems myself.
	    - Way too many additional documentation changes to even begin to
	      summarize them here.  You'll just have to take my word for it
	      that a _lot_ has changed. :-)
	- Paul Garceau reverted a small change from yesterday.
	- Andrew Zabolotny Fixed a bug in FastSqrt() that caused sqrt(32)
	  to return 4e18. In fact, any sqrt(power-of-two) was incorrect.
13-Apr-2000
	- Changes from Paul Garceau:
	  Patch for Mingw to work around unknown escape sequence
	  error
	    - Moved #define COMPUTE(comp) comment to position
	      one line before void complete().
	    - Minor modification to comment to maintain accuracy
	      of commented documentation.
	- Wouter Wijngaards added RemoveHalo function to csWorld.
	  In the destructor of lights the halo is deleted too.
12-Apr-2000
	- Andrew Zabolotny implemented a killer enhancement on the
	  texture cache, courtesy of John Carmack :-) It improves
	  performance a lot when all the visible textures don't fit at
	  once into the texture cache (e.g. with complex levels, also
	  those sudden slowdowns that happens sometimes while
	  you're walking). Some numbers, just to give you the feeling:
	    - Entry data: 2.2Mb textures visible at once (e.g.	flarge.zip,
	      near the staircase).
	    - First with texture cache of 10Mb (e.g.  far enough for current
	      frame): 11.976048 fps in both cases (old and new).
	    - Now setting texture cache of 2MB: 5.025126 fps without
	      improvement and 11.415525 (!!!!) with improvement.
	    - Now setting texture cache of 1MB: 5.025126 fps without
	      improvement (naturally) and 6.752194 fps with it
	  For real-world cases it should give even MORE performance:
	  generally the more the texture set occupies, the bigger is
	  improvement. For example, with the default cache size of 5MP
	  (e.g. 10MB for 16bpp modes), if you ever encountered the
	  "too much textures in view" problem, you should notice
	  a huge performance increase.
12-Apr-2000
	- Eric Sunshine did the following changes:
	    csVector::Insert() no longer asks memmove() to move zero bytes.
	    csVector::Delete() no longer asks memmove() to move zero bytes.
	- Fixed a second (related) bug in WalkTest CD.
	- Fundamental API change for sprites. Move() has been replaced with
	  MovePosition() (relative move). SetMove() has been replaced
	  with SetPosition() and GetOrigin() has been replaced with
	  GetPosition(). This is both for 2D sprites and 3D sprites.
	  Additinally GetPosition (previously GetOrigin) and
	  MovePosition (previously Move) have changed direction!!!
	  They are now correct.
	- Also use SetPosition and MovePosition for csCollection and
	  csThing now (to be consistant).
	- Changed HitBeam to use 'const' input parms.
	- Norman Kramer moved recalculation of clipper from Draw to a
	  separate method.
11-Apr-2000
	- Wouter Wijngaards fixed SHM problem on some versions of
	  Solaris. If SHM fails it will automatically retry without
	  SHM (X2d driver).
	- Wouter also fixed the ColorChange functionality in the particle
	  system. Fixed AddColor. Fixed destructor, UnlinkSprite is
	  already done by ~csSprite().
	- Andrew Zabolotny added a SciTech MGL 2D driver (unfinished, won't
	  compile).
	- Andrew Zabolotny also did the following changes:
	    - Added CAMERA keyword to the new loader. Not to the old one
	      though.
	    - Added named camera positions support in the engine. Now
	      START (...) is just an alias for CAMERA 'Start'
	      (POSITION (...))
	- Moved deletion of particle systems before sprites so that
	  we can't have crashes because of this.
	- Did a little cleanup of the colldet stuff (i.e. mostly coding
	  style and Doc++ comments).
	- Fixed a bug with DrawPolygonFX/software which would crash
	  for polygons that exceed screen size. It is still strange that
	  this occurs though. Normally the engine should not let that
	  through.
	- Fixed csSector::IntersectSegment to support octree for faster
	  checking. This also fixes FollowSegment.
	- Rewrote csSector::HitBeam() to use the new IntersectSegment
	  better. This function should now work better and faster than
	  before. This is basically the much requested TraceLine.
	  HitBeam() also supports warping portals correctly now.
	- Changed WalkTest to use the new HitBeam() function to click
	  on objects.
	- Eric Sunshine created a custom PHP script (cvssnap.php) which allows
	  people to access the daily CVS snapshots via HTTP.  Previously they
	  were only accessible via FTP.	 Thus, CVS snapshots may now be
	  accessed via these URLs:
	    http://crystal.sourceforge.net/cvs-snapshots/
	    ftp://crystal.sourceforge.net/pub/crystal/cvs-snapshots/
	- Fixed old bug with bots (divide by zero for Norm ()).
	- Fixed another old bug with the missile getting stuck if you
	  immediatelly fire after starting walktest.
	- Fixed bug in loader. It would first call Transform() and then
	  CompressVertices() on a thing. This is wrong and can potentially
	  (in rare cases) cause severe problems.
	- Cleaned up WalkTest a little (not much).
	- Added walkcd.cpp file where all collision detection code
	  related to WalkTest is placed.
	- Added walkdemo.cpp file where all special demo code in WalkTest
	  is added (ghost, skeletal tree, bots, missile, particles, ...)
	- Added walkcmd.cpp file where all console command stuff is
	  housed.
	- Moved constructor and init stuff of WalkTest from keys.cpp
	  to walktest.cpp where it belongs.
	- keys.cpp is now much closer to really doing what the name
	  suggests: handling keys, events, and movement.
	- Fixed a bug in collision detection for WalkTest. The code
	  to handle the resulting collisions incorrectly looped on 'hits'
	  instead of 'num_our_cd'. The result of this was that it was
	  rather possible to walk through walls or fall through floors.
	  This occured very easily in STATBSP type levels but could
	  also affect portal levels.
	- Robert Bate updated the Mac project files.
10-Apr-2000
	- Added 'DETAIL' keyword for THING and SIXFACE and CS_ENTITY_DETAIL
	  flag to csThing. With this keyword you can indicate detail objects
	  in CS. Currently the only effect this will have is excluding the
	  thing from the octree and rendering it true the new and
	  experimental DrawPolygonMesh. So don't start using it already
	  unless you are interested in beta testing :-)
	- Several objects implemented a 'CheckFlags' in the engine. I fixed
	  a comment in CheckFlags(). The comment said that ALL flags in the
	  given mask had to be true but the function itself returned true
	  if SOME of the flags were true. I fixed the comment and added
	  a new CheckAllFlags() function that really checks if ALL flags
	  are set. This affects csThing, csPolygon3D and csLight.
	- Added csFlags class to csutil. This is a very small class to make
	  abstraction of the above settings for objects in the engine.
	- Fixed bug in DrawPolygonMesh where num_vertices was used instead
	  of num_polygons to loop over all polygons.
	- Fixed bug in DrawPolygonMesh where the array of txt_handle
	  should be iTextureHandle** instead of iTextureHandle*.
	  Same for poly_texture.
	- Implemented needed support for poly_texture in DrawPolygonMesh.
	- Mapping of vertices to G3DPolygon structure was completely wrong.
	- Several other fixes to DrawPolygonMesh to make it really working.
	- Implemented first primitive support for rendering detail objects
	  through DrawPolygonMesh. This is initial support for purposes
	  of debugging DrawPolygonMesh only. It does not yet support all
	  features (like fog and clipping) and it will certainly be
	  slower than the old way to render.
	- Changed iGraphics3D::SetTransform to use a csReversibleTransform
	  instead of a csTransform.
	- Changed iGraphics3D to use a csPlane3 instead of the current
	  old structure.
	- Eric Sunshine added some missing cross references to the document
	  texinfo/apps/overview.txi.
	- Eric Sunshine fixed texinfo/anatomy/depend.txi so that it works with
	  TeX, which was not able to deal with @itemize lists formatted with
	  @w even though @w is perfectly legal Texinfo.
	- Finally fixed the bug in the dynamic object support for
	  polygon trees. Sprites are now finally working correctly in
	  STATBSP levels.
	- Fixed a memory leak as well so that the polygon stubs are
	  correctly freed when a sprite is removed.
9-Apr-2000
	- Drastically improved octree building but NOT with the solid
	  space splitter. I still need to investigate that one.
	  The new octree center selection just tries to minimize on
	  polygons splits like before but instead of choosing random
	  points only vertices of the polygons in the octree are
	  considered. This tends to minimize splits greatly.
	  Lighting improved about 20% with this. Rendering could have
	  improved approximately the same amount.
	- Eric Sunshine corrected several errors in the BeOS 'build' document
	  (texinfo/build/platform/beos.txi) and rewrote several sections for
	  increased clarity.
	- Eric Sunshine completed Phase Five of Eric's Big Documentation
	  Overhaul(tm).
	    - Overcame a shortcoming in nodefix.pl where it was unable to
	      repair a @menu if the menu was not preceded by a @node directive
	      in the same file.
	    - Fixed a bug in nodefix.pl where it would neglect to blank out
	      the "next" pointer of the last node at a particular depth.  This
	      could be an especially serious problem if it was pointing at a
	      completely defunct node.
	    - The nodefix.pl and docproc.pl scripts are now run with Perl's -w
	      (enable warnings) option.	 Eliminated several warnings produced
	      by use of this switch.  Improved command-line option processing.
	    - The docs.mak makefile no longer passes --no-validate to
	      'makeinfo'.  Now that my nodefix.pl script generates completely
	      correct @node and @menu directives, --no-validate is no longer
	      necessary.
	    - Restructured the Applications chapter in order to keep it from
	      severely polluting the table of contents with useless junk, and
	      to restrict the number of itsy-bitsy, teeny-weeny,
	      nearly-useless HTML files which were generated by it.  Performed
	      a more thorough Texinfo conversion on it.
	    - Overhauled dirhier.txi, the directory hierarchy documentation.
	      Brought it much more up-to-date.	Eliminated a significant
	      amount of redundant information.	Performed a much more thorough
	      Texinfo conversion on the document.
	    - Broke the (library) Dependencies node out of dirhier.txi into
	      its own file (depend.txi) and its own section (rather than being
	      a subsection of Directory Hierarchy).  Conceptually it is
	      completely independent of Directory Hierarchy, so I am not sure
	      why it was placed there originally.
	    - Upgraded to a newer revision of texi2html 1.61.  This revision
	      addresses all of the pending bug reports which I had sent to the
	      maintainer.
	    - Removed all of the uninteresting options from Crystal Space's
	      custom texi2html.init.  This makes it much easier to see exactly
	      which options are important for generation of Crystal Space's
	      HTML documentation and also makes it vastly simpler to update to
	      a newer version of texi2html.  (Note that a copy of the original
	      .init file is always textually incorporated into texi2html,
	      itself, thus one can still see a list of all options if
	      desired.)
8-Apr-2000
	- Added Dumper::dump for csBspTree2D.
	- Implemented missing csSegmentArray::Get().
	- Fixed a small bug in 2D bsp.
	- Fixed back2front and front2back traversal in 2D bsp.
	- Started further debugger on system to select octree splitter
	  based on solid space intersection.
	- Michael Dale Long fixed a dependency problem that poppup up in
	  the latest changes to fix vector3 / Dvector3 problems.
	- Wouter Wijngaards changed walktest so that it now calls
	  csWorld::UpdateParticleSystems. He also added more options to
	  show them off in the explosion.
	- Wouter also added more utility functions to csSprite2D: SetColor,
	  AddColor to change the color_inits. Also added GetMixMode().
	- Wouter added support for animated particles! Use the
	  SetChangeXXX() functions to have the rotation, size, color,
	  alpha change over time. For the explosion made lightfading and
	  spritefading independent. Removed UpdateAll/DeleteAll, since a
	  list of particlesystems is kept in the world.
	- Wouter added particle_systems NobjVectorList, and a call to
	  UpdateParticleSystems(elapsed time). Fixed typo in
	  AdvanceSpriteFrames comment in .h; which said it used elapsed
	  time, it used current_time. Dont forget to call
	  UpdateParticleSystems from your app if you have particle
	  systems. Also they are deleted in Clear().
	- Wouter fixed casting problems for csVector3. Now precision will
	  be kept, and float will be made double for innocent usage (i.e.
	  * constant double and so on). Advanced math should not mix
	  Vector3 and Dvector3 without casting.
	- Michael Dale Long added initial DrawPolygonMesh() code to 3D
	  drivers. Tested on all Linux drivers. Shouldn't interfere with
	  anything since it is not called yet, but dpmesh.cpp will have to
	  be added to all 3D drivers for non-UNIX Makefile builds.
	- Thomas Hieber added project settings for the particle system
	  (VC).
7-Apr-2000
	- W.C.A. Wijngaards <wouterw@cs.vu.nl> contributed a particle
	  system (check out include/csengine/particle.h).
	- Walktest uses the new particle system for demo purposes. There
	  is a new 'explosion' command and when you fire the missile it
	  will explode with a particle system :-)
	- Wouter decreased particle size in explosion. That looks nicer.
	- Norman Kramer removed a lot of unused variables in the glide code.
	- Norman changed glide so that single TMU system do use the whole
	  TMU mem available.
	- Eric Sunshine completed Phase Four of Eric's Big Documentation
	  Overhaul(tm).
	    - Added all of the standard Texinfo boilerplate material which was
	      missing from the Crystal Space manual.  This includes the
	      copyright notice, version and edition information, document
	      summary, copying permissions, title page, "top" node, and master
	      Info @menu.  This is the first time that the manual is truly a
	      valid Texinfo document.
	    - Added a new appendix named "History".  This will appear in the
	      online conversions (Info and HTML) but not in the printed
	      manual.  The contents of the current history.txt and history.old
	      files will eventually be incorporated into this appendix.
	    - Added a Concepts Index to the manual.
	    - Added version.txi which contains version and edition information
	      and last updated time stamp.  Whenever a new version of Crystal
	      Space is released, the VERSION and EDITION variables in this
	      file should be updated.  VERSION should contain the version
	      number of the Crystal Space release.  EDITION should contain the
	      edition number of the manual (which is usually related to the
	      version number, but may also be independent of it if the project
	      and documentation change at different rates).  Whenever a change
	      of significance is made to the manual, itself, the UPDATED date
	      and EDITION number should be adjusted appropriately.
	    - Added cpyright.txi which contains all of the copyright notices
	      used in the manual.
	    - Created a custom tool (CS/bin/nodefix.pl) which repairs broken
	      and out-of-date @node lines and @menu blocks throughout an
	      entire Texinfo source hierarchy.	This tool can be used to
	      generate completely valid Texinfo @node and @menu entries in a
	      single operation, thus freeing the documentation writer from
	      having to manually perform this mundane chore.
	    - Added a new makefile target named "repairdoc" which runs the new
	      nodefix.pl script to repair all @node and @menu entries.
	      Documentation writers may want to invoke the "repairdoc" target
	      after making changes to Texinfo documentation to ensure @node
	      and @menu integrity.
	    - Renamed the docconv.pl script to docproc.pl and modified it to
	      automatically invoke nodefix.pl to repair broken @node and @menu
	      entries prior to performing the Texinfo to HTML conversion.
	    - Texinfo @node and @menu entries are now automatically repaired
	      within the CVS repository every six hours (four times per day)
	    - Added @menu blocks in appropriate places throughout the Texinfo
	      source files to act as navigational aids in HTML and Info
	      formats.
	    - Upgraded CS/bin/texi2html from version 1.60 to version 1.61.
	      This upgrade fixes eight or nine additional bugs which I had
	      reported to the script's maintainer, in addition to the half
	      dozen bugs I reported for earlier releases.  Unfortunately,
	      version 1.61 introduces several new bugs (which I have also
	      reported to the maintainer).
	    - Fixed several bugs in texi2html 1.61, myself, pending a response
	      from the script's maintainer.
	    - Documentation-related targets now reside in their own section
	      within the makefile "help" message.
	- Michael Dale Long did a fix for cctest. Now works with worlds that
	  have a collidable object at the coordinates (0, 0, 0).
6-Apr-2000
	- Eric Sunshine made the following changes:
	    - Fixed several Texinfo mark-up errors in cctest.txi.  Slight
	      structural reorganization.  Rewrapped source Texinfo to fit
	      within 80-columns.
	    - Fixed a significant number of Texinfo mark-up errors and related
	      problems in 3dsprite.txi.	 Added much missing mark-up.  Renamed
	      nodes to ensure uniqueness within entire manual.
	    - Removed all of the binary crud from the EPS files which Seth
	      added to the Texinfo documentation, and which was inserted by
	      the image conversion application which he used.  Now the images
	      are viewable on NeXT.
	- Andrew Zabolotny fixed/optimized the new INI file saving code.
	- Created new file apps/walktest/walkdbg.cpp which will eventually
	  contain all debugging code from WalkTest.
	- Added new db_octree command to draw the outlines of some level of
	  octree nodes. This is useful for debugging.
	- Added 'const' to DrawLine in iGraphics3D.
	- Added new csBox3 constructor.
	- Experimented further with solid-plane octree center selection.
	- Thomas Hieber did some fixes for the MSVC port again.
5-Apr-2000
	- Jason Platt did some fixes after Jorrit's changes.
	- Small fix in csInifile for Borland BCB4 as suggested by
	  Brandon Ehle.
	- Added Borland makefile made by Brandon Ehle.
	- Changed csPoly2DEdges to use csSegment2 instead of csEdge.
	  Removed csEdge.
	- Simplified csBspTree2D.
	- Added -Wunused -W to linux makefile to get more warnings.
	- Andrew Zabolotny made the following changes:
	    - Updated geometry loader. Now really handles TEXTURES (...)
	      and LIBRARY () keywords.
	    - Some updates to iWorld and iLoader interfaces.
	    - Fixed an alignment bug which appeared since the
	      last modification of csendian on processors that require
	      strict alignment.
	- Restored old way to generate octree because it takes forever
	  to compute now.
	- Michael Ewert added collision response for articulated bodies.
	  Doesn't work perfectly, but it is a start (still some bugs).
	- Norman Kramer added saving/loading to/from iFile for csIniFile.
4-Apr-2000
	- Fixed several occurrences of 'delete' that should be 'delete[]'.
	  Reported by Paul Snively <psnively@earthlink.net>.
	- Restored DrawPixmap in OpenGL which Gary Haussmann accidently
	  removed.
	- Some further debugging on the c-buffer cube.
	- Made sure that the octree used by CS is always the same
	  by doing 'srand (12345)' before generating the octree. This
	  makes debugging a lot easier.
	- Added new csSegment2/csSegment3 to csgeom. There are a 2D and
	  a 3D line segment. Modified csgeom to use segments when
	  appropriate.
	- Changed csBox to csBox2 to be more consistant with the
	  other 2D/3D classes in csgeom. Also renamed csPlane to csPlane3.
	- Split of csVector2 and csVector3 in new files vector2/vector3
	  instead of math2/math3.
	- Split of csMatrix2 and csMatrix3 in new files matrix2/matrix3
	  instead of math2/math3.
	- Split of csPlane2 and csPlane3 in new files plane2/plane3
	  instead of math2/math3.
	- Moved IntersectPolygon from csPlane2 to csIntersect2 to join
	  the other intersection routines there.
	- Switched to FastSqrt for sprites after discovering that FastSqrt
	  is nearly three times faster compared to sqrt on my computer.
	- Also switched to FastSqrt for lightmap calculation.
	- Added new csBspTree2D to csengine. This is a pure 2D BSP
	  tree for manipulating segments. This will be used to try out
	  a new technique to select an optimal (or near optimal) splitter
	  point for the octree. I have observed that this point can make
	  a big difference on performance.
	- Fixed a bug in csSegmentArray. Forgot to add a virtual
	  destructor implementation.
	- Implemented way to try to improve octree generation by testing
	  for solid space intersection. Still have to investigate if it
	  is actually working ok though.
	- Robert Bate updated a few files so that they compile with the
	  new csgeom changes.
	- Robert Bate also fixed a bug in QInt24 on non-intel platforms.
	- Robert updated the project files for Macintosh.
3-Apr-2000
	- Andrew Zabolotny did the following changes:
	    - Fixed the problem with gfxldr crashing in plugins. Removing
	      the default (empty) destructor of csImageLoader helped. It
	      seems that during static object creation the destructor is
	      registered with atexit() which crashes because the shared
	      libs are no longer present in memory.
	    - Re-implemented the csendian.h file. Now it depends on the
	      CS_XXX_ENDIAN macros and are inline (thus much faster). The
	      file csendian.cpp is not longer required.
	    - Added the outline of iLoader interface.
2-Apr-2000
	- Norman Kramer moved cursor creation to happen in windowed mode
	  only (Glide).
	- Further work on c-buffer cube (i.e. debugging).
	- Implemented csPoly3D::Project?Plane with ? X, Y, and Z. These
	  functions will project a 3D polygon onto an x-aligned plane
	  as seen from a given point (similar to perspective projection).
	- Fixed bug in the c-buffer and coverage mask cubes. The IsFull
	  function was incorrect. It returned true if only one of the
	  faces was full.
	- CBufferCube is almost working correctly now. It is already
	  a lot faster than the coverage mask cube (about two times
	  faster) but there are still some bugs causing faulty lighting.
1-Apr-2000
	- Implemented system independent way to format a harddisk.
	  This can be used if the game detects cheating (for example)
	  or just at random for making stuff exciting in general.
	- Added iSystem::BreakHardware() function which tries (in
	  a system independent way) to find ways to break the hardware
	  permanently. I implemented this for Linux and Unix in general
	  and provided a dummy empty function for the other ports.
	- Gary Haussmann added empty DrawPixmap() definition to fix
	  'non-defined' loader errors. Did Andrew add this to the declaration?
	  (editors note, there must have been a mistake here because Andrew
	  not only added this to the declaration but also provided a
	  full working implementation which Gary now destroyed).
	- Gary also pushed part of the geometry transform (the perspective
	  projection part) into the OpenGL transform matrix, so the
	  perspective projection will be hardware accelerated if possible.
	  Still need to push the world->camera transform into hardware,
	  however. Also, no clipping is done so meshes may look odd. Fog is
	  also semi-broken.
	- Norman Kramer fixed a glide2/3 version clash.
	- Paul Garceau did another updated for Cygnus/Win32:
	    - Added 'if defined(__CYGWIN32__) to enable Unix path separator for
	      Cygwin.
	    - Added 'if defined' to enable COMP_GCC/OS_WIN32 memory allocation
	      <malloc.h>.
	    - Disabled __NEED_OPENDIR_PROTOTYPE for COMP_GCC.  COMP_GCC doesn't
	      need it.
	    - Enabled __NEED_GENERIC_ISDIR for Cygnus for OS_WIN32 (Cygwin32)
31-Mar-2000
	- Greatly simplified the new infinite renderer. Also removed
	  a unix dependency.
	- Further fixed static linking for line and software renderer
	  so that they can actually be together in the same static
	  executable.
	- Andrew Zabolotny did the following changes:
	    - Fixed a long-standing bug somebody introduced in fpu80x86.h.
	      FPU control word was loaded with garbage, and (for me) it
	      switched to single-precision mode (which was very bad and it
	      segfaulted).
	    - Re-implemented QInt(), QRound()/QInt16/QInt24 (using same old
	      technique but at least I understand how it works now).
	    - Changed poly_fill to not crash due to stack overflow anymore.
	- Norman Kramer fixed a small include problem in glide.
	- Significantly optimized lighting startup calculation if
	  -recalc is NOT given. for dmburg this improved from 51.5 seconds
	  to 6.8 seconds on my system. Lighting calculation with
	  -recalc did not change.
30-Mar-2000
	- Added static compilation support for line renderer and new
	  infinite renderer.
	- Added new infinite 3D renderer for statistics gathering. This
	  is a theoretical infinite speed renderer with which you can
	  exactly time what work the engine is doing and what the
	  maximum theoretical FPS for the engine is.
	  This renderer doesn't even create a window so it is not
	  interactive at all. This means that you have to prepare a
	  bit in order to use it. First start with a normal renderer
	  and go to some spot that you want to benchmark. Press shift-C
	  there to record the position (in 'coord'). Then quit and
	  restart walktest with the following parameters:
	    walktest level -video=infinite -exec=perf.scr
	  perf.scr is an example script that will turn on the c-buffer,
	  restore the camera to the location, render a number of frames
	  and then quit CS.
	- Added -overdraw commandline option for the infinite 3D renderer
	  so that you have additional testing for the overdraw ratio
	  per frame. The overdraw ratio is the ratio of drawn pixels
	  compared to the number of screen pixels. A ratio of one means
	  no overdraw. A ratio less than one means underdraw (i.e. not
	  all of the screen is rendered). Note that since the default
	  clipper in CS is actually slightly less than the screen size
	  you will get something like 0.98 also even if you have perfect
	  no overdraw.
	  Note that overdraw testing SLIGHTLY increases the infinite
	  3D renderer processing time so this means that performance
	  might go down a little.
	- Added -fastmesh commandline option for the infinite 3D
	  renderer which simulates a renderer that has hardware accelerated
	  transforms. In other words, DrawTriangleMesh and DrawPolygonMesh
	  will not do any transformation from world->screen space anymore
	  as it happens when -fastmath is not used. Note that this
	  invalidates the accuracy of the overdraw testing. So you should
	  probably not combine both options.
	- Added argument to 'perftest' command for the number of
	  performance iterations.
	- Norman Kramer did a few small changes to glide.
	- Paul Garceau did some updates to the MingW makefile.
	- Andrew Zabolotny did the following changes:
	    - "-gamma=#" option works again (for software renderer, of
	      course). Alas, other renderers still lack gamma support.
	    - Gamma has now the correct direction. E.g. 2.0 for a brighter
	      image, 0.5 to darken the image, not vice versa as it was
	      before. wouter@ppp14.dialup.cs.vu.nl told me Quake has a
	      incorrect direction of gamma too.
	- Eric Sunshine made the following changes to csProgressMeter:
	    - Added a "refresh granularity" setting which allows the client to
	      configure how often the meter is refreshed.  The default is 10,
	      which means that the meter will refresh every 10%, or at most 10
	      times.
	    - Added a "tick scale" setting which allows the client to control
	      the number of units which a single tick mark represents.
	      Default is 2, which means that the meter is represented by a
	      total of 50 tick marks.
	    - Added a Restart() method which both resets the meter and prints
	      the initial tick mark ("0%").
	    - Meter is now displayed via iSystem::Printf() rather than
	      CsPrintf() which means that it is no longer unnecessarily bound
	      to the csEngine library.	An iSystem pointer is passed to the
	      constructor at creation time.
	    - Documented all public methods with Doc++ style comments.
	    - Now explicitly prevents overflow of its refresh buffer.
	- Martin Geisse contributed a small update to the documenation.
29-Mar-2000
	- Fixed a bug in yesterdays bugfix on CompressShadowFrustrums.
	- Fixed a bug which caused sectors using STATBSP to work wrong when
	  the sector has less than 150 polygons.
	- More work on visibility doc. The first draft is now finished.
	- Andrew Zabolotny did the following changes:
	    - Fixed a few things in MazeD.  All polygons are now unnamed by
	      default, unless you give them a name.
	    - Made Home/End go to top/bottom of lists (Ctrl+PgUp/Dn workso too
	      - like before).  To go horizontally to begin/end use
	      Ctrl+Home/Ctrl+End.
	    - Fixed some minor bugs in MazeD.
	    - Fixed the polygon clipper to not give divide overflows anymore.
	    - Changed QInt back (seems working).
	    - Added X11/gpm/slang libs for Unix when compiling aalib 2D driver.
	- Michael Dale Long did the following changes:
	    - Fixed some bugs that popped up when DECLARE_TYPED_VECTOR was
	      changed to delete it's items.  It resulted in some better data
	      management but broke some assumptions made when writing the code
	      originally.
	    - Added the first three chapters of a tutorial for adding
	      CrystalClear functionality to Simple.
	- Eric Sunshine reverted Norman Kramer's change to the image loaders
	  since it crashed the OpenStep port of CS.  Neither Jorrit, Andrew,
	  nor Eric could understand the reasoning behind the change as stated
	  in the log message.  Furthermore, it broke the rule about not
	  relying upon global objects with constructors in plug-in modules.
	  There is no guarantee that such constructors will be invoked on all
	  platforms which support CS, thus they should be avoided.
	- Eric Sunshine worked around several compilation problems on
	  OpenStep.
28-Mar-2000
	- Added csColor+= operator to add colors.
	- Fixed bug in loader of new mixmode parameter (for sprites).
	  MULTIPLY2 was not correctly parsed.
	- Added new LIGHTING(yes/no) keyword for 2D sprites to enable or
	  disable lighting.  The COLORS keyword no longer disables lighting by
	  default.  Instead it allows you to define extra colors to add to
	  lighting (if lighting is enabled).
	- Eric Sunshine removed numerous, extremely outdated makefile support
	  files from CS/mk and subdirectories.	These files were generally
	  three to six months out of date (which is very significant in
	  CS-time :-).
	- Eric Sunshine fixed the WAV loader so that it works correctly for
	  Jorrit on big-endian Sparc machines.	He also replaced non-standard
	  PORT_BYTESEX_BIG_ENDIAN usage with CS_BIG_ENDIAN.
	- Andrew Zabolotny did the following changes:
	    - Fixed unlighted polygon saving in MazeD.
	    - Temporarily replaced QInt(x) with just int(x) so that we can
	      find out whenever the -recalc problems reported by Jorrit are
	      related to QInt.
	    - Resolved some memory leaks in cssprite.cpp.
	- Fixed a bug which prevented lighting to work properly when using
	  multiple STATBSP levels connected through portals.  This bug was
	  documented actually in the source code :-)
	  (CompressShadowFrustrums).
	- Eric Sunshine fixed several compilation warnings and errors
	  throughout the project.
	- Started document on visibility (not finished right now).
	- Robert Bate did some fixes for Codewarrior and updated the Mac
	  project files.
27-Mar-2000
	- W.C.A. Wijngaards <wouterw@cs.vu.nl> made a small fix to line
	  renderer.
	- Updated docs/incoming/worldfmt.tex to conform to the latest changes
	  related to TEXTURES, 2D sprites, and UVEC/VVEC.
	- Added support for MIXMODE statement to 2D and 3D sprites.  Now you
	  can do things like MIXMODE (MULTIPLY () ADD ()) or
	  MIXMODE (ALPHA (.5)).
	- Implemented support for lighting of 2D sprites.
	- Added support for explicit color setting of the 2D sprite vertices.
	  This can be used instead of the default lighting if you want the
	  vertices to have a fixed color.  Use the COLORS keyword in the
	  loader.
	- Andrew Zabolotny did the following changes:
	    - Further work on MazeD.  Well, it is already useable: you can
	      build simple levels in MazeD (from scratch) without having to
	      change almost anything in the output world file except adding
	      the START(room,x,y,z) statement.	In fact, I already created
	      some simple rooms for testing.
	    - Added normals display in MazeD.  By default this is off, the
	      toggle is operated with 'N' key.	Useful to see from which side
	      a polygon is visible (also useful to see whenever there is a
	      polygon somewhere at all).
	    - Changed default scale and grid spacing to 1 unit instead of 0.25.
	    - Added saving of texture mapping.	Now respective PLANE() and
	      TEXTURE() statements are created (a plane is created only if
	      some texture mapping parameters are used more than once).
	    - Changed default light attenuation from "realistic" to "linear".
	      The "realistic" lighting looks too unrealistic.  :-)
	    - Added vertex compression routine.	 It is run after loading a
	      room that contains a static thing (__static__).  I'm planning to
	      make this function separately available somehow (from menu and
	      maybe via hot keys).
	    - Fixed the routine that computes the polygons that make the
	      convex hull of a room.  It used to grab the wrong polygons
	      sometimes.
	    - When a world file is saved, the "precalc_info" and "lm/*" files
	      are removed since lighting information have to be recalculated
	      anyway.
	    - Added three flags to loader:
		CS_LOADER_NOCOMPRESS
		CS_LOADER_NOBSP
		CS_LOADER_NOTRANSFORM
	      They will tell the loader to not compress vertices, not create
	      sector BSPs and not transform things right after they are
	      loading.	MazeD sets all these flags since otherwise it loads
	      lots of garbage instead of the original world.
	- Eric Sunshine completed Phase Three of Eric's Big Documentation
	  Overhaul {tm}.
	    - Created a custom tool (CS/bin/docconv.pl) for automated
	      conversion of Texinfo to HTML.  Converted files are committed to
	      the repository only if actual changes have been made to the
	      Texinfo master files, so it is safe invoke the tool even when no
	      changes have occurred.  The script takes special care to invoke
	      the appropriate CVS commands to add new files and directories to
	      the repository, and to remove obsolete files.  Furthermore, it
	      correctly handles binary files, such as images, by committing
	      them to the repository with the "-kb" CVS flag.
	    - Enabled automatic conversion of Crystal Space's Texinfo
	      documentation to HTML format.  Conversion occurs every six hours
	      (or four times per day).
	    - Fixed a typographical error and added more content to
	      authors.txi.
	- Michael Dale Long did some fixes for recent change to
	  DECLARE_TYPED_VECTOR and other minor changes to csclear.
25-Mar-2000
	- Optimized sprites a bit more.
	- Changed curve drawing using new clipper routine to get
	  u,v coordinates.
	- Continued work on 2D sprites. It is now possible to draw
	  them. Lighting does not work yet.
	- Michael Dale Long did the following changes:
	    - Modified funConsole so it is now a part of the cscon plugin
	      instead of a separate plugin that depends on cscon (this is
	      how it is already in MSVC).
	    - Changed cctest so it shows a fullscreen startup console
	      but a smaller interactive console so you can still see
	      funConsole's border.
	    - Added funConsole to scf.cfg and made it the default console
	      for cctest.
	    - Changed the way cctest handles mouse input. Should be more
	      friendly on Windows, but I haven't tested it there yet.
	    - cctest no longer automatically captures the mouse. You click
	      on the window to activate mouse capture and press ESC to
	      release it.  Also made the right mouse button move backwards
	      for better control from the mouse.
	    - Increased of the speed of the rockets. It is no longer
	      possible for the user to outrun them. :-)
	- Michael also fixed some VC project files.
24-Mar-2000
	- Norman Kramer did some work on glide3 support.
	- Changes from Michael Dale Long:
	    - Fixed breakage from updated csPixmap.
	    - Fixed duplicate default parameters in csMD5 and ccActor.
	- Added csCBufferCube which is a cube of six c-buffers :-)
	- Tried to use csCBufferCube for lighting instead of coverage mask
	  tree cube.  I was expecting to get more performance for lighting
	  because the c-buffer is faster than the coverage mask tree.  At
	  least that was what I thought! But I discovered that the coverage
	  mask tree implementation does not test for IsFull to stop processing
	  a tree if it is full! This can make a HUGE difference.  So now I'm
	  not so sure that the c-buffer is really better.  This needs to be
	  reevalulated.
	- Removed csQuadtree and csQuadcube usage from the engine since the
	  quadtree is the worst of all 2D cullers we have now.
	- Removed 'quadtree' command from WalkTest.
	- Fixed bug in WalkTest movement code on systems that return negative
	  values for Time() (movement would not be possible on such systems).
	- Thanks to Andrew's changes to the clipper I implemented a new
	  clipper in DrawTriangleMesh.	This also solves the bug when sprite
	  triangles were clipped.  Note that this bug ONLY fixes sprites.  The
	  bug will still be present in the other triangle drawers.  This fix
	  fixes Squawk as well I think.
	- Andrew Zabolotny did the following changes:
	    - Introduced two new keywords in world file (to make them smaller
	      when generating world files automatically such as from MazeD or
	      map2cs):
		UVEC(x,y,z)
		VVEC(x,y,z)
	      They are a replacement for FIRST(x,y,z)/FIRST_LEN(l) and
	      SECOND(x,y,z)/SECOND_LEN(l).  The UVEC() defines the vector of
	      top texture edge, and the VVEC() defines the vector of left
	      texture edge.  The length of the vector is same value that is
	      usually specified with FIRST_LEN and SECOND_LEN.	Also take into
	      account that the vectors start from ORIG() point.	 These two
	      keywords are recognized in PLANE(), POLYGON() and polygon
	      template, BEZIER() and bezier template (although it looks like
	      it is unused there yet) contexts.
	    - Implemented texture mapping saving in MazeD; about 90% done.
	- Started some serious optimization on sprites. In OpenGL with
	  10 sydneys I could only get about 5 FPS. Now I get 13 FPS.
	- Eric Sunshine patched up Texinfo to HTML documentation conversion
	  so that it will work on DOS by moving some of the texi2html options
	  from the command line into the 'init' file.  This works around DOS's
	  128-byte command-line length limitation.
	- Michael Ewert added apply_impulse to the csphyzik library.
	  So you can now apply an arbitrary impulse to a jointed figure and
	  get the proper motion as a result. Nifty!
23-Mar-2000
	- Gary Haussmann added basic support for DrawTriangleMesh(). All
	  triangles are sent via a glDrawElements() call.  May crash some
	  OpenGL drivers, although I have not been able to isolate the
	  problem to CS or the GL driver. Transforms are still in software,
	  and hardware transform should wait until the basic drawing code is
	  ironed out.
	- Norman Kramer did some fixes on the csConsole plygin to cursor
	  positioning on pageup/down and fixed some code that caused crashes
	  when the right cursorkey was hit on an empty line.
	- Removed the mk/bcb4 directory. The project files in there are
	  very obsolete and Brandon Ehle is working on native makefile
	  support for BCB4.
	- Andrew Zabolotny did the folowing change:
	    - Moved DrawPixmap() (ex-DrawSprite()) from iGraphics2D to
	      iGraphics3D interface.  From now on iGraphics2D interface is
	      absolutely independent of the 3D driver and can be used
	      separately.  All the mess regarded to getting a pointer to
	      bitmap data has vanished.	 Now DrawPixmap() extracts data from
	      texture handle exactly same way how DrawPolygon, DrawPolygonFX
	      and all others do.  I beg pardon from Direct3D and Glide
	      maintainers since I broke Direct3D sprites again.	 I promise to
	      never break it again, at least in the nearest year :-) I wrote a
	      related comment in respective files near the end (g3dglide.cpp
	      and d3d_g3d.cpp) - look there for more information.  Software
	      driver works and OpenGL driver should work too (at least it
	      compiles okay).
	    - Fixed a minor bug with texture transparency in MazeD.
	- Robert Bate updated the Macintosh project files.
22-Mar-2000
	- Continued debugging work on solid BSP. Still not perfect
	  although I'm getting closer all the time.
	- Added csPlane2::SquaredDistance.
	- Andrew Zabolotny did the following changes:
	    - Removed NeedPO2Maps(), GetMaxAspectRatio() calls from
	      igraph3d. Moved to GetCaps(). Removed unneeded (and simply
	      wrong) stuff from GetCaps(), added PO2Maps and MaxAspectRatio
	      instead.
	    - Instead of G3DRENDERSTATE_ZBUFFERFILLENABLE and
	      ..._ZBUFFERTESTENABLE there is just only one state:
	      G3DRENDERSTATE_ZBUFFERMODE. I've removed the SetZBuffMode()
	      method from iGraphics3D. Now you can do directly
	      g3d->SetRenderState (G3DRENDERSTATE_ZBUFFERMODE, CS_ZBUF_USE),
	      for example.
	    - Implemented G3DRENDERSTATE_GAMMACORRECTION for all modes.
	      In 8-bit mode this is done via palette; in truecolor modes
	      this is done via texture palette remapping. It seems to work
	      pretty fast, although gamma value has different meaning (and
	      effect) in 8-bit and truecolor modes. In return, you can see
	      the lightmaps now with software renderer by turning gamma to
	      something very low (about zero). The black lightmap
	      borders are seen very well with almost white textures. This
	      works only in truecolor modes; in 8-bit modes you will simply
	      see a white screen :-)
	- Norman Kramer did some fixes after Andrews changes (to glide
	  and funcon).
	- Eric Sunshine patched texi2html so that it no longer crashes on DOS
	  when invoking getpwuid().
	- Thomas Hieber did various fixes to make sure everything compiles
	  again after Andrew's changes.
21-Mar-2000
	- Norman Kramer added lines to draw 3D part of console if available.
	  (and made the console window smaller to enjoy the funky console
	  a bit more :)
	- Norman reincluded a method to determine the most recent clipping
	  result. Andrew removed this in his latest batch of changes
	  to the clipper.
	- Norman temporarely disabled optimzed HW_UVZ support because it
	  doesn't work any more after his last cvs update :(
	- Norman also made the various imageloader objects global relative
	  to the library. This way plugins can link the gfxlibrary and use
	  the csImageLoader class. Before this they could link the lib and
	  use it, but if the main prog they were loaded into had link this
	  lib too, the program segfaulted at exit. (the static imageloaders
	  objects were registered a few times and then the destructor was
	  invoked on the same object more than once).
	- Norman added a funky console plugin. It decorates the console
	  with custom borders and background. Run cctest for example and
	  replace in file cctest.cfg stdout plugin with xstdout (make
	  sure you run scfreg before).
	- Fixed a timing bug in WalkTest which caused movement to be
	  very sluggish if you have very high framerates (> 100 FPS).
	  This bug was introduced about 10 days ago.
	- Removed the single use of the GLU library from the OpenGL
	  code. Unfortunatelly this makes an error message less readable
	  but it makes it easier to compile CS on platforms that don't
	  have the GLU library (like mine).
	- Did a lot more work on debugging the solid bsp stuff. I now
	  have a good understanding of what is going wrong. I don't have
	  a good (read 'fast') solution yet. I have decreased the chance
	  of the error occuring right now.
20-Mar-2000
	- Michael Dale Long did a few changes to CrystalClear:
	    - Major update to ccActor.	Sprite code should be fully
	      operational now, including collision detection.  Support for
	      Things is in place but still untested.
	    - Major rewrite of the iEntityManager interface.  Now supports
	      associating data with entities, as well as assigning the data to
	      specific lists, to be used by a given CrystalClear plugin,
	      without the need for plugins to maintain their own data lists.
	    - All the other changes I made but have forgotten about are in
	      here, too.  :)
	- Michael also updated iConsole's SCF version number after Norman's
	  changes.
	- Jorrit removed a warning in simpcons.h.
	- W.C.A. Wijngaards <wouterw@cs.vu.nl> suggested a better comment for
	  csmd5.h.
	- Wouter also suggested a fix to eliminate key lag in the line driver.
	- Wouter discovered a weird construct in inifile.cpp.  Now fixed.
	- Andrew Zabolotny did the following changes:
	    - Re-inspected the polygon clipper.	 The methods were enhanced a
	      little, this also helped to catch a bug with software fog (in
	      Sector::Draw).  It was not too (visually) noticeable, but it was
	      there.
	    - Re-implemented the box clipper.  Now both polygon and box
	      clipper uses same core routine that makes fixing bugs easier
	      (changes are propagated to both clippers).
	    - Added the required functionality to the clipper to be able to
	      clip Gouraud-shaded polygons (and possibly other kinds of
	      polygons) correctly.
	    - Renamed AddFogPolygon into DrawFogPolygon.  No other changes to
	      the interface.
	    - Fixed a serious bug with fog (affected only the software
	      renderer).  The fog in mirrors was not drawn (approach to a
	      mirroring floor in old walktest and you will see).
	- Removed some buggy debug code in the polygon clipper left over by
	  Andrew.
	- Martin Geisse provided new Texinfo conversions for the FAQ and SCF.
	  He also rewrote some of the introduction for the Simple tutorial.
	- Eric Sunshine did some additional mark-up work, made some
	  corrections to Martin's conversions, and performed some further
	  editing of the introduction to the tutorial.	He converted the
	  To-Do section of the document into an Appendix instead of having it
	  be just another section of the Contributing to CS chapter.
	- Benjamin Sprague <sprague@core.com> submitted several patches for
	  the code which interacts with the terrain library.
	    - Fixed a bug in the loader that made the DETAIL() function in the
	      file format not work correctly.
	    - Made the terrain use the z-buffer, and fixed a couple bugs in
	      csTerrain::Draw().
	    - Moved the camera up 2 meters in csTerrain::CollisionDetect().
	    - Updated terrain.zip to use the DETAIL() function properly.
19-Mar-2000
	- Thomas Hieber added proper support for skyboxes in maps without
	  manual sectoring.
	- Thomas also updated the Map2CS documentation.
	- Seth Galbraith added MIPMAP(no) and DITHER(yes) for sky textures in
	  Squawk.
	- Norman Kramer changed the dependency rules again after Andrew
	  changed them the last time.
	- Eric Sunshine completed Phase Two of Eric's Big Documentation
	  Overhaul {tm}.
	    - Created custom Texinfo macro packages which allow the Crystal
	      Space documentation to be built on all supported platforms by
	      taking pathname syntax into account, since none of the Texinfo
	      conversion tools (TeX, makeinfo, texi2html) do so.  These macro
	      packages are contained within the files unixdef.txi, macdef.txi,
	      and dosdef.txi.  These macros must be used in place of the
	      standard Texinfo @include and @image directives for importing
	      other Texinfo file and images.  There are two new core macros.
	      They are @import and @picture, and replace @include and @image,
	      respectively.  Because of the limited macro capabilities of
	      Texinfo, there are actually variations of these macros which
	      must be used depending upon how deeply nested the file to be
	      included resides.	 To include a file which resides in the
	      current directory, use @import; to include a file in an
	      immediate subdirectory, use @imports.  Use @importss for a file
	      two directories deep, @importsss for a file three directories
	      deep, etc.  For example, to include the file "cow.txi" which
	      resides within the directory "foo/bar", replace the old
	      "@include foo/bar/cow.txi" with "@importss{foo,bar,cow.txi}.
	      The same technique of appending 's' to the macro's name also
	      applies to the @picture macro.
	    - Added the cover-documents cs-unix.txi, cs-mac.txi, and
	      cs-dos.txi.  These files should be considered the root
	      documentation file, rather than cs.txi, for a given platform.
	      On Unix, cs-unix.txi is used to build the documentation package;
	      on Mac, cs-mac.txi; and on Windows/DOS, cs-dos.txi.
	    - Replaced all instances of @include with @import{} in the
	      existing Texinfo source files.
	    - Performed a major overhaul of the documentation makefile,
	      docs.mak.	 The makefile has the new targets 'infodoc',
	      'htmldoc', 'dvidoc', and 'psdoc', for generating Info, HTML,
	      DVI, and PostScript conversions of the Texinfo documentation,
	      respectively.  In the future, I would also like to add a
	      'pdfdoc' target but for now all of my work is being done with
	      NextStep, where PDF generation capability is currently
	      unavailable.  (Perhaps I will add 'pdfdoc' during one of my rare
	      forays into Linuxland, unless someone else beats me to it.)  The
	      old targets 'api' and 'doc' have been renamed to 'apidoc' and
	      'devdoc', respectively.  The makefile also goes to great lengths
	      to deal correctly with images which are part of the
	      documentation hierarchy.	This is a highly complex makefile.
	      Please be certain that you understand it thoroughly before
	      attempting any modifications.
	    - When built via the makefile, all generated documentation is now
	      placed within the standard 'out' directory hierarchy.  Depending
	      upon the exact target, the generated documentation will end up
	      in one of either out/docs/dev, out/docs/api, out/docs/info,
	      out/docs/html, out/docs/dvi, or out/docs/ps.
	    - Added the conversion script texi2html to the CS/bin directory
	      along with its initialization file texi2html.init.  This is beta
	      version 1.60 of texi2html.  This version is required for the
	      @import and @picture macros which earlier versions of texi2html
	      are unable to support.  The makefile automatically uses
	      bin/texi2html as necessary.  This version of 1.60 also contains
	      bug fixes made by the maintainer of texi2html in response to
	      many bug reports which I filed.  (Several additional bug reports
	      are still pending.)
	    - Customized texi2html.init to that it does not emit the date or
	      username in the generated output.	 The reason that I do not want
	      this information in the HTML files is that the HTML conversion
	      will be performed and committed to the CVS repository
	      automatically.  If this information was present in the converted
	      files, CVS would consider the files an having been changed even
	      if there were no actual content changes, and that would be
	      undesirable.
	    - Added texinfo.tex and epsf.tex to the standard distribution as a
	      convenience and to ensure that the documentation converts
	      easily and without hassle to DVI and PS.
	    - Began repairing Texinfo mark-up problems.	 Added Emacs "texinfo"
	      mode selection to each file ("@c -*-texinfo-*-).
	    - Performed a full Texinfo conversion on the license file.
18-Mar-2000
	- Added Set/GetMaxProcessPolygons() function to csWorld to control
	  the maximum number of polygons to process every frame. This is
	  mainly for debugging.
	- Added 'db_procpol' command to control this number from the
	  console.
	- Renamed 'maxpol' to 'db_maxpol'.
	- Norman Kramer added a Draw3D() method to iConsole. Call this as
	  last thing before BeginDraw (CSDRAW_2DGRAPHICS) if your console
	  has a 3D part to draw (like border decorations or some nice
	  background effects).
	- Norman also did a fix to the csConsole plugin: cursor shows up
	  now if the console only covers a portion of screen (via
	  SetPosition()).
17-Mar-2000
	- Andrew Zabolotny did the following changes:
	   - Re-implemented bi-linear filtering (enabled by "trilinear"
	     command because "bilinear" enables some kind of bilinear
	     dithering Denis Dmitriev wrote which is still somewhat faster
	     than bilinear filtering) for 16-bit modes.	 Now both 565 and
	     555 pixel formats are supported. Also it is way faster
	     than the old routine Denis wrote (two memory references and 6
	     multiplies per pixel vs 16 memory lookups in Denis' code). On
	     my computer the assembly draw_scanline_map does 23 fps, the
	     "bilinear" code does 18 fps and the "trilinear" code does 14fps.
	     Still useable (60% of no-filtering code speed).
	   - Implemented draw_scanline_map_zfill with bilinear filtering
	     (565 and 555 modes). Now things are also filtered thus the
	     image looks more consistent.
	   - Removed two lookup tables used by the old bi-linear
	     filtering routine. Now software renderer eats 128K less memory.
	   - Fully implemented bilinear filtering for 32bpp. I was able
	     to implement it using same 6 multiplies per pixel, and four
	     memory references. Both zfil and zuse versions are there.
	   - Fixed a bug in archive.cpp that made walktest crash in
	     some cases (if data directory is not under CS but under
	     CS/../data).
	   - Fixed a bug in makedep - it used to parse sometimes
	     incorrectly the C++ "//" comment (if comment is empty, i.e.
	     followed by a newline, the entire next line was skipped).
	   - Re-thought the driver-dependent makedep flags issue. The
	     solution is simple: if your driver needs specific include
	     paths, defines etc during dependency generation, just change
	     the lines:
		$(OUTOS)something.dep: $(SRC.SOMETHING)
		    $(DO.DEP)
	     into
		$(OUTOS)something.dep: $(SRC.SOMETHING)
		    $(DO.DEP) $(CFLAGS.SOMETHING)
	- Michael Dale Long fixed the 'make depend' target of the
	  cctest app.
	- Changed csMath2::Area2, Left, and Right to have csVector2
	  arguments.
	- Eric Sunshine fixed a warning about a floating backslash within
	  a // comment in ddgvec.cpp.
	- Eric Sunshine completed Phase One of Eric's Big Documentation
	  Overhaul {tm}.
	    - Cleaned up and rewrote a lot of the filler material in the
	      Crystal Space manual and updated and corrected much of the
	      existing information.  Also composed new filler material which
	      was sorely lacking and which is needed to bind chapters and
	      sections together.
	    - Cleaned up a lot of the Texinfo mark-up (though a tremendous
	      amount of mark-up repair is still required).
	    - Major overhaul of the logical organization of the Crystal Space
	      manual.  The organization now attempts to take user perspective
	      into account and is especially concerned with the first-time
	      user.
	    - Major overhaul of the physical organization of the Texinfo
	      source files which comprise the manual.
	    - Moved the newly reorganized Texinfo source hierarchy from
	      CS/txidocs to CS/docs/texinfo.  This will be its final resting
	      place.
	    - Created the CS/docs/html directory and populated it with the
	      HTML conversion of the Texinfo manual.  In a later phase of this
	      overhaul, docs/html/ will be updated automatically as the
	      Texinfo master files are modified, so consider this directory
	      read-only.  It was manually populated in this instance because I
	      wanted to give people convenient access to the new documentation
	      even in the absence of automated conversion.
	    - Created a README.htm file within CS/docs which acts as a cover
	      page and gateway to the remainder of the documentation hierarchy.
	    - Created the CS/docs/incoming directory which is intended as a
	      temporary holding area for documents pending conversion to
	      Texinfo.
	    - Relocated all non-Texinfo documents (plain text and LaTex) to
	      CS/docs/incoming pending their conversion to Texinfo.
	    - Eliminated the now obsolete CS/newdoc and CS/txidocs directories.
	      CS/docs is now the one and only documentation directory within
	      the CS package.  Hopefully this should eliminate confusion which
	      resulted from the other two directories (and particularly from
	      newdoc), in the past.
	    - Too many other changes to remember. :-)
	- Norman Kramer did a small fix to the csConsole plugin:
	  when first char was typed it crashed because it was trying to
	  append a NULL to a string.
16-Mar-2000
	- Michael Dale Long did some changes to Crystal Clear:
	    - Rewrote ccActor class to make it less prone to errors of
	      confusion. Now subclasses iActor instead of ccEntity.
	    - Fixes for sprite collision detection code within ccActor.
	      However still does not function properly due to unexpected
	      behavior of sprite code.
	    - More cleanup and fixes for various parts of CrystalClear.
	- Fixed additional bugs in csSolidBsp so that it works even
	  better now. It is STILL not perfect but the culling errors
	  are getting rare now.
	- Did a small optimization in csPlane2 for initializing it given
	  two vectors.
	- Fixed a camera transformation bug in cctest.
	- Added csSolidBspCube (a cube of solid BSP trees).
	- Andrew Zabolotny did the following changes:
	    - Completely removed MIPMAP_MODE=nice/verynice. This made the
	      code a bit cleaner and a bit faster (this was checked even
	      during rendering of each polygon). Also removed BLEND_MIPMAP0
	      which was simply ugly.
	    - Fixed the bug with lighmaps and AMBIENT_WHITE=50 (Eric).
	    - Fixed the bug with vertical strips of garbage being displayed
	      in specific places of maze.zip (Eric again).
	    - Added csMatrix2 class to math2d.h. I need it for MazeD
	      (texture mapping).
	    - Fixed a bug in graph2d.cpp that caused horizontal lines to
	      be displayed much slower than they could be.
	    - Further improvement on texture mapping in MazeD. Now
	      correctly reads texture mapping parameters from world file.
	    - Added "show console" menu item to MazeD.
	    - Added per-texture MIPMAP(yes|no) and DITHER(yes|no) option.o
	      I.e. you can write in world file:
		TEXTURE 'red ball' (FILE (/lib/tex/redball.gif)
		    MIPMAP(no) DITHER(yes))
	      Dithering is now by default off in soft3d.cfg.
	    - Fixed the bug with close things disappearing when texelflt
	      is on. Removed "texfilt" command, use "bilinear" and
	      "trilinear" commands instead. Also removed some useless
	      G3DRENDERSTATE's.
	- Fixed line renderer because Andrew broke it a little.
	- Fixed bug in engine/software combination. If a polygon is deleted
	  it will now call a new G3D->RemoveFromCache() function so that
	  the renderer gets a chance to remove all references in the
	  cache for that polygon. Only the software renderer currently
	  implements this (I provided an empty implementation in the
	  other renderers). I don't know if the other renderers need
	  some work there.
	- Again enhanced robustnes of the solid bsp culler.
	- Eric Sunshine fixed a bug in the 'clean' target of walktest.
	- Eric also fixed a number of compile errors and warnings
	  in MazeD.
	- Thomas Hieber fixed 32-bit display mode for the D3D renderer (6.1).
15-Mar-2000
	- Fixed bug in terrain interface to terrain engine. Now passes
	  1/z instead of z. This fixes the OpenGL clipping bug and also
	  makes the terrain appear better now.
	- Fixed the line renderer so that it correctly draws sprites too
	  (i.e. implemented the missing DrawTriangleMesh).
	- Fixed a bug in fakertti.h which could cause compile errors on
	  some compilers (very rare). The problem was that a ';' was used
	  in a define (at the end) but the define was used with another
	  ';' at the end again. Giving two ';'. Apparently some compilers
	  don't correctly parse the null statement.
	- Ok, fixed a number of new bugs which made the solid bsp work
	  better now. Still not bug free though but at least it starts
	  to resemble doing visibility culling :-)
	- Thomas Hieber adjusted several files (csimage.h, txtmgr.cpp, D3D,
	  ...) to CS naming convention (ThisIsAMethod and not
	  this_is_a_method).
	- Thomas also fixed transparency for the D3D 6.1 renderer.
	- Eric Sunshine fixed several errors in the OS/" TexInfo docs.
14-Mar-2000
	- Michael Dale Long did a major rewrite of the iEntityManager
	  interface.  Replaced Entity and Render lists with "associative
	  lists".  A CrystalClear plugin can now have an entity associate
	  itself with the plugin and supply data needed by the plugin, without
	  the plugin having to maintain the list itself and provide it's own
	  interfaces for maintaining the lists.
	- Added csPlane2::IntersectPolygon() to calculate the segment that
	  corresponds with the intersection of the plane and the polygon.
	- Added csSolidBsp::GfxDump() to debug the solid bsp.
	- More debugging on the solid BSP.  It is starting to work much better
	  now but still not finished.  Also added a graphical debugger to help
	  debugging it.
	- Andrew Zabolotny made further improvements to MazeD's texture
	  mapping dialog.  Actually it's almost done, it just does not update
	  the proper mapping parameters of the polys when user presses Ok
	  button :-)
	- Eric Sunshine eliminated several new compilation warnings.
	- Eric also updated new documentation from Martin Geisse.
	- Thomas Hieber fixed an exit-crash bug in the D3D 6.1 texture cache.
13-Mar-2000
	- Further implemented csSolidBsp.
	- Added the new csSolidBsp as a new 2D culler next to the quadtree,
	  coverage mask tree and c-buffer.  I don't expect it to be better
	  than the c-buffer but I'm going to have to test if it works ok.  The
	  main use of the csSolidBsp will be for visibility and maybe for
	  lighting.
	- Added 'solidbsp' command to test the above feature.
	  DON'T DO THIS YET. It will crash CS.
	- Fixed transparency after a change of QInt by Andrew.
	- Andrew Zabolotny did another set of changes:
	    - Serious change: Re-implemented DECLARE_TYPED_VECTOR so that it
	      defines a *correct* overriden vector.  Previously it worked
	      incorrectly, that is, FreeItem() was incorrect.  Because of this
	      declared vectors missed the auto-clean feature.  Note that
	      map2cs used that much (mis-)features of the old
	      DECLARE_TYPED_VECTOR that I had to make a local copy of the
	      old-behavioured DECLARE_TYPED_VECTOR inside map2cs.  Another
	      user of DECLARE_TYPED_VECTOR is Crystal Clear, but I did not
	      seen any manual cleanup of vectors: this is either a memory leak
	      or possibly a design issue.  In the later case Crystal Clear is
	      slightly broken: you should decide whenever you want the
	      auto-clean feature or not, and if not you should override
	      FreeItem() with an empty declaration.
	    - cskeys.h & cskeys.cpp: Two new routines for parsing a
	      free-format string into a keyboard event and vice versa.	Useful
	      for supporting user-defined hot-keys.
	    - I've added four new key codes to csinput: CSKEY_PADPLUS,
	      CSKEY_PADMINUS, CSKEY_PADMULT, CSKEY_PADDIV.  I've implemented
	      support for them in OS/2, DOS/DJGPP, Win32.  Other platforms
	      will have to implement it.  Note that MazeD already uses these
	      keys, so you can use it as a test tool :)
	    - Added fully configurable keyboard support in MazeD.  You can
	      assign any key combination supported by CS to any of more than
	      100 commands.  You can have different layouts in MazeD.cfg file.
	    - Implemented some more of the texture mapping dialog.  Not
	      complete yet but already something to look at :-)
	- Did some serious debugging on the new csSolidBsp. It still
	  doesn't work properly but it is ALMOST working ok now :-)
	- Texinfo update from Martin Geisse.  Conversions for authors.html,
	  cvsguid.txt, and Makefile.txt.  Updated msdos.txi.
	- Eric Sunshine created makefile stubs mk/unix.mak and mk/dos.mak.
	  These stubs each define makefile variables common to a particular
	  class of platforms.  Platform-specific makefiles now include one of
	  these files (if desired) and possibly override the defined values
	  (if necessary).  Also modified all existing platform-specific
	  makefiles to utilize these new stubs.
	- Thomas Hieber removed some warnings from cclear, but still cc
	  doesn't compile any more on Win32. (probably due to andrews
	  changes to DECLARE_TYPED_VECTOR and the conversion of crystal
	  clear to become a real plugin.
	- Thomas also added support for generic zip files to contain
	  textures and made the skybox size behave consistent with its
	  documentation.
	- Thomas removed a warning in MazeD: MSVC complained about kb and
	  command being used without being safely initialised, afer looking
	  at the code, I assume MSVC is right. The code should now be much
	  safer.
	- Thomas fixed the VC project files a little.
	- Michael Ewert added a flag for improved near simultaneous
	  collision response to csPhyzik.
	- Michael also improved catastrophe handing loop (collisions) so
	  it responds when backed up to a point where there is _no_
	  catastrophe (collision).  This is more correct and is how CD
	  packages like SOLID and I-Collide expect it to behave.  Got it
	  working very nicely with SOLID. Email me if you want the
	  SOLID-csphyziks interface code mewert99@yahoo.com.
	- Michael Dale Long did the following changes to CrystalClear:
	    - Initial ccActor code added.  Currently supports loading and
	      manipulating csSprite3Ds and csThings(untested).
	    - cctest has been updated to place a sprite near the player
	      whenever SPACE is pressed.  Requires cctest.zip, which can
	      be found at http://php.indiana.edu/crystalclear/cctest.html
	    - Major cleanup of cctest code.  Could stand some more
	      cleaning, but this reorganization went a long way towards
	      improving readability.
12-Mar-2000
	- Paul Garceau restored several of the changes he did yesterday
	  because his changes are broken.
	- Eric Sunshine further reverted Paul's changes and he also
	  removed a bunch of compilation warnings.
	- Michael Dale Long elminiated made changes to Crystal Clear.
	- Added csPlane2 to csgeom similar to csPlane.
	- Added csPoly2D::Intersect() to intersect with a csPlane2.
	- Added csPoly2D::UpdateBoundingBox().
	- Added a new csPoly2DEdges class and a corresponding
	  csPoly2DEdgesPool. This is a class similar to csPoly2D but instead
	  of using vertices it uses edges.
11-Mar-2000
	- Paul Garceau commited some changes to make the Mingw/NT4 port
	  possible.  Unfortunatelly his changes were based upon a fairly old
	  snapshot of CS and broke things somewhat severely.
	- Thomas Hieber added support for skydome and skybox in Map2CS.
	- Started work on new solid 2D bsp for culling/PVS.
10-Mar-2000
	- Fixed a bug with deletion of sprites.
	- Andrew Zabolotny made the following changes:
	    - Fixed a bug with ALPHA=50 textures in 32bpp modes. It was
	      there from the very beginning. It's strange Seth did not
	      complain about it...
	    - Fixed the bug with unlighted textures being sometimes
	      shifted relatively to lighted versions of same textures.
	      The problem was that IMinU/IMinV was not taken into account
	      with unlighted textures.
	    - Improved the "CACHE=" statement of soft3d.cfg. Now you can
	      use suffixes to specify the units in which you measure
	      cache size. Possible suffixes are "KB", "MB" (for kilo/mega
	      bytes) and "KP", "MP" (for kilo/mega pixels).
	      There is no way to specify cache size in bytes/pixels
	      (what for?)
	    - Phew! Found and fixed a very strange bug that caused at
	      least on OS/2 the GUI window to suddenly jump while dragging
	      if using CSWS. This was caused by the fact that csws calls
	      SetMouseCursor() on each frame, even if cursor
	      shape has not changed (!).
9-Mar-2000
	- Norman Kramer fixed bug in SetRenderState (glide) and added
	  CS_FX_KEYCOLOR mixmode in Glide.
	- Moved include/csengine/colldet/rapid.h to include/csengine.
	- Update from Andrew Zabolotny again:
	    - Fixed a small bug in simple console - with backspace the
	      "virtual cursor" has gone one character behind the start of
	      the string. Thus if you press backspace at the very start of
	      string, you go to position -1. Then if you type any
	      character, it won't be displayed (and perhaps will cause
	      memory corruption).
	    - Fixed sub-texture optimization bug that caused visible parts
	      of textures to not be computed in the texture cache.
	    - Implemented Floyd-Steinberg dithering in csgfxldr library.
	      Added dithering option (-d) to the gfxtest application.
	      Added "DITHER_TEXTURES=yes/no" option to soft3d.cfg file.
	      Note that this option has little effect in most cases (since
	      most texture fit into 256 colors very well); you can
	      see the dithering effect mostly on large colorful textures. Also
	      you can see it on the color wheel in MazeD.
	    - Fixed mipmap selection. Previously it was a bit erroneous,
	      especially for almost-horizontal polygons. Now the formula used
	      is more complex (thus more slow) but it seems absolutely correct.
	    - Fixed "verynice" mipmap selection. Well, it is like the last
	      gasp before death. I'm going to remove verynice mode as a
	      properly implemented "nice" mode looks much better, and is less
	      expensive in texture cache memory terms. Besides, hardware
	      renderers do not support verynice mode at all. Thus it
	      seems useless.
	    - Tried to fix fog in 32bpp modes for NeXT (TOP8BITS_R8G8B8_USED).
	      Not sure it works though (can't test).
	    - Removed the ugly NeXT hack fom MazeD (case Q ...). Hope it will
	      work without it now.
	    - Added "reverse selected polygons" ('V') function.
	    - Started working on texture mapping in MazeD. Very preliminary
	      though.
	- Andrew also fixed two texture mapping bugs (one for unlighted
	  polygons not using the Z buffer and one for unlighted sprites
	  using the Z buffer). These bugs only appeared on 8-bit display
	  modes when NASM assembly is used.
	- Thomas Hieber started support for skydome in Map2CS.
8-Mar-2000
	- Decreased glOrtho setting in OpenGL renderer from 150 to 10 to make
	  Z buffering precision better.	 This breaks the terrain engine on
	  OpenGL right now but we need a better solution for that.
	- Fixed deletion of sprites so that they clean up their entry in the
	  world list at deletion.  So it is now safe to do 'delete spr'.
	- Martin Geisse provided another update to the Texinfo documents.
	- Daniel Fannar Gudbjartsson started cleaning up collision detection.
	- Thomas Hieber fixed the changes from Daniel so that it compiles
	  again on VC.
	- Thomas also updated the VC project files.
7-Mar-2000
	- Added LIGHTING(yes/no) option to skydomes to be able to disable
	  lighting for the generated triangles.
	- Added an array of unsplit polygons to every octree node. This
	  will be used by the PVS but it can also be used for other things
	  (like faster rendering if BSP tree is disabled).
	- Continued work on PVS building. Started work on a new
	  algorithm for computing the PVS. Not functional yet.
	- Norman Kramer enabled gouraud shading in glide.
	- Eric Sunshine added a TEXTURE keyword to the Metaballs config file.
6-Mar-2000
	- Started work on new csSprite superclass for csSprite3D (already
	  done) and csSprite2D. csSprite3D now inherits from csSprite.
	- Added loading of csSprite2D to csParser. csSprite2D still don't
	  have drawing and lighting capabilities right now.
	- Eric Sunshine fixed a bug in the way mdl2spr was walking through
	  argv[].
	- More Texinfo update from Martin to account for limitations of the
	  info format where whitespace is concerned.
	- Fixed several cases where the 'sprites' array in csWorld was
	  being used. With my latest additions it is possible to have
	  both csSprite2D and csSprite3D instances on that list so all
	  code needs to be modified to test for that.
	- Fixed prototype for G2D->DrawBox so that it correctly resembles
	  the x,y,w,h fields that should be passed along instead of
	  x1,x2,y1,y2.
	- Andrew Zabolotny fixed fixed the "virtual method called" problem
	  when calling destructors for plugins from
	  csSystemDriver::~csSystemDriver by implementing iBase directly in
	  csSystemDriver class. The derived system drivers can override
	  QueryInterface (and they do it indeed) to provide additional
	  interfaces.
	- Norman Kramer fixed a bug in loop for search free texture
	  memory blocks (glide).
	- Some changes to Map2CS from Thomas Hieber.
	  Added new options to configure surface properties of polygons
	  (for example mirrors).
	- Thomas also updated the VC project files.
	- Some changes from Norman Kramer:
	    - Added a public LoadImage to the loader/parser.
	    - Added new flags for iTextureHandle. Now you can expicitly define
	      many mipmaps you want to generate.
	    - Glide: fixed behaviour in case that not the usual 4 mipmaps
	      are generated for a texture.
5-Mar-2000
	- Thomas Hieber did some general reworking of polygon handling in
	  Map2CS. Allows a much cleaner way to add specific effects like
	  no lighting or mirrors.
	- Thomas also changed DX by doing a dropback to generic DrawPixmap
	  for DirectX 5. This definitely breaks the DX5 Hardware accelerated
	  driver, but he will probably stop supporting that beast anyway.
	  Thomas thus removed the dx5 hardware accelerated renderer from
	  the project files.
	- Thomas reenabled Startup console text. (Was a wrong
	  implementation for FindRGB in the texture manager base class).
	- The Microsoft sorcerers cast a spell to prevent VC++ from compiling
	  valid C++, so Eric Sunshine derived a counter-spell to undermine
	  their Black Magic.
	- Norman Kramer added a Crop() method to iImage.
	- Eric Sunshine made ColliderType public so that it is possible to
	  call GetType() (which is also public).
	- Seth Galbraith did some changes to sprites again: mergetexels
	  and mergenormals now measure the number of redundant vertices
	  which can be merged. Also commited some disabled code which
	  should actually merge the vertices but seems to have bugs.
4-Mar-2000
	- Thomas Hieber added support for semi transparent and reflecting
	  things in Map2CS, as well as for fog. These changes are based
	  on code which desmond.fletcher@usm.edu, has committed to me.
	- Norman Kramer added an implementation for GetZbuffValue for
	  Glide.
	- Norman also fixed handling of texture cache entries that could
	  not be downloaded to TMU. that caused crashes in sqk1 and blocks
	  program.
	- Thomas Hieber added another bunch of patches by Xavier Trochu
	  for the windows port.
3-Mar-2000
	- Jason Platt removed broken and unused SIMD detection
	  routine from terrain engine.
	- Renamed csSprite2D to csPixmap and renamed G2D->DrawSprite
	  to G2D->DrawPixmap. This is to make room for a new csSprite2D
	  that will be a real engine object and thus interact in a 3D
	  world.
	- Thomas Giesel <skoe@freenet.de> supplied a patch to enable true
	  full-screen support by the BeOS OpenGL driver.
	- Eric Sunshine updated the csPython plug-in so that it once again
	  builds following recent changes to SCF.
	- Eric Sunshine removed the last of the dangerous code in ddgmatrix.h,
	  which made unportable and potentially unsafe assumptions about the
	  exact layout of the structure.
	- More Texinfo updates from Martin Geisse.
	- Started implementation of csSprite2D for the engine. Not working
	  right now.
2-Mar-2000
	- Norman Kramer completely rewrote the glide texture cache
	  handling. It now holds alphamaps too. On single TMU systems the
	  tex memory is now properly shared between tex,light and alpha
	  maps. Halos do work now.
	- Seth Galbraith probably fixed a bug in the loading of MDL
	  models to sprites.
	- Fixed bug with lightmap black borders in levels like dmburg
	  or other STATBSP levels. The bug fix is actually a small
	  reversion to the old code which is not that good but for the
	  moment is is visually more pleasing at least.
	- Fixed bug with manual mipmap selection setting which could
	  cause crashes for very small polygons.
	- Further work on PVS. It is starting to work better now.
	  I managed to find a bad bug caused by multiple inheritance :-(
	- Added csPolygonArrayNoFree which is similar to csPolygonArray
	  but doesn't free the polygon (used by PVS). Note that
	  csPolygonArray (and all other subclasses of csVector) also
	  don't free the polygons automatically!!! This is a bug in the
	  code. The problem is that a destructor of a class will not
	  call the virtual functions of that class but of the superclass.
	  So the DeleteAll() in the destructor will simply use the
	  original FreeItem() causing nothing to be freed. This is a big
	  memory leak right now which we will fix shortly.
	- Thomas Hieber added a patch from Xavier Trochu <xtrochu@yahoo.com>:
	  Proper hardware mousecursor on Win32, bugfix to not call
	  obj->DecRef() if obj is NULL.
1-Mar-2000
	- Norman Kramer did some further code cleanup and preparing for
	  alphamap handling (halos) in glide driver.
	- Michael Dale Long changed add and mult fields in struct pivot to
	  be unsigned long instead of int, and changed the values in the
	  static declaration below to reflect that. This fixes some nasty
	  warnings in GCC, as well as prevents the possibility of
	  overflow errors.
	- Wyatt Miler added background music to Blocks.
	- Continued work on PVS. Still not working properly though.
	- Eric Sunshine fixed the Terrain and Phyziks libraries so that they
	  once again compile on OpenStep (taking into account OpenStep
	  compiler bugs).
	- Eric Sunshine fixed the Big Red Big Endian bug which appeared
	  recently with one of Andrew's Big Changes.  This bug caused CS to
	  display all rendered graphics entirely in red on big-endian
	  platforms.
29-Feb-2000
	- Norman Kramer fixed a divide by zero bug in Glide.
	- Eric Sunshine fixed a compilation bug in MazeD.
	- Updated docs and source to remove dmipmap[123], dyncache, and
	  subcache commands.
	- Continued work on PVS.  The basic things are all there but it is
	  still very slow (using bad algorithm) and not working.  So it is
	  disabled right now.
	- Eric Sunshine fixed bugs in mdl2spr where it neglected to properly
	  quote frame names in output file, which caused a parse error later
	  on when CS tried loading the sprite if the sprite name contained
	  whitespace.
	- Thomas Hieber did some further work on the D3D port.
28-Feb-2000
	- Michael Ewert did some more optimization work op csphyzik.  At least
	  another 2x speed increase overall.
	- Norman Kramer did further fixes on the glide drivers.	 Line drawing
	  works again too.
	- Eric Sunshine rewrote the endian-conversion functions in the BMP
	  loader to work on platforms (such as Sparc and HPPA) which enforce
	  strict-alignment.  On such platforms, it is illegal to attempt to
	  access primitive data types at addresses which are not mulitples of
	  the type's size.  For instance, a 'long' can only be accessed at a
	  memory location which is a multiple of four.	He also cleaned up the
	  palette conversion code a bit.
	- Added a lot of sysdef.h to source files. Removed a lot of sysdef.h
	  from include files. Added tests to decrease the probability of
	  these errors.
	- Eric Sunshine unified use of sysdef.h in NeXT system driver.
	- Eric Sunshine unified use of #include versus #import in NeXT port.
	  Now #import is only used for NeXT-specific headers.
	- Change from Wyatt Miler to allow csSoundRenderA3D::PlayEphemeral()
	  to accept a bool flag for looping the sound. Defaults to false.
	- Received patch from Rene Dudfield <illumen@yahoo.com> for initial
	  networking support to Blocks.
	- Eric Sunshine fixed a problem with 'make depend' on NeXT (with
	  pointers from Andrew).  The problem prevented the .dep files from
	  operating correctly.
	- Eric Sunshine fixed a problem in pixtype.inc which was causing
	  incorrect colors to display in 32-bit RGB mode on NeXT.
	- Andrew Zabolotny added a TYPEDEF_GROWING_ARRAY to csutil.
	- Wyatt Miler is busy adding sound to Blocks.
	- Started work on PVS.
	- Andrew Zabolotny did another reasonably large change:
	    - Removed csPolygonTexture mipmaps from the engine. From now
	      on mipmaps are the fully internal problem of the 3D
	      rasterizer. Removed MIPMAPPED() keyword (retained for
	      backward compatibility but ignored).
	    - Mipmap level selection is based on texel density in the
	      nearest polygon point. Mipmap level 1 is selected when texel
	      density is above 1 texel/pixel, mipmap level 2 is selected
	      when density is above 2 texels/pixel, mipmap level 3 -
	      when density is above 4 texels/pixel. Theoretically the
	      thresholds should be 2/4/8 respectively (instead of 1/2/4)
	      but with the above solution the texture cache usage is
	      lower (lower mipmap resolutions are choosen more often)
	      and the quality is reasonable.
	    - Fixed (actually fixed, not just a work-around) the problem
	      with lighted textures being written past end-of-texture in
	      the texture cache. The problem was that sometimes textures
	      are even smaller than the size of one lightmap cell; in this
	      case we don't need to paint a whole lightcell.
	- Thomas Hieber did some further work to get DX6.1 working again.
	- Robert Bate updated the Mac project files again.
27-Feb-2000
	- Eric Sunshine fixed a bug in polytext.cpp where a recent "patch"
	  following Andrew's "Big Change" broke CleanIfDirty().	 The 'src' and
	  'dst' pointers were incorrectly being incremented by four bytes
	  rather than one byte.
	- Eric Sunshine fixed several additional compilation and run-time
	  problems which resulted from Andrew's "Big Change".
	- Eric Sunshine fixed the LOAD_PLUGIN() macro so that it correctly
	  handles such cases as: LOAD_PLUGIN(&sys, blah, blah).	 Previously,
	  it barfed on the &.
	- Eric Sunshine fixed cctest.cpp so that it actually compiles.
	- Eric Sunshine got the BeOS port up and running again following
	  Andrew's "Big Change".
	- Martin Geisse submitted more updates to the Texinfo documents.
	- Alex Pfaffe changed the far-clipping plane in the OpenGL renderer
	  from 10 to 150.
	- Alex Pfaffe submitted a major update to the terrain library.	This
	  version is now 1-to-1 compatible with his own terrain engine and
	  should allow him to integrate new versions much more easily in the
	  future.  This update also includes some performance optimizations.
	- Eric Sunshine eliminated a fairly significant number of compilation
	  problems in the new terrin library and also rewrote ddgMatrix4 to
	  eliminate an unfortunate 'union' which was accepted by no compiler
	  but MSVC.
	- Thomas Hieber did some fixes for proper texture alignment of maps
	  that use the QuArK extensions of the map format.
	- Thomas fixed BMP loading for proper palette handling. Red and
	  blue had been swapped.
	- Norman Kramer made some fixes on the glide drivers again.
	  Multipass filtering works now (still with some weird lightmap
	  effects). Textured and lit drawing is separated now.
	- Gary Haussmann fixed text rendering with OpenGL. The problem was
	  that the third parameter -- which tells OpenGL the components of
	  data you are passing in -- was '1' when it should have been
	  'GL_ALPHA'.
	  While '1' is a legal value to place here it implicitly says the
	  component you are passing in is the luminance component.  Since
	  we were telling the driver to store only GL_ALPHA components
	  (the seventh parameter) it will just throw away any luminance
	  data we pass into it.	 Only if we pass in GL_ALPHA data (and
	  indicate such by passing in GL_ALPHA as the third parameter) will
	  the OpenGL driver actually pay attention to our data.
	- Gary also added "mipmap hack" to get around inability of the
	  standard CS image to mipmap itself at 1xN and Nx1 sizes.
	  Officially OpenGL requires you mipmap all the way down to 1x1,
	  although many implementations are very forgiving.  However, on
	  standard implementations the texture will not work--that is,
	  you will see blank polygons without textures--unless all the
	  mipmaps are produced.
26-Feb-2000
	- Michael Dale Long fixed Linux OSS Sound Driver to compile again
	  (Printf name change). Still crashes whenever a rocket is fired
	  in walktest.
	- Michael also fixed up CrystalClear and cctest to compile again.
	  Finally removed all warnings about unloaded drivers on exit.
	- Thomas Hieber added support for mirrored textures in QuArK mode.
	  (This problem was pointer out by Desmond Fletcher).
	- Thomas also extended support for light (halos, attenuation,
	  dynamics), added the possibility to assign a name to a sector.
	  Code was provided by Desmond Fletcher. I just did some coding
	  style adjustments.
	- Thomas made further fixes to D3D 6.1 to make it compile again
	  after Andrew's changes.
	- Michael Ewert did some optimizations to csphyzik. Moved some
	  classes around and changed the way data is stored and accessed
	  in matrix classes. Boosted to almost 2x as fast.
25-Feb-2000
	- Fixed software texture cache so that it again allocates the
	  texture cache based on number of pixels instead of bytes.
	- Added optimization to BSP tree traversal so that back-facing
	  polygon lists are not actually considered anymore. This improves
	  performance a few 5-10% for large octree/bsp levels.
	- Fixed assembly in bitset.h so that it is only used with GCC.
	- Fixed software texture cache overwrite bug introduced with
	  Andrew's latest changes. For example, dmburg would not run
	  because of that bug.
	- Increased size of bsp trees to 150 polygons (instead of 100)
	  because that seems to give better results.
	- Eric Sunshine made a few changes to bitset.h.
	    - Eliminated a bug which 'link' had introduced in revision 1.2.
	      His change caused 'src' & 'dst' to be incorrectly incremented by
	      four bytes rather than one byte.
	    - Should now compile with non-gcc compilers.  Now uses a valid
	      lvalue everywhere.
	    - Now compiles on NeXT.  Had to disable assembly for NeXT.
	    - Fixed names of variables 'src' and 'dst' which were used in a
	      fashion exactly opposite of their intended meanings.
	- Experimented with a variable center for the octree calculation
	  (in order to decrease number of polygon splits). This seems to
	  give good results although I have to benchmark it better.
	- Changed statistics printing for polygon trees.
	- Eric Sunshine fixed many new compilation problems of various sorts
	  which showed up following Andrew's Big Change.  CS once again
	  compiles on NextStep.
	- Eric Sunshine updated the documents in CS/txidocs in order eliminate
	  a remarkable number of warnings generated by 'makeinfo'.
	- Eric Sunshine added a new Description() method to csBitSet loosely
	  based upon a PrintAsAscii() method which Rene Dudfield
	  <illumen@yahoo.com> had sent in for inclusion in csBitSet.
	- Thomas Hieber did the first steps to make things work again on
	  Win32. He fixed a lot of compilation problems first.
24-Feb-2000
	- Michael Dale Long did various fixes after Andrew's large change.
	- Wyatt Miler did some fixes to Mac sound drivers.
	- Martin Geisse contributed more updates to the Texinfo documentation.
	- Robert Bate fixed up several compile warnings due to the large
	  change from Andrew.
23-Feb-2000
	- Michael Dale Long did the following changes to Crystal Clear:
	    - More csConsole bugfixes.
	    - Added following new methods to csString:
		- LTrim() - Trims all whitespace from left side of string.
		- RTrim() - Trims all whitespace from right side of string.
		- Trim() - Does both LTrim() and RTrim().
		- Collapse() - Does Trim(), then collapses any interior
		  whitespace to a single space.
		- Also added a Format() function to provide printf
		  capabilities, but it is disabled because the function needed
		  to do the operation safely (vsnprintf) is not available on
		  all the platforms CS supports.
	    - Used new csString functionality to enhance cctest's console.
	    - Fixed a minor compile bug in cspython that cropped up a while
	      back.
	- Andrew Zabolotny did a HUGE update to CVS:
	    - Fully rewritten the texture manager and texture cache
	      implementations. Also the interfaces and the way they work
	      are slightly modified, the goal was to allow csws and
	      engine live together. Also a side goal was to substantially
	      simplify the texture manager, since it has grown
	      stochastically, without future in the mind. It also contained
	      some dead and semi-dead code, which was removed. Overall,
	      the size of libs/cs3d shrinked by about 180K.
	    - It is now possible to register textures dynamically after
	      the world has loaded.
	    - Texture cache has also been simplified (Glide and D3D are
	      broken because of this). OpenGL and software should work.
	    - The subtexture optimization is broken for now. I'll fix it
	      in the future, but for a while you will notice a substantial
	      slowdown with dynamic lights. Also you may notice instant
	      "freezes" when some new lighted texture falls into your
	      field of view. This is okay for a while and will be fixed.
	      In fact, it is a primary todo (besides fixing bugs, of
	      course :-)
	    - Removed obsolete red_color, yellow_color etc from all 3D
	      drivers.
	    - Removed rendundant SetInCache() and IsCached() methods
	      from iLightMap and iTextureHandle. It is simple to detect
	      whenever a texture is in cache by just checking GetCacheData()
	      for NULL.
	    - Added screenshot capability to the OpenGL renderer.
	      Unfortunately, the OpenGL renderer seems broken (at least
	      I get very strange images with the OS/2 software renderer)
	      but the screenshot seems to work.
	      Attention OpenGL 2D drivers maintainers: please make sure
	      your drivers use either 4 bytes or 1 byte pixel format.
	      The 2 bytes per pixel is not supported by the screenshot
	      generation routine. Since pixel format doesn't apply to
	      anything other than screenshot, I don't see a single
	      reason to use formats other than 4 bytes/pixel RGBA.
	      This particularily applies to the Windows OpenGL 2D driver,
	      BeOS OpenGL driver and to the MacOS OpenGL driver.
	    - Added CS_IMGFMT_ANY image format. If you tell csImageLoader
	      to load a image in this format, the image will be loaded
	      in original image format, if possible (i.e. if the
	      original image is 8bpp paletted or truecolor).
	      Modified gfxtest to load images this way.
	    - Removed memheap.* from cs3d/common. The only driver that
	      was using it was software renderer, and it is using regular
	      malloc()/free() scheme now. There is no much sense in a
	      private heap, since the most costly operation when
	      generating lightmaps is the proper lightmap generation,
	      not the memory allocation, which is fast enough in any
	      case. Besides, most OSes have much more optimized
	      memory heap functions than the one in memheap.*.
	    - Created a new class csBitSet. This is just an array
	      of bits. You can set/reset individual bits, strips of bits,
	      the entire array. You can AND/OR two arrays together. You
	      can resize them.
	    - Implemented the dirty matrix for lightmaps using csBitSet.
	      This reduces memory requirements for dirty matrix eight
	      times. Not that much savings but it's not something to
	      completely ignore.
	    - Fully implemented Gouraud and DrawPolygonFX for 8-bit modes.
	      It doesn't look as bad as you could expect :-)
	    - Implemented every missing scanline routine. Full support for
	      32bpp. Implemented a couple of missing routines for 16bpp
	      and 8bpp.
	    - Found a bug in libs/csgfxldr/inv_cmap.cpp. However, I did
	      not had time to find what exactly happens, so if someone
	      (maybe the person who originally introduced the code into CS
	      - G. C. Ewing) can understand how it works, see the comment
	      in include/csgfxldr/inv_cmap.h. Thus I used as workaround
	      5-5-5 inverse colormap in software renderer 8-bit modes (it
	      doesn't look worse, and it's twice smaller (and somewhat
	      faster)).
	    - Changed csTextureList into a object derived from csObjVector.
	      This both makes it simpler and faster (and smaller). To find
	      a texture by name use csObjVector's FindByName (name), for
	      getting a texture by index, use texlist->Get (index).
	    - Textures with transparent colors are mipmapped now.
	    - Tried to upgrade the OpenGL renderer's texture cache
	      according to latest changes. It at least compiles now :-)
	      I cannot check if it really works since from some time it
	      does not work for me anymore. Only the CS logo shows in the
	      top-right corner.
	    - Removed the ugly inclusion of cs3d/opengl/*.cpp from all 2D
	      OpenGL drivers. The textures are cached now during
	      GetMipMapData (), and GetMipMapData () returns a texture
	      handle ready for usage (the texture handle self-caches
	      when GetMipMapData () is called).
	    - Fixed a bug (???) in OpenGL renderer. The docs I have for
	      reference says that third argument to glTexImage2D is the
	      number of color components in passed image (i.e. 1, 2, 3
	      or 4). However all over the place the third argument was
	      either GL_RGB or GL_RGBA which is (from my GL/gl.h) either
	      0x1907 or 0x1908. It is possible that some implementations
	      clamp this value to 4, but the software OS/2 OpenGL just
	      ignores the request. Browsing through Mesa sources also
	      shows I am correct. I wonder how it managed to work
	      before (?).
	    - Replaced csGraphics2D::complete_pixel_format method with an
	      inline method inside the csPixelFormat class. Instead of
	      complete_pixel_format (), call pfmt.complete ().
	    - Fixed two bugs in JPEG loaders: first was related to
	      CS_IMGFMT_ANY and second was causing inability to load
	      grayscale JPEGs.
	- Gary Haussmann removed extraneous include of ext_w32.h in OpenGL.
	- Eric Sunshine eliminated several compilation warnings from
	  ogl_halo.cpp.
	- Eric Sunshine added the line renderer to the default list of 3D
	  renderers built on BeOS.
	- Eric Sunshine fixed bug in parsing of submenu from next.cfg which
	  prevented application menu from displaying on MacOS/X Server.
	- Fixed a memory leak in csVector::SetLength() reported by Denis
	  Dmitriev.
	- Seth Galbraith made a few fixes to the physics library after the
	  large change from Andrew.
	- Norman Kramer did a small fix to the quantize method in csgfxldr.
22-Feb-2000
	- Gary Haussmann fixed another mipmap bug in the OpenGL rasterizer.
	  The problem was that the maximum mipmap level required is actually
	  MAX(log2(width),log2(height)), whereas he thought it was
	  MIN(...,...) instead.
	- Eric Sunshine began untangling the amazing interdependencies between
	  csPhyziks header files in order to allow articula.cpp to compile.
	- Eric Sunshine made further tweaks to csPhyziks to allow the
	  templated linked-list to build on OpenStep.  Mostly this involved
	  moving instance variables to the top of class declarations so that
	  the compiler has seen them before inline methods refer to them.
	- Eric Sunshine fixed a bug in the software texture manager which was
	  introduced several weeks ago and which afflicted 32-bit color mode.
	  The problem was that creation of mipmap level 0 did not respect the
	  csPixelFormat properties of the target system, thus resulting in
	  corrupted colors on some platforms.
	- Simplified the BSP splitter and also added a criterium that should
	  create a tree which is both more balanced and minimizes splits.
	  Unfortunatelly the tree does not seem to be as good with this new
	  splitter in comparison to just minimzing splits.
	- Removed the old and obsolete support for dynamic polygons in polygon
	  trees. This is now supported through other means.
	- Martin Geisse submitted updates to some of the Texinfo documents
	  which improve formatting.
	- Thomas Hieber worked around a workaround from Eric Sunshine in MazeD.
	- Some changes to physics library from Michael Ewert.
	- Daniel Fannar Gudbjartsson did a few small changes to the physics
	  library. He fixed several bugs.
	- Robert Bate updated the Macintosh project files.
21-Feb-2000
	- Martin Geisse submitted more Texinfo conversions of the LaTeX files
	  from newdoc.	These files still need a lot of work, but it is a
	  start.
	- Further sprites changes from Seth Galbraith. He changed
	  3 pointers in csFrame into 2 ints.
	- Eric Sunshine slightly reworked ImagePngFile::Load() load for the
	  following reasons:
	    - Eliminated compilation warnings about variables potentially
	      clobbered by longjmp().
	    - Eliminated a memory leak.	 Was leaking a PNG info structure.
	    - No longer unnecessarily maintains, within the instance,
	      transitory information which is only needed during Load() time.
	- Fixed bug in csPoly2DPool and lightpatch pool which could cause
	  crashes in some cases.
	- Some small cleanup/changes to csTerrain and terrain engine.
	- WalkTest now deletes csView at exit.
	- Eric Sunshine made several improvements to the introduction to the
	  tutorial (though it still needs more work and clean up):
	    - Added a lot of missing mark-up.
	    - Improved formatting.
	    - Corrected errors.
	    - Eliminated obsolete references to COM.
	- Justin Miller <dyad@fuse.net> submitted a first stab at an update to
	  the tutorial to reflect the current state of Simple and CS.  Code
	  is now up to date, but discussion is still lagging behind and
	  inaccurate.  Needs more work.
	- Eric Sunshine performed a very quick conversion from LaTeX to
	  Texinfo on the tutorial update which Justin submitted, but much
	  mark-up is still missing and formatting needs work.
	- Fixed bug with adding of dynamic objects to octree. Now sprites
	  should work well in levels containing STATBSP statement. They
	  were broken for some time.
	- Added extra light to Blocks game screen to avoid the dark
	  side :-)
	- Added 'Start Game' menu entry (suggestion from Eric Sunshine).
	- Fixed rotation of shapes in Blocks so that rotation is relative
	  to camera position. i.e. the Blocks will always rotate the same
	  way no matter where the camera is.
	- Eric Sunshine fixed csGraphics3DSoftware so that it once again
	  compiles under NextStep.
	- Eric Sunshine hacked around a NextStep compiler bug which generated
	  "overflow in implicit constant conversion" warnings from many files
	  in apps/mazed.  This was the one remaining compilation warning which
	  had never been eliminated from the NextStep port, so this is the
	  very first time that the NextStep port compiles entirely warning-
	  free.
	- Eric Sunshine updated his CVS snapshot script so that it is possible
	  to specify distinct values for the number of archive packages, diffs,
	  and logs to keep (rather than using the same value for all three).
	  Dropped number of kept snapshots down to two from three (in order to
	  make more efficient use of limited disk space at Source Forge), and
	  bumped kept diffs and logs up to seven.
	- Eric Sunshine fixed a nasty bug in the PNG loader which caused the
	  image loader to access memory far beyond the allocated palette.
	  This bug was responsible for the crasher which afflicted Windows
	  users when trying to launch MazeD.
	- Eric Sunshine templatized the linked-list class, ctLinkList.	Shhh!
	  Don't tell anybody that I did this.  Now Michael Ewert need not
	  consider the CS guys bullies any longer. :-)	As a happy side-effect,
	  the linked-lists no longer generate a bogus compilation warning from
	  the NextStep compiler.
20-Feb-2000
	- csPolygonSet now also holds a pointer to the parent container and
	  checks if the parent is NULL before being added to a parent. This
	  makes it safe (for example) to add a thing more than once to some
	  sector.
	- Added left/right arrow to menu items in Blocks where you can move
	  the menu item left or right.
	- Michael Ewert fixed a nasty bug in the physiks library. Angular
	  and linear velocity were being used in wrong frame of reference
	  a number of times in various files.
	- Eric Sunshine changed the NeXT 2D driver so that it understands
	  --simdepth=16 (in addition to 15 and 32 which it already understood).
	- Michael Dale Long did some updates and bugfixes to csConsole.
	  Now does input history.
19-Feb-2000
	- Changed novice/average/expert menu in Blocks so that it is now
	  one menu which you can rotate horizontally with arrow left/right
	  (instead of up/down).
	- The separate boardsize menu has also been replaced with a horizontal
	  one.
	- Eric Sunshine enhanced csStrVector so that it can perform both
	  case-sensitive and case-insensitive sorting and comparison.
	- Eric Sunshine fixed cspFileDialog so that it sorts the directory
	  and file lists.
	- Seth Galbraith implemented MergeTexels for sprites.
	- Norman Kramer moved screenshot functionality in Glide driver and
	  also enabled the new DrawTriangleMesh.
	- Thomas Hieber did some more documentation and cleanup of the
	  collision detection code.
	- Thomas also added some fixed to Win32 networking by Eric Wigforss
	  <ewigforss@novametrix.com>.
18-Feb-2000
	- Fixed Z-buffering for sprites. Was broken after the
	  DrawTriangleMesh changes.
	- Added large comment before csSector::Draw() explaining a plan
	  for a new rendering loop.
	- The highscore screen in Blocks shows for what level/play size
	  the highscores are.
	- Michael Ewert fixed a bad bug in articulated body solver.
	- Noah L. Gibbs fixed a set_R bug reported by Thomas Hieber.
17-Feb-2000
	- Seth did some fixes to sprite code again.
	- Added the first versions of the TeXInfo converted docs from
	  Martin Geisse. The new txidocs directory is temporary until
	  the documents are fully converted.
	- Optimized the sprite changes from Seth a bit. Avoided allocation
	  of arrays every frame. The copy of vertices is still there
	  however.
	- Improved both the speed of sprite lighting and also reduced
	  memory usage for every sprite by removing the object_vertices
	  array that could get allocated for every single sprite
	  instance.
	- Samuel <samuel@metalang.softnet.co.uk> contributed a patch
	  to the software and X 2D drivers so that they allow resizing
	  of the window. In principle the same thing can now be done
	  for the other 2D/3D combinations too.
	  The engine will adapt automatically to the new size.
	- Changed score counting in Blocks (based on a suggestion from
	  Andrew) so that score increases as speed increases. At lowest
	  speed the bonus factor is 1 for every score point. At hightest
	  speed the bonus factor is 3.
16-Feb-2000
	- Some fixes to csPhyzik from Michael Ewert.
	- Seth Galbraith managed to almost fix sprites by disabling LOD
	  for now. Skeletal sprites still don't work correctly though.
	- Moved csColor to csutil and csTriangle to igraph3d.h.
	- Started work on DrawTriangleMesh function in iGraphics3D.
	  Not finished right now. The new code is not used right
	  now so it should not hurt anything. I made sure that the
	  non-software drivers still compile (only tested Line3D and
	  OpenGL).
	- Eric Sunshine updated a number of documentation files to reflect
	  the fact that platform-specific makefiles now reside within the
	  CS/libs/cssys tree rather than CS/mk/system.
	- Nearly completed support for DrawTriangleMesh. Sprites now use
	  it (you can still get the old behaviour back if you change
	  the right #if 1 to #if 0 :-)
	- OpenGL and Software now support the generic (unoptimized)
	  DrawTriangleMesh. All other renderers are currently broken for
	  sprites since they don't have a working DrawTriangleMesh
	  implementation (sprites will not show). Check out OpenGL to
	  see how it must be implemented.
	- Note: OpenGL sprites using DrawTriangleMesh don't seem to be
	  textured. I'm not sure why this is yet.
	- A nice consequence of the new DrawTriangleMesh is that vertex
	  fog should be a LOT faster.
	- Eric Sunshine fixed a number of "variable may be used uninitialized"
	  compilation warnings.
	- Thomas Hieber added support for DrawTriangleMesh to D3D 5 and 6.1.
15-Feb-2000
	- Eric Sunshine worked around an OpenStep compiler bug which was
	  triggeredy by ctLinkList.  The compiler generates unlinkable code
	  when an inline method calls a second inline method before the
	  compiler has seen the second method.	A simple textual
	  reorganization of the file solves the problem.
	- Changed the way Blocks counts score:
	    - 10 points for every cube of a shape that falls down.
	    - 1 point for every z-unit that is traversed in high speed
		(space bar down).
	    - PlaneSurface*10*NumPlanes*NumPlanes for every NumPlanes
	      removed at the same time. PlaneSurface is the number of
	      cubes on a plane (i.e. 9 for 3x3).
	    - 800 points if you manage to completely remove all cubes
	      in the play area.
	  In addition to that speed now increases with time and not
	  with the number of removed planes.
	- Changed description of rotation keys in Blocks keyconfig to yaw,
	  roll, pitch.
	- Fixed serious bugs with sprites by using csPoly3D and csPoly2D
	  instead of the csVector subclasses.  Now sprites don't crash but
	  they are still displayed the wrong way.
	- Eric Sunshine eliminated more compilation warnings from the Irix
	  compiler.
	- Robert Bate updated Mac projects.
	- Thomas Hieber updated VC projects.
14-Feb-2000
	- Fixed a bug in highscore handling of Blocks.
	- Fixed rotation center of a few shapes in Blocks.
	- Added highscore GUI for Blocks.
	- Current level is remembered in blocks.cfg.
	- Pause removes view temporarily.
	- Based color of lines in 3D line driver on mean texture color.
	- Eric Sunshine improved integration of the Terrain engine with VFS.
	  Height map files specified via the HEIGHTMAP() keyword in the world
	  file are now loaded via VFS.	He also temporarily added height.ter
	  to terrain.zip since automatic height map generation is currently
	  broken (thus a pre-existing height map is required).
	- Eric Sunshine added documentation to "worldfmt" for new csLoader
	  keywords MERGE_TEXELS, MERGE_VERTICES, and MERGE_NORMALS which Seth
	  Galbraith added.
	- Eric Sunshine fixed the reference to IRC in resources.tex to point
	  at irc.linux.com rather than irc.icq.com.
	- Eric Sunshine performed a fairly major overhaul of mdl2spr, the
	  Quake model conversion tool.	Details are as follows:
	    - Combined the programs mdl2spr (for MDL models) and md22spr (for
	      MD2 models) into a single application.
	    - No longer requires an external "palette.lmp" resource for
	      extracting skins from MDL files, thus simplifying usage.
	    - Cleaned up and organized the project.  Cleaned up the code
	      considerably (though it can still use more cleaning).  Folded
	      out redundant code.
	    - Skins extracted from Quake 1 MDL files are now written as PNG
	      files rather than PCX files, and are thus immediately usable by
	      CS (unlike PCX images which CS can not deal with).  Eliminated
	      the old PCX code.
	    - Added a CS makefile so that it can be built easily on all
	      platforms which are supported by CS.
	    - Improved the documentation and moved it to the standard 'docs'
	      directory.
	- Eric Sunshine fixed warnings on Irix related to extra semi-colons
	  following CSOBJTYPE.
	- Eric Sunshine fixed a couple problems with usage of the 'which'
	  command in unixconf.sh which afflicted the Irix platform.
	- Seth Galbraith changed the arrays of vertices, normals, and vertices
	  in each frame into vectors.
	- Gary Haussmann added halo code written by FragDance.
	- Gary also added extension detection code written by FragDance, with
	  some modifications to support different platforms.
	- Gary also fixed indentation a little and tried to fix some mipmap
	  problems.
	- Norman Kramer did some optimization of the ClipToPlane method.
	- Norman also did an optimization of csMatrix3*=.
	- Eric Sunshine rewrote an optimization which Norman Kramer made to
	  csMatrix3::operator*=() such that it is robust and safe rather than
	  fragile and potentially unsafe (in a multi-threaded environment).
	- Michael Ewert did some changes to csPhyzik:
	    - Catastrophe support added.
	    - Evolve loop moved into ctworld.
	    - Collision detection/response handled by callbacks of the
	      catastrophe system.
	    - Added CD catastrophe manager at init.
	    - Daniel Gudbjartsson pointed out an error in ctMatrix3::cofactor.
	    - No longer multiplying return value by (i,j).
	- Thomas Hieber did further documentation and cleanup of CD code.
	- Thomas also did some small changes to VC project files.
	- Robert Bate made a small fix to csIniFile to compile on Macintosh.
	- Robert also did some other changes.
13-Feb-2000
	- Eric Sunshine performed a fairly extensive overhaul of csIniFile.
	  Except for the lowest level I/O functionality, most methods have
	  undergone radical simplification.  Details are as follows:
	    - Enumeration methods now return convenient iteration objects
	      instead of working through inconvenient call-back functions.
	    - Reimplemented most functionality of csIniFile, itself, in terms
	      of iterators, thus significantly simplifying the implementation
	      by eliminating a tremendous amount of nearly identical
	      copy/paste code.
	    - Modified clients of csIniFile to work through the new iterator
	      objects.
	    - Added missing 'const' qualifiers to several methods.
	- Eric Sunshine re-engineered the way the Apple/NeXT ports generate
	  the application's main menu.	Details are as follows:
	    - Moved the main menu configuration information for all Apple/NeXT
	      platforms to the new configuration file "next.cfg" which is
	      loaded at run-time.  Removed the NeXTMenu.cfg files which
	      hard-coded menu configuration into the application at compile
	      time.
	    - Rewrote NeXTMenu.cpp to load menu configuration from the new
	      configuration file.  Menu related keywords in configuration are
	      now lower-case rather than upper-case as they were in
	      NeXTMenu.cfg.
	- Eric Sunshine added several hundred (or more) missing 'const'
	  qualifiers throughout the project.
	- Eric Sunshine fixed a bug in his CVS snapshot script (snapshot.py).
	  It failed to close the time stamp file after reading it.
	- Eric Sunshine eliminated the monolithic and inflexible organization
	  of the platform-specific system makefiles by removing them from the
	  global CS/mk/system directory and placing them in the proper and
	  respective subdirectories of CS/libs/cssys, thus achieving a more
	  modular configuration.
	- Norman Kramer added code to the clippers to find out wether or
	  not a polygon was actually clipped.
	- Norman also added code to better support hardware renderers. He
	  added code to precalculate u,v coordinates for all polygon
	  vertices. Currently this code is optional (enclosed in defines).
	- Thomas Hieber started documenting the collision detection stuff.
	  This also includes renaming of various member function and
	  attributes.
	- Thomas also removed some dependencies between Crystal Shooter
	  and csgame (csgame contained Crystal Shooter specific code).
	- Thomas also adjusted the license of csgame to LGPL (instead of GPL).
	- Thomas moved a test routine for triangle intersection from walktest
	  to csMath3 (I think this routine is of general interest).
	- Thomas also did a small cleanup of the VC project files.
	- Simon Boily re-enabled multitexturing and fixed some problem with
	  fog.
12-Feb-2000
	- Key config menu scrolls so that it works in low resolution too.
	- Dimension of play area in Blocks is saved in config too.
	- Depending on the height of a block it will change color. This
	  helps for seeing the difference in height if you're looking
	  from top to down.
	- Added first primitive highscore handling to Blocks. Highscore
	  information is also saved to 'blocks.cfg'. There is no GUI
	  yet to view the highscores.
	- Thomas Hieber did some changes to DX5 renderer to make
	  DrawPolygonFX work again (part of the fix was to disable
	  multitexturing, because the renderer does not completely switch
	  back to singletexturing).
11-Feb-2000
	- Made keys in Blocks configurable through blocks.cfg.
	  However, there is still no GUI to change them.
	  Also changed the default keys (qweasd to rotate shape,
	  cursor keys to move shape, del/home/end/pgdn/ins/pgup to
	  manipulate camera, space to drop shape, p to pause, esc
	  to return to menu).
	- Started work on GUI to change keys. Not functional yet.
	- Bad bug fixed in Blocks. When multiple planes were removed
	  at the same time the behaviour of the blocks above was not
	  right.
	- Keys can now be configured at run-time in Blocks.
	- Eric Sunshine eliminated several compilation warnings in csPhyziks.
	- Eric Sunshine eliminated some unsigned versus signed warnings in
	  csClear.
10-Feb-2000
	- Michael Ewert did some fixes in csPhyziks code.
	- Fix to sprite modifications from Seth Galbraith.
	- Fixed sprites so that they at least load again.
	  But they are still completely wrong.
	- Some improvements on Blocks. Added a 3D menu for starting.
	- Made a fix in the rotating menu.
	- Increased speed of falling blocks if score increases.
	- Allowed to both move a falling block horizontally while
	  rotating it. Previously Blocks could only handle one type
	  of movement at the same time.
	- Added one-level queue of keys in Blocks.
	- Increased speed of rotation and movement of blocks a bit.
	- Added a menu in Blocks to change play size to either 3x3,
	  4x4, 5x5, or 6x6 (default).
	- Some general cleanup to D3D code from Thomas Hieber.
	- Thomas also fixed software renderer so that DrawPolygonFX
	  supports all blending modes.
	- Some changes to Glide StartPolygonFX from Norman Kramer.
9-Feb-2000
	- Andrew Zabolotny did some changes:
	    - Renamed DEBUG to CS_DEBUG. On various systems many
	      system-dependent files use the DEBUG macro to do weird things.
	    - Serious fix to SCF. The refcount on factories was going nuts
	      since the last change to refcounts being initialized to zero
	      rather than to one.  Now the warnings on unreleased object
	      instances during application shutdown is indeed meaningful.
	    - Fix to scftutor. The Worm was incorrectly split into two
	      (well, it was correct at the time refcount was initialized to
	      zero).
8-Feb-2000
	- Seth Galbraith contributed big changes to sprite format.
	- Norman Kramer added screenshot support to Glide rasterizer.
	- Michael Dale Long added all the HTML files generated from the
	  LaTeX documentation.
	- Added 'boring' level to Blocks to test out some things.
	- Implemented proper rotation of the blocks. Most of the shapes
	  now rotate around their center.
	- Added top-view to blocks.
	- Added 'Game Over' test to Blocks. So now the game actually
	  ends if you get too high (and you don't need Crack to get high
	  with Blocks :-).
7-Feb-2000
	- Michael Ewert modified phyztest to use new ctVector3 modifications.
	- Fixed bug with Blocks. The rotation check for 'x' was wrong.
	- Michael Dale Long fixed the EntityManager interface to use
	  ULongVector instead of csIntVector for lists of Entity classes,
	  since they are declared ULong.
	- Robert Bate updated the Macintosh project files.
6-Feb-2000
	- Michael Dale Long stomped some minor bugs in csConsole. Added
	  support for left/right arrow key movements.
	- Michael also fixed a bug in csString with the Insert() calls.
	  Was using memcpy() when the source and destination overlapped.
	  Now uses memmove().
	- Seth Galbraith did some modifications to the documentation.
	- Thomas Hieber fixed csclear by making the typed for ccUID
	  consistent. (Was a mix of signed and unsigned, which caused
	  compiler warnings on MSVC).
	- Norman Kramer made some changes to the Glide drivers so that
	  the compile and load again.
	- Norman Kramer added support for defining planes in libraries.
5-Feb-2000
	- Fixed bug with clipping portals (i.e. portals that clip geometry
	  in 3D; only room.zip has such portals on the spinning cube). They
	  could cause severe crashes.
4-Feb-2000
	- Michael Ewert added new csDVector3 and csDMatrix3 to csgeom.	These
	  are equivalen tto csVector3 and csMatrix3 but they use 'double'
	  instead of 'float'.
	- Eric Sunshine eliminated several compilations warnings and errors
	  from Andrew's changes which manifested on OpenStep.
	- Eric Sunshine worked around OpenStep compiler bugs triggered by
	  several changes to the terrain library.
	- Eric Sunshine eliminated the very lengthy pause and disk thrashing
	  which occurred between the time "make" was typed and the time
	  anything actually began to build.  The problem was caused by several
	  unnecessary extensive scans of the CS directory tree for files which
	  are only needed when building documentation.
	- Eric Sunshine removed all of the documentation building targets and
	  configuration information from the global makefiles (where it did
	  not belong) and moved it into a new makefile "doc.mak".  The
	  existing "doc" and "api" targets should continue to work correctly.
	  However, the other documentation targets which Brandon added almost
	  certainly do not work anymore and will probably require some
	  tweaking by someone who actually has access to the required tools.
	- Eric Sunshine moved the binary packaging script for NeXT from
	  CS/libs/cssys/next to CS/bin.
	- Thomthee Besset <Besset@sugar-land.dowell.slb.com> submitted a
	  patch for several MSVC project files which remove obsolete COM junk
	  from Release mode.
	- Andrew Zabolotny added some header files mumbo-jumbo to avoid
	  repeated #defines of M_PI on OS/2.
	- Seth Galbraith added MERGE_TEXELS, MERGE_VERTICES and MERGE_NORMALS
	  world format tokens. Began implementation of vertex and normal
	  merging (currently only counts unique vertices). Added LoadFrame
	  method to csLoader (gets csFrame* from a frame number).
	- Michael Ewert made some code format changes.
	- Michael also switched csphyzik library to using csVector3 or
	  csDVector3. It is still aliased as ctVector3.
3-Feb-2000
	- Seth Galbraith changed sprite loading in csParser so that
	  csSpriteTemplate::MergeTexels is now called to eliminate duplicate
	  texel maps.
	- Eric Sunshine temporarily removed Seth Galbraith's new call to
	  csSpriteTemplate::MergeTexels() from csLoader since MergeTexels() is
	  buggy and results in deferred memory corruption at termination time.
	  The problem is that MergeTexels() causes the merged texels[] arrays
	  to be deleted multiple times.
	- Eric Sunshine rewrote several bit-sets used by the terrain engine so
	  that they are now implemented via safe and portable bit masks rather
	  than unsafe and unportable unions.  This fixes the known problems
	  with big-endian machines without resorting to special-case hackery.
	- Andrew Zabolotny did a huge update again:
	    - Re-written csgfxldr library:
		- Renamed iImageFile to iImage.	 An iImage not always
		  originates from a file.
		- Added paletted images support.  On a call to
		  csImageLoader::Load you can tell loader whenever you want
		  CS_IMGFMT_PALETTED8 format or CS_IMGFMT_TRUECOLOR (see
		  iimage.h).
		- Added alpha channel support.	There is a bit called
		  CS_IMGFMT_ALPHA that can be combined with above to load RGBA
		  images or paletted + alpha channel separately.  Also there
		  is another "image format" called CS_IMGFMT_NONE that can be
		  combined with CS_IMGFMT_ALPHA to load just alpha channel.
		- Added Heckbert quantization routine.	This is a very fast
		  algorithm for converting truecolor images into paletted ones
		  (by the way, my routine converts about 3.200.000 pixels/sec
		  on my good old P5/166).  The routine is useable even
		  separately from CS (its not CS-related at all).  No wonder
		  mpeg players are able to compute palette for MPEG videos in
		  each frame.
		- Improved SGI image loader support.  Now loads encoding-type
		  3 images too.
		- Improved most other image loaders.  JPEG loader now converts
		  to 8-bit paletted images internally if required.
		- Removed PCX write support. Anybody cries? :-)
		- Added PNG write support.  You can write truecolor and
		  paletted PNG files, just pass an iImage pointer.
		- FAST! mipmap computation.  Removed Blend() method.  Only one
		  MipMap() (of two) method remains.  Mipmap step 0 is the
		  blended image, mipmap step 1 is a 2x2 scaled texture, 2 -
		  4x4, 3 - 8x8.	 When mipmaps are scaled down, the average of
		  2x2, 4x4, 8x8 blocks of pixels is taken.  The speed seems
		  about 42 256x256 RGB blended mipmaps (level 0) per second.
		  Level 1,2,3 mipmaps are created much faster naturally (~150,
		  ~200, ~400 per second).
	    - Modified the 3D renderers.  Just two mipmap modes are supported:
	      MIPMAP_NICE and MIPMAP_VERYNICE.	UGLY and DEFAULT are gone.
	      Made required modifications to let them work with the new iImage
	      interface.  Added ScreenShot () method to iGraphics3D interface.
	      Only software renderer implements it though.
	    - Changed walktest.	 Now it does PNG snapshots at any bit depth
	      (with software renderer only).  The OpenGL driver could possibly
	      use glGetPixels() for this.
	    - Changed csparser.	 Removed lots of csWorld * passed all over the
	      place.  Made one global static csWorld * variable instead.
	      Moved all private methods under "private:", just three methods
	      are left to be public.
	- Eric Sunshine fixed several problems which were introduced with
	  Andrew's changes and which prevented compilation on NextStep and
	  OpenStep.
	- Eric Sunshine fixed up the NeXT ports so that they can now use GNU
	  getopt_long() and consequently removed the CS_NO_GETOPT_LONG flag
	  from scfreg.cpp.
	- Thomas Hieber fixed several of the apps after Andrew's big changes.
	- Andrew implemented a cool Ascii-Art {R} {tm} display.	 -d or
	  --display options.  Default size 79x24, you can enlarge for more
	  pleasant results if you use a larger console (with -d79,40 for
	  example).
	- Eric Sunshine added the 3D line driver to the default list of
	  drivers built on the NeXT platforms.
2-Feb-2000
	- Large update to terrain engine from Alex Pfaffe.
	    - Now renders 3000 triangles instead of only about 1000.
	    - Large speed increase (from 6 FPS to about 17 FPS in software).
	- Added convenience functions SetFog and DisableFog to csPolygonSet.
	- Blocks screen fades from black.
	- Eric Sunshine fixed several compilation warnings regarding unused
	  variables and assignments of float or double to integer in the new
	  terrain code.	 He also fixed a problem where a comparison against a
	  single-bit 'bool' field failed to work correctly on platforms which
	  do not define a native 'bool' type.
1-Feb-2000
	- Improved demo screen for Blocks again.
	- First block in demo is now actually random.
	- Changed 'ESC' key in Blocks so that it now goes to the
	  startup screen.
	- Camera is put at the correct position after starting.
	- When a dynamic light is deleted (with 'delete') it will now
	  remove itself from the world.
	- Eric Sunshine fixed several compilation warnings and errors in
	  simpcons.h and cssprite.cpp which afflicted MSVC++.
	- Made the colors for Blocks a little nicer.
	- Fixed bug with camera position in Blocks. Uninitialized variable.
	- Dynamic light for Blocks startup screen works again.
	- Blocks writes out score now.
	- Blocks unpauses correctly when you restart game while paused.
	- Added visible raster to Blocks to help see where a shape
	  will fall.
	- Eric Sunshine fixed a couple problems with handling of key input
	  in the Win32 driver in the absence of DirectInput.  The ESC key
	  was generating multiple key-down events, and the Return key was
	  generating two key-down events with distinct key codes.
	- Blocks uses correct FindRGB to look for colors.
	- Fixed bug in Blocks so that shapes cannot be stranded partially.
	- Michael Dale Long added MSVC project files for cscon, csclear,
	  and cctest. Fixed some various problems with the previous three
	  for compiling under MSVC. Important fixes for Simple and
	  csConsole for running on some platforms. Added a new csutil
	  file to cspace so PhyzTest will compile under MSVC.
31-Jan-2000
	- Eric Sunshine fixed unixconf.sh so that it correctly captures
	  and interprets output of 'which' command.
	- Received new version of Blocks from Void <glitia@texnet.ro>.
	  This version works almost correctly. Planes disappear when filled
	  up and there is a score. Many bugs have been fixed.
	- Cleaned up the Blocks code.
	- Added a lot of new shapes sorted by difficulty.
	- Added difficulty setting to Blocks.
	- Added animated demo screen.
	- Fixed a few small other bugs in Blocks (camera is now
	  properly initialized when a new game starts).
	- Eric Sunshine fixed the makefile for the csPython plug-in so that
	  it correctly locates the Python library within PYTHON_LIB and
	  also eliminated its reliance on the hard-coded 1.5 library name.
30-Jan-2000
	- Michael Dale Long made some fixes for the new console,
	  particularly in page/up page down scrolling support. Fixed
	  problem with console not properly handling 2D drivers that
	  disregard the update rectangle passed to Print().
	- Michael also modified the declaration of ccUIDs to be more
	  NeXT-friendly.
	- Michael updated the GGI driver keyboard handler.
	- Seth Galbraith started big changes to csSprite3D class. He
	  separated 3D coordinates from normals and texture coordinates
	  for faster and more flexible sprites. csFrame and csSpriteTemplate
	  are affected.
	- Eric Sunshine fixed support for testing CS_BIG/LITTLE_ENDIAN
	  on BeOS.
	- Noah L. Gibbs fixed a Precalculate() bug in csPhyzik. Rigid bodies
	  should now spin properly even if queried by rotation matrix
	  instead of quaternion rotation.
29-Jan-2000
	- Fixed remaining memory leak in dynamic object/polygon tree
	  structure.
	- Added statistics printing after building polygon tree.
	- Fixed bug in statistics calculation of octree/bsp trees.
	- Experimented with bsp tree building. It appears that the
	  bsp tree builder in CS isn't that good. We need a better one.
	  Tried to add detection for convex sets of polygons but this
	  doesn't seem to work very well right now.
	- Norman Kramer added copy constructor in csVector3 and changed
	  "real" to "double" in csQuaternion.Normalize().
	- Noah L. Gibbs added state_alloc and state_free features to
	  ctWorld and to ctEntity.
28-Jan-2000
	- Michael Dale Long did a major update to the CrystalClear input
	  system. Added a lot of support for the new csConsole plugin.
	  cctest now sports a simple but interactive console. More
	  bugfixes in the csConsole backspace handling code, as well.
	  Support for prompts that shouldn't be deleted by backspacing.
	- Michael also fixed fixed scftutor.mak (didn't include libraries
	  in the proper order).
	- Did some fixes to the dynamic objects in polygon trees.
	  Now it appears to work correctly (i.e. not crash) but I think
	  there are still a few memory leaks. Still investigating.
	- Noah L. Gibbs added AddCurrentItem() method to csDLinkList to
	  allow insertion at the current location rather than only at the
	  list beginning.
	- Robert Bate fixed Mac port again and updated the project files.
27-Jan-2000
	- Update to some docs from Wyatt Miler.
	- Andrew Zabolotny improved the test for endianess.
	- Added 'delsprite' console command to delete a sprite.
	- Improved new Line3D renderer a bit (double buffering and
	  faster key handling). Also cleaned up all unneeded stuff.
	- Eric Sunshine eliminated a few warnings in Map2CS and MazeD.
	- Add more debugging info for dynamic objects in polygon trees.
	  Still hunting a bug.
26-Jan-2000
	- Michael Dale Long added DeleteAt() to csString to delete a range
	  of characters within a csString.
	- Michael also updated csConsole backspace handling to use
	  DeleteAt().
	- Update to api.tex from Wyatt Miler.
	- Fixed 'default' mipmapping setting.
	- Made a new 'line3d' 3D renderer and a linex2d 2D driver. This
	  is for wireframe rendering.
	- Simon Boily restored multipass support in the Direct3D 6.1
	  renderer (more efficient, faster). He also implemented vertex
	  caching/batching in PolygonFX (roughly 30% speed increase)
	  it could be tweaked for better performance. He fixed PolygonFX
	  so that it can do flat/gouraud polygons and he added more
	  hardware caps checking.
25-Jan-2000
	- Major update to the csConsole plugin from Michael Dale Long.
	  He added csConsoleInput, cursor functionality, implemented
	  proper redraw rectangle support and support for testing most
	  console functions is integrated into cctest.
	- Did some extra cleaning up of the new dynamic object code
	  (for polygon trees). Seems to be working properly now.
	- Added view frustum to csRenderView. Use this for quickly culling
	  octree nodes. This should speed up rendering a bit.
	- Brett Hall <swizin@rain.org> fixed OpenGL and software 2D
	  drivers for X Windows so that they don't crash when the windows
	  are closed by the window manager.
	- Thomas Hieber did an update of the VC project files.
24-Jan-2000
	- Noah L. Gibbs fixed Normalize() method in csQuaternion.
	- Noah also got rigid bodies pretty much working in his demo code,
	  checking in new fixes and features.
	- Fixed several bugs in new system to add dynamic objects to
	  polygon trees. It is nearly working correctly for sprites now.
	- Andrew Zabolotny commited some changes:
	   - Improvements to MazeD:
		- added texture library dialog (Ctrl+L)
		- "Window" menu has been split into "View" and "Window".
	   - Improvements to software 3D renderer:
		- mixmode is now history (always true_rgb) for compatibility
		  with hardware renderers (also less dead code).
		- improved much palette computation algorithm for 8-bit
		  modes (even maze.zip doesnt look THAT bad anymore :-)
		- todo: fix texture cache problem, fix truecolor modes
		  to not depend on the 256-color palette, switch truecolor
		  modes to "one palette per texture" mode (i.e. "private").
	- Andrew also added a 'palette on/off' command to the console.
	- Update to VC project files from Thomas Hieber.
22-Jan-2000
	- Gary Haussmann checked in a fix from Thomas Skoldenborg to
	  prevent 3Dfx/Mesa drivers from dying horribly upon exiting the
	  program. The problem was that glXDestroyContext was not being
	  called.
21-Jan-2000
	- Michael Day continued his work on the autoconf system
	  in CS.
	- Andrew Zabolotny updated inline assembly in software renderer
	  so that it is gcc 2.95 compatible.
	- Andrew also fixed the makefiles so that the define NO_ASSEMBLER
	  when compiling with MODE != optimize.
	- Thomas Hieber added some changes to the Direct3D port contribued
	  by Simon Boily <simonb@telisphere.com>. He added multitexturing
	  support and render state caching (more efficient render state
	  changes). The multipass code has been removed. This will be
	  rewritten later. So lightmaps will currently not appear on
	  hardware without multitexturing.
	- simonb@telisphere.com also fixed the detection code for windowed
	  mode.
	- Thomas Hieber adjusted project files for network demo provided
	  by Eric Wigforss <ewigforss@novametrix.com>, I did some
	  adjustments too, to make debug and release mode consistent.
20-Jan-2000
	- Michael Day started adding an 'autoconf' system to CS. He
	  started his work with the csgeom library.
	- Thomas Hieber updated Windows documentation.
	- Changes to csphyzik from Noah L. Gibbs.
19-Jan-2000
	- Noah L. Gibbs added Normalize() method to csQuaternion.
	- Continued work on adding objects in polygon trees. Started
	  converting the old dynamic polygon concept for sprites to
	  the new way.
	- Thomas Hieber fixed Map2CS so that curves are now the right
	  format.
	- Michael Ewert fixed a problem in the csphyzik library.
	- Robert Bate made a change to the Mac port so that the mac event
	  is dispatched to the right code if it is not handled by the 2d
	  driver. The Mac projects are also brought up-to-date again.
18-Jan-2000
	- Further work on objects in polygon trees.
	- Michael Dale Long did a major update to the csconsole plugin.
	  iConsole and csConsole are finished for the time being. Updated
	  csSimpleConsole to be compatible with the new interface. Added
	  some test cases to cctest for testing the new console code.
	  Added start of iConsoleInput interface.
	- Gary Haussmann added change by Fragdance Galore for
	  transparent-enabled text characters.
	- Gary also fixed/enabled code for mipmapping in hardware.
	  There were some problems since CS may not generate enough
	  mipmaps to "fully populated" the mipmaps, from an OpenGL point
	  of view.
	- Further work on Map2CS by Thomas Hieber. He removed WriteKeys
	  from CIWorld and moved it to CCSWorld. This method is indeed
	  specific and should not need to be overridden in other export
	  formats.
	- Thomas also added 'phyztest' to the VC project files and made
	  some adjustments to it.
	- Robert Bate did some adjustments to the Mac project files.
17-Jan-2000
	- Eric Sunshine fixed a couple termination-time crashers in the BeOS
	  2D drivers which resulted from invalid calls to virtual functions
	  from within the destructor.
	- Thomas Hieber added support for different output formats to
	  Map2CS. The first one is an XML output format created by Petr
	  Kocmid <pkocmid@atlas.cz>.
	- Jorrit cleaned up the new quaternion class a bit.
	- Norman Kramer corrected the cleanup of the quaternion class.
	- Noah L. Gibbs fixed another serious bug in csPhyzik. Found out
	  why velocities weren't working on ctPointMass -- fixed it?
	  Serious error in the way Newtonian points were calculating
	  derivative. Still looking for that bug in my test-case, though,
	  so this may still have serious defects.
16-Jan-2000
	- Norman Kramer added a new quaternion class to csgeom.
	- Noah L. Gibbs did some further work on the csPhyzik library.
15-Jan-2000
	- Fundamental change to the polygon tree class structure (i.e.
	  BSP and octrees). csPolygonParentInt no longer exists. Instead
	  a csSector is always assumed to be the parent container for
	  the polygon tree. This makes the code easier to understand and
	  also somewhat more efficient (less virtual functions needed).
	  The disadvantage? BSP and octrees are now tied to sectors.
	- I also dropped support for the old BSP keyword (now only
	  STATBSP is supported). This breaks the mirror.zip level (but
	  it is easy to fix). The loader will print out an error message
	  if BSP is still used.
	- Removed debugging code which was accidently left in the
	  c-buffer/coverage mask tree culling. This could cause a significant
	  drop in performance.
	- Thomas Hieber did some fixes on csgame. He reenabled proper
	  keyboard handling.
14-Jan-2000
	- Noah L. Gibbs (angelbob) modified and test phyztest to work with
	  his changes of the csPhyzik inheritance hierarchy.
	- Noah added linked list for ctEntity class.
	- Noah changed ctPhysicalEntity to have ctEntity as a parent class.
	- Michael Ewert did some other changes to csphyzik.
	- Samuel <samuel@metalang.softnet.co.uk> fixed interpolation for
	  triangles so that there are no more unexpected crashes (in
	  some cases viewing sydney.zip could crash CS).
	- Samuel also made some changes to the skeleton sprites so that
	  the skeletal animation system is now completely separate from
	  csSprite3D.
	- Further work on dynamic objects in polygon trees.
	- Andrew Zabolotny updated his memory debugger so that it now works
	  on Linux/ELF, DJGPP, and any other platform with GCC >= 2.8.0.
	- Eric Sunshine upgraded documentation for the snapshot.py script.
13-Jan-2000
	- Some further work on dynamic objects in polygon trees.
	- Eric Sunshine made a fairly major change to the CVS snapshot
	  generation script.  It now generates packages based on a
	  configurable list of archivers.  The current list now includes bzip2
	  and zip in addition to the original gzip.  The 'diff' is no longer
	  generated from an older existing package (since it is now difficult
	  more to decide which older package to choose).  Instead the diff is
	  performed based upon time-stamp of the last run, and the timestamp
	  is stored in a file in the log directory.
	- Thomas Hieber fixed the DirectX 6.1 renderer to make it work again.
12-Jan-2000
	- Added double linked list code from David Durant to csutil.
	- Did first work on new system to add dynamic objects to
	  polygon trees.
	- Andrew Zabolotny added documentation for his memory debugger.
	- Michael Ewert did a few changes to the phyzik library. He added
	  an NxN matrix class (ctMatrixN).
11-Jan-2000
	- Changes from David Durant to implement a new callback for sprites
	  which is called when the sprite is REALLY drawn. He also added
	  an actor pointer (csObject) to csSprite3D.
	- Andrew Zabolotny added -f option to awk debug script so that it
	  can be invoked manually.
	- Eric Sunshine made minor VFS-related corrections to INSTALL.Win.
	- Norman Kramer fixed rle8 encoding and added little/big endian
	  support in bmp loader class.
10-Jan-2000
	- Andrew Zabolotny has CVS write access again! :-)
	- He also fixed the change that Jorrit made with regards
	  to SetName in csObject.
	- Norman Kramer removed the test for important colors in 256-color
	  bitmaps (BMP loading).
	- More updates to Map2CS from Thomas Hieber.
	  The default sector is now generated using black flatshading
	  instead of using an randomly selected texture. (this will
	  also help a little bit with performance).
	- Thomas also updated the Win VC project files to reflect Jorrits
	  latest move of files.
	- Eric Sunshine made a few minor VFS-related corrections to
	  docs/INSTALL.NeXT-Binary.
	- Norman Kramer added support for RLE8 encoded BMP-files.
8-Jan-2000
	- Michael Dale Long added support for configurable colors using
	  the iTextureManager to iConsole.  He also removed all dependencies
	  on the 3D graphics driver from the csConsole plugin.
	- Eric Sunshine changed the CVS snapshot script so that it also
	  creates a symbolic link to the most recent 'diff' file in addition
	  to creating a link to the most recent package.  (This feature was
	  requested by a user.)
	- Fixed bug in the destructor of csPolygon3D. After freeing some
	  of the internal resources functions were called that still dependent
	  on those resources. Solved this by setting the pointer to the
	  resources to NULL so that those functions can detect that case.
	  This fixes the bug when CS is exited while a dynamic light
	  is active.
	- Moved all 2D cullers to libs/csengine/culler (coverage mask
	  tree, quadtree, and c-buffer).
	- Also moved quadtree.cpp from csgeom to csengine/culler.
	- Created new csengine/polytree and moved BSP and octree stuff
	  from csgeom to csengine.
	- Thomas Hieber did some changes to Map2CS. Polygons are
	  only added to sector walls that are part of 'worldspawn'.
	  Some other additional fixes and changes.
	- Thomas also added documentation for map2cs.
	- Thomas also fixed a crash on exit related to the console.
	- Michael Ewert did some changes to csphyzik. He added body_a
	  and a 'work in progress' class.
	  Also added get_I_inv and get_angular_P.
7-Jan-2000
	- Fixed colored static lighting for OpenGL and Direct3D.
	- Some fixes on lightmap deallocation. Now use DecRef()
	  consistently. Unfortunatelly this still doesn't seem to fix
	  the 'pure virtual method call' at exit.
	- Michael Dale Long created the new iConsole interface and cscon
	  plugin.  Modified csSimpleConsole and other code that used it
	  (walktest, csgame) to use it instead of the old csConsole.
	  The new cscon still needs a lot of work, so csSimpleConsole
	  will continue to work as before.
	- Eric Sunshine fixed several minor problems which cropped up with
	  the introduction of the new iConsole and cscon.
	- Robert Bate updated the Macintosh project.
	- Norman Kramer updated documentation for the new world file
	  features he added (TEX_SET, TEX_SET_SELECT).
	- Small fix to new console from Seth Galbraith.
6-Jan-2000
	- Thomas Hieber added iterators for nodes and keys.
	  Added simplified access to keys and node by name and classname.
	  Added "FindName", Added methods with more intuitive names (in
	  csobject library). (The old ones are still there...)
	- Eric Sunshine added Append(char) to csString.	 He also added a
	  constructor which accepts a (char).
	- Michael Dale Long fixed several bugs in makefile.py.
5-Jan-2000
	- Some further changes on support for curves in visibility system
	  (unfinished).
	- Eric Sunshine updated some out-of-date information in people.tex
	  and added missing information.
	- Eric Sunshine elmiminated some compilation warnings in world.cpp.
	- Eric Sunshine worked around an OpenStep compiler bug which was
	  triggered by the new csengine/planeclp.h file.  The compiler
	  generates unlinkable code when an inline method calls another inline
	  method which the compiler has not seen yet.  A simple textual
	  reorganization of the file fixed the problem.
	- Eric Sunshine eliminated signed vs. unsigned comparision compilation
	  warnings in map2cs.
	- Thomas Hieber added support for game specific data in the world
	  file (KEY and NODE).
	- Thomas also did a few further changes on Map2CS.
4-Jan-2000
	- Improved style a bit in new planeclp.h.
	- Started work on including curved surfaces to the visibility
	  algorithms.  This initially means that csThing::Merge() now actually
	  also merges curved surfaces.
	- Changed STATBSP() option so that it ignores things that contains
	  curves and doesn't try to add them to the static bsp.	 This means
	  that curved surfaces will now appear correctly even if you use
	  STATBSP() but they will still not use the visibility algorithm (i.e.
	  they will be slow).
	- Thomas Hieber removed setting for manual sectoring in map2cs.	 It is
	  now always on.  Textures are also exported with different name and
	  filename.
	- Thomas also fixed the release mode name for the Windows OpenGL 2D
	  driver.
	- Eric Sunshine modified the CVS snapshot-generation script to patch
	  the CVS/Root files ("cvs1" --> "cvs.crystal.sourceforge.net") such
	  that the resulting snapshot can be used later for an anonymous cvs
	  update.
	- Eric Sunshine fixed DECLARE_GROWING_ARRAY() so that it is compilable
	  on all platforms.  Recent changes to appease MSVC (the addition of a
	  floating semi-colon) were not grok'd by the NextStep compiler, so the
	  issue was resolved by eliminating the problem altogether. :-)
	- Eric Sunshine applied a patch to blocks.cpp from Artur Biesiadowski
	  <abies@pg.gda.pl> to correct a bug where the orientation of a piece
	  was different on-screen versus in-memory.
	- Eric Sunshine fixed several compilation errors in map2cs.  He also
	  eliminated some compilation warnings.
	- Eric Sunshine removed all of the remaining, obsolete references to
	  csregsvr from the documentation.
	- Eric Sunshine fixed the makefile for scftutor so that it once again
	  generates plug-in modules usable by NeXT.
	- Eric Sunshine patched up linking of the CrystalClear plug-in so that
	  it is once again usable on NeXT.
	- Eric Sunshine fixed a bug in cctest where it was corrupting the path
	  to the level file (as in "/lev/largelarge").
	- Eric Sunshine fixed a bug in the CrystalClear plug-in where it failed
	  to initialize its embedded physics configuration member.
3-Jan-2000
	- Thomas Hieber fixed a few things to make CS compilable again with
	  MSVC.
	- Norman Kramer added new keywords to world format TEX_SET and
	  TEX_SET_SELECT.  Using these new keywords it is possible to use
	  different texture sets for different instantiations of a thing
	  template.
2-Jan-2000
	- Removed another 16 bytes from csLightMap.  This change also makes
	  dynamic lighting more efficient (slightly).
	- Started cleaning up csPolyTexture.
	- Optimization in the software renderer (CreateDirtyMatrix).
	- VERY significant memory optimization.	 Instead of storing four
	  lightmap structures (and lightmaps) for every polygon we now only
	  store one.  The four lightmaps were the same anyway.	I don't know
	  why there should be four.  This is left-over from a long time ago.
	  This optimization means we save 4800 bytes for every lightmapped
	  polygon with a 16x16 lightmap.
	- Changes to Map2CS from Thomas Hieber (new lightscale option).
	- Norman Kramer added a farplane to csCamera object such that
	  everything is clipped to that plane.	Default is no clipping.
	- Eric Sunshine wrote a script (bin/snapshot.py) which generates
	  snapshots and diffs of the CVS repository.  The script currently
	  runs daily and deposits the snapshots at:
	  ftp://crystal.sourceforge.net/pub/crystal/cvs-snapshots.
1-Jan-2000
	- My computer is still working :-)  And so is Crystal Space.
	- Removed 16 bytes from every csLightMap.  This means a saving of 64
	  bytes for every lightmapped polygon since there are four lightmaps
	  for the four mipmap levels.
	- Removed another 12 bytes from csLightMap.
	- Small optimization in coverage mask tree.
	- Seth Galbraith did some changes on map2cs so that textures with no
	  data are not saved.  If no texture is found then a new texture is
	  created (with no data) with the name from the map file.
	- Seth also updated DJGPP help system with some correct links.
31-Dec-1999
	- First significant memory optimization in csPolyTxtPlane. The
	  camera transformation fields are removed and calculated only
	  when needed (right before rendering). This improves both rendering
	  speed and memory usage (48 bytes less) for every lightmapped
	  polygon.
	- Shaved another 16 bytes from the csLightMapped class by removing
	  the duplicated lightmap pointers.
30-Dec-1999
	- Continued work on new csPolyTxtPlane class.
	- Added IncRef/DecRef to csPolyPlane and csPolyTxtPlane.
	- Added 'const' to some of the functions.
	- Moved csPolyTxtPlane from csPolygon3D to csLightMapped
	  where it belongs. This has three advantages: a) it is cleaner,
	  b) it is faster for gouraud shaded polygons since there is less
	  transformation work to do, c) it is more memory efficient for
	  gouraud shaded polygons.
29-Dec-1999
	- Started work on separating the plane component from the
	  texture mapping stuff. This is so that we can preserve memory
	  for polygons that use gouraud shading.
	- Thomas Hieber added support for Quake 3 Arena in map2cs.
	  Support for curved surfaces is still lacking.
28-Dec-1999
	- Thomas Hieber did some changes to DDraw support.
	- Eric Sunshine updated the CVS configuration so that a notification
	  message is sent to recipients of the new mailing list
	  crystal-cvs@lists.sourceforge.net whenever chnages are committed to
	  the repository.
27-Dec-1999
	- Further changes to MazeD and handling of flat colors from
	  Norman Kramer.
	- Jorrit partially reverted a change from Norman because it
	  was broken.
25-Dec-1999
	- Norman Kramer did some fixes on MazeD.
	- Seth Galbraith updated documentation for compiling CS
	  with DJGPP.
24-Dec-1999
	- Some changes to Python scripts from Michael Dale Long.
	- Brandon Ehle did some updates to the BCB4 project files.
23-Dec-1999
	- A fix on static linking for OpenGL.
	- Glide drivers are disabled by default on Linux (reenable them
	  in mk/system/linux.mak if you want).
	- Michael Dale Long added a clock skew fix to cctest.
	- Brandon Ehle added iSCF support for use with plugin dlls.
	- Some extra optimizations on coverage mask tree stuff.
	- Eric Sunshine disabled dead-key processing on NextStep in order to
	  prevent the Window Server from stealing keystrokes intended for
	  Crystal Space.
	- Eric Sunshine reworked covtree.cpp to some extent in order to work
	  around a NextStep compiler bug where it was failing to emit
	  implementations for the template methods of csCovTreeNode, which
	  resulted in "undefined symbol" link errors.
	- Eric Sunshine worked around NextStep compiler code-generation bug
	  which resulted in corrupt computation of coverage mask by
	  covtree.cpp when full optimization was enabled.
	- Gary Haussman made the following OpenGL fixes:
	    - Added flags to link in GLU when user is not using Mesa.
	    - Added implementation to read Z-buffer values from the
	      framebuffer.
22-Dec-1999
	- Eric Sunshine fixed the project so that it once again compiles on
	  NextStep following recent changes.
	- Started work on coverage mask tree cube for lighting.
21-Dec-1999
	- Changes from Michael Dale Long to CrystalClear. Added initial
	  iPhysicsConfig interface and implementation.	More code to come.
	  It looks like we'll be able to use csPhyziks but I'll have to
	  look more closely at it. Also some updates to the documentation.
	- Change to build.pl and cssh.py from Brandon Ehle.
	- Changes to MazeD from Andrew Zabolotny.
	- Finally found the remaining bugs in the coverage mask tree
	  implementation. I think the time is coming close that I can
	  actually start benchmarking and optimizing the thing (which
	  will be needed).
	- Eric Sunshine fixed several compilation warnings which were recently
	  introduced into the engine.  Mazed also once again builds on
	  OpenStep.
	- Did a significant optimization on the coverage mask tree
	  GetIndex() routine. This routine alone was responsible for 50%
	  of total processing time (in 640x480 OpenGL). So optimizing
	  GetIndex is not bad.
	- Made the coverage mask tree resolution independent. Note that
	  currently the tree is limited to 1024x1024. This is not a
	  strong limitation but just me being lazy :-)
20-Dec-1999
	- Thomas also added support for resizing textures to power of
	  two coordinates in the engine.
	- Thomas did some changes to the Dx6.1 renderer so that it
	  almost works.
	- Thomas also fixed some problems in the OpenGL renderer (crash
	  on exit, wrong texture remapping).
	- Thomas fixed a memory overwrite bug in loadlib.cpp for Windows.
	- Thomas also updated VC project files a bit.
	- Michael Dale Long added support to allow core dumps when a crash
	  occurs on UNIX. Not enabled by default. See mk/user.mak for
	  details.
	- Fixed a bug in specifying the gouraud shading coordinates in the
	  world loader.
	- Andrew Zabolotny made the following changes:
	    - New memory debugger. The old memory debugger is still
	      available (the one which requires CHK) but might be removed
	      in the future. The new debugger is enabled by specifying
	      MEMDBG=1 on the make command line. The new memory debugger
	      is completely autonomous (doesn't require recompilation).
	      The new debugger gives most information when program is
	      compiled in debug mode. For checking if you have memory
	      leaks it is not needed to compile with debug mode.
	      The debugger uses a file called memdbg.map that contains the
	      memory map of the examined executable. The format is pretty
	      simple; currently memdbg.map can be created only using `nm'
	      program; the output of nm is parsed with a simple awk program
	      (bin/memdbg.awk) and written to memdbg.awk.
	      The program being debugged can be run through bin/memdbg.sh
	      script, that will automatically detect whenever the
	      executable has a newer date than memdbg.map and refresh the
	      map if it is the case.
	    - Upon exit memory debugger outputs a log file called (you
	      guessed) memdbg.log.
	    - Fixed a lot of memory leaks that arised due to
	      "scfRefCount = 1" change. There were a lot of places that
	      assumed that refcount is zero, thus they were incrementing
	      the refcount right after allocating an SCF class. They
	      were mostly related to images, lightmaps, textures and
	      texture handles, thus the actual memory leaks were huge.
	      Also fixed a bug with the csPolygonTextureType class, the
	      refcount for it was never initialized thus polygon texture
	      could be freed at the unexpected times, although most often
	      it was not freed at all :-) Also csPolygon3D::GetLightmap
	      used to increment lightmap's refcount, although nobody
	      decremented it after GetLightmap (GetLightmap is used mostly
	      inside 3D driver).
	    - Fixed a bug with curve surfaces in things being never
	      freed upon thing template deletion. The curve surfaces are
	      now stored in a class derived from csVector, thus are
	      automatically freed.
	    - Reimplemented the csObject library. Since the hierarchical
	      child objects are seldom used (we use specialized csVectors
	      for this which is faster and more handy), the csObjTree class
	      was removed at all. All child objects are stored in a single
	      list and the child object iterator just searches
	      for the next object of given type in the list. The GetName
	      and SetName methods have been added to csObject, and the
	      object's name is stored in a pointer right in the csObject.
	      This allows for much faster GetName (previously each
	      GetName involved a new and a delete (!!!)) and also for
	      more optimal memory allocation (there are lots of objects
	      that have nothing but a name - previously an entire csObjTree
	      would be allocated for that).
	    - Also I implemented a much cheaper pseudo-RTTI system that
	      involves no memory allocation at all. Previously some
	      memory was allocated for storing class names that was never
	      freed; this is not the case anymore.
	    - The csObject library simplified a lot; previously it occupied
	      six files with 16K overall size; now its just two files and
	      6K respectively, with absolutely same functionality. The
	      memory cost for a instance of csObject is also lower in most
	      cases (the only case when current csObject will occupy more
	      memory (+4 bytes) is when a object has neither name or
	      child objects).
19-Dec-1999
	- Thomas Hieber updated map2cs with a major change in texture
	  handling.
18-Dec-1999
	- Michael Dale Long added movement fixes to cctest.
	- Thomas Hieber updated map2cs with automatic extraction of
	  textures from WAD3 (Pk3 is to follow).
	- Brandon Ehle fixed the python makefile for multiline &
	  custom postdefine's.
	- Seth Galbraith did some fixes in the allegro 2D driver.
	- Norman Kramer did some cleanup in the glide destructor and
	  now creates mipmaps even for 2d textures.
	- More debugging on coverage mask tree stuff.
17-Dec-1999
	- Moved CVS to SourceForge!
	- Michael Dale Long merged CrystalClear updates into the new
	  SourceForge CVS tree. Added a few more updates to the cctest
	  movement code. Cleaned out some older entity include files.
	  Update CrystalClear and cctest for new Entity interfaces.
	  Added more tolerant world loader code to cctest. Continued work
	  on Entity code.
	- Michael also added fixes from Brandon for makefile.py.
	- Michael added a 2D sprite display fix thanks to FragDance.
	- More debugging on coverage mask tree stuff.
16-Dec-1999
	- Further work on coverage mask tree. It is almost working now.
	  I still have performance problems and occasional bugs. The
	  performance troubles are not surprising since the main function
	  is not good yet.
15-Dec-1999
	- Further work on coverage mask tree stuff.
	- Moved GetConvexOutline from the csOctree class to the
	  csBox3 class.
14-Dec-1999
	- Solved several bugs in the coverage mask tree implementation
	  (it is almost starting to work now).
	- Made several significant optimizations to the handling of the
	  masks.
12-Dec-1999
	- Norman Kramer added support for subrenderers for Mesa.
	- Norman also changed shared object name to match the name
	  in export_table for the OSS sound driver.
	- Norman fixed a small typo in system destructor that caused
	  the 3d and 2d driver not to unregister.
	- Some fixes on the coverage mask tree stuff. Still not working
	  properly although we're getting close now.
10-Dec-1999
	- Thomas Hieber did some small adjustments on the VC project
	  files and added coverage mask tree files.
	- Robert Bate made sure covtree_lut is set to NULL when the
	  world is created.
9-Dec-1999
	- Nearly completed coverage mask tree algorithm. A lot still
	  needs to be done (like fixing the bugs preventing it from
	  REALLY working :-) but it is near working properly now. Added
	  'covtree' console command to toggle the new rendering mode
	  on and off (similar to 'cbuffer', works only on levels
	  prepared with STATBSP()). Lighting does not use the technique
	  yet.
	- Michael Ewert changed physics library:
	    - Multiple simulateous collisions with one object.
	    - Flag set to ignore object that should not be rewound
	      (chain) during collision detection.
	    - Link list pointer added.
	    - body_a removed, it is implied by the object being called
	      with it.
	    - Midpoint method and euler integration added as ODE solvers.
	    - Added state data member.
	    - When state is REWOUND, then all ctPhysicalEntities with
	      flags set as NO_REWIND will not be integrated until no longer
	      in REWOUND state. REWOUND state expires when time passes
	      time when REWOUND was called.
8-Dec-1999
	- Wyatt Miler added plugin info on csclear and csphysics to the
	  documentation.
	- Alex Pfaffe updated the landscape engine with the following
	  modifications:
	    - Replaced ddgVector3 with csVector3.
	    - Optimizations, Reduced memory consumption to 9 bytes
	      per height map location.
	    - Fixed priority function, this stabilizes the terrain a lot.
	    - Increased default triangles to 2000.
	    - Fixed z sorting and y offset bug.
	- Further work on coverage mask trees.
	- Robert Bate updated the instructions for building on Macintosh.
	  Changes for CW Pro5 as well.
	- Robert also updated the Macintosh project files.
	- Fixes to glide from Norman Kramer: mixed up the source versions
	  of glide last night. Here they are compiling again. Moved the
	  iHalo implementation into separate file similar to softx.
	- Brandon Ehle got BCB4 projects in a working state.
	- Thomas Hieber removed ia3duitl.lib from the linker settings for
	  VC projects.
7-Dec-1999
	- Continued implementation of coverage mask trees. The lookup
	  table works and seems correct. The edge test function
	  also works.
	- Brandon Ehle almost got the BCB4 project files working again.
	- Brandon also updated some of the docs.
	- Norman Kramer updated the Glide ports considerably.
6-Dec-1999
	- Brandon Ehle added links to coverage masks in the docs.
	- Improvements to MazeD from Andrew Zabolotny:
	    - Polygon properties dialog (select a/some polys then press 'P').
	    - Some progress in texture manager dialog.
	    - Completely rewritten "snap to grid" mode.
	    - Also fixed the 'Save model' dialog to not complain about
	      directory being invalid (thanks to mayday
	      <may-day@lycosmail.com>).
	    - Added draft view rotation lock (CTRL locks phi, ALT locks theta)
	      (thanks to Norman Kramer).
	    - Lots of other small changes I don't remember now.
	- Andrew also removed the iTextureHandle parameter from
	  iGraphics2D::SetMouseCursor. There is no driver that uses
	  it anyway :)
	- Andrew also simplified the automount feature in WalkTest.
	- Robert Bate updated the Macintosh project files.
5-Dec-1999
	- Continued work on the coverage mask tree. The masks start to work
	  now but there is still a bug somewhere in the calculation of the
	  lookup tables.
	- Michael Ewert added code for collision and impulse response,
	  modified joint friction maximum and replaced refs and assignements
	  of v and w to accessor methods. Michael also enhanced the
	  phyztest demo with an object that bounces off walls and floors
	  (press TAB).
	- Thomas Hieber cleaned up the BMP loader code and fixed the bug
	  that caused black seams in the BMP textures. Thomas also removed
	  some 'unreachable code' warnings.
	- Thomas Hieber added support to Map2CS for directly reading
	  WAD3 files (HalfLife texture archives).
	- Michael Dale Long fixed a tiny bug for GCC 2.95.
4-Dec-1999
	- Fixed CR/LF problems in LaTeX docs from Wyatt Miler.
	- Thomas Hieber added the first version of manual sectoring to
	  Map2CS. It is almost feature complete. Elimination of hidden
	  polygons and other eye candy (like fog or mirrors) is still
	  missing.
3-Dec-1999
	- Fixes to Crystal Clear Physics from Michael Dale Long.
2-Dec-1999
	- Cleanup of LaTeX docs from Wyatt Miler.
	- Michael Ewert fixed bug in physics code by making set_v virtual.
1-Dec-1999
	- Eric Sunshine ported the new halo implementation to NeXT.
	- Eric Sunshine made csClear and cctest work on NextStep again by
	  working around a multiple-inheritence compiler bug.
	- Eric Sunshine removed obsolete COM junk from the Software Sound
	  Renderer.
	- Eric Sunshine fixes the OSS sound driver so that it compiles
	  following Peter Donald's SCF conversion.  (Peter performed the
	  conversion but was unable to test-compile it.)
30-Nov-1999
	- Andrew Zabolotny added new halo support. iHaloRasterizer is gone.
	  iHalo objects are created instead. Added halo support to MazeD
	  (light setup dialog). Looks very nice.
	- Eric Sunshine totally redesigned and rewrote iNetworkDriver and the
	  Socket Network Driver from scratch.  The new design is far more
	  abstract, simpler to use, and (hopefully) applicable to a wider
	  range of applications.  It is also now SCF-compatible.
	- Eric Sunshine patched up the Network Driver Demo to work with the
	  new network driver architecture and to better illustrate its use.
	  He also performed the SCF conversion on it.
	- Eric Sunshine performed the SCF conversion on the Simple Network
	  Manager.  He also renamed types, classes, & constants, and
	  reformatted the source code to more closely follow CS guidelines.
	- Eric Sunshine removed some obsolete COM junk from the sound drivers.
	- Eric Sunshine eliminated a compilation warning in ddgbtree.cpp
	- Eric Sunshine ported the Socket Network Driver to BeOS.  It is now
	  fully functional on this platform.
	- Thomas Hieber did some small fixes removal of warnings to
	  Windows, OpenGL, D3D, sound, networking, and Mazed.
29-Nov-1999
	- Michael Dale Long added initial gravity code for CrystalClear and
	  a temporary fix for a missing file from Andrew's halo changes.
	- Andrew Zabolotny did the following changes:
	    - Fully rewrote halo support in software renderer. The
	      iHaloRasterizer interface has changed much, so it is
	      possible that other 3D rasterizers will compile with minor
	      errors (I tried to do my best to avoid it, but it is
	      anyway possible).
	    - The following enhancements have been made to the halos:
		- Halos are fully supported now in 8 (sic!), 15, 16 and
		  32bpp modes. Besides they should be now much faster
		  since halos consists of just an alpha map now (no texture
		  as before).
		- Many fixes in engine handling of halos. Halos now fade
		  away as expected (do not disappear suddenly) as the
		  light itsel (i.e. the center of the halo) goes off the
		  screen. Also try to launch a rocket into the
		  halo such that the missile will cover the light.
		- Full clipping support. The halos will be now clipped
		  against any complex clipping polygon.
		- Halos have now an "intensity factor" that shows how fast
		  the intensity goes down from maximum.
		- New file in cs3d/common: halogen.cpp. This has nothing to
		  do with chemistry :-) its just a abbreviation of "halo
		  generator". This file provides a routine that will
		  generate an alpha map for a halo given the above two
		  parameters. If somebody cares to fix halo support in
		  hardware renderers (:-) they should include that file
		  into the project files for the respective renderers.
		  The halo support in direct3D driver have not been
		  removed, thus you'll get same halos as before; however
		  it would be much better to add support for the new halos.
28-Nov-1999
	- Some additional work on coverage mask tree implementation.
	- Thomas Hieber implemented the first step to manual sectoring
	  in Map2CS.
27-Nov-1999
	- Michael Dale Long did the following changes to csclear:
	    - Added initial ccPhysicsPlugin code. Collision reaction now
	      works through it.
	    - Improved impluse registration system in ccImpulseManager,
	      but it needs more work.
26-Nov-1999
	- Andrew Zabolotny modified SCF so that object reference counts are
	  initialized to 1 rather than 0.
	- CrystalClear documentation update from Michael Dale Long.
	- Michael Dale Long added initial collision detection to cctest.
	  Right now the entity performs collision detection against all
	  sectors, things, and sprites (oh my :) in the world, and if a
	  collision is detected it aborts the move.  This currently does
	  not apply to rotation, either.  So right now, it is only very
	  rough detection, but it is a major step forward.
	- Eric Sunshine fixed a crasher in SCF which was introduced with
	  Andrew's reference-count modification.  The problem was that the
	  CONSTRUCT_IBASE macro was calling virtual IncRef() from within the
	  object's own constructor, which requires a well-established virtual
	  table pointer.  However, in most modern compilers, the vtable
	  pointer is not established until the very end of the constructor,
	  and in this case, resulted in a crash.
	- Eric Sunshine fixed a conflict between user.mak and config.mak
	  with regards to the PLUGINS variable.	 user.mak considered it a
	  representation of the user's choice of plug-ins, whereas config.mak
	  considered it a representation of the auto-detected plug-ins.	 Thus,
	  the user's PLUGINS choice in user.mak was being ignored.
	- Eric Sunshine removed Brandon's include/csphysics/csphysic.h [sic]
	  since it was both incomplete and entirely unimplemented.  Use the
	  new full-featured and fully implemented csPhyziks library instead.
25-Nov-1999
	- Michael Ewert <mewert99@yahoo.com> supplied a new version of
	  phyztest.cpp, the Phyziks test program.  This version is stable at
	  4-7 FPS (and briefly at 3, but looks wrong).
	- Eric Sunshine fixed a transmogrification bug :-) in the Phyziks
	  library.  The problem was that ctWorld was incorrectly calling the
	  constructor for ctPhysicalEntity (its superclass) explicitly within
	  its own constructor.	For older or non-conforming compilers (such as
	  NextStep) this had the side-effect of transmogrifying the ctWorld
	  into a ctPhysicalEntity, such that all virtual method dispatches
	  went to ctPhysicalEntity rather than ctWorld as expected.
	- Eric Sunshine fixed vfs.cpp so that it once again compiles on
	  MacOS/X server.  Problem was that type of stat.st_mtime on this
	  platform is not time_t, yet it was being passed to localtime() as
	  though it was.
	- Eric Sunshine fixed cctest so that it compiles once again following
	  recent changes which broke it.
	- Brandon Ehle added python debugger.
	- Brandon fixed cspython so that it gives a good error if python
	  is not installed correctly.
	- Michael Dale Long reworked cctest input controls and
	  CrystalClear input plugin quite a bit. Now has better key
	  handling and mouse look capabilities.
	- Update to Map2CS from Thomas Hieber. First partially working
	  manual sectoring.
24-Nov-1999
	- Eric Sunshine fixed a transpostion error in snddata.cpp which was
	  leaking memory.
	- Eric Sunshine fixed some compilation warnings which were recently
	  introduced into csString.
	- Eric Sunshine worked around a bug in the OpenStep compiler which
	  was triggered by recent chagnes to ddgtmesh.h.  The problem occurs
	  when an inline method calls a second inline method before the
	  compiler has seen the second method.	The same bug was also
	  triggered by several files in the new csPhyziks library.
	- Robert Bate started initial sound support for the Macintosh (SCF).
	- Robert also fixed OpenGL for Mac.
	- Robert also did various other changes and cleanups to the Mac
	  port.
	- Alex Pfaffe changed terrain engine so that it no longer needs
	  the ddgQueue class.
	- Updates to documentation from Wyatt Miler (checked in by
	  Brandon Ehle).
23-Nov-1999
	- Robert Bate cleaned up the Macintosh port with relation to the
	  old COM and new SCF.
	- A little more work on the coverage mask tree. I added stubs for
	  the coverage mask tree using templates! That's right! Templates :-)
	  However, their use is still not officially sanctioned since this
	  simple example is hopefully very benign and should not trigger well
	  known compiler bugs.
	- Added a phyziks :-) library to Crystal Space. This library was
	  contributed by Michael Ewert <mewert99@yahoo.com>. Have a look
	  in include/csphyzik and also try out the test application which
	  is included. Press the del and tab key to see two examples.
	- Eric Sunshine fixed a bug in phyztest where it failed to call
	  Initialize() in its immediate superclass, SysSystemDriver.  Was
	  incorrectly sending message to csSystemDriver instead.
	- Eric Sunshine made minor changes to the new csphyziks library to
	  eliminate some compilation warnings and allow it to compile on
	  NextStep.
	- Brandon Ehle fixed the Unreal Map loader so that it mostly works
	  now.
	- Thomas Hieber added patches from Peter Donald for sound. Peter
	  fixed the sound stuff to SCF.
22-Nov-1999
	- Alex Pfaffe added support for Z sorted triangles to terrain
	  engine.
	- Eric Sunshine fixed recently introduced bugs in Simple and PySimp.
	  Each program was bypassing Initialize() of its immediate superclass
	  SysSystemDriver by incorrectly calling csSystemDriver instead.
	- Eric Sunshine fixed the -video option so that it no longer generates
	  warning messages, crashes the application, or tries to load multiple
	  drivers.
	- Eric Sunshine fixed a number of csClear and csPython makefiles so
	  that the targets are only listed if the respective plugins are
	  enabled via the makefile PLUGINS variable.
	- Eric Sunshine removed much of the obfuscation forced upon the NeXT
	  ports by Crystal Space's (now obsolete) COM system.  Thus the port
	  was significantly simplified in some areas and clarity was increased
	  overall.
	- Eric Sunshine re-worked NeXTSystemDriver to implement the
	  iNeXTSystemDriver interface via embedding rather than inheritance
	  in order to work around a NextStep compiler bug which resulted in
	  a crash either at compile time or run time depending upon
	  circumstances.  The actual problem is that the compiler does not
	  deal gracefully with multiple inheritance when a common base class
	  is involved.
	- Brandon Ehle made an Unreal -> CS map convertor using python.
	  It almost works but geometry is still messed up.
21-Nov-1999
	- Michael Dale Long added some changes to CrystalClear:
	    - Fixed rotation skew in cctest.
	    - Added skeleton for writing mouselook code.
	    - Added bool world parameter to iEntity::Rotate(). Specifies
	      whether to rotate according to world coordinates or relative
	      coordinates. Defaults to false (relative).
	    - Fixed bug left by Andrew when he changed scfInterface to
	      struct.
	- Changes to LaTeX docs from Brandon Ehle (and Wyatt Miler).
20-Nov-1999
	- More work on cspython and SWIG from Brandon Ehle.
	- Brandon Ehle fixed the unix load library function to display
	  missing symbols correctly.
	- Updates to CrystalClear and addition of MD5 class from Michael
	  Dale Long.
	- Updates from Andrew Zabolotny:
	     - Small fixes to DOS port (Allegro).
	     - Modified SCF a little such that each SCF class has an
	       associated dependency string. The string format is
	       application-specific, and its the responsability of the
	       application to parse and use it. The scf.cfg file
	       contains the dependency string in the form:
	       class.subclass.subsubclass = library:dependencies
	     - Modified the system driver such that plugins are sorted
	       depending on their dependencies :-) The dependency string
	       is expected to have the format:
	       "class.one, class.two, ..."
	       If the class ID ends in a '.' (i.e. "class.") the class is
	       considered on any other class which's ID begins with that
	       substring. Otherwise a exact string match is performed.
	       For example, the csWorld class (which's id is
	       "crystalspace.engine.core") depends on
	       "crystalspace.graphics3d." (that is, on any 3D graphics
	       driver) and on "crystalspace.kernel.vfs" class.
	     - Added the AddOptionCL(), AddNameCL() and RequirePlugIn()
	       methods to the iSystem interface. You can "emulate" any
	       options as if they were specified on command line, thus in
	       simple cases you can avoid using a configuration file. For
	       example, the simple app doesn't require the simple.cfg file
	       anymore.
	     - Removed SCF_INTERFACE macro, updated scf.html. From now on
	       an interface should be usually declared this way:
		  SCF_VERSION (iSomething, 0, 0, 1);
		  struct iSomething : public iBase
		  ...
	       This was done because many tools that parse C code can't
	       preprocess it (thus they don't know that SCF_VERSION
	       contains an "struct" inside).  For the same reason I have
	       removed the scfInterface macro (which used to expand into
	       "struct"). Also I modified the scf.h header file so that
	       it is properly parsed by doc++.
	     - Modified scftutor to show how iFactory interface can be
	       used. iFactory can be used to clone objects without even
	       knowing the actual class they belong. This is a kinda
	       "advanced technique" :-)
19-Nov-1999
	- Fixed static compilation of OpenGL renderer.
	- Started implementation of coverage mask lookup table.
	- Impulse ID design modification for CrystalClear from Michael
	  Dale Long.
	- Robert Bate updated to Mac port to SCF.
18-Nov-1999
	- Eric Sunshine reverted changes which Brandon Ehle had made to SCF.
	  Brandon totally botched it and completely broke the reference
	  counting mechanism.  Furthermore, his changes were entirely
	  unwarranted.
	- Eric Sunshine fixed several bugs in the OpenGL driver which were
	  introduced during the SCF conversion.	 These bugs caused the
	  application to crash whenever:
	    - Text was drawn.
	    - A line was drawn.
	    - A pixel was drawn.
	    - A 2D sprite (such as the CS logo) was drawn.
	  This update fixes all known OpenGL-related crashes which were
	  introduced with the SCF conversion (except for a termination-time
	  crash which is of an entirely different nature).  It also re-
	  enables text on the start-up console.
	- Updates to cspython from Brandon Ehle.
	- Changes to scfstr from Andrew Zabolotny.
	- Brandon Ehle fixes the OpenGL exit crash and added a error
	  condition to scf's DecRef.
	- Bugfix to terrain engine from Alex Pfaffe. He was rendering
	  z as 1/(z*z). Alex also started to implement queue to
	  maintain z-ordered list of triangles to avoid need for zbuffer.
	- Updates to map2cs from Thomas Hieber.
17-Nov-1999
	- Brandon Ehle fixed python plugin so that it works now.
	- Brandon also added CSSH (Crystal Space Shell).
	- Minor CrystalClear update from Michael Dale Long.
	- Update to MazeD from Andrew Zabolotny. Texture manager is almost
	  finished.
	- Andrew moved all the plugins (csclear and cspython for now) to
	  the plugins directory.
	- Andrew also moved the impexp directory from csutil to csparser
	  where it belongs.
	- Andrew also did some cleanups on the engine (removed obsolete
	  cleanup class).
	- Eric Sunshine performed the SCF conversion on the BeOS port.	He
	  also reformatted, removed unused / unneeded code, and generally
	  cleaned up on the port.
	- Eric Sunshine fixed a memory leak in the 3D software renderer.  He
	  also patched it so that the "-video=" command-line argument works
	  (though a better solution is needed).
	- Eric Sunshine fixed the pytest makefile again to remove platform
	  dependencies (and other buggy stuff).
	- Eric Sunshine fixed the help message in WalkTest.
	- Eric Sunshine fixed a potential crasher recently introduced into
	  cctest.
	- Thomas Hieber adjusted new directories for impexp in VC project
	  files.
16-Nov-1999
	- Update to landscape engine from Alex Pfaffe. Mainly for
	  cleanup purposes.
	- Eric Sunshine worked around some additional severe bugs in the
	  NextStep compiler which were triggered by the SCF conversion.	 The
	  NextStep port is once again on par with the other ports (including
	  OpenStep).
	- Fixes to VC project files from Thomas Hieber.
	- Andrew Zabolotny added enhancements for the MazeD texture
	  manager.
	- Update to Map2CS from Thomas Hieber.
15-Nov-1999
	- Eric Sunshine renamed the Python test program from cspythontest to
	  pytest in order to appease DOS's 8.3 requirement.
	- Eric Sunshine fixed the pytest makefile so that it only adds itself
	  to the global list of makefile targets if haspythn.sh has detected
	  that Python in installed.  Also fixed the 'tests' target so that it
	  works in a more reasonable manner.
	- Eric Sunshine fixed pytest so that it makes proper use of SCF and
	  actually works in accordance with requirements of the system-driver.
	- Eric Sunshine fixed the csClear plug-in so that it compiles with
	  compilers which use the old-style casting syntax.
	- Eric Sunshine eliminated duplicate symbol definition in ccTest &
	  csClear.
	- Eric Sunshine fixed a problem in SCF.cfg where a CrystalClear module
	  entry was incorrectly listed.
	- Eric Sunshine fixed a bug in SCF.  It incorrectly tried to load the
	  same plug-in module multiple times if multiple classes were exported
	  from it.  The problem was that the search for an already loaded
	  plug-in was broken, so it assumed the plug-in had not yet been
	  loaded.
	- Jorrit updated a lot of makefiles so that most apps at least compile
	  on Unix (some do not run though).
	- Eric Sunshine fixed the lighting progress meters so that they update
	  correctly (again) on stdout.
	- Eric Sunshine worked around a couple NextStep compiler bugs which
	  were triggered by the global SCF conversion.
	- Thomas Hieber and Eric Sunshine fixed Blocks so that it compiles
	  again (following some changes by Andrew).
	- Andrew Zabolotny added a new growing array implementation. This is
	  a macro that defines a static object that can grow and that
	  contains an array of given type elements. Some engine parts
	  use a similar technique for growing some static arrays, so he
	  thought it would be best to put all that into a separate
	  file (and add an automatic cleanup mechanism to avoid memory
	  leaks).
	- Andrew also fixed VSH. Now it compiles and runs again.
	- Fix to DJGPP port from Andrew.
	- Thomas Hieber fixed the Windows OpenGL version.
14-Nov-1999
	- Updates to CrystalClear from Michael Dale Long and fixes for SCF to
	  cctest.
	- Denis Dmitriev fixed a bug in OpenGL texture manager.
	- Update to Map2CS from Thomas Hieber.	He added further extensions
	  for manual sectoring.
13-Nov-1999
	- Andrew Zabolotny made the following changes:
	    - Improved memory debugger (nested CHK's supported).
	    - Added CHK to many places.
	    - Fixed some CHKs that should be CHKB's.
	    - Fixed some minor memory leaks.
	- Fixes to SCF for Windows/VC from Thomas Hieber.
	- Updates to CrystalClear from Michael Dale Long.
12-Nov-1999
	- Brandon Ehle fixes cspython so that it works with SCF.
	- Michael Dale Long did a major update of Crystal Clear to SCF.
	- Fixes to Win port from Siu-Hang Or.
	- Some fixes to OpenGL. At least it compiles with SCF now
	  but it doesn't run yet.
	- Eric Sunshine fixed bugs in scfString where the constructors were
	  not calling CONSTRUCT_IBASE().
	- Eric Sunshine fixed a heap corrupting bug in csVector::Insert().
	  It was copying one too many elements of data beyond the end of the
	  array.
	- Eric Sunshine fixed bug in csSystem::DeregisterDriver() which
	  resulted in an infinite loop when one of the well-known plug-ins
	  deregistered itself in its destructor.  Also fixed constructor to
	  initialize VFS to NULL.  Bug reported by Peter Donald
	  <donaldp@mad.scientist.com>.
	- Eric Sunshine fixed a bug in g2d.cpp where it was exporting the
	  wrong class name.
	- Eric Sunshine made a couple changes to the SCF macros to better
	  support virtual multiple inheritance.	 These changes were requested
	  by Peter Donald.
	- Eric Sunshine fixed a bug in g2d.cpp where it was accessing its
	  'System' instance variable before it was initialized.	 Bug was
	  reported by Peter Donald.
	- Eric Sunshine performed the SCF conversion on the MacOS/X Server,
	  OpenStep, and NextStep ports.
	- Eric Sunshine worked around an OpenStep compiler bug which was
	  triggered by csstring.h & csspr2d.h, and which generates unlinkable
	  object files.
	- Large optimization from Andrew Zabolotny to VFS. It should be
	  about 50 times faster on large levels.
	- Brandon Ehle updates new LaTeX documentation again.
11-Nov-1999
	- Eric Sunshine fixed a "pure virtual method called" crasher at
	  application termination time.	 This bug appeared with the
	  introduction of SCF.
	- Eric Sunshine renamed csTextureManager class in MazeD to
	  mzTextureManager in order to avoid symbolic conflict with
	  csTextureManager in the 3D software renderer.
	- Brandon Ehle almost got WalkTest running with BCB4.
	- Brandon also added 'tests' application.
	- Alex Pfaffe did a cleanup of the terrain engine. He removed
	  a lot of unneeded stuff. He also added support for PGM loading.
	- Andrew Zabolotny completed redesigned commandline parsing in
	  CS. Here is how it works:
	    - You pass to System::Initialize() the argc and argv (as before)
	    - Initialize() collects all command-line options into an array.
	      Since it doesn't apriory know which options takes arguments,
	      arguments are specified using the '=' character. Example:
	      --mode=320x200.  Note that you can use any number of dashes...
	      I prefer two.
	    - From now on you can query command-line options using
	      iSystem::GetOptionCL(char*, int) method. The method will
	      return NULL only and only if the option is not present on the
	      command line. You also can query the non-dashed command-line
	      entries using the GetNameCL (int) method. The (int) arg in
	      both prototypes is the ordinal number. For example, if you do
	      GetOptionCL("plugin", 0) you will get the first "--plugin=xxx"
	      switch. If you do GetOptionCL("plugin", 1) you'll get the
	      second and so on. Same about GetNameCL(): 0 for the first arg,
	      1 for the second and so on.
	    - If a plugin implements the iConfig interface, all config
	      options are automatically handled by system driver. Right after
	      loading the plugin the iConfig interface is queried, and all
	      options from that plugin are added to the OptionList array in
	      csSystemDriver object. After this all driver's options are
	      queried using GetOptionCL() and if they are present on command
	      line, are automatically presented to the plugin (via iConfig).
	      Note that this automatical handling is done BEFORE Open(). If
	      you need post-Open() command-line handling, do it through
	      messaging system (catch the cscmdSystemOpen broadcast and
	      query via iSystem::GetOptionCL())
	    - The help is displayed ONLY for the options that are exposed
	      through iConfig interface and for options implemented by the
	      SysSystemDriver. So using iConfig is highly recommended in
	      plugins.
	- Andrew also fixed a bug in system.cpp that could crash WalkTest
	  at exit. He played a bit with thread priorities on OS/2.
10-Nov-1999
	- Eric Sunshine performed the SCF conversion on the Win32 system-
	  driver.  Both Thomas Hieber and Brandon Ehle made attempts to get
	  the port to compile, however neither actually performed the SCF
	  conversion.  Unfortunately, Brandon's changes were invalid and broke
	  other ports.	Therefore, Eric reverted Brandon's changes and
	  performed a real SCF conversion on the Win32 port.  (Note, however,
	  that Eric is unable to test the conversion, so someone else will
	  have to do so.)
	- Fixes to Win32 port from Brandon Ehle.
	- Eric Sunshine fixed a bug introduced into csSystemDriver::Print()
	  during the SCF conversion which caused Print() to generate garbage
	  if the printed string contained percent "%" characters.
	- Added terrain loading patch from Alex Pfaffe.
	- Fixes to terrain for big-endian.
	- Fixes to WalkTest makefile for new SCF system.
	- Fixes to Unix port and X2D driver. Not fully functional yet but
	  at least it compiles now.  There are a couple of initialization
	  order bugs.
	- Changes to MazeD from Andrew Zabolotny:
	    - Full-blown light editing capability.
	    - Started to implement texture manager.
	    - Lots of fixes.
	- Andrew also added the REAL files for SCF which Eric reverse
	  engineered recently after Andrew forgot to check them into CVS.
	- Andrew added a new scftutor app and a few fixes for Unix.
	- Fixed bug in sofware texture manager which COULD in some cases
	  cause startup to fail miserably.
9-Nov-1999
	- Eric Sunshine removed many, many obsolete COM references from
	  documentation and source code comments.
	- Andrew Zabolotny committed the missing scfstrv.h header.
	  Unfortunately, he did not have the opportunity to commit the real
	  istrvec.h and scfstrv.cpp files as well (probably on account of the
	  erratic behavior of the CVS server today).
	- Eric Sunshine updated the "fake" istrvec.h and scfstrv.cpp files to
	  correctly reflect Andrew's "real" scfstrv.h.	This allows the
	  project to once again compile.
	- Eric Sunshine and Thomas Hieber added missing 'const' to many of the
	  prototypes in iStrVector and scfStrVector.
	- Eric Sunshine removed the obsolete $(CSCOM.LIB) reference from all
	  makefiles.  Also renamed $(CFLAGS.STATIC_COM) to
	  $(CFLAGS.STATIC_SCF).
	- Eric Sunshine changed the makefiles so that the notion of "plug-in"
	  is now preferred over that of "driver".  (Though drivers, drivers2d,
	  and driver3d are still retained since they are useful targets.)
	  $(DRVHELP) became $(PLUGINHELP).  The 'plugin' pseudo-target now
	  includes all drivers, as well as other non-driver plug-in modules.
	- Eric Sunshine fixed the csPython makefile so that it only adds
	  "cspython" to the makefile's list of targets if haspythn.sh has
	  determined that Python is installed.
8-Nov-1999
	- New fixes to terrain loading from Alex Pfaffe. There is now
	  support for texture mapping and lighting based on the sun
	  position.
	- Eric Sunshine reverse-engineered Andrew Zabolotny's SCF changes and
	  was able to recreate some missing files which Andrew forgot to
	  commit to the CVS repository.	 Eric's recreations are minimal, yet
	  sufficient to allow the project to compile.  Hopefully Andrew will
	  check in the "real" files when he has the opportunity to do so.
	- Eric Sunshine canonicalized the line terminator in many of the new
	  TeX documents.
	- Adjustments for SCF/Windows port from Thomas Hieber.
	- Thomas also added support for mirrored planes in map2cs.
7-Nov-1999
	- Eric Sunshine re-engineered the Python detection code in haspyth.sh
	  so that it deals gracefully with the case where multiple Python
	  header and library directories are found.  Problem was reported by
	  Donald Ryan Willhoit <willhoit@mail1.andrew.cmu.edu>.
5-Nov-1999
	- Fixes to LaTeX docs from Brandon Ehle.
	- Fixes to terrain engine from Alex Pfaffe again. These fixes
	  FINALLY fix the terrain engine so that it works on big-endian
	  systems.
	- Fix to camera.cpp from Brandon Ehle.
	- Andrew Zabolotny converted much of Crystal Space over from COM to
	  SCF (the Shared Class Facility).  This was an enormous task.	About
	  70 or 80% of the conversion has been completed, although many
	  drivers and platform-specific code is still broken and needs to be
	  converted by the particular port maintainer.
4-Nov-1999
	- Change to terrain engine from Alex Pfaffe in the ongoing effort
	  to try to get the thing working on Solaris.
3-Nov-1999
	- Jorrit eliminated initialization of four function pointers in OpenGL
	  driver because gcc fails on them.
	- Eric Sunshine reverted Jorrit's change to the OpenGL driver (but
	  hopefully in a GCC-compatible fashion).  Jorrit's change was simply
	  incorrect and would have resulted in a crash since those variables
	  would have been used uninitialized.
	- Eric Sunshine eliminated a recently introduced compiler warning in
	  csEngine.
	- Eric Sunshine worked around an OpenStep compiler bug which was
	  triggered by recent changes to csBox.
	- Brandon Ehle added and modified new LaTeX docs in newdoc directory.
	- Some changes to VC project files from Thomas Hieber.
2-Nov-1999
	- Added -lmgrid and -lmonly commandline option for software renderer.
	  -lmgrid adds an extra grid to every lightmap lumel.  -lmonly doesn't
	  do texture mapping but only applies the lightmap.  Both are
	  debugging options.  The functionality for those options was still
	  present in CS but it wasn't possible to enable it anymore.
	- Added '-cache/-nocache' commandline options to disable caching of
	  lightmaps.  This is useful when testing lighting to speed up the
	  starting process because caching takes a lot of time.
	- Added message to initialization that indicates how much seconds were
	  used to calculate lighting.
	- Optimized quadtree lighting routines.	 Now lighting dmburg
	  calculates in half the time (from 137 seconds to 66 seconds).	 Note
	  that I had to disable this optimization because it is not yet
	  compatible with old style portal levels.
	- Eric Sunshine fixed a problem which was recently introduced into
	  csLoader and caused the application to crash during parsing of many
	  of the standard levels (maze, large, flarge, etc.).  The problem was
	  that the parser was expecting commands of the form
	  "MATRIX (ROT (ROT_X (1.0)))" even though existing levels use the
	  form "MATRIX (ROT_X (1.0))".	In all fairness, there was actually
	  nothing wrong with the parser.  It conformed to the specification
	  stated in worldfmt.txt but, unfortunately, worldfmt lied.
	- Eric Sunshine changed the syntax of the SCALE, SCALE_X, SCALE_Y, and
	  SCALE_Z directives to be consistent with ROT, ROT_X, ROT_Y, and
	  ROT_Z.  Scale is now specified as "MATRIX (SCALE_X (2.0))" rather
	  than "MATRIX (SCALE (SCALE_X (2.0)))".
	- Eric Sunshine dropped the recently added "MATRIX (ROT (1.0))" option
	  (which rotated about Y).  Use the explicit form
	  "MATRIX (ROT_Y (1.0))" instead.
	- Eric Sunshine updated worldfmt.txt to reflect the new MATRIX syntax.
	- Eric Sunshine added csXScaleMatrix3, csYScaleMatrix3, and
	  csZScaleMatrix3 classes to math3d.h which complement the existing
	  cs[XYZ]RotMatrix3 classes.
	- Eric Sunshine eliminated some compiler warnings in csEngine reported
	  by Furqan Ullah <furqan@writeme.com>.
	- Brandon Ehle added newdoc directory with LaTeX documentation.
	- Alex Pfaffe added some fixes to terrain engine.  He fixed an
	  orientation problem with the terrain.	 It now renders correctly.
	- Updates to Macintosh project files from Robert Bate.
1-Nov-1999
	- Eric Sunshine eliminated some compiler warnings issued by
	  VC++ 5.0.
	- Seth Galbraith did some changes to lighting. He added several
	  types of lighting attenuation.
31-Oct-1999
	- Eric Sunshine moved the Python detection code from unixconf.sh to
	  haspythn.sh since it is needed by platforms which do not invoke
	  unixconf.sh.	Modified various makefiles to invoke haspythn.sh.
	- Eric Sunshine changed the way unixconf.sh and booltest.sh are
	  invoked so that Seth can use the 'linux' target from DOS. :-O
	- Eric Sunshine fixed a number of syntactic problems which were
	  recently introduced into csColor.h.
	- Gary Haussman did various changes to OpenGL renderer:
	   - Moved mipmap handling into texture cache code. All mipmap
	     calculations are now done by OpenGL except for the construction
	     of the mipmap textures.
	   - Completed multitexture shortcut. Test under software Mesa;
	     some functionality is needed to work under Win.
	   - Collected the jumble of class member variables into
	     semi-intuitive groups. Deleted some superflous variables.
30-Oct-1999
	- Optimized quadtree so that it takes even less memory.
28-Oct-1999
	- Update to project files from Thomas Hieber.
	- Updates to terrain engine from Alex Pfaffe.
	- Andrew Zabolotny did a temporary fix to cspython.mak again.
	- Several renames of docs done by Seth Galbraith.
27-Oct-1999
	- Fix from Stephan Goetter: additional check for proper format of
	  image files.
	- Fixes to cspython from Brandon Ehle.
	- Brandon also added BCB4 convertor for VC project files.
	- Gary Haussman did some changes to the OpenGL 3D Rasterizer:
	    - Bulked up member initializer list.
	    - Moved texture deletion so that it occurs just before closing
	      the window. This *might* eliminate some of the crashes at
	      exit when using OpenGL.
	    - Slimmed down lightmap blend configuration code.
	    - Added 'shortcut' methods to allow certain hardware
	      configurations to detect and render polygons in an
	      optimized manner where possible. The first planned shortcut
	      methods include rendering using multitexture and batching
	      up FX polygon drawing.
	- Started fundamental speed optimizations in the lighting routines.
	  These can make a huge difference! Speed optimization is based on
	  using the quadtree for calculating shadows instead of the shadow
	  frustum list.
26-Oct-1999
	- Eric Sunshine fixed a bug which was causing the engine to crash
	  when a non-coplaner polygon was found in a world.
	- Eric Sunshine fixed a number of reported makefile problems.
	- Eric Sunshine fixed makefiles so that linking once again succeeds
	  when USE_SHARED_PLUGINS=no and on NeXT platforms.
	- Eric Sunshine fixed numerous new compiler warnings as well as
	  some errors.
	- Eric Sunshine worked around more OpenStep compiler bugs which were
	  triggered by recent CS changes.
	- Eric Sunshine fixed csString so that it really is possible to
	  disable COM in the class.  (Unfortunately, numerous other parts of
	  the system rely on the fact that csString is COM-patible, so it is
	  not yet possible to actually disable COM in csString without
	  breaking anything.)
	- Fixes to css from Brandon Ehle.
	- Brandon also added the start for cspython.
	- Seth Galbraith addded a new way to align textures on polygons.
	  You can use vertex indices in ORIG, FIRST, and SECOND instead
	  of x,y,z coordinates.
	- Seth also rewrote load_matrix so that there are SCALE tokens
	  and more (and more foolproof) ways to enter rotation and scale.
	- Seth added logo to some of the CS docs and added a general
	  index.htm file for accessing all the documents.
	- Robert Bate fixed Mac port for recent changes.
	- Fixed a bug in polygon splitters. It could happen that polygons
	  were split to degenerate polygons (with only one or two vertices).
	  This caused problems with lighting and even crashes.
	- Eric Sunshine made BUGGY_EGCS_COMPILER=yes the default to prevent
	  confusing first-time users.
	- CrystalClear updates from Michael Dale Long.
25-Oct-1999
	- CrystalClear updates from Michael Dale Long.
	- FINALLY fixed the bug in the quadcube!!! Lighting shadow
	  frustum culling finally works well. There were actually two
	  unrelated bugs.
	- Changes to Map2CS from Thomas Hieber. He added additional
	  checks for degenerated polygons and moved all math from float
	  to double.
	- Andrew Zabolotny added an updated SCF header and documentation
	  file to reflect some large improvements.
24-Oct-1999
	- Fixes and modifications to landscape engine from Alex Pfaffe.
	  Landscape engine is closer to working now.
23-Oct-1999
	- Added csWorld::CheckConsistancy() to test consistancy of the world.
	  Using this we can more quickly detect problems with either the world
	  loader or the BSP/octree splitter.
	- Thomas Hieber added support for line numbers in parser and
	  additional error checks for empty polygons.
	- Seth Galbraith added sprite vertex animation tweening.
22-Oct-1999
	- Various fixes to quadtree again. Now it seems to work correctly
	  for rendering but I still got errors for lighting.
	- Small change to makefiles forom Andrew Zabolotny.
	- Thomas also removed some warnings.
	- Change to makeman.py from Brandon Ehle.
21-Oct-1999
	- Significantly rewrote the quadtree handling. It is now much more
	  efficient (both memory and speed) and it does seem to work a
	  little better as well. Still not perfect though!
	- Received patch from Fragdance with interfaces for alphamap
	  loading.  Also a new loader for SGI file graphics.
	- Probably fixed DOS port compile.
	- Seth Galbraith fixed font selection for console so that
	  it better fits the requested display width.
	- Makefile fixes from Michael Dale Long.
	- Makefile fixes from Seth Galbraith.
20-Oct-1999
	- Fixes to landscape engine from Alex Pfaffe. Uses camera space
	  coordinates instead of world space.
	- Various changes to quadtree stuff.
	- Fixes to Win/VC project files from Thomas Hieber.
	- Thomas also fixed some warnings.
	- Andrew Zabolotny provided a huge patch:
	    - Moved csrect* to libcsutil. This is correct since, first, csRect
	      does have nothing common with csgeom (that is, it's not
	      geometry), second, csRect is used as argument to
	      Graphics2D::Print(), and any program that use the 2D driver is
	      forced to use libcsgeom, which is not too good.  On other hand,
	      even if program does not 3D math, it almost for sure uses such
	      basical things as csVector/csIniFile/csVfs/etc so it has to be
	      linked in any case against libcsutil.
	    - Removed csspr2d.cpp and all code (which is very small) has been
	      integrated directly into csspr2d.h. No more need to link against
	      csengine (even if the 3D engine is not used at all), however,
	      the csengine/csspr2d.h file is still used. Need to think where
	      csspr2d.h can be moved since it is a general class, and doesn't
	      have nothing common with the engine (engine even doesn't use it).
	    - Moved csObjVector back into csUtil. Now csObjVector is meant
	      ONLY for descendents from csBase; for descendents of csObject
	      there is a new vector class called csNamedObjVector; it has
	      additional facilities (supposing that its members descend from
	      csObject) such as sorting by names, finding by name, fast
	      finding by names in a pre-sorted array (using BSP). The header
	      file for csNamedObjVector is called "nobjvec.h"
	    - Made CSWS completely independent of engine. This reduces A
	      WHOLE LOT both executable size and memory footprint for programs
	      that do not use the engine themselves (i.e. MazeD). For example,
	      cswstest.exe debug executable size reduced (in my case) from
	      3.4Mb to about 1Mb (!) and memory footprint from 15Mb to as low
	      as 7Mb. The MazeD has decreased in size from 5.6Mb to 4.1Mb and
	      memory footprint has decreased from 20Mb to 11Mb. Besides, it
	      works now very well (without heavy swapping) on machines with
	      "just" 32M RAM (i.e. my home computer :-) For optimized
	      executables the numbers are way lower, of course.
	      This also removes the dependency of cswstest.exe from:
		$(CSSCRIPT.LIB) $(CSENGINE.LIB) $(CSTERR.LIB) $(CSGEOM.LIB)
	    - Removed CsPrintf() references from CSWS (since CsPrintf is an
	      engine function). Added a printf() routine to csApp class.
	    - TODO: make csloader completely independent on engine. This
	      could be made by providing an SCF interface instead of world
	      object. The parser should not care what's behind that
	      interface...
	    - Moved all stuff from cssys/common into cssys/, both under
	      libs/ and include/
	    - Renamed all osdefs.h into csosdefs.h
	    - Added "intensity" spin box to mazed's light setup dialog.
	    - Added SetName() and GetName() methods to csObject. They just
	      call csNameObject::###, but are easier to use. Possibly we can
	      add name functionality right to csObject (but by using a char*
	      instead of char [30]) - this will conserve both memory and
	      improve access speed.
	    - Added support for Allegro driver back.
19-Oct-1999
	- Michael Dale Long added major CrystalClear updates (InputHandler
	  and PlayerEntity).
	- Denis Dmitriev fixed some CHK macro uses.
	- Denis also fixed a memory leak in c-buffer code.
	- Transformed quadtree stuff to 2D instead of 3D. This already
	  makes it somewhat faster but I have plans for even more speed-ups.
	- I moved csQuadcube from csgeom to csengine. Update the project
	  files for this.
	- Fixed endian reading for terrain loading which Alex Pfaffe did.
	- Fixed init bug in csWorld for current_camera.
	- Thomas Hieber improved robustness of map2cs.
	- Thomas also changed Win/VC project files for quadcube move.
	- Changes to Mac project files from Robert Bate.
	- Changes to Windows GCC Makefile from Seth Galbraith.
18-Oct-1999
	- Scott Wood <scott@geekland.cx> sent me patches to allow CS
	  to compile on Alpha machines.
	- Stephan Goetter sent me a patch for allowing libraries to be
	  built as shared libraries on Unix. I haven't been able to fully
	  test this yet.
	- Found the bug in quadtree. Lighting and rendering now work
	  correctly but extremely slow. I need to rewrite this stuff. I
	  have some ideas already.
	- Thomas Hieber fixed map2cs to avoid duplicate vertices.
	- Michael Dale Long added a minor gcc 2.95 fix for map2cs.
	- Fixes to csstring from Brandon Ehle.
	- Denis Dmitriev then fixed csstring again by replacing windows
	  specific GetMessage() with something else.
	- Gary Haussman modified code to use fog textures, which gives
	  better interpolation between vertices and opens the way for
	  faster fog rendering using multitexture.
	- Gary also switched back to linear fog, modified detection
	  process to fix a bug that improperly fogged sprite polygons in
	  sectors with fog.  (if you are in a different sector with fog
	  and see a sprite through a portal it worked fine).
	- Alex Pfaffe fixed terrain loading so that it is now endian
	  correct.
17-Oct-1999
	- Implemented quadtree visibility culling for rendering.
	  However, it does not work correctly yet.
	- New 'quadtree' command to enable quadtree visibility culling.
	- Fixed bug in dynamic lightmap reading (pseudo-dynamic lights).
	  This bug only occurs in rare situations. It is unlikely someone
	  ever hit it. But I did :-)
16-Oct-1999
	- Fixed infinite maze for collision detection. This
	  means that CD init is done for all new sectors.
	- Changed lighting routines so that it no longer uses the
	  transformation manager. Not only is this more efficient:
	  transforming vertices for lighting is only a translation,
	  it makes no sense to do the complicated transformation
	  manager overhead. But it also fixes the infinite maze
	  so that there are no ugly glitches anymore when new
	  sectors are created.
	- Thomas Hieber added settings for glide2x to csCOM.cfg.
	- Michael Dale Long fixed csObject.
	- Update to Windows Glide from Petr Kocmid.
15-Oct-1999
	- Fixes to integration of landscape engine from Alex Pfaffe.
	  Still not working properly though.
	- Michael Dale Long did some fixes on cctest and ndrvdemo for
	  the terrain library.
	- Update to Squawk from Seth Galbraith. sqkView now uses screen-
	  space coordinates like csView. sqkSystemDriver::CreateViews
	  handles relative coordinates now.
	- Brandon Ehle did some fixes for COM and csutil, csengine, and
	  csobject.
	- Brandon added support to the Win/VC project files/Makefiles for
	  Constant MSVC Compiler (automated Win32 compiler run).
14-Oct-1999
	- First try at integration of landscape engine. Note that the
	  new code doesn't even TRY to be efficient :-)
	  Needless to say it doesn't work yet.
	- Fixed infinite maze for VFS.
	- Fixed to Win/VC project files from Thomas Hieber (RelDeb target).
	  Also added terrain.cpp.
	- Thomas Hieber fixed texture scanning so that textures with no
	  names don't cause a crash.
	- Seth Galbraith udpated Squawk to switch view layouts at
	  run-time.
13-Oct-1999
	- Andrew Zabolotny added keyboard support to CSWS scroll bars.
	- Thomas Hieber updated the Win/VC project files.
	- Michael Dale Long update CrystalClear impulse layer.
12-Oct-1999
	- Robert Bate removed SOUIX console from Mac projects.
	- Andrew Zabolotny did more work on MazeD:
	    - New color wheel control.
	    - New function csColorDialog() returning a standard color choose
	      dialog MazeD.
	    - Replaced R/G/B spin buttons in light params dialog with a button
	      that calls color choice dialog.
	- Eric Sunshine fixed some new compiler warnings in MazeD and CSWS.
11-Oct-1999
	- Cleaned up world init a little more. Added an extra progress bar
	  for even more startup fun :-)
	- Eric Sunshine fixed a bug in the Crystal Clear library where
	  DllGetClassObject() was accessing the wrong factory object.
	- Eric Sunshine reworked the COM code in Crystal Clear to avoid a
	  bug in the OpenStep linker which was resulting in a run-time crash.
	- Eric Sunshine fixed a BeOS-specific latent bug in the COM library,
	  which was incorrectly associating DLLs with the Windows section of
	  csCOM.cfg, rather than the desired Unix section.
	- Eric Sunshine worked around a register allocation bug in the
	  OpenStep compiler which was triggered when compiling for 'debug'.
	- Eric Sunshine Worked around a NextStep multiple-inheritence compiler
	  bug which, in some cases, caused the compiler to crash, and in other
	  cases caused the application to crash when querying COM for the halo
	  rasterizer.  In order to fix the problem, he reworked
	  csGraphics3DSoftware so that it implements IHaloRasterizer via
	  composition rather than inheritence.
	- Seth Galbraith fixed sprite lighting by initializing vertex
	  normals to 0,0,0 before accumulating adjacent triangle normals.
	- Brandon Ehle moved some of the COM stuff he added to csutil to
	  csengine instead. He also made COM optional in some of the
	  remaining csutil classes. The result is that csutil is once again
	  separate from cscom.
10-Oct-1999
	- Fixed bug in octree outline table which caused octree visibility
	  culling not to work correctly in some cases.
	- Finally found one of the bug in quadtree which prevented lighting
	  from working properly! It is still not enough though...
	- Found another bug in quadtree which prevented proper lighting.
	  Still not enough...
	- Eric Sunshine fixed the MacOS/X Server, OpenStep, and NextStep ports
	  so that applications once again link following Andrew's recent
	  system-wide changes.
	- Eric Sunshine fixed a few problems with the Crystal Clear makefiles
	  which caused the 'depend' target to break.
	- Eric Sunshine ported Crystal Clear to MacOS/X Server, OpenStep and
	  NextStep.
	- Eric Sunshine modified the dynamic linker in the MacOS/X Server,
	  OpenStep, and NextStep ports so that it gracefully handles the case
	  where it is asked to load the same module multiple times.  This
	  modification allows Crystal Clear to work.
	- Eric Sunshine fixed Crystal Clear so that it can be built and used
	  on statically linked platforms (or when USE_DLL=no is specified).
	- Eric Sunshine fixed a crasher in the Crystal Clear test program.
	  It was calling the wrong function, csLoader::LoadLibrary() rather
	  than LoadLibraryFile(), in order to load /lib/std/library.
	- Eric Sunshine modified WalkTest so that the 'loadsprite' command
	  works through VFS.  Also now leaves less garbage in the filesystem
	  from the import process.
	- Eric Sunshine fixed csLoader so that it doesn't leave quite as much
	  garbage laying around in the filesystem after loading a model file.
	- Gary Haussman fixed some problems with vertex fog:
	    - With extra-dense fog, walls a long distance away would overrun
	      the fog table and therefor get no fogging.  Added clamping to fix
	      this.
	    - Vertex fog for sprites used an incorrect 'outgoing plane'
	      demonstrating odd behaviour.
	- Gary also changed lightmap fudge factors in OpenGL renderer to
	  cut down on obvious lightmap seams when rendering. Still needs
	  some tweaking.
	- Denis Dmitriev changed the clear color from blue to black.
	- Denis also added a check to the OpenGL renderer for NULL pointers.
	  This prevents the OpenGL renderer from crashing at exit.
9-Oct-1999
	- Michael Dale Long added CrystalClear to the CS CVS site.
	  Previously this used to be a separate project.
	- Thomas Hieber removed some warnings.
	- Thomas did some general cleanup on the Win/VC project files.
	- Gert Steenssens fixed 'const char*' compilation errors.
8-Oct-1999
	- Andrew Zabolotny did some changes:
	    - Derived csImageFile from csObject.  Now each csImageFile has a
	      name that is assigned in csparser (having just texture names are
	      not enough since file name can differ from texture name).
	    - Changed printf_init(), printf_close() and printf(char *,...) with
	      console_open(), console_close() and console_out(char *).	This
	      removes the extra var-args step which is not required since
	      everywhere CsPrintf () is used, which expands varargs itself.
	      Replaced vsprintf() with puts(); removed NeXT's printf.cpp since
	      it seems not needed anymore.
	    - Partial texture support in MazeD.	 Textures aren't used nor shown
	      but are at least loaded/saved correctly now.
	    - Replaced pprintf() with console_out and removed printf_close().
	- Robert Bate did some fixes related to pprintf().
	- Robert Bate updated the Mac project files.
7-Oct-1999
	- Eric Sunshine added apps/support/ezstatic.cpp.  This is a companion
	  to static.cpp.  It provides COM initialization for applications
	  which are statically linked against the COM library.	Unlike
	  static.cpp, ezstatic.cpp does not force references to the various
	  drivers, and is therefore suitable for command-line applications
	  which do not wish to unnecessarily link with drivers.
	- Eric Sunshine fixed map2cs so that it links correctly on platforms
	  which use static linking (or when "USE_DLL=no" is specified).	 The
	  linking problem appeared quite recently when csutil was modified to
	  depend upon cscom.
	- Eric Sunshine considerably simplified the linkage / library
	  requirements in the vsh makefile.  He also removed an unnecessary
	  dependency on $(DEP.EXE).
	- Seth Galbraith added Squawk version 18. It can now load world
	  files.
	- Seth also modified csLoader to use import/export library through
	  VFS.
	- Brandon Ehle added Plug-In system to csengine.
	- Brandon also added a Code Crusader Project File for CS.
	- Robert Bate made some fixes on terrain engine for Macintosh.
6-Oct-1999
	- Eric Sunshine implemented dynamic linking for the MacOS/X Server,
	  OpenStep, and NextStep ports of Crystal Space.  This was a
	  significant change which touched about 80 files on account of the
	  radically different semantics of dynamic linking between NeXT and
	  CS/COM.  The changes affected every port and every driver in one way
	  or another.  He also made a number of changes to COM in support of
	  this change.
	- Eric Sunshine collapsed all the copy/paste code from the various
	  itexture.cpp files, which were spread around in the various 3D
	  renderers, into the common txtmgr.cpp which all renderers make use
	  of. This was also necessary to get dynamic linking working on the
	  NeXT ports.
	- Eric Sunshine fixed a number new of compilation and linkage problems
	  in MazeD which afflicted MacOS/X Server, OpenStep, NextStep, BeOS.
	- Eric Sunshine fixed a compiler warning generated by the
	  NO_MODULE_LOCK() COM macro on non-Windows platforms.	This fix was
	  part of a larger batch of changes to COM which allow the NeXT ports
	  to use dynamic linking.
	- Eric Sunshine ported the terrain library to MacOS/X Server,
	  OpenStep, NextStep, and BeOS.
	- Eric Sunshine fixed a bug in the terrain library.  It was comparing
	  a pointer against an integer (x < 0) when it should have been
	  comparing an integer against an integer (*x < 0).
	- Eric Sunshine reworked Seth's hack which allows the import/export
	  library to load models via VFS.  The import process no longer
	  excretes temporary junk files and is also more localized.
	- Eric Sunshine worked around new COM-related compilation problems
	  which showed up in the MacOS/X Server, OpenStep, and NextStep ports
	  when COM was introduced into the low-level csString, csVector, and
	  csStringList classes.
	- Eric Sunshine fixed a bug which afflicted a number of drivers where
	  their DllUnregisterServer() functions were actually performing
	  registration instead of deregistration.
	- Eric Sunshine eliminated a compiler warning in csloader.cpp.
	- Eric Sunshine fixed some bugs in cygnus.mak.
	- Thomas Hieber fixed Map2CS by adding COM stuff. This is not an
	  ideal situation however.
	- Thomas also made MazeD compilable on Win/MSVC.
	- Thomas also fixed terrain engine for Win/VC by adding sysdef.h
	  in all source files.
	- Added 'clrlights' console command which clears all pseudo-dynamic
	  lights to black.
	- Added 'setlight' console command which sets the color of the
	  currently selected light. This needs to be a pseudo-dynamic light
	  otherwise nothing will happen.
	- Thomas Hieber brought the MSVC port up to date with respect to all
	  of the recent modifications by others (Alex, Andrew, Eric).
5-Oct-1999
	- Received landscape engine code from Alex Pfaffe. It is not
	  fully integrated yet. I prepared it so that it compiles
	  ok but that's it.
	- Brandon Ehle added IBase, IID_IBase, csStringList, and
	  csInifile STRList support.
	- Brandon also added initial code for the plug-in system.
	- Brandon also fixed csString for COM propagation and
	  added csStringList.
	- Brandon added a cygnus makefile target (copy of linux.mak)
	  and fixed cygnus.mak for .dll, .exe, and .lib extensions.
	- Finally, Brandon added initial code for cspython.
	- Seth Galbraith did some fixes on various makefiles with
	  regards to the new landscape code.
	- Michael Dale Long also fixed some bugs with regards to the
	  new terrain engine.
	- Andrew Zabolotny continued work on MazeD.
	    - Window layouts are now working (four different layouts, saved
	      into .cfg file).
	    - Modified "maximize" button so that maximized window won't cover
	      popup menu and tool bars.
	    - "Letter" keys now selects first next available entry in file
	      list.
	    - Loading of worlds now works.
	    - Fixed lots of bugs in handling sprite frames.
	    - Fixed bug in loading things without templates (todo: sprites
	      without templates).
	    - Arrow keys now rotate draft view; alt+arrows pan view; +ctrl =
	      slow.
	    - Added some handy entries to each draft window's system menu.
	    - Many other things.
	- Andrew Zabolotny added ClearScripts() and ClearScript(char*) methods
	  to the ScriptList class.
4-Oct-1999
	- Continued work on quadcube/quadtree lighting. It is almost
	  working but there are still a few problems here and there.
	- Seth Galbraith changed the model import routines to accept
	  a csVFS object pointer as a parameter. This allows apps
	  to load .mdl models using VFS but it doesn't work yet with
	  the csLoader class.
	- Updates to Win/VC project files from Nathaniel Saint Martin.
3-Oct-1999
	- Continued work on quadcube/quadtree lighting. It is almost
	  working but there are still a few problems here and there.
	- Fixed bug in archive code with allocation of zero size arrays.
	- Added optimization to palette creation from Siu-Hang Or.
	- Eric Sunshine modified the configuration of makedep slightly so
	  that certain platform-specific porting information is maintained by
	  the makefile system.	Hopefully this will help to eliminate the need
	  to actually change makedep's source code as it is ported to new
	  platforms.
	- Eric Sunshine fixed a number of compilation warnings which were
	  recently introduced into the project.
2-Oct-1999
	- Thomas Hieber moved Win32 to COM emulation. (No more native
	  COM by default).
1-Oct-1999
	- Finished implementation of csQuadtree. Also added csQuadcube
	  class which represents a cube of quad-trees.
	- Eric Sunshine fixed makedep so that it compiles on BeOS.
	- Eric Sunshine fixed a compiler warning in impexp.cpp where the order
	  of initialization of instance variables was incorrect.
	- Eric Sunshine adjusted the initial position of the CS window in the
	  BeOS port to be more pleasing to the eye.
	- Eric Sunshine fixed the BeOS port so that vsh can link.  To do so,
	  it was necessary to break csSystemDriver::Time() out into its own
	  source file.
	- Eric Sunshine fixed a shadowed-variable compiler warning in md2.cpp.
	- Seth Galbraith changed the way sprite normals are calculated.
	- Robert Bate brings the Macintosh port up-to-date.
	- Gert Steenssens fixes Glide renderer.
30-Sep-1999
	- Eric Sunshine ported map2cs to Unix.	He created map2cs.mak which
	  conforms to the CS makefile system.  He was also forced to rename
	  parser.{h|cpp} and main.cpp to mparser.{h|cpp} and map2cs.cpp,
	  respectively.	 Unfortunately, the original file names conflicted
	  with other file names used elsewhere in CS, and the flat structure
	  of the 'out' object-file directory prevents use of files with the
	  same name even in different subprojects.  (We really need to do
	  something to resolve this less than ideal situation.)	 He also
	  replaced a Windows-specific call with more portable code.
	- Eric Sunshine fixed a bug in map2cs where some variables were
	  shadowing others with the same name.	The code incorrectly assumed
	  that it was setting the values of the original variables, when in
	  fact it was not.
	- Eric Sunshine modified pol2d.cpp so that Gouraud shaded polygons
	  now respect the CS_POLY_LIGHTING flag.  Jorrit provided the
	  information necessary to make this change.
	- Eric Sunshine adjusted map2cs to conform to DOS's 8.3 limitation.
	- Seth Galbraith made more improvements to Squawk v17.  Sprites can
	  now be loaded from the data/squawk folder
	- Eric Sunshine fixed a bug in Squawk where it would crash if fewer
	  than three views were created and the user tried navigating one of
	  the missing views.
	- Thomas Hieber fixed a small warning on Map2CS for Linux.
29-Sep-1999
	- Added initial code base from Brandon Ehle for the CS scripting
	  layer.
	- Andrew Zabolotny made the following modifications:
	    - Removed SystemDriver::fopen() method; outdated by the new virtual
	      file system.  Respective port maintainers will have to remove
	      cssys/*/fopen.cpp from their project files.  I did it already for
	      ports that use the Makefile system.
	    - Removed FOpen and FClose (huh?) methods from ISystem interface
	      for same reason.
	    - Removed SaveFile() and LoadFile() methods from csCamera class.
	      Debug methods; moved to debug program (i.e.  walktest).
	    - MazeD now is compilable.	However, some important functions are
	      disabled (ie.  saving and loading).  Many small fixes.
	    - Added "const" here and there through the entire CS source tree.
	- Eric Sunshine imported a new version of Squawk (v16) by Seth
	  Galbraith.
	- Eric Sunshine fixed the model import/export library so that it is
	  now possible to actually use it for converting models in memory.
	  Writing the converted model to disk and generation of a log file
	  are now optional.  Modified Squawk to take advantage of these new
	  options so that it no longer outputs "junk" files.  Note that this
	  entire library really needs to be converted to VFS.
	- Eric Sunshine modified the import/export library so that it now
	  appends output to the log file rather than overwriting it.
	- Eric Sunshine removed some unused methods from the import/export
	  library.
	- Eric Sunshine added "const" here and there through the source tree.
	- Eric Sunshine updated some documentation.
	- Eric Sunshine fixed some compilation warnings in MazeD.
	- Seth Galbraith imported Squawk version 17 which includes many
	  improvements and changes.  Environment models in @file{.mdl} format
	  by Ulrich Galbraith New skybox textures (ugly, meant to be
	  temporary).  Configurable view layout (see squawk.cfg).
	  Configurable sky textures (see squawk.cfg).
	- Eric Sunshine fixed a compilation error in Squawk 17.
	- Eric Sunshine fixed a crasher in Squawk 17 caused by an unhandled
	  boundary condition.
	- Eric Sunshine fixed the new command-line -cfg option in Squawk 17
	  so that it actually works.
	- Thomas Hieber imported his map2cs utility into the CVS repository.
28-Sep-1999
	- Csparser detects duplicate vertex indices in polygons and ignores
	  them (while given a warning at the same time).
	- Fixed dynamic lights so that they work with BSP/octree split
	  polygons.
	- Started work on QuadTree implementation. Initially this is going
	  to be used for lighting. Later we will experiment with this
	  technique for rendering as well.
27-Sep-1999
	- Fixed bug in splitting of BSP polygons. It could happen that
	  polygons were split to polygons with only one vertex. This bug
	  could cause lighting to be very wrong indeed.
	- Eric Sunshine fixed some "const versus non-const" warnings in
	  csPolyPlane and TextureTrans which were pointed out by
	  Petr Kocmid <pkocmid@atlas.cz>.
	- Eric Sunshine modified the DECLARE_TYPED_VECTOR() macro based upon
	  a suggestion by Brandon Ehle <azverkan@yahoo.com>.  It is now
	  possible to specify the class name of the new vector type, the
	  superclass type, as well as the element type.
	- Eric Sunshine applied the final tweaks to Andrew's changes from
	  24-Sep-1999 which actually allows the renderer to work correctly in
	  24-bit RGBA mode on big-endian hardware.
	- Andrew Zabolotny is back to MazeD. He has started a major rewrite
	  of MazeD. It is now not compilable.
	- Andrew also added 'const' to many arguments that should be const.
	- Some changes from Thomas Hieber (removal of warnings mostly).
	- New DX6.1 renderer from Tristan McLure (added by Thomas Hieber to
	  CVS).
	- Brandon Ehle updated the VC project files (added by Thomas Hieber).
	- Seth Galbraith made some modifications to Squawk (version 17):
	    - Gravity flag controls whether a view rotates around the world's
	      Y axis.
	    - Enabled lighting for some sprites.
	    - Changed the FOV of each view.
	    - Added _control87 commands to disable some FPU exceptions.
26-Sep-1999
	- Continued work on lighting using octree. It is already working
	  reasonably well but there are still a few bugs. I also haven't
	  implemented the quad-tree yet which is essential for the big
	  speed improvement.
	- Seth Galbraith made some modifications to Squawk (version 16):
	    - A lot of restructuring.
	    - Replaced CS sprite with three .mdl format models.
	    - Changed fixed-size arrays into csVector subclasses.
	    - Created sqkView class which contains multiple csViews.
25-Sep-1999
	- Initial work on implementing lighting using octree.
	- Progress bar for lighting is now based on number of lights instead
	  of sectors. Makes more sense.
	- Nathaniel Saint Martin moved sound config stuff out of cryst.cfg
	  and into sndsoft.cfg and wodrv.cfg. Other changes to sound
	  as well.
24-Sep-1999
	- Andrew Zabolotny fixed some problems with the 3D software renderer
	  which affected 24-bit mode on big-endian machines which use RGBA
	  (as opposed to ARGB or ABGR).	 The renderer was using hard-coded
	  shift amounts which were incompatible with RGBA.
23-Sep-1999
	- Added csLightIt similar to csPolyIt. This means that progress
	  bar for lighting now moves according to the number of lights
	  and no longer according to the number of sectors.
	- Big optimization in sprite drawing. I eliminated 3*num_triangles
	  divides for every sprite!
	- Inlined csMath2::Area2() for faster backface culling. This should
	  improve sprite speed again.
	- Small optimization to lighting for sprites (suggested by Ivan
	  Avramovic).
	- New setting for sprite lighting. You can enable high quality
	  lighting for sprites which will use the current way to light
	  sprites. Or you can disable this feature (default) and get an
	  approximation which still looks good but is a LOT faster.
	- I added the 'sprlight' console command to control the above
	  setting. Also assigned the 's' key to 'sprlight toggle'.
	- Also added the SPRITE_HIGHQUAL config setting to control the
	  default.
	- Added a big patch from Nathaniel Saint Martin to the 3D sound
	  system. The EAX sound renderer is now version 2.0. 2D streaming
	  for hardware sound renderers (eax, aureal3d, and directsound3d).
	  A new ISoundBuffer interface for 2D sound. csSoundBuffer and
	  csSoundBufferObject are now csSoundData and csSoundDataObject.
	  You can construct 2D or 3D buffer from sound renderer and
	  you can create a 3D buffer from a 2D buffer.
	- Gary Haussman added externalmodels.txt which explains how to
	  import models in a format foreign to Crystal Space (3DS, MD2, ...).
	- Small fix to util.cpp for DOS (suggested by Seth Galbraith).
	- Michael Dale Long fixed a problem for GCC 2.95.
	- Fixed bug in new csPolygonClipper::ClassifyBox() routine.
	- Some docs for DOS and Squawk from Seth Galbraith.
22-Sep-1999
	- Optimization for sprites. Sprites are now only clipped to the
	  frustum when really needed. This means they are clipped to the
	  top-level frustum (the screen in most cases) and to portals
	  which indicate that they require this kind of clipping.
	  In addition the clipping first happens with a bounding box
	  clip. According to that test CS decides what to do next with
	  all the individual triangles.
	- Fixed bug with creation of bounding box for skeletal sprites.
	  The transformation of the connections was not properly taken
	  into account.
	- Fixed another bug with creation of bounding box for skeletal
	  sprites. The assumption that rotating an object space bounding
	  box is still a valid bounding box after rotation is invalid
	  if you're only using two corners to rotate.
	- Created new csBox3 similar to csBox (but a 3D version). It
	  is part of csgeom. I also put both csBox and csBox3 in
	  libs/csgeom/box.cpp.
	- Fixed handling of sprite bounding boxes in general.
	- Added csClipper::ClassifyBox().
	- Added csPoly2D::In().
	- Added csPoly3D::In().
	- Rendering of sprites is much smarter now. Clipping is only done
	  when it is really required. The bounding box of the sprite is first
	  tested against the clipper. If this bounding box is entirely
	  visible then no clipping of the individual triangles is needed.
	  If bounding box is entirely not visible then sprite need not
	  be processed further. This enhancement will greatly improve
	  speed of drawing sprites.
	- Fragdance contributed a WAL gfx loader to CS (Quake format).
	- I fixed a bug in the X 2D driver. It didn't correctly detect 32
	  bit display mode in all cases.
	- Eric Sunshine fixed a problem which prevented the csGame library
	  from compiling.  The problem was caused when csBox was broken out
	  into its own header file.
	- Robert Bate fixed the Mac port so it works with VFS.
21-Sep-1999
	- Jorrit reverted a fix on sprite lighting which Eric accidentally
	  removed.
	- Jorrit added SetPerspectiveCenter() to IGraphics3D to make
	  changable view centers work correctly. This is needed to use
	  the extensions added by Seth. Jorrit implemented this function with
	  all 3D renderers but only tested software and OpenGL.
	- Fixed DOS port so that colors are back. Problem was caused
	  by change from Long to ULong in pfmt.
	- Added doc on how to use new octree system.
	- Fix from Seth Galbraith on the DOS port.
	- Fix from Brandon Ehle which could cause WalkTest to crash
	  at cleanup (especially with OpenGL).
	- Fixed the creation of the texture mapping transformation matrix.
	  Now 45 degree polygons will work in all cases (thanks to Ivan
	  Avramovic for providing the fix).
	- Eric Sunshine fixed a signed-versus-unsigned comparison warning in
	  vfs.cpp which afflicted the DOS port.
	- Eric Sunshine fixed compilation errors in csLoader which showed up
	  after recent changes to csPolygon3D and TextureTrans.
	- Seth Galbraith made some modifications to Squawk (version 15):
	    - Merged Squawk's history.txt into squawk.txt.
	    - Changed 'room' to 'skybox' throughout squawk.cpp.
	    - Added AddViewVertex() method that takes relative coordinates.
	    - Two views are now always linked like a single concave view.  The
	      other views are now always independent.
20-Sep-1999
	- Eric Sunshine fixed an accidental sign-extension problem in
	  csPixelFormat.
	- Seth Galbraith provided a new version (v14) of Squawk.
	- Seth also changed csCamera so that each instance maintains its own
	  field-of-view.  He also moved class variables shift_x and shift_y
	  from csWorld into csCamera as instance variables.  Eric Sunshine,
	  who committed these changes to CVS on Seth's behalf, fixed two or
	  three bugs which had crept in, and also renamed a couple methods for
	  clarity and consistency.
	- Eric Sunshine moved standard.zip, shtlib_g.zip, and shtlib_m.zip
	  from the CS directory into the CS/data directory.
	- Eric Sunshine fixed a bug in the new polygon iterator, csPolyIt.
	  It would crash with a BUS error if the world contained no sectors.
	  This bug prevented MetaDemo and MazeD from launching.
	- Gary Haussman worked further on the MD2 importer in order that
	  it fully supports textures and skins. Not fully implemented yet.
	- Gary added code to read in data from a quake 1 MDL file.
	- Gary also changed vertex fog code for sprites so that the fog
	  polygon is properly blended. He also does some better renderstate
	  management to avoid pipeline stalls.
	- Andrew Zabolotny fixed expandpath() to properly expand paths
	  like c:something.
19-Sep-1999
	- Moved LIGHTMAP_SIZE config value from softrdnr.cfg to cryst.cfg
	  where it belongs.  It now works again.
	- Scaling of lightmaps works very well!	 You can now optionally
	  request that lightmaps are calculated in a higher resolution and
	  then finally scaled down to normal resolution.  The result is much
	  better quality lightmaps.  Note that the current scaling works by
	  averaging.  We have have to see if a box filter will be better or
	  not.	The new high quality lightmap renderer is enabled with
	  LIGHTMAP_HIGHQUAL=yes in cryst.cfg.  This new optoin is also
	  available from within the cryst.cfg that lives in the level
	  directory.
	- Fixed handling of commandline 'driver' option so that it works
	  again.
	- Added csPolyIt iterator which can be used to iterate over all
	  polygons of the world.  I made this to avoid having to add routines
	  to csThing and csSector which are only used to be able to handle all
	  polygons in a level (like InitLightmaps() ...).
18-Sep-1999
	- Started work on calculating lightmaps in high resolution and then
	  downsampling them later.
17-Sep-1999
	- Seth Galbraith made some modifications to Squawk (version 14):
	    - Replaced sky box textures with big 512x512 JPEG images.
	    - Centers of views adjusted depending on whether the views are
	      linked.
16-Sep-1999
	- Fix to console printing in system stuff from Stephan Goetter.
	- Siu-Hang Or implemented MergeTexture for the software renderer.
	- Fixed bug in sprites. UpdateLighting() could crash in some
	  cases (depending on the current frame/action).
	- Fixed bug with lighting of sprites. The lighting calculations
	  were completely wrong when sprites were scaled from object
	  to world space. Unfortunatelly the fix makes the lighting
	  calculations somewhat less optimal. I have the feeling they
	  can be optimized but I have to do some thinking about that :-)
	- Fixed a bug with loading of sprite position from world file.
	  This bug was recently introduced with VFS changes.
	- Tristan McLure provided a new DX6.1 renderer.
	- Jonathan Hudson <jhudso1@gl.umbc.edu> provided a fix for the
	  upside-down BMP bug.
	- Eric Sunshine fixed some bugs in DECLARE_TYPED_VECTOR from
	  csvector.h which would cause the Insert(), FreeItem(), and Equal()
	  methods to loop infinitely.
	- Eric Sunshine fixed some bugs in csCom which was introduced with the
	  new DX6.1 renderer.  The bugs prevented the application from
	  launching on all non-Windows platforms.
15-Sep-1999
	- Ivan Avramovic fixed a few spots where "sysdef.h" was not included,
	  but should have been.
14-Sep-1999
	- Eric Sunshine fixed a bug in VFS where csFile::GetSize() was
	  incorrectly reporting the file's size for "real" disk-based files.
	- Eric Sunshine fixed a bug in VFS where csFile::GetStatus() would
	  crash with a BUS error if the file had failed to open.
	- Robert Bate added VFS support for Macintosh.
13-Sep-1999
	- Added djgpp.html doc from Seth Galbraith.  Seth also updated
	  tutorial.html.
	- Small patch to unix glide driver from Stephan Goetter.
	- Added sprite selection code from David Durant.  Use mouse button 3
	  to select a sprite.
	- Andrew Zabolotny added a wildcard expansion feature to VFS.
	- Thomas Hieber fixed parser.h so that it compiles with VC.
	- Thomas also removed a new bunch of warnings.
	- Eric Sunshine fixed a bug in csVFS::FindFiles() which was introduced
	  when wildcard expansion capability was added.	 The bug frequently
	  caused FindFiles() to return a list of files from the root (/)
	  directory rather than the directory which was actually being
	  searched.
	- Eric Sunshine made the following changes to vsh (the VFS shell):
	    - Fixed a bug which prevented the program from terminating when the
	      user typed EOF (^d Unix, ^z DOS) on the input line.  In fact, it
	      went into an infinite loop which spewed carriage returns to the
	      console.
	    - No longer uses the deprecated gets() function which is subject to
	      input buffer overrun (and in fact, on MacOS/X Server, using this
	      function actually generates a run-time warning message).	Now
	      uses safe fgets() instead.
	    - Now strips excess leading and trailing white-space from the input
	      line.  Previously, such white-space would actually cause commands
	      to go unrecognized, and prevent arguments from working correctly.
	    - No longer gives an "unknown command: []" error when the user
	      enters a blank line.
	    - No longer overloads the name of the standard getopt() function.
	- Eric Sunshine fixed a problem in the Windows port's osdefs.h.	 It
	  was not respecting SYSDEF_ACCESS defined by sysdef.h.
12-Sep-1999
	- Fixed sprite visibility handling with octree/c-buffer and also
	  made somewhat more optimal. There is still a problem with skeletal
	  sprites. The bounding box is probably not computed correctly.
	- All AddVertex() routines in csgeom now return the index of the last
	  added vertex.
	- Optimized csBspPolygon handling for octrees.
	- Eric Sunshine rewrote MazeEditor::LoadWorld() so that it integrates
	  correctly with VFS and can once again load worlds.
	- Eric Sunshine worked around an OpenStep 4.2 compiler bug which was
	  triggered by vfs.cpp.	 The compiler generates unlinkable code when
	  an inline method in a class calls another inline method which the
	  compiler has not yet seen a declaration for.
11-Sep-1999
	- Fixed bug in handling of dynamic polygons (used for sprite
	  visibility detection with octree/bsptree). This means that sprites
	  now work in a sector using octree visibility. Visibility testing
	  is still not correct though. There are cases where sprites are
	  considered visible when they are not or the other way around.
	- Andrew Zabolotny integrated his Virtual File System (VFS) into
	  Crystal Space.  This was a major update to CS, and involved many
	  modifications to many portions of the system.
	- Andrew also made these additional changes to the system, some of
	  which are related to the VFS integration:
	    - Renamed Archive to csArchive.  Also renamed its methods to
	      conform to the CS naming convention.
	    - Removed read-only support from csArchive since this functionality
	      is now provided by VFS.
	    - Added new methods to csVector: QuickSort(), FindKey(), Find(),
	      FindSortedKey(), Compare(), CompareKey().
	    - Removed the global "csIniFile* config" variable.	Added Config
	      and Vfs members to csSystemDriver.  Use Sys->Config to access the
	      configuration file now.
	    - Renamed CSLoader to csLoader.  Renamed csLoader::LoadLibrary() to
	      LoadLibraryFile().
	    - Added FILE() option to the TEXTURE() and SOUND() commands
	      understood by the script files.  This feature allows you to give
	      the texture or sound a name which is different from the file
	      name.
	    - Added LIBRARY keyword to the WORLD file.	This is similar to the
	      C-language #include directive.
	    - Changed all of the standard zip archives to meet new VFS
	      requirements for pathnames.
	- Eric Sunshine provided a temporary replacement for a new, very
	  important header file, vfs.h, which Andrew forgot to check in, and
	  which left Crystal Space in an uncompilable state.  Eric was able to
	  reverse-engineer VFS in order to create the replacement vfs.h which
	  should serve until Andrew returns and checks in the "real" one.
	  This replacement header is completely functional and allows the
	  system to compile and run properly.
	- Eric Sunshine also performed the following additional bug fixes,
	  most of which are related to VFS or other global changes which
	  Andrew made:
	    - Renamed csVFS::EOF() to AtEOF() so that it does not collide with
	      the pre-processor macro EOF which is present on many systems and
	      defined as (-1).	Also fixed a problem which was considered an
	      error by some compilers.
	    - Fixed an initialization order bug in WalkTest which caused it to
	      ignore some of its command line arguments.  This made it
	      impossible, for example, to specify the name of the level on the
	      command line.  This bug showed up with the introduction of VFS.
	    - Fixed a serious bug in WalkTest where it was still calling
	      csLoader::LoadLibrary() instead of LoadLibraryFile() in order to
	      load standard.zip.  In some cases this bug resulted in
	      semi-random crashes.  In all cases, it resulted in the failure to
	      load standard.zip.
	    - Fixed a bug in standard.zip which was inadvertently introduced
	      when Andrew updated this archive to work with VFS.  The bug
	      resulted in a crash since the texture loader was unable to find
	      the image resource for one of the missile sprites.
	    - Fixed a bug in csLoader which resulted in sound files not loading
	      from standard.zip.  The problem was that the world file was
	      changed to use the new FILE() keyword for SOUND resources, but
	      csLoader was not updated to parse the FILE directive.
	      Consequently, the sound files could not be located.
	    - Fixed a bug in CSWS where incorrect order of initialization
	      prevented it from locating its image resources within MazeD.zip.
	    - Fixed a number of bugs in CSWS where it was looking for its image
	      resources in incorrect locations.	 These bugs were a consequence
	      of changes to the organization of MazeD.zip.
	    - Fixed MazeD so that it once again compiles.  Andrew's system-wide
	      changes introduced many compilation errors into MazeD.
	    - Fixed a bug in MazeD where it was unable to locate its tool bar
	      resources on account of changes to the organization of MazeD.zip.
	    - Fixed vsh (the VFS test shell) so that it no longer overloads
	      function names such as creat(), mount(), sync(), etc., which are
	      standard functions on the Unix platform.
	    - Fixed a bug in the vsh makefile where it refused to build vsh on
	      platforms which use static linking.  Also fixed the linkage
	      directives so that vsh can actually be built on platforms which
	      use static linking.
	    - Fixed a problem in the vsh makefile where it would not create any
	      of the output directories or process other dependencies on
	      platforms which do not use the .EXE extension.  Specifically, the
	      problem was that the meta target and the executable were both
	      named "vsh".  Unfortunately, the current makefile system does not
	      work properly when the meta target and executable have the same
	      name.
	    - Fixed the MacOS/X Server, OpenStep, and NextStep system drivers
	      so that they once again compile in the wake of Andrew's changes.
	      (He had partially patched them, but missed some items.)
	    - Fixed the Network Driver Demo so it once again compiles.
	- Eric Sunshine fixed a crasher in csPolygonSet::CompressVertices()
	  which prevented many level files from loading.
	- Eric Sunshine fixed compilation warnings in sector.cpp and
	  polyset.cpp.
10-Sep-1999
	- AddVertexSmart() is now deprecated. It is still there and can be
	  used. However, it is better (read faster) to use AddVertex()
	  and then do CompressVertices() afterwards (for things and sectors).
	- Changed STATBSP to use octree in all cases (this will automatically
	  revert to bsp tree if the number of bsp polygons is too low).
9-Sep-1999
	- Brandon Ehle found another case where 0 size allocation happens.
	  Fixed!
	- Thomas Hieber removed warning related to new COM definitions of
	  DECLARE_COMPOSITE_INTERFACE (something)
	- Thomas also made a new csThing::RemoveThing() function (untested)
	  and he also added code for calculating the intersection of three
	  planes.
	- Thomas fixed a bug related to the changes which Gary did yesterday
	  on the OpenGL 2D driver.
	- Gary Haussman added code to properly delete texture and lightmap
	  data nodes, which were causing a memory leak.
8-Sep-1999
	- Gary Haussman did some code cleanup in the OpenGL 2D driver.
	- Gary also added initial support for ARB_multitexture extension. The
	  only use of multitexture is to merge texture and lightmap rendering
	  into one pass, if multitexture is available.
7-Sep-1999
	- Robert Bate updated Mac projects so the conversion to CW Pro 5
	  is easy.
6-Sep-1999
	- Eric Sunshine imported Squawk version 13 from Seth Galbraith.
	- Eric Sunshine imported Siu-Hang Or's MazeD documentation.
	- Finally found out why the octree optimization didn't do as good
	  as expected. There were actually two problems. First I was lazy
	  and ignored nodes which straddle the Z plane (assumed they were
	  visible in all cases). Now I don't do this and properly clip the
	  outline of the node to the Z plane. The other problem was that I
	  was lazy when creating the c-buffer implementation. It is VERY
	  slow for polygons which extend heavily above and below the Y
	  boundaries of the screen. This is solved by clipping to the screen.
	  Now I get VERY good results.
	- Fixed c-buffer so that it correctly represents the spans as
	  the software renderer does. This means there no longer are gaps
	  for very thin polygons.
	- Robert Bate added the define for MACOS_VOLATILE.
5-Sep-1999
	- Discovered why octree creation takes such a long time
	  (almost than 40 minutes on my P-II 400). The reason is that
	  csPolygonSet::AddVertexSmart() is VEEERRRY slow.
	  Increased speed with several factors by adding
	  csPolygonSet::CompressVertices () which runs after all vertices
	  are prepared. Now octree creation went from about 40 minutes
	  to less than one minute.
4-Sep-1999
	- Solved a bug in optimization added on 2-sep with vertices.
	- Seth Galbraith made some modifications to Squawk (version 13):
	    - Converted all textures to 8 bit PNG format.
	    - Disabled lighting and mipmapping for the sky box.
3-Sep-1999
	- Today my son Ruben Tyberghein is born!
	- Gary Haussman did: initial change to OpenGL text drawing to use
	  textured polygons instead of glDrawPixels().	This was done because
	  certain types of hardware experience performance hits when
	  glDrawPixels() is used. Letters are not yet transparent, as they
	  were with glDrawPixels().
2-Sep-1999
	- Octree visibility culling works. Preliminary results on a 50000
	  polygon level are encouraging.
	- Eric Sunshine fixed some compilation warnings in the octree code.
	- Eric Sunshine applied a number of patches to the MacOS port which
	  were provided by Anthony Hubble for compilation with CodeWarrior
	  Pro 5.
	- Added csPolygonSet::GetCameraVertices () and
	  csPolygonSet::UpdateTransformation().
	- Added optimization to octree visibility culling to only transform
	  the vertices of the minibsp nodes that are actually visible.
1-Sep-1999
	- Made first provisions for culling of octree nodes. Added a function
	  to get the outline of an octree node and also added a cull function
	  which is a user function that is called during tree traversal (also
	  for bsp trees).
31-Aug-1999
	- Further work on octree. Added specific versions for ClassifyX()
	  to csPolygon3D.
	- Dumping statistics for csPolygonTree subclasses (csOctree and
	  csBspTree).
	- Further experimentation with -huge option.  I got very good results
	  but did an interesting observation.  Movement is VEEEERRRRYYY slow.
	  The reason is that movement of the camera does not use the CD system
	  to check if we have to go to another sector (through a portal).
	  This means that it has to check all polygons in the sector!
30-Aug-1999
	- Changed csPolygonInt::Classify() to use a plane instead
	  of another csPolygonInt. Also removed csPolygonInt::SamePlane()
	  because it is not needed.
	- Made csPlane::GetNormal() which is a const version of
	  csPlane::Normal().
	- csSector::UseStaticBSP() renamed to csSector::UseStaticTree().
	- Created new apimod.txt document which will list all changes
	  to the API between 0.14 and 0.16 when that is released.
	  Please everyone try to keep this document up-to-date!
	- Added csPolygonSet::GetBoundingBox(min_bbox, max_bbox).
	- Modified hugeroom to use the octree. Everything seems to work
	  but I haven't done any heavy testing yet. Node that this does
	  not mean yet that we have octree visibility culling. It is now
	  possible to use an octree instead of a bsp tree for organizing
	  the polygons in the tree.
	- Added csPortal::GetWarp().
	- Eric Sunshine fixed a compilation problem in the BeOS port and also
	  removed more unused code.
	- Eric Sunshine updated INSTALL.BeOS so that it provides instructions
	  for building the JPEG library.  He also updated various other
	  aspects of this document.
29-Aug-1999
	- Continued coding on octree.
	- Michael Dale Long fixed a bug in MazeD for GCC 2.95.
28-Aug-1999
	- Started coding on octree. I created a general csPolygonTree
	  parent which will be the parent of csBspTree and csOctree. In
	  future it will also be the parent of csKdTree.
27-Aug-1999
	- Thomas Hieber added proper version info to the VC project files.
26-Aug-1999
	- Eric Sunshine renamed docs/changes.old to changes.txt since Jorrit
	  recently brought it up to date.  Previously it was extremely out of
	  date, which accounted for the .old extension.
	- Andrew Zabolotny applied Seth's "sleep 2" patch to the DOS build
	  scripts.
	- David Fox sent a patch to fix a precedence problem in the UDP macro
	  in common.mak.
	- Siu-Hang Or sent a patch to fix another crasher in MazeD which
	  occurred when adding 3D volumes to an already-existing world.
	- Eric Sunshine imported Squawk version 12 from Seth Galbraith.	 Eric
	  also fixed a couple of new compilation warnings in Squawk.
25-Aug-1999
	- Andrew Zabolotny released a CrystalSpace-compliant version of aalib,
	  the Ascii Art library.  He also updated a number of keyboard and
	  display drivers.
	- *** Release of 0.14_001 ***
	- Seth Galbraith modified Squawk (version 12) to load and display an
	  animated 3D sprite.
24-Aug-1999
	- Jorrit fixed deletion of curve information in thing templates. It
	  used the wrong type of 'delete []'.
	- Eric Sunshine fixed CSWS and MazeD so that the desktop is correctly
	  repainted in all cases after information has been printed to the
	  console.  This fixes problems where some sub-systems printed
	  informational or debugging output without refreshing the desktop
	  afterward, thus leaving the desktop in an unusable state.
	- Eric Sunshine fixed numerous crashes in MazeD which occurred when
	  creating new shapes and volumes.  A number of places were trying to
	  set the UV coordinates on a csGouraudShaded prior to preparation of
	  the object via Setup().  Other places were adding vertices to a
	  polygon without a container.
23-Aug-1999
	- Minimize splitter in BSP tree creator uses random selection
	  instead of initial polygons. This improves BSP tree creation
	  a LOT!
	- Added vertical line optimization to c-buffer handling. This
	  is a single c-buffer line which holds information about the
	  full-line status of every horizontal line. If that c-buffer
	  line is full then this means that the hole screen is full.
	  Also we can avoid having to scan-convert a polygon if the top
	  and bottom vertices fall inside a span of that vertical
	  c-buffer line. This gives a considerable speed improvement.
	- Stop BSP processing if the c-buffer screen is full.
	- Eric Sunshine performed a major overhaul and re-engineering of the
	  BeOS port of Crystal Space.  The port is now about 95% usable
	  versus 25% prior to this effort.  In addition, numerous bugs were
	  eradicated and the source code has been cleaned up considerably
	  (though it still needs more work).  His changes include:
	    - MazeD is now fully functional.  Previously the user could not
	      even interact with it at any level.
	    - WalkTest is now fully functional.	 Previously about 65% of the
	      key bindings were inaccessible.
	    - Completely re-engineered the mouse handling code so that all
	      aspects of the mouse mechanism are now correctly implemented.
	      Previously only mouse-down was implemented properly, which was
	      not very useful.
	    - Completely re-engineered the keyboard handling code so that all
	      aspects of the keyboard mechanism are now correctly implemented.
	      The modifier keys (shift, alternate, control) are now fully
	      implemented.  Previously they were not implemented at all.
	      Fixed a problem with the handling of control-keys.  The old
	      code was not translating them into a form suitable for CS.
	    - Re-engineered SysSystemDriver::Loop() so that it correctly
	      handles the case where it is called recursively.	This case
	      arises when CSWS launches a modal panel.	In the old code, the
	      recursive case was 100% broken.
	    - Fixed the 2D driver so that it completely implements the
	      double-buffering protocol rather than only partially
	      implementing it.	This fixes severe display anomalies in MazeD
	      and CSWS.
	    - Implemented csGraphics2D::SetMouseCursor() so that the mouse
	      pointer is displayed properly in MazeD and CSWS.
	    - The Be application now terminates when Crystal Space requests
	      a shutdown (for instance, when "q" is pressed in WalkTest).
	      Previously it would go into a semi-comatose state where it
	      would only shut down when the user explicitly closed the
	      window.
	    - The rendering window is now closed when the application
	      terminates.  Previously it would hang out for a few seconds
	      after termination since the connection to the display server
	      was not being correctly severed.
	    - Crystal Space is now given a chance to shut down cleanly when
	      the user closes the window or terminates the application via
	      BeOS events (such as cmd-q or cmd-w or closing the window via
	      the mouse).  Previously these type of events forcibly
	      terminated the application without giving Crystal Space a
	      chance to clean up after itself.
	    - The application no longer crashes at termination time when
	      using the OpenGL driver.
	    - Removed a significant amount of unused and dysfunctional code
	      which was copied over from the X-windows port when Xavier
	      first created the BeOS port.
	    - The display window is now centered on the desktop at launch
	      time rather than appearing in the upper-left corner.
	    - Updated the BeOS port documentation to reflect these changes.
	- Eric Sunshine fixed a bug in the common OpenGL makefile where the
	  "clean" target was trying to delete the X-windows OpenGL driver
	  even on non-X platforms.
	- Eric Sunshine removed some obnoxious debugging output from MazeD.
	- Few changes from Thomas Hieber to csgame library.
	- Tiny update to XSystem::GetSubSystemPtr() from Michael Dale Long.
22-Aug-1999
	- Fixed potentially very harmful bug in csPoly3D::MakeRoom().
21-Aug-1999
	- Change from Robert Bate to Mac port: make sure the console is
	  full cleared when starting up and make sure the clipping rect
	  is setup so the console will draw draw the text.
20-Aug-1999
	- Fixed problem in cscom.cpp with 'int i' declaration inside
	  for loop.
	- Some changes from Ivan Avramovic. Minor changes to csMatrix3.
	  The Get?Rotation routines are now implemented as subclasses
	  and the Eigen functions have been moved into the CD lib.
	- Eric Sunshine fixed a new compilation warning about an uninitialized
	  variable in WalkTest.
	- Few fixes from Robert Bate. Also updates to project files.
	- Michael Dale Long updated VC project files for new files.
	  Thomas Hieber fixed CR/LF problem in the updated project files.
19-Aug-1999
	- Added 'statistics' to engine for c-buffer rejection/acception.
	  WalkTest also shows this with the 'stats' command.
	- Added new criteria to BSP tree building to concentrate on more
	  balanced trees (while still keeping splitting in mind).
18-Aug-1999
	- Fixed bug in BSP tree building. If a split happened on the very
	  first level then it is possible that a crash would happen because
	  the first array of polygons would be reallocated. This is fixed
	  by doing a copy first. It is less efficient but at least it
	  doesn't crash.
	- Fixed bug in SplitWithPlane() which is used by BSP splitting
	  code.
	- Two bugfixes to flat shaded texture mapping in DrawPolygonFX
	  from Andrew Zabolotny.
	- Fixed flat color selection in DrawFilled(). If the texture
	  is texture mapped it will take the flat color from the
	  texture instead of the polygon.
	- Fixed init of flat color in csPolygon3D.
17-Aug-1999
	- Small optimization. If a sprite is already marked visible we will
	  not do further processing on the bounding box polygons in the BSP
	  tree.
	- Fixed the c-buffer so that it does not crash when given polygons
	  which fall outside the y range.
	- There is still one problem with the visibility testing for sprites
	  using the c-buffer. If the sprite is too close it may disappear
	  (the c-buffer thinks it is not visible). I will fix that soon.
	- Added '-huge' commandline option to WalkTest. This will create
	  a really huge room full of random polygons. It is used to test
	  the c-buffer system.
	- Added new mode to BSP tree building which is a lot faster. It just
	  takes a maximum of 20 polygons to test for splitting.
	- Some small changes from Andrew Zabolotny. Also added autodetection
	  of installed OpenGL libraries for OS/2.
	- Andrew also fixed a bug in QInt() (for Intel processors only)
	  which caused QInt (1.0) to return 0. This bug could cause the
	  precalculated lighting stuff to fail completely (infinite
	  recursion).
	- Robert Bate updated Macintosh project files.
	- Michael Dale Long updated Windows/VC project files.
	- Thomas Hieber fixed the project file modified by Michael Dale Long.
16-Aug-1999
	- Added csSprite3D::AddBoundingBox().
	- Added a csPoly3D class to csgeom similar to csPoly2D.
	- Added a csPolyIndexed class to csgeom.
	- Added csVector3Array to csgeom. Rewrote csVertexArray to
	  inherit from csVector3Array.
	- Changed csPolygon3D to use the new csPolyIndexed class.
	- Basically csgeom now knows about the following four polygon classes:
	    - csPolygonInt: which is the general base class for every
	      polygon which should go in a BSP tree. It is a virtual
	      class and cannot be used as such.
	    - csPoly2D: a basic 2D polygon from which you can subclass
	      or which you can use standalone. There is also support
	      for a bounding box in 2D and clipping.
	    - csPoly3D: the same but in 3D. No bounding box and no
	      clipping though.
	    - csPolyIndexed: a polygon which doesn't hold the actual
	      values of the vertices but instead holds indices into
	      some array (which isn't maintained by this class).
	      csPolygon3D and csBspPolygon now use this class.
	- csengine knows about the following three polygon classes:
	    - csPolygon3D: the main polygon class. It uses csPolyIndexed
	      (but not subclassed). It subclasses csPolygonInt so that it
	      can be put in a BSP tree.
	    - csPolygon2D: our main 2D polygon class. It extends csPoly2D
	      by adding functions for drawing a 2D polygon on screen and
	      some others.
	    - csBspPolygon: A polygon specifically created for bounding
	      boxes for sprites and other dynamic actors. It uses
	      csPolyIndexed (but not subclassed). It subclasses csPolygonInt
	      so that it can be put in a BSP tree (in fact, that is its
	      purpose).
	- Basic c-buffer testing on sprites seems to work now. I
	  need to test it further though. I also need to test the
	  performance of this new system. What gain do we really get.
	- Andrew Zabolotny added 32bpp mode support for OS/2. He also
	  fixed RGB lighting in 32bpp modes. Blue and red channels were
	  swapped both for low-endian and big-endian machines.
15-Aug-1999
	- Started work on new bounding box object. This object is
	  specifically designed to be inserted in a BSP tree dynamically.
	  The classes are csBspPolygon and csBspContainer.
14-Aug-1999
	- Added a new BSP mode (BSP_RANDOM) which allows for faster
	  BSP tree creation (but with less quality).
	- Added the calculation of bounding boxes for sprites. Every
	  frame has its own bounding box in object space. For a skeleton
	  sprite, every limb has its bounding box in object space.
	- Thomas Hieber did some cleanup in the API for csWorld and
	  csTexture.
	- Thomas also fixed a workaround for a bug in the Jpeg loader
	  which caused memory to be overwritten.
13-Aug-1999
	- Added an extra parameter to the BSP tree builder so that you
	  can select a criteria on which to choose the BSP splitter.
	  This used to be a #define.
	- Provided the ability to add dynamic polygons to a BSP tree.
	  This is untested currently but the plan is to use this ability
	  to add dynamic (i.e. moving) things and sprites to the BSP tree.
	- Andrew Zabolotny fixed several DJGPP related issues with regards
	  to the dependency generator that he wrote. He also fixed and
	  improved the AA driver (ascii art). It now works on DOS but
	  requires a version of AA lib that only Andrew has (we will soon
	  add that to the CS site).
	- Some other small changes from Andrew.
	- Thomas Hieber added the ability to embed the CS output window
	  into another application.
	- Thomas fixed windows port to have a more consistant timer.
12-Aug-1999
	- Implemented an object pool for csLightPatch. This improves speed
	  of dynamic lighting noticably.
	- Fixed memory leak in CS (introduced recently). This also
	  gives the performance improvement which we were expecting from
	  creating the csTransformationManager but which we didn't
	  really get.
	- Avoided other large allocations at runtime by not allocating
	  a lightmap copy everytime we have to check if dynamic lights
	  altered a lightmap.
	- Fixed an error in sprite lighting which causes unneeded
	  reallocation and deletion of the sprite vertex color arrays.
	  This is another performance enhancement.
	- Added Dumper functions for the new pools.
	- Crystal Space no longer crashes when you exit while a dynamic
	  light is active.
	- Fixed Squawk so that Open is called earlier. This caused a
	  crash otherwise.
	- Edge drawing works now too when c-buffer is enabled.
	- Fixed Blocks so that dynamic gouraud shading works again.
	- Andrew Zabolotny added an Ascii Art library driver! :-) More for
	  fun than something useable...	 Fixed/improved some things in
	  engine a bit that he discovered while debugging that driver. For
	  example, console font size choosing should always work okay. Before
	  my changes it can happen that 2D driver sets one width/height but
	  system driver knows about completely different width/height.
	- Thomas Hieber contributed some fixes and update to VC project files.
	- Changes to Macintosh project files from Robert Bate.
	- Eric Sunshine fixed a compilation error in blocks.cpp caused by
	  incorrect resolution of conflicts between the previous two revisions.
11-Aug-1999
	- Only transform a polygon to camera space AFTER clipping instead
	  of before. This improves performance slightly and also fixes
	  a bug with the c-buffer and space warping portals (at least, the
	  bug is almost fixed).
	- Completely fixed the c-buffer problems with space warping
	  portals (i.e. mirrors).
	- Fixed bug with crash at exit when using a bsp tree and a uniform
	  dynamic light.
	- Create a new general csPoly2D class in the csgeom library.
	  The old csPolygon2D class inherits from csPoly2D to add engine
	  specific functions (like perspective correction, drawing, fog, ...)
	  The reason is that we want to use the csPoly2D class in some other
	  parts of csgeom and csgeom cannot depend on csPolygon2D since
	  that lives in the engine.
	- Also moved the csPolygon2DPool from csengine to csgeom and
	  renamed it to csPoly2DPool. It accepts a csPoly2DFactory subclass
	  which is a factory responsible for creating subclass of
	  csPoly2D.
	- csClipper now uses a polygon pool instead of creating new
	  polygons every time we go through a portal.
	- Changes from Robert Bate to update history and installation
	  instructions for the Macintosh.
	- Robert Bate updated the Macintosh project files.
	- Andrew Zabolotny did some changes to Makefile. System configuration
	  scripts can now autodetect additional drivers to build. For example,
	  config script can detect whenever OpenGL headers/libs are installed
	  and set DRIVERS.SYSTEM=c23d/glrender cs2d/glos2.
	- Eric Sunshine worked around a NextStep compiler bug triggered by
	  Jorrit's changes to the polygon code.	 Specifically, the static
	  csPolygon2DFactory instance in pol2d.cpp triggered a bug in the
	  compiler which caused it to consume memory endlessly until all swap
	  space was exhausted.
10-Aug-1999
	- Eric Sunshine fixed a bug in MetaDemo.  It was not parsing its
	  command line arguments correctly.  Instead of explicitly looking for
	  a texture name argument, it implicitly assumed that the first
	  argument was always the texture name, even in cases where it was
	  some other perfectly valid string such as -driver or -simdepth.
	- Eric Sunshine eliminated the obnoxious spinning text cursor which
	  was continuously printed to "stdout" by Blocks during game play.
	- Eric Sunshine fixed WalkTest's broken "-infinite" option.  It caused
	  the application to crash during initialization.
	- Eric Sunshine patched 'makedep' (which Andrew added) so that it
	  compiles on NextStep.
	- Eric Sunshine updated many out-of-date documents in the 'docs'
	  directory.  He also renamed a number of documents in order to
	  achieve a more sensible organization and better naming consistency.
	- Split polygon.cpp into polygon.cpp and pol2d.cpp.
	- Fixed memory debugger again. It had unneeded depencies on the
	  system stuff.
	- Fixed an old bug in the lighting calculator. Apparantly allocating
	  an array of zero size can give problems. We need to check if this
	  happens elsewhere.
	- Jorrit checked and there were some other places where this happened:
	  allocation of sprite frames and reading of archive stuff.
	- With the change to the csPolygon3D class and the fixes to the above
	  mentioned bugs, BSP trees work almost perfectly for gouraud shaded
	  polygons. There are still a few problems. Working on them... :-)
	- Remove libs/csengine/bsppol.cpp again because it is not needed
	  anymore.
	- Bugfix: forgot to set a new transformation frame for lighting
	  calculations and csWorld::DrawFunc().
	- Everything seems to work well. Here is the list of currently known
	  bugs (in the c-buffer/bsp system):
	    - A crash at exit when deallocating a csPolygon3D.
	    - Edge display does not work correctly when c-buffer is enabled.
	    - Space warping portals still have problems with c-buffer.
	    - There are still cases that drawing with the BSP tree gives
	      incorrect results.  Very rare though.
	    - The falling blocks in Blocks are not correctly lighted anymore.
	- Changes from Andrew Zabolotny. Fix for DJGPP so that volatile.h is
	  correctly generated. Various other makefile changes.
	- Andrew Zabolotny fixed bug with 32-bit lighted textures in BGRA
	  modes. He also improved the speed of the 32-bit texture cache.
	  He also created new texture caching code for 24-bit textures
	  in 16-bit and 32-bit modes. Faster and allows for correct 2*SRC*DST
	  handling (lights twice as bright).
	- Eric Sunshine moved the MacOS/X Server MAKE_VOLATILE_H bug fix out
	  of Makefile and into macosxs.mak, thus localizing the bug fix and
	  simplifying the configuration phase for other platforms.
	- Eric Sunshine updated INSTALL.NeXT and INSTALL.NeXT-Binary to
	  reflect the fact that Crystal Space no longer automatically performs
	  a "-recalc" when AMBIENT_WHITE changes.
9-Aug-1999
	- Changed merged things (static_thing) so that the original things
	  are removed instead of kept in memory for no useful purpose.
	- Renamed some functions which contained the term 'Lightmap' to the
	  same name but with 'LightMap' instead.
	- Very fundamental change in the csPolygon3D class. This is a change
	  which has a large effect on the API of csPolygon3D. The
	  lighting/texture information has been separated from csPolygon3D and
	  put in another class (csPolygonTextureType).
	  There are two subclasses of csPolygonTextureType:
	  csLightMapped or csGouraudShaded. The first
	  case is default and represents the usual lightmapped polygon. The
	  second case is a gouraud shaded polygon. This changes makes
	  csPolygon3D a lot cleaner and smaller. In principle this change will
	  also make it easier to add future types. The cleanup is currently
	  mostly in data separation and API. Most of the lightmap handling
	  code is still in csPolygon3D. This needs to move in the future.
	- Andrew Zabolotny added the 'makedep' application which is a faster
	  dependency generator. It is based on the 'makedepend' from X11
	  distribution. This dependency generator does not need 'gcc' to run
	  but even with 'gcc' it is better because it is faster. You can enable
	  the new 'makedep' in mk/user.mak.
	- Andrew also added changes received from Walt Armour <walt@armour.cx>)
	  which removes warnings for gcc 2.95.
	- Andrew also started a GCC/Win32 port (still incomplete).
	- Thomas Hieber added a pragma to remove a warning for MSVC 5.0 and
	  updated the VC project files.
	- New Macintosh project files from Robert Bate.
8-Aug-1999
	- Continued work on new csTransformationManager class. It is now fully
	  functional and the old NewTransformation()/RestoreTransformation()
	  functions have been removed.
	- Eric Sunshine fixed the 'clean' target in the Makefile so that it
	  also deletes the generated $(OUTDLL) directory.
	- Eric Sunshine fixed problem in Squawk.  It was not properly clearing
	  the console text in double-buffered environments.
	- Eric Sunshine started cleaning up the BeOS port of Crystal Space.
	    - It now builds straight out of the box.  There is no longer any
	      need to relocate or edit makefiles.
	    - It now builds cleanly.  All compilation warnings and errors
	      have been eradicated.
	    - Disabled the excessive debugging output.
	    - Updated the documentation.
	    - Mazed, Shooter, Squawk, CSWSTest, NDrvDemo now compile and run.
	    - The socket library and simple network manager now compile.
	    - The version string now says "BeOS-Intel-GCC" rather than
	      "Unix-Intel-GCC".
	    - The user no longer needs to manually configure for buggy EGCS.
	- Following the decision to use 'CS' universally as Crystal Space's
	  root directory (rather than 'cryst'), Eric Sunshine updated the
	  remaining documentation to correctly reflect this choice.
7-Aug-1999
	- Continued work on better bsp support. Added the
	  csPolygonBspContainer class. Also moved new bsp stuff to
	  libs/csengine/bsppol.cpp.
	- Started work on new csTransformationManager class which will give us
	  a better way to manage world to camera transformations.
6-Aug-1999
	- Wrote an object pool design pattern class for 2D polygons. They
	  are used instead of the global 'clipped' variable which caused
	  nothing but trouble. This is cleaner, more efficient (even for
	  memory) and MUCH easier to program with. The underlying problem
	  is that I'd like to use several 2D polygons at the same time but
	  I don't want to allocate/deallocate them every time they
	  are used. The object pool can do that. There are other places in
	  CS where this object pool could be useful. That's for the future.
	- Added new 'cbuffer' command to WalkTest that you can use to
	  experiment with the new c-buffer mode. It is disabled by
	  default. Jorrit also added a key binding for 'cbuffer toggle' on key
	  'd'.
	- The c-buffer system works fairly well right now. The current
	  implementation is written specifically with hardware acceleration in
	  mind. It works best for hardware accelerated renderers. But even so
	  the software renderer can achieve a lot of benefit as well. But for
	  the software renderer we can get even more gain by including the
	  c-buffer in the actual rendering instead of only occlusion culling.
	  Also for the future.
	  Note that there are still a few bugs in the current c-buffer handling
	  (for example in the handling of space warping portals).
	- The new c-buffer system only gives benefits in sectors where you
	  have a static bsp (STATBSP() option in sector) and a number of
	  non-moving things which are then merged in that static bsp. Only
	  in this case do you gain anything.
	- Provided a temporary fix so that collisoin detection works if a
	  static thing is used (BSP for non-moving things in a sector). I'm not
	  sure why it didn't work before. This needs more investigation.
	- Because of the need to use STATBSP() more (an option which is not
	  used in any of the current levels) Jorrit noticed a few shortcomings
	  of the STATBSP implementation. The most important one being that
	  gouraud shaded polygons are not handled well. After a little thinking
	  Jorrit decided that it is best to rewrite BSP handling a bit. The
	  current way is too clumsy. Ok, let's start...
	- Added a new class csPolygonBsp. This is a proxy polygon class
	  which will be used in the new BSP trees. A csPolygonBsp is basically
	  just a collection of vertices and a pointer back to the original
	  polygon. The BSP tree builder will operator on csPolygonBsp
	  instances and split them. The original csPolygon3D objects are
	  unmodified.
	- Eric Sunshine added a "simulated depth" option (-simdepth and
	  VideoDriver/SIMULATE_DEPTH) to the MacOS/X Server, OpenStep, and
	  NextStep ports.
	- Eric Sunshine fixed bugs in a few platform-specific csSystemDriver
	  subclasses where config->GetYesNo() was used instead of
	  config->GetInt() to determine simulated depth.
	- Eric Sunshine fixed a recently-introduced bug in csGraphics2D::
	  complete_pixel_format().  It would go into an infinite loop when
	  called unnecessarily by some 2D graphics drivers at 8-bit depth with
	  the red, green, and blue masks set to zero.
	- Compilation fixes for GCC 2.95 from Michael Dale Long.
	- Andrew Zabolotny fixed the software renderer again.
	- Eric Sunshine fixed a problem where a recent change to netsdrv.cpp
	  caused compilation to fail on OpenStep and NextStep, on account of
	  the unknown "socklen_t" type.
5-Aug-1999
	- Eric Sunshine fixed a compilation warning in djvidsys.cpp where
	  XModeCount was declared without a type.  It is now declared as int.
	- Michael Dale Long did some fixes on ISystem::GetSubSystemPtr().
	- Small change to 2D OpenGL X driver to show 'XSHM' if it is used.
	- Improved the c-buffer implementation to use one global unused
	  list instead of an unused list for every scanline.
	- Continued work on the c-buffer stuff. Note that it is still not
	  enabled and the current queue stuff that I added is already obsolete
	  before being used even once :-) I'm going to implement it in a much
	  better and more general (and less error prone) method using the
	  object pool design pattern.
	- The CACHE option for the software renderer was mistakenly
	  put in the Hardware config section. Moved to the TextureManager
	  section where it belongs.
	- Eric Sunshine generalized the MacOS/X Server, OpenStep, and NextStep
	  makefiles slightly.
	- Thomas Hieber made D3D port compilable again and fixed the
	  project files for Win/VC.
	- New project files for Macintosh from Robert Bate.
4-Aug-1999
	- Implemented dynamic lighting for gouraud shaded polygons (NOT sprites
	  and curves, that's another matter).
	- Eric Sunshine committed Seth Galbraith's latest version of Squawk
	  to the CVS repository.  He also made the following modifications:
	    - Fixed a problem with the handling of the texture manager.	 The
	      palette was being allocated prior to world->Prepare(), whereas
	      it should have been allocated after.
	    - The console now latches palette colors before and after the
	      world has been prepared, thus allowing it to be used at any
	      time, rather than only prior to world preparation.
	    - The background is now erased prior to activation of the 3D views
	      in order to clear away console text which incorrectly appeared
	      in gaps between views.
	- Eric Sunshine fixed oodles of new compilation warnings and a few
	  compilation errors in MazeD.	Also fixed a link error caused by a
	  second definition of csTextureMM::fIgnoreLoadingErrors which
	  incorrectly materialized in me_world.cpp for an unknown reason.
	- Robert Bate fixed compile errors for CodeWarrior (Macintosh).
	- Changed glOrtho again. This fixes the problem of the walls
	  disappearing when you come to close. Unfortunatelly this means
	  that Z buffer is now not accurate anymore :-( We need to find
	  a better solution for this.
	- Jorrit forgot to change the second CalculateFogPolygon() routine
	  so that it also uses Z for distance calculation and not sqrt.
	- Jorrit found an extra pass for the OpenGL renderer which
	  improves quality for SRC*DST mode on the RIVA 128. It almost
	  looks like 2*SRC*DST.
	- Andrew Zabolotny did a cleanup in all 3D drivers:
	    - Made a separate config file for software renderer
	      (softrndr.cfg) and moved every related configuration
	      parameter from cryst.cfg (etc) to it.
	    - Removed all methods from IGraphics3D interface that are
	      useful only for software renderer, removed them as well
	      from all other renderers.
	    - Fox for 32-bit modes different from RGBA (unlighted textures).
	      Not tested though.
	- Thomas Hieber made MazeD, software renderer, and some other
	  stuff compilable again on MSVC. He also fixed the VC project
	  files.
	- Robert Bate fixed software renderer with regards to DO_MMX.
3-Aug-1999
	- Added 'FILE' keyword in SPRITE template loader so that you can load
	  3DS and MD2 files from within a world file (and every other format
	  that may be supported by the import modules). So now you can do
	  SPRITE 'mySpriteTmpl' (TEXNR ('test.gif') FILE ('test.3ds'))
	- Fixed bug in reading of 3DS texture coordinates. They had to be
	  reversed. i.e. u in a 3DS files corresponds to 1-u in a CS sprite.
	- Fixed another bug in reading of 3DS texture coordinates for
	  different chunks of vertices.	 Only the first series of vertices was
	  correctly textured.
	- Changed the Cross Builder Factory (for importing models from other
	  formats) so that there is now also a version which accepts a
	  previously created object.
	- Create a new Cross Builder Factory for thing templates so you can
	  now convert 3DS and MD2 models to things as well (gouraud shaded).
	- Implemented UV coordinates for things templates.
	- Added 'FILE' keyword in THING template loader as well.
	- Michael Dale Long added Initialize() code to GGI 2D driver
	  so that the GGI port works again.
	- Added update to MazeD from Or Siu-Hang with the following changes:
	    - All things in the world all displayed. Previously only one
	      thing was displayed.
	    - The save path was incorrect. The map was saved into
	      cryst directory no matter the path that the user
	      selected.
	    - Some hand-edited map features (like 'start' and
	      'thing') were lost when MazeD loaded and then saved
	      the level. This is now fixed. There are still a
	      few features not supported though.
	    - Portal Expression Generation: select it in edit/select
	      menu, drag accross the portal position and MazeD
	      will gnerate a portal expression for the two sectors involved.
	    - Polygon Mirror Expression. You can now change the
	      attributes of a selected polygon by changing the
	      texture, name, and even the mirror effect of a
	      particular polygon (edit/select/polygon).
	- Fixed long standing bug with csPolyPlane::ObjectToWorld(). This
	  function did not bother to normalize the resulting world plane.
	  Most of the time this does not give problem except when scaling
	  things or polygons. Then this could affect lighting and other
	  parts of the engine. Unfortunatelly this extra normalization
	  is not efficient.
	- Eric Sunshine fixed a problem in 3ds.cpp where the compiler
	  correctly warned that "num_cor3_prev" might have been used
	  uninitialized.
2-Aug-1999
	- Added 'maxpol' debugging functionality to OpenGL renderer (just
	  like software renderer).
	- Experimenting with OpenGL renderer. Fixed a bug already (lightmap
	  scaling).
	- Implemented a c-buffer class (csCBuffer). Project file maintainers
	  need to add libs/csengine/cbuffer.cpp and include/csengine/cbuffer.h.
	- Andrew Zabolotny fixed a bug in the makefile system which caused
	  some changes in user.mak not to be reflected in volatile.h.
	- Andrew did many small changes required to build Win32 version from
	  command line using GNU Make and VC++. He removed DllMain() from
	  several 3D and 2D drivers and moved it to a separate file
	  libs/cssys/win32/dllentry.cpp. Moved ModuleHandle to csCOM library.
	  Fixed complete_pixel_format() to work around a bug in VC 5.
1-Aug-1999
	- I managed to get hardware accelerated OpenGL in Linux (for my
	  RIVA 128)!
	- Changed glOrtho() settings in OpenGL renderer so that it works better
	  on my RIVA 128 card (problems with Z buffering otherwise).
	- For OpenGL/DrawPolygon() the Z buffer test is disabled when blending
	  a lightmap if Zbuf mode is equal to fill. This gives a noticable
	  performance increase (about 5%).
	- Use Z instead of sqrt for vertex fog distance calculation. This is
	  not as accurate but a lot faster.
31-Jul-1999
	- Michael Dale Long made a small fix in unixconf.sh for IRIX.
	- Michael also fixed a divide by zero bug in OpenGL renderer
	  (with small lightmaps).
	- Gary Haussmann added mdl_read method for reading Quake1 model
	  files. Not yet implemented.
	- Gary also added code to recognize and read in texture coordinate
	  chunks from a 3DS file.
30-Jul-1999
	- Andrew Zabolotny made some changes to vertex fog to try to bring
	  it closer to software. If you have problems with this you can edit
	  libs/csengine/polygon/polygon.cpp and undefine USE_EXP_FOG.
	- Based upon a suggestion by Andrew, Eric Sunshine simplified the
	  MacOS/X Server patch for volatile.h in the Makefile.
	- Thomas Hieber updated Win documentation and removed a lot of
	  MS headers/libs (copyright problems).
	- Andrew Zabolotny also did a small makefile change for the
	  sockets driver and updated the sockets driver for OS/2.
29-Jul-1999
	- Removed support for planed fog. It is obsolete now that we have
	  vertex fog.
	- *** Release of 0.14_000 ***
	- Eric Sunshine fixed a couple of "unused variable" compiler warnings
	  in polygon.cpp.
	- Andrew Zabolotny improved speed of flat shading in software mode.
	- Thomas Hieber added dll's for Win32 (PNG, JPG, and ZLIB).
	- Robert Bate fixed 'loadsprite' in WalkTest for the Macintosh.
	  It allocated a large object on the stack and this is now allocated
	  with 'new'.
	- Robert Bate did some other changes to the Macintosh port (project
	  files mainly).
	- Robert Bate also moved the deletion of the font server and texture
	  cache to the close method so that the mac version can have them
	  destroyed before the OpenGL context that they depend on is destroyed.
	  Macintosh OpenGL also uses the common OpenGL code now.
	- Robert also did some fixes on the Glide stuff.
	- Robert also fixed 8-bit color for the Macintosh version.
	- Thomas Hieber added the latest changes to the input system by
	  Xavier Trochu (DirectInput).
	- Thomas also added WIN32_VOLATILE to the VC project files.
	- Seth Galbraith made some modifications to Squawk (version 10):
	    - Space bar links and unlinks view controls.
	    - Allocate palette before creating console.
28-Jul-1999
	- Fixed fog in OpenGL. One-layered fog works now.
	- Clipping portals are no longer automatic. There is now a CLIP()
	  keyword which you can use to indicate a portal that clips
	  geometry in the destination sector.
	- Changed behaviour of csIntersect3::Plane() back to old.
	- Fixed testing for endian correctness for import routines. Loading
	  3DS files now works for Solaris.
	- Fixed OpenGL volumetric fog so that it supports multiple layers.
	- Fixed OpenGL volumetric fog so that it works for DrawPolygonFX as
	  well. This fixes sprites and curves. It works but there seem
	  to be a little problems yet. I'm not sure but it seems as if the
	  sprites drawn using fog stand out a little.
	- Xavier Trochu mentioned a bug in the ScanStr routine. It crashed
	  with unmatched quotes.
	- Andrew Zabolotny added correct flat shading for Gouraud-shaded
	  sprites (and non-Gouraud as well). Fixed the bug in walktest
	  that all sprites are unlighted during the very first frame.
	- Thomas Hieber removed a few warnings and updated the VC project
	  file.
	- Thomas also implemented vertex fogging in the D3D driver.
	- Andrew Zabolotny fixed support in OpenGL renderer for
	  Gouraud-shaded flat-colored polygons and added support for
	  non-textured renderer mode (press the 't' key to see this). This
	  is even better than the software renderer because it supports
	  lighting without textures.
27-Jul-1999
	- Added csWorld::EnableLightingCache() with which you can disable
	  the lighting cache (and thus saving of lightmaps to precalc.zip).
	- The lighting cache now gives a warning is the cache is being used
	  while objects (things and sectors) don't have proper names. This
	  is invalid usage of the cache.
	- I added the Squawk demo to CS.
	- Changed Blocks, Walktest (infmaze), Simple, and Squawk so that
	  they disable the lighting cache (no more precalc.zip for them).
	- Fixed ScanStr() so that a dot is also recognized as part of a
	  string.
	- Added 'loadsprite' command to WalkTest which is supposed to be
	  able to add MD2 and 3DS sprites (use 'addsprite' after 'loadsprite'
	  to really add the sprite to the leve). I haven't been able to test
	  it yet because: a) the code for MD2 loading isn't endian correct
	  yet and I'm on Solaris right now. b) It can only load 3ds version
	  3 files and I haven't found any of those.
	- Eric Sunshine fixed a bug in csGraphics2D::complete_pixel_format()
	  where it could go into an infinite loop during calculation of
	  RedBits, GreenBits, or BlueBits on account of accidental sign-
	  extension of its work variable.
	- Eric Sunshine modified the makefile configuration system so that the
	  NO_BOOL_TYPE setting is now stored in config.mak and volatile.h.
	  This setting is used to determine if include/types.h should provide
	  a fake "bool" type for compilers which do not support bool natively.
	- Eric Sunshine modified the makefile system so that the need for
	  NO_BOOL_TYPE is automatically detected during the configuration
	  phase.  Ports which use the GNU makefile system and which manually
	  specified NO_BOOL_TYPE in the past no longer need to do so.
	- Eric Sunshine fixed a bug in unixconf.sh where it was not correctly
	  handling the case when the "which" command failed to find the
	  program in question.
	- Eric Sunshine re-wrote the blitters for the MacOS/X Server,
	  OpenStep, and NextStep ports of Crystal Space so that they now work
	  in 15-bit and 32-bit RGB modes.  Previously they were restricted to
	  8-bit, 256 color palette mode.  Not only does this improve display
	  quality, but it also means that they can now take advantage of all
	  the features which are not available to 8-bit mode.  For instance,
	  sprites are now lighted correctly, bots and the skeletal tree are
	  now properly Gouraud shaded, the translucent green ghost is visible,
	  and Crystal Shooter works.  Testing indicates that the low-level
	  15-bit blitter is just as fast as the old 8-bit one, and the 32-bit
	  blitter is actually faster.
	- Eric Sunshine re-wrote the code which queries for device depth in
	  the MacOS/X Server, OpenStep, and NextStep ports.  It now queries
	  the WindowServer directly instead of the AppKit since the
	  WindowServer has a better notion of its preferred image format.
	  Under NextStep the WindowServer and AppKit will return the same
	  value, howevever as of OpenStep 4.1, the values may differ, and the
	  WindowServer's result should be taken as the truth.
	- Eric Sunshine fixed a bug in the mouse-down method of the MacOS/X
	  Server, OpenStep, and NextStep ports.	 The states of the Alternate
	  and Control keys were being incorrectly computed.
	- Eric Sunshine worked around a nasty bug in GNU make on MacOS/X
	  Server.  Specifically, it corrupts the contents of MAKE_VOLATILE_H
	  (and probably other variables) by truncating values which are
	  appended with +=.
	- Eric Sunshine worked around a bizarre bug in the MacOS/X Server PPC
	  compiler, where it would crash with an "internal compiler error" in
	  soft_txt.cpp any time find_rgb_map() was called.  A simple textual
	  reorganization of the file cured the problem.
	- Andrew Zabolotny made some fixes on the software renderer
	  (including the file he forgot yesterday). He also fixed 16-bit
	  unlighted texture drawer.
	- Fog in OpenGL almost works perfectly now. There are still two
	  problems: there is a problem with the thickness calculation in
	  relation to polygons which are oriented sideways from the
	  camera. I'm not sure what is happening here. You'll see the
	  effect soon enough. The other problem is that currently only
	  one layer of fog will work correctly.
	- Jorrit fixed the hardware 3D renderers so that gouraud shading works
	  again.
	- I changed the behaviour of csIntersect3::Plane() a bit.
	- A few changes to docs.
26-Jul-1999
	- Andrew made changes to DrawPolygonFX() (one argument instead of
	  three). He fixed a number of small bugs and adjusted the prototype.
	  It also now safely supports 2*SRC*DST mode by clamping lighting
	  values to (2,2,2).
	- Andrew removed scanln8.inc, scanln16.inc, & scanln32.inc and
	  replaced them with scanln.inc.
	- Unfortunately Andrew forgot to check in the new scanln.inc file,
	  which prevents the software renderer from compiling.	Therefore,
	  Eric Sunshine created a replacement scanln.inc file, as a stop-gap
	  measure, which at least allows the software renderer to compile.
	  Hopefully Andrew will commit his scanln.inc tomorrow if it is any
	  different than the one which Eric created.
	- More changes to makefile system from Andrew Zabolotny.
	- Thomas Hieber did a few changes. He prepared for the new
	  DirectInput keyboard handling (not yet activated) and fixed all
	  binary libraries for the Win port.
	- Some changes to Mac port from Robert Bate (error handling).
	- Seth Galbraith made some modifications to Squawk (version 8):
	    - Named sector (sectors must be named for lighting).
	    - Added console (palette is odd, font too big).
25-Jul-1999
	- Eric Sunshine worked around a variable redeclaration error in the
	  new md2.cpp file.  This problem affected older C++ compilers in
	  which the life time of a variable declared in a for(;;) statement is
	  not limited to the for(;;) statement, but instead extends beyond it.
	- Gary Haussmann added code for a 'cross builder' which can take the
	  data read in from various file formats (MD2, 3DS, DXF, ...) and
	  build standard Crystal Space objects from those files.
	- Michael Dale Long fixed project files for new files from Gary
	  Haussmann.
	- Added version of win32.cpp from Xavier Trochu which uses
	  DirectInput for keyboard handling.
	- Xavier Trochu also fixed the Windows OpenGL 2D driver so that the
	  console and FPS display works correctly.
	- Jorrit did an optimization in the software version of DrawPolygon.
24-Jul-1999
	- Changes from Thomas Hieber to fix Win32 again.
	- Seth Galbraith made some modifications to Squawk (version 7):
	    - Misc updates based on CVS changes.
	    - Moved stuff around, then moved it back :-)
23-Jul-1999
	- Small optimization in WhichSide3D (made inline). This could
	  be important for the lighting routines which use this function
	  a LOT.
	- Removed volume.cpp from csgeom library.
	- Fixed MetaDemo for Unix.
	- Changed typedef for COMBOOL to 'int'.
	- Started work on vertex based fogging for the engine and OpenGL.
	- Xavier Trochu fixed a bug in csSprite3D::RemoveFromSector().
	- Andrew Zabolotny removed DrawHorizLine from the 2D drivers and
	  replaced it with DrawBox (which is better).
	- Andrew also added a small speed improvement to DrawPolygonFX and
	  also made it 2*SRC*DST complient (software version).
	- Andrew made some fixes to the makefiles again (echo problem).
	- Some changes to Mac port from Robert Bate.
	- Seth Galbraith added terragent environment map textures to Squawk
	  (version 6).
22-Jul-1999
	- Updated some docs (like the todo and faq).
	- Added a callback to csSprite3D which is called just before the
	  sprite is drawn. This allows games to delay expensive sprite
	  operations until just before the sprite becomes visible.
	  The ghost and skeletal trees use this feature to stop animating
	  once they are no longer visible.
	- Defined COMBOOL as BOOL on Windows (safer).
	- Andrew Zabolotny added a static OpenGL 2D driver for OS/2.
	- Andrew also did some small fixes to the OS/2 port.
	- Significant change to the makefile system from Andrew.
	  First, there is no more need to add support for specific OS
	  targets into root Makefile. It will search the mk/system
	  directory for available targets.
	  'make depend' works better now.
	  volatile.h is now generated only during 'make system' run
	  (along with config.mak). Don't change config.mak manually!
	  (note from Jorrit: as a result of these makefile changes the
	  Linux port will now run about 25-50% faster compared to the
	  previous CVS update. This is no joke! :-)
	- Changed Initialize() function in csWorld so that the IGraphics3D
	  interface pointer is given instead of IGraphicsInfo. The reason is
	  that the 3D engine needs to get the width,height of the display
	  from the 3D rasterizer and not from the graphics subsystem.
	  The 3D rasterizer can fake things and run as if the system is in
	  another resolution (new feature in the software renderer).
	- Added '-smaller' commandline option to the software renderer.
	  With this option the rendering happens in a smaller internal
	  buffer which is then copied to the window every frame. The
	  copy happens with blending so that it looks nice. Simulated
	  640x480 is faster than normal 640x480 (but it does not look
	  as nice). The speed difference is larger with expensive software
	  features like fog and transparency.
	  Note that the 2D drawing is not affected by this. The copy from
	  the internal frame to the real window is done when 3D graphics
	  drawing has ended (before 2D drawing starts).
	- Eric Sunshine updated the MacOS/X Server, OpenStep, and NextStep
	  makefiles to work properly with Andrew's recent makefile system
	  changes.  There were a few errors, including a couple crashers, as
	  well as a few aesthetic problems.  Most of the errors stemmed from
	  the fact that the common next.mak makefile now gets included multiple
	  times, whereas previously it was only ever included once.  Also made
	  a few simplifications.
	- Eric Sunshine added a "platforms" target to the makefile.  This
	  allows the user to see the list of platforms for which Crystal Space
	  can be configured.  This list used to be available via "make help"
	  at all times, but Andrew's recent modifications changed the behavior
	  in such a way that it was no longer feasible to display the list of
	  platforms once the makefiles were already configured.	 The new
	  "platforms" target gets around this limitation by only performing
	  the extra work needed to generate the platform list if the user
	  explicitly requests it.
	- Eric Sunshine worked around some "const versus non-const" warnings
	  from the OpenStep compiler which turned up when the ghost was added
	  to keys.cpp.	The offending code actually looked fine, which leads
	  me to believe that this is another compiler bug.
	- More fixes to the OS/2 OpenGL driver from Andrew Zabolotny.
	- Andrew fixed a bug that made console crash in double-buffered
	  environments.
	- Robert Bate updated the Macintosh project files.
21-Jul-1999
	- Eric Sunshine uploaded new archives of zlib, libpng, and libjpeg
	  to the Crystal Space ftp site which conform to the new beta 13
	  directory hierarchy.
	- Collision detection is now correct for skeleton sprites (but
	  remember that sprite CD is not enabled in WalkTest).
	- The ghost now moves around. It uses real collision detection instead
	  of the hack that the bots use. So this should work much better.
	- Seth Galbraith made some modifications to Squawk (version 5):
	    - Use configuration file squawk.cfg.
	    - Added $(CSSCRIPT.LIB) to dependencies in squawk.mak.
20-Jul-1999
	- Gary Haussmann changed the OpenGL X 2D driver to be a little
	  bit smarter when detecting which supported visuals there are.
	- Gary also added support for user configurable lightmap blending.
	  The user can specify the blend mode to use as LIGHTMAP_MODE
	  in the opengl.cfg file. Also added some init code to properly
	  position the initialization text so you can read it now.
	- Fixed lighting of skeleton sprites.
	- Calculate normals for skeleton sprites (lighting) only once. This
	  means that it is important to iniatialize the skeleton to some
	  useful default setup (set up transformations in skeleton template).
	- Fixed lighting for sprites which are not touched by any light.
	- Fixed bug with delete[] being called too much with skeleton sprites.
	- Did some minor fixes on the changes from Eric Sunshine.
	- For more fun, Jorrit extended the 'addskel' command so that you
	  can now give a negative width. In that case the real width at every
	  node will be random between 1 and -width.
	- Implemented csSprite3D::DeferUpdateLighting() which defers update to
	  sprite lighting until the sprite becomes visible. Much more optimal.
	- Renamed BOOL to COMBOOL for compatiblity problems with BOOL on
	  some systems (like IRIX, MacOS/X Server, OpenStep, and NextStep).
	- Eric Sunshine made these changes:
	    - Made drawing optimizations to csProgressMeter and
	      csProgressPulse.	In many cases the impact of these
	      optimizations on drawing performance is quite dramatic.
	    - Fixed a new compilation warning in cssprite.cpp.
	    - Fixed the MacOS/X Server, OpenStep, and NextStep ports to so
	      that they once again compile following the rename of BOOL to
	      COMBOOL.
	    - Jorrit pointed out that the new library name csapputil is too
	      long for DOS.  It has been renamed to cstools.
	    - Jorrit pointed out that the csengine library had undesirable
	      static dependencies on csProgressMeter and csProgressPulse in
	      the cssys library.  Moved these classes to csengine for now
	      to remove this dependency.  Ultimately these classes should
	      probably be placed elsewhere since they are generic enough to
	      be useful to applications which use cssys but not csengine.  I
	      would do it myself, but I don't have time right now.
	- Added 'addghost' command to show a very nice skeleton green
	  semi-transparent ghost.
	- Michael Dale Long fixed dependency problem in ndrvdemo.mak.
	- Gert Steenssens fixed some Glide compilation errors.
19-Jul-1999
	- Added GetXRotation(), GetYRotation() and GetZRotation() to
	  csMatrix3.
	- Added 'addskel' command to demonstrate the new skeletal sprites.
	  The first argument is the depth. A depth of 1 will create a
	  root and one layer above. The second argument is the width. This
	  is the number of branches created at every depth. A good tree
	  is 'addskel 3,3'. Be careful with large numbers here. The
	  number of triangles grows VERY fast!
	- Eric Sunshine made the following changes:
	    - Fixed the long-standing bug which blanked out every line of the
	      the startup console except for the most recently printed line.
	      This bug affected platforms, such as Windows, MacOS/X Server,
	      OpenStep, and NextStep, which are restricted to performing
	      whole-display updates.
	    - Removed the broken requirement from SimpleConsole that 2D
	      graphics drivers must be able to perform partial display
	      updates.	Now the "area" argument to csGraphics2d::Paint() is
	      once again *advisory-only* as was the intention from the start.
	    - Rewrote SimpleConsole::PutText().	 It can now deal with partial
	      lines and supports destructive backspace.
	    - Added csProgressMeter and csProgressPulse which provide simple,
	      console-based user feedback during lengthy computational
	      processes.
	    - Used csProgressMeter & csProgressPulse to completely replace the
	      existing poorly implemented progress meter displayed on the
	      startup console during lighting.	Removed ill-conceived
	      MSG_TICKER, SimpleConsole::ReplaceLastLine(), and
	      SimpleConsole::ShowWork().  This significantly simplified the
	      code.  Progress meter functionality is now high-level, very
	      localized, and reusable, rather than being spread around
	      as numerous special-cases throughout all levels of the system.
	    - Created a new library, csapputil, which contains high-level,
	      specialized objects which may be useful to some application
	      frameworks.
	    - Sufficiently genaralized SimpleConsole, so that it could be
	      moved to csapputil and renamed it to csSimpleConsole.  It can
	      now be used by any application which has need for that sort of
	      functionality.  Previously other applications were using copies
	      of this class for the same purpose.  Now all applications use
	      the shared code.	Renamed the files from scon.{h|cpp} to
	      simpcons.{h|cpp}.
	    - Moved console.h from apps/support to include/cssys/common.
	    - The Command class, apps/support/command.{h|cpp}, is now derived
	      from a new class, csSimpleCommand which defines an interface for
	      high-level command interpreters.
	    - Fixed a bug in csSystemDriver::DemoWrite().  It failed to send
	      BeginDraw() to the 2D graphics driver.
	    - Removed all custom application-specific DemoWrite() methods
	      which simply duplicated, but did not extend, the functionality
	      of the one in csSystemDriver.
	    - Fixed MazeD's console.  There were two problems.	First, a bug
	      in CSWS's appSystemDriver::DemoWrite() prevented messages from
	      even making it to the console, thus it was never displayed.
	      Second, a change in the behavior of csWorld::Prepare() caused
	      the color palette used for the startup console to be wiped clean
	      after it was set up, but before it could be used.	 Thus the
	      startup console was incorrectly restricted to white text on a
	      white background.
	    - Made tcache.cpp, tcache16.cpp, and tcache32.cpp compilable on
	      NextStep for HPPA again.	The compiler, which apparently can not
	      deal with long method names (actually long method signatures),
	      was crashing with an internal compiler error when it encountered
	      create_lighted_texture_true_rgb_priv().  Shortened name to a
	      length acceptable to HPPA compiler.  Also renamed similarly
	      named private methods for consistency.
	    - Made various updates to a number of the documents in the 'docs'
	      directory.
	    - Fixed a number of sources and headers in the library directory
	      which were incorrectly including files from apps/support.	 Fixed
	      some makefiles which were unnecessarily including apps/support.
	      Hopefully the Crystal Space libraries no longer depend on
	      application specific functionality.
	    - Fixed a couple "unused variable" compiler warnings in
	      mazed/me_app.cpp.
	    - Fixed a broken .PHONY dependency in walktest.mak.
	- Fixes to Macintosh port from Robert Bate.
18-Jul-1999
	- Thomas Hieber replaced DrawPolygonQuick by DrawPolygonFX. He also
	  extended DrawPolygonFX with a new FX_Transparent mixing mode.
	- Thomas also improved the menu of Crystal Shooter.
	- Implemented first proposal for skeleton sprites based on the current
	  sprite system.
17-Jul-1999
	- Thomas Hieber updated documentation for Windows.
	- Thomas added all library headers and libraries for non-CS libraries
	  to CVS to make building CS easier.
16-Jul-1999
	- Jorrit decreased SMALL_Z from 0.1 to 0.01.  This should reduce the
	  chances of the variaus stages of the clipper going wrong and thus
	  remove a lot of the ugly polygon drawings.
	- Received and integrated makefiles for IRIX/SGI from Dmitry
	  Derevyanko <dmitryd@robotics.EECS.Berkeley.EDU>.
	- Or Siu-Hang fixed the Archive class (small bugfix).
	- Jorrit removed the obsolete physics stuff from the engine.
	- Jorrit moved all remaining public include files from libs to include
	  (csgame, csgfxldr, csscript, csws, cssys, csparser, and cssndldr).
	- Eric Sunshine made the following changes:
	    - Updated the MacOS/X Server, OpenStep, and NextStep ports of
	      Crystal Space to work with beta 13.  They had previously worked
	      only with beta 12.
	    - Fixed various compiler warnings generated by MazeD, impexp.cpp,
	      socket driver, math2d.h, and MetaBalls.
	    - Added a 'distclean' target to the makefile which deletes
	      config.mak and volatile.h in addition to the files removed by
	      'clean'.
	    - Updated Makefile to use each platform's description string as
	      specified in common.mak instead of duplicating them locally.
	    - Updated the makefiles so that the drivers2d, drivers3d,
	      netdrivers, snddrivers, and drivers targets work even for
	      platforms which do not use dynamic libraries (that is
	      USE_DLL=no).
	    - Fixed makefile bug: The win32vc platform was incorrectly
	      specified in Makefile and mk/common.mak.
	    - Removed unnecessary DRIVER_SUBMAKEFILES duplication from cs.mak.
	    - The NeXT-specific makefile modifier TARGET_ARCHS is now a
	      "sticky" option in config.mak.
	    - Updated the Primitive Editor to work with beta 13.
	- Large change from Andrew Zabolotny so that all system dependent
	  compile flags are stored in include/volatile.h instead of as flags
	  of the compiler.  This will make it easier in the future to
	  distribute binary distributions of CS (i.e.  'make install').
	- Jorrit prepared the first steps towards full sprite lighting
	  support.  It is not finished yet.
	- Moved Primitive Editor (PrimEdit) to the attic on account of
	  obsolescence.
	- Andrew Zabolotny corrected sprite lighting and also implemented
	  sprite lighting for sprites from world file in WalkTest.
	- Robert Bate fixed the Macintosh port.
15-Jul-1999
	- Added support for multi-sector sprites. Also simplified the
	  rendering process through portals a bit.
	- Removed csPortalCS class and put all functionality in csPortal.
	  There is no need for the current double class situation since
	  the landscape engine is going to be integrated and overriding
	  portal behaviour is still possible this way (like InfMaze does).
	- Fixes from Robert Bate for the Macintosh port.
	- Andrew Zabolotny add scan32a.asm which he forgot earlier.
14-Jul-1999
	- Added a lot of config file variables for collision detection and
	  speed of the new movement system.  Almost everything can be
	  configured now (movement speed, acceleration, jump speed, dimensions
	  of body and legs, ...).  See docs/config.txt (or cryst.cfg) for a
	  list.
	- Fix from Andrew Zabolotny to 'client' in ndrvdemo.
	- Andrew also fixed the X 2D drivers so that they can be included
	  in the same executable (CheckKeyPress() problem).
	- Added missing scan32a.h file for compiling with NASM.
	- Small changes to the makefiles from Andrew Zabolotny.
	- Andrew fixed the 'Black Screen' problem in MetaDemo and
	  Shooter (at least for OS/2).
	- Andrew changed BOOL to bool, TRUE to true, and FALSE to false
	  in libs/csgame and apps/shooter. Also another small fix
	  to the csgame library.
	- Eric Sunshine fixed a macro name (for multiple inclusion) in
	  ndrvscon.h.
	- Thomas Hieber cleaned up the project files for VC a bit.
13-Jul-1999
	- Fixed bug in ClipToPlane() which is only used for portals on
	  things. This bug could cause flickering polygons.
12-Jul-1999
	- New 'dumpvis' command. This command takes the current view
	  and dumps information for the rendering process. You will
	  see what sectors and polygons are rendered and how they are
	  clipped. This is useful for debugging purposes. The output
	  comes into 'debug.txt'.
	  I added 'ctrl-d' as a key shortcut for 'dumpvis'.
	- Fixed bug in engine so that you can safely set low values
	  for LIGHTMAP_SIZE in cryst.cfg. I tested 8 and 4 and this gives
	  really accurate shadows (at the expense of memory and speed of
	  course).
	- Moved a lot of the include files from libs/*.h to include/*.h
	  This includes csengine, csobject, csutil, and cscom.
	- Made csloader a little bit more robust.
	- Change from Andrew Zabolotny to remove automatic store of USE_NASM
	  into config.mak. This has been done so that config scripts (see
	  bin/dosconf.bat) can automatically detect whenever NASM is
	  installed or not and write their own settings of USE_NASM into
	  config.mak. If NASM is not autodetected by "make configure", you
	  will have to add manually "USE_NASM=yes" to config.mak in order
	  to use NASM.
	- Andrew also updated the 32-bit NASM routines:
	  draw_scanline_map_zfil, mmx_draw_scanline_map_zfil,
	  draw_scanline_map_zuse, draw_scanline_map_alpha50,
	  draw_scanline_tex_zfil, mmx_draw_scanline_tex_zfil,
	  draw_scanline_fog and draw_scanline_fog_view.
	  No more separate RGB and BGR fog versions! Now it should work for
	  any pixel encoding with just one routine.
11-Jul-1999
	- Thomas Hieber fixed/enabled mipmapping again in the Direct3D
	  renderer. This also improves performance a little.
	  Transparency will also work on mipmapped textures.
	  Textures are now automatically scaled to their ideal sizes
	  according to hardware restrictions (for example < 256).
	- Thomas also moved a few utility routines to the csutil library.
	- Denis Dmitriev moved 'coodload' and 'coordsave' commands
	  to WalkTest.
	- Denis also made our legs longer so that we can climb the
	  sidewalks in large.zip :-)
	- Thomas added a new build mode 'RelDeb' to the VC projects. This
	  is a release version with debug information.
10-Jul-1999
	- Denis Dmitriev fixed the Direct3D renderer so that the skydome
	  works correctly (problem with Z values being very large).
	- Andrew Zabolotny removed tables.*. Tables are now kept in
	  the Scan structure. New NASM routines for 16-bit fog (about
	  10% improvement).
9-Jul-1999
	- Made loading of worlds slightly more robust in case the
	  world file is corrupt (or just not a world file).
	- I added a fix from Thomas Hieber so that the Direct3D port
	  works correctly on RIVA 128 cards. The problem had to do with
	  the RIVA 128 DX driver not supporting non-square textures.
	  The fix is easy and general.
	- Ivan Avramovic moved the (nearly obsolete) csscript code out
	  of the engine into its own library (csscript). This clean
	  separation means that the engine no longer depends on that
	  code and that we can safely remove it when something better
	  appears.
	- Andrew Zabolotny modified the X 2D drivers (Software, OpenGL,
	  and Glide) so that autorepeat behaves better. This improves
	  the speed for walking around with the new movement code.
	  He also added support for keypad arrow keys.
	- Andrew also changed the makefiles so that there is no longer
	  a separate PIC directory if CFLAGS.DLL is empty.
8-Jul-1999
	- Updated makefiles for ndrvdemo. There are now two makefiles. One
	  for the client and one for the server. They generate the executables
	  'client' and 'server' (on Unix). Also did some other fixes (like
	  renaming scon.* to ndrvscon.* and proper txtmgr init).
	- Fixed a bug in the lighting routines (mostly with lighting through
	  portals on things). Fixing this bug happens to be an optimization
	  as well :-)
	- Some changes (bugfixes) to DJGPP port from Andrew Zabolotny.
7-Jul-1999
	- Major bugfix in collision detection code. It crashed completely
	  on sprites. CD with sprites seems to be broken though. But now
	  at least it doesn't crash anymore.
	- Mirroring of sprites and curves is correct now.
	- Drawing gouraud shaded polygons is also somewhat more efficient
	  because I avoided three divides for perspective correction for every
	  triangle (this remark is not for the sprites and curves).
	- orig_triangle is no longer needed with DrawFilled.
	- Made all gouraud shaded drawing (curves, sprites, and skydome) more
	  efficient by avoiding complicated calculations if the original
	  triangle was not clipped.  This also cleans up the code a little.
	- Changed clipper not to use memory allocation for sprite and curve
	  triangles. This makes drawing curves and sprites faster again.
	- Optimized curve drawing.
	- Andrew Zabolotny fixed an additional number of warnings and
	  converted some documents from CR/LF to LF.
	- Andrew also fixed the bug with startup console not working in
	  8-bit mode.
	- Andrew added a 'dosconf.bat' script which will help detect what kind
	  of options the DJGPP compiler understands. This works similar to
	  unixconf.sh. In addition he updated the DOS port to simplify palette
	  stuff, fix a bug with single-page non-X and non-VESA modes, and
	  fix a bug with Matrox VESA BIOS.
	- Serguei Narojnyi (Snaar) updated NdrvDemo and also added VC project
	  files.
6-Jul-1999
	- Andrew Zabolotny made the movement system from Denis Dmitriev time
	  dependent (so that movement speed is correct even if frame rate is
	  different).
	- Andrew also implemented fog in 8-bit mode and fixed alpha value
	  for 8-bit.
	- Andrew fixed SetMousePosition() for OS/2.
	- Fixed dependency on an csengine include file in OpenGL, Direct3D,
	  and Glide renderers.
	- Some fixes to networking code from Serguei Narojnyi (Snaar).
5-Jul-1999
	- I completely removed support for the 'map' command from the engine
	  and moved all of it to WalkTest using the new 'DrawFunc()' system.
	  Again the engine becomes a little cleaner :-)
	- Added csLight::LightingFunc() which is similar to
	  csWorld::DrawFunc() but now for the lighting frustum calculations.
	- I fixed the crash in OpenGL when pressing on the WalkTest
	  window with third mouse button.
	- Moved polygon and lighting selection from engine to WalkTest.
	- The 'frustrum' command has been moved from apps/support/command.cpp
	  to apps/walktest/walktest.cpp.
	- Frustum dumping works again (enable edge drawing, select a light
	  with the right mouse button and enable the 'frustrum' command) and
	  is moved from the engine to WalkTest.	 So I removed the
	  DumpFrustrum() function which existed in several classes (but wasn't
	  functional).
	- Removed csPolygon3D::hilight and moved to WalkTest.
	- Following a suggestion from Martin Geisse
	  <Hellwig.Geisse@mni.fh-giessen.de> I created a
	  csSpriteTemplate::NewSprite() function which creates a sprite from
	  a template. This is easier and more logical.
	- Patch from Andrew Zabolotny with a signficant speedup in the
	  alpha transparent texture mappers (16 and 32 bit).
	- Other changes from Andrew have to do with cleanup with regards to
	  indentation and also a few fixes to the collision detection system.
	- I removed csSector::HitBeam() with four parameters and
	  csSector::FollowBeam() since they were never used and no longer
	  served a useful function.
	- I changed MetaDemo and Simple so that they also load standard.zip
	  if present. They will try to load stone4.gif from standard.zip.
	- Made documentation a bit (INSTALL, README, walkthru.txt).
4-Jul-1999
	- Renamed csMath3::PlanesClose() to csMath3::PlanesEqual() and
	  added new csMath3::PlanesClose() function which is more correct (it
	  also normalizes the planes before testing equality).
	- Improved MarkRelevantShadowFrustrums() so that it also discards
	  shadow frustums for shadow objects which are on the same plane
	  as the object being shadowed. This improves shadow calculation
	  for things somewhat (as well as optimizing it) but we're still not
	  completely ready. Polygon of things can sometimes shadow other
	  polygons even if this should not happen.
	- Added csView::GetClipper().
	- Added csWorld::DrawFunc().  This is a special version of
	  csWorld::Draw() which does not draw but instead calls a callback
	  function which you can give it.  Using this it is possible to dump
	  debug information for what you can see on screen.  I plan to change
	  some of the existing features this way so that they are removed from
	  the engine and moved to game specific code (i.e.  WalkTest in this
	  case).
	- I implemented edge display using the new system.  Display of edges
	  is now completely done by the application and not by the engine nor
	  the 3D rasterizers.  I removed G3DRENDERSTATE_EDGESENABLE from all
	  3D renderers.	 There are three advantages from this change:
	    - The 'e' key will work on Windows now since edge drawing is done
	      in 2D mode.
	    - The 'e' key also works for all 3D renderers which support line
	      drawing.	Previously only software supported it.
	    - The engine became cleaner (smaller).
	- The 'edges' command has been moved from apps/support/command.cpp to
	  apps/walktest/walktest.cpp.
	- Increased speed of walking in 3D mode.
2-Jul-1999
	- I optimized the new movement system of Denis so that the gravity/CD
	  tests are only done when the camera moves. This increases
	  performance a bit.
	- Fixed look_up and look_down commands.
	- I also fixed a few bugs in the handling of the new 'status' prefix
	  with key binding.
	- The 'move3d' command works properly now.
	- Received patch from David Huen for the BE software and OpenGL
	  renderers. He also sent me Glide support for BE including a
	  glide2common directory which other Glide ports should use (similar
	  to openglcommon).
	- *** Release of 0.13_012 ***
	- I added the optimization back with csVector3 having no constructor.
	  But I did some VERY extensive testing before doing this. First I
	  created a constructor which initialized the value to 12345678.9.
	  Then I also added a CHECK() function which checked for that value
	  and was called in EVERY csVector3 function. I did find a few
	  problems and solved them.
	- Fixes to software renderer from Andrew Zabolotny to make it more
	  bullet proof. Yet another fix from DrawPolygon to avoid the problem
	  with not generating part of the lightmaps for ares of polygons.
1-Jul-1999
	- Thomas Hieber enabled snap-to-grid in MazeD and he also increased
	  the size of the crosses for vertices.
	- Andrew Zabolotny fixed a bug with the texture manager which
	  could cause VERY big slow-downs at times (and maybe even crashes).
30-Jun-1999
	- I extended the movement system of Denis Dmitriev to implement the
	  old 3d-movement functions again. There are a set of new commands
	  which can be bound to keys for that purpose. The docs/console.txt
	  document has been updated with all new commands.
	- Update documentation.
	- Fix to NASM code from Andrew Zabolotny.
	- Andrew added 'gouraud' console command to toggle gouraud support.
	  There is also a new render state called G3DRENDERSTATE_GOURAUDENABLE.
	  All the renderers where changed to support this flag.
	- Fix to platform dependent QInt() selection.
	- Optimization with removed csVector3 constructor is gone because
	  it appears to give some problems on Windows.
29-Jun-1999
	- I had to remove the optimization mentioned below with regards
	  to triangle drawing. It is more complicated than that. The
	  optimization is still possible though but it needs a little
	  more thinking.
	- Various changes in preparation of the next beta release.
	- Dynamic lighting for missile is now correct immediatelly
	  after creation.
	- Added faster version of csPolygonSet::TransformWorld2Cam()
	  which makes better use of the processor L2 cache. Thanks to
	  Bruce Williams for suggesting this to me.
	- Much improved fog routine for the software renderer. This one
	  is MUCH faster. Thanks to Andrew Zabolotny for this one. Note
	  that the code for 32-bit fog seems not to work correctly on
	  non-Intel platforms (like the SPARC).
	- Andrew also fixed the problem with gouraud shaded triangles which
	  were sometimes rendered wrong.
28-Jun-1999
	- Removed test on rstate_gouraud in software renderer because it
	  is plain wrong.
	- Received and integrated patch from David Huen for the BeOS port.
	- Fixed include file problem on Unix for updated sockets driver.
	- BIG BIG improvement in speed in PreparePolygonQuick(). This should
	  make a huge difference when showing sprites (and curved surfaces).
	  And not only for the software renderer. It was the engine!
	- Small fix to [] operator in csVector3 from Denis Dmitriev.
	- Denis Dmitriev replaced old tri_context code by code from Tomas
	  Moller since old was incorrect in some cases.
	- I removed currentSector from csSprite3D since it is redundant.
	- Denis Dmitriev implemented a new movement system in WalkTest.
	- Serguei Narojnyi (Snaar) fixed another bug in the network code.
26-Jun-1999
	- Serguei Narojnyi (Snaar) SQUASHED a bug in the network driver :-)
25-Jun-1999
	- New csSprite3D::UpdateLighting() to update the lighting of a
	  sprite given an array of lights.
	- Also added normal calculation to sprite frames because this
	  is needed for lighting.
	- New csWorld::GetNearbyLights() function to calculate a list of
	  nearby lights.
	- Added lighting for missile and bot based on environment.
	- Added 'addsprite' command. You can add a sprite with this
	  command like this: 'addsprite bot,5'. 'bot' is the name of
	  a sprite template which needs to be loaded in memory (either
	  from standard.zip or from the level). The size is a scale
	  factor for the sprite. The sprite is put at the current
	  location.
	- Small changes to Crystal Shooter from Thomas Hieber.
	- Update to INSTALL.Win from Thomas.
	- Thomas also added lots of additional error checks in debug
	  mode for the Direct3D5 renderer.
	- Some small other changes from Thomas.
	- Update and fixes to VC project files from Thomas.
24-Jun-1999
	- Renamed MarkVisibleThing() to GetVisibleThings().
	- The optimization with lighting and bounding boxes is active now.
	- The bounding box creation also works for curves now.
	- Andrew Zabolotny moved the specific FPU settings which are
	  (uncommented) in walktest.cpp to support/debug/fpu80x86.h.
	  FPU exceptions are now enabled by default on debug builds
	  and disabled on optimized builds.
	- Andrew added a faster version of QInt() and QInt24() for
	  x86/GCC platforms (and QInt24() also for M68K).
	- Andrew also fixed a few bugs in the NASM code.
	- Andrew changed ALL occurrences of 'gouraud' still remaining to
	  'gouraud' and removed an additional number of warnings.
	- Andrew fixed OS/2 port by removing an unneeded WaitSwitch().
	- Andrew avoided an internal compiler error for the sound loader
	  for GCC 2.8.0 and early EGCS/PGCC's.
	- Denis Dmitriev added [] operator to csVector3.
	- Michael Dale Long fixed a small warning in the COM code.
	- Robert Bate updated Macintosh project files with new files.
23-Jun-1999
	- Fixed another serious bug with lighting.
	- Thomas Hieber changed the interface of DrawPolygonFX().
	- Thomas also fixed a small bug in OpenGL driver with regards
	  to gouraud shading.
	- Thomas added fully functional DrawPolygonFX for 16 and 32
	  bit modes in software renderer.
	- Thomas also added some fixes to VC project files.
22-Jun-1999
	- Thomas Hieber cleaned up the software renderer some more.
	  He unified most routines for scanline drawing.
	- Andrew Zabolotny removed a number of errors in the network
	  manager, due to comparing unsigned with negative values.
	  He also removed a few additional warnings.
	- I applied a few small fixes for DOS as suggested by Seth Galbraith.
	- I fixed a serious bug in the precalculated lighting routines.
21-Jun-1999
	- I fixed the Linux makefile for Shooter since the 'csgame' library
	  has changed.
	- I received a large patch from Andrew Zabolotny. He is busy porting
	  all the assembler code for the software renderer to NASM. The new
	  code is not enabled by default yet.
	- Andrew also moved the csCleanable sub-classes outside the functions.
	  This should fix a few compilation problems for some compilers.
	- Andrew also changed several occurrences of 'gouraud' to 'gouraud' (I
	  hope this doesn't break things :-)
	- Michael Dale Long updated cvsguide.txt for the new IP number.
	- Thomas Hieber removed a LOT of warnings!
	- I removed another batch of warnings.
	- Siu-hang Or patches MazeD for a directory tree problem.
20-Jun-1999
	- Thomas Hieber added a quick tutorial for MazeD (received from
	  Andrew).
	- Thomas added a number of new files to the 'csgame' library.
	- Denis Dmitriev added MoveTo method in csSprite3D that automatically
	  searches for the correct sector.
19-Jun-1999
	- Added new GetFlags/SetFlags/CheckFlags to csPolygon3D and csThing.
	  Also added CheckFlags to csLight.  This is going to be a new system
	  which I will add to many classes.  It is a consistant interface to
	  set/query boolean settings for objects in the engine.
18-Jun-1999
	- Fixed bug in shadow calculation for things. I think it is now
	  correct. This basically means that the new lighting algorithm is
	  fully ready except for reflected light which has not been fully
	  tested yet with regards to things (and will most probably not
	  work fully) and also light frustums which extend from a floating
	  portal.
	- Added 'L' key to autoexec.cfg. This creates a very large white
	  dynamic light which casts shadows for things. It is very useful
	  for testing dynamic lights.
	- Added creation of bounding boxes to things (csPolygonSet but only
	  used by things for now). Those bounding boxes are now also used by
	  the lighting routines to optimize lighting even more (things which
	  are not in the light frustum are quickly rejected that way).
	- Thomas Hieber added a new DrawPolygonFX function to the 3D
	  subsystem. This is a new variant of DrawPolygon which supports a
	  number of nice and new features. Thomas added DrawPolygonFX for the
	  Direct3D, OpenGL and software (16-bit only) renderers (and stub
	  support for Glide).
	- Thomas also fixed a bug in PreparePolygon (bad triangle clipping
	  for gouraud shaded triangles).
	- Robert Bate added support for RAVE for the Macintosh.
17-Jun-1999
	- Further optimizations on the new lighting system. Reordered a few
	  relevant calculations to discover more rapidly when lighting should
	  not be done for a polygon and also eliminated having to check
	  for shadow frustums which are not relevant.
	- Due to the previous optimizations it is now possible to enable
	  shadows for things for dynamic lights without loosing too much
	  speed. There are still more optimizations to do so I think I'm
	  going to have an option to any dynamic light so that you can say
	  if things should cast shadows or not.
	- Fixed a severe memory overwrite bug in the lighting routines
	  (dynamic AND static).
	- Add SetFlags/GetFlags to csLight to set and get flags (what did you
	  expect? :-) There is only one flag right now and that is
	  CS_LIGHT_THINGSHADOWS which indicates if the light casts shadows
	  for things. For static lights this is true by default. For dynamic
	  lights this is false by default.
	- Extended 'addlight' console command with a fifth parameter. 0 is
	  without CS_LIGHT_THINGSHADOWS and 1 is with CS_LIGHT_THINGSHADOWS.
	  So 'addlight 1,0,0,100,1' creates a dynamic light at the current
	  position with color red (1,0,0), radius 100 and which causes shadows
	  to be cast from things.
	- With this it is possible to see that the shadow calculation for
	  things is still not completely correct.
	- Thomas Hieber significantly cleaned up the 3D rasterizers so that
	  handling of texture remapping is done in a common base class
	  (csTextureMM).
	- Thomas also changed the D3D renderer to use new gamma values that
	  look much better.
	- Thomas also implemented proper color keying for sprites and portals
	  (for D3D).
	- Some changes to VC project files from Thomas as well.
16-Jun-1999
	- Added CHK macro to many 'new' and 'delete' commands.
	- Fixed memory debugger so that it works again.
	- World is deleted when quitting (this may cause crashes at exit
	  but those crashes have to be solved, not avoided).
	- Fixed small memory leak in engine texture manager (but there
	  are many more left).
	- I added a new csShadowFrustrum class which is now used by the
	  lighting routines.  This is a completely different way to check for
	  shadows for things.  I will test this new system very well and if it
	  works good I will remove the old support (like removing
	  BlockingThings).
	- I removed BlockingThings and CheckForThings to make things simpler.
	- Thomas Hieber significantly cleaned up the G3DPolygon structure to
	  make its usage simpler for all versions of DrawPolygon.
	- Thomas also changed the Windows OpenGL 2D driver to use the new
	  common OpenGL 2D code.
	- Thomas changed system.cpp to set pointer to system to NULL earlier.
	- Thomas added Win VC++ project files for MetaDemo.
15-Jun-1999
	- Applied patch from Or Siu Hang for MazeD.
	    - Changes are:
		- Zip file creation/edit/saving is enabled: You may now
		  open a zip file, edit the world, and save it in the same
		  zip or new zip file.
		- You may choose to save model in zip file or ordinary text
		  file by choosing different extension, i.e. "zip? denotes
		  zip format.
		- Portal selection make more easy by displaying only the
		  polygons in current selection.
		- Things description are put in the preamble area. Now you
		  need to add the thing statement in the sector description
		  to make it visible.
	    - Known bugs:
		- If the world zip file has only one file, the program will
		  report error when updating the directory of the zip.
		- Cannot load invalid text model file, it would crash.
		  Reason: The program has no knowledge of whether the input
		  file is text or binary.
	- I changed an error to a warning for texture loading (test on
	  power of two) because MazeD will not work otherwise.
	- Denis Dmitriev fixed some bugs in halo handling and also changed
	  the looks of halos (for software and Direct3D).
	- Denis also added a cast to fix compilation on Windows.
	- Added GetShadows() function to csPolygonSet. This is going to be
	  used in the new lighting calculation routines.
	- The lighting routines also calculate shadow frustums
	  for things now. All the calculations are present but the final
	  shadow frustums are not yet used.
14-Jun-1999
	- Gary Haussmann added basic 2D functionality for OpenGL in a common
	  directory. Currently only the X OpenGL port uses this but other
	  OpenGL 2D drivers should be rewritten to reuse the code in
	  'openglcommon'.
	- Gary also fixed the 3D OpenGL renderer so that partially transparent
	  portals are actually drawn. He also enabled smooth shading when
	  gouraud shaded sprite polygons are being drawn.
	- Gary added CacheLightedTexture() to the OpenGL renderer for
	  situations where a texture and a lightmap must be mixed before being
	  rendered (this is non-functional currently). Certain situations
	  (namely transparent lighted portals) cannot be rendered correctly
	  with separate texture and lightmap since the lightmap blends not
	  only the portal but also the stuff showing THROUGH the portal!
	- And Gary also fixed a lightmap cache bug. Everytime a lightmap is
	  cached it was simply compiling the lightmap and sending it to the
	  OpenGL driver. This consumed massive bandwidth even if the lightmap
	  had not changed. Now we properly check the flag set by
	  RecalculateDynamicLights() and don't reload the lightmap if it
	  hasn't changed.
	- I added unix makefiles for the new csgame library and for the
	  Crystal Shooter application from Thomas Hieber.
	- Small changes from Bruce Williams.
12-Jun-1999
	- Update to Windows documentation from Thomas Hieber.
11-Jun-1999
	- Thomas Hieber added the 'csgame' library to CVS and he also added
	  Crystal Shooter as a demo application of that library.
	- Thomas also added additional error checking to several parts of
	  WalkTest and the engine (loading textures for example).
	- Thomas fixed the windows port so that error messages are visible
	  again.
	- Thomas converted all VC project files to binary in the CVS
	  repository.
	- Thomas moved some collision detection code back to the engine
	  where it belongs (from csobject).
8-Jun-1999
	- Fixed csPolygonSet::GetPolygon so that it correctly ignores
	  objects with no name. This fixes the '-infinite' option of
	  WalkTest.
	- I added a new csCleanup class which is intended as a class
	  to which you can register memory that needs to be freed at
	  some time but for which you have no convenient place to free
	  it. I also added a 'cleanup' vector to csWorld which is
	  freed together with the world. To this you can add temporary
	  arrays which you need for optimizations. The new lighting
	  stuff uses an array like this.
	- The new lighting system is enabled. All functions are now named
	  CalculateLighting(). ShineLightmaps() is gone. Note that this
	  new system offers NO benefits yet over the old system. It is
	  just a rewrite in order to be able to add enhancements more
	  easily which will be what I will be doing next.
	  Normally there should be no difference (neither on functionality
	  or performance) with the old system. If you notice differences,
	  please tell me.
	- Thomas Hieber added a document describing the directory structure
	  fully (dir.txt).
7-Jun-1999
	- Started integrating new csFrustrum class into the precalculated
	  lighting routines.  To that end I created a new CalculateLightmaps()
	  set of functions which will eventually replace the older
	  ShineLightmaps().  The new code is currently still disabled.
6-Jun-1999
	- Added 'dump' function in Dumper for csFrustrum.
	- Continued work on csFrustrum.
	- Patch from Denis Dmitriev so that DrawPolygonQuick does not
	  need the original pi_triangle. This is another significant
	  step towards trying to make a general polygon drawer from
	  DrawPolygonQuick.
5-Jun-1999
	- Added radius argument to 'addbot' so that an optional
	  dynamic light is created with the specified radius which
	  moves with the bot.
4-Jun-1999
	- Fix inifile.cpp to use strcasecmp instead of stricmp.
	- Added Unix makefile for MetaBalls.
3-Jun-1999
	- Started new csFrustrum class.
1-Jun-1999
	- Denis Dmitriev added MetaDemo.
	- Robert Bate added define for stricmp (for Macintosh).
	- Robert fixed problems with the palette for 8 bit color (Macintosh).
31-May-1999
	- Denis Dmitriev fixed reading of ini file so that it is case
	  insensitive.
30-May-1999
	- Thomas Hieber provided consistency concerning linking of libraries.
	  Now all project files are declared as much, not using DLL.
27-May-1999
	- FLATCOL shading works better now.
	- Michael Dale Long updated the GGI makefile so that it compiles
	  again. There is still a problem in the 2D driver though. The
	  init code needs to be moved to Initialize.
	- Increased lightmap resolution of curves. This enhances quality a lot
	  but it slows down lightmap calculation time. We need to find a good
	  trade-off here. It should also be an option specific to the curve so
	  that we can control the lightmap size differently for every curve.
	- Added FastSqrt() function which I received from someone
	  (unfortunatelly I don't remember who). This function is a lot faster
	  than the normal 'sqrt()'. FastSqrt() is currently only used in the
	  curve lightmap calculations.
	- I removed a limitation in the LightMap class for the size of
	  lightmaps.
	- Thomas Hieber fixed a small bug in the guids.cpp file.
	- Robert Bate updated the Macintosh project files. He also increased
	  the memory partition so that the created apps will run.
26-May-1999
	- Received update to MazeD from Siu-Hang <shor@cse.cuhk.edu.hk>.
	  It enables the creation of sectors and portals so that you can
	  start to edit real worlds. It is not a powerful addition in the
	  sense that there is no automatic portal generation and you have
	  to do everything manually but at least it allows to create portals.
	  There are still some problems which we are investigating.
	  He also added several other things like lights and texture
	  support.
	- Andrew Zabolotny did an update to an OS2 script (add check for
	  empty SHELL variable).
	- Robert Bate added guids for RAVE graphics on the Macintosh.
	- Robert also updated the Mac project files and did some fixes on CS.
	- Thomas Hieber further removed references to MFC from project files.
25-May-1999
	- Serguei Narojnyi (Snaar) fixed a Win32 specific bug in the sockets
	  networking driver.
	- I fixed the ndrvdemo makefile so that it works on Unix.
	- Fixed csutil.mak so that it includes the new convertor stuff.
	- Update to the lightmap precalculator from Denis Dmitriev.
	- Denis also updated the DX5 renderer to support gouraud shading
	  in DrawPolygonQuick and fixing lightmap alignment.
	- Denis fixed the fog routines for correct Z buffer test.
	- Integrated new 3D sound files from Nathaniel Saint Martin. Lots of
	  bug fixes and update for EAX from 1.2 to 2.0 sdk.
	- Thomas Hieber removed loading of standard.zip from CSLoader and
	  put it in walktest where it belongs.
	- Thomas enhanced the ds3d sound renderer to have support for proper
	  volume settings.
	- Thomas also cleaned up the rc files for VC (no MFC support required)
	  and removed some of the files in the 'res' folder.
	- Michael Dale Long added the 'cvsguide.txt' file to the documents
	  directory.
24-May-1999
	- Thomas Hieber added a new mechanism for collision detection to
	  interface to the rest of the CS engine. He uses the new
	  object hierarchy system from Ivan Avramovic.
	- Thomas also moved the logo to the right and reenabled the convertor
	  class.
	- Thomas also added range checking for fog to prevent crash.
	- Thomas renamed GetObject to GetObj to avoid problems with Windows
	  header files.
	- Michael Dale Long fixed the ndrvdemo makefile and added workaround
	  for impexp support in walktest (Windows only right now).
	- Bruce Williams added a hook for the new convertor system in
	  WalkTest.
	- Bruce Williams also split his convertor source files into several
	  smaller files.
	- Robert Bate added routines to convert a CS color to a Macintosh
	  color.
	- Robert Bate also added console support to the Macintosh OpenGL
	  2D driver.
23-May-1999
	- Added FLATCOL and GOURAUD commands to POLYGON to specify a polygon
	  which needs gouraud shading instead of texturing.
21-May-1999
	- Denis Dmitriev sent me a patch which dramatically improves the
	  quality of precalculated lightmaps. No more black borders, and
	  the shadows are much smoother! Thanks very much Denis :-)
	- Small patch to compile CS on FreeBSD from Brian Haskin.
	- Small patch from Andrew Kenneth Milton to get FreeBSD to work
	  with the OSS driver.
	- Denis reported a memory leak while looking at a curve of sprite.
	  I fixed this (memory leak was introduced by my previous patch
	  to generalize the code for triangle drawing).
	- Because bots are somewhat annoying and can cause random crashes
	  I disabled them by default. You can still enable them with the
	  '-bots' commandline option.
	- Denis added SetMousePosition support to the OpenGL/Win driver
	  (for 'freelook').
	- Windows OpenGL 2D driver also has the 2D sprite and text
	  capabilities now. But this code should be shared! Thomas Hieber
	  did this.
	- Gary Haussmann added proper support for partially transparent
	  textures to the Unix OpenGL 2D driver. He also extended the OpenGL
	  3D rasterizer to properly support the various transparent polygon
	  modes that CS has (semi-transparent textures and alpha transparency).
	- *** Release of 0.13_011 ***
	- Added support for flat-shading triangles (for curves and sprites)
	  with or without gouraud shading. Also started changing spelling
	  of gouroud to gouraud. Note that gouraud shaded polygon objects
	  still have a bug. I'm investigating this.
	- Andrew Zabolotny added 'apps' target to makefile and also did some
	  other makefile changes.
	- Andrew also started support for compiling CS on Windows (with VC)
	  using the standard makefile system. Note that Thomas Hieber removed
	  some of this work because it broke the Windows port too much.
	- Andrew also revamped support for SetMouseCursor (Windows).
	- Andrew fixed the VC assembly routines so that they compile at least.
20-May-1999
	- Various changes to the Unix OpenGL 2D driver from Gary Haussmann.
	  2D text should be much better now. He also added support for drawing
	  2D sprites.
	- Bruce Williams added an IVCON based format conversion (not
	  interfaced yet).
	- I fixed several compilation errors in libs/csutil/convertor.*
	- Unified much of the code preparing for DrawPolygonQuick. This means
	  that the code that was used to draw sprite triangles, gouraud
	  shaded triangles and curve triangles now use the same setup code.
	- Don't do the texture cache if lighting is disabled.
	- Curves, sprites, and gouraud shaded triangles are no longer lighted
	  when lighting is disabled globally. They still don't obey the
	  disabling of texture mapping though.
	- Fixed 32-bit unlighted texture mappers.
	- Maybe solved the problem with the console only appearing line
	  by line in the windows version. There were two bugs preventing
	  the fix from Andrew to work. One was in WalkTest were Andrew
	  misplaced a test. The other was in the DDraw driver which
	  incorrectly returned 'false' with the DoubleBuffer() function.
	- Fixed the SVGALIB 2D driver so that it works correctly for
	  all depths and resolutions now. The console also works
	  correctly.
	- Fixed the Unix port so that the -noshm option works again.
19-May-1999
	- Denis Dmitriev fixed the lightmap calculator so that there no longer
	  any ugly borders. Thanks Denis!!!
	- Gary Haussmann added console text support to the Unix OpenGL 2D
	  driver. He also fixed the Clear() function.
	- Michael Dale Long fixed the Unix Glide, OpenGL and X 2D drivers to
	  support mice with more than 3 buttons.
	- Update to INSTALL.Win from Thomas Hieber.
	- Ivan Avramovic patched the x2d driver so that there is no longer
	  an error when opening the window offscreen. He also fixed a memory
	  leak when using XSHM.
18-May-1999
	- Started adding csVolume class to csgeom to help lighting routines.
	- Fixed LOD vertex morphing for sprites. It was broken (which caused
	  the top of the bots to be removed).
	- Small fix for lightmap calculation for curves. The lightmap was
	  not properly initialized to black before being filled in.
	  This should cause the garbage in the lightmaps to be removed but
	  it does not solve all the lightmap problems yet.
	- Finally fixed sprite triangle drawing. The fix is not perfect yet
	  but at least the triangles look fine in all cases. I have to ask
	  Andrew to have a better look at this.
	- Included patch from Denis Dmitriev to help continue development
	  of planed fog. It is not yet fully correct though so it is not
	  enabled.
	- Patch from Thomas Hieber to MazeD (he received it from someone
	  else). This patch reenables loading and saving and thus
	  makes it more useful. Note that the loading and saving is
	  still not fully ok (there is a memory leak and saving saves
	  to a world file and not the zip file).
	- Robert Bate added CodeWarrior projects for the Macintosh
	  port.
17-May-1999
	- Patch from Andrew Zabolotny:
	    - Fixed CSWSTEST and added some features to have a better test
	      suite for the 2D drivers.
	    - Bugfix in CSWS when mouse is grabbed and button is not pressed.
	    - Changes to OS/2 script and some other OS/2 changes.
	    - Modified GetTransparent methods to return a bool instead of
	      integer.	Also fixed transparent color handling in textures for
	      16bpp and 32bpp.	0 in transparent textures means transparent.
	      Opaque black color is replaced by a very very dark color.
	    - Fixed all DrawSpriteXX routines to use 0 as transparent color.
	      Also unified the code of all DrawSpriteXX routines to make it
	      easier to modify them.
	    - Renamed mkdir to MKDIR to avoid conflicts with system include
	      files.
	    - csRect should inherit from csBase.  csBase has now moved to
	      include/csutil/csbase.h.
	    - Some cleanup.
	    - Fixed 'make depend' to work again.
	- Thomas Hieber fixed a nasty bug in the console.
	- Update to Macintosh port from Robert Bate. He made some changes
	  to make adding OpenGL support for the Mac easier.
16-May-1999
	- Gert Steenssens fixed Linux Glide driver with a temporary fix
	  for WriteChar problem.
	- Bruce Williams started work on a faster DX driver which makes
	  best use of the new StartPolygonQuick function. Nothing
	  functional yet.
15-May-1999
	- Thomas Hieber fixed his logo code so that it doesn't crash if
	  the logo can't be found.
14-May-1999
	- Fix so that config.mak is replaced and not appended too.
	- Precalculated lighting also works through portals on things now.
	  This was not the case earlier.
	- Increased speed of walking forward with the left mouse button.
	- Implemented lighted curves using lightmaps. A lightmap is
	  generated and calculated for every curve. The cache works (i.e.
	  curve lightmaps are also saved on disk like polygon lightmaps).
	  The lighted curves seem to work very well but the following
	  things are missing:
	    - Lightmaps always have fixed size of 16x16 (not 16x16 pixels
	      for every lumel.	The complete lightmap is 16x16).  This is
	      easy to fix but I should try to find a good size for
	      lightmaps.
	    - There are no shadows yet. The curve is lighted according
	      to all lights that are near enough but shadows are ignored.
	    - No dynamic lighting yet.
	    - Curves don't listen to the 'textured' and 'lighted' flags
	      to disable texture mapping and lighting.
	- Fixes from Andrew Zabolotny to 'make depend' (not completely ready
	  yet). Rename of COLOREDBG to TRANSPBG in cryst.cfg. Several fixes
	  to console as well (it should now work well on double buffered
	  displays).
	- Thomas Hieber added a startup logo to WalkTest.  It does not look
	  very well currently because of a bug with transparent textures in
	  the 2D driver.  Note that you need a new 'standard.zip' for this.
	- Michael Dale Long changed cs.mak to add sound support for Linux.
13-May-1999
	- Ivan Avramovic fixed a bug causing segfaults when deleting
	  copied csObjects. He also added documentation to several files
	  in the csobject library.
	- Thomas Hieber added gamma correction for lightmaps and textures.
	  This will make everything brighter to give it a look comparable
	  to 2*SRC*DEST. Also removed some warnings and fixed the project
	  files to add triangle.*.
	- Patch from Gert Steenssens to fix problems with Glide
	  crashing (DrawLine/DrawPixel methods added).
	- Fixes to Macintosh port from Robert Bate.
12-May-1999
	- Andrew Zabolotny did various changes: update to OS/2 drivers
	  section, add autodetect of " and "pipe" variables. Changes in
	  csdive.
	- Added changes to BeOS port from David Huen.
11-May-1999
	- Added support for flat texture mapping in 32-bit mode. Enhanced
	  speed of 8-bit flat texture mapper. Also added support for flat
	  texture mapping based on lightmap lighting.
	- Lighting and texture flag now work as expected. The 'texture'
	  flag enables flat texture drawing in all display modes. The
	  'lighting' flag enables/disabled lighting also in all display
	  modes and also works with flat texture drawing enabled.
	- New networking code from Serguei Narojnyi.
10-May-1999
	- Texture mapping toggle works again (it was broken).
	  (use the 't' key).
	- Considerably increased speed of the untextured scanline drawer.
	  I'm planning to use the untextured scanline drawer automatically
	  as soon as a polygon is less than 3x3 pixels large (maybe distance
	  is important too?).
9-May-1999
	- Experimented with DrawPolygonDirty routine which is a quick
	  and dirty version of DrawPolygon. It is faster but not that
	  much. And there is a lot of extra code to manage so I decided
	  not to keep the code. Instead we will be doing other things
	  (see 10-May).
7-May-1999
	- Added StartPolygonQuick() and FinishPolygonQuick() to the 3D
	  rasterizers. With those functions it is possible to start
	  a series of triangle drawing more efficiently. The functionality
	  common to drawing a lot of triangles with one texture is put
	  in StartPolygonQuick(). For the software renderer this will only
	  give small benefits but the advantages may be bigger for the
	  hardware accelerated drawers. I already enhanced the OpenGL
	  rasterizer to take advantage of this. I hope this will make
	  a big performance difference.
	  I also added dummy functions for StartPolygonQuick() and
	  FinishPolygonQuick() to the Glide and Direct3D rasterizers. The
	  respective managers should try to make the best use of them.
	- Implemented LOD morphing so that LOD switching is really very
	  smooth now.
	- Some fixes to BeOS port from David Huen.
	- Fix to FreeBSD makefile from Brian Haskin.
	- Applied fix from Thomas Hieber to fix various things for the
	  Windows port. He also fixed MazeD up to the point that it compiles
	  and runs again (at least in software mode/16-bit color).
	  However, I could not get it to run on Unix. It still crashes.
	- Update to Macintosh port from Robert Bate (fixing things).
6-May-1999
	- I separated the triangle code in csengine/basic/triangle.*. LOD
	  will now operate on general triangle meshes and will no longer
	  depend on sprites.
	- Various small fixes from Charles Duffy <cduffy@bigfoot.com> (mostly
	  removal of warnings).
	- New LOD algorithm based on progressive meshes works! Added 'lod'
	  console command with which you can set the LOD factor for all
	  sprites (no distance checking currently).  A negative 'lod' factor
	  disables the feature and goes back to the old behaviour.  0 means
	  that nothing will be drawn.  1 means that everything will be drawn
	  (but using the LOD algorithm).  Note that sydney looks reasonable
	  even at .5 (50% of all vertices used).  Better looks are possible
	  because my cost function is currently still primitive (only looks at
	  the size of the edge to collapse).
	- Reassigned old behaviour of '=', '[', and ']' keys to '+', '{',
	  and '}' (debugging functionality). Instead '=', '[', and ']'
	  can now be used to control the lod factor while looking at a
	  sprite.
5-May-1999
	- Added flag BUGGY_EGCS_COMPILER in user.mak to enable a bug fix
	  from David Huen. This fix is for egcs versions 1.1.2 and 1.1.3.
	- Update to Mac port from Robert Bate. He adds Glide support for
	  the Macintosh.
	- *** Release of 0.13_010 ***
4-May-1999
	- Integrated patch for BeOS from David Huen <smh1008@cus.cam.ac.uk>.
	- Integrated fixes to Windows/Direct3D and Windows/OpenGL port from
	  Nathaniel Saint Martin.
	- Patch from Thomas Hieber on the Windows port. He implemented
	  SetMousePosition for Windows (so you can use 'freelook'). Various
	  changes to all 3D rasterizers (software, OpenGL, Glide, and
	  Direct3D). Range checking with fog in software mode (to prevent
	  crash). New project files for Windows as well (dll's are generated
	  in cryst. Removed references to absolute local paths. Made release
	  build workable again. Removed all warnings except for one).
	- Gert Steenssens fixed Linux Glide makefile so that it works.
	- Fixed makefile so that it will correctly compile the DJGPP
	  assembly stuff.
	- Large patch from Ivan Avramovic with the following changes:
	    - A new csObject design based around the concept of a generic
	      csObject, which can hold any number of csObject children within a
	      subobject tree.  Some of the primary benefits that I've drawn out
	      of this new scheme so far include: adding any number of arbitrary
	      (possibly non-engine related objects to a csObject), naming of
	      csObjects as needed, completeness on the csObject library (a new
	      library in CS), first step towards untying the csScript from the
	      engine (improved scripting interface), etc.
	    - Some other cleanup changes also related to dependencies between
	      libraries/modules.
	    - General cleanup.
	- Patch from Andrew Zabolotny on makefile system. This patch
	  should make it easier to use the makefiles on systems which
	  don't have a unix shell (like DOS).
26-Apr-1999
	- Received new patch to OSS (Linux) sound driver from Norman
	  Kramer (via Gert Steenssens). It doesn't use shared memory,
	  semaphores and a forked process.
	- *** Release of 0.13_009 ***
	- Optimization in DoPerspective.
	- Put the basic LOD stuff in place. It does not work correctly though.
	- LOD works. I still have to integrate it correctly in the engine.
25-Apr-1999
	- Integrated patch from Ivan Avramovic with general cleanups for
	  the loader (he removed some unneeded includes and some other
	  stuff).
	- Integrated patch from Gert Steenssens and Norman Kramer to
	  Linux sound driver (OSS).
	- Integrated patch from Gert Steenssens on the Linux Glide port.
	  Glide is now fixed with the new texture manager. Glide can now
	  also run in windowed mode on X (with FULL_SCREEN configuration
	  value in 'cryst.cfg'). This is slower however.
	- Also small fix to playing of sound code from Gert Steenssens.
	- Integrated new project files for Windows VC++ from Thomas Hieber.
	- Received update to Macintosh port from Robert Bate.
	- Received a small routine from Andrew Zabolotny to control the FPU
	  control word. Using that I can enable more FP exceptions on Linux
	  (like division by zero). I executed the application but could not
	  immediatelly find any exceptions. However, this remains a useful
	  debugging tool when people report strange errors on DJGPP again.
	- Fixed bug in csBoxClipper. Thanks to a demo program that
	  Seth Galbraith sent me I discovered and fixed this bug.
	- Did some work on LOD for sprites. It is not functional yet.
24-Apr-1999
	- Fixed bug with triangle drawing. Now triangles (used on skydomes,
	  sprites, curves, ...) are correctly clipped. However, I'm not
	  satisfied with my current solution. We need more work here.
	  As a consequence of this fix, the falling cubes in the
	  Blocks game look good in all cases.
23-Apr-1999
	- Fixed bug in fog (software rendering). There could be overflows
	  in some of the lookup tables. In order not to compromize speed
	  I added a buffer of 20 extra lookup entries in front of
	  the table. Thanks to Robert Bate for finding out what the
	  bug was all about.
22-Apr-1999
	- Fixed bug in lighting routines. If you had a light source
	  on EXACTLY the same plane as a polygon then it could happen
	  that the polygon got lighted even though it really should not
	  have been lighted.
	- Extended statistics so that number of sprites and curves is
	  also counted and the number of polygons is correct (polygons
	  in Thing templates were not counted).
21-Apr-1999
	- Added error checking (at load time) on portals that go to
	  unknown sectors.
20-Apr-1999
	- Fixed bug in 32-bit gouraud shader. There was an overflow
	  for lights that are too bright. There is still a problem though.
	  On systems which don't group RGB as such the colors are wrong.
	  Therefore we need to do a conversion before calling the
	  gouraud shader.
19-Apr-1999
	- Implemented support for up-side-down skydome (negative radius).
	  There is still a small problem: the vertices have to be specified
	  shifted. This should be fixed in the code.
18-Apr-1999
	- Did some additional work on planed fog.
17-Apr-1999
	- Fixed bug in loading of sprites (it simply didn't work).
16-Apr-1999
	- Received new patch from Ivan Avramovic which further improves
	  the csgeom library.
	- Added new project files for Windows from Thomas Hieber. He has now
	  updated nearly all project files. A few missing ones are Csws and
	  MazeD. He also fixed some of the Windows specific files so that they
	  compile.
	- Converted all WireFrame and collision detection classes to new
	  naming convention.
	- I tried the windows version myself and finally got it running.
	  I modified the project files a little to make this possible.
	- *** Release of 0.13_008 ***
15-Apr-1999
	- New fixes to Glide from Gert Steenssens. Note that Glide is still
	  not functional. It will probably not compile because I could not
	  merge makefile changes from Andrew and Gert. But even if it would
	  compile it will not work because Gert has not finished yet. Have
	  a little patience.
	- I also moved hicache.* and hicache2.* from common to glide as only
	  glide uses this. It is a pity that there isn't some common base
	  for all HighColor caches that are used by Glide, OpenGL, and
	  Direct3D. I should think that it should be possible to find common
	  functionality here and put it in a base class.
	- Support for planed fog nearly finished. However, I cannot use it
	  because we're still investigating bugs in the plane intersector
	  routine.
	- Received patch from Denis Dmitriev to fix his console.
	- Denis also implemented a new bilinear filtering routine which looks
	  EXTREMELY nice.  It is also reasonably fast although possibly not
	  suited for real-time games for the moment.  The routine only works
	  in 16-bit mode (NOT 15-bit!) for now and there appears to be a small
	  problem with colors (but it still looks beautiful).
	- I improved on the patch from Denis to make the console a lot
	  faster (so that I can actually use the new progress bar).
	  The difference is enourmous. Especially on systems that have
	  a slow copy from memory to the video buffer (like X11 without
	  SHM extension).
	- I also added a '-bifilt' commandline option for the software
	  renderer to enable this new feature.
	- Added new project files for Windows from Thomas Hieber. The project
	  files are not complete yet (he finished: com, DirectDraw2D,
	  NetworkDriverNull, NetworkManagerNull, SoftwareRenderer, cspace,
	  SoundRendererNull, SoundRendererSoftware, and walktest).
	- I moved the csTables class (containing various lookup tables) to
	  the software renderer since all those tables are currently only
	  used there. If there is a need for having lookup tables outside
	  the software renderer then we'll have to reconsider this. But for
	  now this will do.
	- Semi-transparent textures (textures with holes) work again but there
	  are a few problems. They don't work in 32-bit mode yet (not
	  implemented yet) and they only work at mipmap level 0. It appears
	  that something is wrong with maintaining transparancy at mipmap
	  levels > 0.
	- Ok, I fixed the above bug. The software renderer correctly takes
	  transparency into acount when mipmapping textures.
	- Fixed bug which could cause crashes when viewing curved surfaces.
	- Renamed all csSprite3D classes (csFrame, ...) to standard
	  naming convention for methods.
	- Changed LightView and RenderView to new naming convention.
	- Converted ThingTemplate and PolygonTemplate to new naming convention.
	- Converted csObject, csObjectTrigger, and Library to new naming
	  convention.
	- Converted LightMap and all related classes to new naming convention.
	- Converted csCollection to new naming convention.
	- Converted PolyTexture and PolyPlane to new naming convention.
	- Converted all the csCurve classes to new naming convention.
14-Apr-1999
	- Patch from Ivan Avramovic to clean up the csgeom library.
	- I had to disable the console patch from Denis Dmitriev because it
	  was too slow for me (screen is updated too often).
	- Added first support in the 3D engine for planed fog.	Now I have to
	  add this support in the 3D software rasterizer to see if it works
	  well.
13-Apr-1999
	- Patch from Andrew Zabolotny with the following changes:
	    - CSWS works again in 16-bpp mode (with some visual artifacts).
	    - Some changes elsewhere related to CSWS.
	    - Several changes to makefiles again (this is a hobby of
	      Andrew :-)  Andrew also added a document (docs/Makefile.txt)
	      explaining the makefile system. This is an essential read
	      if you're a port maintainer.
	    - "make depend" now will rebuild only dependencies for
	      components that have been changed, for example if you didn't
	      changed MazeD sources, $(OUTOS)/MazeD.dep won't be rebuilt
	      (unless it is missing). To clear dependenciy files do a
	      "make cleardep".
	    - Started MazeD cleanup. For beginning, I've removed csToolBar
	      class and moved all toolbar functionality into csDialog; now
	      toolbars are a particular case of regular dialogs. Also I
	      have split several MazeD source files into many small pieces
	      for modularity.
	- Fixed overflow bug in console patch from Denis Dmitriev.
	- Update to Macintosh port from Robert Bate.  It now functions
	  correctly with the new directory structure.
12-Apr-1999
	- Fixed compilation bug in SVGALIB 2D driver.
	- Reorganized fog drawing so that every object (sector or thing)
	  is responsible for drawing its own fog.
	- Fixes to DOS version.
	- Fix to Windows SetMouseCursor from Serguei Narojnyi (Snaar).
	- Integrated patch from Denis Dmitriev with the following changes:
	    - Progress bar (text mode) for lighting at startup.
	    - Some other console changes.
	    - Mouse support in DOS changed.
	    - Modified WalkTest so that movement is time-correct.
	    - Accelerated fog a little (not much but every bit counts).
	    - Fixed behaviour of printf.  This is important for port
	      maintainers which have a printf implementaton other than
	      cssys/general/printf.cpp.	 Denis changed the DOS port himself.
	    - Enhanced texel filtering.	 It works correctly in 8-bit mode now
	      and only for non-mipmapped texture (looks ugly for mipmapped
	      textures).
10-Apr-1999
	- Separated csparser from csengine. The engine is now independent
	  of the parser while the parser uses (and requires) the engine.
	- Added fog capabilities to the 3D rasterizer. The 3D rasterizer
	  can now specify wether it supports Z buffered fog (like the
	  software renderer does) or else planed fog. Added GetFogMode()
	  and SetFogMode() to all 3D rasterizers. This is all it does
	  currently. The 3D engine does not yet supported planed fog
	  and none of the 3D rasterizers support it either. Only the
	  framework is there.
9-Apr-1999
	- Finally found a VERY severe bug in the X port. It was actually
	  a bug in the new makefile system.
	- Converted Polygon2D to csPolygon2D and new naming convention.
	  Also moved csPolygon2D definition to new include file (pol2d.h).
	- Converted Thing to csThing and new naming convention.
	- Converted Portal to csPortal and new naming convention.
	- Received patch from Andrew Zabolotny with the following changes:
	    - Some changes to 2D driver for registering textures.
	    - SetMousePosition() for OS/2 and DOS. This should make
	      the 'freelook' command functional.
	    - Removed exit_clean() from Be and Unix system drivers.
	    - Andrew also fixed the bug with the X drivers :-)
	- Received patch from Michael Dale Long for the Glide renderer.
	  It is a first patch and things will probably not work right
	  out of the box. Expect more to follow.
	- A few fixes from Cubesoft.
	- *** Release of 0.13_007 ***
	- First steps of separating csparser and csengine. csparser will
	  use csengine to built a world but csengine will not depend on
	  csparser anymore. In fact you should be able to plug-in any
	  parser and let it use the csengine API to built worlds.
	  This would make it easier to write stuff like 3DS loaders.
8-Apr-1999
	- Fixed SVGALIB driver makefile so that it works again.
6-Apr-1999
	- Small fixes to windows version from Sylvain Rochette.
	- Patch from Andrew Zabolotny with various cleanups and also
	  some fixes for CSWS (not ready yet). MazeD is also still broken.
	- Fixed VERY severe bug with a faulty definition of ABS. This
	  caused various parts of Crystal Space not to function or function
	  very weird. This bug was introduced in 0.13r006.
	- Kludge-patch from Ivan Avramovic to fix the drop in the hole
	  in large.zip (collision detection).
	- Added patch to networking drivers from Serguei Narojnyi (Snaar).
	  He also added html documentation for his drivers (look at
	  docs/csnetdrv.html).
	- Converted Polygon3D to csPolygon3D and new naming convention.
	- Fixed makefile for OSS driver.
	- Fixed makefile for networking. NEED_SOCKET_LIB undefined.
5-Apr-1999
	- In the past PolygonInt and PolygonParentInt were ment for using
	  with multiple inheritance. Someone removed this apparantly. I
	  reintroduced it because I need to separate csgeom from csengine.
	- PolygonInt and PolygonParentInt are renamed to csPolygonInt
	  and csPolygonParentInt.
	- Received patch from Andrew Zabolotny completing his large makefile
	  patch. Here is a summary of his changes:
	    - Component-based makefile system.	Every component or library
	      has its own sub-makefile which is located together with the
	      component itself.	 The only makefiles which remain in
	      mk/system are the system dependent global makefiles (like
	      linux.mak, os2gcc.mak, djgpp.mak, ...)
	    - New DO_AIFF, DO_IFF, DO_AU, and DO_WAV flags in user.mak
	      to control what
	    - Various files have moved to better places.
	- I did my largest API change yet. I renamed Vector3, Matrix3, Plane,
	  and a few others to csVector3, csMatrix3, ... and also renamed all
	  their methods to the NewNamingConvention().
	- Fix from Ivan Avramovic for some weird perspective project error
	  (EXTREMELY rare, Ivan could not even reproduce it).
	- *** Release of 0.13_006 ***
3-Apr-1999
	- Changed some static fields into non-static fields. This is better.
	- Fixed bug in reading of config file through ISystem interface.
	- New 'maxpol' command to set/get the maximum number of polygons that
	  is drawn every frame.	 Normally this is set to a very high number so
	  that this maximum is never reached (2000000000 polygons every frame
	  should suit everones need for the near future :-) You can reduce
	  this number for debugging purposes.  In combination with 'fclear'
	  and binding a keys to 'maxpol ++1' and 'maxpol --1' you can get the
	  effect of drawing one polygon at a time.
2-Apr-1999
	- Changed all csLight methods to the new convention.
	- Received large patch from Andrew Zabolotny with his first work
	  on the new makefile system which properly works with the new
	  directory structure. This is unfinished business.
1-Apr-1999
	- Some work on the tutorial. The first tutorial is finished.
	- Patch from Ivan Avramovic to solve the problem with reflected light
	  not being correctly blocked by things.  This patch should make
	  pseudo-radiosity almost useful.  It is still not completely
	  functional though because 'check_for_things' does not correctly
	  acount for reflection on non-portal thing polygons.
	- Changed all csSector methods to the new convention. Also changed
	  PolygonSet to csPolygonSet and changed all csPolygonSet methods
	  to the new convention. Added both to the API.
30-Mar-1999
	- Patch from Ivan Avramovic to put the Visual C++ specific assembly
	  in a separate file so that it no longer clutters the math
	  include files.
	- Another patch from Ivan which fixes a very rare clipping bug
	  which could cause polygons to be clipped away when visible.
	- Started work on tutorial. It is only a beginning but have a look
	  at docs/tutorial.html.
	- Small COM related fix to OpenGL renderer from Nathaniel.
	- *** Release of 0.13_005 ***
29-Mar-1999
	- Small change in loading of windows icon (as grabbed from the
	  mailing list :-)
	- Fix to Linux sound driver from Gert Steenssens.
	- Fixed deletion bug in PolygonSet. Two arrays allocated with 'new[]'
	  were deleted with 'delete' (and not with 'delete[]').
	- Denis Dmitriev gave me a new intersector routine for polygonset
	  which I will use to implement fog in a hardware compatible way
	  (whenever I get around to doing that :-)
	- Received update to the Macintosh port from Robert Bate.
28-Mar-1999
	- MAJOR change in the directory structure. This change helps make
	  the distinction between all the separate packages/components
	  of Crystal Space. Except for all the project files everything
	  should almost work. I modified all source files to get the new
	  include files at the right place but I may have made some
	  mistakes in those source files that I cannot test.
26-Mar-1999
	- Added configurator object to the 3D engine which the system
	  driver will also use to drive commandline options and so on.
	- All praise Ivan Avramovic! :-)  He fixed two bugs in one go.
	  First he fixed the bug with the portals not being clipped
	  correctly when to close to the portal (causing part of the
	  screen not be redrawn). And then he also fixes a related bug
	  which could causes dirty crashes when viewing polygons in
	  rare cases.
	- Nathaniel sent me a large patch containing the following:
	    - Fix of VisualC project files.
	    - Add ds3d and EAX sound renderers.
	    - Fix a3d sound renderer.
	    - Fix linux sound driver.
	    - Fix Direct3D (DX5) driver.
	    - Fix DirectDraw2D driver.
	    - Fix OpenGL2D driver for Windows.
	- Robert Bate send me a new patch for the Macintosh port which
	  fixes the Mac sound drivers.
	- *** Release of 0.13_004 ***
	- Added routine from Denis Dmitriev <mrsigma@mail.quik.com> to
	  split a convex polygonset into slices parallel to the view plane.
	  I'm going to use this routine for implementing volumetric fog
	  in a way suitable for the hardware renderers.
25-Mar-1999
	- Did various cleanups in the code. All related to having a
	  3D engine library which is cleanly separated from the system
	  dependent stuff and the 3D/2D drivers.
	- Patch from Andrew Zabolotny to fix the OS/2 port.
	- Update to macintosh port from Robert Bate.
	- Completely rewrote the 'simple' application (based it on
	  Blocks) to be useful as the reference tutorial CS application.
	  If you want to know how to use CS from your application then
	  'simple' is the way to go :-)
24-Mar-1999
	- Created halo.h from world.h.
	- Updated doc++ documentation in csWorld.
	- Removed the global Gfx2D and Gfx3D defines.  The 3D rasterizer is
	  now a parameter to all 3D functions that require it.	This is better
	  practice and should make it easier to use csWorld for multiple 3D
	  rasterizer at the same time (although this is untested).
	- Removed dependency on system/system.h from the engine code. The
	  plan is that all system dependent stuff belongs to the application
	  code and the engine should not have to use it unless through the
	  ISystem interface.
23-Mar-1999
	- Renamed render files for OpenGL and Software to a more consistant
	  format.
	- Moved csTextureMM to the general texture manager and provided
	  3D rasterizer specific subclasses (csTextureMMSoftware and
	  csTextureMMOpenGL).
	- Greatly simplified the OpenGL and software texture managers
	  by removing obsolete stuff and moving common stuff to the
	  csTextureManager superclass.
	- Fixed Blocks again.
	- *** Release of 0.13_003 ***
	- Added 'freelook' command (boolean). With this command you can
	  enable a freelook like in Quake where the mouse looks around.
	  This command has been bound to the '\' key. Press it once to
	  enable freelook. Press again to disable. Thanks to Leslie
	  Saputra for giving me the code to do freelook. I made his
	  code more general. Note that I had to add a SetMousePosition
	  function to IGraphics2D. Only the Linux port supports this
	  (including the OpenGL renderer). So if you want to see this
	  effect you need to add SetMousePosition support for your
	  platform.
	- Mouse button one moves forwards (works very well in combination
	  with 'freelook'). The old usage of mouse button one (z buffer
	  testing and hilighting of selected polygon) has moved to the
	  right button.
	- Removed delta tracking of software renderer which was only
	  useful for debugging (and was broken anyway).
	- Changed csCamera class to new method naming convention.
	  Also augmented the online documentation (Doc++) format.
	- Added new 'api' target to the makefile. This target will create
	  the API reference document in Doc++ format (HTML). It is basically
	  a subset of the complete auto-documentation but contains only
	  the classes which are useful for using from Crystal Space
	  applications.
	- Split geometry/math3d.* into geometry/math3d.* and
	  geometry/transform/*
	- Renamed Transform, ReversibleTransform, and OrthoTransform
	  to cs... and renamed all methods to the new naming convention.
	  The Transform classes also speak about 'other' and 'this'
	  space instead of 'world' and 'this'.
22-Mar-1999
	- Implemented IConfig interface which COM modules can implement as a
	  composite COM object to have user-settings which the application can
	  query.
	- Added 'Initialize' method to IGraphics2D and IGraphics3D. This means
	  that the constructor is not allowed to do anything graphics related
	  except open other needed COM drivers. The code previously in the
	  constructor is now in Initialize. I already changed the software
	  renderer and the X11 2D driver but nothing else.
21-Mar-1999
	- Fixed virtual function call in OpenGL renderer by moving 'Clear()'
	  from the parent destructor to the child destructors for the texture
	  and lightmap caches. unfortunately this results in a new bug
	  which I have to investigate further.
	- Made common csTextureManager super-class for
	  csTextureManagerSoftware and csTextureManagerOpenGL.	I still have
	  to move all common functionality there.
20-Mar-1999
	- Decoupled texture manager from 3D driver. That way it can be
	  used more easily as a standalone module for the 2D driver.
19-Mar-1999
	- Added support for 2D driver textures in texture manager. Now,
	  when registering a texture to the texture manager you have to
	  say if you want to use it for 3d and/or for 2d.
	- I fixed csws so that it compiles (untested).
	- I tried to fix MazeD but I failed. Andrew Zabolotny will have
	  to do this.
	- I've done a cleanup of the code based on the main() routine
	  in WalkTest. I tried to make this code as easy and readable
	  as possible. As a consequence I had to change some things in
	  the engine itself.
	- I moved cs3Dview from general to engine and renamed it to
	  csView. In other words: I promoted the class to a real 3D engine
	  class.
	- Removed dependency of ICamera interface from Graphics3D.
	  The camera is a 3D engine concept and the 3D rasterizer should
	  not worry about this. However, the 3D rasterizer needed the
	  FOV from the camera. I now communicate this value in G3DPolygon.
	- Fixed 2D sprite drawing but I could not test it because MazeD
	  is still broken and that's about the only thing that uses
	  2D sprites right now.
	- Removed all MultiSectorObject mess. Now I use csObjVector instead.
	  This is slightly (but only slightly) less efficient but a LOT
	  easier to maintain and understand. Note that the current
	  implementation is still a bit naive. It can be optimized further.
	  But first a clean API :-)
	- Renamed all csWorld functions to the NewNamingConvention.
	- Fixed the OpenGL renderer so that it works again. However, I just
	  used to software texture manager. This is of course overkill.
18-Mar-1999
	- To make things easier and more consistent I removed support
	  for the fast_wxx mixing modes in 8-bit.
	- Renamed TextureMM to csTextureHandle. This class represents the
	  link from the named texture in CS to the ITextureHandle reference
	  as returned by ITextureManager.
	- Renamed Textures to csTextureList.
	- Removed IWorld interface since it is obsolete now (should be
	  rewritten later using IDL).
	- Fixed infinite maze so that it works using the new texture manager.
	- Fixed Blocks so that it works using the new texture manager.
17-Mar-1999
	- Added 8-bit simulation in 32-bit display mode for X11 2D driver.
	  Also added 15/16-bit simulation in 32-bit display mode, 15-bit
	  simulation in 16-bit mode and 16-bit simulation in 15-bit mode.
	  This completes all possible permutations of simulated mode.
	- For testing purposes I extended the 'addlight' command so that
	  you can give parameters. For example 'addlight 1,0,0,100' will
	  add a red light with radius 100 at the current position.
	  'addlight' without parameters will still add the random dynamic
	  light that moves up and down.
	- Continued move of Textures class to 3D rasterizer (pfff... this
	  is a LOT of work).
16-Mar-1999
	- Continued work on moving texture management to 3D rasterizer.
	  The big moment is almost there. Already the software renderer
	  doesn't use the old classes anymore. I also started to delete
	  the old classes.
	- Moved ambient light settings from the Textures class to the
	  csLight class where they fit better.
	- Added read_config() method to csWorld to read all 3D engine
	  specific configuration values. This cleans up some initialization
	  in the main routine.
15-Mar-1999
	- Continued work on moving texture management to 3D rasterizer...
	- Received and integrated a patch from Andrew Zabolotny with the
	  following changes:
	    - Moved com/dummy.cpp into system/unix. This is a
	      *Linux-specific* problem, not even sure its a problem for
	      *all* flavours of Linux. Its a bug.  Why it should reside
	      in common source tree? Now this file is referenced only
	      from linux.mak (added to S_SYS_DLL variable); if someone
	      needs it (s)he should do similarily. If someone on other
	      (from Unix) system will encounter same problem, although
	      I doubt it, we'll move it to the system/ directory (but
	      not to COM since its not COM-specific).
	    - New directory: mk/scripts/
	      Added a configuration script common for all Unix flavours.
	    - Split djgpp.mak into two, new file: raw2d.mak for 2D driver.
	- *** Release of 0.13_002 ***
14-Mar-1999
	- Continued work on moving texture management to 3D rasterizer...
13-Mar-1999
	- Continued work on moving texture management to 3D rasterizer...
12-Mar-1999
	- Moved graph3d.* to software as it is for the software renderer
	  only. Merged all software, softw16, and softw32 directories
	  into software.
11-Mar-1999
	- Continued work on the ITextureManager interface and the
	  software implementation. Added a few new GUIDs for general
	  use.
10-Mar-1999
	- Applied forgotten patch for A3D support (3D sound)
	  from Nathaniel.
	- Continued work on the ITextureManager interface and the
	  software implementation.
9-Mar-1999
	- Added patch from Norman Kramer to fix the Linux sound driver.
	- Added two project files for OS/2 from Andrew Zabolotny to fix a
	  problem with compiling the network drivers.
	- Started moving Textures class to 3D rasterizer. This movement
	  is 'soft'. I intend to keep the original Textures class functional
	  for as long as possible while implementing all functionality in the
	  new csTextureManagerSoftware class (through the ITextureManager
	  interface).
	- To easy this transition I started cleaning up the Textures and
	  TextureMM classes. The creation of mipmaps is now done in ImageFile
	  instead of TextureMM. This is slightly less efficient but a LOT
	  easier to maintain and it makes code cleaner.	 Since this is only
	  done at startup the speed problem is not that big (I don't even
	  notice it).
8-Mar-1999
	- Nathaniel blindly ported Linux and Macintosh sound to the new sound
	  system.  It will probably not work as such but it is a start for
	  porting.  The old files are NOT deleted.  They are kept for
	  reference.  The guids for CLSID_OSSSoundDriver and
	  CLSID_MacSoundDriver need to be added as well.  I already added
	  three new makefiles (mk/system/sndrdrn.mak, sndrdrs.mak, and
	  snddrvn.mak) for the NULL sound driver and renderer and the software
	  sound renderer.  A similar makefile will need to be added for the
	  Linux native driver.
	- Added code from Ayal Pinkus which comes one step closer to lighting
	  the curves. There is no actualy lightmap support yet.
	- *** Release of 0.13_001 ***
5-Mar-1999
	- New patch to BeOS from Xavier Pianet.
	- New 3D sound system from Nathaniel. He considerably rewrote his
	  sound system to use COM. As a consequence the Linux and Macintosh
	  ports will be broken (because of the broken sound code).
4-Mar-1999
	- Patch from Gert Steenssens to fix the Glide port. Now it also
	  has correct lightmaps like the OpenGL port!
	- *** Release of 0.12_003 ***
3-Mar-1999
	- Eric Sunshine made the following changes:
	    - Fixed a very nasty crasher where Bot::move() was trying to
	      generate a unit vector from <0,0,0>.  Unfortunately
	      Vector3::unit() which computes (v / norm) was not checking for
	      (norm == 0) which is the case for vector <0,0,0>.	 This bug
	      manifested itself in the following manner.  The result of unit()
	      was NaN, as a consequence of division by zero.  This NaN value
	      was then used in other computations which resulted in NaN for
	      those values as well.  Finally, a NaN value was passed to
	      csSector::follow_segment() which resulted in infinite mutual
	      recursion with Portal::follow_segment().	Each follow_segment()
	      function repeatedly called the other until the stack overflowed.
	      I fixed this problem by making Vector3d::unit() more robust.  It
	      now checks for the special case where (norm == 0).
	    - Fixed NeXTSystemProxy and NeXTDelegate so that when application
	      pauses, the clock also pauses.  This prevents program AI from
	      experiencing a temporal anomaly when execution is resumed.
	    - Added a README.Binaries file which will be included in the
	      binary-only distributions of Crystal Space for MacOS/X Server,
	      OpenStep, and NextStep.
	- Update to csall.dsw (VC5 project file) from Jason McKnight. The
	  correct dependencies for MazeD are added so that MazeD can compile
	  out of the box.
	- New project files for VC5 from Bart van Langen.
	- Update to DDG from Alex Pfaffe (in contrib).
2-Mar-1999
	- Small fix in csws/cswsutil.cpp.
	- Removed MSG_WARNING call from general/loader (curved surfaces)
	  because MSG_WARNING gives problems in fullscreen Windows.
	- Added two GUIDS from Xavier Pianet for BeOS.
	- Eric Sunshine made the following changes:
	    - Moved the Blocks game into the cryst/src/general directory.  It
	      used to be stand-alone which was annoying because it required a
	      special makefile for each platform.
	    - Added data file for Blocks: cryst/data/blocks.zip.
	    - Moved blocks.cfg directly into cryst/src directory.
	    - Fixed some compilation warnings in blocks.cpp.
	    - Added "quit" feature to Blocks.  Program now terminates when
	      Escape is pressed.
	    - Documented the Blocks game in cryst/docs/blocks.txt.
	    - FILES & docs/whatsnew.txt now mention Blocks.
	    - Modified Makefile, common.mak, & cs.mak to build Blocks game.
	    - Changed cs.mak so that it now uses the PROC variable to compose
	      the "out" object-file directory.	This way one can cross-compile
	      without having to "make clean" first.
	    - Fixed next.mak so that it sorts TARGET_ARCHS so that when PROC
	      is used to compose "out" directory, the same list of
	      architectures will always result in the same PROC value
	      regardless of initial order.
	    - Fixed next2d.mak to refer to NEXT.DESCRIPTION rather than
	      NEXT.FLAVOR.
	    - Fixed INSTALL document so that it no longer makes invalid claims
	      about NeXT ports not working with 24-bit displays.
	    - Documented new structure of "out" directory in INSTALL.BeOS,
	      INSTALL.Unix, INSTALL.General.
	    - Clarified introduction of INSTALL.General.  It is now easier to
	      understand that it may be useful for Unix-like ports, but that
	      one should read port-specific documentation as well.  Now
	      mentions "gnumake" explicitly.
	    - Updated INSTALL.NeXT to refer to new package naming conventions:
	      csmain.tgz, csnext.tgz, etc.  NeXT port used to be on other.tgz
	      package, but now resides in its own package.  Now mentions new
	      INSTALL.General instead of INSTALL.Unix.	Now mentions new
	      Blocks (csblocks.tgz) game, as well as docs/blocks.txt.
	    - Fixed a warning in keys.cpp add_bot() which someone introduced
	      in this release.
	- New project files from Vyacheslav Chupyatov for Watcom C++/Windows.
	- *** Release of 0.12_002 ***
1-Mar-1999
	- Eric Sunshine provided a small fix to the sockets code.
	- Small patch from Andrew Apted to the GGI code. He renamed
	  ggi2d.so back to csggi2d.so because there is already a library
	  called libggi2d.so.
	- Small fix from Dmitry Derevyanko so that the X11 port first
	  tries a visual with the same depth as the display. Only then
	  will it try other visuals.
	- Patch from Robert Bate with new project files for the Macintosh
	  port and a little fix to the texture cache.
	- Small fix in Glide port from Gert Steenssens. This fixes a bug
	  with textures which use 1/x aspect ratio.
	- Updated the INSTALL.* documents.
	- Removed OS/2 install document because it is outdated. Copied
	  some relevant parts of the document to NOTES.OS2.
	- Patch from Norman Kramer on config section in linux.mak. I have
	  NOT been able to test this yet. I hope that it works.
	- Small patch from Norman Kramer on linux sound driver.
	- Small Glide patch from Nathaniel Saint Martin for Windows.
	- *** Release of 0.12_001 ***
	- Received the first prototype of the Amiga port from
	  Jesse McClusky <Jesse.McClusky@PSS.Boeing.com>. This version
	  is not very stable and it is a small miracle if you actually
	  manage to compile it but it shows that work is in progress
	  at least.
28-Feb-1999
	- Moved printing of OpenGL version after initialization so that it
	  works.
	- Fixed stupid compilation bug in inifile.cpp.
	- Manually edited the VC5 project files to fix a few problems with
	  the OpenGL renderer project and also try to set the projects
	  to release mode.
	- Fixed bug in timing for unix, OS/2, and DOS. Elapsed_time was
	  not computed correctly.
	- Added 'delbot' command to delete the last added bot.
	- Bots move smoothly through the dungeon now.
	- Random bots are added every 10 seconds.
	- Increased cache to 5000000 because there are places in large.zip
	  where this is needed.
26-Feb-1999
	- Fix to OpenGL from Gary Haussmann. This fix should make no
	  difference for Mesa but it may help hardware accelerated
	  OpenGL implementations for correct texture mapping. We will
	  have to test this.
	- Update to Macintosh port from Robert Bate.
	- Received new networking files from Serguei Narojnyi (Snaar).
	  Also a change to the ISystem interface.
	- Small patch from Alex Pfaffe on the collision detection system
	  which should improve the chance of it working correctly with
	  DJGPP.
	- Patch from Andrew Zabolotny which fixes MazeD in 16-bit mode
	  and also some changes to the OS/2 port.
	  Another patch from him with some changes to the GGI port (yes,
	  both Andrew's work on the GGI port now :-) and some other
	  cosmetic changes.
	- I added 32-bit support for unlighted triangle drawers. This
	  was easy to do and allowed correct viewing of unlighted sprites.
	  Curved surfaces will now also be visible.
	- Eric Sunshine added two new ports: Mac OS/X Server and OpenStep 4.2.
	  He also fixed various problems in parts of the engine.  A summary of
	  his changes follows:
	    - Restructured directory "system/next" to accommodate the new
	      ports.  Added port-specific subdirectories "nextstep",
	      "openstep", & "rhapsody", as well as "shared" which contains
	      resources common to all ports.  The "openstep" directory is used
	      by both the OpenStep & Rhapsody ports.
	    - Overhauled NeXTSystemProxy to work with OpenStep and Rhapsody.
	      Completely dropped the use of a separate thread for AppKit's
	      run-loop.	 Even though NextStep did not mind DPS activity from
	      either thread (properly synchronized, of course), Rhapsody
	      disallowed it.  Rather than complicating the code even more by
	      sending messages between threads, I ditched the idea altogether.
	      As a replacement, I was able to add a category to NSApplication
	      defining the method -runRecursively: which works a little magic
	      and allows the run-loop to be invoked recursively unlike the
	      normal -run method.  This simplified the implementation of
	      NeXTSystemProxy considerably.
	    - Added NeXTMenu module which constructs the application's menu
	      based on a menu-definition configuration file (NeXTMenu.cfg).
	      There are two such files.	 One defines a NextStep-style menu
	      which is used for NextStep and OpenStep, and the other defines a
	      Rhapsody-style menu.  Removed the hard-coded NextStep-style menu
	      definition from NeXTSystemProxy.
	    - Worked around Rhapsody compiler bug.  Use of
	      -fomit-frame-pointer flag was causing the program to crash in
	      the constructor of global objects.
	    - Added NeXTfopen.cpp & NeXTprintf.cpp which define
	      csSystemDriver::fopen() & csSystemDriver::printf() since the
	      Rhapsody compiler was generating unlinkable object files when
	      using the versions in system/general which accessed global
	      ::fopen() && ::printf().	This is a known problem with the
	      Rhapsody development tools.
	    - Generalized next.mak for use by all NeXT ports.  Moved
	      definition of SYSMODIFIERSHELP to next2d.mak where it belongs.
	    - The NeXT makefiles, next.mak & next2d.mak, now properly restrict
	      the available architectures for TARGET_ARCHS to those allowed by
	      each platform: i386, m68k, sparc, hppa for NextStep; i386, m68k,
	      sparc for OpenStep; and i386, ppc for Rhapsody DR2.
	    - Renamed libnext2d to next2d.
	    - Fixed version.h to define OS_VERSION appropriately for each
	      NeXT-style platform rather than being hard-coded as "NextStep".
	    - NeXTDelegate no longer eats right-mouse-down when application is
	      paused, so the right button can be used for the main-menu in
	      this case.
	    - NeXTDelegate no longer sends mouse-moved events when the mouse
	      is outside the view bounds.  Even though the tracking rectangle
	      is removed when the cursor leaves the view bounds, some
	      mouse-moved events tend to get sent anyhow.  The code now
	      ignores these anomalous events.
	    - NeXTDelegate now reveals the mouse pointer when it exits the
	      view bounds if it was hidden.
	    - Fixed three bugs in NeXTProxy2D's handling of 24-bit RGB.
		- Was allocating only half the memory needed for the palette.
		- set_rgb() was miscomputing the pointer to the palette entry.
		- flush_24() was only copying 2-bytes from the palette to the
		  frame buffer, rather than 4-bytes.
	    - Worked around an OpenStep compiler bug which was triggered by
	      several classes, where it generates unlinkable object files
	      if an inline method calls a second inline method before the
	      second method has been seen by the compiler.
	    - Centralized discussion of multi-architecture binaries in
	      INSTALL.NeXT.
	    - Fixed a compiler warning in drvsdefs.h.  It was defining
	      CS_NET_SOCKET as (unsigned int), yet CS_NET_INVALID_SOCKET as
	      (-1).
	    - Worked around problem caused by radically different (struct
	      stat) on Rhapsody leading to compilation error in
	      Archive::read_zip_entries().
	    - Added 'const' version of operator[] to csVector.
	    - Added missing 'const' qualifier to many csIniFile methods.
	    - Fixed a bug in Andrew's implementation of the NeXT_STDAPI_
	      macro in cscom.cpp.  It was emitting code which tried to return
	      a value from a (void) function.
	    - Fixed long-standing bug in cspFileDialog::Reread() where it
	      botched handling of root "/" directory by interpreting it as "".
	      This made it impossible to browse the root directory.  This bug
	      affected all platforms which use "/" as a path separator.
	    - Added top-level makefile targets for nextstep, openstep, and
	      rhapsody.
	    - Overhauled INSTALL.NeXT and README.NeXT to reflect new ports.
	    - Fixed several documents to mention the new ports.
	    - Fixed faq.html to mention the new INSTALL.BeOS.
	    - Fixed the 'net' target since it was incorrect for platforms
	      which do not use all network related modules.  Now the target
	      dependencies are added dynamically.
	    - Fixed more "unused variable" compiler warnings.
	    - Fixed bug in PolygonSet::intersects_camera_z_plane().  It was
	      declared as returning a value, but failed to do so.
	- New project files for VC from Bart van Langen. These should make
	  things easier for beginning users.
	- Added Doom to CS map convertor from Wolfgang Lehrach
	  <wolfg_l@pro-net.co.uk>. It is written in JAVA and seems to work
	  very well. I added it to the contrib directory.
	- Added DDG (Digital Dawn Toolkit) from Alex Pfaffe to the
	  contrib directory. As such this toolkit has no direct relationship
	  to Crystal Space but it can serve as a useful repository for
	  some stuff and more importantly it also serves as the testbed
	  for the ROAM algorithm which we are probably going to use for
	  landscape rendering in Crystal Space.
	- *** Release of 0.11_058 ***
25-Feb-1999
	- Really fixed DJGPP port. I can now compile it again.
24-Feb-1999
	- Small fix for OpenGL from Xavier Pianet.
	- Fix from Andrew Zabolotny for the DJGPP port.	 I hope this fixes
	  things.
	- Small fixes from Xavier Pianet on the BeOS port and OpenGL.
	- Received new Visual C++ project files from Bart Van Langen.
	- Small fix for Windows from Vyacheslav Chupyatov. Also new
	  Watcom C++ project files for Windows.
	- Patch for Linux sound driver from Norman Kramer.
23-Feb-1999
	- Compile fix for Visual C++.
	- Received a few patches for Linux/Glide from Gert Steenssens.
	  He still has problems with the lightmaps though.
	- Received an update to the Macintosh port from Robert Bate.
	- Fix to allow static compilation of SVGALIB 2D driver.
	- Fixed bad initialization of shmptr in Linux sound driver.
	  This causes a crash at exit if there is no sound driver (like
	  on my Linux system).
22-Feb-1999
	- Patch from Andrew Apted fixing his GGI port. The Linux software
	  renderer will now automatically choose between GGI, X11, or
	  SVGALIB depending on:
	    - First it will check if GGI_DISPLAY is defined. If so
	      it uses the GGI target.
	    - Then it checks if DISPLAY is defined. If so it uses
	      the X11 target.
	    - Otherwise it uses the SVGALIB target.
	  This is only the software renderer that does this. The OpenGL
	  and Glide renderers have their own 2D driver selection and
	  currently only work with X11.
	- Patch from Xavier Pianet to fix the BeOS port. He also reports
	  that the OpenGL stuff is working on BeOS.
	- Small fixes for Linux/Glide from Gert Steenssens. He reports that
	  he has problems with the Glide port if compiled with optimizations
	  on. The main problem in that case is that he doesn't have
	  keyboard/mouse input.
	- Largish patch from Andrew Zabolotny with the following changes:
	    - Cleanup of SVGALIB2D driver.
	    - Cleanup of x2d (software/X11) and glx2d (OpenGL/X11)
	      drivers. Added hardware mouse cursor support in both.
	      Added focus change event support. Added expose event
	      handling so that if MazeD window is overlapped by other
	      window the covered area is correctly redrawn.
	      Note from Jorrit: I also applied the equivalent changes
	      to the glidex2d (Glide/X11) 2D driver. I couldn't test
	      this by lack of Glide.
	    - Some cleanup to the makefiles. OpenGL stuff supports
	      MESA_PATH environment variable which you can use to
	      store user specific locations for the Mesa stuff.
	    - Added 'configure' phase to all makefiles. When you do
	      'make linux' it runs linux.mak with MAKESECTION=configure
	      and target=configure. The only target that uses this is
	      linux.mak. It creates a file called 'config.mak'.
	  As always Andrews patches are a bit dangerous. I can confirm that
	  Solaris/X11 and Solaris/OpenGL still work. I can't say much about
	  SVGALIB, GGI, and Glide though. I will test that at home.
	- I also received a new workspace for Visual C++ from Bart Van
	  Langen. He also sent me a few additional fixes to Glide and
	  OpenGL.
	- *** Release of 0.11_057 ***
21-Feb-1999
	- After some very hard work I managed to get the Windows OpenGL port
	  working more or less. It seems to fully work like the Mesa/Linux
	  port. If I force it to use software rendering (which is AWFULLY
	  slow by the way) then it looks exactly like with Mesa. However, if
	  I force it to use hardware rendering then I have two problems:
	    - First the GL_SRC_COLOR, GL_DEST_COLOR blend mode that I'm
	      using does not seem to work very well but that may be
	      caused by my RIVA 128ZX not supporting that particular
	      type of blending. However, I don't know how I can detect
	      this with OpenGL. In Direct3D you can test for this
	      but can you in OpenGL?
	    - Another strange problem that occurs is lightmap shifting.
	      Only if you are close to a polygon is the lightmap mapped
	      correctly onto the polygon. If you move away the lightmap
	      slowly shifts away. I don't know what causes this. I
	      suspected a problem in the code but then this effect
	      should also occur in Mesa or software rendering mode.
	      And there it doesn't happen. Anyone have a clue about
	      this?
	  And then there is the way I use to force software/hardware
	  rendering: if I enable PFD_DOUBLEBUFFER I get hardware rendering
	  (I notice this mainly because it goes VERY fast :-) If I disable
	  PFD_DOUBLEBUFFER I get software rendering. Why is this?
	  Note: util/inifile.cpp and util/csvector.cpp need to be added
	  to the OpenGL Renderer project.
	- Fixed bug with OpenGL 3D driver Z buffer test and lightmaps. If
	  two polygons of a Thing intersected then it was possible that the
	  lightmap of one polygon was drawn over the other polygon.
19-Feb-1999
	- Found the right blending function in OpenGL to get lightmap level
	  128 at 100% lighting. Now the OpenGL port almost looks like
	  the software renderer (I'm using Mesa unaccelerated by the way).
	- Completely fixed the scaling of lightmaps. They are now properly
	  aligned just like in software mode.
	- Enabled GL_LINEAR for lightmaps which is much nicer than
	  GL_NEAREST. Now the lightmaps are properly interpolated. This
	  introduced an error however because the actual lightmap is smaller
	  than the PO2 lightmap in which it is contained. The texture mapping
	  happens with GL_REPEAT and GL_LINEAR wraps the texture coordinates
	  in order to compute it's linear interpolation. To fix this I copied
	  the first row and column to the last physical row and column and also
	  copied the last real row and column to the following.
	- Fixed swap of green and blue in the OpenGL lightmap translation.
	- Conclusion: it is still not perfect. Compared to the software
	  renderer there are still some places where the borders between
	  two polygons are visible (they are not black but there is a color
	  difference). Investigation has to continue here.
	- I enabled GL_LINEAR for texture mapping as well. This looks very
	  nice but is VERY slow if you don't have hardware acceleration.
	  However, since the main point of the OpenGL is for hardware
	  acceleration I'm going to make GL_LINEAR the default. I will soon
	  add an 'opengl.cfg' file similar to the Direct3D and Glide cfg
	  files where you can control this.
	- Added opengl.cfg with two flags: ENABLE_BILINEARMAP and
	  ENABLE_DITHER.
	- WARNING! Having global variables in separate libraries can be
	  dangerous. In this case I was having a problem with the 'config'
	  variable which is global and defined in CS itself and in all the
	  3D rasterizers. It would be best to make the config variable local
	  to the class but the quick solution which I used is to just use
	  another name for 'config' in the 3D rasterizers.
	- I extended the OpenGL X11 2D driver to support line drawing and
	  pixel drawing and also initial support for text drawing (nothing
	  is drawn yet but I have added the function for it). Note that only
	  the white color is supported.
	- I extended the OpenGL Windows 2D driver in a similar way but I
	  could not test this.
	- Reinstated OpenGL3D::DrawLine (it was commented out) because 2D
	  line drawing is functional now.
	- I tried to implement text printing but this does not seem to
	  work. Another thing that I need to learn yet :-)
	- Added HINT_PERSPECTIVE_FAST flag to opengl.cfg. If set to 'yes'
	  then a hint is given to OpenGL to use fast interpolation of
	  perspective correct texture mapping (like the software renderer).
	  Not all implementions honor this hint so nothing may happen.
	  Default is 'no'.
	- Thanks to Branimir Karadzic I managed to get Gouraud shading for
	  sprite triangles working in OpenGL.
18-Feb-1999
	- Fixed the Unix 2D drivers (SVGALIB, x2d, glx2d, and glide2d) for
	  static linking.
	- Fix from Gary Haussmann for the OpenGL port. He included lightmaps
	  again (but they are not fully correct yet) and also fixed a few
	  other problems (sprite drawing for example).
	- Fix for collision detection from Alex Pfaffe. The street is a
	  safe place to go now :-)
	- Update to project files for Macintosh from Robert Bate.
	- *** Release of 0.11_056 ***
	- First fix for OpenGL lightmaps. The problem was that
	  RecalcDynamicLights was not called in HighColorCache::Add.
	- Fixed drawing of sprite triangles. The problem was that OpenGL
	  blending mode was not disabled (it was enabled by the lightmap
	  code).
	- Second fix for OpenGL lightmaps. Lightmaps are converted to a power
	  of two but the original lightmap is not scaled. The OpenGL port
	  assumed that the lightmap was scaled.
17-Feb-1999
	- Update to FreeBSD makefiles from Brian Haskin.
	- Update to Macintosh port from Robert Bate. He fixed the DrawSprocket
	  support.
	- Eric Sunshine updated the to NextStep port:
	    - Implemented a NeXT specific csGraphics2D::SetMouseCursor()
	    - Now sends cscmdFocusChanged event when window's focus changes.
	    - Added a Pause item to the NextStep menu.
	    - The application now pauses automatically when hidden and when in
	      the background.
	- New sound patches from Normal Kramer.
	- I added a really old fix from Ivan Avramovic to fix a really old
	  bug. The bug is the problem that when you are too close to a portal
	  polygon, then part of the polygon is clipped away because it is
	  clipped to the Z plane. He sent this fix a long time ago but I
	  hesitated to add it because it was unfinished. But because I have
	  nothing else I tried it and it works except for reflecting surfaces.
	  I tried to fix it but I failed. Maybe someone else can have a look?
	  The relevant code is in engine/polygon/polygon.cpp and is indicated
	  with the optional EXPERIMENTAL_BUG_FIX define.
	- Received an update to the GLIDE port for Linux from Gert Steenssens.
	  The port seems functional but with a few little bugs here and there.
	  Gert warns that, although he has been careful not to break the
	  Windows Glide port, this might have happened.
	- Fixed bug in '-recalc' so that it always writes a 'precalc_info'
	  file.
	- It is possible that I fixed the DJGPP port (event_queue problem).
	  However, I'm not sure because I didn't test this.
	- Added '-driver' commandline option so that you don't have to go to
	  cryst.cfg everytime to change the driver. You should only give
	  the last part of the 3D driver name (i.e. software, glide, opengl,
	  ...).
16-Feb-1999
	- Various fixes to Glide, sound, ...
	- New INSTALL.Win file from Alex Pfaffe.
	- Changed X11, SVGALIB, and OpenGL makefiles so that they don't
	  add their libraries to the executables. This means that the
	  CS executable is REALLY independent of those drivers.
	- Messed a bit with the OpenGL/Mesa port. Now that I got this working
	  on Linux I'm interested in getting the OpenGL port in full power.
	  However I did not get far. I still need more documentation.
	- Reintroduced the 'inter' command.  It was not functional but now it
	  works again (only for the software renderer).	 With this command you
	  can control how frequently the renderer will calculate a perspective
	  correct texture coordinate.  It has the following values: 'smart'
	  (default), 'step16', and 'step32'.  'step16' and 'step32' set a
	  fixed value of 16 and 32 respectively.  'smart' tries to be clever
	  and see from the angle between the polygon and the viewer how many
	  steps would actually be needed.  'smart' is obviously the fastest
	  solution but it is visually not very good.  When you move towards a
	  polygon the texture on it can appear wobbling a bit at times.	 This
	  happens when a shift between different interpolation distances
	  occurs.  This is a quality aspect of Crystal Space which we will
	  need to improve on.
	- I also added 'step8' to have even more accuracy.
	- I improved the default 'smart' setting so that the visible pops are
	  much less even though there is no significant speed decrease.
	- Changed mipmapping to the old way of being based on minimum Z
	  distance only and not on the average of minimum and maximum Z.  This
	  is much nicer.
	- Fixed SVGALIB, OpenGL, and X11 2D drivers to properly register a
	  mouse release event.	This is required for proper operation of MazeD.
	- Implemented the 50% and general alpha scanline drawers in 32-bit
	  mode.
	- Removed the 'perfect' mode where a texture mapper is used which has
	  perspective correct texture mapping at every pixel.  I removed it
	  because: it was only implemented in 8-bit mode, it is slow, it did
	  not work very well, it was only partially implemented, and it's
	  unneeded anyway.
15-Feb-1999
	- Andrew Zabolotny send me a patch which the following changes:
	    - Fixed DOS/DJGPP port to improve the changes that I made.
	    - Added 32-bit mode to OS/2 port.  However it is untested since
	      Andrew doesn't have a functional 32-bit mode (only 24-bit).
	    - Fixed text color on console in 32-bit mode.
	- Patch from Nathaniel Saint Martin with the following fixes:
	    - Fix for broken cscom.cpp (NeXT_STDAPI define).
	    - Some fixes to Direct3D and Glide ports.
	    - He reports that there is a bug with sprite code.
	- Fix from Robert Bate to the Macintosh port.
	- Eric Sunshine made the following changes to the NextStep port:
	    - Ported it to m68k, sparc, and hppa hardware.  Previously it ran
	      only on Intel.
	    - Fix SysSystemDriver, SysMouseDriver, and SysKeyboardDriver which
	      broke after Andrew's recent changes.
	    - Added NEED_SOCKET_LIB to the makefiles to control whether or not
	      libsocket.a is linked in.	 NextStep sets this flag to 'no'.
	    - Added SYSMODIFIERSHELP to makefiles so that NextStep port can
	      add a message to the makefile help concerning TARGET_ARCHS.
	    - Worked around a compiler crasher on HPPA when compiling
	      TextureCache::create_lighted_texture_true_rgb_private().
	      Apparently the name is too long for the HPPA compiler.  Fixed
	      by shortening it.
	    - Worked around a compiler crasher on SPARC when compiling
	      calls to QueryInterface() for the IHaloRasterizer interface.
	- Fix to Linux sound driver from Norman Krämer. Also a fix to
	  the WAV file loader in general. There should no longer be
	  an audible crack when playing wav files.
	- Patch from Gert Steenssens so that the SVGALIB port can do
	  any resolution and depth.
	- *** Release of 0.11_055 ***
14-Feb-1999
	- Fixed DOS/DJGPP port so that it compiles. However it does not run
	  well. I simply got a black screen and the keyboard beeps.
	- Fixed Windows port so that it compiles but I still got errors at
	  the linking stage.
12-Feb-1999
	- Selection of 2D driver on Linux is done by looking at the DISPLAY
	  variable. If it is set we use the XLib driver. Otherwise the SVGALib
	  driver. We still have to include GGI in this selection somehow.
	  Now we truely have one executable that can work with more than one
	  2D driver!
	- Fixed SVGALIB driver completely.
	- I also managed to get the Linux/OpenGL port working with Mesa.
	  The port appears incomplete: no lightmaps for example but it
	  seems to run fine otherwise.
	- Fixed SysTime() so that it uses times() instead of clock().
	- Eric Sunshine fixed the ImageGifFile so that it works on m68k
	  hardware.  The problem was that the constructor tried allocating 9KB
	  on the stack for local variables.  Fixed so that large variables are
	  now allocated from the heap.	Also cleaned up the class and mad it
	  more robust for all platforms.
	- Eric Sunshine added CS_USE_FAST_FLOAT_TO_INT option to defs.h.  This
	  option is disabled on NextStep since the fast version of QRound()
	  was crashing Scan::draw_scanline_map().
	- Eric Sunshine fixed a bugin the csSystemDriver construtor.  It was
	  not initializing its 'world' pointer to null.	 This led to crashes
	  when other code attempted to use that field.
11-Feb-1999
	- Fixed compilation of Linux port. Mainly I had to add a dummy 'main'
	  function to all dynamic libraries so that I could link them without
	  using the '-nostdlib' option. The advantage of this is that then
	  the constructors are properly called.
	- Fixed Linux/OpenGL port so that it compiles and also runs initially.
	  However there is a crash immediatelly after opening the window so
	  I still have to investigate what is wrong here.
	- Started fixing SVGALIB port. Everything works except keyboard
	  input :-)
10-Feb-1999
	- Gert Steenssens fixed the SVGALIB port so that it supports 32-bit
	  display mode and also fixed a compilation error.
	- I added 1024x768 and 1280x1024 modes to the SVGALIB port just to
	  be complete :-)
	- Andrew Apted didn't have to do anything. It appears that his GGI
	  port already correctly supports 32-bit mode :-)
	- Update to Macintosh port from Robert Bate to support 32-bit mode.
	- Eric Sunshine added support for building NextStep multi-architecture
	  binaries (MAB).  With this feature it is possible to build an
	  executable which can run on multiple CPU types.  In support, a
	  TARGET_ARCHS option was added to the makefile.
	- Eric Sunshine fixed the NextStep port to define
	  PORT_BYTESEX_BIG_ENDIAN when appropriate.  This fixes a problem
	  where WAV files failed to load on m68k.
	- Eric Sunshine fixed a problem which caused loading of PNG images to
	  fail on m68k.	 The problem was that the PNG loader was assuming that
	  the RGBPixel structure was 4 bytes, however on m68k, the compiler
	  padded it out to 6 bytes.  To fix this, he rewrote RGBPixel and
	  RGBPalEntry to be more resilient to padding changes.
	- I modified the DOS/DJGPP port for 32-bit support. However, this is
	  untested and I'm not sure that the Vesa detection code in
	  djvidsys.cpp will correctly open a 32-bit mode (I don't understand
	  that code so somebody else will have to look at that).
	- Received a major patch from Andrew Zabolotny. Normally I would not
	  like to accept this so close to a new official release. However,
	  his patch is actually very good and simplifies things. With his
	  patch it will be possible to have one executable for Unix/Linux and
	  let it work with all Linux compatible 3D and 2D drivers without
	  having to recompile the executable. Note that this doesn't work
	  yet because the name of the 2D driver is still hardcoded (currently
	  to XLib) in the code but this is easy to fix and will be fixed in
	  one of the next versions. Andrew made care to be
	  very careful about this patch. To his credit, I actually was able
	  to compile and run the Solaris version with minimal problems.
	  I have not yet tested the Linux version. This weekend I will
	  test and update (if needed) the Linux X11 and SVGALIB versions,
	  the Windows version and the DJGPP version. Maybe other people
	  can test their ports?
	  So if you want to test a different 2D driver on Linux you will
	  have to edit system/unix/osdefs.h and add the appropriate
	  DISP_... define in the beginning. This is until we fix this.
	- *** Release of 0.11_054 ***
9-Feb-1999
	- Eric Sunshine: We got a new port!  Eric Sunshine
	  <sunshine@sunshineco.com> was so kind to port Crystal Space to
	  NextStep.  He had to modify a few things in the Crystal Space sources
	  to work around some bugs in the compiler he used.  For example, don't
	  use static_cast<> but use STATIC_CAST() instead (a macro which does
	  something else on NextStep).	Eric's changes included:
	    - Added missing '#include "types.h"' to many files in order to
	      define the fake 'bool' type which NextStep requires.
	    - Fixed a number of occurrences where expressions which work with
	      the real 'bool' type failed with the fake one.  Expressions of
	      the sort: bool a = 4; bool b = 1; bool c = (a == b), or
	      variations of this theme.
	    - Rewrote physics.cpp and dynlight.cpp to rely upon
	      csSystemDriver::Time() rather than CLOCKS_PER_SEC and clock()
	      which are unavailable on NextStep.
	    - Provided macros for STATIC_CAST, DYNAMIC_CAST, etc. since the
	      NextStep compiler does not support the new-style cast syntax.
	    - Updated DLL_NAME macros within various drivers to reflect
	      NextStep semantics.
	    - Worked around a problem in cscom.cpp where the compiler
	      disallows the 'new' keyword in 'extern "C"' functions.
	    - Provided the CS_STATIC_TABLE macro in defs.h in order to work
	      around the problem where the compiler crashes when it finds a
	      'const' table of one or two elements but where the table size
	      is not stated beforehand.
	    - Worked around a compiler bug triggered by inttable.h where a
	      using a cast of a typedef'd type in a complex offsetof()
	      expression crashed the compiler.
	    - Fixed warnings about mixing integral versus non-integral types
	      in csMenuItem::Press().
	    - Fixed a number of cases where local method arguments were
	      shadowing instance variables since the NextStep compiler
	      periodically botches it.
	    - Fixed the global makefiles to work with the NextStep tools.
	    - Fixed a bug in PrimEdit where a call to Gfx3D->BeginDraw() was
	      expecting to return 'true', when in fact it was returning S_OK.
	      As a consequence, the conditional always failed in cases where
	      it should have succeeded.
	    - Fixed a bug in the BeOS port where the #include directive for
	      driver2d was mis-typed as driver2dx.
	    - Fixed a problem in the BeOS 2D driver where it was missing an
	      #endif directive which caused compilation to fail when
	      CS_STATIC_LINKED was defined.
	    - Added notion of OS_NEXT, DISP_NEXT, and PROC_HPPA to version.h.
	    - Fixed compilation warnings about unused variables and variables
	      used uninitialized.
	    - Rewrote section one of the INSTALL document.  Updated several
	      other documents to mention the NextStep port.
	- *** Release of 0.11_053 ***
	- Fix to the DJGPP port when clearing the screen.
	- Patch to Windows port from Nathaniel. He added 32-bits support
	  for software and d3d 2d drivers (DirectDraw2D.dll).
	  Also a fix in the selection of screen depth and fixes to the
	  project files.
8-Feb-1999
	- Frederick A. Niles suggested that I should test on failure of
	  opening the X11 display. This is done now.
	- New 'move3d' console command. With this command you can toggle
	  between pure 3D movement (the old way) and 'comfortable' movement
	  (Quake movement). The latter is now default. This basically affects
	  the left and right arrow keys which now rotate the camera how
	  you would expect it. The '3' key has been assigned to this
	  new command so that you can switch back to the old system if you
	  want.
	- Created 16-bit simulation of 32-bit mode.
	- Implemented fog in 32-bit mode. This looks REALLY very nice but
	  it could be faster.
	- Implemented gouraud shaded triangle drawers in 32-bit mode.
	- Still missing from 32-bit mode:
	    - alpha transparancy
	    - color 0 transparancy
	    - unlighted texture mapping
	    - unlighted triangle drawers
	    - halos
	- Added 'precalc_info' file to archives. This file contains
	  information about various flags and settings which all affect
	  the lightmap data. Whenever such a flag changes CS will detect
	  this and automatically force recalculation of all lightmaps.
	  Examples of flags which are tested are: the default lightmap
	  size, the radiosity flags, the ambient light levels, the normal
	  light level, ...
	  This also means that it is no longer needed to do a '-recalc'
	  when I change the lightmap format. There is also a 'lightmap
	  version' field in this 'precalc_info' file which can be used
	  to indicate that there has been a global change in the lightmap
	  format.
	- I added a '-norecalc' commandline option which inhibits the
	  automatic lightmap recalculation because of the above flag.
	  Having the flags '-recalc -norecalc' works. It will recalculate
	  all lightmaps but not generate nor use the 'precalc_info'
	  file in the archive.
7-Feb-1999
	- Fixed SVGALIB driver so that it should compile in static mode as
	  well.
	- Started development of 32-bit display mode (no 24-bit!). The XLib
	  2D driver supports 32-bit now and also supports simulation of
	  32-bit mode in 8-bits (because I don't have a functional 32-bit
	  display mode on my computer). The 32-bit display mode forces
	  texture mode to be set to 24-bit. So 32-bit will ONLY work with
	  the XLib driver currently!!
	- Note: currently the only things that are supported in 32-bit
	  mode are normal sector wall drawing and thing drawing. No fog,
	  no alpha tranparancy, no unlighted textures, no sprites, no
	  gouraud shaded triangles, ...
	- Because the texture cache needs to be larger in 32-bit mode (lighted
	  textures are four times as large as with 8-bit mode) I changed the
	  Cache size argument to mean the number of texels in the cache
	  instead of the number of bytes. So a cache of 1000000 actually
	  means 2000000 bytes in 16-bit mode and 4000000 bytes in 32-bit
	  mode.
	- Moved util/memheap.cpp to render/memheap.cpp since the memory
	  heap is only used by the texture cache.
	- Removed the obsolete mipmap_setting. It was not really obsolete
	  but because all options except the default are so ugly I decided
	  to make Crystal Space simpler and remove support for it.
	  Also removed the 'lightmap' console command which controlled
	  this option.
5-Feb-1999
	- I changed the light level at 200 to 128. This means that it is now
	  possible to have much brighter lights while this doesn't affect
	  the quality of darker light-levels much.
	- Small update to Visual C++ project files from Nathaniel.
	- Small fix to Glide2x from Nathaniel.
	- Update to Macintosh port from Robert Bate.
	- Robert also fixed cleaning up the Halo rasterizer after the world
	  is destroyed.
	- Small experiment with color palette.
	- Fixed DJGPP port (untested) so that it should be faster and also
	  not flicker anymore. The problem was related to CS writing directly
	  to video memory. This is not a good idea. CS should always render
	  to an off-screen buffer first (because of alpha transparency).
4-Feb-1999
	- Small fix in makefiles for Glide.
	- Removed who.html.
	- Updated faq.html, todo.html, worldfmt.txt.
	- Duplicated win32/opengl2d directory. Removed the old version.
	- Fixes in config file for Glide and Sound.
2-Feb-1999
	- Gouraud shaded triangles are now correctly lighted even without
	  '-recalc'. This means that the sky.zip level is correct now.
	- New patch to Macintosh port from Robert Bate. The Macintosh also
	  supports sound now!! Join the club Mac :-)
	  See system/maclib/history.mac for Macintosh related changes.
	- Patch to Linux/Glide from Gert Steenssens.
	- New networking code from Serguei Narojnyi. He also added a new
	  network manager. I updated all makefiles (but not sure about the
	  OS/2 ones) so that the new 'netmann' (NULL Network Manager)
	  is included everywhere. I also renamed 'netnull.mak' to 'netdrvn.mak'
	  and 'netsocks.mak' to 'netdrvs.mak'. This is more consistant with
	  the naming scheme selected by Serguei. The libraries will be called:
	    libnetdrvn.a
	    libnetdrvs.a
	    libnetmann.a
	    libnetmans.a
	    netdrvn.so
	    netdrvs.so
	    netmann.so
	    netmans.so
	  There is also an extra option WINSOCKAPI in the system dependent
	  makefiles. If set to 'yes' then you will be able to compile
	  'netdrvs'. I already changed all makefiles to have the correct
	  setting for this.
	- Received patch to MazeD from Nicholas <nicholasfrancis@iname.com>.
	  Here are his remarks:
	    - Mazed can now save rooms, portals and (almost) Space Warps.
	    - It also saves textures - although not with mapping yet.
	    - MazeD now also loads and saves lights.
	    - There is as yet no design interface to connect the made
	      portals. Neither is there any way to edit the texture info
	      on a polygon.
	    - What I reccommend is for people to just make their things
	      in ONE room. what I mean is lots of polys, no portals. This
	      will allow the level designers to get started and get a feel
	      for the engine. I don't think that you can make a playable
	      (or walkable, anyway) level with MazeD just yet. We still
	      need to have maps on all polys.
	    - Please tell me about any bugs you encounter. This patch is
	      just the work of one nights frenzied coding, and should be
	      considered extremely alpha :)  -nevertheless, I believe
	      that it is still better that rel 047.
	- *** Release of 0.11_052 ***
1-Feb-1999
	- Fixed MazeD in 16-bit display mode.
	- Patch from Andrew Apted to fix the GGI port.
	- Received new networking files from Serguei Narojnyi (Snaar).
	- Patch from Nathaniel Saint Martin on hardware acceleration.
	  He now has a better way for handling the lightmap code. WARNING!
	  It is possible that this breaks the Linux/Glide and Linux/OpenGL
	  ports!!! Can someone check this? He also has redone the 2d
	  graphics driver for OpenGL (Windows only) using wgl functions.
	- Fixed bug in caching lightmaps in combination with the STATBSP
	  functionality.
	- *** Release of 0.11_051 ***
	- Fixed cs_lib target in makefile.
29-Jan-1999
	- 'Crappy' solution from Seth Galbraith (his own words :-) to the
	  collision detection problem (which manifested itself mainly on
	  DOS/DJGPP).
	- Norman Kramer turned on -pedantic for GCC and removed even
	  more warnings.
	- Patch to Linux/OpenGL from Gary Haussmann.
	- Conversion to COM for SVGALib from Gert Steenssens! Just in time
	  for the next official release :-)
	  He also updated INSTALL.Unix.
	- Avoided a bug with collision detection and curved surfaces.
	  bezex.zip will now work again.
	- Made the makefile a bit more user-friendly. The makefiles will
	  initially be configured for an unknown invalid system. This means
	  that you will not be able to do 'make cs', 'make all', 'make depend',
	  ... or anything initially. First you need to configure your system.
	- Fix to Windows port in SetCacheSize function that I added.
	- *** Release of 0.11_050 ***
28-Jan-1999
	- Made 'linuxpro' target in makefiles to compile for the Pentium Pro
	  processor.
	- The 'linux' and 'solaris' targets autodetect which processor they
	  are using so the linux target should now work automatically on
	  MkLinux and the solaris target should work on Pentium Solaris
	  as well (not tested).
	- Removed '-light/-nolight' commandline options because they have
	  limited use.
	- '-exec' commandline option works again (to execute a script at
	  startup).
	- '-ilace/-noilace' commandline options work again.
	- '-cache' commandline option and TextureMapper/CACHE config file
	  option works again.
	- Patch from Nathaniel Saint Martin on Glide2.	He added 16 bit
	  texturing, fixed all problems with single/multi pass (works correct
	  now both on Voodoo and Voodoo 2).  He also started adding halo
	  support (not functional yet).
	- Removed the '-line' commandline option since it can better be
	  controlled with the LINEMAX config file option.
	- Removed the '-confg' commandline option since it can better be
	  controlled with the CONFG config file option.
	- The special '-sdepth' commandline option has been removed. This
	  option was only for the X11 version but it didn't function any more.
	  You can now get the same functionality by using '-depth Depth' with
	  Depth a negative number (for example '-depth -16'). This features
	  allows you to simulate the given depth on a display which doesn't
	  support that depth (for example, simulate 16-bit on an 8-bit
	  display). Positive numbers for '-depth' are ignored by the X11
	  version (but not by some other ports).
	- Removed 'physics' console command, '-physics/-nophysics' commandline
	  options, and 'PHYSICS' config file option since the current physics
	  system is broken anyway.
	- *** Release of 0.11_049 ***
	- Removed a few other warnings.	 One of these warnings may have caused
	  a potential bug.  Collider had virtual functions but no virtual
	  destructor.  This is not good.
	- Shame on me. The Linux version with dynamic linking was STILL not ok.
	  Now I have really tested it. This version works!!!
27-Jan-1999
	- Little fixes to the FreeBSD makefiles.
	- It is no longer needed to set LD_LIBRARY_PATH on Linux/Unix if
	  the *.so files are located in the current directory. Currently
	  the libraries are first search in the system path (both
	  LD_LIBRARY_PATH and what is configured in the system itself)
	  and if that fails it will try the current directory.
	  This works both for WalkTest as for csregsvr.
	- Patch from Nathaniel Saint Martin on Windows port and hardware
	  accelerated versions.
	- Update to Macintosh port from Robert Bate.
	- I removed all warnings which 'gcc -Wall' can give me (except
	  for one which is caused by a X11 function which I cannot find
	  in the include files). So if other compilers still have warnings
	  I'd like to know them.
	- Fixed bug with rendering of volumetric fog when you are inside
	  the fog.
	- New naming system for lightmaps in world files. Sectors and Things
	  must always be uniquely named for this scheme to work correctly.
	  Polygon names do not have to be unique. The polygon in every thing
	  or sector is identified by a relative number (polygon 0 is identified
	  with 0, polygon 1 with 1, and so on).
	  Note that Things must only be named uniquely in one sector.
	- Fixed another problem with dynamic linking on Linux again.
	  NOTE!!! GLOBAL OBJECTS WHICH REQUIRE CONSTRUCTORS FOR PROPER
	  FUNCTIONALITY SHOULD BE AVOIDED. THEY OFTEN DON'T GET CALLED WHEN
	  IN A STATIC OR DYNAMIC LIBRARY!!!
	- I removed the profile documents from the docs directory since they
	  are likely to be somewhat out-dated anyway.
	- Small fix for Linux sound driver from Norman <normank@lycosmail.com>.
26-Jan-1999
	- Fixed problem in COM system which caused dynamic linking with
	  version 047 to be unusable. This version has been tested with
	  static and dynamic linking on Solaris. I have good hopes that it
	  will also work on Linux now.
	- Update to Macintosh port from Robert Bate.
	- *** Release of 0.11_048 ***
25-Jan-1999
	- Various fixes to COM and other stuff from Alex Pfaffe.
	- Fixed Solaris makefile so that I can FINALLY do dynamic linking
	  on Solaris as well.
22-Jan-1999
	- Fixed bug in COM code.
	- Fixed FreeBSD makefile (fixes from Brian Haskin).
	- Update INSTALL and README documentation a little.
	- Added capability to update lighting for one Thing only.
20-Jan-1999
	- Fix from Alex Pfaffe so that the 'c' key works again (he broke it
	  with his latest patch on collision detection).
	- Received a few bug fixes from Vyacheslav Chupyatov <sla@istu.udm.ru>
	  and also Watcom C++ makefiles for the Windows version.
	- New INSTALL.Win from Nathaniel.
	- I updated INSTALL.Unix a bit. The other files still need to be
	  updated.
	- New patch from Nathaniel on the directdetection and direct3ddx5
	  renderer:
	    - Fix compilation with problem with DirectDetection and dx3
	      (NT platform).
	    - Add a member in DirectDetection to test if device support halo
	      effect.
	    - Add minimal Halo effect support: it needs texture with alpha
	      channel (not supported by all hardware), there are two format
	      supported ARGB 4444 (16 bits) and 8888 (32 bits), display seem
	      correct but there is no zbuffer test.
	    - Fix bug when alpha texture have a lightmap.
	    - Add 32 bit textures support (not yet very usefull but wait until
	      we add 32 bit render support ;-))
	    - Some other fixes.
	    - New members in Direct3DDx5.cfg.
		- If you set 'USE_16BIT_TEXTURE' to 'no', renderer tries to get
		  a 8 bit palettized format texture, a 16 bit format lightmap
		  and 16 bit with alpha channel for halo.  If your device don't
		  support 8 bit palettized (like tnt), it will search for a 16
		  bits.	 If your device don't support 16 bit it will search for
		  32 bit format.  If you set USE_16BIT_TEXTURE to 'yes' it
		  searches for 16 bit format (but if it doesn't find this
		  format and find 8 bit, it will use 8 bit).
		- If you set EXTEND_32BIT_TEXTURE to 'yes' (with
		  USE_16BIT_TEXTURE to 'yes') it will try to find 32 bit format
		  for all type of texture (lightmap, halo, texture).  But, if
		  your device don't support them (like 3dfx chips), it takes 16
		  bit format.
		- Keep 'DISABLE_MIPMAP' to 'yes' because mipmapping has a small
		  bug not which I couldn't find yet.
	- Another large patch from Andrew Zabolotny with his usual
	  'port-breaking' style :-) At least he gets a lot of work done in one
	  patch.  Here are his notes:
	    - Changed the dynamic-linked modules management. Instead of
	      csLoadLibrary(), csGetProcAddress(), csFreeAllLibraries the
	      system-dependent part should now provide the
	      SysLoadLibrary(), SysGetProcAddress(), SysFreeLibrary()
	      routines.	 Everything other (rendundant code) is kept in
	      csCom now.
	    - Changed the COM stuff: now the COM registry is kept in an
	      csIniFile that is called csCOM.cfg. First the CS_COM
	      environment is checked, and if it is set the value of that
	      variable is used as registry file name; otherwise the /etc/
	      directory is checked for the file named as above; if it is
	      found it is used as COM registry; and finally if all above
	      tests failed, the "csCOM.cfg" is used in current directory.
	      Also I've changed several lists in com.cpp to use csVector
	      objects - this simplified things a lot.
	    - Re-wrote the csregsvr program. Now it is much nicer :-)
	    - I rewrote the static COM functionality. Now the static
	      classes should also register (like the dynamically-loaded)
	      but they won't be stored into csCOM.cfg but directly in
	      memory (since registering happens automatically each time
	      during startup). This allowed to remove the kludge in
	      com/csCom.cpp that made it dependent of system files. Now
	      the "static registry" is a csVector derivate (just like for
	      dynamic-linked version) that is filled during startup.
	      ***NOTE FROM JORRIT!*** I had to change this system a
	      little because there is a problem with global constructors
	      that are not called for static objects defined in a library
	      (static or shared).  There is now a file 'com/static.cpp'
	      which takes care of calling the registry functions for
	      static linking. Every COM object should also have an include
	      file 'static.h'. Have a look at the current ones to see how
	      this works.
	    - I've also removed the kludgy Software_DllInitialize() and
	      Xlib_DllInitialize() calls from system.cpp. If you need
	      initialize something during startup just do it the usual
	      way (like above). But in the case of static libraries you
	      will need to add a line to com/static.cpp to make at least
	      one reference to a symbol from static COM library,
	      otherwise the library will be simply ignored (since there
	      won't be any reference to it).  This change require the
	      presense of -DDISP_XXX defines for all drivers included
	      in static executable. For example, if you will want to build
	      a executable that uses both Xlib and GLX drivers you will
	      have to pass to GCC on the command line at least -DDISP_X11
	      and -DDISP_GLX.
	    - The following rendering states work correctly now (previously
	      the corresponding commands didn't work):
		G3DRENDERSTATE_MMXENABLE		== "mmx"
		G3DRENDERSTATE_INTERLACINGENABLE	== "ilace"
		G3DRENDERSTATE_DEBUGENABLE		== "debug"
		G3DRENDERSTATE_LIGHTFRUSTRUMENABLE	== "frustrum"
		G3DRENDERSTATE_FILTERINGENABLE		== "texelflt"
		G3DRENDERSTATE_PERFECTMAPPINGENABLE	== "perfect"
		G3DRENDERSTATE_LIGHTINGENABLE		== "lighting"
	    - Removed the LFLAGS_CS makefile variable: use the EXTRA_LIBS
	      variable instead.
	    - Added makefile for Watcom C/C++ on OS/2. I wanted to see how
	      big the difference between WCC optimizer and GCC optimizer
	      is (I have been considered Watcom C optimizes much better
	      *FPU* code). I'm not so sure now.
		- Watcom: 15.03 secs to render 100 frames: 6.65 fps
		- Pentium GCC: 12.19 secs to render 100 frames: 8.2 fps
	      Watcom C for now does not use assembler (there are too many
	      warnings and syntax errors in assembler parts, so I disabled
	      them temporarily), so I still have to see how it will work
	      with it.
	    - Changed "dd" and "lastD" variables in scaline drawer to
	      "_dest" and "_destend" since Watcom C assembler interpretes
	      "dd" as a reserved word.
	    - Changed a lot in makefiles to make them compiler-independent.
	      For example, in linking phase GCC uses "-o $@" while for WCC
	      it should look like "NAME $@". During compiling phase it
	      should look like "-fo=$@". A mess, in other words :-( I also
	      had to make some perverted tricks to avoid the OS/2's shell
	      command line length limit of 1024 characters.  Phew, it was
	      a nightmare :-) GCC is still required for dependencies :-)
	      I'm planning to create a makefile for MSVC under Win32
	      (using GNU Make for building). I don't like to work under
	      their GUI - it sucks, besides their "projects" are a
	      unusable mess.
	    - Fixed a lot of bugs in com header files (for example,
	      IUnknown defined QueryInterface as a virtual function
	      while DECLARE_IUNKNOWN defined non-virtual functions).
	      Watcom C warns about this while GCC quietly ignored them.
	- *** Release of 0.11_047 ***
19-Jan-1999
	- Replaced signed CS types by adding the 'S' prefix
	  (Byte -> SByte, Short -> SShort, Long -> SLong, Int -> SInt).
15-Jan-1999
	- Again some fixes to makefiles.
	- Included update to Macintosh port from Rob Bate.
	- Again removed a few warnings.
	- Added patch to collision detection from Alex Pfaffe.
	  Read readmecd.txt for more information.
	- Patch from Nathaniel on Glide and Direct3D: colorkey and
	  alpha mapping are working. There are no separate files for
	  renderer configuration. Much better quality for Direct3DDX5
	  (with a small speed penalty). There is a bug with mipmapping
	  and D3D port so it is disabled now. There is a bug with glide2x
	  and 16-bit texture mapping in QuickDrawPolygon so 8 bit is
	  used for now. There is a bug with sky and D3D renderer.
	  Only Glide2 and Direct3D5 work for now.
14-Jan-1999
	- csregsvr is no longer included in 'make all' when static
	  linking is used.
13-Jan-1999
	- Received new networking files from Serguei Narojnyi (Snaar).
	  This is a fundamental change.
	- Added a few lines to configuration file for sound from Nathaniel.
	- Added new patches to Direct3D, OpenGL, and Glide renderers from
	  Nathaniel Saint Martin. Glide2 and direct3d5 work (not glide3 and
	  direct3d6 yet).
	- Nathaniel also moved the directory functions from win32.cpp to
	  dir.cpp.
	- Fixed makefiles so that all targets are correctly displayed with
	  'make help'.
	- *** Release of 0.11_046 ***
12-Jan-1999
	- Added cs_lib target to makefile. This creates a static library
	  called 'cslib.a' which you can link with to create your own
	  games. It contains everything except the 'WalkTest' stuff.
	- Added offset to Thing::merge (ThingTemplate*) so that you can
	  now shift a template before merging it.
8-Jan-1999
	- Fixed compilation on Linux. This included making new makefiles
	  for the networking code and fixing a problem with the sound code.
7-Jan-1999
	- Received new networking code from Serguei Narojnyi (Snaar).
	  It should now work on Linux/Unix as well as Windows.
	- Received new Linux sound-driver from Gert Steenssens. This
	  version should give a 'tata' sound at startup :-)
	- Renamed Collection to csCollection.
	- Received a full updated Macintosh port from Rob Bate
	  <rbate@ma.ultranet.com>. I could not integrate all his patches
	  due to conflicts with current patches but most of it should
	  be included. I'd like some feedback about this port.
	- *** Release of 0.11_045 ***
6-Jan-1999
	- Fix for TGA loading from Andrew Apted.
	- Patch from Andrew Zabolotny:
	    - Memory debugger works again (there were several small
	      changes that broke him). Added CHK()'s in many places,
	      particularily in places related to COM.
	    - Removed a lot of warnings, except for the sound/ directory.
	      The latter has SO MUCH warnings that I don't know, maybe
	      Nathaniel just waits for a more stable version to remove
	      them himself? :-)
	    - csSprite object and his components (csFrame, csAction) has
	      been modified to use csObjVector for keeping actions, frames
	      and delays. This removes several memory leaks (and even bugs
	      (?)) in csSprite.
	    - I've created a directory called "util/debug" and moved
	      memory.* into that directory. The file is include only if
	      MEM in makefile is not empty.
	    - Fixed memory leak: replaced IMPLEMENT_UNKNOWN_DELETE with
	      IMPLEMENT_UNKNOWN since first does not delete created object
	      at all! I don't see a need for IMPLEMENT_UNKNOWN_DELETE at
	      all! Every allocated object should be deleted.  This fix
	      possibly broke (slightly) other 3D renderers since their
	      destructors were NEVER called until now (so some bugs in
	      them can pop up - something can be deleted more than once
	      etc).
	    - Added Vector3::Area3 routine that calculates twice the
	      signed area of a triangle formed by three vectors.  I've
	      also changed Moment::compute to use this routine and I
	      believe collision detection bounding hierarchy should
	      compute a bit faster now.
	    - General header cleanup.  I've created a new file called
	      system/sysdef.h that should contain all system-dependent
	      #define's etc.  Depending on compiler/OS it includes a
	      system-dependent include file that makes ONLY the
	      definitions (i.e.	 sysdrv.h defines the system driver and
	      osdefs.h does only required definitions - i.e.
	      strcasecmp(), opendir() and so on).  There can be (there
	      WILL be :-) something broken because of this but please be
	      nice and try to fix it maximally accurately, i.e.	 avoid too
	      many extra includes, system-dependent stuff goes in
	      system-dependent header file if possible and so on.  Please
	      read the comment at the beginning of sysdefs.h for more
	      information.  This file (i.e.  "system/sysdefs.h") should be
	      #include'd at beginning of EACH source code file to give a
	      chance to port maintainers to override unsuitable
	      definitions, define prototypes etc.  For example, OS/2 does
	      not have strcasecmp(), it has stricmp() instead - so in
	      os2/osdefs.h I just #define strcasecmp stricmp and voila!
	      Before I had to include sysdrv.h which is way too big for
	      such a small final result.  This is the first preparation
	      step for further modifications of Crystal Space to make it a
	      library rather than just an executable.  The second step is
	      (I presume) to move all header files in a separate directory
	      (maybe keeping the hierarchy) so that the user that does not
	      need to make modifications to header files should just have
	      the ".a" file and the include directory.
	    - I've renamed system/def_sys into system/general. Also I've
	      added a directory system/unix for Unix-specific files (like
	      timing etc).
	- Patch from Nathaniel on Glide, Direct3D, and OpenGL. Not all problems
	  are fixed for the hardware renderers but work is progressing nicely.
	  Note that the new 'sky.zip' level will not work for the hardware
	  renderers because hardware can't handle textures larger than 256x256.
	  We need to find a solution for this (splitting the texture?).
	  Fog, halos and alpha-transparency are not supported yet.
	  Gouraud shading should work.
5-Jan-1999
	- Fixed cs.mak so that it takes the correct libraries with static
	  and dynamic linking. So you can do either 'make linux USE_DLL=no'
	  or 'make linux USE_DLL=yes' and it should work in both cases.
4-Jan-1999
	- Fixed Halo drawer so that it now works in both 555 and 565 16-bit
	  display modes. Also fixed it so that it does not do anything in
	  8-bit display mode.
	- Added cosinus_factor flag for every polygon. If given this flag
	  overrides the global PolyTexture::cfg_cosinus_factor field.
	  We need this flag to be able to disable the cosinus factor for
	  sky polygons. Sky polygons are to be considered infinitely far away
	  (although they really are not).
	- Because some things have changed regarding polygon drawing I will
	  give a summary of the current features. All Crystal Space polygon
	  drawing currently revolves around two main routines: DrawPolygon
	  and DrawPolygonQuick.
	    - DrawPolygon:
		- Is a general perspective correct polygon drawer intended
		  for arbitrary convex polygons.
		- Can draw unlighted (tiled) or lighted (using lightmaps and
		  the texture cache) polygons.
		- Texture mapping is specified using a transformation from
		  object space to texture space.
		- Supports Z-fill (only fill the Z buffer) and Z-use (fully
		  use the Z buffer) so it can be used by Sectors and Things.
		- Supports alpha transparancy so it can be overlayed on a
		  portal polygon.
		- Is used only for drawing Sector walls and Thing polygons.
	    - DrawPolygonQuick:
		- Is a perspective INCORRECT polygon drawer. The polygons it
		  can draw are convex clipped versions of a triangle. So
		  DrawPolygonQuick is in fact a triangle drawer which can
		  draw sub-parts of triangles.
		- Can draw unlighted or lighted (using gouraud shading)
		  polygons.
		- Texture mapping is specified by assigning texture
		  coordinates to vertices.
		- Supports Z-fill and Z-use so you can also use it for Sectors
		  and Things.
		- No alpha transparency yet.
		- Can be used for Sector walls and Thing polygons. In addition
		  is also used for sprites and curves.
	- Received new GGI port (COM-patible :-) from Andrew Apted.
	- *** Release of 0.11_044 ***
	- Added network code from Serguei Narojnyi (Snaar). His code is
	  mainly stub-code right now. He has based his networking code
	  on the same principles used by the 2D and 3D subsystems: using COM.
	  System dependent networking drivers can be created and added
	  dynamically to Crystal Space.
2-Jan-1999
	- Made gouraud shader more general: support for both 555 and 565
	  color formats and support for Z buffer in gouraud shader (so it can
	  also be used for Things).
	- Use csColor in Light class instead of separate red, green, and blue
	  fields. This is cleaner.
	- Implemented gouraud shading support for sprites. csSprite3D has a new
	  set_vertex_color function with which you can set the color of one
	  vertex. This is initial support, we still need some lighting system
	  so that we don't need to set the colors of every vertex ourselves.
	- The static lighting system also affects gouraud shaded triangles now
	  (but only on Things and Sectors, not on sprites or curves!). This is
	  preliminary support. We still need support for dynamic lights and
	  also the static lighting calculations are not remembered like the
	  lightmaps so you need to do '-recalc' every time to see the results.
1-Jan-1999
	- Added new csColor class which represents a color in RGB
	  space. This class should be used instead throughout CS
	  but this is not yet the case.
	- Implemented Gouraud shading with DrawPolygonQuick. The sprite system
	  does not support this yet (still need to perform quick lighting for
	  every vertex) but you can use this with the COLORS statement in
	  combination with UV or UVA (in POLYGON). Currently for the Zfill
	  version only (so not to be used in Things, only as walls of Sectors).
28-Dec-1998
	- Integrated heavily updated Direct3D, Glide, and OpenGL
	  ports for Windows from Nathaniel Saint Martin. I have no clear idea
	  what has changed really since I lost the mail he with his
	  descriptions.
	- Integrated Halo drawer from Dan Ogles. His code currently functions
	  only for 16-bit mode and with the software renderer. The effect
	  is really nice though!
	- Changed halo drawer a little so that it is a little more efficient.
	  No longer calls QueryInterface for every sector that is drawn every
	  frame. QueryInterface is only done once at initialization time
	  (in csWorld::initialize()).
	- New syntax for LIGHT.	 The old syntax is still supported (CS checks
	  if there is a colon in the statement and then reverts to the old
	  syntax).  With the new syntax you specify a light as follows:
	    LIGHT (CENTER (x,y,z) RADIUS (r) COLOR (r,g,b))
	  In addition you have the DYNAMIC() and HALO() statements.
	- Halo's are now disabled by default but you can enable them for
	  a specific light by using the HALO() keyword with the new LIGHT
	  syntax.
	- Added CONVEX() keyword to SIXFACE as well. Although SIXFACE's are
	  always convex in the technical sense it is not good to indicate
	  this by default because the current convex hull handling is not
	  perfect yet (it has problems with sorting because it uses Z sort
	  which is not always correct and it is not yet very efficient,
	  probably because of the call to 'qsort').
	- Fixed bug. When compiling with assembler disabled the sector drawer
	  no longer functioned.
	- Improved speed of CS considerably by removing lots of calls to
	  GetPixelAt in the polygon drawer. GetPixelAt is called via a COM
	  interface from Graphics3D to 2D. This is a lot of overhead. I
	  optimized this by maintaining a table of line pointers in
	  Graphics3D which is updated every frame (to support double
	  buffering for example).
25-Dec-1998
	- Added center point to convex Things. This center point is going
	  to be used for Z-sort. Foggy Things are automatically made
	  convex at loading time.
	- Things and curves in Things can now be drawn using Z fill instead
	  of Z buffer. This allows for support for drawing hulls.
	- Implemented full support for sorting Things with fog or portals.
	  Also implemented sorting hulls (convex things).  Here is how it
	  works now: All Things which are not merged with the static bsp need
	  to be drawn after the bsp tree is drawn.  If there is a static bsp
	  then we cannot do something special for convex things (hulls).  In
	  that case we first draw the non-merged things using normal Z-buffer
	  and only Z sort the foggy things and draw them back to front.	 If
	  there is no static bsp then we can also Z sort the hulls and draw
	  then back to front using Z-fill.  A consequence of this algorithm is
	  that if you use a static bsp then you can only use portals in Things
	  that do not move (i.e.  the Thing needs to be merged with the bsp).
	  But the Thing need not be convex in that case.  If you don't use a
	  static bsp then you can use portals in moving Things but the Things
	  containing portals need to be convex.	 a static bsp then you can
	  only use portals
24-Dec-1998
	- Created new SKYDOME command in SECTOR. This generates a half-
	  sphere that can be used for a sky. Syntax is:
	    SKYDOME 'mySky' (RADIUS (10000) VERTICES (0,1,2,3,4,5))
	  The created polygons all use the non-perspective correct
	  texture mapper using the current sector texture.
19-Dec-1998
	- Succeeded in making a texture mapped spherical sky.
18-Dec-1998
	- Changed DrawPolygonQuick so that is also listens to the
	  Z buffer mode set by SetZBufMode()!!! This is an important
	  warning for the hardware accelerated versions as well. If
	  z_buf_mode == ZBuf_Use then the Z buffer should be used. This
	  is the original behaviour. If z_buf_mode != ZBuf_Use then only
	  Z-fill is used. This is new behaviour.
	- Added array of uv coordinates to Polygon3D. If this array is
	  set then we are going to use the perspective incorrect texture
	  mapper instead (DrawPolygonQuick).
	- Generalized polygon drawing for Things and sectors and move the
	  code to draw an array of polygons to the common ancestor: PolygonSet.
	  This makes the code smaller and maintanance easier.
	- Implemented UV and UVA commands in polygon loader.  With these
	  commands you specify the texture coordinates to be used for the
	  first three vertices (only for triangles right now).	When you use
	  this command texture mapping of this polygon will happen differently
	  using DrawPolygonQuick (not perspective correct).
17-Dec-1998
	- Incorporated patch from Mattias Engdegard which enhances
	  the way the X11 port opens it's visual and window. Among
	  other things this means that CS will give a nice error message
	  when it can't find a visual with 8, 15, or 16-bit support.
	- Added new version of the 16-bit scanline drawers from Chris
	  Stokes. He continued the very good work of Olivier Langlois.
	- I had to disable the loading of WAVE files from the library
	  again. It doesn't work on Solaris (but it does work on Linux).
	  You can enable it again and try it on your system if you want
	  (the code is in general/loader/csloader.cpp at line 2732).
	  I suspect the bug has to do with a known but hard to find
	  and reproduce bug in the archive code.
	- *** Release of 0.11_043 ***
	- New CIRCLE command in world files. This command is actually
	  a macro for creating vertices in a circle. The syntax is:
	  CIRCLE (x,y,z:rx,ry,rz,num). With (x,y,z) the center of the
	  circle, rx,ry,rz the radius of each axis respectively. One of
	  these rx,ry,rz must be zero. That is then the plane of the
	  circle. num is the number of vertices to generate along the
	  circle. Normally the vertices are generated in clockwise
	  order. If num is negative the the vertices are generated
	  in anti-clockwise order. This macro can be intermingled with
	  other VERTEX commands and will generate the specified number
	  of vertices with the corresponding indices.
	- Discovered and fixed large memory leak in the sprite drawing
	  code.
16-Dec-1998
	- Added freebsd.mak from Andrew Kenneth Milton.
	- Received new 16-bit scanline drawer in from Olivier Langlois
	  in assembly. He reports that it should be about 200% faster!!!
	- Received new versions of math3d.cpp and math3d.h which contains
	  many VC++ assembler optimizations for many used mathematical
	  operations.
	- Received complete Linux/OpenGL port from Gary Haussmann. Note
	  that although all code is there I didn't manage to compile it
	  yet. Since I will not be here most of the time I suggest you
	  ask Gary Haussmann himself for help (he is on the list).
	- New patches to sound from Nathaniel Saint Martin. The missile
	  sound should work now (on Linux and Windows).
	  Also new Visual C++ project files.
15-Dec-1998
	- Added a few fixes from Nathaniel on the Direct3D port.
	- A few fixes to PrimEdit.
	- Received first part of the OpenGL port for Linux from Gary Haussmann
	  <haussman@cthulhu.engr.sgi.com>!
14-Dec-1998
	- New patch from Andrew Zabolotny. Again he changed the 'out'
	  directory structure to prevent limits in DOS. The DJGPP/DOS
	  port is 'almost' working now. Sometimes it runs, sometimes not.
	  The walktest executable runs almost all the time (at least debug
	  version) but I had some very strange problems with mazed; it
	  regularily crashes in Matrix3::getinverse function (even deeper:
	  in operator * (Matrix3,float)).  Under debugger it looks VERY
	  strange :-( Can't understand what happens.
	- Fixed bug in pseudo-dynamic lightmap creation. Strange that I
	  never encountered this bug before.
	- Added new patch from Ayal Pinkus to the curve code. Currently
	  it has no support for lighting yet but all other stuff works
	  very well. Note that there is a problem with collision detection
	  and curves. If you have curves in the level you need to turn
	  collision detection off by using the -nocolldet commandline option.
	- Added new version of math3d.h which makes almost all Vector3
	  functions inline. This should give a considerable speed increase in
	  almost all areas of Crystal Space (haven't tested it yet). Philipp
	  Spoth created this with the help of Olivier Langlois.
	- New patch to sound system from Nathaniel Saint Martin. He started
	  support for threads in the Windows version. There is still a problem
	  with the sound support in libraries. So I don't think you will
	  actually hear something when the missile explodes. However, you
	  can try the snd_play console command.
	- Also Nathaniel sent me an update to the Linux sound drivers from
	  Gert Steenssens. According to Nathaniel they should work now.
	- Small change suggested by Michael K.
	- New version of Mdl2Spr from Seth Galbraith. Skins are automatically
	  resized to powers of 2 (can be disabled with -r switch). Skin groups
	  are fully supported (animated skins in Quake).
	- *** Release of 0.11_042 ***
13-Dec-1998
	- Added CONVEX statement for THING with which you can indicate that
	  a Thing is convex. In that case the 3D Engine can do optimizations
	  on that Thing. SIXFACEs are always convex so the optimization is
	  enabled by default there.
	- Added FOG statement to SIXFACE and SIXFACE templates.
	- Implemented volumetric fog for Things. Still preliminary:
	    - Putting multiple fog volumes in one sector can give fogging
	      errors (when one is visible in front of the other).
	    - Putting a fog volume in a foggy sector will not work correctly.
	    - The routine that handles fog could be written better.
	    - Foggy objects may not be included in lighting routines.
	  However, the effect is nice and I think it will also be very
	  nice for simulating light which hits particles.
12-Dec-1998
	- Changed the naming of lightmap entries in the cache on disk.
	  The previous naming scheme depended on the names of Sectors,
	  Things and polygons but those are not guaranteed to be unique.
	  The new scheme uses the unique identifier. The disadvantage
	  of this method is that adding a single polygon to the level
	  will probably invalidate almost ALL cache entries.
	- If the '-recalc' option is not given then lightmaps will NEVER
	  be calculated even if they are not in the cache. In that case
	  the lightmaps will just be made black. To recalculate, you must
	  give the -recalc option.
	- Changed default light level from 40 to 20. This means that
	  polygons on which no light falls will be lighted to level 20
	  instead of 40. This looks much nicer.
	- Fixed bug in infinite maze generator which was caused by the
	  introduction of fog.
	- Added s_fog command with which you can set or view the amount of
	  fog in the current sector (the sector where the camera is).
	  Syntax is 's_fog r,g,b,density'.
11-Dec-1998
	- Fixed bug in collision detection code which caused crash when
	  quitting.
	- Changed BSP routines so that the original polygon is kept (but
	  marked as not needing to be drawn). The lighted texture and
	  lightmaps are shared in the original polygon for all other
	  polygons that have been split from that one.
	- Added MOVEABLE keyword to THING and SIXFACE which indicates if a
	  Thing will be able to move.  This option defaults to 'false'.	 If
	  'false' the 3D Engine will be able to do special optimizations on
	  that Thing (see the STATBSP option).
	- Added STATBSP command to ROOM and SECTOR. This command is
	  mutually exclusive with BSP. If you use it all unmoveable Things in
	  this sector will be put in a BSP tree for that sector. Those Things
	  can then be drawn using Z fill instead of the Z buffer which is
	  of course considerably more optimal. With the MOVEABLE keyword
	  you can control if a Thing should be included in this BSP tree.
	  Be careful with this. If the BSP tree causes too many polygon
	  splits and the Things are too small then you will actually get a
	  performance loss with this. This feature is much better when used
	  on large Things which are not complex.
	- Added DO_MMX statement in user.mak. So support for MMX compiled in
	  in CS can now be controlled from within the makefiles. As a
	  consequence the MMX support will now work again (it didn't work
	  because the right include files which defined DO_MMX where not
	  included by the right source files).
	- Modified the BSP builder so that it can also optimize based on the
	  minimal amount of splits instead of choosing a polygon which has
	  the most other polygons on the same plane. This generates better
	  BSP trees for the new STATBSP option.
10-Dec-1998
	- Nathaniel Saint Martin added two commands 'snd_volume' and 'snd_play'
	  to experiment with the sound system. 'snd_play' expects the name of
	  a Wav file and 'snd_volume' expects a value between 0 and 1.
	  Note that sound supports only works on Windows right now.
	- Received new version of mdl2spr from Seth Galbraith. It fixes the
	  bugs with the skin vertices. There are still two known problems:
	  1. doesn't export skins to an image format Crystal Space knows.
	  2. doesn't resize skins to a power of two automatically.
	- New Visual C++ project files from Nathaniel.	Nathaniel also
	  separated the project files from the source files which I think is a
	  very good idea.  All Visual C++ project files can now be found in
	  cryst/src/visualc.
	- New sound system from Nathaniel Saint Martin.	 Wave files can be
	  loaded from zip archive (world and library).	standard.zip has been
	  updated with three wav files (for missile sounds).  If the sound
	  system works ok the missile should make some sounds (a 'woosh' sound
	  when fired and a 'boom' sound when exploding :-)
	- Faster version of Polygon3D::clip_poly from Olivier Langlois.
9-Dec-1998
	- Ayal Pinkus added initial support for curved surfaces with my help.
	  I added the framework which will eventually allow any type of
	  curve to be added. Ayal added a Bezier curve with 3x3 control points.
	  There is still nothing to see yet except for a wireframe.
	  We need some more work for that.
7-Dec-1998
	- Received and integrated working Windows port from Dan Ogles. The
	  Direct3D port also works but lightmaps are disabled. There is a
	  bug with lightmaps and Dan would like people to have a look at
	  this bug. He has trouble finding it.
	- Received and integrated patch from Andrew Zabolotny. He improved
	  COM static linking. He also changed the makefiles so that it is
	  easier to compiler for static linking. Use the modifier USE_DLL=no
	  if you want static COM linking (example 'make linux USE_DLL=no').
	- Received and integrated yet another patch from Andrew Zabolotny.
	  This patch contains an almost functional DOS/DJGPP port. It
	  compiles but crashes at startup. So he still has to do some
	  debugging. Also some other changes.
	- Received and integarted patch from Alex Pfaffe with a new version
	  of his collision detection system. See README_CD for all changes.
	  Here is a summary: No longer depends on RAPID (license free!).
	  Some performance enhancements.
	- I removed the DO_CD compilation flag. Collision detection is now
	  always compiled in CS. You can still disabled it using the
	  'colldet' console command however.
	- Changed Polygon3D::clip_poly_plane() again with a new version I
	  received from Philipp Spoth. This version is faster so this should
	  improve overall performance a bit.
	- Implemented suggestion from Jesko Schwarzer <jesko@bigfoot.de>
	  which improved speed of the fog drawers a little.
	- New indent.pro from Andrew Zabolotny which works for indent 1.8.
	- *** Release of 0.11_041 ***
	- Fixed softrndr.cpp for dynamic linking.
	- Fixed linux makefiles for dynamic linking.
	  I had broken the makefile system somewhat. Now it should work better.
4-Dec-1998
	- Improved palette calculation when simulating 16-bit display mode
	  on an 8-bit display (X11 version only).
3-Dec-1998
	- Fixed Scan16::draw_scanline_fog_view_565.
2-Dec-1998
	- Received new sound system from Nathaniel Saint Martin. Also have
	  a look at this documentation: sound.html.
	- Some changes to the BeOS port from Xavier Pianet.
	- Xavier Pianet patches csregsvr so that it accepts multiple
	  libraries on the commandline.
	- *** Release of 0.11_040 ***
1-Dec-1998
	- Added p_alpha command to change the alpha transparency value of a
	  portal.
	- Added general draw_scanline_alpha drawer which can draw any alpha
	  transparent value but is of course slower. It works only in 16-bit
	  mode. In 8-bit mode however we are a bit more clever about selecting
	  the right 25%, 50% or 75% alpha transparency mapper depending on the
	  which alpha value is closest.
	- Added 'extension' command to access the system dependent extensions
	  (like sim_pal, sim_grey, and sim_332) from the console.
	- New 'bind' command to bind a key to a command.  Except for the arrow
	  keys for movement and the tab key there are no default key
	  assignments left.
	- Crystal Space reads 'autoexec.cfg' at startup. This file can then
	  contain bind or other commands.
	- Fixed elapsed time in NextFrame. It was always 0.
	- Added experimental bot which will eventually roam the Crystal Space
	  dungeons. Currently it does not do much except collide agains the
	  nearest wall and often get stuck there. Use the 'addbot' command to
	  add a bot.
30-Nov-1998
	- Moved fog fields from thing.h to polyset.h because I also plan
	  to add volumetric fog to sectors.
	- Added PerformExtension() support back to csGraphics2D. This was
	  removed by the COM port but I need it.
	- This means that the f1, f2, and f3 keys function again when you
	  are in simulated 15/16-bit mode (for the X11 port only). Note that
	  simulate 15/16-bit mode can currently only be selected by
	  recompiling. The -sdepth commandline option is broken.
	- Added volumetric fog support for sectors. It works very well but
	  is still slow. I also added the needed support for volumetric
	  fog volumes in csGraphics3D.
	- IMPORTANT WARNING! Constructors for object declared globally
	  are NOT called automatically if in a DLL.
	  Therefore the creation of the mathematical tables is now
	  put back in initialize instead of the constructor.
	- Considerably improved performance of the fog routines by using
	  fixed point and a lookup table for the 'exp' function. It is still
	  not ideal because there are two divides every pixel.
27-Nov-1998
	- New patch from Andrew Zabolotny:
	    - OS/2 port is now functional but with a few problems.
	    - MazeD is up again.
	    - I've fixed the font IDs - they were completely messed up,
	      for example csFontCourier resulting in displaying Police
	      font, csFontTiny corresponding to Courier and so on. Each
	      font has now a "fixed-width" variant, i.e: csFontCourier
	      and csFontCourierFixed.
	    - Fixed up some warnings in source code.
	- Update on the BeOS port from Xavier Pianet.
	- Added some functions to the ITextureContainer COM interface to
	  help the separation of the software texture cache from the 3D
	  Engine.
	- Did more work on the separation of the software texture cache
	  from the 3D Engine. For example, I moved the subtex_size
	  and subtex_dynlight static configuration values from the
	  TextureCache to PolyTexture.
	- Successfully separated the software cache from the 3D Engine.
	  Now the render directory is completely unused by the 3D Engine
	  except for the COM interface include files.
	  I also removed the COM interfaces for the texture cache as this
	  is now a private structure of the software renderer and the
	  outside world should now as little as possible about this.
	- Renamed SoftwareRenderer.cpp to softrndr.cpp to make life somewhat
	  easier for DOS systems.
	- *** Release of 0.11_039 ***
	- Fixed compilation bug which prevented proper compiling of version
	  0.11r039.
	- Added util/memheap.cpp to the sources of softrndr.so.
	- Fixed makefile for xlib2d.so target. The -lgcc commandline option
	  to the linker HAS to go after all other object files.
	- Implemented first depth-based fog which will be the basis for
	  the volumetric fog implementation. It works very nicely but it is
	  still slow (unoptimized).
26-Nov-1998
	- As part of the ongoing API cleanup I renamed Sector to csSector,
	  World to csWorld and Camera to csCamera. More will follow soon.
	- Made 'mirror' and 'sector' in csCamera private and provided
	  inline accessory functions.
	- New patch from Andrew Zabolotny with changes to the OS/2 port
	  and also some further changes to the makefile system.
	  There is a chance that the OS/2 port works (it compiles). Andrew
	  wasn't able to test it though.
	- Moved csrect.* from src/engine/basic to src/geometry.
	  Moved csvector.* and csstrvec.* from src/engine/basic to src/util.
	  Moved csbase.h from src/engine/basic to src/util.
	  NOTE! Make sure to update all needed project files and make sure
	  to remove old versions!
	- Renamed Clipper to csClipper, BoxClipper to csBoxClipper and
	  PolygonClipper to csPolygonClipper.
	- List of lights in sector is now a csObjVector. As a consequence
	  the fixed limit of 32 static lights in every sector is now removed!
	- Renamed Sector::[gs]et_level_... to Sector::get_ambient_color
	  and Sector::set_ambient_color.
	- Renamed Light, StatLight, and DynLight to csLight, csStatLight,
	  and csDynLight.
25-Nov-1998
	- Based on a suggestion from Andrew Zabolotny I changed the -O3 in
	  the linux makefile to -O6. According to him the pentium
	  optimizations with pgcc are only enabled with -O4 or higher.
	  I'm curious to see what difference this makes.
	- Received some patches from Andrew Zabolotny:
	    - He again considerably changed (improved) the makefile
	      system. Now there is a mk/system directory (the old mk/tmpl
	      directory is obsolete) which contains system targets. For
	      example there is a linux.mak there but also an xlib2d.mak
	      for the X11 2D driver. Type 'make' to see the possible
	      options for your system.
	      He also modified the directory structure in 'out'.
	      system.mak is gone.
	    - Added LGPL copyrights to COM stuff.
	    - Removed DllMain from drivers because it is Windows specific.
	      Instead created general DllInitialize. Windows DllMain
	      can call this one and other OS´es will call it from
	      csLoadLibrary().
	    - Made a start at porting OS/2 to COM. It is not ready yet.
	- Fixed bug in lightmap generator with textures that were oriented
	  differently.
	- *** Release of 0.11_038 ***
24-Nov-1998
	- I managed to get the static COM emulation working. This can open the
	  way to the DOS port. The XLib port can now be compiled both as a
	  static COM system or as the usual dynamic COM system (prefered).
	- Based on code from Olivier Langlois I converted the static and
	  dynamic lightmap generators on a scanline drawer.  Not only is this
	  more optimal but this also generates MUCH nicer lightmaps because
	  the border cases are not missed anymore.  Another consequence of
	  this is that it is no longer needed to scale the light-patch before
	  applying it (the scale of the view frustum when entering a portal
	  is still there.  That's another problem).
	- I fixed the software renderer so that it supports arbitrary mipmaps.
	  The 'verynice' option works again.
	- Changed World::start_sector so that it is NULL when not given.
	- Added elapsed_time and current_time to NextFrame so that these
	  parameters can be used for correct timing. Also added this parameter
	  to the sprite stuff. The sprite stuff already had correct timing but
	  now this happens through this parameter instead of letting it call
	  SystemGetTime() directly.
	- Because this makes the API considerably cleaner I started using
	  csObjVector in World instead of the linked lists that are used now.
	  At least, I'm going to use csObjVector for more static objects.
	  The list of sectors is already converted.
	- Converted list of libraries, PolyPlanes, collections, sprite
	  templates, thing templates, and scripts to csObjVector.
	- Also converted list of thing and sprite templates in library object.
23-Nov-1998
	- Fixed bug with checking of dirty sub-textures which could cause
	  crashes (triggered easily in some cases with a dynamic light).
	- Added modified version of Polygon3D::clip_poly_plane() from Philipp
	  Spoth.  This version avoids the hardcoded limit and should also be a
	  little faster (not really measurable though).
	- Clipper in csView is now only constructed once.
20-Nov-1998
	- Added suggestion from Seth Galbraith to use the cosinus in the
	  lighting routines (so light diminishes depending on the angle from
	  the source of the light with the destination polygon).  This gives a
	  much better effect and I wonder why nobody told me this before :-)
	- Added -cosfact commandline option, COSINUS_FACTOR configuration file
	  option and 'cosfact' console command to control the above option
	  (values between -1 and 1).
	- Changed notation in console (and thus for binding keys) to
	  increment/ decrement a value.	 It used to be 'command +x' or
	  'command -x'.	 Now it is 'command ++x' or 'command --x'.
18-Nov-1998
	- Optimizations from Olivier Langlois in Matrix3::getinverse () and
	  Vector2::which_side_2d.
	- *** Release of 0.11_037 ***
16-Nov-1998
	- Added 'UV_SHIFT(du,dv)' option in TEXTURE statement of polygons with
	  which you can shift the u,v as given by the other texture statements.
15-Nov-1998
	- Fixed bug in static and dynamic lighting code which could cause
	  dark borders for lightmaps. Lighting is now considerably nicer
	  especially for smaller polygons.
	- Added 'START' command in world file which with you can set the
	  starting location of the camera. Use as follows in a WORLD ()
	  statement: START (sector,x,y,z).
	- Added ACCURATE_THINGS configuration value (and -accthg commandline
	  option) to control a more accurate form of precalculated lighting.
	  In this mode when Things are checked for shadows the surrounding
	  points are also checked.  This results in more accurate lightmaps
	  (more visually pleasing at least) but is a LOT slower (only when
	  actually recalculating the lightmaps).  I still need a better
	  algorithm to handle shadows of Things.  This option is on by
	  default!
14-Nov-1998
	- Fixed bug in texture cache (introduced in 0.11r036) which would
	  cause incorrectly rendered/lighted sub-textures.
	- Really fixed bug with rendering of unlighted textures with COM port.
	  However, there still seems to be a rendering bug with very large
	  unlighted textures which was not present in the past.
	- Changed missile code so that it now stops a little sooner when
	  detecting a collision. Before this patch the missile often exploded
	  just behind the polygon that was hit, giving strange and ugly
	  results.
13-Nov-1998
	- Ryan J. Evans found a bug in operator< for the Box class.
	- Added port to BeOS from Xavier Pianet <xavier@planet.dk>! His
	  port is already COM compliant :-)
	  You can compile his port using the standard makefile (first copy
	  mk/tmpl/beos.mak to mk/system.mak) or else with the included
	  project files. Note that you need to disable optimization and
	  assembler in mk/user.mak. The BeOS port does not run correctly
	  with optimization on currently.
	- 'xlib2d.so' has been renamed to 'lib2d.so'.
	- There are now targets in the makefile to quickly setup the right
	  system ('make linux', 'make solaris', 'make beos').
	- *** Release of 0.11_036 ***
12-Nov-1998
	- Made the next step towards separation of the software texture cache:
	  the texture cache now uses IPolygonTexture instead of IPolyTexture
	  directly.
10-Nov-1998
	- Fixed bug in drawing of unlighted textures introduced with the
	  COM port. It would simply crash.
	- Included patch from Olivier Langlois which greatly speeds up the
	  calculation of the static lighting when many things are present.
9-Nov-1998
	- Removed a lot of includes from other include files. Sometimes I
	  split include files in order to get a finer granularity and also
	  decrease the number of dependencies.
	- A few type errors fixed with COM functions (Long confused with
	  ULong).
	- *** Release of 0.11_035 ***
8-Nov-1998
	- PolyTexture is no longer part of the texture cache.  PolyTexture is
	  ment to describe how the lighted texture is mapped onto the polygon.
	  The fact that it is or isn't used in a texture cache depends on the
	  3D driver used and should not be part of PolyTexture.	 However for
	  optimization reasons we opted to have a void* which is private
	  texture cache data.  This private data points to a structure which
	  is really part of the texture cache.	This change will help move the
	  software texture cache to the software renderer where it belongs.
	- I discovered that my dependency generator is still not perfect. I'd
	  like to use $(OUT) instead of the spellt-out name inside the depency
	  file but I can't get SED to do this for me.
	- Wrote class Dumper which contains all dump functions. This way the
	  real classes don't have to worry about this anymore and this also
	  removes the dependency on system/system.h.
	- Moved the loading of the system dependent Sys... driver classes from
	  system/system.h to system/sysdriv.h and only include sysdriv.h when
	  really needed. This reduces the number of dependencies considerably.
6-Nov-1998
	- Fixed the makefile system a bit.
	- Added BMP loading support for texture from Olivier Langlois.
	  I change the makefile system to support this.
	- Removed the USE_PRIVATE_POOL define and made this code the
	  current code (old code is removed).
	- Removed the USE_NEW_HEAP define and made this code the current
	  code (the code using memheap is kept, the old code is removed).
	- Removed dependency of csobject.h to trigger.h. This dependency
	  caused troubles for make the software renderer library.
	- Started work which will help in the separation of the software
	  texture cache renderer from Crystal Space.
5-Nov-1998
	- Few fixes from Olivier Langlois (infinite maze).
4-Nov-1998
	- Added patch from Alex Pfaffe which fixes his collision detection
	  code so that the 'c' command works again.
	- Added patches from Andrew Zabolotny regarding MazeD. Note that
	  MazeD doesn't compile anymore because of the COM changes. Andrew
	  will have to fix it first. Anyway, here is what Andrew patches:
	    - MAX_TEXTURES keyword is now obsolete (ignored for backward
	      compatibility).
	    - Added loading of rooms.
	    - Added 'draft view setup' dialog (press Ctrl+D).
	    - Removed the "modification axis setup" button. Now axis setup
	      dialog can be called by clicking right mouse button on
	      Rotate, Scale2D and scale3D buttons. I.e. the interface is
	      more consistent now - to setup a specific tool click RMB on
	      its icon, and if it can be set up, a dialog will appear.
	- Added sound.txt to docs directory which explains how the sound
	  system works (From Nathaniel Saint Martin).
	- Added sound patch from Nathaniel. Here are the main changes:
	    - Better au file support (with u-Law).
	    - Added iff/8svx amiga file support.
	    - Added aiff mac file support (warning, get format from hex
	      editor).
	    - Some patches and module player is broken (need for redesign).
	- Fixed rand1 and rand2 as directed by Olivier Langlois.
	- Added #define cpuid line to mmx.h but in comments because I don't
	  know how it will affect compilers which DO support cpuid.  Comments
	  please? The cpuid define is from Olivier Langlois.
	- Olivier Langlois partially found the bug which caused the infinite
	  maze not to show correct lighting on some systems. The bug is still
	  only partially solved however.
	- *** Release of 0.11_034 ***
3-Nov-1998
	- Fixed several bugs related to commands. Not all console commands
	  are functional yet but 'mipmap' and 'edges' work again.
	- Added CacheRectTexture which eliminates a little of the overhead
	  of calling COM functions.
	- Change makefiles so that dependency files are now put in 'out'.
	  This means you only have to do 'make depend' once.
	- Started work on trying to move the texture cache to the 3D module.
2-Nov-1998
	- Transparency works again.
	- Call for alpha_mask in scanline drawer moved outside scanline
	  routine and CERTAINLY NOT after the 1/z.  This improves performance
	  considerably for the 16-bit renderer.
1-Nov-1998
	- After some debugging I finally got the Linux/X11 port to work WITH
	  the new COM and shared library stuff! This is a great step forward!
	- Since the assembler is now put in a shared libary there were some
	  problems.  Apparently the current assembler code is not compatible
	  with the -fPIC option.  As I don't know how to fix the assembler I
	  just removed the -fPIC option :-) This doesn't seem to give any
	  problems.
30-Oct-1998
	- The Linux port is still not working but I managed to compile all
	  needed stuff. I still have to debug further to see what is going
	  on. The windows port should work although you'll have to change
	  the project files probably because I renamed a few files from
	  *.cxx to *.cpp.
	- *** Release of 0.11_033 ***
28-Oct-1998
	- Yesterday I received the long-awaited COM patch from Dan Ogles.
	  This patch allows separation of the 3D and 2D graphics classes
	  from Crystal Space. The final goal of this is to allow
	  plug-and-play with a similar phylosophy to what LibGGI can do.
	- Today I started integrating this part in the Linux port and also
	  tried to port Linux/X11 with the new COM system. This is not
	  easy so I only managed to get to a stage of succesful compilation
	  but not any further.
	- In order to help this process I drastically changed the makefile
	  system. There is now a single makefile called 'makefile' which
	  controls everything. It uses auxiliary makefiles which are all
	  located in the 'mk' directory. 'mk/system.mak' and 'mk/user.mak'
	  are important and should be edited by the user before compiling.
23-Oct-1998
	- Added tcache.txt document which explains the texture cache
	  and how the lookup tables are used inside the texture cache.
22-Oct-1998
	- Received assembly DrawLine routine from Olivier Langlois (for
	  Visual C++ only). His routine is almost six times faster. DrawLine
	  is currently used in the wireframe object (could be important for
	  maps later) and while debugging.
	- Received assembly scanline drawers from Olivier Langlois for
	  Visual C++. Finally Visual C++ users can benefit from the same
	  speed enhancement that was already present for GCC users.
	  MMX detecting code has also been ported to Visual C++.
	  He got about 10% speed improvement that way which is also
	  what I observed with the GCC assembly optimizations.
	- Little changes on WireFrame object from Olivier Langlois (Olivier
	  is a big fan of my WireFrame class, I doubt that many other people
	  know that it is even in Crystal Space :-)
	  New function 'apply' that applies a function to all objects in the
	  wireframe. A counter in the WireFrame class that is incremented
	  each time the add_* () methods are called.
	- New patch to sound system from Nathaniel Saint Martin. Changes are:
	    - Add primitive .au file support.
	    - Add volume control for audio device.
	    - Sound driver can be disabled.
	    - Some patches...
	- Received new collision detection patch from Alex Pfaffe. Changes are:
	    - Collision detection is now on by default if compiled into the
	      system. Use -nocolldet to turn it off. To temporarily disable
	      collision detection while the program runs you can still use
	      '*'.
	    - Added CD for MultiSectorObject. Sydney gets some respect and
	      you cannot walk through her anymore :-)
	    - Implemented link to collision system via ColliderP class.
	      CD is now almost completely independent from the rest of
	      CS classes.
	    - Rewritten version of RAPID now compiles and links. It has all
	      matrix and vector logic replaced with native CS code.
	    - Move VTYPE to header file.
	- Fixed small bug in texture.cpp. Thanks to <wormzstudios@iname.com>
	  for spotting this.
	- Unlighted textures (like the sky) and 3D sprites did not work
	  correctly in the latest beta when using 16-bit rendering.  I fixed
	  this.
	- Rodolphe Ortalo <ortalo@laas.fr> sent me an additional purify run
	  for beta 0.11r031. I fixed one bug in event handling related to this.
	  There are still other bugs remaining but I have too little time
	  currently to pursue them further. I've included his purify log so
	  that maybe other people can have a look as well (see purify.log).
	  Note that it is for version 0.11r031 so line numbers may differ
	  slightly with version 0.11r032 or later.
	- *** Release of 0.11_032 ***
21-Oct-1998
	- Removed call to strdup because it is not compatible with
	  the 'delete []' operator.
	- Added -DDISP_... to all makefiles. This is used by cs.mak to
	  put a more specific directory inside 'out'. For example, the linux
	  version will now compile to either: LINUX_X11, LINUX_SVGA, or
	  LINUX_GGI.
	  DO_X11, DO_SVGALIB, and DO_GGI have been replaced throughout all
	  code by DISP_X11, DISP_SVGA, and DISP_GGI.
	- Renamed glide files to shorter filenames so that they will give no
	  problems anymore on DOS compilers.
20-Oct-1998
	- Thanks to Dmitry Derevyanko <dmitryd@robotics.eecs.Berkeley.edu>
	  and his debug run of Purify I managed to fix some bugs. Also thanks
	  for Rodolphe Ortalo <ortalo@laas.fr> for also doing a purify run.
	  Fixes so far:
	    - In engine/objects/cssprite.cpp: 'delete []' instead of
	      'delete'.
	    - evqHead and evqTail were not initialized. I initialized them
	      to 0.
	    - Initialized initial palette table to all zero's.
	    - Overflow in texture cache fixed.	The texture cache was
	      reading out of the lightmap bounds.  As a consequence the
	      texture cache should also be a LITTLE faster :-)
	    - Uninitialized 'Color::len' in loading of ROOM statement.
	    - Uninitialized lightmap_up_to_date in Polygon3D.
	- Type VTYPE has been made 'float' by default.
	- Added missing sound patches to system/system.h and system/system.cpp
	  (Dan, they are really small patches.	I hope you don't mind? :-)
	  from Nathaniel Saint Martin.
	- Received update on sound system from Nathaniel. On Windows CS will
	  actually play a sound when started provided it can find tada.wav
	  and/or blues.mod in the current directory.
	- New patch from Andrew Zabolotny:
	    - Removed a lot of warnings emitted by gcc -Wall.
	    - Fixed new code from Greg Ewing which broke color table
	      lookup for transparent textures. Number 0 is reserved and
	      should always map to 0.
	    - MazeD file requester works better now (it will recognize
	      directories properly).
	    - 2D scaling and rotation in MazeD works.
	    - Ctrl and Alt keys now locks horizontally/vertically during
	      move and scale operations.
	    - Implemented "Create 2D figure" functions (triangle, square,
	      ..., N-gon). To setup number of sides for N-gon, right-click
	      on N-gon icon.
	    - Added spinbox control (see N-gon setup dialog). As a result,
	      MazeD.zip has changed again.
	- Added d3dcache.cpp from Nathaniel so that the Direct3D port works
	  again but with a bug in the lightmaps and a crash at exit. This is
	  just to have something before Dan Ogles finishes his work.
	- *** Release of 0.11_031 ***
19-Oct-1998
	- Renamed 'collision' directory to 'colldet' to have better
	  support on DOS.
	- Fixed a few bugs regarding the LightView classes. It is
	  possible that these bugs caused a lot of crashes on some
	  systems.
	- Fixed serious bug in various parts of the code related to the
	  use of CHK where CHKB should be used. These bugs could (and
	  would) severly overwrite memory if the memory debugger was enabled.
	  Not a good thing bug few people should worry about this since
	  the memory debugger is not enabled by default!
	- Fixed serious bug in the handling of lightmaps. Thanks to Andrew
	  Zabolotny for spotting this. His fix was (almost) perfect :-)
	  This bug could certainly give problems as memory was freed twice.
16-Oct-1998
	- Added 'lm_grid' debug command which shows an overlayed grid on
	  all lighted textures so that you can see where the lightmap
	  points are and their color. Clear the texture cache after using
	  this command to see the result.
	- Added 'lm_only' debug command which will disable texture rendering
	  and only render the lightmaps. Clear the texture cache after using
	  this command to see the result.
	- Andrew Zabolotny is back! Received a new patch from him with the
	  following changes:
	    - Fixed police.fnt. The upper half of the 256-char table was
	      garbage. Now pseudo-graphics is useable.
	    - Added new italic font. This is a fixed-width oblique font.
	    - For MazeD:
		- Added checkboxes and radio button controls to CSWS.
		- Added the "clear model" dialog (Model->Clear).
		- I've placed move/rotate/scale under a single
		  toolbar submenu. Scaling is now available in two
		  modifications: 2D and 3D
		- Added the "rotation/scaling center" dialog (last
		  entry under "Modify" button on toolbox).
	- Changed makefile.djg so that it will do mkdir with backward slashes.
	- *** Release of 0.11_030 ***
15-Oct-1998
	- Received sound code from Nathaniel Saint Martin. His code is nicely
	  integrated with CS and I think this is an important first step
	  towards useable sound in CS. Note that there is currently only
	  a sound driver for Windows and also note that there are actually
	  no sounds yet in Crystal Space :-)
	- Vyacheslav L. Chupyatov <sla@istu.udm.ru> suggested some fixes
	  so that CS can be compiled with Watcom C++ v11.
14-Oct-1998
	- Received and integrated MemoryHeap class for the texture cache from
	  Olivier Langlois. I have not tested the performance differences yet
	  but if his code is faster I'm going to remove the old stuff.
	- Received patch from Rodolphe Ortalo <ortalo@laas.fr> which allows
	  the new Glide port to work on Linux. I have not really integrated
	  this patch with CS because it touches system dependent stuff and
	  I don't want to make life more difficult for Dan Ogles :-)
	  So just extract the 'linglide.tgz' archive and put the source
	  files in render/glide.
	- Received a patch from Alex Pfaffe on his collision detection
	  code. Here is a summary of his changes (see README_CD for more
	  details):
	    - Converted RAPID from double to float and also converted it
	      to use Vector3 and Matrix3.
	      Also eliminated unneeded functionality from RAPID.
	    - Adding support for Sphere, Segment, Axis Aligned and
	      coarser Oriented Bounding Box collision testing.
	    - Created collision subdir. Moved RAPID code there. So RAPID
	      code can be compiled with standard makefiles.
	      Removed and renamed a few files.
	    - Created Collider class. CD code from all over the engine is
	      moved to that class. PS and 3DSprite have a Collider member.
	    - Remove CD info from Camera.
	    - Remove CD info from World.
	    - Remove CD info from Sector.
	    - Added support for csSprite3D.
	    - Implement collision reaction in walktest.
		- Camera can not walk through walls.
		- Will fall if not on floor.
		- Will climb inclines.
		- There are situations where you can get stuck, or
		  fall out of the level.
	      NOTE FROM JORRIT! This only works if collision detection is
	      enabled from the commandline (-colldet)! Enabling it later
	      using the 'colldet' console command or the '*' key does not
	      seem to work.
	    - Performance doesn't show any degradation if collision detection
	      is on or off.
	    - Enhanced console display.
	  I must say that this seems to work REALLY well (ignoring a few bugs
	  here and there).  Alex promised me that he is working on a
	  license-free version.	 So this seems like the way to go!
	- Received patch from Greg Ewing <greg@cosc.canterbury.ac.nz> which
	  greatly speeds up the computing of the initial palette table.
	- Received new Gnu-Win32 makefiles from Paul Garceau.
	- Cleaned up the infinite maze code.  Made a separate class
	  InfiniteMaze.	 Note that the first part of the maze is not random.
	  Go to the end of the corridor and turn left to start generating in
	  the random maze.  Also note that it may all be black for you.	 I'm
	  still looking for this bug.  On some systems it (sometimes) happens
	  that all lightmaps are black.	 On my linux system it works however.
	- *** Release of 0.11_029 ***
	- Received profiling results for Glide accelerated version from
	  Rodolphe Ortalo. See gprof.out.large and gprof.out.large.dyn.
13-Oct-1998
	- Fixed a bug in 16-bit texture cache.	As an optimization white light
	  is handled slightly differently than colored light.  However this
	  seems to give ugly visual results.  I fixed this but I'm still not
	  sure why the original routine didn't work correctly.
	- Fixed a bug in the generation of the infinite maze which could cause
	  overlapping sectors.
11-Oct-1998
	- Cleaned up several classes a bit as a result of the new infinite
	  maze.	 Creating the infinite maze showed some deficiencies in the
	  current API.
	- Enhanced cs.mak so that is now also generates a separate directory
	  tree for the profiled version (<SYSTEM>_p) and automatically
	  disables assembler as well.
10-Oct-1998
	- Infinite maze generator works more or less.  Use -infinite on the
	  commandline (no data file required) and you will get an infinite
	  level.  Sectors are created as you go and static lighting is also
	  calculated at run-time.  As you will notice this is not (yet) very
	  efficient.
	  I think there is room for optimization however.
	  Also note that this is a QUICK and DIRTY hack.
	  The one nice thing is the subclass of PortalCS that I use.
	  Polymorphism is nice :-)
	  Note that there is still a bug somewhere which I can't seem to find.
	  On Linux the infinite maze generator works but on Solaris the static
	  lighting seems not calculated correctly.  I don't know how it will
	  behave on other systems.
9-Oct-1998
	- Added sparse 3D matrix. I'm going to use this for an infinite maze
	  generator. This sparse matrix may be useful for other things as well.
7-Oct-1998
	- Added first support for volumetric fog. This will be implemented
	  by using convex Things which are flagged as being a fog volume.
	  The reason that I use a Thing directly and not a sub-class of
	  Thing or PolygonSet is that I'd like to be able to transform a
	  convex Thing to a fog-volume and vice versa.
	  NOTE! There is NO fog yet.
6-Oct-1998
	- Received new collision detection code from Alex Pfaffe. He has
	  switched from using the VCOLLIDE library to the RAPID library (which
	  was already used from within VCOLLIDE). His code can be enabled
	  with the '-colldet' commandline option or else the 'colldet' console
	  command (assigned to '*' key). You can also use the COLLDET config
	  file option.
	  NOTE! I'd like to know how easy it is to compile RAPID on other
	  systems!!! If you have problems you can always disable this
	  collision detection by setting DO_CD=no instead of DO_CD=yes in the
	  cs.mak file. But it would be nice if you could try to compile it
	  with other systems and let me know how it works. You'll probably
	  have to adapt the makefile.
	- Fixed bug with libraries. Now textures declared in a library can
	  also be loaded from that library. It will check in the library
	  first. If that fails it will check the original world file. If that
	  fails it will load from the current directory.
	- Olivier Langlois found and fixed a memory leak in the loader of the
	  configuration file.
	- *** Release of 0.11_028 ***
	- Allocate lightmaps on non-po2 size instead of po2 texture size.
	  Lightmaps will become smaller because of this. Note that this means
	  that all levels will have to be recalculated!!! (use the -recalc
	  option).
5-Oct-1998
	- Received a nice missile sprite from Ayal Pinkus. I included it in
	  standard.zip. I also received a sprite from Seth Galbraith
	  <sgalbrai@linknet.kitsap.lib.wa.us> which I also included. CS now
	  randomly selects one of the missiles. Note that the missile from
	  Seth is rotated 90 degrees. Although this let's you look at the
	  missile from a better angle this is not really what is intended :-)
	  But I'm to lazy to rotate it.
	- Received update to MD2 and MDL sprite convertors from Nathaniel
	  Saint Martin.	 See the contrib archive.
1-Oct-1998
	- Added support for putting textures in a library.
	- Updated worldfmt.txt doc for new syntax features.
	- Created the first standard.zip library which contains a missile
	  sprite! The 'fire' command will load this sprite and use it so that
	  there is now a visible missile :-) Please, I'm no graphic designer.
	  The missile looks HORRIBLE :-) Can someone make a nicer missile for
	  me?  A Quake II or Quake model for a missile will do fine as we can
	  convert this to CS.
	- standard.zip is now automatically loaded.
	- *** Release of 0.11_027 ***
30-Sep-1998
	- Added Glide port for Crystal Space from Xavier Trochu and Nathaniel
	  Saint Martin!!! This port is still beta and unfinished. Currently
	  it is also only tested on Windows. In src/render/glide/todogl.html
	  you can find the things that are still missing in this port.
	  Check out http://members.xoom.com/xtrochu/cspace/index.html for
	  information about this port.
	- Added MultiSectorObject, a class that I'm going to use for
	  implementing sprites and Things that can be in several sectors at
	  the same time.
	- Sprites use the MultiSectorObject already but there is no real
	  support for them yet. The MultiSectorObject for the sprite is
	  created currently with one sector only. Sprites are already linked
	  to the World instead of to one or more sectors. So almost
	  everything is there except for the actual rendering changes.
	- Added Library class which represents a library of stuff (mostly
	  sprite and Thing templates, and textures currently). The library
	  stuff is there but it is not functional yet.
	- Loading from library works now and you can add Things and sprites
	  in a library. There is now a LIBRARY keyword which can add to
	  a world file. A library is also a ZIP file which should (among
	  other things) contain a file called 'library'. This 'library' is
	  very much like a world file except that it starts with the keyword
	  'LIBRARY' instead of 'WORLD'. Textures that are used by objects in
	  the library may be put in the library ZIP file.
29-Sep-1998
	- A few small patches from Xavier Trochu for his upcoming Glide port.
	- Fixed a bug which caused dynamic lights to look strange on the
	  Glide port.
	- Changed the software renderer so that it can also work with po2
	  lightmaps. This feature is useful for me so that I can test
	  lightmap changes that I do and be (almost) sure that they will also
	  work with hardware accelerated ports.
	- Solved a small boundary bug with the sub-texture dynamic light
	  extension. I THINK that the code is now correct in all cases.
	- Included a few patches from Xavier Hosxe <xhosxe@cyrano.com> which
	  allows compilation of Crystal Space with the current version of
	  EGCS. It looks as if there is a bug in the EGCS compiler which
	  prevents proper compilation of an otherwise legal construction.
	  The explicit casts that this bugfix require are ugly but needed
	  for EGCS (and harmless for all other compilers).
	- *** Release of 0.11_026 ***
28-Sep-1998
	- Fixed bug in the handling of the dynamic light test commands.
	  Spotted by Xavier Trochu.
	- Fixed bug with dynamic lights in combination with unlightable
	  textures. Thanks to Xavier Trochu for spotting this.
	- Added new notes.txt document which is intended as a memory expansion
	  for my brains :-) It is really unstructured (as is my brain probably
	  :-)
	- Moved light.txt to attic since it is obsolete.
	- Added debug0, debug1, and debug2 console commands which are for
	  general debugging. The specific purpose of every command is not
	  defined and depends on what I (or somebody else) is debugging at
	  a particular time. The 'd' key is assigned to 'debug0 toggle' (so
	  debug0 should generally be a boolean command) and shf-d is assigned
	  to 'debug1'.
	- Clicking on a polygon will now hilight it (like the 'hilight'
	  command). This in addition to the usual debug activities that take
	  place then.
	- Added dump() function to PolyTexture and call this dump function
	  from Polygon3D::dump().
	- Finally solved the bug which prevented the second optimization from
	  working perfectly. There is still a small bug (at this moment only
	  visible in large.zip at the railing of the stairs) but I think I can
	  fix that one easily. The sub-texture dynamic lighting extension
	  optimization is now enabled by default. Enjoy the performance
	  increase (when viewing dynamic lights only).
	  An unfortunate consequence of the fix is that it is no longer
	  possible to share lightmaps internally. Crystal Space can reuse
	  lightmaps over different mipmap levels in order to save (a little)
	  space. This is no longer possible. I don't think this is a big
	  problem however.
	- Implemented internal 24-bit textures. Instead of the default
	  'global' mode (with one shared palette for all textures) and
	  the previous 'private' mode (with every texture having its own
	  palette) we now have '24bit' mode. In this mode every texture
	  is specified in full 24-bit RGB giving best possible quality.
	  Currently only supported for 16-bit rendering.
	- Note that semi-transparent (NOT alpha-mapped) textures currently
	  do not work with the new 24bit mode and that unlighted textures
	  and sprites will also not work.
	- I use an inner texture cache loop donated by Philipp Spoth.  This is
	  the first time somebody donates code which forces me to implement a
	  planned feature sooner :-)
25-Sep-1998
	- I had to disable the extension to the optimization because of a bug
	  which I can't seem to find.  I'll look more closely to this bug in
	  the weekend.	So this version does NOT give the full optimization
	  possible.  If you do want to enable this feature anyway you can
	  still do it with the 'dyncache' command.  The bug will cause some
	  sub-textures to be refreshed incorrectly.
	- Added userdata to csObject.
	- Added new 'fire' command which fires a missile :-) The missile
	  itself is not visible yet (we need a moving sprite for that and I'm
	  not ready yet for sprites moving in and out sectors).	 But you can
	  see the light that the missile shines on the walls.  So shooting
	  this missile in the middle of some room will not do much since there
	  are no walls in the vicinity that will be lighted.  Shoot the
	  missile nearby some wall.  Note that the missile will have a random
	  color everytime you shoot.  The spacebar has been assigned to the
	  'fire' command.  The 'activate' command has been moved to the 'a'
	  key.	The 'capture' command has been moved to the alt-a key.	By the
	  way, the missile will explode when it touches a wall.	 So be careful
	  :-)
	- Received new texmem.* from Xavier Trochu and a small patch to
	  win32.h.
	- *** Release of 0.11_025 ***
24-Sep-1998
	- Fixed a bug in Matrix3::gettranspose () so that I can really use
	  it for orthonormal transformations.
	- Created OrthoTransform and let Camera inherit from this.
	- I started implementing the sub-texture optimization. With this
	  optimization the textures in the texture cache are not computed
	  completely but only the parts that are actually visible. It starts
	  to work but there is still some work to do.
	- Added new command 'subcache' with which you can control the new
	  optimization. 'subcache 0' disables it (old behaviour) while
	  any other number (power of two) will indicate the size of the given
	  sub-texture.
	- Implemented the second level of sub-texture optimization in
	  combination with dynamic lights.  Dynamic lights only cause
	  recalculations of the parts of the texture that were really changed.
	  Here is a small optimization chart.  This performance test was done
	  in large.zip at the view of the stairs (coordper).  There is a
	  dynamic light of radius 6 just at the stairs.	 The display is
	  640x480x16.  I get the following results:
	    - No dynamic light:		26.3 FPS
	    - Without sub-texture opt:	9.8 FPS
	    - With sub-texture opt:	13.2 FPS
	    - With sub-tex and dyn opt: 16.5 FPS
	  As you can see, both the sub-texture optimization and the dynamic
	  lighting extension have a significant impact on performance.
	- Added new 'dyncache' command which controls the above optimization
	  (on or off).
23-Sep-1998
	- Added new class OrthoTransform which is a special version of
	  ReversibleTransform which is more efficient (doesn't do matrix
	  inversion but just transpose) but is more restricted (only works
	  on orthonormal transformations like the camera matrix).
22-Sep-1998
	- New loader patches from Ivan Avramovic. He is nearing completion
	  of his mission :-)
	- Received a few missing files from Alex Pfaffe to get the interface
	  from CS with the VCOLLIDE library working. Unfortunatelly there
	  are still some other missing files :-(
	- Received batchfile for DOS to make the 'out' directory structure
	  required by the makefiles from Jeff Lundin <jlundin@fz.ml.org>.
	  I incorporated this (UNTESTED) in makefile.djg so that it should
	  be called automatically.
	- *** Release of 0.11_024 ***
21-Sep-1998
	- Antonio Gascon <434961@cepsz.unizar.es> presented me a few notes
	  according inversion of matrices. It appears that with an orthonormal
	  matrix (like the camera matrix is) inversion is the same as
	  transposing the matrix. Since transpose is a LOT simpler and faster
	  this is a good tip. So moving around the world should be a little
	  faster (not noticable probably).
	- Doug Rabson <dfr@nlsystems.com> mentioned that I should free the
	  SHM memory (X port only) as soon as attaching to it. If I don't
	  do this then there could be memory leaks when the program crashes
	  or something.
	- Applied several patches from Olivier Langlois to get CS to compile
	  with Borland C++. Due to time limits I did not manage to apply all
	  the patches.
	- Applied various patches from Xavier Trochu. Also received a new
	  project files for Visual C++ and a new class which is going to be
	  used by the Glide port (the Glide port isn't here yet).
20-Sep-1998
	- Considerable improvement of the 8-bit true_rgb and 16-bit
	  true_rgb texture cache. In 640x480 at the view of the stair
	  (coordper) I get 25FPS without dynamic lights. With a dynamic
	  light (very large radius of 60 units so that all visible textures
	  would have to be recomputed every frame) performance improved from
	  5.5FPS to 6.5FPS. This optimization is achieved by a reorganization
	  of the lookup tables.
19-Sep-1998
	- I discovered that the -ffast-math commandline option for GCC caused
	  problems on my Pentium II processor.	So I removed the option (it
	  didn't do much in any case) from makefile.lnx and makefile.svg.
	- 'Fixed' the problem with the X/SHM extension being overwritten in
	  the X port but not the way I wanted it.  I would have liked to use
	  the CompletionEvent that should work with the XShmPutImage function
	  but I don't seem to get those events (even though 'send_event' in
	  the above function is True).	So now I just do an XSync which is
	  less efficient but it works.
18-Sep-1998
	- Received patch from Alex Pfaffe <AlexPfaffe@csi.com> with an
	  interface to the VCOLLIDE library. This should enable collision
	  detection. Currently it does not work yet (a few files are
	  missing) so the support is disabled.
	- *** Release of 0.11_023 ***
17-Sep-1998
	- Received patch from Ivan Avramovic fixing his point-polygon
	  distance checker. There were some cases in which dynamic lighting
	  would not work correctly because of this.
	- Removed three include files from system/system.h making it a little
	  less dependent on other stuff.
	- Completely removed the floating lights. They are now obsolete and
	  removing them makes the code considerably easier. Code has moved
	  to attic.
	- Updated todo.html.
14-Sep-1998
	- Xavier Trochu mentioned that I should change the variable 'far'
	  into something else as it is already defined in Windows/DOS.
	- New patches from Andrew Zabolotny:
	    - Rewrote the csEventQueue class. It, in general, did not worked
	      as designed. Sometimes queue got filled with garbage (when
	      queue was resized) and the modifications made to it made it
	      non-thread safe. In OS/2 input events are put into queue
	      asynchronously in an another thread.
	    - Sprite loading/saving (saving incomplete). Try loading
	      sydney.zip :-)
11-Sep-1998
	- New algorithm for checking if a light can reach a polygon from
	  Ivan Avramovic.
	- *** Release of 0.11_022 ***
10-Sep-1998
	- Olivier Langlois found a bug in ScanStr. ScanStr confused 'yes'
	  with 'no' :-)	 Ivan Avramovic then spotted that if I fixed that
	  bug then I should also fix another one. I did :-)
	- Added untested support for PO2 lightmaps required for hardware
	  accelerated 3D drivers. This has NOT BEEN tested. I need help
	  from Dan Ogles first so that he can implement the new functionality.
	  This means that the Direct3D driver is STILL broken in this release.
	- Received new project files for Visual C++ from Xavier Trochu.
	- Received new loader patches from Ivan Avramovic.
9-Sep-1998
	- First substantial optimization of the dynamic lighting system.
	  The previous version always calculated infinite frustums
	  as seen from the light. This means that even if the radius
	  of the light is small every polygon that is visible from the
	  position of the light is going to be recalculated in the
	  texture cache as soon as the light moves or changes color/intensity.
	  As can be expected this is slow. Checking for distance GREATLY
	  increases the speed of dynamic lights.
	- Some patches to win32.cpp and some other files from Xavier Trochu.
	- Some patches to win32.cpp and some other files from Nathaniel Saint
	  Martin :-)
	- Ivan Avramovic suggested another fix to the texture cache so that
	  Crystal Space will not crash when exiting (I wonder why I don't get
	  those crashes!)
	- Working on the first changes to support PO2 (power of 2) lightmaps
	  better. PO2 lightmaps will be optional for hardware accelerated
	  ports. The software version does not need it and will not use it.
7-Sep-1998
	- Fundamental change of LightMap classes. PolyLightMap has been
	  renamed to ShadowMap and now only serves a purpose for the
	  pseudo-dynamic lights. LightMap always holds both a static_lm
	  which contains static lighting information and a real_lm
	  which contains the static lighting information and all dynamic
	  and pseudo-dynamic lighting added. This change broke the
	  Direct3D port but Dan Ogles and me are looking into that.
	- Dynamic lights work more or less!!! There is still a lot to
	  do (like support for shadows on things and better optimization
	  for the lighting code, support for mirrors, ...) but it is a
	  start. There is now also support for a linked list of dynamic
	  lights in World (maybe that's not the right place because
	  dynamic lights belong in a sector?)
	- Changed 'addlight', 'dellight' and 'dellights' commands
	  (the '1' key) to use the new dynamic lights instead of the
	  floating lights. Eventually I will probably remove the floating
	  lights as they are becoming obsolete very soon.
	- New patch from Ivan Avramovic containing further changes on the
	  CS Loader.
	- Small patch from Nathaniel Saint Martin on the windows port.
	- *** Release of 0.11_021 ***
3-Sep-1998
	- Received patch from Ivan Avramovic removing a lot of warnings.
	- Received patch from Nathaniel Saint Martin fixing a few Windows
	  errors. Another patch from Nathaniel enables double buffering
	  in the Windows port.
	- Started first work on real good dynamic lighting.
	- Ivan Avramovic found why the last beta crashes on exiting.
	  I fixed this.
2-Sep-1998
	- Received new project files for Visual C++ from Nathaniel.
	- *** Release of 0.11_020 ***
1-Sep-1998
	- Some fixes from Olivier Langlois <olanglois@sympatico.ca> on the
	  event handling system. Apparantly there were some memory leaks.
	- First patch from Ivan Avramovic on a OO-rewrite of the current
	  world file loader. The intended purpose is to separate the 3D
	  engine objects from the file loading. This makes them more
	  independent on the actual world file format and also forces us
	  to have a better API on the engine objects. This is the first
	  patch. More will follow.
	- Ivan Avramovic send me a file stltest.zip which contains a
	  small test program to test if your compiler can do STL and
	  if it does it correctly. This is just a test to know if we
	  could (in principle) move to STL with little or no problems.
	  Please mail the results of this test (negative or positive)
	  to me.
	- *** Release of 0.11_019 ***
	- Received new patch from Andrew Zabolotny:
	    - I've moved all opendir() code for Windows (which uses
	      _findfirst, _findnext and _findclose) into win32-specific code.
	      I've made a opendir() for Windows using them; if some other port
	      doesn't have opendir() it has to:
		a) define a variable called __NEED_OPENDIR_PROTOTYPE which
		   will define a prototype for opendir(), readdir() and
		   closedir() in system.h
		b) Typedef a structure called "DIR" which contains all
		   information related to current opendir ()
		c) Typedef a structure called "dirent" which contains at least
		   the following members:
			char d_name [MAXPATHLEN + 1];// File name, 0 terminated
			long d_size;		     // File size (bytes)
		d) implement its system-specific opendir() in system-dependent
		   files, using those prototypes.
		e) If system does not provide a stat() function, define a
		   function:
			static inline bool isdir (dirent *de) { ... }
		   in system header file so that it tells whenever a directory
		   entry is a subdirectory or not. Also define a symbol
		   __NO_GENERIC_ISDIR so that generic isdir() which uses
		   stat() will not be defined.
	      I've left all Windows code in archive.cpp under a #if 0 so that
	      it can be used for reference for some time. It should be deleted
	      soon, however.
	    - New section in config file:
		[MouseDriver]
		; Double click time in 1/1000 seconds
		DOUBLE_CLICK_TIME = 300
		; Maximal distance that mouse can move between clicks for
		; double click to occur
		DOUBLE_CLICK_DIST = 2
	      Double click event is generated by csMouseDriver object, so no
	      system-dependent support is required. Keep in mind that if a
	      double-click event is detected, an csevMouseDoubleClick event is
	      generated _INSTEAD_OF_ second csevMouseDown event. So if you
	      notice that somewhere mouse sometimes "doesn't work" when
	      rapidly clicking mouse, its because of this.
	    - File selection dialog: Press Ctrl+O in MazeD to see it.
	    - Rudimentary loading of worlds in MazeD.  I'm using
	      World::load_file for this, so all CrystalSpace features are
	      available such as ZIP support etc.  Only Things are "translated"
	      for now into MazeD objects, however.
	    - Rudimentary support for saving files. No ZIP support for now.
	    - Fixed memory leak. PolygonInt and PolygonParentInt classes do
	      not have a virtual destructor defined. If I remember correctly
	      ANSI C++ draft says that every class that has virtual functions
	      should have a virtual destructor. I've added virtual destructors
	      to these classes and everything went right. I've also changed
	      destructors to "virtual" where appropiate in other classes like
	      "World" etc.
	      There also were some other problems:
		- polygon set did not deleted their polygons in destructor
		- thing templates did not deleted their subpolygons in
		  destructor
	      Also there is still an unresolved problem with dynamic lights.
	      The dynamic lights system is very dirty, and looks more like a
	      temporary kludge than like a ready susbsystem :-) They're kept
	      in a static array which is filled but never freed. I've did not
	      touched this since I presume things here have to be changed in
	      a much more basical way.	I think dynamic lights should be kept
	      in a chain in World object and chained together through their
	      set_next()/get_next() methods.  Also they should be deleted on
	      world destruction like sectors, things, sprites etc do.
	    - I've changed a bit the hierarchy of some classes, and removed
	      the multiple inheritance that was sometimes used there. Multiple
	      inheritance is not too effective, besides its clumsy and hard to
	      understand such a class hierarchy. Now hierarchy (the part that
	      I've touched) looks like:
		csBase
		|
		+-csRect
		|
		+-csVector
		|  |
		|  +-csStrVector
		|  |
		|  +-csObjVector
		|
		+-[entire CSWS class hierarchy]
		|
		+-csObject
			|
			+-csObjectTrigger
			|  |
			|  +-Collection
			|  |
			|  +-PolygonParentInt
			|     |
			|     +-PolygonSet
			|	 |
			|	 +-Sector
			|
			+-PolygonInt
			|
			+-Polygon3D
	    - I've included a profile called "indent.pro" which is for GNU
	      indent. I've set it up for "indent" to bring sources to
	      CrystalSpace standards. I think some sources needs a bit of
	      reindenting, for example util/gfx/pcx.cpp, util/gfx/tgaimage.*,
	      engine/light/dynlight.*
25-Aug-1998
	- Patch from Ivan Avramovic so that his enhancements for the
	  image loader also compile on Visual C++. There seems to
	  be a bug in Visual C++ which prevents proper initialization
	  of the image loader. There is now a workaround in
	  system/win32/imageldr.*
	- Received makefiles for Gnu-Win32. With these makefiles you
	  can compile CS on Windows NT. The makefiles are from
	  Paul Garceau.
20-Aug-1998
	- Ivan Avramovic found and fixed the bug which caused some unlighted
	  polygons to be texture mapped incorrectly.
	- Ivan Avramovic send me a new patch for the polygon clipper. Now
	  it should be perfect (knock wood :-)
	- New patch from Ivan Avramovic with an update to the image loader
	  classes.
	- New patch from Andrew Zabolotny for his MazeD editor.
	- Received new Visual C++ project files from Xavier Trochu.
	- *** Release of 0.11_018 ***
	- Added -fno-rtti and -fno-exceptions flags to makefile.djg.
18-Aug-1998
	- Received DLL's and all stuff needed to compile CS on Windows.
	  It contains support for Zlib, LibPNG and LibJPEG. I got these
	  files from Xavier Trochu. I put the thing on my homepage and
	  put a pointer there.
17-Aug-1998
	- Update to GGI port from Andrew Apted which brings this port
	  up-to-date to the latest changes in the LibGGI API.
	- Patch from Ivan Avramovic to allow for more dynamic adding
	  of image formats. Using his technique one could even add new
	  image formats from within a game without having to recompile
	  Crystal Space for this.
	- Thomas Ogbuji, Chimezie <thomasog@uiuc.edu> has made a world
	  file editor in JAVA. It is not a real level editor (yet?) but
	  it allows you to better edit world files and also preview
	  the things and textures in it. It is really very nice. I recommend
	  checking it out. You can find the latest version at:
		http://www.ews.uiuc.edu/~thomasog/downloads.html
7-Aug-1998
	- Update to the Crystal Space Launcher (Tcl/Tk) from Charles Vidal.
	- New Visual C++ project files from Trochu Xavier.
	- *** Release of 0.11_017 ***
	- Added test to 'c' (coordload command) so that loading a coordinate
	  file which is not generated for the current world does not crash
	  the engine.
	- New patch for the clipper from Ivan Avramovic. It should be a
	  little more efficient now (reintroduced an optimization which
	  was removed because it had some problems on a SPARC).
6-Aug-1998
	- Added a 'STATIC' keyword to portals. If you use this keyword
	  then the destination will remain static even while the object
	  containing the portal moves. Mirrors don't need this keyword
	  otherwise their destination will keep pointing to the original
	  location where the mirror was. But if you want to have a portal
	  on a thing that always points to the same location then you'll
	  have to do this. Thanks for Ivan Avramovic for suggesting the
	  needed mathematics.
	- Note! At this moment static lighting through warping portals
	  is a little broken for things (it works correctly for normal
	  sectors). This also implies that radiosity is also a little broken.
	  The correct shadows will not be generated.
5-Aug-1998
	- 'coordshow' could cause crashes because the string buffer was
	  not large enough. This has been fixed. Thanks to Ivan Avramovic
	  for finding this.
	- With a bit of cooperation from Ivan Avramovic I removed an
	  optimization in polyclip.inc which only works with convex
	  polygons. In CS all polygons are convex but rounding errors
	  can cause slightly concave polygons to be generated on some
	  systems (mainly SPARC currently).
	- Portals on things seem to work correctly now (with the limitation
	  still present that other things in the same sector may not obscure
	  the portal). They even move with the object. To implement this
	  there are now two warping matrices in a Portal, one for object
	  space and one for world space.
	- Received tcl/tk script from Charles Vidal (vidalc@club-internet.fr)
	  which is a front-end for starting Crystal Space. It works very
	  nicely allready but there are still some bugs (it is the first
	  version). Execute with 'wish launcrys.tcl'.
4-Aug-1998
	- New bugfix suggestion from Ivan Avramovic for portals on Things.
	  Thanks to this suggestion I managed to get portals on things
	  working correctly (at least for displaying, now I still need to
	  fix the radiosity code).
	- Removed some debugging stuff ('[', ']', and '=' keys).
	- Provided a work-around for a crashing bug in the texture mapper.
	  When viewing the sky in room.zip through one of the mirror portals
	  on the cube (which you don't have since it is a new version of
	  room.zip :-) the texture mapper tries to draw a small scanline
	  from -21 to -20. Of course this is outside the screen boundaries
	  so a crash happens. I fixed this by just testing every scan
	  that is drawn to the screen boundaries but I think we need a more
	  fundamental fix. Why is the texture mapper trying to draw that
	  scan?
	- Replaced method to create the mirror matrix for radiosity by
	  Plane::get_reflect. This is more efficient than the eigenvalue/
	  eigenvector approach.
	- Added new 'MIRROR' command to 'WARP' in polygons. If you want
	  a portal to mirror you can now say 'WARP (MIRROR ())'. No need
	  to specify the warping transformation. CS will calculate it for
	  you. Of course you can still specify the transformation your-
	  selves if you want it. That way you still have full control
	  over the warping transformation.
	- Just a little note. Portals in things work but there are still
	  some limitations. You should be careful with portals on things
	  which are in sectors that contain other things as well. The
	  problem that the polygons on things are drawn in arbitrary
	  order because the code assumes that the Z buffer takes care
	  of things. Of course this is no longer true if a polygon on a thing
	  is a portal because then the Z buffer will be filled with
	  information from what was rendered through the portal. There are
	  a number of solutions for this but you have to keep in mind
	  that they have NOT been implemented yet.
3-Aug-1998
	- Ivan Avramovic suggested a bugfix for portals on Things. We are
	  slowly getting there :-) The bugfix was in polyclip.inc and had
	  to do with a bad comparison (>= SMALL_EPSILON is replaced with
	  > 0).
31-Jul-1998
	- Large patch from Ivan Avramovic with the following changes:
	    - The Polygon3D::do_perspective() routine has been rewritten,
	      and now handles perspective projection of points closer than
	      SMALL_Z gracefully.
	    - Remember that polygon reflection matrix that you sent out email
	      about?  Well, lucky for you, I had already implemented it.
	      Check out Plane::get_reflect().
	    - Tracked down and fixed a bug in the Texture routines.
	      The problem was, when Texture is constructed, it takes a
	      width and height value, and assigns internal field based on
	      a switch statement which assumes values that are powers of
	      two >= 8.	 In this particular case, it was called with w=4 and
	      h=4, so the internal fields were left uninitialized.
	      The fix was to expand the switch statement to handle the = 4
	      case. I recommend that someone more familiar with the texture
	      code check this out and see if it's possible for other values
	      not handled by the switch to occur.
	    - Fixed several files to remove compiler warnings.	These include
	      csws/cscomp.cpp, general/walktest/keys.cpp,
	      general/walktest/main.cpp, system/xlib/xwin.cpp, and
	      util/archive.cpp.	 I intentionally left the warnings in scan.cpp
	      and scan16.cpp, because they are reminders of unfinished code.
	    - Improved the clipping code.  I did this by creating a new class,
	      BoxClipper, which is an optimized polygon clipper that handles
	      the special case of clipping to a rectangular region.
	      Both BoxClipper and PolygonClipper now derive from a pure
	      abstract base, Clipper.  Also, cs3Dview has been modified to use
	      either a BoxClipper or a PolygonClipper as appropriate.
	    - The RenderView class is now derived from Camera, which gives it
	      some new advantages (such as the fact that it is now a
	      Transform, as I'll talk about below).
	    - I enhanced the Vector2 class by adding arithmetic operators,
	      much the same way that I did with its 3D counterpart earlier.
	    - I similarly enhanced the Box class, since I was already
	      there :).	 + for union, * for intersection, etc.
	    - I implemented the classes Transform and ReversibleTransform in
	      math3d.  Since transform operations involving a matrix and a
	      vector are so common (camera, Things, warping portals, ...), the
	      functionality has been consolidated into a single class.
	      Transform maintains a matrix and a vector.  ReversibleTransform,
	      which derives from Transform, additionally maintains the inverse
	      transformation matrix.
	    - The Transform class implements a plane transformation which is
	      shorter and more efficient than the old
	      Plane::transform_world2cam() and Plane::transform_cam2world().
	    - The Camera class now derives from ReversibleTransform.  This
	      reduces overhead while parameter passing and is more intuitive
	      then the old code.
	    - With the math code growing the way it was, math3d has been split
	      up into math3d and math2d.  I reimplemented all of the
	      functionality of the static class Segment in two new static
	      classes, Intersect2 and Intersect3.  With these changes, there
	      is no overlap between the math2d and math3d objects.  Plus, it
	      makes a lot more sense to type Intersect3::plane() than it did
	      to type Segment::intersect_segment_plane(). :)
	    - I reimplemented Portal space warping using a
	      ReversibleTransform.  Have a look, it makes the code a lot
	      simpler and more efficient!
	    - The Thing class also uses a ReversibleTransform now.
	    - I eliminated the redundancy and ambiguity in the
	      Matrix3::inverse() call, by reimplementing it as
	      Matrix3::invert() and Matrix3::getinverse().
	      The old inverse code inverts a matrix by calculating the
	      inverse in a temporary storage, then setting *this to equal the
	      temporary.  In practice, the inverse call was usually used like
	      this:
		Matrix3 m_inv = m;  m_inv.inverse();
	      Obviously, there is unnecessary overhead.	 The new code would
	      look like this:
		Matrix3 m_inv = m.getinverse();
	      The Matrix3.invert() call would be used to actually invert the
	      given matrix.  This also clears up the verbal ambiguity of what
	      a call like inverse() does (does it invert the matrix or just
	      return the inverse of the matrix?).
	    - The csscript camera routines no longer return pointers, just
	      rvalues.	Aside from being most likely moot (once Dan's done
	      with the new scripting), and necessary (because of C++ data
	      protection and the new Transform class), it's a good idea,
	      because you wouldn't want a script to be poking around at the
	      internals of the Camera.
	    - The PolySet transformation routine no longer does visibility
	      testing, because 1) it's done later on anyway, and 2) it
	      interferes with the new perspective algorithm.
	    - Added a few routines to Polygon2D to retrieve specific vertices,
	      get_first(), get_last(), and get_vertex(int).
	- *** Release of 0.11_016 ***
	- Fix from Ivan Avramovic to his BoxClipper.
30-Jul-1998
	- Added LightView struct which is all the info needed for static
	  lighting. This is similar to the RenderView structure which
	  is all information needed for rendering (this is an implementation
	  enhancement and is not visible from the outside).
	- Light is now correctly reflected by mirrors and reflecting surfaces.
	- Added new -reflect commandline parameter which is to be used
	  together with -recalc and controls the number of reflections that
	  are allowed for static lighting (through mirrors only). In fact it
	  controls how many times the same light beam will affect the same
	  sector. Default is 1 which means that mirrors will not reflect light.
	- Added new 'Lighting' section in cryst.cfg. Added new 'REFLECT'
	  option in Lighting section which is equivalent to -reflect
	  commandline option.
	- Changed config.txt so that all sections are also mentioned with
	  every configuration option.
	- Moved cfg_alpha and cfg_fog to Portal class where it belongs.
	- Light shining through portals with alpha mapping will be changed
	  according to the mean value of the texture on the portal and the
	  color of the light. This is the first step. In (the near?) future
	  I plan to really check where the light of beam hits the portal
	  and use the texel point at that position to recolor the light.
	- Added pseudo radiosity system. You can now enable reflection on
	  normal polygons as well as mirrors. In that case you get something
	  which resembles radiosity. Depending on the '-reflect' parameter
	  you actually get better radiosity (more reflections).
	- Added '-rad' and '-norad' commandline options to enable/disable
	  new pseudo-radiosity system. Also added Lighting/RADIOSITY
	  config file option the control radiosity.
29-Jul-1998
	- Lights shine through warping portals correctly.
	- New patch from Andrew Zabolotny:
	    - Fixed the problem with "recycle windows" command. Button first
	      sent this event to his parent then done some other work, which
	      is inacceptable for specifically this command, since upon
	      receiving this command application kills all child windows (then
	      re-opens them, but these are other objects).
	    - Fixed many other problems. The memory debugger is a real help!
	      :-)
	    - Added coordinate axis and coordinate grid to MazeD. Also the
	      buttons related to grid and axes all work (zoom, rotate axis,
	      zoom to rectangle, pan rectangle, toggle axis/grid).
	    - Redone a bit the default window layout so that it could fit for
	      less resolutions (for example, 640x480).
	    - Added a very nice document about MazeD the upcoming editor.
	      Look at docs/mazed.html.
	    - Added INSTALL.OS2.
	- Received a bunch of new project files for Visual C++ and the
	  Windows port from Trochu Xavier <xtrochu@yahoo.com>.
	- New CS2VRML from Thomas Ogbuji Chimezie. JAVA source is now
	  included.
	- *** Release of 0.11_015 ***
28-Jul-1998
	- Enhanced warping portals so that you can now also specify a W
	  vector. The warping transformation is now: P' = M*(P-V) + W
	  This is a more general case of the previous system. Mirroring
	  is still supported as a special case (V equal to W, note that this
	  is default is W is not specified).
	  Explanation: P is the point that needs to be warped. V is the
	  vector that is applied to P before the warping matrix (M) occurs.
	  W is the vector that is applied to the pointer after M happened.
	- Included a test so that CS automatically detects if a space
	  warping portal mirrors space. Previously you could only use space
	  warping for mirrors because CS assumed that space was always
	  mirrored. Now you can make infinite corridors (I tried this and it
	  is fun :-)
24-Jul-1998
	- Added alt-v, alt-n, alt-o and alt-p to PrimEdit to toggle
	  the display of the respective types of objects (see primedit.txt
	  for more info).
23-Jul-1998
	- Added INSTALL.Win which I received from Trochu Xavier
	  <xtrochu@yahoo.com>.
	- In the same spirit I created INSTALL.Amiga (which was originally
	  in INSTALL), INSTALL.Unix and INSTALL.Djg.
	  INSTALL still exists and contains general installation instructions
	  as well as instructions about running Crystal Space.
	- New patch from Andrew Zabolotny:
	    - Small changes to memory debugger.	 New CHKB(x) macro which puts
	      curly braces around the included command.	 Which means that you
	      can use it like 'if (x) CHKB(a=new...) else CHKB(b=new)'.	 (note
	      that you shouldn't put an ';' after CHKB(), especially before
	      "else").
	    - Added a small routine which dumps all non-free memory blocks and
	      where they were allocated. This way, I've caught some bugs with
	      memory that is allocated in constructor and not deallocated in
	      destructor, for example. For example, Textures class did this
	      (it did not delete all TextureMM * objects). Other big memory
	      leak I've caught was related to SaveArea...RestoreArea() pair
	      (and mouse pointer actively uses them).  Now MazeD eats TONS
	      less memory :-) since previously it gobbled memory simply by
	      moving the mouse.
	    - Made config variable a pointer, i.e. "extern csIniFile
	      *config". This allows a) to precompute something before
	      initializing config file (for example, the path where config
	      file is placed) and b) this allows destroying the object
	      manually (with delete) before dumping memory blocks; this
	      generates much cleaner reports.
	    - Further progress on MazeD. Added zoom in/out functions,
	      panning, coordinate axes, reworked some other things...
	- Update to CS2VRML convertor from Thomas Ogbuji.
	- *** Release of 0.11_014 ***
22-Jul-1998
	- Small patches to Windows version from Trochu Xavier
	  <xtrochu@yahoo.com>.
	- New Patch from Andrew Zabolotny:
	    - Made various changes to the Watcom port (rewritten
	      keyboard and mouse handlers). The mouse handler is
	      currently broken and thus disabled.
	    - Changes to inifile so that it is more compatible with
	      various C++ compilers (problem with visibility of
	      private/public inner classes).
	    - Fixed OS/2 makefile and cs.mak.
	    - Patch to MazeD (the editor). Now you can add and
	      delete vertices. But since there is no save the editor
	      is still not useful :-)
	- Received convertor from CS world files to VRML from Thomas Ogbuji
	  <chimezie.thomas.ogbuji@intel.com>. This version only supports
	  world files using the SECTOR/THING interface (not ROOM/SIXFACE).
	  Currently room.zip and maze.zip are the only levels that use that
	  interface. This limitation is no problem because the ROOM/SIXFACE
	  interface is obsolete in any case.
	  See the contrib directory for cs2vrml.
	  Source for the convertor is not yet included in this version because
	  it needs to be cleaned up.
	- Received new VM (virtual machine) version from Tor Andersson.
	  This VM is probably a good candidate for a VM in Crystal Space.
	  Currently it has not been integrated yet. See in
	  contrib/varia/vm2.zip.
20-Jul-1998
	- Added info about ORIG/FIRST/SECOND to texmap.txt. This is
	  useful information for people wanting to understand the world
	  format.
17-Jul-1998
	- Received patch from Ivan Avramovic. He has totally rewritten
	  the camera class to make it more consistant. He also removed the
	  physics capabilities. They need to be rewritten anyway.
	  Note that this patch is unfinished. Ivan re-introduced an old
	  bug which I fixed by shifting the viewpoint backwards. But Ivan
	  is going to fix this in a much nicer way.
	- New patch from Andrew Zabolotny:
	    - Major rewrite of DJGPP port.  The ALLEGRO port is not affected.
	      The videosystem and mouse handling are totally rewritten.	 It
	      uses second videopage if available.  When Flush() is called the
	      visible page is simply flipped instead of copied.	 This should
	      be substantialy faster.  It also supports 16 X-modes (8-bit)
	      like 256x200, 360x360, 376x564, and 360x240.  And of course
	      support for 16-bit color modes.
	    - Removed shift, alt, ctrl args from do_keypress - they were
	      obsolete since anyway csKeyboardDriver tracks shift, ctrl
	      and alt state in its Key member variable. Updated all system
	      ports for this.
	    - Completely rewritten keyboard handler for DJGPP. Now it works
	      almost as good as in OS/2 :-) Also I've added a thing that
	      makes keyboard handler behave nicely in OS/2 DOS sessions...
	    - I've fixed the "+D" constraint in MMX code. DJGPP also had
	      problems with it.
	    - Rewritten mouse driver for DJGPP. Now it has almost the same
	      functionality as the OS/2 port (:"-) except system mouse
	      pointers which are always painted by software (i.e. csws).
	      There is a new configuration setting
	      VideoDriver::MouseSensivity which is a float value; default
	      value is 1.0 which sets a reasonable (at least for me) mouse
	      sensivity; to make mouse twice faster one should set
		[VideoDriver]
		MouseSensivity = 2.0
	    - Small patch to MazeD.
	    - Important change in makefiles (makefiles using cs.mak). All
	      object files are now put in a 'out/<system>' directory. There
	      is also a separate tree for debugging and optimizing. This
	      means that you can now switch between debugging and optimizing
	      without having to recompile everything. Note that you need
	      GNU make for this to work (this was already the case, but now
	      even more).
	- *** Release of 0.11_013 ***
10-Jul-1998
	- Update to MazeD editor from Andrew Zabolotny.
	- *** Release of 0.11_012 ***
8-Jul-1998
	- Added updated project files for CS, MazeD, Simple, and PrimEdit
	  for Windows/Visual C++ (from Nathaniel).
	- Updated md2 to CS convertor from Nathaniel.
7-Jul-1998
	- As suggested by an algorithm given to me by Nathaniel (who
	  got it from someone else) I implemented texel filtering. This
	  is still a very experimental feature. First things will slow
	  down considerably while there is still room for optimization
	  (a little). Secondly the filtering causes artifacts at the borders
	  of polygons. This is to be expected since filtering will pick
	  texels from nearby locations. But the nearby location does not
	  need to be on the the polygon actually.
	  Turn the feature on/off with the 'texelflt' command or with
	  the 'alt-t' key (previous definition of 'alt-t' has been
	  removed, it was not very useful).
	  One observation is that texel filtering has almost no effect
	  on polygons which are far away. So one way to speed things up
	  is to only use texel filtering on polygons that are close.
	- Small patch to inifile.cpp from Robert Blum.
	- *** Release of 0.11_011 ***
6-Jul-1998
	- New patch from Andrew Zabolotny with many changes to his CS
	  editor (but still not functional yet) and also a global
	  patch to System::Loop to make this function reentrant.
2-Jul-1998
	- Added a 'hints' section to worldfmt.txt.
1-Jul-1998
	- I found a 3ds reader somewhere on my disk. I made a very
	  small and primitive convertor from it. Please see contrib/3ds.
30-Jun-1998
	- Removed DrawTriangle from g3d_d3d.cpp.
	- Removed warnings and a few little bugs from the md2 and mdl
	  sprite convertors. Also make the convertors work regardless
	  of the endianess of the processor. Also added a makefile
	  (for GNU make).
	  Note! md22spr has not been tested by me (I don't have any
	  md2 models, I don't have Quake II).
	- Put both 'csdoc' and 'docs' inside doc archive.
	  Put 'contrib' and 'attic' inside ctr archive.
	- *** Release of 0.11_010 ***
	- Received patch from Nathaniel with a better next_frame for
	  sprites.
29-Jun-1998
	- Added 'depth' coloring to WireFrame.
	- Added polygon object to WireFrame.
	- Received patch from Andrew Zabolotny:
	    - Polygon clipper should be more accurate (but the Solaris bug
	      is still not fixed, but see below).
	    - I've commented out all constructors from Vector2 class.
	      Believe it or not, with a (even empty) constructor declared,
	      the following definition:
		  Vector2 Vertices [100];
	      generates a empty loop in which the empty constructor is
	      called, even if it is inline the empty loop still remains!
	      So this gives also some clocks per each ::Clip routine.
	    - Started work on MazeD (the Crystal Space editor!). Not much
	      done for now.
	- Increased precision of debugging output.
	- Increased precision of camera loading/saving (for debugging).
	- Fixed the bug of the polygon clipper in Solaris by making the
	  test a bit more sloppy.
	- *** Release of 0.11_009 ***
	- Received new sprite code with support for frame sets (actions).
	  These group several frames so that you can have several logical
	  sets of frames inside a sprite (like 'run', 'walk', 'die',
	  'shoot', ...). Also support for changing skins (default skin in
	  sprite template definition and possible to override in sprite
	  instantiation). 3D and 2D texture coordinates have merged into
	  one array to allow for more flexibility (not only the 3D coords
	  can move now, also the 2D texture coords can move). Note that old
	  levels using sprites will no longer work because the format is
	  not compatible.
	- Updated mdl convertor from Nathaniel and a new md2 (Quake II)
	  model convertor (see md22spr directory in contrib).
28-Jun-1998
	- Because I can't get portals in things working ok right now I
	  decided that I needed better debugging tools. Preferably real-time
	  while the engine is running. So I started development on a
	  WireFrame class. This class will also be useful for a map later on.
	  I added the 'map' command with which you can disable the map
	  (default), overlay the map or use the map as standalone.
	  The 'm' key is assigned to the 'map' command.
26-Jun-1998
	- *** Release of 0.11_008 ***
	- Fixed small bug in reading of local config file. This bug only
	  occured if there is NO local config file in the ZIP file.
	- I had to remove a kludge added by Andrew in his archive code.
	  I don't know what harm this will do but I had some problems
	  with files that could not be loaded from a ZIP file.
25-Jun-1998
	- Received small patch from Markus Oberhumer
	  <k3040e4@wildsau.idv-edu.uni-linz.ac.at> for the X port:
	    - Meta keys are also mapped to Alt.
	    - Test in signal handler to avoid recursion (I also
	      added this test to the svgalib and ggilib ports).
	- I discovered what is wrong with the portals in Things.  In fact
	  mirroring portals never did work correctly but in normal sectors
	  (that don't use the BSP) you can never encounter the effect.	The
	  problem is that mirroring works by internally mirroring the camera
	  only (leaving the world unmirrored) and rendering through the 2D
	  clipping portal as seen from the different position.	This works
	  perfectly until there are objects AFTER the mirror.  These will
	  block the view of the mirrored camera since they will now be put in
	  front of the camera (between the camera and the mirroring portal).
	  To fix this I'm changing the internal renderer so that it can now
	  (optionally) clip to an arbitrary plane: the plane of the portal
	  polygon.  I've made it so that there is actually little or no
	  overhead if there are no portals emerging in the middle of the
	  sector (the case that could give problems).
	- Added a new RenderView structure (in engine/rview.h) which
	  combines all the parameters that are used for rendering an object
	  given the current camera. I don't use Camera itself for this
	  because RenderView will be changed by the process of rendering
	  itself (going through portals, mirrors, ...). All 'draw'
	  functions of Sectors, Things, Sprites, ... accept a single
	  RenderView argument now instead of a the old bunch.
	- Received a nice Quake mdl convertor from Nathaniel. Now we
	  can finally use the free editors/viewers available for mdl
	  and convert it to a sprite for Crystal Space. Nice!
	  The code is in the contrib/mdl2spr directory. I have not made a
	  general makefile yet. Currently it only contains a project file
	  for Visual C++. Report to Nathaniel for more comments or bugs.
	- I almost managed to let the portals on things work but I'm not
	  there yet.
24-Jun-1998
	- Changed FOG command so that it accepts a value between
	  0 and 1 instead of 0 and 100.
	- Started support for portals in things. The portals themselves
	  are no problem. Things use standard polygons which support portals.
	  But there appear to be some bugs. I'm looking into it.
	- New patch from Andrew Zabolotny with the following changes:
	    - Allowed assembler routines to work at interpolation step 8
	      as well. This should give more precise texture mapping (but
	      slower of course). However there seem to be some problems with
	      artifacts (according to Andrew).
	    - New polygon clippers. The clipper is now about 30 to 40%
	      faster. In general this will not gain you much FPS since the
	      clipper is not the major CPU eater. But faster is faster.
	      Nobody should complain! :-)
	      NOTE! I JUST DISCOVERED THAT THIS CLIPPER HAS SOME BUGS.
	      They currently only seem to appear on non-intel platforms.
	      Please ignore the possible clipping errors. Andrew will
	      provide a patch soon.
	    - The Z buffered scanline drawers and also the alpha mapped
	      scanline drawers are redone in assembler. This will give
	      a considerable increase of speed. Please have a look at the
	      included BENCHMARK file (from Andrew) to see some of the
	      results.
	    - New method in Graphics2D class: SetMouseCursor which sets mouse
	      cursor shape (arrow or hourglass or whatever). If some shape
	      is not supported, mouse cursor should be hidden and procedure
	      should return false - in this case CSWS will draw mouse cursor
	      itself. By default this method returns "false" for all shapes
	      except "arrow", but all existing ports (except OS/2 of course
	      :-) won't hide cursor if needed mouse cursor shape is not
	      available - at least this should be fixed ASAP by respective
	      port maintainers.
	    - Added a new method to csSystemDriver called Sleep (int msec).
	      It is used by CSWS when it do not have messages in message
	      queue to process. This is used to free CPU for other tasks
	      when a GUI program is idle.
	    - New switch in cfg file: SYS_MOUSE_CURSOR = {yes|no} tells OS/2
	      graphics driver whenever to use system mouse pointers (when a
	      counterpart is available) or use software emulation (which is
	      always available).  In case software cursors are requested,
	      system graphics driver should turn system mouse pointer off
	      (of course only when mouse is over CrystalSpace window). This
	      switch can be also used to turn on/off system mouse cursor in
	      programs that do not implement software emulation (walktest and
	      simple).
	    - Config file has been rewritten. It uses sections now. Also
	      support for comments, saving of INI file if needed (to allow
	      changing options by Crystal Space itself). Support for
	      arbitrary binary values (Base64 format, same as MIME uses).
	      Now you can store textures in config files :-)
	      Fixed bug with reading config files from acrhives with
	      non-standard line ends (LF) on DOS and Macintoshes.
	    - Several small fixes to csws.
23-Jun-1998
	- Updated worldfmt.txt for new FOG command.
	- Bugfix in 'transp off' command. This would crash.
	- Assembler is now automatically disabled if you choose debug.
	- Received patch from Dan Ogles which disables 'verynice' if hardware
	  acceleration is used.
22-Jun-1998
	- Discovered that the flat scanline drawers used the wrong precision
	  for the Z buffer (16:16 fixed point instead of 8:24).
	- Tried to create a fogging scanline drawer. It works but I still have
	  to find a good formula for fog. The 8-bit version is not implemented
	  yet.
	- Added new FOG command to polygon.
	- Fog works now. There was an error in my formulas which was the
	  reason that it didn't work as expected.
	  I still need to generalize fog. Currently it only works in
	  5:6:5 mode.
21-Jun-1998
	- Implemented flat scanline drawers in 16-bit (no texture mapping).
	  This is useful for debugging.
19-Jun-1998
	- Small bugfix to PrimEdit from Nathaniel.
	- Added '45o' status line option to show if 45 degree mode is on.
	- Implemented constrained movement and vertex creation to two
	  planes (intersection of both planes).
	- 'a' key (align) will now also align/create a plane if a polygon
	  is selected (it will align/create a plane corresponding to the
	  plane of the polygon).
	- Polygons can now also be used in addition to planes for constraints
	  of vertices (creation and movement).
	- The behaviour of the grid has changed a bit. If only one plane is
	  selected it will show the 21x21 grid as was before. If two planes
	  are selected it will show 21 dots along the line of intersection
	  of the two planes. The dots are spaced 1 unit from each other.
	  If more than two planes are selected no grid is shown.
	  Thus the grid now shows the constraints that are active (only works
	  for planes though and not for polygons).
	- New patch from Andrew Zabolotny:
	    - Cleanup of graph3d.cpp.
	    - Fixed bug with Z coordinates of vertices of sprite polygons not
	      computed properly.
	    - Little patch to DrawPolygonQuick (1/z instead of z is given
	      as input).
	    - Removed DrawTriangle from Direct3D port.
	    - Fixed a bug with assembler draw_pi_scanline drawing one pixel
	      more than needed.
	    - Implemented the MMX routine for draw_pi_scanline. However, the
	      gain is much too poor :-( about 2%. It wasn't worth the effort.
	    - Bug in MMX instruction list of GAS 2.8.1 (see contrib/binutils
	      for patch to GAS).
	- Patch from Nathaniel so that the three mouse buttons work in the
	  Windows port (important for the editor).
	  Also new project files for Crystal Space, Simple and PrimEdit
	  (for Visual C++/Windows).
	- *** Release of 0.11_007 ***
18-Jun-1998
	- Finished the basic editor. It works now. It can load and save
	  from/to the file 'world.pri'. See the new document
	  'docs/primedit.txt' for a full explanation of all keys and
	  capabilities.
	- *** Release of 0.11_006 ***
	- Added 'drag-box' capability to select multiple vertices at once.
	- Changed behaviour of clicking and selecting so that shift is
	  for multi select and without shift deselects all selected (standard
	  behaviour).
	- New 'N' key to face the camera north.
	- New 'ctrl-n' key to toggle 45 degree mode. In this mode all movement
	  of the camera happens in 45 degree multiples.
17-Jun-1998
	- Continued work on the primitive editor.
	- Patch from Nathaniel which should fix the Direct3D sprites.
	  Let's see if it does.
16-Jun-1998
	- Started work on a primitive vertex/polygon editor for Crystal
	  Space. This should be better than no editor and I think I can
	  do this quickly.
15-Jun-1998
	- Little patch from Nathaniel for Direct3D version (fixes the
	  auto-detection of Direct3D).
	- New patch from Andrew Zabolotny with the following changes:
	    - Old DrawTriangle code moved to attic.
	    - draw_scanline_triangle is now part of Scan and Scan16
	      (it is called draw_pi_scanline for 'perspective incorrect').
	    - Assembly version of draw_pi_scanline with a significant
	      speed improvement (with two sprites almost covering the screen
	      the frame rate jumps from ~15 to ~17.4).
	    - Started work on MMX version of draw_pi_scanline.
	    - Updated documentation on porting Crystal Space to other
	      platforms.
	- *** Release of 0.11_005 ***
11-Jun-1998
	- Increased speed of walking/runnig forward/backward three times (it
	  was a bit too slow to my taste).
	- A new patch from Andrew Zabolotny:
	    - Unified order of vertices in sprite triangles with order of
	      vertices in clipping view vertices and polygon vertices. Now
	      sprite triangles should be defined in reverse order (relative
	      to previous betas). The order of view polygon and polygons has
	      not been touched.	 Now triangles are clockwise in screen space
	      (as seen with Y pointing up) or anti-clockwise (with Y pointing
	      down).
	    - Added a routine called DrawPolygonQuick which draws a
	      perspective-incorrect texture mapping polygon. It is intended
	      as a replacement to DrawTriangle, since triangle after clipping
	      results in a polygon. DrawTriangle is still in place, but
	      it should be moved into attic/ since it is not used anymore.
	    - Support for interlaced mode in OS/2. Added a method to
	      csGraphics2D bool DoubleBuffer (bool Enable); which turns on/off
	      double buffering. Method returns false if it cannot switch to
	      a particular mode (by default it returns "true" if
	      single-buffered mode is requested and "false" if double-buffered
	      mode is requested).
	    - New command "zbuf" in walktest for debugging z-buffer. Best
	      works in 16-bit color.
	    - Implemented a new draw_triangle_scanline in x86 asm... again not
	      much gain, but this time its gives least something...
	- Since the patch from Andrew most likely destroys the Direct3D port
	  (at least the sprite drawing code) I tried to fix it. The problem
	  is that DrawTriangle is no longer used (it is obsolete). Instead
	  there is DrawPolygonQuick. DrawPolygonQuick has the same parameters
	  as DrawPolygon so I'm counting on using DrawPolygon instead of
	  DrawPolygonQuick for the Direct3D port.
	- *** Release of 0.11_004 ***
	- Change in class structure. 'Light' is now the descendant of all
	  positional lights. 'StatLight' (what was previously called 'Light')
	  is a subclass for the static/pseudo-dynamic lights. 'FltLight'
	  is a subclass for the floating lights. And DynLight is a subclass
	  for the unfinished dynamic lights.
10-Jun-1998
	- FINALLY I found the bug which has been haunting the lighting code.
	  It appeared that I was using the wrong matrix to try to transform
	  texture space to world space :-) Now the lighting code seems to
	  work very good. There is one problem left: the boundaries of
	  polygons. These are not always lighted correctly. I should probably
	  extend the lightmaps a little but I'm not sure yet.
	- Removed old lighting code and moved to 'attic' (in 'old_light' file).
	- *** Release of 0.11_003 ***
9-Jun-1998
	- Added new scan_m68k.S from Maurice Vosmeijer (for Amiga port).
	- Finally the new lighting code starts to work a bit. It still
	  needs a lot of tweaking and a few enhancements (like expanding
	  the view frustum slightly BEFORE clipping instead of only
	  in the light-shining routine). I also need to optimize it further.
	  Then I will add pseudo-radiosity and alpha-mapped color
	  changes (meaning that a colored light in a church will give nice
	  colored patches of light).
	  There are also some problems at borders of polygons. I'm not
	  sure how to fix these yet.
8-Jun-1998
	- In my continuing debugging quest I enhanced the left-mouse-button
	  press debug a bit so that it shows the coordinates in camera/world
	  space of the point being click on (it uses the Z buffer for that
	  information).
	- Continued debugging of lightmapping code. I still haven't found
	  out what's wrong. I need to get a good night rest before I will
	  really fix it I'm afraid. But don't worry. I just keep trying :-)
	- Received new watcom port from Andrew Zabolotny (who received it
	  from Slavik Levtchenko).
	- Received major patch from Nathaniel Saint Martin for a significant
	  rewrite of the Windows/Direct3D port. Let me know how this works.
	- *** Release of 0.11_002 ***
7-Jun-1998
	- Yes, I know I should be working on debugging the lighting system.
	  But when I was driving to my home I suddenly came on an easy way to
	  increase the framerate. I changed INTERPOL_STEP from a constant
	  into a variable (this slowed down 1% or so) and then I made
	  selection of INTERPOL_STEP dynamic. When z doesn't change much
	  along a scanline then it will use larger interpolation steps.
	  When z changes much it will use the current default (16).
	  This increases speed in general about 10% (10% speed increase
	  for the view of the staircase).
	  I would not be me if I didn't make this option configurable
	  just to see the difference. The new 'inter' command allows three
	  settings: 'smart' (the new default setting), 'step16' (the old
	  default), and 'step32' (just to try this out). I also assigned
	  the key 'alt-p' to toggle between these three settings.
	  Because of limitations in the assembler texture mapper, the
	  interpolation step cannot be set to less than 16 (to 8 for example).
6-Jun-1998
	- Discovered that my new improved lighting system may be fast
	  but it doesn't work that well (to say the least :-) It was
	  an amazing stroke of luck(?) that it worked so well with
	  room.zip (my testlevel) because it didn't work good at ALL
	  with large.zip :-(
	  Now it starts to work finally but I still have a lot of work
	  to do.
	- Edges are drawn in white again in 16-bit truecolor mode.
	- If edge-drawing is enabled (with 'e' key) then the lights
	  are also shown (a red cross and a white cross). The white
	  cross is drawn in perspective so that you can judge how
	  far away the light is depending on the size of the white
	  cross.
	- Added DrawLine in csGraphics3D class (yes 3D!).  This draws a line
	  on screen between two points in camera space and is useful for
	  debugging.
	- If do_edges is enabled (with the 'e' key) then you can click on
	  a light to select it (in addition the normal mouse-click action
	  also occurs: debug dump of the selected polygons).
	- New 'frustrum' command (assigned as a toggle to the 'E' key).
	  When 'frustrum' is enabled it will show the frustum around
	  the selected light. This means that all polygons that are hit
	  by the light (ignoring things blocking the light) will be
	  hilighted with a white outline indicating where the polygon is
	  hit. Red lines connect the vertices of that outline with the
	  center of the light. That way you get a good idea of where
	  the light may affect polygons. I designed this tool to debug
	  my new lighting system which is based on making a view frustum
	  arround a light.
	  Try this feature sometimes. It looks really nice :-)
5-Jun-1998
	- Complete rewrite of lighting system. It is MUCH more accurate.
	  MUCH faster and contains MUCH less bugs and it is MUCH more
	  flexible :-)
	  The old lighting system is still present (but unused). This
	  new lighting system is still experimental (hey! we're busy
	  with a new beta! :-)
	- *** Release of 0.11_001 ***
	- Dramatically increased speed of saving lightmaps by writing
	  the archive only once after all lightmaps have been updated.
4-Jun-1998
	- Had a look with a profiler to see what some of the more
	  demanding functions are (I received a level with some spots
	  with more than 450 portals visible :-) and discovered that
	  clip_poly_plane is the largest CPU consumer except for
	  draw_scanline (texture mapping). So I optimized it a little
	  to get a few percents more performance (not much).
	- Received new patch from Nathaniel on the Direct3D version.
	  This fix disabled mipmapping if a card does not support it.
	  Also more support for cards that don't support lightmaps.
4-Jun-1998
	- Fixed little error in DJGPP port so that it can compile (
	  include of system/system.h in djvidsys.cpp).
	- Fixed cs.mak: renamed 'sinclude' to 'include'. DJGPP/GNU
	  make doesn't seem to recognize 'sinclude'.
	- Received updated Visual C++ project files for Windows from
	  Nathaniel.
	- Received new makefile.wat from Andrew Zabolotny for compiling
	  Watcom/DOS version. This replaces the old makefile.wcc.
	- *** Release of 0.10 ***
3-Jun-1998
	- Received patch from Andrew Zabolotny for the first MMX support
	  for Crystal Space! He has currently only accelerated the
	  Z fill in draw_scanline_map (both 8 and 16 bit). You can enable
	  MMX in the configuration file with MMX=true. You can also toggle
	  it on/off using the console command 'mmx'.
	  Note that if your CPU doesn't support MMX, CS will detect this
	  and use the normal routines.
	  Andrew also did a small reorganization of the assembler stuff.
	  The processor specific things have moved to the system directory:
	  there is a new directory i386 for intel stuff and m68k for
	  motorolla stuff. See README.Andrew for more info.
	- Fixed the bug with LIGHTMAP_SIZE set to some value other than 16
	  (this bug only occured on levels which contained dynamic lights
	  (NOT floating lights)). NOTE HOWEVER that I'm not sure that the
	  bug is also fixed in the Direct3D port. I had to change some
	  things there and it is very well possible that there are problems
	  there!!!
	- LIGHTMAP_SIZE option can now also be set from local cryst.cfg
	  file (the one inside the level archive). This overrides the
	  value from 'cryst.cfg'.
	- Reading cryst.cfg/local cryst.cfg is a bit better in class Textures.
	- Fixed obscure bug in 16-bit texture cache which could cause
	  crashes on machines which don't allow writing words at non-word
	  aligned addresses.
	- *** Release of 0.09_036 ***
2-Jun-1998
	- Disabled PNG and JPG support by default from cs.mak. This will
	  make the default compilation for users easier. You can enable
	  it again if you want.
	- Updated various defaults in cryst.cfg to better defaults.
	- Restored 'make depend' so that it always remakes the dependencies.
	- *** Release of 0.09_035 ***
	- Received some patches from Nathaniel for Direct3D.
1-Jun-1998
	- Decreased waiting time at startup from 2 to 1 second.
	- Implemented private memory pool for texture cache. This
	  should make things more efficient. The current implementation
	  is rather primitive but already things are speeding up
	  slightly. More special allocation algorithms specialized for
	  the texture cache should be implemented.
31-May-1998
	- Created new MIPMAP_VERYNICE option (set MIPMAP_NICE=verynice
	  in cryst.cfg) which gives a kind of mipmapping which is MUCH
	  better (looks very good) but uses more memory on the cache.
	  Normally mipmap level 1 (level 0 is not mipmapped) is a
	  texture with width and height divided by 2. If you use
	  'verynice' then mipmap level 1 has the same size as level 0
	  but the texture is blended somewhat. Level 2 and level 3
	  are smaller as usual.
	  Because this blending looks very good and also because 'verynice'
	  uses a lot of texture cache memory, it is recommended to decrease
	  the values of DMIPMAP1, DMIPMAP2, and DMIPMAP3. This will cause
	  the mipmapped versions to come into effect sooner.
	  I recommend something like 8, 15, and 30 if using 640x480.
	- When reading the config file, also recognize 'true' and 'on'
	  instead of only 'yes' for boolean options.
	- New BLEND_MIPMAP option in cryst.cfg. If set to yes, mipmap level
	  0 (the original texture) is blended in a prepass. After this
	  the normal mipmap creation occurs (depending on the setting
	  of MIPMAP_NICE). If the resolution is high enough and depending
	  on what textures you use, this can give a nice result. There
	  is no performance penalty with using this option (which is
	  not true for MIPMAP_NICE=verynice).
	- Show MIPMAP_NICE setting at init.
	- Mipmapping is calculated much better now since mipmap levels
	  which are two levels away from each other are now calculated
	  in one pass instead of two (previously every mipmap level was
	  calculated using the previous mipmap level. Now, mipmap levels
	  can be calculated using a still earlier mipmap level).
	  This results in much nicer mipmaps (with less displacement
	  as well).
	- Added three configuration options: MIPMAP_FILTER_1, MIPMAP_FILTER_2,
	  and BLEND_FILTER. MIPMAP_FILTER_1 is a 3x3 box filter which is
	  used for mipmapping one level. MIPMAP_FILTER_2 is a 5x5 box
	  filter which is used for mipmapping two levels.
	  BLEND_FILTER is a 3x3 box filter which is used for blending
	  (either with BLEND_MIPMAP=yes or for MIPMAP_NICE=vernice).
	- Better init messages.
30-May-1998
	- Fixed two bugs for compiling CS on Windows version with
	  Watcom C++.
29-May-1998
	- Fixed bug with calculation of 8 and 16-bit floating light tables.
	  Blue and green floating lights were wrong (they looked right from
	  a distance but in fact where not right at all).
	- Received a new patch from Andrew Zabolotny with the following
	  changes:
	    - DrawPolygon is VERY good now. At last, this version of
	      DrawPolygon does not wobble anymore, it does not overflow
	      (but we still need the overflow tests in draw_scanline),
	      and there are no gaps between polygons (this was fixed
	      before, I'm just summarizing here).
	    - Added dynamic font selection to SimpleConsole based on
	      display resolution. With 320x200 a VERY TINY font is
	      selected (looks a bit ugly, see a change from Jorrit
	      below).
	    - Added WINDOWX, WINDOWY, WINDOWWIDTH, and WINDOWHEIGHT
	      to cryst.cfg for OS/2. They control window position and
	      client rectangle size.
	    - Bugfix in OS/2 port.
	- I added a CONFONT configuration file option so that you can now
	  control which font is choosen. Default is 'auto' which will
	  use the automatic font selection from Andrew. Other options are
	  'tiny' (a very tiny font), 'courier' (the font used in the last
	  two revisions), and 'police' (the original font used in all previous
	  versions of Crystal Space).
	- New Watcom/DOS port by Slavik Levtchenko. Not guaranteed to work
	  'from-the'shelf'.
	- Updated docs/config.txt for all new (and some old) configuration
	  options.
	- *** Release of 0.09_034 ***
	- The startup message really appears on the graphics window now.
	- Small fixes from Nathaniel for Windows port.
28-May-1998
	- Added X specific function to SysGraphics2D which is used while
	  simulating a 15/16-bit display on an 8-bit display. It will replace
	  the standard 3:3:2 truecolor palette with a palette specifically
	  designed to view the current frame. The palette will be optimal
	  for the frame. This function is assigned to the F1 key.
	- Added F2 key for simulated palette. This key restores the
	  standard 3:3:2 truecolor palette.
	- Moved initial Crystal Space message so that it appears on the
	  open graphics window.
	- Moved F2 key to F3 and add function to calculate greyscale
	  palette to F2 key (for simulation of 15/16-bit on 8-bit display).
	- Added virtual function 'perform_extension' to csSystemDriver.
	  With this function specific ports can add system dependent
	  extensions. The X version uses this mechanism to add the
	  functionality for the F1, F2, and F3 keys as explained above.
27-May-1998
	- Fixed bug with the recalc of lightmaps. Now it should correctly
	  recalculate stuff. There were actually two bugs: the first one
	  has to do with light which couldn't pass through portals anymore
	  and the other bug was that thing surfaces were not correctly
	  lighted.
	- Removed extra Clear in console because I will fix the SHM problem
	  an other way later.
	- Andrew Zabolotny send me another patch which greatly increases
	  the stability of the triangle drawer. The triangle drawer doesn't
	  wobble at all :-) Now we only need to eliminate the small remaining
	  wobble in DrawPolygon.
	- Added new '-sdepth' commandline option to the X port. With this
	  option you can simulate a certain display depth. For example, let's
	  assume that you are running an 8-bit display but you want to test
	  if your 16-bit draw_scanline routine is running allright. Then
	  you can just run Crystal Space with '-sdepth 16'. The display
	  will still be 8-bit but all the rest of Crystal Space will think
	  that it is running in 16-bit. Note that this option decreases the
	  speed considerably since the ::Print function does the conversion
	  every frame. Also the quality is not very good since 16-bit
	  is simulated on 8-bit by converting to a 3:3:2 truecolor format.
	  Note that 8-bit simulation on 16-bit has not been tested yet. It
	  may work but it can just as well not work. I will test this
	  tomorrow.
	  In future I will add the possibility of simulating 8 or 16 bit
	  on a 24-bit display. That way you can test and run the X version
	  of Crystal Space even if your display is set to 24-bits.
	- *** Release of 0.09_033 ***
	- As suspected, simulation of 8-bit on a 16-bit display was
	  not completely ready yet. But now it works.
	- Added support for function keys F1 to F12. Only the X port
	  supports these at the moment.
26-May-1998
	- Added MSG_DEBUG_xF options for CsPrintf. These flush the output
	  to debug.txt to make sure that the output will surely be
	  there in the event of a crash.
	- Added 'sanity' call in several of the main world classes to have
	  a way to check if the object is still valid.
	- New patch from Andrew Zabolotny:
	    - DrawPolygon should not 'wobble' anymore (or wobble less) :-)
	      I checked it, and it still wobbles but it is better now.
	    - Unfinished work on the triangle drawer (for sprites). It
	      is now already more accurate (but still not perfect).
	- Added a lot of CHK() macro calls to various 'new' and 'delete'
	  calls so that I could use the memory debugger.
	- I had to disable the assembler version of Scan16::draw_scanline_map
	  because it crashed. Andrew will have to look at this I think.
	- Added Scan16::draw_scanline_z_buf and
	  Scan16::draw_scanline_z_buf_private. These two missing functions
	  are needed for z-buffered, unlighted, 16-bit texture mapping.
	- Fixed fps/stats/coords printing so that it uses the console
	  foreground color instead of hardcoded 255. Hardcoded 255 would
	  give white on 8-bit displays but some dark blue on 16-bit displays.
	  Now it gives whatever you have set for the console foreground
	  color (default white).
	- I had to add an extra Clear with a different color to the
	  Print of console. Otherwise I would get flashing black parts
	  on the console (depending on the amount of text displayed).
	  I don't know why. I suspect that this is a bug in the SHM
	  because if I disable SHM everything works fine without the
	  clear. Hmm, maybe there is a reason. In the current version
	  of the console the 3D display is no longer rendered. This means
	  that the console updates MUCH faster. Maybe too fast. This would
	  also explain why the problem lessens if the amount of text
	  increases. If the amount of text on the console is high the
	  update will be slower. Maybe I need to wait before the SHM
	  copy is finished or something?
	- If SHM extension is enabled for X version it will autodetect
	  if SHM is available and automatically disable it if not.
25-May-1998
	- Two fixes for Windows version from Nathaniel.
	- Applied patch from Andrew Zabolotny with the following changes:
	    - New DrawPolygon routine which doesn't have any gaps between the
	      polygons!!!  Unfortunatelly it no longer has sub-pixel/sub-texel
	      accuracy which means that textures 'wobble' when you move slowly
	      towards them.  So the old DrawPolygon (which can be re-enabled in
	      render/graph3d.cpp if wanted) looks nicer but has problems with
	      the borders while the new DrawPolygon has perfectly fitting
	      polygons but it doesn't map the texture as smoothly.  Can someone
	      who understands sub-pixel/sub-texel accuracy have a look here?
	    - 'table_white8' is no longer recomputed if not needed.  There was
	      a bug with color 0 being selected by the random color picker.
	      But 0 is not a valid color in CS textures.
	    - Removed csGraphics2D::Ready ().  BeginDraw() returns a bool which
	      indicates if graphic context is ready or not.
	    - BeginFrame is replaced with BeginDraw and can be used both for
	      selecting 3D rendering mode or 2D rendering mode.	 There can be
	      multiple switches to 3D graphics and 2D graphics without having
	      to call FinishDraw() in between.
	    - Direct3D port has been changed to work with above changes.  It is
	      possible that this broke the Direct3D port (although care has
	      been take that this should not be the case).
	    - Changed font in SimpleConsole to proportional Courier.  This way
	      a little more text fits horizontally in 320x200.
	    - Fixed bug with incorrect texture mapping when lighting is turned
	      off.  The bugfix may even speed up the lighted texture mapper a
	      little (>>shifter_w is replaced by >>16).
	    - Create an assembler version of 16-bit draw_scanline_map routine.
	      For Andrew this gives a speed gain from 22 fps to 24 fps.
	    - Almost fixed texture coorindates overflow BUT still by adding
	      other tests under the STUPID_TEST define.	 At least it is more
	      stable this way.	But more work still needs to be done here.
	    - Fixed a bug in Textures::compute_palette ().  Alloc[255] has been
	      set to false here.  This caused CSWS not to display white color.
	- *** Release of 0.09_032 ***
22-May-1998
	- Added DemoWrite virtual function in csSystemDriver which can
	  be overridden by an application to provide better functionality
	  in case of MSG_INITIALIZATION (for new Printf() routine).
	- LINEMAX configuration file option is now checked. You can now
	  safely say LINEMAX=100000 and this will be truncated to the
	  actual number of lines that you have available.
	- If you compiled the Windows version with no DIRECT3D compiled
	  then the 'auto' DRIVER configuration option would not work.
	  I fixed it so that 'auto' is equivalent to 'software' when
	  DIRECT3D is not included.
	- Changed all (most?) debugprintf/conprintf/pprintf calls to
	  the corresponding CsPrintf call.
	- Crystal Space immediatelly opens the display now and starts
	  displaying startup messages there. I hope this doesn't give any
	  problems on the different ports. Please tell me if there is a
	  problem with this.
	- Used MessageBox in windows to create specific Alert and Warn
	  functions in SysSystemDriver (untested).
	- *** Release of 0.09_030 ***
	- Got a patch from Ivan Avramovic <iavramov@ibm.net> which makes
	  the matrix/vector functions better.
	- *** Release of 0.09_031 ***
21-May-1998
	- DJGPP port works correctly now. The keyboard handler has
	  been fixed and 16-bit mode is support if you compile CS
	  with ALLEGRO enabled. Since only the ALLEGRO version supports
	  15/16-bit this is now enabled by default in the makefile.djg.
	  The non-ALLEGRO version does not support 16-bit yet but it
	  is functional. Use -depth or DEPTH to enable 15/16-bit mode.
	- Put a virtual destructor in Portal to prevent warning from
	  recent GCC versions (PGCC in my case).
	- Changed X11 port to use X Windows only and not the X Toolkit.
	  This gives more control over when and how I open the window
	  and also allows to put data on the window at startup (this is
	  going to be needed later). Note that this is a fundamental
	  change and I hope that it doesn't break things.
	  Move old versions of xwin.cpp and xwin.h to attic in case I
	  need to revert to them for whatever reason.
	- SysGraphics2D::Open of the X11 port opens the window instead
	  of the constructor.
	- Add virtual FlushOutput () to csGraphics2D. This is needed
	  for X Windows which needs some extra action before the
	  graphics is really displayed (unless you are in the standard
	  event loop).
	- Added debug_level to csSystemDriver to indicate the global
	  debugging level of Crystal Space.
	- Added Printf to csSystemDriver which should be the only
	  printf routine that is ever called from now one (keep in
	  mind that I haven't hunted down all printf, pprintf,
	  debugprintf, ... yet). Printf has a mode parameter which
	  indicates what the reason is for printing and thus also
	  where the message should appear (debug.txt, console or
	  standard output).
	- Added virtual Alert and Warn routines to csSystemDriver which
	  should be overriden if you want a real alert (like a MessageBox
	  or something). Alert and Warn are called from the new Printf
	  routine.
20-May-1998
	- Little fix in djgpp.cpp.
	- Added new console command 'ilace', new commandline options
	  '-ilace' and '-noilace' and new configuration file option
	  INTERLACE (yes or no). With this option you can enable
	  interlacing. This only works for the software version but
	  it can greatly speed up the frame rate (double in some
	  cases). The downside is the motion blur when moving (although
	  this can also be seen as a nice side-effect).
	- Little fix for windows version (also remember to add portal.cpp
	  to the project file).
19-May-1998
	- Received new installation instructions for Amiga from Maurice
	  Vosmeijer.
	- Fixed bug which caused the colors of some levels to be wrong
	  in true_rgb mode.
	- Enhanced Portal class. It now contains all code to warp space
	  and also a virtual function 'draw' which actually performs
	  the needed operations for drawing a new sector through a portal
	  (including space warping). Portal can now be subclassed so that
	  you could have portals to other engines (landscape engines for
	  example). Just make a subclass of Portal and provide a new
	  definition of 'draw'.
	  Removed all portal functions from Polygon3D.
	- Fixed a few bugs and made the code more robust so that the
	  LIGHTMAP_SIZE configuration flag actually works. Set LIGHTMAP_SIZE
	  to 4 or 8 for more accurate lightmaps (less blocky). Note that
	  this increases the size of the lightmaps (they will be recomputed
	  automatically so don't try this on large.zip unless you have a
	  fast computer) and decreases the speed of the texture cache.
	  mirror.zip is a level where you can experiment quickly (it is not
	  very large) and the blockiness is very visible there.
	- Enhanced Portal class again and also made a new PortalCS class
	  which encapsulates the current Sector based implementation.
	  I also added a lot of lighting and collision detection functions
	  to Portal which also need to be implemented by every subclass.
	  Here I have a little problem. Much is dependent on Polygon3D
	  and Sector. But both are structures which might not be needed
	  by another engine. So I need to make the routines more general.
	  I can try to make a new class Region which encapsulates a
	  general region where you can be (currently only sector, but
	  specialized regions can then be made for landscapes for example).
	  The problem is that Sector already inherits from PolygonSet so
	  I can't easily let Sector inherit from Region as well. So I'll
	  have to use object decomposition.
	  For Polygon3D I could use PolygonInt which is already a superclass
	  of Polygon3D. But I'm not sure that is good enough.
	- Added the new csRegion class (unused yet).
	- *** Release of 0.09_029 ***
18-May-1998
	- Received new patch for Windows/Direct3D version from Dan Ogles.
	- Received new patch from Andrew Zabolotny with the following changes:
	    - Changes on OS/2 port and CSWS.
	    - Two new documents: csws.html (for the Window System) and
	      os2notes.html (specific OS/2 notes).
	    - Replaved NO_DIRECT3D by DO_DIRECT3D (positive option instead
	      of negative).
	    - Bugfix in Archive. precalc.zip will now correctly be
	      created even if it didn't exist before (that was not
	      the case previously).
	- Changed cs.mak so that just typing make will show a help with
	  all possible targets. Type 'make -f ... cs' to just make the
	  Crystal Space demo (WalkTest). (Note! Currently only CS seems
	  to work correctly, there are problems with the other programs
	  probably due to conflicts between the patch from Dan Ogles and
	  the one from Andrew Zabolotny).
	- Removed -arep/-noarep and AUTOREP options for X11 version of CS
	  since these are no needed with the new keyboard system. As a
	  consequence there is also no need anymore to delay quitting
	  CS until the next event.
	- Received new project files for Windows/Visual C++ from Dan Ogles.
	- *** Release of 0.09_028 ***
15-May-1998
	- Made several of the error messages clearer (also include a short
	  help of what could be done to fix the problem).
	- *** Release of 0.09_027 ***
	- Removed gdd16.* since it is no longer needed (integrated in
	  win32.cpp).
	- Fixed win32 port as directed by Nathaniel.
	- I have confirmed that the SVGALIB port works in 15/16-bit mode
	  (I have been able to get my SVGALIB working ok).
	- The type of texture system and mixing mode is now also put
	  in debug.txt for diagnostics.
	- For some strange reason my GNU LIBC on my new Stampede Linux
	  system seems not to support milliseconds for clock() and ftime()
	  (they are only accurate up to a second). I don't know why this
	  is and if this is considered normal. But I had to fix this by
	  changing the linux and svgalib verson of timing.cpp. It now use
	  times() which is a bit less accurate (100 times per second).
14-May-1998
	- Split World::load_file into World::load_file and World::initialize.
	- I tried to make sure that completing the pixel format structure
	  (pfmt) should only be done in Open but I failed. Too many of
	  the internal computed stuff depends on the pixel format (the whole
	  initialization of Textures). So for now, the initialization of
	  pfmt SHOULD happen inside the constructor of SysGraphics2D!
	- Got the much needed patch from Dan Ogles to let the Windows/Direct3D
	  port work correctly. There is now also support for 16-bit mode.
	  Many thanks to Bart van Langen as well for also sending a similar
	  patch. Unfortunatelly for him the patch from Dan Ogles was somewhat
	  more finished.
	- *** Release of 0.09_026 ***
	- Received yet another cleanup patch from Andrew Zabolotny.
	- Error at line 355 in win32.cpp. Blue and green were reversed.
	- Better error checking in ::Open of system dependent classes.
	  They actually return false to the top-most caller if there
	  is an error.
	- SVGALIB port should work as far as I know but for some strange
	  reason the 16-bit modes don't seem to work for me.
13-May-1998
	- Update SVGALIB version for new keyboard system.
	- Added WalkTest::world_file so that you can again specify
	  the world file from the commandline (this didn't work anymore).
	- Screen is now properly cleared the first time you start
	  Crystal Space in the X version.
	- precalc.zip is now supported better. It is no longer part
	  of the main file but supported inside the World class.
	  This way you can more easily do development on world files
	  without having to make a zip file for them. Crystal Space
	  will just use precalc.zip to store all precalculated
	  tables and lightmaps.
	  Currently there is still a bug. If Crystal Space is run
	  with precalc.zip empty or non-existant then only one
	  file will be added to precalc.zip. The next time you run
	  Crystal Space it will be correct however. A fix is to just
	  create precalc.zip with some dummy file (Crystal Space will
	  just ignore it).
	- Better error checking for reading the textures. Actually,
	  the error checking was ok but it didn't print any messages
	  (just failed silently).
	- Replaced all 'INTERNAL ERROR' messages with 'ENGINE FAILURE' :-)
	- Received a new patch from Andrew Apted fixing his GGI port
	  for the latest Andrew-Zabolotny-patches.
	- Made signal handler in SVGALIB and X11 versions better. It no
	  longer causes a series of crashes if the program is just interrupted
	  and it does not dump the whole world to debug.txt if ^C is pressed
	  (thanks to Andrew Apted for this).
	- Moved the closing of the windows console to a after the main loop.
	  Somehow it moved before main_loop which would close the console
	  to early (pprintf is still used later on for diagnostics).
	- Split Textures::load into Textures::load and Textures::initialize.
	- Maurice Vosmeijer <Maurice.Vosmeijer@ehv.sc.philips.com> reported
	  a few needed changes to make the Amiga port work better (at least
	  compile).
12-May-1998
	- Received yet another patch from Andrew Zabolotny with the
	  following changes:
	    - WinMain has been moved to win32.cpp. The program's entry
	      point is now always main().
	    - Keyboard::Fill and Mouse::Fill have been removed.
	    - All global variables have been moved in respective
	      classes as static variables.
	    - All debug variables have been moved into
	      general/walktest/main.cpp.
	    - All switches related to debugging have been moved
	      into keys.cpp.
	    - All commands related to debugging have been moved
	      into keys.cpp.
	  See README2.Andrew for more information from Andrew
	  himself.
11-May-1998
	- Added several draw_scanline functions for drawing unlighted
	  textures in private mode.
	- Added unlighted, 16-bit, private mode texture drawer.
	- Received patch from Andrew Apted for 16-bit support for his
	  GGI port. Note that his 16-bit support currently hardcodes
	  5:6:5 format for RGB.
	  The GGI port reads the DEPTH field in 'cryst.cfg' for selecting
	  the right depth and also supports the -depth commandline option.
	- Received a large patch from Andrew Zabolotny with the following
	  changes:
	    - Console has been enhanced: it has a cursor, it works in 16-bit
	      and Crystal Space does no longer render when the console is
	      active. This last part greatly enhances the typing speed (up to
	      a point where the console will become unuseable on certain
	      ports: see the README.Andrew from Andrew on how to fix this for
	      some port).
	    - csGraphics2D has been enhanced to work in 16-bit mode.
	    - Many global variables have been removed. Repeat after me!
	      'Global variables are evil!', and say this three times :-)
	    - 16-bit support for OS/2 (using DEPTH in cryst.cfg and
	      -depth 16 on the commandline).
	    - Included a test for the Crystal Space Window System.
	      It is in general/cswstest. To build it defineu
	      CSWSTEST=cswstest.exe or whatever in your makefile.???.
	    - Fixed bug for transparent textures.
	    - Scaling of 2D sprites.
	  I included the file README.Andrew for you to read. It documents
	  his changes. Please try to implement the new keyboard handler
	  system as is explained in that file.
	- Fixed console patch so that the transparent console works again
	  as expected.
	- *** Release of 0.09_025 ***
10-May-1998
	- Added a number of documents. Split a number of documents
	  into smaller documents. Moved a few documents.
9-May-1998
	- Andrew Zabolotny was so nice to switch keys to uppercase
	  when shift is pressed. As a consequence several keys
	  didn't work anymore because keys.cpp didn't expect this.
	  I fixed keys.cpp.
8-May-1998
	- document.txt updated for new display modes.
	- *** Release of 0.09_024 ***
7-May-1998
	- Transparency didn't work correctly in truergb mode.
	- The conversion from RGB to WRB was not very good. The
	  reason was that the palette was computed the old way (adjusting
	  for ambient values) and this is not needed anymore.
	- Added some lookup tables (yes, new ones :-) for supporting
	  colored floating lights in 8-bit display mode in combination
	  with true_rgb mixing mode.
	- Removed the fast_rgb mode (NOT the fast_wxx modes) because it
	  is ugly (really ugly) and you should use true_rgb instead.
	- Started adding support for textures with private colormap.
	- Added commandline option -txtmode to set the mode that the
	  textures are in ('global' (as it was), 'private' (private
	  colormap, and '24bit' (pure 24-bit)). '24-bit' is not
	  supported yet.
	- Added config file option 'TXTMODE' for the same thing.
	- Private colormap support almost works but currently for 8-bit
	  display only and unlighted textures are not drawn correctly.
	- *** Release of 0.09_023 ***
	- 'private' colormap mode also works for 16-bit display mode.
	- Bug fixed when reading the local 'cryst.cfg' file. The TXTMODE
	  was overwritten. The local 'cryst.cfg' can also contain
	  the TXTMODE field.
6-May-1998
	- Converted lights to always work with R,G,B. The WRB mode
	  will be implemented by converting the lightmaps instead
	  of changing the lights. This way the ugliness of the WRB
	  mode will only be visible in one place.
	- Lightmaps are now always saved in R,G,B mode and only
	  converted at run-time to W,R,B or NOCOLOR if needed.
	  This means that lightmaps never need to be recalculated if
	  you switch a mixing mode or if you go to Direct3D mode or 16-bit
	  mode.
	- The dynamic extension upon the static lights also work correctly
	  now (RGB).
	- The NOCOLOR mode works again (there was a problem with the
	  creation of the po2 lightmaps). (note NOCOLOR will currently
	  not work in 16-bit mode).
	- Much better lookup table system. It is cleaner, only the
	  tables that are really needed are allocated, and it even
	  works :-)
	- The precalculated tables are now called 'table_fast_xxx',
	  'table_white8', and 'table_alpha'. ('light.tables' and
	  'alpha.tables' are no longer needed and can be removed from
	  your zip files).
	- Added -mixing commandline option so that you can set the
	  mixing mode from the commandline (previously this could only
	  be set from cryst.cfg (either local or global).
	  The commandline option overrides the options in cryst.cfg
	  (but going to truecolor mode still overrides these options).
	- Added -fastrgb and -slowrgb mode so that you can set
	  the slow (but accurate) and fast (but inaccurate) modes
	  from the commandline. Same behaviour as with mixing command-
	  line option.
	- Updated documentation a little (document.txt) for the new
	  features.
	- *** Release of 0.09_022 ***
	- Fixed bug in 16-bit mode with unlighted textures. Unlighted
	  textures don't work yet but they were not ignored as they
	  should.
	- Changed X port a little so that it doesn't draw if the window
	  isn't ready yet (GetPixelAt (0,0) should be different to 0).
	- Transparent scanline drawer implemented in 16-bit.
	- Unlighted texture drawer implemented in 16-bit.
	- Sprites work in 16-bit mode. The drawer uses an extra
	  lookup to convert 8-bit to 16-bit but this extra lookup
	  was going to be needed anyway for future sprite lighting.
	- Floating lights work in 16-bit mode (but no very efficient).
	- Added new lookup tables for floating lights in 16-bit.
	  These lookup tables could be consider optional (maybe
	  I will make them an option in future) but with them you
	  can have colored floating lights (red, green or blue only;
	  no mixing possible).
	- 16-bit alpha mapper is now no longer hardcoded for my
	  system.
5-May-1998
	- Made 16-bit texture cache a subclass of 8-bit texture cache.
	- Received Yet Another Patch from Andrew Zabolotny on his
	  window system.
	- *** Release of 0.09_021 ***
	- First visibile results of 16-bit mode!!! It seems to work
	  and it looks nice :-)
	- Added -recalc commandline option to force recalculation of
	  the lightmaps.
	- Z buffer scanline drawer works in 16-bit mode as well.
	- First version of 16-bit alpha mapping (does not work correctly
	  yet).
5-May-1998
	- Started work on 16-bit mode.
	- First add support to system dependent classes for getting
	  the format of a pixel.
	- Add 16-bit support in the calculation of the lookup tables.
	- First implementation of a 16-bit texture cache.
4-May-1998
	- Received new patch from Andrew Zabolotny on his window
	  system.
1-May-1998
	- Received new patch from Andrew Zabolotny to his triangle
	  drawer routine.
28-Apr-1998
	- Received a patch from Dan Ogles so that the windowed palette
	  mode works now.
	- Received a better version of the DrawTriangle routine from
	  Andrew Zabolotny. It still overflows but not very often.
	  More work needs to be done yet. This version also doesn't
	  have subpixel/subtexel correction so the texture wobbles
	  a bit :-)
	  The code from Andrew is in render/drawtri.h and it included by
	  render/graph3d.cpp.
	- *** Release of 0.09_020 ***
27-Apr-1998
	- Received a new patch from Andrew Zabolotny on his window
	  system and a small change to the system dependent classes.
24-Apr-1998
	- Received a new Direct3D patch from Dan Ogles.
	- Added 'render/drawtri.bug' which is a cleaner implementation
	  of DrawTriangle. But it doesn't work correctly!
	- *** Release of 0.09_019 ***
17-Apr-1998
	- Thanks to a suggestion of Duane McDonnel I changed my triangle
	  texture mapping code to a more stable formula to calculate the
	  constant du, dv, and dz. This still doesn't quiet fix the overflow
	  problems but we're getting there (slowly)...
	- Received a working Amiga port from Ralf Eisele
	  <eiselera@pcpool1.informatik.uni-ulm.de>.
	  There are specific Amiga installation instructions in the
	  'INSTALL' file.
	- Collision detection with walls is better. It is (normally)
	  no longer possible to cross two portals at once and end in
	  never-never land :-)
	- Collision detection with things is implemented.
	- Received a lot of patches from Andrew Zabolotny for his csws
	  system (window system) that he is going to use for his editor.
	  There is also support for more than one font (instead of only
	  police.fnt). This support is not used in Crystal Space yet.
	- *** Release of 0.09_018 ***
16-Apr-1998
	- Received patch for GGI version from Andrew Apted.
	  All event names have changed from ev... to csev.... This is
	  because there are clashes with the GGI system.
	- (u,v) overflow in 3D triangle drawer will be a little better
	  (but not fixed completely though).
14-Apr-1998
	- Received a large patch for Direct3D. This should solve most
	  of the problems (according to Dan Ogles). There is also support
	  for the new 3D sprites.
	- Made the initial viewport a little larger (the border arround the
	  screen is somewhat smaller).
	- *** Release of 0.09_017 ***
11-Apr-1998
	- Optimized sprites a little:
	  if frame rate is 9.6 (640x480) without the sprite, it will go
	  to 4.2 while displaying a fullscreen sprite with 18 visible
	  and 18 invisible (backface culled) triangles.
	- Moved old non-functional sprite code (sprite.* and gvo.*) to attic.
	- Split sprites into SpriteTemplates and sprites. A sprite
	  is spawned from a sprite template which contains the definition
	  of the sprite and frames.
	- Added FRAME command to sprite. This sets the starting frame.
	- Updated todo.html, who.html and worldfmt.txt.
9-Apr-1998
	- Added SPRITE command also to ROOM statement.
	- Updated world format document for sprites.
	- Added a new level sprite.zip which demonstrates two simple sprites.
	- *** Release of 0.09_016 ***
	- Display of edges works for 3D sprites (debugging).
	- Added debugging capabilities for sprites (dump routine).
	- Visibility check for 3D triangles (sprites) is better (less
	  artifacts when a sprite is partially visible).
	- Remove GetZBuffer call I had to add to Graph3D. It is no
	  longer needed since G3DTriangle is part of Graph3D.
8-Apr-1998
	- Nathaniel sent me an update to the Windows port. The
	  Direct3D port has not been tested however.
	- I did a few modifications to the GGI port so that it may
	  actually be closer to working. But I can't test it.
	- *** Release of 0.09_015 ***
	- Received project file for Windows version (Visual C++).
	- A few new fixes from Nathaniel which I forgot.
	- Added csSprite3D class!! This is a 3D sprite class which
	  is based on triangle meshes and a single texture.
	- Added SPRITE command to SECTOR statement.
	- Extended Graph3D with a G3DTriangle and a DrawTriangle.
	  This is used by the csSprite3D class. Hardware accelerated
	  versions can then provide their own versions of DrawTriangle.
7-Apr-1998
	- Made a new document ('warping.txt') which explains space
	  warping a bit.
	- Nathaniel sent me an update to the Watcom/DOS port. It should
	  work now with the new system dependent classes.
	- *** Release of 0.09_014 ***
6-Apr-1998
	- Changed format of Z buffer from 16:16 fixed point to
	  8:24 fixed point. This extra precision is not needed for the
	  Z buffer itself but for the texture mapper which does a Z
	  fill and requires this precision. Keep in mind that the Z
	  buffer contains 1/z, so a maximum value of 256 is rather
	  sufficient.
	- Changed selection of mipmapping level according to the mean
	  Z distance between minimum and maximum Z depth of the polygon
	  instead of only the minimum. I think this is better.
	- Alt and Ctrl were swapped. This error was caused in
	  util/input/csinput.cpp in the 'new csEvent' calls. I fixed this.
	- Decreased the 'SMALL_D' component test from 0.06 to 0.01.
	  0.06 was too large and caused visible polygons to become
	  fully flat.
4-Apr-1998
	- Added even more debugging facilities. Pressing with the
	  mouse button will not only dump the value of the Z
	  buffer at that point but also check all polygons that
	  are drawn at that point (show the names on stdout)
	  and dump them in debug.txt.
	- Extended the Graph3d class with a DrawPolygonDebug function
	  which does exactly the same as DrawPolygon except that it
	  doesn't draw anything but instead dumps all internal
	  calculated values to debug.txt. This is of course also useful
	  for debugging purposes. DrawPolygonDebug is automatically
	  called instead of the usual DrawPolygon for all polygons
	  that you click on with the mouse.
3-Apr-1998
	- *** Release of 0.09_013 ***
	- Fixed a bug. The MIPMAP and LIGHTING settings did not
	  transfer from THING templates to THINGS.
	- Flat texture mapper correctly fills the Z buffer now.
	- Added code so that pressing mouse button will dump the
	  contents of the Z buffer at that location (for debugging
	  purposes).
	- New command 'things' to toggle the displaying of
	  Things on/off (default on). Also assigned to the 'ctr-t'
	  key.
2-Apr-1998
	- Made sure SVGALIB and DJGPP work under the new system
	  classes.
1-Apr-1998
	- Andrew Zabolotny send me some MAJOR MAJOR patches to the
	  system dependent stuff. There are a lot of new support
	  classes (see system/system.h and also util/input/*).
	  The X port (Solaris, Linux and general Unix) work with
	  the new changes (only Solaris has currently been tested).
	  The OS/2 port will also work (since this is the one that
	  Andrew uses). The other ports are changed but have not
	  been tested. I will test DJGPP and SVGALIB myself tomorrow
	  but the other ports will have to be tested and possibly
	  corrected by the respective creators.
	- Included with Crystal Space is a new window system (see
	  the 'csws' directory). This is going to be used for the
	  Crystal Space editor (MazeD) but there are undoubtedly other
	  uses. Andrew wrote this.
	- The MazeD editor is already included but it is not
	  functional yet. Andrew wrote this.
	- There is a new 2D sprite class. It is currently not fully
	  integrated yet (i.e. you can't just put a 2D sprite in the
	  world yet). Andrew wrote this.
	- Andrew (he seems to have a lot of time :-) also converted
	  the makefile system again. 'make.dep' does not exist anymore.
	  Instead it is 'cs.mak'.
	- IN GENERAL I STRONGLY RECOMMEND DELETING ALL OLD FILES
	  BEFORE INSTALLING THIS NEW VERSION. Many files have moved
	  or have been deleted and it will be confusing if any old
	  files are still present.
	- I added support for more mouse buttons in X version (just
	  so I could add something from myself here :-)
	- Fixed bug in util/def.h which would prevent the SVGALIB
	  port from compiling.
	- Removed 'virtual' in constructor of SVGALIB system dependent
	  graphics class (to remove warning from GCC).
30-Mar-1998
	- A few fixes to include files for Win32 version (thanks to
	  Nathaniel).
	- The history file has been turned around :-) (only the days though,
	  the items in each day are still chronological from top to bottom).
27-Mar-1998
	- Sebestyen Zoltan <szoli@valerie.inf.elte.hu> mentioned how I could
	  convert makefile.lnx so that it works under BSD. From that info
	  I created makefile.bsd.
	- The PolyPlane::set_texture_space functions now use the standard
	  TextureTrans class which was already present but just not used.
	- Removed various includes which were not really needed and also
	  wrong with the layered hierarchy (for example, something in
	  'engine' should not be concerned with 'scripts').
	- Split key handling from general/main.cpp to general/keys.cpp.
	- *** Release of 0.09_012 ***
26-Mar-1998
	- Removed ViewPolygon class because Polygon2D offers the same
	  functionality.
	- Updated todo.html.
	- Choose between optimization, debugging or profiling can now be done
	  from make.dep instead of makefile.*. The makefile.* define
	  HOW_OPTIMIZE, HOW_DEBUG and HOW_PROFILE and in make.dep you choose
	  one.
	- Moved G3D_ID from render to engine and renamed it to CS_ID.  The
	  unique ID of every CsObject is logically a part of the engine and not
	  of the renderer.  The renderer just uses that ID.
	- 'make clean' does now only clean the Crystal Space directory
	  and not zlib, libpng or libjpeg.
	- *** Release of 0.09_011 ***
	- Moved camera.h from 'general' to 'engine'. It was accidently put
	  in 'general' but it really doesn't belong there.
	- Split physics class from Camera class. There is now a
	  PhysicalObjectInt class which serves as an interface (again JAVA
	  terminology). An object must inherit from PhysicalObjectInt so
	  that the Physics class can operate physical properties on it.
	  Camera inherits from PhysicalObjectInt.
25-Mar-1998
	- Removed a few global variables from main.cpp.
	- Moved create_lighted_texture_... functions from PolyTexture
	  to TextureCache. They are logically part of the software texture
	  cache and not of the 'engine' layer.
24-Mar-1998
	- Created new PolygonInt and PolygonParentInt classes. These classes
	  have no implementation and no data. They serve as 'interfaces' (in
	  JAVA terminology). PolygonInt is defined in 'geometry' and serves
	  as the interface between the BSP (which is also in 'geometry') and
	  Polygon3D (which is in 'engine'). Polygon3D inherits from PolygonInt
	  (with multiple inheritance) so that it can be fed to the BSP tree
	  class.
	  This kind of interfacing is an experiment to see if it is useful and
	  general enough. Using this it should be possible to create BSP trees
	  for any kind of polygon without having to create a new BSP class.
	  IMPORTANT! Multiple inheritance in C++ is not very clean. You have to
	  be very careful. For example, it is possible to cast from PolygonInt*
	  to Polygon3D* and the other way around. However, it is NOT possible
	  to cast from PolygonInt** to Polygon3D**!!!!! The reason is that
	  casting from PolygonInt* to Polygon3D* changes the internal value of
	  the pointer (because of multiple inheritance) and this cannot be
	  done in general when casting PolygonInt** to Polygon3D**.
	- Received patch from Dan Ogles to Direct3D. Lightmap-rendering code
	  is temporarily disabled because it doesn't work.
	- Split texture cache code from texture.h and moved it to
	  render/software/tcache.*.
	- Removed 'textures' and 'g' from Scan class and moved them to 'World'.
	  The 'engine' layer should not refer to 'Scan' since it is part of
	  the 'render/software' sub-layer.
	- *** Release of 0.09_010 ***
	- A few patches from Nathaniel to get things working on Windows.
	  Also a new CrystalSpace.dsp (without libjpeg currently).
22-Mar-1998
	- Changed 'make.dep' to make it easier to maintain (uses even more GNU
	  make features now).  There is no need anymore to change 'make.dep'
	  when new source files are added.
21-Mar-1998
	- Started major change of directory structure so that Crystal Space
	  is structured into a more logical and layered way.
	  There are currently seven main layers:
	    - geometry (low-level 3D and 2D math layer)
	    - util (various utility classes)
	    - engine (the portal engine)
	    - render (the renderer)
	    - scripts (the scripting system)
	    - general (general stuff)
	    - system (system dependent stuff)
	  The ultimate purpose of this layered approach is that there is
	  a clean separation between the several layers and also a clean
	  hierarchical order. For example, 'geometry' contains basic
	  3D stuff and should be able to stand on its own without using any
	  of the 'engine' or 'general' stuff.
20-Mar-1998
	- I discovered that there was a clear of the Z buffer every frame.
	  This is no longer needed since Z fill is used while drawing
	  everything.
	- *** Release of 0.09_009 ***
19-Mar-1998
	- Andrew sent me a patch for mouse button support. This is needed
	  for his new MazeD project (an editor for Crystal Space).
	- 'make depend' should work now (thanks to Andrew).
18-Mar-1998
	- A few patches from Andrew: archive.* have been cleaned up.  A few
	  modifications to the OS/2 port.  Some modifications to 'make.dep'.
	- Andrew also added 'void do_focus' which should be called
	  when user switches focus from Crystal Space window to
	  other application.
17-Mar-1998
	- Received makefile for Windows NT and GCC from Paul Garceau
	  <pgarceau@teleport.com>.
	- Received new project files from Nathaniel.
	- Received Joystick source for Watcom/DOS from Nathaniel. His code
	  has been put into the contributions directory.
	- In the root of the Crystal Space distribution you will find a small
	  archive (wcc_make.tgz) containing two fixed makefiles for Watcom
	  for zlib en libpng (from Nathaniel).
	- *** Release of 0.09_008 ***
16-Mar-1998
	- Andrew Apted <ajapted@netspace.net.au> ported Crystal Space to use
	  the GGI library (more information at http://www.ggi-project.org/).
	- Enhanced mouse capabilities for DJGPP donated by Tor Andersson
	  <d97ta@efd.lth.se>.
13-Mar-1998
	- Tor Andersson send me a lot of fixes to get the DJGPP version to
	  compile correctly.
	- Fixed pngimage.cpp so that it will also work on non-GCC compilers.
	- Removed u_char, u_int, and u_long types in archive.*.
	- Tor Andersson was so nice to add JPG support to Crystal Space just
	  like I wanted yesterday :-)
	- *** Release of 0.09_007 ***
	- Another few fixes for DJGPP.
12-Mar-1998
	- Removed a few warnings that were still there. With gcc
	  and -Wall (all warnings enabled) I get no more warnings.
	- Renamed pcx.c to pcx.cpp (the only remaining file with
	  .c extension).
	- Made 'make.dep' a bit smaller using some makefile
	  tricks.
	- Added DO_TGA, DO_GIF and DO_PNG options to control what
	  graphic formats are supported.
	- Rationalized all makefiles using 'make.dep'. Only the system
	  specific stuff is now in makefile.lnx, makefile.sol, ...
	  All flags can be set from within 'make.dep'. Edit 'make.dep'
	  if you want to make configurable changes (like the above
	  DO_TGA flags and so on).
	  A consequence of this is that GNU make is required ('gmake').
	  I hope this does not cause too much troubles.
	- Added makefile for Windows for a pnglib DLL (made by Nathaniel).
	- Received new rd_jpg.c code from Tor Andersson (you can find this
	  in contributions/File.zip). Isn't someone willing to make a JPG
	  extension to Crystal Space just as is done with PNG and TGA?
	- *** Release of 0.09_006 ***
10-Mar-1998
	- Received code from Andrew Zabolotny to read PNG graphic
	  files.
	- Included libpng directory needed for reading PNG files.
	- *** Release of 0.09_005 ***
27-Feb-1998
	- Reading ZIP files finally works on a SPARC station. Let's assume
	  for the moment that all endianness and structure packing problems
	  are solved for now :-)
	- Crystal Space is now officially under LGPL. Read COPYING for more
	  details.
	- *** Release of 0.09_001 ***
 2-Mar-1998
	- Jaroslav Benkovsky <benkovsk@www.pvtnet.cz> mentioned that
	  svga.cpp includes a wrong include file. Has been fixed.
	- Fixed archive.cpp and archive.h for compile errors under Visual C++.
 3-Mar-1998
	- Changes to archive class (from Andrew Zabolotny) to support
	  read-only archives. Changes to the archive are then put in
	  a 'fallback' like directory. Using this scheme you can easily
	  distribute a game on a CD-ROM and later apply patches by
	  putting them in a separate directory. These patches will then
	  override the CD-ROM versions.
	- Little fix in watcom.cpp.
	- *** Release of 0.09_002 ***
 4-Mar-1998
	- Moved 'csar' to attic.
	- Fixed some zip (large.zip and perf.zip) files which got corrupt
	  one way or the other.
	- Fixed writing to ZIP archives. There was a problem with endianess
	  there. This problem occured whenever CS tried to replace a
	  file in a ZIP archive. The central directory entry would be
	  corrupt (although CS could still read the archive).
	- Removed executables and libraries from source archive.
	- *** Release of 0.09_003 ***
	- Dan Ogles send me a patch to his Direct3D port.
	- Dan Ogles reported a memory leak in the new archive code.
	  I fixed it.
	- Nathaniel sent me a fix so that the new archive code can
	  be compiled with Visual C++. This fix is not tested!
	- Added system independent memory debugger to Crystal Space.
	  Enable this memory debugger with -DMEM_CHECK. When this
	  memory debugger is enabled it will place boundaries of 16 bytes
	  before and after every memory block and check if it is overwritten
	  when the block is freed. It will show where the block is allocated
	  and where it is freed. It will also check for memory that is
	  freed twice or memory that has never been allocated.
	  You can also enable -DMEM_CHECK_EXTENSIVE together with -DMEM_CHECK.
	  If this is enabled CS will never really free memory but fill
	  all freed memory with a constant value ('X' in this case).
	  When CS quits it will check all freed memory and see if it
	  is still filled with 'X'. If not it will tell you what the
	  error is, dump some memory and show where the memory block is
	  allocated. This error means that some memory has been freed
	  but still used after it has been freed. As you can imagine this
	  option is VERY heavy. You need lots of memory for this (since
	  nothing is freed).
	  I checked CS with this and everything seems clean.
	- *** Release of 0.09_004 ***
 5-Mar-1998
	- Compile bug fixed in djgpp.cpp (with old graph structure).
	- Received new project file for Watcom C++ Windows version from
	  bob@imperium.ru (no idea what his name is).
	- Fixed archive for windows again (wrong include files).
	- Commandline arguments should work now in Windows version (thanks
	  to Nathaniel).
	- Added first version of syntax for world file format (worldfmt.txt).
	  This is a first step towards the full documentation for the world
	  file format.
 9-Mar-1998
	- Added a few fixes to get CS working on an IRIX/SGI system.
	  Received from Jon Heiner <jonh@MIT.EDU>
	- Changed definition of OS_UNIX. OS_UNIX is now automatically
	  defined whenever another unix OS is chosen (like OS_LINUX,
	  OS_SOLARIS or OS_IRIX currently). OS_UNIX is now the
	  prefered define to use for Unix specific features.
24-Feb-1998
	- Put new version of sound lib in contributions directory (received
	  from Nathaniel).
	- Received patch to OS/2 port from Andrew.
	- Received code to read ZIP files instead of CSAR files in Crystal
	  Space (from Andrew Zabolotny).
23-Feb-1998
	- Added OS/2 port made by Andrew Zabolotny <bit@freya.etu.ru>.
	- Added a compilation flag NO_DIRECT3D with which you can disable
	  Direct3D support. This is useful if you want to compile Crystal
	  Space on a Windows or Windows NT platform which doesn't have
	  the Direct3D stuff.
18-Feb-1998
	- Nathaniel sent me a new configuration utility with support for new
	  CONBG, COLOREDBG and LINEHISTORY options.
	- Added fixes from Dan Ogles to his Direct3D port.
16-Feb-1998
	- Nathaniel sent me some changes to his console: history of commands
	  (with PgUp/PgDn keys), wrapping of command lines which are too bug
	  for width of display and colored or transparent background (useful
	  for debugging).
	- Nathaniel sent me a new configuration utility with changed MESSAGE
	  support and new DRIVER configuration flag.
	- Added fixes from Dan Ogles to his Direct3D port.
13-Feb-1998
	- Received a few additional patches from Dan Ogles on his Direct3D
	  port with another major speed increase.
12-Feb-1998
	- Incorporated Direct3D support patch from Dan Ogles.
	  There is a new configuration file option DRIVER which you can
	  set to 'software', 'direct3d', 'opengl', or 'glide'.
	  Currently only 'software' and 'direct3d' are supported and
	  'direct3d' is only supported for the Windows port.
	- Much of the FltLight code has been moved to graph3d.cpp since
	  it is hardware dependent.
	- FULL_SCREEN variable is now available for all ports and it
	  set to the appropriate value.
	- Added new 'wincsar' utility (Windows version of csar with a nice
	  GUI) ported by Nathaniel.
	- To prevent potential problems the buffer that is read from a
	  world file is now NULL-terminated.
10-Feb-1998
	- Started creating HTML documentation using Doc++.
9-Feb-1998
	- Transparent textures work again. And better than ever! There is
	  support for lighting of the non-transparent parts and the Z buffer
	  is correctly filled so that sprites and dynamic lighting will work
	  (sprites will not work because there aren't any but you get
	  the meaning :-)
	- To prevent mapping of color 0 (which is used for transparency) color
	  0 is now mapped to 0 in all levels of light.	It couldn't be used
	  for textures in any case because 0 is reserved for black regardless
	  of gamma level (and 255 for white).
	- New draw_scanline_transp_map added to support transparent textures
	  with lighting.
	- Overflow errors in find_rgb_slow could cause the wrong color to be
	  returned (with the strange effect that the color tables are
	  recomputed every time and the undesirable effect that 255 is used
	  inside textures).
5-Feb-1998
	- Removed support for filters since it is hard to maintain, kind of
	  ugly, difficult (or impossible) to implement and hardware and can be
	  replaced in almost all cases by alpha transparency.  I moved the
	  code to the 'attic' directory for historical reasons.
	- Try to make transparent texture feature working again.
4-Feb-1998 V0.09
	- Made new class FileImage which is an abstract class for implementing
	  and recognizing different file types.	 gifload.cpp has been
	  rewritten as a subclass of FileImage (gifload.cpp has been removed).
	  FileImage supports 24-bit images.  These are scaled down to 8-bit by
	  TextureMM.
	- TGA support has been added as a subclass FileTgaImage.
	- Allocate alpha_maps instead of just declaring them. This makes
	  the executable with GCC some 128K smaller!
3-Feb-1998
	- Received a few patches and a working Watcom/DOS makefile from Bart
	  van Langen <bart.van.langen@dyme.nl>.
	- Forgot to update version number to 0.08 :-(
	- Set DEBUG=no in cryst.cfg.
2-Feb-1998 V0.08
	- Received a few patches for the DJGPP, Watcom and Windows
	  versions from Nathaniel.
30-Jan-1998
	- Output current version, screen resolution and chosen world file to
	  'debug.txt' so that we can use this together with the performance
	  test evaluation.
	- If you pressed the '2' key before the '1' key you could get a crash.
	- Collision detection of the camera with walls works again.
	- 'version' and 'about' commands work :-)
	- Made the help in the console a lot shorter (there were too many
	  commands to get on one screen). Maybe I should start thinking about
	  paging.
	- true_rgb works again. I had to add an additional white light table
	  to get it working.
	- Phil Harvey sent me a slightly faster version of find_rgb_slow.
	  This should make the startup of Crystal Space slightly faster.
	- FltLights are now known by the World class. It maintains a linked
	  list of them and draws all dynamic lights from this list every
	  frame.
	- Added 'addlight', 'dellight', 'dellights', 'picklight',
	  and 'droplight' commands to control FltLights.
	- Binded key '1' to 'addlight', 'shf-1' to 'dellight',
	  'alt-1' to 'dellights', '2' to 'picklight', and 'shf-2'
	  to 'droplight'.
	- Added ';' comment capabilities to the console (for scripts).
	- Empty lines are also ignored by the console.
	- Added five new tests to 'perf.scr' (floating light enabled).
	- Added '-exec' commandline option to execute a script. For
	  example, to start the performance tests you can now do:
	    cryst perf.csa -exec perf.scr
29-Jan-1998
	- Changed all #include's to contain a pathname relative to the
	  root of the source archive:
	    #include "world.h" becomes #include "world/world.h"
	- Removed all ugly #ifdef/#endif constructs around #include
	  statements.
	- There is a -DNO_BOOL_TYPE that you can optionally define if
	  your compiler doesn't support the 'true', 'false', and 'bool'
	  keywords.
	- From now on it is the intention that boolean return values
	  and parameters should be written with the 'bool' type.
	  And 'TRUE' and 'FALSE' should be written with 'true' and
	  'false'. This is more conformant with recent C++ standards.
	  The -DNO_BOOL_TYPE define will define 'true', 'false',
	  and 'bool' in case your compiler doesn't support them.
	- I tried to find all uses of boolean variables and replace them
	  with 'bool' type parameters. 'do_xxx' types of variables which
	  are NOT boolean have been renamed to 'cfg_xxx' to avoid
	  confusion.
	- Removed key to load world file since it is not needed and
	  currently does not work very well either.
	- Crystal Space exits graciously if it can't open the world file.
	  This is probably better than just crashing the computer :-)
	- Crystal Space exits graciously if it can't open some texture
	  file.
	- Added 'exec' console command to start an ASCII script. This
	  script can contain console commands. Every line from this script
	  is executed one line at a time at every new frame.
	- Added 'coordset' console command to set a coordinate.
	  Format is 'coordset sector,x,y,z'.
	- Added 'facenorth', 'facesouth', 'facewest', faceeast', facedown',
	  and 'faceup' commands to set the orientation of the camera.
	- Added 'cls' command to clear the console.
	- 'perftest' command also writes to 'debug.txt'.
	- Added 'cmessage' to write a message to the console.
	- Added 'dmessage' to write a message to 'debug.txt'.
	- Added 'dnl' to write a newline to 'debug.txt'.
	- Added 'perf.csa' and 'perf.scr' to have an easier way to
	  do performance tests. Just start Crystal Space with 'perf.csa',
	  switch to the console, and type 'exec perf.scr'.
	  When everything is done you will have some performance test
	  information in 'debug.txt' (appended at the end of that file).
	  You can then restart Crystal Space and do everything again but
	  first press '1' to get the dynamic light on. This will test
	  with dynamic lighting.
27-Jan-1998
	- Thanks to a suggestion of Karlis Freivalds I managed to
	  optimize the FltLight drawing a lot.
	- Fixed DJGPP and SVGALIB version so that they compile.
	- Added support for keys '0' through '9' in the SVGALIB version.
	- Added support for multi-color FltLight. Color of a FltLight is
	  specified with r,g,b but only one color (or white) can be used
	  at the same time. If true_rgb mode is used currently only
	  white dynamic lights are supported.
	- Added new project files for Watcom from Nathaniel.
26-Jan-1998
	- I discovered that the draw_scanline routines did a stupid
	  interpolation of the 1/z value every 16 pixels. But 1/z is
	  linear in screen space! There is no need to interpolate it.
	  This should make the renderer a little more efficient and
	  it will also make the Z fill I added a few days ago a LOT
	  more efficient.
	- Robert Blum fixed a bug with a graphicsPalette array being
	  too short (255 instead of 256).
	- FltLight routine now works in fixed point. It has not been
	  fully optimized yet but it seems to work more or less.
	  You can have a look at it with the '1' and '2' keys. '1'
	  toggles the creation of the dynamic light (default is off).
	  When you press '1' a pulsating dynamic light is created which
	  floats 5 units in front of you. It will move together with you.
	  If you then press '2' the dynamic light will remain fixed
	  on that position. So you can move away and look at it from
	  another direction.
	  There is currently a limitation of one dynamic light. This
	  limitation is just a limitation of the interface, not of the
	  FltLight class itself. The engine also does not know about
	  FltLight's yet. It is handled in 'main.cpp'.
	    - PROBLEM 1: a FltLight will currently disappear when you move too
	      close to it.
	    - PROBLEM 2: it could be faster (I hope :-)
	    - PROBLEM 3: because it adds lighting after all other lighting has
	      happened it will not work as well to light truly dark areas.
	- Received updated source for configuration utility of Nathaniel.
	- Nathaniel sent me some patches for compiling the Watcom version
	  of Crystal Space (both Windows and DOS version) regarding
	  vesa 2. He also included updated project files (although they
	  will not work with my changes to the source directories).
	- After I posted this beta version Nathaniel sent me a new bugfix
	  for his configurator :-)
	- Nathaniel sent me a little patch for win32.cpp so that the keys
	  '0' through '9' work (I wonder if this has something to do with
	  my dynamic lighting code :-)
	- Nathaniel sent me a Windows 'csar' executable and some Visual C
	  project files for 'csar'.
24-Jan-1998
	- Optimized FltLight drawing (not finished yet though).
	- Changed white_light table so that it can only make things
	  brighter (instead of using 200 as the default light level,
	  0 is now the default light level).
23-Jan-1998
	- Wrote FltLight class which is a dynamic lighting class based on
	  the Z buffer. It is not completely finished yet though.
	- Enabled Z-fill in draw_scanline routines since it is needed for
	  the FltLight class. This slows down the engine somewhat though
	  (from 11FPS to 9FPS).
	- Received Crystal Space Configuration Utility from Nathaniel.
	  It is a separate application (currently only for Windows and
	  DOS) and you can find it in the 'config' directory next to
	  'csar' and 'cryst'.
22-Jan-1998
	- Converted gifload.c to gifload.cpp (made it C++ compatible).
	  Also use 'new' and 'delete' in all cases (there was a bug here:
	  an array was allocated with 'new' but freed with 'free')
	  (bug found by Robert Blum).
	- Split 'version.h' from 'def.h' which contains version number.
	- Rearranged code in several directories for clarity.
	  I updated 'make.dep' so that all the GNU makefiles should
	  work (these are: makefile.unx, makefile.sol, makefile.svg,
	  makefile.lnx and makefile.djg). All other makefiles and
	  project files will not work anymore. Please send patches
	  to me.
	- Removed 'global.h' and put functionality in 'types.h'.
	- Create a 'def_sys' directory which contains a general version
	  of system dependent files. A port should try to use these
	  versions unless this is not possible for some reason. In that
	  case it can create a new version of the specific file in its
	  own directory (for example, there is a general 'printf.cpp' file
	  which works for most ports but for Windows there is a specific
	  'printf.cpp' file in the 'win32' directory).
	- Removed time and fopen functions from all system specific code
	  and moved to 'def_sys'.
	- Added fix to Windows 'pprintf' version from Robert Blum so that
	  there can be no more buffer overrun.
	- Tor Andersson augmented his donated 'File.zip' (in 'contributions')
	  with code to read PNG files.
20-Jan-1998
	- I made a new directory 'contributions' inside the archive which
	  contains other code which several people donated to Crystal
	  Space but which has not yet been integrated into the engine. If
	  you think you can integrate it properly, please feel free to
	  do this.
	- Nathaniel sent me the first sound support code. The code has
	  not been integrated with CS yet. You can find it in the
	  'contributions' directory ('Mixing.zip').
	- I also added 'File.zip' to the 'contributions' directory, which
	  is some code I got from Tor Andersson a while ago. It contains
	  routines for loading several graphic file formats.
	- Tor Andersson sent me a virtual machine which can be used as
	  a scripting language inside Crystal Space. But since it has not
	  been integrated yet (it is also unfinished) I added it to the
	  'contributions' directory ('Vm.zip').
	- I also added a 'joystick.cpp' file to the 'contributions' directory
	  which is an example on how to add joystick support in Linux.
	  This file was donated by Gary Clark.
	- Made a new file 'endian.cpp' which contains a few routines to
	  help writing files without having to worry about endianess.
	  This functionality was part of archive.cpp but since I also need
	  it elsewhere I have moved it.
	- The lightmap information that is saved inside a CSAR file is now
	  almost completely system independent. There is still a small
	  chance of some lightmaps being recalculated when you switch from
	  one system to another with the same CSAR file. This is because there
	  are floating point values in the files which can be computed
	  slightly differently on the other systems (slightly different
	  precision and so on). Since Crystal Space checks for the
	  accuracy of the lightmaps by testing some of the values in
	  the saved structures it can happen that a lightmap will be
	  recalculated.
	  The 'light.tables' file will be recalculated as well. I still
	  have no clue why this happens. I checked the two different
	  light.tables files (one from Linux and one from Solaris) and
	  there are a lot of differences. I have to check this closer
	  some time.
	- Split 'printf' into a separate file for every system. I'd like
	  to have almost no DO_X11, DO_WIN32, ... or whatever conditionals
	  in the root tree of the Crystal Space code. Therefore every
	  system has its own version of 'printf.cpp'. Currently only
	  the Windows version does something special although the Svgalib
	  version and maybe the Macintosh version as well could also
	  benefit from a special 'printf' version.
	- Removed several harmless compilation warnings.
	- Included the 'u' component test again in draw_scanline because
	  the visible artifacts where a bit too ugly to see.
15-Jan-1998
	- Changed the CSAR format and utility to make it more system
	  independent and extensible. Endianess and padding of structures
	  does not matter anymore. There is a version number in the archive.
	  As a consequence the old archives are not compitable anymore,
	  the CSAR files included with Crystal Space are all the new
	  format.
	- Rewrite scan.cpp with a large macro system. scanline.inc is a
	  new file which contains parameterized code to generate a
	  draw_scanline routine. You define SCANFUNC, SCANINIT, SCANLOOP,
	  and SCANMAP and include "scanline.inc" to define your specific
	  draw_scanline function. See "scanline.inc" for more detailed
	  information.
	  The advantage of this aproach is of course that there is now
	  only one place that you need to change when you need to update
	  the draw_scanline routines: scanline.inc.
	- Anis Ahmad gave me an update makefile for 'csar' and 'cryst'
	  for Watcom/DOS.
	- Added patch of Dan Ogles to have a working 'printf' function
	  for the Windows port. All 'printf' calls have been replaced
	  by 'pprintf'.
10-Jan-1998
	- Added yet another patch from Allessandro Russo which makes
	  the restoration of autorepeat in the X version even better.
	  You don't have to generate another event anymore before
	  Crystal Space quits.
	- Several people send me some small patches to make 'list.h'
	  and 'sprite.h' compilable on VC and Watcom. Some of these
	  patches were somewhat conflicting. I hope it will work now.
	  Otherwise, please tell me.
	- Anis Ahmad gave me a makefile for 'csar' for Watcom/DOS.
	- Added 'cryst.wpj' Watcom C++ project file (version 11) that
	  you can use instead of makefile.wwc (for the Windows version).
1-Jan-1998
	- Today my daughter Maaike Tyberghein is born!
30-Dec-1997
	- I did not manage to fix the (u,v) problem in the texture mapper
	  completely. I think it is a fundamental problem that needs a
	  fundamental solution. Only I can't find it. At least I have now
	  managed to avoid the 'u' test. The 'v' test is the only one
	  that remains.
	  The result of all these fixes is that the Windows version of
	  Crystal Space should also be a lot more stable.
	- By accident I discovered that the texture mapper routines did
	  too much work! The lighted texture for the texture mapper has a
	  width that is a power of 2. But not all of that width is really
	  needed. So the texture mapper only needs to fill the needed
	  width. I suspect that this will give a speed increase of about
	  50% for the texture cache. This is certainly welcome.
29-Dec-1997
	- I'm slowly trying to remove all occurences of overflows from
	  the texture cache in the draw_scanline routines. I fixed:
	    - The case where interpolating 16 pixels further caused the
	      computations to go beyond the horizon of the polygon plane.
	    - There was a bug in the case that the D component was very small.
	      I choose a wrong value for 'O' and thus the computation of 1/z
	      was wrong.
	    - In case the D component is very small I now also set the u_div_z
	      and v_div_z computation to some default (u,v) value: (0,0) in
	      this case.
	- There is now a margin above and below the lighted texture in
	  the texture map. This is the easiest way I could find to fix
	  the overflow problem. Currently this margin is not filled with
	  any useful data however. This still needs to be done.
28-Dec-1997
	- Decreased D component check in Graphics3D::DrawPolygon from 0.001
	  to 0.02. This makes sure that really flat polygons do not cause
	  an overflow in the texture mapper.
	- Added 'X' option in 'csar' to extract a file to standard output.
	- Added 'e' option in 'csar' to directly edit a file from within
	  the archive. This feature currently works by executing 'vi' on
	  a temporary file in '/tmp' so it will only work on Unix.
	- Added 'hi' command to console to hilight a polygon (for
	  debugging purposes).
	- The Unix version of Crystal Space will save the current coordinates
	  to 'coord.bug' when Crystal Space crashes. That way it is easier
	  to go back to some place where a crash occured.
27-Dec-1997
	- Fixed bug with the computation of light.tables with
	  MIXLIGHTS==NOCOLOR.
	- New mipmapping choices with the 'mipmap' command to test all the
	  mipmap levels.
26-Dec-1997
	- Use a 'precalc.csa' archive instead of a directory. This is much
	  more efficient and easier to handle.
	- Created 'csar' archiver utility to handle CSA archives.
	- Crystal Space now supports loading all data from a CSA archive.
	  This means that you can store the world file, the textures, the
	  precalculated lightmaps, the precalculated alpha maps and the
	  precalculated lighting table inside one CSA file and load it
	  as such. The old way is still supported.
	- In addition, when a texture is not found in the CSA file it
	  will be loaded from the normal 'data' directory.
	- SAVE_RGB_ALLOC has been removed since the light.tables files
	  is now in the CSA archive.
	- It is now possible to store 'cryst.cfg' in the CSA archive.
	  Currently MIXLIGHTS and FAST_RGB_ALLOC are supported. They
	  will override the values in the main 'cryst.cfg'.
25-Dec-1997
	- Added Archive class to implement an archive of files. Currently
	  this is implemented by a directory.
	- Use a 'precalc' archive (and directory) to store the lightmaps
	  we just computed. This means that startup will be much
	  faster the second time Crystal Space starts.
2-Dec-1997
	- Added first non-functional 3D sprite code from Darius Snapkauskas.
	  It doesn't work yet but the stubs are there.
	- Added patch from Alessandro Russo <alessandro.russo@ntt.it> that
	  fixes the autorepeat restore problem a little (but still not very
	  good though, you need to generate another event after you press
	  the 'q' button :-)
	- Added patch from Gary Clark which should fix the problem that under
	  some X Windows versions the Window of CS would not start displaying
	  immediatelly.
1-Dec-1997
	- Applied a few fixes which Karlis Freivalds <karlisf@cclu.lv>
	  sent me to wcc/watcom.cpp.
	- Discovered another bug in the lighting routines which I fixed
	  by removing a test in polygon.cpp. So the lighting routines work
	  now but are VERY VERY slow. I need to optimize or rewrite this
	  again. Better would be to rewrite this as seen from the polygon
	  instead of from the light.
	- I fixed the bug with portals as seen from within a mirrored
	  space.
30-Nov-1997
	- Light shining now also works on portal polygons with alpha.
	- Added command 'portals' to disable/enable portal drawing.
	- Added command 'transp' to disable/enable transparent/filtered/
	  alpha drawing.
	- Added command 'coordshow' to disable/enable showing of coordinates
	  at runtime.
	- Apparently the shining of lights through a warping portal is
	  finaly fixed. I have to double check to make sure though.
	- Fixed an old bug which could cause mipmapping of transparent
	  textures to go wrong completely.
	- Fixed a bug in Polygon::intersect_ray which occured when
	  the ray vector was perpendicular to the plane of the polygon
	  to test. In that case the test would return success even if
	  the polygon was somewhere else.
	- Optimization in light shining routines: for every 16x16 texel
	  grid on a lightmap I did 3 divisions and 9 multiplications in
	  PolyTexture::shine. Now I only do 3 multiplications.
	- Added feature to camera so that moving through a warping portal
	  also applies the transformation to the camera matrix. This means
	  that when you walk through a mirror you will just be deflected
	  back :-)
	  The feature works but there are still a few problems.
	- Added 'LEN' to ROOM/TEX statement to set the scale of a texture.
	- Changed the syntax of the PORTAL statement inside ROOM from:
	  PORTAL ('poly','room') to PORTAL (POLYGON ('poly') SECTOR ('room')).
	  And also added two optional parameters: ALPHA (x) to set the
	  alpha value and WARP (MATRIX (...) V (...)) to set the warping
	  factor.
29-Nov-1997
	- Removed all uses of the Vertex class. In PolygonSet we just use
	  three arrays of Vector3 (world, object, and camera space). The
	  reason I did this is that Vertex was a cumbersome class at best
	  and I also have need of more than one camera space set. This
	  was difficult to do with Vertex.
	- Fixed the bug with a BSP split of a polygon and the texture for
	  the texture cache. When a BSP splits a polygon it will create new
	  PolyTexture objects for the split object and recompute the bounding
	  boxes of both polygons. This way the polygons are handled separately
	  in the texture cache.
	- Added WORLDFILE config option and the ability to specify a world file
	  on the commandline. Default is still 'world'.
	- Added r,g,b fields to portal structure that will be used to
	  change the color/intensity of the light that passes through a
	  portal. This is not implemented yet, but the fields are here.
	- Changed 'make.dep' makefile to use 'gcc -MM' instead of
	  'makedepend'. 'makedepend' is MUCH faster but it is not supported
	  in DJGPP and gives many errors on my Linux system (maybe it's
	  on old version of makedepend).
	  Since 'gcc -MM' is slower it is also no longer default.
	  You have to say 'make -f makefile.xxx depend' to regenerate
	  the dependencies.
	- Added the capability to PolygonSet to be transformed to
	  camera space more than once. This is mainly to allow warping
	  portals to jump to the same sector (for mirrors).
	- New 'AUTOREP' config option and -arep/-noarep commandline option
	  to control autorepeat. This is only for the X Windows version
	  of Crystal Space. When AUTOREP is disabled ('no') walking
	  through the world will be much smoother. The disadvantage is
	  that Crystal Space is not able to restore autorepeat (I have no
	  idea why) after it quits. If you disable autorepeat and you
	  want to close Crystal Space WITH autorepeat back on, you should
	  first select another window and then interrupt Crystal Space with
	  ctr-c (or 'kill').
	- Alpha transparency works. There are three levels: 25, 50, and
	  75%. Enable for a portal polygon with 'ALPHA (25)'.
	  This effect combined with mirrors is REALLY nice!
28-Nov-1997
	- Started working on correct lighting support for mirroring.
	  Apparently this is not as easy as it seems.
	- Remove todo.txt and faq.txt (only maintain todo.html and faq.html
	  now).
	- Rewrote the hit_beam code to calculate lighting and shadows to
	  correctly keep warping portals in mind.
	  The shadow caster is also much more accurate now. In the original
	  world file there were several places where strange lighting
	  patches appeared. These are now gone.
	- Added support back for saving light tables and a flag to enable
	  accurate RGB allocation again. With FAST_RGB_ALLOC you can control
	  the new fast RGB allocator of Gary Clark. This version is much
	  faster and thus needs no external file ('lights.tables') to save
	  the RGB values. But the quality is not as good as the original
	  allocator (that can be obtained with FAST_RGB_ALLOC=no).
	  With SAVE_RGB_ALLOC you can control where the RGB tables will
	  be saved (and will only be used if FAST_RGB_ALLOC=no). Crystal
	  Space will automatically check a few colors in this table to
	  check if the file is ok. If not it will automatically regenerate
	  it. Note that FAST_RGB_ALLOC and SAVE_RGB_ALLOC are ONLY used
	  when MIXLIGHTS is not equal to 'true_rgb'. Otherwise you have no
	  choice but to use the faster way.
27-Nov-1997
	- Added 'MIXLIGHTS' flag in cryst.cfg to choose between 'fast'
	  and 'slow' mixing of lights. 'slow' mixing gives the more
	  accurate RGB mixing of Gary Clark. If this is enabled the
	  TABLE1, TABLE2, and TABLE3 flags in cryst.cfg are ignored.
	- Removed all 'red_table', 'blue_table', ... names from the code
	  and replace with 'table1', 'table2', ... instead.
	- Added AMBIENT_RED, AMBIENT_GREEN, and AMBIENT_BLUE flags in
	  'cryst.cfg'. These flags control the ambient light for a
	  polygon that receives no lighting. Default is 40. These flags
	  are only used if MIXLIGHTS is set to 'slow'.
	  If MIXLIGHTS is set to 'fast', AMBIENT_WHITE is used instead
	  to control the ambient lighting level of the white table (if
	  there is a white table).
	- Removed TABLE1, TABLE2, and TABLE3 flags. The functionality of
	  this is now replaced with MIXLIGHTS. This flag can now have the
	  following values:
	    - true_rgb	slow but accurate RGB mixing.
	    - fast_rgb	faster (less accurate) RGB mixing.
	    - fast_wrb	White, red, and blue lights.
	    - fast_wrg	White, red, and green lights.
	    - fast_wbg	White, blue, and green lights.
	  The speed we are talking about is the speed of the texture cache.
	- AMBIENT_RED, GREEN, BLUE, and WHITE work a little differently
	  now. First of all, these fields are always used in all cases
	  (independent of the value of MIXLIGHTS). AMBIENT_WHITE controls
	  the ambient white value. AMBIENT_RED/GREEN/BLUE control the
	  additional red/green/blue ambient value.
	- Removed -color/-nocolor and COLOR configuration option and
	  replaced with MIXLIGHTS=nocolor option.
	- Updated document.txt for all latest new changes.
	- Updated faq.txt/faq.html for all latest new changes.
	- Changed 5:5:5 distribution for RGB (from Gary Clark) to
	  6:6:4 since that gives a much nicer result.
	- Added a white light table to make uniform lighting
	  work in all cases.
	- Added allocation/deallocation of lighting tables in class Textures
	  so that we only allocate the table we really need.
	- Added support for SECTOR in COLLECTION object.
	- Split create_lighted_texture in four parts for the main
	  MIXLIGHTS methodologies.
	- New LIGHTMAP_SIZE cryst.cfg option to set the lightmap size
	  (default 16).
26-Nov-1997
	- Fixed NULL pointer bug in the handling of the new portal
	  class.
	- Started working on the mirror system.
	- Let Sector::draw share a bit more code. The code to draw a set
	  of polygons is independent of the use of a BSP.
	- Basic mirroring seems to work. Only draw_filled had to be changed
	  to correct the clockwise order of the vertices.
	- Applied patch of Gary Clark for true R,G,B lights.
	  There is also no need anymore for the light.tables file.
	- Applied a few changes to the patch so that it can be disabled/
	  enabled at startup time.
	- A few cosmetic changes to texture.h/cpp.
	- Lights are now always given with (R,G,B) values and possibly
	  converted to W,R,B (or some other configuration) if fast mixing
	  is enabled.
25-Nov-1997
	- Rewrote intersect_segment so that it correctly uses the BSP
	  if it is present.
	- Moved three Plane equations (world, space, camera) from Polygon3D
	  to PolyPlane where they belong. Also moved a lot of functions
	  (like distance, close, visible_from_point, ...) as well since
	  they don't need polygon information; only the plane.
	- There was a bug in the world file which I only noticed now
	  because planes are shared (I used a wrong plane for a sloped
	  polygon).
	- Made a separate class of a portal (also containing the non-
	  functional space warping system: mirrors).
24-Nov-1997
	- Moved get_uv() in polygon.cpp to attic since it is a function that
	  only documents what is going on but is not really used.
	- Made Plane class a bit more complete and also added some data to
	  that class so that planes can start using that class instead
	  of using 'float A,B,C,D'.
	- Added add_vertex_smart to PolygonSet and Polygon3D so that
	  you can add vertices and the routine will automatically check
	  if the vertex already exists and use that instead.
	  Used this new routine in the merge routine from ThingTemplate
	  to Thing.
	- Added Polygon3D::split_by_plane to split a polygon by a plane.
	  This is going to be used by the BSP routine.
	- Added copy constructor to Polygon3D so that you can easily create
	  a copy of a polygon. Note! This function does not work perfectly
	  yet. There is still the problem of data that is currently
	  unshareable. This can be fixed easily however. Still todo.
	- Added a BSP tree which can be used for PolygonSets. The code is
	  not used (and tested) yet. I will integrate it as an optional
	  feature for a Sector soon.
	- Added BSP command to PolygonSet (Sector and Thing) so that
	  it will now build a BSP when this command is present.
	- Added BSP support to the drawing of Sectors and to my amazement
	  it seems to work. But don't despair! There will be bugs in there
	  somewhere. Rest assured that I will find them.
	- Yes indeed. I found a few bugs but now everything seems to
	  work for sure.
	- Note that as long as the drawing with sectors is not done using
	  Z-fill, we can't use Things in a BSP room since the Things is
	  drawn AFTER all polygons of the Sector and it may well be that
	  a polygon of the Sector is actually covering the Thing.
	  This will be fixed as soon as we have Z-fill.
21-Nov-1997
	- Moved 'geomutil.c' to 'attic'.
	- Applied patch from Alessandro Russo to make movement in the X
	  version of Crystal Space better. Autorepeat is disabled and it is
	  possible to press several keys together. For example, you can now
	  walk forward by pressing the arrow up key and later press shift
	  to increase the speed without having to release/press the arrow
	  key again. You can also walk forward and turn left at the same
	  time. There is a small problem with this patch however. It tries
	  to correctly restore autorepeat after CS quits. This does not
	  seem to work correctly (at least it doesn't work on my X server).
	  If you have the problem that pressing 'q' or using 'quit' from
	  the console does not correctly restore autorepeat than this can
	  be fixed by switching to another window (which on my server
	  correctly restores autorepeat) and then killing or interrupting
	  CS (with ctr-c for example).
	- Changed the patch so that the old system works as well. Normally
	  this should mean that a port need not be changed immediatelly
	  to support the new do_update() function. Currently only the
	  X port supports this. I have not been able to test the other
	  ports yet but normally they should work as for them it appears
	  that nothing has changed.
	  See 'system.h' for more info about what you need to do to enhance
	  a port so that it works with the new (and better) system.
	- Started the move from stuff to the new Graphics3D layer.
	  Wrote Graphics3D::DrawPolygon() (copy from Polygon2D::draw_filled ()
	  more or less).
	- Started integration (optional at first) of the new experimental
	  Graphics3D layer with the rest of the engine.
	- Successfully made the switch to the new Graphics3D layer but it
	  still lacks lots of features. To disable the new Graphics3D layer
	  set USE_GRAPH3D in def.h to 0.
20-Nov-1997
	- After a lengthy discussion with Gary Clark concerning the upcoming
	  Graphics3D classes for hardware (3D card) abstraction we started
	  implementing things.
	- Made first proposal for Graphics3D class.
	- Added G3DNewID() and G3DResetID() to create a unique numbering
	  system for all objects in CS.
	- CsObject (and thus, Sector, Thing, Light, ...) have a unique ID now.
	- Split CsObject into CsObject and CsObjectTrigger. CsObjectTrigger
	  is a subclass of CsObject which supports triggers (not all CsObjects
	  need that support).
	- Polygon3D and PolyPlane are now also CsObject's which means that
	  they also have the unique ID.
	- CLights is now also a CsObject (and thus has an id).
	- The non-functional DynLight class is now also a CsObject.
17-Nov-1997
	- The Unforgiven project of the cruXaders joins forces with Crystal
	  Space!
14-Nov-1997
	- Received texture TStone22.gif from Tor Anderson.
	- Added World::dump.
	- Added 'dump' command in console to dump as much information
	  as possible about the world.
	- Added PolyPlane::dump.
	- Rationalized scan.h: removed all unneeded variables.
	- Added debug_dump() function in main.cpp and a signal handler
	  in xlib/xwin.cpp so that debug_dump() is called whenever
	  Crystal Space crashes. This should help debugging. Other
	  ports can also call debug_dump() if they have the capability
	  of intercepting a crash.
	- SVGALIB port also calls debug_dump().
	- New '-debug'/'-nodebug' commandline options, 'DEBUG'
	  configuration file option and 'debug' command in console
	  to enable/disable more information for debugging. This
	  information is then kept in various parts in the
	  engine (most information comes from Polygon2D::draw_filled)
	  and displayed in 'debug_dump()' after a crash (only on
	  Unix systems currently).
	- Commandline option help is more compact.
	- In an attempt to fix one part of the (u,v) texture mapping
	  bug (I mean here the bug that requires the (u,v) test in
	  all draw_scanline routines) I test on the D component of the
	  plane normal in camera space. If this is too small I have
	  a special case.
13-Nov-1997
	- In an effort to find the u,v limit draw_scanline bug I created
	  a 'perfect' texture mapper which does not do interpolation every
	  16 pixels. With the Shf-'p' key or 'perfect' command you can
	  enable this mode.
	- Created the text 'texmap.txt' to help better understand how
	  the mathematical formulas behind texture mapping work.
	- Large debug dumps of objects happen always in 'debug.txt'
	  regardless of the console settings.
11-Nov-1997
	- Created a new room (a Thing library) right of the stairs
	  where you can look at a few shapes.
	- Enhanced Matrix3::load so that you can also say ROT_X,
	  ROT_Y, and ROT_Z around some angle.
	- Fixed Thing::transform. Rotations are applied cummulative
	  but it applied the new transformation wrong so that it was
	  done first instead of last.
	- New 'ACTIVATE(script)' keyword to directly activate a
	  script for some object.
	- Changed 'clear' color to white so that you can more easily
	  see the gaps between the polygons (this is for debugging,
	  there should be no gaps).
	- Fixed a few bugs in the dynamic lighting system which may
	  have caused system-dependent problems (memory overwrite,
	  or just not functioning).
	- Added LIGHTX support for SECTOR and THING (this will be
	  used as the default dynamic light for all polygons inside
	  the object unless the polygon overrides this default).
	- Even though PolyTexture::shine is not a critical function
	  (it is only calculated at startup to compute the lightmaps)
	  I optimized it a bit to make startup somewhat faster.
	  Don't expect spectacular speedups though.
	- Show statistics after loading the world file (the number
	  of polygons, sectors, portals, things, and lights that
	  are loaded).
10-Nov-1997
	- It is now possible to have THING and SIXFACE statements
	  outside ROOM and SECTOR statements. This will define a
	  THING template that can then be used from within a real
	  THING with the TEMPLATE command.
9-Nov-1997
	- Created new classes ThingTemplate and PolygonTemplate to
	  create templates for Things. So you can make libraries of
	  Things to use in worlds.
	- Create new TextureTrans static class to encapsulate the
	  methods that transform vector/length information to
	  a texture matrix/vector.
8-Nov-1997
	- General cleanup, added some comments, removed obsolete
	  code ('attic' directory), removed all references to
	  'texnr' and replaced with a pointer to a texture.
7-Nov-1997
	- Added CsScript and CsRunScript ADT classes and the
	  LanguageLayer. Rewrote old script language so that it uses
	  this languagelayer and virtual classes.
	- Optimized texture cache by replacing some divisions and
	  mutliplications by shifts.
	- Optimized the texture cache loop a bit too.
	- Added IntScript and IntRunScript classes to implement
	  internal C function scripts.
6-Nov-1997
	- Rewrote texture.cpp with a new class TextureMM which
	  encapsulates a texture in all its mipmapped forms.
	- Disabling texture mapping (flat shading) is now better
	  since a mean color is calculated for every texture which is
	  used then.
	- Moved a few functions from public to private in Polygon3D.
5-Nov-1997
	- Incorporated new patch for watcom.cpp from Nathaniel.
	  -vga and -vesa commandline options have been removed.
	  VESA config file option has been removed.
	  Support for keys 0 .. 9.
31-Oct-1997
	- Finished rewrite of all the load routines.
30-Oct-1997
	- Converted Polygon::load to the new parsing utils.
	- Added a %D option to ScanStr to read a list of integers.
	- Converted PolyPlane::load to the new parsing utils.
	- Added a %F option to ScanStr to read a list of floats.
	- Syntax of TRIGGER in COLLECTION has changed to:
	    TRIGGER (<object> , 'activate' -> <script>)
29-Oct-1997
	- The mailing list: crystal@linux.it is created!
	- Continued the rewrite of various load routines (like load_sixface).
	- Included a 'make depend' option in the makefiles based on 'make.dep'
	  to create dependencies in an easy way.
	  The makefiles that support this will do a 'make depend'
	  automatically whenever the normal 'make' is done.
28-Oct-1997
	- Based on a suggestion from Phil Harvey I added a polygon counter.
	  With -stats (or -nostats) on the commandline, 'STATS' in the config
	  file, or 'stats' in the console, you can enable/disable statistics
	  (default disabled). It shows the number of polygons considered
	  for drawing, the actual number of polygons drawn, and the number
	  of portals that were drawn (in that order).
	- Rewrote Sector::load_room with the new parsing utilities. This
	  means that the whole syntax of a room has changed (see the world
	  file how it is changed).
	- Rewrote Sector::load with the new parsing utilities.
	- Rewrote Thing::load with the new parsing utilities.
	- Made ScanStr function that works a bit like sscanf but it is
	  more specifically useful for Crystal Space parsing (it understands
	  things like %b for boolean values for example).
27-Oct-1997
	- Received new parser module from Steve. This should make the parsing
	  of the ASCII world file a bit more readable :-)
	  Note that this will require a change of the world file format.
	- Received new dynlight module wich implements constant lighting and
	  a few other tweaks.
	- I removed all the 'save' routines since they are not useful anymore.
	- Rewrote Texture::load using the new parse routines. This means that
	  the syntax has changed to:
	     TEXTURE 'name' (TRANSPARENT (-1) FILTER (0, 'dark_glass'))
	  The default for TRANSPARENT is now -1 so it need not be specified.
	- Rewrote Light::load using the new parse routines. This means that
	  the syntax has changed to:
	     LIGHT (<x>,<y>,<z>:<dist>,<str>,<redstr>,<bluestr>,<dynamic>)
24-Oct-1997
	- Nathaniel sent me an updated Windows 32 port. It is almost working
	  correctly now.
	- I made faq.html and put a link to this file on my page.
	- I made walkthru.txt which gives a brief walkthru of the main
	  rendering loop. It is useful as a navigation aid to help better
	  understanding of my code.
23-Oct-1997
	- Steve sent me some enhancements to his dynamic lighting stuff.
	  It starts to work very nicely now!
22-Oct-1997 V0.07
	- Made Sector::load_room a bit more readable and also added LIGHTX
	  statement so that you can attach a uniform dynamic light to one
	  or more polygons.
21-Oct-1997
	- Put all textures that are not used by the included world file
	  in a separate archive to save space.
	- Prepare for distribution.
20-Oct-1997
	- Nathaniel sent me an input console extension!!! Now we can
	  start adding command like in Quake. I will add 'quit' and
	  'help' very soon :-)
	- Added new Command class to encapsulate the behaviour of all
	  commands. Commands can be executed from within the console
	  and with the keyboard.
	- Added commands 'quit', 'help', 'capture', 'perftest', 'cachedump',
	  'cacheclr', 'physics', 'lighting', 'texture', 'edges', 'turn',
	  'activate', 'lightmap', 'mipmap', 'console', 'fov', 'gamma',
	  'dmipmap1', 'dmipmap2', 'dmipmap3', 'fclear', 'fps',
	  'coorddump', 'coordsave', and 'coordload'.
	- Added keydefinition for 'fov' ('f' and 'shf-f').
	- Most keys are now defined with a keymap table. This is the
	  first step towards fully defineable keys (like the Quake 'bind'
	  command).
17-Oct-1997
	- Thanks to Tor Anderson I now have a good formula for gamma
	  which works much better.
	- Added new keys 'g' and 'G' to change the gamma value (intensity
	  of the display).
	- Removed obsolete online editing functions that were connected to
	  keys 'e', 'm', 'v', 'x', 'y', or 'z'.
	- Changed definition of key 'e' so that it shows the edges of all
	  polygons (it's a toggle). This is useful for debugging world
	  files where you think something is wrong with the polygons but
	  you don't know what.
	- Added alt-c key to show where we are on the console (sector
	  and location).
	- Excluded color 0 and 255 from usage in the textures. These are
	  now constant black and white entries. We can then use these
	  two colors for messages (for example). The reason we excluded
	  them from the textures is that gamma correction should not
	  affect the color of the messages (and another reason is that
	  you can't change the RGB values of color 0 and 255 on a Windows
	  platform, as far as I know).
	- Added new CONFG config file option and -confg commandline
	  option to set the color that is used for console output.
	  Default is '255,255,255' (white).
16-Oct-1997
	- Added a new kind of dynamic lighting which is less accurate
	  (no shadows and a whole polygon is evenly lit) is slower
	  at render time but it is MUCH faster to change the intensity
	  of a light. This kind of dynamic lighting is very useful
	  for fluorescent lights and similar flickering lights.
	  Made by Steve Israelson.
	  Note! this feature is unfinished.
	- Added -color and -nocolor options (and similar COLOR
	  configuration file option) to disable colored lighting. This
	  does not make the renderer faster but the texture cache
	  will be filled faster. Crystal Space will also use a lot
	  less memory with colored lighting disabled.
	- If -nolight is given, -nocolor is automatic. It makes no
	  sense to disable lighting and still allow colored
	  lighting.
	- Added -dmipmap1, -dmipmap2, and -dmipmap3 options (and
	  corresponding DMIPMAP1, ... config file options) to set the
	  distance at which the three levels of mipmapping start
	  working. Decreasing these values results in less memory usage
	  and a faster texture cache but of course the textures will
	  be blurred. Increasing these values results in the reverse.
	  The textures will be sharper. If you increase these values
	  too much the textures will be too sharp. After all, that's
	  the purpose of mipmapping.
	- Added -gamma commandline option and corresponding GAMMA
	  config file option to set the gamma value of the display
	  (makes the display look lighter/darker). Default value
	  is 1.0.
	- All documents moved to new 'docs' directory.
14-Oct-1997
	- Nathaniel sent me the first 32-bit windows version with source
	  so that I can actually try to compile it.
	- Nathaniel also made a nice console (output only currently) that
	  should work on all systems.
	- Nathaniel added:
	    - '-line' commandline option to set the number of console lines.
	    - '-fps' commandline option to enable the display of the frame rate
	      on the console.
	    - FPS config file option to do the same.
	    - LINEMAX config file option to set the maximum number of lines for
	      the console.
	    - MESSAGE config file option to disable the console (default
	      enabled).
	- I then added -nofps commandline option to disable the FPS rating.
	- I also added -physics and -nophysics commandline options to
	  enable/disable the new preliminary physics system. Physics
	  is disabled by default.
	  There is also a PHYSICS config file option for the same
	  thing.
	- Create 'faq.txt' answering many frequently asked questions.
	- Changed MESSAGE option so that you can control where the
	  messages go. Value can be 'console', 'stdout', or 'file'
	  (debug.txt is the file that is used for the third option).
9-Oct-1997
	- Steve Israelson sent me the first version of the physics system.
	  It is still very preliminary and does seem to be a little
	  sluggish but it is a start.
6-Oct-1997
	- New Polygon3D::intersect_segment which really works in 3D and
	  should be faster.
3-Oct-1997
	- New 'data' directory containing all data (what else :-)
	- New System::SystemFopen routine to translate '/' to whatever
	  the OS uses.
	- Made a 'make.dep' include file for the makefile that is used
	  by all Unix makefiles.
	- Polygon3D and PolygonSet are a little better with regards to
	  adding polygons and/or vertices. The tables are now increased
	  dynamically with no need to set a predefined maximum anymore.
	  This means that MAX_VERTICES and MAX_POLYGON are no longer
	  needed (and allowed) in world files.
	  This also means that Crystal Space uses less memory since
	  the default maxima where too big.
2-Oct-1997
	- Non-assembler draw_scanline routines are optimized a bit (trying
	  to overlap division with integer loop). This will cause a
	  speed-up on Pentium processors but it may cause a slow-down
	  on other processors (there is one extra division for every
	  scanline and every polygon on that scanline). If the slow-down
	  is there and too large we will have to put conditionals around
	  the optimization.
	- Frame rates are now measured more accuratelly (with milliseconds
	  instead of seconds).
1-Oct-1997
	- Added better support for commandline options. There are now
	  system dependent options (like -mode) and system independent
	  options (like -clear and -help). Width and height can now
	  also be set from the config file.
	- It is now possible to change the resolution at startup
	  time (no need to recompile anymore for that).
	- Added system independent options: -clear and -noclear.
	  With -clear you can force the clear of the display every
	  frame (this is useful for debugging purposes). Default
	  is -noclear (this is faster as well).
	- Added -help to get help for all commandline options.
	- Added system independent options: -light and -nolight.
	  With -nolight the lighting system will not be initialized.
	  This is mainly provided for faster startup while you are
	  still testing a world file and you are not interested in
	  correct lighting.
	- Added -fov option to set the aspect ratio (as a factor
	  used for perspective correction, not as an angle!).
	- Added -cache option to set the texture cache size (default
	  5000000).
25-Sep-1997
	- The first Pentium optimized scan draw routine is here (thanks
	  to Arnold for this. He even hasn't got a Pentium to test
	  his routines on. So his work is completely theoretical)!
	  It is still not completely optimal (probably mostly due to the
	  rounding error in u/v space which I still need to remove).
	  On my computer I go from 6-8FPS to 8-11FPS (640x480 on a
	  90MHz pentium).
23-Sep-1997
	- Received a correctly working version of the Amiga port.
22-Sep-1997 V0.06
	- Implemented dynamic lighting!!! Every light can be made dynamic.
	  Dynamic lights still can't change their position but their
	  intensity/color can change. Shadows are preserved in this process.
	  Note that large dynamic lights have large memory overhead because
	  every polygon that is hit by the light will have extra lightmaps.
	  There is also a large performance penalty when the light intensity
	  changes (only then).
	  This kind of dynamic lighting is ideal for turning on/off lights
	  in some room (for example).
	  There are still some things that need to be done.
	- Enhanced the script language so that it can change the intensity
	  or color of a dynamic light. This is still primitive though: it
	  works by putting a light in a collection (so lights are CsObjects
	  now). The 'dim' command will accept three intensities for the
	  three light tables and change the light. Currently it can only
	  access the first light of a collection. This will have to be
	  changed soon.
19-Sep-1997
	- The ALLEGRO port also works again (with the same
	  makefile.djg). Two advantages of the ALLEGRO port are
	  that you can run Crystal Space in 800x600 and that the
	  messages appear on screen.
18-Sep-1997
	- I managed to get the SVGALIB version working starting from
	  the code I gave to Nathaniel and which he adapted to his
	  new system structure.
	- The DJGPP code is fully functional again. Unfortunately
	  the ALLEGRO port from Murat is gone. I will try to add it
	  again soon.
	- The Macintosh port is now functional thanks to Steve.
17-Sep-1997
	- Started to incorporate Macintosh port made by Steve Israelson
	  <pfhorte@rogers.wave.ca>.
	- Started to incorporate Amiga port made by Jyrki O Saarinen
	  <jxsaarin@cc.helsinki.fi>.
15-Sep-1997
	- Enhanced script language (support for the old language has been
	  removed). The language is still primitive but it now has a much
	  better base to start with. Currently the following commands are
	  supported:
	    - loop <num> { <code> }
	      to execute <code> <num> times.
	    - forever { <code> }
	      to execute <code> forever.
	    - move <vector>
	      to perform a relative move of the object this script is
	      attached too.
	    - transform <matrix>
	      to perform a transformation.
	    - wait
	      to return control to the engine.
	    - quit
	      to quit the script.
	    - return
	      to return from a code sequence.
	- Added support for COLLECTION objects needed for the script
	  language. A COLLECTION object is just a collection of other
	  objects. Scripts can operate on a collection at once.
14-Sep-1997
	- Steve Israelson <pfhorte@rogers.wave.ca> suggested a few
	  enhancements to the inner draw_scanline functions to benifit
	  processors with many registers (like the PowerPC and 680x0 and
	  unlike the Pentium). He also removed the need for the loop
	  counter ('i') in the inner loop.
10-Sep-1997 V0.05
	- David N. Arnold <derek_arnold@fuse.net> has enhanced the DOS
	  port made by Murat. He added C++ classes and VESA support.
	- Nathaniel Saint Martin <nsaintmartin@mfoptima.fr> enhanced Arnold's
	  DOS port again so that Watcom C++ is supported.
	- FIRST_LEN/SECOND_LEN in world file for texture orientation is
	  now by default set to 1.
	- 'THING' objects are now also supported from within a 'ROOM'
	  (and not only from within a 'SECTOR').
	- Changed the way that 'MOVE' is handled from within a 'THING'.
	  Now it works like it works in 'SIXFACE': the '=' between
	  'MOVE' and '(' is no longer required and the sign of the
	  vector has been changed.
	- The keyword 'VECTOR' is no longer required nor allowed to
	  indicate vectors. Vectors are recognized by the fact that they
	  start with a '('.
	- 'TEXNR' can now also be set from with a 'THING' or 'SECTOR'.
	  In this case it indicates the default texture to use for all the
	  polygons in the thing or sector (each polygon can still override
	  this default by setting 'TEXNR' itself).
	- New 'LEN' keyword that can be set from within a 'TEXTURE'
	  statement. If this keyword is given no other keywords are needed.
	  The engine will automatically take the two first vertices of the
	  polygon. Make an orthogonal base using those vertices and the
	  plane of the polygon. The base is then normalized using the given
	  length. This option is now also default (with LEN set to 1) if
	  no TEXTURE statement is given for a POLYGON.
	- New 'TEXLEN' keyword to set the default 'LEN', 'FIRST_LEN', and
	  'SECOND_LEN' for all following polygons (except the ones that
	  override this) from within a 'THING' or 'SECTOR'.
	- MATRIX specifications can now also be given as a number. This is
	  interpreted as the identity matrix multiplied with that number.
	  So MATRIX .5 is equivalent to MATRIX (.5,0,0, 0,.5,0, 0,0,.5).
9-Sep-1997 V0.04
	- Texture mapper is MUCH more accurate. When moving in the world
	  with the previous version of Crystal Space you could see all the
	  textures wobbling a bit in various directions. This would not
	  really contribute to the feeling of a solid world :-)
	  This effect was especially visible in low resolution fullscreen
	  modes (like DOS).
	  This is now fixed completely. The textures are now rock-solid!
	  All this is done by REMOVING a bit of accuracy in the texture
	  mapper :-)
	- The mipmapper is MUCH more accurate for shadow computing. Shadows
	  are correct even for polygons at great distance. In the previous
	  version of Crystal Space you could have ugly 'shadow-jumping'.
	  For example, while moving towards some wall with shadows, the
	  shadows would suddenly become different when a different mipmap
	  level was selected.
	  This is now completely eliminated with the disadvantage that the
	  texture cacher now needs somewhat more time to cache-in far
	  away polygons.
	  With the Alt-t key you can toggle between:
	    - The new accurate mode (default).
	    - An intermediate mode in which the shadows for polygons far away
	      are reasonably accurate.	This is a bit faster than accurate mode
	      and seems good enough.
	    - Inaccurate mode (ugly mode).
	  To see the difference you need to clear the texture cache after
	  changing the mode. Use 'r' to clear the cache.
	- For X Windows only: the shared memory extension can now be turned
	  on/off with the config file. In 'cryst.cfg' you can set XSHM=yes
	  to turn on the shared memory extension.
	  Note that the shared memory extension gives a significant speed
	  increase but it does not work on all X servers.
	- New 'MIPMAP' and 'LIGHTING' flags in polygon and 'TEXTURE_MIPMAP'
	  and 'TEXTURE_LIGHTING' flags for room so that you can disable
	  lighting and/or mipmapping for a specific polygon. This can be
	  useful for:
	    - Sky textures.
	    - Textures meant to be used for light surfaces.  These should be
	      fully lit.
	- Added a street scene to the demo world file.
5-Sep-1997 V0.03
	- Metin Demircioglu <demircio@boun.edu.tr> has his first DOS port
	  with DJGPP ready. I incorporated it to the official Crystal Space
	  distribution.
	- 'Polygon' class renamed to 'Polygon3D' to make porting to Windows
	  easier.
	- Many filenames changed to only 8+3 characters (for DOS).
27-Aug-1997 V0.02
	- Pierre Barthe mentioned a lot of lone variables and other warnings.
	  I enabled -Wall for gcc and removed all of them. I have no warnings
	  anymore. Some of these warnings were bugs. These bugs have now
	  been fixed automagically :-)
	- Bug fixed with 'warp_space' test (Pierre Barthe).
26-Aug-1997 V0.01
	- First public release.
