Rev 7983 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
7983 | leency | 1 | (* |
7597 | akron1 | 2 | BSD 2-Clause License |
6613 | leency | 3 | |
7983 | leency | 4 | Copyright (c) 2018-2020, Anton Krotov |
7597 | akron1 | 5 | All rights reserved. |
6613 | leency | 6 | *) |
7 | |||
8 | MODULE UTILS; |
||
9 | |||
7696 | akron1 | 10 | IMPORT HOST; |
6613 | leency | 11 | |
7597 | akron1 | 12 | |
6613 | leency | 13 | CONST |
14 | |||
7597 | akron1 | 15 | slash* = HOST.slash; |
8097 | maxcodehac | 16 | eol* = HOST.eol; |
6613 | leency | 17 | |
7597 | akron1 | 18 | bit_depth* = HOST.bit_depth; |
19 | maxint* = HOST.maxint; |
||
20 | minint* = HOST.minint; |
||
7693 | akron1 | 21 | |
22 | min32* = -2147483647-1; |
||
23 | max32* = 2147483647; |
||
6613 | leency | 24 | |
7983 | leency | 25 | vMajor* = 1; |
8097 | maxcodehac | 26 | vMinor* = 43; |
7693 | akron1 | 27 | |
7983 | leency | 28 | FILE_EXT* = ".ob07"; |
29 | RTL_NAME* = "RTL"; |
||
30 | |||
31 | MAX_GLOBAL_SIZE* = 1600000000; |
||
32 | |||
33 | |||
6613 | leency | 34 | VAR |
35 | |||
7597 | akron1 | 36 | time*: INTEGER; |
6613 | leency | 37 | |
7597 | akron1 | 38 | maxreal*: REAL; |
6613 | leency | 39 | |
7693 | akron1 | 40 | target*: |
6613 | leency | 41 | |
7693 | akron1 | 42 | RECORD |
43 | |||
44 | bit_depth*, |
||
45 | maxInt*, |
||
46 | minInt*, |
||
47 | maxSet*, |
||
48 | maxHex*: INTEGER; |
||
49 | |||
50 | maxReal*: REAL |
||
51 | |||
52 | END; |
||
53 | |||
54 | bit_diff*: INTEGER; |
||
55 | |||
56 | |||
7696 | akron1 | 57 | PROCEDURE FileRead* (F: INTEGER; VAR Buffer: ARRAY OF CHAR; bytes: INTEGER): INTEGER; |
7597 | akron1 | 58 | RETURN HOST.FileRead(F, Buffer, bytes) |
59 | END FileRead; |
||
6613 | leency | 60 | |
61 | |||
7597 | akron1 | 62 | PROCEDURE FileWrite* (F: INTEGER; Buffer: ARRAY OF BYTE; bytes: INTEGER): INTEGER; |
63 | RETURN HOST.FileWrite(F, Buffer, bytes) |
||
64 | END FileWrite; |
||
6613 | leency | 65 | |
66 | |||
7597 | akron1 | 67 | PROCEDURE FileCreate* (FName: ARRAY OF CHAR): INTEGER; |
68 | RETURN HOST.FileCreate(FName) |
||
69 | END FileCreate; |
||
6613 | leency | 70 | |
71 | |||
7597 | akron1 | 72 | PROCEDURE FileClose* (F: INTEGER); |
6613 | leency | 73 | BEGIN |
7597 | akron1 | 74 | HOST.FileClose(F) |
75 | END FileClose; |
||
6613 | leency | 76 | |
77 | |||
7597 | akron1 | 78 | PROCEDURE FileOpen* (FName: ARRAY OF CHAR): INTEGER; |
79 | RETURN HOST.FileOpen(FName) |
||
80 | END FileOpen; |
||
6613 | leency | 81 | |
82 | |||
8097 | maxcodehac | 83 | PROCEDURE chmod* (FName: ARRAY OF CHAR); |
84 | BEGIN |
||
85 | HOST.chmod(FName) |
||
86 | END chmod; |
||
87 | |||
88 | |||
7597 | akron1 | 89 | PROCEDURE GetArg* (i: INTEGER; VAR str: ARRAY OF CHAR); |
6613 | leency | 90 | BEGIN |
7597 | akron1 | 91 | HOST.GetArg(i, str) |
92 | END GetArg; |
||
6613 | leency | 93 | |
94 | |||
7597 | akron1 | 95 | PROCEDURE Exit* (code: INTEGER); |
6613 | leency | 96 | BEGIN |
7597 | akron1 | 97 | HOST.ExitProcess(code) |
98 | END Exit; |
||
6613 | leency | 99 | |
100 | |||
7597 | akron1 | 101 | PROCEDURE GetTickCount* (): INTEGER; |
102 | RETURN HOST.GetTickCount() |
||
103 | END GetTickCount; |
||
6613 | leency | 104 | |
105 | |||
7597 | akron1 | 106 | PROCEDURE OutChar* (c: CHAR); |
6613 | leency | 107 | BEGIN |
7597 | akron1 | 108 | HOST.OutChar(c) |
109 | END OutChar; |
||
6613 | leency | 110 | |
111 | |||
7597 | akron1 | 112 | PROCEDURE splitf* (x: REAL; VAR a, b: INTEGER): INTEGER; |
113 | RETURN HOST.splitf(x, a, b) |
||
114 | END splitf; |
||
6613 | leency | 115 | |
116 | |||
7983 | leency | 117 | PROCEDURE d2s* (x: REAL): INTEGER; |
118 | RETURN HOST.d2s(x) |
||
119 | END d2s; |
||
120 | |||
121 | |||
7597 | akron1 | 122 | PROCEDURE isRelative* (path: ARRAY OF CHAR): BOOLEAN; |
123 | RETURN HOST.isRelative(path) |
||
124 | END isRelative; |
||
6613 | leency | 125 | |
126 | |||
7597 | akron1 | 127 | PROCEDURE GetCurrentDirectory* (VAR path: ARRAY OF CHAR); |
6613 | leency | 128 | BEGIN |
7597 | akron1 | 129 | HOST.GetCurrentDirectory(path) |
130 | END GetCurrentDirectory; |
||
7107 | akron1 | 131 | |
6613 | leency | 132 | |
7597 | akron1 | 133 | PROCEDURE UnixTime* (): INTEGER; |
8097 | maxcodehac | 134 | RETURN HOST.UnixTime() |
7597 | akron1 | 135 | END UnixTime; |
6613 | leency | 136 | |
137 | |||
7983 | leency | 138 | PROCEDURE SetBitDepth* (BitDepth: INTEGER; Double: BOOLEAN); |
6613 | leency | 139 | BEGIN |
7693 | akron1 | 140 | ASSERT((BitDepth = 16) OR (BitDepth = 32) OR (BitDepth = 64)); |
141 | bit_diff := bit_depth - BitDepth; |
||
142 | ASSERT(bit_diff >= 0); |
||
143 | |||
144 | target.bit_depth := BitDepth; |
||
145 | target.maxSet := BitDepth - 1; |
||
146 | target.maxHex := BitDepth DIV 4; |
||
147 | target.minInt := ASR(minint, bit_diff); |
||
148 | target.maxInt := ASR(maxint, bit_diff); |
||
7983 | leency | 149 | |
150 | IF Double THEN |
||
151 | target.maxReal := maxreal |
||
152 | ELSE |
||
153 | target.maxReal := 1.9; |
||
154 | PACK(target.maxReal, 127) |
||
155 | END |
||
7693 | akron1 | 156 | END SetBitDepth; |
157 | |||
158 | |||
159 | PROCEDURE Byte* (n: INTEGER; idx: INTEGER): BYTE; |
||
160 | RETURN ASR(n, 8 * idx) MOD 256 |
||
161 | END Byte; |
||
162 | |||
163 | |||
164 | PROCEDURE Align* (VAR bytes: INTEGER; align: INTEGER): BOOLEAN; |
||
165 | VAR |
||
166 | res: BOOLEAN; |
||
167 | |||
168 | BEGIN |
||
169 | IF bytes MOD align # 0 THEN |
||
170 | res := maxint - bytes >= align - (bytes MOD align); |
||
171 | IF res THEN |
||
172 | bytes := bytes + align - (bytes MOD align) |
||
173 | END |
||
174 | ELSE |
||
175 | res := TRUE |
||
176 | END |
||
177 | |||
178 | RETURN res |
||
179 | END Align; |
||
180 | |||
181 | |||
182 | PROCEDURE Long* (value: INTEGER): INTEGER; |
||
183 | RETURN ASR(LSL(value, bit_diff), bit_diff) |
||
184 | END Long; |
||
185 | |||
186 | |||
187 | PROCEDURE Short* (value: INTEGER): INTEGER; |
||
188 | RETURN LSR(LSL(value, bit_diff), bit_diff) |
||
189 | END Short; |
||
190 | |||
191 | |||
192 | PROCEDURE Log2* (x: INTEGER): INTEGER; |
||
193 | VAR |
||
194 | n: INTEGER; |
||
195 | |||
196 | BEGIN |
||
197 | n := 0; |
||
198 | WHILE ~ODD(x) DO |
||
199 | x := x DIV 2; |
||
200 | INC(n) |
||
201 | END; |
||
202 | |||
203 | IF x # 1 THEN |
||
204 | n := -1 |
||
205 | END |
||
206 | |||
207 | RETURN n |
||
208 | END Log2; |
||
209 | |||
210 | |||
8097 | maxcodehac | 211 | PROCEDURE hexdgt* (n: BYTE): BYTE; |
7693 | akron1 | 212 | BEGIN |
8097 | maxcodehac | 213 | IF n < 10 THEN |
214 | INC(n, ORD("0")) |
||
215 | ELSE |
||
216 | INC(n, ORD("A") - 10) |
||
7696 | akron1 | 217 | END |
218 | |||
8097 | maxcodehac | 219 | RETURN n |
220 | END hexdgt; |
||
7696 | akron1 | 221 | |
222 | |||
223 | BEGIN |
||
7597 | akron1 | 224 | time := GetTickCount(); |
8097 | maxcodehac | 225 | maxreal := HOST.maxreal |
7983 | leency | 226 | END UTILS.> |