simplified some modules by adding others.

This commit is contained in:
Norayr Chilingarian 2020-06-09 20:17:52 +04:00
parent dd6093e056
commit dff47dc004
4 changed files with 159 additions and 2 deletions

View file

@ -32,6 +32,8 @@ all:
../src/vpkStorage.Mod \
../src/vpkSyncer.Mod \
../src/vpkRetriever.Mod \
../src/vpkdepTree.Mod \
../src/vpkDot.Mod \
../src/vpkResolver.Mod \
../src/vpkInstaller.Mod \
../src/vipack.Mod -m

46
src/vpkDot.Mod Normal file
View file

@ -0,0 +1,46 @@
MODULE vpkDot;
IMPORT Strings, vpkdepTree, StringList;
CONST
first = "digraph dependencies {";
last = "}";
arrow = " -> ";
tab = " ";
PROCEDURE tree2dot*(VAR tree: vpkdepTree.TdepTree): StringList.TStringList;
VAR
dep : vpkdepTree.Tdep;
i, j : LONGINT;
lst : StringList.TStringList;
line: ARRAY 64 OF CHAR;
BEGIN
lst := StringList.Create();
line:= first;
lst.AppendString(lst, line);
i := 0;
REPEAT
dep := tree.Get(tree, i);
IF dep # NIL THEN
IF dep.deps # NIL THEN
j := 0;
REPEAT
IF dep.deps[j]^.name # NIL THEN
COPY("", line);
Strings.Append(tab, line);
Strings.Append(dep.name^, line);
Strings.Append(arrow, line);
Strings.Append(dep.deps[j]^.name^, line);
lst.AppendString(lst, line);
END;
INC(j)
UNTIL j = (LEN(dep.deps^) -1 );
END
END;
INC(i)
UNTIL i = tree.Count ;
line := last;
lst.AppendString(lst, line);
RETURN lst;
END tree2dot;
END vpkDot.

View file

@ -1,9 +1,13 @@
MODULE vpkInstaller;
IMPORT StringList, vpkResolver;
IMPORT StringList, vpkResolver, vpkdepTree, vpkDot;
PROCEDURE install*(VAR unit: ARRAY OF CHAR);
VAR
tree: vpkdepTree.TdepTree;
lst: StringList.TStringList;
BEGIN
vpkResolver.resolve(unit);
tree := vpkResolver.resolve(unit);
lst := vpkDot.tree2dot(tree);
END install;

105
src/vpkdepTree.Mod Normal file
View file

@ -0,0 +1,105 @@
MODULE vpkdepTree;
IMPORT Out, strutils, StringList;
TYPE
pstring = strutils.pstring;
pstrings = strutils.pstrings;
Tdep* = POINTER TO TdepDesc;
Tdeps* = POINTER TO ARRAY OF Tdep;
TdepTree* = POINTER TO TdepTreeDesc;
TdepTreeDesc* = RECORD
First- : Tdep;
Last- : Tdep;
Create* : PROCEDURE () : TdepTree;
Free* : PROCEDURE (l : TdepTree);
Clear* : PROCEDURE (l : TdepTree);
Add* : PROCEDURE (l : TdepTree; s : Tdep);
Get* : PROCEDURE (l : TdepTree; i : LONGINT): Tdep;
Empty* : PROCEDURE (l : TdepTree) : BOOLEAN;
Count* : LONGINT;
END;
TdepDesc* = RECORD
prev-, next-: Tdep;
name* : pstring;
deps* : Tdeps;
END;
PROCEDURE list(VAR s : StringList.TStringList);
VAR e : StringList.Node;
i : INTEGER;
BEGIN
NEW(e);
i := 0;
REPEAT
e := s.Get(s, i);
IF e # NIL THEN Out.String (e.obj(StringList.TString).str^); Out.Ln END;
(*Out.String (e.string); Out.Ln;*)
INC(i);
UNTIL i = s.Count - 1;
END list;
PROCEDURE Free*(l : TdepTree);
BEGIN
END Free;
PROCEDURE Clear*(l : TdepTree);
BEGIN
l.First := NIL;
l.Count := 0;
END Clear;
PROCEDURE Empty* (l : TdepTree) : BOOLEAN;
BEGIN
RETURN l.First = NIL
END Empty;
PROCEDURE Add* (l : TdepTree; d: Tdep);
BEGIN
IF l.First = NIL THEN
l.First := d;
ELSE
l.Last.next := d;
END;
l.Last := d;
INC(l.Count);
END Add;
PROCEDURE Get*(l: TdepTree; inx: LONGINT): Tdep;
VAR
i: LONGINT;
d: Tdep;
BEGIN
NEW(d); d := NIL;
i := 0;
IF (inx < l.Count) & (inx >= 0) THEN
i := 0;
d := l.First;
WHILE i # inx DO
IF d # NIL THEN d := d.next END;
INC(i);
END;
END;
RETURN d;
END Get;
PROCEDURE Create* () : TdepTree;
VAR l : TdepTree;
BEGIN
NEW(l);
l.First := NIL;
l.Last := NIL;
l.Count := 0;
l.Add := Add;
l.Get := Get;
l.Clear := Clear;
l.Free := Free;
l.Empty := Empty;
RETURN(l);
END Create;
END vpkdepTree.