/* proto.h - The prototypes for the dbm routines. */

/*  This file is part of GDBM, the GNU data base manager, by Philip A. Nelson.
    Copyright (C) 1990, 1991, 1993  Free Software Foundation, Inc.

    GDBM is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2, or (at your option)
    any later version.

    GDBM is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with GDBM; see the file COPYING.  If not, write to
    the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.

    You may contact the author by:
       e-mail:  phil@cs.wwu.edu
      us-mail:  Philip A. Nelson
                Computer Science Department
                Western Washington University
                Bellingham, WA 98226

*************************************************************************/


/* Define our _PROTOTYPE macro. */

#ifdef _ARGS
#undef _ARGS
#endif

#ifdef __STDC__
#define _ARGS(args) args
#else
#define _ARGS(args) ()
#endif


/* From bucket.c */
void _gdbm_new_bucket    _ARGS((gdbm_file_info *dbf, hash_bucket *bucket,
				int bits ));
void _gdbm_get_bucket    _ARGS((gdbm_file_info *dbf, word_t dir_index ));
void _gdbm_split_bucket  _ARGS((gdbm_file_info *dbf, word_t next_insert ));
void _gdbm_write_bucket  _ARGS((gdbm_file_info *dbf, cache_elem *ca_entry ));

/* From falloc.c */
off_t _gdbm_alloc       _ARGS((gdbm_file_info *dbf, int num_bytes ));
void _gdbm_free         _ARGS((gdbm_file_info *dbf, off_t file_adr,
			       int num_bytes ));
int  _gdbm_put_av_elem  _ARGS((avail_elem new_el, avail_elem av_table [],
			       int *av_count ));

/* From findkey.c */
char *_gdbm_read_entry  _ARGS((gdbm_file_info *dbf, int elem_loc));
int _gdbm_findkey       _ARGS((gdbm_file_info *dbf, datum key,  char **dptr,
			       word_t *new_hash_val));

/* From hash.c */
word_t _gdbm_hash _ARGS((datum key ));

/* From update.c */
void _gdbm_end_update   _ARGS((gdbm_file_info *dbf ));
int _gdbm_fatal         _ARGS((gdbm_file_info *dbf, char *val ));

/* From gdbmopen.c */
int _gdbm_init_cache	_ARGS((gdbm_file_info *dbf, int size));

/* The user callable routines.... */
void  gdbm_close	  _ARGS((gdbm_file_info *dbf ));
int   gdbm_delete	  _ARGS((gdbm_file_info *dbf, datum key ));
datum gdbm_fetch	  _ARGS((gdbm_file_info *dbf, datum key ));
gdbm_file_info *gdbm_open _ARGS((char *file, int block_size,
				 int flags, int mode,
				 void (*fatal_func) (void)));
int   gdbm_reorganize	  _ARGS((gdbm_file_info *dbf ));
datum gdbm_firstkey       _ARGS((gdbm_file_info *dbf ));
datum gdbm_nextkey        _ARGS((gdbm_file_info *dbf, datum key ));
int   gdbm_store          _ARGS((gdbm_file_info *dbf, datum key,
				 datum content, int flags ));
int   gdbm_exists	  _ARGS((gdbm_file_info *dbf, datum key));
void  gdbm_sync		  _ARGS((gdbm_file_info *dbf));
int   gdbm_setopt	  _ARGS((gdbm_file_info *dbf, int optflag,
				 int *optval, int optlen));
