7 procedure bread(var f:file; var buf; count:word; var result:word);
\r
8 procedure bskip(var f:file; n:longint);
\r
9 procedure bseek(var f:file; p:longint);
\r
10 function bpos(var f:file):longint;
\r
18 const MaxFbuf = 1024;
\r
20 var fbuf : array [1..MaxFbuf] of byte;
\r
22 curbuf : 1..MaxFbuf+1;
\r
24 procedure bread( var f:file; var buf; count:word; var result:word);
\r
25 type ByteArray = array [1..maxint] of byte;
\r
27 abuf : ByteArray absolute buf;
\r
30 if (count > inbuf) or (inbuf = 0) then begin
\r
32 then move(fbuf[curbuf], buf, inbuf);
\r
34 while (done < count) do begin
\r
35 blockread(f, fbuf, MaxFbuf, result);
\r
37 if (inbuf < 1) then begin
\r
38 { writeln('BufIO.bread: unexpected eof.'); }
\r
39 FillChar(buf, count, 0);
\r
45 if (n > inbuf) then n := inbuf;
\r
46 move(fbuf[curbuf], abuf[done+1], n);
\r
53 move(fbuf[curbuf], buf, count);
\r
60 procedure bseek(var f:file; p:longint);
\r
63 inbuf := 0; curbuf := 1; { flush buffer }
\r
66 function bpos(var f:file):longint;
\r
68 bpos := filepos(f) - inbuf;
\r
71 procedure bskip(var f:file; n:longint);
\r
73 if (n < inbuf) then begin
\r
78 bseek(f, bpos(f)+n);
\r
84 procedure bread( var f:file; var buf; count:word; var result:word);
\r
86 blockread(f, buf, count, result);
\r
87 if (result < 1) then begin
\r
88 writeln('BufIO.bread: unexpected eof.');
\r
92 procedure bseek(var f:file; p:longint);
\r
97 function bpos(var f:file):longint;
\r
102 procedure bskip(var f:file; n:longint);
\r
104 bseek(f, filepos(f)+n);
\r
110 var SaveExitProc : Pointer;
\r
112 {$F+} procedure MyExitProc; {$F-}
\r
114 ExitProc := SaveExitProc;
\r