DOC "README" {
			    -------------
			    --  obTcl  --
			    -------------

			       v0.57b3

			       28/6/96


Description
-----------
	`obTcl' is a pure-Tcl object- and Megawidget-extension.
	No binary extensions are needed.

	The system supports multiple inheritance and three new
	storage classes.  Efficiency is obtained through method-
	resolution caching.

	The distribution comes with a demo which demonstrates some
	useful mega-widgets; among others a Tab widget (a.k.a
	Notebook widget), and a paned-window widget.  The demo also
	contains a system for reading the obTcl documentation.

	The mega-widget support allows creation of mega-widgets
	which handle like ordinary Tk-widgets; i.e can be "packed",
	"deleted", "placed" etc, intermixed with ordinary Tk-widgets.

	obTcl provides instance variables and class variables. Two
	types of class class variables are provided: definition-
	class scoped, and instance-class scoped.

	Pronunciation: `obTcl' sounds like "optical".

!! NEWS !!
----------
    *	The entire obTcl package may now be fully auto-loaded.
	Simply append the installation directory to `auto_path'
	(see the Tcl manpages for how to auto-load packages).

    *	A dynamically loadable performance booster is now included.
	After it has been loaded, performance is radically increased
	for certain common obTcl operations, such as declaring
	variables and invoking methods.  It works with Tcl7.5/Tk4.1.

    *	The PanedWindow widget has been improved to allow for
	non auto-resizing sections.

To try it out
-------------
	First unzip and untar the distribution file.
	Then cd to "obTcl-*", and try one of:

	./demo/demo
	wish ./demo/demo

Installation
------------
    Using obTcl in your applications

	The obTcl directory may be placed anywhere -simply
	appending its location to the `auto_path' variable
	gives access to all obTcl's features.

    Using the DLL booster module

	The DLL booster module needs wish4.1 or later.

	If you want to use the booster module, you may
	need to edit the Makefile (TCL_INCL, LD_SHARED and
	SHLIB_FLAGS).  You can get hints on values for LD_SHARED
	and SHLIB_FLAGS from your compiled sources of tcl7.5
	(if available).
	Please mail me any changes that were required to compile
	the library on your platform!

	After editing Makefile, type

		make dll

	to create the booster library.

	Once main/obtcl*.so has been made, obTcl will automatically
	use it.

	obTcl can run in separate interpreters in wish4.1.
	The speed booster will be loaded into each interpreter
	separately.

Files
-----
	README  - This file.
	COPYRIGHT
		- Describes conditions for usage.

	tclIndex
		- An index which includes all classes in obTcl
		  (main, widgets and experim).

	main/	- The main object system, the Base class,
		  and some utilities.

	widgets/
		- A base class for Tk mega widgets (class Widget
		  in wbase.tcl).
		- Mega-widgets in various stages of completion.

	experim/
		- Experimental things.  Some more widely in use
		  than others.

	demo/	- Contains the demo scripts.  Start the demo
		  by invoking the ./demo/demo script.

	doc/	- The source of the obTcl man page, and various
		  renderings of the same.

	tests/	- A test suit (or the humble beginnings rather).

	tcl_cruncher/
		- A package for stripping tcl files.

	old/	- Contains various phased-out pieces of code
		  (for reference).

Plans
-----
	Proper manpages, or improved DOC system (which should
	combine in-code readability with pretty-rendering in the
	help system).

	More classes:  standard-look geometry managers,
	focus/keyboard-traversal manager, file selector,
	combo box, etc.

	Automated regression testing.
	General streamlining (of course).

Why use a pure-Tcl OO-extension?
--------------------------------
	o  It does not require any binary modules, so it runs on a
	   vanilla `wish' or `tclsh'.  One advantage of this is:
	   no "warehouse" of extension modules for different systems
	   is required (avoiding the usual re-porting of these after
	   a change).  Shortly: if wish/tclsh runs, `obTcl' runs.

	o  It can run in safe-Tcl

	o  Having a small core with very powerful basic capabilities
	   (wish), allows extensions to be expressed in terms of
	   the core functionality.  This saves internet bandwidth,
	   and allows safe execution of untrusted code, provided
	   that the core is certified.  In comparison, each binary
	   extension must be certified as safe separately.

	o  Moving in this direction helps identifying a small set of
	   useful additions to the core Tcl -additions which
	   facilitates building higher-level Tcl-extensions
	   efficiently.

Availability
------------
	Primary location:  ftp://ftp.dynas.se/pub/tcl/obTcl.tar.gz
	US location: http://www.osf.org/~loverso/tcl-tk/obTcl/

	The US location also holds very up-to-date alpha and
	beta versions of obTcl, and various bug fixes.

Copyright
---------
	Copyright (C) 1995 DynaSoft AB.  The copyrights are very
	similar to those of Tcl/Tk.  See the file COPYRIGHT for
	copyright information.

Author
------
	Please direct comments, ideas, complaints, etc. to:

		patrik@dynas.se

   	Patrik Floding
   	DynaSoft AB

NON SQUASHED BUGS
-----------------
	Tabs may not look nice on monochrome displays.
	In general, the mega-widgets provided are mostly
	provided as examples (they should really be more complete).
	Also, as the version number indicates, some needed
	functionality may be lacking from obTcl.

	Below is a list of bugs that have been reported to me, but
	I am unable to fix since I cannot reproduce the behaviour.
	If you stumble on this bug and know your Tcl/Tk, feel free
	to fix the problem and mail me a patch :-) (please state
	for which version of obTcl the patch has been made).

	Also: please re-report any occurrences of these bugs - I
	suspect they might have "gone away" with newer versions
	of Tk, and hence I will not try to fix them unless reported
	again!

  001	The demo may generate random Kanji-text on wish'es which
	has support for Kanji.
  002	The paned-window handle is not properly managed on some
	systems (under olwm?), thus generating error messages.
  003	The demo failed to start the Tk "widget" demo.

CHANGELOG  (later changes are closer to the top of the list)
---------
  0.57b3 27/6/96
	The test-suite has been somewhat improved.

	obTcl now has two alternative implementations of instvars,
	one which hides away instvars in arrays (using multi-level
	upvars), and the old implementation using the global
	namespace.  The new implementation is automatically used
	when the speed-up DLL is used -it needs the command
	"uv_unset" which is defined by the DLL.  Otherwise the old
	implementation is used.
	The new implementation _can_ be used without the DLL, in
	which case varibles accessed via instvar2global will result
	in stale upvars polluting the global namespace) (it would be
	nice to have "uv_unset" in the standard Tcl-distribution).

  0.57b2 28/5/96
	Fixed some of the problems with using variables, objects
	and class names containing spaces.
	Added more test suites to the tests directory.
	Re-arranged code so all variable handling is in a
	separate file.

  0.57b1 15/5/96
	Fixed a bug that was revealed when using an X-server
	without any "*background" resource.

	Added the "next" command to the speed-up module.
	This "next" is only used when using single inheritance,
	which is now the default.  
	Added cache method creation to the speed-up module.
	So, when the DLL is in use, inherited methods are
	as fast as native methods.
	Added class-object handling and method creation to the
	speed-up module.  Greatly reduces script loading time.
	Between 2 and 10 times speed-up, the higher figure for
	scripts with large method bodies.
	** Note that both class-object and normal objects are
	commands (not procs) when using the speed-up module! **

	** Incompatibility **
	Removed cache invalidation from the method creation
	procedure.  This change will probably not affect any
	application using obTcl.

	Removed the "copy-proc" caching feature, as it seems
	to slow load times unacceptably.

	** Incompatibility **
	I am now deprecating the use of multiple inheritance,
	which is now _disabled_ by default.  Multiple inheritance,
	in its current shape, has proven to be a source of trouble.
	If you use obTcl, and use multiple inheritance, please send
	me a mail about it!

	A total rewrite of option handling.  Definition of option
	handlers was sped-up 10X, invoking them appr. 2.5X.
	Object default-var initialization was sped-up appr. 2.5X.
	** Some incompatibility with old handler exists:
	`break' cannot be used to restore the previous option-value.
	Reset the value from the variable `$_old' instead **
	Dropped some obscure, buggy, features of the old system.
	Old handler can be found in old/options.tcl

	Added automatic detection and loading of any "dll"
	speed-up module (which may be created by doing "make dll").
	Thanks to John R. LoVerso.

	New file structure: Using subdirs to distinguish various
	obTcl parts. 

	Altered the way the Base class is inherited.  Base used
	to be added to the multiple inheritance list of every
	class.  Now it is implicitly inherited via the normal
	sub-classing mechanism.  This means that Base is now
	_directly_ inherited only by classes that don't specify
	any heritage (this is how is always should have been).

	Fixed flaw that prevented multiple inheritance from
	working when the inheriting class had no own method
	defined (and consequently didn't use `next').

	Fixed bug in the color calculations in the Tab widget.
	Fixed bug which prevented the demo from starting if no
	`*background' X-resource was set.

	Added "copy the whole proc" method caching. This is now
	the default.  It may be turned off on a per class level,
	or on a per method level.  See `class Base' for how.

	Now mega-widget toplevels get their class names
	correctly set to the mega-widget's class.

	Started on a "component" facility for mega-widgets
	(and other composed objects).

	Altered obtcl_mkindex to allow making a single tclIndex
	for several subdirectories.

	Introduced the class `Obtcl' and its always existing
	instance `obtcl', which gives access to global obTcl info.
	Currently available info is: defined classes and existing
	objects.  From this information all other info can be
	obtained.  The obTcl class also has a notifier method,
	which can be used to hook in calls for certain obTcl events.

	Started on `introSpect', an introspection and debuging
	facility with a Tk GUI (what else?).

	Changed the Base method `eval' so it emulates a method
	native to the invoker.  This enables convenient things like

		my_obj eval bp
		#2: eval instvar [$self info instvars]

	which would bring all existing instvars for this object
	into scope.  Before, one had to hand-tweak $class before
	calling instvar.  I don't think this change will break
	anything.
	Added command `i' to the debugger for bringing all
	instvars into scope.
		
  0.56	18/2/96
	Added obtcl.tcl to tclIndex for full auto-load.
	Added obtcl.c - A performance boosting loadable module.
	Added script `obtcl_mkindex' to allow packages that
	depend on obTcl to easily make their own index files.
	Changed demo script to load tabs on demand - gives
	quicker startup.
	Alpha-state additions to the PanedWindow widget - allows
	"static" panes (panes that don't resize automatically).

  0.54	17/12/95
	Moved some previously hard-coded methods into the Base class.
	Added the prefix "ot" to (almost) all internally used procs.
	Added a simple test script.
	Beautified the demo's front page.

  0.53	16/12/95
	Added auto-load support for classes, similar to suggestion
	from John Robert LoVerso <loverso@osf.org>.
	Auto load is performed lazily; when inheritance resolution
	requires it.  This is mainly to preserve the ability for
	arbitrary class definition order (which can be useful in many
	situations).
	A non-lazy mode may be added later for better error catching.

  0.52	5/12/95
	The original public release.
}
