[[incr Tcl]] (the humorous name for the [Tcl] package "[Itcl]") is one of the most widely used O-O system for Tcl. The name is a play on C++, and [[incr Tcl]] provides a similar object model, including multiple inheritence and public and private classes and variables. While there are over a dozen [OO] extensions for Tcl, [[incr Tcl]] is one of the compiled C extensions, which results in better performance than other, all-Tcl object systems. [AK]: [XOTcl] is another compiled OO extension. [[incr Tcl]] is a component of some ''[batteries included]'' Tcl distributions, such as [Tcl Dev Kit], [ActiveTcl] and [Tclkit]. [[incr Tcl]] is also the foundation of [[incr Tk]] and the [Iwidgets] megawidgets. The home page is http://incrtcl.sourceforge.net/itcl/, and source code is available at http://sourceforge.net/projects/incrtcl ---- The script level commands made available by the itcl extension are: * itcl::body http://www.tcl.tk/man/itcl3.1/body.n.html * itcl::class http://www.tcl.tk/man/itcl3.1/class.n.html * itcl::code http://www.tcl.tk/man/itcl3.1/code.n.html * itcl::configbody http://www.tcl.tk/man/itcl3.1/configbody.n.html * itcl::delete http://www.tcl.tk/man/itcl3.1/delete.n.html * itcl::ensemble http://www.tcl.tk/man/itcl3.1/ensemble.n.html * itcl::find http://www.tcl.tk/man/itcl3.1/find.n.html * itcl::is http://www.tcl.tk/man/itcl3.1/is.n.html * itcl::local http://www.tcl.tk/man/itcl3.1/local.n.html * itcl::scope http://www.tcl.tk/man/itcl3.1/scope.n.html See http://www.tcl.tk/man/itcl3.1/ for more doc references. ---- [Marty Backe] posted an apt testimonial to comp.lang.tcl: "I've been using Iwidgets for awhile now, and recently completed a project that was fully implemented in itcl (including Iwidgets). I'm converted. Once you write a program based on objects, you might be hard pressed to go back to the straight tcl way. It becomes VERY easyto write clear, concise code. Of course you can do the same with namespaces (that's what I've been doing), but it takes a lot more work, and the result isn't as satisfying (IMHO). My current approach is to have one file that contains the main application, which primarily creates objects via class files sourced from a class/ directory. Each object is defined in one class file. This facilitates testing of the objects prior to integration into the application. Arguably, Itcl is probably one of the most mature extensions available for Tcl. I think that should be your least concern. ---- [Michael McLennan] pointed out on the Incr Tcl Users' mailing list that you can create auto-load index files for Incr Tcl packages, so that class files only get sourced as needed. (Lazy loading.) $ tclsh % package require Itcl % cd /dir/containing/tcl/files % auto_mkindex . *.tcl *.itcl *.itk Note that the trick for making Itcl index files is just to load Itcl before calling auto_mkindex. That way, it will recognize your itcl::class definitions and add them to the index. ---- In the past, there were web pages and an old porting guide for itcl on the http://purl.org/tcl/package/itcl/ web site. That site does not seem to respond any longer. Also, a lot of the same information from the web site used to be found at http://sf.net/projects/tclweb/ . However, it has not changed for quite some time. The itcl3.2 source distribution does have information on porting from 2.2 to 3.2. See these two files: INCOMPATIBLE CHANGES A [TIP] has been proposed to include the code for itcl in the tcl core tar file, but as an extension which one can load or not depending on the need. Options for getting [itk] and [Iwidgets] seperately were planned quite a long time ago, but activity relating to this extension appears to be low - watch http://sourceforge.net/projects/incrtcl/ for more details. ---- Note - it appears that when building incr tcl from source, one needs to install before doing the test suite. That rather is annoying - one must overwrite one's current installation before testing a patch to see if the resulting extension even works ... ---- [Persistent incr-Tcl objects] describes how to add the capability to write out a script which will restore the state of the objects in a program at a later date. This is also refered to as the ''serialisation'' of objects. ---- What: tydoc Where: http://ptolemy.eecs.berkeley.edu/tycho/ http://ptolemy.eecs.berkeley.edu/tycho/tycho0.2.1/tycho0.2.1/util/tydoc/doc/ ftp://ptolemy.eecs.berkeley.edu/pub/tycho/tycho0.3/tydoc3.0.src.tar.gz Description: A part of Tycho, tydoc takes itcl source code and generates html. Expects you to maintain classes and procs in separate files. Does not generate an entire source tree recursively - you provide the specific file names that you want doc generated. Has a few javadoc like tags. Updated: 01/1999 Contact: mailto:cxh@EECS.Berkeley.EDU (Christopher Hylands) ---- An archive for the distributed processing incr tcl discussion may be found at gopher://nisp.ncl.ac.uk/11/lists-a-e/distinct/ . A WWW page describing an [incr tcl] widget base class can be found at http://scorch.doc.ic.ac.uk/%7Enp2/itcl_widgets . It is by mailto:np2@doc.ic.ac.uk (Nat Pryce). Information about the use of Tcl and [incr Tcl] during prototyping of the Mars PathFinder project can be found at ftp://ftp.procplace.com/pub/tcl/sorted/misc/Tcl_on_Pathfinder/ . At http://www.stsci.edu/public/sst/rps2/rps2-paper.html an interesting paper resides regarding an interactive tool using incr tcl/incr tk to aid in proposal preparation for the Hubble Space Telescope. At http://www.doitnow.com/%7Eiliad/Tcl/tea/tea_faq.html , the author of the Tea OO Tcl extension provides a comparison between Tea and incr tcl. A mailing list for users of itcl is managed at the sourceforge project site. It is, however, nearly comotose. A mailing list for the incr tcl distributed version - aka Distinct - can be joined by sending send a message to mailto:mailbase@mailbase.ac.uk where the body contains the line join distinct firstname lastname To send to the list, mail mailto:distinct@mailbase.ac.uk . ---- Some applications which make use of incr tcl include: What: ADAM (Affordable Desktop Application Manager) Where: http://wwwcn.cern.ch/umtf/adam.html Description: A itcl package which can be used to organize the applications on your desktop. Updated: 09/1996 Contact: mailto:ADAM.Support@cern.ch What: AutoDOC Where: http://www.uni-muenster.de/informatik/u/reiberg/autodoc Description: Automatic man page HTML documentation for C++ classes. Requires itcl 2.2. Updated: 09/1997 Contact: mailto:reiberg@uni-muenster.de (Joerg Reiberg) What: boob Where: From the contact Description: Tool Object oriented objection builder which manages SCM builds and repository duties. Written in itcl and uses itcl files as dependencies and build scripts. Rules based dependencies with on the fly scanning of c/c++ files. Updated: 10/1998 Contact: mailto:bob@sitecraft.com (Bob McWhirter) What: CC2Itcl Where: http://wwwmath.uni-muenster.de/informatik/u/mam/IMAM/imamvrs-generator.htm Description: Generate bindings to get C++ classes integrated into Itcl. Updated: 02/2000 Contact: Unknown What: cpp2itcl Where: From the contact Description: Program to parse C++ header files and automaticallty extract C++ bindings. Updated: Contact: mailto:karel.zuiderveld@cv.ruu.nl (Karel Zuiderveld) What: HTCLtoTCL Where: ftp://www.lbl.gov/pub/htcl.tar http://www.lbl.gov/%7Eclarsen/projects/htcl.tar http://www.lbl.gov/%7Eclarsen/projects/htcl.html Description: Extracts Tcl from HTML/Tcl merged file. Requires [incr tcl]/itcl. Also has contains program which parses arguments passed by httpd type server from FORM input. Updated: Contact: mailto:clarsen@lbl.gov (Case Larsen) What: InfoPrism Where: http://www.linuxia.de/InfoPrism/ http://www.han.de/%7Eracke/InfoPrism/ http://www.han.de/%7Eracke/InfoPrism/infism.tar.gz Description: A general document processing system that translates SGML comforming to the InfoPrism DTD to different output formats, such as HTML, Texinfo, LaTeX and plain text. Latest version now supports SGML scripts - that is, microscripted SGML documents (with embedded Tcl code that gets processed in a preprocessor manner). Uses itcl 3.0, an SGML parser (such as sgmls v1.1.91 and nsgmls v1.1.1), and Jultaf library v0.0.9 or newer. It uses the GPL. At this time it is alpha quality. Updated: 04/1999 Contact: mailto:racke@gundel.han.de (Stefan Hornburg) What: knews Where: http://avonlea.kanga.org/tcl/ Description: Proof of concept NNTP server written in itcl. Updated: 05/2000 Contact: mailto:dacut@kanga.org What: moonshine Where: http://www.rednecksoft.com/ Description: Source code editor which recognizes most of the Tcl/Tk, Itcl, and Expect commands. Has customizable syntax highlighting Updated: 02/2000 Contact: mailto:schwarzkopf@my-deja.com What: newsflash Where: ftp://ftp.procplace.com/pub/tcl/sorted/packages-7.6/net/newsflash-0.2/newsflash-0.2.tar.gz Description: A NNTP newsreader written using Tcl/Tk. It has article threading, multiple newsrc files, article decoding. It does not yet support killfiles, moderated newsgroup posting, email replies, multi-article save/uudecode, searching, or documentation. Requires Tcl 7.4/Tk 4.0, BLT 1.7, [incr tcl] 1.5 and tcl-dp 3.2. Updated: 02/1997 Contact: mailto:koert@cais.com (Koert Zeilstra) What: nntp server Where: http://avonlea.kanga.org/tcl/ Description: A proof-of-concept NNTP server (written in Itcl). Updated: 06/2000 Contact: mailto:dacut@kanga.org [Patience] What: Point repulsion demonstration Where: ftp://ftp.cs.unc.edu/pub/users/leech/points.tar.gz Description: Two C++ programs designed to answer the question of how to distribute N points on a spere and how to tesselate a sphere. Uses Tk and itcl to display results. Updated: Contact: mailto:jon@alumni.caltech.edu (Jon Leech) What: Qba Where: http://www.hsdi.com/qddb/applications/qba-docs ftp://ftp.ms.uky.edu/pub/unix/qddb/fx-examples/Qba-1.0beta.tar.gz http://www.hsdi.com/qddb Description: Qba is the Qddb Business Application. It provides a Qddb/Fx interface for managing clients, inventory, invoices, payments, and the like. Requires Tcl 7.4/Tk 4.0/itcl-1.5/BLT 1.8/Tix 4.0/Qddb-1.42.6 and tktable. Updated: 04/1997 Contact: mailto:gil@iac.net (Qba author) mailto:qddb-users@ms.uky.edu (Qddb mailing list) What: Qddb Where: http://www.hsdi.com/qddb/ http://www.hsdi.com/qddb/applications http://www.hsdi.com/qddb/reports.html http://www.hsdi.com/qddb/usersguide http://www.hsdi.com/qddb/orders ftp://ftp.hsdi.com/pub/qddb/sources/ ftp://ftp.ms.uky.edu/pub/unix/qddb/qddb-1.44.tar.gz ftp://ftp.ms.uky.edu/pub/unix/qddb/qddb-examples.tar.gz ftp://ftp.ms.uky.edu/pub/unix/qddb/255-95.ps.gz ftp://ftp.ms.uky.edu/pub/unix/qddb/qhelp-0.3.tar.gz ftp://ftp.hsdi.com/pub/qddb/sources/ ftp://ftp.hsdi.com/pub/qddb/docs/usersguide-1.43-html.tar.gz ftp://ftp.hsdi.com/pub/qddb/docs/usersguide-1.43.ps.gz ftp://ftp.denet.dk/pub/unix/qddb/qddb/ Description: A Quick and Dirty DataBase (Qddb) package. It uses Tcl as a configuration language. Also has a Tk interface with TkTable extension. qhelp is a sample hypertext help system. Under the qddb/applications web site listed above are a set of example applications such as a Web guestbook, an address book, music albums tracking system, runner's log, recipe management system, bug tracker, client information database, and animal hospital software package. Supports Tk 4.2/itcl 2.2. Requires itcl, BLT 2.1 and tclX is recommended. Also supports Tix. While at one time this was free, it apparently is now commercial. Currently at version 2.0.0 . Updated: 09/2001 Contact: mailto:qddb-users-request@ms.uky.edu (Qddb user mailing list) mailto:qddb-bugs@ms.uky.edu (Qddb bugs only) What: TSIPP Work Bench Where: http://tsippwb.sourceforge.net Description: A point-and-click editor for 3D pictures and animations. Originally targeted at the software rendering engine TSIPP developed by Mark Diekhans, but is in the process of being enhanced to drive OpenGL using the TkOGL package by Claudio Esperanca. Updated: 08/2002 Contact: mailto:crossrad@users.sourceforge.net (Paul Welton) What: [incr Tcl] class browser Where: ftp://ftp.procplace.com/pub/tcl/sorted/packages-7.6/devel/class-browser1.0.tar.gz Description: A very simple iTcl graphical class browser. V1.2 is now available from the contact. Updated: 10/1998 Contact: mailto:asson@stsci.edu (Drew J. Asson) ??? ---- (JULY 28, 2003) I'm interested in learning about iTCL, what is the best source for a tutorial? I would greatly appreciate any input... kdo [lv] did you read here on the wiki about [incr tcl]? The book about incr tcl is the best tutorial there is; alas, incr tcl, like tclx, as well as a number of other quite widely used extensions, do not seem as widely documented as they could be. And the book may be difficult to locate. ----- Googie - Some ideas for writing one's own [Pure-Itcl widgets] (no [itk]). ----- See also [incr Tk]/[itk] and [incr Widgets]/[iwidgets] ---- [Incr Tcl Design Patterns] - [BOOK Tcl/Tk Tools] (which contains an out of date tutorial for itcl) - [BOOK incr Tcl from the Ground Up] ---- [Category Object Orientation] | [Category Package]