X-Git-Url: https://deadsoftware.ru/gitweb?p=cpc.git;a=blobdiff_plain;f=src%2Fgeneric%2FDsw%2FMod%2FMakeMain.cp;h=ad0ead7eb2d123284edf9388fa1e50b62c15026d;hp=b88795d846777093012fcf5ba61934780c18ff28;hb=HEAD;hpb=b97dcad79a88aa341f22ffce94a4b5c72ed857ea diff --git a/src/generic/Dsw/Mod/MakeMain.cp b/src/generic/Dsw/Mod/MakeMain.cp index b88795d..ad0ead7 100644 --- a/src/generic/Dsw/Mod/MakeMain.cp +++ b/src/generic/Dsw/Mod/MakeMain.cp @@ -123,6 +123,11 @@ MODULE DswMakeMain; 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 @@ -253,11 +258,13 @@ MODULE DswMakeMain; 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); @@ -265,13 +272,14 @@ MODULE DswMakeMain; 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) @@ -282,7 +290,9 @@ MODULE DswMakeMain; 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 --------- *) @@ -422,33 +432,37 @@ MODULE DswMakeMain; 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 @@ -459,17 +473,18 @@ MODULE DswMakeMain; 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 @@ -532,7 +547,7 @@ MODULE DswMakeMain; 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;