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; |