home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / library / dos / database / db12 / db.h < prev    next >
Encoding:
C/C++ Source or Header  |  1987-11-15  |  10.8 KB  |  252 lines

  1. /****************************************************************************/
  2. /*                                                                          */
  3. /*                                                                          */
  4. /*      db.h          (c) 1987  Ken Harris                                  */
  5. /*                                                                          */
  6. /*                                                                          */
  7. /****************************************************************************/
  8. /*                                                                          */
  9. /*      This software is made available on an AS-IS basis. Unrestricted     */
  10. /*      use is granted provided that the copywrite notice remains intack.   */
  11. /*      The author makes no warranties expressed or implied.                */
  12. /*                                                                          */
  13. /****************************************************************************/
  14. /*                                                                          */
  15. /*  09/12/87 - Change the alloc's to calloc's and movmem's to memcpy        */
  16. /*             Make pointer changes for Large Model                         */
  17. /*                                                                          */
  18. /*  11/02/87 - Fix index file corruption problem                */
  19. /*                                        */
  20. /*  11/15/87 - Add Read Last/Prev routines                    */
  21. /*                                        */
  22. /****************************************************************************/
  23.  
  24.  
  25. #define DB_VERSION    12          /* Version 1.2            */
  26. #define FILE_NAME_MAX 50
  27.  
  28. #define YES -1
  29. #define NO   0
  30.  
  31. typedef unsigned long  ulong;
  32. typedef unsigned short ushort;
  33. typedef unsigned int   uint;
  34. typedef unsigned char  uchar;
  35.  
  36. /*
  37.  *      db_file_hdr  -  File Header Record
  38.  */
  39.  
  40. struct db_file_hdr
  41. {       ushort fh_db_version;           /* Data Base Version #          */
  42.         ushort fh_file_type;            /* File Type                    */
  43. #define                                    DB_SEQ       1
  44. #define                                    DB_RANDOM    2
  45. #define                                    DB_INDEX     3
  46.  
  47.         ushort fh_file_stat;            /* File Status                  */
  48. #define                                    DB_CLOSED       0
  49. #define                                    DB_OPEN         1
  50. #define                                    DB_DUP_ALLOWED  2
  51.  
  52.         ulong  fh_last_block;           /* Last Allocated Block         */
  53.         ushort fh_block_size;           /* Block Size in bytes          */
  54.         ushort fh_rec_size;             /* Record Size in bytes         */
  55.         ushort fh_ctl_size;             /* Control part of rec size     */
  56.         ushort fh_data_size;            /* User data part of rec size   */
  57.         ulong  fh_rec_cnt;              /* Live Record Cnt              */
  58.         ushort fh_recs_per_blk;         /* Records Per Block            */
  59.         ushort fh_root_ptr;             /* Index File Root Pointer      */
  60.         ushort fh_base_size;            /* Random File Base Size        */
  61.         ushort fh_key_size;             /* Size of record key           */
  62.         ulong  fh_next_avail;           /* First Available Record       */
  63.         ushort fh_atr_size;             /* Size of Attribute Block      */
  64.         char   fh_reserved[220];        /* Reserved for Future Use      */
  65.         char   fh_user_data[256];       /* User Control Info            */
  66. };
  67.  
  68. typedef  struct db_file_hdr *FILE_HDR;
  69.  
  70. /*
  71.  *      db_data_buf  -  Data buffer
  72.  */
  73.  
  74. struct db_data_buf
  75. {       struct db_data_buf *buf_prev;   /* Previous Buffer in list      */
  76.         struct db_data_buf *buf_next;   /* Next Buffer in list          */
  77.         ushort buf_size;                /* Size of Buffer in Bytes      */
  78.         ulong  buf_cur_blk;             /* Current Block (0 = none)     */
  79.         ushort buf_cur_size;            /* Current Block Size           */
  80.         ushort buf_rec_inx;             /* Record index into block      */
  81.         char  *buf_data;                /* Pointer to data              */
  82. };
  83.  
  84. typedef  struct db_data_buf *BUFFER;
  85.  
  86.  
  87. /*
  88.  *      db_data_set  -  Data Set Descriptor Block
  89.  */
  90.  
  91. struct db_data_set
  92. {       ushort ds_stat;                 /* Data Set Status              */
  93.         BUFFER ds_fhdr;                 /* File Header Buffer           */
  94.         int    ds_fd;                   /* File descriptor              */
  95.         char   ds_fname[FILE_NAME_MAX]; /* File name                    */
  96.         ulong  ds_prev_blk;             /* Prev Block Read              */
  97.         ushort ds_prev_rec;             /* Prev Record Read             */
  98.         struct db_data_buf *ds_buf;     /* Data Buffer                  */
  99.         struct db_data_buf *ds_tmp;     /* Tmp Data Buffer              */
  100.         struct db_data_buf *ds_aux;     /* Another Tmp Data Buffer      */
  101. };
  102.  
  103. typedef  struct db_data_set *DATA_SET;
  104.                            
  105.  
  106. /*
  107.  *      Record types
  108.  */
  109.  
  110. struct db_free_rec
  111. {       char  fre_stat;                 /* Status                       */
  112. #define                                    DB_FREE   '0'
  113. #define                                    DB_INUSE  '1'
  114.         ulong fre_next;                 /* Next Available               */
  115. };
  116.  
  117. struct db_seq_rec
  118. {       char  seq_stat;                 /* Status                       */
  119. };
  120.  
  121. struct db_index_hdr
  122. {       char   idx_stat;                /* Status                       */
  123.         ushort idx_parent;              /* Pointer to Parent            */
  124.         ushort idx_rec_cnt;             /* Keys in this block           */
  125. };
  126.  
  127. struct db_index_rec
  128. {       ushort idx_idx_ptr;             /* Pointer to index block       */
  129. };
  130.  
  131. struct db_random_hdr
  132. {       char   ran_stat;                /* Status                       */
  133.         ushort ran_next;                /* Overflow pointer             */
  134.         ushort ran_rec_cnt;             /* Live Recs in this block      */
  135. };
  136.           
  137. struct db_random_rec
  138. {       char   ran_stat;                /* Status                       */
  139. };
  140.           
  141. typedef struct db_free_rec   *FREE_REC;
  142. typedef struct db_seq_rec    *SEQ_REC;
  143. typedef struct db_index_hdr  *INDEX_HDR;
  144. typedef struct db_index_rec  *INDEX_REC;
  145. typedef struct db_random_hdr *RANDOM_HDR;
  146. typedef struct db_random_rec *RANDOM_REC;
  147.  
  148.  
  149. #define DB_FILE_NOT_FOUND      1
  150. #define DB_READ_ERROR          2
  151. #define DB_END_OF_FILE         3
  152. #define DB_WRITE_ERROR         4
  153. #define DB_FILE_NOT_CREATED    5
  154. #define DB_FILE_NOT_OPEN       6
  155. #define DB_INVALID_BLOCK       7
  156. #define DB_BUFFER_ERROR        8
  157. #define DB_NO_CURRENT_REC      9
  158. #define DB_DELETED_REC        10
  159. #define DB_INVALID_FREE       11
  160. #define DB_INVALID_BLK_SIZE   12
  161. #define DB_INVALID_INDEX      13
  162. #define DB_REC_NOT_FOUND      14
  163. #define DB_DUP_NOT_ALLOWED    15
  164. #define DB_INVALID_REQUEST    16
  165. #define DB_INVALID_RANDOM     17
  166. #define DB_INVALID_FHDR       18
  167. #define DB_VERSION_ERROR      19
  168.  
  169. extern int    db_error;
  170. extern ulong  db_match_blk;
  171. extern ushort db_match_rec;
  172. extern ulong  db_add_blk;
  173. extern ushort db_add_rec;
  174.  
  175. /*
  176.  *    db_main defs
  177.  */
  178.  
  179. /*global*/  struct db_data_set *db_create(char *,char *,struct db_file_hdr *);
  180. /*global*/  void db_fhdr_create(struct db_file_hdr *);
  181. /*global*/  struct db_data_set *db_open(char *,char *);
  182. /*global*/  void db_fhdr_open(struct db_file_hdr *);
  183. /*global*/  struct db_data_set *db_close(struct db_data_set *);
  184. /*global*/  unsigned long db_add(struct db_data_set *,);
  185. /*global*/  void db_read_first(struct db_data_set *,);
  186. /*global*/  void db_read_next(struct db_data_set *,);
  187. /*global*/  void db_read_last(struct db_data_set *,);
  188. /*global*/  void db_read_prev(struct db_data_set *,);
  189. /*global*/  void db_find(struct db_data_set *,);
  190. /*global*/  void db_update(struct db_data_set *,);
  191. /*global*/  void db_delete(struct db_data_set *);
  192. /*global*/  unsigned long db_get_rec_no(struct db_data_set *);
  193. /*global*/  void db_read_direct(struct db_data_set *,unsigned long ,);
  194. /*global*/  void db_read_atr(struct db_data_set *,);
  195. /*global*/  void db_update_atr(struct db_data_set *,);
  196. /*global*/  void db_check_ds(struct db_data_set *);
  197. /*global*/  void db_extend(struct db_data_set *,struct db_data_buf *);
  198. /*global*/  void db_get_next_avail(struct db_data_set *,struct db_data_buf *);
  199. /*global*/  void db_free_rec(struct db_data_set *,struct db_data_buf *);
  200. /*global*/  void db_get_blk(struct db_data_set *,long ,struct db_data_buf *);
  201. /*global*/  void db_put_blk(struct db_data_set *,struct db_data_buf *);
  202. /*global*/  struct db_data_buf *db_alloc_buf(int );
  203. /*global*/  struct db_data_buf *db_free_buf(struct db_data_buf *);
  204. /*global*/  void db_free_ds(struct db_data_set *);
  205. /*global*/  char *db_error_msg(int );
  206.  
  207. /*
  208.  *    db_seq defs
  209.  */
  210.  
  211. /*global*/  void db_add_seq(struct db_data_set *,char *);
  212. /*global*/  void db_read_first_seq(struct db_data_set *,char *);
  213. /*global*/  void db_read_next_seq(struct db_data_set *,char *);
  214. /*global*/  void db_read_last_seq(struct db_data_set *,char *);
  215. /*global*/  void db_read_prev_seq(struct db_data_set *,char *);
  216. /*global*/  void db_update_seq(struct db_data_set *,char *);
  217.  
  218. /*
  219.  *    db_ran defs
  220.  */
  221.  
  222. /*global*/  void db_add_ran(struct db_data_set *,char *);
  223. /*global*/  void db_find_ran(struct db_data_set *,char *,char *);
  224. /*global*/  void db_read_first_ran(struct db_data_set *,char *);
  225. /*global*/  void db_read_next_ran(struct db_data_set *,char *);
  226. /*global*/  void db_read_last_ran(struct db_data_set *,char *);
  227. /*global*/  void db_read_prev_ran(struct db_data_set *,char *);
  228. /*global*/  void db_update_ran(struct db_data_set *,char *);
  229. /*global*/  void db_delete_ran(struct db_data_set *);
  230. /*global*/  void db_delete_blk_ran(struct db_data_set *,unsigned long );
  231. /*global*/  short db_hash_ran(struct db_data_set *,char *);
  232. /*global*/  short db_search_blk_ran(struct db_data_set *,char *,struct db_data_buf *);
  233.  
  234. /*
  235.  *    db_idx defs
  236.  */
  237.  
  238. /*global*/  void db_add_idx(struct db_data_set *,char *);
  239. /*global*/  void db_find_insert_idx(struct db_data_set *,char *,int );
  240. /*global*/  void db_split_blk_idx(struct db_data_set *);
  241. /*global*/  void db_read_first_idx(struct db_data_set *,unsigned short ,char *);
  242. /*global*/  void db_read_next_idx(struct db_data_set *,char *);
  243. /*global*/  void db_read_last_idx(struct db_data_set *,unsigned short ,char *);
  244. /*global*/  void db_read_prev_idx(struct db_data_set *,char *);
  245. /*global*/  void db_get_parent_idx(struct db_data_set *);
  246. /*global*/  void db_find_first_idx(struct db_data_set *,char *,char *,int );
  247. /*global*/  void db_delete_idx(struct db_data_set *);
  248. /*global*/  short db_move_to_leaf_idx(struct db_data_set *);
  249. /*global*/  void db_balance_idx(struct db_data_set *);
  250. /*global*/  void db_update_idx(struct db_data_set *,char *);
  251.  
  252.