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.=>=>> |