mirror of
https://github.com/vishapoberon/vipak.git
synced 2026-04-06 04:52:26 +00:00
can be compiled, syncs tree. needs check for bugs.
This commit is contained in:
parent
7a741b509a
commit
163102bd19
15 changed files with 264 additions and 216 deletions
104
src/unix/vpkEnv.Mod
Normal file
104
src/unix/vpkEnv.Mod
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
MODULE vpkEnv;
|
||||
IMPORT Files, Platform, Strings, Out, vpkSettings, vpkFiles;
|
||||
|
||||
VAR
|
||||
conf, confDir : ARRAY 256 OF CHAR;
|
||||
|
||||
PROCEDURE getHome*(VAR path: ARRAY OF CHAR);
|
||||
BEGIN
|
||||
IF ~(Platform.getEnv("HOME", path)) THEN
|
||||
Out.String("HOME variable is not found"); Out.Ln;
|
||||
HALT(1);
|
||||
END;
|
||||
END getHome;
|
||||
|
||||
PROCEDURE mkConfDirPath(home: ARRAY OF CHAR; VAR path: ARRAY OF CHAR);
|
||||
BEGIN
|
||||
confDir := home;
|
||||
Strings.Append("/", path);
|
||||
Strings.Append(vpkSettings.vpkConfDir, path);
|
||||
END mkConfDirPath;
|
||||
|
||||
PROCEDURE setConfFileName;
|
||||
VAR
|
||||
home: ARRAY 128 OF CHAR;
|
||||
BEGIN
|
||||
getHome(home);
|
||||
mkConfDirPath(home, confDir);
|
||||
conf := confDir;
|
||||
Strings.Append("/", conf);
|
||||
Strings.Append(vpkSettings.vpkConfFile, conf);
|
||||
END setConfFileName;
|
||||
|
||||
PROCEDURE getConfPath(VAR path: ARRAY OF CHAR);
|
||||
BEGIN
|
||||
COPY(conf, path);
|
||||
END getConfPath;
|
||||
|
||||
PROCEDURE getConfDir*(VAR path: ARRAY OF CHAR);
|
||||
BEGIN
|
||||
COPY(confDir, path);
|
||||
END getConfDir;
|
||||
|
||||
PROCEDURE getConfFile*(): Files.File;
|
||||
VAR f: Files.File;
|
||||
BEGIN
|
||||
f := Files.Old(conf);
|
||||
IF f = NIL THEN
|
||||
f := Files.New(conf)
|
||||
END;
|
||||
RETURN f;
|
||||
END getConfFile;
|
||||
|
||||
PROCEDURE checkConfig*(): BOOLEAN;
|
||||
VAR
|
||||
file : vpkFiles.fileInfo;
|
||||
BEGIN
|
||||
file.name := conf;
|
||||
RETURN vpkFiles.Exists(file);
|
||||
END checkConfig;
|
||||
|
||||
PROCEDURE getTreeDir*(VAR path: ARRAY OF CHAR);
|
||||
BEGIN
|
||||
COPY(confDir, path);
|
||||
Strings.Append("/", path);
|
||||
Strings.Append(vpkSettings.vpkTreeDir, path);
|
||||
END getTreeDir;
|
||||
|
||||
PROCEDURE checkEnv*;
|
||||
VAR
|
||||
file : vpkFiles.fileInfo;
|
||||
tmp : ARRAY 256 OF CHAR;
|
||||
BEGIN
|
||||
file.name := conf;
|
||||
IF ~vpkFiles.Exists(file) THEN
|
||||
(* Checking if ~/.vipack directory already exists *)
|
||||
file.name := confDir;
|
||||
IF ~vpkFiles.Exists(file) THEN (* exists!!! *)
|
||||
Out.String("Creating directory "); Out.String(confDir);Out.Ln;
|
||||
IF ~vpkFiles.mkDir(confDir) THEN
|
||||
Out.String("failed to create "); Out.String(confDir); Out.String(" directory"); Out.Ln;
|
||||
HALT(1);
|
||||
END;
|
||||
ELSE
|
||||
IF ~(vpkFiles.dir IN file.attr) THEN
|
||||
Out.String(confDir); Out.String(" exists, but is not a directory"); Out.Ln;
|
||||
HALT(1);
|
||||
END;
|
||||
END;
|
||||
END;
|
||||
tmp := confDir;
|
||||
Strings.Append('/', tmp);
|
||||
Strings.Append(vpkSettings.vpkTreeDir, tmp);
|
||||
file.name := tmp;
|
||||
IF ~vpkFiles.Exists(file) THEN
|
||||
IF ~vpkFiles.mkDir(file.name) THEN
|
||||
Out.String("failed to create tree dir "); Out.String(tmp); Out.Ln; HALT(1);
|
||||
END;
|
||||
END;
|
||||
END checkEnv;
|
||||
|
||||
BEGIN
|
||||
setConfFileName;
|
||||
|
||||
END vpkEnv.
|
||||
99
src/unix/vpkFiles.Mod
Normal file
99
src/unix/vpkFiles.Mod
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
MODULE vpkFiles;
|
||||
IMPORT SYSTEM;
|
||||
|
||||
CONST
|
||||
dir* = 0; char* = 1; block* = 2; file* = 3; fifo* = 4;
|
||||
symlink* = 5; socket* = 6;
|
||||
|
||||
TYPE
|
||||
fileInfo* = RECORD;
|
||||
name* : ARRAY 256 OF CHAR;
|
||||
attr- : SET
|
||||
END;
|
||||
|
||||
Status = RECORD (* struct stat *)
|
||||
dev* : HUGEINT; (* dev_t 8 *)
|
||||
ino* : HUGEINT; (* ino 8 *)
|
||||
nlink* : HUGEINT;
|
||||
mode* : LONGINT;
|
||||
uid*, gid*: LONGINT;
|
||||
pad0* : LONGINT;
|
||||
rdev* : HUGEINT;
|
||||
size* : HUGEINT;
|
||||
blksize* : HUGEINT;
|
||||
blocks* : HUGEINT;
|
||||
atime* : HUGEINT;
|
||||
atimences* : HUGEINT;
|
||||
mtime* : HUGEINT;
|
||||
mtimensec* : HUGEINT;
|
||||
ctime* : HUGEINT;
|
||||
ctimensec* : HUGEINT;
|
||||
unused0*, unused1*, unused2*: HUGEINT;
|
||||
END;
|
||||
|
||||
PROCEDURE -Aincludesysstat '#include <sys/stat.h>';
|
||||
PROCEDURE -Aincludesystypes '#include <sys/types.h>';
|
||||
|
||||
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;
|
||||
|
||||
PROCEDURE -stat(VAR path : ARRAY OF CHAR; st: Status): INTEGER
|
||||
"stat((const char*)path, (struct stat*)&st)";
|
||||
|
||||
PROCEDURE -isDir(mode: LONGINT): INTEGER
|
||||
"S_ISDIR(mode)";
|
||||
|
||||
PROCEDURE -isChar(mode: LONGINT): INTEGER
|
||||
"S_ISCHR(mode)";
|
||||
|
||||
PROCEDURE -isBlock(mode: LONGINT): INTEGER
|
||||
"S_ISBLK(mode)";
|
||||
|
||||
PROCEDURE -isReg(mode: LONGINT): INTEGER
|
||||
"S_ISREG(mode)";
|
||||
|
||||
PROCEDURE -isFIFO(mode: LONGINT): INTEGER
|
||||
"S_ISFIFO(mode)";
|
||||
|
||||
PROCEDURE -isLnk(mode: LONGINT): INTEGER
|
||||
"S_ISLNK(mode)";
|
||||
|
||||
PROCEDURE -isSock(mode: LONGINT): INTEGER
|
||||
"S_ISSOCK(mode)";
|
||||
|
||||
PROCEDURE Exists*(VAR fl : fileInfo): BOOLEAN;
|
||||
VAR
|
||||
i : INTEGER;
|
||||
st: Status;
|
||||
BEGIN
|
||||
fl.attr := {};
|
||||
i := stat(fl.name, st);
|
||||
IF i < 0 THEN RETURN FALSE END;
|
||||
IF i = 0 THEN (* file exists*)
|
||||
i := isDir(st.mode);
|
||||
IF i # 0 THEN fl.attr := fl.attr + {dir} END;
|
||||
i := isChar(st.mode);
|
||||
IF i # 0 THEN fl.attr := fl.attr + {char} END;
|
||||
i := isBlock(st.mode);
|
||||
IF i # 0 THEN fl.attr := fl.attr + {block} END;
|
||||
i := isReg(st.mode);
|
||||
IF i # 0 THEN fl.attr := fl.attr + {file} END;
|
||||
i := isFIFO(st.mode);
|
||||
IF i # 0 THEN fl.attr := fl.attr + {fifo} END;
|
||||
i := isLnk(st.mode);
|
||||
IF i # 0 THEN fl.attr := fl.attr + {symlink} END;
|
||||
i := isSock(st.mode);
|
||||
IF i # 0 THEN fl.attr := fl.attr + {socket} END;
|
||||
RETURN TRUE
|
||||
END;
|
||||
END Exists;
|
||||
|
||||
|
||||
END vpkFiles.
|
||||
28
src/unix/vpkGit.Mod
Normal file
28
src/unix/vpkGit.Mod
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
MODULE vpkGit;
|
||||
IMPORT Out, Strings, Platform, vpkEnv;
|
||||
|
||||
PROCEDURE pull*(url : ARRAY OF CHAR; dst : ARRAY OF CHAR);
|
||||
VAR i : INTEGER;
|
||||
cmd : ARRAY 120 OF CHAR;
|
||||
BEGIN
|
||||
cmd:= "git init ";
|
||||
Strings.Append(dst, cmd);
|
||||
i:=Platform.System(cmd);
|
||||
cmd := "";
|
||||
cmd := "git -C ";
|
||||
Strings.Append(dst, cmd);
|
||||
Strings.Append(" pull ", cmd);
|
||||
Strings.Append(url, cmd);
|
||||
i := Platform.System(cmd);
|
||||
Out.Int(i, 0);
|
||||
END pull;
|
||||
|
||||
PROCEDURE syncTree*(url: ARRAY OF CHAR);
|
||||
VAR
|
||||
tmp: ARRAY 256 OF CHAR;
|
||||
BEGIN
|
||||
vpkEnv.getTreeDir(tmp);
|
||||
pull(url, tmp);
|
||||
END syncTree;
|
||||
|
||||
END vpkGit.
|
||||
30
src/unix/vpkTime.Mod
Normal file
30
src/unix/vpkTime.Mod
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
MODULE vpkTime;
|
||||
IMPORT SYSTEM;
|
||||
|
||||
PROCEDURE -Aincludesystime '#include <sys/time.h>'; (* for gettimeofday *)
|
||||
PROCEDURE -Aincludetime '#include <time.h>'; (* for localtime *)
|
||||
PROCEDURE -Aincludesystypes '#include <sys/types.h>';
|
||||
|
||||
PROCEDURE -gettimeval "struct timeval tv; gettimeofday(&tv,0)";
|
||||
PROCEDURE -tvsec(): LONGINT "tv.tv_sec";
|
||||
PROCEDURE -tvusec(): LONGINT "tv.tv_usec";
|
||||
PROCEDURE -sectotm(s: LONGINT) "struct tm *time = localtime((time_t*)&s)";
|
||||
PROCEDURE -tmsec(): LONGINT "(LONGINT)time->tm_sec";
|
||||
PROCEDURE -tmmin(): LONGINT "(LONGINT)time->tm_min";
|
||||
PROCEDURE -tmhour(): LONGINT "(LONGINT)time->tm_hour";
|
||||
PROCEDURE -tmmday(): LONGINT "(LONGINT)time->tm_mday";
|
||||
PROCEDURE -tmmon(): LONGINT "(LONGINT)time->tm_mon";
|
||||
PROCEDURE -tmyear(): LONGINT "(LONGINT)time->tm_year";
|
||||
|
||||
PROCEDURE Now*(VAR year, month, day, hour, min, sec: LONGINT);
|
||||
BEGIN
|
||||
gettimeval; sectotm(tvsec());
|
||||
year := tmyear() + 1900;
|
||||
month := tmmon();
|
||||
day := tmmday();
|
||||
hour := tmhour();
|
||||
min := tmmin();
|
||||
sec := tmsec();
|
||||
END Now;
|
||||
|
||||
END vpkTime.
|
||||
Loading…
Add table
Add a link
Reference in a new issue