Subversion Repositories Kolibri OS

Rev

Rev 7983 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 7983 Rev 8097
Line 8... Line 8...
8
MODULE STRINGS;
8
MODULE STRINGS;
Line 9... Line 9...
9
 
9
 
Line -... Line 10...
-
 
10
IMPORT UTILS;
-
 
11
 
-
 
12
 
-
 
13
PROCEDURE copy* (src: ARRAY OF CHAR; VAR dst: ARRAY OF CHAR; spos, dpos, count: INTEGER);
-
 
14
BEGIN
-
 
15
    WHILE count > 0 DO
-
 
16
        dst[dpos] := src[spos];
-
 
17
        INC(spos);
-
 
18
        INC(dpos);
-
 
19
        DEC(count)
-
 
20
    END
10
IMPORT UTILS;
21
END copy;
11
 
22
 
12
 
23
 
Line 13... Line 24...
13
PROCEDURE append* (VAR s1: ARRAY OF CHAR; s2: ARRAY OF CHAR);
24
PROCEDURE append* (VAR s1: ARRAY OF CHAR; s2: ARRAY OF CHAR);
14
VAR
25
VAR
15
    n1, n2, i, j: INTEGER;
26
    n1, n2: INTEGER;
Line 16... Line 27...
16
 
27
 
Line 17... Line -...
17
BEGIN
-
 
18
    n1 := LENGTH(s1);
-
 
19
    n2 := LENGTH(s2);
-
 
20
 
28
BEGIN
21
    ASSERT(n1 + n2 < LEN(s1));
-
 
22
 
-
 
23
    i := 0;
-
 
24
    j := n1;
-
 
25
    WHILE i < n2 DO
29
    n1 := LENGTH(s1);
26
        s1[j] := s2[i];
-
 
27
        INC(i);
30
    n2 := LENGTH(s2);
Line 28... Line -...
28
        INC(j)
-
 
29
    END;
-
 
30
 
-
 
31
    s1[j] := 0X
-
 
32
 
-
 
33
END append;
-
 
34
 
-
 
35
 
-
 
36
PROCEDURE reverse (VAR s: ARRAY OF CHAR);
-
 
37
VAR
-
 
38
    i, j: INTEGER;
-
 
39
    a, b: CHAR;
-
 
40
 
-
 
41
BEGIN
-
 
42
    i := 0;
-
 
43
    j := LENGTH(s) - 1;
-
 
44
 
-
 
45
    WHILE i < j DO
-
 
46
        a := s[i];
-
 
47
        b := s[j];
-
 
48
        s[i] := b;
31
 
49
        s[j] := a;
32
    ASSERT(n1 + n2 < LEN(s1));
50
        INC(i);
33
 
51
        DEC(j)
-
 
Line 52... Line 34...
52
    END
34
    copy(s2, s1, 0, n1, n2);
53
END reverse;
35
    s1[n1 + n2] := 0X
54
 
36
END append;
55
 
37
 
56
PROCEDURE IntToStr* (x: INTEGER; VAR str: ARRAY OF CHAR);
38
 
57
VAR
39
PROCEDURE IntToStr* (x: INTEGER; VAR str: ARRAY OF CHAR);
58
    i, a: INTEGER;
40
VAR
Line 59... Line 41...
59
    minus: BOOLEAN;
41
    i, a: INTEGER;
60
 
-
 
61
BEGIN
-
 
62
    IF x = UTILS.minint THEN
-
 
63
        IF UTILS.bit_depth = 32 THEN
-
 
64
            COPY("-2147483648", str)
-
 
65
        ELSIF UTILS.bit_depth = 64 THEN
42
 
66
            COPY("-9223372036854775808", str)
43
BEGIN
67
        END
-
 
68
 
-
 
69
    ELSE
44
    IF x = UTILS.minint THEN
70
 
45
        IF UTILS.bit_depth = 32 THEN
71
        minus := x < 0;
-
 
72
        IF minus THEN
-
 
73
            x := -x
-
 
74
        END;
46
            COPY("-2147483648", str)
75
        i := 0;
-
 
76
        a := 0;
47
        ELSIF UTILS.bit_depth = 64 THEN
Line -... Line 48...
-
 
48
            COPY("-9223372036854775808", str)
-
 
49
        END
-
 
50
 
-
 
51
    ELSE
-
 
52
        i := 0;
-
 
53
        IF x < 0 THEN
77
        REPEAT
54
            x := -x;
78
            str[i] := CHR(x MOD 10 + ORD("0"));
-
 
Line -... Line 55...
-
 
55
            i := 1;
-
 
56
            str[0] := "-"
-
 
57
        END;
-
 
58
 
-
 
59
        a := x;
79
            x := x DIV 10;
60
        REPEAT
80
            INC(i)
61
            INC(i);
Line 81... Line -...
81
        UNTIL x = 0;
-
 
82
 
-
 
83
        IF minus THEN
-
 
84
            str[i] := "-";
-
 
85
            INC(i)
-
 
86
        END;
-
 
87
 
-
 
88
        str[i] := 0X;
-
 
89
        reverse(str)
-
 
90
 
-
 
91
    END
-
 
92
END IntToStr;
-
 
93
 
62
            a := a DIV 10
94
 
63
        UNTIL a = 0;
95
PROCEDURE hexdgt (n: BYTE): BYTE;
64
 
96
BEGIN
65
        str[i] := 0X;
97
    IF n < 10 THEN
66
 
98
        n := n + ORD("0")
67
        REPEAT
99
    ELSE
68
            DEC(i);
100
        n := n - 10 + ORD("A")
69
            str[i] := CHR(x MOD 10 + ORD("0"));
101
    END
70
            x := x DIV 10
Line 102... Line -...
102
 
-
 
103
    RETURN n
-
 
104
END hexdgt;
-
 
105
 
-
 
106
 
-
 
107
PROCEDURE IntToHex* (x: INTEGER; VAR str: ARRAY OF CHAR; n: INTEGER);
-
 
108
BEGIN
-
 
109
    str[n] := 0X;
-
 
110
    WHILE n > 0 DO
-
 
111
        str[n - 1] := CHR(hexdgt(x MOD 16));
-
 
112
        x := x DIV 16;
-
 
113
        DEC(n)
71
        UNTIL x = 0
114
    END
72
    END
115
END IntToHex;
73
END IntToStr;
Line 116... Line 74...
116
 
74
 
Line 183... Line 141...
183
PROCEDURE UpCase* (VAR str: ARRAY OF CHAR);
141
PROCEDURE UpCase* (VAR str: ARRAY OF CHAR);
184
VAR
142
VAR
185
    i: INTEGER;
143
    i: INTEGER;
Line 186... Line 144...
186
 
144
 
187
BEGIN
145
BEGIN
188
    i := 0;
146
    i := LENGTH(str) - 1;
189
    WHILE (i < LEN(str)) & (str[i] # 0X) DO
147
    WHILE i >= 0 DO
190
        cap(str[i]);
148
        cap(str[i]);
191
        INC(i)
149
        DEC(i)
192
    END
150
    END
Line 193... Line 151...
193
END UpCase;
151
END UpCase;