Subversion Repositories Kolibri OS

Rev

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.