#ifndef OBJECT_H #define OBJECT_H #include "port.h" #define O_USER 0x00ff /* flags useable by the mudlib */ #define O_CLONE 0x0100 #define O_SWAPPED 0x0200 #define O_RESET_NONE 0x0400 #define O_RESET_CUSTOM 0x0800 #define O_WILL_CLEAN_UP 0x1000 /* clean_up will be called next time */ #define O_PROG_SWAPPED(ob) ((p_int)(ob)->program & 1) #define O_VAR_SWAPPED(ob) ((p_int)(ob)->variable & 1) #define O_SWAP_NUM(ob) \ (O_PROG_SWAPPED(ob) ? (p_int)(ob)->prog & ~1 : (ob)->prog->swap_num) #define MAX_INHERIT_DEPTH 60 union object_xu { struct uid *uid; struct object_x *x; uint8 *p; uint16 *p16; }; struct object { uint8 type, ref; uint16 flags; union { char **hash; union svalue destructed; } next; union svalue dirname; /* string or program */ union svalue basename; /* string or number (zero for blueprint) */ union object_xu x; struct program *program; union svalue *variable; uint16 last_touched; /* maximum TIME_TO_SWAP is thus 18:12:15 if * ASYNC_GRANULARITY is 1 */ union { uint16 last; int16 next; } reset; }; /* T_INTERNAL, IT_X_OBJ | O_X* flags, major ref */ struct object_x { struct uid *uid; struct interactive *user; union svalue /* object */ shadowed_by, shadowing; }; #define O_HAS_X(ob) ((ob)->x.p[-sizeof(p_int)+1] != IT_X_UID) #define O_REF(ob) ((ob)->x.p16[-1]) #define OX_VALID(x) (((uint8 *)(x))[-sizeof(p_int)+1] != IT_X_UID) #define OX_REF(x) (((uint16 *)(x))[-1]) /* O_REF starts with 1, so that !--O_REF when it is exhausted */ #define O_X_INTERACTIVE 1 #define O_X_SHADOWED 2 #define O_X_FLAGS(ob) ((ob).x.p[-sizeof(p_int)+1]) #define OP_X_FLAGS(ob) ((ob)->x.p[-sizeof(p_int)+1]) #define OX_FLAGS(x) (((uint8 *)(x))[-sizeof(p_int)+1]) #define O_IS_INTERACTIVE(ob) (O_X_FLAGS(ob) & O_X_INTERACTIVE) #define ALLOC_OBJECT() ALLOC_TTS(T_OBJECT, 1, 0, sizeof(struct object)); extern int32 async_current_time; extern p_int async_load; extern int time_to_swap, time_to_swap_variables; extern struct object nil_object; extern struct replace_ob *obj_list_replace; extern p_int num_objects; extern void object_async(void); struct frame; extern svalue *clone_object(svalue, struct frame *); extern struct object_x *alloc_object_x(svalue); #endif /* OBJECT_H */