home *** CD-ROM | disk | FTP | other *** search
/ World of Shareware - Software Farm 2 / wosw_2.zip / wosw_2 / CPROG / CBASE101.ZIP / BLKIO112.ZIP / BLKIO.H < prev    next >
Text File  |  1990-06-20  |  6KB  |  193 lines

  1. /*    Copyright (c) 1989 Citadel    */
  2. /*       All Rights Reserved        */
  3.  
  4. /* #ident    "@(#)blkio.h    1.4 - 90/06/20" */
  5.  
  6. /*man---------------------------------------------------------------------------
  7. NAME
  8.      blkio - block buffered input/output library
  9.  
  10. SYNOPSIS
  11.      #include <blkio.h>
  12.  
  13. DESCRIPTION
  14.      blkio is a buffered input/output library for structured files.
  15.      Because structured files are primarily accessed randomly rather
  16.      than sequentially, they are better modeled as collections of
  17.      blocks rather than as streams of characters.  This library may be
  18.      used with files which fit the following criteria:
  19.  
  20.           o A header of arbitrary (possibly zero) but fixed
  21.             length appears at the beginning of the file.
  22.           o The data following the header is arranged in
  23.             blocks of uniform size.
  24.  
  25.      Files fitting this model are referred to in the documentation as
  26.      block files.
  27.  
  28.      A file to be accessed with the blkio library is declared to be a
  29.      pointer to a defined type BLKFILE.  The bopen function creates
  30.      certain descriptive data for the file and returns a pointer to
  31.      designate it in all further transactions.
  32.  
  33. SEE ALSO
  34.      bclose, bexit, bflpop, bflpush, bflush, bgetb, bgetbf, bgeth,
  35.      bgethf, bopen, bputb, bputbf, bputh, bputhf, bsetbuf, bsetvbuf,
  36.      bsync, lockb.
  37.  
  38. ------------------------------------------------------------------------------*/
  39. #ifndef BLKIO_H        /* prevent multiple includes */
  40. #define BLKIO_H
  41.  
  42. /* ansi c support macros */
  43. #define AC_HDRS            /* enable ansi headers */
  44. #define AC_LDOUBLE        /* enable long double data type */
  45. #define AC_PROTO        /* enable function prototypes */
  46. /*#define const            /* disable const keyword */
  47. /*#define signed        /* disable signed keyword */
  48. /*#define void    char        /* disable void data type */
  49.  
  50. /* ansi headers */
  51. #ifdef AC_HDRS
  52. #include <stddef.h>
  53. #else
  54. #include <sys/types.h>        /* replace with header defining size_t */
  55. #endif
  56. #include <stdio.h>
  57. #ifdef AC_HDRS
  58. #include <stdlib.h>
  59. #else
  60. void *    calloc();
  61. void    exit();
  62. void    free();
  63. void *    malloc();
  64. void *    realloc();
  65. #endif
  66. #ifdef AC_HDRS
  67. #include <string.h>
  68. #else
  69. int    memcmp();
  70. void *    memcpy();
  71. void *    memmove();
  72. void *    memset();
  73. char *    strcat();
  74. char *    strncat();
  75. int    strcmp();
  76. char *    strcpy();
  77. int    strncmp();
  78. char *    strncpy();
  79. char *    strstr();
  80. #endif    /* #ifdef AC_HDRS */
  81.  
  82. #ifndef FOPEN_MAX    /* these will be in ansi stdio.h */
  83. #define FOPEN_MAX    40
  84. #endif
  85. #ifndef FILENAME_MAX
  86. #define FILENAME_MAX    25
  87. #endif
  88. #ifndef offsetof    /* this will be in ansi stddef.h */
  89. #define offsetof(struct_t, member)    ((size_t)(char *)&((struct_t *)0)->member)
  90. #endif
  91.  
  92. /* constants */
  93. #define BOPEN_MAX    FOPEN_MAX    /* max # block files open at once */
  94. #define NIL        ((bpos_t)0)    /* nil file pointer */
  95. #define NUL        ('\0')        /* nul char */
  96.  
  97. /* macro for sizeof a structure member */
  98. #define sizeofm(struct_t, member) ((size_t)(sizeof(((struct_t *)0)->member)))
  99.  
  100. /* type definitions */
  101. typedef unsigned long    bpos_t;    /* block file position */
  102.  
  103. typedef union {            /* file desciptor type */
  104.     char cfd;        /* character file descriptor */
  105.     short sfd;        /* short int file descriptor */
  106.     int ifd;        /* int file descriptor */
  107. } fd_t;
  108.  
  109. typedef struct {        /* block structure */
  110.     bpos_t bn;        /* block number */
  111.     int flags;        /* block status flags */
  112.     size_t more;        /* link to more recently accessed block */
  113.     size_t less;        /* link to less recently accessed block */
  114. } block_t;
  115.  
  116. typedef struct {        /* block file control structure */
  117.     fd_t fd;        /* file descriptor for buffered file */
  118.     int flags;        /* buffer status flags */
  119.     size_t hdrsize;        /* size of file header */
  120.     size_t blksize;        /* size of blocks */
  121.     size_t bufcnt;        /* number blocks to buffer (0 if unbuffered) */
  122.     bpos_t endblk;        /* first block past end of file */
  123.     size_t most;        /* most recently accessed block [1..bufcnt] */
  124.     size_t least;        /* least recently accessed block [1..bufcnt] */
  125.     block_t *blockp;    /* doubly linked list of blocks */
  126.     void *blkbuf;        /* buffer storage for header and blocks */
  127. } BLKFILE;
  128.  
  129. /* function declarations */
  130. #ifdef AC_PROTO
  131. int        bclose(BLKFILE *bp);
  132. void        bexit(int status);
  133. int        bflpop(BLKFILE *bp, bpos_t *bnp);
  134. int        bflpush(BLKFILE *bp, const bpos_t *bnp);
  135. int        bflush(BLKFILE *bp);
  136. int        bgetb(BLKFILE *bp, bpos_t bn, void *buf);
  137. int        bgetbf(BLKFILE *bp, bpos_t bn, size_t offset,
  138.             void *buf, size_t bufsize);
  139. int        bgeth(BLKFILE *bp, void *buf);
  140. int        bgethf(BLKFILE *bp, size_t offset, void *buf, size_t bufsize);
  141. BLKFILE *    bopen(const char *filename, const char *type,
  142.             size_t hdrsize, size_t blksize, size_t bufcnt);
  143. int        bputb(BLKFILE *bp, bpos_t bn, const void *buf);
  144. int        bputbf(BLKFILE *bp, bpos_t bn,
  145.             size_t offset, const void *buf, size_t bufsize);
  146. int        bputh(BLKFILE *bp, const void *buf);
  147. int        bputhf(BLKFILE *bp, size_t offset,
  148.             const void *buf, size_t bufsize);
  149. int        bsetbuf(BLKFILE *bp, void *buf);
  150. int        bsetvbuf(BLKFILE *bp, void *buf, size_t blksize, size_t bufcnt);
  151. int        bsync(BLKFILE *bp);
  152. int        lockb(BLKFILE *bp, int ltype, bpos_t start, bpos_t len);
  153. #else
  154. int        bclose();
  155. void        bexit();
  156. int        bflpop();
  157. int        bflpush();
  158. int        bflush();
  159. int        bgetb();
  160. int        bgetbf();
  161. int        bgeth();
  162. int        bgethf();
  163. BLKFILE *    bopen();
  164. int        bputb();
  165. int        bputbf();
  166. int        bputh();
  167. int        bputhf();
  168. int        bsetbuf();
  169. int        bsetvbuf();
  170. int        bsync();
  171. int        lockb();
  172. #endif    /* #ifdef AC_PROTO */
  173.  
  174. /* lock types */
  175. #define B_UNLCK        (0)    /* unlock */
  176. #define B_RDLCK        (1)    /* read lock */
  177. #define B_WRLCK        (2)    /* write lock */
  178. #define B_RDLKW        (3)    /* read lock, wait */
  179. #define B_WRLKW        (4)    /* write lock, wait */
  180.  
  181. /* error codes */
  182. #define BEOS        (0)        /* start of blkio error code domain */
  183. #define BEMFILE        (BEOS - 1)    /* too many block files open */
  184. #define BENOPEN        (BEOS - 2)    /* block file is not open */
  185. #define BENBUF        (BEOS - 3)    /* buffering is off */
  186. #define BEBUF        (BEOS - 4)    /* buffering is on */
  187. #define BEBOUND        (BEOS - 5)    /* block boundary error */
  188. #define BEEOF        (BEOS - 6)    /* past end of file */
  189. #define BENFL        (BEOS - 7)    /* no free list */
  190. #define BEPANIC        (BEOS - 8)    /* internal blkio error */
  191.  
  192. #endif    /* #ifndef BLKIO_H */
  193.