Changeset 0d935a1 for variable.c


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.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.