Monday, November 08, 2010 at 12:02 AM.
system.verbs.builtins.Frontier.clickers.type2CLK
on type2CLK (path) { <<run a file of type 2CLK, usually a desktop script <<the object db address for the script is in 'STR ' resource 130 <<the script object is in 'scpt' resource 129 <<we unpack the script at the address and call it with the path we're passed local (returnedVal); on openError () { scriptError ("Can't open script in file \"" + file.fileFromPath (path) + "\".")}; local (adr, wasdefined, x); if not rez.getStringResource (path, 130, @adr) { openError ()}; if nameOf (adr^) == "" { <<not a valid address in this root - parse the string local (name = string.nthField (adr, '.', string.countFields (adr, '.'))); adr = @system.deskscripts.[name]} else { adr = address (adr)}; wasdefined = defined (adr^); bundle { <<move the script from the resource fork of the file into the object db at adr local (resdata); if not rez.getResource (path, scriptType, 129, @resdata) { if not rez.getResource (path, codeType, 129, @resdata) { openError ()}}; unpack (@resdata, adr); delete (@resdata)}; if kb.cmdKey () { if nameOf (adr^) == string (adr) { <<would be imported as a local (!) table.move (adr, @system.deskscripts); <<keep things neat adr = @system.deskscripts.[adr]}; if Frontier.isRuntime () { returnedVal = false} else { export.lastfolder = file.folderFromPath (path); <<set default for script export system.deskscripts.path = path; <<make path available for debugging returnedVal = edit (adr); Frontier.bringToFront (); Frontier.findertofront = false}} else { local (params); if not rez.getStringResource (path, 127, @params) { params = 1}; system.deskscripts.path = path; <<make path available to the script if number (params) == 1 { returnedVal = adr^ (path)} <<call the script, save returned value else { returnedVal = adr^ ()}; <<call the script with no parameters if not wasdefined { <<we created this object just to run it, and now we're done if (typeOf (adr^) != scriptType) or script.uncompile (adr) { delete (adr)}}}; return (returnedVal)}
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.