PennMUSH Community

root/1.8.3/trunk/hdrs/function.h

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

Merged 1.8.3p4 into trunk

Line 
1 #ifndef _FUNCTIONS_H_
2 #define _FUNCTIONS_H_
3
4 #include "copyrite.h"
5
6 #define FN_REG 0x0
7 /* Function arguments aren't parsed */
8 #define FN_NOPARSE      0x1
9 #define FN_LITERAL      0x2
10 #define FN_ARG_MASK     0x3
11 /* Function is disabled */
12 #define FN_DISABLED     0x4
13 /* Function will fail if object is gagged */
14 #define FN_NOGAGGED  0x8
15 /* Function will fail if object is a guest */
16 #define FN_NOGUEST   0x10
17 /* Function will fail if object is fixed */
18 #define FN_NOFIXED   0x20
19 /* Function is wizard-only */
20 #define FN_WIZARD 0x40
21 /* Function is royalty or wizard */
22 #define FN_ADMIN  0x80
23 /* Function is god-only */
24 #define FN_GOD    0x100
25 /* Function is builtin */
26 #define FN_BUILTIN 0x200
27 /* Function can be overridden with a @function */
28 #define FN_OVERRIDE 0x400
29 /* Side-effect version of function no workie */
30 #define FN_NOSIDEFX 0x800
31 /* Log function name */
32 #define FN_LOGNAME 0x1000
33 /* Log function name and args */
34 #define FN_LOGARGS 0x2000
35 /* Localize function registers */
36 #define FN_LOCALIZE     0x4000
37 /* Allowed in @function only */
38 #define FN_USERFN     0x8000
39
40 #ifndef HAVE_FUN_DEFINED
41 typedef struct fun FUN;
42 #define HAVE_FUN_DEFINED
43 #endif
44
45 typedef void (*function_func) (FUN *, char *, char **, int, char *[], int[],
46                                dbref, dbref, dbref, const char *, PE_Info *);
47
48 /** A calling pointer to a function.
49  * This union holds either a pointer to a function's code or
50  * the offset of the function in the user-defined function table.
51  */
52 union fun_call {
53   function_func fun;    /**< Pointer to compiled function code */
54   size_t offset;        /**< Offset into user-defined function table */
55 };
56
57 /** A function.
58  * This structure represents a mushcode function.
59  */
60 struct fun {
61   const char *name;     /**< Function name */
62   union fun_call where; /**< Where to find the function to call it */
63   int minargs;          /**< Minimum arguments required, or 0 */
64   /** Maximum arguments allowed.
65    * Maximum arguments allowed. If there is no limit, this is INT_MAX.
66    * If this is negatve, the final argument to the function can contain
67    * commas that won't be parsed, and the maximum number of arguments
68    * is the absolute value of this variable.
69    */
70   int maxargs;
71   unsigned int flags;   /**< Bitflags of function */
72 };
73
74 typedef struct userfn_entry USERFN_ENTRY;
75
76 /** A user-defined function
77  * This structure represents an entry in the user-defined function table.
78  */
79 struct userfn_entry {
80   char *fn;             /**< Name of the function */
81   dbref thing;          /**< Dbref of object where the function is defined */
82   char *name;           /**< Name of attribute where the function is defined */
83   unsigned int flags;   /**< Bitflags of function */
84 };
85
86 USERFN_ENTRY *userfn_tab;
87
88 void do_userfn(char *buff, char **bp,
89                dbref obj, ATTR *attrib,
90                int nargs, char **args,
91                dbref executor, dbref caller, dbref enactor,
92                PE_Info *pe_info, int extra_flags);
93
94 FUN *func_hash_lookup(const char *name);
95 FUN *builtin_func_hash_lookup(const char *name);
96 int check_func(dbref player, FUN *fp);
97 int restrict_function(const char *name, const char *restrict);
98 int alias_function(const char *function, const char *alias);
99 void do_function_restrict(dbref player, const char *name,
100                           const char *restrict, int builtin);
101 void do_function_restore(dbref player, const char *name);
102 void do_list_functions(dbref player, int lc);
103 char *list_functions(const char *);
104 void do_function(dbref player, char *name, char **argv, int preserve);
105 void do_function_toggle(dbref player, char *name, int toggle);
106 void do_function_report(dbref player, char *name);
107 void do_function_delete(dbref player, char *name);
108 void function_init_postconfig(void);
109
110
111 #define FUNCTION_PROTO(fun_name) \
112   extern void fun_name (FUN *fun, char *buff, char **bp, int nargs, char *args[], \
113                    int arglen[], dbref executor, dbref caller, dbref enactor, \
114                    char const *called_as, PE_Info *pe_info)
115 extern void function_add(const char *name, function_func fun, int minargs,
116                          int maxargs, int ftype);
117
118 #endif
119
Note: See TracBrowser for help on using the browser.