PennMUSH Community

root/1.8.3/trunk/hdrs/attrib.h

Revision 1032, 7.4 kB (checked in by shawnw, 1 year ago)

Merged 1.8.3p4 into trunk

Line 
1 /**
2  * \file attrib.h
3  *
4  * \brief Attribute-related prototypes and constants.
5  */
6
7 #ifndef _ATTRIB_H
8 #define _ATTRIB_H
9
10 #include "mushtype.h"
11 #include "chunk.h"
12
13 /** An attribute on an object.
14  * This structure represents an attribute set on an object.
15  * Attributes form a linked list on an object, sorted alphabetically.
16  */
17 struct attr {
18   char const *name;             /**< Name of attribute */
19   uint32_t flags;               /**< Attribute flags */
20   chunk_reference_t data;       /**< The attribute's value, compressed */
21   dbref creator;                /**< The attribute's creator's dbref */
22   ATTR *next;                   /**< Pointer to next attribute in list */
23 };
24
25
26 /* Stuff that's actually in atr_tab.c */
27 extern ATTR *aname_hash_lookup(const char *name);
28 extern int alias_attribute(const char *atr, const char *alias);
29 extern void do_attribute_access
30   (dbref player, char *name, char *perms, int retroactive);
31 extern void do_attribute_delete(dbref player, char *name);
32 extern void do_attribute_rename(dbref player, char *old, char *newname);
33 extern void do_attribute_info(dbref player, char *name);
34 extern void do_list_attribs(dbref player, int lc);
35 extern char *list_attribs(void);
36 extern void attr_init_postconfig(void);
37
38 /* From attrib.c */
39
40 /** atr_add(), atr_clr() error codes */
41 typedef enum {
42   AE_OKAY = 0, /**< Success */
43   AE_ERROR = -1, /**< general failure */
44   AE_SAFE = -2, /**< attempt to overwrite a safe attribute */
45   AE_BADNAME = -3, /**< invalid name */
46   AE_TOOMANY = -4, /**< too many attribs */
47   AE_TREE = -5, /**< unable to delete/create entire tree */
48   AE_NOTFOUND = -6 /** No such attribute */
49 } atr_err;
50
51 extern int good_atr_name(char const *s);
52 extern ATTR *atr_match(char const *string);
53 extern ATTR *atr_sub_branch(ATTR *branch);
54 extern void atr_new_add(dbref thing, char const *RESTRICT atr,
55                         char const *RESTRICT s, dbref player, uint32_t flags,
56                         uint8_t derefs);
57 extern atr_err atr_add(dbref thing, char const *RESTRICT atr,
58                        char const *RESTRICT s, dbref player, uint32_t flags);
59 extern atr_err atr_clr(dbref thing, char const *atr, dbref player);
60 extern atr_err wipe_atr(dbref thing, char const *atr, dbref player);
61 extern ATTR *atr_get(dbref thing, char const *atr);
62 extern ATTR *atr_get_noparent(dbref thing, char const *atr);
63 typedef int (*aig_func) (dbref, dbref, dbref, const char *, ATTR *, void *);
64 extern int atr_iter_get(dbref player, dbref thing, char const *name,
65                         int mortal, aig_func func, void *args);
66 extern int atr_iter_get_parent(dbref player, dbref thing, char const *name,
67                                int mortal, aig_func func, void *args);
68 extern int atr_pattern_count(dbref player, dbref thing, const char *name,
69                              int doparent, int mortal);
70 extern ATTR *atr_complete_match(dbref player, char const *atr, dbref privs);
71 extern void atr_free_all(dbref thing);
72 extern void atr_cpy(dbref dest, dbref source);
73 extern char const *convert_atr(int oldatr);
74 extern int atr_comm_match(dbref thing, dbref player, int type, int end,
75                           char const *str, int just_match, char *atrname,
76                           char **abp, dbref *errobj);
77 extern int one_comm_match(dbref thing, dbref player, const char *atr,
78                           const char *str);
79 extern int do_set_atr(dbref thing, char const *RESTRICT atr,
80                       char const *RESTRICT s, dbref player, uint32_t flags);
81 extern void do_atrlock(dbref player, char const *arg1, char const *arg2);
82 extern void do_atrchown(dbref player, char const *arg1, char const *arg2);
83 int string_to_atrflag(dbref player, const char *p, privbits *bits);
84 int string_to_atrflagsets(dbref player, const char *p, privbits *setbits,
85                           privbits *clrbits);
86 extern const char *atrflag_to_string(privbits mask);
87 extern void init_atr_name_tree(void);
88
89 extern int can_read_attr_internal(dbref player, dbref obj, ATTR *attr);
90 extern int can_write_attr_internal(dbref player, dbref obj, ATTR *attr,
91                                    int safe);
92 extern unsigned const char *atr_get_compressed_data(ATTR *atr);
93 extern char *atr_value(ATTR *atr);
94 extern char *
95 safe_atr_value(ATTR *atr)
96   __attribute_malloc__;
97
98 /* possible attribute flags */
99 #define AF_ODARK        0x1U    /**< OBSOLETE! Leave here but don't use */
100 #define AF_INTERNAL     0x2U    /**< no one can see it or set it */
101 #define AF_WIZARD       0x4U    /**< Wizard only can change it */
102 #define AF_NUKED        0x8U    /**< OBSOLETE! Leave here but don't use */
103 #define AF_LOCKED       0x10U   /**< Only creator of attrib can change it. */
104 #define AF_NOPROG       0x20U   /**< won't be searched for $ commands. */
105 #define AF_MDARK        0x40U   /**< Only wizards can see it */
106 #define AF_PRIVATE      0x80U   /**< Children don't inherit it */
107 #define AF_NOCOPY       0x100U  /**< atr_cpy (for @clone) doesn't copy it */
108 #define AF_VISUAL       0x200U  /**< Everyone can see this attribute */
109 #define AF_REGEXP       0x400U  /**< Match $/^ patterns using regexps */
110 #define AF_CASE         0x800U  /**< Match $/^ patterns case-sensitive */
111 #define AF_SAFE         0x1000U /**< This attribute may not be modified */
112 #define AF_ROOT         0x2000U /**< Root of an attribute tree */
113 #define AF_UNDEF1       0x4000U /**< Undefined; reserved for a future flag */
114 #define AF_UNDEF2       0x8000U /**< Undefined; reserved for a future flag */
115 #define AF_STATIC       0x10000U        /**< OBSOLETE! Leave here but don't use */
116 #define AF_COMMAND      0x20000U        /**< INTERNAL: value starts with $ */
117 #define AF_LISTEN       0x40000U        /**< INTERNAL: value starts with ^ */
118 #define AF_NODUMP       0x80000U        /**< INTERNAL: attribute is not saved */
119 #define AF_LISTED 0x100000U /**< INTERNAL: Used in @list attribs */
120 #define AF_PREFIXMATCH  0x200000U       /**< Subject to prefix-matching */
121 #define AF_VEILED       0x400000U       /**< On ex, show presence, not value */
122 #define AF_DEBUG        0x800000U       /**< Show debug when evaluated */
123 #define AF_NEARBY       0x1000000U      /**< Override AF_VISUAL if remote */
124 #define AF_PUBLIC       0x2000000U      /**< Override SAFER_UFUN */
125 #define AF_ANON         0x4000000U      /**< INTERNAL: Attribute doesn't really
126                        exist in the database */
127 #define AF_NONAME       0x8000000U      /**< No name in did_it */
128 #define AF_NOSPACE      0x10000000U     /**< No space in did_it */
129 #define AF_MHEAR        0x20000000U     /**< ^-listens can be triggered by %! */
130 #define AF_AHEAR        0x40000000U     /**< ^-listens can be triggered by anyone */
131 #define AF_UNDEF3       0x80000000U     /**< Undefined; reserved for a future flag */
132
133 #define AF_MAXVALUE          0x100000000U     /**< Largest attribute flag value. */
134
135     extern ATTR attr[];
136                     /**< external predefined attributes. */
137
138 #define AL_ATTR(alist)          (alist)
139 #define AL_NAME(alist)          ((alist)->name)
140 #define AL_STR(alist)           (atr_get_compressed_data((alist)))
141 #define AL_NEXT(alist)          ((alist)->next)
142 #define AL_CREATOR(alist)       ((alist)->creator)
143 #define AL_FLAGS(alist)         ((alist)->flags)
144 #define AL_DEREFS(alist)        ((alist)->data?chunk_derefs((alist)->data):0)
145
146 /** Errors from ok_player_alias */
147 /** Success */
148 #define OPAE_SUCCESS    1
149 /** Invalid alias */
150 #define OPAE_INVALID    -1
151 /** Too many aliases already set */
152 #define OPAE_TOOMANY    -2
153 /** Null alias */
154 #define OPAE_NULL       -3
155
156 #endif                          /* __ATTRIB_H */
Note: See TracBrowser for help on using the browser.