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 InghamÕs 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 AlfkeÕs 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 AlphaÕs users and I formed the Alpha Cabal to assume development tasks from AlphaÕs originator, Pete Keleher (Pete has irresponsibly decided to procreate and pursue tenure, rather than work on Alpha like heÕs supposed to). One of my prime interests was in improving AlphaÕs 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 <http://www.his.com/jguyer/Alpha/download/>.

Tcl® Ñ How is it installed?

For use in version 8 of the Alpha 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.

Starting with version 8, Alpha will not work properly if Tcl® is not installed.

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

For use in earlier versions of Alpha

A version of Tcl®, fully implemented in Tcl, is included in Alpha version 7.x. This code is usually updated frequently with AlphaTcl source distributions, so you wonÕt generally need to update Tcl® separately. In the event that you do wish to upgrade those .tcl files, open the READ-TO-INSTALL-IN-ALPHA script.

Tcl® Ñ How is it used?

Memory Leaks

Use of Tcl® can potentially result in memory leaks. For historical reasons, Tcl®Õs AEDesc and AESubDesc values are implemented as hash keys rather than as Tcl_Obj records; as a result, they never go out of scope, so they are never automatically disposed of. As with the Apple Event Manager it interfaces with, in general, outputs from Tcl® functions are your applicationÕs responsibility. Once you finish using them, you should use tclAE::disposeDesc or tclAE::subdesc::dispose to dispose of any AppleEvent data structures created or returned by these functions:

tclAE::build tclAE::getKeyDesc
tclAE::coerceData tclAE::getNthDesc
tclAE::coerceDesc tclAE::subdesc::fromDesc
tclAE::createDesc tclAE::subdesc::getKey
tclAE::createList tclAE::subdesc::getNth
tclAE::duplicateDesc tclAE::subdesc::toDesc

Tcl® Ñ How is the library built?

The supplied TclAE.shlb is ready for use on PowerPC machines. The supplied CFM68k shared library is completely untested. I have nothing to run it on, so I welcome any user reports. Starting with version 1.1a4, Apple has incorporated AEGizmos in the CarbonLib SDK, so a build with that should be forthcoming.

If youÕd like to get a head-start on Carbon, fix whatever (if anything) is wrong with CFM68k, or if you'd like to make changes to the library, I've provided all of the sources in the :Build: directory, along with a CodeWarrior Pro 5 project file. If youÕd like to take a stab at building under MPW or with the OS X native tools, contact me for an XML export of the project file; IÕll help as much as I can and will be happy to include any resulting makefiles in future distributions.

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.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 © 1999Ð2000 Jonathan E. Guyer
All rights reserved.


Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that the copyright notice and warranty disclaimer appear in supporting documentation.

The Authors disclaim all warranties with regard to this software, including all implied warranties of merchantability and fitness. In no event shall the Authors be liable for any special, indirect or consequential damages or any damages whatsoever resulting from loss of use, data or profits, whether in an action of contract, negligence or other tortuous action, arising out of or in connection with the use or performance of this software.


Last modified Friday, May 4, 2001 1:20:10 PM