Monday, November 08, 2010 at 12:02 AM.
system.verbs.builtins.export.card.doExport
on doExport (adr, kind, location, compression) {
<<Changes
<<3/18/04; 7:42:04 PM by JES
<<Add file extenion on Mac as well as Windows -- needed for proper OS X typing, and mime-type sending in static web servers. Also, smart-limit file name to 31 characters (limit imposed by OS 9 and Carbon API).
bundle { <<be sure kind and type are compatible
on check () {
if kind == "Folder" {
if typeOf (adr^) != tableType {
scriptError ("Only tables can be exported in this format.")}
else {
return}}; <<it's ok
if typeOf (adr^) != scriptType {
if kind != "Packed object" {
scriptError ("Only scripts can be exported in this format.")}
else {
return}}};
check ()};
local (f, fname, objectname);
bundle { <<set fname
local (tablename, quotedname);
objectname = nameOf (adr^);
if string.hasSuffix (“"]”, adr) {
quotedname = “["” + objectname + “"]”}
else {
quotedname = objectname};
tablename = nameOf (address (string (adr) - ('.' + quotedname))^);
if kind == "Desktop script" {
fname = objectname}
else { //calculate name based on object name and parent table name
local (longname = tablename + '.' + objectname);
if system.environment.isMac { //limit to 31 chars (with extension)
if sizeOf (longname) > 26 { //don't add table name
longname = objectname};
if sizeOf (longname) > 26 { //truncate object name
longname = string.mid (longname, 1, 26)}};
fname = longname};
objectname = fname;
case typeOf (adr^) {
scriptType {
if kind == "Desktop script" {
fname = fname + ".ftds"}
else {
fname = fname + ".ftsc"}};
wptextType {
fname = fname + ".ftwp"};
outlineType {
fname = fname + ".ftop"};
tableType {
fname = fname + ".fttb"}}
else {
fname = fname + ".fatp"};
if compression != "None" {
fname = fname + compression}};
case location {
"File" {
local (lastfolder = user.export.lastfolder);
if not (lastfolder endswith file.getPathChar ()) {
lastfolder = lastfolder + file.getPathChar ()};
if not file.exists (lastfolder) {
lastfolder = file.folderFromPath (Frontier.getProgramPath ())};
f = lastfolder + fname;
<<Append file suffixes if pref is set to true
<<Mon, Jan 26, 1998 at 5:10:25 PM by PBS
if not defined (user.prefs.appendFileSuffixes) {
user.prefs.appendFileSuffixes = false};
if user.prefs.appendFileSuffixes {
local (suffix = "." + string.lower (Frontier.getFileType (typeOf (adr^))));
if kind == "Desktop script" {
suffix = ".ftds"};
f = f + suffix};
if not file.putFileDialog ("Export to what file?", @f) {
return (false)};
user.export.lastfolder = file.folderFromPath (f)};
"Eudora attachment" {
local (folder = Eudora.getScriptPrefsFolder () + "Outgoing Frontier Objects:");
file.sureFolder (folder);
f = folder + fname}};
local (packedfile);
if compression == "None" {
packedfile = f}
else { <<must create it in a temporary location
local (tempfolder = file.getSpecialFolderPath ("", "Temporary Items", true));
packedfile = tempfolder + objectname};
case kind {
"Packed object" {
export.sendObject (adr, packedfile)};
"Desktop script" {
export.sendToDesktop (adr, packedfile)};
"Script Editor format" {
export.sendOSAScript (adr, packedfile)};
"Folder" {
export.sendFolder (adr, packedfile + file.getPathChar ())}};
if compression != "None" {
local (sitfile = f);
if sitfile endsWith ".hqx" {
sitfile = sitfile - ".hqx"};
local (flbinhex = compression == ".sit.hqx");
stuff.createArchive (sitfile, {packedfile}, flbinhex);
file.delete (packedfile);
Frontier.bringToFront ()};
if location == "Eudora attachment" {
Eudora.launch ();
try {
Eudora.attachFiles (Eudora.getCurrentMessageObject (), f)}
else {
try {
Eudora.attachFiles (Eudora.createMessage (), f)}
else {
scriptError ("Couldn't attach the exported object to a Eudora message.")}}}}
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.