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


on visit (visitproc) {
	local (level = 0); <<callback routine can get level from here
	on drivevisit () { <<actually does the traversal, save a parameter and stack space
		if not op.go (right, 1) { <<cursor has no subheads, not an error
			return (true)};
		loop {
			local (origcursor = op.getCursor ());
			local (nextcursor);
			bundle { <<locate the next headline at this level, in case visitproc deletes
				if op.go (down, 1) {
					nextcursor = op.getCursor ();
					op.setCursor (origcursor)}
				else {
					nextcursor = 0}}; <<this is the last time thru the loop
			if not visitproc^ () { <<no param, operation applies to the bar cursor headline
				return (false)}; <<unwind recursion
			if op.setCursor (origcursor) { <<visitproc didn't delete the cursor
				if op.countSubs (1) > 0 { <<has one or more subs at first level
					level++; <<this can be referenced by the callback routine
					if not drivevisit () { <<recursion returned an error, unwind it
						return (false)};
			if nextcursor == 0 {
				return (true)};
			op.setCursor (nextcursor)}};
	return (drivevisit ())}

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.