May 92 - Software Review - Userland Frontier
Software Review - Userland Frontier
John W. Baxter
In late January, Dave Winer and the rest of the folks at Userland shipped version 1.0
of Frontier. Frontier is a tool with which you can operate the growing number of
modern Macintosh applications which can be controlled by sending them suitable Apple
Events. Frontier also provides a clean-looking method by which very easily changed
menus can be added to an AppleEvent-savvy application (this feature is called "Menu
Sharing"). Here is a brief look at Frontier.
Drive those Applications
Frontier has an easy-to-use scripting language which controls both Frontier and other
AppleEvent-aware applications. The language is presented in outline form, and
Frontier has a good outline editor. The structure of a script is created by the levels of
the outline. For example, here is an if statement:
if people.JWB.age > 50
msg ("John, you are getting old.")
else
msg ("Come on, John, tell the truth")
The statements controlled by the true branch of the if statement (here, just a msg
verb) are indented one outline level inferior to the if. The next statement at the same
level as the if marks the end of the controlled statements. Here, that statement is an
else. Again, the else controls those statements inferior to it in the outline. As with
outlining programs in general, you can hide the details and see only the if and else
lines if you like.
The supplied language verbs include many which are implemented in the Frontier
kernel and many others which are simply scripts themselves. A full list is well beyond
the scope of this column, but one handy structure for script writing is
on explore(path)
fileloop (aFile in path)
if (file.isFolder(aFile))
explore(aFile)
else
do something to each aFile
the introduces comments
where path identifies an HFS directory, and aFile takes on the path to each file and
directory contained in that directory. You can easily recurse down through the
directory levels, as shown. The on construct introduces a script (routine).
The outlining capability is useful in its own right, but is limited to single-line
headers. The outline editor is fully scriptable. There is also a simple word processing
editor, and word processing documents can be maintained within Frontier. That editor
is suitable for writing documentation about your Frontier scripts-it is not suitable
for the next great novel. The word processing editor is also fully scriptable.
Things are stored in Frontier in a database, managed as a hierarchy of tables starting
at a table called root. One of the items in the root table is a table called people, which
has items named with the initials of each user of a given Frontier. The first example
above assumes that my table, whose full address is root.people.JWB, contains an entry
named age whose value is a number. A table entry consists of a name and a value. The
value may be as simple as a number or string or as complex as a word processing
document, an outline or script, or any Macintosh structure stored in binary form. The
set of table manipulation verbs is fully scriptable.
Whose Menus are They, Anyhow
Using AppleEvents, an application can arrange for Frontier to supply one or more
menus (which can include hierarchical submenus). A simple but solid-looking
protocol provides for the application to inform Frontier of selections of the items in
the menus Frontier has defined. The user provides a Frontier script for each such
item. That script will usually send one or more AppleEvents to the application
requesting services or directing actions. Provision is made for the user to edit the
menus within Frontier and for the menus to be adjusted before the next time they are
pulled down by the user if they have been edited. If Frontier shuts down, the
application is notified and deletes the shared menus; if Frontier launches while a
menu-sharing application is running, the menus get added.
Additionally, most of Frontier's own menus are fully editable by the user. Again, each
item has a script associated with it. The outline editor (slightly modified) is used to
edit menus and assign the scripts.
Userland supplies source code in C for the routines that need to be added to an
application to support menu sharing. I've looked at MacApp 3.0, and at this writing I
have a working subclass of TApplication which supports Frontier menu sharing.
Unfortunately, that subclass is not yet ready for publication.
Agent 86
One of the tables in Frontier contains "agents". These agents are scripts which receive
time periodically from Frontier. Frontier ships with an agent which updates a clock in
Frontier's main window. An agent can trigger arbitrarily complex scripts. Frontier is
pretty good about giving processing time to agents-for example, the agents are given
time while Frontier is in the background awaiting a reply to an AppleEvent it sent out
as requested by a script.
Almost Faceless Mini-Applications ("Appletts")
Frontier makes sense as a controller for small, nearly faceless applications which
provide simple services. This is one of the directions software is moving at the
moment, the do-one-thing-and-do-it-well idea. Userland practices what they preach
in this area: Frontier's on-line documentation is provided by a separate DocServer
application. A control-double-click on any Frontier verb ensures that DocServer is
running, sends it AppleEvents directing that the appropriate documentation be
displayed, and brings DocServer to the front. There is no technical reason why
DocServer wouldn't be available to your application, too. I don't know the legal details
at this time.
Paper Documentation
Yes, there is some. A user manual and a scripting language ("UserTalk") reference
guide were written by Dan Shafer. They explain Frontier pretty clearly, though some
of the more obscure verbs are only referenced, with the DocServer material (also
prepared by Dan) being the only documentation.
Apple Object Model
Frontier scripts have the power to create and send AppleEvents which make use of the
Object Model. This capability should be highly useful in testing MacApp-based
applications which support the Object Model and the Object Support Library. A
developer may also wish to supply a suitable "suite" of Frontier scripts to the users of
an application.
What's In It for Me?
If you are writing an AppleEvent-driven application, Frontier represents a
potentially valuable testing and debugging tool. If your application might benefit from
the shared menu idea, that is easy to add. With or without Frontier, you were going to
support AppleEvents for commanding your application, weren't you? There is no extra
work there (and Userland will help you prepare the file which sets up the necessary
verbs in Frontier to drive your application the way you want it driven).
Besides all that, Frontier is an amusing "toy", too. I have a script which runs my
FarSide calendar the first time each day that Frontier starts up (I have Frontier
starting from my Startup Items folder).
Availability
Frontier is available direct from Userland. Recently, Frontier has also found its way
into the mail order and retail distribution system. Userland can be found in the Third
Party area on AppleLink and in their own forum on CompuServe. Their address is
UserLand Software, Inc., 490 California Ave, Palo Alto, CA 94306. Telephone (415)
325-5700; fax (415) 325-9829.