瀏覽代碼

Use original StdLog instead of my temporary implementation

Alexander Shiryaev 12 年之前
父節點
當前提交
8b52e237d4
共有 7 個文件被更改,包括 408 次插入135 次删除
  1. 23 1
      BlackBox/Cons/Mod/Interp.txt
  2. 1 1
      BlackBox/Init-Interp.txt
  3. 373 0
      BlackBox/Std/Mod/Log.txt
  4. 0 127
      BlackBox/StdLog.txt
  5. 5 3
      BlackBox/build
  6. 3 3
      BlackBox/switch-os
  7. 3 0
      TODO

+ 23 - 1
BlackBox/Cons/Mod/Interp.txt

@@ -7,7 +7,26 @@ MODULE ConsInterp;
 	IMPORT
 		Console,
 		Strings, Dialog,
-		DevCommanders, TextModels;
+		DevCommanders, TextModels,
+		StdLog;
+
+	VAR
+		textR: TextModels.Reader;
+
+	PROCEDURE ShowStdLog;
+		VAR c: CHAR;
+	BEGIN
+		StdLog.text.Append(StdLog.buf);
+
+		textR.SetPos(0);
+		textR.ReadChar(c);
+		WHILE ~textR.eot DO
+			IF c = 0DX THEN c := 0AX END;
+			Console.WriteChar(c);
+			textR.ReadChar(c)
+		END;
+		StdLog.text.Delete(0, StdLog.text.Length())
+	END ShowStdLog;
 
 	PROCEDURE Call1 (IN s: ARRAY OF CHAR; i: INTEGER): BOOLEAN;
 		VAR j: INTEGER;
@@ -30,6 +49,7 @@ MODULE ConsInterp;
 		END;
 		Dialog.Call(s, " ", res);
 		DevCommanders.par := NIL;
+		ShowStdLog;
 	RETURN res = 0
 	END Call1;
 
@@ -100,4 +120,6 @@ MODULE ConsInterp;
 		END
 	END Run;
 
+BEGIN
+	textR := StdLog.text.NewReader(NIL)
 END ConsInterp.

+ 1 - 1
BlackBox/Init-Interp.txt

@@ -7,9 +7,9 @@ MODULE Init;
 		HostWindows (* Windows.SetHook *),
 		HostDates (* Dates.SetHook *),
 		HostDialog (* Dialog.SetShowHook *),
-		StdLog,
 		StdInterpreter, (* Dialog.SetCallHook *)
 		StdDialog (* Views.SetViewHook *),
+		(* StdLog, *)
 
 		Converters (* .odc *),
 		Dialog;

+ 373 - 0
BlackBox/Std/Mod/Log.txt

@@ -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.

+ 0 - 127
BlackBox/StdLog.txt

@@ -1,127 +0,0 @@
-MODULE StdLog;
-
-	(* for Dev *)
-
-	IMPORT Console, Strings, TextModels, TextMappers;
-
-	VAR
-		text-, buf-: TextModels.Model;
-		out: TextMappers.Formatter;
-		textR: TextModels.Reader;
-
-	PROCEDURE Flush;
-		VAR c: CHAR;
-	BEGIN
-		text.Append(buf);
-
-		textR.SetPos(0);
-		textR.ReadChar(c);
-		WHILE ~textR.eot DO
-			IF c = 0DX THEN c := 0AX END;
-			Console.WriteChar(c);
-			textR.ReadChar(c)
-		END;
-		text.Delete(0, text.Length())
-	END Flush;
-
-	PROCEDURE Char* (c: CHAR);
-	BEGIN
-		out.WriteChar(c); 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*;
-	BEGIN
-	END Open;
-
-	PROCEDURE Clear*;
-	BEGIN
-		text.Delete(0, text.Length());
-		buf.Delete(0, buf.Length());
-	END Clear;
-
-	PROCEDURE Init;
-	BEGIN
-		text := TextModels.dir.New();
-		textR := text.NewReader(NIL);
-		buf := TextModels.CloneOf(text);
-		out.ConnectTo(buf)
-	END Init;
-
-BEGIN
-	Init
-END StdLog.

+ 5 - 3
BlackBox/build

@@ -68,8 +68,11 @@ LindevCompiler.Compile('Std/Mod', 'Links.txt')
 LindevCompiler.Compile('Std/Mod', 'Loader.txt')
 LindevCompiler.Compile('Lin/Mod', 'Kernel_so_init.txt')
 
-# LindevCompiler.Compile('Std/Mod', 'Log.txt')
-LindevCompiler.Compile('', 'StdLog.txt')
+# before StdLog
+LindevCompiler.Compile('', 'HostDialog.txt')
+
+LindevCompiler.Compile('Std/Mod', 'Log.txt')
+# LindevCompiler.Compile('', 'StdLog.txt')
 # LindevCompiler.Compile('Std/Mod', 'Out.txt')
 
 LindevCompiler.Compile('Dev/Mod', 'Markers.txt')
@@ -93,7 +96,6 @@ LindevCompiler.Compile('Std/Mod', 'Interpreter.txt')
 ### BlackBox
 
 LindevCompiler.Compile('', 'HostFonts.txt')
-LindevCompiler.Compile('', 'HostDialog.txt')
 LindevCompiler.Compile('', 'HostWindows.txt')
 # HostDates:
 LindevCompiler.Compile('Lin/Mod', 'Dates.txt')

+ 3 - 3
BlackBox/switch-os

@@ -18,9 +18,9 @@ obsd() {
 	ln -s OpenBSD/Host
 	ln -s OpenBSD/libBB.so
 	ln -s OpenBSD/libBB0.so
-	cp OpenBSD/BlackBox .
-	cp OpenBSD/lindev .
-	cp OpenBSD/libdlobsdwrap.so .
+	ln -s OpenBSD/BlackBox
+	ln -s OpenBSD/lindev
+	ln -s OpenBSD/libdlobsdwrap.so
 }
 
 lin() {

+ 3 - 0
TODO

@@ -3,6 +3,9 @@ By priority:
 		interface similar to DevCompiler
 		txt files Converter
 
+	ConsLog:
+		Log.hook instead of StdLog (load after StdLog)
+
 	localization:
 		Kernel.cmdLine:
 			decode (encoding = current locale encoding)