home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 294.lha / TurboFile / randomio.def < prev    next >
Text File  |  1989-10-09  |  6KB  |  158 lines

  1. DEFINITION MODULE RandomIO;
  2. (*
  3.      Written by Dexter (Chip) Orange, July, 1987.
  4.  
  5. 3227 Rain Valley Ct.
  6. Tallahassee, FL.  32308
  7.  
  8. home: (904) 877-0061
  9. Work: (904) 487-2680
  10. Compuserve: 71450,1162
  11.  
  12.  
  13.  
  14.  
  15.  
  16.           Copyright (C) 1987, 1989, Dexter (Chip) Orange
  17. All rights reserved.  The modules of the TurboFile system may not be
  18. distributed, nor a discussion of the algorithms used there-in, in any way
  19. without the express written permission of the copyright holder (Dexter
  20. Orange).
  21.  
  22.      This module of the TurboFile system implements routines for doing very
  23.  fast, sophisticated,
  24. I/O to random access files with fixed-length records and optional file headers.
  25. All I/O is buffered, and the larger the buffer, the faster things will go.
  26.  
  27.           Features Include:
  28.      1.  Record size upto 64K
  29.      2.  File size limitted only by available disk space
  30.      3. The buffering of output records in such a way that groups of contiguous
  31. records are identified, and written out together, to allow a more efficient
  32. write access speed.
  33.      4.  Optional file header record to store information relevant to the file
  34.  
  35.  
  36.  
  37.           Version 1.0,  September 1989.
  38. Converted from TDI to M2Sprint.
  39.  
  40. *)
  41.  
  42.  
  43. FROM SYSTEM IMPORT
  44.   BYTE;
  45.  
  46. TYPE
  47.  
  48.   RandomFile;
  49.  
  50.   RandomFileMode = (ReadOnly, ReadWrite, NewFile, NewFileWriteOnly);
  51. (* defines type of file to be opened.  ReadOnly is self-explanatory,
  52. ReadWrite is for an existing file which will be opened for both reads and
  53.  writes,
  54. NewFile is for a new file to be created for both reads and writes,
  55. and NewFileWriteOnly is for a new file to be created which will only be written
  56.  to *)
  57.  
  58.  
  59.   FileWriteAccessMode = (Random, Ascending, Sequential);
  60. (* when  a file is opened with a RandomFileMode of other than ReadOnly,
  61. this defines in what way writes will occur to that file.  The default is
  62. Random, and can be changed through a call to SetWriteAccessMode (see its
  63. description for an explanation of the various write modes *)
  64.  
  65.  
  66.  
  67. VAR
  68.   RIOErrorMessage: ARRAY [0..80] OF CHAR;
  69. (* contains the text of an error message when an error occurs *)
  70.  
  71.  
  72.  
  73.  
  74.  
  75. PROCEDURE OpenRandomFile (VAR File     : RandomFile; FileName : ARRAY OF CHAR;
  76. mode         : RandomFileMode; RecSize      : CARDINAL; HeaderSize: CARDINAL;
  77. BufferedBytes: LONGCARD) : BOOLEAN;
  78. (* open (or create) a file for random access. *)
  79. (* returns true if the open is successful *)
  80. (* Note: If the mode is ReadWrite or NewFile, then the BufferedBytes are
  81. divided into a read and a write buffer. *)
  82.  
  83.  
  84. PROCEDURE CloseRandomFile (VAR File : RandomFile);
  85. (* Flushes the write buffer (if any) and concludes access to a random file *)
  86.  
  87.  
  88.  
  89. PROCEDURE ReadRandomFile (File     : RandomFile; VAR data : ARRAY OF BYTE;
  90.                                         (* Any type here *)
  91. RecNum: LONGCARD) : BOOLEAN;
  92. (* read a specific record from a random file *)
  93. (* returns TRUE if successful. Number of bytes read is "RecSize", as specified
  94. in the call to OpenRandomFile *)
  95. (* Note that record numbers begin with 1, and do not include the header record
  96.  *)
  97.  
  98.  
  99. PROCEDURE ReadHeader (File     : RandomFile; VAR data : ARRAY OF BYTE)
  100.                                         (* Any type here *)
  101. : BOOLEAN;
  102. (* read the file header from the beginning of the random file *)
  103. (* returns TRUE if read successful.  Number of bytes read is "HeaderSize"
  104. as specified in the call to OpenRandomFile *)
  105.  
  106.  
  107. PROCEDURE WriteRandomFile (File    : RandomFile; VAR data : ARRAY OF BYTE;
  108.                                         (* Any type here *)
  109. RecNum: LONGCARD) : BOOLEAN;
  110. (* write a specific record to the random file *)
  111. (* returns TRUE if write successful.  Number of bytes written is "RecSize"
  112. as specified in the call to OpenRandomFile *)
  113. (* Note that the file can only be extended by writing a record with a record
  114. number one greater than the current number of records in the file. *)
  115.  
  116.  
  117. PROCEDURE WriteHeader ( File    : RandomFile; VAR data : ARRAY OF BYTE)
  118.                                         (* Any type here *)
  119. : BOOLEAN;
  120. (* write the header record at the beginning of the file. *)
  121. (* Note: if "HeaderSize" is not zero, a header record must be written before
  122. any data records can be. *)
  123. (* returns true if the write is successful.  Number of bytes written is
  124. "headerSize" as specified in the call to OpenRandomFile *)
  125.  
  126.  
  127. PROCEDURE NumRecs(File: RandomFile) : LONGCARD;
  128. (* Determine number of records in file (excluding any header block) by using
  129. the size of the file contained in the file info block *)
  130.  
  131.  
  132.  
  133. PROCEDURE Reset(File: RandomFile; RecSize: CARDINAL; HeaderSize: CARDINAL;
  134. BufferedBytes: LONGCARD);
  135. (* reset the "RecSize", "HeaderSize", and "BufferedBytes" parameters for
  136. the given random file.  Causes read and write buffers to be flushed first.
  137. Using this procedure you can read/write headers which are themselves composed
  138. of more than a single record , or which
  139. contain information (such as the record length) about the file itself.
  140. *)
  141.  
  142.  
  143. PROCEDURE SetWriteAccessMode(File: RandomFile; WriteAccessMode:
  144. FileWriteAccessMode);
  145. (* set the access mode that will be used for future writes to this file *)
  146. (* Random gives the most flexibility, Ascending is faster if you can always
  147. guarantee that the writes will go to records in asscending order, and Sequential
  148. is the fastest, but writes must go in ascending consecutive order .
  149. Note: This causes the write buffer to be flushed.
  150. Note: Sequential or Ascending write access does not restrict in any way
  151. you from reading the file randomly, and the writes do not need to begin with
  152. record 1. *)
  153. (* Sequential is particularly affective when you have a large number of records
  154. to be appended to the end of a file. *)
  155.  
  156.  
  157. END RandomIO.
  158.