Thu Feb 10 11:35:03 1994  CNCL-Admin  (cncl-adm@wyvern)

	* misc/String.c (CNString::operator +=): call add(cs), not add(*cs).

Wed Feb  2 20:05:58 1994  CNCL-Admin  (cncl-adm@wyvern)

	* misc/String.c: CNString::cpyn(): use `n' as length for strncpy().

Fri Jan 28 13:57:12 1994  CNCL-Admin  (cncl-adm@wyvern)

	* ********** RELEASE 0.19 **********

	* RCS check in: release 0.19

	* ezd/: several changes and extensions to the EZD classes by <cs>.
	  New class EZDPopUp.

	* stat/: update of all classes to new versions from <fuss>.

	* array/T_array2.cP (size): set acols to new # of columns for
	  resizing of rows only.

Tue Jan 25 11:53:00 1994  CNCL-Admin  (cncl-adm@wyvern)

	* RCS check in: release 0.18

	* CNCL.c (error): added output of msg() stream.
	  (matherr): removed memset(), using `ends' in output to strstream
	  instead.
	  (msg): memset() the allocated buffer to '\0', allowing proper
	  output without an `ends'.

	* CNCL.[hc]: new function msg(), returning a reference to an
	  output stream. Any output written to this stream will be
	  appended to the message of the error(), fatal(), etc. functions.
	  This is actually an interally allocated ostrstream with a
	  capacity of STR_BUF_SIZE.

	* CNCL.[hc]: new error type `err_info' for non-error messages,
	  new function info(), default "CNCL: " is printed if `msg1' is
	  NIL.

	* CNCL.c (default_exit_handler): output "program aborted" for
	  error_flag==err_abort, "program terminated" in all other cases.

	* CNCL.[hc]: removed FlagType, flags, type_check, get_flags(),
	  set_flags(), set_flag(), unset_flag(), test_flag().
	  Compatibility macro for test_flag(type_check) used in old
	  cast_from_object().
	  THIS REQUIRES RECOMPILING ALL CLASSES STILL USING test_flag()!!!

Mon Jan 24 17:04:20 1994  CNCL-Admin  (cncl-adm@wyvern)

	* events/EventScheduler.c: EventScheduler::stop() deletes all
	  pending events in the event list. <mj>

	* container/DLList.[hc]: new function delete_all_w_obj(), deleting
	  the referenced objects, too. <mj>

Thu Jan 20 18:14:06 1994  CNCL-Admin  (cncl-adm@wyvern)

	* Changed all class header files to allow casting of Null pointers
	  with cast_from_object(). Changed array templates.

	* Template.hP: changed cast_from_object() to allow casting of Null
	  pointer (NIL).

	* misc/String.[hc]: almost total rewrite of the member function.
	  The old version was buggy as hell, detected by the torture test.
	  The new version should be stable. <turm,mj>

	* CNCL.h: new #define ERROR (-1) <mj>

Mon Jan 17 17:02:09 1994  CNCL-Admin  (cncl-adm@goblin)

	* misc/: new classes CNInt and CNDouble; behave like
	  the builtin types but are derived from CNObject <olly>

	* added documentation for CNInt and CNDouble <olly>
    	  
Mon Jan 10 16:17:43 1994  CNCL-Admin  (cncl-adm@wyvern)

	* CNCL.c (CNCL::set_flags): fixed to return old setting

Wed Dec 29 15:02:40 1993  CNCL-Admin  (cncl-adm@striper)

	* misc/String.c: bugs fixed, better performance <turm>

Wed Dec 22 14:49:53 1993  CNCL-Admin  (cncl-adm@wyvern)

	* ********** Release 0.17 **********

Tue Dec 21 12:09:45 1993  CNCL-Admin  (cncl-adm@wyvern)

	* random/: new class CNSSMP2 - Semi-Markov Process random
	  distribution.

	* RCS check in: release 0.17

	* Removed `unused variables' from several test programs.

	* misc/FormInt.c,FormFloat.c: removed memset(), using `<< ends' to
	  terminate string stream.

	* array/Array.c,Array2.c: removed memset(), using `<< ends' to
	  terminate string stream.

	* misc/String.h: changed `const default_extra' to enum, removed
	  `operator char *' (less convenient, but should help avoiding a
	  lot of programming errors).
	  `operator const char *' is back again.

	* stat/Moments.c: removed virtual keyword from mean().

	* stat/Batches.c: changed print() to use iostream manipulators
	  instead of form().

	* random/FileG.c: replaced bcopy() with memcpy().

	* random/FiboG.c: removed virtual keyword from as_long32().

	* misc/String.c: removed default values.

	* misc/ICoord.c: replaced rint(x) with floor(x+.5).

	* fuzzy/: removed default values, inline and virtual keywords
	  from several *.c files.

	* events/Event.c: removed default values.

	* container/: removed default values, inline and virtual keywords
	  from several *.c files.

	* constainer/KeyInt.h,KeyString.h: `(CNObject *)' type cast to
	  avoid ambiguity for default constructor.

	* random/FileG.h: changed `const int's to enum constants.

	* random/all distribution classes: `(CNRNG *)' type cast when
	  calling constructor of CNRandom to avoid ambiguity for default
	  and CNParam constructor.

	* stat/LRE.h: removed `include <stream.h>'

	* misc/FormFloat.h: dito

	* misc/FormInt.h: changed `include "String.h"' to `include
	  <CNCL/String.h>'.

	* stat/Batches.h: moved forward declarations of classes `group',
	  `interval', `interval_out' before class CNBatches. These classes
	  really should be defined locally in class CNBatches.

	* array/T_array.hP: added "(unsigned)" type cast when calling
	  CNArray constructor to avoid ambiguity.

	* container/Key.h: changed both constructors to use constructor
	  syntax for initializing `object'.

	* array/T_array2.cP,T_array.cP: removed default value "=0" from
	  constructor. Necessary for compiling with Borland C++.

	* Started integrating changes for compiling with Borland C++. <mj>

Fri Dec 17 14:53:39 1993  CNCL-Admin  (cncl-adm@ogre)

	* misc/String.c: bug in function resize() fixed. <turm>

Wed Dec 15 17:59:14 1993  CNCL-Admin  (cncl-adm@wyvern)

	* random/RndInt.h: added functions as_int(int high) and as_int(int
	  low, int high) for conformance with manual. <olly>

	* random/InterTab.c: changed drawing function to work properly.
	  The old version used to return false distributions. <olly>

	* random/: added functions as_long32() and has_long32() to all
	  base generator, drawing a 32 bit random integer if possible.
	  as_long() still returns a truncated 31 bit value. <olly>

Mon Nov 22 11:01:06 1993  CNCL-Admin  (cncl-adm@wyvern)

	* RCS check in: release 0.16

	* container/Key*.h: moved alternate function compare(CNKey &) to
	  derived  classes.

	* container/Hash*.h: alternate functions get_key(), delete_key()
	  etc. with reference instead of pointer moved to derived classes.

	* container/DLList.h: made copy constructor public, but with fatal
	  error message. This avoids defining an explicit copy constructor
	  for classes with a CNDLList member. Removed copy constructor
	  from classes CNQueueFIFO, CNEventList.

	* stat/: heavy changes to all statistics classes based on Oliver
	  Fuss' changes.

	* Changes for gcc 2.5.4:
	  - CNCL.h: typedef int bool instead of enum bool to avoid warnings
	  - CNCL.c: matherr(struct exception *)
	  - misc/String.[hc]: moved comparison operators from .h to .c to
	    avoid silly warnings from gcc.

	* array/Makefile: generate classes
	  CNArray2{Char,Int,Float,Double,Long,Object} from template.

Fri Nov 19 14:51:14 1993  CNCL-Admin  (cncl-adm@wyvern)

	* array/: New templates T_array2.* for 2-dimensional arrays.

	* array/: New class CNArray2: base class for 2-dimensional arrays.

	* array/: renamed Template_array.* to T_array.* for unique
	  filenames under MSDOS.

	* container/DLObject.h: destructor is now `protected'. This is
	  necessary for derived classes (CNEvent).

Tue Nov 16 13:03:16 1993  CNCL-Admin  (cncl-adm@wyvern)

	* misc/: New classes CNFormInt, CNFormFloat for strings which are
	  formatted integer and floating point values.

	* misc/String.h: members p, len are now protected to be used by
	  the CNFormXXX classes. Reformatting of the CNString class
	  declaration according to the new template.

Fri Nov 12 17:18:21 1993  CNCL-Admin  (cncl-adm@wyvern)

	* container/QueueFIFO.h: added list() to default and CNParam
	  constructors, private copy constructor to prevent CNQueueFIFO
	  from being copied.

Thu Nov  4 18:06:18 1993  CNCL-Admin  (cncl-adm@wyvern)

	* Fixed CNEvent::is_a(). CNEvent is derived from CNDLObject,
	  therefore we must call CNDLObject::is_a().

Fri Oct 29 11:15:09 1993  CNCL-Admin  (cncl-adm@wyvern)

	* More Makefile changes: new target `templates' to create
	  CNCLgenxxxxx scripts and classes from templates before `make
	  depend'.

	* Changed Makefiles to make `make veryclean' work properly.

	* RCS check in: release 0.15

	* Changed CN_EZDTimer to CN_EZDTIMER in ezd/EZDTimer.c

Thu Oct 28 17:56:33 1993  CNCL-Admin  (cncl-adm@wyvern)

	* New top-level Makefile with targets World, NewWorld for
	  compiling the whole beast from scratch.

	* Added member function draw() to class CNRandom (calls
	  operator()) to allow easy drawing of random numbers when a
	  pointer to a random number generator is given.

	* Added target veryclean to make.common and some of the Makefiles.
	  This will also removed the files generated by the CNCLgen
	  scripts.

	* Moved CNCLgenxxxxx scripts to new directory $TOPDIR/bin, using
	  the new perl scripts.

	* Moved Template.[hc]P from directory template to this directory.

	* Major changes to the array classes in array: new functions
	  Array::size() and Array::size(int sz), access functions get(),
	  put() and operator[] are now inline in the template header file,
	  macro NO_RANGE_CHECK can be #define'd to disable range checking.

Wed Oct 27 12:17:48 1993  CNCL-Admin  (cncl-adm@wyvern)

	* And not to mention some classes in unix.

	* CN_CNxxxx correction also for some classes in stat.

	* Made class CNLRE pure virtual.

	* Dito for some classes in random.

	* Dito for some classes in misc.

	* Corrected somewhat wrong class descriptions CN_CNxxxx for fuzzy
	  classes. 

	* Changed the description of class EZDTimer to the correct
	  uppercase version CN_EZDTIMER.

	* Dito for class CNKey, fixed the missing default constructor in
	  classes CNKeyInt, CNKeyString.

	* Made class CNHashTable pure virtual, removing new_object(),
	  print(), dump().

	* Started updating all CNCL classes to new inline
	  cast_from_object() and new_object().

	* Updated basic classes CNCL, CNObject, CNClass, CNParam according
	  to these changes.

	* New static member function CNObject::fatal_type() for
	  cast_from_object() error messages.

	* New class templates with inline cast_from_object() and
	  new_object() functions. #ifdef NO_TYPE_CHECK allows compile time
	  overriding of the type checking done in cast_from_object().

Mon Oct 25 15:14:30 1993  CNCL-Admin  (cncl-adm@wyvern)

	* New private copy-constructor for CNDLList: container/DLList.h,
	  avoiding false copies and call-by-value with CNDLList objects.

	* "Privatized" CNDLObject's copy-constructor: container/DLObject.h

	* Changed all virtual functions in stat/LRE.h to pure virtual,
	  this avoids the false creation of a CNLRE object. Some
	  reformatting of the source code. #define ERROR(x) removed
	  (wouldn't work with a Standard C (C++) preprocessor anyway).

	* Removed (commented) teff from TESTS targets in
	  lib/events/test/Makefile to avoid confusion when running `make
	  tests' after compiling CNCL.

Wed Oct  6 13:53:32 1993  CNCL-Admin  (cncl-adm@durin-vz)

	* Fixed a small bug occuring during compilation of the LINUX
	  version: in container/test/tDL.c CNDLObjects were deleted and
	  then used for further traversing the list. This also occured in
	  CNEventList::delete_event().

Mon Sep 20 14:49:54 1993  CNCL-Admin  (cncl-adm@lurker)

	* Some small changes to ezd/EZDPushButton.c, EZDText.c,
	  EZDWindow.c: errors in print() and dump() functions. Included in
	  release 0.14.

	* ********** Release 0.14 **********
	  FIRST PUBLIC RELEASE FOR MMB'93.

	* Moved this ChangeLog to lib/ directory, separate ChangeLog for
	  doc/. <mj>

Tue Sep 14 13:14:18 1993  CNCL-Admin  (cncl-adm@wyvern)

	* Fixed a bug in FileG.h/FileG.c: constructor / function newfile()
	  with alternative int parameter was ambigous. <mj>

Mon Sep 13 12:16:20 1993  CNCL-Admin  (cncl-adm@wyvern)

	* ********** Release 0.13 **********

	* Some clean up of all *.h and *.c files. <mj>

	* New class CNBatches, batch means evaluation for CNCL statistics.
	  <fuss> 

	* New class EZDTimer, displaying a pie timer diagram, changes to
	  EZD and EZDObject, new functions draw_pie_arc(), pie_arc(). <mz>

	* BHEADER/EHEADER in all *.h headers to allow filtering for
	  printout. <turm>

	* Removed $Log$ entries from *.h and *.c files, because ChangeLog
	  is used for documenting development. <turm>

Thu Sep  2 15:50:46 1993  Martin Junius  (mj@wyvern)

	* New File CREDIT documenting CNCL's who is who: authors of the
	  various classes.

	* Restored FSF/GNU copyright notice in all files derived from GNU
	  libg++ (random number generators).

Thu Aug 26 15:32:08 1993  Martin Junius  (mj@wyvern)

	* ********** Update 0.12.0.1 **********

	* Fixed a severe bug in CNEventList::add_event(), comparison for
	  adding an event to the end of the list was wrong.

Mon Aug 23 12:56:00 1993  Martin Junius  (mj@wyvern)

	* New function EZD::test_event() using CNSelect to check, whether
	  an event from ezd is wait for input via EZD::event(). This
	  creates the ability to stop simulations with ezd animation.

	* New function CNPipe::fd_in(), fd_out() returning the pipe's file
	  descriptors. 

	* New UNIX specific class CNSelect, an interface to the UNIX
	  select(2) system call and file descriptor sets.

Fri Aug 20 11:35:42 1993  Martin Junius  (mj@wyvern)

	* ********** Release 0.12 **********

Thu Aug 19 17:20:40 1993  Martin Junius  (mj@wyvern)

	* Maximum number of events (== size of pool from which
	  CNEvent::operator new allocates events) is now user configurable
	  via CNEvent::set_max_events(), default is 100.
	  CNEvent::get_max_events() returns the actual setting. The max.
	  number of events must be set before the creation of the first
	  event.

Wed Aug 18 16:39:05 1993  Martin Junius  (mj@wyvern)

	* Final optimization results: tmm1 28->16.1 s, teff 58.8->3.1 s
	  (compiled with -g -Wall)

	* Optimization: all member function of CNEvent to access members
	  are now inline code. Alas, no significant preformance increase.

Tue Aug 17 12:13:19 1993  Martin Junius  (mj at wyvern)

	* Major rewrite of class EventList: CNEvents are now derived from
	  CNDLObject and can therefore directly be used as nodes in the
	  linked list. The function add_event(), delete_event(), next_event(),
	  peek_event() have been modified accordingly. This reduces the
	  overhead of allocating a separate DLObject for every event in
	  the event list.

	* New function CNDLList::remove_object(): remove node from list,
	  but do NOT delete DLObject. Used by CNEventList.

	* More optimization: operator new and delete for CNEvent,
	  allocating events from a fixed pool, not using time consuming
	  malloc()/free(). But this is also necessary for the CNDLObject
	  nodes used by CNDLList.

	* Changed CNSimTime to a simple `typedef double CNSimTime;', which
	  is much more efficient.

Mon Aug 16 10:51:06 1993  Martin Junius  (mj at wyvern)

	* Tried to optimize add_event() by traversing the event list in
	  the reverse direction when inserting a new event. Alas this
	  yielded NO improvement when tested with a real simulation
	  program. Therefore the old code is back in, the reverse
	  traversing in commented out. Maybe this strategy should be
	  controlled by the simulation program.

	* More optimization: special checking, whether the new event will
	  be the last one in the event list. In this common case the event
	  is just appended to the event list, avoiding the traversing of
	  the entire DLList.

	* Optimization in CNEventList::add_event(): check for empty list
	  first, CNEventList is now a friend of CNEvent, allowing direct
	  access to the members of CNEvent.

	* Added member functions empty(), length() to class CNDLList,
	  returning TRUE, if the list is empty, and the # of items in the
	  list, respectively.

Thu Aug  5 12:12:52 1993  Martin Junius  (mj at wyvern)

	* ********** RELEASE 0.11 **********

	* The fuzzy classes CNFSet, CNFVar, CNFRuleBase are now derived
	  from CNNamed.

	* New subdirectory fuzzy/ with classes for fuzzy logic
	  applications:
	  CNFSet         - Abstract base class for fuzzy sets
	  CNFSetLR       - Fuzzy set with left and right function
	  CNFSetTrapez   - Fuzzy set with trapezoid membership function
	  CNFSetTriangle - Fuzzy set with triangle membership function
	  CNFSetArray    - Fuzzy set with membership function specified by
			   an array of values
	  CNFVar         - Fuzzy linguistic variable
	  CNFRule        - Fuzzy if-then rule
	  CNFClause      - LHS and RHS parts of fuzzy rules
	  CNFRuleBase    - Fuzzy rule base and inference engine
	  No documentation yet.

	* Added function initialize() to class CNCL. This function is
	  called once by the constructor of CNCL. Currently initialize()
	  installs CNCL::new_handler() as the new operator's new handler,
	  causing the program to be terminated when out of memory.

Wed Aug  4 17:22:54 1993  Martin Junius  (mj at wyvern)

	* ********** Update 0.10.0.5 **********
	  Update due to event list bug.

	* Fixed a bug in CNEventList::delete_event(): events were removed
	  from the DLList but not deleted.

	* New subdirectory ezd/ with classes for an interface to the ezd
	  graphics server: EZD, EZDWindow, EZDDrawing, EZDObject,
	  EZDQueue, EZDServer, EZDText, EZDPushButton.
	  No documentation yet.

	* New subdirectory unix/ with system specific classes for UNIX.
	  Implemented class CNPipe, which creates UNIX pipes to a child
	  processes.

	* New class CNNamed: abstract base class for objects mit a name.
	  Files misc/CNNamed.[hc]

Mon Jul 26 14:35:34 1993  Martin Junius  (mj at wyvern)

	* ********** Update 0.10.0.4 **********

	* Fixed a bug in array classes: set_size() on an uninitalized
	  array (i.e. default or CNParam constructor called) didn't work
	  properly.

Wed Jul 21 13:56:40 1993  Martin Junius  (mj at balrog)

	* Fixed a G++ related bug in CNEventHandler::send_event(),
	  comparison of SimTime and integer constant yields false
	  results. (Must use explicit (double) type cast or double constant)

Wed Jul 21 13:13:12 1993  Martin Junius  (mj at balrog)

	* Changed member functions state(), get_state(), now() of
	  CNEventHandler to const.

Mon Jul 19 12:45:36 1993  Martin Junius  (mj at wyvern)

	* Cosmetic changes to CNEvent::dump() and CNEventHandler::dump().

	* Added member function stop() to CNEventScheduler, allowing
	  termination of simulation from within an event handler.

Thu Jul 15 15:34:01 1993  Martin Junius  (mj at wyvern)

	* ********** RELEASE 0.10 **********
	  (Actually some classes are already at revision 0.10.0.2 ;-)

	* Updated documentation for release 0.10, including stuff from
	  Martin Steppler's Studienarbeit. Alas, documentation of the
	  statistic classes is still missing.

	* Bug fixes for dump() member functions of CNDLIterator,
	  CNDLObject, and CNEvent.

	* New classes CNLRE, CNLREF, CNLREG: statistical evaluation with
	  the LRE method for F(x) and G(x).

	* Started using Emacs ChangeLog for documenting CNCL development.
