Subversion Repositories Kolibri OS

Rev

Rev 7597 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
7696 akron1 1
(*
7597 akron1 2
    BSD 2-Clause License
6613 leency 3
 
7597 akron1 4
    Copyright (c) 2019, Anton Krotov
5
    All rights reserved.
6613 leency 6
*)
7
 
8
MODULE HOST;
9
 
7597 akron1 10
IMPORT SYSTEM, API, RTL;
6613 leency 11
 
7597 akron1 12
 
6613 leency 13
CONST
14
 
7597 akron1 15
    slash* = "/";
16
    OS* = "LINUX";
6613 leency 17
 
7597 akron1 18
    bit_depth* = RTL.bit_depth;
19
    maxint* = RTL.maxint;
20
    minint* = RTL.minint;
21
 
22
 
6613 leency 23
VAR
24
 
7597 akron1 25
    argc: INTEGER;
6613 leency 26
 
7597 akron1 27
    eol*: ARRAY 2 OF CHAR;
6613 leency 28
 
29
 
7597 akron1 30
PROCEDURE ExitProcess* (code: INTEGER);
6613 leency 31
BEGIN
7597 akron1 32
    API.exit(code)
33
END ExitProcess;
6613 leency 34
 
7597 akron1 35
 
36
PROCEDURE GetArg* (n: INTEGER; VAR s: ARRAY OF CHAR);
37
VAR
38
    i, len, ptr: INTEGER;
39
    c: CHAR;
40
 
6613 leency 41
BEGIN
7597 akron1 42
    i := 0;
43
    len := LEN(s) - 1;
44
    IF (n < argc) & (len > 0) THEN
45
        SYSTEM.GET(API.MainParam + (n + 1) * SYSTEM.SIZE(INTEGER), ptr);
46
        REPEAT
47
            SYSTEM.GET(ptr, c);
48
            s[i] := c;
49
            INC(i);
50
            INC(ptr)
51
        UNTIL (c = 0X) OR (i = len)
52
    END;
53
    s[i] := 0X
54
END GetArg;
6613 leency 55
 
7597 akron1 56
 
57
PROCEDURE GetCurrentDirectory* (VAR path: ARRAY OF CHAR);
58
VAR
59
    n: INTEGER;
60
 
6613 leency 61
BEGIN
7597 akron1 62
    GetArg(0, path);
63
    n := LENGTH(path) - 1;
64
    WHILE path[n] # slash DO
65
        DEC(n)
66
    END;
67
    path[n + 1] := 0X
68
END GetCurrentDirectory;
6613 leency 69
 
70
 
7696 akron1 71
PROCEDURE FileRead* (F: INTEGER; VAR Buffer: ARRAY OF CHAR; bytes: INTEGER): INTEGER;
7597 akron1 72
VAR
73
    res: INTEGER;
74
 
6613 leency 75
BEGIN
7696 akron1 76
    res := API.fread(SYSTEM.ADR(Buffer[0]), 1, bytes, F);
7597 akron1 77
    IF res <= 0 THEN
78
        res := -1
79
    END
6613 leency 80
 
7597 akron1 81
    RETURN res
82
END FileRead;
6613 leency 83
 
84
 
7597 akron1 85
PROCEDURE FileWrite* (F: INTEGER; Buffer: ARRAY OF BYTE; bytes: INTEGER): INTEGER;
86
VAR
87
    res: INTEGER;
88
 
6613 leency 89
BEGIN
7696 akron1 90
    res := API.fwrite(SYSTEM.ADR(Buffer[0]), 1, bytes, F);
7597 akron1 91
    IF res <= 0 THEN
92
        res := -1
93
    END
6613 leency 94
 
7597 akron1 95
    RETURN res
96
END FileWrite;
97
 
98
 
99
PROCEDURE FileCreate* (FName: ARRAY OF CHAR): INTEGER;
100
    RETURN API.fopen(SYSTEM.ADR(FName[0]), SYSTEM.SADR("wb"))
101
END FileCreate;
102
 
103
 
104
PROCEDURE FileClose* (File: INTEGER);
6613 leency 105
BEGIN
7597 akron1 106
    File := API.fclose(File)
107
END FileClose;
6613 leency 108
 
7597 akron1 109
 
110
PROCEDURE FileOpen* (FName: ARRAY OF CHAR): INTEGER;
111
    RETURN API.fopen(SYSTEM.ADR(FName[0]), SYSTEM.SADR("rb"))
112
END FileOpen;
113
 
114
 
115
PROCEDURE OutChar* (c: CHAR);
6613 leency 116
BEGIN
7597 akron1 117
    API.putc(c)
118
END OutChar;
6613 leency 119
 
7597 akron1 120
 
121
PROCEDURE GetTickCount* (): INTEGER;
122
VAR
123
    tp:  API.TP;
124
    res: INTEGER;
125
 
6613 leency 126
BEGIN
7597 akron1 127
    IF API.clock_gettime(0, tp) = 0 THEN
128
        res := tp[0] * 100 + tp[1] DIV 10000000
129
    ELSE
130
        res := 0
131
    END
6613 leency 132
 
7597 akron1 133
    RETURN res
134
END GetTickCount;
6613 leency 135
 
7597 akron1 136
 
137
PROCEDURE isRelative* (path: ARRAY OF CHAR): BOOLEAN;
138
    RETURN path[0] # slash
139
END isRelative;
140
 
141
 
142
PROCEDURE now* (VAR year, month, day, hour, min, sec: INTEGER);
143
END now;
144
 
145
 
146
PROCEDURE UnixTime* (): INTEGER;
147
    RETURN API.time(0)
148
END UnixTime;
149
 
150
 
151
PROCEDURE splitf* (x: REAL; VAR a, b: INTEGER): INTEGER;
152
VAR
153
    res: INTEGER;
154
 
155
BEGIN
156
    a := 0;
157
    b := 0;
158
    SYSTEM.MOVE(SYSTEM.ADR(x), SYSTEM.ADR(a), 4);
159
    SYSTEM.MOVE(SYSTEM.ADR(x) + 4, SYSTEM.ADR(b), 4);
160
    SYSTEM.GET(SYSTEM.ADR(x), res)
161
    RETURN res
162
END splitf;
163
 
164
 
165
BEGIN
166
    eol := 0AX;
167
    SYSTEM.GET(API.MainParam, argc)
7696 akron1 168
END HOST.