DEADSOFTWARE

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