diff options
Diffstat (limited to 'src/irc/core/modes.h')
-rw-r--r-- | src/irc/core/modes.h | 28 |
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 |