|
@@ -0,0 +1,373 @@
|
|
|
+MODULE StdLog;
|
|
|
+
|
|
|
+ (* THIS IS TEXT COPY OF BlackBox 1.6-rc6 Std/Mod/Log.odc *)
|
|
|
+ (* DO NOT EDIT *)
|
|
|
+
|
|
|
+ IMPORT
|
|
|
+ Log, Fonts, Ports, Stores, Models, Views, Dialog, HostDialog, StdDialog,
|
|
|
+ TextModels, TextMappers, TextRulers, TextViews, TextControllers;
|
|
|
+
|
|
|
+ CONST
|
|
|
+ (** IntForm base **)
|
|
|
+ charCode* = TextMappers.charCode; decimal* = TextMappers.decimal; hexadecimal* = TextMappers.hexadecimal;
|
|
|
+
|
|
|
+ (** IntForm showBase **)
|
|
|
+ hideBase* = TextMappers.hideBase; showBase* = TextMappers.showBase;
|
|
|
+
|
|
|
+ mm = Ports.mm;
|
|
|
+
|
|
|
+ TYPE
|
|
|
+ ShowHook = POINTER TO RECORD (Dialog.ShowHook) END;
|
|
|
+ LogHook = POINTER TO RECORD (Log.Hook) END;
|
|
|
+
|
|
|
+ VAR
|
|
|
+ logAlerts: BOOLEAN;
|
|
|
+
|
|
|
+ text-, buf-: TextModels.Model;
|
|
|
+ defruler-: TextRulers.Ruler;
|
|
|
+ dir-: TextViews.Directory;
|
|
|
+
|
|
|
+ out, subOut: TextMappers.Formatter;
|
|
|
+
|
|
|
+ showHook: ShowHook;
|
|
|
+
|
|
|
+
|
|
|
+ PROCEDURE Flush;
|
|
|
+ BEGIN
|
|
|
+ text.Append(buf); Views.RestoreDomain(text.Domain())
|
|
|
+ END Flush;
|
|
|
+
|
|
|
+ PROCEDURE Char* (ch: CHAR);
|
|
|
+ BEGIN
|
|
|
+ out.WriteChar(ch); Flush
|
|
|
+ END Char;
|
|
|
+
|
|
|
+ PROCEDURE Int* (i: LONGINT);
|
|
|
+ BEGIN
|
|
|
+ out.WriteChar(" "); out.WriteInt(i); Flush
|
|
|
+ END Int;
|
|
|
+
|
|
|
+ PROCEDURE Real* (x: REAL);
|
|
|
+ BEGIN
|
|
|
+ out.WriteChar(" "); out.WriteReal(x); Flush
|
|
|
+ END Real;
|
|
|
+
|
|
|
+ PROCEDURE String* (IN str: ARRAY OF CHAR);
|
|
|
+ BEGIN
|
|
|
+ out.WriteString(str); Flush
|
|
|
+ END String;
|
|
|
+
|
|
|
+ PROCEDURE Bool* (x: BOOLEAN);
|
|
|
+ BEGIN
|
|
|
+ out.WriteChar(" "); out.WriteBool(x); Flush
|
|
|
+ END Bool;
|
|
|
+
|
|
|
+ PROCEDURE Set* (x: SET);
|
|
|
+ BEGIN
|
|
|
+ out.WriteChar(" "); out.WriteSet(x); Flush
|
|
|
+ END Set;
|
|
|
+
|
|
|
+ PROCEDURE IntForm* (x: LONGINT; base, minWidth: INTEGER; fillCh: CHAR; showBase: BOOLEAN);
|
|
|
+ BEGIN
|
|
|
+ out.WriteIntForm(x, base, minWidth, fillCh, showBase); Flush
|
|
|
+ END IntForm;
|
|
|
+
|
|
|
+ PROCEDURE RealForm* (x: REAL; precision, minW, expW: INTEGER; fillCh: CHAR);
|
|
|
+ BEGIN
|
|
|
+ out.WriteRealForm(x, precision, minW, expW, fillCh); Flush
|
|
|
+ END RealForm;
|
|
|
+
|
|
|
+ PROCEDURE Tab*;
|
|
|
+ BEGIN
|
|
|
+ out.WriteTab; Flush
|
|
|
+ END Tab;
|
|
|
+
|
|
|
+ PROCEDURE Ln*;
|
|
|
+ BEGIN
|
|
|
+ out.WriteLn; Flush;
|
|
|
+ TextViews.ShowRange(text, text.Length(), text.Length(), TextViews.any)
|
|
|
+ END Ln;
|
|
|
+
|
|
|
+ PROCEDURE Para*;
|
|
|
+ BEGIN
|
|
|
+ out.WritePara; Flush;
|
|
|
+ TextViews.ShowRange(text, text.Length(), text.Length(), TextViews.any)
|
|
|
+ END Para;
|
|
|
+
|
|
|
+ PROCEDURE View* (v: Views.View);
|
|
|
+ BEGIN
|
|
|
+ out.WriteView(v); Flush
|
|
|
+ END View;
|
|
|
+
|
|
|
+ PROCEDURE ViewForm* (v: Views.View; w, h: INTEGER);
|
|
|
+ BEGIN
|
|
|
+ out.WriteViewForm(v, w, h); Flush
|
|
|
+ END ViewForm;
|
|
|
+
|
|
|
+ PROCEDURE ParamMsg* (IN msg, p0, p1, p2: ARRAY OF CHAR);
|
|
|
+ BEGIN
|
|
|
+ out.WriteParamMsg(msg, p0, p1, p2); Flush
|
|
|
+ END ParamMsg;
|
|
|
+
|
|
|
+ PROCEDURE Msg* (IN msg: ARRAY OF CHAR);
|
|
|
+ BEGIN
|
|
|
+ out.WriteMsg(msg); Flush
|
|
|
+ END Msg;
|
|
|
+
|
|
|
+
|
|
|
+ PROCEDURE^ Open*;
|
|
|
+
|
|
|
+ PROCEDURE (hook: ShowHook) ShowParamMsg (IN s, p0, p1, p2: ARRAY OF CHAR);
|
|
|
+ BEGIN
|
|
|
+ IF Dialog.showsStatus THEN
|
|
|
+ Dialog.ShowParamStatus(s, p0, p1, p2);
|
|
|
+ IF logAlerts THEN
|
|
|
+ ParamMsg(s, p0, p1, p2); Ln
|
|
|
+ END
|
|
|
+ ELSE
|
|
|
+ IF logAlerts THEN
|
|
|
+ Open;
|
|
|
+ ParamMsg(s, p0, p1, p2); Ln
|
|
|
+ ELSE
|
|
|
+ HostDialog.ShowParamMsg(s, p0, p1, p2)
|
|
|
+ END
|
|
|
+ END
|
|
|
+ END ShowParamMsg;
|
|
|
+
|
|
|
+ PROCEDURE (hook: ShowHook) ShowParamStatus (IN s, p0, p1, p2: ARRAY OF CHAR);
|
|
|
+ BEGIN
|
|
|
+ HostDialog.ShowParamStatus(s, p0, p1, p2)
|
|
|
+ END ShowParamStatus;
|
|
|
+
|
|
|
+
|
|
|
+ PROCEDURE NewView* (): TextViews.View;
|
|
|
+ VAR v: TextViews.View;
|
|
|
+ BEGIN
|
|
|
+ Flush;
|
|
|
+ Dialog.SetShowHook(showHook); (* attach alert dialogs *)
|
|
|
+ v := dir.New(text);
|
|
|
+ v.SetDefaults(TextRulers.CopyOf(defruler, Views.deep), dir.defAttr);
|
|
|
+ RETURN v
|
|
|
+ END NewView;
|
|
|
+
|
|
|
+ PROCEDURE New*;
|
|
|
+ BEGIN
|
|
|
+ Views.Deposit(NewView())
|
|
|
+ END New;
|
|
|
+
|
|
|
+
|
|
|
+ PROCEDURE SetDefaultRuler* (ruler: TextRulers.Ruler);
|
|
|
+ BEGIN
|
|
|
+ defruler := ruler
|
|
|
+ END SetDefaultRuler;
|
|
|
+
|
|
|
+ PROCEDURE SetDir* (d: TextViews.Directory);
|
|
|
+ BEGIN
|
|
|
+ ASSERT(d # NIL, 20); dir := d
|
|
|
+ END SetDir;
|
|
|
+
|
|
|
+
|
|
|
+ PROCEDURE Open*;
|
|
|
+ VAR v: Views.View; pos: INTEGER;
|
|
|
+ BEGIN
|
|
|
+ v := NewView();
|
|
|
+ StdDialog.Open(v, "#Dev:Log", NIL, "", NIL, FALSE, TRUE, FALSE, FALSE, TRUE);
|
|
|
+ Views.RestoreDomain(text.Domain());
|
|
|
+ pos := text.Length();
|
|
|
+ TextViews.ShowRange(text, pos, pos, TextViews.any);
|
|
|
+ TextControllers.SetCaret(text, pos)
|
|
|
+ END Open;
|
|
|
+
|
|
|
+ PROCEDURE Clear*;
|
|
|
+ BEGIN
|
|
|
+ Models.BeginModification(Models.notUndoable, text);
|
|
|
+ text.Delete(0, text.Length());
|
|
|
+ buf.Delete(0, buf.Length());
|
|
|
+ Models.EndModification(Models.notUndoable, text)
|
|
|
+ END Clear;
|
|
|
+
|
|
|
+
|
|
|
+ (* Sub support *)
|
|
|
+
|
|
|
+ PROCEDURE* Guard (o: ANYPTR): BOOLEAN;
|
|
|
+ BEGIN
|
|
|
+ RETURN
|
|
|
+ (o # NIL) &
|
|
|
+ ~( (o IS TextModels.Model) & (o = text)
|
|
|
+ OR (o IS Stores.Domain) & (o = text.Domain())
|
|
|
+ OR (o IS TextViews.View) & (o(TextViews.View).ThisModel() = text)
|
|
|
+ )
|
|
|
+ END Guard;
|
|
|
+
|
|
|
+ PROCEDURE* ClearBuf;
|
|
|
+ VAR subBuf: TextModels.Model;
|
|
|
+ BEGIN
|
|
|
+ subBuf := subOut.rider.Base(); subBuf.Delete(0, subBuf.Length())
|
|
|
+ END ClearBuf;
|
|
|
+
|
|
|
+ PROCEDURE* FlushBuf;
|
|
|
+ VAR buf: TextModels.Model;
|
|
|
+ BEGIN
|
|
|
+ buf := subOut.rider.Base();
|
|
|
+ IF buf.Length() > 0 THEN
|
|
|
+ IF ~Log.synch THEN Open() END;
|
|
|
+ text.Append(buf)
|
|
|
+ END
|
|
|
+ END FlushBuf;
|
|
|
+
|
|
|
+ PROCEDURE* SubFlush;
|
|
|
+ BEGIN
|
|
|
+ IF Log.synch THEN
|
|
|
+ FlushBuf;
|
|
|
+ IF Log.force THEN Views.RestoreDomain(text.Domain()) END
|
|
|
+ END;
|
|
|
+ END SubFlush;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ PROCEDURE (log: LogHook) Guard* (o: ANYPTR): BOOLEAN;
|
|
|
+ BEGIN RETURN Guard(o)
|
|
|
+ END Guard;
|
|
|
+
|
|
|
+ PROCEDURE (log: LogHook) ClearBuf*;
|
|
|
+ BEGIN ClearBuf
|
|
|
+ END ClearBuf;
|
|
|
+
|
|
|
+ PROCEDURE (log: LogHook) FlushBuf*;
|
|
|
+ BEGIN FlushBuf
|
|
|
+ END FlushBuf;
|
|
|
+
|
|
|
+ PROCEDURE (log: LogHook) Beep*;
|
|
|
+ BEGIN Dialog.Beep
|
|
|
+ END Beep;
|
|
|
+
|
|
|
+ PROCEDURE (log: LogHook) Char* (ch: CHAR);
|
|
|
+ BEGIN
|
|
|
+ subOut.WriteChar(ch); SubFlush
|
|
|
+ END Char;
|
|
|
+
|
|
|
+ PROCEDURE (log: LogHook) Int* (n: INTEGER);
|
|
|
+ BEGIN
|
|
|
+ subOut.WriteChar(" "); subOut.WriteInt(n); SubFlush
|
|
|
+ END Int;
|
|
|
+
|
|
|
+ PROCEDURE (log: LogHook) Real* (x: REAL);
|
|
|
+ BEGIN
|
|
|
+ subOut.WriteChar(" "); subOut.WriteReal(x); SubFlush
|
|
|
+ END Real;
|
|
|
+
|
|
|
+ PROCEDURE (log: LogHook) String* (IN str: ARRAY OF CHAR);
|
|
|
+ BEGIN
|
|
|
+ subOut.WriteString(str); SubFlush
|
|
|
+ END String;
|
|
|
+
|
|
|
+ PROCEDURE (log: LogHook) Bool* (x: BOOLEAN);
|
|
|
+ BEGIN
|
|
|
+ subOut.WriteChar(" "); subOut.WriteBool(x); SubFlush
|
|
|
+ END Bool;
|
|
|
+
|
|
|
+ PROCEDURE (log: LogHook) Set* (x: SET);
|
|
|
+ BEGIN
|
|
|
+ subOut.WriteChar(" "); subOut.WriteSet(x); SubFlush
|
|
|
+ END Set;
|
|
|
+
|
|
|
+ PROCEDURE (log: LogHook) IntForm* (x: INTEGER; base, minWidth: INTEGER; fillCh: CHAR; showBase: BOOLEAN);
|
|
|
+ BEGIN
|
|
|
+ subOut.WriteIntForm(x, base, minWidth, fillCh, showBase); SubFlush
|
|
|
+ END IntForm;
|
|
|
+
|
|
|
+ PROCEDURE (log: LogHook) RealForm* (x: REAL; precision, minW, expW: INTEGER; fillCh: CHAR);
|
|
|
+ BEGIN
|
|
|
+ subOut.WriteRealForm(x, precision, minW, expW, fillCh); SubFlush
|
|
|
+ END RealForm;
|
|
|
+
|
|
|
+ PROCEDURE (log: LogHook) Tab*;
|
|
|
+ BEGIN
|
|
|
+ subOut.WriteTab; SubFlush
|
|
|
+ END Tab;
|
|
|
+
|
|
|
+ PROCEDURE (log: LogHook) Ln*;
|
|
|
+ BEGIN
|
|
|
+ subOut.WriteLn; SubFlush;
|
|
|
+ IF Log.synch THEN Views.RestoreDomain(text.Domain()) END
|
|
|
+ END Ln;
|
|
|
+
|
|
|
+ PROCEDURE (log: LogHook) Para*;
|
|
|
+ BEGIN
|
|
|
+ subOut.WritePara; SubFlush;
|
|
|
+ IF Log.synch THEN Views.RestoreDomain(text.Domain()) END
|
|
|
+ END Para;
|
|
|
+
|
|
|
+ PROCEDURE (log: LogHook) View* (v: ANYPTR);
|
|
|
+ BEGIN
|
|
|
+ IF (v # NIL) & (v IS Views.View) THEN
|
|
|
+ subOut.WriteView(v(Views.View)); SubFlush
|
|
|
+ END
|
|
|
+ END View;
|
|
|
+
|
|
|
+ PROCEDURE (log: LogHook) ViewForm* (v: ANYPTR; w, h: INTEGER);
|
|
|
+ BEGIN
|
|
|
+ ASSERT(v # NIL, 20);
|
|
|
+ IF (v # NIL) & (v IS Views.View) THEN
|
|
|
+ subOut.WriteViewForm(v(Views.View), w, h); SubFlush
|
|
|
+ END
|
|
|
+ END ViewForm;
|
|
|
+
|
|
|
+ PROCEDURE (log: LogHook) ParamMsg* (IN s, p0, p1, p2: ARRAY OF CHAR);
|
|
|
+ VAR msg: ARRAY 256 OF CHAR; i: INTEGER; ch: CHAR;
|
|
|
+ BEGIN
|
|
|
+ IF logAlerts THEN
|
|
|
+ IF Log.synch THEN Open END;
|
|
|
+ Dialog.MapParamString(s, p0, p1, p2, msg);
|
|
|
+ i := 0; ch := msg[0];
|
|
|
+ WHILE ch # 0X DO
|
|
|
+ IF ch = TextModels.line THEN subOut.WriteLn
|
|
|
+ ELSIF ch = TextModels.para THEN subOut.WritePara
|
|
|
+ ELSIF ch = TextModels.tab THEN subOut.WriteTab
|
|
|
+ ELSIF ch >= " " THEN subOut.WriteChar(ch)
|
|
|
+ END;
|
|
|
+ INC(i); ch := msg[i];
|
|
|
+ END;
|
|
|
+ subOut.WriteLn; SubFlush
|
|
|
+ ELSE
|
|
|
+ HostDialog.ShowParamMsg(s, p0, p1, p2)
|
|
|
+ END
|
|
|
+ END ParamMsg;
|
|
|
+
|
|
|
+
|
|
|
+ PROCEDURE AttachSubLog;
|
|
|
+ VAR h: LogHook;
|
|
|
+ BEGIN
|
|
|
+ subOut.ConnectTo(TextModels.dir.New());
|
|
|
+ NEW(h);
|
|
|
+ Log.SetHook(h);
|
|
|
+ END AttachSubLog;
|
|
|
+
|
|
|
+ PROCEDURE DetachSubLog;
|
|
|
+ BEGIN
|
|
|
+ Log.SetHook(NIL);
|
|
|
+ END DetachSubLog;
|
|
|
+
|
|
|
+
|
|
|
+ PROCEDURE Init;
|
|
|
+ VAR font: Fonts.Font; p: TextRulers.Prop; x: INTEGER; i: INTEGER;
|
|
|
+ BEGIN
|
|
|
+ logAlerts := TRUE; (* logReports := FALSE; *)
|
|
|
+
|
|
|
+ text := TextModels.dir.New();
|
|
|
+ buf := TextModels.CloneOf(text);
|
|
|
+ out.ConnectTo(buf);
|
|
|
+
|
|
|
+ font := TextModels.dir.attr.font;
|
|
|
+ defruler := TextRulers.dir.New(NIL);
|
|
|
+ TextRulers.SetRight(defruler, 80*mm);
|
|
|
+ dir := TextViews.dir;
|
|
|
+ NEW(showHook)
|
|
|
+ END Init;
|
|
|
+
|
|
|
+BEGIN
|
|
|
+ Init; AttachSubLog
|
|
|
+CLOSE
|
|
|
+ DetachSubLog;
|
|
|
+END StdLog.
|