home *** CD-ROM | disk | FTP | other *** search
/ Frostbyte's 1980s DOS Shareware Collection / floppyshareware.zip / floppyshareware / DOOG / CBASE09.ZIP / CBASE.ZIP / CBASE.H < prev    next >
Text File  |  1989-08-31  |  6KB  |  146 lines

  1. /*    Copyright (c) 1989 Citadel    */
  2. /*       All Rights Reserved        */
  3.  
  4. /* #ident    "cbase.h    1.1 - 89/08/31" */
  5.  
  6. /*man---------------------------------------------------------------------------
  7. NAME
  8.      cbase - C database library
  9.  
  10. SYNOPSIS
  11.      #include <cbase.h>
  12.  
  13. DESCRIPTION
  14.      cbase is a database file managment library for indexed and sequential
  15.      access to stored records.
  16.  
  17. SEE ALSO
  18.      cbclose, cbcreate, cbdelcur, cbgetkcur, cbgetlck, cbgetr, cbgetrcur,
  19.      cbgetrf, cbinscur, cbinsert, cbkcursor, cbkeyalign, cbkeyfirst,
  20.      cbkeylast, cbkeynext, cbkeyprev, cbkeysrch, cblock, cbopen, cbputr,
  21.      cbrcursor, cbreccnt, cbrecfirst, cbreclast, cbrecnext, cbrecprev,
  22.      cbrecsize, cbsetkcur, cbsetrcur, cbsync.
  23.  
  24. ------------------------------------------------------------------------------*/
  25. #ifndef CBASE_H        /* prevent multiple includes */
  26. #define CBASE_H
  27.  
  28. #include <blkio.h>
  29. #include <btree.h>
  30. #include <lseq.h>
  31. /* #include <stddef.h> */
  32.  
  33. /* sizeof macro for structure member */
  34. #define sizeofm(struct_t, member) ((size_t)(sizeof(((struct_t *)0)->member)))
  35.  
  36. /* cbase constants */
  37. #define CBOPEN_MAX    BOPEN_MAX    /* max # cbases open at once */
  38. #define CBFIELD_MAX    (25)        /* max # fields in a record */
  39. #define CBM        (5)        /* m-way btree */
  40.  
  41. /* cbase type definitions */
  42. typedef lspos_t    cbrpos_t;        /* cbase record file position */
  43. typedef btpos_t cbkpos_t;        /* cbase key file position */
  44.  
  45. typedef struct {            /* field definition */
  46.     size_t offset;            /* offset of field in record */
  47.     size_t size;            /* size of field */
  48.     int type;            /* type of field */
  49.     int flags;            /* flags */
  50.     char filename[FILENAME_MAX];    /* name of file to store keys in */
  51. } cbfield_t;
  52.  
  53. typedef struct {            /* cbase control structure */
  54.     lseq_t *lsp;            /* lseq file containing records */
  55.     int flags;            /* status flags */
  56.     cbfield_t fields[CBFIELD_MAX];    /* field definitions */
  57.     size_t fldcnt;            /* number of fields */
  58.     btree_t *btp[CBFIELD_MAX];    /* btree files containing keys */
  59. } cbase_t;
  60. extern cbase_t cbb[CBOPEN_MAX];    /* cbase control structure table declaration */
  61.  
  62. /* cbase fields flag bits */
  63. #define CBFKEY          (01)    /* field is a key */    
  64. #define CBFUNIQ          (02)    /* constrain key to be unique */
  65.  
  66. /* cbb flag bits */
  67. #define CBOPEN          (03)    /* open status bits */
  68. #define CBREAD          (01)    /* cbase is open for reading */
  69. #define CBWRITE          (02)    /* cbase is open for writing */
  70. #define CBLOCKS         (030)    /* lock status bits */
  71. #define CBRDLCK         (010)    /* cbase is read locked */
  72. #define CBWRLCK         (020)    /* cbase is write locked */
  73. #define CBERR        (0100)    /* error has occurred on this cbase */
  74.  
  75. /* function declarations */
  76. int        cbclose(/* cbase_t *cbp */);
  77. int        cbcreate(/* char *cbname, size_t recsize, cbfield_t *fields,
  78.                             size_t fldcnt */);
  79. int        cbdelcur(/* cbase_t *cbp */);
  80. int        cbgetkcur(/* cbase_t *cbp, int field, cbkpos_t *cbkpos_p */);
  81. int        cbgetlck(/* cbase_t *cbp */);
  82. int        cbgetr(/* cbase_t *cbp , void *buf */);
  83. int        cbgetrcur(/* cbase_t *cbp, cbrpos_t *cbrpos_p */);
  84. int        cbgetrf(/* cbase_t *cbp, int field, void *buf */);
  85. int        cbinscur(/* cbase_t *cbp, void *buf */);
  86. int        cbinsert(/* cbase_t *cbp, void *buf */);
  87. #define        cbkcursor(CBP, FIELD)    (btcursor((CBP)->btp[(FIELD) - 1]))
  88. int        cbkeyalign(/* cbase_t *cbp, int field */);
  89. int        cbkeyfirst(/* cbase_t *cbp, int field */);
  90. int        cbkeylast(/* cbase_t *cbp, int field */);
  91. int        cbkeynext(/* cbase_t *cbp, int field */);
  92. int        cbkeyprev(/* cbase_t *cbp, int field */);
  93. int        cbkeysrch(/* cbase_t *cbp, int field, void *buf */);
  94. int        cblock(/* cbase_t *cbp, int l_type */);
  95. cbase_t *    cbopen(/* char *cbname, char *type, cbfield_t *fields,
  96.                             size_t fldcnt */);
  97. int        cbputr(/* cbase_t *cbp , void *buf */);
  98. #define        cbrcursor(CBP)    (lscursor((CBP)->lsp))
  99. #define        cbreccnt(CBP)    (lsreccnt((CBP)->lsp))
  100. int        cbrecfirst(/* cbase_t *cbp */);
  101. int        cbreclast(/* cbase_t *cbp */);
  102. int        cbrecnext(/* cbase_t *cbp */);
  103. int        cbrecprev(/* cbase_t *cbp */);
  104. #define        cbrecsize(CBP)    (lsrecsize((CBP)->lsp))
  105. int        cbsetkcur(/* cbase_t *cbp, int field, cbkpos_t *cbkpos_p */);
  106. int        cbsetrcur(/* cbase_t *cbp, cbrpos_t *cbrpos_p */);
  107. int        cbsync(/* cbase_t *cbp */);
  108.  
  109. /* cbase lock types */
  110. #define CB_UNLCK    (0)    /* unlock */
  111. #define CB_RDLCK    (1)    /* read lock */
  112. #define CB_WRLCK    (2)    /* write lock */
  113. #define CB_RDLKW    (3)    /* read lock, wait */
  114. #define CB_WRLKW    (4)    /* write lock, wait */
  115.  
  116. /* cbase data types */
  117. #define t_char        (1)    /* signed character */
  118. #define t_uchar        (2)    /* unsigned character */
  119. #define t_short        (3)    /* signed short integer */
  120. #define t_ushort    (4)    /* unsigned short integer */
  121. #define t_int        (5)    /* signed integer */
  122. #define t_uint        (6)    /* unsigned integer */
  123. #define t_long        (7)    /* long integer */
  124. #define t_ulong        (8)    /* unsigned long integer */
  125. #define t_float        (9)    /* float */
  126. #define t_double    (10)    /* double */
  127. #define t_ldouble    (11)    /* long double */
  128. #define t_pointer    (12)    /* void pointer */
  129. #define t_string    (13)    /* character string */
  130. #define t_binary    (14)    /* block of binary data (e.g., graphics) */
  131. typedef int (*pfcbcmp_t)(/* void *s1, void *s2, size_t n */);
  132. extern pfcbcmp_t cbcmp_p[];    /* cbase comparison function table decl. */
  133.  
  134. /* cbase error codes */
  135. #define CBEOS        (-200)        /* start of cbase error code domain */
  136. #define CBEMFILE    (CBEOS - 1)    /* too many open cbases */
  137. #define CBECORRUPT    (CBEOS - 2)    /* cbase is corrupt */
  138. #define CBENOPEN    (CBEOS - 3)    /* cbase is not open */
  139. #define CBELOCK        (CBEOS - 4)    /* incorrect lock type */
  140. #define CBENREC        (CBEOS - 5)    /* no record */
  141. #define CBENKEY        (CBEOS - 6)    /* no key */
  142. #define CBEDUP        (CBEOS - 7)    /* duplicate */
  143. #define CBEPANIC    (CBEOS - 10)    /* internal cbase error */
  144.  
  145. #endif        /* #ifndef CBASE_H */
  146.