home *** CD-ROM | disk | FTP | other *** search
- /*
- * INXDEFS.H - data definitions for all index modules
- *
- * Copyright (c) 1987, Jim Mischel
- * Modifications:
- *
- * 08/13/87 - jim - original coding
- */
- #define __INDEX__
- /*#define FLOAT_KEY /* for float and double keys */
-
- #include <stdio.h>
- #include <io.h>
- #include <alloc.h>
- #include <mem.h>
- #include <string.h>
- #include "index.h"
-
-
- #define fsize(f) filelength(fileno((f)))
-
- /* index file record */
- typedef struct {
- long if_dat_ptr, /* pointer to data file record */
- if_left_node, /* left descendent */
- if_right_node, /* right descendent */
- if_parent; /* there's got to be a better way!!! */
- char if_flags; /* flags */
- } inx_rec;
-
- /* database control record */
- typedef struct {
- char *df_path; /* pathname (no extension) */
- FILE *df_inx_file, /* index file */
- *df_dat_file; /* data file */
- inx_rec df_inx_buff; /* index file buffer */
- inx_rec df_nxt_buff; /* buffer for read next/previous */
- long df_nxt_ptr; /* pointer for read next/previous */
- char *df_dat_buff; /* data file buffer */
- unsigned df_rec_size; /* data record size */
- int (*df_cmp)(); /* pointer to comparison routine */
- char *df_key_ptr; /* pointer to key in data buffer */
- unsigned df_key_offset; /* offset of key from beginning of record */
- char df_flags; /* flags */
- long df_inx_ptr; /* current index record */
- long df_dat_ptr; /* current data record */
- } df_rec;
-
- #define RTHRD 0x01
- #define LTHRD 0x02
- #define ETHRD 0x04
- #define BTHRD 0x08
-
- #define DF_DUP 0x01
- #define DF_EOF 0x02
- #define DF_TOF 0x04
- #define DF_START 0x08
- #define DF_DELETE 0x10
-
- /* internal support functions */
- int isearch(df_rec *db_control, char *key);
- int iget_next(df_rec *db_control, inx_rec *irec);
- int iget_prev(df_rec *db_control, inx_rec *irec);
- int iget_root(df_rec *db_control);
- int iread_inx(df_rec *db_control, long seek_pos);
- int iwrite_inx(df_rec *db_control, inx_rec *irec, long seek_pos);
- int iread_dat(df_rec *db_control, long seek_pos);
- int iwrite_dat(df_rec *db_control, void *datrec, long seek_pos);
- int ierror(int e);
-
- /* comparison routines */
- int icmp_uchar(void *arg1, void *arg2);
- int icmp_schar(void *arg1, void *arg2);
- int icmp_uint(void *arg1, void *arg2);
- int icmp_sint(void *arg1, void *arg2);
- int icmp_ulong(void *arg1, void *arg2);
- int icmp_slong(void *arg1, void *arg2);
- int icmp_string(void *arg1, void *arg2);
-
- #ifdef FLOAT_KEY
- int icmp_float(void *arg1, void *arg2);
- int icmp_double(void *arg1, void *arg2);
-
- int (*icmp_rtns[])() = {icmp_uchar, icmp_schar, icmp_uint, icmp_sint,
- icmp_ulong, icmp_slong, icmp_string, icmp_float,
- icmp_double};
- #else
- int (*icmp_rtns[])() = {icmp_uchar, icmp_schar, icmp_uint, icmp_sint,
- icmp_ulong, icmp_slong, icmp_string};
- #endif