Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
8728 leency 1
(*
2
    Copyright 2021 Anton Krotov
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;
35
BEGIN
36
    WHILE n > 0 DO
37
        SYSTEM.GET(s1, c1);
38
        SYSTEM.GET(s2, c2);
39
        INC(s1, 2);
40
        INC(s2, 2);
41
        IF c1 = c2 THEN
42
            DEC(n)
43
        ELSE
44
            n := 0
45
        END
46
    END
47
    RETURN c1 = c2
48
END streq;
49
 
50
 
51
PROCEDURE append* (VAR s1: ARRAY OF WCHAR; s2: ARRAY OF WCHAR);
52
VAR
53
    n1, n2, i, j: INTEGER;
54
BEGIN
55
    n1 := LENGTH(s1);
56
    n2 := LENGTH(s2);
57
 
58
    ASSERT(n1 + n2 < LEN(s1));
59
 
60
    i := 0;
61
    j := n1;
62
    WHILE i < n2 DO
63
        s1[j] := s2[i];
64
        INC(i);
65
        INC(j)
66
    END;
67
 
68
    s1[j] := 0X
69
END append;
70
 
71
 
72
PROCEDURE append8* (VAR s1: ARRAY OF CHAR; s2: ARRAY OF CHAR);
73
VAR
74
    n1, n2, i, j: INTEGER;
75
BEGIN
76
    n1 := LENGTH(s1);
77
    n2 := LENGTH(s2);
78
 
79
    ASSERT(n1 + n2 < LEN(s1));
80
 
81
    i := 0;
82
    j := n1;
83
    WHILE i < n2 DO
84
        s1[j] := s2[i];
85
        INC(i);
86
        INC(j)
87
    END;
88
 
89
    s1[j] := 0X
90
END append8;
91
 
92
 
93
PROCEDURE reverse* (VAR s: ARRAY OF WCHAR);
94
VAR
95
    ch: WCHAR;
96
    i, j: INTEGER;
97
BEGIN
98
    i := 0;
99
    j := LENGTH(s) - 1;
100
    WHILE i < j DO
101
        ch := s[i];
102
        s[i] := s[j];
103
        s[j] := ch;
104
        INC(i);
105
        DEC(j)
106
    END
107
END reverse;
108
 
109
 
110
PROCEDURE reverse8* (VAR s: ARRAY OF CHAR);
111
VAR
112
    ch: CHAR;
113
    i, j: INTEGER;
114
BEGIN
115
    i := 0;
116
    j := LENGTH(s) - 1;
117
    WHILE i < j DO
118
        ch := s[i];
119
        s[i] := s[j];
120
        s[j] := ch;
121
        INC(i);
122
        DEC(j)
123
    END
124
END reverse8;
125
 
126
 
127
PROCEDURE int2str* (val: INTEGER; VAR s: ARRAY OF WCHAR);
128
VAR
129
    i: INTEGER;
130
BEGIN
131
    i := 0;
132
    REPEAT
133
        s[i] := WCHR(ORD("0") + val MOD 10);
134
        INC(i);
135
        val := val DIV 10
136
    UNTIL val = 0;
137
    s[i] := 0X;
138
    reverse(s)
139
END int2str;
140
 
141
 
142
PROCEDURE isDigit* (ch: WCHAR): BOOLEAN;
143
    RETURN ("0" <= ch) & (ch <= "9")
144
END isDigit;
145
 
146
 
147
PROCEDURE isHex* (ch: WCHAR): BOOLEAN;
148
    RETURN ("0" <= ch) & (ch <= "9") OR ("A" <= ch) & (ch <= "F")
149
END isHex;
150
 
151
 
152
PROCEDURE isLetter* (ch: WCHAR): BOOLEAN;
153
    RETURN ("a" <= ch) & (ch <= "z") OR ("A" <= ch) & (ch <= "Z")
154
END isLetter;
155
 
156
 
157
PROCEDURE cap* (VAR ch: WCHAR): BOOLEAN;
158
VAR
159
    res: BOOLEAN;
160
BEGIN
161
    IF ("a" <= ch) & (ch <= "z") THEN
162
        ch := WCHR(ORD(ch) - (ORD("z") - ORD("Z")));
163
        res := TRUE
164
    ELSIF (430H <= ORD(ch)) & (ORD(ch) <= 44FH) THEN
165
        ch := WCHR(ORD(ch) - 20H);
166
        res := TRUE
167
    ELSIF (450H <= ORD(ch)) & (ORD(ch) <= 45FH) THEN
168
        ch := WCHR(ORD(ch) - 50H);
169
        res := TRUE
170
    ELSIF ch = 491X THEN
171
        ch := 490X;
172
        res := TRUE
173
    ELSE
174
        res := FALSE
175
    END
176
    RETURN res
177
END cap;
178
 
179
 
180
PROCEDURE cap8 (VAR ch: CHAR): BOOLEAN;
181
VAR
182
    res: BOOLEAN;
183
BEGIN
184
    IF ("a" <= ch) & (ch <= "z") THEN
185
        ch := CHR(ORD(ch) - (ORD("z") - ORD("Z")));
186
        res := TRUE
187
    ELSE
188
        res := FALSE
189
    END
190
    RETURN res
191
END cap8;
192
 
193
 
194
PROCEDURE upcase* (VAR s: ARRAY OF CHAR);
195
VAR
196
    i: INTEGER;
197
BEGIN
198
    i := LENGTH(s) - 1;
199
    WHILE i >= 0 DO
200
        IF cap8(s[i]) THEN
201
        END;
202
        DEC(i)
9210 akron1 203
    END
8728 leency 204
END upcase;
205
 
206
 
207
PROCEDURE upcase16* (VAR s: ARRAY OF WCHAR);
208
VAR
209
    i: INTEGER;
210
BEGIN
211
    i := LENGTH(s) - 1;
212
    WHILE i >= 0 DO
213
        IF cap(s[i]) THEN
214
        END;
215
        DEC(i)
216
    END
217
END upcase16;
218
 
219
 
220
PROCEDURE low* (VAR ch: WCHAR): BOOLEAN;
221
VAR
222
    res: BOOLEAN;
223
BEGIN
224
    IF ("A" <= ch) & (ch <= "Z") THEN
225
        ch := WCHR(ORD(ch) + (ORD("z") - ORD("Z")));
226
        res := TRUE
227
    ELSIF (410H <= ORD(ch)) & (ORD(ch) <= 42FH) THEN
228
        ch := WCHR(ORD(ch) + 20H);
229
        res := TRUE
230
    ELSIF (400H <= ORD(ch)) & (ORD(ch) <= 40FH) THEN
231
        ch := WCHR(ORD(ch) + 50H);
232
        res := TRUE
233
    ELSIF ch = 490X THEN
234
        ch := 491X;
235
        res := TRUE
236
    ELSE
237
        res := FALSE
238
    END
239
    RETURN res
240
END low;
241
 
242
 
9210 akron1 243
PROCEDURE lowcase* (VAR s: ARRAY OF CHAR);
244
VAR
245
    i: INTEGER;
246
BEGIN
247
    i := LENGTH(s) - 1;
248
    WHILE i >= 0 DO
249
        IF ("A" <= s[i]) & (s[i] <= "Z") THEN
250
        	s[i] := CHR(ORD(s[i]) + 32)
251
        END;
252
        DEC(i)
253
    END
254
END lowcase;
255
 
256
 
8728 leency 257
PROCEDURE str2int* (s: ARRAY OF WCHAR; VAR val: INTEGER): BOOLEAN;
258
VAR
259
    i, temp: INTEGER;
260
    res, neg: BOOLEAN;
261
BEGIN
262
    temp := 0;
263
    res := TRUE;
264
    neg := FALSE;
265
    i := 0;
266
    WHILE (s[i] # 0X) & (s[i] = SPACE) DO
267
        INC(i)
268
    END;
269
 
270
    IF s[i] = "-" THEN
271
        INC(i);
272
        neg := TRUE
273
    ELSIF s[i] = "+" THEN
274
        INC(i)
275
    END;
276
 
277
    IF isDigit(s[i]) THEN
278
        REPEAT
9210 akron1 279
            temp := temp*10 + ORD(s[i]) - ORD("0");
8728 leency 280
            INC(i)
281
        UNTIL ~isDigit(s[i]);
282
        IF neg THEN
283
            temp := -temp
284
        END;
285
        val := temp
286
    ELSE
287
        res := FALSE
288
    END
289
 
290
    RETURN res
291
END str2int;
292
 
293
 
294
PROCEDURE getFileName* (path: ARRAY OF CHAR; VAR name: ARRAY OF CHAR; ch: CHAR);
295
VAR
296
    i, j: INTEGER;
297
BEGIN
298
    j := 0;
299
    i := LENGTH(path) - 1;
300
    WHILE (i >= 0) & (path[i] # ch) DO
301
        name[j] := path[i];
302
        DEC(i);
303
        INC(j)
304
    END;
305
    name[j] := 0X;
306
    reverse8(name)
307
END getFileName;
308
 
309
 
310
PROCEDURE getPath* (fname: ARRAY OF CHAR; VAR path: ARRAY OF CHAR);
311
VAR
312
    i, j: INTEGER;
313
BEGIN
314
    j := 0;
315
    i := LENGTH(fname) - 1;
316
    WHILE (i >= 0) & (fname[i] # SLASH) DO
317
        DEC(i)
318
    END;
319
    path := fname;
320
    path[i] := 0X
321
END getPath;
322
 
323
 
324
PROCEDURE lg10* (n: INTEGER): INTEGER;
325
VAR
326
    res: INTEGER;
327
BEGIN
328
    res := 0;
329
    WHILE n >= 10 DO
330
        n := n DIV 10;
331
        INC(res)
332
    END
333
    RETURN res
334
END lg10;
335
 
336
 
337
PROCEDURE sgn* (x: INTEGER): INTEGER;
338
BEGIN
339
    IF x > 0 THEN
340
        x := 1
341
    ELSIF x < 0 THEN
342
        x := -1
343
    ELSE
344
        x := 0
345
    END
346
    RETURN x
347
END sgn;
348
 
349
 
350
PROCEDURE ptr2str* (ptr: INTEGER; VAR s: ARRAY OF CHAR);
351
VAR
352
    i, n: INTEGER;
353
BEGIN
354
    i := -1;
355
    n := LEN(s) - 1;
356
    REPEAT
357
        INC(i);
358
        SYSTEM.GET(ptr, s[i]);
359
        INC(ptr)
360
    UNTIL (i = n) OR (s[i] = 0X);
361
    s[i] := 0X
362
END ptr2str;
363
 
364
 
9187 akron1 365
PROCEDURE between* (a, b, c: INTEGER): BOOLEAN;
366
	RETURN (a <= b) & (b <= c)
367
END between;
368
 
369
 
8728 leency 370
END Utils.