Index: variables.c =================================================================== RCS file: /cvsroot/zile/zile/src/variables.c,v retrieving revision 1.9 diff -u -r1.9 variables.c --- variables.c 17 Feb 2004 23:20:33 -0000 1.9 +++ variables.c 23 Feb 2004 02:10:56 -0000 @@ -32,64 +32,65 @@ #include "zile.h" #include "extern.h" -#include "htable.h" /* * Default variables values table. */ +typedef struct var_entry var_entry; + static struct var_entry { char *var; /* Variable name. */ char *fmt; /* Variable format (boolean, color, etc.). */ char *val; /* Default value. */ -} def_vars[] = { +} vars[] = { #define X(zile_var, fmt, val, doc) { zile_var, fmt, val }, #include "tbl_vars.h" + X(NULL, NULL, NULL, NULL) /* Last NULL element. */ #undef X }; -static htable var_table; - -void init_variables(void) +static var_entry *get_entry(const char *var) { - struct var_entry *p; + int c; - var_table = htable_new(); + for (c = 0; vars[c].var; c++) + if (strcmp (vars[c].var, var) == 0) + return vars+c; - for (p = &def_vars[0]; p < &def_vars[sizeof(def_vars) / sizeof(def_vars[0])]; p++) - set_variable(p->var, p->val); + return NULL; } -void free_variables(void) +void init_variables(void) { - alist al; - hpair *pair; + int c; - al = htable_list(var_table); - for (pair = alist_first(al); pair != NULL; pair = alist_next(al)) - unset_variable(pair->key); - alist_delete(al); - - htable_delete(var_table); + for (c = 0; vars[c].var; c++) + vars[c].val = zstrdup(vars[c].val); } -void set_variable(char *var, char *val) +void free_variables(void) { - unset_variable(var); - htable_store(var_table, var, zstrdup(val)); + int c; + + for (c = 0; vars[c].var; c++) + free(vars[c].val); } -void unset_variable(char *var) +void set_variable(char *var, char *val) { - char *p = htable_fetch(var_table, var); - htable_remove(var_table, var); - free(p); + var_entry *entry = get_entry(var); + if (entry) { + free(entry->val); + entry->val = zstrdup(val); + } } char *get_variable(char *var) { - char *val = htable_fetch(var_table, var); + var_entry *entry = get_entry(var); + char *val = entry ? entry->val: NULL; #ifdef DEBUG - if (!val) + if (!entry) ZTRACE(("getting unknown variable `%s'\n", var)); else ZTRACE(("getting variable `%s' = `%s'\n", var, val)); @@ -99,36 +100,23 @@ int is_variable_equal(char *var, char *val) { - char *v = htable_fetch(var_table, var); - return v != NULL && !strcmp(v, val); + char *entry_val = get_variable(var); + return entry_val && !strcmp(entry_val, val); } int lookup_bool_variable(char *var) { - char *p; - - if ((p = htable_fetch(var_table, var)) != NULL) - return !strcmp(p, "true"); - -#if 0 - minibuf_error("Warning: used uninitialized variable `%s'", var); - waitkey(2 * 1000); -#endif - - return FALSE; + return is_variable_equal(var, "true"); } static Completion *make_variable_completion(void) { - alist al; Completion *cp; - hpair *pair; + int c; - al = htable_list(var_table); cp = new_completion(FALSE); - for (pair = alist_first(al); pair != NULL; pair = alist_next(al)) - alist_append(cp->completions, zstrdup(pair->key)); - alist_delete(al); + for (c = 0; vars[c].var; c++) + alist_append(cp->completions, zstrdup(vars[c].var)); return cp; } @@ -169,12 +157,8 @@ static char *get_variable_format(char *var) { - struct var_entry *p; - for (p = &def_vars[0]; p < &def_vars[sizeof(def_vars) / sizeof(def_vars[0])]; p++) - if (!strcmp(p->var, var)) - return p->fmt; - - return ""; + var_entry *entry = get_entry(var); + return entry ? entry->fmt: ""; } DEFUN("set-variable", set_variable) @@ -238,27 +222,17 @@ return TRUE; } -static int sorter(const void *p1, const void *p2) -{ - return strcmp((*(hpair **)p1)->key, (*(hpair **)p2)->key); -} - static void write_variables_list(va_list ap) { Window *old_wp = va_arg(ap, Window *); - alist al; - hpair *pair; + int c; bprintf("Global variables:\n\n"); bprintf("%-30s %s\n", "Variable", "Value"); bprintf("%-30s %s\n", "--------", "-----"); - al = htable_list(var_table); - alist_sort(al, sorter); - for (pair = alist_first(al); pair != NULL; pair = alist_next(al)) - if (pair->data != NULL) - bprintf("%-30s \"%s\"\n", pair->key, pair->data); - alist_delete(al); + for (c = 0; vars[c].var; c++) + bprintf("%-30s \"%s\"\n", vars[c].var, vars[c].val); bprintf("\nLocal buffer variables:\n\n"); bprintf("%-30s %s\n", "Variable", "Value");