Rev 7696 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
7983 | leency | 1 | (* |
7597 | akron1 | 2 | BSD 2-Clause License |
3 | |||
7696 | akron1 | 4 | Copyright (c) 2018-2019, Anton Krotov |
7597 | akron1 | 5 | All rights reserved. |
6 | *) |
||
7 | |||
8 | MODULE PATHS; |
||
9 | |||
10 | IMPORT STRINGS, UTILS; |
||
11 | |||
12 | |||
13 | CONST |
||
14 | |||
7693 | akron1 | 15 | slash = UTILS.slash; |
16 | |||
7597 | akron1 | 17 | PATHLEN = 2048; |
7693 | akron1 | 18 | |
19 | |||
7597 | akron1 | 20 | TYPE |
21 | |||
22 | PATH* = ARRAY PATHLEN OF CHAR; |
||
23 | |||
24 | |||
25 | PROCEDURE split* (fname: ARRAY OF CHAR; VAR path, name, ext: ARRAY OF CHAR); |
||
26 | VAR |
||
27 | pos1, pos2, len: INTEGER; |
||
28 | |||
29 | BEGIN |
||
30 | len := LENGTH(fname); |
||
31 | pos1 := len - 1; |
||
32 | pos2 := len - 1; |
||
33 | STRINGS.search(fname, pos1, slash, FALSE); |
||
34 | STRINGS.search(fname, pos2, ".", FALSE); |
||
35 | |||
36 | path := fname; |
||
37 | path[pos1 + 1] := 0X; |
||
38 | |||
39 | IF (pos2 = -1) OR (pos2 < pos1) THEN |
||
40 | pos2 := len |
||
41 | END; |
||
42 | |||
43 | INC(pos1); |
||
44 | |||
45 | STRINGS.copy(fname, name, pos1, 0, pos2 - pos1); |
||
46 | name[pos2 - pos1] := 0X; |
||
47 | STRINGS.copy(fname, ext, pos2, 0, len - pos2); |
||
48 | ext[len - pos2] := 0X; |
||
49 | |||
50 | END split; |
||
51 | |||
52 | |||
53 | PROCEDURE RelPath* (absolute, relative: ARRAY OF CHAR; VAR res: ARRAY OF CHAR); |
||
54 | VAR |
||
55 | i, j: INTEGER; |
||
56 | error: BOOLEAN; |
||
57 | |||
58 | BEGIN |
||
59 | COPY(absolute, res); |
||
60 | i := LENGTH(res) - 1; |
||
61 | WHILE (i >= 0) & (res[i] # slash) DO |
||
62 | DEC(i) |
||
63 | END; |
||
64 | |||
65 | INC(i); |
||
66 | res[i] := 0X; |
||
67 | |||
68 | error := FALSE; |
||
69 | j := 0; |
||
70 | WHILE ~error & (relative[j] # 0X) DO |
||
71 | IF (relative[j] = ".") & (relative[j + 1] = ".") & (relative[j + 2] = slash) & (i > 0) & (res[i - 1] = slash) THEN |
||
72 | DEC(i, 2); |
||
73 | WHILE (i >= 0) & (res[i] # slash) DO |
||
74 | DEC(i) |
||
75 | END; |
||
76 | IF i < 0 THEN |
||
77 | error := TRUE |
||
78 | ELSE |
||
79 | INC(i); |
||
80 | INC(j, 3) |
||
81 | END |
||
82 | ELSE |
||
83 | res[i] := relative[j]; |
||
84 | INC(i); |
||
85 | INC(j) |
||
86 | END |
||
87 | END; |
||
88 | |||
89 | IF error THEN |
||
90 | COPY(relative, res) |
||
91 | ELSE |
||
92 | res[i] := 0X |
||
93 | END |
||
94 | |||
7693 | akron1 | 95 | END RelPath; |
7597 | akron1 | 96 | |
97 | |||
98 | PROCEDURE isRelative* (path: ARRAY OF CHAR): BOOLEAN; |
||
99 | RETURN UTILS.isRelative(path) |
||
7693 | akron1 | 100 | END isRelative; |
7597 | akron1 | 101 | |
102 | |||
103 | PROCEDURE GetCurrentDirectory* (VAR path: ARRAY OF CHAR); |
||
104 | BEGIN |
||
105 | UTILS.GetCurrentDirectory(path) |
||
106 | END GetCurrentDirectory; |
||
107 | |||
108 | |||
7983 | leency | 109 | END PATHS.>> |