#ifndef _DB_H_
#define _DB_H_
#ifndef __NO_SYSTEM_INCLUDES
#include <sys/types.h>
#include <stdio.h>
#endif
#ifdef __MWERKS__
#pragma enumsalwaysint on
#endif
#undef __P
#if defined(__STDC__) || defined(__cplusplus)
#define __P(protos) protos /* ANSI C prototypes */
#else
#define const
#define __P(protos) () /* K&R C preprocessor */
#endif
#ifndef __BIT_TYPES_DEFINED__
#define __BIT_TYPES_DEFINED__
typedef
unsigned
char
u_int8_t;
typedef
short
int16_t;
typedef
unsigned
short
u_int16_t;
typedef
int
int32_t;
typedef
unsigned
int
u_int32_t;
#endif
#if defined(_WIN32) && !defined(_WINSOCKAPI_)
typedef
unsigned
char
u_char;
typedef
unsigned
short
u_short;
typedef
unsigned
int
u_int;
typedef
unsigned
long
u_long;
#endif
#define DB_VERSION_MAJOR 2
#define DB_VERSION_MINOR 3
#define DB_VERSION_PATCH 6
#define DB_VERSION_STRING "Sleepycat Software: DB 2.3.6: (9/4/97)"
typedef
u_int32_t db_pgno_t;
typedef
u_int16_t db_indx_t;
#define DB_MAX_PAGES 0xffffffff /* >= # of pages in a file */
typedef
u_int32_t db_recno_t;
typedef
size_t
DB_LOCK;
#define DB_MAX_RECORDS 0xffffffff /* >= # of records in a tree */
#define DB_FILE_ID_LEN 20 /* DB file ID length. */
struct
__db;
typedef
struct
__db DB;
#ifdef DB_DBM_HSEARCH
typedef
struct
__db DBM;
#endif
struct
__db_bt_stat;
typedef
struct
__db_bt_stat DB_BTREE_STAT;
struct
__db_dbt;
typedef
struct
__db_dbt DBT;
struct
__db_env;
typedef
struct
__db_env DB_ENV;
struct
__db_info;
typedef
struct
__db_info DB_INFO;
struct
__db_lockregion;
typedef
struct
__db_lockregion DB_LOCKREGION;
struct
__db_lockreq;
typedef
struct
__db_lockreq DB_LOCKREQ;
struct
__db_locktab;
typedef
struct
__db_locktab DB_LOCKTAB;
struct
__db_log;
typedef
struct
__db_log DB_LOG;
struct
__db_lsn;
typedef
struct
__db_lsn DB_LSN;
struct
__db_mpool;
typedef
struct
__db_mpool DB_MPOOL;
struct
__db_mpool_fstat;
typedef
struct
__db_mpool_fstat DB_MPOOL_FSTAT;
struct
__db_mpool_stat;
typedef
struct
__db_mpool_stat DB_MPOOL_STAT;
struct
__db_mpoolfile;
typedef
struct
__db_mpoolfile DB_MPOOLFILE;
struct
__db_txn;
typedef
struct
__db_txn DB_TXN;
struct
__db_txn_active;
typedef
struct
__db_txn_active DB_TXN_ACTIVE;
struct
__db_txn_stat;
typedef
struct
__db_txn_stat DB_TXN_STAT;
struct
__db_txnmgr;
typedef
struct
__db_txnmgr DB_TXNMGR;
struct
__db_txnregion;
typedef
struct
__db_txnregion DB_TXNREGION;
struct
__dbc;
typedef
struct
__dbc DBC;
struct
__db_dbt {
void
*data;
u_int32_t size;
u_int32_t ulen;
u_int32_t dlen;
u_int32_t doff;
#define DB_DBT_INTERNAL 0x01 /* Perform any mallocs using regular
malloc
, not the user's
malloc
. */
#define DB_DBT_MALLOC 0x02 /* Return in allocated memory. */
#define DB_DBT_PARTIAL 0x04 /* Partial put/get. */
#define DB_DBT_USERMEM 0x08 /* Return in user's memory. */
u_int32_t flags;
};
#define DB_CREATE 0x00001 /* O_CREAT: create file as necessary. */
#define DB_NOMMAP 0x00002 /* Don't mmap underlying file. */
#define DB_THREAD 0x00004 /* Free-thread DB package handles. */
#define DB_APP_INIT 0x00008 /* Appinit called, paths initialized. */
#define DB_INIT_LOCK 0x00010 /* Initialize locking. */
#define DB_INIT_LOG 0x00020 /* Initialize logging. */
#define DB_INIT_MPOOL 0x00040 /* Initialize mpool. */
#define DB_INIT_TXN 0x00080 /* Initialize transactions. */
#define DB_MPOOL_PRIVATE 0x00100 /* Mpool: private memory pool. */
#define DB_MUTEXDEBUG 0x00200 /* Do not get/set mutexes in regions. */
#define DB_RECOVER 0x00400 /* Run normal recovery. */
#define DB_RECOVER_FATAL 0x00800 /* Run catastrophic recovery. */
#define DB_TXN_NOSYNC 0x01000 /* Do not sync log on commit. */
#define DB_USE_ENVIRON 0x02000 /* Use the environment. */
#define DB_USE_ENVIRON_ROOT 0x04000 /* Use the environment if root. */
#define DB_TXN_LOCK_2PL 0x00000 /* Two-phase locking. */
#define DB_TXN_LOCK_OPTIMISTIC 0x00000 /* Optimistic locking. */
#define DB_TXN_LOCK_MASK 0x00000 /* Lock flags mask. */
#define DB_TXN_LOG_REDO 0x00000 /* Redo-only logging. */
#define DB_TXN_LOG_UNDO 0x00000 /* Undo-only logging. */
#define DB_TXN_LOG_UNDOREDO 0x00000 /* Undo/redo write-ahead logging. */
#define DB_TXN_LOG_MASK 0x00000 /* Log flags mask. */
#define DB_EXCL 0x08000 /* O_EXCL: exclusive open. */
#define DB_RDONLY 0x10000 /* O_RDONLY: read-only. */
#define DB_SEQUENTIAL 0x20000 /* Indicate sequential access. */
#define DB_TEMPORARY 0x40000 /* Remove on last close. */
#define DB_TRUNCATE 0x80000 /* O_TRUNCATE: replace existing DB. */
#define DB_LOCK_NORUN 0x0
#define DB_LOCK_DEFAULT 0x1
#define DB_LOCK_OLDEST 0x2
#define DB_LOCK_RANDOM 0x3
#define DB_LOCK_YOUNGEST 0x4
struct
__db_env {
int
db_lorder;
void
(*db_errcall) __P((
const
char
*,
char
*));
FILE
*db_errfile;
const
char
*db_errpfx;
int
db_verbose;
char
*db_home;
char
*db_log_dir;
char
*db_tmp_dir;
char
**db_data_dir;
int
data_cnt;
int
data_next;
DB_LOCKTAB *lk_info;
u_int8_t *lk_conflicts;
int
lk_modes;
unsigned
int
lk_max;
u_int32_t lk_detect;
int
(*db_yield) __P((
void
));
DB_LOG *lg_info;
u_int32_t lg_max;
DB_MPOOL *mp_info;
size_t
mp_mmapsize;
size_t
mp_size;
DB_TXNMGR *tx_info;
unsigned
int
tx_max;
int
(*tx_recover)
__P((DB_LOG *, DBT *, DB_LSN *,
int
,
void
*));
u_int32_t flags;
};
typedef
enum
{
DB_BTREE=1,
DB_HASH,
DB_RECNO,
DB_UNKNOWN
} DBTYPE;
#define DB_BTREEVERSION 6 /* Current btree version. */
#define DB_BTREEOLDVER 6 /* Oldest btree version supported. */
#define DB_BTREEMAGIC 0x053162
#define DB_HASHVERSION 5 /* Current hash version. */
#define DB_HASHOLDVER 4 /* Oldest hash version supported. */
#define DB_HASHMAGIC 0x061561
#define DB_LOGVERSION 2 /* Current log version. */
#define DB_LOGOLDVER 2 /* Oldest log version supported. */
#define DB_LOGMAGIC 0x040988
struct
__db_info {
int
db_lorder;
size_t
db_cachesize;
size_t
db_pagesize;
void
*(*db_malloc) __P((
size_t
));
int
bt_maxkey;
int
bt_minkey;
int
(*bt_compare)
__P((
const
DBT *,
const
DBT *));
size_t
(*bt_prefix)
__P((
const
DBT *,
const
DBT *));
unsigned
int
h_ffactor;
unsigned
int
h_nelem;
u_int32_t (*h_hash)
__P((
const
void
*, u_int32_t));
int
re_pad;
int
re_delim;
u_int32_t re_len;
char
*re_source;
#define DB_DELIMITER 0x0001 /* Recno: re_delim set. */
#define DB_DUP 0x0002 /* Btree, Hash: duplicate keys. */
#define DB_FIXEDLEN 0x0004 /* Recno: fixed-length records. */
#define DB_PAD 0x0008 /* Recno: re_pad set. */
#define DB_RECNUM 0x0010 /* Btree: record numbers. */
#define DB_RENUMBER 0x0020 /* Recno: renumber on insert/delete. */
#define DB_SNAPSHOT 0x0040 /* Recno: snapshot the input. */
u_int32_t flags;
};
#define DB_AFTER 0x000001 /* c_put() */
#define DB_APPEND 0x000002 /* put() */
#define DB_BEFORE 0x000004 /* c_put() */
#define DB_CHECKPOINT 0x000008 /* log_put(), log_get() */
#define DB_CURRENT 0x000010 /* c_get(), c_put(), log_get() */
#define DB_FIRST 0x000020 /* c_get(), log_get() */
#define DB_FLUSH 0x000040 /* log_put() */
#define DB_GET_RECNO 0x000080 /* c_get() */
#define DB_KEYFIRST 0x000100 /* c_put() */
#define DB_KEYLAST 0x000200 /* c_put() */
#define DB_LAST 0x000400 /* c_get(), log_get() */
#define DB_NEXT 0x000800 /* c_get(), log_get() */
#define DB_NOOVERWRITE 0x001000 /* put() */
#define DB_NOSYNC 0x002000 /* close() */
#define DB_PREV 0x004000 /* c_get(), log_get() */
#define DB_RECORDCOUNT 0x008000 /* stat() */
#define DB_SET 0x010000 /* c_get(), log_get() */
#define DB_SET_RANGE 0x020000 /* c_get() */
#define DB_SET_RECNO 0x040000 /* get(), c_get() */
#define DB_INCOMPLETE ( -1) /* Sync didn't finish. */
#define DB_KEYEMPTY ( -2) /* The key/data pair was deleted or
was never created by the user. */
#define DB_KEYEXIST ( -3) /* The key/data pair already exists. */
#define DB_LOCK_DEADLOCK ( -4) /* Locker killed to resolve deadlock. */
#define DB_LOCK_NOTGRANTED ( -5) /* Lock unavailable, no-wait set. */
#define DB_LOCK_NOTHELD ( -6) /* Lock not held by locker. */
#define DB_NOTFOUND ( -7) /* Key/data pair not found (EOF). */
#define DB_DELETED ( -8) /* Recovery file marked deleted. */
#define DB_NEEDSPLIT ( -9) /* Page needs to be split. */
#define DB_REGISTERED (-10) /* Entry was previously registered. */
#define DB_SWAPBYTES (-11) /* Database needs byte swapping. */
#define DB_TXN_CKP (-12) /* Encountered ckp record in log. */
struct
__db_ilock {
db_pgno_t pgno;
u_int8_t fileid[DB_FILE_ID_LEN];
};
struct
__db {
void
*mutex;
DBTYPE type;
DB_ENV *dbenv;
DB_ENV *mp_dbenv;
DB *master;
void
*internal;
DB_MPOOL *mp;
DB_MPOOLFILE *mpf;
struct
{
struct
__dbc *tqh_first;
struct
__dbc **tqh_last;
} curs_queue;
struct
{
struct
__db *lh_first;
} handleq;
struct
{
struct
__db *le_next;
struct
__db **le_prev;
} links;
u_int32_t log_fileid;
DB_TXN *txn;
u_int32_t locker;
DBT lock_dbt;
struct
__db_ilock lock;
size_t
pgsize;
void
*(*db_malloc) __P((
size_t
));
int
(*close) __P((DB *,
int
));
int
(*cursor) __P((DB *, DB_TXN *, DBC **));
int
(*del) __P((DB *, DB_TXN *, DBT *,
int
));
int
(*fd) __P((DB *,
int
*));
int
(*get) __P((DB *, DB_TXN *, DBT *, DBT *,
int
));
int
(*put) __P((DB *, DB_TXN *, DBT *, DBT *,
int
));
int
(*stat) __P((DB *,
void
*,
void
*(*)(
size_t
),
int
));
int
(*sync) __P((DB *,
int
));
#define DB_AM_DUP 0x000001 /* DB_DUP (internal). */
#define DB_AM_INMEM 0x000002 /* In-memory; no sync on close. */
#define DB_AM_LOCKING 0x000004 /* Perform locking. */
#define DB_AM_LOGGING 0x000008 /* Perform logging. */
#define DB_AM_MLOCAL 0x000010 /* Database memory pool is local. */
#define DB_AM_PGDEF 0x000020 /* Page size was defaulted. */
#define DB_AM_RDONLY 0x000040 /* Database is readonly. */
#define DB_AM_RECOVER 0x000080 /* In recovery (do not log or lock). */
#define DB_AM_SWAP 0x000100 /* Pages need to be byte-swapped. */
#define DB_AM_THREAD 0x000200 /* DB is multi-threaded. */
#define DB_BT_RECNUM 0x000400 /* DB_RECNUM (internal) */
#define DB_HS_DIRTYMETA 0x000800 /* Hash: Metadata page modified. */
#define DB_RE_DELIMITER 0x001000 /* DB_DELIMITER (internal). */
#define DB_RE_FIXEDLEN 0x002000 /* DB_FIXEDLEN (internal). */
#define DB_RE_PAD 0x004000 /* DB_PAD (internal). */
#define DB_RE_RENUMBER 0x008000 /* DB_RENUMBER (internal). */
#define DB_RE_SNAPSHOT 0x010000 /* DB_SNAPSHOT (internal). */
u_int32_t flags;
};
struct
__dbc {
DB *dbp;
DB_TXN *txn;
struct
{
struct
__dbc *tqe_next;
struct
__dbc **tqe_prev;
} links;
void
*internal;
int
(*c_close) __P((DBC *));
int
(*c_del) __P((DBC *,
int
));
int
(*c_get) __P((DBC *, DBT *, DBT *,
int
));
int
(*c_put) __P((DBC *, DBT *, DBT *,
int
));
};
struct
__db_bt_stat {
u_int32_t bt_flags;
u_int32_t bt_maxkey;
u_int32_t bt_minkey;
u_int32_t bt_re_len;
u_int32_t bt_re_pad;
u_int32_t bt_pagesize;
u_int32_t bt_levels;
u_int32_t bt_nrecs;
u_int32_t bt_int_pg;
u_int32_t bt_leaf_pg;
u_int32_t bt_dup_pg;
u_int32_t bt_over_pg;
u_int32_t bt_free;
u_int32_t bt_freed;
u_int32_t bt_int_pgfree;
u_int32_t bt_leaf_pgfree;
u_int32_t bt_dup_pgfree;
u_int32_t bt_over_pgfree;
u_int32_t bt_pfxsaved;
u_int32_t bt_split;
u_int32_t bt_rootsplit;
u_int32_t bt_fastsplit;
u_int32_t bt_added;
u_int32_t bt_deleted;
u_int32_t bt_get;
u_int32_t bt_cache_hit;
u_int32_t bt_cache_miss;
};
#if defined(__cplusplus)
extern
"C"
{
#endif
int
db_appinit __P((
const
char
*,
char
*
const
*, DB_ENV *,
int
));
int
db_appexit __P((DB_ENV *));
int
db_open __P((
const
char
*, DBTYPE,
int
,
int
, DB_ENV *, DB_INFO *, DB **));
char
*db_version __P((
int
*,
int
*,
int
*));
#if defined(__cplusplus)
};
#endif
#define DB_LOCKVERSION 1
#define DB_LOCKMAGIC 0x090193
#define DB_LOCK_NOWAIT 0x01 /* Don't wait on unavailable lock. */
#define DB_LOCK_CONFLICT 0x01 /* Run on any conflict. */
typedef
enum
{
DB_LOCK_DUMP,
DB_LOCK_GET,
DB_LOCK_PUT,
DB_LOCK_PUT_ALL,
DB_LOCK_PUT_OBJ
} db_lockop_t;
typedef
enum
{
DB_LOCK_NG=0,
DB_LOCK_READ,
DB_LOCK_WRITE,
DB_LOCK_IREAD,
DB_LOCK_IWRITE,
DB_LOCK_IWR
} db_lockmode_t;
struct
__db_lockreq {
db_lockop_t op;
db_lockmode_t mode;
u_int32_t locker;
DBT *obj;
DB_LOCK lock;
};
#define DB_LOCK_RW_N 3
extern
const
u_int8_t db_rw_conflicts[];
#define DB_LOCK_RIW_N 6
extern
const
u_int8_t db_riw_conflicts[];
#if defined(__cplusplus)
extern
"C"
{
#endif
int
lock_close __P((DB_LOCKTAB *));
int
lock_detect __P((DB_LOCKTAB *,
int
, u_int32_t));
int
lock_get __P((DB_LOCKTAB *,
u_int32_t,
int
,
const
DBT *, db_lockmode_t, DB_LOCK *));
int
lock_id __P((DB_LOCKTAB *, u_int32_t *));
int
lock_open __P((
const
char
*,
int
,
int
, DB_ENV *, DB_LOCKTAB **));
int
lock_put __P((DB_LOCKTAB *, DB_LOCK));
int
lock_unlink __P((
const
char
*,
int
, DB_ENV *));
int
lock_vec __P((DB_LOCKTAB *,
u_int32_t,
int
, DB_LOCKREQ *,
int
, DB_LOCKREQ **));
#if defined(__cplusplus)
};
#endif
#define DB_ARCH_ABS 0x001 /* Absolute pathnames. */
#define DB_ARCH_DATA 0x002 /* Data files. */
#define DB_ARCH_LOG 0x004 /* Log files. */
struct
__db_lsn {
u_int32_t file;
u_int32_t offset;
};
#if defined(__cplusplus)
extern
"C"
{
#endif
int
log_archive __P((DB_LOG *,
char
**[],
int
,
void
*(*)(
size_t
)));
int
log_close __P((DB_LOG *));
int
log_compare __P((
const
DB_LSN *,
const
DB_LSN *));
int
log_file __P((DB_LOG *,
const
DB_LSN *,
char
*,
size_t
));
int
log_flush __P((DB_LOG *,
const
DB_LSN *));
int
log_get __P((DB_LOG *, DB_LSN *, DBT *,
int
));
int
log_open __P((
const
char
*,
int
,
int
, DB_ENV *, DB_LOG **));
int
log_put __P((DB_LOG *, DB_LSN *,
const
DBT *,
int
));
int
log_register __P((DB_LOG *, DB *,
const
char
*, DBTYPE, u_int32_t *));
int
log_unlink __P((
const
char
*,
int
, DB_ENV *));
int
log_unregister __P((DB_LOG *, u_int32_t));
#if defined(__cplusplus)
};
#endif
#define DB_MPOOL_CREATE 0x001 /* Create a page. */
#define DB_MPOOL_LAST 0x002 /* Return the last page. */
#define DB_MPOOL_NEW 0x004 /* Create a new page. */
#define DB_MPOOL_CLEAN 0x001 /* Clear modified bit. */
#define DB_MPOOL_DIRTY 0x002 /* Page is modified. */
#define DB_MPOOL_DISCARD 0x004 /* Don't cache the page. */
struct
__db_mpool_stat {
size_t
st_cachesize;
unsigned
long
st_cache_hit;
unsigned
long
st_cache_miss;
unsigned
long
st_map;
unsigned
long
st_page_create;
unsigned
long
st_page_in;
unsigned
long
st_page_out;
unsigned
long
st_ro_evict;
unsigned
long
st_rw_evict;
unsigned
long
st_hash_buckets;
unsigned
long
st_hash_searches;
unsigned
long
st_hash_longest;
unsigned
long
st_hash_examined;
};
struct
__db_mpool_fstat {
char
*file_name;
size_t
st_pagesize;
unsigned
long
st_cache_hit;
unsigned
long
st_cache_miss;
unsigned
long
st_map;
unsigned
long
st_page_create;
unsigned
long
st_page_in;
unsigned
long
st_page_out;
};
#if defined(__cplusplus)
extern
"C"
{
#endif
int
memp_close __P((DB_MPOOL *));
int
memp_fclose __P((DB_MPOOLFILE *));
int
memp_fget __P((DB_MPOOLFILE *, db_pgno_t *, unsigned
long
,
void
*));
int
memp_fopen __P((DB_MPOOL *,
const
char
*,
int
,
int
,
int
,
size_t
,
int
, DBT *, u_int8_t *, DB_MPOOLFILE **));
int
memp_fput __P((DB_MPOOLFILE *,
void
*, unsigned
long
));
int
memp_fset __P((DB_MPOOLFILE *,
void
*, unsigned
long
));
int
memp_fsync __P((DB_MPOOLFILE *));
int
memp_open __P((
const
char
*,
int
,
int
, DB_ENV *, DB_MPOOL **));
int
memp_register __P((DB_MPOOL *,
int
,
int
(*)(db_pgno_t,
void
*, DBT *),
int
(*)(db_pgno_t,
void
*, DBT *)));
int
memp_stat __P((DB_MPOOL *,
DB_MPOOL_STAT **, DB_MPOOL_FSTAT ***,
void
*(*)(
size_t
)));
int
memp_sync __P((DB_MPOOL *, DB_LSN *));
int
memp_unlink __P((
const
char
*,
int
, DB_ENV *));
#if defined(__cplusplus)
};
#endif
#define DB_TXNVERSION 1
#define DB_TXNMAGIC 0x041593
#define DB_TXN_BACKWARD_ROLL 1 /* Read the log backwards. */
#define DB_TXN_FORWARD_ROLL 2 /* Read the log forwards. */
#define DB_TXN_OPENFILES 3 /* Read for open files. */
#define DB_TXN_REDO 4 /* Redo the operation. */
#define DB_TXN_UNDO 5 /* Undo the operation. */
struct
__db_txn_active {
u_int32_t txnid;
DB_LSN lsn;
};
struct
__db_txn_stat {
DB_LSN st_last_ckp;
DB_LSN st_pending_ckp;
time_t
st_time_ckp;
u_int32_t st_last_txnid;
u_int32_t st_maxtxns;
u_int32_t st_naborts;
u_int32_t st_nbegins;
u_int32_t st_ncommits;
u_int32_t st_nactive;
DB_TXN_ACTIVE *st_txnarray;
};
#if defined(__cplusplus)
extern
"C"
{
#endif
int
txn_abort __P((DB_TXN *));
int
txn_begin __P((DB_TXNMGR *, DB_TXN *, DB_TXN **));
int
txn_checkpoint __P((
const
DB_TXNMGR *,
long
,
long
));
int
txn_commit __P((DB_TXN *));
int
txn_close __P((DB_TXNMGR *));
u_int32_t txn_id __P((DB_TXN *));
int
txn_open __P((
const
char
*,
int
,
int
, DB_ENV *, DB_TXNMGR **));
int
txn_prepare __P((DB_TXN *));
int
txn_stat __P((DB_TXNMGR *, DB_TXN_STAT **,
void
*(*)(
size_t
)));
int
txn_unlink __P((
const
char
*,
int
, DB_ENV *));
#if defined(__cplusplus)
};
#endif
#ifdef DB_DBM_HSEARCH
#define DBM_INSERT 0 /* Flags to dbm_store(). */
#define DBM_REPLACE 1
#define DBM_SUFFIX ".db"
typedef
struct
{
char
*dptr;
int
dsize;
} datum;
#if defined(__cplusplus)
extern
"C"
{
#endif
int
dbminit __P((
char
*));
#if !defined(__cplusplus)
int
delete
__P((datum));
#endif
datum fetch __P((datum));
datum firstkey __P((
void
));
datum nextkey __P((datum));
int
store __P((datum, datum));
void
dbm_close __P((DBM *));
int
dbm_delete __P((DBM *, datum));
datum dbm_fetch __P((DBM *, datum));
datum dbm_firstkey __P((DBM *));
long
dbm_forder __P((DBM *, datum));
datum dbm_nextkey __P((DBM *));
DBM *dbm_open __P((
const
char
*,
int
,
int
));
int
dbm_store __P((DBM *, datum, datum,
int
));
#if defined(__cplusplus)
};
#endif
typedef
enum
{
FIND, ENTER
} ACTION;
typedef
struct
entry {
char
*key;
void
*data;
} ENTRY;
#if defined(__cplusplus)
extern
"C"
{
#endif
int
hcreate __P((unsigned
int
));
void
hdestroy __P((
void
));
ENTRY *hsearch __P((ENTRY, ACTION));
#if defined(__cplusplus)
};
#endif
#endif /* DB_DBM_HSEARCH */
#ifdef __MWERKS__
#pragma enumsalwaysint reset
#endif
#endif /* !_DB_H_ */