1stMUD4.0/bin/
1stMUD4.0/doc/MPDocs/
1stMUD4.0/player/
1stMUD4.0/win32/
1stMUD4.0/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-2003 by Ryan Jennings              *
*            http://1stmud.dlmud.com/  <r-jenn@shaw.ca>                   *
***************************************************************************/

#if !defined(RECYCLE_H)
#define RECYCLE_H

/* EXTERNs */
EXTERN char str_empty[1];

PROTOTYPE(int get_size, (int));

#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
PROTOTYPE(BD * new_ban, (void));
PROTOTYPE(void free_ban, (BAN_DATA *));
#undef BD

/* descriptor recycling */
#define DD DESCRIPTOR_DATA
PROTOTYPE(DD * new_descriptor, (void));
PROTOTYPE(void free_descriptor, (DESCRIPTOR_DATA *));
#undef DD

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

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

/* affect recycling */
#define AD AFFECT_DATA
PROTOTYPE(AD * new_affect, (void));
PROTOTYPE(void free_affect, (AFFECT_DATA *));
#undef AD

/* object recycling */
#define OD OBJ_DATA
PROTOTYPE(OD * new_obj, (void));
PROTOTYPE(void free_obj, (OBJ_DATA *));
#undef OD

/* character recyling */
#define CD CHAR_DATA
#define PD PC_DATA
PROTOTYPE(CD * new_char, (void));
PROTOTYPE(void free_char, (CHAR_DATA *));
PROTOTYPE(PD * new_pcdata, (void));
PROTOTYPE(void free_pcdata, (PC_DATA *));
#undef PD
#undef CD

/* buffer procedures */
PROTOTYPE(BUFFER * new_buf, (void));
PROTOTYPE(BUFFER * new_buf_size, (int size));
PROTOTYPE(void free_buf, (BUFFER * buffer));
PROTOTYPE(bool bprint, (BUFFER * buffer, const char *string));
PROTOTYPEF(void bprintf, (BUFFER * buffer, const char *messg, ...), 2, 3);
PROTOTYPEF(void bprintlnf, (BUFFER * buffer, const char *messg, ...), 2, 3);
PROTOTYPE(void bprintln, (BUFFER * buffer, const char *messg));
PROTOTYPE(void clear_buf, (BUFFER * buffer));
PROTOTYPE(char *buf_string, (BUFFER * buffer));

PROTOTYPE(long get_mob_id, (void));
PROTOTYPE(long get_pc_id, (void));

PROTOTYPE(HELP_DATA * new_help, (void));
PROTOTYPE(void free_help, (HELP_DATA *));

/* statlist data recycling */
PROTOTYPE(STAT_DATA * new_stat_data, (void));
PROTOTYPE(void free_stat_data, (STAT_DATA *));

PROTOTYPE(CORPSE_DATA * new_corpse, (void));
PROTOTYPE(void free_corpse, (CORPSE_DATA *));

PROTOTYPE(AUCTION_DATA * new_auction, (void));
PROTOTYPE(void free_auction, (AUCTION_DATA *));

PROTOTYPE(void free_pwd, (WPWD_DATA *));
PROTOTYPE(WPWD_DATA * new_pwd, (void));

PROTOTYPE(MBR_DATA * new_mbr, (void));
PROTOTYPE(void free_mbr, (MBR_DATA *));

PROTOTYPE(RACE_DATA * new_race, (void));
PROTOTYPE(void free_race, (RACE_DATA *));

PROTOTYPE(SOCIAL_DATA * new_social, (void));
PROTOTYPE(void free_social, (SOCIAL_DATA *));

PROTOTYPE(DEITY_DATA * new_deity, (void));
PROTOTYPE(void free_deity, (DEITY_DATA *));

PROTOTYPE(CLAN_DATA * new_clan, (void));
PROTOTYPE(void free_clan, (CLAN_DATA *));

PROTOTYPE(CMD_DATA * new_command, (void));
PROTOTYPE(void free_command, (CMD_DATA *));

#endif