home *** CD-ROM | disk | FTP | other *** search
/ Black Box 4 / BlackBox.cdr / progpas / prok344.arj / BUFIO.INT < prev    next >
Text File  |  1991-04-01  |  3KB  |  84 lines

  1.  
  2. (*
  3.  * Bufio - Buffered File I/O Unit (3-1-89)
  4.  *
  5.  * This unit provides both read and write buffering on block oriented
  6.  * random-access files.  It is optimized for sequential reads or writes,
  7.  * but will function properly with fully random files.
  8.  *
  9.  *)
  10.  
  11. unit BufIO;
  12.  
  13. interface
  14.    uses DosMem, MdosIO, debugs;
  15.  
  16.    const
  17.       maxbufsiz = $FE00;         {largest file buffer to allocate}
  18.  
  19.    type
  20.       bufarray = array[0..maxbufsiz] of char;
  21.  
  22.       buffered_file = record     {buffered file description record}
  23.          pathname:   dos_filename;  {full name of the file}
  24.          handle:     dos_handle; {handle for dos calls}
  25.          maxrec:     word;       {maximum number of records}
  26.          recsiz:     word;       {record size}
  27.          bufsiz:     word;       {size of the data buffer}
  28.          buffer:     ^bufarray;  {the data buffer}
  29.          fptr:       word;       {base record in file for buffer}
  30.          fnext:      word;       {next record position in buffer (0=first)}
  31.          fcount:     word;       {count of records in buffer}
  32.          dirty:      boolean;    {unsaved changes in buffer?}
  33.          reverse:    boolean;    {reading backwards?}
  34.       end;
  35.  
  36.  
  37.    var
  38.       berr: boolean;       {true if buffered read or write fails}
  39.  
  40.  
  41.    procedure bcreate(name:    dos_filename);
  42.       {create an empty file; use with bopen to open output files}
  43.  
  44.    procedure bprepare(var bfd:   buffered_file;
  45.                       fd:        dos_handle;
  46.                       maxrecn:   word;
  47.                       recsize:   word);
  48.       {enable buffering on an already open dos_handle}
  49.  
  50.    procedure bopen(var bfd:   buffered_file; {file variable}
  51.                    name:      dos_filename;  {name of file}
  52.                    maxrecn:   word;          {number of records to buffer}
  53.                    recsize:   word);         {size of each record}
  54.       {open a buffered file}                 {sets 'bErr' if not ok}
  55.  
  56.    procedure bflush(var bfd:  buffered_file);
  57.       {write buffer, force re-read on next access}
  58.       
  59.    procedure bseek(var bfd:   buffered_file;
  60.                    recn:      word);
  61.       {set position of buffered file}
  62.    
  63.    procedure bseekeof(var bfd:   buffered_file);
  64.       {set position of buffered file to end-of-file}
  65.    
  66.    function btell(var bfd:    buffered_file): word;
  67.       {tell current record number in buffered file}
  68.  
  69.    function beof(var bfd:     buffered_file): boolean;
  70.       {check for eof on buffered file}
  71.  
  72.    procedure bread(var bfd:   buffered_file;
  73.                    var dest);
  74.       {buffered read}
  75.    
  76.    procedure bwrite(var bfd:   buffered_file;
  77.                     var src);
  78.       {buffered write}
  79.  
  80.    procedure bclose(var bfd:  buffered_file);
  81.       {close a buffered file}
  82.  
  83. implementation
  84.