Monday, November 08, 2010 at 12:02 AM.
system.verbs.builtins.card.details.iowafrontier
<<this script is embedded in the MacBird program
<<it's in 'scpt' resource 128
<<it's called in iowafrontier.c
<<card-runtime support scripts
on init (tablename, packedtable, fsapp, filelist) { <<start a card
<<create a table for the card, run the startCard script
<<we unpack the table as a sub-table in system.compiler.cards
<<or create an empty one if packedtable is empty
<<dmb 9/30/96: we don't call startcard anymore
<<it's too soon. the runtime will call it directly after
<<doing all of its default setup.
<<also, startcard needs to run in the card context, which
<<none of these event handlers require.
<<dmb 9/13/96: we no longer support cards as apps:
<<set up two items in the table: files and path
<<files is a list, containing the files dropped onto the app
<<you can refer to these as files [1], files [2], etc.
<<path is a file spec for the application that opened the card
<<if there's a startup script in the table, we run it
<<returns the name of the table we created for the card
<<make sure the base table exists
local (adrBaseTable = @system.compiler.cards);
if not defined (adrBaseTable^) {
new (tableType, adrBaseTable)};
if sizeOf (tablename) == 0 { <<Iowa Runtime doesn't have a name, make one up
tablename = nameOf (table.uniqueName ("card", adrBaseTable)^)};
<<unpack the card's table, or create an empty one if it doesn't have one
local (adrTable = @adrBaseTable^.[tablename]);
if sizeOf (packedtable) > 0 {
unpack (@packedtable, adrTable)}
else {
new (tableType, adrTable)};
<<initialize the contents of the table
if defined (adrTable^.path) { <<get rid of old field
delete (@adrTable^.path)};
if defined (adrTable^.files) { <<transition from a table to a list
delete (@adrTable^.files)};
<<adrTable^.path = fsapp <<it's still called a path, just like desktop scripts & droplets
<<if filelist == nil
<<adrTable^.files = {}
<<else
<<adrTable^.files = filelist
<<patch Frontier's paths table, switch in this card's menu bar if it has one
card.setGlobalTable (adrTable, true);
<<if defined (adrTable^.startCard)
<<if runmode
<<adrTable^.startCard ()
<<else
<<try
<<adrTable^.startCard ()
<<else
<<adrTable^.startCardError = tryError
return (tablename)};
on clos (tablename) { <<close a card
local (adrTable = @system.compiler.cards);
if defined (adrTable^) {
local (adrTable = @adrTable^.[tablename]);
if defined (adrTable^) {
if defined (adrTable^.parentPath) {
card.bringCardToFront (file.fileFromPath (adrTable^.parentPath))};
delete (adrTable)};
return (true)}};
on edtb (tablename, windowtitle) { <<edit the table embedded in the card
local (adrTable = @system.compiler.cards.[tablename]);
target.set (adrTable);
window.setTitle (adrTable, windowtitle);
edit (adrTable);
Frontier.bringToFront ();
return (true)};
on gett (tablename) { <<return the packed table
local (data);
pack (system.compiler.cards.[tablename], @data);
return (data)};
on sett (tablename, majorswitch) { <<the table becomes the current table
<<dmb 9/6/96: after making sure the table exists, let card.setGlobalTable do the work
<<also, handle empty string for when a card is switching out
local (adrTable);
if tablename == "" {
adrTable = nil}
else {
adrTable = @system.compiler.cards.[tablename];
if not defined (adrTable^) {
new (tableType, adrTable)}};
return (card.setGlobalTable (adrTable, majorswitch))};
<<clay basket macro language support scripts
on dosc (s) { <<runs a macro, for Clay Basket
try {
clay.data.macros.lastmacrocall = s;
with clay.data.macros {
return (string (evaluate (s)))}}
else {
scriptError (toys.cleanForExport (tryError))}};
on addg (name, value, type) { <<add a name/value to the glossary
local (adrsubtable = @clay.data.glossary [name]);
if defined (adrsubtable^) {
if not dialog.confirm ("OK to replace existing glossary entry named \"" + name + "\"?") {
return (false)}}
else {
new (tabletype, adrsubtable)};
adrsubtable^.v = value;
adrsubtable^.t = type;
filemenu.save ();
return (true)};
on refg (name) { <<turn a glossary entry name into a string for insertion into HTML text
local (adrsubtable = @clay.data.glossary [name]);
if not defined (adrsubtable^) {
scriptError ("There is no glossary entry named \"" + name + "\"")};
with adrsubtable^ {
case t {
0 {
return (v)};
1 {
return ("<a href=\""+ v + "\">" + name + "</a>")};
2 {
return ("<a href=\"mailto:"+ v + "\">" + name + "</a>")}}
else {
scriptError ("Unsupported glossary type, number = " + t)}}};
on edtg () { <<bring Frontier to the front and edit the glossary table
frontier.bringtofront ();
edit (@clay.data.glossary);
return (true)}
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.