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

system.verbs.builtins.Frontier.tools.startup

on startup () {
	<<Changes
		<<1/18/10; 9:28:44 AM by DW
			<<Disable the Frontier.tools.thread, install everyMinute script in scheduler2.
		<<6/13/05; 4:38:32 AM by DW
			<<Write the custom icons out twice, once at the beginning (as it has always been) and in a second pass at the end, after all the tools are open. The problem came up with the dotOpml.root tool, which has a custom icon for Buddies, but they weren't getting written out because the tool wasn't yet open.
		<<3/31/02; 3:41:01 AM by JES
			<<Write out nodeTypes' custom icons within a try block, in case the nodeType no longer exists. Prevents errors at startup after a nodeType has been deleted.
		<<11/30/01; 5:01:11 PM by JES
			<<Install Tools in a try statement.
		<<8/21/01; 12:08:46 AM by JES
			<<If no Tools are installed, then call system.menus.buildMenuBar so that the Tools menu will appear in the menu bar, regardless of wheteher there are any Tools installed.
		<<7/12/01; 3:45:38 AM by JES
			<<When writing out custom icons, dive into addresses of nodeType tables.
		<<2/13/01; 2:17:54 PM by PBS
			<<Don't install Tools such as Music.root, StaticSites.root, etc.
		<<2/12/01; 12:13:40 PM by PBS
			<<Check if Music.root exists in the Tools folder before attempting to build the Player app sub-menu. This prevents a scriptError during startup if you don't have or have moved Music.root.
		<<01/06/01; 7:03:27 PM by PBS
			<<Install every Tool that is enabled. Uninstall every Tool that is disabled.
	bundle { //thread changes, 1/18/10 by DW
		Frontier.tools.thread.enabled = false;
		if defined (user.scheduler.threads.tools) {
			delete (@user.scheduler.threads.tools)};
		if not defined (user.scheduler2.everyMinute.frontierTools) {
			user.scheduler2.everyMinute.frontierTools = @Frontier.tools.everyMinute}};
	
	on writeCustomIcons () {
		<<Custom icons are written to the [program folder]/Appearance/Icons/ directory.
		<<04/18/2001 JES: cribbed from startup.startupScript in Radio
		local (appFolder = file.folderFromPath (Frontier.getProgramPath ()));
		local (pc = file.getPathChar ());
		local (iconsFolder = appFolder + "Appearance" + pc + "Icons" + pc);
		file.sureFilePath (iconsFolder); //make sure path to folder exists
		file.sureFolder (iconsFolder); //make sure the folder exists
		local (adrTable);
		local (platform = "windows");
		if system.environment.isMac {
			platform = "mac"};
		local (adrItem);
		for adrItem in @Frontier.tools.data.nodeTypes {
			try { //don't fail when a nodeType no longer exists
				while typeOf (adrItem^) == addressType {
					adrItem = adrItem^};
				if defined (adrItem^.icon) {
					local (adrIcon = @adrItem^.icon.[platform]);
					if defined (adrIcon^) {
						local (itemName = nameOf (adrItem^));
						local (fname = itemName);
						if system.environment.isWindows {
							fname = fname + ".bmp"};
						local (f = iconsFolder + fname);
						if not (file.exists (f)) { //write only if file does not exist
							if system.environment.isWindows {
								file.writeWholeFile (f, adrIcon^)};
							if system.environment.isMac { //write to resource fork
								file.writeWholeFile (f, "", 'rsrc', 'RSED'); //type is resource, creator is ResEdit
								local (adrResource);
								for adrResource in adrIcon { //write each resource
									rez.putResource (f, getBinaryType (adrResource^), 128, adrResource)}}}}}}}};
	
	Frontier.tools.init (); //11/28/00 JES
	
	writeCustomIcons ();
	
	try { //11/28/00 JES: lock a semaphore to prevent race conditions
		semaphore.lock (this, 7200)}
	else {
		semaphore.unlock (this)};
	
	if system.environment.isPike {
		Frontier.tools.menu = Frontier.tools.data.virginRadioToolsMenu}
	else {
		Frontier.tools.menu = Frontier.tools.data.virginToolsMenu};
	
	local (toolsFolder = Frontier.tools.getToolsFolderPath ());
	
	local (f, flRebuildMenuBar = true);
	fileloop (f in toolsFolder) { //install new and changed tools
		local (fname = file.fileFromPath (f));
		if string.lower (fname) endsWith ".root" {
			try {
				Frontier.tools.uninstall (f);
				if Frontier.tools.isEnabled (f) {
					Frontier.tools.install (f); //now install it
					flRebuildMenuBar = false}}}};
	
	bundle { //uninstall removed tools
		local (adrDatabase);
		for adrDatabase in @user.tools.databases {
			local (flUninstall = false);
			if not (file.exists (adrDatabase^.path)) {
				flUninstall = true};
			if string.lower (file.folderFromPath (adrDatabase^.path)) != string.lower (toolsFolder) {
				flUninstall = true};
			if flUninstall {
				Frontier.tools.uninstall (adrDatabase^.path)}}};
	
	bundle { //special case for Music tool -- build Player submenu
		if file.exists (toolsFolder + "Music.root") { //PBS 02/12/01: skip if the Music Tool doesn't exist
			if Frontier.tools.isEnabled (toolsFolder + "Music.root") {
				MusicSuite.buildPlayerSubmenu ()}}};
	
	semaphore.unlock (this); //11/28/00 JES
	
	if flRebuildMenuBar { //08/21/01 JES: make sure the Tools menu is installed.
		system.menus.buildMenuBar ()};
	
	writeCustomIcons (); //6/13/05; 4:43:13 AM by DW
	return (true)};
bundle { //testing
	startup ()}



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.