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 1... | Line 1... | ||
1 | (* |
1 | (* |
2 | BSD 2-Clause License |
2 | BSD 2-Clause License |
Line 3... | Line 3... | ||
3 | 3 | ||
4 | Copyright (c) 2018-2019, Anton Krotov |
4 | Copyright (c) 2018-2020, Anton Krotov |
5 | All rights reserved. |
5 | All rights reserved. |
Line 6... | Line 6... | ||
6 | *) |
6 | *) |
Line 54... | Line 54... | ||
54 | bss*: INTEGER; |
54 | bss*: INTEGER; |
55 | stack*: INTEGER; |
55 | stack*: INTEGER; |
56 | vmajor*, |
56 | vmajor*, |
57 | vminor*: WCHAR; |
57 | vminor*: WCHAR; |
58 | modname*: INTEGER; |
58 | modname*: INTEGER; |
59 | import*: CHL.BYTELIST; |
59 | _import*: CHL.BYTELIST; |
60 | export*: CHL.BYTELIST; |
60 | export*: CHL.BYTELIST; |
61 | rel_list*: LISTS.LIST; |
61 | rel_list*: LISTS.LIST; |
62 | imp_list*: LISTS.LIST; |
62 | imp_list*: LISTS.LIST; |
63 | exp_list*: LISTS.LIST |
63 | exp_list*: LISTS.LIST |
Line 84... | Line 84... | ||
84 | program.imp_list := LISTS.create(NIL); |
84 | program.imp_list := LISTS.create(NIL); |
85 | program.exp_list := LISTS.create(NIL); |
85 | program.exp_list := LISTS.create(NIL); |
Line 86... | Line 86... | ||
86 | 86 | ||
87 | program.data := CHL.CreateByteList(); |
87 | program.data := CHL.CreateByteList(); |
88 | program.code := CHL.CreateByteList(); |
88 | program.code := CHL.CreateByteList(); |
89 | program.import := CHL.CreateByteList(); |
89 | program._import := CHL.CreateByteList(); |
Line 90... | Line 90... | ||
90 | program.export := CHL.CreateByteList() |
90 | program.export := CHL.CreateByteList() |
91 | 91 | ||
Line 118... | Line 118... | ||
118 | BEGIN |
118 | BEGIN |
119 | CHL.PushByte(program.data, b) |
119 | CHL.PushByte(program.data, b) |
120 | END PutData; |
120 | END PutData; |
Line 121... | Line 121... | ||
121 | 121 | ||
122 | 122 | ||
123 | PROCEDURE get32le* (array: CHL.BYTELIST; idx: INTEGER): INTEGER; |
123 | PROCEDURE get32le* (_array: CHL.BYTELIST; idx: INTEGER): INTEGER; |
124 | VAR |
124 | VAR |
Line 125... | Line 125... | ||
125 | i: INTEGER; |
125 | i: INTEGER; |
126 | x: INTEGER; |
126 | x: INTEGER; |
Line 127... | Line 127... | ||
127 | 127 | ||
128 | BEGIN |
128 | BEGIN |
129 | x := 0; |
129 | x := 0; |
Line 130... | Line 130... | ||
130 | 130 | ||
131 | FOR i := 3 TO 0 BY -1 DO |
131 | FOR i := 3 TO 0 BY -1 DO |
132 | x := LSL(x, 8) + CHL.GetByte(array, idx + i) |
132 | x := LSL(x, 8) + CHL.GetByte(_array, idx + i) |
Line 141... | Line 141... | ||
141 | 141 | ||
142 | RETURN x |
142 | RETURN x |
Line 143... | Line 143... | ||
143 | END get32le; |
143 | END get32le; |
144 | 144 | ||
145 | 145 | ||
Line 146... | Line 146... | ||
146 | PROCEDURE put32le* (array: CHL.BYTELIST; idx: INTEGER; x: INTEGER); |
146 | PROCEDURE put32le* (_array: CHL.BYTELIST; idx: INTEGER; x: INTEGER); |
147 | VAR |
147 | VAR |
148 | i: INTEGER; |
148 | i: INTEGER; |
149 | 149 | ||
150 | BEGIN |
150 | BEGIN |
Line 151... | Line 151... | ||
151 | FOR i := 0 TO 3 DO |
151 | FOR i := 0 TO 3 DO |
Line 222... | Line 222... | ||
222 | PROCEDURE Import* (program: PROGRAM; name: ARRAY OF CHAR; label: INTEGER); |
222 | PROCEDURE Import* (program: PROGRAM; name: ARRAY OF CHAR; label: INTEGER); |
223 | VAR |
223 | VAR |
224 | imp: IMPRT; |
224 | imp: IMPRT; |
Line 225... | Line 225... | ||
225 | 225 | ||
226 | BEGIN |
226 | BEGIN |
227 | CHL.PushByte(program.import, 0); |
227 | CHL.PushByte(program._import, 0); |
Line 228... | Line 228... | ||
228 | CHL.PushByte(program.import, 0); |
228 | CHL.PushByte(program._import, 0); |
229 | 229 | ||
230 | IF ODD(CHL.Length(program.import)) THEN |
230 | IF ODD(CHL.Length(program._import)) THEN |
Line 231... | Line 231... | ||
231 | CHL.PushByte(program.import, 0) |
231 | CHL.PushByte(program._import, 0) |
232 | END; |
232 | END; |
233 | 233 | ||
234 | NEW(imp); |
234 | NEW(imp); |
235 | imp.nameoffs := CHL.PushStr(program.import, name); |
235 | imp.nameoffs := CHL.PushStr(program._import, name); |
Line 283... | Line 283... | ||
283 | END Export; |
283 | END Export; |
Line 284... | Line 284... | ||
284 | 284 | ||
285 | 285 | ||
286 | PROCEDURE GetIProc* (program: PROGRAM; n: INTEGER): IMPRT; |
286 | PROCEDURE GetIProc* (program: PROGRAM; n: INTEGER): IMPRT; |
287 | VAR |
- | |
Line 288... | Line 287... | ||
288 | import: IMPRT; |
287 | VAR |
289 | res: IMPRT; |
288 | _import, res: IMPRT; |
Line 290... | Line 289... | ||
290 | 289 | ||
291 | BEGIN |
290 | BEGIN |
292 | import := program.imp_list.first(IMPRT); |
291 | _import := program.imp_list.first(IMPRT); |
293 | 292 | ||
294 | res := NIL; |
293 | res := NIL; |
295 | WHILE (import # NIL) & (n >= 0) DO |
294 | WHILE (_import # NIL) & (n >= 0) DO |
296 | IF import.label # 0 THEN |
295 | IF _import.label # 0 THEN |
297 | res := import; |
296 | res := _import; |
Line 298... | Line 297... | ||
298 | DEC(n) |
297 | DEC(n) |
299 | END; |
298 | END; |
300 | import := import.next(IMPRT) |
299 | _import := _import.next(IMPRT) |
Line 347... | Line 346... | ||
347 | END |
346 | END |
Line 348... | Line 347... | ||
348 | 347 | ||
Line 349... | Line 348... | ||
349 | END fixup; |
348 | END fixup; |
350 | 349 | ||
351 | 350 | ||
Line 352... | Line 351... | ||
352 | PROCEDURE InitArray* (VAR array: ARRAY OF BYTE; VAR idx: INTEGER; hex: ARRAY OF CHAR); |
351 | PROCEDURE InitArray* (VAR _array: ARRAY OF BYTE; VAR idx: INTEGER; hex: ARRAY OF CHAR); |
Line 373... | Line 372... | ||
373 | k := LENGTH(hex); |
372 | k := LENGTH(hex); |
374 | ASSERT(~ODD(k)); |
373 | ASSERT(~ODD(k)); |
375 | k := k DIV 2; |
374 | k := k DIV 2; |
Line 376... | Line 375... | ||
376 | 375 | ||
377 | FOR i := 0 TO k - 1 DO |
376 | FOR i := 0 TO k - 1 DO |
378 | array[i + idx] := hexdgt(hex[2 * i]) * 16 + hexdgt(hex[2 * i + 1]) |
377 | _array[i + idx] := hexdgt(hex[2 * i]) * 16 + hexdgt(hex[2 * i + 1]) |
Line 379... | Line 378... | ||
379 | END; |
378 | END; |
380 | 379 |