]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - cups/mark.c
Load cups into easysw/current.
[thirdparty/cups.git] / cups / mark.c
index bb29bcbcfceac78eb56cb8422b11fbbf9d98099c..a7d8fd7bd4dcf7178de2f5bd3bd8ea90997b15b5 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$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).
  *
@@ -241,9 +241,6 @@ ppd_option_t *                              /* O - Pointer to option or NULL */
 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...
   */
@@ -251,13 +248,39 @@ ppdFindOption(ppd_file_t *ppd,            /* I - PPD file data */
   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);
+  }
 }
 
 
@@ -323,6 +346,7 @@ ppdMarkOption(ppd_file_t *ppd,              /* I - PPD file record */
   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",
@@ -354,6 +378,7 @@ ppdMarkOption(ppd_file_t *ppd,              /* I - PPD file record */
   if ((o = ppdFindOption(ppd, option)) == NULL)
     return (0);
 
+  loc = localeconv();
 
   if (!strncasecmp(choice, "Custom.", 7))
   {
@@ -380,7 +405,7 @@ ppdMarkOption(ppd_file_t *ppd,              /* I - PPD file record */
 
       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)
       {
@@ -392,24 +417,27 @@ ppdMarkOption(ppd_file_t *ppd,            /* I - PPD file record */
          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 :
@@ -436,7 +464,7 @@ ppdMarkOption(ppd_file_t *ppd,              /* I - PPD file record */
 
     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 */
@@ -459,24 +487,27 @@ ppdMarkOption(ppd_file_t *ppd,            /* I - PPD file record */
          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 :
@@ -648,5 +679,5 @@ ppd_defaults(ppd_file_t  *ppd,      /* I - PPD file */
 
 
 /*
- * 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 $".
  */