char * get_all_levels (void) { char *buffer = NULL; size_t clue = 0; int i; int next = 1; for (i = 0; i < level_bucket->numitems; i++) { /* This is done to skip aliases... */ if (LEVELNUM(i) == next) { malloc_strcat_word_c(&buffer, space, LEVELNAME(i), DWORD_NO, &clue); next++; } } return buffer; }
/* * $timerctl(REFNUM refnum) * $timerctl(ADD <refnum> <interval> <events> <commands> <subargs> <window>) * $timerctl(DELETE <refnum>) * $timerctl(GET <refnum> [LIST]) * $timerctl(SET <refnum> [ITEM] [VALUE]) * $timerctl(REFNUMS) * * [LIST] and [ITEM] are one of the following * TIMEOUT The precise time the timer will be executed * COMMAND The commands that will be executed * SUBARGS The vaule of $* used when this timer is executed * REPEATS The number of times this timer will be executed * INTERVAL The interval of time between executions * SERVER The server this timer bound to * WINDOW The window this timer bound to */ char * timerctl (char *input) { char * refstr; char * listc; Timer * t; int len; GET_FUNC_ARG(listc, input); len = strlen(listc); if (!my_strnicmp(listc, "REFNUM", len)) { GET_FUNC_ARG(refstr, input); if (!(t = get_timer(refstr))) RETURN_EMPTY; RETURN_STR(t->ref); } else if (!my_strnicmp(listc, "REFNUMS", len)) { char * retval = NULL; size_t clue = 0; for (t = PendingTimers; t; t = t->next) malloc_strcat_word_c(&retval, space, t->ref, DWORD_DWORDS, &clue); RETURN_MSTR(retval); } else if (!my_strnicmp(listc, "ADD", len)) { RETURN_EMPTY; /* XXX - Not implemented yet. */ } else if (!my_strnicmp(listc, "DELETE", len)) { GET_FUNC_ARG(refstr, input); if (!(t = get_timer(refstr))) RETURN_EMPTY; if (t->callback) RETURN_EMPTY; RETURN_INT(remove_timer(refstr)); } else if (!my_strnicmp(listc, "GET", len)) { GET_FUNC_ARG(refstr, input); if (!(t = get_timer(refstr))) RETURN_EMPTY; GET_FUNC_ARG(listc, input); len = strlen(listc); if (!my_strnicmp(listc, "TIMEOUT", len)) { return malloc_sprintf(NULL, "%ld %ld", (long) t->time.tv_sec, (long) t->time.tv_usec); } else if (!my_strnicmp(listc, "COMMAND", len)) { if (t->callback) RETURN_EMPTY; RETURN_STR(t->command); } else if (!my_strnicmp(listc, "SUBARGS", len)) { if (t->callback) RETURN_EMPTY; RETURN_STR(t->subargs); } else if (!my_strnicmp(listc, "REPEATS", len)) { RETURN_INT(t->events); } else if (!my_strnicmp(listc, "INTERVAL", len)) { return malloc_sprintf(NULL, "%ld %ld", (long) t->interval.tv_sec, (long) t->interval.tv_usec); } else if (!my_strnicmp(listc, "SERVER", len)) { if (t->domain != SERVER_TIMER) RETURN_INT(-1); RETURN_INT(t->domref); } else if (!my_strnicmp(listc, "WINDOW", len)) { if (t->domain != WINDOW_TIMER) RETURN_INT(-1); RETURN_INT(t->domref); } } else if (!my_strnicmp(listc, "SET", len)) { GET_FUNC_ARG(refstr, input); if (!(t = get_timer(refstr))) RETURN_EMPTY; /* Changing internal system timers is strictly prohibited */ if (t->callback) RETURN_EMPTY; GET_FUNC_ARG(listc, input); len = strlen(listc); if (!my_strnicmp(listc, "TIMEOUT", len)) { time_t tv_sec; long tv_usec; GET_INT_ARG(tv_sec, input); GET_INT_ARG(tv_usec, input); t->time.tv_sec = tv_sec; t->time.tv_usec = tv_usec; } else if (!my_strnicmp(listc, "COMMAND", len)) { malloc_strcpy((char **)&t->command, input); } else if (!my_strnicmp(listc, "SUBARGS", len)) { malloc_strcpy(&t->subargs, input); } else if (!my_strnicmp(listc, "REPEATS", len)) { long repeats; GET_INT_ARG(repeats, input); t->events = repeats; } else if (!my_strnicmp(listc, "INTERVAL", len)) { time_t tv_sec; long tv_usec; GET_INT_ARG(tv_sec, input); GET_INT_ARG(tv_usec, input); t->interval.tv_sec = tv_sec; t->interval.tv_usec = tv_usec; } else if (!my_strnicmp(listc, "SERVER", len)) { int refnum; GET_INT_ARG(refnum, input); t->domain = SERVER_TIMER; t->domref = refnum; } else if (!my_strnicmp(listc, "WINDOW", len)) { int refnum; GET_INT_ARG(refnum, input); t->domain = WINDOW_TIMER; t->domref = refnum; } } else RETURN_EMPTY; RETURN_EMPTY; }
int str_to_mask (Mask *mask, const char *orig, char **rejects) { char *ptr, *rest; int len, i, neg; int warn = 0; char * str; size_t cluep = 0; mask_unsetall(mask); if (!orig) return 0; /* Whatever */ if (rejects == NULL || *rejects != NULL) panic(1, "str_to_mask: rejects must be a pointer to null"); str = LOCAL_COPY(orig); while ((str = next_arg(str, &rest)) != NULL) { while (str) { if ((ptr = strchr(str, ',')) != NULL) *ptr++ = 0; if ((len = strlen(str)) != 0) { if (my_strnicmp(str, "ALL", len) == 0) mask_setall(mask); else if (my_strnicmp(str, "NONE", len) == 0) mask_unsetall(mask); else { if (*str == '-') { str++, len--; neg = 1; } else neg = 0; for (i = 0; i < level_bucket->numitems; i++) { if (!my_strnicmp(str, LEVELNAME(i), len)) { if (neg) mask_unset(mask, LEVELNUM(i)); else mask_set(mask, LEVELNUM(i)); break; } } if (i == level_bucket->numitems) malloc_strcat_word_c(rejects, space, str, DWORD_NO, &cluep); } } str = ptr; } str = rest; } if (rejects && *rejects) return -1; return 0; }