1stMUD/corefiles/
1stMUD/gods/
1stMUD/notes/
1stMUD/player/
1stMUD/win32/
1stMUD/win32/ROM/
/**************************************************************************
*  Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer,        *
*  Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe.   *
*                                                                         *
*  Merc Diku Mud improvements 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          *
*  benefiting.  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                    *
***************************************************************************
*       1stMUD ROM Derivative (c) 2001-2002 by Ryan Jennings              *
*            http://1stmud.dlmud.com/  <r-jenn@shaw.ca>                   *
***************************************************************************/

#if !defined(RECYCLE_H)
#define RECYCLE_H

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

int get_size(int val);

#define GET_FREE(point, type, pnext, freelist) \
do { \
  if ( freelist != NULL ) \
  { \
    point = freelist; \
    freelist = freelist->pnext; \
  } \
  else \
  { \
    point = (type *)alloc_perm(sizeof(*point)); \
  }\
  memset(point, 0, sizeof(*point)); \
} while(0)

#define PUT_FREE(point, next, freelist) \
do { \
		LINK_SINGLE(point, next, freelist); \
} while(0)

/* 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, const char *string));
void clear_buf args((BUFFER * buffer));
char *buf_string args((BUFFER * buffer));

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));

CORPSE_DATA *new_corpse args((void));
void free_corpse args((CORPSE_DATA * corpse));

AUCTION_DATA *new_auction args((void));
void free_auction args((AUCTION_DATA * auction));

void free_pwd args((WPWD_DATA * pwd));
WPWD_DATA *new_pwd args((void));

MBR_DATA *new_mbr args((void));
void free_mbr args((MBR_DATA * mbr));

RACE_DATA *new_race args((void));
void free_race args((RACE_DATA * race));

SOCIAL_DATA *new_social args((void));
void free_social args((SOCIAL_DATA * soc));

DEITY_DATA *new_deity args((void));
void free_deity args((DEITY_DATA * deity));

CLAN_DATA *new_clan args((void));
void free_clan args((CLAN_DATA * clan));

CMD_DATA *new_command args((void));
void free_command args((CMD_DATA * cmd));

#endif