Subversion Repositories Kolibri OS

Rev

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