Subversion Repositories Kolibri OS

Rev

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.