int xmsg_plugin_init(int prio) { PLUGIN_CHECK_VER("xmsg"); #ifdef HAVE_INOTIFY if ((in_fd = inotify_init()) == -1) xerrn("unable to init inotify"); #endif /*HAVE_INOTIFY*/ xdebug("inotify fd = %d", in_fd); xmsg_plugin.params = xmsg_plugin_vars; xmsg_plugin.priv = &xmsg_priv; plugin_register(&xmsg_plugin, prio); query_connect_id(&xmsg_plugin, PROTOCOL_VALIDATE_UID, xmsg_validate_uid, NULL); query_connect_id(&xmsg_plugin, EKG_SIGUSR1, xmsg_handle_sigusr, NULL); #define XMSG_CMDFLAGS SESSION_MUSTBELONG #define XMSG_CMDFLAGS_TARGET SESSION_MUSTBELONG|COMMAND_ENABLEREQPARAMS|COMMAND_PARAMASTARGET|SESSION_MUSTBECONNECTED command_add(&xmsg_plugin, "xmsg:", "?", xmsg_inline_msg, XMSG_CMDFLAGS, NULL); command_add(&xmsg_plugin, "xmsg:chat", "!uU !", xmsg_msg, XMSG_CMDFLAGS_TARGET, NULL); command_add(&xmsg_plugin, "xmsg:connect", NULL, xmsg_connect, XMSG_CMDFLAGS, NULL); command_add(&xmsg_plugin, "xmsg:disconnect", NULL, xmsg_disconnect, XMSG_CMDFLAGS, NULL); command_add(&xmsg_plugin, "xmsg:msg", "!uU !", xmsg_msg, XMSG_CMDFLAGS_TARGET, NULL); command_add(&xmsg_plugin, "xmsg:reconnect", NULL, xmsg_reconnect, XMSG_CMDFLAGS, NULL); #undef XMSG_CMDFLAGS_TARGET #undef XMSG_CMDFLAGS #ifdef HAVE_INOTIFY variable_add(&xmsg_plugin, "max_inotifycount", VAR_INT, 1, &config_maxinotifycount, NULL, NULL, NULL); watch_add(&xmsg_plugin, in_fd, WATCH_READ, xmsg_handle_data, NULL); #endif /*HAVE_INOTIFY*/ return 0; }
void cdvws_process() { char *v = NULL; v = variable_get_element_as_string("module_var", NULL); if (v != NULL) { DPRINTF("We have module var set to '%s'\n", v); variable_add("module_var", v, TYPE_MODULE, 0, TYPE_STRING); } else { DPRINTF("We don't have module var set, setting to \"unset\"\n"); variable_add("module_var", "unset", TYPE_MODULE, 0, TYPE_STRING); } v = utils_free("mod_test.v", v); }
static void on_update (GdkFrameClock *frame_clock, gpointer data) { GdkFrameTimings *timings = gdk_frame_clock_get_current_timings (frame_clock); gint64 frame_time = gdk_frame_timings_get_frame_time (timings); gint64 predicted_presentation_time = gdk_frame_timings_get_predicted_presentation_time (timings); gint64 refresh_interval; FrameData *pending_frame; if (clock_time_base == 0) clock_time_base = frame_time + PRE_BUFFER_TIME; gdk_frame_clock_get_refresh_info (frame_clock, frame_time, &refresh_interval, NULL); pending_frame = peek_pending_frame (); if (stream_time_to_clock_time (pending_frame->stream_time) < predicted_presentation_time + refresh_interval / 2) { while (TRUE) { FrameData *next_frame = peek_next_frame (); if (next_frame && stream_time_to_clock_time (next_frame->stream_time) < predicted_presentation_time + refresh_interval / 2) { g_slice_free (FrameData, unqueue_frame ()); n_frames++; dropped_frames++; pending_frame = next_frame; } else break; } if (displayed_frame) past_frames = g_list_prepend (past_frames, displayed_frame); n_frames++; displayed_frame = unqueue_frame (); displayed_frame->clock_time = stream_time_to_clock_time (displayed_frame->stream_time); displayed_frame->frame_counter = gdk_frame_timings_get_frame_counter (timings); variable_add (&time_factor_stats, time_factor); collect_old_frames (); print_statistics (); gtk_widget_queue_draw (window); } }
static void collect_old_frames (void) { GdkFrameClock *frame_clock = gtk_widget_get_frame_clock (window); GList *l, *l_next; for (l = past_frames; l; l = l_next) { FrameData *frame_data = l->data; gboolean remove = FALSE; l_next = l->next; GdkFrameTimings *timings = gdk_frame_clock_get_timings (frame_clock, frame_data->frame_counter); if (timings == NULL) { remove = TRUE; } else if (gdk_frame_timings_get_complete (timings)) { gint64 presentation_time = gdk_frame_timings_get_predicted_presentation_time (timings); gint64 refresh_interval = gdk_frame_timings_get_refresh_interval (timings); if (pll && presentation_time && refresh_interval && presentation_time > frame_data->clock_time - refresh_interval / 2 && presentation_time < frame_data->clock_time + refresh_interval / 2) adjust_clock_for_phase (frame_data->clock_time, presentation_time); if (presentation_time) variable_add (&latency_error, presentation_time - frame_data->clock_time); remove = TRUE; } if (remove) { past_frames = g_list_delete_link (past_frames, l); g_slice_free (FrameData, frame_data); } } }
int _script_builtin_function(char *var, char *fn, char *args) { int ret = 0; struct timespec ts; struct timespec tse; if (_perf_measure) ts = utils_get_time( TIME_CURRENT ); if (strcmp(fn, "set_all_variables_overwritable") == 0) { if (args != NULL) { int var = get_boolean(args); if ((var == 0) || (var == 1)) variable_allow_overwrite(NULL, var); else desc_printf(gIO, gFd, "Invalid value for %s(): %s\n", fn, args); } } else if (strcmp(fn, "get_all_variables_overwritable") == 0) { if (var != NULL) { char tmp[4] = { 0 }; snprintf(tmp, sizeof(tmp), "%d", variable_get_overwrite(NULL)); variable_add(var, tmp, TYPE_QSCRIPT, -1, TYPE_INT); } else desc_printf(gIO, gFd, "All variables overwritable: %s\n", (variable_get_overwrite(NULL) == 1) ? "true" : "false"); } else if (strcmp(fn, "set_variable_overwritable") == 0) { tTokenizer t; t = tokenize(args, ","); if (t.numTokens == 2) variable_allow_overwrite(trim(t.tokens[0]), get_boolean(t.tokens[1])); else desc_printf(gIO, gFd, "Syntax: set_variable_overwritable(variable, true|false)\n"); free_tokens(t); } else if (strcmp(fn, "get_variable_overwritable") == 0) { char tmp[4] = { 0 }; if ((args != NULL) && (strlen(args) > 0)) { snprintf(tmp, sizeof(tmp), "%d", variable_get_overwrite(args)); if (var != NULL) variable_add(var, tmp, TYPE_QSCRIPT, -1, TYPE_INT); else desc_printf(gIO, gFd, "Variable %s overwritable: %s\n", args, (strcmp(tmp, "1") == 0) ? "true" : ((strcmp(tmp, "0") == 0) ? "false" : "not found")); } else desc_printf(gIO, gFd, "Variable name is missing\n"); } else if (strcmp(fn, "enable_perf") == 0) { int enable = get_boolean(args); if ((enable == 0) || (enable == 1)) { DPRINTF("%sabling performance measuring\n", enable ? "En" : "Dis"); _perf_measure = enable; } else DPRINTF("Incorrect setting for performace measuring: %d\n", enable); if (_perf_measure) ts = utils_get_time( TIME_CURRENT ); } else if (strcmp(fn, "del") == 0) { variable_set_deleted(args, 1); } else if (strcmp(fn, "get") == 0) { char *val = variable_get_element_as_string(args, "get"); if (val != NULL) { DPRINTF("%s: Processing internal 'get' function for arguments: %s\n", __FUNCTION__, args); DPRINTF("%s: Variable %s processed to %s\n", __FUNCTION__, var, val); if (var != NULL) variable_add(var, val, TYPE_QSCRIPT, -1, gettype(val)); } } else if (strcmp(fn, "dumpvars") == NULL) { desc_variable_dump(gIO, gFd, args); } else if (strcmp(fn, "post") == 0) { char *val = variable_get_element_as_string(args, "post"); if (val != NULL) { DPRINTF("%s: Processing internal 'post' function for arguments: %s\n", __FUNCTION__, args); DPRINTF("%s: Variable %s processed to %s\n", __FUNCTION__, var, val); if (var != NULL) variable_add(var, val, TYPE_QSCRIPT, -1, gettype(val)); } } else if (strcmp(fn, "cookie") == 0) { char *val = variable_get_element_as_string(args, "cookie"); if (val != NULL) { DPRINTF("%s: Processing internal 'cookie' function for arguments: %s\n", __FUNCTION__, args); DPRINTF("%s: Variable %s processed to %s\n", __FUNCTION__, var, val); if (var != NULL) variable_add(var, val, TYPE_QSCRIPT, -1, gettype(val)); } } else if (strcmp(fn, "sleep") == 0) { int num = atoi(args); DPRINTF("%s: Sleeping for %d seconds...\n", __FUNCTION__, num); sleep(num); } else if (strcmp(fn, "dumptype") == 0) { char *str = variable_get_type_string(args, "any"); desc_printf(gIO, gFd, "%s\n", str ? str : "<null>"); str = utils_free("scripting.dumptype.str", str); } else if (strcmp(fn, "print") == 0) { if (args != NULL) { if ((args[0] == '"') || (args[0] == '\'')) { *args++; args[strlen(args) - 1] = 0; args = replace(args, "\\n", "\n"); desc_printf(gIO, gFd, "%s", args); } else { char *var = variable_get_element_as_string(args, NULL); desc_printf(gIO, gFd, "%s", var ? var : ""); var = utils_free("scripting.print.var", var); } } } else if (strcmp(fn, "printf") == 0) { if ((args != NULL) && (strlen(args) > 0)) { int i; tTokenizer t; *args++; t = tokenize(args, "\""); if (t.numTokens == 1) { char *instr = NULL; instr = strdup(t.tokens[0]); while (strstr(instr, "\\n") != NULL) instr = replace(instr, "\\n", "\n"); desc_printf(gIO, gFd, "%s", instr); instr = utils_free("scripting.printf.instr", instr); } else if (t.numTokens == 2) { tTokenizer t2; char *instr = NULL; char *vars = NULL; instr = strdup( t.tokens[0] ); vars = strdup( t.tokens[1] + 1 ); t2 = tokenize(vars, ","); for (i = 0; i < t2.numTokens; i++) { DPRINTF("%s: Replacing variable %s\n", __FUNCTION__, trim(t2.tokens[i])); char *tmp = variable_get_element_as_string(trim(t2.tokens[i]), NULL); if (tmp != NULL) instr = replace(instr, "%s", tmp); else { instr = replace(instr, "%s", "NULL"); DPRINTF("%s: Variable \"%s\" not found\n", __FUNCTION__, trim(t2.tokens[i])); } } while (strstr(instr, "\\n") != NULL) instr = replace(instr, "\\n", "\n"); desc_printf(gIO, gFd, "%s", instr); free_tokens(t2); } else { free_tokens(t); ret = -EINVAL; goto cleanup; } free_tokens(t); } else { desc_printf(gIO, gFd, "Invalid syntax for printf()\n"); ret = -EINVAL; goto cleanup; } } else if (strcmp(fn, "idb_dump_query_set") == 0) { idb_results_show( gIO, gFd, idb_get_last_select_data() ); } else if (strcmp(fn, "idb_query") == 0) { char *filename = NULL; char *query = NULL; tTokenizer t; int i; t = tokenize(args, "\""); if (t.numTokens > 1) { int num = 0; for (i = 0; i < t.numTokens; i++) { if (strcmp(trim(t.tokens[i]), ",") != 0) { if (num == 0) filename = strdup(t.tokens[i]); else if (num == 1) query = strdup(t.tokens[i]); num++; } } } free_tokens(t); if (((filename == NULL) || (query == NULL)) && (args[0] == '@')) { *args++; DPRINTF("Reading query file '%s'\n", args); if (access(args, R_OK) == 0) { FILE *fp = NULL; char buf[BUFSIZE]; fp = fopen(args, "r"); if (fp != NULL) { int num = 0; while (!feof(fp)) { memset(buf, 0, sizeof(buf)); fgets(buf, sizeof(buf), fp); if ((strlen(buf) > 0) && (buf[strlen(buf) - 1] == '\n')) buf[strlen(buf) - 1] = 0; if (strlen(buf) > 0) { num++; int ret = idb_query(buf); desc_printf(gIO, gFd, "Query '%s' returned with code %d\n", buf, ret); } } desc_printf(gIO, gFd, "%d queries processed\n", num); fclose(fp); } else desc_printf(gIO, gFd, "Error: Cannot open file %s for reading\n", args); } else desc_printf(gIO, gFd, "Error: Cannot access file %s\n", t.tokens[1]); } else if ((filename != NULL) && (query != NULL)) { char tmp[4096] = { 0 }; snprintf(tmp, sizeof(tmp), "INIT %s", filename); ret = 0; if (idb_query(tmp) != 0) { DPRINTF("Error while trying to initialize file '%s'\n", filename); ret = -EIO; } if (idb_query(query) != 0) { DPRINTF("Error while running query '%s'\n", query); ret = -EIO; } else if ((strncmp(query, "SELECT", 6) == 0) || (strcmp(query, "SHOW TABLES") == 0)) idb_results_show( gIO, gFd, idb_get_last_select_data() ); idb_query("COMMIT"); idb_query("CLOSE"); } } else { ret = -EINVAL; goto cleanup; } cleanup: if (_perf_measure) { tse = utils_get_time( TIME_CURRENT ); desc_printf(gIO, gFd, "\nPERF: Function %s() was running for %.3f microseconds (%.3f ms)\n", fn, get_time_float_us( tse, ts ), get_time_float_us(tse, ts) / 1000.); } return ret; }
int script_process_line(char *buf) { int ret = -ENOTSUP; struct timespec ts = { .tv_sec = 0, .tv_nsec = 0 }; struct timespec tse; if (_perf_measure) ts = utils_get_time( TIME_CURRENT ); /* Skip if it's a one line comment (more to be implemented) */ if (is_comment(buf) == 1) { DPRINTF("%s: Found comment, skipping\n", __FUNCTION__); ret = 0; goto cleanup; } else if (strcmp(buf, "else {") == 0) { /* Reverse the condition */ if ((_script_in_condition_and_met == 1) || (_script_in_condition_and_met == -10)) _script_in_condition_and_met = 0; else if ((_script_in_condition_and_met == 0) || (_script_in_condition_and_met == -20)) _script_in_condition_and_met = 1; else if (_script_in_condition_and_met != -1) { DPRINTF("%s: Invalid state for else statement\n", __FUNCTION__); ret = -EINVAL; goto cleanup; } ret = 0; goto cleanup; } else if (strcmp(buf, "}") == 0) { _script_in_condition_and_met = (_script_in_condition_and_met == 1) ? -10 : -20; ret = 0; goto cleanup; } if (_script_in_condition_and_met < -1) _script_in_condition_and_met = 1; if (_script_in_condition_and_met == 0) { ret = 0; goto cleanup; } /* Comparison with no ternary operator support... yet */ if (regex_match("if \\(([^(]*)([^)]*)\\)", buf)) { if (regex_match("if \\(([^(]*) == ([^)]*)\\) {", buf)) { char **matches = NULL; int i, num_matches; matches = (char **)utils_alloc( "scripting.script_process_line.matches", sizeof(char *) ); _regex_match("if \\(([^(]*) == ([^)]*)\\) {", buf, matches, &num_matches); if (num_matches >= 2) _script_in_condition_and_met = (valcmp(matches[0], matches[1]) == 0) ? 1 : 0; for (i = 0; i < num_matches; i++) matches[i] = utils_free("scripting.condition.matches[]", matches[i]); matches = utils_free("scripting.condition.matches", matches); } } else /* Definition */ if (strncmp(buf, "define ", 7) == 0) { tTokenizer t; t = tokenize(buf + 7, " "); if (t.numTokens != 2) { ret = -EINVAL; goto cleanup; } if (variable_create(trim(t.tokens[0]), trim(t.tokens[1])) != 1) { ret = -EIO; goto cleanup; } } else /* Operators */ if ((strstr(buf, "+=") != NULL) || (strstr(buf, "-=") != NULL) || (strstr(buf, "%=") != NULL) || (strstr(buf, "*=") != NULL) || (strstr(buf, "/=") != NULL)) { tTokenizer t; char *var; char *val; int op, vtype; t = tokenize(buf, "="); if (t.numTokens != 2) { ret = -EINVAL; goto cleanup; } var = trim(strdup(t.tokens[0])); val = trim(strdup(t.tokens[1])); op = var[ strlen(var) - 1]; var[ strlen(var) - 1] = 0; var = trim(var); if (val[strlen(val) - 1] == ';') val[strlen(val) - 1] = 0; val = trim(val); vtype = variable_get_type(var, NULL); if ((vtype == TYPE_INT) || (vtype == TYPE_LONG)) { char tmp[32] = { 0 }; long value = atol(variable_get_element_as_string(var, NULL)); if (op == '+') value += atol(val); else if (op == '-') value -= atol(val); else if (op == '*') value *= atol(val); else if (op == '%') value %= atol(val); else if (op == '/') value /= atol(val); snprintf(tmp, sizeof(tmp), "%ld", value); variable_set_deleted(var, 1); variable_add(var, tmp, TYPE_QSCRIPT, -1, vtype); ret = 0; } else ret = -EINVAL; var = utils_free("scripting.operators.var", var); val = utils_free("scripting.operators.val", val); free_tokens(t); return ret; } else /* Assignment */ if (is_assignment(buf)) { tTokenizer t; t = tokenize(buf, "="); char *val = strdup( trim(t.tokens[1]) ); if (val[strlen(val) - 1] == ';') { val[strlen(val) - 1] = 0; if (is_numeric(val) || is_string(val)) { if (is_string(val)) { *val++; val[strlen(val) - 1] = 0; } if (variable_add(trim(t.tokens[0]), val, TYPE_QSCRIPT, -1, gettype(val)) < 0) { desc_printf(gIO, gFd, "Cannot set new value to variable %s\n", trim(t.tokens[0])); ret = -EEXIST; } else ret = 0; } else if (regex_match("([^(]*)([^)]*)", val)) { tTokenizer t2; char *args = NULL; char *fn; t2 = tokenize(val, "("); if (t2.tokens[t2.numTokens - 1][strlen(t2.tokens[t2.numTokens - 1]) - 1] != ')') { ret = -EINVAL; goto cleanup; } t2.tokens[t2.numTokens - 1][strlen(t2.tokens[t2.numTokens - 1]) - 1] = 0; fn = strdup(t2.tokens[0]); /* We need to make sure parenthesis won't break script line */ if (t2.numTokens > 1) { int i; char argstmp[8192] = { 0 }; for (i = 1; i < t2.numTokens; i++) { strcat(argstmp, t2.tokens[i]); if (i < t2.numTokens - 1) strcat(argstmp, "("); } args = strdup(argstmp); } if (args != NULL) { char args2[1024] = { 0 }; snprintf(args2, sizeof(args2), "%s", args + 1); args2[ strlen(args2) - 1] = 0; args = utils_free("scripting.function-call.args", args); args = strdup( args2 ); } free_tokens(t2); if (_script_builtin_function(trim(t.tokens[0]), fn, args) != 0) DPRINTF("Function %s doesn't seem to be builtin, we should try user-defined function\n", fn); DPRINTF("%s: Should be a function with return value\n", __FUNCTION__); args = utils_free("scripting.function-call.args", args); fn = utils_free("scripting.function-call.fn", fn); ret = 0; } else ret = -EINVAL; } free_tokens(t); } else if (regex_match("([^(]*)([^)]*)", buf)) { tTokenizer t2; char *args = NULL; char *fn; t2 = tokenize(buf, "("); if (t2.tokens[t2.numTokens - 1][strlen(t2.tokens[t2.numTokens - 1]) - 1] != ';') { ret = -EINVAL; goto cleanup; } t2.tokens[t2.numTokens - 1][strlen(t2.tokens[t2.numTokens - 1]) - 1] = 0; fn = strdup(t2.tokens[0]); /* We need to make sure parenthesis won't break script line */ if (t2.numTokens > 1) { int i; char argstmp[8192] = { 0 }; for (i = 1; i < t2.numTokens; i++) { strcat(argstmp, t2.tokens[i]); if (i < t2.numTokens - 1) strcat(argstmp, "("); } args = strdup(argstmp); } if (args != NULL) { if (args[strlen(args) - 1] == ')') args[strlen(args) - 1] = 0; } free_tokens(t2); if (_script_builtin_function(NULL, fn, args) != 0) DPRINTF("Function %s doesn't seem to be builtin, we should try user-defined function\n", fn); args = utils_free("scripting.function-call.args", args); fn = utils_free("scripting.function-call.fn", fn); ret = 0; } else DPRINTF("%s: Not implemented yet\n", __FUNCTION__); cleanup: if ((_perf_measure) && ((ts.tv_nsec > 0) && (ts.tv_sec > 0)) && (_script_in_condition_and_met > 0)) { tse = utils_get_time( TIME_CURRENT ); desc_printf(gIO, gFd, "PERF: Line \"%s\" was being processed for %.3f microseconds (%.3f ms)\n\n", buf, get_time_float_us( tse, ts ), get_time_float_us(tse, ts) / 1000.); } return ret; } int run_script(char *filename) { FILE *fp; int opened = 0; char buf[4096] = { 0 }; struct timespec ts = utils_get_time( TIME_CURRENT ); struct timespec tse; if (access(filename, R_OK) != 0) return -ENOENT; _script_in_condition_and_met = -1; fp = fopen(filename, "r"); if (fp == NULL) return -EPERM; if (gHttpHandler) http_host_header(gIO, gFd, HTTP_CODE_OK, gHost, "text/html", NULL, myRealm, 0); while (!feof(fp)) { memset(buf, 0, sizeof(buf)); fgets(buf, sizeof(buf), fp); if ((strlen(buf) > 1) && (buf[strlen(buf) - 1] == '\n')) buf[strlen(buf) - 1] = 0; if ((strlen(buf) > 1) && (buf[0] != '\n')) { if (strcmp(buf, "<$") == 0) opened = 1; if (strcmp(buf, "$>") == 0) opened = 0; if ((opened) && (strcmp(buf, "<$") != 0)) script_process_line(trim(buf)); } } fclose(fp); idb_free_last_select_data(); if (_perf_measure) { tse = utils_get_time( TIME_CURRENT ); desc_printf(gIO, gFd, "PERF: File \"%s\" has been processed in %.3f microseconds (%.3f ms)\n\n", basename(filename), get_time_float_us( tse, ts ), get_time_float_us(tse, ts) / 1000.); } variable_dump(); variable_free_all(); return 0; }
/* * variable_set() * * ustawia warto¶æ podanej zmiennej. je¶li to zmienna liczbowa lub boolowska, * zmienia ci±g na liczbê. w przypadku boolowskich, rozumie zwroty typu `on', * `off', `yes', `no' itp. je¶li dana zmienna jest bitmap±, akceptuje warto¶æ * w postaci listy flag oraz konstrukcje `+flaga' i `-flaga'. * * - name - nazwa zmiennej, * - value - nowa warto¶æ, * - allow_foreign - czy ma pozwalaæ dopisywaæ obce zmienne. */ int variable_set(const char *name, const char *value, int allow_foreign) { struct variable *v = variable_find(name); if (!v && allow_foreign) { variable_add(name, "##", VAR_FOREIGN, 2, xstrdup(value), NULL, NULL, NULL); return -1; } if (!v && !allow_foreign) return -1; switch (v->type) { case VAR_INT: case VAR_MAP: { const char *p = value; int hex, tmp; if (!value) return -2; if (v->map && v->type == VAR_INT && !xisdigit(*p)) { int i; for (i = 0; v->map[i].label; i++) if (!strcasecmp(v->map[i].label, value)) value = itoa(v->map[i].value); } if (v->map && v->type == VAR_MAP && !xisdigit(*p)) { int i, k = *(int*)(v->ptr); int mode = 0; /* 0 set, 1 add, 2 remove */ char **args; if (*p == '+') { mode = 1; p++; } else if (*p == '-') { mode = 2; p++; } if (!mode) k = 0; args = array_make(p, ",", 0, 1, 0); for (i = 0; args[i]; i++) { int j, found = 0; for (j = 0; v->map[j].label; j++) { if (!strcasecmp(args[i], v->map[j].label)) { found = 1; if (mode == 2) k &= ~(v->map[j].value); if (mode == 1) k &= ~(v->map[j].conflicts); if (mode == 1 || !mode) k |= v->map[j].value; } } if (!found) { array_free(args); return -2; } } array_free(args); value = itoa(k); } p = value; if ((hex = !strncasecmp(p, "0x", 2))) p += 2; while (*p && *p != ' ') { if (hex && !xisxdigit(*p)) return -2; if (!hex && !xisdigit(*p)) return -2; p++; } tmp = strtol(value, NULL, 0); if (v->map) { int i; for (i = 0; v->map[i].label; i++) { if ((tmp & v->map[i].value) && (tmp & v->map[i].conflicts)) return -2; } } *(int*)(v->ptr) = tmp; if (v->notify) (v->notify)(v->name); if (ui_event) ui_event("variable_changed", v->name); return 0; } case VAR_BOOL: { int tmp; if (!value) return -2; if ((tmp = on_off(value)) == -1) return -2; *(int*)(v->ptr) = tmp; if (v->notify) (v->notify)(v->name); if (ui_event) ui_event("variable_changed", v->name); return 0; } case VAR_STR: { char **tmp = (char**)(v->ptr); xfree(*tmp); if (value) { if (*value == 1) *tmp = base64_decode(value + 1); else *tmp = xstrdup(value); } else *tmp = NULL; if (v->notify) (v->notify)(v->name); if (ui_event) ui_event("variable_changed", v->name); return 0; } } return -1; }
/* * variable_init() * * inicjuje listê zmiennych. */ void variable_init() { variable_add("uin", "ui", VAR_INT, 1, &config_uin, changed_uin, NULL, NULL); variable_add("password", "pa", VAR_STR, 0, &config_password, NULL, NULL, NULL); variable_add("email", "em", VAR_STR, 1, &config_email, NULL, NULL, NULL); #ifdef HAVE_VOIP variable_add("audio_device", "ad", VAR_STR, 1, &config_audio_device, NULL, NULL, NULL); #else variable_add("audio_device", "ad", VAR_STR, 2, NULL, NULL, NULL, NULL); #endif variable_add("auto_away", "aa", VAR_INT, 1, &config_auto_away, NULL, NULL, NULL); variable_add("auto_away_keep_descr", "ak", VAR_BOOL, 1, &config_auto_away_keep_descr, NULL, NULL, NULL); variable_add("auto_back", "ab", VAR_INT, 1, &config_auto_back, NULL, NULL, NULL); variable_add("auto_conference", "aC", VAR_BOOL, 1, &config_auto_conference, NULL, NULL, NULL); variable_add("auto_find", "af", VAR_BOOL, 1, &config_auto_find, NULL, NULL, NULL); variable_add("auto_reconnect", "ac", VAR_INT, 1, &config_auto_reconnect, NULL, NULL, NULL); variable_add("auto_save", "as", VAR_INT, 1, &config_auto_save, changed_auto_save, NULL, NULL); #ifdef WITH_ASPELL variable_add("aspell", "al", VAR_BOOL, 1, &config_aspell, changed_aspell, NULL, NULL); variable_add("aspell_lang", "ag", VAR_STR, 1, &config_aspell_lang, changed_aspell, NULL, NULL); variable_add("aspell_encoding", "an", VAR_STR, 1, &config_aspell_encoding, changed_aspell, NULL, NULL); #else variable_add("aspell", "al", VAR_BOOL, 2, NULL, NULL, NULL, NULL); variable_add("aspell_lang", "ag", VAR_STR, 2, NULL, NULL, NULL, NULL); variable_add("aspell_encoding", "an", VAR_STR, 2, NULL, NULL, NULL, NULL); #endif variable_add("away_reason", "ar", VAR_STR, 1, &config_away_reason, changed_xxx_reason, NULL, NULL); variable_add("back_reason", "br", VAR_STR, 1, &config_back_reason, changed_xxx_reason, NULL, NULL); variable_add("ffc_reason", "fr", VAR_STR, 1, &config_ffc_reason, changed_xxx_reason, NULL, NULL); variable_add("dnd_reason", "dR", VAR_STR, 1, &config_dnd_reason, changed_xxx_reason, NULL, NULL); #ifdef WITH_UI_NCURSES if (ui_init == ui_ncurses_init) { variable_add("backlog_overlap", "bo", VAR_INT, 1, &config_backlog_overlap, NULL, NULL, NULL); variable_add("backlog_size", "bs", VAR_INT, 1, &config_backlog_size, changed_backlog_size, NULL, NULL); } else { variable_add("backlog_overlap", "bo", VAR_INT, 2, NULL, NULL, NULL, NULL); variable_add("backlog_size", "bs", VAR_INT, 2, NULL, NULL, NULL, NULL); } #else variable_add("backlog_overlap", "bo", VAR_INT, 2, NULL, NULL, NULL, NULL); variable_add("backlog_size", "bs", VAR_INT, 2, NULL, NULL, NULL, NULL); #endif variable_add("beep", "be", VAR_BOOL, 1, &config_beep, NULL, NULL, NULL); variable_add("beep_msg", "bm", VAR_BOOL, 1, &config_beep_msg, NULL, NULL, dd_beep); variable_add("beep_chat", "bc", VAR_BOOL, 1, &config_beep_chat, NULL, NULL, dd_beep); variable_add("beep_notify", "bn", VAR_BOOL, 1, &config_beep_notify, NULL, NULL, dd_beep); variable_add("beep_mail", "bM", VAR_BOOL, 1, &config_beep_mail, NULL, NULL, dd_beep); #ifdef WITH_UI_NCURSES if (ui_init == ui_ncurses_init) variable_add("beep_title", "bt", VAR_INT, 1, &config_beep_title, NULL, NULL, NULL); else variable_add("beep_title", "bt", VAR_INT, 2, NULL, NULL, NULL, NULL); #else variable_add("beep_title", "bt", VAR_INT, 2, NULL, NULL, NULL, NULL); #endif variable_add("check_mail", "cm", VAR_MAP, 1, &config_check_mail, changed_check_mail, variable_map(4, 0, 0, "no", 1, 2, "mbox", 2, 1, "maildir", 4, 0, "notify"), NULL); variable_add("check_mail_frequency", "cf", VAR_INT, 1, &config_check_mail_frequency, changed_check_mail, NULL, dd_check_mail); variable_add("check_mail_folders", "cF", VAR_STR, 1, &config_check_mail_folders, changed_check_mail_folders, NULL, dd_check_mail); variable_add("completion_notify", "cn", VAR_MAP, 1, &config_completion_notify, NULL, variable_map(5, 0, 0, "none", 1, 2, "add", 2, 1, "addremove", 4, 0, "busy", 8, 0, "invisible"), NULL); #ifdef WITH_UI_READLINE if (ui_init == ui_readline_init) variable_add("ctrld_quits", "cq", VAR_BOOL, 1, &config_ctrld_quits, NULL, NULL, NULL); else variable_add("ctrld_quits", "cq", VAR_BOOL, 2, NULL, NULL, NULL, NULL); #else variable_add("ctrld_quits", "cq", VAR_BOOL, 2, NULL, NULL, NULL, NULL); #endif #if defined WITH_UI_NCURSES || defined WITH_UI_GTK if ( #ifdef WITH_UI_NCURSES ui_init == ui_ncurses_init #endif #if defined WITH_UI_NCURSES && defined WITH_UI_GTK || #endif #ifdef WITH_UI_GTK ui_init == ui_gtk_init #endif ) { variable_add("contacts", "co", VAR_INT, 1, &config_contacts, NULL, NULL, NULL); variable_add("contacts_groups", "cg", VAR_STR, 1, &config_contacts_groups, NULL, NULL, dd_contacts); variable_add("contacts_options", "cO", VAR_STR, 1, &config_contacts_options, NULL, NULL, dd_contacts); variable_add("contacts_size", "cs", VAR_INT, 1, &config_contacts_size, NULL, NULL, dd_contacts); } else { variable_add("contacts", "co", VAR_INT, 2, NULL, NULL, NULL, NULL); variable_add("contacts_groups", "cg", VAR_STR, 2, NULL, NULL, NULL, NULL); variable_add("contacts_options", "cO", VAR_STR, 2, NULL, NULL, NULL, NULL); variable_add("contacts_size", "cs", VAR_INT, 2, NULL, NULL, NULL, NULL); } #else variable_add("contacts", "co", VAR_INT, 2, NULL, NULL, NULL, NULL); variable_add("contacts_groups", "cg", VAR_STR, 2, NULL, NULL, NULL, NULL); variable_add("contacts_options", "cO", VAR_STR, 2, NULL, NULL, NULL, NULL); variable_add("contacts_size", "cs", VAR_INT, 2, NULL, NULL, NULL, NULL); #endif variable_add("dcc", "dc", VAR_BOOL, 1, &config_dcc, changed_dcc, NULL, NULL); variable_add("dcc_ip", "di", VAR_STR, 1, &config_dcc_ip, changed_dcc, NULL, dd_dcc); variable_add("dcc_dir", "dd", VAR_STR, 1, &config_dcc_dir, NULL, NULL, dd_dcc); variable_add("dcc_backups", "db", VAR_BOOL, 1, &config_dcc_backups, NULL, NULL, dd_dcc); variable_add("dcc_filter", "df", VAR_BOOL, 1, &config_dcc_filter, NULL, NULL, dd_dcc); variable_add("dcc_limit", "dl", VAR_STR, 1, &config_dcc_limit, NULL, NULL, dd_dcc); variable_add("dcc_port", "dP", VAR_INT, 1, &config_dcc_port, changed_dcc, NULL, dd_dcc); variable_add("display_ack", "da", VAR_INT, 1, &config_display_ack, NULL, variable_map(4, 0, 0, "none", 1, 0, "all", 2, 0, "delivered", 3, 0, "queued"), NULL); variable_add("display_color", "dC", VAR_INT, 1, &config_display_color, NULL, NULL, NULL); variable_add("display_color_map", "dm", VAR_STR, 1, &config_display_color_map, NULL, NULL, dd_color); #ifdef WITH_UI_NCURSES if (ui_init == ui_ncurses_init) { variable_add("display_crap", "dr", VAR_BOOL, 1, &config_display_crap, NULL, NULL, NULL); variable_add("display_daychanges", "dD", VAR_BOOL, 1, &config_display_daychanges, NULL, NULL, NULL); } else { variable_add("display_crap", "dr", VAR_BOOL, 2, NULL, NULL, NULL, NULL); variable_add("display_daychanges", "dD", VAR_BOOL, 2, NULL, NULL, NULL, NULL); } #else variable_add("display_crap", "dr", VAR_BOOL, 2, NULL, NULL, NULL, NULL); variable_add("display_daychanges", "dD", VAR_BOOL, 2, NULL, NULL, NULL, NULL); #endif variable_add("display_notify", "dn", VAR_MAP, 1, &config_display_notify, NULL, variable_map(4, 0, 0, "none", 1, 2, "all", 2, 1, "significant", 4, 0, "unknown"), NULL); variable_add("display_pl_chars", "dp", VAR_BOOL, 1, &config_display_pl_chars, NULL, NULL, NULL); variable_add("display_sent", "ds", VAR_BOOL, 1, &config_display_sent, NULL, NULL, NULL); #if defined HAVE_LIBJPEG || defined HAVE_LIBUNGIF variable_add("display_token", "dT", VAR_BOOL, 1, &config_display_token, NULL, NULL, NULL); #else variable_add("display_token", "dT", VAR_BOOL, 2, NULL, NULL, NULL, NULL); #endif variable_add("display_welcome", "dw", VAR_BOOL, 1, &config_display_welcome, NULL, NULL, NULL); #ifdef WITH_UI_NCURSES if (ui_init == ui_ncurses_init) variable_add("display_transparent", "dt", VAR_BOOL, 1, &config_display_transparent, NULL, NULL, NULL); else variable_add("display_transparent", "dt", VAR_BOOL, 2, NULL, NULL, NULL, NULL); #else variable_add("display_transparent", "dt", VAR_BOOL, 2, NULL, NULL, NULL, NULL); #endif variable_add("emoticons", "eM", VAR_BOOL, 1, &config_emoticons, NULL, NULL, NULL); #ifdef HAVE_OPENSSL variable_add("encryption", "en", VAR_INT, 1, &config_encryption, NULL, variable_map(4, 0, 0, "no", 1, 0, "yes", 2, 0, "recv", 3, 0, "send"), NULL); #else variable_add("encryption", "en", VAR_INT, 2, NULL, NULL, NULL, NULL); #endif #ifdef WITH_UI_NCURSES if (ui_init == ui_ncurses_init) variable_add("enter_scrolls", "es", VAR_BOOL, 1, &config_enter_scrolls, NULL, NULL, NULL); else variable_add("enter_scrolls", "es", VAR_BOOL, 2, NULL, NULL, NULL, NULL); #else variable_add("enter_scrolls", "es", VAR_BOOL, 2, NULL, NULL, NULL, NULL); #endif variable_add("events_delay", "ev", VAR_INT, 1, &config_events_delay, NULL, NULL, NULL); variable_add("files_mode_config", "Mc", VAR_INT, 1, &config_files_mode_config_int, changed_files_mode, NULL, NULL); variable_add("files_mode_received", "Mr", VAR_INT, 1, &config_files_mode_received_int, changed_files_mode, NULL, NULL); #ifdef WITH_UI_NCURSES if (ui_init == ui_ncurses_init) variable_add("header_size", "hs", VAR_INT, 1, &config_header_size, header_statusbar_resize, NULL, NULL); else variable_add("header_size", "hs", VAR_INT, 2, NULL, NULL, NULL, NULL); #else variable_add("header_size", "hs", VAR_INT, 2, NULL, NULL, NULL, NULL); #endif variable_add("ignore_unknown_sender", "iu", VAR_BOOL, 1, &config_ignore_unknown_sender, NULL, NULL, NULL); variable_add("ignore_empty_msg", "im", VAR_BOOL, 1, &config_ignore_empty_msg, NULL, NULL, NULL); variable_add("image_size", "iS", VAR_INT, 1, &config_image_size, NULL, NULL, NULL); variable_add("keep_reason", "kr", VAR_INT, 1, &config_keep_reason, NULL, NULL, NULL); variable_add("last", "la", VAR_MAP, 1, &config_last, NULL, variable_map(4, 0, 0, "none", 1, 2, "all", 2, 1, "separate", 4, 0, "sent"), NULL); variable_add("last_size", "ls", VAR_INT, 1, &config_last_size, NULL, NULL, NULL); variable_add("local_ip", "ld", VAR_STR, 1, &config_local_ip, changed_local_ip, NULL, NULL); variable_add("log", "lo", VAR_MAP, 1, &config_log, NULL, variable_map(4, 0, 0, "none", 1, 2, "file", 2, 1, "dir", 4, 0, "gzip"), NULL); variable_add("log_ignored", "li", VAR_INT, 1, &config_log_ignored, NULL, NULL, dd_log); variable_add("log_status", "lS", VAR_INT, 1, &config_log_status, NULL, variable_map(3, 0, 0, "no", 1, 2, "yes", 2, 1, "descr"), dd_log); variable_add("log_path", "lp", VAR_STR, 1, &config_log_path, NULL, NULL, dd_log); variable_add("log_timestamp", "lt", VAR_STR, 1, &config_log_timestamp, NULL, NULL, dd_log); variable_add("make_window", "mw", VAR_MAP, 1, &config_make_window, NULL, variable_map(4, 0, 0, "none", 1, 2, "usefree", 2, 1, "always", 4, 0, "nomsg"), NULL); variable_add("msg_as_chat", "mc", VAR_INT, 1, &config_msg_as_chat, NULL, variable_map(3, 0, 0, "no", 1, 2, "sendonly", 2, 1, "yes"), NULL); variable_add("mesg", "ma", VAR_INT, 1, &config_mesg, changed_mesg, variable_map(3, 0, 0, "no", 1, 2, "yes", 2, 1, "default"), NULL); #ifdef WITH_UI_NCURSES variable_add("mouse", "mo", VAR_BOOL, 1, &config_mouse, NULL, NULL, NULL); #else variable_add("mouse", "mo", VAR_BOOL, 2, NULL, NULL, NULL, NULL); #endif variable_add("nick", "ni", VAR_STR, 1, &config_nick, NULL, NULL, NULL); variable_add("proxy", "pr", VAR_STR, 1, &config_proxy, changed_proxy, NULL, NULL); variable_add("proxy_forwarding", "pf", VAR_STR, 1, &config_proxy_forwarding, NULL, NULL, NULL); variable_add("random_reason", "rr", VAR_MAP, 1, &config_random_reason, NULL, variable_map(5, 0, 0, "none", 1, 0, "away", 2, 0, "notavail", 4, 0, "avail", 8, 0, "invisible"), NULL); variable_add("reason_limit", "rl", VAR_BOOL, 1, &config_reason_limit, NULL, NULL, NULL); variable_add("receive_images", "ra", VAR_BOOL, 1, &config_receive_images, NULL, NULL, NULL); #ifdef HAVE_REGEX_H variable_add("regex_flags", "rf", VAR_MAP, 1, &config_regex_flags, NULL, variable_map(3, 0, 0, "none", 1, 0, "basic", 2, 0, "case"), NULL); #else variable_add("regex_flags", "rf", VAR_MAP, 2, NULL, NULL, NULL, NULL); #endif variable_add("quit_reason", "qr", VAR_STR, 1, &config_quit_reason, changed_xxx_reason, NULL, NULL); variable_add("query_commands", "qc", VAR_BOOL, 1, &config_query_commands, NULL, NULL, NULL); variable_add("save_password", "sp", VAR_BOOL, 1, &config_save_password, NULL, NULL, NULL); variable_add("save_question", "sq", VAR_BOOL, 1, &config_save_question, NULL, NULL, NULL); variable_add("server", "se", VAR_STR, 1, &config_server, NULL, NULL, NULL); variable_add("server_save", "ss", VAR_BOOL, 1, &config_server_save, NULL, NULL, NULL); variable_add("irssi_set_mode", "is", VAR_BOOL, 1, &config_irssi_set_mode, NULL, NULL, NULL); variable_add("slash_messages", "sM", VAR_BOOL, 1, &config_slash_messages, NULL, NULL, NULL); variable_add("sms_away", "sa", VAR_MAP, 1, &config_sms_away, NULL, variable_map(4, 0, 0, "none", 1, 2, "all", 2, 1, "separate", 4, 0, "invisible"), dd_sms); variable_add("sms_away_limit", "sl", VAR_INT, 1, &config_sms_away_limit, NULL, NULL, dd_sms); variable_add("sms_max_length", "sm", VAR_INT, 1, &config_sms_max_length, NULL, NULL, dd_sms); variable_add("sms_number", "sn", VAR_STR, 1, &config_sms_number, NULL, NULL, dd_sms); variable_add("sms_send_app", "sA", VAR_STR, 1, &config_sms_app, NULL, NULL, NULL); variable_add("sort_windows", "sw", VAR_BOOL, 1, &config_sort_windows, NULL, NULL, NULL); variable_add("sound_msg_file", "Sm", VAR_STR, 1, &config_sound_msg_file, NULL, NULL, dd_sound); variable_add("sound_chat_file", "Sc", VAR_STR, 1, &config_sound_chat_file, NULL, NULL, dd_sound); variable_add("sound_sysmsg_file", "Ss", VAR_STR, 1, &config_sound_sysmsg_file, NULL, NULL, dd_sound); variable_add("sound_notify_file", "Sn", VAR_STR, 1, &config_sound_notify_file, NULL, NULL, dd_sound); variable_add("sound_mail_file", "SM", VAR_STR, 1, &config_sound_mail_file, NULL, NULL, dd_sound); variable_add("sound_app", "Sa", VAR_STR, 1, &config_sound_app, NULL, NULL, NULL); variable_add("speech_app", "SA", VAR_STR, 1, &config_speech_app, NULL, NULL, NULL); variable_add("status_window", "Sw", VAR_INT, 1, &config_status_window, NULL, variable_map(3, 0, 0, "query", 1, 2, "current", 2, 1, "status"), NULL); #ifdef WITH_UI_NCURSES if (ui_init == ui_ncurses_init) { variable_add("statusbar_size", "sS", VAR_INT, 1, &config_statusbar_size, header_statusbar_resize, NULL, NULL); variable_add("statusbar_fgcolor", "sF", VAR_INT, 1, &config_statusbar_fgcolor, NULL, NULL, NULL); variable_add("statusbar_bgcolor", "sB", VAR_INT, 1, &config_statusbar_bgcolor, NULL, NULL, NULL); } else { variable_add("statusbar_size", "sS", VAR_INT, 2, NULL, NULL, NULL, NULL); variable_add("statusbar_fgcolor", "sF", VAR_INT, 2, NULL, NULL, NULL, NULL); variable_add("statusbar_bgcolor", "sB", VAR_INT, 2, NULL, NULL, NULL, NULL); } #else variable_add("statusbar_size", "sS", VAR_INT, 2, NULL, NULL, NULL, NULL); variable_add("statusbar_fgcolor", "sF", VAR_INT, 2, NULL, NULL, NULL, NULL); variable_add("statusbar_bgcolor", "sB", VAR_INT, 2, NULL, NULL, NULL, NULL); #endif variable_add("tab_command", "tc", VAR_STR, 1, &config_tab_command, NULL, NULL, NULL); variable_add("theme", "th", VAR_STR, 1, &config_theme, changed_theme, NULL, NULL); variable_add("time_deviation", "td", VAR_INT, 1, &config_time_deviation, NULL, NULL, NULL); variable_add("timestamp", "ts", VAR_STR, 1, &config_timestamp, NULL, NULL, NULL); variable_add("userlist_backup", "ub", VAR_BOOL, 1, &config_userlist_backup, NULL, NULL, NULL); #ifdef WITH_WAP variable_add("wap_enabled", "we", VAR_INT, 1, &config_wap_enabled, NULL, NULL, NULL); #else variable_add("wap_enabled", "we", VAR_INT, 2, NULL, NULL, NULL, NULL); #endif #ifdef WITH_UI_NCURSES if (ui_init == ui_ncurses_init) { variable_add("windows_save", "ws", VAR_MAP, 1, &config_windows_save, NULL, variable_map(3, 0, 0, "no", 1, 0, "quit", 2, 0, "save"), NULL); variable_add("windows_layout", "wl", VAR_STR, 2, &config_windows_layout, NULL, NULL, NULL); variable_add("datestamp", "dS", VAR_STR, 1, &config_datestamp, NULL, NULL, NULL); } else { variable_add("windows_save", "ws", VAR_MAP, 2, NULL, NULL, NULL, NULL); variable_add("windows_layout", "wl", VAR_STR, 2, NULL, NULL, NULL, NULL); variable_add("datestamp", "dS", VAR_STR, 2, NULL, NULL, NULL, NULL); } #else variable_add("windows_save", "ws", VAR_MAP, 2, NULL, NULL, NULL, NULL); variable_add("windows_layout", "wl", VAR_STR, 2, NULL, NULL, NULL, NULL); variable_add("datestamp", "dS", VAR_STR, 2, NULL, NULL, NULL, NULL); #endif variable_add("status", "st", VAR_INT, 2, &config_status, NULL, NULL, NULL); variable_add("protocol", "pR", VAR_INT, 2, &config_protocol, NULL, NULL, NULL); variable_add("reason", "re", VAR_STR, 2, &config_reason, NULL, NULL, NULL); variable_add("interface", "in", VAR_STR, 2, &config_interface, NULL, NULL, NULL); variable_add("password_cp1250", "c1", VAR_BOOL, 2, &config_password_cp1250, NULL, NULL, NULL); variable_add("last_sysmsg", "LS", VAR_INT, 2, &config_last_sysmsg, NULL, NULL, NULL); #ifdef WITH_IOCTLD variable_add("ioctld_enable", "Ie", VAR_INT, 1, &config_ioctld_enable, NULL, NULL, NULL); variable_add("ioctld_net_port", "Ip", VAR_INT, 1, &config_ioctld_net_port, NULL, NULL, NULL); #else variable_add("ioctld_enable", "Ie", VAR_INT, 2, NULL, NULL, NULL, NULL); variable_add("ioctld_net_port", "Ip", VAR_INT, 2, NULL, NULL, NULL, NULL); #endif }
/* * variable_init() * * inicjuje listê zmiennych. */ void variable_init() { variable_add(NULL, ("auto_save"), VAR_INT, 1, &config_auto_save, changed_auto_save, NULL, NULL); variable_add(NULL, ("auto_user_add"), VAR_BOOL, 1, &config_auto_user_add, NULL, NULL, NULL); variable_add(NULL, ("away_reason"), VAR_STR, 1, &config_away_reason, NULL, NULL, NULL); variable_add(NULL, ("back_reason"), VAR_STR, 1, &config_back_reason, NULL, NULL, NULL); variable_add(NULL, ("beep"), VAR_BOOL, 1, &config_beep, NULL, NULL, NULL); variable_add(NULL, ("beep_chat"), VAR_BOOL, 1, &config_beep_chat, NULL, NULL, dd_beep); variable_add(NULL, ("beep_msg"), VAR_BOOL, 1, &config_beep_msg, NULL, NULL, dd_beep); variable_add(NULL, ("beep_notify"), VAR_BOOL, 1, &config_beep_notify, NULL, NULL, dd_beep); variable_add(NULL, ("completion_char"), VAR_STR, 1, &config_completion_char, NULL, NULL, NULL); variable_add(NULL, ("completion_notify"), VAR_MAP, 1, &config_completion_notify, NULL, variable_map(4, 0, 0, "none", 1, 2, "add", 2, 1, "addremove", 4, 0, "away"), NULL); /* It's very, very special variable; shouldn't be used by user */ variable_add(NULL, ("config_version"), VAR_INT, 2, &config_version, NULL, NULL, NULL); variable_add(NULL, ("dcc_dir"), VAR_STR, 1, &config_dcc_dir, NULL, NULL, NULL); variable_add(NULL, ("debug"), VAR_BOOL, 1, &config_debug, NULL, NULL, NULL); /* variable_add(NULL, ("default_protocol"), VAR_STR, 1, &config_default_protocol, NULL, NULL, NULL); */ variable_add(NULL, ("default_status_window"), VAR_BOOL, 1, &config_default_status_window, NULL, NULL, NULL); variable_add(NULL, ("display_ack"), VAR_MAP, 1, &config_display_ack, NULL, variable_map(6, 0, 0, "none", 1, 0, "delivered", 2, 0, "queued", 4, 0, "dropped", 8, 0, "tempfail", 16, 0, "unknown"), NULL); variable_add(NULL, ("display_blinking"), VAR_BOOL, 1, &config_display_blinking, changed_display_blinking, NULL, NULL); variable_add(NULL, ("display_color"), VAR_INT, 1, &config_display_color, NULL, NULL, NULL); variable_add(NULL, ("display_color_map"), VAR_STR, 1, &config_display_color_map, NULL, NULL, dd_color); variable_add(NULL, ("display_crap"), VAR_BOOL, 1, &config_display_crap, NULL, NULL, NULL); variable_add(NULL, ("display_day_changed"), VAR_BOOL, 1, &config_display_day_changed, NULL, NULL , NULL); variable_add(NULL, ("display_notify"), VAR_MAP, 1, &config_display_notify, NULL, variable_map(4, 0, 0, "none", 1, 2, "all", 2, 1, "significant", 4, 0, "unknown_too"), NULL); variable_add(NULL, ("display_sent"), VAR_BOOL, 1, &config_display_sent, NULL, NULL, NULL); variable_add(NULL, ("display_welcome"), VAR_BOOL, 1, &config_display_welcome, NULL, NULL, NULL); variable_add(NULL, ("emoticons"), VAR_BOOL, 1, &config_emoticons, NULL, NULL, NULL); variable_add(NULL, ("events_delay"), VAR_INT, 1, &config_events_delay, NULL, NULL, NULL); variable_add(NULL, ("expert_mode"), VAR_INT, 1, &config_expert_mode, NULL, NULL, NULL); variable_add(NULL, ("exit_exec"), VAR_STR, 1, &config_exit_exec, NULL, NULL, NULL); variable_add(NULL, ("history_savedups"), VAR_BOOL, 1, &config_history_savedups, NULL, NULL, NULL); variable_add(NULL, ("keep_reason"), VAR_INT, 1, &config_keep_reason, NULL, NULL, NULL); variable_add(NULL, ("last"), VAR_MAP, 1, &config_last, NULL, variable_map(4, 0, 0, "none", 1, 2, "all", 2, 1, "separate", 4, 0, "sent"), NULL); variable_add(NULL, ("last_size"), VAR_INT, 1, &config_last_size, NULL, NULL, NULL); variable_add(NULL, ("nickname"), VAR_STR, 1, &config_nickname, NULL, NULL, NULL); variable_add(NULL, ("make_window"), VAR_MAP, 1, &config_make_window, changed_make_window, variable_map(4, 0, 0, "none", 1, 2, "usefree", 2, 1, "always", 4, 0, "chatonly"), NULL); variable_add(NULL, ("mesg"), VAR_INT, 1, &config_mesg, changed_mesg, variable_map(3, 0, 0, "no", 1, 2, "yes", 2, 1, "default"), NULL); variable_add(NULL, ("query_commands"), VAR_BOOL, 1, &config_query_commands, NULL, NULL, NULL); variable_add(NULL, ("quit_reason"), VAR_STR, 1, &config_quit_reason, NULL, NULL, NULL); variable_add(NULL, ("save_password"), VAR_BOOL, 1, &config_save_password, NULL, NULL, NULL); variable_add(NULL, ("save_quit"), VAR_INT, 1, &config_save_quit, NULL, NULL, NULL); variable_add(NULL, ("session_default"), VAR_STR, 1, &config_session_default, NULL, NULL, NULL); variable_add(NULL, ("send_white_lines"), VAR_BOOL, 1, &config_send_white_lines, NULL, NULL, NULL); variable_add(NULL, ("session_locks"), VAR_INT, 1, &config_session_locks, changed_session_locks, variable_map(3, 0, 0, "off", 1, 2, "flock", 2, 1, "file"), NULL); variable_add(NULL, ("sessions_save"), VAR_BOOL, 1, &config_sessions_save, NULL, NULL, NULL); variable_add(NULL, ("slash_messages"), VAR_INT, 1, &config_slash_messages, NULL, variable_map(3, 0, 0, "off", 1, 2, "moreslashes", 2, 1, "unknowncmd"), NULL); variable_add(NULL, ("sort_windows"), VAR_BOOL, 1, &config_sort_windows, NULL, NULL, NULL); variable_add(NULL, ("sound_app"), VAR_STR, 1, &config_sound_app, NULL, NULL, NULL); variable_add(NULL, ("sound_chat_file"), VAR_FILE, 1, &config_sound_chat_file, NULL, NULL, dd_sound); variable_add(NULL, ("sound_mail_file"), VAR_FILE, 1, &config_sound_mail_file, NULL, NULL, dd_sound); variable_add(NULL, ("sound_msg_file"), VAR_FILE, 1, &config_sound_msg_file, NULL, NULL, dd_sound); variable_add(NULL, ("sound_notify_file"), VAR_FILE, 1, &config_sound_notify_file, NULL, NULL, dd_sound); variable_add(NULL, ("sound_sysmsg_file"), VAR_FILE, 1, &config_sound_sysmsg_file, NULL, NULL, dd_sound); variable_add(NULL, ("speech_app"), VAR_STR, 1, &config_speech_app, NULL, NULL, NULL); variable_add(NULL, ("subject_prefix"), VAR_STR, 1, &config_subject_prefix, NULL, NULL, NULL); variable_add(NULL, ("subject_reply_prefix"), VAR_STR, 1, &config_subject_reply_prefix, NULL, NULL, NULL); variable_add(NULL, ("tab_command"), VAR_STR, 1, &config_tab_command, NULL, NULL, NULL); variable_add(NULL, ("theme"), VAR_THEME, 1, &config_theme, changed_theme, NULL, NULL); variable_add(NULL, ("time_deviation"), VAR_INT, 1, &config_time_deviation, NULL, NULL, NULL); variable_add(NULL, ("timestamp"), VAR_STR, 1, &config_timestamp, NULL, NULL, NULL); /* ? */ variable_add(NULL, ("timestamp_show"), VAR_BOOL, 1, &config_timestamp_show, NULL, NULL, NULL); variable_add(NULL, ("window_session_allow"), VAR_INT, 1, &config_window_session_allow, NULL, variable_map(4, 0, 0, "deny", 1, 6, "uid-capable", 2, 5, "any", 4, 3, "switch-to-status"), NULL); variable_add(NULL, ("windows_layout"), VAR_STR, 2, &config_windows_layout, NULL, NULL, NULL); variable_add(NULL, ("windows_save"), VAR_BOOL, 1, &config_windows_save, NULL, NULL, NULL); }