Subversion Repositories Kolibri OS

Rev

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
VAR
-
 
179
    res: INTEGER;
-
 
180
 
-
 
181
BEGIN
-
 
182
    a := 0;
-
 
183
    b := 0;
-
 
184
    SYSTEM.GET32(SYSTEM.ADR(x), a);
-
 
185
    SYSTEM.GET32(SYSTEM.ADR(x) + 4, b);
-
 
186
    SYSTEM.GET(SYSTEM.ADR(x), res)
149
    RETURN API.time(0)
187
    RETURN res
150
END UnixTime;
188
END splitf;
151
 
189
 
Line 152... Line 190...
152
 
190
 
153
PROCEDURE d2s* (x: REAL): INTEGER;
-
 
154
VAR
191
PROCEDURE d2s* (x: REAL): INTEGER;
Line 155... Line 192...
155
    h, l, s, e: INTEGER;
192
VAR
156
 
193
    h, l, s, e: INTEGER;
157
BEGIN
194
 
158
    SYSTEM.GET(SYSTEM.ADR(x), l);
195
BEGIN
Line 184... Line 221...
184
 
221
 
185
    RETURN LSL(s, 31) + LSL(e, 23) + (h MOD 100000H) * 8 + (l DIV 20000000H) MOD 8
222
    RETURN LSL(s, 31) + LSL(e, 23) + (h MOD 100000H) * 8 + (l DIV 20000000H) MOD 8
Line 186... Line 223...
186
END d2s;
223
END d2s;
187
 
224
 
188
 
225
 
Line 189... Line 226...
189
PROCEDURE splitf* (x: REAL; VAR a, b: INTEGER): INTEGER;
226
PROCEDURE GetSym (lib: INTEGER; name: ARRAY OF CHAR; VarAdr: INTEGER);
190
VAR
-
 
191
    res: INTEGER;
-
 
192
 
227
VAR
193
BEGIN
228
    sym: INTEGER;
194
    a := 0;
229
 
195
    b := 0;
-
 
196
    SYSTEM.MOVE(SYSTEM.ADR(x), SYSTEM.ADR(a), 4);
230
BEGIN
Line 197... Line 231...
197
    SYSTEM.MOVE(SYSTEM.ADR(x) + 4, SYSTEM.ADR(b), 4);
231
    sym := API.dlsym(lib, SYSTEM.ADR(name[0]));
198
    SYSTEM.GET(SYSTEM.ADR(x), res)
-
 
199
    RETURN res
232
    ASSERT(sym # 0);
200
END splitf;
233
    SYSTEM.PUT(VarAdr, sym)
201
 
234
END GetSym;
-
 
235
 
-
 
236
 
-
 
237
BEGIN
-
 
238
    maxreal := 1.9;
-
 
239
    PACK(maxreal, 1023);
-
 
240
    SYSTEM.GET(API.MainParam, argc);
-
 
241
 
-
 
242
    libc := API.libc;
-
 
243
    GetSym(libc, "fread",  SYSTEM.ADR(fread));
-
 
244
    GetSym(libc, "fwrite", SYSTEM.ADR(fwrite));
-
 
245
    GetSym(libc, "fopen",  SYSTEM.ADR(fopen));
-
 
246
    GetSym(libc, "fclose", SYSTEM.ADR(fclose));
-
 
247
    GetSym(libc, "chmod",  SYSTEM.ADR(_chmod));
202
 
248
    GetSym(libc, "time",   SYSTEM.ADR(time));
203
BEGIN
249
    GetSym(libc, "exit",   SYSTEM.ADR(exit));