]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - scheduler/printers.c
Merge changes from CUPS 1.4svn-r7594.
[thirdparty/cups.git] / scheduler / printers.c
index ce03647b4885d980ac7dcdfbcf23474962b6e52d..a2e71fb931bc698d363f0065f5a17464c5d7db4b 100644 (file)
@@ -1236,6 +1236,23 @@ cupsdLoadAllPrinters(void)
        break;
       }
     }
+    else if (!strcasecmp(line, "Attribute") && value)
+    {
+      for (valueptr = value; *valueptr && !isspace(*valueptr & 255); valueptr ++);
+
+      if (!*valueptr)
+        cupsdLogMessage(CUPSD_LOG_ERROR,
+                       "Syntax error on line %d of printers.conf.", linenum);
+      else
+      {
+        for (; *valueptr && isspace(*valueptr & 255); *valueptr++ = '\0');
+
+        cupsdSetPrinterAttr(p, value, valueptr);
+
+       if (!strncmp(value, "marker-", 7))
+         p->marker_time = time(NULL);
+      }
+    }
     else
     {
      /*
@@ -1320,6 +1337,7 @@ cupsdSaveAllPrinters(void)
   struct tm            *curdate;       /* Current date */
   cups_option_t                *option;        /* Current option */
   const char           *ptr;           /* Pointer into info/location */
+  ipp_attribute_t      *marker;        /* Current marker attribute */
 
 
  /*
@@ -1483,6 +1501,46 @@ cupsdSaveAllPrinters(void)
         i --, option ++)
       cupsFilePrintf(fp, "Option %s %s\n", option->name, option->value);
 
+    if ((marker = ippFindAttribute(printer->attrs, "marker-colors",
+                                   IPP_TAG_NAME)) != NULL)
+    {
+      cupsFilePrintf(fp, "Attribute %s %s", marker->name,
+                     marker->values[0].string.text);
+      for (i = 1; i < marker->num_values; i ++)
+        cupsFilePrintf(fp, ",%s", marker->values[i].string.text);
+      cupsFilePuts(fp, "\n");
+    }
+
+    if ((marker = ippFindAttribute(printer->attrs, "marker-levels",
+                                   IPP_TAG_INTEGER)) != NULL)
+    {
+      cupsFilePrintf(fp, "Attribute %s %d", marker->name,
+                     marker->values[0].integer);
+      for (i = 1; i < marker->num_values; i ++)
+        cupsFilePrintf(fp, ",%d", marker->values[i].integer);
+      cupsFilePuts(fp, "\n");
+    }
+
+    if ((marker = ippFindAttribute(printer->attrs, "marker-names",
+                                   IPP_TAG_NAME)) != NULL)
+    {
+      cupsFilePrintf(fp, "Attribute %s %s", marker->name,
+                     marker->values[0].string.text);
+      for (i = 1; i < marker->num_values; i ++)
+        cupsFilePrintf(fp, ",%s", marker->values[i].string.text);
+      cupsFilePuts(fp, "\n");
+    }
+
+    if ((marker = ippFindAttribute(printer->attrs, "marker-types",
+                                   IPP_TAG_KEYWORD)) != NULL)
+    {
+      cupsFilePrintf(fp, "Attribute %s %s", marker->name,
+                     marker->values[0].string.text);
+      for (i = 1; i < marker->num_values; i ++)
+        cupsFilePrintf(fp, ",%s", marker->values[i].string.text);
+      cupsFilePuts(fp, "\n");
+    }
+
     cupsFilePuts(fp, "</Printer>\n");
 
 #ifdef __sgi
@@ -1762,6 +1820,8 @@ cupsdSetPrinterAttr(
         value = ptr;
     }
   }
+
+  cupsdMarkDirty(CUPSD_DIRTY_PRINTERS);
 }
 
 
@@ -2314,6 +2374,28 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)/* I - Printer to setup */
 
           p->type |= CUPS_PRINTER_COMMANDS;
         }
+       else if (!(p->type & CUPS_PRINTER_COMMANDS))
+       {
+        /*
+         * See if this is a PostScript device without a command filter...
+         */
+
+         for (i = 0; i < ppd->num_filters; i ++)
+           if (!strncasecmp(ppd->filters[i],
+                            "application/vnd.cups-postscript", 31))
+             break;
+
+          if (i < ppd->num_filters)
+         {
+          /*
+           * Add the generic PostScript command filter...
+           */
+
+           add_printer_filter(p, p->filetype,
+                              "application/vnd.cups-command 0 commandtops");
+           p->type |= CUPS_PRINTER_COMMANDS;
+         }
+       }
 
         if (p->type & CUPS_PRINTER_COMMANDS)
        {