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