Subversion Repositories Kolibri OS

Rev

Rev 7597 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 7597 Rev 7693
Line 5... Line 5...
5
    All rights reserved.
5
    All rights reserved.
6
*)
6
*)
Line 7... Line 7...
7
 
7
 
Line 8... Line 8...
8
MODULE BIN;
8
MODULE BIN;
Line 9... Line 9...
9
 
9
 
Line 10... Line 10...
10
IMPORT LISTS, MACHINE, CHL := CHUNKLISTS, ARITH, UTILS;
10
IMPORT LISTS, CHL := CHUNKLISTS, ARITH, UTILS;
Line 136... Line 136...
136
    FOR i := 3 TO 0 BY -1 DO
136
    FOR i := 3 TO 0 BY -1 DO
137
        x := LSL(x, 8) + CHL.GetByte(array, idx + i)
137
        x := LSL(x, 8) + CHL.GetByte(array, idx + i)
138
    END;
138
    END;
Line 139... Line 139...
139
 
139
 
-
 
140
    IF UTILS.bit_depth = 64 THEN
-
 
141
        x := LSL(x, 16);
-
 
142
        x := LSL(x, 16);
140
    IF UTILS.bit_depth = 64 THEN
143
        x := ASR(x, 16);
141
        x := MACHINE.Int32To64(x)
144
        x := ASR(x, 16)
Line 142... Line 145...
142
    END
145
    END
143
 
146
 
Line 149... Line 152...
149
VAR
152
VAR
150
    i: INTEGER;
153
    i: INTEGER;
Line 151... Line 154...
151
 
154
 
152
BEGIN
155
BEGIN
153
    FOR i := 0 TO 3 DO
156
    FOR i := 0 TO 3 DO
154
        CHL.SetByte(array, idx + i, MACHINE.Byte(x, i))
157
        CHL.SetByte(array, idx + i, UTILS.Byte(x, i))
155
    END
158
    END
Line 156... Line 159...
156
END put32le;
159
END put32le;
157
 
160
 
158
 
161
 
Line 159... Line 162...
159
PROCEDURE PutData32LE* (program: PROGRAM; x: INTEGER);
162
PROCEDURE PutData32LE* (program: PROGRAM; x: INTEGER);
160
VAR
163
VAR
161
    i: INTEGER;
164
    i: INTEGER;
162
 
165
 
163
BEGIN
166
BEGIN
Line 164... Line 167...
164
    FOR i := 0 TO 3 DO
167
    FOR i := 0 TO 3 DO
165
        CHL.PushByte(program.data, MACHINE.Byte(x, i))
168
        CHL.PushByte(program.data, UTILS.Byte(x, i))
166
    END
169
    END
Line 167... Line 170...
167
END PutData32LE;
170
END PutData32LE;
168
 
171
 
169
 
172
 
170
PROCEDURE PutData64LE* (program: PROGRAM; x: INTEGER);
173
PROCEDURE PutData64LE* (program: PROGRAM; x: INTEGER);
171
VAR
174
VAR
Line 172... Line 175...
172
    i: INTEGER;
175
    i: INTEGER;
Line 201... Line 204...
201
VAR
204
VAR
202
    i: INTEGER;
205
    i: INTEGER;
Line 203... Line 206...
203
 
206
 
204
BEGIN
207
BEGIN
205
    FOR i := 0 TO 3 DO
208
    FOR i := 0 TO 3 DO
206
        CHL.PushByte(program.code, MACHINE.Byte(x, i))
209
        CHL.PushByte(program.code, UTILS.Byte(x, i))
207
    END
210
    END
Line 208... Line 211...
208
END PutCode32LE;
211
END PutCode32LE;
Line 215... Line 218...
215
 
218
 
216
 
219
 
217
PROCEDURE Import* (program: PROGRAM; name: ARRAY OF CHAR; label: INTEGER);
220
PROCEDURE Import* (program: PROGRAM; name: ARRAY OF CHAR; label: INTEGER);
218
VAR
-
 
Line 219... Line 221...
219
    imp: IMPRT;
221
VAR
220
    i:   INTEGER;
222
    imp: IMPRT;
221
 
223
 
Line 222... Line 224...
222
BEGIN
224
BEGIN
223
    CHL.PushByte(program.import, 0);
225
    CHL.PushByte(program.import, 0);
224
    CHL.PushByte(program.import, 0);
226
    CHL.PushByte(program.import, 0);
Line 225... Line 227...
225
 
227
 
226
    IF ODD(CHL.Length(program.import)) THEN
228
    IF ODD(CHL.Length(program.import)) THEN
227
        CHL.PushByte(program.import, 0)
229
        CHL.PushByte(program.import, 0)
228
    END;
230
    END;
229
 
-
 
230
    NEW(imp);
-
 
231
    imp.nameoffs := CHL.Length(program.import);
-
 
232
    imp.label := label;
-
 
233
    LISTS.push(program.imp_list, imp);
-
 
234
 
-
 
235
    i := 0;
-
 
236
    WHILE name[i] # 0X DO
231
 
Line 237... Line 232...
237
        CHL.PushByte(program.import, ORD(name[i]));
232
    NEW(imp);
238
        INC(i)
233
    imp.nameoffs := CHL.PushStr(program.import, name);
Line 260... Line 255...
260
 
255
 
261
 
256
 
262
PROCEDURE Export* (program: PROGRAM; name: ARRAY OF CHAR; label: INTEGER);
257
PROCEDURE Export* (program: PROGRAM; name: ARRAY OF CHAR; label: INTEGER);
263
VAR
-
 
Line 264... Line 258...
264
    exp, cur: EXPRT;
258
VAR
265
    i: INTEGER;
259
    exp, cur: EXPRT;
266
 
-
 
267
BEGIN
260
 
268
    NEW(exp);
-
 
269
    exp.nameoffs := CHL.Length(program.export);
-
 
270
    exp.label := CHL.GetInt(program.labels, label);
-
 
271
 
261
BEGIN
272
    i := 0;
-
 
273
    WHILE name[i] # 0X DO
-
 
274
        CHL.PushByte(program.export, ORD(name[i]));
-
 
Line 275... Line 262...
275
        INC(i)
262
    NEW(exp);
276
    END;
263
    exp.label := CHL.GetInt(program.labels, label);
277
    CHL.PushByte(program.export, 0);
264
    exp.nameoffs := CHL.PushStr(program.export, name);
278
 
265
 
Line 387... Line 374...
387
 
374
 
388
    FOR i := 0 TO k - 1 DO
375
    FOR i := 0 TO k - 1 DO
389
        array[i + idx] := hexdgt(hex[2 * i]) * 16 + hexdgt(hex[2 * i + 1])
376
        array[i + idx] := hexdgt(hex[2 * i]) * 16 + hexdgt(hex[2 * i + 1])
Line 390... Line 377...
390
    END;
377
    END;
391
 
378
 
Line 392... Line 379...
392
    idx := idx + k
379
    INC(idx, k)
393
END InitArray;
380
END InitArray;