/*
 * RAM $Id: recycle.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                     *
***************************************************************************/

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

/* note recycling */
extern NOTE_DATA       *note_free;
NOTE_DATA              *new_note( void );
void                    free_note( NOTE_DATA *note );

/* ban data recycling */
extern BAN_DATA        *ban_free;
BAN_DATA               *new_ban( void );
void                    free_ban( BAN_DATA *ban );

/* descriptor recycling */
extern DESCRIPTOR_DATA *descriptor_free;
DESCRIPTOR_DATA        *new_descriptor( void );
void                    free_descriptor( DESCRIPTOR_DATA *d );

/* char gen data recycling */
extern GEN_DATA        *gen_data_free;
GEN_DATA               *new_gen_data( void );
void                    free_gen_data( GEN_DATA *gen );

/* extra descr recycling */
extern EXTRA_DESCR_DATA *extra_descr_free;
EXTRA_DESCR_DATA       *new_extra_descr( void );
void                    free_extra_descr( EXTRA_DESCR_DATA *ed );

/* affect recycling */
extern AFFECT_DATA     *affect_free;
AFFECT_DATA            *new_affect( void );
void                    free_affect( AFFECT_DATA *af );

/* object recycling */
extern OBJ_DATA        *obj_free;
OBJ_DATA               *new_obj( void );
void                    free_obj( OBJ_DATA *obj );

/* character recyling */
extern CHAR_DATA       *char_free;
extern PC_DATA         *pcdata_free;
CHAR_DATA              *new_char( void );
void                    free_char( CHAR_DATA *ch );
PC_DATA                *new_pcdata( void );
void                    free_pcdata( PC_DATA *pcdata );

/* mob id and memory procedures */
extern int              last_pc_id;
extern int              last_mob_id;
extern MEM_DATA        *mem_data_free;
int                     get_pc_id( void );
int                     get_mob_id( void );
MEM_DATA               *new_mem_data( void );
void                    free_mem_data( MEM_DATA *memory );

/* buffer procedures */
extern const int        buf_size[MAX_BUF_LIST];
int                     get_size( int val );
BUFFER                 *new_buf( void );
BUFFER                 *new_buf_size( int size );
void                    free_buf( BUFFER *buffer );
bool                    add_buf( BUFFER *buffer, const char *string );
void                    clear_buf( BUFFER *buffer );
char                   *buf_string( BUFFER *buffer );