The history order is reversed so that new features are at the top.

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.
8-Apr-2002
	- Release of CS 0.94.
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' 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.
	- Christion 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 occurance 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 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' 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' 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:
		1. getPreferredSize and getMininumSize to support layouts.
		2. 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
	- Seperated 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' 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. 'res'
	  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 Sunshined 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'
	  csGrahpics2D::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 seperate
	  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 conveniance 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 Sunshined 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:
		1. Multicolumn lists (with headers)
		2. Tree-like lists (hierarchical)
		3. Aligned images and or text in every column and the header
		4. Stateful items (check boxes/radio buttons)
		5. 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 did the following
	  - 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 seperate 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.
	- Wyat 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 seperate 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 Sunshined 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:
		1. The window first gets a chance at all events. If it uses
		   them, then propagation stops there.  
		2. 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.  
		3. 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:
		a. 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.
                b. 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.
                c. 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 conveniance. 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 Wyett did the following:
	  Change and renaming 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 did the following:
	    - 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 to the CS project.
	    - Added missing ';' at the end of on eof the lines. :-)
	    - Changed class to match Terarin 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 made the following change to the Crystal Space
	  project:
	    - 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 to the Crystal Space project:
	    - 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:
	    1. The material wrapper is registered/prepared again (possibly for
	       another 3D renderer) so the handle has changed.
	    2. 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 seperate 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.
	- Philiop 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:
	    1. 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.
	    2. 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.
	     1. 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.
	     2. 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::CreateSeperateConfig(). 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. :-)
	    - TODOS
	      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 Dll <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 to:
		CS/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() conveniance 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 conveniance 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.
	- Later Michael Voase 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 upto 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 seperate 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 made the start to moving terrain object to a mesh object.
	  I 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 seperate.
	  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 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.

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