summaryrefslogtreecommitdiff
path: root/itcl/itcl/README
diff options
context:
space:
mode:
Diffstat (limited to 'itcl/itcl/README')
-rw-r--r--itcl/itcl/README311
1 files changed, 311 insertions, 0 deletions
diff --git a/itcl/itcl/README b/itcl/itcl/README
new file mode 100644
index 00000000000..fee26d2851e
--- /dev/null
+++ b/itcl/itcl/README
@@ -0,0 +1,311 @@
+------------------------------------------------------------------------
+ [incr Tcl] - version 3.3 for Tcl/Tk 8.0.3 and beyond
+------------------------------------------------------------------------
+ This is a bug-fix release in the itcl3.x series.
+
+ As much as possible, I've tried to make itcl3.x backward-compatible
+ with earlier releases. The class definition syntax has not changed
+ at all from itcl2.2, and the old itcl1.x syntax is still supported.
+ But you'll notice changes related to the new namespace mechanism in
+ Tcl 8.0. For information on incompatibilities and porting to itcl3.x,
+ read the INCOMPATIBLE file in this directory, or check out the itcl
+ web site:
+
+ http://incrtcl.sourceforge.net/
+ http://www.tcltk.com/itcl/
+
+ Many people through the years have helped me with [incr Tcl]
+ development, and I thank them for their contributions. Please
+ read the acknowledgements section below.
+
+ Send comments or suggestions to the [incr Tcl] mailing list
+ (itcl@scriptics.com) or directly to me (mmc@cadence.com).
+ If you want to subscribe to the mailing list, send a message
+ with the subject "subscribe" to "itcl-request@tcltk.com".
+
+========================================================================
+ Copyright (c) 1993-1998 Lucent Technologies, Inc.
+ Copyright (c) 1998-2000 Cadence Design Systems, Inc.
+========================================================================
+
+ OVERVIEW
+------------------------------------------------------------------------
+ - What is [incr Tcl]?
+ - Getting started
+ - Installation
+ - Integrating [incr Tcl] with other extensions
+ - Acknowledgements
+------------------------------------------------------------------------
+
+
+ What is [incr Tcl]?
+------------------------------------------------------------------------
+ [incr Tcl] is an object-oriented extension of the Tcl language. It
+ was created to support more structured programming in Tcl. Tcl scripts
+ that grow beyond a few thousand lines become extremely difficult to
+ maintain. This is because the building blocks of vanilla Tcl are
+ procedures and global variables, and all of these building blocks
+ must reside in a single global namespace. There is no support for
+ protection or encapsulation.
+
+ [incr Tcl] introduces the notion of objects. Each object is a bag
+ of data with a set of procedures or "methods" that are used to
+ manipulate it. Objects are organized into "classes" with identical
+ characteristics, and classes can inherit functionality from one
+ another. This object-oriented paradigm adds another level of
+ organization on top of the basic variable/procedure elements, and
+ the resulting code is easier to understand and maintain.
+
+ Among other things, [incr Tcl] can be used to create new widgets that
+ look and work like the usual Tk widgets, but are written entirely at
+ the Tcl language level (C code is optional). These "mega-widgets"
+ can be created using [incr Tk], a set of base classes which provide
+ the core mega-widget functionality. [incr Widgets] is a set of
+ high-level mega-widgets built using [incr Tk]. It has more than
+ 50 widget classes, and can be used right out of the box to create:
+
+ - fileselectiondialog
+ - tabnotebook
+ - panedwindow
+ - scrolledhtml
+ - combobox
+ - optionmenu
+ - scrolledlistbox
+ - scrolledframe
+ - messagedialog
+ - and many others...
+
+ Classes and/or related procedures can also be encapsulated in their
+ own "namespace". A namespace is a collection of commands, variables,
+ classes and other namespaces that is set apart from the usual global
+ scope. Elements within a namespace can be "private" or "protected",
+ so that access to them is restricted. An "import" command allows all
+ of the elements from one namespace to be integrated into another.
+
+ Extension writers will immediately see the benefit of namespaces.
+ With vanilla Tcl, each extension must add its commands and variables
+ at the global scope. Extension writers are encouraged to add a unique
+ prefix to all of the names in their package, to avoid naming collisions.
+ Extensions can now sit in their own namespace of commands and variables,
+ and sensitive elements can be protected from accidental access. For
+ example, the current release of [incr Tcl] has a namespace "itcl"
+ for object-oriented support, a namespace "itk" for mega-widget
+ support, and a namespace "iwidgets" for the [incr Widgets] package.
+ Each of these namespaces has its own collection of commands and
+ variables. Developers can then pick and choose among the extensions,
+ and integrate the parts that they need for their application by
+ importing various namespaces at the global scope.
+
+
+ Getting started
+------------------------------------------------------------------------
+ If you're just getting started with [incr Tcl], check out these
+ useful resources:
+
+ - FREE TUTORIAL on our web site: http://www.tcltk.com/itcl/
+
+ - BOOK: "[incr Tcl/Tk] from the Ground Up," by Chad Smith
+ (ISBN 0-07-212106-8)
+
+ - BOOK: "Tcl/Tk Tools," edited by Mark Harrison
+ (ISBN 1-56592-218-2)
+
+ Also, run the "catalog" demo to get an overview of the [incr Widgets]
+ package. On Windows and Macintosh systems, this is installed as one
+ of the executables. On Unix systems, this is installed in the
+ "lib/itcl/iwidgets3.0.0/demos" library directory.
+
+ The file "iwidgets3.0.0/doc/iwidgets.ps" contains a tutorial
+ introduction to the [incr Widgets] package. The mega-widget classes
+ in [incr Widgets] show off most of the functionality in this release.
+ You can use them as a pattern to create your own widget classes.
+
+ If you're a seasoned itcl professional, check the CHANGES file for a
+ summary of recent enhancements. Consult the man pages for detailed
+ information on particular commands.
+
+ Check out our web site for the latest news:
+
+ http://incrtcl.sourceforge.net/
+
+ Installation on Unix Systems
+------------------------------------------------------------------------
+ 1) Obtain this distribution from an archive site like this:
+
+ http://incrtcl.sourceforge.net/
+ http://sourceforge.net/project/showfiles.php?group_id=13244
+
+ 2) Uncompress and untar the distribution:
+
+ gunzip itcl<version>.tar.gz
+ tar xvf itcl<version>.tar
+
+ 3) Run the configuration script:
+
+ cd itcl<version>
+ ./configure
+
+ or, for systems that don't recognize "#!" in shell scripts:
+
+ cd itcl<version>
+ /bin/sh ./configure
+
+ The "configure" script finds the appropriate compiler flags and
+ generates new Makefiles from template files (Makefile.in).
+
+ By default, the configuration script will set things up so
+ that everything is installed in "/usr/local". You can change
+ this by specifying a different "prefix" in the "configure" command:
+
+ ./configure --prefix=/your/install/path
+
+ If your Tcl installation is sitting somewhere other than right
+ next to this package, you may have to tell configure where to
+ find it:
+
+ ./configure --with-tcl=/usr/local/tcl/lib
+
+ If you want to debug, you can add this option as well:
+
+ ./configure --enable-symbols
+
+ 4) Build the libraries and the executables. From the toplevel
+ directory type:
+
+ make all
+
+ 5) Install the libraries, executables, man pages and script files.
+ From the toplevel directory type:
+
+ make install
+
+ 6) Use the final product:
+
+ $ tclsh
+ % package require Itcl
+ % itcl::class Foo { method testing {} { return "testing!" } }
+
+ If you don't like the itcl:: prefix, you can import the itcl
+ commands into the global namespace:
+
+ % namespace import -force itcl::*
+ % class Foo { ... }
+
+ Note that you'll find the same behavior with [incr Widgets]:
+
+ $ wish
+ % package require Iwidgets
+ % iwidgets::optionmenu .om
+ % namespace import -force iwidgets::*
+ % optionmenu .om
+
+
+ Installation on Windows
+------------------------------------------------------------------------
+ Follow the usual TEA instructions for building under Windows.
+ Requires Cygwin and Visual C++ 6.0.
+
+
+ Installation on Macintosh Systems
+------------------------------------------------------------------------
+ Many thanks to Jim Ingham for putting up Macintosh binaries for
+ various releases. Check out http://www.tcltk.com/itcl for downloads.
+
+
+ Integrating [incr Tcl] with other extensions
+------------------------------------------------------------------------
+ [incr Tcl] is now a pure extension to Tcl/Tk. Therefore, if you
+ build the Tcl/Tk core and this package with the "--enable-shared"
+ option, you can load [incr Tcl] into a vanilla tclsh, as follows:
+
+ package require Itcl
+
+ Similarly, you can load [incr Tcl] along with the [incr Tk] mega-widget
+ facility into a vanilla wish, as follows:
+
+ package require Itk
+
+ You can load [incr Tcl], [incr Tk], and the [incr Widgets] package
+ like this:
+
+ package require Iwidgets
+
+ If you require the earlier release of [incr Widgets] for some reason,
+ you can specify the version number:
+
+ package require Iwidgets 2.2
+
+ Other packages should plug-and-play in the same fashion.
+
+ >> NOTE: If you have any trouble with dynamic loading on UNIX
+ >> systems, you may need to set your LD_LIBRARY_PATH environment
+ >> variable to include the "lib" directory for your Tcl/Tk
+ >> installation. For example:
+ >>
+ >> LD_LIBRARY_PATH="/usr/local/tcl/lib:$LD_LIBRARY_PATH"
+ >> export LD_LIBRARY_PATH
+
+
+ Acknowledgements
+------------------------------------------------------------------------
+ Thanks to Chad Smith for writing an excellent, comprehensive
+ book "[incr Tcl/Tk] from the Ground Up," for many helpful bug
+ reports, and for nudging me along to fix things.
+
+ Thanks to Matt Newman for providing the Tcl-only "tcl++" package
+ that helped so many people move forward while waiting for the
+ itcl3.0 release.
+
+ Thanks to John Ousterhout and the Scriptics team for bundling this
+ package with their TclPro product. It's gratifying to see [incr Tcl]
+ accepted as a mainstream product.
+
+ Thanks to Mark Ulferts, Sue Yockey, John Sigler, Bill Scott, Alfredo
+ Jahn, Bret Schuhmacher, Tako Schotanus and Kris Raney for building
+ the [incr Widgets] package. With a sketchy overview and a crappy
+ prototype of [incr Tk], they managed to build a nice set of mega-widgets.
+ Their initial designs helped me smooth out the rough spots in [incr Tk].
+ Thanks especially to Mark Ulferts for keeping things up over the past
+ few years, and for streamlining the package for itcl3.0.
+
+ Thanks to Jan Nijtmans, Karel Zuiderveld, and Vince Darley for helping
+ to keep up with Tcl/Tk releases, and for supporting the "plus" and
+ "dash" patches under [incr Tcl].
+
+ Thanks to Forest Rouse and ICEM CFD Engineering for integrating
+ [incr Tcl] into their Tcl/Tk compiler. This is a large undertaking,
+ and they have done an excellent job.
+
+ Thanks to Alfredo Jahn and Bret Schuhmacher at WebNet for helping
+ to create the [incr Tcl] web site, and for maintaining the
+ [incr Tcl] mailing list for many years.
+
+ Thanks to extension writers like Mark Diekhans (tclX) and Ioi Lam (Tix)
+ for making their packages compatible with [incr Tcl].
+
+ Thanks to George Howlett for teaching me how namespaces should really
+ work. He has been a constant source of inspiration, and has kept
+ a careful watch against many bad ideas. Jim Ingham fleshed out the
+ notion of explicit scoping, added many nice features to [incr Tk],
+ and has helped tremendously with porting. Lee Bernhard worked on
+ distributed systems with Iclient/Iserver, and also helped with porting.
+ Bill Scott, with a steady stream of bug reports, helped me understand
+ the questions that a typical user might have. He forced me to reinvent
+ the paradigm on more than one occasion.
+
+ Thanks to all of the alpha-testers that helped me polish this release.
+
+ Thanks to Mark Harrison for his enthusiasm and support. Due in
+ large part to his evangelism, I have been able to make [incr Tcl]
+ development a mainstream activity.
+
+ And many thanks to my wife Maria and my children Maxwell and Katie
+ for putting up with all of this.
+
+--Michael
+. . . . . . . . . . . . . . . . . ---_-----------
+ . . . . . . . . . | c a d e n c e |
+ Michael McLennan . ---------------
+ mmc@cadence.com . Cadence Design Systems, Inc.
+ phone: 610-398-6348 . 7535 Windsor Dr. Suite A-200
+ fax: 610-530-7985 . Allentown, PA 18195