| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- CONST
- BUFSize = 8192;
- var
- {FReadBuf}
- RBBuf, RBread : ^BYTE;
- RBcount : word;
- RBsize : word;
- RBFirst, RBLast : boolean;
- {FReadBuf}
- 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}
- {-----------------------------------------}
- var
- {FWriteBuf}
- WBBuf,WBwrt : ^BYTE;
- WBcount : word;
- WBFirst, WBLast : boolean;
- {FWritebuf}
- 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}
- var
- i : byte;
- INP : FILE;
- OUT : FILE;
- BEGIN
- Assign(OUT,'test2.dat');
- Rewrite(OUT,1);
- Assign(INP,'test.dat');
- Reset(INP,1);
- WBFirst:=true;
- WBLast:=false;
- RBFirst:=true;
- RBLast:=false;
- WHILE FreadBuf(INP,i) do FWriteBuf(OUT,i);
- WBLast:=true;
- RBLast:=true;
- FWriteBuf(OUT,0);
- FReadBuf(INP,i);
- Close(OUT);
- Close(Inp);
- END.
|