summaryrefslogtreecommitdiff
path: root/src/irc/core/modes.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/irc/core/modes.h')
-rw-r--r--src/irc/core/modes.h28
1 files changed, 23 insertions, 5 deletions
diff --git a/src/irc/core/modes.h b/src/irc/core/modes.h
index d72e6a3c..d175c083 100644
--- a/src/irc/core/modes.h
+++ b/src/irc/core/modes.h
@@ -4,8 +4,21 @@
#include "server.h"
#include "channels.h"
-#define HAS_MODE_ARG(c) ((c) == 'b' || (c) == 'e' || (c) == 'I' || \
- (c) == 'v' || (c) == 'o' || (c) == 'l' || (c) == 'k')
+/* modes that have argument always */
+#define HAS_MODE_ARG_ALWAYS(mode) \
+ ((mode) == 'b' || (mode) == 'e' || (mode) == 'I' || \
+ (mode) == 'o' || (mode) == 'h' || (mode) == 'v' || (mode) == 'k')
+
+/* modes that have argument when being set (+) */
+#define HAS_MODE_ARG_SET(mode) \
+ (HAS_MODE_ARG_ALWAYS(mode) || (mode) == 'l')
+
+/* modes that have argument when being unset (-) */
+#define HAS_MODE_ARG_UNSET(mode) \
+ HAS_MODE_ARG_ALWAYS(mode)
+
+#define HAS_MODE_ARG(type, mode) \
+ ((type) == '+' ? HAS_MODE_ARG_SET(mode) : HAS_MODE_ARG_UNSET(mode))
void modes_init(void);
void modes_deinit(void);
@@ -13,9 +26,14 @@ void modes_deinit(void);
/* add `mode' to `old' - return newly allocated mode. */
char *modes_join(const char *old, const char *mode);
-void parse_channel_modes(CHANNEL_REC *channel, const char *setby, const char *modestr);
+int channel_mode_is_set(CHANNEL_REC *channel, char mode);
+
+void parse_channel_modes(CHANNEL_REC *channel, const char *setby,
+ const char *modestr);
-void channel_set_singlemode(IRC_SERVER_REC *server, const char *channel, const char *nicks, const char *mode);
-void channel_set_mode(IRC_SERVER_REC *server, const char *channel, const char *mode);
+void channel_set_singlemode(IRC_SERVER_REC *server, const char *channel,
+ const char *nicks, const char *mode);
+void channel_set_mode(IRC_SERVER_REC *server, const char *channel,
+ const char *mode);
#endif