/*
 * RAM $Id: db.h 16 2008-10-22 04:42:21Z 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 );