## -*-Text-*-
 # ###################################################################
 #	EvoX - evolution in complex systems
 # 
 #	FILE: "changes"
 #									  created: 15/4/96 {9:03:24 pm} 
 #								  last update: 13/12/96 {1:06:18 am} 
 #	Author:	Vince Darley
 #	E-mail:	
 #	  mail:	Division of	Applied	Sciences, Harvard University
 #			Oxford Street, Cambridge MA	02138, USA
 #	   www:	
 #	
 # ###################################################################
 ##

To Do:

	File-name configuration options don't deal with command completion.  
	So if I do:
		
		object configure -Input_file ~/data/filen
	
	it won't complete.

Recent Changes:

--released version 1.20--

13/12/96 Added a proc to display the contents of a C++ object in a window.
		For the moment it is very simple, not even allowing you to edit
		the values of data members (the EvoX system has a powerful GUI,
		some of which I'm gradually relaxing to require just Cpptclextra).
		
9/12/96 The cpparse.tcl scripts work reasonably well now.  You can parse
		C++ classes and create cpptcl wrappers for them without any source
		code modification.  See the files 'cpxTutorial.c/h' for details.
		
		Added the 'info_source_ref_fn' source type for easier integration
		of existing C++ classes.  Few minor fixes elsewhere.

8/12/96 Added option '-withargs' to 'cpptcl complete'.  Now completions
		can list subsequent arguments as well as the basic completion.
		Here's the difference:
		
		% cpptcl complete -withargs cpptclControl
		Completions:
		cpptclControl commandFor type
		cpptclControl hasDescendants type
		cpptclControl isa type1 type2
		cpptclControl listAncestry type
		cpptclControl listDescendants type
		cpptclControl listParents type
		cpptclControl listTypes ?fromType?
		cpptclControl rename newName
		% cpptcl complete cpptclControl
		Completions:
		cpptclControl commandFor
		cpptclControl hasDescendants
		cpptclControl isa
		cpptclControl listAncestry
		cpptclControl listDescendants
		cpptclControl listParents
		cpptclControl listTypes
		cpptclControl rename
		% 
		
		Simplified internals of object creation through 'tcl_class', so
		command completion works there too.  
		
		Added the 'tcl_args::match_into' public member function which
		forces a match of whatever's next, reading the argument into the
		given variable.  Any errors/completions are dealt with correctly.
		
4/12/96 Configuration of boolean member variables is more sophisticated 
		now.  I use the Tcl_GetBoolean function so you can read from 0, 1,
		true, false, yes, no,É 
		
		Added a few more demonstration classes.

2/12/96 Minor changes for improved compatibility with Itcl 2.2 as well
		as Itcl 2.1

22/11/96 Improvements to some internal library search procedures so that
		you can find your library files more easily and robustly on all
		Tcl platforms.
		
8/11/96 Small bug-fixes to configuration of boolean values.

--released version 1.1--

24/7/96 Some minor changes to remove a couple of warnings, and fix 
		compilation of some obscure argument templates.
		
23/7/96 Information configuration option command completion implemented.
		Simplified a bunch of code as a result.  Fixed so configuration
		options get archived if desired.
		
22/7/96 The argument parsing class has a few new methods to peek
		ahead on the argument list and check if an argument is of
		type 'int', 'float' or 'string'.  This can be useful if 
		your commands need some sort of decision process in the
		way in which they parse their arguments.

20/7/96	Cpptcl now loads a 'cpptcl.tcl' library file by default.
		This is partly useful, and partly to show you how to use
		a new feature of the tcl_stream class which can locate
		your library files for you (if you use Itcl --- if you don't,
		just set the compiler flag 'NO_ITCL' and the new code will
		vanish).

20/7/96 Quite major changes.  Moved the metaobject functionality from
		Cpptclextra into Cpptcl.  Now the creation of any C++ object
		is best handled through the metaobject.  It can keep track of
		your hierarchy, answer questions about it, and create objects
		of specified types very easily.  Backwards compatibible in 
		almost all respects.
		
		Archival of object creation (if desired), and status/error
		messages are handled by a split-off 'recordkeeper' object,
		rather than by the metaobject as before.
		
		Made the Cpptcl API more explicit.

8/7/96  Removed defunct method 'operator ||' from class tcl_args

--released version 1.03--

5/7/96  Added a new procedure 'Cpptcl_PkgInit' which you can use
		to simplify your init procedure.  See the Cpptclextra init
		for an example.

5/7/96  Added more comments to the demo, and put it on-line

5/7/96  Put in decent error messages for setting of options with
		values which aren't in range.  So you now get:
		
		% cpptclControl configure -Status_alert_level 11
		read partial cmd 'cpptclControl configure -Status_alert_level' 
		but failed to convert next argument '11'to the range: [-1,10]; 
		syntax should be 'cpptclControl configure -Status_alert_level value'
		% 
		
5/7/96  Fixed 'obj configure -Input_file "Name with spaces"' so it
		works (good on MacOS where we can have filenames with spaces)
		
29/6/96	Added demo, and fixed some stuff in configure/makefile

--released version 1.02--

28/6/96 Changed name of file 'cpptclextra_objects' to 'cpptclextra_init'
		for consistency.
		
27/6/96 Now check for limits on observables whose limits are declared
		(e.g. cpptclControl:Status_alert_level = -2 gives an error)
		The error messages for these are currently rather poor.

26/6/96 Added a utility procedure 'documentObject' which extracts
		help text on a cpptcl object's commands. e.g.
		
		% documentObject cpptcl
		cpptcl author : name and e-mail address for bug reports
		cpptcl complete : complete a command on a Cpptcl object
		cpptcl isCpptcl : is this a Cpptcl object
		cpptcl maxCompletion : return maximum length common prefix for last completion
		cpptcl origCommand : return length of command which was completed
		cpptcl rename : changes the Tcl command name of the object
		cpptcl webPage : web page for online documentation

		In doing so, fixed a few cosmetic bugs in the C++ code.

25/6/96 Neatened a few things so some lists which are returned are sorted 
		alphabetically (e.g. 'Toaster configure')
		
25/6/96 Object configuration options are checked after construction,
		so you can do 'Toaster t -size 5 -color Green -output t.txt' 
		to construct and configure an object.  This works for contained 
		observables and files (input or output).
		
		If configuration fails, the object is still constructed, but
		an error message will be signalled.  Configure options are parsed
		in a left-to-right fashion, terminating on an error.

25/6/96 Added checking for sub-object commands so you can now do:
			cpptclControl:Status_alert_level = 0
		or
			cpptclControl Status_alert_level = 0

		i.e. if a sub-object exists with the given name, it is sent
		the command.  Potential problems are that a sub-object could
		over-ride the parent's command in this way.  Also I currently
		do not add sub-object names to the 'arg' error message so
		'cpptclControl ' will not list the sub-objects as possible 
		commands (easy to change but perhaps not desired). Feedback
		is most welcome!
		
		The basic purpose of this is so that ultimately 'cpptclControl:St..'
		does not exist at the top level; i.e. my objects will become like
		namespaces.  I need to look into the details of this a bit more.
		
--released version 1.0--

21/6/96 Added command completion to the 'cpptcl' package, and made it
		a real Tcl package.  Major improvement! Separated 'cpptcl' from
		the rest of the evox system.

21/6/96 Many minor changes including partial re-integration of the old
		Tcl/Tk interface.  Now some of it works with Itcl2.1/Itk/...
		
24/5/96 Now use DOC++ for automatic documentation generation.  See my web 
		pages for the results.  A bit more documentation is required, but
		this tool makes it all a lot easier.

12/5/96 Significant changes to the info_source_XXX hierarchy, although
		no changes are visible to user-code.  I did this to allow a bit
		more flexibility in declaring sources, so that C++-Tcl interfaces
		can be generated automatically in the future.
		
30/4/96 A few simplifications to 'tcl_args' allowing the direct reading
		of more classes from the argument list.  Itemised variables now
		read and write with their names (they are like 'enum' in C). For
		backwards compatibility they will read from numbers too.

23/4/96 Various more C++-incompatible changes which make for a much simpler
		procedure for construction and manipulation of objects from the
		Tcl interface, and allow your C++ code to have far fewer checks
		in it.

19/4/96 Added function 'Cpptclextra_Init' which loads in just the
		two libraries 'Cpptclextra' and 'Cpptcl', creating a new
		object 'cpptclControl' in the process.
		
19/4/96 Improved the parsing system immensely.  It now works whether
		or not excepting handling is supported.  The only disadvantage
		if you don't use exception handling is that objects constructed
		unnecessarily (after an error has been thrown) may not be
		destroyed, thus wasting memory.  However, such situations need 
		not arise with careful coding.  C++/Tcl interfaces are now
		trivially self-documenting! Tested using gcc2.7.2 and CW8.
		Totally backwards-incompatible (at the C++ level; old scripts will 
		still work), but thankfully so!

16/4/96	Beginnings of a better system for parsing tcl commands.  It's
		much more typical of C++, and makes for simpler user coding.
		The only drawback is that it requires exceptions (v. v. simple
		ones, but exception nonetheless).  I'll retain backwards
		compatibility until g++ supports my new code.

========
History:

Various releases from 1994 to early 1996 to individuals for research purposes.