From: msweet Date: Wed, 18 Mar 2009 17:09:48 +0000 (+0000) Subject: Merge changes from CUPS 1.4svn-r8454. X-Git-Tag: release-1.6.3~109 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=238c38326574f7793dc1deda72f6aff208d791dc;p=thirdparty%2Fcups.git Merge changes from CUPS 1.4svn-r8454. git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current@1311 a1ca3aef-8c08-0410-bb20-df032aa958be --- diff --git a/CHANGES-1.3.txt b/CHANGES-1.3.txt index a6f086137a..dd58bdff4f 100644 --- a/CHANGES-1.3.txt +++ b/CHANGES-1.3.txt @@ -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) diff --git a/CHANGES.txt b/CHANGES.txt index ef8e6ff695..7cacef1d8e 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -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 diff --git a/backend/dnssd.c b/backend/dnssd.c index f5687f3c3d..47a8b608ee 100644 --- a/backend/dnssd.c +++ b/backend/dnssd.c @@ -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; } } diff --git a/cups/emit.c b/cups/emit.c index 6934366fb4..3389607f95 100644 --- a/cups/emit.c +++ b/cups/emit.c @@ -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); diff --git a/doc/help/ref-cupsd-conf.html.in b/doc/help/ref-cupsd-conf.html.in index 638c49d812..28d16de4a0 100644 --- a/doc/help/ref-cupsd-conf.html.in +++ b/doc/help/ref-cupsd-conf.html.in @@ -1208,6 +1208,9 @@ printer.

HREF="#JobRetryInterval">JobRetryInterval directive controls the value of N +
  • retry-this-job - Retry the current job immediately + and indefinitely.
  • +
  • stop-printer - Stop the printer and keep the job for future printing; this is the default value
  • @@ -1510,6 +1513,22 @@ print queues whose error policy is retry-job. The default is 30 seconds.

    +

    CUPS 1.4JobKillDelay

    + +

    Examples

    + +
    +JobKillDelay 30
    +JobKillDelay 120
    +
    + +

    Description

    + +

    The JobKillDelay 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.

    + +

    CUPS 1.2JobRetryLimit

    Examples

    diff --git a/filter/rastertohp.c b/filter/rastertohp.c index 95a87860f9..f5f82dc2e7 100644 --- a/filter/rastertohp.c +++ b/filter/rastertohp.c @@ -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 */ } } diff --git a/locale/cups_es.po b/locale/cups_es.po index 04d318f940..4891b4d3e2 100644 --- a/locale/cups_es.po +++ b/locale/cups_es.po @@ -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 \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 https://%" -"s:%d%s." -msgstr "" -"Debe acceder a esta página usando el URL https://" -"%s:%d%s." +msgid "You must access this page using the URL https://%s:%d%s." +msgstr "Debe acceder a esta página usando el URL https://%s:%d%s." 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" diff --git a/man/cupsd.conf.man.in b/man/cupsd.conf.man.in index 35b3bf48f2..e2e0351836 100644 --- a/man/cupsd.conf.man.in +++ b/man/cupsd.conf.man.in @@ -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. diff --git a/packaging/LICENSE.rtf b/packaging/LICENSE.rtf index 2fbacac722..b348f6b08a 100644 --- a/packaging/LICENSE.rtf +++ b/packaging/LICENSE.rtf @@ -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 diff --git a/scheduler/conf.c b/scheduler/conf.c index 26ca30b962..617291a7c9 100644 --- a/scheduler/conf.c +++ b/scheduler/conf.c @@ -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; diff --git a/scheduler/cups-driverd.cxx b/scheduler/cups-driverd.cxx index 0be49aa18e..0f4e4a7c5d 100644 --- a/scheduler/cups-driverd.cxx +++ b/scheduler/cups-driverd.cxx @@ -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; diff --git a/scheduler/ipp.c b/scheduler/ipp.c index c0160e2e9e..edf5c44c36 100644 --- a/scheduler/ipp.c +++ b/scheduler/ipp.c @@ -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); diff --git a/scheduler/job.c b/scheduler/job.c index b947d58ca9..cce7d23e4e 100644 --- a/scheduler/job.c +++ b/scheduler/job.c @@ -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); diff --git a/scheduler/job.h b/scheduler/job.h index 2056e4ab77..498cddb095 100644 --- a/scheduler/job.h +++ b/scheduler/job.h @@ -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); diff --git a/scheduler/main.c b/scheduler/main.c index d78280f98c..3a8668902b 100644 --- a/scheduler/main.c +++ b/scheduler/main.c @@ -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 diff --git a/scheduler/sysman.c b/scheduler/sysman.c index 7084ddfcd9..be21df3d06 100644 --- a/scheduler/sysman.c +++ b/scheduler/sysman.c @@ -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; } }