summaryrefslogtreecommitdiffstats
path: root/src/core/expandos.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/expandos.h')
-rw-r--r--src/core/expandos.h45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/core/expandos.h b/src/core/expandos.h
new file mode 100644
index 0000000..17cee60
--- /dev/null
+++ b/src/core/expandos.h
@@ -0,0 +1,45 @@
+#ifndef IRSSI_CORE_EXPANDOS_H
+#define IRSSI_CORE_EXPANDOS_H
+
+#include <irssi/src/core/signals.h>
+
+/* first argument of signal must match to active .. */
+typedef enum {
+ EXPANDO_ARG_NONE = 1,
+ EXPANDO_ARG_SERVER,
+ EXPANDO_ARG_WINDOW,
+ EXPANDO_ARG_WINDOW_ITEM,
+
+ EXPANDO_NEVER /* special: expando never changes */
+} ExpandoArg;
+
+typedef char* (*EXPANDO_FUNC)
+ (SERVER_REC *server, void *item, int *free_ret);
+
+extern const char *current_expando;
+extern time_t current_time;
+extern time_t reference_time;
+
+/* Create expando - overrides any existing ones.
+ ... = signal, type, ..., NULL - list of signals that might change the
+ value of this expando */
+void expando_create(const char *key, EXPANDO_FUNC func, ...);
+/* Add new signal to expando */
+void expando_add_signal(const char *key, const char *signal, ExpandoArg arg);
+/* Destroy expando */
+void expando_destroy(const char *key, EXPANDO_FUNC func);
+
+void expando_bind(const char *key, int funccount, SIGNAL_FUNC *funcs);
+void expando_unbind(const char *key, int funccount, SIGNAL_FUNC *funcs);
+
+/* Returns [<signal id>, EXPANDO_ARG_xxx, <signal id>, ..., -1] */
+int *expando_get_signals(const char *key);
+
+/* internal: */
+EXPANDO_FUNC expando_find_char(char chr);
+EXPANDO_FUNC expando_find_long(const char *key);
+
+void expandos_init(void);
+void expandos_deinit(void);
+
+#endif