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

on getFileAttributes (f, adradrtable) {
		<<3/3/02; 4:00:28 AM by JES
			<<Properly handle running directives in files which have unix-style line-endings.
		<<2/11/02; 5:30:29 PM by JES
			<<If adrcache^.upstream is not defined, create it.
		<<11/28/01; 6:20:06 PM by DW
			<<No longer initialize or save adrcache^.filetext.
			<<No longer cache outlineAsString.
				<<adrcache^.outlineAsString = string (adrcache^.outline)
	local (adrcache =[f]);
	local (datezero = date (0));
	if not defined (adrcache^) {
		new (tabletype, adrcache);
		adrcache^.hits = 0;
		adrcache^.mimetype = "text/plain";
		adrcache^.size = 0;
		adrcache^.created = datezero;
		adrcache^.modified = datezero;
		bundle { //init title
			local (fname = file.filefrompath (f));
			if file.isfolder (f) {
				fname = string.delete (fname, sizeof (fname), 1)};
			adrcache^.title = fname}};
	if not defined (adrcache^.upstream) { //init upstream sub-table
		local (adrupstream = @adrcache^.upstream);
		new (tabletype, adrupstream);
		adrupstream^.ctUploads = 0;
		adrupstream^.flError = false;
		adrupstream^.url = "";
		adrupstream^.whenLastUploaded = datezero};
	if defined (adrcache^) {
		if file.modified (f) == adrcache^.modified {
			adradrtable^ = adrcache;
			return (true)}};
	local (mimetype = radio.webserver.getfilemimetype (f));
	adradrtable^ = adrcache; //this is returned
	try {
		adrcache^.mimetype = mimetype;
		adrcache^.created = file.created (f);
		adrcache^.modified = file.modified (f);
		if file.isfolder (f) {
			local (ctfiles = 0);
			adrcache^.flFolder = true;
			fileloop (subf in f) {
			adrcache^.ctFiles = ctfiles}
		else {
			adrcache^.flFolder = false;
			case mimetype {
				"text/x-opml" {
					op.xmlToOutline (file.readwholefile (f), @adrcache^.outline);
					html.runOutlineDirectives (@adrcache^.outline, adrcache);
					if window.isOpen (@adrcache^.outline) { //work around a kernel bug
						window.close (@adrcache^.outline)}};
				"text/plain" {
					local (filetext = file.readwholefile (f));
					bundle { //check the first 500chars for a \n, and if we find one, convert to useable line endings
						local (first500 = string.mid (filetext, 1, 500));
						if first500 contains "\n" {
							if not (first500 contains "\r\n") {
								filetext = string.replaceAll (filetext, "\n", "\r")}}};
					html.runDirectives (filetext, adrcache)}};
			adrcache^.size = file.size (f)};
		return (true)}
	else {
		return (false)}}
<<bundle //test code
	<<local (adr)
	<<getFileAttributes ( + "directory.opml", @adr)
	<<getFileAttributes ( + "index.txt", @adr)
	<<getFileAttributes ( + "#prefs.txt", @adr)
	<<dialog.alert (adr)

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.