#define CREATE(result, type, number) {\
        if (!((result) = (type *) calloc ((number), sizeof(type))))\
                { perror("malloc failure"); abort(); } }
#define RESIZE(mem_address, type, number) {\
        if (!((mem_address) = (type *) realloc((mem_address),\
                sizeof(type) * number)))\
                { perror("realloc failure"); abort(); }}


#undef MIN
#undef MAX
#define MAX(a,b) (((a)>(b)) ? (a) : (b))
#define MIN(a,b) (((a)<(b)) ? (a) : (b))

#define BTST(a,b) ((a) & (b))
#define BSET(a,b) ((a) |= (b))
#define BCLR(a,b) ((a) &= ~(b))
#define BCHG(a,b) ((a) = (a) ^ (b))

#define ZONE_X(zone) (zone_list[(zone)].xyz[0])
#define ZONE_Y(zone) (zone_list[(zone)].xyz[1])
#define ZONE_Z(zone) (zone_list[(zone)].xyz[2])

#define ZONE_ROOM(z,r) zone_list[(z)].room[(r)]

#define GRID_X(grid) (grid_list[(grid)].xyz[0])
#define GRID_Y(grid) (grid_list[(grid)].xyz[1])
#define GRID_Z(grid) (grid_list[(grid)].xyz[2])
#define GRID_ZONE(grid) (grid_list[(grid)].zone)

#define NONE_X(none) (none_rooms[(none)].room->xyz[0])
#define NONE_Y(none) (none_rooms[(none)].room->xyz[1])
#define NONE_Z(none) (none_rooms[(none)].room->xyz[2])
#define NONE_R(none) (none_rooms[(none)].room->xyz[3])
#define NON_ZZ(none) (none_rooms[(none)].room->xyz[4])

#define S_DATA		0
#define B_DATA		1
#define L_DATA		2
/*******************************************************************/
/* CHARACTER related stuff */
/*******************************************************************/
#define NAME       character->name
#define TITLE      character->title
#define CON_STATE	 desc->connected

/************************************************/
#define HIT        data[HIT_NUM]
#define MANA       data[MANA_NUM]
#define MOVE       data[MOVE_NUM]
#define ALIGN      data[ALIGN_NUM]
#define IDNUM      data[ID_NUM]
#define LOAD_X     data[LOAD_X_NUM]
#define LOAD_Y     data[LOAD_Y_NUM]
#define LOAD_Z     data[LOAD_Z_NUM]
#define LOAD_R     data[LOAD_ROOM_NUM]
#define WEIGHT     data[WEIGHT_NUM] 
#define HEIGHT     data[HEIGHT_NUM]
#define MAX_HIT    data[MAX_HIT_NUM]
#define CUR_WGHT   data[CUR_WGHT_NUM]
#define MAX_MANA   data[MAX_MANA_NUM] 
#define MAX_WGHT   data[MAX_WGHT_NUM] 
#define MAX_MOVE   data[MAX_MOVE_NUM]
#define WAIT		 data[WAIT_NUM]
#define POSITION   data[POS_NUM]
#define AGE        data[AGE_NUM]
#define SEX        data[SEX_NUM]
#define STR        data[STR_NUM]
#define CON        data[CON_NUM]
#define INT        data[INT_NUM]
#define WIS        data[WIS_NUM]
#define DEX        data[DEX_NUM]
#define STATE      data[STATE_NUM]
#define DRUNK      data[DRUNK_NUM] // Level of pissedness.
#define READ_SK 	 data[READ_NUM]  	
#define WRITE_SK 	 date[WRITE_NUM]	
#define POISEN     data[POISEN_NUM] // how much poison thay have in them.
#define DISEASE    data[DISEASE_NUM]	// how diseased they are.
#define POISENSTR  data[POISONSTR_NUM] // The strength of the poison.
#define DISEASESTR data[DISEASESTR_NUM]// the strength of the disease.
#define THIRST		 data[THIRST_NUM]	// how thirsty
#define HUNGER		 data[HUNGER_NUM] // how hungry
#define GEN_SKILL	 data[GENSK_NUM] // # of general skills thay can get.
#define SP_SKILL	 data[SPSK_NUM]	// # of class skills thay can get.
#define NO_SKILLS	 data[NOSK_NUM]	// total # of skills.
#define LIGHT      data[LIGHT_NUM]
#define THAC0      data[THAC0_NUM]
#define ARMOR      data[ARMOR_NUM]
#define TOHIT      data[TOHIT_NUM]
#define TODAM      data[TODAM_NUM]
#define CLASS      data[CLASS_NUM]
#define INVIS      data[INVIS_NUM]
#define LEVEL      data[LEVEL_NUM]
#define STR_ADD    data[STR_ADD_NUM]
#define BAD_PWDS   data[BAD_PWDS_NUM]
#define LIFE       data[_LIFE_]
#define REGEN      data[_REGEN_]
#define DIE_MSG    data[MESSAGE]
/*******************************************************************/
/* LONG_DATA definitions                                           */
/*******************************************************************/
#define NPC_FLAGS(who) (who->l_data[NPC_NUM])
#define EXP        l_data[EXP_NUM]
#define BANK       l_data[BANK_NUM]
#define GOLD       l_data[GOLD_NUM]
#define PREFS      l_data[PREFS_NUM]
#define SPECIALS   l_data[SPECIALS_NUM]
#define PERSONAL   l_data[PERSONAL_NUM]
/*******************************************************************/
/* MOBILE related stuff                                            */
/*******************************************************************/
#define ANTI_SEX     data[A_SEX_NUM]
#define ANT_AGE      data[A_AGE_NUM]
#define ANTI_CLASS   data[A_CLASS_NUM]
#define ANTI_ALIGN   data[A_ALIGN_NUM]
/*******************************************************************/
/* ROOM related stuff                                              */
/*******************************************************************/
#define X            xyz[0]
#define Y            xyz[1]
#define Z            xyz[2]
#define ROOM         xyz[3]
#define ZONE         xyz[4]
#define MIN_LEVEL    data[A_SEX_NUM]
#define MAX_LEVEL    data[A_AGE_NUM]
#define MOVE_COST		data[MOD_NUM]
/*******************************************************************/
#define ANY_OBJECTS(who) (who->in_room->objects)
#define ANY_PEOPLE(who)  (who->in_room->people)
#define ROOM_FLAGS(who)  (who->in_room->flags)
#define IN_ROOM(who)     (who->in_room)
#define GET_X(who)       (who->in_room->X)
#define GET_Y(who)       (who->in_room->Y)
#define GET_Z(who)       (who->in_room->Z)
#define ROOM_NUM(who)    (who->in_room->ROOM)
#define GET_ZONE(who)    (who->in_room->ZONE)
#define WORN         data[WEIGHT_NUM]
#define TYPE         data[MANA_NUM]
#define LOWER(c) (c & 223)
#define UPPER(c) (c | 32)
/*******************************************************************/
/* S_XTRA related stuff                                            */
/*******************************************************************/
#define OBJ_DIE      data[DIE_NUM]
#define OBJ_SIZE     data[SIDES_NUM]
#define OBJ_BONUS    data[MOD_NUM]
#define OBJ_VALUE		data[VALUE_NUM]
#define OBJ_WEIGHT	data[OWEIGHT_NUM]
#define OBJ_MAX     	data[MAXIMUM_NUM]
#define OBJ_COUNT    data[CURRENT_NUM]
#define OBJ_SPECIAL  data[SPECIAL_NUM]


#define CHAR_ROOM 	ch->in_room
#define OBJECT_ROOM 	obj->in_room

