Subversion Repositories Kolibri OS

Rev

Rev 7693 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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