Rev 7983 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 7983 | Rev 8097 | ||
---|---|---|---|
Line 11... | Line 11... | ||
11 | 11 | ||
Line 12... | Line 12... | ||
12 | 12 | ||
13 | CONST |
13 | CONST |
Line 14... | Line 14... | ||
14 | 14 | ||
15 | slash* = "/"; |
15 | slash* = "/"; |
16 | OS* = "LINUX"; |
16 | eol* = 0AX; |
Line -... | Line 17... | ||
- | 17 | ||
- | 18 | bit_depth* = RTL.bit_depth; |
|
- | 19 | maxint* = RTL.maxint; |
|
- | 20 | minint* = RTL.minint; |
|
- | 21 | ||
- | 22 | RTLD_LAZY = 1; |
|
- | 23 | ||
Line 17... | Line 24... | ||
17 | 24 | ||
Line -... | Line 25... | ||
- | 25 | TYPE |
|
- | 26 | ||
18 | bit_depth* = RTL.bit_depth; |
27 | TP = ARRAY 2 OF INTEGER; |
Line 19... | Line 28... | ||
19 | maxint* = RTL.maxint; |
28 | |
Line 20... | Line 29... | ||
20 | minint* = RTL.minint; |
29 | |
- | 30 | VAR |
|
- | 31 | ||
- | 32 | maxreal*: REAL; |
|
- | 33 | ||
- | 34 | argc: INTEGER; |
|
- | 35 | ||
- | 36 | libc, librt: INTEGER; |
|
- | 37 | ||
Line 21... | Line 38... | ||
21 | 38 | stdout: INTEGER; |
|
22 | 39 | ||
23 | VAR |
40 | fread, fwrite : PROCEDURE [linux] (buffer, bytes, blocks, file: INTEGER): INTEGER; |
24 | 41 | fopen : PROCEDURE [linux] (fname, fmode: INTEGER): INTEGER; |
|
Line 25... | Line 42... | ||
25 | argc: INTEGER; |
42 | fclose : PROCEDURE [linux] (file: INTEGER): INTEGER; |
26 | 43 | _chmod : PROCEDURE [linux] (fname: INTEGER; mode: SET): INTEGER; |
|
Line 73... | Line 90... | ||
73 | PROCEDURE FileRead* (F: INTEGER; VAR Buffer: ARRAY OF CHAR; bytes: INTEGER): INTEGER; |
90 | PROCEDURE FileRead* (F: INTEGER; VAR Buffer: ARRAY OF CHAR; bytes: INTEGER): INTEGER; |
74 | VAR |
91 | VAR |
75 | res: INTEGER; |
92 | res: INTEGER; |
Line 76... | Line 93... | ||
76 | 93 | ||
77 | BEGIN |
94 | BEGIN |
78 | res := API.fread(SYSTEM.ADR(Buffer[0]), 1, bytes, F); |
95 | res := fread(SYSTEM.ADR(Buffer[0]), 1, bytes, F); |
79 | IF res <= 0 THEN |
96 | IF res <= 0 THEN |
80 | res := -1 |
97 | res := -1 |
Line 81... | Line 98... | ||
81 | END |
98 | END |
Line 87... | Line 104... | ||
87 | PROCEDURE FileWrite* (F: INTEGER; Buffer: ARRAY OF BYTE; bytes: INTEGER): INTEGER; |
104 | PROCEDURE FileWrite* (F: INTEGER; Buffer: ARRAY OF BYTE; bytes: INTEGER): INTEGER; |
88 | VAR |
105 | VAR |
89 | res: INTEGER; |
106 | res: INTEGER; |
Line 90... | Line 107... | ||
90 | 107 | ||
91 | BEGIN |
108 | BEGIN |
92 | res := API.fwrite(SYSTEM.ADR(Buffer[0]), 1, bytes, F); |
109 | res := fwrite(SYSTEM.ADR(Buffer[0]), 1, bytes, F); |
93 | IF res <= 0 THEN |
110 | IF res <= 0 THEN |
94 | res := -1 |
111 | res := -1 |
Line 95... | Line 112... | ||
95 | END |
112 | END |
96 | 113 | ||
Line 97... | Line 114... | ||
97 | RETURN res |
114 | RETURN res |
98 | END FileWrite; |
115 | END FileWrite; |
99 | 116 | ||
Line 100... | Line 117... | ||
100 | 117 | ||
101 | PROCEDURE FileCreate* (FName: ARRAY OF CHAR): INTEGER; |
118 | PROCEDURE FileCreate* (FName: ARRAY OF CHAR): INTEGER; |
102 | RETURN API.fopen(SYSTEM.ADR(FName[0]), SYSTEM.SADR("wb")) |
119 | RETURN fopen(SYSTEM.ADR(FName[0]), SYSTEM.SADR("wb")) |
103 | END FileCreate; |
120 | END FileCreate; |
Line -... | Line 121... | ||
- | 121 | ||
- | 122 | ||
- | 123 | PROCEDURE FileClose* (File: INTEGER); |
|
- | 124 | BEGIN |
|
- | 125 | File := fclose(File) |
|
- | 126 | END FileClose; |
|
- | 127 | ||
- | 128 | ||
104 | 129 | PROCEDURE chmod* (FName: ARRAY OF CHAR); |
|
105 | 130 | VAR |
|
106 | PROCEDURE FileClose* (File: INTEGER); |
131 | res: INTEGER; |
Line 107... | Line 132... | ||
107 | BEGIN |
132 | BEGIN |
- | 133 | res := _chmod(SYSTEM.ADR(FName[0]), {0, 2..8}) (* rwxrwxr-x *) |
|
- | 134 | END chmod; |
|
- | 135 | ||
108 | File := API.fclose(File) |
136 | |
109 | END FileClose; |
137 | PROCEDURE FileOpen* (FName: ARRAY OF CHAR): INTEGER; |
110 | 138 | RETURN fopen(SYSTEM.ADR(FName[0]), SYSTEM.SADR("rb")) |
|
Line 111... | Line 139... | ||
111 | 139 | END FileOpen; |
|
112 | PROCEDURE FileOpen* (FName: ARRAY OF CHAR): INTEGER; |
140 | |
113 | RETURN API.fopen(SYSTEM.ADR(FName[0]), SYSTEM.SADR("rb")) |
141 | |
114 | END FileOpen; |
142 | PROCEDURE OutChar* (c: CHAR); |
Line 115... | Line 143... | ||
115 | 143 | VAR |
|
116 | 144 | res: INTEGER; |
|
117 | PROCEDURE OutChar* (c: CHAR); |
145 | |
118 | BEGIN |
146 | BEGIN |
119 | API.putc(c) |
147 | res := fwrite(SYSTEM.ADR(c), 1, 1, stdout) |
120 | END OutChar; |
148 | END OutChar; |
Line 139... | Line 167... | ||
139 | PROCEDURE isRelative* (path: ARRAY OF CHAR): BOOLEAN; |
167 | PROCEDURE isRelative* (path: ARRAY OF CHAR): BOOLEAN; |
140 | RETURN path[0] # slash |
168 | RETURN path[0] # slash |
141 | END isRelative; |
169 | END isRelative; |
Line 142... | Line -... | ||
142 | - | ||
143 | - | ||
144 | PROCEDURE now* (VAR year, month, day, hour, min, sec: INTEGER); |
- | |
145 | END now; |
- | |
146 | 170 | ||
147 | 171 | ||
148 | PROCEDURE UnixTime* (): INTEGER; |
172 | PROCEDURE UnixTime* (): INTEGER; |
Line -... | Line 173... | ||
- | 173 | RETURN time(0) |
|
- | 174 | END UnixTime; |
|
- | 175 | ||
- | 176 | ||
- | 177 | PROCEDURE splitf* (x: REAL; VAR a, b: INTEGER): INTEGER; |
|
- | 178 | BEGIN |
|
- | 179 | SYSTEM.GET32(SYSTEM.ADR(x), a); |
|
- | 180 | SYSTEM.GET32(SYSTEM.ADR(x) + 4, b) |
|
149 | RETURN API.time(0) |
181 | RETURN a |
150 | END UnixTime; |
182 | END splitf; |
151 | 183 | ||
Line 152... | Line 184... | ||
152 | 184 | ||
153 | PROCEDURE d2s* (x: REAL): INTEGER; |
- | |
154 | VAR |
185 | PROCEDURE d2s* (x: REAL): INTEGER; |
Line 155... | Line 186... | ||
155 | h, l, s, e: INTEGER; |
186 | VAR |
156 | 187 | h, l, s, e: INTEGER; |
|
157 | BEGIN |
188 | |
158 | SYSTEM.GET(SYSTEM.ADR(x), l); |
189 | BEGIN |
Line 173... | Line 204... | ||
173 | e := 1151; |
204 | e := 1151; |
174 | h := 0; |
205 | h := 0; |
175 | l := 0 |
206 | l := 0 |
176 | ELSIF e = 2047 THEN |
207 | ELSIF e = 2047 THEN |
177 | e := 1151; |
208 | e := 1151; |
178 | IF (h MOD 100000H # 0) OR (l # 0) THEN |
209 | IF (h MOD 100000H # 0) OR (BITS(l) * {0..31} # {}) THEN |
179 | h := 80000H; |
210 | h := 80000H; |
180 | l := 0 |
211 | l := 0 |
181 | END |
212 | END |
182 | END; |
213 | END; |
183 | DEC(e, 896) |
214 | DEC(e, 896) |
Line 184... | Line 215... | ||
184 | 215 | ||
185 | RETURN LSL(s, 31) + LSL(e, 23) + (h MOD 100000H) * 8 + (l DIV 20000000H) MOD 8 |
216 | RETURN LSL(s, 31) + LSL(e, 23) + (h MOD 100000H) * 8 + (l DIV 20000000H) MOD 8 |
Line 186... | Line 217... | ||
186 | END d2s; |
217 | END d2s; |
187 | 218 | ||
188 | 219 | ||
Line 189... | Line 220... | ||
189 | PROCEDURE splitf* (x: REAL; VAR a, b: INTEGER): INTEGER; |
220 | PROCEDURE GetSym (lib: INTEGER; name: ARRAY OF CHAR; VarAdr: INTEGER); |
190 | VAR |
- | |
191 | res: INTEGER; |
- | |
192 | 221 | VAR |
|
193 | BEGIN |
222 | sym: INTEGER; |
194 | a := 0; |
223 | |
195 | b := 0; |
- | |
196 | SYSTEM.MOVE(SYSTEM.ADR(x), SYSTEM.ADR(a), 4); |
224 | BEGIN |
Line 197... | Line 225... | ||
197 | SYSTEM.MOVE(SYSTEM.ADR(x) + 4, SYSTEM.ADR(b), 4); |
225 | sym := API.dlsym(lib, SYSTEM.ADR(name[0])); |
198 | SYSTEM.GET(SYSTEM.ADR(x), res) |
- | |
199 | RETURN res |
226 | ASSERT(sym # 0); |
200 | END splitf; |
227 | SYSTEM.PUT(VarAdr, sym) |
201 | 228 | END GetSym; |
|
- | 229 | ||
- | 230 | ||
- | 231 | BEGIN |
|
- | 232 | maxreal := 1.9; |
|
- | 233 | PACK(maxreal, 1023); |
|
- | 234 | SYSTEM.GET(API.MainParam, argc); |
|
- | 235 | ||
- | 236 | libc := API.libc; |
|
- | 237 | GetSym(libc, "fread", SYSTEM.ADR(fread)); |
|
- | 238 | GetSym(libc, "fwrite", SYSTEM.ADR(fwrite)); |
|
- | 239 | GetSym(libc, "fopen", SYSTEM.ADR(fopen)); |
|
- | 240 | GetSym(libc, "fclose", SYSTEM.ADR(fclose)); |
|
- | 241 | GetSym(libc, "chmod", SYSTEM.ADR(_chmod)); |
|
202 | 242 | GetSym(libc, "time", SYSTEM.ADR(time)); |
|
203 | BEGIN |
243 | GetSym(libc, "exit", SYSTEM.ADR(exit)); |