/*
* Definition of an object.
* If the object is inherited, then it must not be destructed !
*
* The reset is used as follows:
* 0: There is an error in the reset() in this object. Never call it again.
* 1: Normal state.
* 2 or higher: This is an interactive player, that has not given any commands
* for a number of reset periods.
*
* In the beginning, 'prog' points to the program tree, and 'status' to the
* linked list of variable definitions.
* After the object has been loaded back from the swap, the program tree
* and variable deinitions will be stored in one sequential memory area.
* This area will then be pointed to by 'block'.
* If it is the case, free_prog() must not be called
* with ob->prog as address, but rather free() should be called (once) with
* ob->block.
*/
struct object {
char enable_heart_beat; /* Call heart_beat or not. */
char reset; /* True if object has been reset */
char enable_commands; /* Enable usage of sentence commands */
char cloned; /* A cloned object. */
char name_length; /* Number of characters in name */
char destructed; /* True when the objects is destructed */
char swapped; /* True if prog is swapped out */
char inherited; /* Has someone inherited this object ? */
char is_wizard; /* Used for wizlist only */
char once_interactive; /* Has once been onteractive. */
short total_light;
int last_reset;
short num_variables; /* Number of variables */
int ref; /* Reference count. */
char *block; /* Pointer to the start of the prog block */
int swap_num; /* Swap file offset. -1 is not swapped yet. */
unsigned int swap_size; /* Size of object on swap area. */
struct lnode_def *prog;
struct lnode_var_def *status;
struct lnode *heart_beat;
char *name;
struct object *next_all, *next_inv, *next_heart_beat, *next_hash;
struct object *contains;
struct object *super; /* Which object surround us ? */
struct interactive *interactive; /* Data about an interactive player */
struct sentence *sent;
struct ed_buffer *ed_buffer; /* Local ed */
struct wiz_list *wl; /* What wizard defined this object */
struct object *inherit; /* Where to inherit from */
struct object *next_hashed_living;
char *living_name; /* Name of living object if in hash */
struct svalue variables[1]; /* All variables to this program */
/* The variables must come last in the struct */
};
extern struct object *load_object PROT((char *)), *find_object PROT((char *));
extern struct object *get_empty_object(), *find_object PROT((char *)),
*find_object2 PROT((char *));
extern struct object *current_object, *command_giver;
extern struct object *obj_list;
/* What is this!!!! (bub) */
/*struct value;*/
void destruct_object PROT((struct value *));
void remove_destructed_objects(), save_object PROT((struct object *, char *)),
move_object PROT((struct object *, struct object *)),
tell_object PROT((struct object *, char *)),
tell_npc PROT((struct object *, char *)),
add_ref PROT((struct object *, char *)),
free_object PROT((struct object *, char *));
struct value *clone_object PROT((char *));
int restore_object PROT((struct object *, char *));