index b88795d846777093012fcf5ba61934780c18ff28..ad0ead7eb2d123284edf9388fa1e50b62c15026d 100644 (file)
END
END Define;
+ PROCEDURE DefineNew (IN n: ARRAY OF CHAR);
+ BEGIN
+ Define(n, FALSE);
+ END DefineNew;
+
PROCEDURE AddModule (IN n: ARRAY OF CHAR; selectors: Selector; dir: DevCPM.Directory);
VAR i, res: INTEGER; m: Module;
BEGIN
END
END ParseArgs;
- PROCEDURE ReadDefines;
- VAR loc: Files.Locator; name: Files.Name; m: DswDocuments.Model; r: DswDocuments.Reader; i, res: INTEGER;
+ PROCEDURE ReadLines (loc: Files.Locator; IN name: Files.Name; p: PROCEDURE (IN s: ARRAY OF CHAR));
+ VAR s: Name; m: DswDocuments.Model; r: DswDocuments.Reader; i, res: INTEGER;
BEGIN
- loc := Files.dir.This(base).This(target);
- DswDocuments.Open(loc, "defines", m, res);
+ ASSERT(loc # NIL, 20);
+ ASSERT(name # "", 21);
+ ASSERT(p # NIL, 22);
+ DswDocuments.Open(loc, name, m, res);
IF res = 0 THEN
r := m.NewReader(NIL);
r.SetPos(0);
WHILE ~r.eot DO
i := 0;
WHILE ~r.eot & (r.char <= 20X) DO r.Read END;
- WHILE ~r.eot & (r.char > 20X) DO name[i] := r.char; r.Read; INC(i) END;
- IF i # 0 THEN name[i] := 0X; Define(name, FALSE) END
+ WHILE ~r.eot & (r.char > 20X) DO s[i] := r.char; r.Read; INC(i) END;
+ IF i # 0 THEN s[i] := 0X; p(s) END
END
END
- END ReadDefines;
+ END ReadLines;
PROCEDURE CheckParams;
+ VAR loc: Files.Locator;
BEGIN
IF (exe # NIL) & (exe^ = "") THEN
Error("specified empty file name for exe", "", "", 0)
IF base^ = "" THEN
Error("specified empty path to cpmake rules", "", "", 0)
END;
- ReadDefines
+ loc := Files.dir.This(base).This(target);
+ ReadLines(loc, "defines", DefineNew);
+ ReadLines(loc, "libs", AddLib)
END CheckParams;
(* --------- loader --------- *)
Kernel.FastCollect
END CheckModule;
- PROCEDURE MakePath (IN dir, name: Files.Name; IN type: Files.Type; OUT path: Files.Name);
+ PROCEDURE GetModText (IN base, sub, name: Files.Name; OUT path: Files.Name; OUT text: DswDocuments.Model);
+ VAR res: INTEGER; loc: Files.Locator;
BEGIN
ASSERT(name # "", 21);
- IF dir = "" THEN path := modDir + "/" + name
- ELSE path := dir + "/" + modDir + "/" + name
+ IF sub = "" THEN
+ loc := Files.dir.This(base);
+ IF base = "" THEN path := name
+ ELSE path := base + "/" + name
+ END
+ ELSE
+ loc := Files.dir.This(base).This(sub).This(modDir);
+ IF base = "" THEN path := sub + "/" + modDir + "/" + name
+ ELSE path := base + "/" + sub + "/" + modDir + "/" + name
+ END
END;
- Kernel.MakeFileName(path, type)
- END MakePath;
+ DswDocuments.Open(loc, name, text, res)
+ END GetModText;
- PROCEDURE Open (loc: Files.Locator; IN sub, name: Files.Name; OUT path: Files.Name; OUT text: DswDocuments.Model);
- VAR res: INTEGER;
+ PROCEDURE Open (IN base, sub, name: Files.Name; OUT path: Files.Name; OUT text: DswDocuments.Model);
+ VAR cp, odc: Files.Name;
BEGIN
- ASSERT(loc # NIL, 20);
- ASSERT(name # "", 21);
- (* !!! use Kernel.MakeFileName instead ".ext" concat !!! *)
- MakePath(sub, name, "cp", path);
- DswDocuments.Open(loc, name + ".cp", text, res);
+ ASSERT(name # "", 20);
+ Files.dir.GetFileName(name, "cp", cp); (* !!! *)
+ GetModText(base, sub, cp, path, text);
IF text = NIL THEN
- MakePath(sub, name, "odc", path);
- DswDocuments.Open(loc, name + ".odc", text, res);
+ Files.dir.GetFileName(name, "odc", odc); (* !!! *)
+ GetModText(base, sub, odc, path, text);
IF (text = NIL) & (sub = "") THEN
- MakePath(sysDir, name, "cp", path);
- loc := Files.dir.This(sysDir).This(modDir);
- DswDocuments.Open(loc, name + ".cp", text, res);
+ GetModText(base, sysDir, cp, path, text);
IF text = NIL THEN
- MakePath(sysDir, name, "odc", path);
- DswDocuments.Open(loc, name + ".odc", text, res);
+ GetModText(base, sysDir, odc, path, text);
IF text = NIL THEN
path := ""
END
PROCEDURE GetSource (IN modName: ARRAY OF CHAR; list: DevCPM.Directory; OUT path: Files.Name; OUT s: String);
VAR
- sub, name: Files.Name; loc: Files.Locator; base: DevCPM.Directory;
- text: DswDocuments.Model; r: DswDocuments.Reader; i, res: INTEGER;
+ sub, name: Files.Name;
+ base: DevCPM.Directory;
+ text: DswDocuments.Model;
+ r: DswDocuments.Reader;
+ i, res: INTEGER;
BEGIN
s := NIL; path := ""; base := list;
Kernel.SplitName(modName, sub, name);
- loc := Files.dir.This(sub).This(modDir);
- Open(loc, sub, name, path, text);
+ Open("", sub, name, path, text);
WHILE (text = NIL) & (base # NIL) DO
ASSERT(base.legacy, 100);
- loc := Files.dir.This(base.path).This(sub).This(modDir);
- Open(loc, sub, name, path, text);
+ Open(base.path, sub, name, path, text);
base := base.next
END;
IF text # NIL THEN
CheckModule(m, src, ok);
IF ~ok THEN INC(err) END
ELSE
- Error("unable to open module ^1", m.name$, "", 0)
+ Error("unable to open module ^0", m.name$, "", 0)
END;
INC(i)
END;