Frontier 5.0 is shipping!

January 30, 1998

The final version of Frontier 5.0 for Mac and Windows is now available.

The full release is on the Download page.

If you've been using Frontier 5.0b8 or greater, you can upgrade instead.

Frontier 5.0 Change Notes lists all the changes in the Frontier application since Frontier 4.2.3. If you're migrating from 4.2.3, this page is a good place to start learning about what's new.

For Frontier 4 users who are moving to Frontier 5, bookmark Migrating from Frontier 4. That's where we list pages that describe the changes from Frontier 4.2.3 to 5.0 and suggest strategies for upgrading.

Frontier 5.0 Change Notes

These are the changes in the Frontier application from 4.2.3 to Frontier 5.0.

Frontier is now cross-platform, with Windows and Mac versions.

There are two applications:

"Frontier.exe" is the Windows application.

    It runs in Windows NT and Windows 95.

The Mac application is named "UserLand Frontier."

    It's a fat binary, which runs in PowerPC and 68K Macs.

Frontier's object database is now an outline.

You can expand and collapse tables in their own windows.

Dragging move works within a single window, between tables.

Navigation is the same as using other Frontier outlines.

The same table can appear in its own window while expanded in another window.

Fat pages are the new cross-platform file format.

Fat pages, because they are plain-text and do not contain resource forks,

are the new cross-platform file format.

The internal structure of the odb has changed.

The result: Frontier 5 for Macintosh can open Frontier 4 objects,

but Frontier 4 cannot reliably open Frontier 5 objects,

even when exported as 2CLK files.

(This is independent of and not related to the switch

to fat pages as the new file format.)

Frontier now supports file-based objects.

Window-based objects can now live in the file system instead of the odb.

The File menu now includes a New submenu:

    The New submenu has an item for each window-based type.

When the front window contains a file object:

    The Save a Copy item changes to Save As.

    The Save Database command changes to Save.

Scripts can be saved as Runnable, which is equivalent to Frontier 4's desktop scripts.

Frontier supports "Guest" databases.

If you open a second root, and that root doesn't have a system table, it is opened as a "guest" root.

The original, "host" root retains control of the environment

It can access data and scripts in the host root as if it were a file-based table. But it's disk-based.

The File / New / Database command now creates an empty, guest database

The main window has been replaced by the About window.

Frontier's About window is where messages go.

It has a popup for agents.

It's title is "About Frontier."

It's a modeless window.

Zoom box toggles to message-only state, similar to the old Main Window display

New verb for opening the About window:

    window.about ()

New pointer: "this" is a local variable in all scripts running in normal threads

The "this" pointer points to the current script.

Frontier recognizes several new file types.

Whether odb objects or file-based objects, objects on disk can be one of several types.

.fatp ('FATP' on Macintosh) is a generic fat page.

.ftop ('FTop') is a Frontier outline.

.ftwp ('FTwp') is a Frontier word-processing document.

.fttb ('FTtb') is a Frontier table.

.ftsc ('FTsc') is a Frontier script.

.ftmb ('FTmb') is a Frontier menu.

.ftds ('FTds') is a Frontier desktop script.

The object database automatically saves when closed or Frontier is quit.

No more "Save Changes to Frontier.root?" dialog boxes.

To close a database without saving, hold down the Shift key while closing/quitting.

A new callbacks structure has been implemented.

The kernel calls scripts in system.callbacks when certain actions are taken.

All of these callbacks can return false to prevent other callbacks from running.

These scripts are:

    system.callbacks.closeWindow (title)

        The title parameter is the full path to window's file, or window name if unsaved.

        If this script returns false, Frontier does not close the window.

    system.callbacks.cmd2Click (name)

        This is the callback for control-2Clicking in Windows or command-2Clicking on the Macintosh.

        Name is the string that was double-clicked.

    system.callbacks.compileChangedScript (adr)

        The adr parameter is the address of the script that is not compiled.

        This script is called by Frontier before closing a script window that has been edited.

        Return true to have Frontier compile the script before closing the window.

    system.callbacks.control2Click (name)

        Handles control2Clicks on Macs.

    system.callbacks.openWindow (name)

        Unlike the closeWindow callback, openWindow is called for all opens, even when script generated.

        Also unlike closeWindow, an openWindow callback cannot prevent the window from opening.

        It can hide it to keep it invisible, or change its title before it's shown.

    system.callbacks.option2Click (name)

        Handles alt-2clicks on Windows and option-2clicks on Macs.


        Called when Frontier moves to the foreground.

    system.callbacks.saveWindow (path, runnable = false)

        The path parameter is the full path to window's file, or window name if unsaved.

        Frontier calls this script to save file objects.

        The return value should be the (packed) data to be written to disk (by Frontier).


        Called when Frontier quits.


        Called when Frontier starts up.

        All of these scripts run to completion before agents start running.


        Called when Frontier is moved from being the foreground application.

The compile button dims when a script is compiled and has not since changed.

Frontier's word-processing engine has been replaced with a new, higher-powered engine.

This fixes problems with large wp-text objects.

The use of the address operator has been tightened up.

Many verbs that are documented as taking the address of an object as a parameter would accept an object itself.

For example, one could write "edit (@scratchpad)" or "edit (scratchpad)" and both would work.

In order to support file object windows consistently in the language, this laxness had to be removed.

String.processHtmlMacros doesn't block other threads

Each glossary reference and macro creates an opportunity for the calling thread to yield.

You can now step into the verb and debug each call to the callback script.

All window verbs can take a filespec as well as an odb address or title.

Window names are no longer case-sensitive

Table verbs now return addresses.

Table.copy, table.move, table.rename and table.moveAndRename all return the address of the new item.

On error, they all return false. So no existing scripts should break.

New TCP verbs have been implemented in the kernel. [Windows]

Verbs for TCP listens, reads, and writes now run inside Frontier.

Mac versions of these verbs require NetEvents.

There are several new context verbs to determine what environment Frontier is running in.

sys.os () returns the operating system.

    Returned values are strings: WinNT, Win95, MacOS.

sys.machine () returns the type of machine.

    Returned values are strings: x86, PowerPC, 68K.

There are several other new verbs:

window.getFile (adrWindow)

    Returns the file path of the referenced window.

    Returns "" when the window does not have a file path.

packWindow (w, adr)

    w can specify a window by it's name,

    or by its odb address (if an odb object) or its filespec (if a file object).

    It packs the value contained by the specified window

    into the local or global database cell at adr.

unpackWindow (adr, path)

    path is a filespec, alias, or full path to a file.

    It can be nil or the empty string to indicate no file.

    This verb unpacks the data in the object at adr into

    a new window associated with the file at path.

There are new verbs for getting the height and width of web graphics.

    html.getGifHeightWidth (f)

        Given a file path, returns the height and width of a GIF.

    html.getJpegHeightWidth (f)

        Given a file path, returns the height and width of a JPEG.

string.wrap and string.daveNetMassager

    These are verbs for formatting text.

base64.encode, base64.decode

    These verbs encode and decode data to and from base64 format.

    These are identical to the UCMD verbs, but are built into the kernel for best performance.

The entire date verb set has been kernelized.

    New verb glue included.

    Fixed bugs in date.set.

editmenu.getfont, editmenu.getfontsize verbs

    These long-requested verbs take no parameters and return the expected values.

sys.getEnvironmentVariable and sys.setEnvironmentVariable [Windows]

    These verbs get and set environment variables in Windows.

    sys.setEnvironmentVariable returns the empty string if the variable is undefined.

Other verb enhancements

    appleEvent verbs understand 'psn ' binary values. [Macintosh]

        You might get a psn value as the result of getEventSender

        You can now use a psn as the appID parameter to appleEvent, complexEvent, etc.

    Table verbs return addresses

        table.copy, table.move, table.rename and table.moveAndRename all return the address of the new item.

        On error, they all return false. So no existing scripts should break.

The Quick Script window has been modernized.

Script text is no longer limited to 255 characters.

It now supports advanced text features:

    undo, forward delete, word motion, keyboard selection.

Pressing the Tab key activates the message area, where the result can be copied.

List and record values are more powerful:

Record keys are strings, not string4s; they can be up to 255 characters.

List comparison is improved

    If each item in a list or record compares as equal, the lists are equal.

No more problems with Usertalk-specific types:

    Addresstype, chartype are not converted to strings

List and record operations are faster.

Frontier executes DLLs on Windows, shared libraries on Macs.

New cross-platform DLL verbs: (path, module [, params...]) -- call a method in a DLL.

    dll.load (path) -- load a stay-resident DLL.

    dll.unload (path) -- unload a stay-resident DLL.

    dll.isLoaded (path) -- find out if a DLL isloaded.

DLLs can call back to Frontier for ODB Engine calls and Do Script commands.

UCMDs are copied to memory before being executed. [Macintosh]

UCMD code stored in the odb is not directly executed.

This fixes the "UCMD importing bug" and allows one

to copy a root to different machines.

Windows can be hidden via the Window menu.

The Hide Window command hides the frontmost window.

New objects are created with the user's font settings.

The kernel respects the preferences at user.prefs.font

when creating new objects.

The limit on the number of nested tables that can be saved has been removed.

There used to be a 20-level limit for nesting tables.

Deeper nesting would render the database unsaveable.

The hard limit on recursion has been increased from 40 to 50 levels.

Extended ascii language characters are mapped between platforms

when scripts are loaded under Windows, '!=' is converted to "!=", the Mac is converted to "...",

'' is converted to '/', and curly quotes and comment characters

are mapped to their PC equivalents

Apple event trap scripts are more powerful. [Macintosh]

Trap scripts can now be called with named parameters.

This allows them to be called with parameters in any order.

Frontier will use names when

     1. the script takes more than one parameter, and

     2. all but the first parameter are named for their AE keyword.

Frontier will not pass extra AE parameters that the script does not expect.

Frontier will call the trap script if optional parameters do not

appear in the event.

Menu-sharing applications should not take Frontier's icon in the apps menu. [Macintosh]

This has been fixed for faster machines and newer systems.

Fixed startup problems with very fast Macs. [Macintosh]

The limit for the entire menubar is now 96 items rather than 50. [Macintosh]

Copyright 1999