Monday, November 08, 2010 at 12:02 AM.


on sendToDesktop (adrScript, path) {
	<<Create a script that can be double-clicked in the Finder or Explorer.
		<<Old code:
			<<on sendToDesktop (adr, fname) <<create a script that can be double-clicked in the Finder
				<<the contents of a desktop script:
					<<two 'STR ' resources:
						<<127 -- the number of parameters is expects (zero or one)
						<<130 -- the object db address of the script that was exported
					<<one 'scpt' or 'code' resource:
						<<the script that's run when the file is double-clicked on
					<<see Frontier.clickers.type2CLK for the other side of this script
				<<if not defined (adr^) <<can't export something that doesn't exist
					<<scriptError ("Can't export because there's no object named " + adr + ".")
				<<bundle <<create the file, save the packed script
					<<local (resdata)
					<<local (type = typeOf (adr^))
					<<Frontier.new2ClickFile (fname)
					<<pack (adr^, @resdata)
					<<rez.putresource (fname, type, 129, @resdata)
					<<rez.putstringresource (fname, 130, adr) <<address of object is a STR resource
					<<bundle <<save the parameter count -- one or zero
						<<local (params = 0)
						<<if type == scriptType <<scan parameter list
							<<local (scriptheader, savedisplay, savecursor)
							<<scriptheader = string.lower ("on " + nameOf (adr^))
							<<target.set (adr)
							<<savedisplay = op.getDisplay ()
							<<op.setDisplay (false)
							<<savecursor = op.getCursor ()
							<<op.firstsummit ()
							<<loop <<scan for script header
								<<if not script.isComment () <<skip leading comments
									<<local (s = string.lower (op.getLineText ()))
									<<if (s beginsWith scriptheader) and not (s contains "()")
										<<params = 1
								<<if not op.go (down, 1)
							<<op.setCursor (savecursor)
							<<op.setDisplay (savedisplay)
							<<target.clear ()
						<<rez.putstringresource (fname, 127, string (params))
				<<return (true)
				<<Frontier 5.0d6: Friday, July 18, 1997 at 10:20:45 AM by PBS
				<<Create a script of type 'FATP' that can be double-clicked and run.
				<<local (s = fatPages.buildFileAtts (adr, true))
				<<if sys.os () contains "Win"
					<<fname = fname + ".fatp"
				<<file.writeWholeFile (fname, s, 'FTsc', 'LAND', ())
				<<return (true)
	if sys.os () beginsWith "Win" { //make sure we have an extension
		if not (string.lower (path) endsWith ".ftds") {
			path = path + ".ftds"}};
	if file.folderFromPath (path) == "" { //only a file name given
		local (desk = file.getSpecialFolderPath ("", "desktop", false));
		path = desk + path};
	local (fatData = fatPages.buildFileAtts (adrScript, true));
	file.writeWholeFile (path, fatData, 'FTds', 'LAND', ());
	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.