Rev 7696 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
7983 | leency | 1 | (* |
7597 | akron1 | 2 | BSD 2-Clause License |
6613 | leency | 3 | |
7983 | leency | 4 | Copyright (c) 2019-2020, Anton Krotov |
7597 | akron1 | 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 | |
7983 | leency | 29 | maxreal*: REAL; |
6613 | leency | 30 | |
7983 | leency | 31 | |
7597 | akron1 | 32 | PROCEDURE ExitProcess* (code: INTEGER); |
6613 | leency | 33 | BEGIN |
7597 | akron1 | 34 | API.exit(code) |
35 | END ExitProcess; |
||
6613 | leency | 36 | |
7597 | akron1 | 37 | |
38 | PROCEDURE GetArg* (n: INTEGER; VAR s: ARRAY OF CHAR); |
||
39 | VAR |
||
40 | i, len, ptr: INTEGER; |
||
41 | c: CHAR; |
||
42 | |||
6613 | leency | 43 | BEGIN |
7597 | akron1 | 44 | i := 0; |
45 | len := LEN(s) - 1; |
||
46 | IF (n < argc) & (len > 0) THEN |
||
47 | SYSTEM.GET(API.MainParam + (n + 1) * SYSTEM.SIZE(INTEGER), ptr); |
||
48 | REPEAT |
||
49 | SYSTEM.GET(ptr, c); |
||
50 | s[i] := c; |
||
51 | INC(i); |
||
52 | INC(ptr) |
||
53 | UNTIL (c = 0X) OR (i = len) |
||
54 | END; |
||
55 | s[i] := 0X |
||
56 | END GetArg; |
||
6613 | leency | 57 | |
7597 | akron1 | 58 | |
59 | PROCEDURE GetCurrentDirectory* (VAR path: ARRAY OF CHAR); |
||
60 | VAR |
||
61 | n: INTEGER; |
||
62 | |||
6613 | leency | 63 | BEGIN |
7597 | akron1 | 64 | GetArg(0, path); |
65 | n := LENGTH(path) - 1; |
||
66 | WHILE path[n] # slash DO |
||
67 | DEC(n) |
||
68 | END; |
||
69 | path[n + 1] := 0X |
||
70 | END GetCurrentDirectory; |
||
6613 | leency | 71 | |
72 | |||
7696 | akron1 | 73 | PROCEDURE FileRead* (F: INTEGER; VAR Buffer: ARRAY OF CHAR; bytes: INTEGER): INTEGER; |
7597 | akron1 | 74 | VAR |
75 | res: INTEGER; |
||
76 | |||
6613 | leency | 77 | BEGIN |
7696 | akron1 | 78 | res := API.fread(SYSTEM.ADR(Buffer[0]), 1, bytes, F); |
7597 | akron1 | 79 | IF res <= 0 THEN |
80 | res := -1 |
||
81 | END |
||
6613 | leency | 82 | |
7597 | akron1 | 83 | RETURN res |
84 | END FileRead; |
||
6613 | leency | 85 | |
86 | |||
7597 | akron1 | 87 | PROCEDURE FileWrite* (F: INTEGER; Buffer: ARRAY OF BYTE; bytes: INTEGER): INTEGER; |
88 | VAR |
||
89 | res: INTEGER; |
||
90 | |||
6613 | leency | 91 | BEGIN |
7696 | akron1 | 92 | res := API.fwrite(SYSTEM.ADR(Buffer[0]), 1, bytes, F); |
7597 | akron1 | 93 | IF res <= 0 THEN |
94 | res := -1 |
||
95 | END |
||
6613 | leency | 96 | |
7597 | akron1 | 97 | RETURN res |
98 | END FileWrite; |
||
99 | |||
100 | |||
101 | PROCEDURE FileCreate* (FName: ARRAY OF CHAR): INTEGER; |
||
102 | RETURN API.fopen(SYSTEM.ADR(FName[0]), SYSTEM.SADR("wb")) |
||
103 | END FileCreate; |
||
104 | |||
105 | |||
106 | PROCEDURE FileClose* (File: INTEGER); |
||
6613 | leency | 107 | BEGIN |
7597 | akron1 | 108 | File := API.fclose(File) |
109 | END FileClose; |
||
6613 | leency | 110 | |
7597 | akron1 | 111 | |
112 | PROCEDURE FileOpen* (FName: ARRAY OF CHAR): INTEGER; |
||
113 | RETURN API.fopen(SYSTEM.ADR(FName[0]), SYSTEM.SADR("rb")) |
||
114 | END FileOpen; |
||
115 | |||
116 | |||
117 | PROCEDURE OutChar* (c: CHAR); |
||
6613 | leency | 118 | BEGIN |
7597 | akron1 | 119 | API.putc(c) |
120 | END OutChar; |
||
6613 | leency | 121 | |
7597 | akron1 | 122 | |
123 | PROCEDURE GetTickCount* (): INTEGER; |
||
124 | VAR |
||
125 | tp: API.TP; |
||
126 | res: INTEGER; |
||
127 | |||
6613 | leency | 128 | BEGIN |
7597 | akron1 | 129 | IF API.clock_gettime(0, tp) = 0 THEN |
130 | res := tp[0] * 100 + tp[1] DIV 10000000 |
||
131 | ELSE |
||
132 | res := 0 |
||
133 | END |
||
6613 | leency | 134 | |
7597 | akron1 | 135 | RETURN res |
136 | END GetTickCount; |
||
6613 | leency | 137 | |
7597 | akron1 | 138 | |
139 | PROCEDURE isRelative* (path: ARRAY OF CHAR): BOOLEAN; |
||
140 | RETURN path[0] # slash |
||
141 | END isRelative; |
||
142 | |||
143 | |||
144 | PROCEDURE now* (VAR year, month, day, hour, min, sec: INTEGER); |
||
145 | END now; |
||
146 | |||
147 | |||
148 | PROCEDURE UnixTime* (): INTEGER; |
||
149 | RETURN API.time(0) |
||
150 | END UnixTime; |
||
151 | |||
152 | |||
7983 | leency | 153 | PROCEDURE d2s* (x: REAL): INTEGER; |
154 | VAR |
||
155 | h, l, s, e: INTEGER; |
||
156 | |||
157 | BEGIN |
||
158 | SYSTEM.GET(SYSTEM.ADR(x), l); |
||
159 | SYSTEM.GET(SYSTEM.ADR(x) + 4, h); |
||
160 | |||
161 | s := ASR(h, 31) MOD 2; |
||
162 | e := (h DIV 100000H) MOD 2048; |
||
163 | IF e <= 896 THEN |
||
164 | h := (h MOD 100000H) * 8 + (l DIV 20000000H) MOD 8 + 800000H; |
||
165 | REPEAT |
||
166 | h := h DIV 2; |
||
167 | INC(e) |
||
168 | UNTIL e = 897; |
||
169 | e := 896; |
||
170 | l := (h MOD 8) * 20000000H; |
||
171 | h := h DIV 8 |
||
172 | ELSIF (1151 <= e) & (e < 2047) THEN |
||
173 | e := 1151; |
||
174 | h := 0; |
||
175 | l := 0 |
||
176 | ELSIF e = 2047 THEN |
||
177 | e := 1151; |
||
178 | IF (h MOD 100000H # 0) OR (l # 0) THEN |
||
179 | h := 80000H; |
||
180 | l := 0 |
||
181 | END |
||
182 | END; |
||
183 | DEC(e, 896) |
||
184 | |||
185 | RETURN LSL(s, 31) + LSL(e, 23) + (h MOD 100000H) * 8 + (l DIV 20000000H) MOD 8 |
||
186 | END d2s; |
||
187 | |||
188 | |||
7597 | akron1 | 189 | PROCEDURE splitf* (x: REAL; VAR a, b: INTEGER): INTEGER; |
190 | VAR |
||
191 | res: INTEGER; |
||
192 | |||
193 | BEGIN |
||
194 | a := 0; |
||
195 | b := 0; |
||
196 | SYSTEM.MOVE(SYSTEM.ADR(x), SYSTEM.ADR(a), 4); |
||
197 | SYSTEM.MOVE(SYSTEM.ADR(x) + 4, SYSTEM.ADR(b), 4); |
||
198 | SYSTEM.GET(SYSTEM.ADR(x), res) |
||
199 | RETURN res |
||
200 | END splitf; |
||
201 | |||
202 | |||
203 | BEGIN |
||
204 | eol := 0AX; |
||
7983 | leency | 205 | maxreal := 1.9; |
206 | PACK(maxreal, 1023); |
||
7597 | akron1 | 207 | SYSTEM.GET(API.MainParam, argc) |
7983 | leency | 208 | END HOST.>=>=>=>=>> |