V8/usr/include/DB.h
/* PBLKSIZ is the maximum length of a key/record pair */
/* DBLKSIZ * BYTESIZE yeilds # Pblocks filled per Dblock */
/* tunable size of Pblock in bytes (max is 64K) */
#define PBLKSIZ (64L*1024L)
/* tunable size of Dblock in bytes (min is 512) */
#define DBLKSIZ 4096L
/* size of char in bits */
#define BYTESIZ 8
#ifndef NULL
#define NULL ((char *) 0)
#endif NULL
/* data structures private to DB: */
/* structure of a Pblock: */
typedef struct
{
union
{
unsigned short P_off[PBLKSIZ / sizeof (unsigned short)];
char P_dat[PBLKSIZ];
}
p_u;
}
Pblock;
#define p_off p_u.P_off
#define p_dat p_u.P_dat
/* structure of a Dblock: */
typedef struct
{
char d_bits[DBLKSIZ];
}
Dblock;
/* public data types: */
/* key and record data structure */
typedef struct
{
char * dptr;
int dsize;
}
datum;
/* the state of a DB file */
typedef struct
{
/* public data: */
int d_flags; /* flags; see below */
char * d_name; /* name of the database file */
/* private data: */
/* page file info: */
int d_pfd; /* page file descriptor */
long d_pblk; /* block number of page file */
Pblock * d_pbuf; /* buffer for page file */
/* direct file info: */
int d_dfd; /* direct file descriptor */
long d_dblk; /* block number of direct file */
Dblock * d_dbuf; /* buffer for direct file */
/* hashing info: */
long d_hbit; /* bit number */
long d_hmask; /* hash mask */
long d_hnbit; /* maximum bit # */
}
DBFILE;
/* flag bits in d_flags: */
#define DB_RONLY 0x0001 /* this database is read only */
#define DB_SYNC 0x0002 /* sync() on every write (ouch!) */
#define DB_PMOD 0x0004 /* disk is out of date with respect to d_pbuf */
#define DB_DMOD 0x0008 /* disk is out of date with respect to d_dbuf */
#define DB_CREATE 0x0010 /* create database files if they don't exist */
#define DB_LOCK 0x0020 /* database is locked */
/* user settable flags: */
#define DB_USER (DB_RONLY|DB_SYNC|DB_CREATE)
/* public functions defined in DB: */
extern DBFILE * DBopen(); /*(char *name, int flags) open a DB file*/
extern void DBclose(); /*(DBFILE *dp) close a DB file*/
extern void DBsync(); /*(DBFILE *dp) flush any modified buffers*/
extern datum DBget(); /*(DBFILE *dp, datum key) get rec at key*/
extern int DBdel(); /*(DBFILE *dp, datum key) del rec at key*/
extern int DBput(); /*(DBFILE *dp, datum key, datum rec) put rec at key*/
extern datum DBkey0(); /*(DBFILE *dp) get lowest key*/
extern datum DBkeyn(); /*(DBFILE *dp, datum key) get next key*/
extern int DBlock(); /*(DBFILE *dp) lock a DB file */
extern int DBunlock();/*(DBFILE *dp) unlock a DB file */
/* public data defined in DB */
extern int DBdebug; /* DB debugging level */
#define DBDBCORE 0 /* errors that produce core files */
#define DBDBERR 1 /* errors less catastrophic */
#define DBDBWARN 2 /* various warnings */
#define DBDBINFO 3 /* entry/exit info for DB*() above */
#define DBdbprt(level) if ((level) <= DBdebug) fprintf