Subversion Repositories Kolibri OS

Rev

Rev 7597 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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