#undef MODE_VALUE_INDEX
}
+void getModeString(struct ChanNode* chan, char *modesStr) {
+ #define MODE_TYPE (mode[2] & CHANNEL_MODE_TYPE)
+ #define MODE_VALUE (mode[2] & CHANNEL_MODE_VALUE)
+ #define MODE_VALUE_INDEX (mode[2] & CHANNEL_MODE_VALUE_INDEX_MASK) >> CHANNEL_MODE_VALUE_INDEX_SHIFT
+ char paramStr[MAXLEN];
+ modesStr[0] = '+';
+ unsigned int *mode, flag = 1;
+ int modePos = 1;
+ int paramPos = 0;
+ for (mode = valid_modes; mode[1]; mode += 3) {
+ if(chan->modes & mode[0]) {
+ modesStr[modePos++] = (char) mode[1];
+ if(MODE_TYPE != CHANNEL_MODE_TYPE_D) {
+ if(MODE_VALUE == CHANNEL_MODE_VALUE_STRING)
+ paramPos += sprintf(paramStr + paramPos, " %s", chan->mode_str_args[MODE_VALUE_INDEX]);
+ else if(MODE_VALUE == CHANNEL_MODE_VALUE_INTEGER)
+ paramPos += sprintf(paramStr + paramPos, " %d", chan->mode_int_args[MODE_VALUE_INDEX]);
+ }
+ }
+ }
+ paramStr[paramPos] = '\0';
+ strcpy(modesStr + modePos, paramStr);
+ #undef MODE_TYPE
+ #undef MODE_VALUE
+ #undef MODE_VALUE_INDEX
+}