#ifndef _ATTRIB_H
#define _ATTRIB_H
/* new attribute foo */
typedef struct attr ATTR;
/* the attribute structure */
struct attr {
char *name; /* name of attribute */
int flags;
char *value;
int creator;
};
struct boolatr {
char *name; /* which attribute? */
char *text;
};
/* possible attribute flags */
#define AF_ODARK 0x1 /* players other than owner can't see it */
#define AF_DARK 0x2 /* no one can see it */
#define AF_WIZARD 0x4 /* Wizard only can change it */
#define AF_NUKED 0x8 /* marked for deletion from attrib list */
#define AF_LOCKED 0x10 /* Only creator of attrib can change it. */
#define AF_NOPROG 0x20 /* won't be searched for $ commands. */
/* external predefined attributes. */
extern ATTR attr[];
/* easy access macros for attributes */
#define s_Osucc(thing,s) atr_add(thing, "OSUCCESS", (s), (thing), NOTHING)
#define s_Ofail(thing,s) atr_add(thing, "OFAILURE", (s), (thing), NOTHING)
#define s_Fail(thing,s) atr_add(thing, "FAILURE", (s), (thing), NOTHING)
#define s_Succ(thing,s) atr_add(thing, "SUCCESS", (s), (thing), NOTHING)
#define s_Pass(thing,s) atr_add(thing, "XYXXY", (s), GOD, NOTHING)
#define s_Desc(thing,s) atr_add(thing, "DESCRIBE", (s), (thing), NOTHING)
#define Astr(attrib) ((attrib)->value)
typedef struct alist ALIST;
struct alist {
ALIST *next;
ATTR *attrib;
};
#define AL_ATTR(alist) ((alist)->attrib)
#define AL_NAME(alist) (AL_ATTR((alist))->name)
#define AL_STR(alist) (Astr(AL_ATTR((alist))))
#define AL_NEXT(alist) ((alist)->next)
#define AL_CREATOR(alist) (AL_ATTR((alist))->creator)
#define AL_FLAGS(alist) (AL_ATTR((alist))->flags)
#define AL_BAD(alist) (AL_FLAGS((alist)) & AF_NUKED)
#define AL_DISPOSE(alist) (AL_FLAGS((alist)) |= AF_NUKED)
#endif /* __ATTRIB_H */