BUFFERED.PAS 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. UNIT BUFFERED;
  2. InterFace
  3. CONST
  4. bufSize : LONGINT = 32768;
  5. {FReadBuf}
  6. RBBuf : ^BYTE = NIL;
  7. RBread : ^BYTE = NIL;
  8. RBcount : word = 0;
  9. RBsize : word = 0;
  10. RBFirst : boolean = true;
  11. RBLast : boolean = false;
  12. {FReadBuf}
  13. {FWriteBuf}
  14. WBBuf : ^BYTE = NIL;
  15. WBwrt : ^BYTE = NIL;
  16. WBcount : word = 0;
  17. WBFirst : boolean = true;
  18. WBLast : boolean = false;
  19. {FWritebuf}
  20. Function FReadBuf(var F:FILE;var val:byte):boolean;
  21. Procedure FWriteBuf(var F:FILE;val:byte);
  22. Implementation
  23. Function FReadBuf(var F:FILE;var val:byte):boolean;
  24. begin
  25. if RBFirst then
  26. begin
  27. RBfirst:=false;
  28. GetMem(RBBuf,BUFSize);
  29. RBcount:=0;
  30. RBSize:=0;
  31. end;
  32. if RBLast then
  33. begin
  34. RBLast:=false;
  35. FreeMem(RBBuf,BufSize);
  36. RBFirst:=true;
  37. exit;
  38. end;
  39. If RBcount=RBsize then
  40. begin
  41. BlockRead(F,RBBuf^,BufSize,RBsize);
  42. if Rbsize=0 then
  43. begin
  44. FReadBuf:=false;
  45. exit;
  46. end;
  47. RBcount:=0;
  48. end;
  49. RBread:=PTR(SeG(RBBUF^),Ofs(RBbuf^)+RBcount);
  50. inc(RBcount);
  51. val:=RBread^;
  52. FReadBuf:=true;
  53. end; {FReadBuf}
  54. {-----------------------------------------}
  55. Procedure FWriteBuf(var F:FILE;val:byte);
  56. begin
  57. if WBFirst then
  58. begin
  59. WBfirst:=false;
  60. GetMem(WBBuf,BUFSize);
  61. WBcount:=0;
  62. end;
  63. if WBLast then
  64. begin
  65. WBLast:=false;
  66. BlockWrite(F,WBBuf^,WBcount);
  67. FreeMem(WBBuf,BufSize);
  68. WBFirst:=true;
  69. exit;
  70. end;
  71. WBwrt:=PTR(SeG(WBBUF^),Ofs(WBbuf^)+WBcount);
  72. inc(WBcount);
  73. WBwrt^:=val;
  74. If WBcount=BUFsize then
  75. begin
  76. BlockWrite(F,WBBuf^,WBcount);
  77. WBcount:=0;
  78. end;
  79. end;{FWriteBuf}
  80. {-----------------------------------------}
  81. end.