Thursday, December 09, 2010 at 12:01 AM.

system.verbs.builtins.log2.add

on add (source, eventtype, htmltext, startticks=clock.ticks (), imghtml="", adreventdata=nil) {
	<<Changes
		<<12/7/10; 7:17:51 PM by DW
			<<Use string.formatdouble to display seconds.
		<<9/19/10; 10:16:45 PM by DW
			<<Call callbacks.
		<<6/3/09; 9:58:02 AM by DW
			<<Give startticks a default value of clock.ticks.
		<<5/18/09; 10:38:39 AM by DW
			<<New logging code, cribbed from photoFan.root.
			<<First parameter is a string, the source of the logging event. It should be the name of the tool it's being called from, however if it's not a tool, it could be some other name. 
		<<1/20/08; 7:41:57 AM by DW
			<<Convert to calendar-based structure.
		<<11/21/07; 6:01:54 AM by DW
			<<Add an optional parameter for image html.
		<<11/20/07; 12:01:40 PM by DW
			<<Fixed a mistake in formatting the duration string.
		<<11/19/07; 7:29:24 PM by DW
			<<Created.
	local (adrdata = log2.init ());
	if adrdata^.prefs.enabled {
		local (secs);
		bundle { //set secs
			<<local (s = string (double (clock.ticks () - startticks) / 60))
			<<local (lod = string.nthfield (s, ".", 1))
			<<local (rod = string.nthfield (s, ".", 2) + "00")
			<<if sizeof (rod) > 3
				<<rod = string.mid (rod, 1, 3)
			<<secs = lod + "." + rod
			secs = string.formatdouble (double (clock.ticks () - startticks) / 60)};
		local (adrcal = @adrdata^.calendar, now = clock.now ());
		local (adrtable = mainresponder.calendar.getdayaddress (adrcal, now, true));
		adrtable = xml.addtable (adrtable, string (now));
		adrtable^.source = source;
		adrtable^.eventtype = eventtype;
		adrtable^.htmltext = htmltext;
		adrtable^.imghtml = imghtml;
		adrtable^.secs = secs;
		if adreventdata != nil {
			adrtable^.data = adreventdata^};
		bundle { //clear the cache
			if defined (system.temp.log2.viewLogCache) {
				delete (@system.temp.log2.viewLogCache)}};
		bundle { //call the callbacks
			local (adrscript);
			for adrscript in @adrdata^.callbacks.afterAdd {
				while typeof (adrscript^) == addresstype {
					adrscript = adrscript^};
				try {adrscript ^ (source, eventtype, htmltext, startticks, imghtml, adreventdata)}}}}}
<<bundle //test code
	<<local (i, startticks, ctloops = 10)
	<<for i = 1 to ctloops
		<<msg (i)
		<<startticks = clock.ticks ()
		<<clock.waitsixtieths (ctloops - i + 1)
		<<add ("log2", "Test code", i + ". I am just testing this mofo. " + states.nthstate (random (1, 50)) + ".", startticks)



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.