What is Frontier?
News & Updates
Frontier Site Outline
Frontier 4.1b10 Change Notes
1. A bundle of new features from "Preston"
Preston is the point man on the HTML suite for version 4.1.
Click here for documentation and updates.
2. Macro processing
Updated html.processmacros script to allow nested calls, i.e. calls from a glossary or macro item.
Macro expressions can contain nested braces
3. iso8859 encoding
Updated the translation table to one that works with today's browsers. (Thanks to Alan Legg).
Default iso8859 translation can be overidden by providing a mapping table at user.html.prefs.iso8859map. The table should look exactly like html.utilities.iso8859.table, with the values modified as desired.
Note: there is very little (perhaps negligable) performance degradation in providing a custom translation table.
Fixed memory-trashing bug in the string.iso8859encode. This bug could explain any number of random crashes during or after rendering HTML pages.
4. Standard macros
pageheader and renderobject are now standard.
5. Sub directories
Creation of sub directories for sub tables is now supported for FTP based sites
ftpText only calls ftpClient.sureFilePath if an error is encountered on the intial store attempts. This should reduce the network traffic and display overhead considerably.
Template directives can now be wptext objects within the website table.
ftpSite directives can now be tables contained within the website table.
Directives can now be put in templates.
The following preferences have been added, if they are not defined previous defaults are used:
The following preferences can be set by directives, allowing them to be set on a page by page basis, the directive should be the same name as the preference:
8. When generating links by refering to an object in the same table as the object being rendered:
Now relative links are generated.
Can refer to the object's name non-normalized.
9. Active URL expansion
Allow '#', '-', ':' and '%' characters in urls; allow ':' in mailto's. For example, "http://www.test.com/some%20grog/go.html" expands to http://www.test.com/some%20grog/go.html.
Don't include punctuation preceeding a mailto reference in the mailto url. For example, "email: <firstname.lastname@example.org>" expands to email: <email@example.com>.
Fixed bug when the '@' character is encounted embedded in punctuation, as in this sentence.
10. Miscellaneous Improvements
macros in a website "#tools" table can now be refered to by name instead of full path, and have rank over other macro locations.
fileSpec types in websites are now supported. The contents of text files are rendered as if they were WP text objects.
A change in logic and nomenclature: website based glossary and tools tables should now be labeled with a #. However the previous naming scheme will continue to be supported.
Macro and glossary references are no longer limited to 255 characters.
Removed 32K limit in the AutoWeb processing of "***".
Fixed off-by-one bug when processing hot URLs at the very end of the source text.
Brent Simmons has created a wonderful new "MacBird web site".
If you're interested in designing GUI interfaces for your scripts, check out this site. It includes many screen shots, a tutorial, a guide to the editor application, a nascent FAQ, and an archive of demo cards.
2. MacBird application bug fixes
Fixed Component Manager errors, crashes if you quit Frontier while MacBird is running.
Fixed bug where the table of newly-created card would not be saved.
Fixed bug where a card's table would disappear permanently if Frontier wan't running.
Fixed bugs saving a card into Frontier.root using MacBird's shared menu. The card no longer needs to be saved on disk before using the command.
Fixed crashing bug with the Common Styles shared menu items.
Fixed a memory leak when closing a card.
Fixed memory trasher when an object's value is shorter than its name, and its name is used in another object's recalculation script.
Fixed new object naming bug that would add nonsensically-high numbers to "item", like "item30266". It could lead to a "duplidate item name" debugger crash.
When "Show Grid" is enabled, the grid is drawn whether or not "Snap to Grid" is turned on.
Cut & Paste works in modeless cards. However, modal cards still have problems with the clipboard.
Recalculation updates active edit text items properly.
Typing no longer triggers a recalc of the item you're typing into.
Cursor arrow keys work in numeric-only text fields.
Changing the text of a button, static or edittext item marks the card file as changed, enabling the Save command.
Fixed bug where the error "Couldn't complete the message to..." would come up if a card's startup script tried to set a card attribute.
Fixed bug where you couldn't run a card, or edit a card's table, if Frontier was launched after MacBird
Added missing 'WIND' resource to Frontier for windoid cards. This fixes the "missing dialog resource" debugger trap.
3. Embedded Tables
Empty card tables are now just that -- empty. No more "paths" and "files" items.
If the startcard script generates an error, a dialog is not posted unless you're trying to run the card. This avoids an unbreakable cycle of error dialogs that would make it impossible to fix the script.
Card tables are now stored in system.compiler.cards, not system.cards, so they're never saved to disk and cannot accumulate.
4. Save in Frontier...
You no longer have to save a card to use the command.
The card is now stored in the user.cards table by default, instead of scratchpad.
5. Misc tweaks
The File/Open dialog recognizes cards with any creator (in particular card files created by Frontier).
Icon items can map to 'cicn' resources as well as icon suites. This allows standard system icons to be used, in particular IDs 0, 1 and 2 for the standard Alert icons.
Escape and cmd-period map to a card's Cancel button, if there is one, executing any script attached to it.
Option-Return when editing a text field types a return into the text rather than pressing the default card button.
The Clean Up command will always set Chicago-12 buttons to 20 pixels high, regardless of the grid setting. This is the standard height for dialog buttons.
The Color Popup Info item is no longer enabled in the Draw menu.
When expanding object names to values in a object script, quote characters are now handled. However, curly quotes are not handled.
If a color icon of the specified ID cannot be found, a black and white icon will be used, if available.
Added icons to the Frontier application for dialog.alert and dialog.notify.
MACBIRD CARDS RUNNING IN FRONTIER, FRONTIER OSA CLIENTS
Loads a specified file into a database cell.
Runs a MacBird card
If the card is modal, the verb returns when it's done.
If the card is modeless, the verb returns immediately.
Card scripts execute in Frontier's main thread. This may be problematic; we'll have to watch this.
All cards run in Frontier's layer. OSA clients cannot display cards in their own layer.
Convenience verb, builds on card.import and card.run.
Not clear when you would need this, but it might be useful.
Modal cards will time out after the specified number of idle seconds have passed.
If there is a default button, it will be pressed. Otherwise, the Cancel button is pressed.
6. Cards in shared menu scripts
Cards can run in a menu sharing client's layer. Cards are alway executed modally in this case.
7. Cards that have their own shared menus
When running inside of Frontier, shared menus attached to cards appear in Frontier's menubar.
If running from a menu sharing client app's menu, card menus are not added.
8. Dropping cards onto Frontier
Normally, Frontier will run a card that is dropped on it.
If you hold down the Command key while dropping a card onto Frontier, the card will be added to the user.cards table and the new item will be selected.
Like desktop scripts, any previous item at that location will be replaced without confirmation.
9. Run Selection (cmd-/)
If the cursor is on a MacBird card object (binary[CARD]), cmd-/ runs the card.
10. Finder Icons
Frontier now provides a Finder icon for card files that it owns.
NEW DATABASE ACCESS VERBS
1. fl = db.open (f, readonly)
Opens the specified database file for read-only or read-write access. All other db calls require that the specified database be first opened by this call.
You can open a database file that is currently open in Frontier. It does not matter whether it's the active database or not.
Calling db.save on a database that is open in Frontier activates Frontier's Save command on that file.
Calling db.close on a database that is open in Frontier only "closes" it from the point of view of the db verbs. It remains open in Frontier.
2. val = db.getValue (f, dbpath)
Returns the value of the specified cell in the (open) database f.
3. fl = db.setValue (f, dbpath, val)
Sets the value of the specified cell in the database f.
4. fl = db.newTable (f, dbpath)
Creates a new table in the specified cell in the database f.
5. fl = db.isTable (f, dbpath)
Returns true if the specified cell is a table.
6. ct = db.countItems (f, dbpath)
Returns the number of items in the table at the specified database location.
7. name = db.getNthItem (f, dbpath, n)
Returns the name of the nth item in the table at the specified database location.
8. fl = db.delete (f, dbpath)
Deletes the specified cell in the database f.
9. fl = db.save (f)
Saves changes made to database f.
10. fl = db.close (f)
Closes database f.
11. fl = db.defined (f, path)
New verb. Does exactly what you'd expect.
12. fl = db.new (f)
New verb. Creates a minimal database file. You must subsequently call db.open to operate on the file.
NEW THREADING VERBS
1. fl = thread.exists (id)
Returns true if the specified thread ID is valid.
2. id = thread.evaluate ("expr")
Evaluates the expression in a new thread. Returns the ID of the newly created thread.
New verb. Creates a wrapper around thread.evaluate to make it convenient to store the script's result in a specified database location.
4. id = thread.getCurrentID ()
Returns the ID of the currently executing thread.
5. ct = thread.getCount ()
Returns the number of threads, including sleeping threads.
6. id = thread.getNthID (n)
Returns the ID of the nth thread. The index must be in the range 1 to thread.getCount()
7. fl = thread.isSleeping (id)
Returns true if the specified thread is sleeping. It is an error to specify an invalid ID.
8. fl = thread.sleep (id)
Put a thread to sleep. Unlike thread.sleepFor, which puts the current thread to sleep, this verb has no timeout.
9. fl = thread.sleepFor (secs)
Puts the current thread to sleep for the specified number of seconds. Returns true when the thread wakes up, either by having its timer expire, of if another thread wakes it up.
10. fl = thread.wake (id)
Wakes up the specified thread. Returns true if the thread was sleeping, false if it was already awake. It is an error to specify an invalid ID.
11. fl = thread.kill (id)
Terminates the specified thread and returns true. If the thread is sleeping, it is woken up automatically. ID may specify the current thread. It is an error to specify an invalid ID.
12. OSA "threads"
Threads in other processes, i.e. scripts being executed by Frontier for an OSA client, are not included in the thread list and cannot be operated on.
13. New System Table: system.compiler.threads
Frontier threads are dynamically added to and removed from this table
Items are named according to the source of the script. Threads created by thread.evaluate are anomynous.
Each entry's value is the ID of the thread.
You can kill a thread by deleting its table entry. This is not undoable.
Threads in other processes, i.e. scripts being executed by Frontier for an OSA client, do not appear in the threads table.
1. New suites.ftpClient
Thanks to Tim Moore!
Features to be detailed here later; change notes in the table.
need url here
MAIL AGENT PROTOCOL
1. Dave Winer's Mail Agent Protocol proposal.
This release includes an implementation of the Mail Agent Protocol in suites.mail.
Information and documentation can be found at http://www.scripting.com/midas/mailAgent.html
FRONTIER UI IMPROVEMENTS
1. New main menubar
The UserLand, Net, Custom and Suites menu have been replaced by Main, Open, [user.initals] and Suites
Key operations like creating new scripts and exporting scripts have been streamlined, consolidated and made more powerful.
New support for AppleScript users is included.
The new menubar is documented at "mainmenubar41". Users upgrading from 4.0.x can download it from this site; it is not included in the Frontier 4.1 Upgrader package.
Modeless navigator cards make it easier to open key database locations, while providing documenation on them.
3. Table menu, New Card command
Closes the loop for managing cards withing Frontier. Creates an empty card object for editing.
4. UserLand menu, New Script... command
Consolidates a confusing area for new users. Replaces the New Desktop Script... command.
Click here for documenation.
5. UserLand menu, Export... command
Open-architecture, offers a number of new capabilities. Replaces the entire Export submenu.
Click here for documenation.
6. Error Info Window Improvements
When an error occurs in a subroutine, pressing the Go To button now pops up a menu of the script's stack.
The popup menu appears only after the mouse has been down a few moments. A simple click goes directly to the error location as before.
Increased error reporting range from 32K to 64K lines of source.
7. Command- and Control-2clicking
"with" statements are now recognized; 2clicking on a name is that is only defined within the context of a with statement works. UserTalk keywords and constants are also recognized. (Thanks to Scott Lawton.)
It's worth mentioning here that Control-2clicking has a little-known feature: hold down the option key, and the syntax for calling the verb is inserted after the verb. (DocServer does not come to the front.)
8. Jump to Cell command
The Jump to Cell command now includes a popup menu if recent locations visited.
You can add locations to be permanently included in the popup menu by adding addresses to user.jump.permanentJumpList
If you hold down the Shift key while typing cmd-J or selecting Jump to Cell from the menu, you will now jump to the last selected location, skipping the Jump dialog.
9. Other commands that are now cards
User Is... command.
This is also the personalization dialog that comes up when Frontier is run for the first time.
dialog.ask, dialog.twoway, dialog.threeway, dialog.alert, dialog.notify
All of these verbs are now implemented with cards, not dialogs -- as they were in 4.1b7 as well.
dialog.fileInfo's card implementation has an all-new layout, and inludes a "More..." button to bring up a nested card with additional file information.
Caveat: although the More Info card will accept user input, it will not modify the file. This will likely be supported in the future.
Table menu Get Info... command
This card may go modeless in the future. For now, it looks just like the dialog did.
FinderMenu Set File Type & Creator... and Batch File Type... command
Once again, no new functionality here, but now with the added flexibility that cards bring.
10. Recalcuating Menus
The open parenthesis character can now be used to disable a menu item. If the last character in an item is a close parenthesis, a leading parenthesis is treated literally and the item is not disabled.
The '!' character at the beginning of a menubar headline adds a check mark to that item.
These are both useful only with formula items, since they usually must change with context.
This feature works from shared menus as well as Frontier's own menubar.
11. About window
The www.scripting.com url is now live!
ODB EDITOR SUITE
1. Editing Database Objects with External Applications
cmd-E in Frontier will now edit binary [card] objects as well as string, wptext and AppleScript script objects, if compatible editors are installed.
The odbEditor suite supports BBEdit and Script Debugger, replacing the odbTextEditor and odbAppleScriptEditor suites.
To edit a card, select the binary card object in its table and press cmd-E. Select the MacBird application if prompted.
Similarly, cmd-E on a text object or AppleScript script will automatically locate and launch the appropriate editing application, if present.
When you Save an odb object in an external application, the updated object data is stored in Frontier, and Frontier.root is saved.
MENU SHARING FIXES, IMPROVEMENTS
1. Client customization
Clients using the 4.1 SDK can now customize the way that shared menus are installed. They don't have to be placed in the main menubar.
2. Server crash survival
Applications that use the 4.1 Menu Sharing Toolkit will cleanly remove their menus in the event of a server crash. Re-launching Frontier will bring back working menus.
3. Bugs / reliability
Fixed heap trashing / crashing bug if you had a fomula in a shared menu that sent an Apple event to another application.
Fixed bug that could leave the wrong port set after executing a shared menu script or fomula item.
Menus are now created in the client's heap zone. This may or may not improve compatibility.
Fixed bug that would cause Frontier's icon to appear in the Application menu for menu sharing client applications.
4. Disabling, checking items
The new capabilities of Recalcuating menus in Frontier are also available to menu sharing clients
EUDORA GLUE TABLE
1. This latest table was put together by "Preston". For more info, click here.
Adds support for Eudora 3 elements: windows, filters, and nicknames.
Includes new documentation for Scripting Eudora and the shared menu. Includes a new table of example scripts.
The new table fixes other bugs in previous Eudora tables, and is completely backwards compatable with them.
2. Added a "Subscribe" submenu to Eudora's Scripts menu.
It provides commands to subscribe to Frontier-Talk and Frontier-Beginners.
1. Version 2.0 from Preston Holmes and the NetFrontier list.
REGULAR EXPRESSIONS SUITE
1. need url
1. Direct assignment of "window-based" objects
"Window-based" objects are large object types that are displayed in their own window. These include tables, menubars, scripts, outlines, wptext and pictures.
Scripts can now directly assign window-based values, pass them as parameters, and returned them as a script's result.
For example, the statement "x = scratchpad", formerly illegal, will now set x to a local copy of the scratchpad table.
1. New database storage scheme
For large scalar values, i.e. string, binary, list or record values larger than 1K, the object data now occupies its own block on disk.
When a table is loaded into memory, large values stay on disk.
When a large value is referenced, it is loaded into memory and its disk block is freed (pending a Save). At this point the values look the same as they always have internally, so no side effects should appear.
2. Viewing tables
When viewing a table, only visible values are loaded into memory.
Calling target.set() does not force any scalars to be loaded.
When you save, values that are large have a new disk block allocated, whether or not they have been changed.
Doing otherwise (i.e. retaining the original disk block) would require a much more substantial code change and would have its own drawbacks in terms of performance.
When you Save a Copy, or pack a value, large values that are on disk remain on disk, i.e. the data is loaded into memory only temporarily.
Searching a table only loads disk-based scalars into memory while they are being searched.
After a replace all, only changed values remain in memory.
NEW WP-TEXT ENGINE
1. Bug fixes
Problems with wptext objects containing more than 32K of text are gone now.
2. Inactive selections
Selected text is outlined in inactive windows in both the 68K and PPC versions of the program.
NEW STRING VERBS
1. Integrated the stringOps and macroprocessor ucmds for maximum performance.
Replaces html.ucmds.macroprocessor, is now called by html.processMacros.
Takes the embedded script as a compiled osa script parameter. This allows the embedded script to continue to supply two entry points.
The embedded script can now be written in any OSA language.
You can now have two glossary items in a row without a space between them.
You can now have two macro items in a row without a space between them.
The «, », ©, ® and non-breaking space characters are left untouched. This allows html.processMacros to pass them through the iso8859 filter.
Same as toys.urlEncode, which now invokes the kernel.
Fixed a bug in the stringOps ucmd version that could lead to a crash. (Thanks to John Simms' and other Frontier-Talk bug reports.)
Same as toys.urlDecode, which now invokes the kernel.
Same as toys.parseArgs, which now invokes the kernel.
Same as toys.iso8859filter, which now invokes the kernel.
1. New way to create tasks
Scheduling hourly and overnight tasks is easier using the New Script dialog. Any script in user.scheduler.hourly runs once per hour on the hour. Any script in user.scheduler.overnight runs every night at 2AM.
2. Data stored in user table
The data for suites.scheduler is now stored in user.scheduler. scheduler.tasks has moved to user.scheduler.tasks, and scheduler.log to user.scheduler.log. I think I caught all the dependencies, please let me know if I didn't.
3. More docs...
The Scheduler Suite page provides background on the Scheduler suite, of course.
NEW TOYS AND GOODIES
1. Dropping files onto Frontier
UCMDs and XCMDs, or resource files containing them, as well as osaxen, can now be dropped directly onto the Frontier icon in the Finder to have them loaded into the extensions table.
You can drop a MacBird card onto Frontier to run it. Or, hold down the cmd key to load it into user.cards.
2. Quitting Frontier without confirmation
The script at system.misc.closeWindow will now get called with the root window, before the Save Changes dialog appears. The dialog can be avoided by calling fileMenu.save in the script.
A MacBird card that you can call from system.menubars.MACS.
Suggestion: replace the Aliases sub-menu with this command.
4. parentOf verb
adr = parentOf (scratchpad.x)
toys.getParentTable now calls parentOf builtin function instead of parsing the address as a string.
5. appleEvent verbs, multiple roots
The appID parameter to the appleEvent family of verbs may now be a filespec that points to an open root file. The event will be handled by that root.
Other applications can send events to specific, open databases by including a "subject" event attribute that is the filespec of that root.
One current limitation (bug) of this feature is that only traps that exist in the current root are recognized, even though the target root's trap script would actually handle it.
6. String-to-list coercion
A string that contains a syntactically correct list value yields that value when coerced to a list.
A string that contains a syntactically correct record value yields that value when coerced to a record.
7. New agent threading
Agents now run in a single thread that sleeps and re-awakes every second. In the past, the agent thread has been destroyed and recreated each second.
The new mechanism is more efficient, and creates a more stable environment in low memory conditions
Disabling agents reclaims the agent thread's memory; enabling agents consumes it anew.
8. Raised recursion limits
40 level of recursion are now supported, up from 25
9. Table sorting
Editing item names in tables now maintains the table's sort order. Like the Finder, items many move when you finish editing their names.
When a script adds an item to a table that isn't opened in a window, the new item is sorted correctly.
10. Pasting Finder clipboard into Frontier
'TEXT' scraps are now favored over objspec or other advanced types.
Holding down the Option key when Pasting will cause advanced scrap types to be recognized.
We have good html rendering tools for outlines, that don't work with scripts. This script makes an outline that reflects the contents of a script, suitable for display.
This isn't a bug fix, or a goodie per se. The script was just updated to use Frontier's new direct asignment capability, so scripts that call it will perform better.
13. Finder Flags UCMD
This extension adds three new verbs: finderFlags.get, finderFlags.set, and finderFlags.clear. They access bits in a file's "Finder Flags" field, which indicate whether a file is stationary, is an alias, has a custom icon, etc.
The new dialog.fileInfo "More Info" card uses these verbs to set the checkboxes that aren't directly supported by file verbs.
A prettier design for the sign-in dialog. Check it out!
15. International Canceling
Courtesy of firstname.lastname@example.org (Fabrizio Oddone), Frontier now knows how to detect cmd-period on international keyboards.
SMALL CHANGES AND BUG FIXES
1. String-to-address coercion
Fixed bug that prevented long strings with many bracketed expressions from being coeced to an address. Like this:
Fixed a bug coercing addresses back to strings where a item name that was a compiler constant would not be braketed.
2. String-to-double coercion
double("") resolves to 0.0, not "NAN (017)".
3. Table modification dates
When a script modifies a table that isn't opened in a window, the table's modification date is now updated.
4. "new" verb
Fixed bug where new (type, adr) would overwrite "adr" itself if adr's value couldn't be coerced to an address.
Bug fix: handles search/replace strings longer than 32K characters.
6. search.find, search.replaceAll
Searches will now find occurances beyond the first 255 charcters of an object.
You can cancel a search in progress.
Removed outdated launching code, call webBrowser.launch instead.
Calls WebBrowser.toys.urlJumper, not Netscape.toys.urlJumper.
When the scriptable Finder is running, get the selection using an Apple event, not the ucmd.
10. Scripts with optional parameters
When evaluating a default parameter that is an address, tables at the root level are recognized. That is, a function declared "on doIt (adr = @suites.html)" will work when called without that parameter.
11. Running out of memory
Frontier's preferred size has been expanded to 2500K.
12. In-cell table editing
You can now edit binary values in their table cell.
Attempting to edit a binary value no longer truncates it to 255 characters and sets its binarytype to 'TEXT'.
You can now edit list and record values that are longe than 255 characters.
13. Replace All in wptext objects
When wraparound is enabled, and the replacement string contains the search string, each instance is replaced exactly once.
Cmd-period is now detected during a wptext replace all.
14. wp.go verb
Fixed calls to wp.go with a distance greater than 1.
wp.go (left, infinity) no longer stops at the nearest line break.
wp.go no longer leaves the old selection highlighted if the window is inactive.
Removed 32K limit on the size of the string that can be inserted.
16. Frontier in the Application Menu
Fixed bug where menu sharing clients would get Frontier's icon in the application menu
17. Double Floating point values
IEEE "double" floating point values are now converted to "extended", the format that Frontier uses for doubleType values.
In the past, they were not recognized and would appear as binary [doub] objects.
18. Save a Copy
Save a Copy no longer resets the modification dates of all tables, and of open objects.
More generally, timeModified now returns the actual time that an object was changed, not the time it was saved to disk.
19. Menu Sharing, Suspend events
Fixed menu sharing problem with scripts that involve task switches. In particular, the client will now receive a suspend event.
It's not clear if there are other, related problems that this will fix. Eudora's Edit Shared Menu item can still hang.
20. "for" loops assignment protection
In for loops, if the loop counter variable has not been declared locally, and is the name of a "large" object like a table, an error is generated. The large object will not be overwritten by the loop value.
21. Increment, Decrement operators
Fixed bug where incrementing or decrementing an undefined value would fail to generate an error, and would crash.
22. Window positioning bug
Fixed a window positioning bug when a second monitor is to the left of and slightly below the main monitor.
23. for x in y statements
Fixed memory management bug in for ... in statements, when an error occurs in the loop body.
24. op.setRefCon verb
op.setRefCon marks the outline as having changed. If the outline was opened with target.set, clearing the target will not lose changes.
Used to be hanging off the UserLand menu.
There is a suites.buglist, but it isn't a full suite.
I didn't want to spend the time to overhaul this.
I pasted the Buglist submenu into a separate menubar object.
If you're using this suite, copy this menu and paste it where it makes sense for you.
New version stores droplets in the user.droplet table instead of the suite.
If the droplet is faceless and contains a CARD, the card runs.
Two new globals are available, system.droplet.filelist and system.droplet.appfilespec.
A sample droplet is installed.
Two commands that used to hang off the Net menu.
They were related to menu-based web tours.
If you're using this suite, copy this menu and paste it where it makes sense for you.
© Copyright 1996-97 UserLand Software. This page was last built on 5/7/97; 1:26:29 PM.
It was originally posted on 10/5/96; 1:38:47 PM.
Internet service provided by Conxion.