/*
 * RAM $Id: db.h 9 2008-10-15 13:40:54Z ram $
 */

/***************************************************************************
 *  Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer,	   *
 *  Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe.   *
 *									   *
 *  Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael	   *
 *  Chastain, Michael Quan, and Mitchell Tse.				   *
 *									   *
 *  In order to use any part of this Merc Diku Mud, you must comply with   *
 *  both the original Diku license in 'license.doc' as well the Merc	   *
 *  license in 'license.txt'.  In particular, you may not remove either of *
 *  these copyright notices.						   *
 *									   *
 *  Much time and thought has gone into this software and you are	   *
 *  benefitting.  We hope that you share your changes too.  What goes	   *
 *  around, comes around.						   *
 ***************************************************************************/
 
/***************************************************************************
*	ROM 2.4 is copyright 1993-1998 Russ Taylor			   *
*	ROM has been brought to you by the ROM consortium		   *
*	    Russ Taylor (rtaylor@hypercube.org)				   *
*	    Gabrielle Taylor (gtaylor@hypercube.org)			   *
*	    Brian Moore (zump@rom.org)					   *
*	By using this code, you have agreed to follow the terms of the	   *
*	ROM license, in the file Rom24/doc/rom.license			   *
***************************************************************************/

/* macro for flag swapping */
#define GET_UNSET(flag1,flag2)	(~(flag1)&((flag1)|(flag2)))

extern HELP_DATA *		help_first;
extern HELP_DATA *		help_last;

extern SHOP_DATA *		shop_first;
extern SHOP_DATA *		shop_last;

extern AREA_DATA *		area_first;
extern AREA_DATA *		area_last;

extern char			bug_buf		[2*MAX_INPUT_LENGTH];
extern char			log_buf		[2*MAX_INPUT_LENGTH];

extern CHAR_DATA *		char_list;
extern char *			help_greeting;
extern KILL_DATA		kill_table	[MAX_LEVEL];
extern OBJ_DATA *		object_list;
extern TIME_INFO_DATA		time_info;
extern WEATHER_DATA		weather_info;

extern MOB_INDEX_DATA 	* mob_index_hash          [MAX_KEY_HASH];
extern OBJ_INDEX_DATA 	* obj_index_hash          [MAX_KEY_HASH];
extern ROOM_INDEX_DATA *	room_index_hash		[MAX_KEY_HASH];
extern char *			string_hash		[MAX_KEY_HASH];

extern char *			string_space;
extern char *			top_string;
extern char			str_empty	[1];

extern int  		top_affect;
extern int			top_area;
extern int		top_ed; 
extern int			top_exit;
extern int			top_help;
extern int			top_mob_index;
extern int			top_obj_index;
extern int			top_reset;
extern int			top_room;
extern int			top_shop;
extern int 			mobile_count;
extern int			newmobs;
extern int			newobjs;

extern int			nAllocString;
extern size_t			sAllocString;
extern int			nAllocPerm;
extern size_t			sAllocPerm;

extern bool			fBootDb;
extern FILE *			fpArea;
extern char			strArea[MAX_INPUT_LENGTH];
extern struct		social_type	social_table		[MAX_SOCIALS];
extern int	social_count;

void boot_db( void );
void load_area( FILE *fp );
void load_helps( FILE *fp );
void load_old_mob( FILE *fp );
void load_old_obj( FILE *fp );
void load_resets( FILE *fp );
void load_rooms( FILE *fp );
void load_shops( FILE *fp );
void load_specials( FILE *fp );
void fix_exits( void );
void area_update( void );
void reset_area( AREA_DATA *pArea );
CHAR_DATA *create_mobile( MOB_INDEX_DATA *pMobIndex );
void clone_mobile(CHAR_DATA *parent, CHAR_DATA *clone);
OBJ_DATA *create_object( OBJ_INDEX_DATA *pObjIndex, int level );
void clone_object(OBJ_DATA *parent, OBJ_DATA *clone);
void clear_char( CHAR_DATA *ch );
char *get_extra_descr( char *name, EXTRA_DESCR_DATA *ed );
MOB_INDEX_DATA *get_mob_index( int vnum );
OBJ_INDEX_DATA *get_obj_index( int vnum );
ROOM_INDEX_DATA *get_room_index( int vnum );
char fread_letter( FILE *fp );
int fread_number( FILE *fp );
int fread_flag( FILE *fp);
int flag_convert(char letter );
char *fread_string( FILE *fp );
char *fread_string_eol( FILE *fp );
void fread_to_eol( FILE *fp );
char *fread_word( FILE *fp );
void *alloc_mem( size_t sMem );
void free_mem( void *pMem, size_t sMem );
void *alloc_perm( size_t sMem );
char *str_dup( const char *str );
void free_string( char *pstr );
int number_fuzzy( int number );
int number_range( int from, int to );
int number_percent( void );
int number_door( void );
int number_bits( int width );
void init_mm( void );
int number_mm( void );
int dice( int number, int size );
int interpolate( int level, int value_00, int value_32 );
void smash_tilde( char *str );
bool str_cmp( const char *astr, const char *bstr );
bool str_prefix( const char *astr, const char *bstr );
bool str_infix( const char *astr, const char *bstr );
bool str_suffix( const char *astr, const char *bstr );
char *capitalize( const char *str );
void append_file( CHAR_DATA *ch, const char *file, const char *str );
void bug( const char *str, int param );
void log_string( const char *str );
void tail_chain( void );
void load_socials( FILE *fp);
void load_mobiles( FILE *fp );
void load_objects( FILE *fp );