Subversion Repositories Kolibri OS

Rev

Rev 9907 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
8728 leency 1
(*
9903 akron1 2
    Copyright 2021-2023 Anton Krotov
8728 leency 3
 
4
    This file is part of CEdit.
5
 
6
    CEdit is free software: you can redistribute it and/or modify
7
    it under the terms of the GNU General Public License as published by
8
    the Free Software Foundation, either version 3 of the License, or
9
    (at your option) any later version.
10
 
11
    CEdit is distributed in the hope that it will be useful,
12
    but WITHOUT ANY WARRANTY; without even the implied warranty of
13
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
    GNU General Public License for more details.
15
 
16
    You should have received a copy of the GNU General Public License
17
    along with CEdit. If not, see .
18
*)
19
 
20
MODULE Utils;
21
 
22
IMPORT SYSTEM;
23
 
24
CONST
25
 
9906 akron1 26
	SPACE* = 20X;
27
	SLASH* = "/";
8728 leency 28
 
9906 akron1 29
	OS* = "KOS";
8728 leency 30
 
31
 
32
PROCEDURE streq* (s1, s2: INTEGER; n: INTEGER): BOOLEAN;
33
VAR
9906 akron1 34
	c1, c2: WCHAR;
35
	res: BOOLEAN;
8728 leency 36
BEGIN
9659 akron1 37
	res := TRUE;
9906 akron1 38
	WHILE (n > 0) & res DO
39
		SYSTEM.GET(s1, c1);
40
		SYSTEM.GET(s2, c2);
41
		res := c1 = c2;
42
		INC(s1, SYSTEM.SIZE(WCHAR));
43
		INC(s2, SYSTEM.SIZE(WCHAR));
44
		DEC(n)
45
	END
46
	RETURN res
8728 leency 47
END streq;
48
 
49
 
50
PROCEDURE append* (VAR s1: ARRAY OF WCHAR; s2: ARRAY OF WCHAR);
51
VAR
9659 akron1 52
    n, i, j: INTEGER;
8728 leency 53
BEGIN
9659 akron1 54
    j := LENGTH(s1);
55
    n := LENGTH(s2);
8728 leency 56
 
9659 akron1 57
    ASSERT(j + n < LEN(s1));
8728 leency 58
 
59
    i := 0;
9659 akron1 60
    WHILE i < n DO
8728 leency 61
        s1[j] := s2[i];
62
        INC(i);
63
        INC(j)
64
    END;
65
 
66
    s1[j] := 0X
67
END append;
68
 
69
 
70
PROCEDURE append8* (VAR s1: ARRAY OF CHAR; s2: ARRAY OF CHAR);
71
VAR
9659 akron1 72
    n, i, j: INTEGER;
8728 leency 73
BEGIN
9659 akron1 74
    j := LENGTH(s1);
75
    n := LENGTH(s2);
8728 leency 76
 
9659 akron1 77
    ASSERT(j + n < LEN(s1));
8728 leency 78
 
79
    i := 0;
9659 akron1 80
    WHILE i < n DO
8728 leency 81
        s1[j] := s2[i];
82
        INC(i);
83
        INC(j)
84
    END;
85
 
86
    s1[j] := 0X
87
END append8;
88
 
89
 
90
PROCEDURE reverse* (VAR s: ARRAY OF WCHAR);
91
VAR
92
    ch: WCHAR;
93
    i, j: INTEGER;
94
BEGIN
95
    i := 0;
96
    j := LENGTH(s) - 1;
97
    WHILE i < j DO
98
        ch := s[i];
99
        s[i] := s[j];
100
        s[j] := ch;
101
        INC(i);
102
        DEC(j)
103
    END
104
END reverse;
105
 
106
 
107
PROCEDURE reverse8* (VAR s: ARRAY OF CHAR);
108
VAR
109
    ch: CHAR;
110
    i, j: INTEGER;
111
BEGIN
112
    i := 0;
113
    j := LENGTH(s) - 1;
114
    WHILE i < j DO
115
        ch := s[i];
116
        s[i] := s[j];
117
        s[j] := ch;
118
        INC(i);
119
        DEC(j)
120
    END
121
END reverse8;
122
 
123
 
124
PROCEDURE int2str* (val: INTEGER; VAR s: ARRAY OF WCHAR);
125
VAR
126
    i: INTEGER;
127
BEGIN
128
    i := 0;
129
    REPEAT
130
        s[i] := WCHR(ORD("0") + val MOD 10);
131
        INC(i);
132
        val := val DIV 10
133
    UNTIL val = 0;
134
    s[i] := 0X;
135
    reverse(s)
136
END int2str;
137
 
138
 
139
PROCEDURE isDigit* (ch: WCHAR): BOOLEAN;
9906 akron1 140
	RETURN ("0" <= ch) & (ch <= "9")
8728 leency 141
END isDigit;
142
 
143
 
9413 akron1 144
PROCEDURE isOct* (ch: WCHAR): BOOLEAN;
9906 akron1 145
	RETURN ("0" <= ch) & (ch <= "7")
9413 akron1 146
END isOct;
147
 
148
 
8728 leency 149
PROCEDURE isHex* (ch: WCHAR): BOOLEAN;
9906 akron1 150
	RETURN ("0" <= ch) & (ch <= "9") OR ("A" <= ch) & (ch <= "F")
8728 leency 151
END isHex;
152
 
153
 
154
PROCEDURE isLetter* (ch: WCHAR): BOOLEAN;
9906 akron1 155
	RETURN ("a" <= ch) & (ch <= "z") OR ("A" <= ch) & (ch <= "Z") OR
156
		(* cyrillic *)
157
			(430X <= ch) & (ch <= 44FX) OR (410X <= ch) & (ch <= 42FX) OR
158
			(ch = 491X) OR (ch = 490X) OR (450X <= ch) & (ch <= 45FX) OR
159
			(400X <= ch) & (ch <= 40FX)
8728 leency 160
END isLetter;
161
 
162
 
9903 akron1 163
PROCEDURE upper* (VAR ch: WCHAR): BOOLEAN;
8728 leency 164
VAR
165
    res: BOOLEAN;
166
BEGIN
9903 akron1 167
    IF ("a" <= ch) & (ch <= "z") OR (430X <= ch) & (ch <= 44FX) THEN
8728 leency 168
        ch := WCHR(ORD(ch) - 20H);
169
        res := TRUE
9903 akron1 170
    ELSIF (450X <= ch) & (ch <= 45FX) THEN
8728 leency 171
        ch := WCHR(ORD(ch) - 50H);
172
        res := TRUE
173
    ELSIF ch = 491X THEN
174
        ch := 490X;
175
        res := TRUE
176
    ELSE
177
        res := FALSE
178
    END
179
    RETURN res
9903 akron1 180
END upper;
8728 leency 181
 
182
 
9903 akron1 183
PROCEDURE lower* (VAR ch: WCHAR): BOOLEAN;
8728 leency 184
VAR
185
    res: BOOLEAN;
186
BEGIN
9903 akron1 187
    IF ("A" <= ch) & (ch <= "Z") OR (410X <= ch) & (ch <= 42FX) THEN
188
        ch := WCHR(ORD(ch) + 20H);
8728 leency 189
        res := TRUE
9903 akron1 190
    ELSIF (400X <= ch) & (ch <= 40FX) THEN
191
        ch := WCHR(ORD(ch) + 50H);
192
        res := TRUE
193
    ELSIF ch = 490X THEN
194
        ch := 491X;
195
        res := TRUE
8728 leency 196
    ELSE
197
        res := FALSE
198
    END
199
    RETURN res
9903 akron1 200
END lower;
8728 leency 201
 
202
 
9909 akron1 203
PROCEDURE lcase* (ch: WCHAR): WCHAR;
204
BEGIN
205
	IF lower(ch) THEN END
206
	RETURN ch
207
END lcase;
208
 
209
 
9903 akron1 210
PROCEDURE lowcase* (VAR s: ARRAY OF WCHAR);
8728 leency 211
VAR
212
    i: INTEGER;
213
BEGIN
214
    i := LENGTH(s) - 1;
215
    WHILE i >= 0 DO
9903 akron1 216
        IF lower(s[i]) THEN
8728 leency 217
        END;
218
        DEC(i)
9210 akron1 219
    END
9903 akron1 220
END lowcase;
8728 leency 221
 
222
 
9903 akron1 223
PROCEDURE lowcase8* (VAR s: ARRAY OF CHAR);
8728 leency 224
VAR
225
    i: INTEGER;
226
BEGIN
227
    i := LENGTH(s) - 1;
228
    WHILE i >= 0 DO
9210 akron1 229
        IF ("A" <= s[i]) & (s[i] <= "Z") THEN
9903 akron1 230
        	s[i] := CHR(ORD(s[i]) + 20H)
9210 akron1 231
        END;
232
        DEC(i)
233
    END
9903 akron1 234
END lowcase8;
9210 akron1 235
 
236
 
8728 leency 237
PROCEDURE str2int* (s: ARRAY OF WCHAR; VAR val: INTEGER): BOOLEAN;
238
VAR
239
    i, temp: INTEGER;
240
    res, neg: BOOLEAN;
241
BEGIN
242
    temp := 0;
243
    res := TRUE;
244
    neg := FALSE;
245
    i := 0;
246
    WHILE (s[i] # 0X) & (s[i] = SPACE) DO
247
        INC(i)
248
    END;
249
 
250
    IF s[i] = "-" THEN
251
        INC(i);
252
        neg := TRUE
253
    ELSIF s[i] = "+" THEN
254
        INC(i)
255
    END;
256
 
257
    IF isDigit(s[i]) THEN
258
        REPEAT
9210 akron1 259
            temp := temp*10 + ORD(s[i]) - ORD("0");
8728 leency 260
            INC(i)
261
        UNTIL ~isDigit(s[i]);
262
        IF neg THEN
263
            temp := -temp
264
        END;
265
        val := temp
266
    ELSE
267
        res := FALSE
268
    END
269
 
270
    RETURN res
271
END str2int;
272
 
273
 
274
PROCEDURE getFileName* (path: ARRAY OF CHAR; VAR name: ARRAY OF CHAR; ch: CHAR);
275
VAR
276
    i, j: INTEGER;
277
BEGIN
278
    j := 0;
279
    i := LENGTH(path) - 1;
280
    WHILE (i >= 0) & (path[i] # ch) DO
281
        name[j] := path[i];
282
        DEC(i);
283
        INC(j)
284
    END;
285
    name[j] := 0X;
286
    reverse8(name)
287
END getFileName;
288
 
289
 
290
PROCEDURE getPath* (fname: ARRAY OF CHAR; VAR path: ARRAY OF CHAR);
291
VAR
292
    i, j: INTEGER;
293
BEGIN
294
    j := 0;
295
    i := LENGTH(fname) - 1;
296
    WHILE (i >= 0) & (fname[i] # SLASH) DO
297
        DEC(i)
298
    END;
299
    path := fname;
300
    path[i] := 0X
301
END getPath;
302
 
303
 
304
PROCEDURE lg10* (n: INTEGER): INTEGER;
305
VAR
306
    res: INTEGER;
307
BEGIN
308
    res := 0;
309
    WHILE n >= 10 DO
310
        n := n DIV 10;
311
        INC(res)
312
    END
313
    RETURN res
314
END lg10;
315
 
316
 
9187 akron1 317
PROCEDURE between* (a, b, c: INTEGER): BOOLEAN;
318
	RETURN (a <= b) & (b <= c)
319
END between;
320
 
321
 
9413 akron1 322
PROCEDURE inString* (c: WCHAR; s: ARRAY OF WCHAR): BOOLEAN;
323
VAR
324
	i, L: INTEGER;
325
BEGIN
326
	L := LENGTH(s);
327
	i := 0;
328
	WHILE (i < L) & (c # s[i]) DO
329
		INC(i)
330
	END
331
	RETURN i < L
332
END inString;
333
 
334
 
9907 akron1 335
PROCEDURE isWordChar* (c: WCHAR): BOOLEAN;
336
	RETURN isLetter(c) OR isDigit(c) OR (c = "_")
337
END isWordChar;
338
 
339
 
8728 leency 340
END Utils.