Monday, November 08, 2010 at 12:06 AM.
system.verbs.builtins.userland.firstRootRun
<<Changes
<<8/4/08; 1:13:08 PM by DW
<<Don't copy user.menus.bookmarkMenu into user.menus. (Commented code.)
<<6/2/06; 10:31:13 AM by DW
<<If it's the OPML Editor, empty the datafiles folder, the www folder.
<<11/5/97 at 12:10:37 PM by DW
<<New in 5.0, this script runs only the first time Frontier is run
<<It makes it easy for us to move code between cleanRoot
<<and the first time the code runs on the user's machine.
bundle { //6/2/06 by DW, empty the datafiles folder
try {
if system.environment.isOpmlEditor {
local (pc = file.getpathchar ());
local (appfolder = file.folderfrompath (frontier.getprogrampath ()));
bundle { //empty the www folder
local (wwwfolder = appfolder + "Guest Databases" + pc + "www" + pc, f);
fileloop (f in wwwfolder) {
try {
if file.isfolder (f) {
file.deletefolder (f)}
else {
file.delete (f)}}}};
bundle { //empty the datafiles folder
local (datafolder = appfolder + "Guest Databases" + pc + "ops" + pc + "datafiles" + pc, f);
fileloop (f in datafolder) {
try {file.delete (f)}}}}}};
bundle { //set up user.backups
try {delete (@user.backups.folder)};
try {delete (@user.backups.lastFname)};
try {delete (@user.backups.nextBackup)};
backups.init ();
if not (file.exists (user.backups.folder)) {
try {file.newFolder (user.backups.folder)}}};
bundle { //set up user.batchExporter
try {table.emptyTable (@user.batchExporter)};
batchExporter.init ()};
bundle { //set up user.prefs and its sub-tables
user.prefs.agentsEnabled = true;
user.prefs.name = "";
user.prefs.initials = "";
user.prefs.mailAddress = "";
user.prefs.organization = "";
user.prefs.mailHost = "";
user.prefs.frontierIsServer = false;
if not defined (user.prefs.serialNumber) {
user.prefs.serialNumber = ""};
bundle { //set up user.prefs.fonts
local (defaultfont, defaultsize);
new (tableType, @user.prefs.fonts);
case sys.os () {
"MacOS" {
defaultfont = "Geneva";
defaultsize = 12;
if system.environment.isCarbon {
defaultsize = 10}};
"WinNT";
"Win95" {
defaultfont = "Arial";
defaultsize = 10}};
if not defined (user.prefs.fonts.outlineFont) {
user.prefs.fonts.outlineFont = defaultfont};
if not defined (user.prefs.fonts.outlineFontSize) {
user.prefs.fonts.outlineFontSize = defaultsize};
if not defined (user.prefs.fonts.tableFont) {
user.prefs.fonts.tableFont = defaultfont};
if not defined (user.prefs.fonts.tableFontSize) {
user.prefs.fonts.tableFontSize = defaultsize};
if not defined (user.prefs.fonts.wptextFont) {
user.prefs.fonts.wptextFont = defaultfont};
if not defined (user.prefs.fonts.wptextFontSize) {
user.prefs.fonts.wptextFontSize = defaultsize};
if not defined (user.prefs.fonts.scriptFont) {
user.prefs.fonts.scriptFont = defaultfont};
if not defined (user.prefs.fonts.scriptFontSize) {
user.prefs.fonts.scriptFontSize = defaultsize};
if not defined (user.prefs.fonts.menuBarFont) {
case sys.os () {
"Win95";
"WinNT" {
user.prefs.fonts.menuBarFont = defaultfont};
"MacOS" {
<<Chicago with System 7, Charcoal with OS 8.
if system.environment.isCarbon {
user.prefs.fonts.menuBarFont = defaultfont}
else {
if sys.osVersion () beginsWith "8" {
user.prefs.fonts.menuBarFont = "Charcoal"}
else {
user.prefs.fonts.menuBarFont = "Chicago"}}}}};
if not defined (user.prefs.fonts.menuBarFontSize) {
user.prefs.fonts.menuBarFontSize = defaultsize}};
bundle { //set up user.prefs.dialogs
new (tableType, @user.prefs.dialogs);
user.prefs.dialogs.newSuiteName = "";
user.prefs.dialogs.jumpAddress = "websites"};
bundle { //set up user.prefs.search
new (tableType, @user.prefs.search);
user.prefs.search.searchFor = "";
user.prefs.search.replaceWith = "";
user.prefs.search.caseSensitive = false;
user.prefs.search.closeWindows = true;
user.prefs.search.flatSearch = false;
user.prefs.search.frontWindowOnly = false;
user.prefs.search.wholeWords = false;
user.prefs.search.wrapAround = true;
user.prefs.search.winStandardFindCommand = false};
bundle { //set up user.prefs.commonStyles
case sys.os () {
"MacOS" {
if system.environment.isCarbon {
user.prefs.commonStyles = userland.commonStylesMacCarbon}
else {
user.prefs.commonStyles = userland.commonStylesMac}};
"Win95";
"WinNT" {
user.prefs.commonStyles = userland.commonStylesWin}}}};
bundle { //clean out the user.callbacks table
new (tabletype, @user.callbacks);
new (tabletype, @user.callbacks.closeWindow);
new (tabletype, @user.callbacks.cmd2click);
new (tabletype, @user.callbacks.compileChangedScript);
new (tabletype, @user.callbacks.control2click);
new (tabletype, @user.callbacks.fileWriteWholeFile);
new (tabletype, @user.callbacks.opCollapse);
new (tabletype, @user.callbacks.opCursorMoved);
new (tabletype, @user.callbacks.openWindow);
new (tabletype, @user.callbacks.opExpand);
new (tabletype, @user.callbacks.opInsert);
new (tabletype, @user.callbacks.opReturnKey);
new (tabletype, @user.callbacks.opRightClick);
new (tabletype, @user.callbacks.opStruct2Click);
new (tabletype, @user.callbacks.option2click);
new (tabletype, @user.callbacks.resume);
new (tabletype, @user.callbacks.saveWindow);
new (tabletype, @user.callbacks.shutdown);
new (tabletype, @user.callbacks.startup);
new (tabletype, @user.callbacks.suspend);
new (tableType, @user.callbacks.systemTrayIcon2Click);
new (tableType, @user.callbacks.systemTrayIconRightClick)};
bundle { //set up user.export
export.init ();
user.export.lastaddress = @workspace.notepad;
user.export.lastcompression = "None";
user.export.lastfolder = "";
user.export.lastkind = "Packed object";
user.export.lastlocation = "File";
user.export.ok = false;
new (outlineType, @user.export.importLog);
user.export.importLogEnabled = true;
user.export.importLogOpen = false};
bundle { //set up user.menus
new (tableType, @user.menus);
<<user.menus.bookmarkMenu = userland.virginBookmarkMenu //8/4/08 by DW, commented
user.menus.customMenu = userland.virginCustomMenu};
with websites.["#ftpSite"] {
folder = file.folderFromPath (Frontier.getProgramPath ()) + "Websites" + file.getPathChar ();
<<file.sureFolder (folder)
url = file.fileToURL (folder);
isLocal = true};
user.html.sites.default = websites.["#ftpSite"];
bundle { //delete all the user.xxx tables we possibly can
try {delete (@user.log)};
try {delete (@user.stack)};
new (tableType, @user.databases)};
bundle { //intialize user.scheduler
table.emptyTable (@user.scheduler.hourly);
table.emptyTable (@user.scheduler.overnight);
new (outlineType, @user.scheduler.log);
local (day, month, year, hour, minute, second);
date.get (clock.now (), @day, @month, @year, @hour, @minute, @second);
user.scheduler.tasks.hourly.tasktime = date.set (day, month, year, hour, 0, 0);
user.scheduler.tasks.overnight.tasktime = date.set (day, month, year, 23, 59, 00);
<<Monday, March 29, 1999 at 12:51:52 AM by BS
user.scheduler.prefs.keepLog = false;
<<user.scheduler.prefs.logInGuestDatabase = true
user.scheduler.prefs.logInGuestDatabase = false; //PBS 06/24/00: no logging by default
user.scheduler.prefs.runThreads = true};
bundle { //initialize logging prefs
try {delete (@user.logs)};
if not defined (user.log) {
new (tableType, @user.log)};
new (tableType, @user.log.outlines);
new (tableType, @user.log.prefs);
user.log.prefs.flLogToGuestDatabase = false;
user.log.prefs.flLogToOutline = false;
user.log.prefs.flLogToTextFile = false;
user.log.prefs.flViewLog = false;
log.startup ()};
bundle { //initialize user.webBrowser
<<new (tableType, @user.webBrowser)
user.webBrowser.currentid = 'NONE';
user.webBrowser.webPreviewSerialNumber = 1;
user.webBrowser.winDefaultBrowserApp = "";
user.webBrowser.bringToFrontOnPreview = true;
on proxyInit () { //make sure proxy prefs exist
if not defined (user.webBrowser.proxy) {
new (tableType, @user.webBrowser.proxy)};
if not defined (user.webBrowser.proxy.domain) {
user.webBrowser.proxy.domain = ""};
if not defined (user.webBrowser.proxy.password) {
user.webBrowser.proxy.password = ""};
if not defined (user.webBrowser.proxy.port) {
user.webBrowser.proxy.port = 80};
if not defined (user.webBrowser.proxy.username) {
user.webBrowser.proxy.username = ""}};
proxyInit ()};
bundle { //user.html
user.html.prefs = userland.htmlprefs;
html.init ();
case sys.os () {
"Win95";
"WinNT" {
user.html.prefs.addLineFeeds = true};
"MacOS" {
user.html.prefs.addLineFeeds = false}};
user.html.menu.lastUrl = "http://frontier.userland.com/"};
bundle { //initialize betty, webserver, people, custody, root updates, webEdit
webserver.init ();
betty.init ();
people.init ();
custody.init ();
webEdit.init ();
rootUpdates.init ();
soap.init ();
user.betty.rpcHandlers.examples = betty.data.rpcHandlers.examples;
user.betty.prefs.rpcClientDefaultTimeout = 7200};
bundle { //initialize responders
<<user.webserver.responders.websiteFramework.data.docTree.samples = @websites.samples
<<try
<<delete (@user.webserver.responders .websiteFramework.data.docTree.allSites)
<<try
<<delete (@user.webserver.responders.websiteFramework.data.docTree.contents)
<<bundle //4/17/05; 8:49:58 AM by DW -- disabled setting up the default responder
<<PBS 11/11/99: set up the default responder (mainResponder).
<<local (adrResponder = @user.webserver.responders.default)
<<new (tableType, adrResponder)
<<adrResponder^.condition = "(string.lower (path) beginsWith \"mainResponder\")"
<<adrResponder^.enabled = true
<<new (tableType, @adrResponder^.methods)
<<script.newScriptObject ("on any (adrParamTable)\r\treturn (mainResponder.respond (adrParamTable))", @adrResponder^.methods.any)
<<bundle //4/17/05; 8:50:46 AM by DW -- disabled setting up the worm defense responder
<<PBS 02/10/02: worm defense responder
<<if not defined (user.webserver.responders.wormDefense)
<<user.webserver.responders.wormDefense = @webserver.responders.wormDefense
if defined (user.webserver.responders.manilaEdit) {
delete (@user.webserver.responders.manilaEdit)}};
new (outlineType, @user.html.macroErrors);
new (outlineType, @user.html.changedPages);
<<new (outlineType, @workspace.notepad) //4/17/05; 8:08:13 AM by DW, disabled
bundle { //misc Frontier 8 stuff
if not defined (user.protocols) {
new (tableType, @user.protocols)};
user.soap.prefs.rpcClientDefaultTimeout = 7200;
new (tableType, @websites.["#data"]);
local (adr, sizeTable = sizeOf (workspace), i);
for i = sizeTable downTo 1 {
local (adr = @workspace [i]);
local (name = nameOf (adr^));
case string.lower (name) {
"notepad";
"userlandsamples" {
continue}};
delete (adr)};
table.emptyTable (@scratchpad);
table.emptyTable (@system.deskscripts)};
<<Set lastUpdate time for Frontier.root.
<<user.rootUpdates.servers.Frontier.lastUpdate = userland.initialLastUpdateTime
<<user.rootUpdates.servers.Frontier.url = "http://frontier.userland.com/updates/Frontier"
<<user.rootUpdates.servers.Frontier.server = "updates.userland.com"
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.