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
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));