/***************************************************************************
 *  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			   *
***************************************************************************/

#if !defined(RECYCLE_H)
#define RECYCLE_H

/* externs */
extern char str_empty[1];
extern int mobile_count;

int get_size ( int val );

/* stuff for providing a crash-proof buffer */

#define MAX_BUF		16384
#define MAX_BUF_LIST 	10
#define BASE_BUF 	1024

/* valid states */
#define BUFFER_SAFE	0
#define BUFFER_OVERFLOW	1
#define BUFFER_FREED 	2

/* ban data recycling */
#define BD BAN_DATA
BD *new_ban args ( ( void ) );
void free_ban args ( ( BAN_DATA * ban ) );
#undef BD

/* descriptor recycling */
#define DD DESCRIPTOR_DATA
DD *new_descriptor args ( ( void ) );
void free_descriptor args ( ( DESCRIPTOR_DATA * d ) );
#undef DD

/* char gen data recycling */
#define GD GEN_DATA
GD *new_gen_data args ( ( void ) );
void free_gen_data args ( ( GEN_DATA * gen ) );
#undef GD

/* extra descr recycling */
#define ED EXTRA_DESCR_DATA
ED *new_extra_descr args ( ( void ) );
void free_extra_descr args ( ( EXTRA_DESCR_DATA * ed ) );
#undef ED

/* affect recycling */
#define AD AFFECT_DATA
AD *new_affect args ( ( void ) );
void free_affect args ( ( AFFECT_DATA * af ) );
#undef AD

/* object recycling */
#define OD OBJ_DATA
OD *new_obj args ( ( void ) );
void free_obj args ( ( OBJ_DATA * obj ) );
#undef OD

/* character recyling */
#define CD CHAR_DATA
#define PD PC_DATA
CD *new_char args ( ( void ) );
void free_char args ( ( CHAR_DATA * ch ) );
PD *new_pcdata args ( ( void ) );
void free_pcdata args ( ( PC_DATA * pcdata ) );
#undef PD
#undef CD

/* mob id and memory procedures */
#define MD MEM_DATA
long get_pc_id args ( ( void ) );
long get_mob_id args ( ( void ) );
MD *new_mem_data args ( ( void ) );
void free_mem_data args ( ( MEM_DATA * memory ) );
MD *find_memory args ( ( MEM_DATA * memory, long id ) );
#undef MD

/* buffer procedures */
BUFFER *new_buf args ( ( void ) );
BUFFER *new_buf_size args ( ( int size ) );
void free_buf args ( ( BUFFER * buffer ) );
bool add_buf args ( ( BUFFER * buffer, char *string ) );
void clear_buf args ( ( BUFFER * buffer ) );
char *buf_string args ( ( BUFFER * buffer ) );

HELP_AREA *new_had args ( ( void ) );
HELP_DATA *new_help args ( ( void ) );
void free_help args ( ( HELP_DATA * ) );

/* statlist data recycling */
STAT_DATA *new_stat_data args ( ( void ) );
void free_stat_data args ( ( STAT_DATA * stat ) );

#endif