Rev 7983 | Go to most recent revision | 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 | |||
8097 | maxcodehac | 4 | Copyright (c) 2018-2020, 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 |
21 | IF n MOD _align # 0 THEN |
||
8097 | maxcodehac | 22 | INC(n, _align - (n MOD _align)) |
7597 | akron1 | 23 | END |
24 | |||
25 | RETURN n |
||
26 | END align; |
||
27 | |||
28 | |||
8097 | maxcodehac | 29 | PROCEDURE WriteByte* (n: BYTE); |
7597 | akron1 | 30 | BEGIN |
31 | IF FILES.WriteByte(file, n) THEN |
||
32 | INC(counter) |
||
33 | ELSE |
||
7693 | akron1 | 34 | ERRORS.Error(201) |
7597 | akron1 | 35 | END |
36 | END WriteByte; |
||
37 | |||
38 | |||
8097 | maxcodehac | 39 | PROCEDURE Write* (chunk: ARRAY OF BYTE; bytes: INTEGER); |
7597 | akron1 | 40 | VAR |
41 | n: INTEGER; |
||
42 | |||
43 | BEGIN |
||
44 | n := FILES.write(file, chunk, bytes); |
||
45 | IF n # bytes THEN |
||
7693 | akron1 | 46 | ERRORS.Error(201) |
7597 | akron1 | 47 | END; |
48 | INC(counter, n) |
||
49 | END Write; |
||
50 | |||
51 | |||
8097 | maxcodehac | 52 | PROCEDURE Write64LE* (n: INTEGER); |
7597 | akron1 | 53 | VAR |
54 | i: INTEGER; |
||
55 | |||
56 | BEGIN |
||
57 | FOR i := 0 TO 7 DO |
||
8097 | maxcodehac | 58 | WriteByte(UTILS.Byte(n, i)) |
7597 | akron1 | 59 | END |
60 | END Write64LE; |
||
61 | |||
62 | |||
8097 | maxcodehac | 63 | PROCEDURE Write32LE* (n: INTEGER); |
7597 | akron1 | 64 | VAR |
65 | i: INTEGER; |
||
66 | |||
67 | BEGIN |
||
68 | FOR i := 0 TO 3 DO |
||
8097 | maxcodehac | 69 | WriteByte(UTILS.Byte(n, i)) |
7597 | akron1 | 70 | END |
71 | END Write32LE; |
||
72 | |||
73 | |||
8097 | maxcodehac | 74 | PROCEDURE Write16LE* (n: INTEGER); |
7597 | akron1 | 75 | BEGIN |
8097 | maxcodehac | 76 | WriteByte(UTILS.Byte(n, 0)); |
77 | WriteByte(UTILS.Byte(n, 1)) |
||
7597 | akron1 | 78 | END Write16LE; |
79 | |||
80 | |||
8097 | maxcodehac | 81 | PROCEDURE Padding* (FileAlignment: INTEGER); |
7597 | akron1 | 82 | VAR |
83 | i: INTEGER; |
||
84 | |||
85 | BEGIN |
||
86 | i := align(counter, FileAlignment) - counter; |
||
87 | WHILE i > 0 DO |
||
8097 | maxcodehac | 88 | WriteByte(0); |
7597 | akron1 | 89 | DEC(i) |
90 | END |
||
91 | END Padding; |
||
92 | |||
93 | |||
8097 | maxcodehac | 94 | PROCEDURE Create* (FileName: ARRAY OF CHAR); |
7597 | akron1 | 95 | BEGIN |
8097 | maxcodehac | 96 | counter := 0; |
97 | file := FILES.create(FileName) |
||
7597 | akron1 | 98 | END Create; |
99 | |||
100 | |||
8097 | maxcodehac | 101 | PROCEDURE Close*; |
7597 | akron1 | 102 | BEGIN |
103 | FILES.close(file) |
||
104 | END Close; |
||
105 | |||
106 | |||
7983 | leency | 107 | END WRITER. |