home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / progm / cbase.zip / CBASE10B.ZIP / CBASE.ZIP / CBASE.H < prev    next >
Text File  |  1989-11-08  |  8KB  |  215 lines

  1. /*    Copyright (c) 1989 Citadel    */
  2. /*       All Rights Reserved        */
  3.  
  4. /* #ident    "cbase.h    1.2 - 89/11/08" */
  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
  15.      sequential access to records.  Below are listed the predefined
  16.      data types provided with cbase.  See the the cbase Programmer's
  17.      Guide for information on adding new data types.
  18.  
  19.      t_char         signed character
  20.      t_charv        signed character array
  21.      t_uchar        unsigned character
  22.      t_ucharv       unsigned character array
  23.      t_short        signed short integer
  24.      t_shortv       signed short integer array
  25.      t_ushort       unsigned short integer
  26.      t_ushortv      unsigned short integer array
  27.      t_int          signed integer
  28.      t_intv         signed integer array
  29.      t_uint         unsigned integer
  30.      t_uintv        unsigned integer array
  31.      t_long         long integer
  32.      t_longv        long integer array
  33.      t_ulong        unsigned long integer
  34.      t_ulongv       unsigned long integer array
  35.      t_float        float
  36.      t_floatv       float array
  37.      t_double       double
  38.      t_doublev      double array
  39.      t_ldouble      long double
  40.      t_ldoublev     long double array
  41.      t_pointer      pointer
  42.      t_pointerv     pointer array
  43.      t_string       character string
  44.      t_binary       block of binary data (e.g., graphics)
  45.  
  46. SEE ALSO
  47.      cbclose, cbcreate, cbdelcur, cbexport, cbgetkcur, cbgetlck,
  48.      cbgetr, cbgetrcur, cbgetrf, cbimport, cbinscur, cbinsert,
  49.      cbkcursor, cbkeyalign, cbkeyfirst, cbkeylast, cbkeynext,
  50.      cbkeyprev, cbkeysrch, cblock, cbopen, cbputr, cbrcursor,
  51.      cbreccnt, cbrecfirst, cbreclast, cbrecnext, cbrecprev, cbrecsize,
  52.      cbsetkcur, cbsetrcur, cbsync.
  53.  
  54. ------------------------------------------------------------------------------*/
  55. #ifndef CBASE_H        /* prevent multiple includes */
  56. #define CBASE_H
  57.  
  58. #include <btree.h>
  59. #include <lseq.h>
  60. /*#include <stddef.h>*/
  61.  
  62. /* macros */
  63. /* macro for sizeof a structure member */
  64. #define sizeofm(struct_t, member) ((size_t)(sizeof(((struct_t *)0)->member)))
  65.  
  66. /* constants */
  67. #define CBOPEN_MAX    BOPEN_MAX    /* max # cbases open at once */
  68. #define CBM        (5)        /* m-way btree */
  69.  
  70. /* type definitions */
  71. typedef lspos_t    cbrpos_t;        /* cbase record file position */
  72. typedef btpos_t cbkpos_t;        /* cbase key file position */
  73.  
  74. typedef struct {            /* field definition */
  75.     size_t offset;            /* offset of field in record */
  76.     size_t len;            /* field length */
  77.     int type;            /* field data type */
  78.     int flags;            /* flags */
  79.     char filename[FILENAME_MAX + 1];
  80.                     /* name of file to store keys in */
  81. } cbfield_t;
  82.  
  83. typedef struct {            /* cbase control structure */
  84.     lseq_t *lsp;            /* lseq file containing records */
  85.     int flags;            /* status flags */
  86.     int fldc;            /* field count */
  87.     cbfield_t *fldv;        /* field definitions */
  88.     btree_t **btpv;            /* btree containing keys */
  89. } cbase_t;
  90.  
  91. /* cbfield_t bit flags */
  92. #define CB_FFLAGS      (03)    /* mask for all flags */
  93. #define CB_FKEY          (01)    /* field is a key */    
  94. #define CB_FUNIQ      (02)    /* constrain key to be unique */
  95.  
  96. /* function declarations */
  97. #if __STDC__ == 1
  98. int        cbclose(cbase_t *cbp);
  99. int        cbcreate(const char *cbname, size_t recsize, int fldc,
  100.             const cbfield_t fldv[]);
  101. int        cbdelcur(cbase_t *cbp);
  102. int        cbexport(cbase_t *cbp, const char *filename);
  103. int        cbgetkcur(cbase_t *cbp, int field, cbkpos_t *cbkpos_p);
  104. int        cbgetlck(cbase_t *cbp);
  105. int        cbgetr(cbase_t *cbp , void *buf);
  106. int        cbgetrcur(cbase_t *cbp, cbrpos_t *cbrpos_p);
  107. int        cbgetrf(cbase_t *cbp, int field, void *buf);
  108. int        cbimport(cbase_t *cbp, const char *filename);
  109. int        cbinscur(cbase_t *cbp, const void *buf);
  110. int        cbinsert(cbase_t *cbp, const void *buf);
  111. #define        cbkcursor(CBP, FIELD)    (btcursor((CBP)->btpv[(FIELD)]))
  112. int        cbkeyalign(cbase_t *cbp, int field);
  113. int        cbkeyfirst(cbase_t *cbp, int field);
  114. int        cbkeylast(cbase_t *cbp, int field);
  115. int        cbkeynext(cbase_t *cbp, int field);
  116. int        cbkeyprev(cbase_t *cbp, int field);
  117. int        cbkeysrch(cbase_t *cbp, int field, void *buf);
  118. int        cblock(cbase_t *cbp, int ltype);
  119. cbase_t *    cbopen(const char *cbname, const char *type, int cbfldc,
  120.             const cbfield_t fldv[]);
  121. int        cbputr(cbase_t *cbp , const void *buf);
  122. #define        cbrcursor(CBP)    (lscursor((CBP)->lsp))
  123. #define        cbreccnt(CBP)    ((unsigned long)lsreccnt((CBP)->lsp))
  124. int        cbrecfirst(cbase_t *cbp);
  125. int        cbreclast(cbase_t *cbp);
  126. int        cbrecnext(cbase_t *cbp);
  127. int        cbrecprev(cbase_t *cbp);
  128. #define        cbrecsize(CBP)    ((size_t)lsrecsize((CBP)->lsp))
  129. int        cbsetkcur(cbase_t *cbp, int field, const cbkpos_t *cbkpos_p);
  130. int        cbsetrcur(cbase_t *cbp, const cbrpos_t *cbrpos_p);
  131. int        cbsync(cbase_t *cbp);
  132. #else
  133. int        cbclose();
  134. int        cbcreate();
  135. int        cbdelcur();
  136. int        cbexport();
  137. int        cbgetkcur();
  138. int        cbgetlck();
  139. int        cbgetr();
  140. int        cbgetrcur();
  141. int        cbgetrf();
  142. int        cbimport();
  143. int        cbinscur();
  144. int        cbinsert();
  145. #define        cbkcursor(CBP, FIELD)    (btcursor((CBP)->btpv[(FIELD)]))
  146. int        cbkeyalign();
  147. int        cbkeyfirst();
  148. int        cbkeylast();
  149. int        cbkeynext();
  150. int        cbkeyprev();
  151. int        cbkeysrch();
  152. int        cblock();
  153. cbase_t *    cbopen();
  154. int        cbputr();
  155. #define        cbrcursor(CBP)    (lscursor((CBP)->lsp))
  156. #define        cbreccnt(CBP)    (lsreccnt((CBP)->lsp))
  157. int        cbrecfirst();
  158. int        cbreclast();
  159. int        cbrecnext();
  160. int        cbrecprev();
  161. #define        cbrecsize(CBP)    (lsrecsize((CBP)->lsp))
  162. int        cbsetkcur();
  163. int        cbsetrcur();
  164. int        cbsync();
  165. #endif    /* #if __STDC__ == 1 */
  166.  
  167. /* lock types */
  168. #define CB_UNLCK    (0)    /* unlock */
  169. #define CB_RDLCK    (1)    /* read lock */
  170. #define CB_WRLCK    (2)    /* write lock */
  171. #define CB_RDLKW    (3)    /* read lock, wait */
  172. #define CB_WRLKW    (4)    /* write lock, wait */
  173.  
  174. /* cbase data types */
  175. #define t_char         (0)    /* signed character */
  176. #define t_charv         (1)    /* signed character vector */
  177. #define t_uchar         (2)    /* unsigned character */
  178. #define t_ucharv     (3)    /* unsigned character vector */
  179. #define t_short         (4)    /* signed short integer */
  180. #define t_shortv     (5)    /* signed short integer vector */
  181. #define t_ushort     (6)    /* unsigned short integer */
  182. #define t_ushortv     (7)    /* unsigned short integer vector */
  183. #define t_int         (8)    /* signed integer */
  184. #define t_intv         (9)    /* signed integer vector */
  185. #define t_uint        (10)    /* unsigned integer */
  186. #define t_uintv        (11)    /* unsigned integer vector */
  187. #define t_long        (12)    /* long integer */
  188. #define t_longv        (13)    /* long integer vector */
  189. #define t_ulong        (14)    /* unsigned long integer */
  190. #define t_ulongv    (15)    /* unsigned long integer vector */
  191. #define t_float        (16)    /* float */
  192. #define t_floatv    (17)    /* float vector */
  193. #define t_double    (18)    /* double */
  194. #define t_doublev    (19)    /* double vector */
  195. #define t_ldouble    (20)    /* long double */
  196. #define t_ldoublev    (21)    /* long double vector */
  197. #define t_pointer    (22)    /* pointer */
  198. #define t_pointerv    (23)    /* pointer vector */
  199. #define t_string    (24)    /* character string */
  200. #define t_binary    (25)    /* block of binary data (e.g., graphics) */
  201.  
  202. /* error codes */
  203. #define CBEOS        (-60)        /* start of cbase error code domain */
  204. #define CBEMFILE    (CBEOS - 1)    /* too many open cbases */
  205. #define CBECORRUPT    (CBEOS - 2)    /* cbase is corrupt */
  206. #define CBENOPEN    (CBEOS - 3)    /* cbase is not open */
  207. #define CBELOCK        (CBEOS - 4)    /* incorrect lock type */
  208. #define CBENREC        (CBEOS - 5)    /* no record */
  209. #define CBENKEY        (CBEOS - 6)    /* no key */
  210. #define CBEDUP        (CBEOS - 7)    /* duplicate */
  211. #define CBEPRFILE    (CBEOS - 8)    /* printable file error */
  212. #define CBEPANIC    (CBEOS - 9)    /* internal cbase error */
  213.  
  214. #endif        /* #ifndef CBASE_H */
  215.