Subversion Repositories Kolibri OS

Rev

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.