Added SILC Thread Queue API
[crypto.git] / apps / irssi / src / core / signals.h
1 #ifndef __SIGNAL_H
2 #define __SIGNAL_H
3
4 #define SIGNAL_PRIORITY_LOW     100
5 #define SIGNAL_PRIORITY_DEFAULT 0
6 #define SIGNAL_PRIORITY_HIGH    -100
7
8 #define SIGNAL_MAX_ARGUMENTS 6
9 typedef void (*SIGNAL_FUNC) (const void *, const void *,
10                              const void *, const void *,
11                              const void *, const void *);
12
13 extern void *signal_user_data; /* use signal_get_user_data() macro to access */
14
15 /* bind a signal */
16 void signal_add_full(const char *module, int priority,
17                      const char *signal, SIGNAL_FUNC func, void *user_data);
18 void signal_add_full_id(const char *module, int priority,
19                         int signal, SIGNAL_FUNC func, void *user_data);
20 #define signal_add(signal, func) \
21         signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), NULL)
22 #define signal_add_first(signal, func) \
23         signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), NULL)
24 #define signal_add_last(signal, func) \
25         signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), NULL)
26
27 #define signal_add_data(signal, func, data) \
28         signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_DEFAULT, (signal), (SIGNAL_FUNC) (func), data)
29 #define signal_add_first_data(signal, func, data) \
30         signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_HIGH, (signal), (SIGNAL_FUNC) (func), data)
31 #define signal_add_last_data(signal, func, data) \
32         signal_add_full(MODULE_NAME, SIGNAL_PRIORITY_LOW, (signal), (SIGNAL_FUNC) (func), data)
33
34 /* unbind signal */
35 void signal_remove_full(const char *signal, SIGNAL_FUNC func, void *user_data);
36 #define signal_remove(signal, func) \
37         signal_remove_full((signal), (SIGNAL_FUNC) (func), NULL)
38 #define signal_remove_data(signal, func, data) \
39         signal_remove_full((signal), (SIGNAL_FUNC) (func), data)
40 void signal_remove_id(int signal_id, SIGNAL_FUNC func, void *user_data);
41
42 /* emit signal */
43 int signal_emit(const char *signal, int params, ...);
44 int signal_emit_id(int signal_id, int params, ...);
45
46 /* continue currently emitted signal with different parameters */
47 void signal_continue(int params, ...);
48
49 /* stop the current ongoing signal emission */
50 void signal_stop(void);
51 /* stop ongoing signal emission by signal name */
52 void signal_stop_by_name(const char *signal);
53
54 /* return the name of the signal that is currently being emitted */
55 const char *signal_get_emitted(void);
56 /* return the ID of the signal that is currently being emitted */
57 int signal_get_emitted_id(void);
58 /* return TRUE if specified signal was stopped */
59 int signal_is_stopped(int signal_id);
60 /* return the user data of the signal function currently being emitted */
61 #define signal_get_user_data() signal_user_data
62
63 /* remove all signals that belong to `module' */
64 void signals_remove_module(const char *module);
65
66 /* signal name -> ID */
67 #define signal_get_uniq_id(signal) \
68         module_get_uniq_id_str("signals", signal)
69 /* signal ID -> name */
70 #define signal_get_id_str(signal_id) \
71         module_find_id_str("signals", signal_id)
72
73 void signals_init(void);
74 void signals_deinit(void);
75
76 #endif