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 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 HEX; |
8 | MODULE HEX; |
Line 9... | Line -... | ||
9 | - | ||
10 | IMPORT FILES, WRITER, CHL := CHUNKLISTS; |
9 | |
11 | - | ||
12 | - | ||
13 | PROCEDURE hexdgt (n: BYTE): BYTE; |
- | |
14 | BEGIN |
- | |
15 | IF n < 10 THEN |
- | |
Line 16... | Line 10... | ||
16 | n := n + ORD("0") |
10 | IMPORT WRITER, CHL := CHUNKLISTS, UTILS; |
17 | ELSE |
- | |
Line 18... | Line 11... | ||
18 | n := n - 10 + ORD("A") |
11 | |
19 | END |
12 | |
20 | 13 | VAR |
|
21 | RETURN n |
14 | |
22 | END hexdgt; |
15 | chksum: INTEGER; |
23 | 16 | ||
Line 24... | Line 17... | ||
24 | 17 | ||
- | 18 | PROCEDURE Byte (byte: BYTE); |
|
- | 19 | BEGIN |
|
- | 20 | WRITER.WriteByte(UTILS.hexdgt(byte DIV 16)); |
|
- | 21 | WRITER.WriteByte(UTILS.hexdgt(byte MOD 16)); |
|
- | 22 | INC(chksum, byte) |
|
- | 23 | END Byte; |
|
- | 24 | ||
- | 25 | ||
- | 26 | PROCEDURE Byte4 (a, b, c, d: BYTE); |
|
25 | PROCEDURE Byte (file: FILES.FILE; byte: BYTE); |
27 | BEGIN |
26 | BEGIN |
28 | Byte(a); |
27 | WRITER.WriteByte(file, hexdgt(byte DIV 16)); |
29 | Byte(b); |
28 | WRITER.WriteByte(file, hexdgt(byte MOD 16)); |
30 | Byte(c); |
29 | INC(file.chksum, byte); |
31 | Byte(d) |
30 | END Byte; |
32 | END Byte4; |
Line 31... | Line 33... | ||
31 | 33 | ||
32 | 34 | ||
33 | PROCEDURE NewLine (file: FILES.FILE); |
35 | PROCEDURE NewLine; |
34 | BEGIN |
36 | BEGIN |
35 | Byte(file, (-file.chksum) MOD 256); |
37 | Byte((-chksum) MOD 256); |
Line 36... | Line 38... | ||
36 | file.chksum := 0; |
38 | chksum := 0; |
37 | WRITER.WriteByte(file, 0DH); |
39 | WRITER.WriteByte(0DH); |
38 | WRITER.WriteByte(file, 0AH) |
40 | WRITER.WriteByte(0AH) |
Line 39... | Line 41... | ||
39 | END NewLine; |
41 | END NewLine; |
40 | 42 | ||
41 | 43 | ||
42 | PROCEDURE StartCode (file: FILES.FILE); |
44 | PROCEDURE StartCode; |
43 | BEGIN |
- | |
44 | WRITER.WriteByte(file, ORD(":")); |
- | |
45 | file.chksum := 0 |
45 | BEGIN |
46 | END StartCode; |
- | |
47 | 46 | WRITER.WriteByte(ORD(":")); |
|
48 | 47 | chksum := 0 |
|
49 | PROCEDURE Data* (file: FILES.FILE; mem: ARRAY OF BYTE; idx, cnt: INTEGER); |
48 | END StartCode; |
50 | VAR |
49 | |
51 | i, len: INTEGER; |
50 | |
52 | 51 | PROCEDURE Data* (mem: ARRAY OF BYTE; idx, cnt: INTEGER); |
|
53 | BEGIN |
52 | VAR |
54 | WHILE cnt > 0 DO |
53 | i, len: INTEGER; |
Line 55... | Line 54... | ||
55 | len := MIN(cnt, 16); |
54 | |
56 | StartCode(file); |
55 | BEGIN |
57 | Byte(file, len); |
56 | WHILE cnt > 0 DO |
58 | Byte(file, idx DIV 256); |
57 | len := MIN(cnt, 16); |
59 | Byte(file, idx MOD 256); |
- | |
60 | Byte(file, 0); |
- | |
61 | FOR i := 1 TO len DO |
- | |
62 | Byte(file, mem[idx]); |
58 | StartCode; |
63 | INC(idx) |
59 | Byte4(len, idx DIV 256, idx MOD 256, 0); |
64 | END; |
60 | FOR i := 1 TO len DO |
65 | DEC(cnt, len); |
61 | Byte(mem[idx]); |
66 | NewLine(file) |
62 | INC(idx) |
Line 67... | Line 63... | ||
67 | END |
63 | END; |
68 | END Data; |
64 | DEC(cnt, len); |
69 | 65 | NewLine |
|
Line 70... | Line 66... | ||
70 | 66 | END |
|
71 | PROCEDURE ExtLA* (file: FILES.FILE; LA: INTEGER); |
67 | END Data; |
72 | BEGIN |
68 | |
73 | ASSERT((0 <= LA) & (LA <= 0FFFFH)); |
69 | |
74 | StartCode(file); |
70 | PROCEDURE ExtLA* (LA: INTEGER); |
75 | Byte(file, 2); |
71 | BEGIN |
76 | Byte(file, 0); |
72 | ASSERT((0 <= LA) & (LA <= 0FFFFH)); |
77 | Byte(file, 0); |
73 | StartCode; |
78 | Byte(file, 4); |
74 | Byte4(2, 0, 0, 4); |
79 | Byte(file, LA DIV 256); |
75 | Byte(LA DIV 256); |
80 | Byte(file, LA MOD 256); |
76 | Byte(LA MOD 256); |
81 | NewLine(file) |
77 | NewLine |
82 | END ExtLA; |
- | |
83 | - | ||
84 | 78 | END ExtLA; |
|
85 | PROCEDURE Data2* (file: FILES.FILE; mem: CHL.BYTELIST; idx, cnt, LA: INTEGER); |
- | |
86 | VAR |
79 | |
87 | i, len, offset: INTEGER; |
80 | |
88 | 81 | PROCEDURE Data2* (mem: CHL.BYTELIST; idx, cnt, LA: INTEGER); |
|
89 | BEGIN |
82 | VAR |
90 | ExtLA(file, LA); |
83 | i, len, offset: INTEGER; |
91 | offset := 0; |
84 | |
92 | WHILE cnt > 0 DO |
85 | BEGIN |
93 | ASSERT(offset <= 65536); |
86 | ExtLA(LA); |
94 | IF offset = 65536 THEN |
87 | offset := 0; |
Line 95... | Line 88... | ||
95 | INC(LA); |
88 | WHILE cnt > 0 DO |
96 | ExtLA(file, LA); |
89 | ASSERT(offset <= 65536); |
97 | offset := 0 |
90 | IF offset = 65536 THEN |
98 | END; |
91 | INC(LA); |
99 | len := MIN(cnt, 16); |
- | |
100 | StartCode(file); |
- | |
101 | Byte(file, len); |
- | |
102 | Byte(file, offset DIV 256); |
92 | ExtLA(LA); |
103 | Byte(file, offset MOD 256); |
93 | offset := 0 |
Line 104... | Line 94... | ||
104 | Byte(file, 0); |
94 | END; |
105 | FOR i := 1 TO len DO |
95 | len := MIN(cnt, 16); |