| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- UNIT BUFFERED;
- InterFace
- CONST
- bufSize : LONGINT = 32768;
- {FReadBuf}
- RBBuf : ^BYTE = NIL;
- RBread : ^BYTE = NIL;
- RBcount : word = 0;
- RBsize : word = 0;
- RBFirst : boolean = true;
- RBLast : boolean = false;
- {FReadBuf}
- {FWriteBuf}
- WBBuf : ^BYTE = NIL;
- WBwrt : ^BYTE = NIL;
- WBcount : word = 0;
- WBFirst : boolean = true;
- WBLast : boolean = false;
- {FWritebuf}
- Function FReadBuf(var F:FILE;var val:byte):boolean;
- Procedure FWriteBuf(var F:FILE;val:byte);
- Implementation
- Function FReadBuf(var F:FILE;var val:byte):boolean;
- begin
- if RBFirst then
- begin
- RBfirst:=false;
- GetMem(RBBuf,BUFSize);
- RBcount:=0;
- RBSize:=0;
- end;
- if RBLast then
- begin
- RBLast:=false;
- FreeMem(RBBuf,BufSize);
- RBFirst:=true;
- exit;
- end;
- If RBcount=RBsize then
- begin
- BlockRead(F,RBBuf^,BufSize,RBsize);
- if Rbsize=0 then
- begin
- FReadBuf:=false;
- exit;
- end;
- RBcount:=0;
- end;
- RBread:=PTR(SeG(RBBUF^),Ofs(RBbuf^)+RBcount);
- inc(RBcount);
- val:=RBread^;
- FReadBuf:=true;
- end; {FReadBuf}
- {-----------------------------------------}
- Procedure FWriteBuf(var F:FILE;val:byte);
- begin
- if WBFirst then
- begin
- WBfirst:=false;
- GetMem(WBBuf,BUFSize);
- WBcount:=0;
- end;
- if WBLast then
- begin
- WBLast:=false;
- BlockWrite(F,WBBuf^,WBcount);
- FreeMem(WBBuf,BufSize);
- WBFirst:=true;
- exit;
- end;
- WBwrt:=PTR(SeG(WBBUF^),Ofs(WBbuf^)+WBcount);
- inc(WBcount);
- WBwrt^:=val;
- If WBcount=BUFsize then
- begin
- BlockWrite(F,WBBuf^,WBcount);
- WBcount:=0;
- end;
- end;{FWriteBuf}
- {-----------------------------------------}
- end.
|