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 |