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


on startup (adrObject, adrStorage) {
	<<The startup script is called when a rendering session is starting up.
		<<A rendering session is usually one of two things:
			<<1) A single page is being rendered.
				<<In this case this script is called before that page has been rendered.
			<<2) An entire table is being rendered.
				<<In this case this script is called after before any of the pages in the table have been rendered.
			<<Other types of rendering sessions may exist in the future,
				<<but the pattern will remain the same.
		<<adrObject is the address of the object being rendered.
			<<It might be a page or it might be a table.
		<<adrStorage is the address of private storage for this file writer for this session.
	<<This particular script opens the ftp connection at startup
		<<5/1/03; 10:35:13 PM by EDS
	try {
		if not defined (adrStorage^.adrConnectionTable) {
			local (username, password);
			local (host);
			local {
				adrFtpSite = adrStorage^.adrFtpSite};
			username = adrFtpSite^.account;
			password = adrFtpSite^.password;
			host = adrFtpSite^.domain;
			local (adrConnectionTable);
			adrConnectionTable = tcp.ftp.openConnection(host, username, password, flMessages:false);
			adrStorage^.adrConnectionTable = adrConnectionTable;
			if not defined(adrStorage^.adrConnectionTable^) {
				scriptError("Unknown connection error")};
			bundle { // set site root directory
				siteRootDirectory = adrFtpSite^.directory;
				if not (siteRootDirectory beginsWith "/") {
					<</ means at the root
						<<no / means relative to login directory. 
						<<hardcoding path to login directory is stupid. 
						<<but broke abstraction barrier here getting the directory straight from the conn table. 
					siteRootDirectory = string.popTrailing(adrStorage^.adrConnectionTable^.rootDirectory,'/')+"/" + siteRootDirectory};
				if not (siteRootDirectory endsWith "/") {
					siteRootDirectory = siteRootDirectory + "/"};
				if siteRootDirectory == "//" {
					siteRootDirectory = "/"};
				adrStorage^.siteRootDirectory = siteRootDirectory}}}
	else {
		scriptError("Error in filewriters.ftp.startup setting up ftp connection: "+tryError)};
	adrStorage^.adrObject = adrObject;
	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.