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

system.verbs.builtins.export.sendFolder

on sendFolder (adr, folder) { //new in 4.0.1
	if file.exists (folder) {
		if file.isFolder (folder) {
			file.deleteFolder (folder)}
		else {
			file.delete (folder)}};
	
	on doTable (adrtable, folder) {
		on cleanFileName (adr, isFolder=false) {
			<<Monday, March 02, 1998 at 12:20:00 AM by PBS
				<<Add suffixes on Windows -- Macs too if pref is set.
			local (name = nameOf (adr^));
			local (maxlen, pathchar = file.getPathChar ());
			case sys.os () {
				"WinNT";
				"Win95" {
					maxlen = 250};
				"MacOS" {
					maxlen = 26}};
			if isFolder {
				maxlen = maxlen + 5};
			if sizeof (name) > maxlen {
				name = string.mid (name, 1, maxlen)};
			if not isFolder {
				case sys.os () {
					"WinNT";
					"Win95" {
						name = name + "." + frontier.getFileSuffix (typeOf (adr^))};
					"MacOS" {
						if not defined (user.prefs.appendFileSuffixes) {
							user.prefs.appendFileSuffixes = false};
						if user.prefs.appendFileSuffixes {
							name = name + "." + string.lower (frontier.getFileType (typeOf (adr^)))}}}};
			name = string.replaceAll (name, pathchar, "-");
			return (name)};
		local (ct = sizeof (adrtable^), i);
		file.sureFolder (folder);
		for i = 1 to ct {
			local (adr = @adrtable^ [i]);
			local (name = nameOf (adr^));
			<<if sizeof (name) > 31
				<<name = string.mid (name, 1, 31)
			name = cleanFileName (adr, (typeOf (adr^) == tableType));
			name = string.replaceAll (name, file.getPathChar (), "-");
			name = string.replaceAll (name, "/", "-"); //Frontier/Win chokes on /s too
			local (f = folder + name);
			if typeOf (adr^) == tableType {
				doTable (adr, f + file.getPathChar ())}
			else {
				msg (adr);
				export.sendObject (adr, f);
				if sys.os () == "MacOS" { //file.setModified is failing silently on Windows
					local (moddate = timeModified (adr));
					if typeOf (moddate) == dateType {
						file.setModified (f, moddate);
						file.setCreated (f, timeCreated (adr))}}}}};
	
	return (doTable (adr, folder))}



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.