Rev 8097 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
7983 | leency | 1 | (* |
7597 | akron1 | 2 | BSD 2-Clause License |
3 | |||
8859 | leency | 4 | Copyright (c) 2018-2021, Anton Krotov |
7597 | akron1 | 5 | All rights reserved. |
6 | *) |
||
7 | |||
8 | MODULE WRITER; |
||
9 | |||
7693 | akron1 | 10 | IMPORT FILES, ERRORS, UTILS; |
7597 | akron1 | 11 | |
12 | |||
13 | VAR |
||
14 | |||
15 | counter*: INTEGER; |
||
8097 | maxcodehac | 16 | file: FILES.FILE; |
7597 | akron1 | 17 | |
18 | |||
8097 | maxcodehac | 19 | PROCEDURE align* (n, _align: INTEGER): INTEGER; |
7597 | akron1 | 20 | BEGIN |
8859 | leency | 21 | ASSERT(UTILS.Align(n, _align)) |
7597 | akron1 | 22 | RETURN n |
23 | END align; |
||
24 | |||
25 | |||
8097 | maxcodehac | 26 | PROCEDURE WriteByte* (n: BYTE); |
7597 | akron1 | 27 | BEGIN |
28 | IF FILES.WriteByte(file, n) THEN |
||
29 | INC(counter) |
||
30 | ELSE |
||
7693 | akron1 | 31 | ERRORS.Error(201) |
7597 | akron1 | 32 | END |
33 | END WriteByte; |
||
34 | |||
35 | |||
8097 | maxcodehac | 36 | PROCEDURE Write* (chunk: ARRAY OF BYTE; bytes: INTEGER); |
7597 | akron1 | 37 | VAR |
38 | n: INTEGER; |
||
39 | |||
40 | BEGIN |
||
41 | n := FILES.write(file, chunk, bytes); |
||
42 | IF n # bytes THEN |
||
7693 | akron1 | 43 | ERRORS.Error(201) |
7597 | akron1 | 44 | END; |
45 | INC(counter, n) |
||
46 | END Write; |
||
47 | |||
48 | |||
8097 | maxcodehac | 49 | PROCEDURE Write64LE* (n: INTEGER); |
7597 | akron1 | 50 | VAR |
51 | i: INTEGER; |
||
52 | |||
53 | BEGIN |
||
54 | FOR i := 0 TO 7 DO |
||
8097 | maxcodehac | 55 | WriteByte(UTILS.Byte(n, i)) |
7597 | akron1 | 56 | END |
57 | END Write64LE; |
||
58 | |||
59 | |||
8097 | maxcodehac | 60 | PROCEDURE Write32LE* (n: INTEGER); |
7597 | akron1 | 61 | VAR |
62 | i: INTEGER; |
||
63 | |||
64 | BEGIN |
||
65 | FOR i := 0 TO 3 DO |
||
8097 | maxcodehac | 66 | WriteByte(UTILS.Byte(n, i)) |
7597 | akron1 | 67 | END |
68 | END Write32LE; |
||
69 | |||
70 | |||
8097 | maxcodehac | 71 | PROCEDURE Write16LE* (n: INTEGER); |
7597 | akron1 | 72 | BEGIN |
8097 | maxcodehac | 73 | WriteByte(UTILS.Byte(n, 0)); |
74 | WriteByte(UTILS.Byte(n, 1)) |
||
7597 | akron1 | 75 | END Write16LE; |
76 | |||
77 | |||
8097 | maxcodehac | 78 | PROCEDURE Padding* (FileAlignment: INTEGER); |
7597 | akron1 | 79 | VAR |
80 | i: INTEGER; |
||
81 | |||
82 | BEGIN |
||
83 | i := align(counter, FileAlignment) - counter; |
||
84 | WHILE i > 0 DO |
||
8097 | maxcodehac | 85 | WriteByte(0); |
7597 | akron1 | 86 | DEC(i) |
87 | END |
||
88 | END Padding; |
||
89 | |||
90 | |||
8097 | maxcodehac | 91 | PROCEDURE Create* (FileName: ARRAY OF CHAR); |
7597 | akron1 | 92 | BEGIN |
8097 | maxcodehac | 93 | counter := 0; |
94 | file := FILES.create(FileName) |
||
7597 | akron1 | 95 | END Create; |
96 | |||
97 | |||
8097 | maxcodehac | 98 | PROCEDURE Close*; |
7597 | akron1 | 99 | BEGIN |
100 | FILES.close(file) |
||
101 | END Close; |
||
102 | |||
103 | |||
7983 | leency | 104 | END WRITER. |