Subversion Repositories Kolibri OS

Rev

Rev 7107 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 7107 Rev 7597
Line 1... Line 1...
1
(*
1
(*
2
    Copyright 2016, 2017 Anton Krotov
2
    BSD 2-Clause License
Line 3... Line -...
3
 
-
 
4
    This program is free software: you can redistribute it and/or modify
-
 
5
    it under the terms of the GNU Lesser General Public License as published by
3
 
6
    the Free Software Foundation, either version 3 of the License, or
4
    Copyright (c) 2018, 2019, Anton Krotov
7
    (at your option) any later version.
-
 
8
 
-
 
9
    This program is distributed in the hope that it will be useful,
-
 
10
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-
 
11
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-
 
12
    GNU Lesser General Public License for more details.
-
 
13
 
-
 
14
    You should have received a copy of the GNU Lesser General Public License
-
 
15
    along with this program.  If not, see .
5
    All rights reserved.
Line 16... Line 6...
16
*)
6
*)
Line 17... Line 7...
17
 
7
 
-
 
8
MODULE HOST;
Line 18... Line 9...
18
MODULE HOST;
9
 
Line -... Line 10...
-
 
10
IMPORT SYSTEM, RTL;
19
 
11
 
-
 
12
 
-
 
13
CONST
-
 
14
 
-
 
15
    slash* = "\";
-
 
16
    OS* = "WINDOWS";
20
IMPORT sys := SYSTEM, API;
17
 
-
 
18
    bit_depth* = RTL.bit_depth;
-
 
19
    maxint* = RTL.maxint;
Line 21... Line -...
21
 
-
 
Line 22... Line 20...
22
CONST
20
    minint* = RTL.minint;
Line -... Line 161...
-
 
161
        ELSIF c = 22X THEN
-
 
162
            cond := B
-
 
163
        ELSIF c = 0X THEN
-
 
164
            cond := 6
-
 
165
        ELSE
-
 
166
            cond := C
-
 
167
        END
-
 
168
    END ChangeCond;
-
 
169
 
-
 
170
 
-
 
171
BEGIN
-
 
172
    p := _GetCommandLine();
-
 
173
    cond := 0;
-
 
174
    count := 0;
-
 
175
    WHILE (count < MAX_PARAM) & (cond # 6) DO
-
 
176
        c := GetChar(p);
-
 
177
        CASE cond OF
-
 
178
        |0: ChangeCond(0, 4, 1, cond, c); IF cond = 1 THEN Params[count, 0] := p END
-
 
179
        |1: ChangeCond(0, 3, 1, cond, c); IF cond IN {0, 6} THEN Params[count, 1] := p - 1; INC(count) END
-
 
180
        |3: ChangeCond(3, 1, 3, cond, c); IF cond = 6 THEN Params[count, 1] := p - 1; INC(count) END
-
 
181
        |4: ChangeCond(5, 0, 5, cond, c); IF cond = 5 THEN Params[count, 0] := p END
-
 
182
        |5: ChangeCond(5, 1, 5, cond, c); IF cond = 6 THEN Params[count, 1] := p - 1; INC(count) END
-
 
183
        |6:
-
 
184
        END;
-
 
185
        INC(p)
-
 
186
    END;
-
 
187
    argc := count
-
 
188
END ParamParse;
-
 
189
 
-
 
190
 
-
 
191
PROCEDURE GetArg* (n: INTEGER; VAR s: ARRAY OF CHAR);
-
 
192
VAR
-
 
193
    i, j, len: INTEGER;
-
 
194
    c: CHAR;
-
 
195
 
-
 
196
BEGIN
-
 
197
    j := 0;
-
 
198
    IF n < argc THEN
-
 
199
        len := LEN(s) - 1;
-
 
200
        i := Params[n, 0];
-
 
201
        WHILE (j < len) & (i <= Params[n, 1]) DO
-
 
202
            c := GetChar(i);
-
 
203
            IF c # 22X THEN
-
 
204
                s[j] := c;
-
 
205
                INC(j)
-
 
206
            END;
-
 
207
            INC(i)
-
 
208
        END
-
 
209
    END;
-
 
210
    s[j] := 0X
-
 
211
END GetArg;
-
 
212
 
-
 
213
 
-
 
214
PROCEDURE FileRead* (F: INTEGER; VAR Buffer: ARRAY OF BYTE; bytes: INTEGER): INTEGER;
-
 
215
VAR
-
 
216
    res, n: INTEGER;
-
 
217
 
-
 
218
BEGIN
-
 
219
    IF _ReadFile(F, SYSTEM.ADR(Buffer[0]), bytes, n, NIL) = 0 THEN
-
 
220
        res := -1
-
 
221
    ELSE
-
 
222
        res := n
-
 
223
    END
-
 
224
 
-
 
225
    RETURN res
-
 
226
END FileRead;
-
 
227
 
-
 
228
 
-
 
229
PROCEDURE FileWrite* (F: INTEGER; Buffer: ARRAY OF BYTE; bytes: INTEGER): INTEGER;
-
 
230
VAR
-
 
231
    res, n: INTEGER;
-
 
232
 
-
 
233
BEGIN
-
 
234
    IF _WriteFile(F, SYSTEM.ADR(Buffer[0]), bytes, n, NIL) = 0 THEN
-
 
235
        res := -1
-
 
236
    ELSE
-
 
237
        res := n
-
 
238
    END
-
 
239
 
-
 
240
    RETURN res
-
 
241
END FileWrite;
-
 
242
 
-
 
243
 
-
 
244
PROCEDURE FileCreate* (FName: ARRAY OF CHAR): INTEGER;
-
 
245
    RETURN _CreateFile(SYSTEM.ADR(FName[0]), 0C0000000H, 0, NIL, 2, 80H, 0)
-
 
246
END FileCreate;
-
 
247
 
-
 
248
 
-
 
249
PROCEDURE FileClose* (F: INTEGER);
-
 
250
BEGIN
-
 
251
    _CloseHandle(F)
-
 
252
END FileClose;
-
 
253
 
-
 
254
 
-
 
255
PROCEDURE FileOpen* (FName: ARRAY OF CHAR): INTEGER;
-
 
256
VAR
-
 
257
    ofstr: OFSTRUCT;
-
 
258
    res:   INTEGER;
-
 
259
 
-
 
260
BEGIN
-
 
261
    res := _OpenFile(SYSTEM.ADR(FName[0]), ofstr, 0);
-
 
262
    IF res = 0FFFFFFFFH THEN
-
 
263
        res := -1
-
 
264
    END
-
 
265
 
-
 
266
    RETURN res
-
 
267
END FileOpen;
-
 
268
 
-
 
269
 
-
 
270
PROCEDURE OutChar* (c: CHAR);
-
 
271
VAR
-
 
272
    count: INTEGER;
-
 
273
BEGIN
-
 
274
    _WriteFile(hConsoleOutput, SYSTEM.ADR(c), 1, count, NIL)
-
 
275
END OutChar;
-
 
276
 
-
 
277
 
-
 
278
PROCEDURE GetTickCount* (): INTEGER;
-
 
279
    RETURN _GetTickCount() DIV 10
-
 
280
END GetTickCount;
-
 
281
 
-
 
282
 
-
 
283
PROCEDURE letter (c: CHAR): BOOLEAN;
-
 
284
    RETURN ("a" <= c) & (c <= "z") OR ("A" <= c) & (c <= "Z")
-
 
285
END letter;
-
 
286
 
-
 
287
 
-
 
288
PROCEDURE isRelative* (path: ARRAY OF CHAR): BOOLEAN;
-
 
289
    RETURN ~(letter(path[0]) & (path[1] = ":"))
-
 
290
END isRelative;
-
 
291
 
-
 
292
 
-
 
293
PROCEDURE now* (VAR year, month, day, hour, min, sec: INTEGER);
-
 
294
VAR
-
 
295
    T: TSystemTime;
-
 
296
 
-
 
297
BEGIN
-
 
298
    _GetSystemTime(T);
-
 
299
    year  := ORD(T.Year);
-
 
300
    month := ORD(T.Month);
-
 
301
    day   := ORD(T.Day);
-
 
302
    hour  := ORD(T.Hour);
-
 
303
    min   := ORD(T.Min);
-
 
304
    sec   := ORD(T.Sec)
-
 
305
END now;
-
 
306
 
-
 
307
 
-
 
308
PROCEDURE UnixTime* (): INTEGER;
-
 
309
    RETURN 0
-
 
310
END UnixTime;
-
 
311
 
-
 
312
 
-
 
313
PROCEDURE splitf* (x: REAL; VAR a, b: INTEGER): INTEGER;
-
 
314
VAR
-
 
315
    res: INTEGER;
-
 
316
 
-
 
317
BEGIN
-
 
318
    a := 0;
-
 
319
    b := 0;
-
 
320
    SYSTEM.MOVE(SYSTEM.ADR(x), SYSTEM.ADR(a), 4);
-
 
321
    SYSTEM.MOVE(SYSTEM.ADR(x) + 4, SYSTEM.ADR(b), 4);
130
  GetProc("SetFilePointer", lib, sys.ADR(SetFilePointer));
322
    SYSTEM.GET(SYSTEM.ADR(x), res)
131
  ExitProcess := API.ExitProcess;
323
    RETURN res