/*
- * "$Id: mark.c 5190 2006-02-27 02:42:07Z mike $"
+ * "$Id: mark.c 5528 2006-05-15 20:03:12Z mike $"
*
* Option marking routines for the Common UNIX Printing System (CUPS).
*
ppdFindOption(ppd_file_t *ppd, /* I - PPD file data */
const char *option) /* I - Option/Keyword name */
{
- ppd_option_t key; /* Option search key */
-
-
/*
* Range check input...
*/
if (!ppd || !option)
return (NULL);
- /*
- * Search...
- */
+ if (ppd->options)
+ {
+ /*
+ * Search in the array...
+ */
+
+ ppd_option_t key; /* Option search key */
+
+
+ strlcpy(key.keyword, option, sizeof(key.keyword));
- strlcpy(key.keyword, option, sizeof(key.keyword));
+ return ((ppd_option_t *)cupsArrayFind(ppd->options, &key));
+ }
+ else
+ {
+ /*
+ * Search in each group...
+ */
- return ((ppd_option_t *)cupsArrayFind(ppd->options, &key));
+ int i, j; /* Looping vars */
+ ppd_group_t *group; /* Current group */
+ ppd_option_t *optptr; /* Current option */
+
+
+ for (i = ppd->num_groups, group = ppd->groups; i > 0; i --, group ++)
+ for (j = group->num_options, optptr = group->options;
+ j > 0;
+ j --, optptr ++)
+ if (!strcasecmp(optptr->keyword, option))
+ return (optptr);
+
+ return (NULL);
+ }
}
int i, j; /* Looping vars */
ppd_option_t *o; /* Option pointer */
ppd_choice_t *c; /* Choice pointer */
+ struct lconv *loc; /* Locale data */
DEBUG_printf(("ppdMarkOption(ppd=%p, option=\"%s\", choice=\"%s\")\n",
if ((o = ppdFindOption(ppd, option)) == NULL)
return (0);
+ loc = localeconv();
if (!strncasecmp(choice, "Custom.", 7))
{
ppd_coption_t *coption; /* Custom option */
ppd_cparam_t *cparam; /* Custom parameter */
- char units[33]; /* Custom points units */
+ char *units; /* Custom points units */
if ((coption = ppdFindCustomOption(ppd, option)) != NULL)
{
case PPD_CUSTOM_CURVE :
case PPD_CUSTOM_INVCURVE :
case PPD_CUSTOM_REAL :
- cparam->current.custom_real = atof(choice + 7);
+ cparam->current.custom_real = _cupsStrScand(choice + 7, NULL,
+ loc);
break;
case PPD_CUSTOM_POINTS :
- if (sscanf(choice + 7, "%f%s", &(cparam->current.custom_points),
- units) < 2)
- strcpy(units, "pt");
-
- if (!strcasecmp(units, "cm"))
- cparam->current.custom_points *= 72.0 / 2.54;
- else if (!strcasecmp(units, "mm"))
- cparam->current.custom_points *= 72.0 / 25.4;
- else if (!strcasecmp(units, "m"))
- cparam->current.custom_points *= 72.0 / 0.0254;
- else if (!strcasecmp(units, "in"))
- cparam->current.custom_points *= 72.0;
- else if (!strcasecmp(units, "ft"))
- cparam->current.custom_points *= 12 * 72.0;
+ cparam->current.custom_points = _cupsStrScand(choice + 7,
+ &units, loc);
+
+ if (units)
+ {
+ if (!strcasecmp(units, "cm"))
+ cparam->current.custom_points *= 72.0 / 2.54;
+ else if (!strcasecmp(units, "mm"))
+ cparam->current.custom_points *= 72.0 / 25.4;
+ else if (!strcasecmp(units, "m"))
+ cparam->current.custom_points *= 72.0 / 0.0254;
+ else if (!strcasecmp(units, "in"))
+ cparam->current.custom_points *= 72.0;
+ else if (!strcasecmp(units, "ft"))
+ cparam->current.custom_points *= 12 * 72.0;
+ }
break;
case PPD_CUSTOM_INT :
ppd_coption_t *coption; /* Custom option */
ppd_cparam_t *cparam; /* Custom parameter */
- char units[33]; /* Custom points units */
+ char *units; /* Custom points units */
int num_vals; /* Number of values */
cups_option_t *vals, /* Values */
*val; /* Value */
case PPD_CUSTOM_CURVE :
case PPD_CUSTOM_INVCURVE :
case PPD_CUSTOM_REAL :
- cparam->current.custom_real = atof(val->value);
+ cparam->current.custom_real = _cupsStrScand(val->value, NULL,
+ loc);
break;
case PPD_CUSTOM_POINTS :
- if (sscanf(val->value, "%f%s", &(cparam->current.custom_points),
- units) < 2)
- strcpy(units, "pt");
-
- if (!strcasecmp(units, "cm"))
- cparam->current.custom_points *= 72.0 / 2.54;
- else if (!strcasecmp(units, "mm"))
- cparam->current.custom_points *= 72.0 / 25.4;
- else if (!strcasecmp(units, "m"))
- cparam->current.custom_points *= 72.0 / 0.0254;
- else if (!strcasecmp(units, "in"))
- cparam->current.custom_points *= 72.0;
- else if (!strcasecmp(units, "ft"))
- cparam->current.custom_points *= 12 * 72.0;
+ cparam->current.custom_points = _cupsStrScand(val->value, &units,
+ loc);
+
+ if (units)
+ {
+ if (!strcasecmp(units, "cm"))
+ cparam->current.custom_points *= 72.0 / 2.54;
+ else if (!strcasecmp(units, "mm"))
+ cparam->current.custom_points *= 72.0 / 25.4;
+ else if (!strcasecmp(units, "m"))
+ cparam->current.custom_points *= 72.0 / 0.0254;
+ else if (!strcasecmp(units, "in"))
+ cparam->current.custom_points *= 72.0;
+ else if (!strcasecmp(units, "ft"))
+ cparam->current.custom_points *= 12 * 72.0;
+ }
break;
case PPD_CUSTOM_INT :
/*
- * End of "$Id: mark.c 5190 2006-02-27 02:42:07Z mike $".
+ * End of "$Id: mark.c 5528 2006-05-15 20:03:12Z mike $".
*/