Monday, November 08, 2010 at 12:04 AM.
system.verbs.builtins.log.add
on add (item, logname, flTextFile=user.log.prefs.flLogToTextFile, flOutline=user.log.prefs.flLogToOutline, flGuestDB=user.log.prefs.flLogToGuestDatabase, flwptext=false, flViewLog=user.log.prefs.flViewLog) {
<<Changes
<<6/13/05; 5:13:59 AM by DW
<<If flViewLog is false, don't open new outlines.
<<12/14/98; 7:10:21 AM by DW
<<rewrote this to run off user.log.prefs
<<three booleans specify whether the log is written to a text file, an outline in Frontier.root or to a guest database in ops/logs/
<<writing to the guest database is done thru a call to log.addToGuestDatabase
<<Fri, 12 Mar 1999 02:05:16 GMT by AR
<<Added optional boolean parameter flViewLog.
local (now = clock.now ());
if flTextFile {
local (logFolder, s);
<<logFolder = file.folderFromPath (frontier.getProgramPath ())
<<logFolder = logFolder + "Logs" + file.getPathChar ()
logFolder = user.log.prefs.folder; //PBS 2/28/99
if sizeOf (logName) > 26 {
logName = string.mid (logName, 1, 26)};
local (logFile = logFolder + logName);
if not (logFile endsWith ".txt") {
logFile = logFile + ".txt"};
if not (file.exists (logFile)) {
file.sureFilePath (logFile);
file.new (logFile);
local(theOS = sys.os());
if theOS == "MacOS" || theOS == "MacCn" {
file.setCreator (logFile, 'R*ch');
file.setType (logFile, 'TEXT')}};
s = now + ": " + item;
case sys.os () {
"Win95";
"WinNT" {
s = string.replaceAll (s, "\r", "\r\n")}}; //add line feeds
semaphore.lock (logFile, 600);
file.writeLine (logFile, s);
semaphore.unlock (logFile)};
if flOutline {
local (adroutline = @user.log.outlines.[logname]);
semaphores.lock (string (adroutline), 3600);
local (oldTarget = target.get ());
if not defined (adroutline^) {
new (outlineType, adroutline);
if flViewLog {
edit (adroutline)}};
on addstring (s) {
s = s + "; on " + now;
if op.getlinetext () == "" {
op.setlinetext (s)}
else {
op.insert (s, up)}};
target.set (adroutline);
op.firstSummit ();
case typeof (item) {
stringtype {
addstring (item)};
listtype {
if sizeOf (item) > 0 {
local (i, dir = right);
addstring (item [1]);
for i = 2 to sizeof (item) {
op.insert (item [i], dir);
dir = down};
if dir == down {
op.go (left, 1)}}}}
else {
try {
addstring (string (item))}};
target.set (oldTarget);
semaphores.unlock (string (adroutline));
if flViewLog {
edit (adroutline)}};
if flGuestDB {
local (adrsubtable = log.addToGuestDatabase (logname));
if flwptext {
wp.newtextobject (item, @adrsubtable^.item)}
else {
adrsubtable^.item = item};
if flViewLog {
edit (parentof (adrsubtable^));
op.go (down, infinity); op.expand (1)}}}
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.