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 7... | Line 7... | ||
7 | 7 | ||
Line 8... | Line -... | ||
8 | MODULE WRITER; |
- | |
9 | - | ||
10 | IMPORT FILES, ERRORS, UTILS; |
- | |
11 | - | ||
12 | - | ||
13 | TYPE |
8 | MODULE WRITER; |
Line 14... | Line 9... | ||
14 | 9 | ||
- | 10 | IMPORT FILES, ERRORS, UTILS; |
|
Line 15... | Line 11... | ||
15 | FILE* = FILES.FILE; |
11 | |
16 | 12 | ||
17 | 13 | VAR |
|
18 | VAR |
14 | |
19 | 15 | counter*: INTEGER; |
|
Line 20... | Line 16... | ||
20 | counter*: INTEGER; |
16 | file: FILES.FILE; |
21 | 17 | ||
Line 22... | Line 18... | ||
22 | 18 | ||
23 | PROCEDURE align (n, _align: INTEGER): INTEGER; |
19 | PROCEDURE align* (n, _align: INTEGER): INTEGER; |
24 | BEGIN |
20 | BEGIN |
25 | IF n MOD _align # 0 THEN |
21 | IF n MOD _align # 0 THEN |
26 | n := n + _align - (n MOD _align) |
22 | INC(n, _align - (n MOD _align)) |
27 | END |
23 | END |
28 | 24 | ||
29 | RETURN n |
25 | RETURN n |
Line 30... | Line 26... | ||
30 | END align; |
26 | END align; |
31 | 27 | ||
32 | 28 | ||
Line 33... | Line 29... | ||
33 | PROCEDURE WriteByte* (file: FILE; n: BYTE); |
29 | PROCEDURE WriteByte* (n: BYTE); |
34 | BEGIN |
30 | BEGIN |
Line 51... | Line 47... | ||
51 | END; |
47 | END; |
52 | INC(counter, n) |
48 | INC(counter, n) |
53 | END Write; |
49 | END Write; |
Line 54... | Line 50... | ||
54 | 50 | ||
55 | 51 | ||
56 | PROCEDURE Write64LE* (file: FILE; n: INTEGER); |
52 | PROCEDURE Write64LE* (n: INTEGER); |
Line 57... | Line 53... | ||
57 | VAR |
53 | VAR |
58 | i: INTEGER; |
54 | i: INTEGER; |
59 | 55 | ||
60 | BEGIN |
56 | BEGIN |
61 | FOR i := 0 TO 7 DO |
57 | FOR i := 0 TO 7 DO |
Line 62... | Line 58... | ||
62 | WriteByte(file, UTILS.Byte(n, i)) |
58 | WriteByte(UTILS.Byte(n, i)) |
63 | END |
59 | END |
64 | END Write64LE; |
60 | END Write64LE; |
Line 65... | Line 61... | ||
65 | 61 | ||
66 | 62 | ||
67 | PROCEDURE Write32LE* (file: FILE; n: INTEGER); |
63 | PROCEDURE Write32LE* (n: INTEGER); |
68 | VAR |
64 | VAR |
69 | i: INTEGER; |
65 | i: INTEGER; |
Line 70... | Line 66... | ||
70 | 66 | ||
71 | BEGIN |
67 | BEGIN |
72 | FOR i := 0 TO 3 DO |
68 | FOR i := 0 TO 3 DO |
73 | WriteByte(file, UTILS.Byte(n, i)) |
69 | WriteByte(UTILS.Byte(n, i)) |
74 | END |
70 | END |
Line 75... | Line 71... | ||
75 | END Write32LE; |
71 | END Write32LE; |
76 | 72 | ||
77 | 73 | ||
Line 78... | Line 74... | ||
78 | PROCEDURE Write16LE* (file: FILE; n: INTEGER); |
74 | PROCEDURE Write16LE* (n: INTEGER); |
79 | BEGIN |
75 | BEGIN |
80 | WriteByte(file, UTILS.Byte(n, 0)); |
76 | WriteByte(UTILS.Byte(n, 0)); |
81 | WriteByte(file, UTILS.Byte(n, 1)) |
77 | WriteByte(UTILS.Byte(n, 1)) |
82 | END Write16LE; |
78 | END Write16LE; |
83 | 79 | ||
84 | 80 | ||
Line 85... | Line 81... | ||
85 | PROCEDURE Padding* (file: FILE; FileAlignment: INTEGER); |
81 | PROCEDURE Padding* (FileAlignment: INTEGER); |
86 | VAR |
82 | VAR |
87 | i: INTEGER; |
83 | i: INTEGER; |
88 | 84 | ||
89 | BEGIN |
85 | BEGIN |
Line 90... | Line 86... | ||
90 | i := align(counter, FileAlignment) - counter; |
86 | i := align(counter, FileAlignment) - counter; |
91 | WHILE i > 0 DO |
87 | WHILE i > 0 DO |
92 | WriteByte(file, 0); |
88 | WriteByte(0); |
93 | DEC(i) |
89 | DEC(i) |