Subversion Repositories Kolibri OS

Rev

Rev 7983 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 7983 Rev 8097
Line 1... Line 1...
1
(*
1
(*
2
    BSD 2-Clause License
2
    BSD 2-Clause License
Line 3... Line 3...
3
 
3
 
4
    Copyright (c) 2018-2019, Anton Krotov
4
    Copyright (c) 2018-2020, Anton Krotov
5
    All rights reserved.
5
    All rights reserved.
Line 6... Line 6...
6
*)
6
*)
Line 7... Line 7...
7
 
7
 
Line 8... Line -...
8
MODULE WRITER;
-
 
9
 
-
 
10
IMPORT FILES, ERRORS, UTILS;
-
 
11
 
-
 
12
 
-
 
13
TYPE
8
MODULE WRITER;
Line 14... Line 9...
14
 
9
 
-
 
10
IMPORT FILES, ERRORS, UTILS;
Line 15... Line 11...
15
    FILE* = FILES.FILE;
11
 
16
 
12
 
17
 
13
VAR
18
VAR
14
 
19
 
15
    counter*: INTEGER;
Line 20... Line 16...
20
    counter*: INTEGER;
16
    file: FILES.FILE;
21
 
17
 
Line 22... Line 18...
22
 
18
 
23
PROCEDURE align (n, _align: INTEGER): INTEGER;
19
PROCEDURE align* (n, _align: INTEGER): INTEGER;
24
BEGIN
20
BEGIN
25
    IF n MOD _align # 0 THEN
21
    IF n MOD _align # 0 THEN
26
        n := n + _align - (n MOD _align)
22
        INC(n, _align - (n MOD _align))
27
    END
23
    END
28
 
24
 
29
    RETURN n
25
    RETURN n
Line 30... Line 26...
30
END align;
26
END align;
31
 
27
 
32
 
28
 
Line 33... Line 29...
33
PROCEDURE WriteByte* (file: FILE; n: BYTE);
29
PROCEDURE WriteByte* (n: BYTE);
34
BEGIN
30
BEGIN
Line 51... Line 47...
51
    END;
47
    END;
52
    INC(counter, n)
48
    INC(counter, n)
53
END Write;
49
END Write;
Line 54... Line 50...
54
 
50
 
55
 
51
 
56
PROCEDURE Write64LE* (file: FILE; n: INTEGER);
52
PROCEDURE Write64LE* (n: INTEGER);
Line 57... Line 53...
57
VAR
53
VAR
58
    i: INTEGER;
54
    i: INTEGER;
59
 
55
 
60
BEGIN
56
BEGIN
61
    FOR i := 0 TO 7 DO
57
    FOR i := 0 TO 7 DO
Line 62... Line 58...
62
        WriteByte(file, UTILS.Byte(n, i))
58
        WriteByte(UTILS.Byte(n, i))
63
    END
59
    END
64
END Write64LE;
60
END Write64LE;
Line 65... Line 61...
65
 
61
 
66
 
62
 
67
PROCEDURE Write32LE* (file: FILE; n: INTEGER);
63
PROCEDURE Write32LE* (n: INTEGER);
68
VAR
64
VAR
69
    i: INTEGER;
65
    i: INTEGER;
Line 70... Line 66...
70
 
66
 
71
BEGIN
67
BEGIN
72
    FOR i := 0 TO 3 DO
68
    FOR i := 0 TO 3 DO
73
        WriteByte(file, UTILS.Byte(n, i))
69
        WriteByte(UTILS.Byte(n, i))
74
    END
70
    END
Line 75... Line 71...
75
END Write32LE;
71
END Write32LE;
76
 
72
 
77
 
73
 
Line 78... Line 74...
78
PROCEDURE Write16LE* (file: FILE; n: INTEGER);
74
PROCEDURE Write16LE* (n: INTEGER);
79
BEGIN
75
BEGIN
80
    WriteByte(file, UTILS.Byte(n, 0));
76
    WriteByte(UTILS.Byte(n, 0));
81
    WriteByte(file, UTILS.Byte(n, 1))
77
    WriteByte(UTILS.Byte(n, 1))
82
END Write16LE;
78
END Write16LE;
83
 
79
 
84
 
80
 
Line 85... Line 81...
85
PROCEDURE Padding* (file: FILE; FileAlignment: INTEGER);
81
PROCEDURE Padding* (FileAlignment: INTEGER);
86
VAR
82
VAR
87
    i: INTEGER;
83
    i: INTEGER;
88
 
84
 
89
BEGIN
85
BEGIN
Line 90... Line 86...
90
    i := align(counter, FileAlignment) - counter;
86
    i := align(counter, FileAlignment) - counter;
91
    WHILE i > 0 DO
87
    WHILE i > 0 DO
92
        WriteByte(file, 0);
88
        WriteByte(0);
93
        DEC(i)
89
        DEC(i)