Subversion Repositories Kolibri OS

Rev

Rev 6613 | 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) 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
 
7597 akron1 71
PROCEDURE ReadFile (F: INTEGER; VAR Buffer: ARRAY OF BYTE; bytes: INTEGER): INTEGER;
72
    RETURN API.fread(SYSTEM.ADR(Buffer[0]), 1, bytes, F)
73
END ReadFile;
74
 
75
 
76
PROCEDURE WriteFile (F: INTEGER; Buffer: ARRAY OF BYTE; bytes: INTEGER): INTEGER;
77
    RETURN API.fwrite(SYSTEM.ADR(Buffer[0]), 1, bytes, F)
78
END WriteFile;
79
 
80
 
81
PROCEDURE FileRead* (F: INTEGER; VAR Buffer: ARRAY OF BYTE; bytes: INTEGER): INTEGER;
82
VAR
83
    res: INTEGER;
84
 
6613 leency 85
BEGIN
7597 akron1 86
    res := ReadFile(F, Buffer, bytes);
87
    IF res <= 0 THEN
88
        res := -1
89
    END
6613 leency 90
 
7597 akron1 91
    RETURN res
92
END FileRead;
6613 leency 93
 
94
 
7597 akron1 95
PROCEDURE FileWrite* (F: INTEGER; Buffer: ARRAY OF BYTE; bytes: INTEGER): INTEGER;
96
VAR
97
    res: INTEGER;
98
 
6613 leency 99
BEGIN
7597 akron1 100
    res := WriteFile(F, Buffer, bytes);
101
    IF res <= 0 THEN
102
        res := -1
103
    END
6613 leency 104
 
7597 akron1 105
    RETURN res
106
END FileWrite;
107
 
108
 
109
PROCEDURE FileCreate* (FName: ARRAY OF CHAR): INTEGER;
110
    RETURN API.fopen(SYSTEM.ADR(FName[0]), SYSTEM.SADR("wb"))
111
END FileCreate;
112
 
113
 
114
PROCEDURE FileClose* (File: INTEGER);
6613 leency 115
BEGIN
7597 akron1 116
    File := API.fclose(File)
117
END FileClose;
6613 leency 118
 
7597 akron1 119
 
120
PROCEDURE FileOpen* (FName: ARRAY OF CHAR): INTEGER;
121
    RETURN API.fopen(SYSTEM.ADR(FName[0]), SYSTEM.SADR("rb"))
122
END FileOpen;
123
 
124
 
125
PROCEDURE OutChar* (c: CHAR);
6613 leency 126
BEGIN
7597 akron1 127
    API.putc(c)
128
END OutChar;
6613 leency 129
 
7597 akron1 130
 
131
PROCEDURE GetTickCount* (): INTEGER;
132
VAR
133
    tp:  API.TP;
134
    res: INTEGER;
135
 
6613 leency 136
BEGIN
7597 akron1 137
    IF API.clock_gettime(0, tp) = 0 THEN
138
        res := tp[0] * 100 + tp[1] DIV 10000000
139
    ELSE
140
        res := 0
141
    END
6613 leency 142
 
7597 akron1 143
    RETURN res
144
END GetTickCount;
6613 leency 145
 
7597 akron1 146
 
147
PROCEDURE isRelative* (path: ARRAY OF CHAR): BOOLEAN;
148
    RETURN path[0] # slash
149
END isRelative;
150
 
151
 
152
PROCEDURE now* (VAR year, month, day, hour, min, sec: INTEGER);
153
END now;
154
 
155
 
156
PROCEDURE UnixTime* (): INTEGER;
157
    RETURN API.time(0)
158
END UnixTime;
159
 
160
 
161
PROCEDURE splitf* (x: REAL; VAR a, b: INTEGER): INTEGER;
162
VAR
163
    res: INTEGER;
164
 
165
BEGIN
166
    a := 0;
167
    b := 0;
168
    SYSTEM.MOVE(SYSTEM.ADR(x), SYSTEM.ADR(a), 4);
169
    SYSTEM.MOVE(SYSTEM.ADR(x) + 4, SYSTEM.ADR(b), 4);
170
    SYSTEM.GET(SYSTEM.ADR(x), res)
171
    RETURN res
172
END splitf;
173
 
174
 
175
BEGIN
176
    eol := 0AX;
177
    SYSTEM.GET(API.MainParam, argc)
6613 leency 178
END HOST.