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.
You can download the latest version of Tcl® from <http://www.his.com/jguyer/Alpha/download/>.
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.
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.
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:
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.
Tcl_Obj
and binary
facilities of Tcl 8 are a must.
#define
from MW_TclAE.pch if
you donÕt have the library. Many of the Tcl .test
entries will
fail because the error messages will be wrong, but Tcl® should still work
properly in all other respects.
.test
scripts included with Tcl®.
These tests work from either Alpha 8 or any of the Tcl 8 shells; they do
not require Tk. I can provide a .tcl
script that permits
them to run under Alpha 7.
Although not a requirement of use, please send me any of your changes so that I can incorporate them.
.tcl
and .shlb
versions
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.