Subversion Repositories Kolibri OS

Rev

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

Rev 8097 Rev 8859
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-2020, Anton Krotov
4
    Copyright (c) 2018-2021, Anton Krotov
5
    All rights reserved.
5
    All rights reserved.
Line 6... Line 6...
6
*)
6
*)
Line 152... Line 152...
152
END read;
152
END read;
Line 153... Line 153...
153
 
153
 
154
 
154
 
155
PROCEDURE write* (file: FILE; chunk: ARRAY OF BYTE; bytes: INTEGER): INTEGER;
155
PROCEDURE write* (file: FILE; chunk: ARRAY OF BYTE; bytes: INTEGER): INTEGER;
Line 156... Line 156...
156
VAR
156
VAR
157
    free, n, k, res, idx: INTEGER;
157
    free, n, idx: INTEGER;
158
 
-
 
159
BEGIN
158
 
Line 160... Line 159...
160
    idx := 0;
159
BEGIN
161
    res := 0;
160
    idx := 0;
162
    IF (file # NIL) & (file.count >= 0) THEN
161
    IF (file # NIL) & (file.count >= 0) THEN
163
 
162
 
164
        free := LEN(file.buffer) - file.count;
-
 
165
        WHILE bytes > 0 DO
163
        free := LEN(file.buffer) - file.count;
166
            n := MIN(free, bytes);
164
        WHILE bytes > 0 DO
167
            copy(chunk, idx, file.buffer, file.count, n);
165
            n := MIN(free, bytes);
168
            INC(res, n);
166
            copy(chunk, idx, file.buffer, file.count, n);
169
            DEC(free, n);
167
            DEC(free, n);
170
            DEC(bytes, n);
-
 
171
            INC(idx, n);
168
            DEC(bytes, n);
172
            INC(file.count, n);
169
            INC(idx, n);
173
            IF free = 0 THEN
170
            INC(file.count, n);
174
                k := flush(file);
171
            IF free = 0 THEN
175
                IF k # LEN(file.buffer) THEN
172
                IF flush(file) # LEN(file.buffer) THEN
176
                    bytes := 0;
173
                    bytes := 0;
177
                    DEC(res, n)
174
                    DEC(idx, n)
178
                ELSE
175
                ELSE
179
                    file.count := 0;
176
                    file.count := 0;
Line 180... Line 177...
180
                    free := LEN(file.buffer)
177
                    free := LEN(file.buffer)
Line 181... Line 178...
181
                END
178
                END
182
            END
179
            END
Line 183... Line 180...
183
        END
180
        END
184
 
181