+ if (parms[patterns_left][0] == '(') {
+ extended_list_in_use = 1;
+ paren_nest = 0;
+ for (i=patterns_left; i<num_parms; ++i) {
+ for (j=0; j<strlen(parms[i]); ++j) {
+ if (parms[i][j] == '(') ++paren_nest;
+ if (parms[i][j] == ')') --paren_nest;
+ }
+ if (paren_nest == 0) {
+ patterns_right = i; /* found end of patterns */
+ i = num_parms + 1; /* break out of the loop */
+ }
+ }
+ num_patterns = patterns_right - patterns_left + 1;
+ for (i=0; i<num_patterns; ++i) {
+ if (i < MAX_PATTERNS) {
+ patterns[i] = malloc(512);
+ snprintf(patterns[i], 512, "%s%s", parms[root_pos], parms[patterns_left+i]);
+ if (i == 0) {
+ strcpy(patterns[i], &patterns[i][1]);
+ }
+ if (i == num_patterns-1) {
+ patterns[i][strlen(patterns[i])-1] = 0;
+ }
+ }
+ }
+ }
+ else {
+ num_patterns = 1;
+ patterns[0] = malloc(512);
+ snprintf(patterns[0], 512, "%s%s", parms[root_pos], parms[patterns_left]);
+ }
+
+ data_for_callback[0] = verb;
+ data_for_callback[1] = (char *) subscribed_rooms_only;
+ data_for_callback[2] = (char *) num_patterns;
+ data_for_callback[3] = (char *) patterns;