Changeset 0d935a1


Ignore:
Timestamp:
Jun 27, 2011, 4:28:51 AM (13 years ago)
Author:
Jason Gross <jgross@mit.edu>
Children:
b75a8ac
Parents:
f4e857f
git-author:
Jason Gross <jgross@mit.edu> (06/27/11 01:14:13)
git-committer:
Jason Gross <jgross@mit.edu> (06/27/11 04:28:51)
Message:
Pass owl_variable * around instead of owl_vardict *.

This allows (forces) functions to do their own NULL- and type- checking
on variables.  The functions in varsubs.c get less checking, but if
these auto-generated functions are failing, something more serious is
probably wrong.
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • commands.c

    re6d7e4e r0d935a1  
    15721572  int  silent=0;
    15731573  int requirebool=0;
     1574  owl_variable *v;
    15741575
    15751576  if (argc == 1) {
     
    15941595    return NULL;
    15951596  }
    1596   owl_variable_set_fromstring(owl_global_get_vardict(&g), var, val, !silent, requirebool);
     1597
     1598  v = owl_variable_get_var(owl_global_get_vardict(&g), var);
     1599  if (v == NULL) {
     1600    if (!silent) owl_function_error("Unknown variable %s", var);
     1601  } else if (requirebool && v->type != OWL_VARIABLE_BOOL) {
     1602    if (!silent) owl_function_error("Variable %s is not a boolean", var);
     1603  } else {
     1604    owl_variable_set_fromstring(v, val, !silent);
     1605  }
    15971606  return NULL;
    15981607}
     
    16001609char *owl_command_unset(int argc, const char *const *argv, const char *buff)
    16011610{
     1611  owl_variable *v;
    16021612  const char *var, *val;
    16031613  int  silent=0;
     
    16141624    return NULL;
    16151625  }
    1616   owl_variable_set_fromstring(owl_global_get_vardict(&g), var, val, !silent, 1);
     1626
     1627  v = owl_variable_get_var(owl_global_get_vardict(&g), var);
     1628  if (v == NULL) {
     1629    if (!silent) owl_function_error("Unknown variable %s", var);
     1630  } else if (v->type != OWL_VARIABLE_BOOL) {
     1631    if (!silent) owl_function_error("Variable %s is not a boolean", var);
     1632  } else {
     1633    owl_variable_set_fromstring(v, val, !silent);
     1634  }
    16171635  return NULL;
    16181636}
     
    16221640  const char *var;
    16231641  char *value;
     1642  const owl_variable *v;
    16241643
    16251644  if (argc==1) {
     
    16331652  var=argv[1];
    16341653   
    1635   value = owl_variable_get_tostring(owl_global_get_vardict(&g), var);
    1636   if (value) {
    1637     owl_function_makemsg("%s = '%s'", var, value);
     1654  v = owl_variable_get_var(owl_global_get_vardict(&g), var);
     1655  if (v) {
     1656    value = owl_variable_get_tostring(v);
     1657    if (value == NULL)
     1658      owl_function_makemsg("%s = <null>", var);
     1659    else
     1660      owl_function_makemsg("%s = '%s'", var, value);
    16381661    g_free(value);
    16391662  } else {
     
    25052528}
    25062529
    2507 char *owl_command_getvar(int argc, const char *const *argv, const char *buff)
    2508 {
     2530CALLER_OWN char *owl_command_getvar(int argc, const char *const *argv, const char *buff)
     2531{
     2532  const owl_variable *v;
    25092533  if (argc != 2) {
    25102534    owl_function_makemsg("Wrong number of arguments for %s", argv[0]);
    25112535    return NULL;
    25122536  }
    2513   return owl_variable_get_tostring(owl_global_get_vardict(&g), argv[1]);
     2537  v = owl_variable_get_var(owl_global_get_vardict(&g), argv[1]);
     2538  if (v == NULL) return NULL;
     2539  return owl_variable_get_tostring(v);
    25142540}
    25152541
  • functions.c

    rb8a3e00 r0d935a1  
    15721572void owl_function_printallvars(void)
    15731573{
     1574  const owl_variable *v;
    15741575  const char *name;
    15751576  char *var;
     
    15851586    if (name && name[0]!='_') {
    15861587      g_string_append_printf(str, "\n%-20s = ", name);
    1587       var = owl_variable_get_tostring(owl_global_get_vardict(&g), name);
     1588      v = owl_variable_get_var(owl_global_get_vardict(&g), name);
     1589      var = owl_variable_get_tostring(v);
    15881590      if (var) {
    15891591        g_string_append(str, var);
    15901592        g_free(var);
     1593      } else {
     1594        g_string_append(str, "<null>");
    15911595      }
    15921596    }
     
    16011605void owl_function_show_variables(void)
    16021606{
     1607  const owl_variable *v;
    16031608  GPtrArray *varnames;
    16041609  owl_fmtext fm; 
     
    16131618    varname = varnames->pdata[i];
    16141619    if (varname && varname[0]!='_') {
    1615       owl_variable_describe(owl_global_get_vardict(&g), varname, &fm);
     1620      v = owl_variable_get_var(owl_global_get_vardict(&g), varname);
     1621      owl_variable_describe(v, &fm);
    16161622    }
    16171623  }
     
    16231629void owl_function_show_variable(const char *name)
    16241630{
     1631  const owl_variable *v;
    16251632  owl_fmtext fm; 
    16261633
    16271634  owl_fmtext_init_null(&fm);
    1628   owl_variable_get_help(owl_global_get_vardict(&g), name, &fm);
     1635  v = owl_variable_get_var(owl_global_get_vardict(&g), name);
     1636  if (v)
     1637    owl_variable_get_help(v, &fm);
     1638  else
     1639    owl_fmtext_append_normal(&fm, "No such variable...\n");
    16291640  owl_function_popless_fmtext(&fm);
    16301641  owl_fmtext_cleanup(&fm);
  • help.c

    rce68f23 r0d935a1  
    44void owl_help(void)
    55{
     6  const owl_variable *v;
    67  owl_fmtext fm;
    78  const char *varname;
     
    133134    varname = varnames->pdata[i];
    134135    if (varname && varname[0]!='_') {
    135       owl_variable_describe(owl_global_get_vardict(&g), varname, &fm);
     136      v = owl_variable_get_var(owl_global_get_vardict(&g), varname);
     137      owl_variable_describe(v, &fm);
    136138    }
    137139  }
  • stubgen.pl

    rfd03b12 r0d935a1  
    1414    if ($vartype =~ /^BOOL/) {
    1515        print "void owl_global_set_${altvarname}_on(owl_global *g) {\n";
    16         print "  owl_variable_set_bool_on(&g->vars, \"$varname\");\n}\n";
     16        print "  owl_variable_set_bool_on(owl_variable_get_var(&g->vars, \"$varname\"));\n}\n";
    1717        print "void owl_global_set_${altvarname}_off(owl_global *g) {\n";
    18         print "  owl_variable_set_bool_off(&g->vars, \"$varname\");\n}\n";
     18        print "  owl_variable_set_bool_off(owl_variable_get_var(&g->vars, \"$varname\"));\n}\n";
    1919        print "int owl_global_is_$altvarname(const owl_global *g) {\n";
    20         print "  return owl_variable_get_bool(&g->vars, \"$varname\");\n}\n";
     20        print "  return owl_variable_get_bool(owl_variable_get_var(&g->vars, \"$varname\"));\n}\n";
    2121    } elsif ($vartype =~ /^PATH/ or $vartype =~ /^STRING/) {
    2222        print "void owl_global_set_$altvarname(owl_global *g, const char *text) {\n";
    23         print "  owl_variable_set_string(&g->vars, \"$varname\", text);\n}\n";
     23        print "  owl_variable_set_string(owl_variable_get_var(&g->vars, \"$varname\"), text);\n}\n";
    2424        print "const char *owl_global_get_$altvarname(const owl_global *g) {\n";
    25         print "  return owl_variable_get_string(&g->vars, \"$varname\");\n}\n";
     25        print "  return owl_variable_get_string(owl_variable_get_var(&g->vars, \"$varname\"));\n}\n";
    2626    } elsif ($vartype =~ /^INT/ or $vartype =~ /^ENUM/) {
    2727        print "void owl_global_set_$altvarname(owl_global *g, int n) {\n";
    28         print "  owl_variable_set_int(&g->vars, \"$varname\", n);\n}\n";
     28        print "  owl_variable_set_int(owl_variable_get_var(&g->vars, \"$varname\"), n);\n}\n";
    2929        print "int owl_global_get_$altvarname(const owl_global *g) {\n";
    30         print "  return owl_variable_get_int(&g->vars, \"$varname\");\n}\n";
     30        print "  return owl_variable_get_int(owl_variable_get_var(&g->vars, \"$varname\"));\n}\n";
    3131    }
    3232    }
  • tester.c

    reeba011 r0d935a1  
    276276int owl_variable_regtest(void) {
    277277  owl_vardict vd;
     278  owl_variable *var;
    278279  int numfailed=0;
    279280  char *value;
     
    283284  FAIL_UNLESS("setup", 0==owl_variable_dict_setup(&vd));
    284285
    285   FAIL_UNLESS("get bool", 0==owl_variable_get_bool(&vd,"rxping"));
    286   FAIL_UNLESS("get bool (no such)", -1==owl_variable_get_bool(&vd,"mumble"));
     286  FAIL_UNLESS("get bool var", NULL != (var = owl_variable_get_var(&vd, "rxping")));
     287  FAIL_UNLESS("get bool", 0 == owl_variable_get_bool(var));
     288  FAIL_UNLESS("get bool (no such)", NULL == owl_variable_get_var(&vd, "mumble"));
    287289  FAIL_UNLESS("get bool as string",
    288               !strcmp((value = owl_variable_get_tostring(&vd,"rxping")), "off"));
     290              !strcmp((value = owl_variable_get_tostring(var)), "off"));
    289291  g_free(value);
    290   FAIL_UNLESS("set bool 1", 0==owl_variable_set_bool_on(&vd,"rxping"));
    291   FAIL_UNLESS("get bool 2", 1==owl_variable_get_bool(&vd,"rxping"));
    292   FAIL_UNLESS("set bool 3", 0==owl_variable_set_fromstring(&vd,"rxping","off",0,0));
    293   FAIL_UNLESS("get bool 4", 0==owl_variable_get_bool(&vd,"rxping"));
    294   FAIL_UNLESS("set bool 5", -1==owl_variable_set_fromstring(&vd,"rxping","xxx",0,0));
    295   FAIL_UNLESS("get bool 6", 0==owl_variable_get_bool(&vd,"rxping"));
    296 
    297 
    298   FAIL_UNLESS("get string", 0==strcmp("~/zlog/people", owl_variable_get_string(&vd,"logpath")));
    299   FAIL_UNLESS("set string 7", 0==owl_variable_set_string(&vd,"logpath","whee"));
    300   FAIL_UNLESS("get string", 0==strcmp("whee", owl_variable_get_string(&vd,"logpath")));
    301 
    302   FAIL_UNLESS("get int", 8==owl_variable_get_int(&vd,"typewinsize"));
    303   FAIL_UNLESS("get int (no such)", -1==owl_variable_get_int(&vd,"mmble"));
     292  FAIL_UNLESS("set bool 1", 0 == owl_variable_set_bool_on(var));
     293  FAIL_UNLESS("get bool 2", 1 == owl_variable_get_bool(var));
     294  FAIL_UNLESS("set bool 3", 0 == owl_variable_set_fromstring(var, "off", 0));
     295  FAIL_UNLESS("get bool 4", 0 == owl_variable_get_bool(var));
     296  FAIL_UNLESS("set bool 5", -1 == owl_variable_set_fromstring(var, "xxx", 0));
     297  FAIL_UNLESS("get bool 6", 0 == owl_variable_get_bool(var));
     298
     299
     300  FAIL_UNLESS("get string var", NULL != (var = owl_variable_get_var(&vd, "logpath")));
     301  FAIL_UNLESS("get string", 0 == strcmp("~/zlog/people", owl_variable_get_string(var)));
     302  FAIL_UNLESS("set string 7", 0 == owl_variable_set_string(var, "whee"));
     303  FAIL_UNLESS("get string", !strcmp("whee", owl_variable_get_string(var)));
     304
     305  FAIL_UNLESS("get int var", NULL != (var = owl_variable_get_var(&vd, "typewinsize")));
     306  FAIL_UNLESS("get int", 8 == owl_variable_get_int(var));
     307  FAIL_UNLESS("get int (no such)", NULL == owl_variable_get_var(&vd, "mumble"));
    304308  FAIL_UNLESS("get int as string",
    305               !strcmp((value = owl_variable_get_tostring(&vd,"typewinsize")), "8"));
     309              !strcmp(value = owl_variable_get_tostring(var), "8"));
    306310  g_free(value);
    307   FAIL_UNLESS("set int 1", 0==owl_variable_set_int(&vd,"typewinsize",12));
    308   FAIL_UNLESS("get int 2", 12==owl_variable_get_int(&vd,"typewinsize"));
    309   FAIL_UNLESS("set int 1b", -1==owl_variable_set_int(&vd,"typewinsize",-3));
    310   FAIL_UNLESS("get int 2b", 12==owl_variable_get_int(&vd,"typewinsize"));
    311   FAIL_UNLESS("set int 3", 0==owl_variable_set_fromstring(&vd,"typewinsize","9",0,0));
    312   FAIL_UNLESS("get int 4", 9==owl_variable_get_int(&vd,"typewinsize"));
    313   FAIL_UNLESS("set int 5", -1==owl_variable_set_fromstring(&vd,"typewinsize","xxx",0,0));
    314   FAIL_UNLESS("set int 6", -1==owl_variable_set_fromstring(&vd,"typewinsize","",0,0));
    315   FAIL_UNLESS("get int 7", 9==owl_variable_get_int(&vd,"typewinsize"));
     311  FAIL_UNLESS("set int 1", 0 == owl_variable_set_int(var, 12));
     312  FAIL_UNLESS("get int 2", 12 == owl_variable_get_int(var));
     313  FAIL_UNLESS("set int 1b", -1 == owl_variable_set_int(var, -3));
     314  FAIL_UNLESS("get int 2b", 12 == owl_variable_get_int(var));
     315  FAIL_UNLESS("set int 3", 0 == owl_variable_set_fromstring(var, "9", 0));
     316  FAIL_UNLESS("get int 4", 9 == owl_variable_get_int(var));
     317  FAIL_UNLESS("set int 5", -1 == owl_variable_set_fromstring(var, "xxx", 0));
     318  FAIL_UNLESS("set int 6", -1 == owl_variable_set_fromstring(var, "", 0));
     319  FAIL_UNLESS("get int 7", 9 == owl_variable_get_int(var));
    316320
    317321  owl_variable_dict_newvar_string(&vd, "stringvar", "", "", "testval");
    318   FAIL_UNLESS("get new string var", NULL != (v = owl_variable_get(&vd, "stringvar")));
    319   FAIL_UNLESS("get new string val", !strcmp("testval", owl_variable_get_string(&vd, "stringvar")));
    320   owl_variable_set_string(&vd, "stringvar", "new val");
    321   FAIL_UNLESS("update string val", !strcmp("new val", owl_variable_get_string(&vd, "stringvar")));
     322  FAIL_UNLESS("get new string var", NULL != (var = owl_variable_get_var(&vd, "stringvar")));
     323  FAIL_UNLESS("get new string var", NULL != (v = owl_variable_get(var)));
     324  FAIL_UNLESS("get new string val", !strcmp("testval", owl_variable_get_string(var)));
     325  owl_variable_set_string(var, "new val");
     326  FAIL_UNLESS("update string val", !strcmp("new val", owl_variable_get_string(var)));
    322327
    323328  owl_variable_dict_newvar_int(&vd, "intvar", "", "", 47);
    324   FAIL_UNLESS("get new int var", NULL != (v = owl_variable_get(&vd, "intvar")));
    325   FAIL_UNLESS("get new int val", 47 == owl_variable_get_int(&vd, "intvar"));
    326   owl_variable_set_int(&vd, "intvar", 17);
    327   FAIL_UNLESS("update bool val", 17 == owl_variable_get_int(&vd, "intvar"));
     329  FAIL_UNLESS("get new int var", NULL != (var = owl_variable_get_var(&vd, "intvar")));
     330  FAIL_UNLESS("get new int var", NULL != (v = owl_variable_get(var)));
     331  FAIL_UNLESS("get new int val", 47 == owl_variable_get_int(var));
     332  owl_variable_set_int(var, 17);
     333  FAIL_UNLESS("update int val", 17 == owl_variable_get_int(var));
    328334
    329335  owl_variable_dict_newvar_bool(&vd, "boolvar", "", "", 1);
    330   FAIL_UNLESS("get new bool var", NULL != (v = owl_variable_get(&vd, "boolvar")));
    331   FAIL_UNLESS("get new bool val", owl_variable_get_bool(&vd, "boolvar"));
    332   owl_variable_set_bool_off(&vd, "boolvar");
    333   FAIL_UNLESS("update string val", !owl_variable_get_bool(&vd, "boolvar"));
     336  FAIL_UNLESS("get new bool var", NULL != (var = owl_variable_get_var(&vd, "boolvar")));
     337  FAIL_UNLESS("get new bool var", NULL != (v = owl_variable_get(var)));
     338  FAIL_UNLESS("get new bool val", owl_variable_get_bool(var));
     339  owl_variable_set_bool_off(var);
     340  FAIL_UNLESS("update bool val", !owl_variable_get_bool(var));
    334341
    335342  owl_variable_dict_cleanup(&vd);
  • variable.c

    rf4e857f r0d935a1  
    717717
    718718
     719const char *owl_variable_get_name(const owl_variable *v)
     720{
     721  return v->name;
     722}
     723
    719724const char *owl_variable_get_description(const owl_variable *v) {
    720725  return v->description;
     
    732737
    733738/* returns 0 on success, prints a status msg if msg is true */
    734 int owl_variable_set_fromstring(owl_vardict *d, const char *name, const char *value, int msg, int requirebool) {
    735   owl_variable *v;
     739int owl_variable_set_fromstring(owl_variable *v, const char *value, int msg) {
    736740  char *tostring;
    737   if (!name) return(-1);
    738   v = owl_dict_find_element(d, name);
    739   if (v == NULL) {
    740     if (msg) owl_function_error("Unknown variable %s", name);
    741     return -1;
    742   }
    743741  if (!v->set_fromstring_fn) {
    744     if (msg) owl_function_error("Variable %s is read-only", name);
     742    if (msg) owl_function_error("Variable %s is read-only", owl_variable_get_name(v));
    745743    return -1;   
    746744  }
    747   if (requirebool && v->type!=OWL_VARIABLE_BOOL) {
    748     if (msg) owl_function_error("Variable %s is not a boolean", name);
    749     return -1;   
    750   }
    751745  if (0 != v->set_fromstring_fn(v, value)) {
    752     if (msg) owl_function_error("Unable to set %s (must be %s)", name,
    753                                   owl_variable_get_validsettings(v));
     746    if (msg) owl_function_error("Unable to set %s (must be %s)", owl_variable_get_name(v),
     747                                owl_variable_get_validsettings(v));
    754748    return -1;
    755749  }
    756750  if (msg) {
    757751    tostring = v->get_tostring_fn(v, v->get_fn(v));
    758     owl_function_makemsg("%s = '%s'", name, tostring);
     752    if (tostring)
     753      owl_function_makemsg("%s = '%s'", owl_variable_get_name(v), tostring);
     754    else
     755      owl_function_makemsg("%s = <null>", owl_variable_get_name(v));
    759756    g_free(tostring);
    760757  }   
     
    762759}
    763760 
    764 int owl_variable_set_string(owl_vardict *d, const char *name, const char *newval) {
    765   owl_variable *v;
    766   if (!name) return(-1);
    767   v = owl_dict_find_element(d, name);
    768   if (v == NULL || !v->set_fn) return(-1);
    769   if (v->type!=OWL_VARIABLE_STRING) return(-1);
     761int owl_variable_set_string(owl_variable *v, const char *newval)
     762{
     763  if (v->type != OWL_VARIABLE_STRING) return -1;
    770764  return v->set_fn(v, newval);
    771765}
    772766 
    773 int owl_variable_set_int(owl_vardict *d, const char *name, int newval) {
    774   owl_variable *v;
    775   if (!name) return(-1);
    776   v = owl_dict_find_element(d, name);
    777   if (v == NULL || !v->set_fn) return(-1);
    778   if (v->type!=OWL_VARIABLE_INT && v->type!=OWL_VARIABLE_BOOL) return(-1);
     767int owl_variable_set_int(owl_variable *v, int newval)
     768{
     769  if (v->type != OWL_VARIABLE_INT && v->type != OWL_VARIABLE_BOOL) return -1;
    779770  return v->set_fn(v, &newval);
    780771}
    781772 
    782 int owl_variable_set_bool_on(owl_vardict *d, const char *name) {
    783   return owl_variable_set_int(d,name,1);
    784 }
    785 
    786 int owl_variable_set_bool_off(owl_vardict *d, const char *name) {
    787   return owl_variable_set_int(d,name,0);
    788 }
    789 
    790 CALLER_OWN char *owl_variable_get_tostring(const owl_vardict *d, const char *name)
    791 {
    792   owl_variable *v;
    793   if (!name) return NULL;
    794   v = owl_dict_find_element(d, name);
    795   if (v == NULL) return NULL;
     773int owl_variable_set_bool_on(owl_variable *v)
     774{
     775  if (v->type != OWL_VARIABLE_BOOL) return -1;
     776  return owl_variable_set_int(v, true);
     777}
     778
     779int owl_variable_set_bool_off(owl_variable *v)
     780{
     781  if (v->type != OWL_VARIABLE_BOOL) return -1;
     782  return owl_variable_set_int(v, false);
     783}
     784
     785CALLER_OWN char *owl_variable_get_tostring(const owl_variable *v)
     786{
    796787  return v->get_tostring_fn(v, v->get_fn(v));
    797788}
    798789
    799 CALLER_OWN char *owl_variable_get_default_tostring(const owl_vardict *d, const char *name)
    800 {
    801   owl_variable *v;
    802   if (!name) return NULL;
    803   v = owl_dict_find_element(d, name);
    804   if (v == NULL) return NULL;
     790CALLER_OWN char *owl_variable_get_default_tostring(const owl_variable *v)
     791{
    805792  if (v->type == OWL_VARIABLE_INT || v->type == OWL_VARIABLE_BOOL) {
    806793    return v->get_tostring_fn(v, &(v->ival_default));
     
    812799owl_variable *owl_variable_get_var(const owl_vardict *d, const char *name)
    813800{
    814   owl_variable *v;
    815   if (!name) return(NULL);
    816   v = owl_dict_find_element(d, name);
    817   if (v == NULL) return NULL;
    818   return v;
     801  if (name == NULL) return NULL;
     802  return owl_dict_find_element(d, name);
    819803}
    820804
    821805/* returns a reference */
    822 const void *owl_variable_get(const owl_vardict *d, const char *name)
    823 {
    824   const owl_variable *v = owl_variable_get_var(d, name);
    825   if(v == NULL) return NULL;
     806const void *owl_variable_get(const owl_variable *v)
     807{
    826808  return v->get_fn(v);
    827809}
    828810
    829811/* returns a reference */
    830 const char *owl_variable_get_string(const owl_vardict *d, const char *name) {
     812const char *owl_variable_get_string(const owl_variable *v)
     813{
    831814  /* XXX TODO: Put type checking back in */
    832   return owl_variable_get(d, name);
     815  return owl_variable_get(v);
    833816}
    834817
    835818/* returns a reference */
    836 const void *owl_variable_get_other(const owl_vardict *d, const char *name) {
     819const void *owl_variable_get_other(const owl_variable *v)
     820{
    837821  /* XXX TODO: Put type checking back in */
    838   return owl_variable_get(d, name);
    839 }
    840 
    841 int owl_variable_get_int(const owl_vardict *d, const char *name) {
     822  return owl_variable_get(v);
     823}
     824
     825int owl_variable_get_int(const owl_variable *v)
     826{
    842827  /* XXX TODO: Put type checking back in */
    843   const int *pi = owl_variable_get(d, name);
     828  const int *pi = owl_variable_get(v);
    844829  if (!pi) return(-1);
    845830  return(*pi);
    846831}
    847832
    848 int owl_variable_get_bool(const owl_vardict *d, const char *name) {
     833int owl_variable_get_bool(const owl_variable *v)
     834{
    849835  /* XXX TODO: Put type checking back in */
    850   const int *pi = owl_variable_get(d, name);
     836  const int *pi = owl_variable_get(v);
    851837  if (!pi) return(-1);
    852838  return(*pi);
    853839}
    854840
    855 void owl_variable_describe(const owl_vardict *d, const char *name, owl_fmtext *fm) {
     841void owl_variable_describe(const owl_variable *v, owl_fmtext *fm)
     842{
     843  char *tostring = owl_variable_get_default_tostring(v);
    856844  char *default_buf;
    857   owl_variable *v;
    858 
    859   if (!name
    860       || (v = owl_dict_find_element(d, name)) == NULL) {
    861     owl_fmtext_appendf_normal(fm, "     No such variable '%s'\n", name);
    862     return;
    863   }
    864   if (v->type == OWL_VARIABLE_INT || v->type == OWL_VARIABLE_BOOL) {
    865     default_buf = v->get_tostring_fn(v, &(v->ival_default));
    866   } else {
    867     default_buf = v->get_tostring_fn(v, v->pval_default);
    868   }
    869   owl_fmtext_appendf_normal(fm, OWL_TABSTR "%-20s - %s (default: '%s')\n",
    870                             v->name,
    871                             owl_variable_get_summary(v), default_buf);
     845
     846  if (tostring)
     847    default_buf = g_strdup_printf("'%s'", tostring);
     848  else
     849    default_buf = g_strdup("<null>");
     850  owl_fmtext_appendf_normal(fm, OWL_TABSTR "%-20s - %s (default: %s)\n",
     851                            owl_variable_get_name(v),
     852                            owl_variable_get_summary(v), default_buf);
    872853  g_free(default_buf);
    873 }
    874 
    875 void owl_variable_get_help(const owl_vardict *d, const char *name, owl_fmtext *fm) {
     854  g_free(tostring);
     855}
     856
     857void owl_variable_get_help(const owl_variable *v, owl_fmtext *fm) {
    876858  char *tostring;
    877   owl_variable *v;
    878 
    879   if (!name
    880       || (v = owl_dict_find_element(d, name)) == NULL) {
    881     owl_fmtext_append_normal(fm, "No such variable...\n");
    882     return;
    883   }
    884859
    885860  owl_fmtext_append_bold(fm, "OWL VARIABLE\n\n");
    886861  owl_fmtext_append_normal(fm, OWL_TABSTR);
    887   owl_fmtext_append_normal(fm, name);
     862  owl_fmtext_append_normal(fm, v->name);
    888863  owl_fmtext_append_normal(fm, " - ");
    889864  owl_fmtext_append_normal(fm, v->summary);
     
    891866
    892867  owl_fmtext_append_normal(fm, "Current:        ");
    893   tostring = owl_variable_get_tostring(d, name);
    894   owl_fmtext_append_normal(fm, tostring);
     868  tostring = owl_variable_get_tostring(v);
     869  if (tostring)
     870    owl_fmtext_append_normal(fm, tostring);
     871  else
     872    owl_fmtext_append_normal(fm, "<null>");
    895873  g_free(tostring);
    896874  owl_fmtext_append_normal(fm, "\n\n");
    897875
    898876
    899   if (v->type == OWL_VARIABLE_INT || v->type == OWL_VARIABLE_BOOL) {
    900     tostring = v->get_tostring_fn(v, &(v->ival_default));
    901   } else {
    902     tostring = v->get_tostring_fn(v, v->pval_default);
    903   }
     877  tostring = owl_variable_get_default_tostring(v);
    904878  owl_fmtext_append_normal(fm, "Default:        ");
    905   owl_fmtext_append_normal(fm, tostring);
     879  if (tostring)
     880    owl_fmtext_append_normal(fm, tostring);
     881  else
     882    owl_fmtext_append_normal(fm, "<null>");
    906883  owl_fmtext_append_normal(fm, "\n\n");
    907884
Note: See TracChangeset for help on using the changeset viewer.