diff --git a/Vipack.Mod b/Vipack.Mod index 5eb6cea..91f4157 100644 --- a/Vipack.Mod +++ b/Vipack.Mod @@ -1,9 +1,12 @@ MODULE Vipack; -IMPORT vpkLogger, vpkPackageFileParser,Texts,Strings,In,Platform, Oberon, Out, Files, vpkUserDetails; +IMPORT vpkConf, vpkFsHelper, vpkLogger, vpkPackageFileParser, Texts, Strings, In, Platform, Oberon, Out, Files, vpkUserDetails; PROCEDURE main(); + +CONST confFileName = "/vipack.conf"; + VAR user, str, fn: ARRAY 32 OF CHAR; - confDir, string : ARRAY 120 OF CHAR; + confPath, string : ARRAY 120 OF CHAR; i : INTEGER; f : Files.File; r : Files.Rider; @@ -23,7 +26,7 @@ Texts.Scan(S); Out.String(S.s); Out.Ln; -(* Vipack installation or help) *) +(* Vipack installation or help *) command := S.s; IF Strings.Match(command, "") OR Strings.Match(command, "--help")THEN help; @@ -32,7 +35,7 @@ ELSIF Strings.Match(command, "install") THEN END; -confDir := "/home//.vipack/vipack.conf"; +confPath := "/home//.vipack"; (* Getting username from input if there is no $USER variable *) IF ~(vpkUserDetails.GetUsername(user)) THEN @@ -40,17 +43,22 @@ IF ~(vpkUserDetails.GetUsername(user)) THEN END; (* Making the full path to vipack.conf *) -Strings.Insert(user,6,confDir); -Out.String(confDir);Out.Ln; +Strings.Insert(user,6,confPath); +Out.String(confPath);Out.Ln; + +(* Checking if ~/.vipack directory already exists *) +IF ~(vpkFsHelper.mkDir(confPath)) THEN + Out.String(confPath); Out.String(" already exists or path is wrong");Out.Ln; +ELSE Out.String("Creating directory "); Out.String(confPath);Out.Ln; +END; (* Checking if vipack.conf already exists *) -IF Files.Old(confDir) = NIL THEN - Out.String("Creating the configuration file "); Out.String(confDir);Out.Ln; - f := Files.New(confDir); - Files.Set(r, f, 0); - Files.WriteInt(r, 8); Files.WriteString(r, "Configuration"); - Files.Register(f); -ELSIF Files.Old(confDir) # NIL THEN +Strings.Append(confFileName,confPath); + +IF ~(vpkConf.confExists(confPath)) THEN + Out.String("Creating the configuration file "); Out.String(confPath);Out.Ln; + vpkConf.makeConf(confPath); +ELSE Out.String("File already exists");Out.Ln; END; diff --git a/vpkConf.Mod b/vpkConf.Mod new file mode 100644 index 0000000..636edc1 --- /dev/null +++ b/vpkConf.Mod @@ -0,0 +1,25 @@ +MODULE vpkConf; +IMPORT Files; + +PROCEDURE confExists*(VAR confFile: ARRAY OF CHAR ):BOOLEAN; +BEGIN + IF Files.Old(confFile) = NIL THEN RETURN FALSE; + ELSE RETURN TRUE; + END; + +END confExists; + +PROCEDURE makeConf*(VAR confFilePath: ARRAY OF CHAR); +VAR f : Files.File; +BEGIN + +f := Files.New(confFilePath); +Files.Register(f); + +END makeConf; + + +BEGIN + + +END vpkConf. diff --git a/vpkFsHelper.Mod b/vpkFsHelper.Mod new file mode 100644 index 0000000..402f821 --- /dev/null +++ b/vpkFsHelper.Mod @@ -0,0 +1,20 @@ +MODULE vpkFsHelper; +IMPORT SYSTEM; + +PROCEDURE -Aincludesysstat '#include '; +PROCEDURE -Aincludesystypes '#include '; + + +PROCEDURE -mkdir(VAR path: ARRAY OF CHAR): INTEGER + "(int)mkdir(path, 0755)"; + +PROCEDURE mkDir*(VAR path: ARRAY OF CHAR): BOOLEAN; +VAR res: INTEGER; +BEGIN + res := mkdir(path); + IF res = 0 THEN RETURN TRUE ELSE RETURN FALSE END +END mkDir; + + + +END vpkFsHelper.