Tuesday, April 12, 2011 at 12:01 AM.


on write (adrdata, path, data) {
		<<3/16/11; 11:03:12 AM by DW
			<<Call with adrdata == nil if you want to use the global prefs, otherwise pass in the address of the place where you're storing your prefs.
	local (adrloc, urlToReturn="", pc = file.getpathchar (), now = clock.now ());
	adrdata = statictext.init (adrdata);
	data = string (data);
	if path beginswith "/" {
		path = string.delete (path, 1, 1)};
	for adrloc in @adrdata^.locations {
		staticText.initLocation (adrdata, nameof (adrloc^));
		if adrloc^.prefs.enabled {
			local (thispath);
			bundle { //set up thispath
				thispath = adrloc^.prefs.path;
				if not (thispath endswith "/") {
					thispath = thispath + "/"};
				thispath = thispath + path};
			try {
				case string.lower (adrloc^.prefs.driver) {
					"s3" {
						s3.newobject (thispath, data)};
					"ftp" {
						local (connection = tcp.ftp.openConnection (adrloc^.prefs.server, adrloc^.prefs.username, adrloc^.prefs.password));
						tcp.ftp.writefile (connection, data, thispath);
						tcp.ftp.closeConnection (connection)};
					"filesystem" {
						local (f = string.replaceall (thispath, "/", pc));
						f = string.replaceall (f, pc + pc, pc);
						file.surefilepath (f);
						file.writewholefile (f, data)}}}
			else {
				adrloc^.stats.whenLastError = now;
				adrloc^.stats.lastError = tryerror};
			if adrloc^.prefs.flDefault {
				urlToReturn = adrloc^.prefs.url + path};
			adrloc^.stats.whenLastWrite = now}};
	return (urlToReturn)};
bundle { //test code
	dialog.alert (write (@config.statictext, "test.txt", clock.now ()))}

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.