summaryrefslogtreecommitdiff
path: root/src/core/commands.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/commands.h')
-rw-r--r--src/core/commands.h74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/core/commands.h b/src/core/commands.h
new file mode 100644
index 00000000..f91bc2ce
--- /dev/null
+++ b/src/core/commands.h
@@ -0,0 +1,74 @@
+#ifndef __COMMANDS_H
+#define __COMMANDS_H
+
+#include "signals.h"
+
+typedef struct {
+ char *category;
+ char *cmd;
+}
+COMMAND_REC;
+
+enum {
+ CMDERR_PARAM, /* invalid parameter */
+ CMDERR_NOT_ENOUGH_PARAMS, /* not enough parameters given */
+ CMDERR_NOT_CONNECTED, /* not connected to IRC server */
+ CMDERR_NOT_JOINED, /* not joined to any channels in this window */
+ CMDERR_GETSOCKNAME, /* getsockname() failed */
+ CMDERR_LISTEN, /* listen() failed */
+ CMDERR_MULTIPLE_MATCHES, /* multiple matches found, didn't do anything */
+ CMDERR_NICK_NOT_FOUND, /* nick not found */
+ CMDERR_CHAN_NOT_FOUND, /* channel not found */
+ CMDERR_SERVER_NOT_FOUND, /* server not found */
+ CMDERR_CHAN_NOT_SYNCED, /* channel not fully synchronized yet */
+ CMDERR_NOT_GOOD_IDEA /* not good idea to do, -yes overrides this */
+};
+
+#define cmd_return_error(a) { signal_emit("error command", 1, GINT_TO_POINTER(a)); return; }
+#define cmd_param_error(a) { g_free(params); cmd_return_error(a); }
+
+extern GSList *commands;
+extern char *current_command;
+
+void command_bind(const char *cmd, const char *category, SIGNAL_FUNC func);
+void command_unbind(const char *cmd, SIGNAL_FUNC func);
+
+void command_runsub(const char *cmd, const char *data, void *p1, void *p2);
+
+/* count can have these flags: */
+#define PARAM_WITHOUT_FLAGS(a) ((a) & 0x00ffffff)
+/* cmd_get_params() */
+#define PARAM_FLAG_GETREST 0x02000000
+/* optional arguments (-cmd -cmd2 -cmd3) */
+#define PARAM_FLAG_OPTARGS 0x04000000
+/* arguments can have arguments too. Example:
+
+ -cmd arg -noargcmd -cmd2 "another arg -optnumarg rest of the text
+
+ You would call this with:
+
+ args = "cmd cmd2 @optnumarg";
+ cmd_get_params(data, 5 | PARAM_FLAG_MULTIARGS | PARAM_FLAG_GETREST,
+ &args, &arg_cmd, &arg_cmd2, &arg_optnum, &rest);
+
+ The variables are filled as following:
+
+ args = "-cmd -noargcmd -cmd2 -optnumarg"
+ arg_cmd = "arg"
+ arg_cmd2 = "another arg"
+ rest = "rest of the text"
+ arg_optnum = "" - this is because "rest" isn't a numeric value
+*/
+#define PARAM_FLAG_MULTIARGS 0x08000000
+
+char *cmd_get_param(char **data);
+char *cmd_get_params(const char *data, int count, ...);
+
+typedef char* (*CMD_GET_FUNC) (const char *data, int *count, va_list *args);
+void cmd_get_add_func(CMD_GET_FUNC func);
+void cmd_get_remove_func(CMD_GET_FUNC func);
+
+void commands_init(void);
+void commands_deinit(void);
+
+#endif