Subversion Repositories Kolibri OS

Rev

Rev 9628 | Rev 9903 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
8728 leency 1
(*
9628 akron1 2
    Copyright 2021, 2022 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
 
26
    SPACE* = 20X;
27
    SLASH* = "/";
28
 
29
    OS* = "KOS";
30
 
31
 
32
PROCEDURE streq* (s1, s2: INTEGER; n: INTEGER): BOOLEAN;
33
VAR
34
    c1, c2: WCHAR;
9659 akron1 35
    res: BOOLEAN;
8728 leency 36
BEGIN
9659 akron1 37
	res := TRUE;
38
    WHILE (n > 0) & res DO
8728 leency 39
        SYSTEM.GET(s1, c1);
40
        SYSTEM.GET(s2, c2);
9659 akron1 41
        res := c1 = c2;
42
        INC(s1, SYSTEM.SIZE(WCHAR));
43
        INC(s2, SYSTEM.SIZE(WCHAR));
44
        DEC(n)
8728 leency 45
    END
9659 akron1 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;
140
    RETURN ("0" <= ch) & (ch <= "9")
141
END isDigit;
142
 
143
 
9413 akron1 144
PROCEDURE isOct* (ch: WCHAR): BOOLEAN;
145
    RETURN ("0" <= ch) & (ch <= "7")
146
END isOct;
147
 
148
 
8728 leency 149
PROCEDURE isHex* (ch: WCHAR): BOOLEAN;
150
    RETURN ("0" <= ch) & (ch <= "9") OR ("A" <= ch) & (ch <= "F")
151
END isHex;
152
 
153
 
154
PROCEDURE isLetter* (ch: WCHAR): BOOLEAN;
155
    RETURN ("a" <= ch) & (ch <= "z") OR ("A" <= ch) & (ch <= "Z")
156
END isLetter;
157
 
158
 
159
PROCEDURE cap* (VAR ch: WCHAR): BOOLEAN;
160
VAR
161
    res: BOOLEAN;
162
BEGIN
163
    IF ("a" <= ch) & (ch <= "z") THEN
164
        ch := WCHR(ORD(ch) - (ORD("z") - ORD("Z")));
165
        res := TRUE
166
    ELSIF (430H <= ORD(ch)) & (ORD(ch) <= 44FH) THEN
167
        ch := WCHR(ORD(ch) - 20H);
168
        res := TRUE
169
    ELSIF (450H <= ORD(ch)) & (ORD(ch) <= 45FH) THEN
170
        ch := WCHR(ORD(ch) - 50H);
171
        res := TRUE
172
    ELSIF ch = 491X THEN
173
        ch := 490X;
174
        res := TRUE
175
    ELSE
176
        res := FALSE
177
    END
178
    RETURN res
179
END cap;
180
 
181
 
182
PROCEDURE cap8 (VAR ch: CHAR): BOOLEAN;
183
VAR
184
    res: BOOLEAN;
185
BEGIN
186
    IF ("a" <= ch) & (ch <= "z") THEN
187
        ch := CHR(ORD(ch) - (ORD("z") - ORD("Z")));
188
        res := TRUE
189
    ELSE
190
        res := FALSE
191
    END
192
    RETURN res
193
END cap8;
194
 
195
 
196
PROCEDURE upcase* (VAR s: ARRAY OF CHAR);
197
VAR
198
    i: INTEGER;
199
BEGIN
200
    i := LENGTH(s) - 1;
201
    WHILE i >= 0 DO
202
        IF cap8(s[i]) THEN
203
        END;
204
        DEC(i)
9210 akron1 205
    END
8728 leency 206
END upcase;
207
 
208
 
209
PROCEDURE upcase16* (VAR s: ARRAY OF WCHAR);
210
VAR
211
    i: INTEGER;
212
BEGIN
213
    i := LENGTH(s) - 1;
214
    WHILE i >= 0 DO
215
        IF cap(s[i]) THEN
216
        END;
217
        DEC(i)
218
    END
219
END upcase16;
220
 
221
 
222
PROCEDURE low* (VAR ch: WCHAR): BOOLEAN;
223
VAR
224
    res: BOOLEAN;
225
BEGIN
226
    IF ("A" <= ch) & (ch <= "Z") THEN
227
        ch := WCHR(ORD(ch) + (ORD("z") - ORD("Z")));
228
        res := TRUE
229
    ELSIF (410H <= ORD(ch)) & (ORD(ch) <= 42FH) THEN
230
        ch := WCHR(ORD(ch) + 20H);
231
        res := TRUE
232
    ELSIF (400H <= ORD(ch)) & (ORD(ch) <= 40FH) THEN
233
        ch := WCHR(ORD(ch) + 50H);
234
        res := TRUE
235
    ELSIF ch = 490X THEN
236
        ch := 491X;
237
        res := TRUE
238
    ELSE
239
        res := FALSE
240
    END
241
    RETURN res
242
END low;
243
 
244
 
9210 akron1 245
PROCEDURE lowcase* (VAR s: ARRAY OF CHAR);
246
VAR
247
    i: INTEGER;
248
BEGIN
249
    i := LENGTH(s) - 1;
250
    WHILE i >= 0 DO
251
        IF ("A" <= s[i]) & (s[i] <= "Z") THEN
252
        	s[i] := CHR(ORD(s[i]) + 32)
253
        END;
254
        DEC(i)
255
    END
256
END lowcase;
257
 
258
 
8728 leency 259
PROCEDURE str2int* (s: ARRAY OF WCHAR; VAR val: INTEGER): BOOLEAN;
260
VAR
261
    i, temp: INTEGER;
262
    res, neg: BOOLEAN;
263
BEGIN
264
    temp := 0;
265
    res := TRUE;
266
    neg := FALSE;
267
    i := 0;
268
    WHILE (s[i] # 0X) & (s[i] = SPACE) DO
269
        INC(i)
270
    END;
271
 
272
    IF s[i] = "-" THEN
273
        INC(i);
274
        neg := TRUE
275
    ELSIF s[i] = "+" THEN
276
        INC(i)
277
    END;
278
 
279
    IF isDigit(s[i]) THEN
280
        REPEAT
9210 akron1 281
            temp := temp*10 + ORD(s[i]) - ORD("0");
8728 leency 282
            INC(i)
283
        UNTIL ~isDigit(s[i]);
284
        IF neg THEN
285
            temp := -temp
286
        END;
287
        val := temp
288
    ELSE
289
        res := FALSE
290
    END
291
 
292
    RETURN res
293
END str2int;
294
 
295
 
296
PROCEDURE getFileName* (path: ARRAY OF CHAR; VAR name: ARRAY OF CHAR; ch: CHAR);
297
VAR
298
    i, j: INTEGER;
299
BEGIN
300
    j := 0;
301
    i := LENGTH(path) - 1;
302
    WHILE (i >= 0) & (path[i] # ch) DO
303
        name[j] := path[i];
304
        DEC(i);
305
        INC(j)
306
    END;
307
    name[j] := 0X;
308
    reverse8(name)
309
END getFileName;
310
 
311
 
312
PROCEDURE getPath* (fname: ARRAY OF CHAR; VAR path: ARRAY OF CHAR);
313
VAR
314
    i, j: INTEGER;
315
BEGIN
316
    j := 0;
317
    i := LENGTH(fname) - 1;
318
    WHILE (i >= 0) & (fname[i] # SLASH) DO
319
        DEC(i)
320
    END;
321
    path := fname;
322
    path[i] := 0X
323
END getPath;
324
 
325
 
326
PROCEDURE lg10* (n: INTEGER): INTEGER;
327
VAR
328
    res: INTEGER;
329
BEGIN
330
    res := 0;
331
    WHILE n >= 10 DO
332
        n := n DIV 10;
333
        INC(res)
334
    END
335
    RETURN res
336
END lg10;
337
 
338
 
339
PROCEDURE sgn* (x: INTEGER): INTEGER;
340
BEGIN
341
    IF x > 0 THEN
342
        x := 1
343
    ELSIF x < 0 THEN
344
        x := -1
345
    ELSE
346
        x := 0
347
    END
348
    RETURN x
349
END sgn;
350
 
351
 
9187 akron1 352
PROCEDURE between* (a, b, c: INTEGER): BOOLEAN;
353
	RETURN (a <= b) & (b <= c)
354
END between;
355
 
356
 
9413 akron1 357
PROCEDURE inString* (c: WCHAR; s: ARRAY OF WCHAR): BOOLEAN;
358
VAR
359
	i, L: INTEGER;
360
BEGIN
361
	L := LENGTH(s);
362
	i := 0;
363
	WHILE (i < L) & (c # s[i]) DO
364
		INC(i)
365
	END
366
	RETURN i < L
367
END inString;
368
 
369
 
8728 leency 370
END Utils.