123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- MODULE StdApi;
- (* THIS IS TEXT COPY OF BlackBox 1.6-rc6 Std/Mod/Api.odc *)
- (* DO NOT EDIT *)
- IMPORT
- Kernel, Views, Files, Dialog, Converters, Windows, Sequencers, Stores, Meta,
- Containers, StdDialog, Documents;
- (* Auxiliary procedures *)
- PROCEDURE CheckQualident (VAR str, mod, name: ARRAY OF CHAR);
- VAR i, j: INTEGER; ch: CHAR;
- BEGIN
- i := 0;
- REPEAT
- ch := str[i]; mod[i] := ch; INC(i)
- UNTIL (i = LEN(str)) OR (i = LEN(mod)) OR (ch < "0") OR (ch > "9") & (CAP(ch) < "A") OR (CAP(ch) > "Z");
- IF ch = "." THEN
- mod[i - 1] := 0X; j := 0;
- REPEAT
- ch := str[i]; name[j] := ch; INC(i); INC(j)
- UNTIL (i = LEN(str)) OR (j = LEN(name)) OR (ch < "0") OR (ch > "9") & (CAP(ch) < "A") OR (CAP(ch) > "Z");
- IF ch # 0X THEN mod[0] := 0X; name[0] := 0X END
- ELSE mod[0] := 0X; name[0] := 0X
- END
- END CheckQualident;
-
- PROCEDURE PathToSpec (VAR path: ARRAY OF CHAR; VAR loc: Files.Locator; VAR name: Files.Name);
- VAR i, j: INTEGER; ch: CHAR;
- BEGIN
- i := 0; j := 0; loc := Files.dir.This("");
- WHILE (loc.res = 0) & (i < LEN(path) - 1) & (j < LEN(name) - 1) & (path[i] # 0X) DO
- ch := path[i]; INC(i);
- IF (j > 0) & ((ch = "/") OR (ch = "\")) THEN
- name[j] := 0X; j := 0;
- IF name = "*" THEN
- IF Dialog.language # "" THEN loc := loc.This(Dialog.language) END
- ELSE loc := loc.This(name)
- END
- ELSE
- name[j] := ch; INC(j)
- END
- END;
- IF path[i] = 0X THEN name[j] := 0X
- ELSE loc.res := 1; name := ""
- END
- END PathToSpec;
-
- PROCEDURE ThisDialog (dialog: ARRAY OF CHAR): Views.View;
- VAR fname, submod, sub, mod: Files.Name; canCreate: BOOLEAN; conv: Converters.Converter;
- loc: Files.Locator; file: Files.File; v: Views.View; s: Stores.Store; var: Meta.Item;
- BEGIN
- ASSERT(dialog # "", 20);
- v := NIL; file := NIL; canCreate := FALSE;
- CheckQualident(dialog, submod, fname);
- IF submod # "" THEN (* is qualident *)
- Meta.LookupPath(dialog, var);
- IF var.obj = Meta.varObj THEN (* variable exists *)
- canCreate := TRUE;
- Kernel.SplitName(submod, sub, mod);
- loc := Files.dir.This(sub);
- IF loc # NIL THEN
- Kernel.MakeFileName(fname, "");
- loc := loc.This("Rsrc");
- IF loc # NIL THEN file := Files.dir.Old(loc, fname, Files.shared) END;
- IF (file = NIL) & (sub = "") THEN
- loc := Files.dir.This("System"); ASSERT(loc # NIL, 100);
- IF loc # NIL THEN
- loc := loc.This("Rsrc");
- IF loc # NIL THEN file := Files.dir.Old(loc, fname, Files.shared) END
- END
- END
- END
- END
- END;
- IF (file = NIL) & ~canCreate THEN (* try file name *)
- PathToSpec(dialog, loc, fname);
- IF loc.res = 0 THEN
- Kernel.MakeFileName(fname, "");
- file := Files.dir.Old(loc, fname, Files.shared)
- END
- END;
- IF file # NIL THEN
- Kernel.MakeFileName(fname, "");
- conv := NIL; Converters.Import(loc, fname, conv, s);
- IF s # NIL THEN
- v := s(Views.View)
- END
- ELSE Dialog.ShowParamMsg("#System:FileNotFound", dialog, "", "")
- END;
- RETURN v
- END ThisDialog;
- PROCEDURE ThisMask (param: ARRAY OF CHAR): Views.View;
- VAR v: Views.View; c: Containers.Controller;
- BEGIN
- v := ThisDialog(param);
- IF v # NIL THEN
- WITH v: Containers.View DO
- c := v.ThisController();
- IF c # NIL THEN
- c.SetOpts(c.opts - {Containers.noFocus} + {Containers.noCaret, Containers.noSelection})
- ELSE Dialog.ShowMsg("#System:NotEditable")
- END
- ELSE Dialog.ShowMsg("#System:ContainerExpected")
- END
- END;
- RETURN v
- END ThisMask;
-
- (* Interface procedures *)
-
- PROCEDURE CloseDialog* (OUT closedView: Views.View);
- CONST canClose = {Windows.neverDirty, Windows.isTool, Windows.isAux};
- VAR w: Windows.Window; msg: Sequencers.CloseMsg;
- BEGIN
- closedView := NIL;
- w := Windows.dir.First();
- IF w # NIL THEN
- IF w.sub THEN
- closedView := w.frame.view;
- Windows.dir.Close(w);
- ELSIF (w.flags * canClose = {}) & w.seq.Dirty() THEN
- Dialog.ShowMsg("#System:CannotCloseDirtyWindow")
- ELSE
- msg.sticky := FALSE; w.seq.Notify(msg);
- IF ~msg.sticky THEN closedView := w.frame.view; Windows.dir.Close(w) END
- END
- END
- END CloseDialog;
-
- PROCEDURE OpenAux* (file, title: ARRAY OF CHAR; OUT v: Views.View);
- VAR loc: Files.Locator; name: Files.Name; t: Views.Title;
- BEGIN
- PathToSpec(file, loc, name);
- IF loc.res = 0 THEN
- loc.res := 77; v := Views.OldView(loc, name); loc.res := 0;
- IF v # NIL THEN t := title$; Views.OpenAux(v, t)
- ELSE Dialog.ShowParamMsg("#System:FileNotFound", file, "", "")
- END
- ELSE Dialog.ShowParamMsg("#System:FileNotFound", file, "", "")
- END
- END OpenAux;
-
- PROCEDURE OpenAuxDialog* (file, title: ARRAY OF CHAR; OUT v: Views.View);
- VAR t0: Views.Title; done: BOOLEAN;
- BEGIN
- Dialog.MapString(title, t0);
- Windows.SelectByTitle(NIL, {Windows.isAux}, t0, done);
- IF ~done THEN
- v := ThisMask(file);
- IF v # NIL THEN
- StdDialog.Open(v, title, NIL, "", NIL, FALSE, TRUE, TRUE, FALSE, TRUE)
- END
- END
- END OpenAuxDialog;
-
- PROCEDURE OpenBrowser* (file, title: ARRAY OF CHAR; OUT v: Views.View);
- VAR loc: Files.Locator; name: Files.Name; t: Views.Title;
- c: Containers.Controller;
- BEGIN
- PathToSpec(file, loc, name);
- IF loc.res = 0 THEN
- loc.res := 77; v := Views.OldView(loc, name); loc.res := 0;
- IF v # NIL THEN
- WITH v: Containers.View DO
- c := v.ThisController();
- IF c # NIL THEN
- c.SetOpts(c.opts - {Containers.noFocus, Containers.noSelection} + {Containers.noCaret})
- END
- ELSE
- END;
- t := title$;
- StdDialog.Open(v, t, NIL, "", NIL, FALSE, TRUE, FALSE, TRUE, FALSE)
- ELSE Dialog.ShowParamMsg("#System:FileNotFound", file, "", "")
- END
- ELSE Dialog.ShowParamMsg("#System:FileNotFound", file, "", "")
- END
- END OpenBrowser;
-
- PROCEDURE OpenDoc* (file: ARRAY OF CHAR; OUT v: Views.View);
- VAR loc: Files.Locator; name: Files.Name; conv: Converters.Converter;
- BEGIN
- PathToSpec(file, loc, name);
- IF loc.res = 0 THEN
- conv := NIL; v := Views.Old(Views.dontAsk, loc, name, conv);
- IF loc.res = 78 THEN loc := NIL; name := "" END; (* stationery *)
- IF v # NIL THEN Views.Open(v, loc, name, conv)
- ELSE Dialog.ShowParamMsg("#System:FileNotFound", file, "", "")
- END
- ELSE Dialog.ShowParamMsg("#System:FileNotFound", file, "", "")
- END
- END OpenDoc;
-
- PROCEDURE OpenCopyOf* (file: ARRAY OF CHAR; OUT v: Views.View);
- VAR loc: Files.Locator; name: Files.Name; conv: Converters.Converter;
- BEGIN
- PathToSpec(file, loc, name);
- IF loc.res = 0 THEN
- conv := NIL; v := Views.Old(Views.dontAsk, loc, name, conv);
- IF loc.res = 78 THEN loc := NIL; name := "" END; (* stationary *)
- IF v # NIL THEN
- IF v.context # NIL THEN
- v := Views.CopyOf(v.context(Documents.Context).ThisDoc(), Views.deep);
- Stores.InitDomain(v)
- ELSE v := Views.CopyOf(v, Views.deep)
- END;
- Views.Open(v, NIL, "", conv)
- ELSE Dialog.ShowParamMsg("#System:FileNotFound", file, "", "")
- END
- ELSE Dialog.ShowParamMsg("#System:FileNotFound", file, "", "")
- END
- END OpenCopyOf;
-
- PROCEDURE OpenToolDialog* (file, title: ARRAY OF CHAR; OUT v: Views.View);
- VAR t0: Views.Title; done: BOOLEAN;
- BEGIN
- Dialog.MapString(title, t0);
- Windows.SelectByTitle(NIL, {Windows.isTool}, t0, done);
- IF ~done THEN
- v := ThisMask(file);
- IF v # NIL THEN
- StdDialog.Open(v, title, NIL, "", NIL, TRUE, FALSE, TRUE, FALSE, TRUE)
- END
- END
- END OpenToolDialog;
-
- END StdApi.
|