void owl_variable_get_help(const owl_variable *v, owl_fmtext *fm) { char *tostring; const char *default_str; owl_fmtext_append_bold(fm, "OWL VARIABLE\n\n"); owl_fmtext_append_normal(fm, OWL_TABSTR); owl_fmtext_append_normal(fm, owl_variable_get_name(v)); owl_fmtext_append_normal(fm, " - "); owl_fmtext_append_normal(fm, owl_variable_get_summary(v)); owl_fmtext_append_normal(fm, "\n\n"); owl_fmtext_append_normal(fm, "Current: "); tostring = owl_variable_get_tostring(v); owl_fmtext_append_normal(fm, (tostring ? tostring : "<null>")); g_free(tostring); owl_fmtext_append_normal(fm, "\n\n"); default_str = owl_variable_get_default_tostring(v); owl_fmtext_append_normal(fm, "Default: "); owl_fmtext_append_normal(fm, (default_str ? default_str : "<null>")); owl_fmtext_append_normal(fm, "\n\n"); owl_fmtext_append_normal(fm, "Valid Settings: "); owl_fmtext_append_normal(fm, owl_variable_get_validsettings(v)); owl_fmtext_append_normal(fm, "\n\n"); if (v->description && *v->description) { owl_fmtext_append_normal(fm, "Description:\n"); owl_fmtext_append_normal(fm, owl_variable_get_description(v)); owl_fmtext_append_normal(fm, "\n\n"); } }
/* returns 0 on success, prints a status msg if msg is true */ int owl_variable_set_fromstring(owl_variable *v, const char *value, int msg) { char *tostring; GValue values[] = {G_VALUE_INIT, G_VALUE_INIT}; GValue return_box = G_VALUE_INIT; int set_successfully; g_value_init(&values[0], G_TYPE_POINTER); g_value_set_pointer(&values[0], NULL); g_value_init(&values[1], G_TYPE_STRING); g_value_set_static_string(&values[1], value); g_value_init(&return_box, G_TYPE_INT); g_closure_invoke(v->set_fromstring_fn, &return_box, 2, values, NULL); set_successfully = g_value_get_int(&return_box); if (0 != set_successfully) { if (msg) owl_function_error("Unable to set %s (must be %s)", owl_variable_get_name(v), owl_variable_get_validsettings(v)); } else if (msg) { tostring = owl_variable_get_tostring(v); if (tostring) { owl_function_makemsg("%s = '%s'", owl_variable_get_name(v), tostring); } else { owl_function_makemsg("%s = <null>", owl_variable_get_name(v)); } g_free(tostring); } g_value_unset(&return_box); g_value_unset(&values[1]); g_value_unset(&values[0]); return set_successfully; }
/* returns 0 on success, prints a status msg if msg is true */ int owl_variable_set_fromstring(owl_vardict *d, char *name, char *value, int msg, int requirebool) { owl_variable *v; char buff2[1024]; if (!name) return(-1); v = owl_dict_find_element(d, name); if (v == NULL) { if (msg) owl_function_error("Unknown variable %s", name); return -1; } if (!v->set_fromstring_fn) { if (msg) owl_function_error("Variable %s is read-only", name); return -1; } if (requirebool && v->type!=OWL_VARIABLE_BOOL) { if (msg) owl_function_error("Variable %s is not a boolean", name); return -1; } if (0 != v->set_fromstring_fn(v, value)) { if (msg) owl_function_error("Unable to set %s (must be %s)", name, owl_variable_get_validsettings(v)); return -1; } if (msg && v->get_tostring_fn) { v->get_tostring_fn(v, buff2, 1024, v->val); owl_function_makemsg("%s = '%s'", name, buff2); } return 0; }
void owl_variable_get_help(owl_vardict *d, char *name, owl_fmtext *fm) { char buff[1024]; int bufflen = 1023; owl_variable *v; if (!name || (v = owl_dict_find_element(d, name)) == NULL || !v->get_fn) { owl_fmtext_append_normal(fm, "No such variable...\n"); return; } owl_fmtext_append_bold(fm, "OWL VARIABLE\n\n"); owl_fmtext_append_normal(fm, OWL_TABSTR); owl_fmtext_append_normal(fm, name); owl_fmtext_append_normal(fm, " - "); owl_fmtext_append_normal(fm, v->summary); owl_fmtext_append_normal(fm, "\n\n"); owl_fmtext_append_normal(fm, "Current: "); owl_variable_get_tostring(d, name, buff, bufflen); owl_fmtext_append_normal(fm, buff); owl_fmtext_append_normal(fm, "\n\n"); if (v->type == OWL_VARIABLE_INT || v->type == OWL_VARIABLE_BOOL) { v->get_tostring_fn(v, buff, bufflen, &(v->ival_default)); } else { v->get_tostring_fn(v, buff, bufflen, v->pval_default); } owl_fmtext_append_normal(fm, "Default: "); owl_fmtext_append_normal(fm, buff); owl_fmtext_append_normal(fm, "\n\n"); owl_fmtext_append_normal(fm, "Valid Settings: "); owl_fmtext_append_normal(fm, owl_variable_get_validsettings(v)); owl_fmtext_append_normal(fm, "\n\n"); if (v->description && *v->description) { owl_fmtext_append_normal(fm, "Description:\n"); owl_fmtext_append_normal(fm, owl_variable_get_description(v)); owl_fmtext_append_normal(fm, "\n\n"); } }