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

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

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


Revision 1.16 - (hide 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 guppy 1.8 /*
2 fabian 1.3 * tclhash.h
3 guppy 1.8 *
4 stdarg 1.16 * $Id: tclhash.h,v 1.15 2001/09/30 04:27:38 stdarg Exp $
5 fabian 1.3 */
6 guppy 1.8 /*
7     * Copyright (C) 1997 Robey Pointer
8     * Copyright (C) 1999, 2000, 2001 Eggheads Development Team
9     *
10 fabian 1.3 * 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 guppy 1.8 *
15 fabian 1.3 * 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 guppy 1.8 *
20 fabian 1.3 * 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 segfault 1.1
28    
29 fabian 1.7 #define TC_DELETED 0x0001 /* This command/trigger was deleted. */
30 stdarg 1.12
31 stdarg 1.14 /* Flags for bind entries */
32 stdarg 1.12 /* Does the callback want their client_data inserted as the first argument? */
33     #define BIND_WANTS_CD 1
34 fabian 1.7
35 stdarg 1.14 /* Flags for bind tables */
36     #define BIND_STRICT_ATTR 0x80
37 stdarg 1.15 #define BIND_BREAKABLE 0x100
38 stdarg 1.16
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 stdarg 1.14
50 stdarg 1.9 /* Will replace tcl_cmd_t */
51 stdarg 1.10 /* This holds the final information for a function listening on a bind
52     table. */
53 stdarg 1.9 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 fabian 1.7 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 segfault 1.1 } tcl_cmd_t;
72    
73 fabian 1.7
74     #define TBM_DELETED 0x0001 /* This mask was deleted. */
75    
76 stdarg 1.9 /* Will replace tcl_bind_mask_t */
77 stdarg 1.10 /* 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 stdarg 1.9 typedef struct bind_chain_b {
81 stdarg 1.11 struct bind_chain_b *next;
82 stdarg 1.9 bind_entry_t *entries;
83     char *mask;
84     int flags;
85     } bind_chain_t;
86    
87 fabian 1.7 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 stdarg 1.9
102     /* Will replace tcl_bind_list_b */
103 stdarg 1.10 /* This is the highest-level structure. It's like the "msg" table
104     or the "pubm" table. */
105 stdarg 1.9 typedef struct bind_table_b {
106 stdarg 1.11 struct bind_table_b *next;
107 stdarg 1.9 bind_chain_t *chains;
108     char *name;
109 stdarg 1.13 char *syntax;
110 stdarg 1.14 int nargs;
111     int match_type;
112 stdarg 1.9 int flags;
113     } bind_table_t;
114 fabian 1.7
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 segfault 1.1
128 fabian 1.5
129 segfault 1.1 #ifndef MAKING_MODS
130 fabian 1.5
131 fabian 1.7 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 segfault 1.1 void check_tcl_time(struct tm *);
153     void tell_binds(int, char *);
154 fabian 1.7 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 segfault 1.1
168 fabian 1.7 #define check_tcl_load(a) check_tcl_loadunld(a, H_load)
169     #define check_tcl_unld(a) check_tcl_loadunld(a, H_unld)
170 segfault 1.1
171 fabian 1.7 void rem_builtins(tcl_bind_list_t *, cmd_t *);
172     void add_builtins(tcl_bind_list_t *, cmd_t *);
173 segfault 1.1
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 stdarg 1.14
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 segfault 1.1
195     #endif
196    
197 fabian 1.5
198 fabian 1.6 #define CHECKVALIDITY(a) do { \
199 fabian 1.5 if (!check_validity(argv[0], (a))) { \
200     Tcl_AppendResult(irp, "bad builtin command call!", \
201     NULL); \
202     return TCL_ERROR; \
203 fabian 1.6 } \
204     } while (0)
205 fabian 1.3
206     #endif /* _EGG_TCLHASH_H */

webmaster@eggheads.org
ViewVC Help
Powered by ViewVC 1.1.23