summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>2009-01-14 19:55:19 +0000
committermsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>2009-01-14 19:55:19 +0000
commitd2354e63977f1d0386a8d5724db2ec90fb666824 (patch)
treea79c2dacfa8a2f152008b4cd7dbc9aa503af01e3
parentc168a833caab4209bdb0035d8918207d40013591 (diff)
Merge changes from CUPS 1.4svn-r8252.
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current@1123 a1ca3aef-8c08-0410-bb20-df032aa958be
-rw-r--r--CHANGES-1.3.txt6
-rw-r--r--CHANGES.txt14
-rw-r--r--backend/usb-libusb.c8
-rw-r--r--cgi-bin/admin.c18
-rw-r--r--cgi-bin/cgi.h3
-rw-r--r--cgi-bin/html.c54
-rw-r--r--cgi-bin/ipp-var.c90
-rw-r--r--cgi-bin/libcupscgi.exp1
-rw-r--r--config-scripts/cups-manpages.m412
-rw-r--r--cups/conflicts.c70
-rw-r--r--cups/cups.h6
-rw-r--r--cups/encode.c44
-rw-r--r--cups/http-addr.c12
-rw-r--r--cups/http-addrlist.c7
-rw-r--r--cups/ipp.c12
-rw-r--r--cups/libcups.exp1
-rw-r--r--cups/mark.c147
-rw-r--r--cups/testipp.c15
-rw-r--r--cups/testppd.c23
-rw-r--r--doc/Makefile1
-rw-r--r--doc/help/api-array.html4
-rw-r--r--doc/help/api-ppd.html34
-rw-r--r--doc/help/ref-cupsd-conf.html.in14
-rw-r--r--doc/help/sharing.html181
-rw-r--r--doc/help/spec-ipp.html6
-rw-r--r--locale/cups_es.po668
-rw-r--r--packaging/cups.list.in3
-rw-r--r--packaging/cups.spec.in3
-rw-r--r--ppdc/ppdc-driver.cxx8
-rw-r--r--ppdc/ppdc-source.cxx10
-rw-r--r--ppdc/ppdpo.cxx4
-rw-r--r--scheduler/ipp.c11
-rw-r--r--scheduler/job.c23
-rw-r--r--scheduler/printers.c66
-rw-r--r--scheduler/type.c3
-rw-r--r--templates/es/add-rss-subscription.tmpl2
-rw-r--r--templates/es/admin.tmpl2
-rw-r--r--templates/es/error-op.tmpl4
-rw-r--r--templates/es/error.tmpl2
-rw-r--r--templates/es/printer-configured.tmpl4
-rw-r--r--templates/es/printer.tmpl2
-rw-r--r--templates/es/test-page.tmpl2
-rw-r--r--test/4.1-requests.test19
-rw-r--r--test/4.2-cups-printer-ops.test23
-rw-r--r--test/get-printer-attributes-2.0.test47
-rw-r--r--test/ipptest.c120
-rwxr-xr-xtest/run-stp-tests.sh6
47 files changed, 1148 insertions, 667 deletions
diff --git a/CHANGES-1.3.txt b/CHANGES-1.3.txt
index 42e447283..b57dbf20c 100644
--- a/CHANGES-1.3.txt
+++ b/CHANGES-1.3.txt
@@ -3,7 +3,11 @@ CHANGES-1.3.txt
CHANGES IN CUPS V1.3.10
- - Documentation fixes (STR #2994, STR #2995, STR #3008, STR #3056)
+ - Documentation fixes (STR #2994, STR #2995, STR #3008, STR #3056,
+ STR #3057)
+ - The scheduler did not always load MIME type rules correctly
+ (STR #3059)
+ - The test page did not format correctly on A4 paper (STR #3060)
- The web interface sometimes incorrectly redirected users to
127.0.0.1 (STR #3022)
- cupsPrintFile*() did not send the document filename for single
diff --git a/CHANGES.txt b/CHANGES.txt
index 4c35ec79d..262c7e471 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,9 +1,21 @@
-CHANGES.txt - 2009-01-09
+CHANGES.txt - 2009-01-14
------------------------
CHANGES IN CUPS V1.4b3
+ - Documentation fixes (STR #3044, STR #3057)
+ - The libusb-based USB backend did not work.
+ - The scheduler did not set the printer-commands attribute correctly
+ for some PPDs.
+ - The ppdi utility did not work.
+ - The web interface no longer uses multi-part output with old or broken
+ web browsers (STR #3049)
- CUPS now conforms to the draft IPP/2.0 and IPP/2.1 specification.
+ - Added a new cupsGetConflicts() API to get a list of conflicting
+ options.
+ - The PPD compiler didn't localize options or choices that did not
+ have associated translation text (STR #3045)
+ - Updated the Spanish localization (STR #3043)
- Fixed build problems (STR #3040, STR #3047)
- cupsResolveConflicts() did not resolve using the default option
choice in some cases due to the mirror UIConstraints that are
diff --git a/backend/usb-libusb.c b/backend/usb-libusb.c
index 6e6494c49..3cb61e395 100644
--- a/backend/usb-libusb.c
+++ b/backend/usb-libusb.c
@@ -3,7 +3,7 @@
*
* Libusb interface code for the Common UNIX Printing System (CUPS).
*
- * Copyright 2007-2008 by Apple Inc.
+ * Copyright 2007-2009 by Apple Inc.
*
* These coded instructions, statements, and computer programs are the
* property of Apple Inc. and are protected by Federal copyright
@@ -156,13 +156,13 @@ print_device(const char *uri, /* I - Device URI */
* TODO: Add back-channel support, along with better write error handling.
*/
- if (poll(pfds, 2, -1) > 0)
+ while (poll(pfds, 2, -1) > 0)
{
if (pfds[0].revents & POLLIN)
{
if ((bytes = read(print_fd, buffer, sizeof(buffer))) > 0)
{
- while (usb_bulk_write(printer->handle, printer->write_endp, buffer,
+ if (usb_bulk_write(printer->handle, printer->write_endp, buffer,
bytes, 45000) < 0)
{
_cupsLangPrintf(stderr,
@@ -174,7 +174,7 @@ print_device(const char *uri, /* I - Device URI */
tbytes += bytes;
}
- else if (bytes < 0 && errno != EAGAIN && errno != EINTR)
+ else if (bytes == 0 || (bytes < 0 && errno != EAGAIN && errno != EINTR))
break;
}
diff --git a/cgi-bin/admin.c b/cgi-bin/admin.c
index 1601ef7c8..b0b3ae23e 100644
--- a/cgi-bin/admin.c
+++ b/cgi-bin/admin.c
@@ -3,7 +3,7 @@
*
* Administration CGI for the Common UNIX Printing System (CUPS).
*
- * Copyright 2007-2008 by Apple Inc.
+ * Copyright 2007-2009 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -261,7 +261,7 @@ choose_device_cb(
current_device ++;
- if (time(NULL) > last_device_time)
+ if (time(NULL) > last_device_time && cgiSupportsMultipart())
{
/*
* Update the page...
@@ -921,7 +921,21 @@ do_am_printer(http_t *http, /* I - HTTP connection */
if (cupsGetDevices(http, 30, CUPS_INCLUDE_ALL, CUPS_EXCLUDE_NONE,
(cups_device_cb_t)choose_device_cb,
(void *)title) == IPP_OK)
+ {
fputs("DEBUG: Got device list!\n", stderr);
+
+ if (!cgiSupportsMultipart())
+ {
+ /*
+ * Non-modern browsers that don't support multi-part documents get
+ * everything at the end...
+ */
+
+ cgiStartHTML(title);
+ cgiCopyTemplateLang("choose-device.tmpl");
+ cgiEndHTML();
+ }
+ }
else
{
fprintf(stderr,
diff --git a/cgi-bin/cgi.h b/cgi-bin/cgi.h
index 66de5110a..5546d7ac5 100644
--- a/cgi-bin/cgi.h
+++ b/cgi-bin/cgi.h
@@ -3,7 +3,7 @@
*
* CGI support library definitions.
*
- * Copyright 2007-2008 by Apple Inc.
+ * Copyright 2007-2009 by Apple Inc.
* Copyright 1997-2006 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -95,6 +95,7 @@ extern void cgiShowIPPError(const char *message);
extern void cgiShowJobs(http_t *http, const char *dest);
extern void cgiStartHTML(const char *title);
extern void cgiStartMultipart(void);
+extern int cgiSupportsMultipart(void);
extern const char *cgiText(const char *message);
#endif /* !_CUPS_CGI_H_ */
diff --git a/cgi-bin/html.c b/cgi-bin/html.c
index e99245868..2db9bdd25 100644
--- a/cgi-bin/html.c
+++ b/cgi-bin/html.c
@@ -3,7 +3,7 @@
*
* HTML support functions for the Common UNIX Printing System (CUPS).
*
- * Copyright 2007-2008 by Apple Inc.
+ * Copyright 2007-2009 by Apple Inc.
* Copyright 1997-2006 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -14,12 +14,13 @@
*
* Contents:
*
- * cgiEndHTML() - End a HTML page.
- * cgiEndMultipart() - End the delivery of a multipart web page.
- * cgiFormEncode() - Encode a string as a form variable...
- * cgiStartHTML() - Start a HTML page.
- * cgiStartMultipart() - Start a multipart delivery of a web page...
- * cgi_null_passwd() - Return a NULL password for authentication.
+ * cgiEndHTML() - End a HTML page.
+ * cgiEndMultipart() - End the delivery of a multipart web page.
+ * cgiFormEncode() - Encode a string as a form variable.
+ * cgiStartHTML() - Start a HTML page.
+ * cgiStartMultipart() - Start a multipart delivery of a web page.
+ * cgiSupportsMultipart() - Does the browser support multi-part documents?
+ * cgi_null_passwd() - Return a NULL password for authentication.
*/
/*
@@ -72,7 +73,7 @@ cgiEndMultipart(void)
/*
- * 'cgiFormEncode()' - Encode a string as a form variable...
+ * 'cgiFormEncode()' - Encode a string as a form variable.
*/
char * /* O - Destination string */
@@ -183,7 +184,7 @@ cgiStartHTML(const char *title) /* I - Title of page */
/*
- * 'cgiStartMultipart()' - Start a multipart delivery of a web page...
+ * 'cgiStartMultipart()' - Start a multipart delivery of a web page.
*/
void
@@ -196,6 +197,41 @@ cgiStartMultipart(void)
/*
+ * 'cgiSupportsMultipart()' - Does the browser support multi-part documents?
+ */
+
+int /* O - 1 if multi-part supported, 0 otherwise */
+cgiSupportsMultipart(void)
+{
+ const char *user_agent; /* User-Agent string */
+ static int supports_multipart = -1;/* Cached value */
+
+
+ if (supports_multipart < 0)
+ {
+ /*
+ * CUPS STR #3049: Apparently some browsers don't support multi-part
+ * documents, which makes them useless for many web sites. Rather than
+ * abandoning those users, we'll offer a degraded single-part mode...
+ *
+ * Currently we know that anything based on Gecko, MSIE, and Safari all
+ * work. We'll add more as they are reported/tested.
+ */
+
+ if ((user_agent = getenv("HTTP_USER_AGENT")) != NULL &&
+ (strstr(user_agent, " Gecko/") != NULL ||
+ strstr(user_agent, " MSIE ") != NULL ||
+ strstr(user_agent, " Safari/") != NULL))
+ supports_multipart = 1;
+ else
+ supports_multipart = 0;
+ }
+
+ return (supports_multipart);
+}
+
+
+/*
* 'cgi_null_passwd()' - Return a NULL password for authentication.
*/
diff --git a/cgi-bin/ipp-var.c b/cgi-bin/ipp-var.c
index 90c90cf74..842268b67 100644
--- a/cgi-bin/ipp-var.c
+++ b/cgi-bin/ipp-var.c
@@ -3,7 +3,7 @@
*
* CGI <-> IPP variable routines for the Common UNIX Printing System (CUPS).
*
- * Copyright 2007-2008 by Apple Inc.
+ * Copyright 2007-2009 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -548,11 +548,14 @@ cgiPrintCommand(http_t *http, /* I - Connection to server */
* Show status...
*/
- cgiStartMultipart();
- cgiStartHTML(title);
- cgiCopyTemplateLang("command.tmpl");
- cgiEndHTML();
- fflush(stdout);
+ if (cgiSupportsMultipart())
+ {
+ cgiStartMultipart();
+ cgiStartHTML(title);
+ cgiCopyTemplateLang("command.tmpl");
+ cgiEndHTML();
+ fflush(stdout);
+ }
/*
* Send the command file job...
@@ -574,7 +577,9 @@ cgiPrintCommand(http_t *http, /* I - Connection to server */
cgiStartHTML(title);
cgiCopyTemplateLang("error.tmpl");
cgiEndHTML();
- cgiEndMultipart();
+
+ if (cgiSupportsMultipart())
+ cgiEndMultipart();
return;
}
@@ -592,7 +597,9 @@ cgiPrintCommand(http_t *http, /* I - Connection to server */
cgiStartHTML(title);
cgiCopyTemplateLang("error.tmpl");
cgiEndHTML();
- cgiEndMultipart();
+
+ if (cgiSupportsMultipart())
+ cgiEndMultipart();
cupsCancelJob(dest, job_id);
return;
@@ -602,44 +609,47 @@ cgiPrintCommand(http_t *http, /* I - Connection to server */
* Wait for the job to complete...
*/
- for (;;)
+ if (cgiSupportsMultipart())
{
- /*
- * Get the current job state...
- */
+ for (;;)
+ {
+ /*
+ * Get the current job state...
+ */
- snprintf(uri, sizeof(uri), "ipp://localhost/jobs/%d", job_id);
- request = ippNewRequest(IPP_GET_JOB_ATTRIBUTES);
- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri",
- NULL, uri);
- if (user)
- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
- "requesting-user-name", NULL, user);
- ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
- "requested-attributes", 2, NULL, job_attrs);
+ snprintf(uri, sizeof(uri), "ipp://localhost/jobs/%d", job_id);
+ request = ippNewRequest(IPP_GET_JOB_ATTRIBUTES);
+ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri",
+ NULL, uri);
+ if (user)
+ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
+ "requesting-user-name", NULL, user);
+ ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
+ "requested-attributes", 2, NULL, job_attrs);
- if ((response = cupsDoRequest(http, request, "/")) != NULL)
- cgiSetIPPVars(response, NULL, NULL, NULL, 0);
+ if ((response = cupsDoRequest(http, request, "/")) != NULL)
+ cgiSetIPPVars(response, NULL, NULL, NULL, 0);
- attr = ippFindAttribute(response, "job-state", IPP_TAG_ENUM);
- if (!attr || attr->values[0].integer >= IPP_JOB_STOPPED)
- {
- ippDelete(response);
- break;
- }
+ attr = ippFindAttribute(response, "job-state", IPP_TAG_ENUM);
+ if (!attr || attr->values[0].integer >= IPP_JOB_STOPPED)
+ {
+ ippDelete(response);
+ break;
+ }
- /*
- * Job not complete, so update the status...
- */
+ /*
+ * Job not complete, so update the status...
+ */
- ippDelete(response);
+ ippDelete(response);
- cgiStartHTML(title);
- cgiCopyTemplateLang("command.tmpl");
- cgiEndHTML();
- fflush(stdout);
+ cgiStartHTML(title);
+ cgiCopyTemplateLang("command.tmpl");
+ cgiEndHTML();
+ fflush(stdout);
- sleep(5);
+ sleep(5);
+ }
}
/*
@@ -655,7 +665,9 @@ cgiPrintCommand(http_t *http, /* I - Connection to server */
cgiStartHTML(title);
cgiCopyTemplateLang("command.tmpl");
cgiEndHTML();
- cgiEndMultipart();
+
+ if (cgiSupportsMultipart())
+ cgiEndMultipart();
}
diff --git a/cgi-bin/libcupscgi.exp b/cgi-bin/libcupscgi.exp
index efe0ac7e3..73e309e96 100644
--- a/cgi-bin/libcupscgi.exp
+++ b/cgi-bin/libcupscgi.exp
@@ -30,6 +30,7 @@ _cgiShowIPPError
_cgiShowJobs
_cgiStartHTML
_cgiStartMultipart
+_cgiSupportsMultipart
_cgiText
_helpDeleteIndex
_helpFindNode
diff --git a/config-scripts/cups-manpages.m4 b/config-scripts/cups-manpages.m4
index 13881c5bf..44d31369b 100644
--- a/config-scripts/cups-manpages.m4
+++ b/config-scripts/cups-manpages.m4
@@ -51,14 +51,6 @@ AC_SUBST(PMANDIR)
dnl Setup manpage extensions...
case "$uname" in
- *BSD* | Darwin*)
- # *BSD
- MAN1EXT=1
- MAN5EXT=5
- MAN7EXT=7
- MAN8EXT=8
- MAN8DIR=8
- ;;
IRIX*)
# SGI IRIX
MAN1EXT=1
@@ -75,8 +67,8 @@ case "$uname" in
MAN8EXT=1m
MAN8DIR=1m
;;
- Linux* | GNU*)
- # Linux and GNU Hurd
+ Linux* | GNU* | Darwin*)
+ # Linux, GNU Hurd, and Mac OS X
MAN1EXT=1.gz
MAN5EXT=5.gz
MAN7EXT=7.gz
diff --git a/cups/conflicts.c b/cups/conflicts.c
index a99810cd9..6376f69ef 100644
--- a/cups/conflicts.c
+++ b/cups/conflicts.c
@@ -18,6 +18,8 @@
*
* Contents:
*
+ * cupsGetConflicts() - Get a list of conflicting options in a marked
+ * PPD.
* cupsResolveConflicts() - Resolve conflicts in a marked PPD.
* ppdConflicts() - Check to see if there are any conflicts among
* the marked option choices.
@@ -66,6 +68,74 @@ static cups_array_t *ppd_test_constraints(ppd_file_t *ppd,
/*
+ * 'cupsGetConflicts()' - Get a list of conflicting options in a marked PPD.
+ *
+ * This function gets a list of options that would conflict if "option" and
+ * "choice" were marked in the PPD. You would typically call this function
+ * after marking the currently selected options in the PPD in order to
+ * determine whether a new option selection would cause a conflict.
+ *
+ * The number of conflicting options are returned with "options" pointing to
+ * the conflicting options. The returned option array must be freed using
+ * @link cupsFreeOptions@.
+ *
+ * @since CUPS 1.4@
+ */
+
+int /* O - Number of conflicting options */
+cupsGetConflicts(
+ ppd_file_t *ppd, /* I - PPD file */
+ const char *option, /* I - Option to test */
+ const char *choice, /* I - Choice to test */
+ cups_option_t **options) /* O - Conflicting options */
+{
+ int i, /* Looping var */
+ num_options; /* Number of conflicting options */
+ cups_array_t *active; /* Active conflicts */
+ _ppd_cups_uiconsts_t *c; /* Current constraints */
+ _ppd_cups_uiconst_t *cptr; /* Current constraint */
+
+
+ /*
+ * Range check input...
+ */
+
+ if (options)
+ *options = NULL;
+
+ if (!ppd || !option || !choice || !options)
+ return (0);
+
+ /*
+ * Test for conflicts...
+ */
+
+ active = ppd_test_constraints(ppd, option, choice, 0, NULL,
+ _PPD_ALL_CONSTRAINTS);
+
+ /*
+ * Loop through all of the UI constraints and add any options that conflict...
+ */
+
+ for (num_options = 0, c = (_ppd_cups_uiconsts_t *)cupsArrayFirst(active);
+ c;
+ c = (_ppd_cups_uiconsts_t *)cupsArrayNext(active))
+ {
+ for (i = c->num_constraints, cptr = c->constraints;
+ i > 0;
+ i --, cptr ++)
+ if (strcasecmp(cptr->option->keyword, option))
+ num_options = cupsAddOption(cptr->option->keyword, cptr->choice->choice,
+ num_options, options);
+ }
+
+ cupsArrayDelete(active);
+
+ return (num_options);
+}
+
+
+/*
* 'cupsResolveConflicts()' - Resolve conflicts in a marked PPD.
*
* This function attempts to resolve any conflicts in a marked PPD, returning
diff --git a/cups/cups.h b/cups/cups.h
index 6d3ca29a4..153ceb499 100644
--- a/cups/cups.h
+++ b/cups/cups.h
@@ -3,7 +3,7 @@
*
* API definitions for the Common UNIX Printing System (CUPS).
*
- * Copyright 2007-2008 by Apple Inc.
+ * Copyright 2007-2009 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -281,6 +281,10 @@ extern int cupsCreateJob(http_t *http, const char *name,
cups_option_t *options) _CUPS_API_1_4;
extern ipp_status_t cupsFinishDocument(http_t *http,
const char *name) _CUPS_API_1_4;
+extern int cupsGetConflicts(ppd_file_t *ppd, const char *option,
+ const char *choice,
+ cups_option_t **options)
+ _CUPS_API_1_4;
extern ipp_status_t cupsGetDevices(http_t *http, int timeout,
const char *exclude_schemes,
const char *include_schemes,
diff --git a/cups/encode.c b/cups/encode.c
index 7d9198ea7..16762aa0c 100644
--- a/cups/encode.c
+++ b/cups/encode.c
@@ -3,7 +3,7 @@
*
* Option encoding routines for the Common UNIX Printing System (CUPS).
*
- * Copyright 2007-2008 by Apple Inc.
+ * Copyright 2007-2009 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -86,6 +86,13 @@ static const _ipp_option_t ipp_options[] =
{ 1, "marker-names", IPP_TAG_NAME, IPP_TAG_PRINTER },
{ 1, "marker-types", IPP_TAG_KEYWORD, IPP_TAG_PRINTER },
{ 1, "media", IPP_TAG_KEYWORD, IPP_TAG_JOB },
+ { 0, "media-col", IPP_TAG_BEGIN_COLLECTION, IPP_TAG_JOB },
+ { 0, "media-col-default", IPP_TAG_BEGIN_COLLECTION, IPP_TAG_PRINTER },
+ { 0, "media-color", IPP_TAG_KEYWORD, IPP_TAG_JOB },
+ { 1, "media-default", IPP_TAG_KEYWORD, IPP_TAG_PRINTER },
+ { 0, "media-key", IPP_TAG_KEYWORD, IPP_TAG_JOB },
+ { 0, "media-size", IPP_TAG_BEGIN_COLLECTION, IPP_TAG_JOB },
+ { 0, "media-type", IPP_TAG_KEYWORD, IPP_TAG_JOB },
{ 0, "mirror", IPP_TAG_BOOLEAN, IPP_TAG_JOB },
{ 0, "mirror-default", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER },
{ 0, "natural-scaling", IPP_TAG_INTEGER, IPP_TAG_JOB },
@@ -152,7 +159,9 @@ static const _ipp_option_t ipp_options[] =
{ 0, "sides", IPP_TAG_KEYWORD, IPP_TAG_JOB },
{ 0, "sides-default", IPP_TAG_KEYWORD, IPP_TAG_PRINTER },
{ 0, "wrap", IPP_TAG_BOOLEAN, IPP_TAG_JOB },
- { 0, "wrap-default", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER }
+ { 0, "wrap-default", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER },
+ { 0, "x-dimension", IPP_TAG_INTEGER, IPP_TAG_JOB },
+ { 0, "y-dimension", IPP_TAG_INTEGER, IPP_TAG_JOB }
};
@@ -215,6 +224,9 @@ cupsEncodeOptions2(
ipp_attribute_t *attr; /* IPP attribute */
ipp_tag_t value_tag; /* IPP value tag */
cups_option_t *option; /* Current option */
+ ipp_t *collection; /* Collection value */
+ int num_cols; /* Number of collection values */
+ cups_option_t *cols; /* Collection values */
DEBUG_printf(("cupsEncodeOptions2(ipp=%p, num_options=%d, options=%p, "
@@ -369,6 +381,7 @@ cupsEncodeOptions2(
*/
DEBUG_puts("cupsEncodeOptions2: Ran out of memory for value copy!");
+ ippDeleteAttribute(ipp, attr);
return;
}
@@ -534,6 +547,28 @@ cupsEncodeOptions2(
"\"%s\"...\n", (char *)attr->values[j].unknown.data));
break;
+ case IPP_TAG_BEGIN_COLLECTION :
+ /*
+ * Collection value
+ */
+
+ num_cols = cupsParseOptions(val, 0, &cols);
+ if ((collection = ippNew()) == NULL)
+ {
+ cupsFreeOptions(num_cols, cols);
+
+ if (copy)
+ free(copy);
+
+ ippDeleteAttribute(ipp, attr);
+ return;
+ }
+
+ attr->values[j].collection = collection;
+ cupsEncodeOptions2(collection, num_cols, cols, IPP_TAG_JOB);
+ cupsFreeOptions(num_cols, cols);
+ break;
+
default :
if ((attr->values[j].string.text = _cupsStrAlloc(val)) == NULL)
{
@@ -542,6 +577,11 @@ cupsEncodeOptions2(
*/
DEBUG_puts("cupsEncodeOptions2: Ran out of memory for string!");
+
+ if (copy)
+ free(copy);
+
+ ippDeleteAttribute(ipp, attr);
return;
}
diff --git a/cups/http-addr.c b/cups/http-addr.c
index 9a39292eb..52e828525 100644
--- a/cups/http-addr.c
+++ b/cups/http-addr.c
@@ -3,7 +3,7 @@
*
* HTTP address routines for the Common UNIX Printing System (CUPS).
*
- * Copyright 2007-2008 by Apple Inc.
+ * Copyright 2007-2009 by Apple Inc.
* Copyright 1997-2006 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
@@ -207,6 +207,16 @@ httpAddrLookup(
}
#endif /* AF_LOCAL */
+ /*
+ * Optimize lookups for localhost/loopback addresses...
+ */
+
+ if (httpAddrLocalhost(addr))
+ {
+ strlcpy(name, "localhost", namelen);
+ return (name);
+ }
+
#ifdef HAVE_RES_INIT
/*
* STR #2920: Initialize resolver after failure in cups-polld
diff --git a/cups/http-addrlist.c b/cups/http-addrlist.c
index b44acc636..a5b2e1f58 100644
--- a/cups/http-addrlist.c
+++ b/cups/http-addrlist.c
@@ -3,7 +3,7 @@
*
* HTTP address list routines for the Common UNIX Printing System (CUPS).
*
- * Copyright 2007-2008 by Apple Inc.
+ * Copyright 2007-2009 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
@@ -265,6 +265,7 @@ httpAddrGetList(const char *hostname, /* I - Hostname, IP address, or NULL for p
}
else
#endif /* AF_LOCAL */
+ if (!hostname || strcasecmp(hostname, "localhost"))
{
#ifdef HAVE_GETADDRINFO
struct addrinfo hints, /* Address lookup hints */
@@ -501,7 +502,7 @@ httpAddrGetList(const char *hostname, /* I - Hostname, IP address, or NULL for p
* Detect some common errors and handle them sanely...
*/
- if (!addr && (!hostname || !strcmp(hostname, "localhost")))
+ if (!addr && (!hostname || !strcasecmp(hostname, "localhost")))
{
struct servent *port; /* Port number for service */
int portnum; /* Port number */
@@ -530,7 +531,7 @@ httpAddrGetList(const char *hostname, /* I - Hostname, IP address, or NULL for p
else
return (NULL);
- if (hostname && !strcmp(hostname, "localhost"))
+ if (hostname && !strcasecmp(hostname, "localhost"))
{
/*
* Unfortunately, some users ignore all of the warnings in the
diff --git a/cups/ipp.c b/cups/ipp.c
index de0f12c40..f8e7dafa6 100644
--- a/cups/ipp.c
+++ b/cups/ipp.c
@@ -1109,18 +1109,6 @@ ippReadIO(void *src, /* I - Data source */
}
/*
- * Verify the major version number...
- */
-
- if (buffer[0] != 1 && buffer[0] != 2)
- {
- DEBUG_printf(("ippReadIO: version number (%d.%d) is bad.\n",
- buffer[0], buffer[1]));
- ipp_buffer_release(buffer);
- return (IPP_ERROR);
- }
-
- /*
* Then copy the request header over...
*/
diff --git a/cups/libcups.exp b/cups/libcups.exp
index 32803d6b6..74914ae44 100644
--- a/cups/libcups.exp
+++ b/cups/libcups.exp
@@ -140,6 +140,7 @@ _cupsFreeDests
_cupsFreeJobs
_cupsFreeOptions
_cupsGetClasses
+_cupsGetConflicts
_cupsGetDefault
_cupsGetDefault2
_cupsGetDest
diff --git a/cups/mark.c b/cups/mark.c
index 4466ec1ce..b2cef1f2d 100644
--- a/cups/mark.c
+++ b/cups/mark.c
@@ -79,10 +79,12 @@ cupsMarkOptions(
cups_option_t *options) /* I - Options */
{
int i, j, k; /* Looping vars */
- char *val, /* Pointer into value */
- *ptr, /* Pointer into string */
+ char *ptr, /* Pointer into string */
s[255]; /* Temporary string */
- const char *page_size; /* PageSize option */
+ const char *val, /* Pointer into value */
+ *media, /* media option */
+ *media_col, /* media-col option */
+ *page_size; /* PageSize option */
cups_option_t *optptr; /* Current option */
ppd_option_t *option; /* PPD option */
ppd_attr_t *attr; /* PPD attribute */
@@ -123,61 +125,124 @@ cupsMarkOptions(
debug_marked(ppd, "Before...");
/*
- * Mark options...
+ * Do special handling for media, media-col, and PageSize...
*/
- for (i = num_options, optptr = options; i > 0; i --, optptr ++)
- if (!strcasecmp(optptr->name, "media"))
+ media = cupsGetOption("media", num_options, options);
+ media_col = cupsGetOption("media-col", num_options, options);
+ page_size = cupsGetOption("PageSize", num_options, options);
+
+ if (media_col && (!page_size || !page_size[0]))
+ {
+ /*
+ * Pull out the corresponding media size from the media-col value...
+ */
+
+ int num_media_cols, /* Number of media-col values */
+ num_media_sizes;/* Number of media-size values */
+ cups_option_t *media_cols, /* media-col values */
+ *media_sizes; /* media-size values */
+
+
+ num_media_cols = cupsParseOptions(media_col, 0, &media_cols);
+
+ if ((val = cupsGetOption("media-key", num_media_cols, media_cols)) != NULL)
+ media = val;
+ else if ((val = cupsGetOption("media-size", num_media_cols,
+ media_cols)) != NULL)
{
/*
- * Loop through the option string, separating it at commas and
- * marking each individual option as long as the corresponding
- * PPD option (PageSize, InputSlot, etc.) is not also set.
- *
- * For PageSize, we also check for an empty option value since
- * some versions of MacOS X use it to specify auto-selection
- * of the media based solely on the size.
+ * Lookup by dimensions...
*/
- page_size = cupsGetOption("PageSize", num_options, options);
+ double width, /* Width in points */
+ length; /* Length in points */
+ struct lconv *loc; /* Locale data */
+ _cups_pwg_media_t *pwgmedia; /* PWG media name */
- for (val = optptr->value; *val;)
- {
- /*
- * Extract the sub-option from the string...
- */
- for (ptr = s; *val && *val != ',' && (ptr - s) < (sizeof(s) - 1);)
- *ptr++ = *val++;
- *ptr++ = '\0';
+ num_media_sizes = cupsParseOptions(val, 0, &media_sizes);
+ loc = localeconv();
- if (*val == ',')
- val ++;
+ if ((val = cupsGetOption("x-dimension", num_media_sizes,
+ media_sizes)) != NULL)
+ width = _cupsStrScand(val, NULL, loc) * 2540.0 / 72.0;
+ else
+ width = 0.0;
- /*
- * Mark it...
- */
+ if ((val = cupsGetOption("y-dimension", num_media_sizes,
+ media_sizes)) != NULL)
+ length = _cupsStrScand(val, NULL, loc) * 2540.0 / 72.0;
+ else
+ length = 0.0;
- if (!page_size || !page_size[0])
- ppd_mark_size(ppd, s);
+ if ((pwgmedia = _cupsPWGMediaBySize(width, length)) != NULL)
+ media = pwgmedia->pwg;
- if (cupsGetOption("InputSlot", num_options, options) == NULL)
- ppd_mark_option(ppd, "InputSlot", s);
+ cupsFreeOptions(num_media_sizes, media_sizes);
+ }
- if (cupsGetOption("MediaType", num_options, options) == NULL)
- ppd_mark_option(ppd, "MediaType", s);
+ cupsFreeOptions(num_media_cols, media_cols);
+ }
- if (cupsGetOption("EFMediaType", num_options, options) == NULL)
- ppd_mark_option(ppd, "EFMediaType", s); /* EFI */
+ if (media)
+ {
+ /*
+ * Loop through the option string, separating it at commas and
+ * marking each individual option as long as the corresponding
+ * PPD option (PageSize, InputSlot, etc.) is not also set.
+ *
+ * For PageSize, we also check for an empty option value since
+ * some versions of MacOS X use it to specify auto-selection
+ * of the media based solely on the size.
+ */
- if (cupsGetOption("EFMediaQualityMode", num_options, options) == NULL)
- ppd_mark_option(ppd, "EFMediaQualityMode", s); /* EFI */
+ for (val = media; *val;)
+ {
+ /*
+ * Extract the sub-option from the string...
+ */
- if (!strcasecmp(s, "manual") &&
- !cupsGetOption("ManualFeed", num_options, options))
- ppd_mark_option(ppd, "ManualFeed", "True");
- }
+ for (ptr = s; *val && *val != ',' && (ptr - s) < (sizeof(s) - 1);)
+ *ptr++ = *val++;
+ *ptr++ = '\0';
+
+ if (*val == ',')
+ val ++;
+
+ /*
+ * Mark it...
+ */
+
+ if (!page_size || !page_size[0])
+ ppd_mark_size(ppd, s);
+
+ if (cupsGetOption("InputSlot", num_options, options) == NULL)
+ ppd_mark_option(ppd, "InputSlot", s);
+
+ if (cupsGetOption("MediaType", num_options, options) == NULL)
+ ppd_mark_option(ppd, "MediaType", s);
+
+ if (cupsGetOption("EFMediaType", num_options, options) == NULL)
+ ppd_mark_option(ppd, "EFMediaType", s); /* EFI */
+
+ if (cupsGetOption("EFMediaQualityMode", num_options, options) == NULL)
+ ppd_mark_option(ppd, "EFMediaQualityMode", s); /* EFI */
+
+ if (!strcasecmp(s, "manual") &&
+ !cupsGetOption("ManualFeed", num_options, options))
+ ppd_mark_option(ppd, "ManualFeed", "True");
}
+ }
+
+ /*
+ * Mark other options...
+ */
+
+ for (i = num_options, optptr = options; i > 0; i --, optptr ++)
+ if (!strcasecmp(optptr->name, "media") ||
+ !strcasecmp(optptr->name, "media-col"))
+ continue;
else if (!strcasecmp(optptr->name, "sides"))
{
for (j = 0;
diff --git a/cups/testipp.c b/cups/testipp.c
index aa119ace9..972c6474d 100644
--- a/cups/testipp.c
+++ b/cups/testipp.c
@@ -3,7 +3,7 @@
*
* IPP test program for the Common UNIX Printing System (CUPS).
*
- * Copyright 2007 by Apple Inc.
+ * Copyright 2007-2009 by Apple Inc.
* Copyright 1997-2005 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -488,7 +488,7 @@ print_attributes(ipp_t *ipp, /* I - IPP request */
for (group = IPP_TAG_ZERO, attr = ipp->attrs; attr; attr = attr->next)
{
- if ((attr->group_tag == IPP_TAG_ZERO && indent <= 8) || !attr->name)
+ if (!attr->name && indent == 4)
{
group = IPP_TAG_ZERO;
putchar('\n');
@@ -499,17 +499,10 @@ print_attributes(ipp_t *ipp, /* I - IPP request */
{
group = attr->group_tag;
- putchar('\n');
- for (i = 4; i < indent; i ++)
- putchar(' ');
-
- printf("%s:\n\n", tags[group]);
+ printf("\n%*s%s:\n\n", indent - 4, "", tags[group]);
}
- for (i = 0; i < indent; i ++)
- putchar(' ');
-
- printf("%s (", attr->name);
+ printf("%*s%s (", indent, "", attr->name ? attr->name : "(null)");
if (attr->num_values > 1)
printf("1setOf ");
printf("%s):", tags[attr->value_tag]);
diff --git a/cups/testppd.c b/cups/testppd.c
index 97337ccac..44c43b55b 100644
--- a/cups/testppd.c
+++ b/cups/testppd.c
@@ -113,7 +113,8 @@ main(int argc, /* I - Number of command-line arguments */
int conflicts; /* Number of conflicts */
char *s; /* String */
char buffer[8192]; /* String buffer */
- const char *text; /* Localized text */
+ const char *text, /* Localized text */
+ *val; /* Option value */
int num_options; /* Number of options */
cups_option_t *options; /* Options */
ppd_size_t minsize, /* Minimum size */
@@ -265,8 +266,26 @@ main(int argc, /* I - Number of command-line arguments */
* Test constraints...
*/
- fputs("ppdConflicts(): ", stdout);
+ fputs("cupsGetConflicts(InputSlot=Envelope): ", stdout);
ppdMarkOption(ppd, "PageSize", "Letter");
+
+ num_options = cupsGetConflicts(ppd, "InputSlot", "Envelope", &options);
+ if (num_options != 2 ||
+ (val = cupsGetOption("PageRegion", num_options, options)) == NULL ||
+ strcasecmp(val, "Letter") ||
+ (val = cupsGetOption("PageSize", num_options, options)) == NULL ||
+ strcasecmp(val, "Letter"))
+ {
+ printf("FAIL (%d options:", num_options);
+ for (i = 0; i < num_options; i ++)
+ printf(" %s=%s", options[i].name, options[i].value);
+ puts(")");
+ status ++;
+ }
+ else
+ puts("PASS");
+
+ fputs("ppdConflicts(): ", stdout);
ppdMarkOption(ppd, "InputSlot", "Envelope");
if ((conflicts = ppdConflicts(ppd)) == 2)
diff --git a/doc/Makefile b/doc/Makefile
index bf8bca0d1..0c894afaa 100644
--- a/doc/Makefile
+++ b/doc/Makefile
@@ -104,6 +104,7 @@ HELPFILES = \
help/ref-snmp-conf.html \
help/ref-subscriptions-conf.html \
help/security.html \
+ help/sharing.html \
help/spec-banner.html \
help/spec-browsing.html \
help/spec-cmp.html \
diff --git a/doc/help/api-array.html b/doc/help/api-array.html
index f7373e3b6..1916f3d59 100644
--- a/doc/help/api-array.html
+++ b/doc/help/api-array.html
@@ -388,8 +388,8 @@ div.contents ul.subcontents li {
<li><a href="#cupsArrayNext" title="Get the next element in the array.">cupsArrayNext</a></li>
<li><a href="#cupsArrayPrev" title="Get the previous element in the array.">cupsArrayPrev</a></li>
<li><a href="#cupsArrayRemove" title="Remove an element from the array.">cupsArrayRemove</a></li>
-<li><a href="#cupsArrayRestore" title="Reset the current element to the last <a href="#cupsArraySave"><code>cupsArraySave</code></a>.">cupsArrayRestore</a></li>
-<li><a href="#cupsArraySave" title="Mark the current element for a later <a href="#cupsArrayRestore"><code>cupsArrayRestore</code></a>.">cupsArraySave</a></li>
+<li><a href="#cupsArrayRestore" title="Reset the current element to the last cupsArraySave.">cupsArrayRestore</a></li>
+<li><a href="#cupsArraySave" title="Mark the current element for a later cupsArrayRestore.">cupsArraySave</a></li>
<li><a href="#cupsArrayUserData" title="Return the user data for an array.">cupsArrayUserData</a></li>
</ul></li>
<li><a href="#TYPES">Data Types</a><ul class="code">
diff --git a/doc/help/api-ppd.html b/doc/help/api-ppd.html
index 3da1d965e..98b81f3e4 100644
--- a/doc/help/api-ppd.html
+++ b/doc/help/api-ppd.html
@@ -375,6 +375,7 @@ div.contents ul.subcontents li {
<li><a href="#ATTRIBUTES">Attributes</a></li>
</ul></li>
<li><a href="#FUNCTIONS">Functions</a><ul class="code">
+<li><a href="#cupsGetConflicts" title="Get a list of conflicting options in a marked PPD.">cupsGetConflicts</a></li>
<li><a href="#cupsMarkOptions" title="Mark command-line options in a PPD file.">cupsMarkOptions</a></li>
<li><a href="#cupsResolveConflicts" title="Resolve conflicts in a marked PPD.">cupsResolveConflicts</a></li>
<li><a href="#ppdClose" title="Free all memory used by the PPD file.">ppdClose</a></li>
@@ -689,6 +690,39 @@ for (attr = <a href="#ppdFindAttr">ppdFindAttr</a>(ppd, "Product", NULL);
puts(attr->value);
</pre>
<h2 class="title"><a name="FUNCTIONS">Functions</a></h2>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.4&nbsp;</span><a name="cupsGetConflicts">cupsGetConflicts</a></h3>
+<p class="description">Get a list of conflicting options in a marked PPD.</p>
+<p class="code">
+int cupsGetConflicts (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *option,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *choice,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;cups_option_t **options<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ppd</dt>
+<dd class="description">PPD file</dd>
+<dt>option</dt>
+<dd class="description">Option to test</dd>
+<dt>choice</dt>
+<dd class="description">Choice to test</dd>
+<dt>options</dt>
+<dd class="description">Conflicting options</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Number of conflicting options</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function gets a list of options that would conflict if &quot;option&quot; and
+&quot;choice&quot; were marked in the PPD. You would typically call this function
+after marking the currently selected options in the PPD in order to
+determine whether a new option selection would cause a conflict.<br>
+<br>
+The number of conflicting options are returned with &quot;options&quot; pointing to
+the conflicting options. The returned option array must be freed using
+<a href="#cupsFreeOptions"><code>cupsFreeOptions</code></a>.
+
+</p>
<h3 class="function"><a name="cupsMarkOptions">cupsMarkOptions</a></h3>
<p class="description">Mark command-line options in a PPD file.</p>
<p class="code">
diff --git a/doc/help/ref-cupsd-conf.html.in b/doc/help/ref-cupsd-conf.html.in
index 33b669349..6c51b9d99 100644
--- a/doc/help/ref-cupsd-conf.html.in
+++ b/doc/help/ref-cupsd-conf.html.in
@@ -559,7 +559,9 @@ BrowseLocalProtocols none
BrowseLocalProtocols cups
BrowseLocalProtocols dnssd
BrowseLocalProtocols ldap
+BrowseLocalProtocols lpd
BrowseLocalProtocols slp
+BrowseLocalProtocols smb
BrowseLocalProtocols cups dnssd
</PRE>
@@ -568,7 +570,7 @@ BrowseLocalProtocols cups dnssd
<P>The <CODE>BrowseLocalProtocols</CODE> directive specifies the
protocols to use when advertising local shared printers on the
network. Multiple protocols can be specified by separating them
-with spaces. The default is <CODE>@CUPS_BROWSE_REMOTE_PROTOCOLS@</CODE>.</P>
+with spaces. The default is "<CODE>@CUPS_BROWSE_LOCAL_PROTOCOLS@</CODE>".</P>
<H2 CLASS="title"><A NAME="BrowseOrder">BrowseOrder</A></H2>
@@ -652,7 +654,9 @@ BrowseProtocols none
BrowseProtocols cups
BrowseProtocols dnssd
BrowseProtocols ldap
+BrowseProtocols lpd
BrowseProtocols slp
+BrowseProtocols smb
BrowseProtocols cups dnssd
</PRE>
@@ -662,9 +666,9 @@ BrowseProtocols cups dnssd
protocols to use when showing and advertising shared printers on
the local network. Multiple protocols can be specified by
separating them with spaces. The default protocol is
-<CODE>@CUPS_BROWSE_LOCAL_PROTOCOLS@</CODE> for
+"<CODE>@CUPS_BROWSE_LOCAL_PROTOCOLS@</CODE>" for
<A HREF="#BrowseLocalProtocols"><CODE>BrowseLocalProtocols</CODE></A> and
-<CODE>@CUPS_BROWSE_REMOTE_PROTOCOLS@</CODE> for
+"<CODE>@CUPS_BROWSE_REMOTE_PROTOCOLS@</CODE>" for
<A HREF="#BrowseRemoteProtocols"><CODE>BrowseRemoteProtocols</CODE></A>.</P>
<BLOCKQUOTE><B>Note:</B>
@@ -736,10 +740,8 @@ The default is to not include any options.</P>
BrowseRemoteProtocols all
BrowseRemoteProtocols none
BrowseRemoteProtocols cups
-BrowseRemoteProtocols dnssd
BrowseRemoteProtocols ldap
BrowseRemoteProtocols slp
-BrowseRemoteProtocols cups dnssd
</PRE>
<H3>Description</H3>
@@ -747,7 +749,7 @@ BrowseRemoteProtocols cups dnssd
<P>The <CODE>BrowseRemoteProtocols</CODE> directive specifies the
protocols to use when finding remote shared printers on the
network. Multiple protocols can be specified by separating them
-with spaces. The default is <CODE>@CUPS_BROWSE_REMOTE_PROTOCOLS@</CODE>.</P>
+with spaces. The default is "<CODE>@CUPS_BROWSE_REMOTE_PROTOCOLS@</CODE>".</P>
<H2 CLASS="title"><A NAME="BrowseShortNames">BrowseShortNames</A></H2>
diff --git a/doc/help/sharing.html b/doc/help/sharing.html
new file mode 100644
index 000000000..29bb757ad
--- /dev/null
+++ b/doc/help/sharing.html
@@ -0,0 +1,181 @@
+<html>
+<!-- SECTION: Getting Started -->
+<head>
+ <title>Printer Sharing</title>
+</head>
+<body>
+
+<p>This document discusses several ways to configure printer sharing.</p>
+
+<h2><a name="BASICS">The Basics</h2>
+
+<p>A "server" is any machine that communicates directly to a printer. A "client"
+is any machine that sends print jobs to a server for final printing. Clients can
+also be servers if they communicate directly with any printers of their own.</p>
+
+<p>By default, CUPS uses the Internet Printing Protocol (IPP) to send jobs from
+a client to a server. When printing to legacy print servers you may also use the
+Line Printer Daemon (LPD) when printing to older UNIX-based servers or Server
+Message Block (SMB) when printing to Windows<sup>&reg;</sup> servers.</p>
+
+<p>Clients can automatically discover and access shared printers via CUPS
+browsing, IPP, Service Location Protocol (SLP), and Lightweight Directory Access
+Protocol (LDAP). DNS Service Discovery (DNS-SD a.k.a. Bonjour<sup>&reg;</sup>)
+and SMB browsing can also be used to manually discover and access shared
+printers.</p>
+
+
+<h2><a name="SERVER_CONFIG">Configuring the Server</a></h2>
+
+<p>You must enable printer sharing on the server before clients can print
+through it. The simplest way to do this is to use the
+<a href="man-cupsctl.html">cupsctl(8)</a> command on the server:</p>
+
+<pre class="command">
+cupsctl --share-printers
+</pre>
+
+<p>By default, the above command will allow printing from other clients on the
+same subnet as your server. To allow printing from any subnet, use the following
+command instead:</p>
+
+<pre class="command">
+cupsctl --share-printers --remote-any
+</pre>
+
+<p>Next, you need to choose which protocols to use for printer sharing. The
+default is CUPS browsing and DNS-SD on Mac OS X and CUPS browsing alone on
+other platforms. To set the sharing protocols, run the <b>cupsctl</b> command
+to set the
+<a href="ref-cupsd-conf.html#BrowseLocalProtocols">BrowseLocalProtocols</a>
+value. For example, run the following command to allow shared printing via
+CUPS, DNS-SD, LPD, and SMB:</p>
+
+<pre class="command">
+cupsctl 'BrowseLocalProtocols="cups dnssd lpd smb"'
+</pre>
+
+
+<h2><a name="AUTO_CUPS">Automatic Configuration using CUPS Browsing</a></h2>
+
+<p>CUPS browsing works by periodically broadcasting information about printers
+that are being shared to client systems on the same subnet. Each client
+maintains its own list of shared printers, and when more than one server shares
+the same printer (or the same kind of printer) the client uses all of the
+servers and printers to provide high-availability and failsafe printing.</p>
+
+<p>To configure printers on the same subnet, <em>do nothing</em>. Each client
+should see the available printers within 30 seconds automatically. The printer
+and class lists are updated automatically as printers and servers are added or
+removed.</p>
+
+<blockquote><b>Note:</b>
+
+<p>Due to user interface changes in Mac OS X 10.5, CUPS shared printers will not
+automatically appear in the print dialog. Instead, you must first run the
+following command to enable CUPS browsing on your system:</p>
+
+<pre class="command">
+cupsctl BrowseRemoteProtocols=cups
+</pre>
+
+<p>Then choose each of the CUPS shared printers you want to see in the print
+dialog by adding them, either from the <var>Add Printer...</var> item in the
+print dialog or from the <var>Print &amp; Fax</var> preference pane in the
+<var>System Preferences</var> window.</p>
+
+</blockquote>
+
+<h3><a name="BROWSE_POLL">Seeing Printers on Other Subnets</a></h3>
+
+<p>You can automatically access printers on other subnets by adding
+<a href="ref-cupsd-conf.html#BrowsePoll"><code>BrowsePoll</code></a> lines
+to the <var>cupsd.conf</var> file on your local system. For a single
+server you can use the <b>cupsctl</b> command:</p>
+
+<pre class="command">
+cupsctl BrowsePoll=server:port
+</pre>
+
+<p>For multiple servers, use the CUPS web interface (http://localhost:631/admin)
+to edit the configuration file instead. Enter one <code>BrowsePoll</code> line
+per server at the bottom of the file, as follows:</p>
+
+<pre class="example">
+BrowsePoll server1:port
+BrowsePoll server2:port
+BrowsePoll server3:port
+</pre>
+
+<p>If you have more than one client on your subnet that wants to see the
+printers on those servers, add a
+<a href="ref-cupsd-conf.html#BrowseRelay"><code>BrowseRely</code></a> line
+to the <var>cupsd.conf</var> file on your local system using the <b>cupsctl</b>
+command:</p>
+
+<pre class="command">
+cupsctl 'BrowseRelay="127.0.0.1 @LOCAL"'
+</pre>
+
+<p>or CUPS web interface (again, at the bottom of the file):</p>
+
+<pre class="example">
+BrowseRelay 127.0.0.1 @LOCAL
+</pre>
+
+
+<h2><a name="AUTO_IPP">Automatic Configuration using IPP</a></h2>
+
+<p>CUPS can be configured to run without a local spooler and send all jobs to a
+single server. However, if that server goes down then all printing will be
+disabled. Use this configuration only as absolutely necessary.</p>
+
+<p>The default server is normally the local system ("localhost"). To override
+the default server create a file named <var>/etc/cups/client.conf</var> with a
+line as follows:</p>
+
+<pre class='example'>
+ServerName <em>server</em>
+</pre>
+
+<p>The <var>server</var> name can be the hostname or IP address of the default
+server. If the server is not using the default IPP port (631), you can add the
+port number at the end like this:</p>
+
+<pre class='example'>
+ServerName <em>server:port</em>
+</pre>
+
+<p>The default server can also be customized on a per-user basis. To set a
+user-specific server create a file named <var>~/.cups/client.conf</var> instead.
+The user <var>client.conf</var> file takes precedence over the system one.</p>
+
+<p>Finally, you can set the <code>CUPS_SERVER</code> environment variable to
+override the default server for a single process, for example:</p>
+
+<pre class='command'>
+CUPS_SERVER=server:port firefox http://www.cups.org
+</pre>
+
+<p>will run the Firefox web browser pointed to the specified server and
+port. The environment variable overrides both the user and system
+<var>client.conf</var> files, if any.</p>
+
+
+<h2><a name="MANUAL">Manual Configuration of Print Queues</a></h2>
+
+<p>The most tedious method of configuring client machines is to configure
+each remote queue by hand using the <a href="man-lpadmin.html">lpadmin(8)</a>
+command:</p>
+
+<pre class='command'>
+lpadmin -p <em>printer</em> -E -v ipp://<em>server</em>/printers/<em>printer</em>
+</pre>
+
+<p>The <var>printer</var> name is the name of the printer on the server machine.
+The <var>server</var> name is the hostname or IP address of the server machine.
+Repeat the <b>lpadmin</b> command for each remote printer you wish to use.</p>
+
+
+</body>
+</html>
diff --git a/doc/help/spec-ipp.html b/doc/help/spec-ipp.html
index 70db03765..70a30319b 100644
--- a/doc/help/spec-ipp.html
+++ b/doc/help/spec-ipp.html
@@ -438,7 +438,7 @@ Response:
<dd>The required authentication information.
-</dl
+</dl>
<h3 class='title'><span class='info'>CUPS 1.1</span><a name='CREATE_JOB'>Create-Job Operation</a></h3>
@@ -543,7 +543,7 @@ Create-Job Response:
<dd>The required authentication information.
-</dl
+</dl>
<h3 class='title'><a name='CANCEL_JOB'>Cancel Job Operation</a></h3>
@@ -1867,7 +1867,7 @@ CUPS-Authenticate-Job Response:
<dd>The required authentication information.
-</dl
+</dl>
<h3 class='title'><span class='info'>CUPS 1.3</span><a name='CUPS_GET_PPD'>CUPS-Get-PPD Operation</a></h3>
diff --git a/locale/cups_es.po b/locale/cups_es.po
index 230de93ed..49d10ca4b 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: 2008-12-15 09:29-0800\n"
-"PO-Revision-Date: 2008-11-12 16:53+0100\n"
+"PO-Revision-Date: 2008-12-17 17:32+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,8 +273,7 @@ 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"
#, c-format
@@ -292,12 +284,8 @@ msgstr " ADVERTENCIA Falta el archivo APDialogExtension \"%s\"\n"
msgid " WARN Missing APPrinterIconPath file \"%s\"\n"
msgstr " ADVERTENCIA Falta el archivo APPrinterIconPath \"%s\"\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 ""
@@ -311,32 +299,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
@@ -353,15 +337,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"
@@ -393,18 +373,15 @@ 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 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"
@@ -412,7 +389,7 @@ msgstr " %s Falta archivo cupsFilter \"%s\"\n"
#, c-format
msgid " %s Missing cupsICCProfile file \"%s\"!\n"
-msgstr " %s Falta el archivo cupsICCProfile \"%s\".\n"
+msgstr " %s Falta el archivo cupsICCProfile \"%s\".\n"
#, c-format
msgid " %s Missing cupsPreFilter file \"%s\"\n"
@@ -439,7 +416,7 @@ msgid ""
" %s REQUIRED %s does not define choice None!\n"
" REF: Page 122, section 5.17\n"
msgstr ""
-" %s SE NECESITA %s no define preferencia Ninguna.\n"
+" %s NECESARIA %s no define la opción None.\n"
" REF: Página 122, sección 5.17\n"
#, c-format
@@ -452,9 +429,7 @@ msgstr " %s cupsUIResolver %s genera un bucle.\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 ""
@@ -469,7 +444,7 @@ msgid ""
" **FAIL** BAD Default%s %s\n"
" REF: Page 40, section 4.5.\n"
msgstr ""
-" **FALLO** Default%s %s incorrecto\n"
+" **FALLO** Default%s %s INCORRECTO\n"
" REF: Página 40, sección 4.5.\n"
#, c-format
@@ -477,7 +452,7 @@ msgid ""
" **FAIL** BAD DefaultImageableArea %s!\n"
" REF: Page 102, section 5.15.\n"
msgstr ""
-" **FALLO** DefaultImageableArea %s incorrecto\n"
+" **FALLO** DefaultImageableArea %s INCORRECTO\n"
" REF: Página 102, sección 5.15.\n"
#, c-format
@@ -485,14 +460,14 @@ msgid ""
" **FAIL** BAD DefaultPaperDimension %s!\n"
" REF: Page 103, section 5.15.\n"
msgstr ""
-" **FALLO** DefaultPaperDimension %s incorrecto.\n"
+" **FALLO** DefaultPaperDimension %s INCORRECTO.\n"
" REF: Página 103, sección 5.15.\n"
msgid ""
" **FAIL** BAD JobPatchFile attribute in file\n"
" REF: Page 24, section 3.4.\n"
msgstr ""
-" **FALLO** Atributo JobPatchFile en archivo, incorrecto\n"
+" **FALLO** Atributo JobPatchFile en archivo, INCORRECTO\n"
" REF: Página 24, sección 3.4.\n"
msgid ""
@@ -514,28 +489,28 @@ msgid ""
" **FAIL** BAD ModelName - \"%c\" not allowed in string.\n"
" REF: Pages 59-60, section 5.3.\n"
msgstr ""
-" **FALLO** ModelName - \"%c\" incorrecto no permitido en la cadena.\n"
+" **FALLO** ModelName - \"%c\" INCORRECTO no permitido en la cadena.\n"
" REF: Páginas 59-60, sección 5.3.\n"
msgid ""
" **FAIL** BAD PSVersion - not \"(string) int\".\n"
" REF: Pages 62-64, section 5.3.\n"
msgstr ""
-" **FALLO** PSVersion incorrecto- no es \"(string) int\".\n"
+" **FALLO** PSVersion INCORRECTO - no es \"(string) int\".\n"
" REF: Páginas 62-64, sección 5.3.\n"
msgid ""
" **FAIL** BAD Product - not \"(string)\".\n"
" REF: Page 62, section 5.3.\n"
msgstr ""
-" **FALLO** Product incorrecto - no es \"(string)\".\n"
+" **FALLO** Product INCORRECTO - no es \"(string)\".\n"
" REF: Página 62, sección 5.3.\n"
msgid ""
" **FAIL** BAD ShortNickName - longer than 31 chars.\n"
" REF: Pages 64-65, section 5.3.\n"
msgstr ""
-" **FALLO** ShortNickName incorrecto - mayor de 31 caracteres.\n"
+" **FALLO** ShortNickName INCORRECTO - mayor de 31 caracteres.\n"
" REF: Páginas 64-65, sección 5.3.\n"
#, c-format
@@ -551,17 +526,20 @@ msgid ""
" **FAIL** Bad FileVersion \"%s\"\n"
" REF: Page 56, section 5.3.\n"
msgstr ""
+" **FALLO** FileVersion \"%s\" incorrecto\n"
+" REF: Página 56, sección 5.3.\n"
#, c-format
msgid ""
" **FAIL** Bad FormatVersion \"%s\"\n"
" REF: Page 56, section 5.3.\n"
msgstr ""
+" **FALLO** FormatVersion \"%s\" incorrecto\n"
+" REF: Página 56, sección 5.3.\n"
#, 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"
@@ -569,31 +547,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"
@@ -601,9 +567,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 ""
@@ -970,11 +934,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"
@@ -982,16 +943,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"
@@ -1078,12 +1034,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"
@@ -1143,8 +1095,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"
@@ -1207,12 +1158,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"
@@ -1231,11 +1178,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"
@@ -1840,14 +1784,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!"
@@ -1960,16 +1900,14 @@ msgid "Always"
msgstr "Siempre"
msgid "AppSocket/HP JetDirect"
-msgstr ""
+msgstr "AppSocket/HP JetDirect"
msgid "Applicator"
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)!"
@@ -2115,7 +2053,7 @@ msgid "Banners"
msgstr "Rótulos"
msgid "Billing Information: "
-msgstr "Información de facturación:"
+msgstr "Información de facturación: "
msgid "Bond Paper"
msgstr "Papel de cartas"
@@ -2219,7 +2157,7 @@ msgid "Created"
msgstr "Creado"
msgid "Created On: "
-msgstr "Creado en:"
+msgstr "Creado en: "
msgid "Custom"
msgstr "A medida"
@@ -2255,7 +2193,7 @@ msgid "Delete Printer"
msgstr "Borrar impresora"
msgid "Description: "
-msgstr "Descripción:"
+msgstr "Descripción: "
msgid "DeskJet Series"
msgstr "DeskJet Series"
@@ -2303,10 +2241,10 @@ msgid "Double Postcard"
msgstr "Postal doble"
msgid "Driver Name: "
-msgstr "Nombre de controlador:"
+msgstr "Nombre del controlador: "
msgid "Driver Version: "
-msgstr "Versión de controlador:"
+msgstr "Versión del controlador: "
msgid "Duplexer"
msgstr "Unidad de impresión dúplex"
@@ -2316,13 +2254,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"
@@ -2411,9 +2347,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"
@@ -2423,23 +2357,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"
@@ -2449,12 +2376,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"
@@ -2491,9 +2414,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"
@@ -2511,9 +2432,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"
@@ -2548,9 +2467,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"
@@ -2617,9 +2534,7 @@ msgstr "ERROR: No se ha podido abrir el archivo de impresión %s: %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"
msgid "ERROR: Unable to open temporary file"
msgstr "ERROR: No se ha podido abrir el archivo temporal"
@@ -2656,8 +2571,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"
@@ -2695,16 +2609,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"
@@ -2748,28 +2660,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"
@@ -2787,12 +2690,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"
@@ -2818,14 +2717,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"
@@ -2885,12 +2778,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"
@@ -2947,10 +2836,10 @@ msgid "INFO: Canceling print job...\n"
msgstr "INFO: Cancelando trabajo de impresión...\n"
msgid "INFO: Connected to printer...\n"
-msgstr ""
+msgstr "INFO: Conectado a la impresora...\n"
msgid "INFO: Connecting to printer...\n"
-msgstr ""
+msgstr "INFO: Conectando a la impresora...\n"
msgid "INFO: Control file sent successfully\n"
msgstr "INFO: Archivo de control enviado correctamente\n"
@@ -2966,15 +2855,13 @@ msgid "INFO: Loading image file...\n"
msgstr "INFO: Cargando archivo de imagen...\n"
msgid "INFO: Looking for printer...\n"
-msgstr ""
+msgstr "INFO: Buscando impresora...\n"
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"
@@ -3052,9 +2939,7 @@ msgid "INFO: Spooling LPR job, %.0f%% complete...\n"
msgstr "INFO: Guardando trabajo LPR en cola, %.0f%% completado...\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"
@@ -3169,7 +3054,7 @@ msgid "Internet Postage 3-Part - 2 1/4 x 7\""
msgstr "Correo por Internet Parte-3 - 2 1/4 x 7 pulg."
msgid "Internet Printing Protocol"
-msgstr ""
+msgstr "Protocolo de Impresión de Internet IPP"
msgid "Invite Envelope"
msgstr "Sobre de invitación"
@@ -3240,7 +3125,7 @@ msgid "Job Stopped"
msgstr "Trabajo detenido"
msgid "Job UUID: "
-msgstr "UUID de trabajo:"
+msgstr "UUID del trabajo: "
msgid "Job is completed and cannot be changed."
msgstr "El trabajo está terminado y no puede ser cambiado."
@@ -3264,7 +3149,7 @@ msgid "Kaku3 Envelope"
msgstr "Sobre Kaku3"
msgid "LPD/LPR Host or Printer"
-msgstr ""
+msgstr "Equipo o impresora LPD/LPR"
msgid "Label Printer"
msgstr "Impresora de etiquetas"
@@ -3295,25 +3180,25 @@ msgid "List Available Printers"
msgstr "Listar impresoras disponibles"
msgid "Location: "
-msgstr "Ubicación:"
+msgstr "Ubicación: "
msgid "Long-Edge (Portrait)"
msgstr "Lado largo (retrato)"
msgid "Make and Model: "
-msgstr "Marca y modelo:"
+msgstr "Marca y modelo: "
msgid "Manual Feed"
msgstr "Alimentación manual"
msgid "Media Dimensions: "
-msgstr "Dimensiones del papel:"
+msgstr "Dimensiones del papel: "
msgid "Media Limits: "
-msgstr "Límites del papel:"
+msgstr "Límites del papel: "
msgid "Media Name: "
-msgstr "Nombre del soporte"
+msgstr "Nombre del soporte: "
msgid "Media Size"
msgstr "Tamaño de papel"
@@ -3497,7 +3382,7 @@ msgid "No printer-uri found!"
msgstr "No se encontró printer-uri."
msgid "No printer-uri in request!"
-msgstr ""
+msgstr "No hay printer-uri en la petición."
msgid "No request-id"
msgstr "No hay request-id"
@@ -3579,7 +3464,7 @@ msgid "Options Installed"
msgstr "Opciones instaladas"
msgid "Options: "
-msgstr "Opciones:"
+msgstr "Opciones: "
msgid "Out of toner!"
msgstr "No hay toner."
@@ -3599,8 +3484,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"
@@ -3608,9 +3492,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."
@@ -3726,7 +3608,7 @@ msgid "Print Rate"
msgstr "Tasa de impresión"
msgid "Print Self-Test Page"
-msgstr "Iimprimir página de auto-prueba"
+msgstr "Imprimir página de auto-prueba"
msgid "Print Speed"
msgstr "Velocidad de impresión"
@@ -3741,13 +3623,13 @@ msgid "Print and Tear"
msgstr "Imprimir y romper"
msgid "Printed For: "
-msgstr "Impreso para:"
+msgstr "Impreso para: "
msgid "Printed From: "
-msgstr "Impreso desde:"
+msgstr "Impreso desde: "
msgid "Printed On: "
-msgstr "Impreso en:"
+msgstr "Impreso en: "
msgid "Printer Added"
msgstr "Impresora añadida"
@@ -3762,7 +3644,7 @@ msgid "Printer Modified"
msgstr "Impresora modificada"
msgid "Printer Name: "
-msgstr "Nombre de la impresora:"
+msgstr "Nombre de la impresora: "
msgid "Printer Paused"
msgstr "Impresora en pausa"
@@ -3791,10 +3673,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"
@@ -3828,7 +3708,7 @@ msgid "Running command: %s %s -N -A %s -c '%s'\n"
msgstr "Ejecutando comando: %s %s -N -A '%s -c '%s'\n"
msgid "SCSI Printer"
-msgstr ""
+msgstr "Impresora SCSI"
msgid "SEQUENCE uses indefinite length"
msgstr "SEQUENCE usa una longitud indefinida"
@@ -3838,7 +3718,7 @@ msgstr "Ver otros"
#, c-format
msgid "Serial Port #%d"
-msgstr ""
+msgstr "Puerto serie #%d"
msgid "Server Restarted"
msgstr "Servidor reiniciado"
@@ -3932,29 +3812,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."
@@ -3969,33 +3838,23 @@ 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 ""
+msgstr "Hay demasiadas subscripciones."
msgid "Thermal Transfer Media"
msgstr "Soporte de transferencia térmica"
msgid "Title: "
-msgstr "Título:"
+msgstr "Título: "
msgid "Toner low."
msgstr "Toner bajo."
@@ -4058,7 +3917,7 @@ msgstr "Carta EE.UU. (pequeña)"
#, c-format
msgid "USB Serial Port #%d"
-msgstr ""
+msgstr "Puerto serie USB #%d"
msgid "Unable to access cupsd.conf file:"
msgstr "No se ha podido acceder al archivo cupsd.conf"
@@ -4096,21 +3955,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!"
@@ -4121,15 +3974,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!"
@@ -4179,15 +4028,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:"
@@ -4226,8 +4071,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:"
@@ -4346,14 +4190,10 @@ msgstr ""
"\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"
+" -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"
@@ -4378,8 +4218,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"
@@ -4414,10 +4253,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"
@@ -4453,8 +4290,7 @@ msgstr ""
"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"
+" -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"
@@ -4468,8 +4304,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"
@@ -4478,8 +4313,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"
@@ -4495,8 +4329,7 @@ msgid ""
" -v Be slightly verbose\n"
" -vv Be very verbose\n"
msgstr ""
-"Uso: cupstestppd [opciones] nombre_archivo1.ppd[.gz] [... nombre_archivoN.ppd"
-"[.gz]]\n"
+"Uso: cupstestppd [opciones] nombre_archivo1.ppd[.gz] [... nombre_archivoN.ppd[.gz]]\n"
" programa | cupstestppd [opciones] -\n"
"\n"
"Opciones:\n"
@@ -4535,11 +4368,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"
@@ -4610,8 +4440,7 @@ 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"
@@ -4635,8 +4464,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"
@@ -4652,41 +4480,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"
@@ -4720,28 +4530,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"
@@ -4787,9 +4587,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"
@@ -4803,9 +4601,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"
@@ -4859,8 +4655,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"
@@ -4919,9 +4714,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"
@@ -5019,15 +4812,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"
@@ -5039,10 +4830,10 @@ msgid "lpinfo: Expected product string after --product!\n"
msgstr "lpinfo: Se esperaba una cadena de producto tras --product.\n"
msgid "lpinfo: Expected scheme list after --exclude-schemes!\n"
-msgstr ""
+msgstr "lpinfo: Se esperaba una lista de esquemas tras --exclude-schemes.\n"
msgid "lpinfo: Expected scheme list after --include-schemes!\n"
-msgstr ""
+msgstr "lpinfo: Se esperaba una lista de esquemas tras --include-schemes.\n"
msgid "lpinfo: Expected timeout after --timeout!\n"
msgstr "lpinfo: Se esperaba un tiempo tras --timeout.\n"
@@ -5127,9 +4918,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"
@@ -5140,12 +4929,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"
@@ -5221,8 +5006,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"
@@ -5234,8 +5018,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"
@@ -5247,16 +5030,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"
@@ -5268,8 +5046,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"
@@ -5321,19 +5098,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"
@@ -5349,29 +5122,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"
@@ -5411,14 +5174,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"
@@ -5454,8 +5214,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"
@@ -5483,14 +5242,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"
@@ -5521,11 +5277,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"
@@ -5616,22 +5369,5 @@ msgid "untitled"
msgstr "sin título"
msgid "variable-bindings uses indefinite length"
-msgstr "Variable-bindings usa una longitud indefinida"
-
-#~ msgid "INFO: Attempting to connect to host %s for printer %s\n"
-#~ msgstr "INFO: Intentando conectar al ordenador %s para la impresora %s\n"
-
-#~ msgid "INFO: Attempting to connect to host %s on port %d\n"
-#~ msgstr "INFO: Intentando conectar al ordenador %s en el puerto %d\n"
-
-#~ msgid "INFO: Connected to %s...\n"
-#~ msgstr "INFO: Conectado a %s...\n"
-
-#~ msgid "INFO: Connecting to %s on port %d...\n"
-#~ msgstr "INFO: Conectando con %s en el puerto %d...\n"
-
-#~ msgid "INFO: Looking for \"%s\"...\n"
-#~ msgstr "INFO: Buscando \"%s\"...\n"
+msgstr "variable-bindings usa una longitud indefinida"
-#~ msgid "lpinfo: Unable to connect to server: %s\n"
-#~ msgstr "lpinfo: No se ha podido conectar al servidor: %s\n"
diff --git a/packaging/cups.list.in b/packaging/cups.list.in
index 27765501c..2116b1930 100644
--- a/packaging/cups.list.in
+++ b/packaging/cups.list.in
@@ -4,7 +4,7 @@
# ESP Package Manager (EPM) file list for the Common UNIX Printing
# System (CUPS).
#
-# Copyright 2007-2008 by Apple Inc.
+# Copyright 2007-2009 by Apple Inc.
# Copyright 1997-2007 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
@@ -628,6 +628,7 @@ f 0644 root sys $DOCDIR/help/options.html doc/help/options.html
f 0644 root sys $DOCDIR/help/overview.html doc/help/overview.html
f 0644 root sys $DOCDIR/help/policies.html doc/help/policies.html
f 0644 root sys $DOCDIR/help/security.html doc/help/security.html
+f 0644 root sys $DOCDIR/help/sharing.html doc/help/sharing.html
f 0644 root sys $DOCDIR/help/standard.html doc/help/standard.html
f 0644 root sys $DOCDIR/help/translation.html doc/help/translation.html
f 0644 root sys $DOCDIR/help/whatsnew.html doc/help/whatsnew.html
diff --git a/packaging/cups.spec.in b/packaging/cups.spec.in
index c9b22430f..9dd388583 100644
--- a/packaging/cups.spec.in
+++ b/packaging/cups.spec.in
@@ -5,7 +5,7 @@
#
# Original version by Jason McMullan <jmcc@ontv.com>.
#
-# Copyright 2007-2008 by Apple Inc.
+# Copyright 2007-2009 by Apple Inc.
# Copyright 1999-2007 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
@@ -259,6 +259,7 @@ rm -rf $RPM_BUILD_ROOT
/usr/share/doc/cups/help/policies.html
/usr/share/doc/cups/help/ref-*.html
/usr/share/doc/cups/help/security.html
+/usr/share/doc/cups/help/sharing.html
/usr/share/doc/cups/help/standard.html
/usr/share/doc/cups/help/translation.html
/usr/share/doc/cups/help/whatsnew.html
diff --git a/ppdc/ppdc-driver.cxx b/ppdc/ppdc-driver.cxx
index c6e0dda53..31c857f06 100644
--- a/ppdc/ppdc-driver.cxx
+++ b/ppdc/ppdc-driver.cxx
@@ -3,7 +3,7 @@
//
// PPD file compiler definitions for the CUPS PPD Compiler.
//
-// Copyright 2007-2008 by Apple Inc.
+// Copyright 2007-2009 by Apple Inc.
// Copyright 2002-2006 by Easy Software Products.
//
// These coded instructions, statements, and computer programs are the
@@ -945,7 +945,8 @@ ppdcDriver::write_ppd_file(
continue;
if (!o->text->value || !strcmp(o->name->value, o->text->value))
- cupsFilePrintf(fp, "*OpenUI *%s: ", o->name->value);
+ cupsFilePrintf(fp, "*OpenUI *%s: ", o->name->value,
+ catalog->find_message(o->name->value));
else
cupsFilePrintf(fp, "*OpenUI *%s/%s: ", o->name->value,
catalog->find_message(o->text->value));
@@ -1008,7 +1009,8 @@ ppdcDriver::write_ppd_file(
{
// Write this choice...
if (!c->text->value || !strcmp(c->name->value, c->text->value))
- cupsFilePrintf(fp, "*%s %s: \"%s\"%s", o->name->value, c->name->value,
+ cupsFilePrintf(fp, "*%s %s: \"%s\"%s", o->name->value,
+ catalog->find_message(c->name->value),
c->code->value, lf);
else
cupsFilePrintf(fp, "*%s %s/%s: \"%s\"%s", o->name->value,
diff --git a/ppdc/ppdc-source.cxx b/ppdc/ppdc-source.cxx
index d95f2d6cc..b4e31fc52 100644
--- a/ppdc/ppdc-source.cxx
+++ b/ppdc/ppdc-source.cxx
@@ -3,7 +3,7 @@
//
// Source class for the CUPS PPD Compiler.
//
-// Copyright 2007-2008 by Apple Inc.
+// Copyright 2007-2009 by Apple Inc.
// Copyright 2002-2007 by Easy Software Products.
//
// These coded instructions, statements, and computer programs are the
@@ -3422,15 +3422,15 @@ ppdcSource::write_file(const char *f) // I - File to write
quotef(fp, " Copyright \"%s\"\n", st->value);
// Write other strings and values...
- if (d->manufacturer->value)
+ if (d->manufacturer && d->manufacturer->value)
quotef(fp, " Manufacturer \"%s\"\n", d->manufacturer->value);
if (d->model_name->value)
quotef(fp, " ModelName \"%s\"\n", d->model_name->value);
- if (d->file_name->value)
+ if (d->file_name && d->file_name->value)
quotef(fp, " FileName \"%s\"\n", d->file_name->value);
- if (d->pc_file_name->value)
+ if (d->pc_file_name && d->pc_file_name->value)
quotef(fp, " PCFileName \"%s\"\n", d->pc_file_name->value);
- if (d->version->value)
+ if (d->version && d->version->value)
quotef(fp, " Version \"%s\"\n", d->version->value);
cupsFilePrintf(fp, " DriverType %s\n", driver_types[d->type]);
diff --git a/ppdc/ppdpo.cxx b/ppdc/ppdpo.cxx
index fe533ba9f..c32b2acf4 100644
--- a/ppdc/ppdpo.cxx
+++ b/ppdc/ppdpo.cxx
@@ -202,7 +202,7 @@ add_ui_strings(ppdcDriver *d, // I - Driver data
if (!o->choices->count)
continue;
- if (o->text->value && strcmp(o->name->value, o->text->value))
+ if (o->text->value)
catalog->add_message(o->text->value);
else
catalog->add_message(o->name->value);
@@ -210,7 +210,7 @@ add_ui_strings(ppdcDriver *d, // I - Driver data
for (c = (ppdcChoice *)o->choices->first();
c;
c = (ppdcChoice *)o->choices->next())
- if (c->text->value && strcmp(c->name->value, c->text->value))
+ if (c->text->value)
catalog->add_message(c->text->value);
else
catalog->add_message(c->name->value);
diff --git a/scheduler/ipp.c b/scheduler/ipp.c
index 668da3ee1..e9e3e73f4 100644
--- a/scheduler/ipp.c
+++ b/scheduler/ipp.c
@@ -4714,7 +4714,18 @@ copy_attrs(ipp_t *to, /* I - Destination request */
continue;
if (!ra || cupsArrayFind(ra, fromattr->name))
+ {
+ /*
+ * Don't send collection attributes by default to IPP/1.x clients
+ * since many do not support collections...
+ */
+
+ if (fromattr->value_tag == IPP_TAG_BEGIN_COLLECTION &&
+ !ra && to->request.status.version[0] == 1)
+ continue;
+
copy_attribute(to, fromattr, quickcopy);
+ }
}
}
diff --git a/scheduler/job.c b/scheduler/job.c
index 9bdacc326..d5c1cfe44 100644
--- a/scheduler/job.c
+++ b/scheduler/job.c
@@ -3,7 +3,7 @@
*
* Job management routines for the Common UNIX Printing System (CUPS).
*
- * Copyright 2007-2008 by Apple Inc.
+ * Copyright 2007-2009 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
@@ -3874,16 +3874,18 @@ update_job(cupsd_job_t *job) /* I - Job to check */
#ifdef __APPLE__
else if (!strncmp(message, "recoverable:", 12))
{
- cupsdSetPrinterReasons(job->printer,
- "+com.apple.print.recoverable-warning");
-
ptr = message + 12;
while (isspace(*ptr & 255))
ptr ++;
- cupsdSetString(&job->printer->recoverable, ptr);
- cupsdAddPrinterHistory(job->printer);
- event |= CUPSD_EVENT_PRINTER_STATE;
+ if (*ptr)
+ {
+ cupsdSetPrinterReasons(job->printer,
+ "+com.apple.print.recoverable-warning");
+ cupsdSetString(&job->printer->recoverable, ptr);
+ cupsdAddPrinterHistory(job->printer);
+ event |= CUPSD_EVENT_PRINTER_STATE;
+ }
}
else if (!strncmp(message, "recovered:", 10))
{
@@ -4035,9 +4037,14 @@ update_job_attrs(cupsd_job_t *job, /* I - Job to update */
"job-printer-state-reasons",
num_reasons, NULL, NULL);
}
+ else if (job->printer_reasons)
+ {
+ for (i = 0; i < job->printer_reasons->num_values; i ++)
+ _cupsStrFree(job->printer_reasons->values[i].string.text);
+ }
for (i = 0; i < num_reasons; i ++)
- cupsdSetString(&(job->printer_reasons->values[i].string.text), reasons[i]);
+ job->printer_reasons->values[i].string.text = _cupsStrAlloc(reasons[i]);
}
diff --git a/scheduler/printers.c b/scheduler/printers.c
index e4029cd1c..d32a09b8f 100644
--- a/scheduler/printers.c
+++ b/scheduler/printers.c
@@ -359,6 +359,13 @@ cupsdCreateCommonData(void)
,"gzip"
#endif /* HAVE_LIBZ */
};
+ static const char * const media_col_supported[] =
+ { /* media-col-supported values */
+ "media-color",
+ "media-key",
+ "media-size",
+ "media-type"
+ };
static const char * const multiple_document_handling[] =
{ /* multiple-document-handling-supported values */
"separate-documents-uncollated-copies",
@@ -517,6 +524,13 @@ cupsdCreateCommonData(void)
ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_NAME | IPP_TAG_COPY,
"job-sheets-supported", NULL, "none");
+ /* media-col-supported */
+ ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD | IPP_TAG_COPY,
+ "media-col-supported",
+ sizeof(media_col_supported) /
+ sizeof(media_col_supported[0]), NULL,
+ media_col_supported);
+
/* multiple-document-handling-supported */
ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD | IPP_TAG_COPY,
"multiple-document-handling-supported",
@@ -3523,15 +3537,6 @@ add_printer_filter(
}
/*
- * Mark the CUPS_PRINTER_COMMANDS bit if we have a filter for
- * application/vnd.cups-command...
- */
-
- if (!strcasecmp(super, "application") &&
- !strcasecmp(type, "vnd.cups-command"))
- p->type |= CUPS_PRINTER_COMMANDS;
-
- /*
* Add the filter to the MIME database, supporting wildcards as needed...
*/
@@ -3803,6 +3808,8 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */
ppd_attr_t *ppd_attr; /* PPD attribute */
_cups_pwg_media_t *pwgmedia; /* Matching PWG size name */
ipp_attribute_t *attr; /* Attribute data */
+ ipp_t *media_col_default, /* media-col-default collection value */
+ *media_size; /* media-size collection value */
ipp_value_t *val; /* Attribute value */
int num_finishings; /* Number of finishings */
int finishings[5]; /* finishings-supported values */
@@ -3965,9 +3972,39 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */
}
if (size->marked)
+ {
+ /*
+ * Add media-default...
+ */
+
ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD,
- "media-default", NULL,
- _cupsStrRetain(val->string.text));
+ "media-default", NULL, val->string.text);
+
+ /*
+ * Add media-col-default...
+ */
+
+ media_size = ippNew();
+ ippAddInteger(media_size, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
+ "x-dimension", (int)(size->width * 2540.0 / 72.0));
+ ippAddInteger(media_size, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
+ "y-dimension", (int)(size->length * 2540.0 / 72.0));
+
+ media_col_default = ippNew();
+ ippAddString(media_col_default, IPP_TAG_PRINTER,
+ IPP_TAG_KEYWORD | IPP_TAG_COPY, "media-color", NULL,
+ "white");
+ ippAddString(media_col_default, IPP_TAG_PRINTER, IPP_TAG_KEYWORD,
+ "media-key", NULL,val->string.text);
+ ippAddCollection(media_col_default, IPP_TAG_PRINTER, "media-size",
+ media_size);
+ ippAddString(media_col_default, IPP_TAG_PRINTER,
+ IPP_TAG_KEYWORD | IPP_TAG_COPY, "media-type", NULL,
+ "stationary");
+
+ ippAddCollection(p->ppd_attrs, IPP_TAG_PRINTER,
+ "media-col-default", media_col_default);
+ }
val ++;
}
@@ -4100,6 +4137,10 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */
{
DEBUG_printf(("ppd->filters[%d] = \"%s\"\n", i, ppd->filters[i]));
add_string_array(&(p->filters), ppd->filters[i]);
+
+ if (!strncasecmp(ppd->filters[i], "application/vnd.cups-command", 28) &&
+ isspace(ppd->filters[i][28] & 255))
+ p->type |= CUPS_PRINTER_COMMANDS;
}
if (ppd->num_filters == 0)
@@ -4123,7 +4164,8 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */
for (i = 0; i < ppd->num_filters; i ++)
if (!strncasecmp(ppd->filters[i],
- "application/vnd.cups-postscript", 31))
+ "application/vnd.cups-postscript", 31) &&
+ isspace(ppd->filters[i][31] & 255))
break;
if (i < ppd->num_filters)
diff --git a/scheduler/type.c b/scheduler/type.c
index c334e99eb..6218b4d6f 100644
--- a/scheduler/type.c
+++ b/scheduler/type.c
@@ -188,8 +188,7 @@ mimeAddTypeRule(mime_type_t *mt, /* I - Type to add to */
else if (*rule == '+' && current != NULL)
{
if (logic != MIME_MAGIC_AND &&
- current != NULL && current->prev != NULL &&
- current->prev->prev != NULL)
+ current != NULL && current->prev != NULL)
{
/*
* OK, we have more than 1 rule in the current tree level... Make a
diff --git a/templates/es/add-rss-subscription.tmpl b/templates/es/add-rss-subscription.tmpl
index 91c2b06f0..89d77ced6 100644
--- a/templates/es/add-rss-subscription.tmpl
+++ b/templates/es/add-rss-subscription.tmpl
@@ -28,7 +28,7 @@
<TD><INPUT TYPE="CHECKBOX" NAME="EVENT_SERVER_STARTED" {?EVENT_SERVER_STARTED}>Servidor iniciado<BR>
<INPUT TYPE="CHECKBOX" NAME="EVENT_SERVER_STOPPED" {?EVENT_SERVER_STOPPED}>Servidor parado<BR>
<INPUT TYPE="CHECKBOX" NAME="EVENT_SERVER_RESTARTED" {?EVENT_SERVER_RESTARTED}>Servidor reiniciado<BR>
-<INPUT TYPE="CHECKBOX" NAME="EVENT_SERVER_AUDIT" {?EVENT_SERVER_AUDIT}>Auditoría de seguridad del servidor</TD>
+<INPUT TYPE="CHECKBOX" NAME="EVENT_SERVER_AUDIT" {?EVENT_SERVER_AUDIT}>Auditor&iacute;a de seguridad del servidor</TD>
</TR>
<TR>
<TH CLASS="label">N&uacute;mero m&aacute;ximo de eventos del canal:</TH>
diff --git a/templates/es/admin.tmpl b/templates/es/admin.tmpl
index e50409e8b..a16eb4ed2 100644
--- a/templates/es/admin.tmpl
+++ b/templates/es/admin.tmpl
@@ -83,7 +83,7 @@
<INPUT TYPE="CHECKBOX" NAME="DEBUG_LOGGING" {?debug_logging}> Guardar informaci&oacute;n de depuraci&oacute;n para b&uacute;squeda de problemas</P>
}
-<P><INPUT TYPE="SUBMIT" NAME="CHANGESETTINGS" VALUE="Cambiar configuración"></P>
+<P><INPUT TYPE="SUBMIT" NAME="CHANGESETTINGS" VALUE="Cambiar configuraci&oacute;n"></P>
</FORM>}
diff --git a/templates/es/error-op.tmpl b/templates/es/error-op.tmpl
index 80b20fd18..d584108e8 100644
--- a/templates/es/error-op.tmpl
+++ b/templates/es/error-op.tmpl
@@ -1,9 +1,9 @@
<DIV CLASS="indent">
-<H2 CLASS="title">Error {?title} {?printer_name}</H2>
+<H2 CLASS="title">Error en {?printer_name}: {?title}</H2>
<P>Error:</P>
-<BLOCKQUOTE>Operaci&oacute;n desconocida "{op}"!</BLOCKQUOTE>
+<BLOCKQUOTE>Operaci&oacute;n desconocida "{op}".</BLOCKQUOTE>
</DIV>
diff --git a/templates/es/error.tmpl b/templates/es/error.tmpl
index ff30a4c6c..650bc3260 100644
--- a/templates/es/error.tmpl
+++ b/templates/es/error.tmpl
@@ -1,6 +1,6 @@
<DIV CLASS="indent">
-<H2 CLASS="title">{?title} {?printer_name} Error</H2>
+<H2 CLASS="title">Error en {?printer_name}: {?title}</H2>
<P>{?message?{message}:Error:}</P>
diff --git a/templates/es/printer-configured.tmpl b/templates/es/printer-configured.tmpl
index 22cb3ec86..d382264f9 100644
--- a/templates/es/printer-configured.tmpl
+++ b/templates/es/printer-configured.tmpl
@@ -2,7 +2,7 @@
<H2 CLASS="title">Cambiar opciones predeterminadas de {printer_name}</H2>
-<P>{OP=set-class-options?Class <A HREF="/classes/{printer_name}">:Printer <A HREF="/printers/{printer_name}">}{printer_name}</A>
-default options have been set successfully.
+<P>Se han establecido con &eacute;xito las opciones predeterminadas de la
+{OP=set-class-options?clase <A HREF="/classes/{printer_name}">:impresora <A HREF="/printers/{printer_name}">}{printer_name}</A>.
</DIV>
diff --git a/templates/es/printer.tmpl b/templates/es/printer.tmpl
index 26344b84b..2a1ad0955 100644
--- a/templates/es/printer.tmpl
+++ b/templates/es/printer.tmpl
@@ -35,7 +35,7 @@
<TABLE SUMMARY="{printer_name}">
<TR><TH ALIGN="RIGHT" VALIGN="TOP">Descripci&oacute;n:</TH><TD>{printer_info}</TD></TR>
<TR><TH ALIGN="RIGHT" VALIGN="TOP">Ubicaci&oacute;n:</TH><TD>{printer_location}</TD></TR>
-<TR><TH ALIGN="RIGHT" VALIGN="TOP">Controlador:</TH><TD>{printer_make_and_model} ({color_supported=1?color:escala de grises}{sides_supported?, dúplex:})<BR>
+<TR><TH ALIGN="RIGHT" VALIGN="TOP">Controlador:</TH><TD>{printer_make_and_model} ({color_supported=1?color:escala de grises}{sides_supported?, d&uacute;plex:})<BR>
<TR><TH ALIGN="RIGHT" VALIGN="TOP">Conexi&oacute;n:</TH><TD>{device_uri}</TD></TR>
<TR><TH ALIGN="RIGHT" VALIGN="TOP">Opciones predeterminadas:</TH><TD>job-sheets={job_sheets_default}
media={media_default?{media_default}:desconocido}
diff --git a/templates/es/test-page.tmpl b/templates/es/test-page.tmpl
index a36ef8ffc..763dab556 100644
--- a/templates/es/test-page.tmpl
+++ b/templates/es/test-page.tmpl
@@ -1,6 +1,6 @@
<DIV CLASS="indent">
-<H2 CLASS="title">Imprimir página de prueba en {printer_name}</H2>
+<H2 CLASS="title">Imprimir p&aacute;gina de prueba en {printer_name}</H2>
<P>P&aacute;gina de prueba enviada; el n&uacute;mero del trabajo es el <A HREF="/{SECTION}/{printer_name}">
{printer_name}-{job_id}</A>.</P>
diff --git a/test/4.1-requests.test b/test/4.1-requests.test
index fc4697b05..fbd2a97f5 100644
--- a/test/4.1-requests.test
+++ b/test/4.1-requests.test
@@ -135,6 +135,25 @@
EXPECT attributes-charset
EXPECT attributes-natural-language
}
+{
+ # The name of the test...
+ NAME "Bad IPP Version"
+
+ # The operation to use
+ OPERATION get-jobs
+
+ # The version number to use
+ VERSION 0.0
+
+ # The attributes to send
+ GROUP operation
+ ATTR charset attributes-charset utf-8
+ ATTR language attributes-natural-language en
+ ATTR uri printer-uri ipp://localhost/printers
+
+ # What statuses are OK?
+ STATUS server-error-version-not-supported
+}
#
# End of "$Id: 4.1-requests.test 8144 2008-11-19 19:23:12Z mike $"
#
diff --git a/test/4.2-cups-printer-ops.test b/test/4.2-cups-printer-ops.test
index ab56d9e36..26035bcfb 100644
--- a/test/4.2-cups-printer-ops.test
+++ b/test/4.2-cups-printer-ops.test
@@ -256,6 +256,29 @@
EXPECT attributes-charset
EXPECT attributes-natural-language
}
+{
+ # The name of the test...
+ NAME "Get IPP/2.x Attributes for Printer Test1"
+
+ # The operation to use
+ OPERATION get-printer-attributes
+ RESOURCE /
+
+ # The IPP version to use
+ VERSION 2.0
+
+ # The attributes to send
+ GROUP operation
+ ATTR charset attributes-charset utf-8
+ ATTR language attributes-natural-language en
+ ATTR uri printer-uri $method://$hostname:$port/printers/Test1
+
+ # What statuses are OK?
+ STATUS successful-ok
+
+ # What attributes do we expect?
+ EXPECT media-col-default
+}
#
# End of "$Id: 4.2-cups-printer-ops.test 6379 2007-03-21 14:57:22Z mike $"
diff --git a/test/get-printer-attributes-2.0.test b/test/get-printer-attributes-2.0.test
new file mode 100644
index 000000000..664bd6c53
--- /dev/null
+++ b/test/get-printer-attributes-2.0.test
@@ -0,0 +1,47 @@
+# Get printer attributes using get-printer-attributes
+{
+ # The name of the test...
+ NAME "Get printer attributes using get-printer-attributes"
+
+ # The resource to use for the POST
+ # RESOURCE /admin
+
+ # The operation to use
+ OPERATION get-printer-attributes
+
+ # The version to use
+ VERSION 2.0
+
+ # Attributes, starting in the operation group...
+ GROUP operation
+ ATTR charset attributes-charset utf-8
+ ATTR language attributes-natural-language en
+ ATTR uri printer-uri $uri
+
+ # What statuses are OK?
+ STATUS successful-ok
+
+ # What attributes do we expect?
+ EXPECT charset-configured
+ EXPECT charset-supported
+ EXPECT compression-supported
+ EXPECT document-format-default
+ EXPECT document-format-supported
+ EXPECT generated-natural-language-supported
+ EXPECT ipp-versions-supported
+ EXPECT media-col-default
+ EXPECT natural-language-configured
+ EXPECT operations-supported
+ EXPECT printer-info
+ EXPECT printer-is-accepting-jobs
+ EXPECT printer-location
+ EXPECT printer-make-and-model
+ EXPECT printer-more-info
+ EXPECT printer-name
+ EXPECT printer-state
+ EXPECT printer-state-reasons
+ EXPECT printer-up-time
+ EXPECT printer-uri-supported
+ EXPECT uri-authentication-supported
+ EXPECT uri-security-supported
+}
diff --git a/test/ipptest.c b/test/ipptest.c
index dcd17e23c..59f2fb803 100644
--- a/test/ipptest.c
+++ b/test/ipptest.c
@@ -3,7 +3,7 @@
*
* IPP test command for the Common UNIX Printing System (CUPS).
*
- * Copyright 2007-2008 by Apple Inc.
+ * Copyright 2007-2009 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -51,6 +51,7 @@ ipp_op_t ippOpValue(const char *);
ipp_status_t ippErrorValue(const char *);
char *get_token(FILE *, char *, int, int *linenum);
void print_attr(ipp_attribute_t *);
+void print_col(ipp_t *col);
void usage(const char *option);
@@ -233,7 +234,7 @@ do_tests(const char *uri, /* I - URI to connect on */
pass = 1;
job_id = 0;
subscription_id = 0;
- version = 1;
+ version = 11;
linenum = 1;
while (get_token(fp, token, sizeof(token), &linenum) != NULL)
@@ -292,8 +293,21 @@ do_tests(const char *uri, /* I - URI to connect on */
* IPP version number for test...
*/
+ int major, minor; /* Major/minor IPP version */
+
+
get_token(fp, temp, sizeof(temp), &linenum);
- sscanf(temp, "%*d.%d", &version);
+ if (sscanf(temp, "%d.%d", &major, &minor) == 2 &&
+ major >= 0 && minor >= 0 && minor < 10)
+ version = major * 10 + minor;
+ else
+ {
+ printf("Bad version %s seen on line %d - aborting test!\n", token,
+ linenum);
+ httpClose(http);
+ ippDelete(request);
+ return (0);
+ }
}
else if (!strcasecmp(token, "RESOURCE"))
{
@@ -548,7 +562,8 @@ do_tests(const char *uri, /* I - URI to connect on */
* Submit the IPP request...
*/
- request->request.op.version[1] = version;
+ request->request.op.version[0] = version / 10;
+ request->request.op.version[1] = version % 10;
request->request.op.operation_id = op;
request->request.op.request_id = 1;
@@ -837,6 +852,16 @@ print_attr(ipp_attribute_t *attr) /* I - Attribute to print */
attr->values[i].string.charset);
break;
+ case IPP_TAG_BEGIN_COLLECTION :
+ for (i = 0; i < attr->num_values; i ++)
+ {
+ if (i)
+ putchar(' ');
+
+ print_col(attr->values[i].collection);
+ }
+ break;
+
default :
break; /* anti-compiler-warning-code */
}
@@ -846,6 +871,93 @@ print_attr(ipp_attribute_t *attr) /* I - Attribute to print */
/*
+ * 'print_col()' - Print a collection attribute on the screen.
+ */
+
+void
+print_col(ipp_t *col) /* I - Collection attribute to print */
+{
+ int i; /* Looping var */
+ ipp_attribute_t *attr; /* Current attribute in collection */
+
+
+ putchar('{');
+ for (attr = col->attrs; attr; attr = attr->next)
+ {
+ printf("%s(%s%s)=", attr->name, attr->num_values > 1 ? "1setOf " : "",
+ ippTagString(attr->value_tag));
+
+ switch (attr->value_tag)
+ {
+ case IPP_TAG_INTEGER :
+ case IPP_TAG_ENUM :
+ for (i = 0; i < attr->num_values; i ++)
+ printf("%d ", attr->values[i].integer);
+ break;
+
+ case IPP_TAG_BOOLEAN :
+ for (i = 0; i < attr->num_values; i ++)
+ if (attr->values[i].boolean)
+ printf("true ");
+ else
+ printf("false ");
+ break;
+
+ case IPP_TAG_NOVALUE :
+ printf("novalue");
+ break;
+
+ case IPP_TAG_RANGE :
+ for (i = 0; i < attr->num_values; i ++)
+ printf("%d-%d ", attr->values[i].range.lower,
+ attr->values[i].range.upper);
+ break;
+
+ case IPP_TAG_RESOLUTION :
+ for (i = 0; i < attr->num_values; i ++)
+ printf("%dx%d%s ", attr->values[i].resolution.xres,
+ attr->values[i].resolution.yres,
+ attr->values[i].resolution.units == IPP_RES_PER_INCH ?
+ "dpi" : "dpc");
+ break;
+
+ case IPP_TAG_STRING :
+ case IPP_TAG_TEXT :
+ case IPP_TAG_NAME :
+ case IPP_TAG_KEYWORD :
+ case IPP_TAG_CHARSET :
+ case IPP_TAG_URI :
+ case IPP_TAG_MIMETYPE :
+ case IPP_TAG_LANGUAGE :
+ for (i = 0; i < attr->num_values; i ++)
+ printf("\"%s\" ", attr->values[i].string.text);
+ break;
+
+ case IPP_TAG_TEXTLANG :
+ case IPP_TAG_NAMELANG :
+ for (i = 0; i < attr->num_values; i ++)
+ printf("\"%s\",%s ", attr->values[i].string.text,
+ attr->values[i].string.charset);
+ break;
+
+ case IPP_TAG_BEGIN_COLLECTION :
+ for (i = 0; i < attr->num_values; i ++)
+ {
+ print_col(attr->values[i].collection);
+ putchar(' ');
+ }
+ break;
+
+ default :
+ break; /* anti-compiler-warning-code */
+ }
+ }
+
+ putchar('}');
+}
+
+
+/*
* 'usage()' - Show program usage.
*/
diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh
index bf44c17d5..7a6cdc6a6 100755
--- a/test/run-stp-tests.sh
+++ b/test/run-stp-tests.sh
@@ -673,10 +673,10 @@ fi
# Error log messages
count=`grep '^E ' /tmp/cups-$user/log/error_log | wc -l | awk '{print $1}'`
-if test $count != 17; then
- echo "FAIL: $count error messages, expected 17."
+if test $count != 18; then
+ echo "FAIL: $count error messages, expected 18."
grep '^E ' /tmp/cups-$user/log/error_log
- echo "<P>FAIL: $count error messages, expected 17.</P>" >>$strfile
+ echo "<P>FAIL: $count error messages, expected 18.</P>" >>$strfile
echo "<PRE>" >>$strfile
grep '^E ' /tmp/cups-$user/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
echo "</PRE>" >>$strfile