vpkTools module, using fields of Tdep insteod of passing vars around,

vpkSyncer.fetch doesn't get anymore prefix by reference.
This commit is contained in:
Norayr Chilingarian 2024-02-20 22:03:29 +04:00
parent 1a4b4bd988
commit c7105d95fa
9 changed files with 159 additions and 106 deletions

View file

@ -18,6 +18,7 @@ endif
all: get_deps build_deps buildThis all: get_deps build_deps buildThis
get_deps: get_deps:
@echo "getting deps"
@for i in $(DEPEND); do \ @for i in $(DEPEND); do \
if [ -d "$(DPS)/$${i}" ]; then \ if [ -d "$(DPS)/$${i}" ]; then \
cd "$(DPS)/$${i}"; \ cd "$(DPS)/$${i}"; \
@ -31,8 +32,10 @@ get_deps:
cd - ; \ cd - ; \
fi; \ fi; \
done done
@echo "________________________________________"
build_deps: build_deps:
@echo "building deps"
mkdir -p $(BLD) mkdir -p $(BLD)
cd $(BLD); \ cd $(BLD); \
for i in $(DEPEND); do \ for i in $(DEPEND); do \
@ -42,8 +45,11 @@ build_deps:
make -f "$(DPS)/$${i}/Makefile" BUILD=$(BLD); \ make -f "$(DPS)/$${i}/Makefile" BUILD=$(BLD); \
fi; \ fi; \
done done
@echo "________________________________________"
buildThis: buildThis:
@echo "building vipack"
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkTools.Mod
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkSettings.Mod cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkSettings.Mod
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/unix/vpkLinuxFiles.Mod cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/unix/vpkLinuxFiles.Mod
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/unix/vpkTime.Mod cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/unix/vpkTime.Mod
@ -52,13 +58,14 @@ buildThis:
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/unix/vpkGit.Mod cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/unix/vpkGit.Mod
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkStorage.Mod cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkStorage.Mod
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkConf.Mod cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkConf.Mod
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkSyncer.Mod
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkdepTree.Mod cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkdepTree.Mod
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkSyncer.Mod
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkDot.Mod cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkDot.Mod
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkResolver.Mod cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkResolver.Mod
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkJsonDepRetriever.Mod cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkJsonDepRetriever.Mod
cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkInstaller.Mod cd $(BUILD) && $(VOC) -s $(mkfile_dir_path)/src/vpkInstaller.Mod
cd $(BUILD) && $(VOC) $(mkfile_dir_path)/src/vipack.Mod -m cd $(BUILD) && $(VOC) $(mkfile_dir_path)/src/vipack.Mod -m
@echo "________________________________________"
tests: tests:
#cd $(BUILD) && $(VOC) $(mkfile_dir_path)/test/testList.Mod -m #cd $(BUILD) && $(VOC) $(mkfile_dir_path)/test/testList.Mod -m

View file

@ -54,7 +54,7 @@ BEGIN
Strings.Append(vpkSettings.vpkConfDir, path); Strings.Append(vpkSettings.vpkConfDir, path);
END mkConfDirPath; END mkConfDirPath;
PROCEDURE mkBldDir*(VAR prefix: ARRAY OF CHAR): strTypes.pstring; PROCEDURE mkBldDir*(prefix: ARRAY OF CHAR): strTypes.pstring;
VAR VAR
builddir: strTypes.pstring; builddir: strTypes.pstring;
ln : INTEGER; ln : INTEGER;

View file

@ -226,15 +226,15 @@ END main;
(* (*
PROCEDURE help(); PROCEDURE help();
BEGIN BEGIN
vpkLogger.Log("HelpText"); vpkLogger.Log("HelpText");
Out.String("Vipack sync - syncing git tree and local tree"); Out.Ln; Out.String("Vipack sync - syncing git tree and local tree"); Out.Ln;
Out.String("vipackConf.json path -> $HOME/.vipack/vipackConf.json"); Out.Ln; Out.String("vipackConf.json path -> $HOME/.vipack/vipackConf.json"); Out.Ln;
Out.String("vipackTree path -> $HOME/.vipack/vipackTree") Out.String("vipackTree path -> $HOME/.vipack/vipackTree")
END help; END help;
PROCEDURE main(); PROCEDURE main();
VAR VAR
S: Texts.Scanner; S: Texts.Scanner;
unit, command: ARRAY 64 OF CHAR; (* because Texts.Scanner.s is 64 bytes long*) unit, command: ARRAY 64 OF CHAR; (* because Texts.Scanner.s is 64 bytes long*)
BEGIN BEGIN
(* this could go to vpkConf init section, (* this could go to vpkConf init section,
@ -248,18 +248,18 @@ BEGIN
command := S.s; command := S.s;
IF Strings.Match(command, "") OR Strings.Match(command, "help")THEN IF Strings.Match(command, "") OR Strings.Match(command, "help")THEN
help; help;
ELSE ELSE
IF command = "sync" THEN IF command = "sync" THEN
vpkSyncer.sync; vpkSyncer.sync;
END; END;
IF command = "install" THEN IF command = "install" THEN
Texts.Scan(S); Texts.Scan(S);
unit := S.s; unit := S.s;
vpkInstaller.install(unit); vpkInstaller.install(unit);
END; END;
END; END;
END main; END main;

View file

@ -1,5 +1,8 @@
MODULE vpkInstaller; MODULE vpkInstaller;
IMPORT In, Out, StringList, vpkResolver, vpkdepTree, vpkDot, vpkEnv, vpkJsonDepRetriever, vpkSyncer, Platform; IMPORT In, Out, Platform,
StringList,
vpkResolver, vpkdepTree, vpkDot, vpkEnv, vpkJsonDepRetriever,vpkSyncer,
vpkTools, vpkSettings;
PROCEDURE resolve*(VAR unit: ARRAY OF CHAR): vpkdepTree.TdepTree; PROCEDURE resolve*(VAR unit: ARRAY OF CHAR): vpkdepTree.TdepTree;
VAR VAR
@ -39,70 +42,45 @@ BEGIN
IF ch # 'y' THEN Out.Ln; Out.String('quitting'); Out.Ln; HALT(0); END IF ch # 'y' THEN Out.Ln; Out.String('quitting'); Out.Ln; HALT(0); END
END ask; END ask;
PROCEDURE extractDomainFromUrl(VAR url: ARRAY OF CHAR; VAR domain: ARRAY OF CHAR); PROCEDURE fetch*(VAR package:ARRAY OF CHAR; prefix: ARRAY OF CHAR; VAR pkgTree: ARRAY OF CHAR; a: BOOLEAN);
VAR
start, i, j: INTEGER;
BEGIN
start := 0;
(* Skip protocol to find the start of the domain *)
WHILE (start < LEN(url) - 1) & (url[start] # 0X) & ((url[start] # ':') OR (url[start+1] # '/')) DO
INC(start);
END;
(* Skip the "://" part to actually reach the start of the domain *)
INC(start, 3); (* Assuming we stopped at ':', so we skip "://" *)
i := start;
(* Now 'start' is at the beginning of the domain, find the end of the domain *)
WHILE (i < LEN(url)) & (url[i] # 0X) & (url[i] # '/') DO
INC(i);
END;
(* Copy domain from url *)
j := 0;
WHILE (start < i) & (j < LEN(domain) - 1) DO
domain[j] := url[start];
INC(j); INC(start);
END;
domain[j] := 0X; (* Ensure the domain string is null-terminated *)
END extractDomainFromUrl;
PROCEDURE fetch*(VAR package, prefix, pkgTree: ARRAY OF CHAR; a: BOOLEAN);
VAR VAR
depTree: vpkdepTree.TdepTree; depTree: vpkdepTree.TdepTree;
dep: vpkdepTree.Tdep; dep: vpkdepTree.Tdep;
i: LONGINT; i: LONGINT;
URI, branch, domain: ARRAY 128 OF CHAR;
typ: ARRAY 16 OF CHAR;
BEGIN BEGIN
Out.String("entered vpkInstaller.fetch, prefix="); Out.String(prefix); Out.Ln;
depTree := resolve(package); depTree := resolve(package);
IF a THEN ask END; IF a THEN ask END;
i := 0; i := 0;
REPEAT REPEAT
dep := vpkdepTree.Get(depTree, i); dep := vpkdepTree.Get(depTree, i);
vpkJsonDepRetriever.getURIandType(dep, URI, typ, branch); vpkJsonDepRetriever.getURIandType(dep);
extractDomainFromUrl(URI, domain); Out.String("vpkInstaller.fetch, repeat bfr vpkSyncer.fetch, prefix=");
vpkSyncer.fetch(dep.name^, URI, domain, typ, prefix, branch); Out.String(prefix); Out.Ln;
vpkSyncer.fetch(dep, prefix);
Out.String("vpkInstaller.fetch, repeat aftr vpkSyncer.fetch, prefix=");
Out.String(prefix); Out.Ln;
INC(i) INC(i)
UNTIL i = depTree.Count; UNTIL i = depTree.Count;
END fetch; END fetch;
PROCEDURE build*(VAR package, prefix, tree: ARRAY OF CHAR; a : BOOLEAN); PROCEDURE build*(VAR package: ARRAY OF CHAR; prefix: ARRAY OF CHAR; VAR tree: ARRAY OF CHAR; a : BOOLEAN);
VAR VAR
depTree: vpkdepTree.TdepTree; depTree: vpkdepTree.TdepTree;
dep: vpkdepTree.Tdep; dep: vpkdepTree.Tdep;
i, j: LONGINT; i, j: LONGINT;
URI, branch, domain: ARRAY 128 OF CHAR;
typ: ARRAY 16 OF CHAR;
keys, values: StringList.TStringList; keys, values: StringList.TStringList;
k, v: StringList.pstring; k, v: StringList.pstring;
b: BOOLEAN; b: BOOLEAN;
builddir, cmd, srcPath: StringList.pstring; builddir, cmd, srcPath: StringList.pstring;
res: INTEGER; res: INTEGER;
domain: ARRAY 256 OF CHAR;
BEGIN BEGIN
Out.String("entered vpkInstaller.build, prefix="); Out.String(prefix); Out.Ln;
IF prefix # "" THEN IF prefix # "" THEN
builddir := vpkEnv.mkBldDir(prefix) builddir := vpkEnv.mkBldDir(prefix)
ELSE ELSE
Out.String("calling vpkEnv.mkdefBldDir"); Out.Ln;
builddir := vpkEnv.mkdefBldDir(); builddir := vpkEnv.mkdefBldDir();
END; END;
depTree := resolve(package); depTree := resolve(package);
@ -110,16 +88,22 @@ BEGIN
i := 0; i := 0;
REPEAT REPEAT
dep := vpkdepTree.Get(depTree, i); dep := vpkdepTree.Get(depTree, i);
vpkJsonDepRetriever.getURIandType(dep, URI, typ, branch); vpkJsonDepRetriever.getURIandType(dep);
Out.String("aftergetURIandType"); Out.Ln; Out.String("aftergetURIandType"); Out.Ln;
Out.String("got uri: "); Out.String(URI); Out.Ln; Out.String("got uri: "); Out.String(dep^.rmt^.URI); Out.Ln;
Out.String("got type: "); Out.String(typ); Out.Ln; Out.String("got type: ");
extractDomainFromUrl(URI, domain); IF dep^.Type = vpkSettings.git THEN Out.String("git");
Out.String("extracted domain; "); Out.String(domain); Out.Ln; ELSIF dep^.Type = vpkSettings.https THEN Out.String("https") END;
vpkSyncer.fetch(dep.name^, URI, domain, typ, prefix, branch); Out.Ln;
Out.String("vpkInstaller.build, repeat bfr vpkSyncer.fetch, prefix=");
Out.String(prefix); Out.Ln;
vpkSyncer.fetch(dep, prefix);
Out.String("vpkInstaller.build, repeat bfr vpkSyncer.fetch, prefix=");
Out.String(prefix); Out.Ln;
b := FALSE; b := FALSE;
b := vpkJsonDepRetriever.getBuildInfo(dep, keys, values); b := vpkJsonDepRetriever.getBuildInfo(dep, keys, values);
IF b THEN IF b THEN
vpkTools.extractDomainFromUrl(dep^.rmt.URI, domain);
j := 0; j := 0;
REPEAT REPEAT
k := keys.GetString(keys, j); k := keys.GetString(keys, j);

View file

@ -70,7 +70,7 @@ BEGIN
RETURN b; RETURN b;
END getBuildInfo; END getBuildInfo;
PROCEDURE getURIandType*(VAR d: vpkdepTree.Tdep; VAR URI: ARRAY OF CHAR; VAR type: ARRAY OF CHAR; VAR branch: ARRAY OF CHAR); PROCEDURE getURIandType*(VAR d: vpkdepTree.Tdep);
VAR VAR
jsonstr, errstr: strUtils.pstring; jsonstr, errstr: strUtils.pstring;
tree, singleValue, remoteValue: Json.Value; tree, singleValue, remoteValue: Json.Value;
@ -83,10 +83,8 @@ VAR
url, urlStr, authType, authTypeStr, url, urlStr, authType, authTypeStr,
md5, md5Str, authCr, authCrStr, md5, md5Str, authCr, authCrStr,
user, userStr, password, passwordStr: Json.jString; user, userStr, password, passwordStr: Json.jString;
httpsRemote: vpkdepTree.RemoteHttps; gitRemote: vpkdepTree.RemoteGit;
BEGIN BEGIN
strUtils.zeroStr(URI);
strUtils.zeroStr(type);
strUtils.zeroStr(branch);
jsonstr := NIL; jsonstr := NIL;
vpkStorage.json2pstring(d.name^, jsonstr); vpkStorage.json2pstring(d.name^, jsonstr);
IF jsonstr # NIL THEN IF jsonstr # NIL THEN
@ -122,10 +120,9 @@ BEGIN
IF someObj.value IS Json.Str THEN IF someObj.value IS Json.Str THEN
val := someObj.value(Json.Str).str; val := someObj.value(Json.Str).str;
IF key^ = vpkSettings.rmtTypKey THEN (* type *) IF key^ = vpkSettings.rmtTypKey THEN (* type *)
COPY(val^, type);
Out.String("type found: "); Out.String(type); Out.Ln;
IF val^ = vpkSettings.rmtTypHttpsVal THEN IF val^ = vpkSettings.rmtTypHttpsVal THEN
NEW(httpsRemote); d^.rmt := httpsRemote;
d^.Type := vpkSettings.https;
WHILE singleValue # NIL DO WHILE singleValue # NIL DO
someObj := singleValue(Json.Obj); someObj := singleValue(Json.Obj);
@ -199,16 +196,20 @@ BEGIN
ELSIF val^ = vpkSettings.rmtTypGitVal THEN ELSIF val^ = vpkSettings.rmtTypGitVal THEN
NEW(gitRemote); d^.rmt := gitRemote;
d^.Type := vpkSettings.git;
WHILE singleValue # NIL DO WHILE singleValue # NIL DO
IF singleValue IS Json.Obj THEN IF singleValue IS Json.Obj THEN
someObj := singleValue(Json.Obj); someObj := singleValue(Json.Obj);
key := someObj.name; key := someObj.name;
Out.String("git key: "); Out.String(key^); Out.Ln; Out.String("git key: "); Out.String(key^); Out.Ln;
val := someObj.value(Json.Str).str; val := someObj.value(Json.Str).str;
IF key^ = vpkSettings.rmtTreeBranchKey THEN COPY(val^, branch) END; IF key^ = vpkSettings.rmtTreeBranchKey THEN
COPY(val^, d^.rmt(vpkdepTree.RemoteGit)^.branch);
END;
IF key^ = vpkSettings.rmtTreeKey THEN IF key^ = vpkSettings.rmtTreeKey THEN
COPY(val^, URI); COPY(val^, d^.rmt^.URI);
Out.String("uri found: "); Out.String(URI); Out.Ln; Out.String("uri found: "); Out.String(d^.rmt^.URI); Out.Ln;
END; END;
END; END;
singleValue := someObj.next; singleValue := someObj.next;

View file

@ -1,10 +1,11 @@
MODULE vpkSettings; MODULE vpkSettings;
IMPORT Platform, Out; IMPORT Platform, Out;
CONST CONST
http* = 0; (* remotes *)
https* = 1; http* = 0; httpWithAuth* = 1;
gemini* = 2; https* = 2; httpsWithAuth* = 3;
git* = 3; gemini* = 4;
git* = 5;
unkn* = -1; unkn* = -1;
VAR VAR

View file

@ -1,7 +1,7 @@
MODULE vpkSyncer; MODULE vpkSyncer;
IMPORT Strings, Out, IMPORT Strings, Out,
strUtils, strUtils,
vpkSettings, vpkEnv, vpkConf, vpkGit; vpkSettings, vpkEnv, vpkConf, vpkGit, vpkdepTree, vpkTools;
PROCEDURE mkTreePath(VAR path: ARRAY OF CHAR); PROCEDURE mkTreePath(VAR path: ARRAY OF CHAR);
BEGIN BEGIN
@ -23,19 +23,30 @@ BEGIN
END; END;
END sync; END sync;
PROCEDURE fetch*(name, url, dmn, typ, dst, branch: ARRAY OF CHAR); PROCEDURE fetch*(VAR dep: vpkdepTree.Tdep; dst: ARRAY OF CHAR);
VAR domain: ARRAY 64 OF CHAR;
BEGIN BEGIN
vpkTools.extractDomainFromUrl(dep^.rmt^.URI, domain);
Out.String("vpkSyncer.fetch, dst="); Out.String(dst); Out.Ln;
IF dst = "" THEN IF dst = "" THEN
vpkEnv.mkdefPkgDirPath(dmn, name, dst); vpkEnv.mkdefPkgDirPath(domain, dep^.name^, dst);
ELSE ELSE
vpkEnv.mkPkgDirPath(dmn, name, dst); vpkEnv.mkPkgDirPath(domain, dep^.name^, dst);
END; END;
Out.String("now vpkSyncer.fetch, dst="); Out.String(dst); Out.Ln;
(* dst is changed by mkdefPkgDirPath and mkPkgdirPath *) (* dst is changed by mkdefPkgDirPath and mkPkgdirPath *)
IF typ = vpkSettings.rmtTypGitVal THEN (*IF dep^.Type = vpkSettings.git THEN*)
vpkGit.fetchRepo(url, dst, branch); IF dep^.rmt # NIL THEN
IF dep^.rmt IS vpkdepTree.RemoteGit THEN
Out.String("in vkpSyncer.fetch uri is "); Out.String(dep^.rmt^.URI); Out.Ln;
vpkGit.fetchRepo(dep^.rmt^.URI, dst, dep^.rmt(vpkdepTree.RemoteGit).branch);
ELSE
Out.String("TODO: not a git url"); Out.Ln
END
ELSE ELSE
Out.String("TODO: not a git url"); Out.Ln Out.String("deps remote is not set, this should not happen"); Out.Ln;
END HALT(5);
END;
END fetch; END fetch;
END vpkSyncer. END vpkSyncer.

32
src/vpkTools.Mod Normal file
View file

@ -0,0 +1,32 @@
MODULE vpkTools;
PROCEDURE extractDomainFromUrl*(VAR url: ARRAY OF CHAR; VAR domain: ARRAY OF CHAR);
VAR
start, i, j: INTEGER;
BEGIN
start := 0;
(* Skip protocol to find the start of the domain *)
WHILE (start < LEN(url) - 1) & (url[start] # 0X) & ((url[start] # ':') OR (url[start+1] # '/')) DO
INC(start);
END;
(* Skip the "://" part to actually reach the start of the domain *)
INC(start, 3); (* Assuming we stopped at ':', so we skip "://" *)
i := start;
(* Now 'start' is at the beginning of the domain, find the end of the domain *)
WHILE (i < LEN(url)) & (url[i] # 0X) & (url[i] # '/') DO
INC(i);
END;
(* Copy domain from url *)
j := 0;
WHILE (start < i) & (j < LEN(domain) - 1) DO
domain[j] := url[start];
INC(j); INC(start);
END;
domain[j] := 0X; (* Ensure the domain string is null-terminated *)
END extractDomainFromUrl;
END vpkTools.

View file

@ -2,6 +2,9 @@ MODULE vpkdepTree;
IMPORT Out, Strings, IMPORT Out, Strings,
strUtils, List, StringList, strUtils, List, StringList,
vpkSettings; vpkSettings;
TYPE TYPE
pstring = strUtils.pstring; pstring = strUtils.pstring;
@ -27,19 +30,36 @@ TYPE
retriever- = PROCEDURE (VAR d: Tdep; VAR strlist: StringList.TStringList): LONGINT; retriever- = PROCEDURE (VAR d: Tdep; VAR strlist: StringList.TStringList): LONGINT;
(* to be added to Tdep? Remote* = POINTER TO RemoteDesc;
bldSeq* = POINTER TO bldSeqDesc; RemoteDesc* = RECORD
bldSeqDesc* = RECORD URI* : ARRAY 512 OF CHAR;
cmd*, file*: StringList.TStringList;
END; END;
file* = POINTER to fileDesc; RemoteGit* = POINTER TO RemoteGitDesc;
fileDesc* = RECORD RemoteGitDesc* = RECORD(RemoteDesc)
url*, authType*, MD5*: ARRAY 512 OF CHAR; hash* : ARRAY 64 OF CHAR;
authUsr*, authPwd*: ARRAY 64 OF CHAR; branch* : ARRAY 32 OF CHAR;
tag* : ARRAY 16 OF CHAR;
END; END;
files* = List.TList;
*) RemoteHttp* = POINTER TO RemoteHttpDesc;
RemoteHttpDesc* = RECORD(RemoteDesc)
HttpAuth* : BOOLEAN;
files* : StringList.TStringList;
usernames* : StringList.TStringList;
passwords* : StringList.TStringList;
hashes* : StringList.TStringList;
END;
RemoteHttps* = POINTER TO RemoteHttpDesc;
RemoteHttpsDesc* = RECORD(RemoteDesc)
HttpAuth* : BOOLEAN;
files* : StringList.TStringList;
usernames* : StringList.TStringList;
passwords* : StringList.TStringList;
hashes* : StringList.TStringList;
END;
TdepDesc* = RECORD TdepDesc* = RECORD
prev-, next-: Tdep; prev-, next-: Tdep;
name- : pstring; name- : pstring;
@ -49,12 +69,8 @@ TYPE
RetrieveDeps- : retriever; RetrieveDeps- : retriever;
InstallRetriever*: PROCEDURE(VAR d: Tdep; r: retriever); InstallRetriever*: PROCEDURE(VAR d: Tdep; r: retriever);
Type* : LONGINT; (* from vpkSettings http=0, https=1, gemini=2, git=3 *) Type* : LONGINT; (* from vpkSettings: http, https, gemini, git... *)
(* rmt* : Remote;
gitPath* : ARRAY 256 OF CHAR;
gitTag* : ARRAY 64 OF CHAR;
bldSequence*: bldSeq;:
*)
END; END;
PROCEDURE AssignDeps*(VAR d: Tdep; VAR deps: Tdeps); PROCEDURE AssignDeps*(VAR d: Tdep; VAR deps: Tdeps);
@ -77,6 +93,7 @@ BEGIN
dep.AssignDeps := AssignDeps; dep.AssignDeps := AssignDeps;
dep.InstallRetriever := InstallRetriever; dep.InstallRetriever := InstallRetriever;
dep.RetrieveDeps := NIL; dep.RetrieveDeps := NIL;
dep.rmt := NIL;
RETURN dep RETURN dep
END CreateDep; END CreateDep;