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

system.verbs.globals.runSelection

on runSelection () {
	<<Fri, Aug 16, 1996 at 6:02:42 AM by DW
		<<runs cards
	<<modified for Frontier 3.0 -- 11/12/93 DW
		<<handles compiled code
		<<doesn't display result if it hasn't been set
		<<uses window.msg too, in case the main window is hidden
	on kernelcall () {
		kernel (window.runselection)};
	on runoutlineselection () {
		<<deposit the value as a comment underneath the headline
			<<operate on the original front window, allow for side-effects
		
		origwindow = window.frontmost (); <<remember original frontmost window
		origcursor = op.getcursor (); <<remember original bar cursor
		
		wp.setTextMode (false);
		
		s = displaystring (evaluate (op.getlinetext ())); <<evaluate the expression
		
		if origwindow equals "" { <<avoid errors in menu-script windows
			if window.frontmost () notequals "" {
				<<special case for windows linked into menu bars
				<<if the script caused a window change, don't try to deposit value comment
				return (true)}}
		else {
			try {
				target.set (origwindow)}
			else { <<it must have been deleted by the script
				return (true)}};
		
		bundle { <<deposit comment in window with script
			op.setcursor (origcursor); <<restore the cursor, avoid side-effect errors
			local (displayon = op.getdisplay ());
			op.setdisplay (false); <<turn the display off
			op.expand (1);
			if op.go (right, 1) { <<the line has at least one subhead
				if script.iscomment () { <<smash pre-existing value, stored in a comment line
					op.setlinetext (s);
					op.go (left, 1);
					op.setdisplay (displayon); <<restore the outline display
					return (true)};
				op.go (left, 1)}; <<put cursor back on line with program text
			op.insert (s, right);
			script.makecomment ();
			op.setdisplay (displayon); <<restore the outline display
			op.go (left, 1);
			target.clear ()};
		
		return (true)};
	on runtableselection () {
		wp.setTextMode (false);
		local (adr = table.getCursor ());
		local (result);
		case typeOf (adr^) {
			codeType; <<11/12/93 DW
			scriptType {
				result = adr^ ()};
			stringType {
				result = evaluate (adr^)};
			binaryType { <<Fri, Aug 16, 1996 at 6:04:10 AM by DW
				if getBinaryType (adr^) == 'CARD' {
					card.run (adr)}
				else {
					speaker.beep ()}}}
		else {
			speaker.beep ()};
		if result != nil { <<11/12/93 DW
			local (s = displaystring (result));
			msg (s);
			window.msg (s)};
		return (true)};
	on runwpselection () {
		local (s = wp.getSelText ());
		msg (displaystring (evaluate (s)));
		return (true)};
	on runmenuselection () {
		local (s);
		menu.getScript (@s);
		s ();
		return (true)};
	local (frontwindow = window.frontmost ());
	if frontwindow == "" { <<no window open, or it's not an object db window
		speaker.beep ();
		return (false)};
	if window.ismenuscript (frontwindow) { <<it's a script linked into a menubar
		<<window.frontmost can't return an address for these windows
		
		runoutlineselection ();
		return (true)};
	if defined (frontwindow^) { <<see if it's a script or an outline
		case typeOf (frontwindow^) { <<override for script-implemented running
			outlinetype;
			scripttype {
				return (runoutlineselection ())};
			tabletype {
				return (runtableselection ())};
			wptexttype {
				return (runwpselection ())};
			menubartype {
				return (runmenuselection ())}}};
	if not kernelcall () { <<default action: use kernel
		speaker.beep ();
		return (false)};
	return (true)}



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.