DEADSOFTWARE

1d1c557e20b8fd6387a90825e179bddbe8f9a4ec
[bbcp.git] / Trurl-based / System / Mod / Converters.txt
1 MODULE Converters;
3 (* THIS IS TEXT COPY OF BlackBox 1.6-rc6 System/Mod/Converters.odc *)
4 (* DO NOT EDIT *)
6 IMPORT Meta, Files, Stores, Dialog;
8 CONST
9 (* hints *)
10 importAll* = 0; (* can import all file types *)
11 canceled = 8;
13 TYPE
14 Importer* = PROCEDURE (f: Files.File; OUT s: Stores.Store);
15 Exporter* = PROCEDURE (s: Stores.Store; f: Files.File);
16 Converter* = POINTER TO RECORD
17 next-: Converter;
18 imp-, exp-: Dialog.String;
19 storeType-: Stores.TypeName;
20 fileType-: Files.Type;
21 opts-: SET
22 END;
24 ImpVal = RECORD (Meta.Value) p: Importer END;
25 ExpVal = RECORD (Meta.Value) p: Exporter END;
27 VAR
28 list-: Converter;
29 doc: Converter;
31 PROCEDURE GetCommand (name: Dialog.String; VAR val: Meta.Value; VAR ok: BOOLEAN);
32 VAR i: Meta.Item;
33 BEGIN
34 Meta.LookupPath(name, i);
35 IF (i.obj = Meta.procObj) OR (i.obj = Meta.varObj) & (i.typ = Meta.procTyp) THEN
36 i.GetVal(val, ok)
37 ELSE ok := FALSE
38 END
39 END GetCommand;
42 PROCEDURE Register* (imp, exp: Dialog.String; storeType: Stores.TypeName; fileType: Files.Type; opts: SET);
43 VAR e, f: Converter;
44 BEGIN
45 ASSERT((imp # "") OR (exp # ""), 20); ASSERT(fileType # "", 21);
46 NEW(e); e.next := NIL;
47 e.imp := imp; e.exp := exp; e.fileType := fileType; e.storeType := storeType; e.opts := opts;
48 IF (storeType = "") & (doc = NIL) THEN doc := e END;
49 IF list = NIL THEN list := e
50 ELSE f := list;
51 WHILE f.next # NIL DO f := f.next END;
52 f.next := e
53 END
54 END Register;
57 PROCEDURE Import* (loc: Files.Locator; name: Files.Name; VAR conv: Converter; OUT s: Stores.Store);
58 VAR file: Files.File; val: ImpVal; ok: BOOLEAN;
59 BEGIN
60 ASSERT(loc # NIL, 20); ASSERT(name # "", 21);
61 file := Files.dir.Old(loc, name, Files.shared); s := NIL;
62 IF file # NIL THEN
63 IF conv = NIL THEN
64 conv := list;
65 WHILE (conv # NIL) & ((conv.fileType # file.type) OR (conv.imp = "")) DO conv := conv.next END;
66 IF conv = NIL THEN
67 conv := list; WHILE (conv # NIL) & ~(importAll IN conv.opts) DO conv := conv.next END
68 END
69 ELSE ASSERT(conv.imp # "", 22)
70 END;
71 IF conv # NIL THEN
72 GetCommand(conv.imp, val, ok);
73 IF ok THEN val.p(file, s)
74 ELSE Dialog.ShowMsg("#System:ConverterFailed")
75 END
76 ELSE Dialog.ShowMsg("#System:NoConverterFound")
77 END
78 END
79 END Import;
81 PROCEDURE Export* (loc: Files.Locator; name: Files.Name; conv: Converter; s: Stores.Store);
82 VAR res: INTEGER; file: Files.File; val: ExpVal; ok: BOOLEAN;
83 BEGIN
84 ASSERT(s # NIL, 20); ASSERT(~(s IS Stores.Alien), 21);
85 ASSERT(loc # NIL, 22); ASSERT(name # "", 23);
86 file := Files.dir.New(loc, Files.ask); (* fileLoc := loc; *)
87 IF file # NIL THEN
88 IF conv = NIL THEN
89 conv := doc
90 ELSE ASSERT(conv.exp # "", 24)
91 END;
92 GetCommand(conv.exp, val, ok);
93 IF ok THEN
94 val.p(s, file);
95 IF loc.res # canceled THEN
96 file.Register(name, conv.fileType, Files.ask, res); loc.res := res
97 END
98 ELSE Dialog.ShowMsg("#System:ConverterFailed"); loc.res := canceled
99 END
100 END
101 END Export;
103 BEGIN
104 list := NIL
105 END Converters.