[Note: this review was greatly improved thanks to corrections and insights from Kevin Calhoun, HyperCard 2.2 team leader. Other sources: Danny Goodman, "The Complete HyperCard 2.0 Handbook;" Doug Clapp (ed.), "The Macintosh Reader;" Frank Rose, "West of Eden."]
HyperCard 2.2 is here! HyperCard was what chiefly convinced me to buy my first Mac; I still regard it as the neatest, most useful, most generous program ever conceived. Generous because it was originally given away free (no more, alas!); generous because it lets you program the Mac yourself, easily and powerfully.
HyperCard History — HyperCard came to life in 1987 as a brainchild of Bill Atkinson. If you love the Mac, you should worship Bill Atkinson. Anyhow, I do. Apple Employee #31 (from 1978), he pushed for Apple Pascal (I loved it), then for Steve Jobs’s famous visit to Xerox PARC (which inspired the Mac); he solved the problem of "regions" (thus creating QuickDraw), designed and wrote MacPaint (which helped define the Mac), and was made an Apple Fellow.
As with everything that goes on at Apple, there’s a secret history of HyperCard’s evolution that may never be told; certainly I don’t know it, but must be content with hints and myths which have themselves become part of its mystique. It seems that Apple originally wanted to promulgate MacBasic to let ordinary folks program the Mac, as Microsoft Basic had for the Apple II, but Bill Gates balked. Meanwhile Atkinson had been working on HyperCard (then called WildCard), built around four elements:
- buttons to push
- text fields to type into or click on
- screens ("cards") containing buttons and text fields plus graphics
- the capacity to set up automatic "links" to take you from one card to another
This fourth element, still residually present (e.g., in the LinkTo button of the Button Info dialog), was subsequently expanded into an easy programming language – HyperTalk, created by Dan Winkler. Besides letting you calculate, manipulate variables, loop and test, and do all the other things you expect from a programming language, HyperTalk includes system messages reporting user actions, commands to simulate them, and functions and "properties" to obtain and alter the state of the interface and the machine. The implementation grows out of Atkinson’s and Winkler’s expertise in graphics and programming; but there is also a spirit of organizing and sharing information (fields and graphics, and the hypertext-ish act of clicking on a button or word to see a new card), plus a sense of giving control to the user since HyperTalk puts some of the Mac’s functionality and behaviour into easy reach.
That spirit was instantly embraced by the world that received HyperCard bundled with the Mac from ’87 to ’91. I wonder whether any application has ever promoted so tangible an ethos, or been so transformed and enlivened by users’ originality and enthusiasm. You can program the Mac; you can give the stack to others, and it’s simple to use – hence educators (like me) went nuts about it. You acquire a stack someone else has written: you look inside it, see what makes it tick, modify it. Plus, HyperCard is extensible: you can attach XCMDs and XFCNs to extend its functionality, and people who could program the Mac’s guts in "real" languages like Pascal and C distributed numerous XCMDs and XFCNs over the nets for all to enjoy. Many XCMDs were so useful that their functions were incorporated into later versions of HyperCard.
But according to legend, HyperCard spirit has not been universally understood at Apple. There is a tale of how Atkinson threatened to give HyperCard away himself if Apple wouldn’t bundle it. There are stories of Chris Espinosa and John Sculley having to push for its original release. Perhaps there was resistance to the idea of giving away for free an application that essentially let users write their own applications; certainly there was enough fear that the idea of "programming" would repel users that Apple gave it the euphemistic name "scripting." Fortunately, as Atkinson bowed out of the scene, others who shared the vision remained and new ones, notably Kevin Calhoun, came on board, and HyperCard 2.0 and 2.1, in ’90 and ’91, were gems. After 2.1, though, apparently came a terrible period where HyperCard went to Claris and nearly died, then came back to Apple where it remained endangered.
Happily, HyperCard has survived to become 2.2, thanks in part, I presume, to AppleScript, which has been incorporated into it. To read the press release gobbledygook, you’d think corporate Apple still doesn’t grasp just what HyperCard is; it’s billed as an "application development platform" letting you create "customized software solutions," an "optimal choice for commercial solution providers." The HyperCard heart, though, beats healthy as ever; its evolution has been no mean spiritual and technical feat, and users have much to be grateful for.
Improvements and Enhancements — Version 2.2’s improvements over 2.1 are many – mostly small tweaks to remove annoying shortcomings. 2.2 has nicer report printing; movable modal dialogs; Select All works in the Message box ; many limits (number of open windows, number of open stacks) are raised or removed. Sorting and finding are more powerful; date format conversion is better; doMenu can take modifier keys; and "there is" can check for disks, applications, documents, and card pictures. System messages, properties, and functions have been added to give handlers important, previously unavailable information: whether the menubar is showing, what the user is doing to the card window, where we’re going in leaving this stack. There is better menuItem info, more convenient reference syntax. WorldScript is supported. At last you can determine the layering order of fields and buttons via a new property, "the partNumber." Clearly the HyperCard team listens to users and are serious users themselves.
More major changes make it easier to conform to the Mac Thought Police style. Radio buttons now automatically work in sets. Buttons can be disabled, and can be in standard Mac style. Simple pop-up buttons are now a standard feature, with an interesting by-product that a button can now be a container. Fields can more easily act like scrolling lists. Objects can be double-clicked.
Finally, a stack can now be saved as an application! The resulting application is essentially HyperCard itself (it’s huge, and no faster than running under HyperCard), but it works, even if you "start using" or "go to" other stacks, and sure beats the hated HyperCard Player.
QuickTime — HyperCard 2.2 supports QuickTime via the Movie XCMD and the MovieInfo XFCN. The Movie XCMD puts up a movie window, in any of several styles, with or without a controller; you can manipulate the movie from a handler, or let the user do it with the controller. Many features of the movie can be manipulated, with a number of valuable messages and a callback feature. A utility stack installs the XCMD for you and simplifies setting up a movie window.
Color — HyperCard 2.0 introduced color "picture" windows, and you could click in them, but they weren’t true cards; and true cards (with buttons, fields, graphics) were strictly black and white. Integrated color was a much hoped-for feature that Claris was reportedly working on for its abortive 2.5 version, but it was found to be too cumbersome. Now 2.2 provides a compromise, with a colorizing XCMD and a utility stack to ease the process of adding color.
You can color buttons and fields and add colored rectangular areas to cards; select or create the object, and click on a color. Each object has a solid color and can have a beveled edge of adjustable thickness. You can also display full color PICTs as part of the card. You dictate the layering order of the color items, and you can use over 25 transition effects as you apply color. The utility stack installs the XCMD, and modifies your handlers and gives your stack a database of permanently colored objects, so that color automatically appears. Color seems part of the card: moving the card or switching stacks presents no problems or major delay (unlike earlier third-party colorizers). You can also control the XCMD yourself, so that color objects can change in interesting ways as part of a handler: a button could suddenly become colored, a rectangular region of the card could change colors with a transition effect, and so on.
I have seen this system criticized on the nets as a kludge, but I find it ingenious. However, I was at first overwhelmed by the spectacular appearance of the Color Tools stack, and thought, "Wow, colored buttons and fields look like this?!?" But then I found that the stack’s effects are achieved almost entirely with PICTs. If you want great looking objects you’ll need to draw them yourself with a graphics application.
Inter-Application Communications — The most sweeping change in HyperCard 2.2 lies in communicating with other programs. HyperCard has long been a leader here; even before MultiFinder, you could use HyperCard to launch another application, and return when it quit. Basic support for Apple events arrived in 2.1; HyperCard could easily send and respond to the required suite plus doScript and evaluateExpression, and could be made to dissect and reply to any Apple event.
Now, however, HyperCard accepts some 150 different events, operating on 17 kinds of objects and their properties; it is thus scriptable, and you can control HyperCard from AppleScript or any other Apple event-sending mechanism. HyperCard can itself send messages via any OSA (Open Scripting Architecture) system-level scripting mechanism you have installed, like AppleScript, Frontier, or QuicKeys. A statement in a script, or a multiple statements in a container, can be sent into the system in any of these languages via the "do" command. What’s more, the entire script of any object can be written in one of those other scripting languages. If the language is QuicKeys, which is not message-oriented, you can launch it with a new "run" message. If the language is AppleScript, messages can be passed directly between it and HyperTalk.
Much of the value of this new power lies in the future. AppleScript can’t yet drive every application, though StuffIt, WordPerfect, FileMaker Pro, Excel, and others are on board already. The Finder isn’t directly scriptable, although several hacks work around this, and a scriptable Finder is now shipping to developers. But QuicKeys can type and push buttons in just about any application, and I’ve already automated several drudge activities by having HyperCard do the looping and variable-setting and calling QuicKeys to drive the other application.
The move to OSA support is partly of symbolic significance, confirming (I hope) Apple’s commitment to AppleScript and to HyperCard itself. But OSA support is also of great practical value; its marriage to HyperCard gives AppleScript access to all HyperCard’s capabilities and significantly extends HyperCard’s reach.
Bugs and Shortcomings — Apple fixed some bugs and serious misbehaviours, including the infamous "go first marked card" bug. Not everyone’s wish list will be met, though. There’s still no ControlKey function, and you still can’t script the polygon tool. HyperCard’s idle-time tasks, such as resetting the ItemDelimiter, still won’t happen if a new message is pending (e.g. you clicked a button while the previous handler was running), and sending "idle" yourself is not a workaround.
Documentation — The documentation (manuals and some stacks) is good, but not uniformly so. HyperCard is hard to describe or teach, and though the manuals do a remarkably fine job of both at describing and teaching and the included stacks are superb as models, the manuals have errors, ranging from simple misprints and misstated syntax rules to howlers like a demo script for a Replace function that breaks if the replace-text contains the find-text. There are also odd arrangement choices and some serious omissions. Properties of palettes and external windows are not included in the Properties chapter. KeyDown and CommandKeyDown are not listed among the system messages sent to a field, and we are nowhere informed that TabKey, ReturnKey, EnterKey, FunctionKey, ArrowKey, and ControlKey (though not CommandKeyDown) messages are preceded by KeyDown (indeed, the manual wrongly denies that this is so). The Choose message is not documented in the manuals; nor is the important new "run" message. Many basic arrow-key navigation shortcuts are documented only deep in a Help stack. The "dynamic path" is incorrectly explained in the HT Reference stack. The new "copy template" command is practically undocumented. Such shortcomings in the official documentation seem somewhat outrageous.
Conclusions — HyperCard may not be free any more, but it’s still a good deal. The propaganda says that the price will be $249 (or upgrade from registered 2.0/2.1 for $89), but $139 for a limited (unspecified) time; I ordered direct from APDA via email to <[email protected]> and paid $99. The package includes the HyperCard application; two manuals; over two dozen stacks of documentation and utilities; the XCMDs for QuickTime and color; AppleScript 1.1 and the rest of the "Run Time" Kit; plus ADDmotion II from Motion Works, an application and XCMDs for multimedia in HyperCard. My recommendation: run, don’t walk.