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

system.verbs.builtins.mainResponder.background.everyMinute

<<Changes:
	<<1/16/10; 10:20:25 AM by DW
		<<Comment code that checks if it's a trial version that expired.
	<<8/30/06; 12:12:34 PM by DW
		<<Put all references to subtaskinfo inside try's. 
		<<Not sure what this was supposed to do, but without the try's they make the script fail, every time it's called.
	<<3/4/03; 3:20:27 PM by JES
		<<Call mainResponder.init once a minute -- at this time on a 500MHz G3 its average execution time is 0.027 seconds on an idle machine -- certainly worth the tradeoff for simplicity in dependent code.
	<<8/1/02; 7:23:44 PM by JES
		<<If the search engine is enabled, and this is the minute to index, kick off the index in its own thread.
	<<12/26/99 ;7:12:46 PM by PBS
		<<Bug fix: save all open databases that have been modified, not just databases listed in user.databases and mainResponder-specific databases. If the new verb table.visitOpenDatabases exists, call that instead of mainResponder.visitDatabases.
mainResponder.init ();
<<bundle //trial
	<<if defined (userland.trialVersionCheck)
		<<userland.trialVersionCheck ()
bundle { //possibly kick off a search engine index
	if config.mainResponder.prefs.flSearchEngine {
		if number (double (clock.now ()) / 60) % config.mainResponder.search.prefs.minutesBetweenIndexes == 0 {
			thread.easyCall (@mainResponder.search.server.indexStoredPages, {})}}};
if config.mainResponder.prefs.flBuildPagesInBackground {
	if defined (system.temp.mainResponder.backgroundPagesToBuild) {
		local (i, adrItem, adrPage, ct = sizeOf (system.temp.mainResponder.backgroundPagesToBuild), pageList = {});
		for i = ct downTo 1 {
			adrItem = @system.temp.mainresponder.backgroundPagesToBuild [i];
			adrPage = adrItem^;
			delete (adrItem); //html.commands.releaseRenderedPage could take more than a minute!
			if not (pageList contains adrPage) { //don't render it twice
				try { //could time out
					local (t); new (tableType, @t);
					html.buildOnePage (adrPage, @t);
					try {subtaskInfo.["builtPage" + i] = adrPage};
					<<frontier.bringtofront ()
					pageList = pageList + {adrPage}}}};
		html.deletePageTableAddress ()}}; //8/22/99; 10:58:08 AM by DW
try {subtaskInfo.ctDatabasesSaved = 0};
if config.mainResponder.prefs.flSaveDatabasesEveryMinute { //save all open guest databases 
	local (day, month, year, hour, minute, second);
	date.get (clock.now (), @day, @month, @year, @hour, @minute, @second);
	if mod (minute, 2) == 0 {
		local (ctSaved = 0);
		on visit (f) {
			if window.isModified (f) { //Fri, 30 Apr 1999 20:41:05 GMT by AR
				msg ("mainResponder.background.everyMinute: Saving " + file.fileFromPath (f) + "...");
				local (origTicks = clock.ticks ());
				fileMenu.save (f);
				local (ticksToSave = clock.ticks () - origTicks);
				local (secsToSave = ticksToSave / 60);
				local (saveString = file.fileFromPath (f) + " took " + secsToSave);
				if secsToSave == 1 {
					saveString = saveString + " second"}
				else {
					saveString = saveString + " seconds"};
				saveString = saveString + " to save; ";
				msg (saveString + Frontier.countThreads () + " threads; Pausing...");
				thread.sleepFor (3);
				<<msg ("mainResponder.background.everyMinute: Saved " + file.fileFromPath (f) + ".")
				ctSaved++};
			return (true)};
		local (adrVisitScript = @mainResponder.visitDatabases);
		if defined (table.visitOpenDatabases) { //PBS 12/26/99: use the newer visit script if it exists.
			adrVisitScript = @table.visitOpenDatabases};
		adrVisitScript^ (@visit);
		try {subtaskInfo.ctDatabasesSaved = ctSaved};
		msg ("")}};
if config.mainResponder.prefs.flLogMemavail { //2/23/99; 5:59:57 AM by DW
	local (adrTable = log.addToGuestDatabase ("memavail", flHourlyRoll:false));
	adrTable^.memAvail = string.megabyteString (sys.memAvail ());
	try {subtaskInfo.memAvail = adrTable^.memAvail}}



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.