mirror of
https://github.com/vishapoberon/vipak.git
synced 2026-04-06 13:02:26 +00:00
now works!
This commit is contained in:
parent
32679a8852
commit
c5c999f596
2 changed files with 67 additions and 9 deletions
|
|
@ -29,6 +29,26 @@ BEGIN
|
||||||
RETURN res;
|
RETURN res;
|
||||||
END treeContains;
|
END treeContains;
|
||||||
|
|
||||||
|
PROCEDURE treeContainsByName(VAR d: Tdep; VAR depTree: TdepTree): BOOLEAN;
|
||||||
|
VAR
|
||||||
|
res: BOOLEAN;
|
||||||
|
i: INTEGER;
|
||||||
|
d2: Tdep;
|
||||||
|
BEGIN
|
||||||
|
res := FALSE;
|
||||||
|
i := 0;
|
||||||
|
REPEAT
|
||||||
|
d2 := depTree.Get(depTree, i);
|
||||||
|
IF d2 # NIL THEN
|
||||||
|
IF d.name^ = d2.name^ THEN res := TRUE END;
|
||||||
|
(*IF d.name^ = d2.name^ THEN res := TRUE END *)
|
||||||
|
END;
|
||||||
|
INC(i)
|
||||||
|
UNTIL res OR (i >= depTree.Count);
|
||||||
|
RETURN res;
|
||||||
|
END treeContainsByName;
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE mkDepTree(VAR d: Tdep; VAR depTree, met: TdepTree);
|
PROCEDURE mkDepTree(VAR d: Tdep; VAR depTree, met: TdepTree);
|
||||||
VAR
|
VAR
|
||||||
depStrs: StringList.TStringList;
|
depStrs: StringList.TStringList;
|
||||||
|
|
@ -38,7 +58,7 @@ VAR
|
||||||
i: INTEGER;
|
i: INTEGER;
|
||||||
rtrvRes: LONGINT;
|
rtrvRes: LONGINT;
|
||||||
BEGIN
|
BEGIN
|
||||||
met.Add(met, d);
|
vpkdepTree.Add(met, d);
|
||||||
IF d.RetrieveDeps = NIL THEN Out.String("dep retriever method not installed"); Out.Ln; HALT(1) END;
|
IF d.RetrieveDeps = NIL THEN Out.String("dep retriever method not installed"); Out.Ln; HALT(1) END;
|
||||||
rtrvRes := d.RetrieveDeps(d, depStrs);
|
rtrvRes := d.RetrieveDeps(d, depStrs);
|
||||||
IF rtrvRes = -1 THEN
|
IF rtrvRes = -1 THEN
|
||||||
|
|
@ -55,28 +75,29 @@ BEGIN
|
||||||
REPEAT
|
REPEAT
|
||||||
p := depStrs.GetString(depStrs, i);
|
p := depStrs.GetString(depStrs, i);
|
||||||
IF p # NIL THEN
|
IF p # NIL THEN
|
||||||
|
t := NIL;
|
||||||
t := met.GetByName(met, p^);
|
t := met.GetByName(met, p^);
|
||||||
IF t = NIL THEN
|
IF t = NIL THEN
|
||||||
t := vpkdepTree.CreateDep(p^);
|
t := vpkdepTree.CreateDep(p^);
|
||||||
t.InstallRetriever(t, rtvr);
|
t.InstallRetriever(t, rtvr);
|
||||||
END;
|
END;
|
||||||
deps[i] := t;
|
deps[i] := t;
|
||||||
IF ~treeContains(t, depTree) THEN
|
IF ~treeContainsByName(t, depTree) THEN
|
||||||
IF treeContains(t, met) THEN
|
IF treeContainsByName(t, met) THEN
|
||||||
Out.Ln; Out.String("curcular dependency: ");
|
Out.Ln; Out.String("curcular dependency: ");
|
||||||
Out.String(d.name^); Out.String(" requires "); Out.String(t.name^); Out.Ln;
|
Out.String(d.name^); Out.String(" requires "); Out.String(t.name^); Out.Ln;
|
||||||
Out.String("unable to continue."); Out.Ln;
|
Out.String("unable to continue."); Out.Ln;
|
||||||
HALT(60)
|
HALT(60)
|
||||||
ELSE
|
ELSE
|
||||||
mkDepTree(t, depTree, met)
|
mkDepTree(t, depTree, met);
|
||||||
END;
|
END;
|
||||||
END;
|
END;
|
||||||
END;
|
END;
|
||||||
INC(i)
|
INC(i);
|
||||||
UNTIL i = depStrs.Count - 1;
|
UNTIL i = depStrs.Count - 1;
|
||||||
d.AssignDeps(d, deps);
|
d.AssignDeps(d, deps);
|
||||||
END;
|
END;
|
||||||
depTree.Add(depTree, d);
|
vpkdepTree.AddCopy(depTree, d);
|
||||||
END mkDepTree;
|
END mkDepTree;
|
||||||
|
|
||||||
PROCEDURE resolve*(first: ARRAY OF CHAR; r: vpkdepTree.retriever): TdepTree;
|
PROCEDURE resolve*(first: ARRAY OF CHAR; r: vpkdepTree.retriever): TdepTree;
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,17 @@ BEGIN
|
||||||
UNTIL i = s.Count - 1;
|
UNTIL i = s.Count - 1;
|
||||||
END list;
|
END list;
|
||||||
|
|
||||||
|
PROCEDURE listDeps*(VAR deps: Tdeps);
|
||||||
|
VAR
|
||||||
|
l: LONGINT;
|
||||||
|
BEGIN
|
||||||
|
l := 0;
|
||||||
|
REPEAT
|
||||||
|
Out.Int(l, 0); Out.String(": "); Out.String(deps[l].name^); Out.Ln;
|
||||||
|
INC(l);
|
||||||
|
UNTIL l = LEN(deps^) - 1;
|
||||||
|
END listDeps;
|
||||||
|
|
||||||
PROCEDURE Free*(VAR l : TdepTree);
|
PROCEDURE Free*(VAR l : TdepTree);
|
||||||
BEGIN
|
BEGIN
|
||||||
l := NIL
|
l := NIL
|
||||||
|
|
@ -96,9 +107,33 @@ PROCEDURE Add* (VAR l : TdepTree; VAR d: Tdep);
|
||||||
l.Last.next := d;
|
l.Last.next := d;
|
||||||
END;
|
END;
|
||||||
l.Last := d;
|
l.Last := d;
|
||||||
|
l.Last.next := NIL;
|
||||||
INC(l.Count);
|
INC(l.Count);
|
||||||
END Add;
|
END Add;
|
||||||
|
|
||||||
|
PROCEDURE AddCopy* (VAR l : TdepTree; VAR d: Tdep);
|
||||||
|
VAR
|
||||||
|
new: Tdep;
|
||||||
|
ln: INTEGER;
|
||||||
|
BEGIN
|
||||||
|
NEW(new);
|
||||||
|
new.prev := d.prev; new.next := d.next;
|
||||||
|
ln := Strings.Length(d.name^) + 1; NEW(new.name, ln); COPY(d.name^, new.name^);
|
||||||
|
new.deps := d.deps;
|
||||||
|
new.Create := d.Create; new.AssignDeps := d.AssignDeps;
|
||||||
|
new.RetrieveDeps := d.RetrieveDeps;
|
||||||
|
new.InstallRetriever := d.InstallRetriever;
|
||||||
|
|
||||||
|
IF l.First = NIL THEN
|
||||||
|
l.First := new;
|
||||||
|
ELSE
|
||||||
|
l.Last.next := new;
|
||||||
|
END;
|
||||||
|
l.Last := new;
|
||||||
|
l.Last.next := NIL;
|
||||||
|
INC(l.Count);
|
||||||
|
END AddCopy;
|
||||||
|
|
||||||
PROCEDURE Get*(VAR l: TdepTree; inx: LONGINT): Tdep;
|
PROCEDURE Get*(VAR l: TdepTree; inx: LONGINT): Tdep;
|
||||||
VAR
|
VAR
|
||||||
i: LONGINT;
|
i: LONGINT;
|
||||||
|
|
@ -129,14 +164,16 @@ BEGIN
|
||||||
REPEAT
|
REPEAT
|
||||||
IF d # NIL THEN
|
IF d # NIL THEN
|
||||||
IF d.name^ = name THEN
|
IF d.name^ = name THEN
|
||||||
fnd := TRUE
|
fnd := TRUE;
|
||||||
|
RETURN d;
|
||||||
ELSE
|
ELSE
|
||||||
d := d.next
|
d := d.next
|
||||||
END
|
END
|
||||||
END;
|
END;
|
||||||
INC(i);
|
INC(i);
|
||||||
UNTIL fnd OR (i >= l.Count);
|
(* UNTIL fnd OR (i >= l.Count );*)
|
||||||
RETURN d;
|
UNTIL fnd OR (d = NIL);
|
||||||
|
RETURN NIL; (* in case of this UNTIL it seems safe to RETURN d *)
|
||||||
END GetByName;
|
END GetByName;
|
||||||
|
|
||||||
PROCEDURE Create* () : TdepTree;
|
PROCEDURE Create* () : TdepTree;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue