/[cvs]/eggdrop1.9/src/tclhash.h
ViewVC logotype

Contents of /eggdrop1.9/src/tclhash.h

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.16 - (show annotations) (download) (as text)
Sun Oct 7 04:02:54 2001 UTC (18 years ago) by stdarg
Branch: MAIN
Changes since 1.15: +12 -1 lines
File MIME type: text/x-csrc
Got rid of bind tables in the exported irc function table. They're not used anywhere in the core or other normal modules. Other people should use find_bind_table(), not #define's.
Got rid of H_* bind tables in irc module. All are BT_* now.
Integrated the new bind tables in with the normal bind/unbind command.
Made tcl callbacks work with the normal data types (string, int, user (handle)).
Got rid of old bind tables in server.mod
Made ctcp.mod use the new bind tables.
Wrote down most of the stuff I did so that ITE could see a detailed report :) hehe (although I have a feeling I've left something out)

1 /*
2 * tclhash.h
3 *
4 * $Id: tclhash.h,v 1.15 2001/09/30 04:27:38 stdarg Exp $
5 */
6 /*
7 * Copyright (C) 1997 Robey Pointer
8 * Copyright (C) 1999, 2000, 2001 Eggheads Development Team
9 *
10 * This program is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU General Public License
12 * as published by the Free Software Foundation; either version 2
13 * of the License, or (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23 */
24
25 #ifndef _EGG_TCLHASH_H
26 #define _EGG_TCLHASH_H
27
28
29 #define TC_DELETED 0x0001 /* This command/trigger was deleted. */
30
31 /* Flags for bind entries */
32 /* Does the callback want their client_data inserted as the first argument? */
33 #define BIND_WANTS_CD 1
34
35 /* Flags for bind tables */
36 #define BIND_STRICT_ATTR 0x80
37 #define BIND_BREAKABLE 0x100
38
39 /* Flags for return values from bind callbacks */
40 #define BIND_RET_LOG 1
41 #define BIND_RET_BREAK 2
42
43 /* Callback clientdata for a tcl bind */
44 typedef struct tcl_cmd_cdata_b {
45 Tcl_Interp *irp;
46 char *cmd;
47 char *syntax;
48 } tcl_cmd_cdata;
49
50 /* Will replace tcl_cmd_t */
51 /* This holds the final information for a function listening on a bind
52 table. */
53 typedef struct bind_entry_b {
54 struct bind_entry_b *next;
55 struct flag_record user_flags;
56 char *function_name;
57 Function callback;
58 void *client_data;
59 int hits;
60 int bind_flags;
61 } bind_entry_t;
62
63 typedef struct tcl_cmd_b {
64 struct tcl_cmd_b *next;
65
66 struct flag_record flags;
67 char *func_name; /* Proc name. */
68 int hits; /* Number of times this proc
69 was triggered. */
70 u_8bit_t attributes; /* Flags for this entry. TC_* */
71 } tcl_cmd_t;
72
73
74 #define TBM_DELETED 0x0001 /* This mask was deleted. */
75
76 /* Will replace tcl_bind_mask_t */
77 /* This is the list of bind masks in a given table.
78 For instance, in the "msg" table you might have "pass", "op",
79 and "invite". */
80 typedef struct bind_chain_b {
81 struct bind_chain_b *next;
82 bind_entry_t *entries;
83 char *mask;
84 int flags;
85 } bind_chain_t;
86
87 typedef struct tcl_bind_mask_b {
88 struct tcl_bind_mask_b *next;
89
90 tcl_cmd_t *first; /* List of commands registered
91 for this bind. */
92 char *mask;
93 u_8bit_t flags; /* Flags for this entry. TBM_* */
94 } tcl_bind_mask_t;
95
96
97 #define HT_STACKABLE 0x0001 /* Triggers in this bind list may be
98 stacked. */
99 #define HT_DELETED 0x0002 /* This bind list was already deleted.
100 Do not use it anymore. */
101
102 /* Will replace tcl_bind_list_b */
103 /* This is the highest-level structure. It's like the "msg" table
104 or the "pubm" table. */
105 typedef struct bind_table_b {
106 struct bind_table_b *next;
107 bind_chain_t *chains;
108 char *name;
109 char *syntax;
110 int nargs;
111 int match_type;
112 int flags;
113 } bind_table_t;
114
115 typedef struct tcl_bind_list_b {
116 struct tcl_bind_list_b *next;
117
118 tcl_bind_mask_t *first; /* Pointer to registered binds
119 for this list. */
120 char name[5]; /* Name of the bind. */
121 u_8bit_t flags; /* Flags for this element. HT_* */
122 Function func; /* Function used as the Tcl
123 calling interface for procs
124 actually representing C
125 functions. */
126 } tcl_bind_list_t, *p_tcl_bind_list;
127
128
129 #ifndef MAKING_MODS
130
131 inline void garbage_collect_tclhash(void);
132
133 void init_bind(void);
134 void kill_bind(void);
135 int expmem_tclhash(void);
136
137 tcl_bind_list_t *add_bind_table(const char *nme, int flg, Function func);
138 void del_bind_table(tcl_bind_list_t *tl_which);
139
140 tcl_bind_list_t *find_bind_table(const char *nme);
141
142 int check_tcl_bind(tcl_bind_list_t *, const char *, struct flag_record *, const char *, int);
143 int check_tcl_dcc(const char *, int, const char *);
144 void check_tcl_chjn(const char *, const char *, int, char, int, const char *);
145 void check_tcl_chpt(const char *, const char *, int, int);
146 void check_tcl_bot(const char *, const char *, const char *);
147 void check_tcl_link(const char *, const char *);
148 void check_tcl_disc(const char *);
149 const char *check_tcl_filt(int, const char *);
150 int check_tcl_note(const char *, const char *, const char *);
151 void check_tcl_listen(const char *, int);
152 void check_tcl_time(struct tm *);
153 void tell_binds(int, char *);
154 void check_tcl_nkch(const char *, const char *);
155 void check_tcl_away(const char *, int, const char *);
156 void check_tcl_chatactbcst(const char *, int, const char *, tcl_bind_list_t *);
157 void check_tcl_event(const char *);
158
159 #define check_tcl_chat(a, b, c) check_tcl_chatactbcst(a ,b, c, H_chat)
160 #define check_tcl_act(a, b, c) check_tcl_chatactbcst(a, b, c, H_act)
161 #define check_tcl_bcst(a, b, c) check_tcl_chatactbcst(a, b, c, H_bcst)
162 void check_tcl_chonof(char *, int, tcl_bind_list_t *);
163
164 #define check_tcl_chon(a, b) check_tcl_chonof(a, b, H_chon)
165 #define check_tcl_chof(a, b) check_tcl_chonof(a, b, H_chof)
166 void check_tcl_loadunld(const char *, tcl_bind_list_t *);
167
168 #define check_tcl_load(a) check_tcl_loadunld(a, H_load)
169 #define check_tcl_unld(a) check_tcl_loadunld(a, H_unld)
170
171 void rem_builtins(tcl_bind_list_t *, cmd_t *);
172 void add_builtins(tcl_bind_list_t *, cmd_t *);
173
174 int check_validity(char *, Function);
175 extern p_tcl_bind_list H_chat, H_act, H_bcst, H_chon, H_chof;
176 extern p_tcl_bind_list H_load, H_unld, H_dcc, H_bot, H_link;
177 extern p_tcl_bind_list H_away, H_nkch, H_filt, H_disc, H_event;
178
179 int check_bind(bind_table_t *table, const char *match, struct flag_record *_flags, ...);
180
181 bind_table_t *add_bind_table2(const char *name, int nargs, const char *syntax, int match_type, int flags);
182
183 void del_bind_table2(bind_table_t *table);
184
185 bind_table_t *find_bind_table2(const char *name);
186
187 int add_bind_entry(bind_table_t *table, const char *flags, const char *mask, const char *function_name, int bind_flags, Function callback, void *client_data);
188
189 int del_bind_entry(bind_table_t *table, const char *flags, const char *mask, const char *function_name);
190
191 void add_builtins2(bind_table_t *table, cmd_t *cmds);
192
193 void rem_builtins2(bind_table_t *table, cmd_t *cmds);
194
195 #endif
196
197
198 #define CHECKVALIDITY(a) do { \
199 if (!check_validity(argv[0], (a))) { \
200 Tcl_AppendResult(irp, "bad builtin command call!", \
201 NULL); \
202 return TCL_ERROR; \
203 } \
204 } while (0)
205
206 #endif /* _EGG_TCLHASH_H */

webmaster@eggheads.org
ViewVC Help
Powered by ViewVC 1.1.23