- char const *loc_name;
- MUSCLE_USER_NAME_CONVERT (loc_name, "percent_define_loc(", variable, ")");
- complain_at(muscle_location_decode (loc_name),
- _("invalid value for %%define variable `%s'"), variable);
+ for (; *values; ++values)
+ {
+ char const * const *variablep = values;
+ char const *name;
+ char *value;
+
+ MUSCLE_USER_NAME_CONVERT (name, "percent_define(", *variablep, ")");
+
+ value = muscle_string_decode (name);
+ if (value)
+ {
+ for (++values; *values; ++values)
+ {
+ if (0 == strcmp (value, *values))
+ break;
+ }
+ if (!*values)
+ {
+ location loc = muscle_percent_define_get_loc (*variablep);
+ complain_at(loc,
+ _("invalid value for %%define variable `%s': `%s'"),
+ *variablep, value);
+ for (values = variablep + 1; *values; ++values)
+ complain_at (loc, _("accepted value: `%s'"), *values);
+ }
+ else
+ {
+ while (*values)
+ ++values;
+ }
+ free (value);
+ }
+ else
+ fatal(_("undefined %%define variable `%s' passed to"
+ " muscle_percent_define_check_values"),
+ *variablep);
+ }