Tcl - What is it?

Tcl enables Tcl applications on the Macintosh to use AppleEvents for communication with other programs and for the AppleEvent Manager to communicate with Tcl applications. The nature of the MacOS (at least prior to MacOS X) makes it impossible to implement any meaningful exec command. Between agreeable applications, AppleEvents allow communication of anything that can be passed as an argument to a command-line application and much more. The key is to make the applications agreeable. Tcl is an attempt to get Tcl to support its end of the bargain. Tcl is complementary to Jim Inghams Tclapplescript.shlb (included in the Tcl distributions). Depending on your task and your relative familiarity with AppleScript and raw AppleEvents, you may find one tool or the other preferable.

Tcl inherits directly from the AppleEvent facilities in the Alpha text editor, as written by Pete Keleher and Tim Endres. For many years, Alpha has used Jens Alfkes AEGizmos to render the pathologically-typed binary data in AppleEvents into a Tcl-manageable string form. Unfortunately, while AEGizmos are reasonably easy for humans to read, they're not the most convenient format for a computer to interpret. Alpha programmers wishing to interact with other programs have generally applied regular expressions to these strings (with varying degrees of success), in order to extract the information they were interested in. Several years ago, I got tired of writing the same regexp expressions and sanity checks over and over, so I set out to write a complete AEGizmo parser. This parser, in one form or another, has been a part of Alpha for a few years.

While this Tcl-based AEGizmo parser works well, it can be incredibly slow. A while back, a small group of Alphas users and I formed the Alpha Cabal to assume development tasks from Alphas originator, Pete Keleher (Pete has irresponsibly decided to procreate and pursue tenure, rather than work on Alpha like hes supposed to). One of my prime interests was in improving Alphas AppleEvent capabilities. After some initial efforts at speeding up the parser, my dain bramage cleared up and I set out to simply expose as much of the AppleEvent Manager API to Tcl as possible. By avoiding the parsing step, speedups of a hundred-fold are typical. As the project progressed, it became clear that this could be a useful tool for any Tcl-based program, so I generalized the shared library to work with any Tcl 8 installation, and Pete generously agreed to let me open-source what was left of his code. Many of the design decisions in Tcl (see Memory Leaks) reflect the need to achieve (nearly) the same results with Alpha 7, Alpha 8, and Wish.

Tcl - Where is it?

You can download the latest version of Tcl from SourceForge.

Tcl - How is it installed?

For use in the AlphaX text editor, the Wish shell, and other Tcl applications

Place TclAE.shlb where Tcl can find it, such as in one of the directories of $tcl_library or in the same folder as the application.

Invoke the library by calling package require tclAE.

Ever since version 8, Alpha will not work properly if Tcl is not installed.

Tcl has been predominantly tested with Tcl 8.4. It may work with other versions, but certainly none before Tcl 8.0.

Tcl - How is it used?

Tcl - How is it built?

Tcl uses the Tcl Extension Architecture (TEA) and should build cleanly on recent Mac OS X machines (certainly works on Intel and PPC Tiger machines, and may build on older OSes). Xcode 2.4 is recommended; older than 2.2 won't work.

Although not a requirement of use, please send me any of your changes so that I can incorporate them.

Tcl - What's Changed?

Version 2.0.3 January 10, 2008

Version 2.0.2 July 9, 2007

Version 2.0.1 April 12, 2006

Version 2.0 July 26, 2004

Version 2.0b15 March 3, 2004

Version 2.0b14 June 22, 2003

Version 2.0b13 March 13, 2003

Version 2.0b12 February 21, 2003

Version 2.0b11 November 11, 2002

Version 2.0b10 September 9, 2002

Version 2.0b9 June 11, 2002

Version 2.0b8 October 24, 2000

Version 2.0b7 September 24, 2000

Version 2.0b6 August 24, 2000

Version 2.0b5 May 3, 2000

Version 2.0b4 January 5, 2000

Version 2.0b3 December 22, 1999

Version 2.0b2 December 20, 1999

Version 2.0b1 December 14, 1999

Version 1.0


Copyright 19992007 Jonathan E. Guyer, Daniel Steffen, Peter J. Keleher and Tim Endres.
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


Last modified Thursday, January 10, 2008 10:18:04 PM

Assembled in Alpha
Valid CSS!
Valid HTML 4.0!
SourceForge.net Logo