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

on indexStoredPages () {
	<<Index all the pages in the index queue.
			<<8/2/02; 2:51:46 AM by JES
				<<Index pages stored in the queue database, mainResponderSearchQueue.root, as opened by Frontier.openDataFile. We still support the queue in config.root, but new pages submitted for indexing are now in their own database. This cuts down on database bloat in config.root.
			<<9/28/99; 2:12:37 PM by PBS
				<<An indexName item may be stored with the page. If it is, then use the specified index, otherwise use the default index.
	bundle { //is this a search engine server? If not, don't index any pages.
		if not config.mainResponder.prefs.flSearchEngine {
			return (true)}};
	on doIndex (adrTable) {
		local (sizetable = sizeOf (adrtable^));
		if sizetable == 0 { // do nothing -- no messages -- no closing or re-opening of databases -- nothing!
			return (true)};
		local (defaultIndex = file.fileFromPath ( ())); //the name of the default index
		local (indexesUsed = {}); //the list of indexes that will need saving
		bundle { //loop through the queue of pages to be indexed
			local (i);
			for i = sizetable downTo 1 {
				if typeOf (adrTable^ [i]) == tableType {
					with adrTable^ [i] {
						msg ("Search Engine: Indexing: " + url + "...");
						local (index = defaultIndex);
						if defined (adrTable^ [i].indexName) { //PBS 9/28/99: get the specified index name from the stored page info
							index = adrTable^ [i].indexName};
			 (title, url, bodyText, siteName, siteUrl, client, flShowText, lastModDate, index);
						if not (indexesUsed contains string.lower (index)) { //PBS 9/28/99: save this index name so we can save the index gdb later
							indexesUsed = indexesUsed + string.lower (index)};
						sys.systemTask ()}};
				delete (@adrTable^ [i])}}; //delete this page from the queue
		bundle { //save config.root and any indexes that need saving
			<<Save config.root.
			msg ("Search Engine: Saving search queue...");
			fileMenu.saveMyRoot (adrTable);
			msg ("");
			if indexesUsed != {} { //at least one index needs saving
				local (i);
				for i = 1 to sizeOf (indexesUsed) { //loop through the indexes
					local (indexPath = (indexesUsed [i]));
					<<Save the index.
					msg ("Search Engine: Saving " + indexesUsed [i] + "..."); (indexPath);
					<<Close the index.
					msg ("Search Engine: Closing " + indexesUsed [i] + "...");
					fileMenu.close (indexPath);
					<<Re-open the index.
					msg ("Search Engine: Opening " + indexesUsed [i] + "..."); (indexPath, true); //open it hidden
					msg ("")}}};
		return (true)};
	if defined ( { //support original index
		doIndex (; //but only index it one last time, and then...
		delete (}; //... delete it: this table is no more
	doIndex (frontier.openDataFile ("mainResponderSearchQueue"));
	msg ("");
	return (true)};

bundle { //test code
	indexStoredPages ()}

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.