1 /*
2  * cset.h: header for cset.c
3  */
4 
5 #ifndef _CSET_H_
6 #define _CSET_H_
7 
8 #include "struct.h"
9 /* This ensures we always have the offsetof() macro */
10 #ifndef offsetof
11 #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
12 #endif
13 
14 /* the types of IrcVariables (repeated in vars.h) */
15 #define BOOL_TYPE_VAR 0
16 #define CHAR_TYPE_VAR 1
17 #define INT_TYPE_VAR 2
18 #define STR_TYPE_VAR 3
19 
20 /* var_settings indexes ... also used in display.c for highlights */
21 #define OFF 0
22 #define ON 1
23 #define TOGGLE 2
24 
25 enum CSET_TYPES
26 {
27 	AINV_CSET,
28 	ANNOY_KICK_CSET,
29 	AOP_CSET,
30 	AUTO_JOIN_ON_INVITE_CSET,
31 	AUTO_LIMIT_CSET,
32 	AUTO_REJOIN_CSET,
33 	BANTIME_CSET,
34 	BITCH_CSET,
35 	CHANMODE_CSET,
36 	CHANNEL_LOG_CSET,
37 	CHANNEL_LOG_FILE_CSET,
38 	CHANNEL_LOG_LEVEL_CSET,
39 	COMPRESS_MODES_CSET,
40 	CTCP_FLOOD_BAN_CSET,
41 	DEOPFLOOD_CSET,
42 	DEOPFLOOD_TIME_CSET,
43 	DEOP_ON_DEOPFLOOD_CSET,
44 	DEOP_ON_KICKFLOOD_CSET,
45 	HACKING_CSET,
46 	JOINFLOOD_CSET,
47 	JOINFLOOD_TIME_CSET,
48 	KICKFLOOD_CSET,
49 	KICKFLOOD_TIME_CSET,
50 	KICK_IF_BANNED_CSET,
51 	KICK_ON_DEOPFLOOD_CSET,
52 	KICK_ON_JOINFLOOD_CSET,
53 	KICK_ON_KICKFLOOD_CSET,
54 	KICK_ON_NICKFLOOD_CSET,
55 	KICK_ON_PUBFLOOD_CSET,
56 	KICK_OPS_CSET,
57 	LAMEIDENT_CSET,
58 	LAMELIST_CSET,
59 	NICKFLOOD_CSET,
60 	NICKFLOOD_TIME_CSET,
61 	PUBFLOOD_CSET,
62 	PUBFLOOD_IGNORE_TIME_CSET,
63 	PUBFLOOD_TIME_CSET,
64 	SHITLIST_CSET,
65 	USERLIST_CSET,
66 	NUMBER_OF_CSETS
67 };
68 
69 enum WSET_TYPES
70 {
71 	STATUS_AWAY_WSET,
72 	STATUS_CDCCCOUNT_WSET,
73 	STATUS_CHANNEL_WSET,
74 	STATUS_CHANOP_WSET,
75 	STATUS_CLOCK_WSET,
76 	STATUS_CPU_SAVER_WSET,
77 	STATUS_DCCCOUNT_WSET,
78 	STATUS_FLAG_WSET,
79 	STATUS_FORMAT_WSET,
80 	STATUS_FORMAT1_WSET,
81 	STATUS_FORMAT2_WSET,
82 	STATUS_FORMAT3_WSET,
83 	STATUS_HALFOP_WSET,
84 	STATUS_HOLD_WSET,
85 	STATUS_HOLD_LINES_WSET,
86 	STATUS_LAG_WSET,
87 	STATUS_MAIL_WSET,
88 	STATUS_MODE_WSET,
89 	STATUS_MSGCOUNT_WSET,
90 	STATUS_NICKNAME_WSET,
91 	STATUS_NOTIFY_WSET,
92 	STATUS_OPER_KILLS_WSET,
93 	STATUS_QUERY_WSET,
94 	STATUS_SCROLLBACK_WSET,
95 	STATUS_SERVER_WSET,
96 	STATUS_TOPIC_WSET,
97 	STATUS_UMODE_WSET,
98 	STATUS_USER0_WSET,
99 	STATUS_USER1_WSET,
100 	STATUS_USER10_WSET,
101 	STATUS_USER11_WSET,
102 	STATUS_USER12_WSET,
103 	STATUS_USER13_WSET,
104 	STATUS_USER14_WSET,
105 	STATUS_USER15_WSET,
106 	STATUS_USER16_WSET,
107 	STATUS_USER17_WSET,
108 	STATUS_USER18_WSET,
109 	STATUS_USER19_WSET,
110 	STATUS_USER2_WSET,
111 	STATUS_USER20_WSET,
112 	STATUS_USER21_WSET,
113 	STATUS_USER22_WSET,
114 	STATUS_USER23_WSET,
115 	STATUS_USER24_WSET,
116 	STATUS_USER25_WSET,
117 	STATUS_USER26_WSET,
118 	STATUS_USER27_WSET,
119 	STATUS_USER28_WSET,
120 	STATUS_USER29_WSET,
121 	STATUS_USER3_WSET,
122 	STATUS_USER30_WSET,
123 	STATUS_USER31_WSET,
124 	STATUS_USER32_WSET,
125 	STATUS_USER33_WSET,
126 	STATUS_USER34_WSET,
127 	STATUS_USER35_WSET,
128 	STATUS_USER36_WSET,
129 	STATUS_USER37_WSET,
130 	STATUS_USER38_WSET,
131 	STATUS_USER39_WSET,
132 	STATUS_USER4_WSET,
133 	STATUS_USER5_WSET,
134 	STATUS_USER6_WSET,
135 	STATUS_USER7_WSET,
136 	STATUS_USER8_WSET,
137 	STATUS_USER9_WSET,
138 	STATUS_USERS_WSET,
139 	STATUS_VOICE_WSET,
140 	STATUS_WINDOW_WSET,
141 	NUMBER_OF_WSETS
142 };
143 
144 enum FSET_TYPES
145 {
146 FORMAT_ACTION_FSET,
147 FORMAT_ACTION_AR_FSET,
148 FORMAT_ACTION_CHANNEL_FSET,
149 FORMAT_ACTION_OTHER_FSET,
150 FORMAT_ACTION_OTHER_AR_FSET,
151 FORMAT_ACTION_USER_FSET,
152 FORMAT_ACTION_USER_AR_FSET,
153 FORMAT_ALIAS_FSET,
154 FORMAT_ASSIGN_FSET,
155 FORMAT_AWAY_FSET,
156 FORMAT_BACK_FSET,
157 
158 FORMAT_BANS_FSET,
159 FORMAT_BANS_FOOTER_FSET,
160 FORMAT_BANS_HEADER_FSET,
161 FORMAT_BITCH_FSET,
162 FORMAT_BOT_FSET,
163 FORMAT_BOT_FOOTER_FSET,
164 FORMAT_BOT_HEADER_FSET,
165 FORMAT_BWALL_FSET,
166 
167 FORMAT_CHANNEL_SIGNOFF_FSET,
168 FORMAT_CHANNEL_URL_FSET,
169 
170 FORMAT_COMPLETE_FSET,
171 FORMAT_CONNECT_FSET,
172 FORMAT_CSET_FSET,
173 FORMAT_CTCP_FSET,
174 FORMAT_CTCP_CLOAK_FSET,
175 FORMAT_CTCP_CLOAK_FUNC_FSET,
176 FORMAT_CTCP_CLOAK_FUNC_USER_FSET,
177 FORMAT_CTCP_CLOAK_UNKNOWN_FSET,
178 FORMAT_CTCP_CLOAK_UNKNOWN_USER_FSET,
179 FORMAT_CTCP_CLOAK_USER_FSET,
180 FORMAT_CTCP_FUNC_FSET,
181 FORMAT_CTCP_FUNC_USER_FSET,
182 FORMAT_CTCP_REPLY_FSET,
183 FORMAT_CTCP_UNKNOWN_FSET,
184 FORMAT_CTCP_UNKNOWN_USER_FSET,
185 FORMAT_CTCP_USER_FSET,
186 FORMAT_DCC_FSET,
187 FORMAT_DCC_CHAT_FSET,
188 FORMAT_DCC_CONNECT_FSET,
189 FORMAT_DCC_ERROR_FSET,
190 FORMAT_DCC_LOST_FSET,
191 FORMAT_DCC_REQUEST_FSET,
192 FORMAT_DESYNC_FSET,
193 FORMAT_DISCONNECT_FSET,
194 FORMAT_EBANS_FSET,
195 FORMAT_EBANS_FOOTER_FSET,
196 FORMAT_EBANS_HEADER_FSET,
197 FORMAT_ENCRYPTED_NOTICE_FSET,
198 FORMAT_ENCRYPTED_PRIVMSG_FSET,
199 FORMAT_FLOOD_FSET,
200 FORMAT_FRIEND_JOIN_FSET,
201 FORMAT_HELP_FSET,
202 FORMAT_HOOK_FSET,
203 
204 FORMAT_IGNORE_INVITE_FSET,
205 FORMAT_IGNORE_MSG_FSET,
206 FORMAT_IGNORE_MSG_AWAY_FSET,
207 FORMAT_IGNORE_NOTICE_FSET,
208 FORMAT_IGNORE_WALL_FSET,
209 
210 FORMAT_INVITE_FSET,
211 FORMAT_INVITE_USER_FSET,
212 FORMAT_JOIN_FSET,
213 FORMAT_KICK_FSET,
214 FORMAT_KICK_USER_FSET,
215 FORMAT_KILL_FSET,
216 FORMAT_LASTLOG_FSET,
217 FORMAT_LEAVE_FSET,
218 FORMAT_LINKS_FSET,
219 FORMAT_LIST_FSET,
220 FORMAT_MAIL_FSET,
221 FORMAT_MODE_FSET,
222 FORMAT_MODE_CHANNEL_FSET,
223 FORMAT_MSG_FSET,
224 FORMAT_MSGCOUNT_FSET,
225 FORMAT_MSGLOG_FSET,
226 FORMAT_MSG_GROUP_FSET,
227 
228 FORMAT_NAMES_FSET,
229 FORMAT_NAMES_BANNER_FSET,
230 FORMAT_NAMES_BOT_FSET,
231 FORMAT_NAMES_FOOTER_FSET,
232 FORMAT_NAMES_FRIEND_FSET,
233 FORMAT_NAMES_IRCOP_FSET,
234 FORMAT_NAMES_NICK_FSET,
235 FORMAT_NAMES_NICK_BOT_FSET,
236 FORMAT_NAMES_NICK_FRIEND_FSET,
237 FORMAT_NAMES_NICK_ME_FSET,
238 FORMAT_NAMES_NICK_SHIT_FSET,
239 FORMAT_NAMES_NONOP_FSET,
240 FORMAT_NAMES_OP_FSET,
241 FORMAT_NAMES_SHIT_FSET,
242 FORMAT_NAMES_USER_FSET,
243 FORMAT_NAMES_USER_CHANOP_FSET,
244 FORMAT_NAMES_USER_IRCOP_FSET,
245 FORMAT_NAMES_USER_VOICE_FSET,
246 FORMAT_NAMES_VOICE_FSET,
247 
248 FORMAT_NETADD_FSET,
249 FORMAT_NETJOIN_FSET,
250 FORMAT_NETSPLIT_FSET,
251 FORMAT_NETSPLIT_HEADER_FSET,
252 
253 FORMAT_NICKNAME_FSET,
254 FORMAT_NICKNAME_OTHER_FSET,
255 FORMAT_NICKNAME_USER_FSET,
256 FORMAT_NICK_AUTO_FSET,
257 FORMAT_NICK_COMP_FSET,
258 FORMAT_NICK_MSG_FSET,
259 
260 FORMAT_NONICK_FSET,
261 FORMAT_NOTE_FSET,
262 FORMAT_NOTICE_FSET,
263 FORMAT_NOTIFY_OFF_FSET,
264 FORMAT_NOTIFY_ON_FSET,
265 FORMAT_NOTIFY_SIGNOFF_FSET,
266 FORMAT_NOTIFY_SIGNON_FSET,
267 FORMAT_OPER_FSET,
268 FORMAT_OV_FSET,
269 FORMAT_PASTE_FSET,
270 FORMAT_PUBLIC_FSET,
271 FORMAT_PUBLIC_AR_FSET,
272 FORMAT_PUBLIC_MSG_FSET,
273 FORMAT_PUBLIC_MSG_AR_FSET,
274 FORMAT_PUBLIC_NOTICE_FSET,
275 FORMAT_PUBLIC_NOTICE_AR_FSET,
276 FORMAT_PUBLIC_OTHER_FSET,
277 FORMAT_PUBLIC_OTHER_AR_FSET,
278 FORMAT_REL_FSET,
279 FORMAT_RELM_FSET,
280 FORMAT_RELN_FSET,
281 FORMAT_RELS_FSET,
282 FORMAT_RELSM_FSET,
283 FORMAT_RELSN_FSET,
284 FORMAT_SEND_ACTION_FSET,
285 FORMAT_SEND_ACTION_OTHER_FSET,
286 FORMAT_SEND_AWAY_FSET,
287 FORMAT_SEND_CTCP_FSET,
288 FORMAT_SEND_DCC_CHAT_FSET,
289 FORMAT_SEND_ENCRYPTED_MSG_FSET,
290 FORMAT_SEND_ENCRYPTED_NOTICE_FSET,
291 FORMAT_SEND_MSG_FSET,
292 
293 FORMAT_SEND_NOTICE_FSET,
294 FORMAT_SEND_PUBLIC_FSET,
295 FORMAT_SEND_PUBLIC_OTHER_FSET,
296 FORMAT_SERVER_FSET,
297 FORMAT_SERVER_MSG1_FSET,
298 FORMAT_SERVER_MSG1_FROM_FSET,
299 FORMAT_SERVER_MSG2_FSET,
300 FORMAT_SERVER_MSG2_FROM_FSET,
301 
302 FORMAT_SERVER_NOTICE_FSET,
303 FORMAT_SERVER_NOTICE_BOT_FSET,
304 FORMAT_SERVER_NOTICE_BOT1_FSET,
305 FORMAT_SERVER_NOTICE_BOT_ALARM_FSET,
306 FORMAT_SERVER_NOTICE_CLIENT_CONNECT_FSET,
307 FORMAT_SERVER_NOTICE_CLIENT_EXIT_FSET,
308 FORMAT_SERVER_NOTICE_CLIENT_INVALID_FSET,
309 FORMAT_SERVER_NOTICE_CLIENT_TERM_FSET,
310 FORMAT_SERVER_NOTICE_FAKE_FSET,
311 FORMAT_SERVER_NOTICE_GLINE_FSET,
312 FORMAT_SERVER_NOTICE_KILL_FSET,
313 FORMAT_SERVER_NOTICE_KILL_LOCAL_FSET,
314 FORMAT_SERVER_NOTICE_KLINE_FSET,
315 FORMAT_SERVER_NOTICE_NICK_COLLISION_FSET,
316 FORMAT_SERVER_NOTICE_OPER_FSET,
317 FORMAT_SERVER_NOTICE_REHASH_FSET,
318 FORMAT_SERVER_NOTICE_STATS_FSET,
319 FORMAT_SERVER_NOTICE_TRAFFIC_HIGH_FSET,
320 FORMAT_SERVER_NOTICE_TRAFFIC_NORM_FSET,
321 FORMAT_SERVER_NOTICE_UNAUTH_FSET,
322 
323 FORMAT_SET_FSET,
324 FORMAT_SET_NOVALUE_FSET,
325 FORMAT_SHITLIST_FSET,
326 FORMAT_SHITLIST_FOOTER_FSET,
327 FORMAT_SHITLIST_HEADER_FSET,
328 
329 FORMAT_SIGNOFF_FSET,
330 FORMAT_SILENCE_FSET,
331 FORMAT_SMODE_FSET,
332 FORMAT_STATUS_FSET,
333 FORMAT_STATUS1_FSET,
334 FORMAT_STATUS2_FSET,
335 FORMAT_STATUS3_FSET,
336 FORMAT_TIMER_FSET,
337 FORMAT_TOPIC_FSET,
338 FORMAT_TOPIC_CHANGE_FSET,
339 FORMAT_TOPIC_CHANGE_HEADER_FSET,
340 FORMAT_TOPIC_SETBY_FSET,
341 FORMAT_TOPIC_UNSET_FSET,
342 FORMAT_TRACE_OPER_FSET,
343 FORMAT_TRACE_SERVER_FSET,
344 FORMAT_TRACE_USER_FSET,
345 FORMAT_USAGE_FSET,
346 FORMAT_USERLIST_FSET,
347 FORMAT_USERLIST_FOOTER_FSET,
348 FORMAT_USERLIST_HEADER_FSET,
349 
350 FORMAT_USERMODE_FSET,
351 FORMAT_USERMODE_OTHER_FSET,
352 FORMAT_USERS_FSET,
353 FORMAT_USERS_HEADER_FSET,
354 FORMAT_USERS_SHIT_FSET,
355 FORMAT_USERS_TITLE_FSET,
356 FORMAT_USERS_USER_FSET,
357 FORMAT_VERSION_FSET,
358 FORMAT_WALL_FSET,
359 FORMAT_WALLOP_FSET,
360 FORMAT_WALL_AR_FSET,
361 FORMAT_WATCH_SIGNOFF_FSET,
362 FORMAT_WATCH_SIGNON_FSET,
363 FORMAT_WHO_FSET,
364 FORMAT_WHOIS_ACTUALLY_FSET,
365 FORMAT_WHOIS_ADMIN_FSET,
366 FORMAT_WHOIS_AWAY_FSET,
367 FORMAT_WHOIS_BOT_FSET,
368 FORMAT_WHOIS_CALLERID_FSET,
369 FORMAT_WHOIS_CHANNELS_FSET,
370 FORMAT_WHOIS_FOOTER_FSET,
371 FORMAT_WHOIS_FRIEND_FSET,
372 FORMAT_WHOIS_HEADER_FSET,
373 FORMAT_WHOIS_HELP_FSET,
374 FORMAT_WHOIS_IDLE_FSET,
375 FORMAT_WHOIS_LOGGEDIN_FSET,
376 FORMAT_WHOIS_NAME_FSET,
377 FORMAT_WHOIS_NICK_FSET,
378 FORMAT_WHOIS_OPER_FSET,
379 FORMAT_WHOIS_REGISTER_FSET,
380 FORMAT_WHOIS_SECURE_FSET,
381 FORMAT_WHOIS_SERVER_FSET,
382 FORMAT_WHOIS_SERVICE_FSET,
383 FORMAT_WHOIS_SHIT_FSET,
384 FORMAT_WHOIS_SIGNON_FSET,
385 FORMAT_WHOLEFT_FOOTER_FSET,
386 FORMAT_WHOLEFT_HEADER_FSET,
387 FORMAT_WHOLEFT_USER_FSET,
388 FORMAT_WHOWAS_HEADER_FSET,
389 FORMAT_WHOWAS_NICK_FSET,
390 FORMAT_WIDELIST_FSET,
391 FORMAT_WINDOW_SET_FSET,
392 FORMAT_XTERM_TITLE_FSET,
393 NUMBER_OF_FSET
394 };
395 
396 
397 typedef struct cset_array_struc
398 {
399 	char *name;
400 	int type;
401 	int offset;
402 	void (*func) (struct cset_array_struc *, CSetList *);
403 	int flag;
404 }	CSetArray;
405 
406 typedef struct wset_array_struc
407 {
408 	char *name;
409 	int type;
410 	int offset;
411 	int format_offset;
412 	void (*func) (Window *, char *, int);
413 	int flag;
414 }	WSetArray;
415 
416 
417 void		cset_variable(char *, char *, char *, char *);
418 int		BX_get_cset_int_var(CSetList *, int);
419 void		BX_set_cset_int_var(CSetList *, int, int);
420 char		*BX_get_cset_str_var(CSetList *, int);
421 void		BX_set_cset_str_var(CSetList *, int, const char *);
422 
423 CSetList	*create_csets_for_channel(char *channel);
424 void		remove_csets_for_channel(CSetList *);
425 char		*BX_get_wset_string_var(WSet *, int);
426 void		BX_set_wset_string_var(WSet *, int, char *);
427 void		wset_variable(char *, char *, char *, char *);
428 WSet		*create_wsets_for_window(Window *);
429 void		create_fsets(Window *, int);
430 void		remove_wsets_for_window(Window *);
431 char		*BX_fget_string_var(enum FSET_TYPES);
432 void		BX_fset_string_var(enum FSET_TYPES, char *);
433 void		fset_variable(char *, char *, char *, char *);
434 char		*make_fstring_var(const char *);
435 char		**get_wset_format_var_address(WSet *, int);
436 char		*get_cset(char *, ChannelList *, char *);
437 void		delete_all_ext_fset(void);
438 CSetList	*check_cset_queue(char *, int);
439 void		do_logchannel(unsigned long, ChannelList *, char *, ...);
440 void		check_channel_limit(ChannelList *chan);
441 
442 void add_numeric_fset(char *name, int remove, char *args, int);
443 char *find_numeric_fset(int numeric);
444 
445 #endif /* _CSETS_H_ */
446