00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _EGG_BINDS_H_
00023 #define _EGG_BINDS_H_
00024
00025
00026 #define MATCH_PARTIAL 1
00027 #define MATCH_EXACT 2
00028 #define MATCH_MASK 4
00029 #define MATCH_CASE 8
00030 #define MATCH_NONE 16
00031 #define MATCH_FLAGS_AND 32
00032 #define MATCH_FLAGS_OR 64
00033 #define MATCH_FLAGS 96
00034
00035
00036 #define BIND_WANTS_CD 1
00037 #define BIND_BREAKABLE 6
00038 #define BIND_STACKABLE 4
00039 #define BIND_DELETED 8
00040 #define BIND_FAKE 16
00041
00042
00043
00044
00045
00046
00047 #define BIND_RET_LOG 1
00048 #define BIND_RET_BREAK 2
00049 #define BIND_RET_LOG_COMMAND 3
00050
00051
00052 typedef struct {
00053 const char *user_flags;
00054 const char *mask;
00055 Function callback;
00056 } bind_list_t;
00057
00058
00059 typedef struct event_owner_b {
00060 char *name;
00061 struct egg_module *module;
00062 char *script;
00063 void *client_data;
00064 int (*on_delete)(struct event_owner_b *event, void *client_data);
00065 } event_owner_t;
00066
00067
00068 typedef struct bind_entry_b {
00069 struct bind_entry_b *next, *prev;
00070 flags_t user_flags;
00071 char *mask;
00072 char *function_name;
00073 Function callback;
00074 void *client_data;
00075 int nhits;
00076 int flags;
00077 event_owner_t *owner;
00078 } bind_entry_t;
00079
00080
00081 typedef struct bind_table_b {
00082 struct bind_table_b *next;
00083 bind_entry_t *entries;
00084 char *name;
00085 char *syntax;
00086 int nargs;
00087 int match_type;
00088 int flags;
00089 } bind_table_t;
00090
00091 void bind_killall();
00092 int bind_check(bind_table_t *table, flags_t *user_flags, const char *match, ...);
00093 int bind_check_hits(bind_table_t *table, flags_t *user_flags, const char *match, int *hits, ...);
00094
00095 bind_table_t *bind_table_add(const char *name, int nargs, const char *syntax, int match_type, int flags);
00096 void bind_table_del(bind_table_t *table);
00097 int kill_binds_by_owner(struct egg_module *module, void *script);
00098 bind_table_t *bind_table_lookup(const char *name);
00099 bind_table_t *bind_table_lookup_or_fake(const char *name);
00100 int bind_entry_add(bind_table_t *table, const char *user_flags, const char *mask, const char *function_name, int bind_flags, Function callback, void *client_data, event_owner_t *owner);
00101 int bind_entry_del(bind_table_t *table, const char *mask, const char *function_name, Function callback);
00102 int bind_entry_modify(bind_table_t *table, const char *mask, const char *function_name, const char *newflags, const char *newmask);
00103 int bind_entry_overwrite(bind_table_t *table, const char *mask, const char *function_name, Function callback, void *client_data, event_owner_t *owner);
00104 void bind_add_list(const char *table_name, bind_list_t *cmds);
00105 void bind_add_simple(const char *table_name, const char *flags, const char *mask, Function callback);
00106
00107
00108 void bind_rem_list(const char *table_name, bind_list_t *cmds);
00109
00110 void bind_rem_simple(const char *table_name, const char *flags, const char *mask, Function callback);
00111 bind_table_t *bind_table_list(void);
00112
00113 #endif