2
0

Api.txt 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. MODULE StdApi;
  2. (* THIS IS TEXT COPY OF BlackBox 1.6-rc6 Std/Mod/Api.odc *)
  3. (* DO NOT EDIT *)
  4. IMPORT
  5. Kernel, Views, Files, Dialog, Converters, Windows, Sequencers, Stores, Meta,
  6. Containers, StdDialog, Documents;
  7. (* Auxiliary procedures *)
  8. PROCEDURE CheckQualident (VAR str, mod, name: ARRAY OF CHAR);
  9. VAR i, j: INTEGER; ch: CHAR;
  10. BEGIN
  11. i := 0;
  12. REPEAT
  13. ch := str[i]; mod[i] := ch; INC(i)
  14. UNTIL (i = LEN(str)) OR (i = LEN(mod)) OR (ch < "0") OR (ch > "9") & (CAP(ch) < "A") OR (CAP(ch) > "Z");
  15. IF ch = "." THEN
  16. mod[i - 1] := 0X; j := 0;
  17. REPEAT
  18. ch := str[i]; name[j] := ch; INC(i); INC(j)
  19. UNTIL (i = LEN(str)) OR (j = LEN(name)) OR (ch < "0") OR (ch > "9") & (CAP(ch) < "A") OR (CAP(ch) > "Z");
  20. IF ch # 0X THEN mod[0] := 0X; name[0] := 0X END
  21. ELSE mod[0] := 0X; name[0] := 0X
  22. END
  23. END CheckQualident;
  24. PROCEDURE PathToSpec (VAR path: ARRAY OF CHAR; VAR loc: Files.Locator; VAR name: Files.Name);
  25. VAR i, j: INTEGER; ch: CHAR;
  26. BEGIN
  27. i := 0; j := 0; loc := Files.dir.This("");
  28. WHILE (loc.res = 0) & (i < LEN(path) - 1) & (j < LEN(name) - 1) & (path[i] # 0X) DO
  29. ch := path[i]; INC(i);
  30. IF (j > 0) & ((ch = "/") OR (ch = "\")) THEN
  31. name[j] := 0X; j := 0;
  32. IF name = "*" THEN
  33. IF Dialog.language # "" THEN loc := loc.This(Dialog.language) END
  34. ELSE loc := loc.This(name)
  35. END
  36. ELSE
  37. name[j] := ch; INC(j)
  38. END
  39. END;
  40. IF path[i] = 0X THEN name[j] := 0X
  41. ELSE loc.res := 1; name := ""
  42. END
  43. END PathToSpec;
  44. PROCEDURE ThisDialog (dialog: ARRAY OF CHAR): Views.View;
  45. VAR fname, submod, sub, mod: Files.Name; canCreate: BOOLEAN; conv: Converters.Converter;
  46. loc: Files.Locator; file: Files.File; v: Views.View; s: Stores.Store; var: Meta.Item;
  47. BEGIN
  48. ASSERT(dialog # "", 20);
  49. v := NIL; file := NIL; canCreate := FALSE;
  50. CheckQualident(dialog, submod, fname);
  51. IF submod # "" THEN (* is qualident *)
  52. Meta.LookupPath(dialog, var);
  53. IF var.obj = Meta.varObj THEN (* variable exists *)
  54. canCreate := TRUE;
  55. Kernel.SplitName(submod, sub, mod);
  56. loc := Files.dir.This(sub);
  57. IF loc # NIL THEN
  58. Kernel.MakeFileName(fname, "");
  59. loc := loc.This("Rsrc");
  60. IF loc # NIL THEN file := Files.dir.Old(loc, fname, Files.shared) END;
  61. IF (file = NIL) & (sub = "") THEN
  62. loc := Files.dir.This("System"); ASSERT(loc # NIL, 100);
  63. IF loc # NIL THEN
  64. loc := loc.This("Rsrc");
  65. IF loc # NIL THEN file := Files.dir.Old(loc, fname, Files.shared) END
  66. END
  67. END
  68. END
  69. END
  70. END;
  71. IF (file = NIL) & ~canCreate THEN (* try file name *)
  72. PathToSpec(dialog, loc, fname);
  73. IF loc.res = 0 THEN
  74. Kernel.MakeFileName(fname, "");
  75. file := Files.dir.Old(loc, fname, Files.shared)
  76. END
  77. END;
  78. IF file # NIL THEN
  79. Kernel.MakeFileName(fname, "");
  80. conv := NIL; Converters.Import(loc, fname, conv, s);
  81. IF s # NIL THEN
  82. v := s(Views.View)
  83. END
  84. ELSE Dialog.ShowParamMsg("#System:FileNotFound", dialog, "", "")
  85. END;
  86. RETURN v
  87. END ThisDialog;
  88. PROCEDURE ThisMask (param: ARRAY OF CHAR): Views.View;
  89. VAR v: Views.View; c: Containers.Controller;
  90. BEGIN
  91. v := ThisDialog(param);
  92. IF v # NIL THEN
  93. WITH v: Containers.View DO
  94. c := v.ThisController();
  95. IF c # NIL THEN
  96. c.SetOpts(c.opts - {Containers.noFocus} + {Containers.noCaret, Containers.noSelection})
  97. ELSE Dialog.ShowMsg("#System:NotEditable")
  98. END
  99. ELSE Dialog.ShowMsg("#System:ContainerExpected")
  100. END
  101. END;
  102. RETURN v
  103. END ThisMask;
  104. (* Interface procedures *)
  105. PROCEDURE CloseDialog* (OUT closedView: Views.View);
  106. CONST canClose = {Windows.neverDirty, Windows.isTool, Windows.isAux};
  107. VAR w: Windows.Window; msg: Sequencers.CloseMsg;
  108. BEGIN
  109. closedView := NIL;
  110. w := Windows.dir.First();
  111. IF w # NIL THEN
  112. IF w.sub THEN
  113. closedView := w.frame.view;
  114. Windows.dir.Close(w);
  115. ELSIF (w.flags * canClose = {}) & w.seq.Dirty() THEN
  116. Dialog.ShowMsg("#System:CannotCloseDirtyWindow")
  117. ELSE
  118. msg.sticky := FALSE; w.seq.Notify(msg);
  119. IF ~msg.sticky THEN closedView := w.frame.view; Windows.dir.Close(w) END
  120. END
  121. END
  122. END CloseDialog;
  123. PROCEDURE OpenAux* (file, title: ARRAY OF CHAR; OUT v: Views.View);
  124. VAR loc: Files.Locator; name: Files.Name; t: Views.Title;
  125. BEGIN
  126. PathToSpec(file, loc, name);
  127. IF loc.res = 0 THEN
  128. loc.res := 77; v := Views.OldView(loc, name); loc.res := 0;
  129. IF v # NIL THEN t := title$; Views.OpenAux(v, t)
  130. ELSE Dialog.ShowParamMsg("#System:FileNotFound", file, "", "")
  131. END
  132. ELSE Dialog.ShowParamMsg("#System:FileNotFound", file, "", "")
  133. END
  134. END OpenAux;
  135. PROCEDURE OpenAuxDialog* (file, title: ARRAY OF CHAR; OUT v: Views.View);
  136. VAR t0: Views.Title; done: BOOLEAN;
  137. BEGIN
  138. Dialog.MapString(title, t0);
  139. Windows.SelectByTitle(NIL, {Windows.isAux}, t0, done);
  140. IF ~done THEN
  141. v := ThisMask(file);
  142. IF v # NIL THEN
  143. StdDialog.Open(v, title, NIL, "", NIL, FALSE, TRUE, TRUE, FALSE, TRUE)
  144. END
  145. END
  146. END OpenAuxDialog;
  147. PROCEDURE OpenBrowser* (file, title: ARRAY OF CHAR; OUT v: Views.View);
  148. VAR loc: Files.Locator; name: Files.Name; t: Views.Title;
  149. c: Containers.Controller;
  150. BEGIN
  151. PathToSpec(file, loc, name);
  152. IF loc.res = 0 THEN
  153. loc.res := 77; v := Views.OldView(loc, name); loc.res := 0;
  154. IF v # NIL THEN
  155. WITH v: Containers.View DO
  156. c := v.ThisController();
  157. IF c # NIL THEN
  158. c.SetOpts(c.opts - {Containers.noFocus, Containers.noSelection} + {Containers.noCaret})
  159. END
  160. ELSE
  161. END;
  162. t := title$;
  163. StdDialog.Open(v, t, NIL, "", NIL, FALSE, TRUE, FALSE, TRUE, FALSE)
  164. ELSE Dialog.ShowParamMsg("#System:FileNotFound", file, "", "")
  165. END
  166. ELSE Dialog.ShowParamMsg("#System:FileNotFound", file, "", "")
  167. END
  168. END OpenBrowser;
  169. PROCEDURE OpenDoc* (file: ARRAY OF CHAR; OUT v: Views.View);
  170. VAR loc: Files.Locator; name: Files.Name; conv: Converters.Converter;
  171. BEGIN
  172. PathToSpec(file, loc, name);
  173. IF loc.res = 0 THEN
  174. conv := NIL; v := Views.Old(Views.dontAsk, loc, name, conv);
  175. IF loc.res = 78 THEN loc := NIL; name := "" END; (* stationery *)
  176. IF v # NIL THEN Views.Open(v, loc, name, conv)
  177. ELSE Dialog.ShowParamMsg("#System:FileNotFound", file, "", "")
  178. END
  179. ELSE Dialog.ShowParamMsg("#System:FileNotFound", file, "", "")
  180. END
  181. END OpenDoc;
  182. PROCEDURE OpenCopyOf* (file: ARRAY OF CHAR; OUT v: Views.View);
  183. VAR loc: Files.Locator; name: Files.Name; conv: Converters.Converter;
  184. BEGIN
  185. PathToSpec(file, loc, name);
  186. IF loc.res = 0 THEN
  187. conv := NIL; v := Views.Old(Views.dontAsk, loc, name, conv);
  188. IF loc.res = 78 THEN loc := NIL; name := "" END; (* stationary *)
  189. IF v # NIL THEN
  190. IF v.context # NIL THEN
  191. v := Views.CopyOf(v.context(Documents.Context).ThisDoc(), Views.deep);
  192. Stores.InitDomain(v)
  193. ELSE v := Views.CopyOf(v, Views.deep)
  194. END;
  195. Views.Open(v, NIL, "", conv)
  196. ELSE Dialog.ShowParamMsg("#System:FileNotFound", file, "", "")
  197. END
  198. ELSE Dialog.ShowParamMsg("#System:FileNotFound", file, "", "")
  199. END
  200. END OpenCopyOf;
  201. PROCEDURE OpenToolDialog* (file, title: ARRAY OF CHAR; OUT v: Views.View);
  202. VAR t0: Views.Title; done: BOOLEAN;
  203. BEGIN
  204. Dialog.MapString(title, t0);
  205. Windows.SelectByTitle(NIL, {Windows.isTool}, t0, done);
  206. IF ~done THEN
  207. v := ThisMask(file);
  208. IF v # NIL THEN
  209. StdDialog.Open(v, title, NIL, "", NIL, TRUE, FALSE, TRUE, FALSE, TRUE)
  210. END
  211. END
  212. END OpenToolDialog;
  213. END StdApi.