This release implements over 100 new statements and functions. The user interface, on the other hand, barely changes at all in this release.

Files and Folders

This release fully implements Panorama’s functions and statements for accessing the file system (except for operations that will be implemented via custom functions and statements). Implementing support for Files and Folders was a bit tricky because Cocoa file access is quite different from the Carbon system used by Panorama 6 and earlier. The goal was to maintain near 100% compatibility with legacy formulas and procedures that use HFS paths and folder ids, while allowing new code to be written directly using standard UNIX file paths. To learn more about how this was done, see Files and Folders.

Cross Database Calculations

This release implements all of Panorama’s lookup( functions, and goes quite a bit farther. The superlookup( function allows any formula to be used for the key and data. Using this you could, for example, implement multi-field keys and/or retrieve multiple fields at once. If you are just interested in data in the current record in another database, the formulavalue( function is a greatly enhanced version of fieldvalue(. If you need a supercharched lookupall( function, the arraybuild( function now has the option of an additionaly query formula, which allows you to specify exactly what data you are interested in extracting into your array.

The new aggregate( function allows you to calculate totals, counts, minimums, maximums or averages on the fly. If your database isn’t too large, you could even include totals and averages in form objects so that they would update on-the-fly as the database changes.

Sorting and Outlines

This version fully implements Panorama’s sorting capabilities, which are quite a bit more complicated than I remembered (for example, sorting summary values automatically drags along the data records). There is also a new reverseorder statement that simply turns the current database upside down.

Grouping and outlines work exactly as they did in Panorama 6, however, when collapsing and expanding the outline, there is a cool animation! Totals, averages, etc. also work.

Not really sorting or outlines, but this release also implements propagate, unpropagate, runningtotal, etc.


In addition to the find and nextmatch statements, your programs can now findabove, findbelow findbackwards and previousmatch.

Field Configuration

This release allows you to access (getfieldproperties( and modify setfieldproperties the properties of any field, including name, data type, formulas, patterns, etc. You can also add, insert and delete fields, and you can move the current field to a new position with the database (see movefieldbefore).

Permanent Variables

Since you can’t save yet, variables aren’t really permanent, but this release does support the permanent and unpermanent statements, and will read permanent variables from Panorama 6 databases. The code for saving permanent variables has been written and tested, so when database saving is implemented it will be ready to go.


This release includes an advanced version of Panorama’s Dictionary feature (see initializedictionary(, getdictionaryvalue(, setdictionaryvalue, dumpdictionary(, etc.) Unlike previous versions, dictionaries can now include any data type, not just text, but also numbers, dates, even binary data. To accomplish this a new dictionary format is used, but Panorama will automatically convert any old format dictionaries it encounters to the new format (however, if stored in a field or permanent variable, you must use the Binary Variables & Fields wizard in Panorama 6 to designate the field or variable as containing binary data, see Binary Fields below). Note: All of the dictionary operations are implemented as functions – they were statements in Panorama 6. These will be implemented later as custom statements based on the new functions.

Binary Fields

A field can now be designated as holding binary data (see setfieldproperties). When a field contains binary data, its contents are displayed, and may be modified, in hexadecimal format.

Panorama 6 allowed binary data to be stored in a text field, but that is no longer allowed. If you have an existing Panorama 6 database, you must use the Binary Variables & Fields wizard in Panorama 6 to designate the fields that contain binary data (you can also designate one or more permanent variables). When the database is opened into the new Panorama, the designated text fields will automatically be converted into binary fields with the proper binary data.

Double Chevron Notation

Several statements and functions now support a “double chevron” notation for referencing a field in the current database while scanning a second database with a formula. See arraybuild(, superlookup(, aggregate( and formulasum.

There’s More

The formulasum function has a bunch of new options, though you’ll probably want to use the aggregate( function instead.

The exportcell( function now gives you the choice of using the field’s output pattern.

The lookupall( function now allows multiple data fields.

The new md5( function generates checksums (other, better, algorithms to follow).

The BinaryToText( and TextToBinary( functions now allow the encoding type to be specified via a keyword (previously could only be specified numerically).

Field names with carriage returns are no longer allowed. Carriage returns in field names will be converted to spaces when importing from Panorama 6

Additional statements and functions listed below.

Assorted bug fixes.

Brand new features implemented in this release (features that were not included in Panorama 6):

Features implemented in this release that work differently than they did in Panorama 6.

Features implemented in this release that work exactly the same as they did in Panorama 6.

ALL features that were added or changed in this release:

See Also