2
0

Log.txt 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. MODULE StdLog;
  2. (* THIS IS TEXT COPY OF BlackBox 1.6-rc6 Std/Mod/Log.odc *)
  3. (* DO NOT EDIT *)
  4. IMPORT
  5. Log, Fonts, Ports, Stores, Models, Views, Dialog, HostDialog, StdDialog,
  6. TextModels, TextMappers, TextRulers, TextViews, TextControllers;
  7. CONST
  8. (** IntForm base **)
  9. charCode* = TextMappers.charCode; decimal* = TextMappers.decimal; hexadecimal* = TextMappers.hexadecimal;
  10. (** IntForm showBase **)
  11. hideBase* = TextMappers.hideBase; showBase* = TextMappers.showBase;
  12. mm = Ports.mm;
  13. TYPE
  14. ShowHook = POINTER TO RECORD (Dialog.ShowHook) END;
  15. LogHook = POINTER TO RECORD (Log.Hook) END;
  16. VAR
  17. logAlerts: BOOLEAN;
  18. text-, buf-: TextModels.Model;
  19. defruler-: TextRulers.Ruler;
  20. dir-: TextViews.Directory;
  21. out, subOut: TextMappers.Formatter;
  22. showHook: ShowHook;
  23. PROCEDURE Flush;
  24. BEGIN
  25. text.Append(buf); Views.RestoreDomain(text.Domain())
  26. END Flush;
  27. PROCEDURE Char* (ch: CHAR);
  28. BEGIN
  29. out.WriteChar(ch); Flush
  30. END Char;
  31. PROCEDURE Int* (i: LONGINT);
  32. BEGIN
  33. out.WriteChar(" "); out.WriteInt(i); Flush
  34. END Int;
  35. PROCEDURE Real* (x: REAL);
  36. BEGIN
  37. out.WriteChar(" "); out.WriteReal(x); Flush
  38. END Real;
  39. PROCEDURE String* (IN str: ARRAY OF CHAR);
  40. BEGIN
  41. out.WriteString(str); Flush
  42. END String;
  43. PROCEDURE Bool* (x: BOOLEAN);
  44. BEGIN
  45. out.WriteChar(" "); out.WriteBool(x); Flush
  46. END Bool;
  47. PROCEDURE Set* (x: SET);
  48. BEGIN
  49. out.WriteChar(" "); out.WriteSet(x); Flush
  50. END Set;
  51. PROCEDURE IntForm* (x: LONGINT; base, minWidth: INTEGER; fillCh: CHAR; showBase: BOOLEAN);
  52. BEGIN
  53. out.WriteIntForm(x, base, minWidth, fillCh, showBase); Flush
  54. END IntForm;
  55. PROCEDURE RealForm* (x: REAL; precision, minW, expW: INTEGER; fillCh: CHAR);
  56. BEGIN
  57. out.WriteRealForm(x, precision, minW, expW, fillCh); Flush
  58. END RealForm;
  59. PROCEDURE Tab*;
  60. BEGIN
  61. out.WriteTab; Flush
  62. END Tab;
  63. PROCEDURE Ln*;
  64. BEGIN
  65. out.WriteLn; Flush;
  66. TextViews.ShowRange(text, text.Length(), text.Length(), TextViews.any)
  67. END Ln;
  68. PROCEDURE Para*;
  69. BEGIN
  70. out.WritePara; Flush;
  71. TextViews.ShowRange(text, text.Length(), text.Length(), TextViews.any)
  72. END Para;
  73. PROCEDURE View* (v: Views.View);
  74. BEGIN
  75. out.WriteView(v); Flush
  76. END View;
  77. PROCEDURE ViewForm* (v: Views.View; w, h: INTEGER);
  78. BEGIN
  79. out.WriteViewForm(v, w, h); Flush
  80. END ViewForm;
  81. PROCEDURE ParamMsg* (IN msg, p0, p1, p2: ARRAY OF CHAR);
  82. BEGIN
  83. out.WriteParamMsg(msg, p0, p1, p2); Flush
  84. END ParamMsg;
  85. PROCEDURE Msg* (IN msg: ARRAY OF CHAR);
  86. BEGIN
  87. out.WriteMsg(msg); Flush
  88. END Msg;
  89. PROCEDURE^ Open*;
  90. PROCEDURE (hook: ShowHook) ShowParamMsg (IN s, p0, p1, p2: ARRAY OF CHAR);
  91. BEGIN
  92. IF Dialog.showsStatus THEN
  93. Dialog.ShowParamStatus(s, p0, p1, p2);
  94. IF logAlerts THEN
  95. ParamMsg(s, p0, p1, p2); Ln
  96. END
  97. ELSE
  98. IF logAlerts THEN
  99. Open;
  100. ParamMsg(s, p0, p1, p2); Ln
  101. ELSE
  102. HostDialog.ShowParamMsg(s, p0, p1, p2)
  103. END
  104. END
  105. END ShowParamMsg;
  106. PROCEDURE (hook: ShowHook) ShowParamStatus (IN s, p0, p1, p2: ARRAY OF CHAR);
  107. BEGIN
  108. HostDialog.ShowParamStatus(s, p0, p1, p2)
  109. END ShowParamStatus;
  110. PROCEDURE NewView* (): TextViews.View;
  111. VAR v: TextViews.View;
  112. BEGIN
  113. Flush;
  114. Dialog.SetShowHook(showHook); (* attach alert dialogs *)
  115. v := dir.New(text);
  116. v.SetDefaults(TextRulers.CopyOf(defruler, Views.deep), dir.defAttr);
  117. RETURN v
  118. END NewView;
  119. PROCEDURE New*;
  120. BEGIN
  121. Views.Deposit(NewView())
  122. END New;
  123. PROCEDURE SetDefaultRuler* (ruler: TextRulers.Ruler);
  124. BEGIN
  125. defruler := ruler
  126. END SetDefaultRuler;
  127. PROCEDURE SetDir* (d: TextViews.Directory);
  128. BEGIN
  129. ASSERT(d # NIL, 20); dir := d
  130. END SetDir;
  131. PROCEDURE Open*;
  132. VAR v: Views.View; pos: INTEGER;
  133. BEGIN
  134. v := NewView();
  135. StdDialog.Open(v, "#Dev:Log", NIL, "", NIL, FALSE, TRUE, FALSE, FALSE, TRUE);
  136. Views.RestoreDomain(text.Domain());
  137. pos := text.Length();
  138. TextViews.ShowRange(text, pos, pos, TextViews.any);
  139. TextControllers.SetCaret(text, pos)
  140. END Open;
  141. PROCEDURE Clear*;
  142. BEGIN
  143. Models.BeginModification(Models.notUndoable, text);
  144. text.Delete(0, text.Length());
  145. buf.Delete(0, buf.Length());
  146. Models.EndModification(Models.notUndoable, text)
  147. END Clear;
  148. (* Sub support *)
  149. PROCEDURE* Guard (o: ANYPTR): BOOLEAN;
  150. BEGIN
  151. RETURN
  152. (o # NIL) &
  153. ~( (o IS TextModels.Model) & (o = text)
  154. OR (o IS Stores.Domain) & (o = text.Domain())
  155. OR (o IS TextViews.View) & (o(TextViews.View).ThisModel() = text)
  156. )
  157. END Guard;
  158. PROCEDURE* ClearBuf;
  159. VAR subBuf: TextModels.Model;
  160. BEGIN
  161. subBuf := subOut.rider.Base(); subBuf.Delete(0, subBuf.Length())
  162. END ClearBuf;
  163. PROCEDURE* FlushBuf;
  164. VAR buf: TextModels.Model;
  165. BEGIN
  166. buf := subOut.rider.Base();
  167. IF buf.Length() > 0 THEN
  168. IF ~Log.synch THEN Open() END;
  169. text.Append(buf)
  170. END
  171. END FlushBuf;
  172. PROCEDURE* SubFlush;
  173. BEGIN
  174. IF Log.synch THEN
  175. FlushBuf;
  176. IF Log.force THEN Views.RestoreDomain(text.Domain()) END
  177. END;
  178. END SubFlush;
  179. PROCEDURE (log: LogHook) Guard* (o: ANYPTR): BOOLEAN;
  180. BEGIN RETURN Guard(o)
  181. END Guard;
  182. PROCEDURE (log: LogHook) ClearBuf*;
  183. BEGIN ClearBuf
  184. END ClearBuf;
  185. PROCEDURE (log: LogHook) FlushBuf*;
  186. BEGIN FlushBuf
  187. END FlushBuf;
  188. PROCEDURE (log: LogHook) Beep*;
  189. BEGIN Dialog.Beep
  190. END Beep;
  191. PROCEDURE (log: LogHook) Char* (ch: CHAR);
  192. BEGIN
  193. subOut.WriteChar(ch); SubFlush
  194. END Char;
  195. PROCEDURE (log: LogHook) Int* (n: INTEGER);
  196. BEGIN
  197. subOut.WriteChar(" "); subOut.WriteInt(n); SubFlush
  198. END Int;
  199. PROCEDURE (log: LogHook) Real* (x: REAL);
  200. BEGIN
  201. subOut.WriteChar(" "); subOut.WriteReal(x); SubFlush
  202. END Real;
  203. PROCEDURE (log: LogHook) String* (IN str: ARRAY OF CHAR);
  204. BEGIN
  205. subOut.WriteString(str); SubFlush
  206. END String;
  207. PROCEDURE (log: LogHook) Bool* (x: BOOLEAN);
  208. BEGIN
  209. subOut.WriteChar(" "); subOut.WriteBool(x); SubFlush
  210. END Bool;
  211. PROCEDURE (log: LogHook) Set* (x: SET);
  212. BEGIN
  213. subOut.WriteChar(" "); subOut.WriteSet(x); SubFlush
  214. END Set;
  215. PROCEDURE (log: LogHook) IntForm* (x: INTEGER; base, minWidth: INTEGER; fillCh: CHAR; showBase: BOOLEAN);
  216. BEGIN
  217. subOut.WriteIntForm(x, base, minWidth, fillCh, showBase); SubFlush
  218. END IntForm;
  219. PROCEDURE (log: LogHook) RealForm* (x: REAL; precision, minW, expW: INTEGER; fillCh: CHAR);
  220. BEGIN
  221. subOut.WriteRealForm(x, precision, minW, expW, fillCh); SubFlush
  222. END RealForm;
  223. PROCEDURE (log: LogHook) Tab*;
  224. BEGIN
  225. subOut.WriteTab; SubFlush
  226. END Tab;
  227. PROCEDURE (log: LogHook) Ln*;
  228. BEGIN
  229. subOut.WriteLn; SubFlush;
  230. IF Log.synch THEN Views.RestoreDomain(text.Domain()) END
  231. END Ln;
  232. PROCEDURE (log: LogHook) Para*;
  233. BEGIN
  234. subOut.WritePara; SubFlush;
  235. IF Log.synch THEN Views.RestoreDomain(text.Domain()) END
  236. END Para;
  237. PROCEDURE (log: LogHook) View* (v: ANYPTR);
  238. BEGIN
  239. IF (v # NIL) & (v IS Views.View) THEN
  240. subOut.WriteView(v(Views.View)); SubFlush
  241. END
  242. END View;
  243. PROCEDURE (log: LogHook) ViewForm* (v: ANYPTR; w, h: INTEGER);
  244. BEGIN
  245. ASSERT(v # NIL, 20);
  246. IF (v # NIL) & (v IS Views.View) THEN
  247. subOut.WriteViewForm(v(Views.View), w, h); SubFlush
  248. END
  249. END ViewForm;
  250. PROCEDURE (log: LogHook) ParamMsg* (IN s, p0, p1, p2: ARRAY OF CHAR);
  251. VAR msg: ARRAY 256 OF CHAR; i: INTEGER; ch: CHAR;
  252. BEGIN
  253. IF logAlerts THEN
  254. IF Log.synch THEN Open END;
  255. Dialog.MapParamString(s, p0, p1, p2, msg);
  256. i := 0; ch := msg[0];
  257. WHILE ch # 0X DO
  258. IF ch = TextModels.line THEN subOut.WriteLn
  259. ELSIF ch = TextModels.para THEN subOut.WritePara
  260. ELSIF ch = TextModels.tab THEN subOut.WriteTab
  261. ELSIF ch >= " " THEN subOut.WriteChar(ch)
  262. END;
  263. INC(i); ch := msg[i];
  264. END;
  265. subOut.WriteLn; SubFlush
  266. ELSE
  267. HostDialog.ShowParamMsg(s, p0, p1, p2)
  268. END
  269. END ParamMsg;
  270. PROCEDURE AttachSubLog;
  271. VAR h: LogHook;
  272. BEGIN
  273. subOut.ConnectTo(TextModels.dir.New());
  274. NEW(h);
  275. Log.SetHook(h);
  276. END AttachSubLog;
  277. PROCEDURE DetachSubLog;
  278. BEGIN
  279. Log.SetHook(NIL);
  280. END DetachSubLog;
  281. PROCEDURE Init;
  282. VAR font: Fonts.Font; p: TextRulers.Prop; x: INTEGER; i: INTEGER;
  283. BEGIN
  284. logAlerts := TRUE; (* logReports := FALSE; *)
  285. text := TextModels.dir.New();
  286. buf := TextModels.CloneOf(text);
  287. out.ConnectTo(buf);
  288. font := TextModels.dir.attr.font;
  289. defruler := TextRulers.dir.New(NIL);
  290. TextRulers.SetRight(defruler, 80*mm);
  291. dir := TextViews.dir;
  292. NEW(showHook)
  293. END Init;
  294. BEGIN
  295. Init; AttachSubLog
  296. CLOSE
  297. DetachSubLog;
  298. END StdLog.