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