]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Merge changes from CUPS 1.4svn-r8454.
authormsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>
Wed, 18 Mar 2009 17:09:48 +0000 (17:09 +0000)
committermsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>
Wed, 18 Mar 2009 17:09:48 +0000 (17:09 +0000)
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current@1311 a1ca3aef-8c08-0410-bb20-df032aa958be

16 files changed:
CHANGES-1.3.txt
CHANGES.txt
backend/dnssd.c
cups/emit.c
doc/help/ref-cupsd-conf.html.in
filter/rastertohp.c
locale/cups_es.po
man/cupsd.conf.man.in
packaging/LICENSE.rtf
scheduler/conf.c
scheduler/cups-driverd.cxx
scheduler/ipp.c
scheduler/job.c
scheduler/job.h
scheduler/main.c
scheduler/sysman.c

index a6f086137ad67d4d487d9282dab2a8192da299eb..dd58bdff4f00e2d8693aacda95a12d5e62f6fdda 100644 (file)
@@ -5,6 +5,10 @@ CHANGES IN CUPS V1.3.10
 
        - Documentation fixes (STR #2994, STR #2995, STR #3008, STR #3056,
          STR #3057)
+       - The scheduler did not support the job-hold-until attribute with the
+         Restart-Job operation (STR #3130)
+       - The rastertohp driver did not set the 1-sided printing mode when
+         needed (STR #3131)
        - Now use a wrapper program instead of our fork of the Xpdf code to
          support printing of PDF files. The new wrapper supports using Xpdf,
          poppler, or Ghostscript to convert PDF files to PostScript (STR #3129)
index ef8e6ff695c9c08c2b614e7b6e2f64d037d8ce80..7cacef1d8eef34795ebe6708aea02fbed7bf193c 100644 (file)
@@ -1,9 +1,13 @@
-CHANGES.txt - 2009-03-04
+CHANGES.txt - 2009-03-18
 ------------------------
 
 CHANGES IN CUPS V1.4b3
 
        - Documentation fixes (STR #3044, STR #3057)
+       - CUPS-Get-PPDs did not work properly when filtering by language,
+         product, or psversion (STR #3136)
+       - The scheduler now kills job filters when it takes more than 30 seconds
+         (configurable) to cancel or hold the job.
        - The cupstestppd program did not validate the capitalization of
          filenames in the PPD file.
        - The cupstestppd program did not validate the PageSize and PageRegion
index f5687f3c3ddb1db206699c6cd62ed9bfe17ac2e6..47a8b608eedc5ce29bc79dfa9af6dadc1b6b1a02 100644 (file)
@@ -55,7 +55,8 @@ typedef struct
   char         *name,                  /* Service name */
                *domain,                /* Domain name */
                *fullName,              /* Full name */
-               *make_and_model;        /* Make and model from TXT record */
+               *make_and_model,        /* Make and model from TXT record */
+               *device_id;             /* 1284 device ID from TXT record */
   cups_devtype_t type;                 /* Device registration type */
   int          priority,               /* Priority associated with type */
                cups_shared,            /* CUPS shared printer? */
@@ -307,7 +308,7 @@ main(int  argc,                             /* I - Number of command-line args */
                            best->cups_shared ? "/cups" : "/");
 
            cupsBackendReport("network", device_uri, best->make_and_model,
-                             best->name, NULL, NULL);
+                             best->name, best->device_id, NULL);
            best->sent = 1;
            best       = device;
          }
@@ -331,7 +332,7 @@ main(int  argc,                             /* I - Number of command-line args */
                        best->cups_shared ? "/cups" : "/");
 
        cupsBackendReport("network", device_uri, best->make_and_model,
-                         best->name, NULL, NULL);
+                         best->name, best->device_id, NULL);
        best->sent = 1;
       }
     }
@@ -593,8 +594,8 @@ query_callback(
 {
   cups_array_t *devices;               /* Device array */
   char         name[1024],             /* Service name */
-               *ptr;                   /* Pointer into name */
-  cups_device_t        key,                    /* Search key */
+               *ptr;                   /* Pointer into string */
+  cups_device_t        dkey,                   /* Search key */
                *device;                /* Device */
 
 
@@ -617,123 +618,183 @@ query_callback(
   * Lookup the service in the devices array.
   */
 
-  devices  = (cups_array_t *)context;
-  key.name = name;
+  devices   = (cups_array_t *)context;
+  dkey.name = name;
 
   unquote(name, fullName, sizeof(name));
 
-  if ((key.domain = strstr(name, "._tcp.")) != NULL)
-    key.domain += 6;
+  if ((dkey.domain = strstr(name, "._tcp.")) != NULL)
+    dkey.domain += 6;
   else
-    key.domain = (char *)"local.";
+    dkey.domain = (char *)"local.";
 
   if ((ptr = strstr(name, "._")) != NULL)
     *ptr = '\0';
 
   if (strstr(fullName, "_ipp._tcp.") ||
       strstr(fullName, "_ipp-tls._tcp."))
-    key.type = CUPS_DEVICE_IPP;
+    dkey.type = CUPS_DEVICE_IPP;
   else if (strstr(fullName, "_fax-ipp._tcp."))
-    key.type = CUPS_DEVICE_FAX_IPP;
+    dkey.type = CUPS_DEVICE_FAX_IPP;
   else if (strstr(fullName, "_printer._tcp."))
-    key.type = CUPS_DEVICE_PRINTER;
+    dkey.type = CUPS_DEVICE_PRINTER;
   else if (strstr(fullName, "_pdl-datastream._tcp."))
-    key.type = CUPS_DEVICE_PDL_DATASTREAM;
+    dkey.type = CUPS_DEVICE_PDL_DATASTREAM;
   else
-    key.type = CUPS_DEVICE_RIOUSBPRINT;
+    dkey.type = CUPS_DEVICE_RIOUSBPRINT;
 
-  for (device = cupsArrayFind(devices, &key);
+  for (device = cupsArrayFind(devices, &dkey);
        device;
        device = cupsArrayNext(devices))
   {
-    if (strcasecmp(device->name, key.name) ||
-        strcasecmp(device->domain, key.domain))
+    if (strcasecmp(device->name, dkey.name) ||
+        strcasecmp(device->domain, dkey.domain))
     {
       device = NULL;
       break;
     }
-    else if (device->type == key.type)
+    else if (device->type == dkey.type)
     {
      /*
       * Found it, pull out the priority and make and model from the TXT
       * record and save it...
       */
 
-      const void *value;               /* Pointer to value */
-      uint8_t  valueLen;               /* Length of value (max 255) */
-      char     make_and_model[512],    /* Manufacturer and model */
-               model[256],             /* Model */
-               priority[256];          /* Priority */
+      const uint8_t    *data,          /* Pointer into data */
+                       *datanext,      /* Next key/value pair */
+                       *dataend;       /* End of entire TXT record */
+      uint8_t          datalen;        /* Length of current key/value pair */
+      char             key[256],       /* Key string */
+                       value[256],     /* Value string */
+                       make_and_model[512],
+                                       /* Manufacturer and model */
+                       model[256],     /* Model */
+                       device_id[2048];/* 1284 device ID */
 
 
-      value = TXTRecordGetValuePtr(rdlen, rdata, "priority", &valueLen);
+      device_id[0]      = '\0';
+      make_and_model[0] = '\0';
 
-      if (value && valueLen)
+      strcpy(model, "Unknown");
+
+      for (data = rdata, dataend = data + rdlen;
+           data < dataend;
+           data = datanext)
       {
-       memcpy(priority, value, valueLen);
-       priority[valueLen] = '\0';
-       device->priority = atoi(priority);
-      }
+       /*
+        * Read a key/value pair starting with an 8-bit length.  Since the
+       * length is 8 bits and the size of the key/value buffers is 256, we
+       * don't need to check for overflow...
+       */
 
-      if ((value = TXTRecordGetValuePtr(rdlen, rdata, "usb_MFG",
-                                       &valueLen)) == NULL)
-       value = TXTRecordGetValuePtr(rdlen, rdata, "usb_MANUFACTURER",
-                                    &valueLen);
+        datalen = *data++;
 
-      if (value && valueLen)
-      {
-       memcpy(make_and_model, value, valueLen);
-       make_and_model[valueLen] = '\0';
-      }
-      else
-       make_and_model[0] = '\0';
+        if (!datalen || (data + datalen) >= dataend)
+         break;
 
-      if ((value = TXTRecordGetValuePtr(rdlen, rdata, "usb_MDL",
-                                       &valueLen)) == NULL)
-       value = TXTRecordGetValuePtr(rdlen, rdata, "usb_MODEL", &valueLen);
+        datanext = data + datalen;
 
-      if (value && valueLen)
-      {
-       memcpy(model, value, valueLen);
-       model[valueLen] = '\0';
-      }
-      else if ((value = TXTRecordGetValuePtr(rdlen, rdata, "product",
-                                            &valueLen)) != NULL && valueLen > 2)
-      {
-       if (((char *)value)[0] == '(')
+        for (ptr = key; data < datanext && *data != '='; data ++)
+         *ptr++ = *data;
+       *ptr = '\0';
+
+       if (data < datanext && *data == '=')
        {
-        /*
-         * Strip parenthesis...
-         */
+         data ++;
 
-         memcpy(model, value + 1, valueLen - 2);
-         model[valueLen - 2] = '\0';
+         if (data < datanext)
+           memcpy(value, data, datanext - data);
+         value[datanext - data] = '\0';
        }
        else
+         continue;
+
+        if (!strncasecmp(key, "usb_", 4))
        {
-         memcpy(model, value, valueLen);
-         model[valueLen] = '\0';
-       }
+        /*
+         * Add USB device ID information...
+         */
 
-       if (!strcasecmp(model, "GPL Ghostscript") ||
-           !strcasecmp(model, "GNU Ghostscript") ||
-           !strcasecmp(model, "ESP Ghostscript"))
+         ptr = device_id + strlen(device_id);
+         snprintf(ptr, sizeof(device_id) - (ptr - device_id), "%s:%s;",
+                  key + 4, value);
+        }
+
+        if (!strcasecmp(key, "usb_MFG") || !strcasecmp(key, "usb_MANU") ||
+           !strcasecmp(key, "usb_MANUFACTURER"))
+         strcpy(make_and_model, value);
+        else if (!strcasecmp(key, "usb_MDL") || !strcasecmp(key, "usb_MODEL"))
+         strcpy(model, value);
+       else if (!strcasecmp(key, "product") && !strstr(value, "Ghostscript"))
        {
-         if ((value = TXTRecordGetValuePtr(rdlen, rdata, "ty",
-                                           &valueLen)) != NULL)
+         if (value[0] == '(')
          {
-           memcpy(model, value, valueLen);
-           model[valueLen] = '\0';
+          /*
+           * Strip parenthesis...
+           */
 
-           if ((ptr = strchr(model, ',')) != NULL)
+            if ((ptr = value + strlen(value) - 1) > value && *ptr == ')')
              *ptr = '\0';
+
+           strcpy(model, value + 1);
          }
          else
-           strcpy(model, "Unknown");
+           strcpy(model, value);
+        }
+       else if (!strcasecmp(key, "ty"))
+       {
+          strcpy(model, value);
+
+         if ((ptr = strchr(model, ',')) != NULL)
+           *ptr = '\0';
        }
+       else if (!strcasecmp(key, "priority"))
+         device->priority = atoi(value);
+       else if ((device->type == CUPS_DEVICE_IPP ||
+                 device->type == CUPS_DEVICE_PRINTER) &&
+                !strcasecmp(key, "printer-type"))
+       {
+        /*
+         * This is a CUPS printer!
+         */
+
+         device->cups_shared = 1;
+
+         if (device->type == CUPS_DEVICE_PRINTER)
+           device->sent = 1;
+       }
+      }
+
+      if (device->device_id)
+        free(device->device_id);
+
+      if (!device_id[0] && strcmp(model, "Unknown"))
+      {
+        if (make_and_model[0])
+         snprintf(device_id, sizeof(device_id), "MFG:%s;MDL:%s;",
+                  make_and_model, model);
+        else if (!strncasecmp(model, "designjet ", 10))
+         snprintf(device_id, sizeof(device_id), "MFG:HP;MDL:%s", model + 10);
+        else if (!strncasecmp(model, "stylus ", 7))
+         snprintf(device_id, sizeof(device_id), "MFG:EPSON;MDL:%s", model + 7);
+        else if ((ptr = strchr(model, ' ')) != NULL)
+       {
+        /*
+         * Assume the first word is the make...
+         */
+
+          memcpy(make_and_model, model, ptr - model);
+         make_and_model[ptr - model] = '\0';
+
+         snprintf(device_id, sizeof(device_id), "MFG:%s;MDL:%s",
+                  make_and_model, ptr + 1);
+        }
       }
+
+      if (device_id[0])
+        device->device_id = strdup(device_id);
       else
-       strcpy(model, "Unknown");
+        device->device_id = NULL;
 
       if (device->make_and_model)
        free(device->make_and_model);
@@ -742,25 +803,11 @@ query_callback(
       {
        strlcat(make_and_model, " ", sizeof(make_and_model));
        strlcat(make_and_model, model, sizeof(make_and_model));
+
        device->make_and_model = strdup(make_and_model);
       }
       else
        device->make_and_model = strdup(model);
-
-      if ((device->type == CUPS_DEVICE_IPP ||
-          device->type == CUPS_DEVICE_PRINTER) &&
-         TXTRecordGetValuePtr(rdlen, rdata, "printer-type", &valueLen))
-      {
-       /*
-       * This is a CUPS printer!
-       */
-
-       device->cups_shared = 1;
-
-       if (device->type == CUPS_DEVICE_PRINTER)
-         device->sent = 1;
-      }
-
       break;
     }
   }
index 6934366fb4726f65472125134763ab3a126ef1d0..3389607f95f7652e349350c418c57d1a336db0cd 100644 (file)
@@ -707,8 +707,8 @@ ppdEmitString(ppd_file_t    *ppd,   /* I - PPD file record */
                                              choices[i]->option->keyword))
                   != NULL)
       {
-        bufsize += 17 + strlen(choices[i]->option->keyword) + 6;
-                                       /* %%BeginFeature: *keyword True\n */
+        bufsize += 23 + strlen(choices[i]->option->keyword) + 6;
+                                       /* %%BeginFeature: *Customkeyword True\n */
 
         
         for (cparam = (ppd_cparam_t *)cupsArrayFirst(coption->params);
index 638c49d812a18cb1615fa24a37fa6dec0b87c6a2..28d16de4a0febd722cbf00dbcf46e8ed34c6a22a 100644 (file)
@@ -1208,6 +1208,9 @@ printer.</P>
        HREF="#JobRetryInterval"><CODE>JobRetryInterval</CODE></A>
        directive controls the value of N</LI>
 
+       <LI><CODE>retry-this-job</CODE> - Retry the current job immediately
+       and indefinitely.</LI>
+
        <LI><CODE>stop-printer</CODE> - Stop the printer and keep
        the job for future printing; this is the default
        value</LI>
@@ -1510,6 +1513,22 @@ print queues whose error policy is <CODE>retry-job</CODE>. The
 default is 30 seconds.</P>
 
 
+<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.4</SPAN><A NAME="JobKillDelay">JobKillDelay</A></H2>
+
+<H3>Examples</H3>
+
+<PRE CLASS="command">
+JobKillDelay 30
+JobKillDelay 120
+</PRE>
+
+<H3>Description</H3>
+
+<P>The <CODE>JobKillDelay</CODE> directive specifies the number of seconds to
+wait before killing the filters and backend associated with a canceled or held
+job. The default is 30 seconds.</P>
+
+
 <H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2</SPAN><A NAME="JobRetryLimit">JobRetryLimit</A></H2>
 
 <H3>Examples</H3>
index 95a87860f9c767d6b6b4e2ffdd22ee85835f0cb2..f5f82dc2e786111303c23d6607962fc4f8da65a5 100644 (file)
@@ -4,7 +4,7 @@
  *   Hewlett-Packard Page Control Language filter for the Common UNIX
  *   Printing System (CUPS).
  *
- *   Copyright 2007-2008 by Apple Inc.
+ *   Copyright 2007-2009 by Apple Inc.
  *   Copyright 1993-2007 by Easy Software Products.
  *
  *   These coded instructions, statements, and computer programs are the
@@ -249,10 +249,9 @@ StartPage(ppd_file_t         *ppd, /* I - PPD file */
 
     if (!ppd || ppd->model_number != 2)
     {
-      if (header->Duplex)
-       printf("\033&l%dS",                     /* Set duplex mode */
-               header->Duplex + header->Tumble);
+      int mode = Duplex ? 1 + header->Tumble != 0 : 0;
 
+      printf("\033&l%dS", mode);               /* Set duplex mode */
       printf("\033&l0L");                      /* Turn off perforation skip */
     }
   }
index 04d318f940012e5750aa575f0920013451cc6f21..4891b4d3e2c7993f5a51a04aca1884d87a2016e5 100644 (file)
@@ -17,7 +17,7 @@ msgstr ""
 "Project-Id-Version: CUPS 1.4\n"
 "Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
 "POT-Creation-Date: 2009-03-13 15:08-0700\n"
-"PO-Revision-Date: 2008-12-17 17:32+0100\n"
+"PO-Revision-Date: 2009-03-16 19:35+0100\n"
 "Last-Translator: Juan Pablo González Riopedre <riopedre13@yahoo.es>\n"
 "Language-Team: Spanish\n"
 "MIME-Version: 1.0\n"
@@ -245,31 +245,24 @@ msgstr ""
 "                REF: Página 15, sección 3.2.\n"
 
 msgid "        WARN    Default choices conflicting!\n"
-msgstr ""
-"        ADVERTENCIA    Las preferencias predeterminadas están en conflicto.\n"
+msgstr "        ADVERTENCIA    Las preferencias predeterminadas están en conflicto.\n"
 
 #, c-format
 msgid ""
-"        WARN    Duplex option keyword %s may not work as expected and should "
-"be named Duplex!\n"
+"        WARN    Duplex option keyword %s may not work as expected and should be named Duplex!\n"
 "                REF: Page 122, section 5.17\n"
 msgstr ""
-"        ADVERTENCIA    La clave de opción Duplex %s puede que no funcione "
-"como se espera y debería llamarse Duplex.\n"
+"        ADVERTENCIA    La clave de opción Duplex %s puede que no funcione como se espera y debería llamarse Duplex.\n"
 "                REF: Página 122, sección 5.17\n"
 
-msgid ""
-"        WARN    File contains a mix of CR, LF, and CR LF line endings!\n"
-msgstr ""
-"        ADVERTENCIA    El archivo contiene una mezcla de líneas acabadas en "
-"CR, LF y CR LF.\n"
+msgid "        WARN    File contains a mix of CR, LF, and CR LF line endings!\n"
+msgstr "        ADVERTENCIA    El archivo contiene una mezcla de líneas acabadas en CR, LF y CR LF.\n"
 
 msgid ""
 "        WARN    LanguageEncoding required by PPD 4.3 spec.\n"
 "                REF: Pages 56-57, section 5.3.\n"
 msgstr ""
-"        ADVERTENCIA    Se necesita LanguageEncoding por especificación de "
-"PPD 4.3.\n"
+"        ADVERTENCIA    Se necesita LanguageEncoding por especificación de PPD 4.3.\n"
 "                REF: Páginas 56-57, sección 5.3.\n"
 
 #, c-format
@@ -280,16 +273,11 @@ msgid ""
 "        WARN    Manufacturer required by PPD 4.3 spec.\n"
 "                REF: Pages 58-59, section 5.3.\n"
 msgstr ""
-"        ADVERTENCIA    Se necesita Manufacturer por especificación de PPD "
-"4.3.\n"
+"        ADVERTENCIA    Se necesita Manufacturer por especificación de PPD 4.3.\n"
 "                REF: Páginas 58-59, sección 5.3.\n"
 
-msgid ""
-"        WARN    Non-Windows PPD files should use lines ending with only LF, "
-"not CR LF!\n"
-msgstr ""
-"        ADVERTENCIA    Los archivos PPD que no sean de Windows deben tener "
-"líneas que acaben sólo en LF, no en CR LF.\n"
+msgid "        WARN    Non-Windows PPD files should use lines ending with only LF, not CR LF!\n"
+msgstr "        ADVERTENCIA    Los archivos PPD que no sean de Windows deben tener líneas que acaben sólo en LF, no en CR LF.\n"
 
 #, c-format
 msgid ""
@@ -303,32 +291,28 @@ msgid ""
 "        WARN    PCFileName longer than 8.3 in violation of PPD spec.\n"
 "                REF: Pages 61-62, section 5.3.\n"
 msgstr ""
-"        ADVERTENCIA    PCFileName es mas largo que 8.3 violando la "
-"especificación PPD.\n"
+"        ADVERTENCIA    PCFileName es mas largo que 8.3 violando la especificación PPD.\n"
 "                REF: Páginas 61-62, sección 5.3.\n"
 
 msgid ""
 "        WARN    Protocols contains PJL but JCL attributes are not set.\n"
 "                REF: Pages 78-79, section 5.7.\n"
 msgstr ""
-"        ADVERTENCIA    Los protocolos contienen PJL pero no se especifican "
-"los atributos JCL.\n"
+"        ADVERTENCIA    Los protocolos contienen PJL pero no se especifican los atributos JCL.\n"
 "                REF: Páginas 78-79, sección 5.7.\n"
 
 msgid ""
 "        WARN    Protocols contains both PJL and BCP; expected TBCP.\n"
 "                REF: Pages 78-79, section 5.7.\n"
 msgstr ""
-"        ADVERTENCIA    Los protocolos contienen a ambos, PJL y BCP; se "
-"esperaba TBCP.\n"
+"        ADVERTENCIA    Los protocolos contienen a ambos, PJL y BCP; se esperaba TBCP.\n"
 "                REF: Páginas 78-79, sección 5.7.\n"
 
 msgid ""
 "        WARN    ShortNickName required by PPD 4.3 spec.\n"
 "                REF: Pages 64-65, section 5.3.\n"
 msgstr ""
-"        ADVERTENCIA    Se necesita ShortNickName por especificación de PPD "
-"4.3.\n"
+"        ADVERTENCIA    Se necesita ShortNickName por especificación de PPD 4.3.\n"
 "                REF: Páginas 64-65, sección 5.3.\n"
 
 #, c-format
@@ -337,7 +321,7 @@ msgstr "      %s  %s %s no existe.\n"
 
 #, c-format
 msgid "      %s  %s file \"%s\" has the wrong capitalization!\n"
-msgstr ""
+msgstr "      %s  archivo %s \"%s\" tiene las mayúsculas equivocadas.\n"
 
 #, c-format
 msgid ""
@@ -349,15 +333,11 @@ msgstr ""
 
 #, c-format
 msgid "      %s  Bad UTF-8 \"%s\" translation string for option %s!\n"
-msgstr ""
-"      %s  Cadena de traducción UTF-8 \"%s\" incorrecta para opción %s.\n"
+msgstr "      %s  Cadena de traducción UTF-8 \"%s\" incorrecta para opción %s.\n"
 
 #, c-format
-msgid ""
-"      %s  Bad UTF-8 \"%s\" translation string for option %s, choice %s!\n"
-msgstr ""
-"      %s  Cadena de traducción UTF-8 \"%s\" incorrecta para opción %s, "
-"preferencia %s.\n"
+msgid "      %s  Bad UTF-8 \"%s\" translation string for option %s, choice %s!\n"
+msgstr "      %s  Cadena de traducción UTF-8 \"%s\" incorrecta para opción %s, preferencia %s.\n"
 
 #, c-format
 msgid "      %s  Bad cupsFilter value \"%s\"!\n"
@@ -381,11 +361,11 @@ msgstr "      %s  Idioma incorrecto \"%s\".\n"
 
 #, c-format
 msgid "      %s  Bad spelling of %s - should be %s!\n"
-msgstr ""
+msgstr "      %s  %s mal escrito - debería ser %s.\n"
 
 #, c-format
 msgid "      %s  Cannot provide both APScanAppPath and APScanAppBundleID!\n"
-msgstr ""
+msgstr "      %s  No puede proporcionar APScanAppPath y APScanAppBundleID.\n"
 
 #, c-format
 msgid "      %s  Empty cupsUIConstraints %s!\n"
@@ -397,50 +377,51 @@ msgstr "      %s  Falta cadena de traducción \"%s\" para opción %s.\n"
 
 #, c-format
 msgid "      %s  Missing \"%s\" translation string for option %s, choice %s!\n"
-msgstr ""
-"      %s  Falta cadena de traducción \"%s\" para opción %s, preferencia %s.\n"
+msgstr "      %s  Falta cadena de traducción \"%s\" para opción %s, preferencia %s.\n"
 
 #, c-format
 msgid "      %s  Missing APDialogExtension file \"%s\"\n"
-msgstr ""
+msgstr "      %s  Falta el archivo APDialogExtension \"%s\"\n"
 
 #, c-format
 msgid "      %s  Missing APPrinterIconPath file \"%s\"\n"
-msgstr ""
+msgstr "      %s  Falta el archivo APPrinterIconPath \"%s\"\n"
 
 #, c-format
 msgid "      %s  Missing APPrinterLowInkTool file \"%s\"\n"
-msgstr ""
+msgstr "      %s  Falta el archivo APPrinterLowInkTool \"%s\"\n"
 
 #, c-format
 msgid "      %s  Missing APPrinterUtilityPath file \"%s\"\n"
-msgstr ""
+msgstr "      %s  Falta el archivo APPrinterUtilityPath \"%s\"\n"
 
 #, c-format
 msgid "      %s  Missing APScanAppPath file \"%s\"\n"
-msgstr ""
+msgstr "      %s  Falta el archivo APScanAppPath \"%s\"\n"
 
 #, c-format
 msgid ""
 "      %s  Missing REQUIRED PageRegion option!\n"
 "                REF: Page 100, section 5.14.\n"
 msgstr ""
+"      %s  Falta la opción NECESARIA PageRegion.\n"
+"                REF: Página 100, sección 5.14.\n"
 
 #, c-format
 msgid ""
 "      %s  Missing REQUIRED PageSize option!\n"
 "                REF: Page 99, section 5.14.\n"
 msgstr ""
+"      %s  Falta la opción NECESARIA PageSize.\n"
+"                REF: Página 99, sección 5.14.\n"
 
 #, c-format
 msgid "      %s  Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\"!\n"
-msgstr ""
-"      %s  Falta la preferencia *%s %s en UIConstraint \"*%s %s *%s %s\".\n"
+msgstr "      %s  Falta la preferencia *%s %s en UIConstraint \"*%s %s *%s %s\".\n"
 
 #, c-format
 msgid "      %s  Missing choice *%s %s in cupsUIConstraints %s: \"%s\"!\n"
-msgstr ""
-"      %s  Falta la preferencia *%s %s en cupsUIConstraints %s: \"%s\".\n"
+msgstr "      %s  Falta la preferencia *%s %s en cupsUIConstraints %s: \"%s\".\n"
 
 #, c-format
 msgid "      %s  Missing cupsFilter file \"%s\"\n"
@@ -475,6 +456,8 @@ msgid ""
 "      %s  Non-standard size name \"%s\"!\n"
 "                REF: Page 187, section B.2.\n"
 msgstr ""
+"      %s  Tamaño de nombre \"%s\" no estándar.\n"
+"                REF: Página 187, sección B.2.\n"
 
 #, c-format
 msgid ""
@@ -486,11 +469,11 @@ msgstr ""
 
 #, c-format
 msgid "      %s  Size \"%s\" defined for %s but not for %s!\n"
-msgstr ""
+msgstr "      %s  Tamaño \"%s\" definido para %s pero no para %s.\n"
 
 #, c-format
 msgid "      %s  Size \"%s\" has unexpected dimensions (%gx%g)!\n"
-msgstr ""
+msgstr "      %s  El tamaño \"%s\" tiene inesperadas dimensiones (%gx%g).\n"
 
 #, c-format
 msgid "      %s  cupsICCProfile %s hash value collides with %s!\n"
@@ -501,15 +484,12 @@ msgid "      %s  cupsUIResolver %s causes a loop!\n"
 msgstr "      %s  cupsUIResolver %s genera un bucle.\n"
 
 #, c-format
-msgid ""
-"      %s  cupsUIResolver %s does not list at least two different options!\n"
-msgstr ""
+msgid "      %s  cupsUIResolver %s does not list at least two different options!\n"
+msgstr "      %s  cupsUIResolver %s no lista al menos dos opciones diferentes.\n"
 
 #, c-format
 msgid "      **FAIL**  %s choice names %s and %s differ only by case!\n"
-msgstr ""
-"      **FALLO**  %s nombres de opción %s y %s se diferencian sólo en la "
-"capitalización.\n"
+msgstr "      **FALLO**  %s nombres de opción %s y %s se diferencian sólo en la capitalización.\n"
 
 #, c-format
 msgid ""
@@ -619,8 +599,7 @@ msgstr ""
 
 #, c-format
 msgid "      **FAIL**  Bad LanguageEncoding %s - must be ISOLatin1!\n"
-msgstr ""
-"      **FALLO**  LanguageEncoding %s incorrecto: debería ser ISOLatin1.\n"
+msgstr "      **FALLO**  LanguageEncoding %s incorrecto: debería ser ISOLatin1.\n"
 
 #, c-format
 msgid "      **FAIL**  Bad LanguageVersion %s - must be English!\n"
@@ -628,31 +607,19 @@ msgstr "      **FALLO**  LanguageVersion %s incorrecto: debería ser Inglés.\n"
 
 #, c-format
 msgid "      **FAIL**  Default option code cannot be interpreted: %s\n"
-msgstr ""
-"      **FALLO**  El código de opción predeterminado no puede ser "
-"interpretado: %s\n"
+msgstr "      **FALLO**  El código de opción predeterminado no puede ser interpretado: %s\n"
 
 #, c-format
-msgid ""
-"      **FAIL**  Default translation string for option %s choice %s contains "
-"8-bit characters!\n"
-msgstr ""
-"      **FALLO**  Cadena de traducción predeterminada para opción %s "
-"preferencia %s contiene caracteres de 8-bits.\n"
+msgid "      **FAIL**  Default translation string for option %s choice %s contains 8-bit characters!\n"
+msgstr "      **FALLO**  Cadena de traducción predeterminada para opción %s preferencia %s contiene caracteres de 8-bits.\n"
 
 #, c-format
-msgid ""
-"      **FAIL**  Default translation string for option %s contains 8-bit "
-"characters!\n"
-msgstr ""
-"      **FALLO**  Cadena de traducción predeterminada para opción %s contiene "
-"caracteres de 8-bits.\n"
+msgid "      **FAIL**  Default translation string for option %s contains 8-bit characters!\n"
+msgstr "      **FALLO**  Cadena de traducción predeterminada para opción %s contiene caracteres de 8-bits.\n"
 
 #, c-format
 msgid "      **FAIL**  Group names %s and %s differ only by case!\n"
-msgstr ""
-"      **FALLO**  Nombres de grupo %s y %s se diferencian sólo en la "
-"capitalización.\n"
+msgstr "      **FALLO**  Nombres de grupo %s y %s se diferencian sólo en la capitalización.\n"
 
 #, c-format
 msgid "      **FAIL**  Multiple occurrences of %s choice name %s!\n"
@@ -660,9 +627,7 @@ msgstr "      **FALLO**  Múltiples apariciones de %s nombre de opción %s.\n"
 
 #, c-format
 msgid "      **FAIL**  Option names %s and %s differ only by case!\n"
-msgstr ""
-"      **FALLO**  Nombres de opción %s y %s se diferencian sólo en la "
-"capitalización.\n"
+msgstr "      **FALLO**  Nombres de opción %s y %s se diferencian sólo en la capitalización.\n"
 
 #, c-format
 msgid ""
@@ -1029,11 +994,8 @@ msgid "%s: Don't know what to do!\n"
 msgstr "%s: No sé que hay que hacer.\n"
 
 #, c-format
-msgid ""
-"%s: Error - %s environment variable names non-existent destination \"%s\"!\n"
-msgstr ""
-"%s: Error - %s nombres de variables de entorno no existen en destino \"%s"
-"\".\n"
+msgid "%s: Error - %s environment variable names non-existent destination \"%s\"!\n"
+msgstr "%s: Error - %s nombres de variables de entorno no existen en destino \"%s\".\n"
 
 #, c-format
 msgid "%s: Error - bad job ID!\n"
@@ -1041,16 +1003,11 @@ msgstr "%s: Error - ID de trabajo incorrecta.\n"
 
 #, c-format
 msgid "%s: Error - cannot print files and alter jobs simultaneously!\n"
-msgstr ""
-"%s: Error - no se pueden imprimir archivos y alterar trabajos al mismo "
-"tiempo.\n"
+msgstr "%s: Error - no se pueden imprimir archivos y alterar trabajos al mismo tiempo.\n"
 
 #, c-format
-msgid ""
-"%s: Error - cannot print from stdin if files or a job ID are provided!\n"
-msgstr ""
-"%s: Error - no se puede imprimir desde stdin si se proporcionan archivos o "
-"una ID de trabajo.\n"
+msgid "%s: Error - cannot print from stdin if files or a job ID are provided!\n"
+msgstr "%s: Error - no se puede imprimir desde stdin si se proporcionan archivos o una ID de trabajo.\n"
 
 #, c-format
 msgid "%s: Error - expected character set after '-S' option!\n"
@@ -1137,12 +1094,8 @@ msgid "%s: Error - expected value after '-%c' option!\n"
 msgstr "%s: Error - se esperaba un valor tras la opción '%c'.\n"
 
 #, c-format
-msgid ""
-"%s: Error - need \"completed\", \"not-completed\", or \"all\" after '-W' "
-"option!\n"
-msgstr ""
-"%s: Error - se necesita \"completed\", \"not completed\", o \"all\" tras la "
-"opción '-W'.\n"
+msgid "%s: Error - need \"completed\", \"not-completed\", or \"all\" after '-W' option!\n"
+msgstr "%s: Error - se necesita \"completed\", \"not completed\", o \"all\" tras la opción '-W'.\n"
 
 #, c-format
 msgid "%s: Error - no default destination available.\n"
@@ -1202,8 +1155,7 @@ msgstr "%s: Cadena de filtro \"%s\" inválida\n"
 
 #, c-format
 msgid "%s: Need job ID ('-i jobid') before '-H restart'!\n"
-msgstr ""
-"%s: Se necesita un ID de trabajo ('-i id_trabajo') antes de '-H restart'.\n"
+msgstr "%s: Se necesita un ID de trabajo ('-i id_trabajo') antes de '-H restart'.\n"
 
 #, c-format
 msgid "%s: No filter to convert from %s/%s to %s/%s!\n"
@@ -1239,7 +1191,7 @@ msgstr "%s: No se pudo abrir archivo PPD: %s en línea %d\n"
 
 #, c-format
 msgid "%s: Unable to open PPD file: %s on line %d.\n"
-msgstr ""
+msgstr "%s: No se ha podido abrir el archivo PPD: %s en la línea %d.\n"
 
 #, c-format
 msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"!\n"
@@ -1262,12 +1214,8 @@ msgid "%s: Unknown source MIME type %s/%s!\n"
 msgstr "%s: Tipo MIME de origen %s/%s desconocido.\n"
 
 #, c-format
-msgid ""
-"%s: Warning - '%c' format modifier not supported - output may not be "
-"correct!\n"
-msgstr ""
-"%s: Advertencia - no se admite el uso del modificador de formato '%c' - la "
-"salida puede no ser correcta.\n"
+msgid "%s: Warning - '%c' format modifier not supported - output may not be correct!\n"
+msgstr "%s: Advertencia - no se admite el uso del modificador de formato '%c' - la salida puede no ser correcta.\n"
 
 #, c-format
 msgid "%s: Warning - character set option ignored!\n"
@@ -1286,11 +1234,8 @@ msgid "%s: Warning - mode option ignored!\n"
 msgstr "%s: Advertencia - opción de modo no tenida en cuenta.\n"
 
 #, c-format
-msgid ""
-"%s: error - %s environment variable names non-existent destination \"%s\"!\n"
-msgstr ""
-"%s: error - %s nombres de variables de entorno no existen en destino \"%s"
-"\".\n"
+msgid "%s: error - %s environment variable names non-existent destination \"%s\"!\n"
+msgstr "%s: error - %s nombres de variables de entorno no existen en destino \"%s\".\n"
 
 #, c-format
 msgid "%s: error - expected option=value after '-o' option!\n"
@@ -1895,14 +1840,10 @@ msgid "?Invalid help command unknown\n"
 msgstr "?Comando de ayuda inválido desconocido\n"
 
 msgid "A Samba password is required to export printer drivers!"
-msgstr ""
-"Se requiere una contraseña Samba para exportar los controladores de "
-"impresora."
+msgstr "Se requiere una contraseña Samba para exportar los controladores de impresora."
 
 msgid "A Samba username is required to export printer drivers!"
-msgstr ""
-"Se requiere un nombre de usuario Samba para exportar los controladores de "
-"impresora."
+msgstr "Se requiere un nombre de usuario Samba para exportar los controladores de impresora."
 
 #, c-format
 msgid "A class named \"%s\" already exists!"
@@ -2022,9 +1963,7 @@ msgstr "Aplicador"
 
 #, c-format
 msgid "Attempt to set %s printer-state to bad value %d!"
-msgstr ""
-"Se ha intentado cambiar el valor printer-state de %s a un valor incorrecto %"
-"d."
+msgstr "Se ha intentado cambiar el valor printer-state de %s a un valor incorrecto %d."
 
 #, c-format
 msgid "Attribute groups are out of order (%x < %x)!"
@@ -2161,7 +2100,7 @@ msgstr "Valor printer-state %d incorrecto."
 
 #, c-format
 msgid "Bad request ID %d!"
-msgstr ""
+msgstr "ID %d de petición incorrecta."
 
 #, c-format
 msgid "Bad request version number %d.%d!"
@@ -2375,13 +2314,11 @@ msgstr "Dymo"
 
 #, c-format
 msgid "EMERG: Unable to allocate memory for page info: %s\n"
-msgstr ""
-"EMERG: No se ha podido asignar memoria para la información de página: %s\n"
+msgstr "EMERG: No se ha podido asignar memoria para la información de página: %s\n"
 
 #, c-format
 msgid "EMERG: Unable to allocate memory for pages array: %s\n"
-msgstr ""
-"EMERG: No se ha podido asignar memoria para la secuencia de páginas: %s\n"
+msgstr "EMERG: No se ha podido asignar memoria para la secuencia de páginas: %s\n"
 
 msgid "EPL1 Label Printer"
 msgstr "Impresora de etiquetas EPL1"
@@ -2391,7 +2328,7 @@ msgstr "Impresora de etiquetas EPL2"
 
 #, c-format
 msgid "ERROR: %s job-id user title copies options [file]\n"
-msgstr ""
+msgstr "ERROR: %s job-id usuario título copias opciones [archivo]\n"
 
 #, c-format
 msgid "ERROR: Bad %%BoundingBox: comment seen!\n"
@@ -2474,9 +2411,7 @@ msgid "ERROR: Fatal USB error!\n"
 msgstr "ERROR: Error fatal de USB.\n"
 
 msgid "ERROR: Invalid HP-GL/2 command seen, unable to print file!\n"
-msgstr ""
-"ERROR: Se ha detectado un comando HP-GL/2 no válido; no se puede imprimir el "
-"archivo.\n"
+msgstr "ERROR: Se ha detectado un comando HP-GL/2 no válido; no se puede imprimir el archivo.\n"
 
 #, c-format
 msgid "ERROR: Missing %%EndProlog!\n"
@@ -2486,23 +2421,16 @@ msgstr "ERROR: Falta %%EndProlog.\n"
 msgid "ERROR: Missing %%EndSetup!\n"
 msgstr "ERROR: Falta %%EndSetup.\n"
 
-msgid ""
-"ERROR: Missing device URI on command-line and no DEVICE_URI environment "
-"variable!\n"
-msgstr ""
-"ERROR: Falta URI del dispositivo en la línea de comandos y no hay variable "
-"de entorno DEVICE_URI.\n"
+msgid "ERROR: Missing device URI on command-line and no DEVICE_URI environment variable!\n"
+msgstr "ERROR: Falta URI del dispositivo en la línea de comandos y no hay variable de entorno DEVICE_URI.\n"
 
 #, c-format
 msgid "ERROR: Missing value on line %d of banner file!\n"
 msgstr "ERROR: Falta el valor en la línea %d del archivo de rótulo.\n"
 
 #, c-format
-msgid ""
-"ERROR: Need a msgid line before any translation strings on line %d of %s!\n"
-msgstr ""
-"ERROR: Se necesita una línea msgid antes de cualquier cadena de traducción "
-"en línea %d de %s.\n"
+msgid "ERROR: Need a msgid line before any translation strings on line %d of %s!\n"
+msgstr "ERROR: Se necesita una línea msgid antes de cualquier cadena de traducción en línea %d de %s.\n"
 
 #, c-format
 msgid "ERROR: No %%BoundingBox: comment in header!\n"
@@ -2512,12 +2440,8 @@ msgstr "ERROR: No hay comentario %%BoundingBox: en la cabecera.\n"
 msgid "ERROR: No %%Pages: comment in header!\n"
 msgstr "ERROR: No hay comentario %%Pages: en la cabecera.\n"
 
-msgid ""
-"ERROR: No device URI found in argv[0] or in DEVICE_URI environment "
-"variable!\n"
-msgstr ""
-"ERROR: No se ha encontrado el URI del dispositivo en argv[0] o en la "
-"variable de entorno DEVICE_URI.\n"
+msgid "ERROR: No device URI found in argv[0] or in DEVICE_URI environment variable!\n"
+msgstr "ERROR: No se ha encontrado el URI del dispositivo en argv[0] o en la variable de entorno DEVICE_URI.\n"
 
 #, c-format
 msgid "ERROR: No fonts in charset file %s\n"
@@ -2554,9 +2478,7 @@ msgid "ERROR: Remote host did not accept data file (%d)\n"
 msgstr "ERROR: El ordenador remoto no ha aceptado el archivo de datos (%d)\n"
 
 msgid "ERROR: There was a timeout error while sending data to the printer\n"
-msgstr ""
-"ERROR: Hay un error de tiempo de espera mientras se enviaban datos a la "
-"impresora\n"
+msgstr "ERROR: Hay un error de tiempo de espera mientras se enviaban datos a la impresora\n"
 
 #, c-format
 msgid "ERROR: Unable to add file %d to job: %s\n"
@@ -2574,9 +2496,7 @@ msgstr "ERROR: No se ha podido crear socket"
 
 #, c-format
 msgid "ERROR: Unable to create temporary compressed print file: %s\n"
-msgstr ""
-"ERROR: No se ha podido crear el archivo de impresión temporal comprimido: %"
-"s\n"
+msgstr "ERROR: No se ha podido crear el archivo de impresión temporal comprimido: %s\n"
 
 msgid "ERROR: Unable to create temporary file"
 msgstr "ERROR: No se ha podido crear el archivo temporal"
@@ -2603,9 +2523,7 @@ msgstr "ERROR: No se ha podido obtener una respuesta PAP"
 
 #, c-format
 msgid "ERROR: Unable to get PPD file for printer \"%s\" - %s.\n"
-msgstr ""
-"ERROR: No se ha podido obtener el archivo PPD para la impresora \"%s\" - %"
-"s.\n"
+msgstr "ERROR: No se ha podido obtener el archivo PPD para la impresora \"%s\" - %s.\n"
 
 msgid "ERROR: Unable to get default AppleTalk zone"
 msgstr "ERROR: No se ha podido conseguir la zona AppleTalk predeterminada"
@@ -2640,7 +2558,7 @@ msgid "ERROR: Unable to open %s: %s\n"
 msgstr "ERROR: No se ha podido abrir %s: %s\n"
 
 msgid "ERROR: Unable to open PPD file!\n"
-msgstr ""
+msgstr "ERROR: No se ha podido abrir el archivo PPD.\n"
 
 #, c-format
 msgid "ERROR: Unable to open banner file \"%s\" - %s\n"
@@ -2675,13 +2593,11 @@ msgstr "ERROR: No se ha podido abrir el archivo de impresión %s: %s\n"
 
 #, c-format
 msgid "ERROR: Unable to open raster file - %s\n"
-msgstr ""
+msgstr "ERROR: No se ha podido abrir el archivo de trama de datos - %s\n"
 
 #, c-format
 msgid "ERROR: Unable to open temporary compressed print file: %s\n"
-msgstr ""
-"ERROR: No se ha podido abrir el archivo de impresión temporal comprimido: %"
-"s\n"
+msgstr "ERROR: No se ha podido abrir el archivo de impresión temporal comprimido: %s\n"
 
 #, c-format
 msgid "ERROR: Unable to print %d text columns!\n"
@@ -2715,8 +2631,7 @@ msgid "ERROR: Unable to send PAP tickle request"
 msgstr "ERROR: No se ha podido enviar una petición PAP"
 
 msgid "ERROR: Unable to send initial PAP send data request"
-msgstr ""
-"ERROR: No se ha podido enviar la petición inicial de datos de envío PAP"
+msgstr "ERROR: No se ha podido enviar la petición inicial de datos de envío PAP"
 
 #, c-format
 msgid "ERROR: Unable to send print data (%d)\n"
@@ -2754,16 +2669,14 @@ msgid "ERROR: Unable to write print data: %s\n"
 msgstr "ERROR: No se han podido escribir los datos de impresión: %s\n"
 
 msgid "ERROR: Unable to write raster data to driver!\n"
-msgstr ""
-"ERROR: No se ha podido escribir la trama de datos (raster) al controlador.\n"
+msgstr "ERROR: No se ha podido escribir la trama de datos (raster) al controlador.\n"
 
 msgid "ERROR: Unable to write to temporary file"
 msgstr "ERROR: No se ha podido escribir al archivo temporal"
 
 #, c-format
 msgid "ERROR: Unable to write uncompressed document data: %s\n"
-msgstr ""
-"ERROR: No se han podido escribir los datos de documento sin comprimir: %s\n"
+msgstr "ERROR: No se han podido escribir los datos de documento sin comprimir: %s\n"
 
 #, c-format
 msgid "ERROR: Unexpected text on line %d of %s!\n"
@@ -2807,28 +2720,19 @@ msgstr "ERROR: Valor gamma %s no permitido; usando gamma=1000.\n"
 
 #, c-format
 msgid "ERROR: Unsupported number-up value %d, using number-up=1!\n"
-msgstr ""
-"ERROR: Valor de number-up (páginas por hoja) %d no permitido; usando number-"
-"up=1.\n"
+msgstr "ERROR: Valor de number-up (páginas por hoja) %d no permitido; usando number-up=1.\n"
 
 #, c-format
-msgid ""
-"ERROR: Unsupported number-up-layout value %s, using number-up-layout=lrtb!\n"
-msgstr ""
-"ERROR: Valor de number-up-layout (disposición de páginas por hoja) %s no "
-"permitido; usando number-up-layout=lrtb.\n"
+msgid "ERROR: Unsupported number-up-layout value %s, using number-up-layout=lrtb!\n"
+msgstr "ERROR: Valor de number-up-layout (disposición de páginas por hoja) %s no permitido; usando number-up-layout=lrtb.\n"
 
 #, c-format
 msgid "ERROR: Unsupported page-border value %s, using page-border=none!\n"
-msgstr ""
-"ERROR: Valor de page-border (borde de página) %s no permitido; usando page-"
-"border=none (ninguno).\n"
+msgstr "ERROR: Valor de page-border (borde de página) %s no permitido; usando page-border=none (ninguno).\n"
 
 #, c-format
 msgid "ERROR: doc_printf overflow (%d bytes) detected, aborting!\n"
-msgstr ""
-"ERROR: Se ha detectado un desbordamiento de doc_printf (%d bytes); "
-"cancelando.\n"
+msgstr "ERROR: Se ha detectado un desbordamiento de doc_printf (%d bytes); cancelando.\n"
 
 #, c-format
 msgid "ERROR: pdftops filter crashed on signal %d!\n"
@@ -2846,12 +2750,8 @@ msgstr "ERROR: pictwpstops se ha cerrado con la señal %d.\n"
 msgid "ERROR: pictwpstops exited with status %d!\n"
 msgstr "ERROR: pictwpstops se ha cerrado con el estado %d.\n"
 
-msgid ""
-"ERROR: recoverable: Unable to connect to printer; will retry in 30 "
-"seconds...\n"
-msgstr ""
-"ERROR: recuperable: No se ha podido establecer conexión con la impresora; "
-"reintento en 30 segundos...\n"
+msgid "ERROR: recoverable: Unable to connect to printer; will retry in 30 seconds...\n"
+msgstr "ERROR: recuperable: No se ha podido establecer conexión con la impresora; reintento en 30 segundos...\n"
 
 msgid "ERROR: select() failed"
 msgstr "ERROR: select() ha fallado"
@@ -2877,14 +2777,8 @@ msgstr "Introduzca nuevamente la contraseña:"
 msgid "Enter password:"
 msgstr "Introduzca la contraseña:"
 
-msgid ""
-"Enter your username and password or the root username and password to access "
-"this page. If you are using Kerberos authentication, make sure you have a "
-"valid Kerberos ticket."
-msgstr ""
-"Introduzca su nombre de usuario y contraseña o el nombre de usuario y "
-"contraseña de root para poder acceder a esta página. Si está usando "
-"autentificación Kerberos, asegúrese de que tiene un ticket Kerberos válido."
+msgid "Enter your username and password or the root username and password to access this page. If you are using Kerberos authentication, make sure you have a valid Kerberos ticket."
+msgstr "Introduzca su nombre de usuario y contraseña o el nombre de usuario y contraseña de root para poder acceder a esta página. Si está usando autentificación Kerberos, asegúrese de que tiene un ticket Kerberos válido."
 
 msgid "Envelope Feed"
 msgstr "Alimentador de sobre"
@@ -2944,12 +2838,8 @@ msgid "File Folder - 9/16 x 3 7/16\""
 msgstr "Carpeta de archivosr - 9/16 x 3 7/16 pulg."
 
 #, c-format
-msgid ""
-"File device URIs have been disabled! To enable, see the FileDevice directive "
-"in \"%s/cupsd.conf\"."
-msgstr ""
-"Los URIs del dispositivo de archivo han sido deshabilitados. Para "
-"habilitarlos, vea la directiva FileDevice en \"%s/cupsd.conf\"."
+msgid "File device URIs have been disabled! To enable, see the FileDevice directive in \"%s/cupsd.conf\"."
+msgstr "Los URIs del dispositivo de archivo han sido deshabilitados. Para habilitarlos, vea la directiva FileDevice en \"%s/cupsd.conf\"."
 
 msgid "Folio"
 msgstr "Folio"
@@ -3015,14 +2905,14 @@ msgid "INFO: Control file sent successfully\n"
 msgstr "INFO: Archivo de control enviado correctamente\n"
 
 msgid "INFO: Copying print data...\n"
-msgstr ""
+msgstr "INFO: Copiando datos de impresión...\n"
 
 msgid "INFO: Data file sent successfully\n"
 msgstr "INFO: Archivo de datos enviado correctamente\n"
 
 #, c-format
 msgid "INFO: Finished page %d...\n"
-msgstr ""
+msgstr "INFO: Acabada la página %d...\n"
 
 #, c-format
 msgid "INFO: Formatting page %d...\n"
@@ -3038,9 +2928,7 @@ msgid "INFO: Opening connection\n"
 msgstr "INFO: Abriendo la conexión\n"
 
 msgid "INFO: Print file sent, waiting for printer to finish...\n"
-msgstr ""
-"INFO: Archivo de impresión enviado; esperando a que finalice la "
-"impresora...\n"
+msgstr "INFO: Archivo de impresión enviado; esperando a que finalice la impresora...\n"
 
 msgid "INFO: Printer busy; will retry in 10 seconds...\n"
 msgstr "INFO: Impresora ocupada; reintento en 10 segundos...\n"
@@ -3053,8 +2941,7 @@ msgstr "INFO: Impresora ocupada; reintento en 5 segundos...\n"
 
 #, c-format
 msgid "INFO: Printer does not support IPP/%d.%d, trying IPP/1.0...\n"
-msgstr ""
-"INFO: La impresora no es compatible con IPP/%d.%d, probando IPP/1.0...\n"
+msgstr "INFO: La impresora no es compatible con IPP/%d.%d, probando IPP/1.0...\n"
 
 msgid "INFO: Printer is busy; will retry in 5 seconds...\n"
 msgstr "INFO: La impresora está ocupada; reintento en 5 segundos...\n"
@@ -3121,12 +3008,10 @@ msgstr "INFO: Guardando trabajo LPR en cola, %.0f%% completado...\n"
 
 #, c-format
 msgid "INFO: Starting page %d...\n"
-msgstr ""
+msgstr "INFO: Iniciando página %d...\n"
 
 msgid "INFO: Unable to contact printer, queuing on next printer in class...\n"
-msgstr ""
-"INFO: No se ha podido contactar con la impresora; poniendo en cola en la "
-"siguiente impresora de la clase...\n"
+msgstr "INFO: No se ha podido contactar con la impresora; poniendo en cola en la siguiente impresora de la clase...\n"
 
 #, c-format
 msgid "INFO: Using default AppleTalk zone \"%s\"\n"
@@ -3671,8 +3556,7 @@ msgstr "La salida de la impresora %s se ha enviado a %s\n"
 
 #, c-format
 msgid "Output for printer %s is sent to remote printer %s on %s\n"
-msgstr ""
-"La salida de la impresora %s se ha enviado a la impresora remota %s en %s\n"
+msgstr "La salida de la impresora %s se ha enviado a la impresora remota %s en %s\n"
 
 #, c-format
 msgid "Output for printer %s/%s is sent to %s\n"
@@ -3680,9 +3564,7 @@ msgstr "La salida de la impresora %s/%s se ha enviado a %s\n"
 
 #, c-format
 msgid "Output for printer %s/%s is sent to remote printer %s on %s\n"
-msgstr ""
-"La salida de la impresora %s/%s se ha enviado a la impresora remota %s en %"
-"s\n"
+msgstr "La salida de la impresora %s/%s se ha enviado a la impresora remota %s en %s\n"
 
 msgid "Output tray missing!"
 msgstr "Falta la bandeja de salida."
@@ -3863,10 +3745,8 @@ msgstr "Se ha alcanzado el límite de cuota."
 msgid "Rank    Owner   Job     File(s)                         Total Size\n"
 msgstr "Rango  Propiet. Trabajo Archivo(s)                      Tamaño total\n"
 
-msgid ""
-"Rank   Owner      Pri  Job        Files                       Total Size\n"
-msgstr ""
-"Rango  Propiet.   Pri  Trabajo    Archivos                    Tamaño total\n"
+msgid "Rank   Owner      Pri  Job        Files                       Total Size\n"
+msgstr "Rango  Propiet.   Pri  Trabajo    Archivos                    Tamaño total\n"
 
 msgid "Reject Jobs"
 msgstr "Rechazar trabajos"
@@ -4004,29 +3884,18 @@ msgstr "No se ha podido encontrar el archivo PPD \"%s\"."
 msgid "The PPD file \"%s\" could not be opened: %s"
 msgstr "No se ha podido abrir el archivo PPD \"%s\": %s"
 
-msgid ""
-"The class name may only contain up to 127 printable characters and may not "
-"contain spaces, slashes (/), or the pound sign (#)."
-msgstr ""
-"El nombre de la clase sólo puede contener hasta 127 caracteres imprimibles y "
-"no puede contener espacios, barras (/), o la almohadilla (#)."
+msgid "The class name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)."
+msgstr "El nombre de la clase sólo puede contener hasta 127 caracteres imprimibles y no puede contener espacios, barras (/), o la almohadilla (#)."
 
-msgid ""
-"The notify-lease-duration attribute cannot be used with job subscriptions."
-msgstr ""
-"El atributo notify-lease-duration no puede ser usado con subscripciones de "
-"trabajos."
+msgid "The notify-lease-duration attribute cannot be used with job subscriptions."
+msgstr "El atributo notify-lease-duration no puede ser usado con subscripciones de trabajos."
 
 #, c-format
 msgid "The notify-user-data value is too large (%d > 63 octets)!"
 msgstr "El valor notify-user-data es demasiado grande (%d > 63 octetos)."
 
-msgid ""
-"The printer name may only contain up to 127 printable characters and may not "
-"contain spaces, slashes (/), or the pound sign (#)."
-msgstr ""
-"El nombre de la impresora sólo puede contener hasta 127 caracteres "
-"imprimibles y no puede contener espacios, barras (/), o la almohadilla (#)."
+msgid "The printer name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)."
+msgstr "El nombre de la impresora sólo puede contener hasta 127 caracteres imprimibles y no puede contener espacios, barras (/), o la almohadilla (#)."
 
 msgid "The printer or class is not shared!"
 msgstr "La impresora o clase no está compartida."
@@ -4041,24 +3910,14 @@ msgstr "El printer-uri \"%s\" contiene caracteres incorrectos."
 msgid "The printer-uri attribute is required!"
 msgstr "Se necesita el atributo printer-uri."
 
-msgid ""
-"The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"."
-msgstr ""
-"El printer-uri debe ser de la forma \"ipp://NOMBRE_ORDENADOR/classes/"
-"NOMBRE_CLASE\"."
+msgid "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"."
+msgstr "El printer-uri debe ser de la forma \"ipp://NOMBRE_ORDENADOR/classes/NOMBRE_CLASE\"."
 
-msgid ""
-"The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"."
-msgstr ""
-"El printer-uri debe ser de la forma \"ipp://NOMBRE_ORDENADOR/printers/"
-"NOMBRE_IMPRESORA\"."
+msgid "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"."
+msgstr "El printer-uri debe ser de la forma \"ipp://NOMBRE_ORDENADOR/printers/NOMBRE_IMPRESORA\"."
 
-msgid ""
-"The subscription name may not contain spaces, slashes (/), question marks "
-"(?), or the pound sign (#)."
-msgstr ""
-"El nombre de la subscripción no puede contener espacios, barras (/), signos "
-"de interrogación (?), o la almohadilla (#)."
+msgid "The subscription name may not contain spaces, slashes (/), question marks (?), or the pound sign (#)."
+msgstr "El nombre de la subscripción no puede contener espacios, barras (/), signos de interrogación (?), o la almohadilla (#)."
 
 msgid "There are too many subscriptions."
 msgstr "Hay demasiadas subscripciones."
@@ -4168,21 +4027,15 @@ msgstr "No se ha podido conectar al servidor."
 
 #, c-format
 msgid "Unable to copy 64-bit CUPS printer driver files (%d)!"
-msgstr ""
-"No se han podido copiar los archivos del controlador de impresora de 64-bit "
-"de CUPS (%d)."
+msgstr "No se han podido copiar los archivos del controlador de impresora de 64-bit de CUPS (%d)."
 
 #, c-format
 msgid "Unable to copy 64-bit Windows printer driver files (%d)!"
-msgstr ""
-"No se han podido copiar los archivos del controlador de impresora de 64-bit "
-"de Windows (%d)."
+msgstr "No se han podido copiar los archivos del controlador de impresora de 64-bit de Windows (%d)."
 
 #, c-format
 msgid "Unable to copy CUPS printer driver files (%d)!"
-msgstr ""
-"No se han podido copiar los archivos del controlador de impresora de CUPS (%"
-"d)."
+msgstr "No se han podido copiar los archivos del controlador de impresora de CUPS (%d)."
 
 #, c-format
 msgid "Unable to copy PPD file - %s!"
@@ -4193,15 +4046,11 @@ msgstr "No se ha podido copiar el archivo PPD."
 
 #, c-format
 msgid "Unable to copy Windows 2000 printer driver files (%d)!"
-msgstr ""
-"No se han podido copiar los archivos del controlador de impresora de Windows "
-"2000 (%d)."
+msgstr "No se han podido copiar los archivos del controlador de impresora de Windows 2000 (%d)."
 
 #, c-format
 msgid "Unable to copy Windows 9x printer driver files (%d)!"
-msgstr ""
-"No se han podido copiar los archivos del controlador de impresora de Windows "
-"9x (%d)."
+msgstr "No se han podido copiar los archivos del controlador de impresora de Windows 9x (%d)."
 
 #, c-format
 msgid "Unable to copy interface script - %s!"
@@ -4251,15 +4100,11 @@ msgstr "No se ha podido obtener el estado de la impresora"
 
 #, c-format
 msgid "Unable to install Windows 2000 printer driver files (%d)!"
-msgstr ""
-"No se han podido instalar los archivos del controlador de impresora de "
-"Windows 2000 (%d)."
+msgstr "No se han podido instalar los archivos del controlador de impresora de Windows 2000 (%d)."
 
 #, c-format
 msgid "Unable to install Windows 9x printer driver files (%d)!"
-msgstr ""
-"No se han podido instalar los archivos del controlador de impresora de "
-"Windows 9x (%d)."
+msgstr "No se han podido instalar los archivos del controlador de impresora de Windows 9x (%d)."
 
 msgid "Unable to modify class:"
 msgstr "No se ha podido modificar la clase:"
@@ -4298,8 +4143,7 @@ msgstr "No se ha podido enviar un comando al controlador de la impresora."
 
 #, c-format
 msgid "Unable to set Windows printer driver (%d)!"
-msgstr ""
-"No se ha podido configurar el controlador de impresora de Windows (%d)."
+msgstr "No se ha podido configurar el controlador de impresora de Windows (%d)."
 
 msgid "Unable to set options:"
 msgstr "No se han podido cambiar las opciones:"
@@ -4415,6 +4259,22 @@ msgid ""
 "  -u                   Remove the PPD file when finished\n"
 "  -D                   Remove the input file when finished\n"
 msgstr ""
+"Uso: convert [ opciones ]\n"
+"\n"
+"Opciones:\n"
+"\n"
+"  -e                   Usar cada filtro del archivo PPD\n"
+"  -f nombre_archivo          Establecer el archivo a convertir (de lo contrario, stdin)\n"
+"  -o nombre_archivo          Establecer el archivo a generar (de lo contrario, stdout)\n"
+"  -i tipo/mime         Establecer el tipo MIME de entrada (de lo contrario, auto-typed)\n"
+"  -j tipo/mime         Establecer el tipo MIME de salida (de lo contrario, application/pdf)\n"
+"  -P nombre_archivo.ppd      Establecer el archivo PPD\n"
+"  -a 'nombre=valor ...'  Establecer opciones\n"
+"  -U nombre_usuario          Establecer un nombre de usuario para el trabajo\n"
+"  -J título             Establecer el título\n"
+"  -c copias            Establecer el número de copias\n"
+"  -u                   Borrar el archivo PPD al finalizar\n"
+"  -D                   Borrar el archivo de entrada al finalizar\n"
 
 msgid ""
 "Usage: cupsaddsmb [options] printer1 ... printerN\n"
@@ -4432,8 +4292,7 @@ msgstr ""
 "       cupsaddsmb [opciones] -a\n"
 "\n"
 "Opciones:\n"
-"  -E               Hace que se use encriptación en la conexión con el "
-"servidor\n"
+"  -E               Hace que se use encriptación en la conexión con el servidor\n"
 "  -H servidor_samba  Usa el servidor SAMBA especificado\n"
 "  -U usuario_samba    Autentifica usando el usuario SAMBA especificado\n"
 "  -a               Exporta todas las impresoras\n"
@@ -4468,10 +4327,8 @@ msgstr ""
 "    --[no-]remote-admin     Activar o desactivar la administración remota\n"
 "    --[no-]remote-any       Permitir o impedir el acceso desde Internet\n"
 "    --[no-]remote-printers  Mostrar u ocultar las impresoras remotas\n"
-"    --[no-]share-printers   Activar o desactivar la compartición de "
-"impresoras\n"
-"    --[no-]user-cancel-any  Permitir o impedir a los usuarios cancelar "
-"cualquier trabajo\n"
+"    --[no-]share-printers   Activar o desactivar la compartición de impresoras\n"
+"    --[no-]user-cancel-any  Permitir o impedir a los usuarios cancelar cualquier trabajo\n"
 
 msgid ""
 "Usage: cupsd [-c config-file] [-f] [-F] [-h] [-l]\n"
@@ -4503,6 +4360,17 @@ msgid ""
 "  -p filename.ppd  Set PPD file\n"
 "  -t title         Set title\n"
 msgstr ""
+"Uso: cupsfilter -m tipo/mime [ opciones ] nombre_archivo\n"
+"\n"
+"Opciones:\n"
+"\n"
+"  -c cupsd.conf    Establecer el archivo cupsd.conf a usar\n"
+"  -e               Usar cada filtro del archivo PPD\n"
+"  -j job-id[,N]    Filtrar el archivo N del trabajo especificado (el valor predeterminado es el archivo 1)\n"
+"  -n copias        Establecer el número de copias\n"
+"  -o nombre=valor    Establecer opciones\n"
+"  -p nombre_archivo.ppd  Establecer el archivo PPD\n"
+"  -t título         Establecer el título\n"
 
 msgid ""
 "Usage: cupstestdsc [options] filename.ps [... filename.ps]\n"
@@ -4512,8 +4380,7 @@ msgid ""
 "\n"
 "    -h       Show program usage\n"
 "\n"
-"    Note: this program only validates the DSC comments, not the PostScript "
-"itself.\n"
+"    Note: this program only validates the DSC comments, not the PostScript itself.\n"
 msgstr ""
 "Uso: cupstestdsc [opciones] nombre_archivo.ps [... nombre_archivo.ps]\n"
 "       cupstestdsc [opciones] -\n"
@@ -4522,8 +4389,7 @@ msgstr ""
 "\n"
 "    -h       Muestra cómo se usa el programa\n"
 "\n"
-"    Nota: este programa sólo valida los comentarios DSC, no el PostScript en "
-"sí mismo.\n"
+"    Nota: este programa sólo valida los comentarios DSC, no el PostScript en sí mismo.\n"
 
 msgid ""
 "Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]\n"
@@ -4532,14 +4398,25 @@ msgid ""
 "Options:\n"
 "\n"
 "    -R root-directory    Set alternate root\n"
-"    -W {all,none,constraints,defaults,duplex,filters,profiles,sizes,"
-"translations}\n"
+"    -W {all,none,constraints,defaults,duplex,filters,profiles,sizes,translations}\n"
 "                         Issue warnings instead of errors\n"
 "    -q                   Run silently\n"
 "    -r                   Use 'relaxed' open mode\n"
 "    -v                   Be slightly verbose\n"
 "    -vv                  Be very verbose\n"
 msgstr ""
+"Uso: cupstestppd [opciones] nombre_archivo1.ppd[.gz] [... nombre_archivoN.ppd[.gz]]\n"
+"       programa | cupstestppd [opciones] -\n"
+"\n"
+"Opciones:\n"
+"\n"
+"    -R directorio-raíz    Establecer directorio raíz alternativo\n"
+"    -W {all,none,constraints,defaults,duplex,filters,profiles,sizes,translations}\n"
+"                         Emitir avisos (warnings) en vez de errores\n"
+"    -q                   Ejecución silenciosa\n"
+"    -r                   Usar modo abierto 'relajado'\n"
+"    -v                   Ser ligeramente detallado\n"
+"    -vv                  Ser muy detallado\n"
 
 msgid "Usage: lpmove job/src dest\n"
 msgstr "Uso: lpmove trabajo/fuente destino\n"
@@ -4567,11 +4444,8 @@ msgstr ""
 "       lppasswd [-g nombre_grupo] -a [nombre_usuario]\n"
 "       lppasswd [-g nombre_grupo] -x [nombre_usuario]\n"
 
-msgid ""
-"Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]\n"
-msgstr ""
-"Uso: lpq (-P dest) (-U nombre_usuario) (-h nombre_ordenador(:puerto)) (-l) "
-"(+intervalo)\n"
+msgid "Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]\n"
+msgstr "Uso: lpq (-P dest) (-U nombre_usuario) (-h nombre_ordenador(:puerto)) (-l) (+intervalo)\n"
 
 msgid ""
 "Usage: ppdc [options] filename.drv [ ... filenameN.drv ]\n"
@@ -4591,18 +4465,18 @@ msgid ""
 msgstr ""
 "Uso: ppdc [opciones] nombre_archivo.drv [ ... nombre_archivoN.drv ]\n"
 "Options:\n"
-"  -D nombre=valor        Establece la variable nombre al valor.\n"
-"  -I include-dir    Añade el directorio include a la ruta de búsqueda.\n"
-"  -c catálogo.po        Carga el catálogo de mensajes especificado.\n"
-"  -d dir-salida        Especifica el directorio de salida.\n"
-"  -l idioma[,idioma,...]   Especifica el/los idioma(s) de salida.\n"
-"  -m                   Usa el valor ModelName como nombre de archivo.\n"
-"  -t                   Chequea el PPDs en vez de generarlo.\n"
-"  -v                   Detallado (más v's para más detalle).\n"
-"  -z                   Comprime los archivos PPD usando GNU zip.\n"
-"  --cr                 Termina las líneas con CR (Mac OS 9).\n"
-"  --crlf               Termina las líneas con CR + LF (Windows).\n"
-"  --lf                 Termina las líneas con LF (UNIX/Linux/Mac OS X).\n"
+"  -D nombre=valor        Establecer la variable nombre al valor.\n"
+"  -I include-dir    Añadir el directorio include a la ruta de búsqueda.\n"
+"  -c catálogo.po        Cargar el catálogo de mensajes especificado.\n"
+"  -d dir-salida        Especificar el directorio de salida.\n"
+"  -l idioma[,idioma,...]   Especificar el/los idioma(s) de salida.\n"
+"  -m                   Usar el valor ModelName como nombre de archivo.\n"
+"  -t                   Chequear el PPDs en vez de generarlo.\n"
+"  -v                   Ser detallado (más v's para más detalle).\n"
+"  -z                   Comprimir los archivos PPD usando GNU zip.\n"
+"  --cr                 Terminar las líneas con CR (Mac OS 9).\n"
+"  --crlf               Terminar las líneas con CR + LF (Windows).\n"
+"  --lf                 Terminar las líneas con LF (UNIX/Linux/Mac OS X).\n"
 
 msgid ""
 "Usage: ppdhtml [options] filename.drv >filename.html\n"
@@ -4612,8 +4486,8 @@ msgid ""
 msgstr ""
 "Uso: ppdhtml [opciones] nombre_archivo.drv >nombre_archivo.html\n"
 "Opciones:\n"
-"  -D nombre=valor        Establece la variable nombre al valor.\n"
-"  -I include-dir    Añade el directorio include a la ruta de búsqueda.\n"
+"  -D nombre=valor        Establecer la variable nombre al valor.\n"
+"  -I include-dir    Añadir el directorio include a la ruta de búsqueda.\n"
 
 msgid ""
 "Usage: ppdi [options] filename.ppd [ ... filenameN.ppd ]\n"
@@ -4642,12 +4516,11 @@ msgid ""
 "  -I include-dir    Add include directory to search path.\n"
 "  -v                Be verbose (more v's for more verbosity).\n"
 msgstr ""
-"Uso: ppdpo [opciones] -o nombre_archivo.po nombre_archivo.drv [ ... "
-"nombre_archivoN.drv ]\n"
+"Uso: ppdpo [opciones] -o nombre_archivo.po nombre_archivo.drv [ ... nombre_archivoN.drv ]\n"
 "Opciones:\n"
-"  -D nombre=valor        Establece la variable nombre al valor.\n"
-"  -I include-dir    Añade el directorio include a la ruta de búsqueda.\n"
-"  -v                Con detalle (más v's para más detalle).\n"
+"  -D nombre=valor        Establecer la variable nombre al valor.\n"
+"  -I include-dir    Añadir el directorio include a la ruta de búsqueda.\n"
+"  -v                Ser detallado (más v's para más detalle).\n"
 
 msgid "Usage: snmp [host-or-ip-address]\n"
 msgstr "Uso: snmp [ordenador-o-dirección-ip]\n"
@@ -4667,8 +4540,7 @@ msgstr "WARNING: Añadiendo sólo las primeras %d impresoras encontradas"
 
 #, c-format
 msgid "WARNING: Boolean expected for waiteof option \"%s\"\n"
-msgstr ""
-"WARNING: Se esperaba un valor booleano para la opción waiteof \"%s\".\n"
+msgstr "WARNING: Se esperaba un valor booleano para la opción waiteof \"%s\".\n"
 
 msgid "WARNING: Failed to read side-channel request!\n"
 msgstr "WARNING: No se ha podido leer la petición del canal lateral.\n"
@@ -4684,41 +4556,23 @@ msgid "WARNING: Printer sent unexpected EOF\n"
 msgstr "WARNING: La impresora envió un EOF inesperado\n"
 
 #, c-format
-msgid ""
-"WARNING: Remote host did not respond with command status byte after %d "
-"seconds!\n"
-msgstr ""
-"WARNING: El ordenador remoto no ha respondido con el byte de estado del "
-"comando después de %d segundos.\n"
+msgid "WARNING: Remote host did not respond with command status byte after %d seconds!\n"
+msgstr "WARNING: El ordenador remoto no ha respondido con el byte de estado del comando después de %d segundos.\n"
 
 #, c-format
-msgid ""
-"WARNING: Remote host did not respond with control status byte after %d "
-"seconds!\n"
-msgstr ""
-"WARNING: El ordenador remoto no ha respondido con el byte de estado de "
-"control después de %d segundos.\n"
+msgid "WARNING: Remote host did not respond with control status byte after %d seconds!\n"
+msgstr "WARNING: El ordenador remoto no ha respondido con el byte de estado de control después de %d segundos.\n"
 
 #, c-format
-msgid ""
-"WARNING: Remote host did not respond with data status byte after %d "
-"seconds!\n"
-msgstr ""
-"WARNING: El ordenador remoto no ha respondido con el byte de estado de los "
-"datos después de %d segundos.\n"
+msgid "WARNING: Remote host did not respond with data status byte after %d seconds!\n"
+msgstr "WARNING: El ordenador remoto no ha respondido con el byte de estado de los datos después de %d segundos.\n"
 
 #, c-format
 msgid "WARNING: SCSI command timed out (%d); retrying...\n"
-msgstr ""
-"WARNING: Agotado el tiempo de espera para el comando SCSI (%d); "
-"reintentando...\n"
+msgstr "WARNING: Agotado el tiempo de espera para el comando SCSI (%d); reintentando...\n"
 
-msgid ""
-"WARNING: This document does not conform to the Adobe Document Structuring "
-"Conventions and may not print correctly!\n"
-msgstr ""
-"WARNING: Este documento no se ajusta a las Convenciones de Estructuración de "
-"Documentos de Adobe y puede que no se imprima correctamente.\n"
+msgid "WARNING: This document does not conform to the Adobe Document Structuring Conventions and may not print correctly!\n"
+msgstr "WARNING: Este documento no se ajusta a las Convenciones de Estructuración de Documentos de Adobe y puede que no se imprima correctamente.\n"
 
 #, c-format
 msgid "WARNING: Unable to open \"%s:%s\": %s\n"
@@ -4752,28 +4606,18 @@ msgid "WARNING: number expected for status option \"%s\"\n"
 msgstr "WARNING: se esperaba un número para la opción de estado \"%s\"\n"
 
 #, c-format
-msgid ""
-"WARNING: recoverable: Network host '%s' is busy; will retry in %d "
-"seconds...\n"
-msgstr ""
-"WARNING: recuperable: El ordenador de red '%s' está ocupado; reintento en %d "
-"segundos...\n"
+msgid "WARNING: recoverable: Network host '%s' is busy; will retry in %d seconds...\n"
+msgstr "WARNING: recuperable: El ordenador de red '%s' está ocupado; reintento en %d segundos...\n"
 
 msgid "Warning, no Windows 2000 printer drivers are installed!"
-msgstr ""
-"Advertencia, no está instalado ningún controlador de impresora de Windows "
-"2000."
+msgstr "Advertencia, no está instalado ningún controlador de impresora de Windows 2000."
 
 msgid "Yes"
 msgstr "Si"
 
 #, c-format
-msgid ""
-"You must access this page using the URL <A HREF=\"https://%s:%d%s\">https://%"
-"s:%d%s</A>."
-msgstr ""
-"Debe acceder a esta página usando el URL <A HREF=\"https://%s:%d%s\">https://"
-"%s:%d%s</A>."
+msgid "You must access this page using the URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A>."
+msgstr "Debe acceder a esta página usando el URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A>."
 
 msgid "You4 Envelope"
 msgstr "Sobre You4"
@@ -4819,9 +4663,7 @@ msgid "cupsctl: Unknown option \"-%c\"!\n"
 msgstr "cupsctl: Opción \"-%c\" desconocida.\n"
 
 msgid "cupsd: Expected config filename after \"-c\" option!\n"
-msgstr ""
-"cupsd: Se esperaba un nombre de archivo de configuración tras la opción \"-c"
-"\".\n"
+msgstr "cupsd: Se esperaba un nombre de archivo de configuración tras la opción \"-c\".\n"
 
 msgid "cupsd: Unable to get current directory!\n"
 msgstr "cupsd: No se ha podido obtener el directorio actual.\n"
@@ -4835,9 +4677,7 @@ msgid "cupsd: Unknown option \"%c\" - aborting!\n"
 msgstr "cupsd: Opción \"%c\" desconocida - cancelando.\n"
 
 msgid "cupsd: launchd(8) support not compiled in, running in normal mode.\n"
-msgstr ""
-"cupsd: el uso de launchd(8) no ha sido compilado, ejecutándose en modo "
-"normal.\n"
+msgstr "cupsd: el uso de launchd(8) no ha sido compilado, ejecutándose en modo normal.\n"
 
 #, c-format
 msgid "cupsfilter: Invalid document number %d!\n"
@@ -4887,8 +4727,7 @@ msgid "job-printer-uri attribute missing!"
 msgstr "Falta el atributo job-printer-uri."
 
 msgid "lpadmin: Class name can only contain printable characters!\n"
-msgstr ""
-"lpadmin: El nombre de la clase sólo puede contener caracteres imprimibles.\n"
+msgstr "lpadmin: El nombre de la clase sólo puede contener caracteres imprimibles.\n"
 
 msgid "lpadmin: Expected PPD after '-P' option!\n"
 msgstr "lpadmin: Se esperaba un PPD tras la opción '-P'.\n"
@@ -4947,9 +4786,7 @@ msgid "lpadmin: Printer %s is not a member of class %s.\n"
 msgstr "lpadmin: La impresora %s no es miembro de la clase %s.\n"
 
 msgid "lpadmin: Printer name can only contain printable characters!\n"
-msgstr ""
-"lpadmin: El nombre de la impresora sólo puede contener caracteres "
-"imprimibles.\n"
+msgstr "lpadmin: El nombre de la impresora sólo puede contener caracteres imprimibles.\n"
 
 msgid ""
 "lpadmin: Unable to add a printer to the class:\n"
@@ -5039,15 +4876,13 @@ msgid "lpadmin: Unknown option '%c'!\n"
 msgstr "lpadmin: Opción '%c' desconocida.\n"
 
 msgid "lpadmin: Warning - content type list ignored!\n"
-msgstr ""
-"lpadmin: Advertencia - lista de tipo de contenido no tenida en cuenta.\n"
+msgstr "lpadmin: Advertencia - lista de tipo de contenido no tenida en cuenta.\n"
 
 msgid "lpc> "
 msgstr "lpc> "
 
 msgid "lpinfo: Expected 1284 device ID string after --device-id!\n"
-msgstr ""
-"lpinfo: Se esperaba una cadena ID de dispositivo 1284 tras --device-id.\n"
+msgstr "lpinfo: Se esperaba una cadena ID de dispositivo 1284 tras --device-id.\n"
 
 msgid "lpinfo: Expected language after --language!\n"
 msgstr "lpinfo: Se esperaba un idioma tras --language.\n"
@@ -5147,9 +4982,7 @@ msgstr "lppasswd: No se ha podido escribir en el archivo de contraseñas: %s\n"
 
 #, c-format
 msgid "lppasswd: failed to backup old password file: %s\n"
-msgstr ""
-"lppasswd: falló al hacer una copia de seguridad del antiguo archivo de "
-"contraseñas: %s\n"
+msgstr "lppasswd: falló al hacer una copia de seguridad del antiguo archivo de contraseñas: %s\n"
 
 #, c-format
 msgid "lppasswd: failed to rename password file: %s\n"
@@ -5160,12 +4993,8 @@ msgid "lppasswd: user \"%s\" and group \"%s\" do not exist.\n"
 msgstr "lppasswd: el usuario \"%s\" y el grupo \"%s\" no existen.\n"
 
 #, c-format
-msgid ""
-"lpstat: error - %s environment variable names non-existent destination \"%s"
-"\"!\n"
-msgstr ""
-"lpstat: error - Los nombre de variable de entorno %s no existen en el "
-"destino \"%s\".\n"
+msgid "lpstat: error - %s environment variable names non-existent destination \"%s\"!\n"
+msgstr "lpstat: error - Los nombre de variable de entorno %s no existen en el destino \"%s\".\n"
 
 #, c-format
 msgid "members of class %s:\n"
@@ -5241,8 +5070,7 @@ msgstr "ppdc: Se esperaba un valor lógico en la línea %d de %s.\n"
 
 #, c-format
 msgid "ppdc: Expected charset after Font on line %d of %s!\n"
-msgstr ""
-"ppdc: Se esperaba un juego de caracteres tras Font en la línea %d de %s.\n"
+msgstr "ppdc: Se esperaba un juego de caracteres tras Font en la línea %d de %s.\n"
 
 #, c-format
 msgid "ppdc: Expected choice code on line %d of %s.\n"
@@ -5254,8 +5082,7 @@ msgstr "ppdc: Se esperaba un nombre/texto apropiado en la línea %d de %s.\n"
 
 #, c-format
 msgid "ppdc: Expected color order for ColorModel on line %d of %s!\n"
-msgstr ""
-"ppdc: Se esperaba un orden de color para ColorModel en la línea %d de %s.\n"
+msgstr "ppdc: Se esperaba un orden de color para ColorModel en la línea %d de %s.\n"
 
 #, c-format
 msgid "ppdc: Expected colorspace for ColorModel on line %d of %s!\n"
@@ -5267,16 +5094,11 @@ msgstr "ppdc: Se esperaba compresión para ColorModel en la línea %d de %s.\n"
 
 #, c-format
 msgid "ppdc: Expected constraints string for UIConstraints on line %d of %s!\n"
-msgstr ""
-"ppdc: Se esperaba una cadena de restricciones para UIConstraints en la línea "
-"%d de %s.\n"
+msgstr "ppdc: Se esperaba una cadena de restricciones para UIConstraints en la línea %d de %s.\n"
 
 #, c-format
-msgid ""
-"ppdc: Expected driver type keyword following DriverType on line %d of %s!\n"
-msgstr ""
-"ppdc: Se esperaba una clave de tipo de controlador tras DriverType en la "
-"línea %d de %s.\n"
+msgid "ppdc: Expected driver type keyword following DriverType on line %d of %s!\n"
+msgstr "ppdc: Se esperaba una clave de tipo de controlador tras DriverType en la línea %d de %s.\n"
 
 #, c-format
 msgid "ppdc: Expected duplex type after Duplex on line %d of %s!\n"
@@ -5288,8 +5110,7 @@ msgstr "ppdc: Se esperaba una codificación tras Font en la línea %d de %s.\n"
 
 #, c-format
 msgid "ppdc: Expected filename after #po %s on line %d of %s!\n"
-msgstr ""
-"ppdc: Se esperaba un nombre de archivo tras #po %s en la línea %d de %s.\n"
+msgstr "ppdc: Se esperaba un nombre de archivo tras #po %s en la línea %d de %s.\n"
 
 #, c-format
 msgid "ppdc: Expected group name/text on line %d of %s!\n"
@@ -5341,19 +5162,15 @@ msgstr "ppdc: Se esperaba un nombre/texto tras %s en la línea %d de %s.\n"
 
 #, c-format
 msgid "ppdc: Expected name/text after Installable on line %d of %s!\n"
-msgstr ""
-"ppdc: Se esperaba un nombre/texto tras Installable en la línea %d de %s.\n"
+msgstr "ppdc: Se esperaba un nombre/texto tras Installable en la línea %d de %s.\n"
 
 #, c-format
 msgid "ppdc: Expected name/text after Resolution on line %d of %s!\n"
-msgstr ""
-"ppdc: Se esperaba un nombre/texto tras Resolution en la línea %d de %s.\n"
+msgstr "ppdc: Se esperaba un nombre/texto tras Resolution en la línea %d de %s.\n"
 
 #, c-format
 msgid "ppdc: Expected name/text combination for ColorModel on line %d of %s!\n"
-msgstr ""
-"ppdc: Se esperaba una combinación nombre/texto para ColorModel en la línea %"
-"d de %s.\n"
+msgstr "ppdc: Se esperaba una combinación nombre/texto para ColorModel en la línea %d de %s.\n"
 
 #, c-format
 msgid "ppdc: Expected option name/text on line %d of %s!\n"
@@ -5369,29 +5186,19 @@ msgstr "ppdc: Se esperaba un tipo de opción en la línea %d de %s.\n"
 
 #, c-format
 msgid "ppdc: Expected override field after Resolution on line %d of %s!\n"
-msgstr ""
-"ppdc: Se esperaba un campo de anulación tras Resolution en la línea %d de %"
-"s.\n"
+msgstr "ppdc: Se esperaba un campo de anulación tras Resolution en la línea %d de %s.\n"
 
 #, c-format
 msgid "ppdc: Expected real number on line %d of %s!\n"
 msgstr "ppdc: Se esperaba un número real en la línea %d de %s.\n"
 
 #, c-format
-msgid ""
-"ppdc: Expected resolution/mediatype following ColorProfile on line %d of %"
-"s!\n"
-msgstr ""
-"ppdc: Se esperaba resolución/tipo de soporte tras ColorProfile en la línea %"
-"d de %s.\n"
+msgid "ppdc: Expected resolution/mediatype following ColorProfile on line %d of %s!\n"
+msgstr "ppdc: Se esperaba resolución/tipo de soporte tras ColorProfile en la línea %d de %s.\n"
 
 #, c-format
-msgid ""
-"ppdc: Expected resolution/mediatype following SimpleColorProfile on line %d "
-"of %s!\n"
-msgstr ""
-"ppdc: Se esperaba resolución/tipo de soporte tras SimpleColorProfile en la "
-"línea %d de %s.\n"
+msgid "ppdc: Expected resolution/mediatype following SimpleColorProfile on line %d of %s!\n"
+msgstr "ppdc: Se esperaba resolución/tipo de soporte tras SimpleColorProfile en la línea %d de %s.\n"
 
 #, c-format
 msgid "ppdc: Expected selector after %s on line %d of %s!\n"
@@ -5431,14 +5238,11 @@ msgstr "ppdc: Coste incorrecto para el filtro en la línea %d de %s.\n"
 
 #, c-format
 msgid "ppdc: Invalid empty MIME type for filter on line %d of %s!\n"
-msgstr ""
-"ppdc: Tipo MIME vacío incorrecto para el filtro en la línea %d de %s.\n"
+msgstr "ppdc: Tipo MIME vacío incorrecto para el filtro en la línea %d de %s.\n"
 
 #, c-format
 msgid "ppdc: Invalid empty program name for filter on line %d of %s!\n"
-msgstr ""
-"ppdc: Nombre de programa vacío incorrecto para el filtro en la línea %d de %"
-"s.\n"
+msgstr "ppdc: Nombre de programa vacío incorrecto para el filtro en la línea %d de %s.\n"
 
 #, c-format
 msgid "ppdc: Invalid option section \"%s\" on line %d of %s!\n"
@@ -5474,8 +5278,7 @@ msgstr "ppdc: No se ha proporcionado catálogo de mensajes para el idioma %s.\n"
 
 #, c-format
 msgid "ppdc: Option %s redefined with a different type on line %d of %s!\n"
-msgstr ""
-"ppdc: La opción %s redefinida con un tipo diferente en la línea %d de %s.\n"
+msgstr "ppdc: La opción %s redefinida con un tipo diferente en la línea %d de %s.\n"
 
 #, c-format
 msgid "ppdc: Option constraint must *name on line %d of %s!\n"
@@ -5503,14 +5306,11 @@ msgstr "ppdc: No se ha podido ejecutar cupstestppd: %s\n"
 
 #, c-format
 msgid "ppdc: Unable to find #po file %s on line %d of %s!\n"
-msgstr ""
-"ppdc: No se ha podido encontrar el archivo #po %s en la línea %d de %s.\n"
+msgstr "ppdc: No se ha podido encontrar el archivo #po %s en la línea %d de %s.\n"
 
 #, c-format
 msgid "ppdc: Unable to find include file \"%s\" on line %d of %s!\n"
-msgstr ""
-"ppdc: No se ha podido encontrar el archivo include \"%s\" en la línea %d de %"
-"s.\n"
+msgstr "ppdc: No se ha podido encontrar el archivo include \"%s\" en la línea %d de %s.\n"
 
 #, c-format
 msgid "ppdc: Unable to find localization for \"%s\" - %s\n"
@@ -5541,11 +5341,8 @@ msgid "ppdc: Unknown token \"%s\" seen on line %d of %s!\n"
 msgstr "ppdc: Elemento desconocido \"%s\" visto en la línea %d de %s.\n"
 
 #, c-format
-msgid ""
-"ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s!\n"
-msgstr ""
-"ppdc: Caracteres finales desconocidos en el número real \"%s\" en la línea %"
-"d de %s.\n"
+msgid "ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s!\n"
+msgstr "ppdc: Caracteres finales desconocidos en el número real \"%s\" en la línea %d de %s.\n"
 
 #, c-format
 msgid "ppdc: Unterminated string starting with %c on line %d of %s!\n"
@@ -5638,122 +5435,3 @@ msgstr "sin título"
 msgid "variable-bindings uses indefinite length"
 msgstr "variable-bindings usa una longitud indefinida"
 
-#~ msgid "        WARN    Missing APDialogExtension file \"%s\"\n"
-#~ msgstr "        ADVERTENCIA    Falta el archivo APDialogExtension \"%s\"\n"
-
-#~ msgid "        WARN    Missing APPrinterIconPath file \"%s\"\n"
-#~ msgstr "        ADVERTENCIA    Falta el archivo APPrinterIconPath \"%s\"\n"
-
-#~ msgid "%s: Unable to open %s - %s\n"
-#~ msgstr "%s: No se pudo abrir %s - %s\n"
-
-#~ msgid "%s: Unable to open %s - %s on line %d.\n"
-#~ msgstr "%s: No se pudo abrir %s - %s en línea %d.\n"
-
-#~ msgid "ERROR: Unable to create temporary file - %s.\n"
-#~ msgstr "ERROR: No se ha podido crear el archivo temporal - %s.\n"
-
-#~ msgid "ERROR: Unable to create temporary file: %s\n"
-#~ msgstr "ERROR: No se ha podido crear el archivo temporal: %s\n"
-
-#~ msgid "ERROR: Unable to open temporary file"
-#~ msgstr "ERROR: No se ha podido abrir el archivo temporal"
-
-#~ msgid ""
-#~ "Usage: convert [ options ]\n"
-#~ "\n"
-#~ "Options:\n"
-#~ "\n"
-#~ "  -f filename          Set file to be converted (otherwise stdin)\n"
-#~ "  -o filename          Set file to be generated (otherwise stdout)\n"
-#~ "  -i mime/type         Set input MIME type (otherwise auto-typed)\n"
-#~ "  -j mime/type         Set output MIME type (otherwise application/pdf)\n"
-#~ "  -P filename.ppd      Set PPD file\n"
-#~ "  -a 'name=value ...'  Set option(s)\n"
-#~ "  -U username          Set username for job\n"
-#~ "  -J title             Set title\n"
-#~ "  -c copies            Set number of copies\n"
-#~ "  -u                   Remove the PPD file when finished\n"
-#~ "  -D                   Remove the input file when finished\n"
-#~ msgstr ""
-#~ "Uso: convert [ opciones ]\n"
-#~ "\n"
-#~ "Opciones:\n"
-#~ "\n"
-#~ "  -f nombrearchivo          Establece el archivo a convertir (de otro "
-#~ "modo, stdin)\n"
-#~ "  -o nombrearchivo          Establece el archivo a generar (de otro modo, "
-#~ "stdout)\n"
-#~ "  -i tipo/mime         Establece el tipo MIME de entrada (de otro modo, "
-#~ "auto-tipado)\n"
-#~ "  -j tipo/mime         Establece el tipo MIME de salida (de otro modo, "
-#~ "application/pdf)\n"
-#~ "  -P nombrearchivo.ppd      Establece el archivo PPD\n"
-#~ "  -a 'nombre=valor ...'  Establece opcion(es)\n"
-#~ "  -U nombreusuario          Establece el nombre de usuario del trabajo\n"
-#~ "  -J título             Establece el título\n"
-#~ "  -c copias            Establece el número de copias\n"
-#~ "  -u                   Borra el archivo PPD después de terminar\n"
-#~ "  -D                   Borra el archivo de entrada después de terminar\n"
-
-#~ msgid ""
-#~ "Usage: cupsfilter -m mime/type [ options ] filename\n"
-#~ "\n"
-#~ "Options:\n"
-#~ "\n"
-#~ "  -c cupsd.conf    Set cupsd.conf file to use\n"
-#~ "  -j job-id[,N]    Filter file N from the specified job (default is file "
-#~ "1)\n"
-#~ "  -n copies        Set number of copies\n"
-#~ "  -o name=value    Set option(s)\n"
-#~ "  -p filename.ppd  Set PPD file\n"
-#~ "  -t title         Set title\n"
-#~ msgstr ""
-#~ "Uso: cupsfilter -m tipo/mime [ opciones ] nombre_archivo\n"
-#~ "\n"
-#~ "Opciones:\n"
-#~ "\n"
-#~ "  -c cupsd.conf    Establecer el archivo cupsd.conf a usar\n"
-#~ "  -j id-trabajo[,N]    Filtrar el archivo N del trabajo especificado "
-#~ "(valor predeterminado 1)\n"
-#~ "  -n copias        Establecer el número de copias\n"
-#~ "  -o nombre=valor    Establecer las opciones\n"
-#~ "  -p nombre_archivo.ppd  Especificar el archivo PPD\n"
-#~ "  -t título         Establecer el título\n"
-
-#~ msgid ""
-#~ "Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]\n"
-#~ "       program | cupstestppd [options] -\n"
-#~ "\n"
-#~ "Options:\n"
-#~ "\n"
-#~ "    -R root-directory    Set alternate root\n"
-#~ "    -W {all,none,constraints,defaults,duplex,filters,translations}\n"
-#~ "                         Issue warnings instead of errors\n"
-#~ "    -q                   Run silently\n"
-#~ "    -r                   Use 'relaxed' open mode\n"
-#~ "    -v                   Be slightly verbose\n"
-#~ "    -vv                  Be very verbose\n"
-#~ msgstr ""
-#~ "Uso: cupstestppd [opciones] nombre_archivo1.ppd[.gz] [... nombre_archivoN."
-#~ "ppd[.gz]]\n"
-#~ "       programa | cupstestppd [opciones] -\n"
-#~ "\n"
-#~ "Opciones:\n"
-#~ "\n"
-#~ "    -R directorio-raíz    Establecer el directorio raíz alternativo\n"
-#~ "    -W {all,none,constraints,defaults,duplex,filters,translations}\n"
-#~ "                         Emitir avisos en vez de errores\n"
-#~ "    -q                   Ejecutar en modo silencioso\n"
-#~ "    -r                   Usar el modo de apertura 'relajado'\n"
-#~ "    -v                   Ligeramente detallado\n"
-#~ "    -vv                  Muy detallado\n"
-
-#~ msgid "cupsfilter: Unable to create temporary file: %s\n"
-#~ msgstr "cupsfilter: No se ha podido crear el archivo temporal: %s\n"
-
-#~ msgid "lpadmin: Unable to create temporary file - %s\n"
-#~ msgstr "lpadmin: No se ha podido crear el archivo temporal - %s\n"
-
-#~ msgid "lpadmin: Unable to create temporary file: %s\n"
-#~ msgstr "lpadmin: No se ha podido crear el archivo temporal: %s\n"
index 35b3bf48f206d20eddd6e52588d35b822beeea79..e2e0351836a9679a8b92b3cd0162f410f4e5edbf 100644 (file)
@@ -12,7 +12,7 @@
 .\"   which should have been included with this file.  If this file is
 .\"   file is missing or damaged, see the license at "http://www.cups.org/".
 .\"
-.TH cupsd.conf 5 "CUPS" "28 January 2009" "Apple Inc."
+.TH cupsd.conf 5 "CUPS" "16 March 2009" "Apple Inc."
 .SH NAME
 cupsd.conf \- server configuration file for cups
 .SH DESCRIPTION
@@ -393,6 +393,11 @@ Include filename
 .br
 Includes the named file.
 .TP 5
+JobKillDelay seconds
+.br
+Specifies the number of seconds to wait before killing the filters and backend
+associated with a canceled or held job.
+.TP 5
 JobRetryInterval seconds
 .br
 Specifies the interval between retries of jobs in seconds.
index 2fbacac7220c18465260e512c49de4340424cf83..b348f6b08a8b71d4c946b7dc2c9d909259e16294 100644 (file)
@@ -1,4 +1,4 @@
-{\rtf1\ansi\ansicpg1252\cocoartf1009\cocoasubrtf300
+{\rtf1\ansi\ansicpg1252\cocoartf1011
 {\fonttbl\f0\froman\fcharset0 Times-Roman;\f1\fnil\fcharset0 LucidaGrande;\f2\fmodern\fcharset0 Courier;
 \f3\fmodern\fcharset0 Courier-Oblique;}
 {\colortbl;\red255\green255\blue255;\red0\green0\blue238;}
@@ -10,6 +10,7 @@
 {\list\listtemplateid6\listhybrid{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{decimal\}.}{\leveltext\leveltemplateid501\'02\'00.;}{\levelnumbers\'01;}\fi-360\li720\lin720 }{\listname ;}\listid6}
 {\list\listtemplateid7\listhybrid{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{decimal\}.}{\leveltext\leveltemplateid601\'02\'00.;}{\levelnumbers\'01;}\fi-360\li720\lin720 }{\listname ;}\listid7}}
 {\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}}
+\margl1440\margr1440\margb1800\margt1800\vieww9000\viewh8400\viewkind0
 \deftab720
 \pard\pardeftab720\sa280\qc
 
@@ -72,7 +73,7 @@ The GNU LGPL relaxes the "link-to" restriction, allowing you to develop applicat
 \b\fs28 \cf0 Trademarks\
 \pard\pardeftab720\sa240\ql\qnatural
 
-\b0\fs24 \cf0 CUPS and the CUPS logo are trademarks of Apple Inc. You may use the name and logo in any direct port or binary distribution of CUPS. Please contact Apple Inc. for written permission to use them in derivative products. Our intention is to protect the value of these trademarks and ensure that any derivative product meets the same high-quality standards as the original.\
+\b0\fs24 \cf0 CUPS and the CUPS logo (the "CUPS Marks") are trademarks of Apple Inc. Apple grants you a non-exclusive and non-transferable right to use the CUPS Marks in any direct port or binary distribution incorporating CUPS software and in any promotional material therefor.  You agree that your products will meet the highest levels of quality and integrity for similar goods, not be unlawful, and be developed, manufactured, and distributed in compliance with this license.  You will not interfere with Apple's rights in the CUPS Marks, and all use of the CUPS Marks shall inure to the benefit of Apple.  This license does not apply to use of the CUPS Marks in a derivative products, which requires prior written permission from Apple Inc.\
 \pard\pardeftab720\sa280\ql\qnatural
 
 \b\fs28 \cf0 \page \pard\pardeftab720\sa280\ql\qnatural
index 26ca30b9624181ebedb026cbdaa56ab2fdd16aa3..617291a7c993b52d1ad1fb1126af878b601055a8 100644 (file)
@@ -122,6 +122,7 @@ static const cupsd_var_t    variables[] =
   { "HideImplicitMembers",     &HideImplicitMembers,   CUPSD_VARTYPE_BOOLEAN },
   { "ImplicitClasses",         &ImplicitClasses,       CUPSD_VARTYPE_BOOLEAN },
   { "ImplicitAnyClasses",      &ImplicitAnyClasses,    CUPSD_VARTYPE_BOOLEAN },
+  { "JobKillDelay",            &JobKillDelay,          CUPSD_VARTYPE_INTEGER },
   { "JobRetryLimit",           &JobRetryLimit,         CUPSD_VARTYPE_INTEGER },
   { "JobRetryInterval",                &JobRetryInterval,      CUPSD_VARTYPE_INTEGER },
   { "KeepAliveTimeout",                &KeepAliveTimeout,      CUPSD_VARTYPE_INTEGER },
@@ -559,6 +560,7 @@ cupsdReadConfiguration(void)
   SSLOptions               = CUPSD_SSL_NONE;
 #endif /* HAVE_SSL */
   DirtyCleanInterval       = DEFAULT_KEEPALIVE;
+  JobKillDelay             = DEFAULT_TIMEOUT;
   JobRetryLimit            = 5;
   JobRetryInterval         = 300;
   FileDevice               = FALSE;
index 0be49aa18e9e35fccdbf9ef420f56ce22083238d..0f4e4a7c5d2f3a656f8dc79f58f309dbd0cd25a6 100644 (file)
@@ -1101,8 +1101,9 @@ list_ppds(int        request_id,  /* I - Request ID */
       if (language)
       {
        for (i = 0; i < PPD_MAX_LANG; i ++)
-         if (!ppd->record.languages[i][0] ||
-             !strcmp(ppd->record.languages[i], language))
+         if (!ppd->record.languages[i][0])
+           break;
+         else if (!strcmp(ppd->record.languages[i], language))
          {
            ppd->matches ++;
            break;
@@ -1135,8 +1136,9 @@ list_ppds(int        request_id,  /* I - Request ID */
       if (product)
       {
        for (i = 0; i < PPD_MAX_PROD; i ++)
-         if (!ppd->record.products[i][0] ||
-             !strcasecmp(ppd->record.products[i], product))
+         if (!ppd->record.products[i][0])
+           break;
+         else if (!strcasecmp(ppd->record.products[i], product))
          {
            ppd->matches += 3;
            break;
@@ -1146,8 +1148,9 @@ list_ppds(int        request_id,  /* I - Request ID */
       if (psversion)
       {
        for (i = 0; i < PPD_MAX_VERS; i ++)
-         if (!ppd->record.psversions[i][0] ||
-             !strcasecmp(ppd->record.psversions[i], psversion))
+         if (!ppd->record.psversions[i][0])
+           break;
+         else if (!strcasecmp(ppd->record.psversions[i], psversion))
          {
            ppd->matches ++;
            break;
index c0160e2e9effcce3cce4168d66342df0321cef88..edf5c44c36e2ff267040509fa7a0a5c47857b045 100644 (file)
@@ -9307,12 +9307,12 @@ restart_job(cupsd_client_t  *con,       /* I - Client connection */
 {
   ipp_attribute_t *attr;               /* Current attribute */
   int          jobid;                  /* Job ID */
+  cupsd_job_t  *job;                   /* Job information */
   char         scheme[HTTP_MAX_URI],   /* Method portion of URI */
                username[HTTP_MAX_URI], /* Username portion of URI */
                host[HTTP_MAX_URI],     /* Host portion of URI */
                resource[HTTP_MAX_URI]; /* Resource portion of URI */
   int          port;                   /* Port portion of URI */
-  cupsd_job_t  *job;                   /* Job information */
 
 
   cupsdLogMessage(CUPSD_LOG_DEBUG2, "restart_job(%p[%d], %s)", con,
@@ -9420,10 +9420,36 @@ restart_job(cupsd_client_t  *con,       /* I - Client connection */
   }
 
  /*
-  * Restart the job and return...
+  * See if the job-hold-until attribute is specified...
   */
 
-  cupsdRestartJob(job);
+  if ((attr = ippFindAttribute(con->request, "job-hold-until",
+                               IPP_TAG_KEYWORD)) == NULL)
+    attr = ippFindAttribute(con->request, "job-hold-until", IPP_TAG_NAME);
+
+  if (attr && strcmp(attr->values[0].string.text, "no-hold"))
+  {
+   /*
+    * Return the job to a held state...
+    */
+
+    cupsdLogJob(job, CUPSD_LOG_DEBUG,
+               "Restarted by \"%s\" with job-hold-until=%s.",
+                username, attr->values[0].string.text);
+    cupsdSetJobHoldUntil(job, attr->values[0].string.text, 0);
+
+    cupsdAddEvent(CUPSD_EVENT_JOB_CONFIG_CHANGED | CUPSD_EVENT_JOB_STATE,
+                  NULL, job, "Job restarted by user with job-hold-until=%s",
+                 attr->values[0].string.text);
+  }
+  else
+  {
+   /*
+    * Restart the job...
+    */
+
+    cupsdRestartJob(job);
+  }
 
   cupsdLogJob(job, CUPSD_LOG_INFO, "Restarted by \"%s\".", username);
 
index b947d58ca9561432484183d42d86586fea4d6beb..cce7d23e4e7a2fb46f6f5f67b83a5993a9e83661 100644 (file)
@@ -271,23 +271,36 @@ cupsdCheckJobs(void)
   cupsd_printer_t      *printer,       /* Printer destination */
                        *pclass;        /* Printer class destination */
   ipp_attribute_t      *attr;          /* Job attribute */
+  time_t               curtime;        /* Current time */
 
 
   cupsdLogMessage(CUPSD_LOG_DEBUG2,
                   "cupsdCheckJobs: %d active jobs, sleeping=%d, reload=%d",
                   cupsArrayCount(ActiveJobs), Sleeping, NeedReload);
 
+  curtime = time(NULL);
+
   for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs);
        job;
        job = (cupsd_job_t *)cupsArrayNext(ActiveJobs))
   {
+   /*
+    * Kill jobs if they are unresponsive...
+    */
+
+    if (job->kill_time && job->kill_time <= curtime)
+    {
+      stop_job(job, CUPSD_JOB_FORCE);
+      continue;
+    }
+
    /*
     * Start held jobs if they are ready...
     */
 
     if (job->state_value == IPP_JOB_HELD &&
         job->hold_until &&
-       job->hold_until < time(NULL))
+       job->hold_until < curtime)
     {
       if (job->pending_timeout)
       {
@@ -1256,7 +1269,7 @@ cupsdFreeAllJobs(void)
 
   cupsdHoldSignals();
 
-  cupsdStopAllJobs(1);
+  cupsdStopAllJobs(CUPSD_JOB_FORCE, 0);
   cupsdSaveAllJobs();
 
   for (job = (cupsd_job_t *)cupsArrayFirst(Jobs);
@@ -2352,7 +2365,8 @@ cupsdSetJobState(
 
 void
 cupsdStopAllJobs(
-    cupsd_jobaction_t action)          /* I - Action */
+    cupsd_jobaction_t action,          /* I - Action */
+    int               kill_delay)      /* I - Number of seconds before we kill */
 {
   cupsd_job_t  *job;                   /* Current job */
 
@@ -2362,7 +2376,12 @@ cupsdStopAllJobs(
   for (job = (cupsd_job_t *)cupsArrayFirst(PrintingJobs);
        job;
        job = (cupsd_job_t *)cupsArrayNext(PrintingJobs))
+  {
+    if (kill_delay)
+      job->kill_time = time(NULL) + kill_delay;
+
     cupsdSetJobState(job, IPP_JOB_PENDING, action, NULL);
+  }
 }
 
 
@@ -3670,6 +3689,11 @@ stop_job(cupsd_job_t       *job, /* I - Job */
   FilterLevel -= job->cost;
   job->cost   = 0;
 
+  if (action == CUPSD_JOB_DEFAULT && !job->kill_time)
+    job->kill_time = time(NULL) + JobKillDelay;
+  else if (action == CUPSD_JOB_FORCE)
+    job->kill_time = 0;
+
   for (i = 0; job->filters[i]; i ++)
     if (job->filters[i] > 0)
       cupsdEndProcess(job->filters[i], action == CUPSD_JOB_FORCE);
index 2056e4ab77045452521e5e451e45fc9f51d8fb56..498cddb09522ecb0f14bd4cdf96390f5a324f79d 100644 (file)
@@ -43,9 +43,10 @@ typedef struct cupsd_job_s
   int                  num_files;      /* Number of files in job */
   mime_type_t          **filetypes;    /* File types */
   int                  *compressions;  /* Compression status of each file */
-  time_t               access_time;    /* Last access time */
   ipp_attribute_t      *sheets;        /* job-media-sheets-completed */
-  time_t               hold_until;     /* Hold expiration date/time */
+  time_t               access_time,    /* Last access time */
+                       kill_time,      /* When to send SIGKILL */
+                       hold_until;     /* Hold expiration date/time */
   ipp_attribute_t      *state;         /* Job state */
   ipp_attribute_t      *job_sheets;    /* Job sheets (NULL if none) */
   ipp_attribute_t      *printer_message,
@@ -109,7 +110,9 @@ VAR cups_array_t    *Jobs           VALUE(NULL),
                                        /* List of jobs that are printing */
 VAR int                        NextJobId       VALUE(1);
                                        /* Next job ID to use */
-VAR int                        JobRetryLimit   VALUE(5),
+VAR int                        JobKillDelay    VALUE(DEFAULT_TIMEOUT),
+                                       /* Delay before killing jobs */
+                       JobRetryLimit   VALUE(5),
                                        /* Max number of tries */
                        JobRetryInterval VALUE(300);
                                        /* Seconds between retries */
@@ -149,7 +152,8 @@ extern void         cupsdSetJobState(cupsd_job_t *job,
 __attribute__ ((__format__ (__printf__, 4, 5)))
 #endif /* __GNUC__ */
 ;
-extern void            cupsdStopAllJobs(cupsd_jobaction_t action);
+extern void            cupsdStopAllJobs(cupsd_jobaction_t action,
+                                        int kill_delay);
 extern int             cupsdTimeoutJob(cupsd_job_t *job);
 extern void            cupsdUnloadCompletedJobs(void);
 
index d78280f98c37e95f39856deb077c41a224108ba0..3a8668902b2887780ac13e1c7e962092b0d1a630 100644 (file)
@@ -713,23 +713,13 @@ main(int  argc,                           /* I - Number of command-line args */
         cupsdPauseListening();
       }
 
-     /*
-      * Check for any active jobs...
-      */
-
-      for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs);
-          job;
-          job = (cupsd_job_t *)cupsArrayNext(ActiveJobs))
-        if (job->state_value == IPP_JOB_PROCESSING)
-         break;
-
      /*
       * Restart if all clients are closed and all jobs finished, or
       * if the reload timeout has elapsed...
       */
 
       if ((cupsArrayCount(Clients) == 0 &&
-           (!job || NeedReload != RELOAD_ALL)) ||
+           (cupsArrayCount(PrintingJobs) == 0 || NeedReload != RELOAD_ALL)) ||
           (time(NULL) - ReloadTime) >= ReloadTimeout)
       {
        /*
@@ -890,7 +880,7 @@ main(int  argc,                             /* I - Number of command-line args */
         cupsArrayCount(PrintingJobs) > 0)
     {
       SleepJobs = 0;
-      cupsdStopAllJobs(0);
+      cupsdStopAllJobs(CUPSD_JOB_DEFAULT, 10);
     }
 #endif /* __APPLE__ */
 
@@ -1961,22 +1951,27 @@ select_timeout(int fds)                 /* I - Number of descriptors returned */
   * Check for any active jobs...
   */
 
-  if (cupsArrayCount(ActiveJobs) > 0)
+  for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs);
+       job;
+       job = (cupsd_job_t *)cupsArrayNext(ActiveJobs))
   {
-    for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs);
-        job;
-        job = (cupsd_job_t *)cupsArrayNext(ActiveJobs))
-      if (job->state_value == IPP_JOB_HELD && job->hold_until < timeout)
-      {
-        timeout = job->hold_until;
-       why     = "release held jobs";
-      }
-      else if (job->state_value == IPP_JOB_PENDING && timeout > (now + 10))
-      {
-       timeout = now + 10;
-       why     = "start pending jobs";
-       break;
-      }
+    if (job->kill_time && job->kill_time < timeout)
+    {
+      timeout = job->kill_time;
+      why     = "kill unresponsive jobs";
+    }
+
+    if (job->state_value == IPP_JOB_HELD && job->hold_until < timeout)
+    {
+      timeout = job->hold_until;
+      why     = "release held jobs";
+    }
+    else if (job->state_value == IPP_JOB_PENDING && timeout > (now + 10))
+    {
+      timeout = now + 10;
+      why     = "start pending jobs";
+      break;
+    }
   }
 
 #ifdef HAVE_MALLINFO
index 7084ddfcd92f7acc8a99be5c46ee18476895007f..be21df3d06dcb7f11e58905fa48cd086019c1692 100644 (file)
@@ -3,7 +3,7 @@
  *
  *   System management definitions for the Common UNIX Printing System (CUPS).
  *
- *   Copyright 2007-2008 by Apple Inc.
+ *   Copyright 2007-2009 by Apple Inc.
  *   Copyright 2006 by Easy Software Products.
  *
  *   These coded instructions, statements, and computer programs are the
@@ -792,7 +792,7 @@ sysUpdate(void)
 
      /*
       * If we have no printing jobs, allow the power change immediately.
-      * Otherwise set the SleepJobs time to 20 seconds in the future when
+      * Otherwise set the SleepJobs time to 15 seconds in the future when
       * we'll take more drastic measures...
       */
 
@@ -802,7 +802,7 @@ sysUpdate(void)
       else
       {
         LastSysEvent = sysevent;
-        SleepJobs    = time(NULL) + 20;
+        SleepJobs    = time(NULL) + 15;
       }
     }