}
monetary_finish (struct localedef_t *locale){  struct locale_monetary_t *monetary    = locale->categories[LC_MONETARY].monetary;#define TEST_ELEM(cat)							      \  if (monetary->cat == NULL && !be_quiet)				      \    error (0, 0, _("field `%s' in category `%s' not defined"),		      \	   #cat, "LC_MONETARY")  TEST_ELEM (int_curr_symbol);  TEST_ELEM (currency_symbol);  TEST_ELEM (mon_decimal_point);  TEST_ELEM (mon_thousands_sep);  TEST_ELEM (positive_sign);  TEST_ELEM (negative_sign);  /* The international currency symbol must come from ISO 4217.  */  if (monetary->int_curr_symbol != NULL)    {      if (strlen (monetary->int_curr_symbol) != 4 && !be_quiet)	error (0, 0, _("\value of field `int_curr_symbol' in category `LC_MONETARY' has wrong length"));      else if (bsearch (monetary->int_curr_symbol, valid_int_curr,			NR_VALID_INT_CURR, sizeof (const char *),			(comparison_fn_t) curr_strcmp) == NULL	       && !be_quiet)	error (0, 0, _("\value of field `int_curr_symbol' in category `LC_MONETARY' does \not correspond to a valid name in ISO 4217"));    }  /* The decimal point must not be empty.  This is not said explicitly     in POSIX but ANSI C (ISO/IEC 9899) says in 4.4.2.1 it has to be     != "".  */  if (monetary->mon_decimal_point[0] == '\0' && !be_quiet)    {      error (0, 0, _("\value for field `%s' in category `%s' must not be the empty string"),	     "mon_decimal_point", "LC_MONETARY");    }  if (monetary->mon_grouping_act == 0 && !be_quiet)    error (0, 0, _("field `%s' in category `%s' not defined"),	   "mon_grouping", "LC_MONETARY");#undef TEST_ELEM#define TEST_ELEM(cat, min, max)					      \  if (monetary->cat == -2 && !be_quiet)					      \    error (0, 0, _("field `%s' in category `%s' not defined"),		      \	   #cat, "LC_MONETARY");					      \  else if ((monetary->cat < min || monetary->cat > max) && !be_quiet)	      \    error (0, 0, _("\value for field `%s' in category `%s' must be in range %d...%d"),	      \	   #cat, "LC_MONETARY", min, max)#if 0										/* The following two test are not really necessary because all values    the variable could have are valid.  */  TEST_ELEM (int_frac_digits, -128, 127);	/* No range check.  */  TEST_ELEM (frac_digits, -128, 127);		/* No range check.  */#endif  TEST_ELEM (p_cs_precedes, -1, 1);  TEST_ELEM (p_sep_by_space, -1, 2);  TEST_ELEM (n_cs_precedes, -1, 1);  TEST_ELEM (n_sep_by_space, -1, 2);  TEST_ELEM (p_sign_posn, -1, 4);  TEST_ELEM (n_sign_posn, -1, 4);}