+#if defined(GCC_VARMACROS)
+# define opserv_debug(ARGS...) do { if (opserv_conf.debug_channel) send_channel_notice(opserv_conf.debug_channel, opserv, ARGS); } while (0)
+# define opserv_alert(ARGS...) do { if (opserv_conf.alert_channel) send_channel_notice(opserv_conf.alert_channel, opserv, ARGS); } while (0)
+# define opserv_custom_alert(CHAN, ARGS...) do { if (CHAN) send_target_message(4, (CHAN), opserv, ARGS); else if (opserv_conf.alert_channel) send_channel_notice(opserv_conf.alert_channel, opserv, ARGS); } while (0)
+#elif defined(C99_VARMACROS)
+# define opserv_debug(...) do { if (opserv_conf.debug_channel) send_channel_notice(opserv_conf.debug_channel, opserv, __VA_ARGS__); } while (0)
+# define opserv_alert(...) do { if (opserv_conf.alert_channel) send_channel_notice(opserv_conf.alert_channel, opserv, __VA_ARGS__); } while (0)
+# define opserv_custom_alert(chan, ...) do { if (chan) send_target_message(4, chan, opserv, __VA_ARGS__); else if (opserv_conf.alert_channel) send_channel_notice(opserv_conf.alert_channel, opserv, __VA_ARGS__); } while (0)
+#endif
+
+char *defconReverseModes(const char *modes)
+{
+ char *newmodes = NULL;
+ unsigned int i = 0;
+ if (!modes) {
+ return NULL;
+ }
+ if (!(newmodes = malloc(sizeof(char) * strlen(modes) + 1))) {
+ return NULL;
+ }
+ for (i = 0; i < strlen(modes); i++) {
+ if (modes[i] == '+')
+ newmodes[i] = '-';
+ else if (modes[i] == '-')
+ newmodes[i] = '+';
+ else
+ newmodes[i] = modes[i];
+ }
+ newmodes[i] = '\0';
+ return newmodes;
+}
+
+int checkDefCon(int level)
+{
+ return DefCon[DefConLevel] & level;
+}
+
+void showDefConSettings(struct userNode *user, struct svccmd *cmd)
+{
+ if (DefConLevel == 5) {
+ reply("OSMSG_DEFCON_ALLOWING_ALL");
+ return;
+ } else
+ reply("OSMSG_DEFCON_DISALLOWING", DefConLevel);
+
+ if (checkDefCon(DEFCON_NO_NEW_CHANNELS))
+ reply("OSMSG_DEFCON_NO_NEW_CHANNELS");
+
+ if (checkDefCon(DEFCON_NO_NEW_NICKS))
+ reply("OSMSG_DEFCON_NO_NEW_NICKS");
+
+ if (checkDefCon(DEFCON_NO_MODE_CHANGE))
+ reply("OSMSG_DEFCON_NO_MODE_CHANGE");
+
+ if (checkDefCon(DEFCON_FORCE_CHAN_MODES) && (DefConChanModes))
+ reply("OSMSG_DEFCON_FORCE_CHANMODES", DefConChanModes);
+
+ if (checkDefCon(DEFCON_REDUCE_SESSION))
+ reply("OSMSG_DEFCON_REDUCE_SESSION", DefConSessionLimit);
+
+ if (checkDefCon(DEFCON_NO_NEW_CLIENTS))
+ reply("OSMSG_DEFCON_NO_NEW_CLIENTS");
+
+ if (checkDefCon(DEFCON_OPER_ONLY))
+ reply("OSMSG_DEFCON_OPER_ONLY");
+
+ if (checkDefCon(DEFCON_SILENT_OPER_ONLY))
+ reply("OSMSG_DEFCON_SILENT_OPER_ONLY");
+
+ if (checkDefCon(DEFCON_GLINE_NEW_CLIENTS))
+ reply("OSMSG_DEFCON_GLINE_NEW_CLIENTS");
+
+ if (checkDefCon(DEFCON_SHUN_NEW_CLIENTS))
+ reply("OSMSG_DEFCON_SHUN_NEW_CLIENTS");
+
+ if (checkDefCon(DEFCON_NO_NEW_MEMOS))
+ reply("OSMSG_DEFCON_NO_NEW_MEMOS");
+
+ return;
+}
+
+void do_mass_mode(char *modes)
+{
+ dict_iterator_t it;
+
+ if (!modes)
+ return;
+
+ for (it = dict_first(channels); it; it = iter_next(it)) {
+ struct chanNode *chan = iter_data(it);
+
+ irc_mode(opserv, chan, modes);
+ }