/* * All of the global linked lists, in one clump. Declarations here, * actual variables in lists.c * -- Altrag */ extern AREA_DATA * first_area; extern AREA_DATA * last_area; extern BAN_DATA * first_ban; extern BAN_DATA * last_ban; extern CHAR_DATA * first_char; extern CHAR_DATA * last_char; extern DESCRIPTOR_DATA * first_desc; extern DESCRIPTOR_DATA * last_desc; extern HELP_DATA * first_help; extern HELP_DATA * last_help; extern NOTE_DATA * first_note; extern NOTE_DATA * last_note; extern OBJ_DATA * first_obj; extern OBJ_DATA * last_obj; extern SHOP_DATA * first_shop; extern SHOP_DATA * last_shop; extern CORPSE_DATA * first_corpse; extern CORPSE_DATA * last_corpse; extern MARK_LIST_MEMBER * first_mark_list; extern MARK_LIST_MEMBER * last_mark_list; extern CONTROL_LIST * first_control_list; extern CONTROL_LIST * last_control_list; extern QUEUED_INTERACT_LIST * first_queued_interact; extern QUEUED_INTERACT_LIST * first_queued_interact; extern INFLUENCE_LIST * first_influence_list; extern INFLUENCE_LIST * last_influence_list; extern RULER_LIST * first_ruler_list; extern RULER_LIST * last_ruler_list; extern DL_LIST * first_brand; extern DL_LIST * last_brand; extern PORTAL_DATA * portal_free; extern AFFECT_DATA * affect_free; extern ROOM_AFFECT_DATA * raffect_free; extern AREA_DATA * area_free; extern BAN_DATA * ban_free; extern CHAR_DATA * char_free; extern DESCRIPTOR_DATA * desc_free; extern EXIT_DATA * exit_free; extern EXTRA_DESCR_DATA * exdesc_free; extern HELP_DATA * help_free; extern MOB_INDEX_DATA * mid_free; extern NOTE_DATA * note_free; extern OBJ_DATA * obj_free; extern OBJ_INDEX_DATA * oid_free; extern PC_DATA * pcd_free; extern RESET_DATA * reset_free; extern ROOM_INDEX_DATA * rid_free; extern SHOP_DATA * shop_free; extern MPROG_DATA * mprog_free; extern MPROG_ACT_LIST * mpact_free; extern BUILD_DATA_LIST * build_free; extern MAGIC_SHIELD * shield_free; extern MEMBER_DATA * member_free; extern CORPSE_DATA * corpse_free; extern MARK_DATA * mark_free; extern MARK_LIST_MEMBER * mark_list_free; extern INTERACT_DATA * interact_free; extern INFLUENCE_DATA * influence_free; extern RULER_DATA * ruler_data_free; extern CONTROL_DATA * control_data_free; extern CONTROL_LIST * control_list_free; extern QUEUED_INTERACT_LIST * queued_interact_free; extern INFLUENCE_LIST * influence_list_free; extern RULER_LIST * ruler_list_free; extern DL_LIST * dl_list_free; extern BRAND_DATA * brand_data_free; extern bool booting_up; extern char * const dir_name []; extern char * const rev_name []; #define GET_FREE(item, freelist) \ do { \ if ( !(freelist) ) \ (item) = getmem(sizeof(*(item))); \ else { \ if ( !(freelist)->is_free ) { \ bug("GET_FREE: freelist head is NOT FREE! Hanging...", 0); \ for (;;); \ } \ (item) = (freelist); \ (freelist) = (item)->next; \ memset((item), 0, sizeof(*(item))); /* This clears is_free flag */ \ } \ } while(0) #define PUT_FREE(item, freelist) \ do { \ if ( (item)->is_free ) { \ bug("PUT_FREE: item is ALREADY FREE! Hanging...", 0); \ for (;;); \ } \ (item)->next = (freelist); \ (item)->is_free = TRUE; /* This sets is_free flag */ \ (freelist) = (item); \ } while(0)