]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Import CUPS v2.1b1 release-2.1b1
authorMichael Sweet <msweet@msweet-imac.local>
Tue, 15 Mar 2016 14:43:16 +0000 (10:43 -0400)
committerMichael Sweet <msweet@msweet-imac.local>
Tue, 15 Mar 2016 14:43:16 +0000 (10:43 -0400)
168 files changed:
CHANGES-2.0.txt [new file with mode: 0644]
CHANGES.txt
INSTALL.txt
Makedefs.in
Makefile
README.txt
backend/dnssd.c
backend/ipp.c
backend/snmp-supplies.c
backend/usb-darwin.c
backend/usb-libusb.c
cgi-bin/Makefile
cgi-bin/admin.c
cgi-bin/help-index.c
cgi-bin/ipp-var.c
cgi-bin/template.c
cgi-bin/var.c
conf/Makefile
config-scripts/cups-common.m4
config-scripts/cups-compiler.m4
config-scripts/cups-defaults.m4
config-scripts/cups-network.m4
config-scripts/cups-ssl.m4
config-scripts/cups-startup.m4
config.h.in
configure
configure.ac
cups/Makefile
cups/auth.c
cups/cups-private.h
cups/cups.h
cups/debug.c
cups/dest.c
cups/encode.c
cups/file.c
cups/globals.c
cups/http-private.h
cups/http.c
cups/ipp-support.c
cups/ipp.c
cups/ipp.h
cups/language.c
cups/mark.c
cups/ppd-cache.c
cups/ppd-private.h
cups/test.ppd
cups/testfile.c
cups/testhttp.c
cups/testppd.c
cups/tls-darwin.c
cups/tls-gnutls.c
cups/tls-sspi.c
cups/tlscheck.c [new file with mode: 0644]
cups/transcode.c
cups/usersys.c
cups/util.c
cups/versioning.h
data/Makefile
data/classified [deleted file]
data/confidential [deleted file]
data/secret [deleted file]
data/standard [deleted file]
data/testprint.in [deleted file]
data/topsecret [deleted file]
data/unclassified [deleted file]
doc/help/api-array.html
doc/help/api-cgi.html
doc/help/api-cups.html
doc/help/api-filedir.html
doc/help/api-filter.html
doc/help/api-httpipp.html
doc/help/api-mime.html
doc/help/api-overview.html
doc/help/api-ppd.html
doc/help/api-ppdc.html
doc/help/api-raster.html
doc/help/man-client.conf.html
doc/help/man-cups-files.conf.html
doc/help/man-cupsd.conf.html
doc/help/man-ipptool.html
doc/help/man-ipptoolfile.html
doc/help/man-lpadmin.html
doc/help/postscript-driver.html
doc/help/ppd-compiler.html
doc/help/raster-driver.html
doc/help/spec-cmp.html
doc/help/spec-ppd.html
filter/Makefile
filter/error.c
filter/gziptoany.c
filter/interpret.c
filter/pstops.c
filter/raster.c
filter/rastertoepson.c
filter/rastertohp.c
filter/rastertopwg.c
locale/Makefile
locale/cups.pot
locale/cups.strings
locale/cups_ca.po
locale/cups_cs.po
locale/cups_de.po
locale/cups_es.po
locale/cups_fr.po
locale/cups_it.po
locale/cups_ja.po
locale/cups_ru.po
man/Makefile
man/client.conf.man.in
man/cups-files.conf.man.in
man/cupsd.conf.man.in
man/ipptool.man
man/ipptoolfile.man
man/lpadmin.man
man/mantohtml.c
packaging/cups.spec
packaging/cups.spec.in
ppdc/Makefile
ppdc/ppdhtml.cxx
ppdc/ppdpo.cxx
ppdc/sample.drv
scheduler/Makefile
scheduler/auth.c
scheduler/client.c
scheduler/colorman.c
scheduler/conf.c
scheduler/conf.h
scheduler/cups-driverd.cxx
scheduler/cups-lpd.c
scheduler/cupsfilter.c
scheduler/dirsvc.c
scheduler/env.c
scheduler/ipp.c
scheduler/job.c
scheduler/job.h
scheduler/log.c
scheduler/main.c
scheduler/org.cups.cups-lpd.plist.in
scheduler/org.cups.cupsd.plist
scheduler/printers.c
scheduler/printers.h
scheduler/process.c
scheduler/server.c
scheduler/sysman.c
scheduler/testlpd.c
scheduler/type.c
systemv/cancel.c
systemv/cupstestppd.c
systemv/lpadmin.c
templates/de/help-trailer.tmpl [new file with mode: 0644]
templates/ru/help-trailer.tmpl [new file with mode: 0644]
test/5.1-lpadmin.sh
test/5.4-lpstat.sh
test/Dependencies
test/Makefile
test/ipp-1.1.test
test/ippfind.c
test/ippinfra.c [new file with mode: 0644]
test/ippinfra.man [new file with mode: 0644]
test/ippproxy.c [new file with mode: 0644]
test/ippproxy.man [new file with mode: 0644]
test/ippserver.c
test/ipptool.c
test/run-stp-tests.sh
test/str-header.html
vcnet/config.h
xcode/CUPS.xcodeproj/project.pbxproj
xcode/config.h

diff --git a/CHANGES-2.0.txt b/CHANGES-2.0.txt
new file mode 100644 (file)
index 0000000..81c8dcf
--- /dev/null
@@ -0,0 +1,201 @@
+CHANGES-2.0.txt
+---------------
+
+CHANGES IN CUPS V2.0.3
+
+       - Security: Fixed CERT VU #810572 exploiting the dynamic linker
+         (STR #4609)
+       - Security: The scheduler could hang with malformed gzip data
+         (STR #4602)
+       - Restored missing generic printer icon file (STR #4587)
+       - Fixed logging of configuration errors to show up as errors (STR #4582)
+       - Fixed potential buffer overflows in raster code and filters
+         (STR #4598, STR #4599, STR #4600, STR #4601)
+       - Fixed a gzip processing bug (#4602)
+       - Fixed <Limit> inside <Location> (STR #4575)
+       - Fixed lpadmin when both -m and -o are used (STR #4578)
+       - The web interface always showed support for 2-sided printing
+         (STR #4595)
+       - cupsRasterReadHeader did not fully validate the raster header
+         (STR #4596)
+       - The rastertopwg filter did not check for truncated input (STR #4597)
+       - The cups-lpd mini-daemon did not check for request parameters
+         (STR #4603)
+       - The scheduler could get caught in a busy loop (STR #4605)
+       - The sample Epson driver could crash (STR #4616)
+       - The IPP backend now correctly monitors jobs
+         (<rdar://problem/20495955>)
+       - The ppdhtml and ppdpo utilities crashed when the -D option was used
+         before a driver information file (STR #4627)
+       - ippfind incorrectly substituted "=port" for service_port.
+       - The IPP/1.1 test file did not handle the initial print job
+         completing early (STR #4576)
+       - Fixed a memory leak in cupsConnectDest (STR #4634)
+       - PWG Raster Format output contained invalid ImageBox values
+         (<rdar://problem/21144309>)
+       - Added Russian translation (STR #4577)
+       - Added German translation (STR #4635)
+
+
+CHANGES IN CUPS V2.0.2
+
+       - Security: cupsRasterReadPixels buffer overflow with invalid page
+         header and compressed raster data (STR #4551)
+       - Command-line programs were not localized on Mac OS X
+         (<rdar://problem/14546232>)
+       - The scheduler incorrectly cleared the MakeModel string in the
+         printers.conf file after a restart (<rdar://problem/16827518>)
+       - CUPS did not compile with older versions of GNU TLS (STR #4527)
+       - CUPS did not compile without Avahi or mDNSResponder (STR #4523)
+       - ippLength() did not return the correct length for IPP_TAG_CONST
+         string values.
+       - The scheduler incorrectly aborted jobs after a job was restarted
+         (<rdar://problem/19129387>)
+       - The cups-files.conf file contained the old ServerCertificate/Key
+         directives instead of ServerKeychain.
+       - Fixed builds when no SSL/TLS library is available, or when explicitly
+         disabled (STR #4531)
+       - Fixed an OpenBSD charset transcoding issue.
+       - Fixed USB printing on OpenBSD (STR #4525)
+       - The --without-xinetd configure option did not work (STR #4542)
+       - Backends needing to load OS X kernel extensions did not work
+         (<rdar://problem/19015679>)
+       - Mapping of PPD keywords to IPP keywords did not work if the PPD
+         keyword was already an IPP keyword (<rdar://problem/19121005>)
+       - cupsGetPPD* sent bad requests (STR #4567)
+       - ippserver used the wrong temporary directory on Windows (STR #4547)
+       - ippserver did not handle Bonjour registrations properly (STR #4548)
+       - The scheduler could crash during shutdown if Avahi was shutdown
+         first (STR #4550)
+       - Added a USB quirk rule for Intermec printers (STR #4553)
+       - The scheduler did not always log which configuration file had the
+         error (STR #4559)
+       - The ippfind and ipptool programs now correctly match hostnames with
+         trailing dots (STR #4563)
+       - The ipptool timeout option did not work (STR #4515)
+       - Fixed several issues with client.conf, CUPS_SERVER, and the "-h"
+         option of most commands (STR #4528)
+       - Another change for OpenBSD (STR #4526)
+       - Added Japanese localization (STR #4524)
+       - Documentation changes (STR #4569)
+
+
+CHANGES IN CUPS V2.0.1
+
+       - Security: SSLv3 is now disabled by default to protect against the
+         POODLE attack (STR #4476)
+       - Printer sharing did not work when systemd was being used (STR #4497)
+       - cupsGetPPD* would return a symlink to the PPD in /etc/cups/ppd even if
+         it was not readable by the user (STR #4500)
+       - The web interface now protects against frame "click-jacking" attacks
+         (STR #4492)
+       - Fixed a crash in ippAttributeString (<rdar://problem/17903871>)
+       - Fixed a crash in the scheduler on Linux/*BSD if colord was not running
+         (STR #4496)
+       - Fixed a random crash in the scheduler when not using systemd
+         (STR #4484)
+       - Added systemd support for cups-lpd (STR #4493)
+       - The scheduler did not honor the FatalErrors directive for mis-
+         configured Group and SystemGroup values (STR #4495)
+       - The network backends no longer report waste-receptacle conditions when
+         using SNMP (STR #4499)
+       - The IPP backend did not work with some configurations of Windows
+         (STR #4503)
+       - RPMs did not build (STR #4490)
+       - Added a USB quirk rule for the Brother HL-1250 (STR #4519)
+       - Fixed compiles on unsupported platforms (STR #4510)
+       - "cancel -a" did not cancel all jobs on all destinations (STR #4513)
+       - The web interface did not work on OpenBSD (STR #4496)
+
+
+CHANGES IN CUPS V2.0.0
+
+       - The scheduler did not preserve listener sockets from launchd or
+         systemd after a restart (<rdar://problem/18112848>)
+       - Added some USB quirk rules for the libusb-based USB backend
+         (STR #4482)
+       - Spanish localization update (STR #4487)
+       - Updated documentation for 2.0.0 release.
+
+
+CHANGES IN CUPS V2.0rc1
+
+       - Documentation updates (STR #4464)
+       - The scheduler now monitors the AC power status on OS X, allowing for
+         "sleep printing" when sharing printers (<rdar://problem/17325852>)
+       - The scheduler incorrectly called launch_activate_socket multiple times
+         on OS X (<rdar://problem/17523218>)
+       - The ippserver test program now passes the IPP Everywhere self-
+         certification tests (STR #4101)
+       - Relaxed the new OS X filter sandbox slightly (STR #4471,
+         <rdar://problem/17483959>)
+       - Dropped the old Epson Stylus Color/Photo sample drivers since they
+         don't work with any current printers and there are free alternatives
+         that produce much better output (<rdar://problem/18036889>)
+       - Log and configuration files that are not world-readable are again
+         accessible via the web interface (STR #4461)
+       - PPD files are now created using the permissions specified by the
+         ConfigFilePerm directive.
+       - Fixed RPM build issues (STR #4459)
+       - Fixed the spinner image and restart page when reconfiguring the
+         scheduler through the web interface (STR #4475)
+
+
+CHANGES IN CUPS V2.0b1
+
+       - Added a "--list-filters" option to the cupsfilter command (STR #4325)
+        - Added systemd support (STR #3917)
+       - Added support for re-sending a job as a raster file if a higher-level
+         format such as PDF fails (<rdar://problem/15583721>)
+       - Added support for regular expression matching in the MIME type rules
+         (<rdar://problem/11131245>)
+       - Added support for TLS certificate validation and policy enforcement
+         (STR #1616)
+       - Added support for simultaneous XML and test output from ipptool.
+       - Added support for PAUSE directive in ipptool test files.
+       - Added support for auto-typing of TIFF files by ipptool (STR #4418)
+       - The scheduler now returns completed jobs in the correct newest-to-
+         oldest order (STR #4396)
+       - The configure script now supports target-specific tools for pkg-config
+         and others (STR #4423)
+       - The ipptool program now supports EXPECT statements for collection
+         member attributes (<rdar://problem/15355218>)
+       - The ipptool program now supports collection attributes with multiple
+         values (<rdar://problem/15355124>)
+       - The sample drivers now include all of the installed localizations by
+         default (<rdar://problem/14756625>)
+       - Adopted Linux man page conventions and updated all man pages
+         (STR #4372, STR #4329)
+       - The scheduler now supports the "first-index" operation attribute for
+         the Get-Jobs operation (STR #2913)
+       - Changed the default AccessLogLevel and PageLogFormat to disable the
+         access_log and page_log files by default (<rdar://problem/16495000>)
+       - cupsRasterInterpretPPD now supports the Orientation header in order to
+         support long-edge feed raster printers (<rdar://problem/15837926>)
+       - The scheduler now allows run-as-root backends to have group read and
+         execute permissions (STR #2935)
+       - The ippFindAttribute and ippFindNextAttribute functions now support
+         hierarchical searches (STR #4395)
+       - Dropped OpenSSL support in favor of GNU TLS.
+       - Dropped "dark wake" support on OS X, which was preventing portables
+         from going to sleep when there was a stuck job. We now use a variation
+         of the CUPS 1.4 sleep support to do a cleaner sleep
+         (<rdar://problem/14323704>)
+       - Dropped support for AIX, HP-UX, and OSF/1 (aka Digital UNIX)
+       - Dropped lppasswd and support for Digest authentication in in the
+         scheduler (STR #4321)
+       - The cupsGetClasses, cupsGetPrinters, and cupsTempFile functions are no
+         longer supported.
+       - The scheduler now caches more job history data and limits the number
+         of completed jobs returned by Get-Jobs as needed in order to prevent a
+         denial-of-service on busy servers (STR #2913)
+       - The filter/backend sandbox on OS X now defaults to a more strict
+         whitelist (<rdar://problem/15939788>)
+       - Increased the default idle exit timeout to 60 seconds on OS X
+         (<rdar://problem/16041820>)
+       - Printer classes were not accessible on OS X
+         (<rdar://problem/16385643>)
+       - The scheduler now uses </DefaultPrinter> to close the default printer
+         definition in printers.conf (STR #4153)
+       - Canceling all jobs in the web interface now just cancels the jobs
+         (STR #1914)
index f2a44dc3b17aeb4443cb21db0d136ba099ced31c..113637de41fc4f53e811f186d54c939ae564f631 100644 (file)
-CHANGES.txt - 2.0.4 - 2015-07-31
+CHANGES.txt - 2.1b1 - 2015-06-03
 --------------------------------
 
-CHANGES IN CUPS V2.0.4
+CHANGES IN CUPS V2.1b1
+
+       - Improved speed of ppdMarkDefaults for complex/large PPDs
+         (<rdar://problem/15146999>)
+       - The IPP backend now stops sending print data if the printer indicates
+         the job has been aborted or canceled (<rdar://problem/17837631>)
+       - The IPP backend now sends the job-pages-per-set attribute when
+         printing multiple copy jobs with finishings
+         (<rdar://problem/16792757>)
+       - The IPP backend now updates the cupsMandatory values when the printer
+         configuration changes (<rdar://problem/18126570>)
+       - No longer install banner files since third-party banner filters now
+         supply their own (STR #4518)
+       - Added support for EXPECT-ALL directive in ipptool test files
+         (STR #4469)
+       - Added support for WITH-VALUE-FROM predicate in ipptool test files
+         (STR #4470)
+       - The scheduler no longer listens on the loopback interface unless the
+         web interface or printer sharing are enabled
+         (<rdar://problem/9136448>)
+       - Added a PPD generator for IPP Everywhere printers (STR #4258)
+       - Now install "default" versions of more configuration files
+         (<rdar://problem/19024491>)
+       - The cupstestppd program did not handle "maxsize(nnn)" entries in
+         cupsFilter/cupsFilter2 values (<rdar://problem/18974858>)
+       - The scheduler now checks the return value of rename() calls
+         (STR #4589)
+       - The scheduler now validates ErrorPolicy values in config files
+         (STR #4591)
+       - Long cookies caused the web interface to stop working (STR #4619)
+       - Added SSLOptions values to allow Diffie-Hellman key exchange and
+         disable TLS/1.0 support.
+       - Updated the scheduler to support more IPP Everywhere attributes
+         (STR #4630)
+       - The scheduler now supports advanced ASL and journald logging when
+         "syslog" output is configured (STR #4474)
+       - The scheduler now supports logging to stderr when running in the
+         foreground (STR #4505)
 
-       - Fixed a bug in cupsRasterWritePixels (STR #4650)
-       - Fixed redirection in the web interface (STR #4538)
-       - The IPP backend did not respond to side-channel requests (STR #4645)
-       - The scheduler did not start all pending jobs at once (STR #4646)
-       - The web search incorrectly searched time-at-xxx values (STR #4652)
-       - Fixed an RPM spec file issue (STR #4657)
-       - The scheduler incorrectly started jobs while canceling multiple jobs
-         (STR #4648)
-       - Fixed processing of server overrides without port numbers (STR #4675)
-       - Documentation changes (STR #4651, STR #4674)
-
-
-CHANGES IN CUPS V2.0.3
-
-       - Security: Fixed CERT VU #810572 exploiting the dynamic linker
-         (STR #4609)
-       - Security: The scheduler could hang with malformed gzip data
-         (STR #4602)
-       - Restored missing generic printer icon file (STR #4587)
-       - Fixed logging of configuration errors to show up as errors (STR #4582)
-       - Fixed potential buffer overflows in raster code and filters
-         (STR #4598, STR #4599, STR #4600, STR #4601)
-       - Fixed a gzip processing bug (#4602)
-       - Fixed <Limit> inside <Location> (STR #4575)
-       - Fixed lpadmin when both -m and -o are used (STR #4578)
-       - The web interface always showed support for 2-sided printing
-         (STR #4595)
-       - cupsRasterReadHeader did not fully validate the raster header
-         (STR #4596)
-       - The rastertopwg filter did not check for truncated input (STR #4597)
-       - The cups-lpd mini-daemon did not check for request parameters
-         (STR #4603)
-       - The scheduler could get caught in a busy loop (STR #4605)
-       - The sample Epson driver could crash (STR #4616)
-       - The IPP backend now correctly monitors jobs
-         (<rdar://problem/20495955>)
-       - The ppdhtml and ppdpo utilities crashed when the -D option was used
-         before a driver information file (STR #4627)
-       - ippfind incorrectly substituted "=port" for service_port.
-       - The IPP/1.1 test file did not handle the initial print job
-         completing early (STR #4576)
-       - Fixed a memory leak in cupsConnectDest (STR #4634)
-       - PWG Raster Format output contained invalid ImageBox values
-         (<rdar://problem/21144309>)
-       - Added Russian translation (STR #4577)
-       - Added German translation (STR #4635)
-
-
-CHANGES IN CUPS V2.0.2
-
-       - Security: cupsRasterReadPixels buffer overflow with invalid page
-         header and compressed raster data (STR #4551)
-       - Command-line programs were not localized on Mac OS X
-         (<rdar://problem/14546232>)
-       - The scheduler incorrectly cleared the MakeModel string in the
-         printers.conf file after a restart (<rdar://problem/16827518>)
-       - CUPS did not compile with older versions of GNU TLS (STR #4527)
-       - CUPS did not compile without Avahi or mDNSResponder (STR #4523)
-       - ippLength() did not return the correct length for IPP_TAG_CONST
-         string values.
-       - The scheduler incorrectly aborted jobs after a job was restarted
-         (<rdar://problem/19129387>)
-       - The cups-files.conf file contained the old ServerCertificate/Key
-         directives instead of ServerKeychain.
-       - Fixed builds when no SSL/TLS library is available, or when explicitly
-         disabled (STR #4531)
-       - Fixed an OpenBSD charset transcoding issue.
-       - Fixed USB printing on OpenBSD (STR #4525)
-       - The --without-xinetd configure option did not work (STR #4542)
-       - Backends needing to load OS X kernel extensions did not work
-         (<rdar://problem/19015679>)
-       - Mapping of PPD keywords to IPP keywords did not work if the PPD
-         keyword was already an IPP keyword (<rdar://problem/19121005>)
-       - cupsGetPPD* sent bad requests (STR #4567)
-       - ippserver used the wrong temporary directory on Windows (STR #4547)
-       - ippserver did not handle Bonjour registrations properly (STR #4548)
-       - The scheduler could crash during shutdown if Avahi was shutdown
-         first (STR #4550)
-       - Added a USB quirk rule for Intermec printers (STR #4553)
-       - The scheduler did not always log which configuration file had the
-         error (STR #4559)
-       - The ippfind and ipptool programs now correctly match hostnames with
-         trailing dots (STR #4563)
-       - The ipptool timeout option did not work (STR #4515)
-       - Fixed several issues with client.conf, CUPS_SERVER, and the "-h"
-         option of most commands (STR #4528)
-       - Another change for OpenBSD (STR #4526)
-       - Added Japanese localization (STR #4524)
-       - Documentation changes (STR #4569)
-
-
-CHANGES IN CUPS V2.0.1
-
-       - Security: SSLv3 is now disabled by default to protect against the
-         POODLE attack (STR #4476)
-       - Printer sharing did not work when systemd was being used (STR #4497)
-       - cupsGetPPD* would return a symlink to the PPD in /etc/cups/ppd even if
-         it was not readable by the user (STR #4500)
-       - The web interface now protects against frame "click-jacking" attacks
-         (STR #4492)
-       - Fixed a crash in ippAttributeString (<rdar://problem/17903871>)
-       - Fixed a crash in the scheduler on Linux/*BSD if colord was not running
-         (STR #4496)
-       - Fixed a random crash in the scheduler when not using systemd
-         (STR #4484)
-       - Added systemd support for cups-lpd (STR #4493)
-       - The scheduler did not honor the FatalErrors directive for mis-
-         configured Group and SystemGroup values (STR #4495)
-       - The network backends no longer report waste-receptacle conditions when
-         using SNMP (STR #4499)
-       - The IPP backend did not work with some configurations of Windows
-         (STR #4503)
-       - RPMs did not build (STR #4490)
-       - Added a USB quirk rule for the Brother HL-1250 (STR #4519)
-       - Fixed compiles on unsupported platforms (STR #4510)
-       - "cancel -a" did not cancel all jobs on all destinations (STR #4513)
-       - The web interface did not work on OpenBSD (STR #4496)
-
-
-CHANGES IN CUPS V2.0.0
-
-       - The scheduler did not preserve listener sockets from launchd or
-         systemd after a restart (<rdar://problem/18112848>)
-       - Added some USB quirk rules for the libusb-based USB backend
-         (STR #4482)
-       - Spanish localization update (STR #4487)
-       - Updated documentation for 2.0.0 release.
-
-
-CHANGES IN CUPS V2.0rc1
-
-       - Documentation updates (STR #4464)
-       - The scheduler now monitors the AC power status on OS X, allowing for
-         "sleep printing" when sharing printers (<rdar://problem/17325852>)
-       - The scheduler incorrectly called launch_activate_socket multiple times
-         on OS X (<rdar://problem/17523218>)
-       - The ippserver test program now passes the IPP Everywhere self-
-         certification tests (STR #4101)
-       - Relaxed the new OS X filter sandbox slightly (STR #4471,
-         <rdar://problem/17483959>)
-       - Dropped the old Epson Stylus Color/Photo sample drivers since they
-         don't work with any current printers and there are free alternatives
-         that produce much better output (<rdar://problem/18036889>)
-       - Log and configuration files that are not world-readable are again
-         accessible via the web interface (STR #4461)
-       - PPD files are now created using the permissions specified by the
-         ConfigFilePerm directive.
-       - Fixed RPM build issues (STR #4459)
-       - Fixed the spinner image and restart page when reconfiguring the
-         scheduler through the web interface (STR #4475)
-
-
-CHANGES IN CUPS V2.0b1
-
-       - Added a "--list-filters" option to the cupsfilter command (STR #4325)
-        - Added systemd support (STR #3917)
-       - Added support for re-sending a job as a raster file if a higher-level
-         format such as PDF fails (<rdar://problem/15583721>)
-       - Added support for regular expression matching in the MIME type rules
-         (<rdar://problem/11131245>)
-       - Added support for TLS certificate validation and policy enforcement
-         (STR #1616)
-       - Added support for simultaneous XML and test output from ipptool.
-       - Added support for PAUSE directive in ipptool test files.
-       - Added support for auto-typing of TIFF files by ipptool (STR #4418)
-       - The scheduler now returns completed jobs in the correct newest-to-
-         oldest order (STR #4396)
-       - The configure script now supports target-specific tools for pkg-config
-         and others (STR #4423)
-       - The ipptool program now supports EXPECT statements for collection
-         member attributes (<rdar://problem/15355218>)
-       - The ipptool program now supports collection attributes with multiple
-         values (<rdar://problem/15355124>)
-       - The sample drivers now include all of the installed localizations by
-         default (<rdar://problem/14756625>)
-       - Adopted Linux man page conventions and updated all man pages
-         (STR #4372, STR #4329)
-       - The scheduler now supports the "first-index" operation attribute for
-         the Get-Jobs operation (STR #2913)
-       - Changed the default AccessLogLevel and PageLogFormat to disable the
-         access_log and page_log files by default (<rdar://problem/16495000>)
-       - cupsRasterInterpretPPD now supports the Orientation header in order to
-         support long-edge feed raster printers (<rdar://problem/15837926>)
-       - The scheduler now allows run-as-root backends to have group read and
-         execute permissions (STR #2935)
-       - The ippFindAttribute and ippFindNextAttribute functions now support
-         hierarchical searches (STR #4395)
-       - Dropped OpenSSL support in favor of GNU TLS.
-       - Dropped "dark wake" support on OS X, which was preventing portables
-         from going to sleep when there was a stuck job. We now use a variation
-         of the CUPS 1.4 sleep support to do a cleaner sleep
-         (<rdar://problem/14323704>)
-       - Dropped support for AIX, HP-UX, and OSF/1 (aka Digital UNIX)
-       - Dropped lppasswd and support for Digest authentication in in the
-         scheduler (STR #4321)
-       - The cupsGetClasses, cupsGetPrinters, and cupsTempFile functions are no
-         longer supported.
-       - The scheduler now caches more job history data and limits the number
-         of completed jobs returned by Get-Jobs as needed in order to prevent a
-         denial-of-service on busy servers (STR #2913)
-       - The filter/backend sandbox on OS X now defaults to a more strict
-         whitelist (<rdar://problem/15939788>)
-       - Increased the default idle exit timeout to 60 seconds on OS X
-         (<rdar://problem/16041820>)
-       - Printer classes were not accessible on OS X
-         (<rdar://problem/16385643>)
-       - The scheduler now uses </DefaultPrinter> to close the default printer
-         definition in printers.conf (STR #4153)
-       - Canceling all jobs in the web interface now just cancels the jobs
-         (STR #1914)
index bd8c28aafb4d32f27e0d785ed5b1484a27e5d976..0608c3547a2d6a2e2a88636620d2ada2d337aae6 100644 (file)
@@ -1,4 +1,4 @@
-INSTALL - CUPS v2.0.4 - 2015-07-31
+INSTALL - CUPS v2.1b1 - 2015-06-08
 ----------------------------------
 
 This file describes how to compile and install CUPS from source code. For more
index f9c275f3c48216ec9dbc3af2b3436df5f4a01593..3afef0a3321bbbcbfa197713c925c4babe44f83f 100644 (file)
@@ -1,5 +1,5 @@
 #
-# "$Id: Makedefs.in 11716 2014-03-21 14:50:24Z msweet $"
+# "$Id: Makedefs.in 12519 2015-02-17 13:10:19Z msweet $"
 #
 # Common makefile definitions for CUPS.
 #
@@ -264,5 +264,5 @@ USBQUIRKS   =       @USBQUIRKS@
 
 
 #
-# End of "$Id: Makedefs.in 11716 2014-03-21 14:50:24Z msweet $"
+# End of "$Id: Makedefs.in 12519 2015-02-17 13:10:19Z msweet $"
 #
index f5aa07c0625f98c9a513015d9d536f4d70d0af51..94ce714e81bffa6a58831ede0913978334244504 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
 #
-# "$Id: Makefile 12415 2015-01-21 00:03:08Z msweet $"
+# "$Id: Makefile 12414 2015-01-21 00:02:04Z msweet $"
 #
 # Top-level Makefile for CUPS.
 #
@@ -348,5 +348,5 @@ dist:       all
 
 
 #
-# End of "$Id: Makefile 12415 2015-01-21 00:03:08Z msweet $".
+# End of "$Id: Makefile 12414 2015-01-21 00:02:04Z msweet $".
 #
index 8e4e64197d504f0a67c5dea96d64066f53ca14d5..a6db7bfb945b57e17ceb0fd7c48ba16b690e832e 100644 (file)
@@ -1,4 +1,4 @@
-README - CUPS v2.0.4 - 2015-07-31
+README - CUPS v2.1b1 - 2015-06-08
 ---------------------------------
 
 Looking for compile instructions?  Read the file "INSTALL.txt" instead...
index 83f450959d8732f44cc8bf119c2e4be7ac3d9468..e76431b0b1abfe65e759e33ea6e51ebb5b3653b1 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: dnssd.c 12660 2015-05-22 19:09:57Z msweet $"
+ * "$Id: dnssd.c 12659 2015-05-22 19:06:41Z msweet $"
  *
  * DNS-SD discovery backend for CUPS.
  *
@@ -1330,5 +1330,5 @@ unquote(char       *dst,          /* I - Destination buffer */
 
 
 /*
- * End of "$Id: dnssd.c 12660 2015-05-22 19:09:57Z msweet $".
+ * End of "$Id: dnssd.c 12659 2015-05-22 19:06:41Z msweet $".
  */
index 50dd73ea440dbe1fd6d13eca8c72863c2e56afc5..96957eaaf03ad8a3bf5eecfbb10a07b089c681f9 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: ipp.c 12759 2015-06-24 20:06:30Z msweet $"
+ * "$Id: ipp.c 12676 2015-05-28 01:19:14Z msweet $"
  *
  * IPP backend for CUPS.
  *
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2015 by Apple Inc.
  * Copyright 1997-2007 by Easy Software Products, all rights reserved.
  *
  * These coded instructions, statements, and computer programs are the
@@ -122,6 +122,7 @@ static const char * const pattrs[] =        /* Printer attributes we want */
   "printer-alert",
   "printer-alert-description",
   "printer-is-accepting-jobs",
+  "printer-mandatory-job-attributes",
   "printer-state",
   "printer-state-message",
   "printer-state-reasons"
@@ -145,6 +146,8 @@ static cups_option_t        *attr_cache = NULL;
 static cups_array_t    *state_reasons; /* Array of printe-state-reasons keywords */
 static char            tmpfilename[1024] = "";
                                        /* Temporary spool file name */
+static char            mandatory_attrs[1024] = "";
+                                       /* cupsMandatory value */
 
 
 /*
@@ -1295,11 +1298,16 @@ main(int  argc,                         /* I - Number of command-line args */
       * Load the PPD file and generate PWG attribute mapping information...
       */
 
+      ppd_attr_t *mandatory;           /* cupsMandatory value */
+
       ppd = ppdOpenFile(getenv("PPD"));
       pc  = _ppdCacheCreateWithPPD(ppd);
 
       ppdMarkDefaults(ppd);
       cupsMarkOptions(ppd, num_options, options);
+
+      if ((mandatory = ppdFindAttr(ppd, "cupsMandatory", NULL)) != NULL)
+        strlcpy(mandatory_attrs, mandatory->value, sizeof(mandatory_attrs));
     }
   }
   else
@@ -1459,6 +1467,7 @@ main(int  argc,                           /* I - Number of command-line args */
              ipp_status == IPP_STATUS_ERROR_CUPS_ACCOUNT_AUTHORIZATION_FAILED)
       goto cleanup;
     else if (ipp_status == IPP_STATUS_ERROR_FORBIDDEN ||
+             ipp_status == IPP_STATUS_ERROR_NOT_AUTHORIZED ||
             ipp_status == IPP_STATUS_ERROR_CUPS_AUTHENTICATION_CANCELED)
     {
       const char *www_auth = httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE);
@@ -1562,7 +1571,6 @@ main(int  argc,                           /* I - Number of command-line args */
           FD_ZERO(&input);
          FD_SET(fd, &input);
          FD_SET(snmp_fd, &input);
-         FD_SET(CUPS_SC_FD, &input);
 
           while (select(fd > snmp_fd ? fd + 1 : snmp_fd + 1, &input, NULL, NULL,
                        NULL) <= 0 && !job_canceled);
@@ -2018,12 +2026,8 @@ main(int  argc,                          /* I - Number of command-line args */
                           remote_job_states[job_state->values[0].integer -
                                             IPP_JOB_PENDING]);
 
-         if ((job_sheets = ippFindAttribute(response,
-                                            "job-media-sheets-completed",
-                                            IPP_TAG_INTEGER)) == NULL)
-           job_sheets = ippFindAttribute(response,
-                                         "job-impressions-completed",
-                                         IPP_TAG_INTEGER);
+         if ((job_sheets = ippFindAttribute(response, "job-impressions-completed", IPP_TAG_INTEGER)) == NULL)
+           job_sheets = ippFindAttribute(response, "job-media-sheets-completed", IPP_TAG_INTEGER);
 
          if (job_sheets)
            fprintf(stderr, "PAGE: total %d\n",
@@ -2460,6 +2464,8 @@ monitor_printer(
             new_reasons |= _CUPS_JSR_JOB_PASSWORD_WAIT;
           else if (!strcmp(attr->values[i].string.text, "job-release-wait"))
             new_reasons |= _CUPS_JSR_JOB_RELEASE_WAIT;
+          else if (!strncmp(attr->values[i].string.text, "job-canceled-", 13) || !strcmp(attr->values[i].string.text, "aborted-by-system"))
+            job_canceled = 1;
         }
 
         if (new_reasons != monitor->job_reasons)
@@ -2560,19 +2566,10 @@ new_request(
     ipp_attribute_t *print_color_mode_sup)
                                        /* I - Printer supports print-color-mode */
 {
-  int          i;                      /* Looping var */
   ipp_t                *request;               /* Request data */
   const char   *keyword;               /* PWG keyword */
-  _pwg_size_t  *size;                  /* PWG media size */
-  ipp_t                *media_col,             /* media-col value */
-               *media_size;            /* media-size value */
-  const char   *media_source,          /* media-source value */
-               *media_type,            /* media-type value */
-               *collate_str,           /* multiple-document-handling value */
-               *mandatory;             /* Mandatory attributes */
   ipp_tag_t    group;                  /* Current group */
   ipp_attribute_t *attr;               /* Current attribute */
-  const char   *color_attr_name;       /* Supported color attribute */
   char         buffer[1024];           /* Value buffer */
 
 
@@ -2592,36 +2589,31 @@ new_request(
   * Add standard attributes...
   */
 
-  ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
-              NULL, uri);
+  ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
   fprintf(stderr, "DEBUG: printer-uri=\"%s\"\n", uri);
 
   if (user && *user)
   {
-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
-                "requesting-user-name", NULL, user);
+    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, user);
     fprintf(stderr, "DEBUG: requesting-user-name=\"%s\"\n", user);
   }
 
   if (title && *title)
   {
-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name", NULL,
-                title);
+    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name", NULL, title);
     fprintf(stderr, "DEBUG: job-name=\"%s\"\n", title);
   }
 
   if (format && op != IPP_CREATE_JOB)
   {
-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE,
-                "document-format", NULL, format);
+    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format", NULL, format);
     fprintf(stderr, "DEBUG: document-format=\"%s\"\n", format);
   }
 
 #ifdef HAVE_LIBZ
   if (compression && op != IPP_OP_CREATE_JOB && op != IPP_OP_VALIDATE_JOB)
   {
-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
-                "compression", NULL, compression);
+    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "compression", NULL, compression);
     fprintf(stderr, "DEBUG: compression=\"%s\"\n", compression);
   }
 #endif /* HAVE_LIBZ */
@@ -2634,313 +2626,13 @@ new_request(
   {
     if (pc)
     {
-      int      num_finishings = 0,     /* Number of finishing values */
-               finishings[10];         /* Finishing enum values */
-      ppd_choice_t *choice;            /* Marked choice */
-
      /*
       * Send standard IPP attributes...
       */
 
       fputs("DEBUG: Adding standard IPP operation/job attributes.\n", stderr);
 
-      if (pc->password &&
-          (keyword = cupsGetOption("job-password", num_options,
-                                   options)) != NULL)
-      {
-        ippAddOctetString(request, IPP_TAG_OPERATION, "job-password", keyword, (int)strlen(keyword));
-
-        if ((keyword = cupsGetOption("job-password-encryption", num_options,
-                                    options)) == NULL)
-         keyword = "none";
-
-        ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
-                     "job-password-encryption", NULL, keyword);
-      }
-
-      if (pc->account_id)
-      {
-        if ((keyword = cupsGetOption("job-account-id", num_options,
-                                    options)) == NULL)
-         keyword = cupsGetOption("job-billing", num_options, options);
-
-        if (keyword)
-         ippAddString(request, IPP_TAG_JOB, IPP_TAG_NAME, "job-account-id",
-                      NULL, keyword);
-      }
-
-      if (pc->accounting_user_id)
-      {
-        if ((keyword = cupsGetOption("job-accounting-user-id", num_options,
-                                    options)) == NULL)
-         keyword = user;
-
-        if (keyword)
-         ippAddString(request, IPP_TAG_JOB, IPP_TAG_NAME,
-                      "job-accounting-user-id", NULL, keyword);
-      }
-
-      for (mandatory = (char *)cupsArrayFirst(pc->mandatory);
-           mandatory;
-           mandatory = (char *)cupsArrayNext(pc->mandatory))
-      {
-        if (strcmp(mandatory, "copies") &&
-            strcmp(mandatory, "destination-uris") &&
-            strcmp(mandatory, "finishings") &&
-            strcmp(mandatory, "job-account-id") &&
-            strcmp(mandatory, "job-accounting-user-id") &&
-            strcmp(mandatory, "job-password") &&
-            strcmp(mandatory, "job-password-encryption") &&
-            strcmp(mandatory, "media") &&
-            strncmp(mandatory, "media-col", 9) &&
-            strcmp(mandatory, "multiple-document-handling") &&
-            strcmp(mandatory, "output-bin") &&
-            strcmp(mandatory, "print-color-mode") &&
-            strcmp(mandatory, "print-quality") &&
-            strcmp(mandatory, "sides") &&
-            (keyword = cupsGetOption(mandatory, num_options, options)) != NULL)
-       {
-         _ipp_option_t *opt = _ippFindOption(mandatory);
-                                       /* Option type */
-          ipp_tag_t    value_tag = opt ? opt->value_tag : IPP_TAG_NAME;
-                                       /* Value type */
-
-          switch (value_tag)
-          {
-            case IPP_TAG_INTEGER :
-            case IPP_TAG_ENUM :
-                ippAddInteger(request, IPP_TAG_JOB, value_tag, mandatory,
-                              atoi(keyword));
-                break;
-            case IPP_TAG_BOOLEAN :
-                ippAddBoolean(request, IPP_TAG_JOB, mandatory,
-                              !_cups_strcasecmp(keyword, "true"));
-                break;
-            case IPP_TAG_RANGE :
-                {
-                  int lower, upper;    /* Range */
-
-                 if (sscanf(keyword, "%d-%d", &lower, &upper) != 2)
-                   lower = upper = atoi(keyword);
-
-                 ippAddRange(request, IPP_TAG_JOB, mandatory, lower, upper);
-                }
-                break;
-            case IPP_TAG_STRING :
-                ippAddOctetString(request, IPP_TAG_JOB, mandatory, keyword, (int)strlen(keyword));
-                break;
-            default :
-                if (!strcmp(mandatory, "print-color-mode") && !strcmp(keyword, "monochrome"))
-                {
-                  if (ippContainsString(print_color_mode_sup, "auto-monochrome"))
-                    keyword = "auto-monochrome";
-                  else if (ippContainsString(print_color_mode_sup, "process-monochrome") && !ippContainsString(print_color_mode_sup, "monochrome"))
-                    keyword = "process-monochrome";
-                }
-
-                ippAddString(request, IPP_TAG_JOB, value_tag, mandatory,
-                             NULL, keyword);
-                break;
-         }
-       }
-      }
-
-      if ((keyword = cupsGetOption("PageSize", num_options, options)) == NULL)
-       keyword = cupsGetOption("media", num_options, options);
-
-      if ((size = _ppdCacheGetSize(pc, keyword)) != NULL)
-      {
-       /*
-        * Add a media-col value...
-       */
-
-       media_size = ippNew();
-       ippAddInteger(media_size, IPP_TAG_ZERO, IPP_TAG_INTEGER,
-                     "x-dimension", size->width);
-       ippAddInteger(media_size, IPP_TAG_ZERO, IPP_TAG_INTEGER,
-                     "y-dimension", size->length);
-
-       media_col = ippNew();
-       ippAddCollection(media_col, IPP_TAG_ZERO, "media-size", media_size);
-
-       media_source = _ppdCacheGetSource(pc, cupsGetOption("InputSlot",
-                                                           num_options,
-                                                           options));
-       media_type   = _ppdCacheGetType(pc, cupsGetOption("MediaType",
-                                                         num_options,
-                                                         options));
-
-       for (i = 0; i < media_col_sup->num_values; i ++)
-       {
-         if (!strcmp(media_col_sup->values[i].string.text,
-                     "media-left-margin"))
-           ippAddInteger(media_col, IPP_TAG_ZERO, IPP_TAG_INTEGER,
-                         "media-left-margin", size->left);
-         else if (!strcmp(media_col_sup->values[i].string.text,
-                          "media-bottom-margin"))
-           ippAddInteger(media_col, IPP_TAG_ZERO, IPP_TAG_INTEGER,
-                         "media-bottom-margin", size->bottom);
-         else if (!strcmp(media_col_sup->values[i].string.text,
-                          "media-right-margin"))
-           ippAddInteger(media_col, IPP_TAG_ZERO, IPP_TAG_INTEGER,
-                         "media-right-margin", size->right);
-         else if (!strcmp(media_col_sup->values[i].string.text,
-                          "media-top-margin"))
-           ippAddInteger(media_col, IPP_TAG_ZERO, IPP_TAG_INTEGER,
-                         "media-top-margin", size->top);
-         else if (!strcmp(media_col_sup->values[i].string.text,
-                          "media-source") && media_source)
-           ippAddString(media_col, IPP_TAG_ZERO, IPP_TAG_KEYWORD,
-                        "media-source", NULL, media_source);
-         else if (!strcmp(media_col_sup->values[i].string.text,
-                          "media-type") && media_type)
-           ippAddString(media_col, IPP_TAG_ZERO, IPP_TAG_KEYWORD,
-                        "media-type", NULL, media_type);
-       }
-
-       ippAddCollection(request, IPP_TAG_JOB, "media-col", media_col);
-      }
-
-      if ((keyword = cupsGetOption("output-bin", num_options,
-                                  options)) == NULL)
-      {
-        if ((choice = ppdFindMarkedChoice(ppd, "OutputBin")) != NULL)
-         keyword = _ppdCacheGetBin(pc, choice->choice);
-      }
-
-      if (keyword)
-       ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "output-bin",
-                    NULL, keyword);
-
-      color_attr_name = print_color_mode_sup ? "print-color-mode" : "output-mode";
-
-      if ((keyword = cupsGetOption("print-color-mode", num_options,
-                                  options)) == NULL)
-      {
-       if ((choice = ppdFindMarkedChoice(ppd, "ColorModel")) != NULL)
-       {
-         if (!_cups_strcasecmp(choice->choice, "Gray"))
-           keyword = "monochrome";
-         else
-           keyword = "color";
-       }
-      }
-
-      if (keyword && !strcmp(keyword, "monochrome"))
-      {
-       if (ippContainsString(print_color_mode_sup, "auto-monochrome"))
-         keyword = "auto-monochrome";
-       else if (ippContainsString(print_color_mode_sup, "process-monochrome") && !ippContainsString(print_color_mode_sup, "monochrome"))
-         keyword = "process-monochrome";
-      }
-
-      if (keyword)
-       ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, color_attr_name,
-                    NULL, keyword);
-
-      if ((keyword = cupsGetOption("print-quality", num_options,
-                                  options)) != NULL)
-       ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_ENUM, "print-quality",
-                     atoi(keyword));
-      else if ((choice = ppdFindMarkedChoice(ppd, "cupsPrintQuality")) != NULL)
-      {
-       if (!_cups_strcasecmp(choice->choice, "draft"))
-         ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_ENUM, "print-quality",
-                       IPP_QUALITY_DRAFT);
-       else if (!_cups_strcasecmp(choice->choice, "normal"))
-         ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_ENUM, "print-quality",
-                       IPP_QUALITY_NORMAL);
-       else if (!_cups_strcasecmp(choice->choice, "high"))
-         ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_ENUM, "print-quality",
-                       IPP_QUALITY_HIGH);
-      }
-
-      if ((keyword = cupsGetOption("sides", num_options, options)) != NULL)
-       ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "sides",
-                    NULL, keyword);
-      else if (pc->sides_option &&
-               (choice = ppdFindMarkedChoice(ppd, pc->sides_option)) != NULL)
-      {
-       if (!_cups_strcasecmp(choice->choice, pc->sides_1sided))
-         ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "sides",
-                      NULL, "one-sided");
-       else if (!_cups_strcasecmp(choice->choice, pc->sides_2sided_long))
-         ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "sides",
-                      NULL, "two-sided-long-edge");
-       if (!_cups_strcasecmp(choice->choice, pc->sides_2sided_short))
-         ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "sides",
-                      NULL, "two-sided-short-edge");
-      }
-
-      if ((keyword = cupsGetOption("multiple-document-handling",
-                                  num_options, options)) != NULL)
-      {
-        if (strstr(keyword, "uncollated"))
-          keyword = "false";
-        else
-          keyword = "true";
-      }
-      else if ((keyword = cupsGetOption("collate", num_options,
-                                        options)) == NULL)
-        keyword = "true";
-
-      if (format)
-      {
-        if (!_cups_strcasecmp(format, "image/gif") ||
-           !_cups_strcasecmp(format, "image/jp2") ||
-           !_cups_strcasecmp(format, "image/jpeg") ||
-           !_cups_strcasecmp(format, "image/png") ||
-           !_cups_strcasecmp(format, "image/tiff") ||
-           !_cups_strncasecmp(format, "image/x-", 8))
-       {
-        /*
-         * Collation makes no sense for single page image formats...
-         */
-
-         keyword = "false";
-       }
-       else if (!_cups_strncasecmp(format, "image/", 6) ||
-                !_cups_strcasecmp(format, "application/vnd.cups-raster"))
-       {
-        /*
-         * Multi-page image formats will have copies applied by the upstream
-         * filters...
-         */
-
-         copies = 1;
-       }
-      }
-
-      if (doc_handling_sup)
-      {
-        if (!_cups_strcasecmp(keyword, "true"))
-         collate_str = "separate-documents-collated-copies";
-       else
-         collate_str = "separate-documents-uncollated-copies";
-
-        for (i = 0; i < doc_handling_sup->num_values; i ++)
-         if (!strcmp(doc_handling_sup->values[i].string.text, collate_str))
-         {
-           ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD,
-                        "multiple-document-handling", NULL, collate_str);
-           break;
-          }
-
-        if (i >= doc_handling_sup->num_values)
-          copies = 1;
-      }
-
-     /*
-      * Map finishing options...
-      */
-
-      num_finishings = _ppdCacheGetFinishingValues(pc, num_options, options,
-                                                   (int)(sizeof(finishings) /
-                                                         sizeof(finishings[0])),
-                                                   finishings);
-      if (num_finishings > 0)
-       ippAddIntegers(request, IPP_TAG_JOB, IPP_TAG_ENUM, "finishings",
-                      num_finishings, finishings);
+      copies = _cupsConvertOptions(request, ppd, pc, media_col_sup, doc_handling_sup, print_color_mode_sup, user, format, copies, num_options, options);
 
      /*
       * Map FaxOut options...
@@ -3222,6 +2914,7 @@ report_printer_state(ipp_t *ipp)  /* I - IPP response */
 {
   ipp_attribute_t      *pa,            /* printer-alert */
                        *pam,           /* printer-alert-message */
+                       *pmja,          /* printer-mandatory-job-attributes */
                        *psm,           /* printer-state-message */
                        *reasons,       /* printer-state-reasons */
                        *marker;        /* marker-* attributes */
@@ -3242,6 +2935,26 @@ report_printer_state(ipp_t *ipp) /* I - IPP response */
                               IPP_TAG_TEXT)) != NULL)
     report_attr(pam);
 
+  if ((pmja = ippFindAttribute(ipp, "printer-mandatory-job-attributes", IPP_TAG_KEYWORD)) != NULL)
+  {
+    int        i,                              /* Looping var */
+       count = ippGetCount(pmja);      /* Number of values */
+
+    for (i = 0, valptr = value; i < count; i ++, valptr += strlen(valptr))
+    {
+      if (i)
+        snprintf(valptr, sizeof(value) - (size_t)(valptr - value), " %s", ippGetString(pmja, i, NULL));
+      else
+        strlcpy(value, ippGetString(pmja, i, NULL), sizeof(value));
+    }
+
+    if (strcmp(value, mandatory_attrs))
+    {
+      strlcpy(mandatory_attrs, value, sizeof(mandatory_attrs));
+      fprintf(stderr, "PPD: cupsMandatory=\"%s\"\n", value);
+    }
+  }
+
   if ((psm = ippFindAttribute(ipp, "printer-state-message",
                               IPP_TAG_TEXT)) != NULL)
   {
@@ -3770,5 +3483,5 @@ update_reasons(ipp_attribute_t *attr,     /* I - printer-state-reasons or NULL */
 }
 
 /*
- * End of "$Id: ipp.c 12759 2015-06-24 20:06:30Z msweet $".
+ * End of "$Id: ipp.c 12676 2015-05-28 01:19:14Z msweet $".
  */
index 93d0ff114fab317c27851b7fca7b069b1a9ca753..38ef28e93a1ffdcf3b42fd249d47f371364159d3 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: snmp-supplies.c 12228 2014-10-21 13:42:05Z msweet $"
+ * "$Id: snmp-supplies.c 12227 2014-10-21 13:42:04Z msweet $"
  *
  * SNMP supplies functions for CUPS.
  *
@@ -1098,5 +1098,5 @@ utf16_to_utf8(
 
 
 /*
- * End of "$Id: snmp-supplies.c 12228 2014-10-21 13:42:05Z msweet $".
+ * End of "$Id: snmp-supplies.c 12227 2014-10-21 13:42:04Z msweet $".
  */
index cc85f885f2e6b4451632102dbb6cfadec304342e..d9dbde3353b3af973683462b7a9aeeadb2ac1e58 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: usb-darwin.c 12529 2015-02-23 18:57:57Z msweet $"
+ * "$Id: usb-darwin.c 12672 2015-05-28 00:10:27Z msweet $"
  *
  * Copyright 2005-2014 Apple Inc. All rights reserved.
  *
@@ -302,8 +302,8 @@ static void parse_pserror (char *sockBuffer, int len);
 
 static IOUSBInterfaceInterface220 **usb_interface220_for_service(io_service_t usbClass);
 static IOUSBDeviceInterface **usb_device_interface_for_device(io_service_t usbDevice);
-static CFStringRef printer_interface_deviceid(IOUSBInterfaceInterface220 **printer, UInt8 alternateSetting);
-static CFStringRef printer_interface_indexed_description(IOUSBInterfaceInterface220 ** printer, UInt8 index, UInt16 language);
+static CFStringRef copy_printer_interface_deviceid(IOUSBInterfaceInterface220 **printer, UInt8 alternateSetting);
+static CFStringRef copy_printer_interface_indexed_description(IOUSBInterfaceInterface220 ** printer, UInt8 index, UInt16 language);
 static CFStringRef deviceIDCopyManufacturer(CFStringRef deviceID);
 static CFStringRef deviceIDCopyModel(CFStringRef deviceID);
 static CFStringRef deviceIDCopySerialNumber(CFStringRef deviceID);
@@ -1099,17 +1099,17 @@ sidechannel_thread(void *reference)
 static void iterate_printers(iterator_callback_t callBack, void *userdata)
 {
     Iterating = 1;
-    
+
     mach_port_t        masterPort = 0x0;
     kern_return_t kr = IOMasterPort (bootstrap_port, &masterPort);
-    
+
     if (kr == kIOReturnSuccess && masterPort != 0x0)
     {
         iterator_reference_t reference = { callBack, userdata, true };
-        
+
         IONotificationPortRef addNotification = IONotificationPortCreate(masterPort);
         io_iterator_t addIterator = IO_OBJECT_NULL;
-        
+
         kr = IOServiceAddMatchingNotification(addNotification, kIOFirstMatchNotification, IOServiceMatching(kIOUSBDeviceClassName),
                                               &device_added, &reference, &addIterator);
         if (kr == kIOReturnSuccess && addIterator != IO_OBJECT_NULL)
@@ -1124,7 +1124,7 @@ static void iterate_printers(iterator_callback_t callBack, void *userdata)
         }
         mach_port_deallocate(mach_task_self(), masterPort);
     }
-    
+
     Iterating = 0;
 }
 
@@ -1138,7 +1138,7 @@ static void device_added(void *userdata, io_iterator_t iterator)
 {
     iterator_reference_t *reference = userdata;
     io_service_t device;
-    
+
     while (reference->keepRunning && (device = IOIteratorNext(iterator)) != 0x0)
     {
         UInt32 locationID = 0;
@@ -1175,7 +1175,7 @@ static void device_added(void *userdata, io_iterator_t iterator)
 
                 if (IsPrintingInterface(intfClass, intfSubclass, intfProtocol))
                 {
-                    CFStringRef deviceIDString = printer_interface_deviceid(intf220, 0);
+                    CFStringRef deviceIDString = copy_printer_interface_deviceid(intf220, 0);
                     if (deviceIDString != NULL)
                     {
                         reference->keepRunning = reference->callback(userdata, intf, deviceIDString, locationID, intfNumber, 0);
@@ -1183,7 +1183,7 @@ static void device_added(void *userdata, io_iterator_t iterator)
                     }
                 }
 
-                IOUSBInterfaceDescriptor *intfDesc = nil;
+                IOUSBInterfaceDescriptor *intfDesc = NULL;
                 while (reference->keepRunning && (intfDesc = (IOUSBInterfaceDescriptor *)(*intf220)->FindNextAssociatedDescriptor(intf220, intfDesc, kUSBInterfaceDesc)))
                 {
                     intfClass = intfDesc->bInterfaceClass;
@@ -1192,7 +1192,7 @@ static void device_added(void *userdata, io_iterator_t iterator)
 
                     if ((IsPrintingInterface(intfClass, intfSubclass, intfProtocol)))
                     {
-                        CFStringRef deviceIDString = printer_interface_deviceid(intf220, intfDesc->bAlternateSetting);
+                        CFStringRef deviceIDString = copy_printer_interface_deviceid(intf220, intfDesc->bAlternateSetting);
                         if (deviceIDString != NULL)
                         {
                             reference->keepRunning = reference->callback(userdata, intf, deviceIDString, locationID, intfNumber, intfDesc->bAlternateSetting);
@@ -1202,6 +1202,7 @@ static void device_added(void *userdata, io_iterator_t iterator)
                 }
                 (*intf220)->Release(intf220);
             }
+            IOObjectRelease(intf);
         }
 
         device_added_done:
@@ -1210,12 +1211,12 @@ static void device_added(void *userdata, io_iterator_t iterator)
 
         IOObjectRelease(device);
     }
-    
+
     /* One last call to the call back now that we are not longer have printers left to iterate...
      */
     if (reference->keepRunning && reference->callback)
         reference->keepRunning = reference->callback(reference->userdata, IO_OBJECT_NULL, NULL, 0, 0, 0);
-    
+
     if (!reference->keepRunning)
         CFRunLoopStop(CFRunLoopGetCurrent());
 }
@@ -1226,42 +1227,47 @@ static void device_added(void *userdata, io_iterator_t iterator)
 
 static Boolean list_device_cb(void *refcon, io_service_t obj, CFStringRef deviceIDString, UInt32 deviceLocation, UInt8 interfaceNum, UInt8 alternateSetting)
 {
+    (void)refcon;
     (void)interfaceNum;
     (void)alternateSetting;
 
     if (obj != IO_OBJECT_NULL)
     {
-        CFStringRef make = NULL;
-        CFStringRef model = NULL;
-        CFStringRef serial = NULL;
-        
+        CFStringRef make = deviceIDCopyManufacturer(deviceIDString);
+        CFStringRef model = deviceIDCopyModel(deviceIDString);
+        CFStringRef serial = deviceIDCopySerialNumber(deviceIDString);
+
         char uristr[1024], makestr[1024], modelstr[1024], serialstr[1024];
         char optionsstr[1024], idstr[1024], make_modelstr[1024];
-        
+
         CFStringGetCString(deviceIDString, idstr, sizeof(idstr), kCFStringEncodingUTF8);
         backendGetMakeModel(idstr, make_modelstr, sizeof(make_modelstr));
-        
+
         modelstr[0] = '/';
-        
+
         if (make  == NULL || !CFStringGetCString(make, makestr, sizeof(makestr), kCFStringEncodingUTF8))
             strlcpy(makestr, "Unknown", sizeof(makestr));
-        
+
         if (model == NULL || !CFStringGetCString(model, &modelstr[1], sizeof(modelstr)-1, kCFStringEncodingUTF8))
             strlcpy(modelstr + 1, "Printer", sizeof(modelstr) - 1);
-        
+
         optionsstr[0] = '\0';
         if (serial != NULL && CFStringGetCString(serial, serialstr, sizeof(serialstr), kCFStringEncodingUTF8))
             snprintf(optionsstr, sizeof(optionsstr), "?serial=%s", serialstr);
         else if (deviceLocation != 0)
             snprintf(optionsstr, sizeof(optionsstr), "?location=%x", (unsigned)deviceLocation);
-        
+
         httpAssembleURI(HTTP_URI_CODING_ALL, uristr, sizeof(uristr), "usb", NULL, makestr, 0, modelstr);
         strlcat(uristr, optionsstr, sizeof(uristr));
-        
+
         cupsBackendReport("direct", uristr, make_modelstr, make_modelstr, idstr,
                           NULL);
-    }
     
+        if (make != NULL) CFRelease(make);
+        if (model != NULL) CFRelease(model);
+        if (serial != NULL) CFRelease(serial);
+    }
+
     return obj != IO_OBJECT_NULL;
 }
 
@@ -1271,13 +1277,13 @@ static Boolean list_device_cb(void *refcon, io_service_t obj, CFStringRef device
 static Boolean find_device_cb(void *refcon, io_service_t obj, CFStringRef deviceIDString, UInt32 deviceLocation, UInt8 interfaceNum, UInt8 alternateSetting)
 {
     Boolean keepLooking = true;
-    
+
     if (obj != IO_OBJECT_NULL)
     {
         CFStringRef make = deviceIDCopyManufacturer(deviceIDString);
         CFStringRef model = deviceIDCopyModel(deviceIDString);
         CFStringRef serial = deviceIDCopySerialNumber(deviceIDString);
-        
+
         if (make && CFStringCompare(make, g.make, kCFCompareCaseInsensitive) == kCFCompareEqualTo)
         {
             if (model && CFStringCompare(model, g.model, kCFCompareCaseInsensitive) == kCFCompareEqualTo)
@@ -1288,6 +1294,7 @@ static Boolean find_device_cb(void *refcon, io_service_t obj, CFStringRef device
                     {
                         IOObjectRetain(obj);
                         g.printer_obj = obj;
+                        g.location = deviceLocation;
                         g.alternateSetting = alternateSetting;
                         keepLooking = false;
                     }
@@ -1296,20 +1303,20 @@ static Boolean find_device_cb(void *refcon, io_service_t obj, CFStringRef device
                 {
                     if (g.printer_obj != 0)
                         IOObjectRelease(g.printer_obj);
-                    
+
                     g.alternateSetting = alternateSetting;
                     g.printer_obj = obj;
                     IOObjectRetain(obj);
-                    
+
                     if (g.location == 0 || g.location == deviceLocation)
                         keepLooking = false;
                 }
-                
+
                 if ( !keepLooking )
                     g.interfaceNum = interfaceNum;
             }
         }
-        
+
         if (make) CFRelease(make);
         if (model) CFRelease(model);
         if (serial) CFRelease(serial);
@@ -1328,7 +1335,7 @@ static Boolean find_device_cb(void *refcon, io_service_t obj, CFStringRef device
             }
         }
     }
-    
+
     if (!keepLooking && g.status_timer != NULL)
     {
         fputs("STATE: -offline-report\n", stderr);
@@ -1337,14 +1344,14 @@ static Boolean find_device_cb(void *refcon, io_service_t obj, CFStringRef device
         CFRelease(g.status_timer);
         g.status_timer = NULL;
     }
-    
+
     return keepLooking;
 }
 
 static CFStringRef deviceIDCopySerialNumber(CFStringRef deviceID)
 {
     CFStringRef serialKeys[] = { CFSTR("SN:"),  CFSTR("SERN:"), NULL };
-    
+
     return copy_value_for_key(deviceID, serialKeys);
 }
 
@@ -1554,7 +1561,7 @@ static IOUSBDeviceInterface **usb_device_interface_for_device(io_service_t usbDe
 }
 
 
-static CFStringRef printer_interface_deviceid(IOUSBInterfaceInterface220 **printer, UInt8 alternateSetting)
+static CFStringRef copy_printer_interface_deviceid(IOUSBInterfaceInterface220 **printer, UInt8 alternateSetting)
 {
        // I have tried to make this function as neat as I can, but the possibility of needing to resend
        // a request to get the entire string makes it hideous...
@@ -1568,8 +1575,8 @@ static CFStringRef printer_interface_deviceid(IOUSBInterfaceInterface220 **print
        #define kDefaultNoDataTimeout               5000L
        #define pack_device_id_wIndex(intf, alt)  ((UInt16)((((UInt16)(intf)) << 8) | ((UInt8)(alt))))
 
-       if (printer == nil)
-                       return nil;
+       if (printer == NULL)
+                       return NULL;
 
 
        IOReturn err        = kIOReturnError;
@@ -1591,15 +1598,15 @@ static CFStringRef printer_interface_deviceid(IOUSBInterfaceInterface220 **print
                                request.pData = NULL;
                        }
 
-                       IOReturn err = kIOReturnError;
+                       IOReturn berr = kIOReturnError;
                        char *buffer = malloc(size);
                        if (buffer == NULL)
                                return kIOReturnNoMemory;
 
                        request.wLength = HostToUSBWord(size);
                        request.pData = buffer;
-                       err = (*printer)->ControlRequestTO(printer, (UInt8)0, &request);
-                       return err;
+                       berr = (*printer)->ControlRequestTO(printer, (UInt8)0, &request);
+                       return berr;
                };
 
                /* This request takes the 0 based configuration index. IOKit returns a 1 based configuration index */
@@ -1639,7 +1646,7 @@ static CFStringRef printer_interface_deviceid(IOUSBInterfaceInterface220 **print
        }
 
        CFStringRef manufacturer = deviceIDCopyManufacturer(ret);
-       CFStringRef model = deviceIDCopyManufacturer(ret);
+       CFStringRef model = deviceIDCopyModel(ret);
        CFStringRef serial = deviceIDCopySerialNumber(ret);
 
        if (manufacturer == NULL || serial == NULL || model == NULL)
@@ -1664,22 +1671,22 @@ static CFStringRef printer_interface_deviceid(IOUSBInterfaceInterface220 **print
                        CFMutableStringRef extras = CFStringCreateMutable(NULL, 0);
                        if (manufacturer == NULL)
                        {
-                               manufacturer = printer_interface_indexed_description(printer, desc.iManufacturer, kUSBLanguageEnglish);
-                               if (CFStringGetLength(manufacturer) > 0)
+                               manufacturer = copy_printer_interface_indexed_description(printer, desc.iManufacturer, kUSBLanguageEnglish);
+                               if (manufacturer && CFStringGetLength(manufacturer) > 0)
                                        CFStringAppendFormat(extras, NULL, CFSTR("MFG:%@;"), manufacturer);
                        }
 
                        if (model == NULL)
                        {
-                               model = printer_interface_indexed_description(printer, desc.iProduct, kUSBLanguageEnglish);
-                               if (CFStringGetLength(model) > 0)
-                                       CFStringAppendFormat(extras, NULL, CFSTR("MDL:%@;"), manufacturer);
+                               model = copy_printer_interface_indexed_description(printer, desc.iProduct, kUSBLanguageEnglish);
+                               if (model && CFStringGetLength(model) > 0)
+                                       CFStringAppendFormat(extras, NULL, CFSTR("MDL:%@;"), model);
                        }
 
                        if (serial == NULL && desc.iSerialNumber != 0)
                        {
-                               serial = printer_interface_indexed_description(printer, desc.iSerialNumber, kUSBLanguageEnglish);
-                               if (CFStringGetLength(serial) > 0)
+                               serial = copy_printer_interface_indexed_description(printer, desc.iSerialNumber, kUSBLanguageEnglish);
+                               if (serial && CFStringGetLength(serial) > 0)
                                        CFStringAppendFormat(extras, NULL, CFSTR("SERN:%@;"), serial);
                        }
 
@@ -1697,14 +1704,8 @@ static CFStringRef printer_interface_deviceid(IOUSBInterfaceInterface220 **print
                }
        }
 
-       if (manufacturer != NULL)
-               CFRelease(manufacturer);
-       if (model != NULL)
-               CFRelease(model);
-       if (serial != NULL)
-               CFRelease(serial);
-
-
+       if (ret != NULL)
+       {
        /* Remove special characters from the serial number */
        CFRange range = (serial != NULL ? CFStringFind(serial, CFSTR("+"), 0) : CFRangeMake(0, 0));
        if (range.length == 1)
@@ -1717,11 +1718,27 @@ static CFStringRef printer_interface_deviceid(IOUSBInterfaceInterface220 **print
                ret = deviceIDString;
                CFStringFindAndReplace(deviceIDString, CFSTR("+"), CFSTR(""), range, 0);
        }
+       }
+
+       if (manufacturer != NULL)
+               CFRelease(manufacturer);
+  
+       if (model != NULL)
+               CFRelease(model);
+  
+       if (serial != NULL)
+               CFRelease(serial);
 
-       return (CFStringGetLength(ret) > 0 ? ret : nil);
+       if (ret != NULL && CFStringGetLength(ret) == 0)
+       {
+               CFRelease(ret);
+               return NULL;
+       }
+       
+       return ret;
 }
 
-static CFStringRef printer_interface_indexed_description(IOUSBInterfaceInterface220 ** printer, UInt8 index, UInt16 language)
+static CFStringRef copy_printer_interface_indexed_description(IOUSBInterfaceInterface220 ** printer, UInt8 index, UInt16 language)
 {
        IOReturn err;
        UInt8 description[256]; // Max possible descriptor length
@@ -1759,7 +1776,7 @@ static CFStringRef printer_interface_indexed_description(IOUSBInterfaceInterface
 
                err = (*printer)->ControlRequestTO(printer, 0, &request);
                if (err != kIOReturnSuccess && err != kIOReturnUnderrun)
-                       return nil;
+                       return NULL;
        }
 
        unsigned int length = description[0];
@@ -1775,17 +1792,17 @@ static CFStringRef printer_interface_indexed_description(IOUSBInterfaceInterface
        request.wIndex = language;
 
        bzero(description, length);
-       request.wLength = length;
+       request.wLength = (UInt16)length;
        request.pData = &description;
        request.completionTimeout = 0;
        request.noDataTimeout = 60L;
 
        err = (*printer)->ControlRequestTO(printer, 0, &request);
        if (err != kIOReturnSuccess)
-               return nil;
+               return NULL;
 
        if (description[1] != kUSBStringDesc)
-               return nil;
+               return NULL;
 
        if ((description[0] & 1) != 0)
                description[0] &= 0xfe;
@@ -1799,7 +1816,7 @@ static CFStringRef printer_interface_indexed_description(IOUSBInterfaceInterface
                if (length > maxLength - 1)
                        length = maxLength -1;
 
-               for (int i = 0; i < length; i++)
+               for (unsigned i = 0; i < length; i++)
                        buffer[i] = (char) description[2*i+2];
 
                buffer[length] = 0;
@@ -2446,7 +2463,7 @@ static void get_device_id(cups_sc_status_t *status,
     IOUSBInterfaceInterface220 **intf220 = usb_interface220_for_service(g.printer_obj);
     if (intf220)
     {
-      deviceIDString = printer_interface_deviceid(intf220, g.alternateSetting);
+      deviceIDString = copy_printer_interface_deviceid(intf220, g.alternateSetting);
       (*intf220)->Release(intf220);
     }
   }
@@ -2458,7 +2475,7 @@ static void get_device_id(cups_sc_status_t *status,
       *datalen = (int)strlen(data);
     else
       *datalen = 0;
-    
+
     CFRelease(deviceIDString);
   }
   else
@@ -2497,5 +2514,5 @@ log_usb_class_driver(int is_64bit)        /* I - Is the USB class driver 64-bit? */
 
 
 /*
- * End of "$Id: usb-darwin.c 12529 2015-02-23 18:57:57Z msweet $".
+ * End of "$Id: usb-darwin.c 12672 2015-05-28 00:10:27Z msweet $".
  */
index bab2bc5885046cd3e045ee12f1931d1630e470ac..4d13a2a9334d850d34ee68d59ef4412cb7843bc5 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: usb-libusb.c 12349 2014-12-09 22:10:52Z msweet $"
+ * "$Id: usb-libusb.c 12348 2014-12-09 22:10:45Z msweet $"
  *
  * LIBUSB interface code for CUPS.
  *
@@ -2004,6 +2004,6 @@ soft_reset_printer(
 
 
 /*
- * End of "$Id: usb-libusb.c 12349 2014-12-09 22:10:52Z msweet $".
+ * End of "$Id: usb-libusb.c 12348 2014-12-09 22:10:45Z msweet $".
  */
 
index 342a8a53df1d1bac5f2e745a4df8d18a6898fa07..898fb7bf5098621418cab70a53d7caf15a6c8b3a 100644 (file)
@@ -1,5 +1,5 @@
 #
-# "$Id: Makefile 11777 2014-03-28 19:18:10Z msweet $"
+# "$Id: Makefile 12519 2015-02-17 13:10:19Z msweet $"
 #
 # CGI makefile for CUPS.
 #
@@ -353,5 +353,5 @@ include Dependencies
 
 
 #
-# End of "$Id: Makefile 11777 2014-03-28 19:18:10Z msweet $".
+# End of "$Id: Makefile 12519 2015-02-17 13:10:19Z msweet $".
 #
index 9de2424c3c752f2a93f454fdbc81235101e1a0c7..29ae5c8daa48a0c723934f49e5437ad34ae3a582 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: admin.c 12123 2014-08-28 14:24:45Z msweet $"
+ * "$Id: admin.c 12516 2015-02-12 20:18:11Z msweet $"
  *
  * Administration CGI for CUPS.
  *
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2015 by Apple Inc.
  * Copyright 1997-2007 by Easy Software Products.
  *
  * These coded instructions, statements, and computer programs are the
@@ -18,6 +18,8 @@
  */
 
 #include "cgi-private.h"
+#include <cups/http-private.h>
+#include <cups/ppd-private.h>
 #include <cups/adminutil.h>
 #include <cups/ppd.h>
 #include <errno.h>
@@ -38,12 +40,7 @@ static int   current_device = 0;     /* Current device shown */
  * Local functions...
  */
 
-static void    choose_device_cb(const char *device_class,
-                                 const char *device_id, const char *device_info,
-                                 const char *device_make_and_model,
-                                 const char *device_uri,
-                                 const char *device_location,
-                                const char *title);
+static void    choose_device_cb(const char *device_class, const char *device_id, const char *device_info, const char *device_make_and_model, const char *device_uri, const char *device_location, const char *title);
 static void    do_add_rss_subscription(http_t *http);
 static void    do_am_class(http_t *http, int modify);
 static void    do_am_printer(http_t *http, int modify);
@@ -61,6 +58,7 @@ static void   do_set_sharing(http_t *http);
 static char    *get_option_value(ppd_file_t *ppd, const char *name,
                                  char *buffer, size_t bufsize);
 static double  get_points(double number, const char *uval);
+static char    *get_printer_ppd(const char *uri, char *buffer, size_t bufsize);
 
 
 /*
@@ -832,7 +830,8 @@ do_am_printer(http_t *http,         /* I - HTTP connection */
   const cgi_file_t *file;              /* Uploaded file, if any */
   const char   *var;                   /* CGI variable */
   char         uri[HTTP_MAX_URI],      /* Device or printer URI */
-               *uriptr;                /* Pointer into URI */
+               *uriptr,                /* Pointer into URI */
+               evefile[1024] = "";     /* IPP Everywhere PPD file */
   int          maxrate;                /* Maximum baud rate */
   char         baudrate[255];          /* Baud rate string */
   const char   *name,                  /* Pointer to class name */
@@ -1331,7 +1330,9 @@ do_am_printer(http_t *http,               /* I - HTTP connection */
     if (!file)
     {
       var = cgiGetVariable("PPD_NAME");
-      if (strcmp(var, "__no_change__"))
+      if (!strcmp(var, "everywhere"))
+        get_printer_ppd(cgiGetVariable("DEVICE_URI"), evefile, sizeof(evefile));
+      else if (strcmp(var, "__no_change__"))
        ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "ppd-name",
                     NULL, var);
     }
@@ -1384,6 +1385,11 @@ do_am_printer(http_t *http,              /* I - HTTP connection */
 
     if (file)
       ippDelete(cupsDoFileRequest(http, request, "/admin/", file->tempfile));
+    else if (evefile[0])
+    {
+      ippDelete(cupsDoFileRequest(http, request, "/admin/", evefile));
+      unlink(evefile);
+    }
     else
       ippDelete(cupsDoRequest(http, request, "/admin/"));
 
@@ -4198,5 +4204,78 @@ get_points(double     number,            /* I - Original number */
 
 
 /*
- * End of "$Id: admin.c 12123 2014-08-28 14:24:45Z msweet $".
+ * 'get_printer_ppd()' - Get an IPP Everywhere PPD file for the given URI.
+ */
+
+static char *                          /* O - Filename or NULL */
+get_printer_ppd(const char *uri,       /* I - Printer URI */
+                char       *buffer,    /* I - Filename buffer */
+               size_t     bufsize)     /* I - Size of filename buffer */
+{
+  http_t       *http;                  /* Connection to printer */
+  ipp_t                *request,               /* Get-Printer-Attributes request */
+               *response;              /* Get-Printer-Attributes response */
+  char         resolved[1024],         /* Resolved URI */
+               scheme[32],             /* URI scheme */
+               userpass[256],          /* Username:password */
+               host[256],              /* Hostname */
+               resource[256];          /* Resource path */
+  int          port;                   /* Port number */
+
+
+ /*
+  * Connect to the printer...
+  */
+
+  if (strstr(uri, "._tcp"))
+  {
+   /*
+    * Resolve URI...
+    */
+
+    if (!_httpResolveURI(uri, resolved, sizeof(resolved), _HTTP_RESOLVE_DEFAULT, NULL, NULL))
+    {
+      fprintf(stderr, "ERROR: Unable to resolve \"%s\".\n", uri);
+      return (NULL);
+    }
+
+    uri = resolved;
+  }
+
+  if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK)
+  {
+    fprintf(stderr, "ERROR: Bad printer URI \"%s\".\n", uri);
+    return (NULL);
+  }
+
+  http = httpConnect2(host, port, NULL, AF_UNSPEC, !strcmp(scheme, "ipps") ? HTTP_ENCRYPTION_ALWAYS : HTTP_ENCRYPTION_IF_REQUESTED, 1, 30000, NULL);
+  if (!http)
+  {
+    fprintf(stderr, "ERROR: Unable to connect to \"%s:%d\": %s\n", host, port, cupsLastErrorString());
+    return (NULL);
+  }
+
+ /*
+  * Send a Get-Printer-Attributes request...
+  */
+
+  request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
+  ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
+  response = cupsDoRequest(http, request, resource);
+
+  if (!_ppdCreateFromIPP(buffer, bufsize, response))
+    fprintf(stderr, "ERROR: Unable to create PPD file: %s\n", strerror(errno));
+
+  ippDelete(response);
+  httpClose(http);
+
+  if (buffer[0])
+    return (buffer);
+  else
+    return (NULL);
+}
+
+
+/*
+ * End of "$Id: admin.c 12516 2015-02-12 20:18:11Z msweet $".
  */
index cda5e966c7747ae46aa8659e545cc31ec57a5eda..d467cb6b030da0af8d875fdd6fda832f23e0fdc4 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: help-index.c 12344 2014-12-09 21:36:11Z msweet $"
+ * "$Id: help-index.c 12644 2015-05-19 21:22:35Z msweet $"
  *
  * Online help index routines for CUPS.
  *
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2015 by Apple Inc.
  * Copyright 1997-2007 by Easy Software Products.
  *
  * These coded instructions, statements, and computer programs are the
@@ -1220,7 +1220,7 @@ help_new_node(const char   *filename,     /* I - Filename */
 
   n->filename = strdup(filename);
   n->anchor   = anchor ? strdup(anchor) : NULL;
-  n->section  = (section && *section) ? strdup(section) : NULL;
+  n->section  = *section ? strdup(section) : NULL;
   n->text     = strdup(text);
   n->mtime    = mtime;
   n->offset   = offset;
@@ -1306,5 +1306,5 @@ help_sort_words(help_word_t *w1,  /* I - Second word */
 
 
 /*
- * End of "$Id: help-index.c 12344 2014-12-09 21:36:11Z msweet $".
+ * End of "$Id: help-index.c 12644 2015-05-19 21:22:35Z msweet $".
  */
index 98300537c48e7f017aae14c4d4158f9ff75a8e78..f99ee41d8014328292d3ef0da9d13c00aca08ff7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: ipp-var.c 12769 2015-06-30 16:13:48Z msweet $"
+ * "$Id: ipp-var.c 12700 2015-06-08 18:32:35Z msweet $"
  *
  * CGI <-> IPP variable routines for CUPS.
  *
@@ -222,9 +222,6 @@ cgiGetIPPObjects(ipp_t *response,   /* I - IPP response */
              break;
 
           case IPP_TAG_INTEGER :
-             if (!strncmp(ippGetName(attr), "time-at-", 8))
-               break;                  /* Ignore time-at-xxx */
-
              for (i = 0; !add && i < attr->num_values; i ++)
              {
                char    buf[255];       /* Number buffer */
@@ -1550,5 +1547,5 @@ cgiText(const char *message)              /* I - Message */
 
 
 /*
- * End of "$Id: ipp-var.c 12769 2015-06-30 16:13:48Z msweet $".
+ * End of "$Id: ipp-var.c 12700 2015-06-08 18:32:35Z msweet $".
  */
index fefc489ff97eb695ba4118a7032e8d28b41c342c..426e635e6ea34e19c396b01fdcab2b6c77c0e600 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: template.c 12701 2015-06-08 18:33:44Z msweet $"
+ * "$Id: template.c 12700 2015-06-08 18:32:35Z msweet $"
  *
  * CGI template function.
  *
@@ -686,5 +686,5 @@ cgi_puturi(const char *s,           /* I - String to output */
 
 
 /*
- * End of "$Id: template.c 12701 2015-06-08 18:33:44Z msweet $".
+ * End of "$Id: template.c 12700 2015-06-08 18:32:35Z msweet $".
  */
index dc06cbc4c59ec7a140c8ee9d484522bb09968f02..017de1eeb38c24e707069b68002098afc0db9242 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: var.c 12034 2014-07-16 19:37:34Z msweet $"
+ * "$Id: var.c 12621 2015-05-06 21:32:18Z msweet $"
  *
  * CGI form variable and array functions for CUPS.
  *
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2015 by Apple Inc.
  * Copyright 1997-2005 by Easy Software Products.
  *
  * These coded instructions, statements, and computer programs are the
@@ -626,6 +626,8 @@ cgi_initialize_cookies(void)
 
   while (*cookie)
   {
+    int        skip = 0;                       /* Skip this cookie? */
+
    /*
     * Skip leading whitespace...
     */
@@ -641,9 +643,14 @@ cgi_initialize_cookies(void)
 
     for (ptr = name; *cookie && *cookie != '=';)
       if (ptr < (name + sizeof(name) - 1))
+      {
         *ptr++ = *cookie++;
+      }
       else
-        break;
+      {
+        skip = 1;
+       cookie ++;
+      }
 
     if (*cookie != '=')
       break;
@@ -659,26 +666,38 @@ cgi_initialize_cookies(void)
     {
       for (cookie ++, ptr = value; *cookie && *cookie != '\"';)
         if (ptr < (value + sizeof(value) - 1))
+       {
          *ptr++ = *cookie++;
+       }
        else
-         break;
+       {
+         skip = 1;
+         cookie ++;
+       }
 
       if (*cookie == '\"')
         cookie ++;
+      else
+        skip = 1;
     }
     else
     {
       for (ptr = value; *cookie && *cookie != ';';)
         if (ptr < (value + sizeof(value) - 1))
+       {
          *ptr++ = *cookie++;
+       }
        else
-         break;
+       {
+         skip = 1;
+         cookie ++;
+       }
     }
 
     if (*cookie == ';')
       cookie ++;
     else if (*cookie)
-      break;
+      skip = 1;
 
     *ptr = '\0';
 
@@ -687,7 +706,7 @@ cgi_initialize_cookies(void)
     * "$"...
     */
 
-    if (name[0] != '$')
+    if (name[0] != '$' && !skip)
       num_cookies = cupsAddOption(name, value, num_cookies, &cookies);
   }
 }
@@ -1278,5 +1297,5 @@ cgi_unlink_file(void)
 
 
 /*
- * End of "$Id: var.c 12034 2014-07-16 19:37:34Z msweet $".
+ * End of "$Id: var.c 12621 2015-05-06 21:32:18Z msweet $".
  */
index f4d63f8d4cbe2ac01c868d0516800c1a4a89c396..933d7d909dbd66489109a5c2a3be2fd17c4b487b 100644 (file)
@@ -1,9 +1,9 @@
 #
-# "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $"
+# "$Id: Makefile 12533 2015-02-27 12:30:26Z msweet $"
 #
 #   Configuration file makefile for CUPS.
 #
-#   Copyright 2007-2012 by Apple Inc.
+#   Copyright 2007-2015 by Apple Inc.
 #   Copyright 1993-2006 by Easy Software Products.
 #
 #   These coded instructions, statements, and computer programs are the
@@ -76,8 +76,8 @@ install-data:
                else \
                        $(INSTALL_CONFIG) -g $(CUPS_GROUP) $$file $(SERVERROOT) ; \
                fi ; \
+               $(INSTALL_CONFIG) -g $(CUPS_GROUP) $$file $(SERVERROOT)/$$file.default; \
        done
-       $(INSTALL_CONFIG) -g $(CUPS_GROUP) cupsd.conf $(SERVERROOT)/cupsd.conf.default
        $(INSTALL_DIR) -m 755 $(DATADIR)/mime
        for file in $(REPLACE); do \
                if test -r $(DATADIR)/mime/$$file ; then \
@@ -139,5 +139,5 @@ uninstall:
 
 
 #
-# End of "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $".
+# End of "$Id: Makefile 12533 2015-02-27 12:30:26Z msweet $".
 #
index 929267da6705aa16cd94ca6fe095735388a8e4cf..f1a9263c222b7803384b33061fafa820dc8beef8 100644 (file)
@@ -1,5 +1,5 @@
 dnl
-dnl "$Id: cups-common.m4 12336 2014-12-09 21:19:52Z msweet $"
+dnl "$Id: cups-common.m4 12697 2015-06-08 17:42:16Z msweet $"
 dnl
 dnl Common configuration stuff for CUPS.
 dnl
@@ -20,7 +20,7 @@ dnl Set the name of the config header file...
 AC_CONFIG_HEADER(config.h)
 
 dnl Version number information...
-CUPS_VERSION=2.0.4
+CUPS_VERSION=2.1b1
 CUPS_REVISION=
 #if test -z "$CUPS_REVISION" -a -d .svn; then
 #      CUPS_REVISION="-r`svnversion . | awk -F: '{print $NF}' | sed -e '1,$s/[[a-zA-Z]]*//g'`"
@@ -137,6 +137,7 @@ AC_CHECK_HEADER(bstring.h,AC_DEFINE(HAVE_BSTRING_H))
 AC_CHECK_HEADER(sys/ioctl.h,AC_DEFINE(HAVE_SYS_IOCTL_H))
 AC_CHECK_HEADER(sys/param.h,AC_DEFINE(HAVE_SYS_PARAM_H))
 AC_CHECK_HEADER(sys/ucred.h,AC_DEFINE(HAVE_SYS_UCRED_H))
+AC_CHECK_HEADER(asl.h,AC_DEFINE(HAVE_ASL_H))
 
 dnl Checks for iconv.h and iconv_open
 AC_CHECK_HEADER(iconv.h,
@@ -465,5 +466,5 @@ esac
 AC_SUBST(BUILDDIRS)
 
 dnl
-dnl End of "$Id: cups-common.m4 12336 2014-12-09 21:19:52Z msweet $".
+dnl End of "$Id: cups-common.m4 12697 2015-06-08 17:42:16Z msweet $".
 dnl
index aa18e9525a1cc1c32fcbac843e9a75c4969ba0cc..ca3bae8e07001bf3e89dcd77cea5b890aef6dfc9 100644 (file)
@@ -1,5 +1,5 @@
 dnl
-dnl "$Id: cups-compiler.m4 12743 2015-06-23 14:49:09Z msweet $"
+dnl "$Id: cups-compiler.m4 12122 2014-08-28 12:55:52Z msweet $"
 dnl
 dnl Compiler stuff for CUPS.
 dnl
@@ -156,15 +156,6 @@ if test -n "$GCC"; then
                # Add useful warning options for tracking down problems...
                OPTIM="-Wall -Wno-format-y2k -Wunused $OPTIM"
 
-               AC_MSG_CHECKING(whether compiler supports -Wno-unused-result)
-               OLDCFLAGS="$CFLAGS"
-               CFLAGS="$CFLAGS -Werror -Wno-unused-result"
-               AC_TRY_COMPILE(,,
-                       [OPTIM="$OPTIM -Wno-unused-result"
-                       AC_MSG_RESULT(yes)],
-                       AC_MSG_RESULT(no))
-               CFLAGS="$OLDCFLAGS"
-
                AC_MSG_CHECKING(whether compiler supports -Wsign-conversion)
                OLDCFLAGS="$CFLAGS"
                CFLAGS="$CFLAGS -Werror -Wsign-conversion"
@@ -246,5 +237,5 @@ case $uname in
 esac
 
 dnl
-dnl End of "$Id: cups-compiler.m4 12743 2015-06-23 14:49:09Z msweet $".
+dnl End of "$Id: cups-compiler.m4 12122 2014-08-28 12:55:52Z msweet $".
 dnl
index cf268ded2842cac7cd44db9a0b6388be7df8a390..3db1e912124ccfccc1a732323a8802bf20785e38 100644 (file)
@@ -1,9 +1,9 @@
 dnl
-dnl "$Id: cups-defaults.m4 11789 2014-04-02 16:52:53Z msweet $"
+dnl "$Id: cups-defaults.m4 12350 2014-12-09 22:18:21Z msweet $"
 dnl
 dnl   Default cupsd configuration settings for CUPS.
 dnl
-dnl   Copyright 2007-2012 by Apple Inc.
+dnl   Copyright 2007-2014 by Apple Inc.
 dnl   Copyright 2006-2007 by Easy Software Products, all rights reserved.
 dnl
 dnl   These coded instructions, statements, and computer programs are the
@@ -409,5 +409,5 @@ AC_SUBST(CUPS_WEBIF)
 AC_DEFINE_UNQUOTED(CUPS_DEFAULT_WEBIF, $CUPS_DEFAULT_WEBIF)
 
 dnl
-dnl End of "$Id: cups-defaults.m4 11789 2014-04-02 16:52:53Z msweet $".
+dnl End of "$Id: cups-defaults.m4 12350 2014-12-09 22:18:21Z msweet $".
 dnl
index a2df1d53b0caa2c7cf3da38a7cd4ad3c5838500b..e5b3405cc0049b1b6461089bd6c018e050140972 100644 (file)
@@ -1,5 +1,5 @@
 dnl
-dnl "$Id: cups-network.m4 12325 2014-12-09 20:28:51Z msweet $"
+dnl "$Id: cups-network.m4 12324 2014-12-09 20:28:39Z msweet $"
 dnl
 dnl Networking stuff for CUPS.
 dnl
@@ -72,5 +72,5 @@ AC_SUBST(CUPS_DEFAULT_DOMAINSOCKET)
 AC_SUBST(CUPS_LISTEN_DOMAINSOCKET)
 
 dnl
-dnl End of "$Id: cups-network.m4 12325 2014-12-09 20:28:51Z msweet $".
+dnl End of "$Id: cups-network.m4 12324 2014-12-09 20:28:39Z msweet $".
 dnl
index fdd3c56e93bafd3502d749e3649e88da88a0c374..df0bd45e8d620f325befcdf33c4a0d6f9e11fcfb 100644 (file)
@@ -1,9 +1,9 @@
 dnl
-dnl "$Id: cups-ssl.m4 12290 2014-12-05 17:25:55Z msweet $"
+dnl "$Id: cups-ssl.m4 12645 2015-05-20 01:20:52Z msweet $"
 dnl
 dnl TLS stuff for CUPS.
 dnl
-dnl Copyright 2007-2014 by Apple Inc.
+dnl Copyright 2007-2015 by Apple Inc.
 dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
 dnl
 dnl These coded instructions, statements, and computer programs are the
@@ -53,6 +53,10 @@ if test x$enable_ssl != xno; then
 
                AC_DEFINE(HAVE_CSSMERRORSTRING)
                AC_DEFINE(HAVE_SECKEYCHAINOPEN)])
+
+               if test $uversion -ge 150; then
+                       AC_DEFINE(HAVE_SSLSETENABLEDCIPHERS)
+               fi
        fi
     fi
 
@@ -104,5 +108,5 @@ EXPORT_SSLLIBS="$SSLLIBS"
 AC_SUBST(EXPORT_SSLLIBS)
 
 dnl
-dnl End of "$Id: cups-ssl.m4 12290 2014-12-05 17:25:55Z msweet $".
+dnl End of "$Id: cups-ssl.m4 12645 2015-05-20 01:20:52Z msweet $".
 dnl
index 0053aa7902a5c578685c1a540b6d96e538901da4..e82ad5193a41ca1ead1fb67f5c0f3a1006a092f3 100644 (file)
@@ -1,5 +1,5 @@
 dnl
-dnl "$Id: cups-startup.m4 12351 2014-12-09 22:18:45Z msweet $"
+dnl "$Id: cups-startup.m4 12691 2015-06-04 18:00:31Z msweet $"
 dnl
 dnl Launch-on-demand/startup stuff for CUPS.
 dnl
@@ -68,6 +68,15 @@ if test x$enable_systemd != xno; then
                 else
                         AC_MSG_RESULT(no)
                 fi
+               AC_MSG_CHECKING(for libsystemd-journal)
+                if $PKGCONFIG --exists libsystemd-journal; then
+                        AC_MSG_RESULT(yes)
+                        ONDEMANDFLAGS="$ONDEMANDFLAGS `$PKGCONFIG --cflags libsystemd-journal`"
+                        ONDEMANDLIBS="$ONDEMANDLIBS `$PKGCONFIG --libs libsystemd-journal`"
+                       AC_CHECK_HEADER(systemd/sd-journal.h,AC_DEFINE(HAVE_SYSTEMD_SD_JOURNAL_H))
+                else
+                        AC_MSG_RESULT(no)
+                fi
         fi
 fi
 
@@ -172,5 +181,5 @@ fi
 
 
 dnl
-dnl End of "$Id: cups-startup.m4 12351 2014-12-09 22:18:45Z msweet $".
+dnl End of "$Id: cups-startup.m4 12691 2015-06-04 18:00:31Z msweet $".
 dnl
index 802e2592599cfb2ffccf1b950d118ad8d6f177a7..15607eeca93060a0b98b9de60380d7c4124babf2 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: config.h.in 12329 2014-12-09 20:50:51Z msweet $"
+ * "$Id: config.h.in 12687 2015-06-03 17:19:04Z msweet $"
  *
  * Configuration file for CUPS.
  *
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2015 by Apple Inc.
  * Copyright 1997-2007 by Easy Software Products.
  *
  * These coded instructions, statements, and computer programs are the
 #undef HAVE_VSYSLOG
 
 
+/*
+ * Do we have the ASL functions?
+ */
+
+#undef HAVE_ASL_H
+
+
+/*
+ * Do we have the systemd journal functions?
+ */
+
+#undef HAVE_SYSTEMD_SD_JOURNAL_H
+
+
 /*
  * Do we have the (v)snprintf() functions?
  */
 #undef HAVE_SECKEYCHAINOPEN
 
 
+/*
+ * Do we have (a working) SSLSetEnabledCiphers function?
+ */
+
+#undef HAVE_SSLSETENABLEDCIPHERS
+
+
 /*
  * Do we have libpaper?
  */
@@ -719,5 +740,5 @@ static __inline int _cups_abs(int i) { return (i < 0 ? -i : i); }
 #endif /* !_CUPS_CONFIG_H_ */
 
 /*
- * End of "$Id: config.h.in 12329 2014-12-09 20:50:51Z msweet $".
+ * End of "$Id: config.h.in 12687 2015-06-03 17:19:04Z msweet $".
  */
index 6836c7db16eb09cbfd288e6378763462baff5439..7d86119fe95f1e59930737cc79d27743f681999e 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,9 +1,11 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69.
+# Generated by GNU Autoconf 2.68.
 #
 #
-# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+# Foundation, Inc.
 #
 #
 # This configure script is free software; the Free Software Foundation
@@ -132,31 +134,6 @@ export LANGUAGE
 # CDPATH.
 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
-# Use a proper internal environment variable to ensure we don't fall
-  # into an infinite loop, continuously re-executing ourselves.
-  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
-    _as_can_reexec=no; export _as_can_reexec;
-    # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
-  *v*x* | *x*v* ) as_opts=-vx ;;
-  *v* ) as_opts=-v ;;
-  *x* ) as_opts=-x ;;
-  * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
-  fi
-  # We don't want this to propagate to other subprocesses.
-          { _as_can_reexec=; unset _as_can_reexec;}
 if test "x$CONFIG_SHELL" = x; then
   as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
   emulate sh
@@ -190,8 +167,7 @@ if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
 else
   exitcode=1; echo positional parameters were not saved.
 fi
-test x\$exitcode = x0 || exit 1
-test -x / || exit 1"
+test x\$exitcode = x0 || exit 1"
   as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
   as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
   eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
@@ -236,25 +212,21 @@ IFS=$as_save_IFS
 
 
       if test "x$CONFIG_SHELL" != x; then :
-  export CONFIG_SHELL
-             # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
-  *v*x* | *x*v* ) as_opts=-vx ;;
-  *v* ) as_opts=-v ;;
-  *x* ) as_opts=-x ;;
-  * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-exit 255
+  # We cannot yet assume a decent shell, so we have to provide a
+       # neutralization value for shells without unset; and this also
+       # works around shells that cannot unset nonexistent variables.
+       # Preserve -v and -x to the replacement shell.
+       BASH_ENV=/dev/null
+       ENV=/dev/null
+       (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+       export CONFIG_SHELL
+       case $- in # ((((
+         *v*x* | *x*v* ) as_opts=-vx ;;
+         *v* ) as_opts=-v ;;
+         *x* ) as_opts=-x ;;
+         * ) as_opts= ;;
+       esac
+       exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
 fi
 
     if test x$as_have_required = xno; then :
@@ -356,14 +328,6 @@ $as_echo X"$as_dir" |
 
 
 } # as_fn_mkdir_p
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
-  test -f "$1" && test -x "$1"
-} # as_fn_executable_p
 # as_fn_append VAR VALUE
 # ----------------------
 # Append the text in VALUE to the end of the definition contained in VAR. Take
@@ -485,10 +449,6 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
   chmod +x "$as_me.lineno" ||
     { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
 
-  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
-  # already done that, so ensure we don't try to do so again and fall
-  # in an infinite loop.  This has already happened in practice.
-  _as_can_reexec=no; export _as_can_reexec
   # Don't try to exec as it changes $[0], causing all sort of problems
   # (the dirname of $[0] is not the place where we might find the
   # original and so on.  Autoconf is especially sensitive to this).
@@ -523,16 +483,16 @@ if (echo >conf$$.file) 2>/dev/null; then
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -pR'.
+    # In both cases, we have to default to `cp -p'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -pR'
+      as_ln_s='cp -p'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -pR'
+    as_ln_s='cp -p'
   fi
 else
-  as_ln_s='cp -pR'
+  as_ln_s='cp -p'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -544,8 +504,28 @@ else
   as_mkdir_p=false
 fi
 
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+       test -d "$1/.";
+      else
+       case $1 in #(
+       -*)set "./$1";;
+       esac;
+       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+       ???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -1378,6 +1358,8 @@ target=$target_alias
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
+    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used" >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
   fi
@@ -1701,9 +1683,9 @@ test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
 configure
-generated by GNU Autoconf 2.69
+generated by GNU Autoconf 2.68
 
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
@@ -1854,7 +1836,7 @@ $as_echo "$ac_try_echo"; } >&5
         test ! -s conftest.err
        } && test -s conftest$ac_exeext && {
         test "$cross_compiling" = yes ||
-        test -x conftest$ac_exeext
+        $as_test_x conftest$ac_exeext
        }; then :
   ac_retval=0
 else
@@ -2161,7 +2143,7 @@ This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
 It was created by $as_me, which was
-generated by GNU Autoconf 2.69.  Invocation command line was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   $ $0 $@
 
@@ -2537,7 +2519,7 @@ esac
 ac_config_headers="$ac_config_headers config.h"
 
 
-CUPS_VERSION=2.0.4
+CUPS_VERSION=2.1b1
 CUPS_REVISION=
 #if test -z "$CUPS_REVISION" -a -d .svn; then
 #      CUPS_REVISION="-r`svnversion . | awk -F: '{print $NF}' | sed -e '1,$s/[[a-zA-Z]]*//g'`"
@@ -2586,7 +2568,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_AWK="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2634,7 +2616,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2678,7 +2660,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_CC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3122,7 +3104,8 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdarg.h>
 #include <stdio.h>
-struct stat;
+#include <sys/types.h>
+#include <sys/stat.h>
 /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
 struct buf { int x; };
 FILE * (*rcsopen) (struct buf *, struct stat *, int);
@@ -3372,7 +3355,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3416,7 +3399,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_CXX="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3618,7 +3601,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3658,7 +3641,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_RANLIB="ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3711,7 +3694,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_AR="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3751,7 +3734,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_CHMOD="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3791,7 +3774,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_GZIP="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3831,7 +3814,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_LD="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3871,7 +3854,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_LN="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3911,7 +3894,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_MV="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3951,7 +3934,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3991,7 +3974,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_RMDIR="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4031,7 +4014,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_SED="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4071,7 +4054,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_XDGOPEN="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4147,7 +4130,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4190,7 +4173,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_ac_pt_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4600,7 +4583,7 @@ do
     for ac_prog in grep ggrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_GREP" || continue
+      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
 # Check for GNU ac_path_GREP and select it if it is found.
   # Check for GNU $ac_path_GREP
 case `"$ac_path_GREP" --version 2>&1` in
@@ -4666,7 +4649,7 @@ do
     for ac_prog in egrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_EGREP" || continue
+      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
 # Check for GNU ac_path_EGREP and select it if it is found.
   # Check for GNU $ac_path_EGREP
 case `"$ac_path_EGREP" --version 2>&1` in
@@ -4927,6 +4910,13 @@ if test "x$ac_cv_header_sys_ucred_h" = xyes; then :
 fi
 
 
+ac_fn_c_check_header_mongrel "$LINENO" "asl.h" "ac_cv_header_asl_h" "$ac_includes_default"
+if test "x$ac_cv_header_asl_h" = xyes; then :
+  $as_echo "#define HAVE_ASL_H 1" >>confdefs.h
+
+fi
+
+
 
 ac_fn_c_check_header_mongrel "$LINENO" "iconv.h" "ac_cv_header_iconv_h" "$ac_includes_default"
 if test "x$ac_cv_header_iconv_h" = xyes; then :
@@ -6786,32 +6776,6 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
                # Add useful warning options for tracking down problems...
                OPTIM="-Wall -Wno-format-y2k -Wunused $OPTIM"
 
-               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler supports -Wno-unused-result" >&5
-$as_echo_n "checking whether compiler supports -Wno-unused-result... " >&6; }
-               OLDCFLAGS="$CFLAGS"
-               CFLAGS="$CFLAGS -Werror -Wno-unused-result"
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  OPTIM="$OPTIM -Wno-unused-result"
-                       { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-               CFLAGS="$OLDCFLAGS"
-
                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler supports -Wsign-conversion" >&5
 $as_echo_n "checking whether compiler supports -Wsign-conversion... " >&6; }
                OLDCFLAGS="$CFLAGS"
@@ -7624,7 +7588,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_KRB5CONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7667,7 +7631,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_ac_pt_KRB5CONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -8193,6 +8157,11 @@ fi
 fi
 
 
+
+               if test $uversion -ge 150; then
+                       $as_echo "#define HAVE_SSLSETENABLEDCIPHERS 1" >>confdefs.h
+
+               fi
        fi
     fi
 
@@ -8216,7 +8185,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_LIBGNUTLSCONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -8259,7 +8228,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_ac_pt_LIBGNUTLSCONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -8314,7 +8283,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_LIBGCRYPTCONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -8357,7 +8326,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_ac_pt_LIBGCRYPTCONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -8918,8 +8887,6 @@ _ACEOF
 esac
 rm -rf conftest*
   fi
-
-
 fi
 
 
@@ -9183,6 +9150,24 @@ $as_echo "yes" >&6; }
                         { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
                 fi
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libsystemd-journal" >&5
+$as_echo_n "checking for libsystemd-journal... " >&6; }
+                if $PKGCONFIG --exists libsystemd-journal; then
+                        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+                        ONDEMANDFLAGS="$ONDEMANDFLAGS `$PKGCONFIG --cflags libsystemd-journal`"
+                        ONDEMANDLIBS="$ONDEMANDLIBS `$PKGCONFIG --libs libsystemd-journal`"
+                       ac_fn_c_check_header_mongrel "$LINENO" "systemd/sd-journal.h" "ac_cv_header_systemd_sd_journal_h" "$ac_includes_default"
+if test "x$ac_cv_header_systemd_sd_journal_h" = xyes; then :
+  $as_echo "#define HAVE_SYSTEMD_SD_JOURNAL_H 1" >>confdefs.h
+
+fi
+
+
+                else
+                        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                fi
         fi
 fi
 
@@ -9917,7 +9902,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_JAVA="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -9980,7 +9965,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -10043,7 +10028,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_PHPCGI="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -10084,7 +10069,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_PHP="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -10152,7 +10137,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -10212,7 +10197,7 @@ fi
 
 
 
-ac_config_files="$ac_config_files Makedefs conf/cups-files.conf conf/cupsd.conf conf/mime.convs conf/pam.std conf/snmp.conf cups-config data/testprint desktop/cups.desktop doc/index.html man/client.conf.man man/cups-files.conf.man man/cups-lpd.man man/cups-snmp.man man/cupsaddsmb.man man/cupsd.conf.man man/cupsd.man man/lpoptions.man scheduler/cups-lpd.xinetd scheduler/cups.sh scheduler/cups.xml scheduler/org.cups.cups-lpd.plist scheduler/org.cups.cups-lpdAT.service scheduler/org.cups.cupsd.path scheduler/org.cups.cupsd.service scheduler/org.cups.cupsd.socket templates/header.tmpl packaging/cups.list $LANGFILES"
+ac_config_files="$ac_config_files Makedefs conf/cups-files.conf conf/cupsd.conf conf/mime.convs conf/pam.std conf/snmp.conf cups-config desktop/cups.desktop doc/index.html man/client.conf.man man/cups-files.conf.man man/cups-lpd.man man/cups-snmp.man man/cupsaddsmb.man man/cupsd.conf.man man/cupsd.man man/lpoptions.man scheduler/cups-lpd.xinetd scheduler/cups.sh scheduler/cups.xml scheduler/org.cups.cups-lpd.plist scheduler/org.cups.cups-lpdAT.service scheduler/org.cups.cupsd.path scheduler/org.cups.cupsd.service scheduler/org.cups.cupsd.socket templates/header.tmpl packaging/cups.list $LANGFILES"
 
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -10621,16 +10606,16 @@ if (echo >conf$$.file) 2>/dev/null; then
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -pR'.
+    # In both cases, we have to default to `cp -p'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -pR'
+      as_ln_s='cp -p'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -pR'
+    as_ln_s='cp -p'
   fi
 else
-  as_ln_s='cp -pR'
+  as_ln_s='cp -p'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -10690,16 +10675,28 @@ else
   as_mkdir_p=false
 fi
 
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
-  test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+       test -d "$1/.";
+      else
+       case $1 in #(
+       -*)set "./$1";;
+       esac;
+       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+       ???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -10721,7 +10718,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # values after options handling.
 ac_log="
 This file was extended by $as_me, which was
-generated by GNU Autoconf 2.69.  Invocation command line was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -10783,10 +10780,10 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
 config.status
-configured by $0, generated by GNU Autoconf 2.69,
+configured by $0, generated by GNU Autoconf 2.68,
   with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
@@ -10875,7 +10872,7 @@ fi
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 if \$ac_cs_recheck; then
-  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
   shift
   \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
   CONFIG_SHELL='$SHELL'
@@ -10912,7 +10909,6 @@ do
     "conf/pam.std") CONFIG_FILES="$CONFIG_FILES conf/pam.std" ;;
     "conf/snmp.conf") CONFIG_FILES="$CONFIG_FILES conf/snmp.conf" ;;
     "cups-config") CONFIG_FILES="$CONFIG_FILES cups-config" ;;
-    "data/testprint") CONFIG_FILES="$CONFIG_FILES data/testprint" ;;
     "desktop/cups.desktop") CONFIG_FILES="$CONFIG_FILES desktop/cups.desktop" ;;
     "doc/index.html") CONFIG_FILES="$CONFIG_FILES doc/index.html" ;;
     "man/client.conf.man") CONFIG_FILES="$CONFIG_FILES man/client.conf.man" ;;
index 26b7b713e390942e96cb0fc41ae2ec1316aa2a36..1e3fb72af0e35e38186e3dbf5580dae4216d67f3 100644 (file)
@@ -1,5 +1,5 @@
 dnl
-dnl "$Id: configure.ac 12222 2014-10-21 11:55:01Z msweet $"
+dnl "$Id: configure.ac 12278 2014-12-01 13:53:56Z msweet $"
 dnl
 dnl Configuration script for CUPS.
 dnl
@@ -66,7 +66,6 @@ AC_OUTPUT(Makedefs
          conf/pam.std
          conf/snmp.conf
          cups-config
-         data/testprint
          desktop/cups.desktop
          doc/index.html
          man/client.conf.man
@@ -92,5 +91,5 @@ AC_OUTPUT(Makedefs
 chmod +x cups-config
 
 dnl
-dnl End of "$Id: configure.ac 12222 2014-10-21 11:55:01Z msweet $".
+dnl End of "$Id: configure.ac 12278 2014-12-01 13:53:56Z msweet $".
 dnl
index 00b9b2b80ab6cac6f7c7b535fb3ea01377e6f9f5..ed44fab588575b7f02899ad42a2cab6d616c3c10 100644 (file)
@@ -1,5 +1,5 @@
 #
-# "$Id: Makefile 12032 2014-07-15 20:37:32Z msweet $"
+# "$Id: Makefile 12635 2015-05-19 02:12:22Z msweet $"
 #
 # API library Makefile for CUPS.
 #
@@ -94,7 +94,8 @@ TESTOBJS      = \
                testlang.o \
                testppd.o \
                testpwg.o \
-               testsnmp.o
+               testsnmp.o \
+               tlscheck.o
 OBJS   =       \
                $(LIBOBJS) \
                $(TESTOBJS)
@@ -161,7 +162,8 @@ UNITTARGETS =       \
                testoptions \
                testppd \
                testpwg \
-               testsnmp
+               testsnmp \
+               tlscheck
 
 TARGETS        =       \
                $(LIBTARGETS)
@@ -539,6 +541,16 @@ testsnmp:  testsnmp.o $(LIBCUPSSTATIC)
                $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
 
 
+#
+# tlscheck (dependency on static CUPS library is intentional)
+#
+
+tlscheck:      tlscheck.o $(LIBCUPSSTATIC)
+       echo Linking $@...
+       $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ tlscheck.o $(LIBCUPSSTATIC) \
+               $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
+
+
 #
 # Automatic API help files...
 #
@@ -665,5 +677,5 @@ tls.o: tls-darwin.c tls-gnutls.c tls-sspi.c
 
 
 #
-# End of "$Id: Makefile 12032 2014-07-15 20:37:32Z msweet $".
+# End of "$Id: Makefile 12635 2015-05-19 02:12:22Z msweet $".
 #
index 4b4c936adbcc36387ad8ba268796cbe436e9862f..52a9db34806ddc88ec389f69c6a4b61e30c5e206 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: auth.c 12230 2014-10-21 13:55:24Z msweet $"
+ * "$Id: auth.c 12619 2015-05-06 21:00:19Z msweet $"
  *
  * Authentication functions for CUPS.
  *
@@ -311,7 +311,7 @@ _cupsSetNegotiateAuthString(
   * to use it...
   */
 
-  if (gss_init_sec_context == NULL)
+  if (&gss_init_sec_context == NULL)
   {
     DEBUG_puts("1_cupsSetNegotiateAuthString: Weak-linked GSSAPI/Kerberos "
                "framework is not present");
@@ -876,5 +876,5 @@ cups_local_auth(http_t *http)               /* I - HTTP connection to server */
 
 
 /*
- * End of "$Id: auth.c 12230 2014-10-21 13:55:24Z msweet $".
+ * End of "$Id: auth.c 12619 2015-05-06 21:00:19Z msweet $".
  */
index 90420a220db681c76cc369ea604389baff2f1b40..da8a3963bd0504c23425dd3299a60341f858acf9 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: cups-private.h 11851 2014-05-07 23:55:35Z msweet $"
+ * "$Id: cups-private.h 12441 2015-01-29 14:42:32Z msweet $"
  *
  *   Private definitions for CUPS.
  *
- *   Copyright 2007-2013 by Apple Inc.
+ *   Copyright 2007-2015 by Apple Inc.
  *   Copyright 1997-2007 by Easy Software Products, all rights reserved.
  *
  *   These coded instructions, statements, and computer programs are the
@@ -281,5 +281,5 @@ extern char         *_cupsUserDefault(char *name, size_t namesize);
 #endif /* !_CUPS_CUPS_PRIVATE_H_ */
 
 /*
- * End of "$Id: cups-private.h 11851 2014-05-07 23:55:35Z msweet $".
+ * End of "$Id: cups-private.h 12441 2015-01-29 14:42:32Z msweet $".
  */
index 969919015e2f1080553e36eeec60eea4256c7f87..4faf82cdc7b32eb9706c2acd808528b6916cb4ef 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: cups.h 12761 2015-06-24 20:10:19Z msweet $"
+ * "$Id: cups.h 12722 2015-06-08 22:00:19Z msweet $"
  *
  * API definitions for CUPS.
  *
- * Copyright 2007-2015 by Apple Inc.
+ * Copyright 2007-2014 by Apple Inc.
  * Copyright 1997-2007 by Easy Software Products.
  *
  * These coded instructions, statements, and computer programs are the
@@ -35,6 +35,15 @@ typedef off_t ssize_t;                       /* @private@ */
 #  include "language.h"
 #  include "pwg.h"
 
+/*
+ * Define _PPD_DEPRECATED to silence the warnings about PPD functions being
+ * deprecated...
+ */
+
+#  ifndef _PPD_DEPRECATED
+#    define _PPD_DEPRECATED _CUPS_DEPRECATED_1_6_MSG("Use cupsCopyDestInfo and friends instead.")
+#  endif /* !_PPD_DEPRECATED */
+
 
 /*
  * C++ magic...
@@ -49,10 +58,10 @@ extern "C" {
  * Constants...
  */
 
-#  define CUPS_VERSION                 2.0004
+#  define CUPS_VERSION                 2.0100
 #  define CUPS_VERSION_MAJOR           2
-#  define CUPS_VERSION_MINOR           0
-#  define CUPS_VERSION_PATCH           4
+#  define CUPS_VERSION_MINOR           1
+#  define CUPS_VERSION_PATCH           0
 
 #  define CUPS_BC_FD                   3
                                        /* Back-channel file descriptor for
@@ -354,8 +363,7 @@ extern int          cupsGetClasses(char ***classes) _CUPS_DEPRECATED_MSG("Use cupsGetDes
 extern const char      *cupsGetDefault(void);
 extern int             cupsGetJobs(cups_job_t **jobs, const char *name,
                                    int myjobs, int whichjobs);
-extern const char      *cupsGetPPD(const char *name)
-                                   _CUPS_DEPRECATED_1_6_MSG("Use cupsCopyDestInfo instead.");
+extern const char      *cupsGetPPD(const char *name) _PPD_DEPRECATED;
 extern int             cupsGetPrinters(char ***printers) _CUPS_DEPRECATED_MSG("Use cupsGetDests instead.");
 extern ipp_status_t    cupsLastError(void);
 extern int             cupsPrintFile(const char *name, const char *filename,
@@ -413,8 +421,7 @@ extern int          cupsGetDests2(http_t *http, cups_dest_t **dests)
 extern int             cupsGetJobs2(http_t *http, cups_job_t **jobs,
                                     const char *name, int myjobs,
                                     int whichjobs) _CUPS_API_1_1_21;
-extern const char      *cupsGetPPD2(http_t *http, const char *name)
-                                    _CUPS_DEPRECATED_1_6_MSG("Use cupsCopyDestInfo instead.");
+extern const char      *cupsGetPPD2(http_t *http, const char *name) _PPD_DEPRECATED;
 extern int             cupsPrintFile2(http_t *http, const char *name,
                                       const char *filename,
                                       const char *title, int num_options,
@@ -479,7 +486,7 @@ extern const char   *cupsGetPassword2(const char *prompt, http_t *http,
                                          const char *resource) _CUPS_API_1_4;
 extern http_status_t   cupsGetPPD3(http_t *http, const char *name,
                                    time_t *modtime, char *buffer,
-                                   size_t bufsize) _CUPS_API_1_4;
+                                   size_t bufsize) _PPD_DEPRECATED;
 extern ipp_t           *cupsGetResponse(http_t *http,
                                         const char *resource) _CUPS_API_1_4;
 extern ssize_t         cupsReadResponseData(http_t *http, char *buffer,
@@ -628,5 +635,5 @@ extern int          cupsSetServerCredentials(const char *path, const char *common_name,
 #endif /* !_CUPS_CUPS_H_ */
 
 /*
- * End of "$Id: cups.h 12761 2015-06-24 20:10:19Z msweet $".
+ * End of "$Id: cups.h 12722 2015-06-08 22:00:19Z msweet $".
  */
index 5514f773b9a354086add15e9c33b0d3e0c2e6489..feae91d117464d3f0746707e0823cd3db045c4f5 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: debug.c 12328 2014-12-09 20:38:47Z msweet $"
+ * "$Id: debug.c 12327 2014-12-09 20:38:39Z msweet $"
  *
  * Debugging functions for CUPS.
  *
@@ -643,5 +643,5 @@ _cups_debug_set(const char *logfile,        /* I - Log file or NULL */
 
 
 /*
- * End of "$Id: debug.c 12328 2014-12-09 20:38:47Z msweet $".
+ * End of "$Id: debug.c 12327 2014-12-09 20:38:39Z msweet $".
  */
index 384105ffbe1bedbc7fb58c45cb9a636c96ed8d81..dcbdfb9e2e110aa065559e6d650ec392274bc132 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: dest.c 12665 2015-05-25 15:08:55Z msweet $"
+ * "$Id: dest.c 12722 2015-06-08 22:00:19Z msweet $"
  *
  * User-defined destination (and option) support for CUPS.
  *
@@ -3943,5 +3943,5 @@ cups_make_string(
 
 
 /*
- * End of "$Id: dest.c 12665 2015-05-25 15:08:55Z msweet $".
+ * End of "$Id: dest.c 12722 2015-06-08 22:00:19Z msweet $".
  */
index 5847f5684aa0ab90a37ff209e4586fafa159c873..b43c4a3fc4e46a0f463e3000e3d1d633cb378043 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: encode.c 11733 2014-03-25 18:01:41Z msweet $"
+ * "$Id: encode.c 12668 2015-05-27 19:30:32Z msweet $"
  *
  * Option encoding routines for CUPS.
  *
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2015 by Apple Inc.
  * Copyright 1997-2007 by Easy Software Products.
  *
  * These coded instructions, statements, and computer programs are the
@@ -117,6 +117,9 @@ static const _ipp_option_t ipp_options[] =
   { 0, "copies",               IPP_TAG_INTEGER,        IPP_TAG_JOB,
                                                        IPP_TAG_DOCUMENT },
   { 0, "copies-default",       IPP_TAG_INTEGER,        IPP_TAG_PRINTER },
+  { 0, "date-time-at-completed",IPP_TAG_DATE,          IPP_TAG_ZERO }, /* never send as option */
+  { 0, "date-time-at-creation",        IPP_TAG_DATE,           IPP_TAG_ZERO }, /* never send as option */
+  { 0, "date-time-at-processing",IPP_TAG_DATE,         IPP_TAG_ZERO }, /* never send as option */
   { 0, "device-uri",           IPP_TAG_URI,            IPP_TAG_PRINTER },
   { 1, "document-copies",      IPP_TAG_RANGE,          IPP_TAG_JOB,
                                                        IPP_TAG_DOCUMENT,
@@ -274,6 +277,7 @@ static const _ipp_option_t ipp_options[] =
   { 0, "print-quality-default",        IPP_TAG_ENUM,           IPP_TAG_PRINTER },
   { 1, "printer-commands",     IPP_TAG_KEYWORD,        IPP_TAG_PRINTER },
   { 0, "printer-error-policy", IPP_TAG_NAME,           IPP_TAG_PRINTER },
+  { 0, "printer-geo-location", IPP_TAG_URI,            IPP_TAG_PRINTER },
   { 0, "printer-info",         IPP_TAG_TEXT,           IPP_TAG_PRINTER },
   { 0, "printer-is-accepting-jobs", IPP_TAG_BOOLEAN,   IPP_TAG_PRINTER },
   { 0, "printer-is-shared",    IPP_TAG_BOOLEAN,        IPP_TAG_PRINTER },
@@ -849,5 +853,5 @@ compare_ipp_options(_ipp_option_t *a,       /* I - First option */
 
 
 /*
- * End of "$Id: encode.c 11733 2014-03-25 18:01:41Z msweet $".
+ * End of "$Id: encode.c 12668 2015-05-27 19:30:32Z msweet $".
  */
index 6c6b8492e9f4e8de463e50b0f334550998a34860..a69f0f95aca416ee4bd679cbd6d89e503a28b1b4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: file.c 12642 2015-05-19 15:04:47Z msweet $"
+ * "$Id: file.c 12641 2015-05-19 15:04:39Z msweet $"
  *
  * File functions for CUPS.
  *
@@ -2752,5 +2752,5 @@ cups_write(cups_file_t *fp,               /* I - CUPS file */
 
 
 /*
- * End of "$Id: file.c 12642 2015-05-19 15:04:47Z msweet $".
+ * End of "$Id: file.c 12641 2015-05-19 15:04:39Z msweet $".
  */
index c48c321440b2f0d414f9df7d3f5f8272c624dc0c..4b041f47128b3a5b770167530e380dc7fe685a28 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: globals.c 12481 2015-02-03 12:45:14Z msweet $"
+ * "$Id: globals.c 12480 2015-02-03 12:36:34Z msweet $"
  *
  *   Global variable access routines for CUPS.
  *
@@ -394,5 +394,5 @@ cups_globals_init(void)
 
 
 /*
- * End of "$Id: globals.c 12481 2015-02-03 12:45:14Z msweet $".
+ * End of "$Id: globals.c 12480 2015-02-03 12:36:34Z msweet $".
  */
index 3a8c18c0258db98f5f471c4e00b01f47bb4861e6..3393e87f85926e97429bcf3622f78260ef02b362 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: http-private.h 12419 2015-01-22 15:51:20Z msweet $"
+ * "$Id: http-private.h 12645 2015-05-20 01:20:52Z msweet $"
  *
  * Private HTTP definitions for CUPS.
  *
@@ -126,6 +126,7 @@ extern CFAbsoluteTime SecCertificateNotValidAfter(SecCertificateRef certificate)
 
 #  ifndef WIN32
 #    include <net/if.h>
+#    include <resolv.h>
 #    ifdef HAVE_GETIFADDRS
 #      include <ifaddrs.h>
 #    else
@@ -161,8 +162,11 @@ extern "C" {
 #define _HTTP_RESOLVE_FQDN     2       /* Resolve to a FQDN */
 #define _HTTP_RESOLVE_FAXOUT   4       /* Resolve FaxOut service? */
 
+#define _HTTP_TLS_NONE         0       /* No TLS options */
 #define _HTTP_TLS_ALLOW_RC4    1       /* Allow RC4 cipher suites */
 #define _HTTP_TLS_ALLOW_SSL3   2       /* Allow SSL 3.0 */
+#define _HTTP_TLS_ALLOW_DH     4       /* Allow DH/DHE key negotiation */
+#define _HTTP_TLS_DENY_TLS10   16      /* Deny TLS 1.0 */
 
 
 /*
@@ -438,5 +442,5 @@ extern int          _httpWait(http_t *http, int msec, int usessl);
 #endif /* !_CUPS_HTTP_PRIVATE_H_ */
 
 /*
- * End of "$Id: http-private.h 12419 2015-01-22 15:51:20Z msweet $".
+ * End of "$Id: http-private.h 12645 2015-05-20 01:20:52Z msweet $".
  */
index 6c8f5797ef494678dfdddb60332fa708cb590368..98188a4b5665f45a48b13c934d08e3d0d186f5d1 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: http.c 12334 2014-12-09 21:01:55Z msweet $"
+ * "$Id: http.c 12333 2014-12-09 21:01:46Z msweet $"
  *
  * HTTP routines for CUPS.
  *
@@ -4850,5 +4850,5 @@ http_write_chunk(http_t     *http,        /* I - HTTP connection */
 
 
 /*
- * End of "$Id: http.c 12334 2014-12-09 21:01:55Z msweet $".
+ * End of "$Id: http.c 12333 2014-12-09 21:01:46Z msweet $".
  */
index 88e4065f9ca588c92c0d66695187069c706e246b..6a5d940671c04f0e818ee2becc5ff57fb3ece6d1 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: ipp-support.c 12194 2014-10-02 18:44:36Z msweet $"
+ * "$Id: ipp-support.c 12666 2015-05-25 19:38:09Z msweet $"
  *
  * Internet Printing Protocol support functions for CUPS.
  *
@@ -195,7 +195,7 @@ static const char * const ipp_std_ops[] =
                  "Suspend-Current-Job",
                  "Resume-Job",
 
-                 /* 0x0030 - 0x003e */
+                 /* 0x0030 - 0x003f */
                  "Promote-Job",
                  "Schedule-Job-After",
                  "0x0032",
@@ -210,7 +210,21 @@ static const char * const ipp_std_ops[] =
                  "Close-Job",
                  "Identify-Printer",
                  "Validate-Document",
-                 "Send-Hardcopy-Document"
+                 "Send-Hardcopy-Document",
+                 "Acknowledge-Document",
+
+                 /* 0x0040 - 0x004a */
+                 "Acknowledge-Identify-Printer",
+                 "Acknowledge-Job",
+                 "Fetch-Document",
+                 "Fetch-Job",
+                 "Get-Output-Device-Attributes",
+                 "Update-Active-Jobs",
+                 "Deregister-Output-Device",
+                 "Update-Document-Status",
+                 "Update-Job-Status",
+                 "Update-Output-Device-Attributes",
+                 "Get-Next-Document-Data"
                },
                * const ipp_cups_ops[] =
                {
@@ -2271,5 +2285,5 @@ ipp_col_string(ipp_t  *col,               /* I - Collection attribute */
 
 
 /*
- * End of "$Id: ipp-support.c 12194 2014-10-02 18:44:36Z msweet $".
+ * End of "$Id: ipp-support.c 12666 2015-05-25 19:38:09Z msweet $".
  */
index 6ef17ecd7685a5014a44ffcee53e448379a5e36b..5e7b730622e1d82f94d6878898de1808876ddb7a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: ipp.c 12469 2015-02-01 04:51:08Z msweet $"
+ * "$Id: ipp.c 12468 2015-02-01 04:50:43Z msweet $"
  *
  * Internet Printing Protocol functions for CUPS.
  *
@@ -7062,5 +7062,5 @@ ipp_write_file(int         *fd,           /* I - File descriptor */
 
 
 /*
- * End of "$Id: ipp.c 12469 2015-02-01 04:51:08Z msweet $".
+ * End of "$Id: ipp.c 12468 2015-02-01 04:50:43Z msweet $".
  */
index c56e7abe8fca5bf5b8c6b3fabcedbbc82d019106..9fccd11ca040a5a9bb551444b61dba8899bf6d90 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: ipp.h 11806 2014-04-09 16:12:27Z msweet $"
+ * "$Id: ipp.h 12666 2015-05-25 19:38:09Z msweet $"
  *
  * Internet Printing Protocol definitions for CUPS.
  *
@@ -246,11 +246,11 @@ typedef enum ipp_op_e                     /**** IPP operations ****/
   IPP_OP_CUPS_INVALID = -1,            /* Invalid operation name for @link ippOpValue@ */
   IPP_OP_CUPS_NONE = 0,                        /* No operation @private@ */
   IPP_OP_PRINT_JOB = 0x0002,           /* Print a single file */
-  IPP_OP_PRINT_URI,                    /* Print a single URL @private@ */
+  IPP_OP_PRINT_URI,                    /* Print a single URL */
   IPP_OP_VALIDATE_JOB,                 /* Validate job options */
   IPP_OP_CREATE_JOB,                   /* Create an empty print job */
   IPP_OP_SEND_DOCUMENT,                        /* Add a file to a job */
-  IPP_OP_SEND_URI,                     /* Add a URL to a job @private@ */
+  IPP_OP_SEND_URI,                     /* Add a URL to a job */
   IPP_OP_CANCEL_JOB,                   /* Cancel a job */
   IPP_OP_GET_JOB_ATTRIBUTES,           /* Get job attributes */
   IPP_OP_GET_JOBS,                     /* Get a list of jobs */
@@ -261,7 +261,7 @@ typedef enum ipp_op_e                       /**** IPP operations ****/
   IPP_OP_PAUSE_PRINTER = 0x0010,       /* Stop a printer */
   IPP_OP_RESUME_PRINTER,               /* Start a printer */
   IPP_OP_PURGE_JOBS,                   /* Cancel all jobs */
-  IPP_OP_SET_PRINTER_ATTRIBUTES,       /* Set printer attributes @private@ */
+  IPP_OP_SET_PRINTER_ATTRIBUTES,       /* Set printer attributes */
   IPP_OP_SET_JOB_ATTRIBUTES,           /* Set job attributes */
   IPP_OP_GET_PRINTER_SUPPORTED_VALUES, /* Get supported attribute values */
   IPP_OP_CREATE_PRINTER_SUBSCRIPTIONS, /* Create one or more printer subscriptions @since CUPS 1.2/OS X 10.5@ */
@@ -279,32 +279,45 @@ typedef enum ipp_op_e                     /**** IPP operations ****/
   IPP_OP_ENABLE_PRINTER,               /* Start a printer */
   IPP_OP_DISABLE_PRINTER,              /* Stop a printer */
   IPP_OP_PAUSE_PRINTER_AFTER_CURRENT_JOB,
-                                       /* Stop printer after the current job @private@ */
-  IPP_OP_HOLD_NEW_JOBS,                        /* Hold new jobs @private@ */
-  IPP_OP_RELEASE_HELD_NEW_JOBS,                /* Release new jobs @private@ */
-  IPP_OP_DEACTIVATE_PRINTER,           /* Stop a printer @private@ */
-  IPP_OP_ACTIVATE_PRINTER,             /* Start a printer @private@ */
-  IPP_OP_RESTART_PRINTER,              /* Restart a printer @private@ */
-  IPP_OP_SHUTDOWN_PRINTER,             /* Turn a printer off @private@ */
-  IPP_OP_STARTUP_PRINTER,              /* Turn a printer on @private@ */
-  IPP_OP_REPROCESS_JOB,                        /* Reprint a job @private@ */
-  IPP_OP_CANCEL_CURRENT_JOB,           /* Cancel the current job @private@ */
-  IPP_OP_SUSPEND_CURRENT_JOB,          /* Suspend the current job @private@ */
-  IPP_OP_RESUME_JOB,                   /* Resume the current job @private@ */
-  IPP_OP_PROMOTE_JOB,                  /* Promote a job to print sooner @private@ */
-  IPP_OP_SCHEDULE_JOB_AFTER,           /* Schedule a job to print after another @private@ */
-  IPP_OP_CANCEL_DOCUMENT = 0x0033,     /* Cancel-Document @private@ */
-  IPP_OP_GET_DOCUMENT_ATTRIBUTES,      /* Get-Document-Attributes @private@ */
-  IPP_OP_GET_DOCUMENTS,                        /* Get-Documents @private@ */
-  IPP_OP_DELETE_DOCUMENT,              /* Delete-Document @private@ */
-  IPP_OP_SET_DOCUMENT_ATTRIBUTES,      /* Set-Document-Attributes @private@ */
+                                       /* Stop printer after the current job */
+  IPP_OP_HOLD_NEW_JOBS,                        /* Hold new jobs */
+  IPP_OP_RELEASE_HELD_NEW_JOBS,                /* Release new jobs */
+  IPP_OP_DEACTIVATE_PRINTER,           /* Stop a printer */
+  IPP_OP_ACTIVATE_PRINTER,             /* Start a printer */
+  IPP_OP_RESTART_PRINTER,              /* Restart a printer */
+  IPP_OP_SHUTDOWN_PRINTER,             /* Turn a printer off */
+  IPP_OP_STARTUP_PRINTER,              /* Turn a printer on */
+  IPP_OP_REPROCESS_JOB,                        /* Reprint a job */
+  IPP_OP_CANCEL_CURRENT_JOB,           /* Cancel the current job */
+  IPP_OP_SUSPEND_CURRENT_JOB,          /* Suspend the current job */
+  IPP_OP_RESUME_JOB,                   /* Resume the current job */
+  IPP_OP_PROMOTE_JOB,                  /* Promote a job to print sooner */
+  IPP_OP_SCHEDULE_JOB_AFTER,           /* Schedule a job to print after another */
+  IPP_OP_CANCEL_DOCUMENT = 0x0033,     /* Cancel-Document */
+  IPP_OP_GET_DOCUMENT_ATTRIBUTES,      /* Get-Document-Attributes */
+  IPP_OP_GET_DOCUMENTS,                        /* Get-Documents */
+  IPP_OP_DELETE_DOCUMENT,              /* Delete-Document */
+  IPP_OP_SET_DOCUMENT_ATTRIBUTES,      /* Set-Document-Attributes */
   IPP_OP_CANCEL_JOBS,                  /* Cancel-Jobs */
   IPP_OP_CANCEL_MY_JOBS,               /* Cancel-My-Jobs */
   IPP_OP_RESUBMIT_JOB,                 /* Resubmit-Job */
   IPP_OP_CLOSE_JOB,                    /* Close-Job */
-  IPP_OP_IDENTIFY_PRINTER,             /* Identify-Printer @private@ */
-  IPP_OP_VALIDATE_DOCUMENT,            /* Validate-Document @private@ */
-  IPP_OP_SEND_HARDCOPY_DOCUMENT,       /* Send-Hardcopy-Document @private@ */
+  IPP_OP_IDENTIFY_PRINTER,             /* Identify-Printer */
+  IPP_OP_VALIDATE_DOCUMENT,            /* Validate-Document */
+  IPP_OP_SEND_HARDCOPY_DOCUMENT,       /* Send-Hardcopy-Document */
+  IPP_OP_ACKNOWLEDGE_DOCUMENT,         /* Acknowledge-Document */
+  IPP_OP_ACKNOWLEDGE_IDENTIFY_PRINTER, /* Acknowledge-Identify-Printer */
+  IPP_OP_ACKNOWLEDGE_JOB,              /* Acknowledge-Job */
+  IPP_OP_FETCH_DOCUMENT,               /* Fetch-Document */
+  IPP_OP_FETCH_JOB,                    /* Fetch-Job */
+  IPP_OP_GET_OUTPUT_DEVICE_ATTRIBUTES, /* Get-Output-Device-Attributes */
+  IPP_OP_UPDATE_ACTIVE_JOBS,           /* Update-Active-Jobs */
+  IPP_OP_DEREGISTER_OUTPUT_DEVICE,     /* Deregister-Output-Device */
+  IPP_OP_UPDATE_DOCUMENT_STATUS,       /* Update-Document-Status */
+  IPP_OP_UPDATE_JOB_STATUS,            /* Update-Job-Status */
+  IPP_OP_UPDATE_OUTPUT_DEVICE_ATTRIBUTES,
+                                       /* Update-Output-Device-Attributes */
+  IPP_OP_GET_NEXT_DOCUMENT_DATA,       /* Get-Next-Document-Data */
 
   IPP_OP_PRIVATE = 0x4000,             /* Reserved @private@ */
   IPP_OP_CUPS_GET_DEFAULT,             /* Get the default printer */
@@ -1021,5 +1034,5 @@ extern const char *ippStateString(ipp_state_t state) _CUPS_API_2_0;
 #endif /* !_CUPS_IPP_H_ */
 
 /*
- * End of "$Id: ipp.h 11806 2014-04-09 16:12:27Z msweet $".
+ * End of "$Id: ipp.h 12666 2015-05-25 19:38:09Z msweet $".
  */
index 7888af09894e000ef63044f8302f11eeb30b926d..0adf73ad6ab9ac184c5df7f73477409a9d60845b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: language.c 12266 2014-11-19 16:05:28Z msweet $"
+ * "$Id: language.c 12262 2014-11-19 15:18:33Z msweet $"
  *
  * I18N/language support for CUPS.
  *
@@ -1588,5 +1588,5 @@ cups_unquote(char       *d,               /* O - Unquoted string */
 
 
 /*
- * End of "$Id: language.c 12266 2014-11-19 16:05:28Z msweet $".
+ * End of "$Id: language.c 12262 2014-11-19 15:18:33Z msweet $".
  */
index 9580c0da7c6e654278943d983ab1e60d9a3dcf16..0c27628e55b224324efa59bdc19b0de47740f784 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: mark.c 11558 2014-02-06 18:33:34Z msweet $"
+ * "$Id: mark.c 12258 2014-11-19 12:38:44Z msweet $"
  *
  * Option marking routines for CUPS.
  *
@@ -514,6 +514,12 @@ ppdMarkDefaults(ppd_file_t *ppd)   /* I - PPD file record */
 
   for (i = ppd->num_groups, g = ppd->groups; i > 0; i --, g ++)
     ppd_defaults(ppd, g);
+
+ /*
+  * Finally, tag any conflicts (API compatibility) once at the end.
+  */
+
+  ppdConflicts(ppd);
 }
 
 
@@ -710,7 +716,7 @@ ppd_defaults(ppd_file_t  *ppd,              /* I - PPD file */
 
   for (i = g->num_options, o = g->options; i > 0; i --, o ++)
     if (_cups_strcasecmp(o->keyword, "PageRegion") != 0)
-      ppdMarkOption(ppd, o->keyword, o->defchoice);
+      ppd_mark_option(ppd, o->keyword, o->defchoice);
 
   for (i = g->num_subgroups, sg = g->subgroups; i > 0; i --, sg ++)
     ppd_defaults(ppd, sg);
@@ -1078,5 +1084,5 @@ ppd_mark_option(ppd_file_t *ppd,  /* I - PPD file */
 
 
 /*
- * End of "$Id: mark.c 11558 2014-02-06 18:33:34Z msweet $".
+ * End of "$Id: mark.c 12258 2014-11-19 12:38:44Z msweet $".
  */
index 851cb0bea19d9a47e54e804377d286538a0f0758..5a5af77de35214ffb40c38c118ed1b0aaf1f4096 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: ppd-cache.c 12434 2015-01-28 16:29:06Z msweet $"
+ * "$Id: ppd-cache.c 12722 2015-06-08 22:00:19Z msweet $"
  *
  * PPD cache implementation for CUPS.
  *
@@ -37,10 +37,326 @@ static int pwg_compare_finishings(_pwg_finishings_t *a,
                                       _pwg_finishings_t *b);
 static void    pwg_free_finishings(_pwg_finishings_t *f);
 static void    pwg_ppdize_name(const char *ipp, char *name, size_t namesize);
+static void    pwg_ppdize_resolution(ipp_attribute_t *attr, int element, int *xres, int *yres, char *name, size_t namesize);
 static void    pwg_unppdize_name(const char *ppd, char *name, size_t namesize,
                                  const char *dashchars);
 
 
+/*
+ * '_cupsConvertOptions()' - Convert printer options to standard IPP attributes.
+ *
+ * This functions converts PPD and CUPS-specific options to their standard IPP
+ * attributes and values and adds them to the specified IPP request.
+ */
+
+int                                            /* O - New number of copies */
+_cupsConvertOptions(ipp_t           *request,  /* I - IPP request */
+                    ppd_file_t      *ppd,      /* I - PPD file */
+                   _ppd_cache_t    *pc,        /* I - PPD cache info */
+                   ipp_attribute_t *media_col_sup,
+                                               /* I - media-col-supported values */
+                   ipp_attribute_t *doc_handling_sup,
+                                               /* I - multiple-document-handling-supported values */
+                   ipp_attribute_t *print_color_mode_sup,
+                                               /* I - Printer supports print-color-mode */
+                   const char    *user,        /* I - User info */
+                   const char    *format,      /* I - document-format value */
+                   int           copies,       /* I - Number of copies */
+                   int           num_options,  /* I - Number of options */
+                   cups_option_t *options)     /* I - Options */
+{
+  int          i;                      /* Looping var */
+  const char   *keyword;               /* PWG keyword */
+  pwg_size_t   *size;                  /* PWG media size */
+  ipp_t                *media_col,             /* media-col value */
+               *media_size;            /* media-size value */
+  const char   *media_source,          /* media-source value */
+               *media_type,            /* media-type value */
+               *collate_str,           /* multiple-document-handling value */
+               *color_attr_name,       /* Supported color attribute */
+               *mandatory;             /* Mandatory attributes */
+  int          num_finishings = 0,     /* Number of finishing values */
+               finishings[10];         /* Finishing enum values */
+  ppd_choice_t *choice;                /* Marked choice */
+
+
+ /*
+  * Send standard IPP attributes...
+  */
+
+  if (pc->password && (keyword = cupsGetOption("job-password", num_options, options)) != NULL)
+  {
+    ippAddOctetString(request, IPP_TAG_OPERATION, "job-password", keyword, (int)strlen(keyword));
+
+    if ((keyword = cupsGetOption("job-password-encryption", num_options, options)) == NULL)
+      keyword = "none";
+
+    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "job-password-encryption", NULL, keyword);
+  }
+
+  if (pc->account_id)
+  {
+    if ((keyword = cupsGetOption("job-account-id", num_options, options)) == NULL)
+      keyword = cupsGetOption("job-billing", num_options, options);
+
+    if (keyword)
+      ippAddString(request, IPP_TAG_JOB, IPP_TAG_NAME, "job-account-id", NULL, keyword);
+  }
+
+  if (pc->accounting_user_id)
+  {
+    if ((keyword = cupsGetOption("job-accounting-user-id", num_options, options)) == NULL)
+      keyword = user;
+
+    if (keyword)
+      ippAddString(request, IPP_TAG_JOB, IPP_TAG_NAME, "job-accounting-user-id", NULL, keyword);
+  }
+
+  for (mandatory = (const char *)cupsArrayFirst(pc->mandatory); mandatory; mandatory = (const char *)cupsArrayNext(pc->mandatory))
+  {
+    if (strcmp(mandatory, "copies") &&
+       strcmp(mandatory, "destination-uris") &&
+       strcmp(mandatory, "finishings") &&
+       strcmp(mandatory, "job-account-id") &&
+       strcmp(mandatory, "job-accounting-user-id") &&
+       strcmp(mandatory, "job-password") &&
+       strcmp(mandatory, "job-password-encryption") &&
+       strcmp(mandatory, "media") &&
+       strncmp(mandatory, "media-col", 9) &&
+       strcmp(mandatory, "multiple-document-handling") &&
+       strcmp(mandatory, "output-bin") &&
+       strcmp(mandatory, "print-color-mode") &&
+       strcmp(mandatory, "print-quality") &&
+       strcmp(mandatory, "sides") &&
+       (keyword = cupsGetOption(mandatory, num_options, options)) != NULL)
+    {
+      _ipp_option_t *opt = _ippFindOption(mandatory);
+                                   /* Option type */
+      ipp_tag_t        value_tag = opt ? opt->value_tag : IPP_TAG_NAME;
+                                   /* Value type */
+
+      switch (value_tag)
+      {
+       case IPP_TAG_INTEGER :
+       case IPP_TAG_ENUM :
+           ippAddInteger(request, IPP_TAG_JOB, value_tag, mandatory, atoi(keyword));
+           break;
+       case IPP_TAG_BOOLEAN :
+           ippAddBoolean(request, IPP_TAG_JOB, mandatory, !_cups_strcasecmp(keyword, "true"));
+           break;
+       case IPP_TAG_RANGE :
+           {
+             int lower, upper; /* Range */
+
+             if (sscanf(keyword, "%d-%d", &lower, &upper) != 2)
+               lower = upper = atoi(keyword);
+
+             ippAddRange(request, IPP_TAG_JOB, mandatory, lower, upper);
+           }
+           break;
+       case IPP_TAG_STRING :
+           ippAddOctetString(request, IPP_TAG_JOB, mandatory, keyword, (int)strlen(keyword));
+           break;
+       default :
+           if (!strcmp(mandatory, "print-color-mode") && !strcmp(keyword, "monochrome"))
+           {
+             if (ippContainsString(print_color_mode_sup, "auto-monochrome"))
+               keyword = "auto-monochrome";
+             else if (ippContainsString(print_color_mode_sup, "process-monochrome") && !ippContainsString(print_color_mode_sup, "monochrome"))
+               keyword = "process-monochrome";
+           }
+
+           ippAddString(request, IPP_TAG_JOB, value_tag, mandatory, NULL, keyword);
+           break;
+      }
+    }
+  }
+
+  if ((keyword = cupsGetOption("PageSize", num_options, options)) == NULL)
+    keyword = cupsGetOption("media", num_options, options);
+
+  if ((size = _ppdCacheGetSize(pc, keyword)) != NULL)
+  {
+   /*
+    * Add a media-col value...
+    */
+
+    media_size = ippNew();
+    ippAddInteger(media_size, IPP_TAG_ZERO, IPP_TAG_INTEGER,
+                 "x-dimension", size->width);
+    ippAddInteger(media_size, IPP_TAG_ZERO, IPP_TAG_INTEGER,
+                 "y-dimension", size->length);
+
+    media_col = ippNew();
+    ippAddCollection(media_col, IPP_TAG_ZERO, "media-size", media_size);
+
+    media_source = _ppdCacheGetSource(pc, cupsGetOption("InputSlot",
+                                                       num_options,
+                                                       options));
+    media_type   = _ppdCacheGetType(pc, cupsGetOption("MediaType",
+                                                     num_options,
+                                                     options));
+
+    for (i = 0; i < media_col_sup->num_values; i ++)
+    {
+      if (!strcmp(media_col_sup->values[i].string.text, "media-left-margin"))
+       ippAddInteger(media_col, IPP_TAG_ZERO, IPP_TAG_INTEGER, "media-left-margin", size->left);
+      else if (!strcmp(media_col_sup->values[i].string.text, "media-bottom-margin"))
+       ippAddInteger(media_col, IPP_TAG_ZERO, IPP_TAG_INTEGER, "media-bottom-margin", size->bottom);
+      else if (!strcmp(media_col_sup->values[i].string.text, "media-right-margin"))
+       ippAddInteger(media_col, IPP_TAG_ZERO, IPP_TAG_INTEGER, "media-right-margin", size->right);
+      else if (!strcmp(media_col_sup->values[i].string.text, "media-top-margin"))
+       ippAddInteger(media_col, IPP_TAG_ZERO, IPP_TAG_INTEGER, "media-top-margin", size->top);
+      else if (!strcmp(media_col_sup->values[i].string.text, "media-source") && media_source)
+       ippAddString(media_col, IPP_TAG_ZERO, IPP_TAG_KEYWORD, "media-source", NULL, media_source);
+      else if (!strcmp(media_col_sup->values[i].string.text, "media-type") && media_type)
+       ippAddString(media_col, IPP_TAG_ZERO, IPP_TAG_KEYWORD, "media-type", NULL, media_type);
+    }
+
+    ippAddCollection(request, IPP_TAG_JOB, "media-col", media_col);
+  }
+
+  if ((keyword = cupsGetOption("output-bin", num_options, options)) == NULL)
+  {
+    if ((choice = ppdFindMarkedChoice(ppd, "OutputBin")) != NULL)
+      keyword = _ppdCacheGetBin(pc, choice->choice);
+  }
+
+  if (keyword)
+    ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "output-bin", NULL, keyword);
+
+  color_attr_name = print_color_mode_sup ? "print-color-mode" : "output-mode";
+
+  if ((keyword = cupsGetOption("print-color-mode", num_options, options)) == NULL)
+  {
+    if ((choice = ppdFindMarkedChoice(ppd, "ColorModel")) != NULL)
+    {
+      if (!_cups_strcasecmp(choice->choice, "Gray"))
+       keyword = "monochrome";
+      else
+       keyword = "color";
+    }
+  }
+
+  if (keyword && !strcmp(keyword, "monochrome"))
+  {
+    if (ippContainsString(print_color_mode_sup, "auto-monochrome"))
+      keyword = "auto-monochrome";
+    else if (ippContainsString(print_color_mode_sup, "process-monochrome") && !ippContainsString(print_color_mode_sup, "monochrome"))
+      keyword = "process-monochrome";
+  }
+
+  if (keyword)
+    ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, color_attr_name, NULL, keyword);
+
+  if ((keyword = cupsGetOption("print-quality", num_options, options)) != NULL)
+    ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_ENUM, "print-quality", atoi(keyword));
+  else if ((choice = ppdFindMarkedChoice(ppd, "cupsPrintQuality")) != NULL)
+  {
+    if (!_cups_strcasecmp(choice->choice, "draft"))
+      ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_ENUM, "print-quality", IPP_QUALITY_DRAFT);
+    else if (!_cups_strcasecmp(choice->choice, "normal"))
+      ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_ENUM, "print-quality", IPP_QUALITY_NORMAL);
+    else if (!_cups_strcasecmp(choice->choice, "high"))
+      ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_ENUM, "print-quality", IPP_QUALITY_HIGH);
+  }
+
+  if ((keyword = cupsGetOption("sides", num_options, options)) != NULL)
+    ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "sides", NULL, keyword);
+  else if (pc->sides_option && (choice = ppdFindMarkedChoice(ppd, pc->sides_option)) != NULL)
+  {
+    if (!_cups_strcasecmp(choice->choice, pc->sides_1sided))
+      ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "sides", NULL, "one-sided");
+    else if (!_cups_strcasecmp(choice->choice, pc->sides_2sided_long))
+      ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "sides", NULL, "two-sided-long-edge");
+    if (!_cups_strcasecmp(choice->choice, pc->sides_2sided_short))
+      ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "sides", NULL, "two-sided-short-edge");
+  }
+
+ /*
+  * Copies...
+  */
+
+  if ((keyword = cupsGetOption("multiple-document-handling", num_options, options)) != NULL)
+  {
+    if (strstr(keyword, "uncollated"))
+      keyword = "false";
+    else
+      keyword = "true";
+  }
+  else if ((keyword = cupsGetOption("collate", num_options, options)) == NULL)
+    keyword = "true";
+
+  if (format)
+  {
+    if (!_cups_strcasecmp(format, "image/gif") ||
+       !_cups_strcasecmp(format, "image/jp2") ||
+       !_cups_strcasecmp(format, "image/jpeg") ||
+       !_cups_strcasecmp(format, "image/png") ||
+       !_cups_strcasecmp(format, "image/tiff") ||
+       !_cups_strncasecmp(format, "image/x-", 8))
+    {
+     /*
+      * Collation makes no sense for single page image formats...
+      */
+
+      keyword = "false";
+    }
+    else if (!_cups_strncasecmp(format, "image/", 6) ||
+            !_cups_strcasecmp(format, "application/vnd.cups-raster"))
+    {
+     /*
+      * Multi-page image formats will have copies applied by the upstream
+      * filters...
+      */
+
+      copies = 1;
+    }
+  }
+
+  if (doc_handling_sup)
+  {
+    if (!_cups_strcasecmp(keyword, "true"))
+      collate_str = "separate-documents-collated-copies";
+    else
+      collate_str = "separate-documents-uncollated-copies";
+
+    for (i = 0; i < doc_handling_sup->num_values; i ++)
+    {
+      if (!strcmp(doc_handling_sup->values[i].string.text, collate_str))
+      {
+       ippAddString(request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "multiple-document-handling", NULL, collate_str);
+       break;
+      }
+    }
+
+    if (i >= doc_handling_sup->num_values)
+      copies = 1;
+  }
+
+ /*
+  * Map finishing options...
+  */
+
+  num_finishings = _ppdCacheGetFinishingValues(pc, num_options, options, (int)(sizeof(finishings) / sizeof(finishings[0])), finishings);
+  if (num_finishings > 0)
+  {
+    ippAddIntegers(request, IPP_TAG_JOB, IPP_TAG_ENUM, "finishings", num_finishings, finishings);
+
+    if (copies > 1 && (keyword = cupsGetOption("job-impressions", num_options, options)) != NULL)
+    {
+     /*
+      * Send job-pages-per-set attribute to apply finishings correctly...
+      */
+
+      ippAddInteger(request, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-pages-per-set", atoi(keyword) / copies);
+    }
+  }
+
+  return (copies);
+}
+
+
 /*
  * '_ppdCacheCreateWithFile()' - Create PPD cache and mapping data from a
  *                               written file.
@@ -2466,6 +2782,604 @@ _ppdCacheWriteFile(
 }
 
 
+/*
+ * '_ppdCreateFromIPP()' - Create a PPD file describing the capabilities
+ *                         of an IPP printer.
+ */
+
+char *                                 /* O - PPD filename or NULL on error */
+_ppdCreateFromIPP(char   *buffer,      /* I - Filename buffer */
+                  size_t bufsize,      /* I - Size of filename buffer */
+                 ipp_t  *response)     /* I - Get-Printer-Attributes response */
+{
+  cups_file_t          *fp;            /* PPD file */
+  ipp_attribute_t      *attr,          /* xxx-supported */
+                       *defattr,       /* xxx-default */
+                       *x_dim, *y_dim; /* Media dimensions */
+  ipp_t                        *media_size;    /* Media size collection */
+  char                 make[256],      /* Make and model */
+                       *model,         /* Model name */
+                       ppdname[PPD_MAX_NAME];
+                                       /* PPD keyword */
+  int                  i, j,           /* Looping vars */
+                       count,          /* Number of values */
+                       bottom,         /* Largest bottom margin */
+                       left,           /* Largest left margin */
+                       right,          /* Largest right margin */
+                       top;            /* Largest top margin */
+  pwg_media_t          *pwg;           /* PWG media size */
+  int                  xres, yres;     /* Resolution values */
+  struct lconv         *loc = localeconv();
+                                       /* Locale data */
+
+
+ /*
+  * Range check input...
+  */
+
+  if (buffer)
+    *buffer = '\0';
+
+  if (!buffer || bufsize < 1 || !response)
+    return (NULL);
+
+ /*
+  * Open a temporary file for the PPD...
+  */
+
+  if ((fp = cupsTempFile2(buffer, (int)bufsize)) == NULL)
+    return (NULL);
+
+ /*
+  * Standard stuff for PPD file...
+  */
+
+  cupsFilePuts(fp, "*PPD-Adobe: \"4.3\"\n");
+  cupsFilePuts(fp, "*FormatVersion: \"4.3\"\n");
+  cupsFilePrintf(fp, "*FileVersion: \"%d.%d\"\n", CUPS_VERSION_MAJOR, CUPS_VERSION_MINOR);
+  cupsFilePuts(fp, "*LanguageVersion: English\n");
+  cupsFilePuts(fp, "*LanguageEncoding: ISOLatin1\n");
+  cupsFilePuts(fp, "*PSVersion: \"(3010.000) 0\"\n");
+  cupsFilePuts(fp, "*LanguageLevel: \"3\"\n");
+  cupsFilePuts(fp, "*FileSystem: False\n");
+  cupsFilePuts(fp, "*PCFileName: \"ippeve.ppd\"\n");
+
+  if ((attr = ippFindAttribute(response, "printer-make-and-model", IPP_TAG_TEXT)) != NULL)
+    strlcpy(make, ippGetString(attr, 0, NULL), sizeof(make));
+  else
+    strlcpy(make, "Unknown Printer", sizeof(make));
+
+  if (!_cups_strncasecmp(make, "Hewlett Packard ", 16) ||
+      !_cups_strncasecmp(make, "Hewlett-Packard ", 16))
+  {
+    model = make + 16;
+    strlcpy(make, "HP", sizeof(make));
+  }
+  else if ((model = strchr(make, ' ')) != NULL)
+    *model++ = '\0';
+  else
+    model = make;
+
+  cupsFilePrintf(fp, "*Manufacturer: \"%s\"\n", make);
+  cupsFilePrintf(fp, "*ModelName: \"%s\"\n", model);
+  cupsFilePrintf(fp, "*Product: \"(%s)\"\n", model);
+  cupsFilePrintf(fp, "*NickName: \"%s\"\n", model);
+  cupsFilePrintf(fp, "*ShortNickName: \"%s\"\n", model);
+
+  if ((attr = ippFindAttribute(response, "color-supported", IPP_TAG_BOOLEAN)) != NULL && ippGetBoolean(attr, 0))
+    cupsFilePuts(fp, "*ColorDevice: True\n");
+  else
+    cupsFilePuts(fp, "*ColorDevice: False\n");
+
+  cupsFilePrintf(fp, "*cupsVersion: %d.%d\n", CUPS_VERSION_MAJOR, CUPS_VERSION_MINOR);
+  cupsFilePuts(fp, "*cupsSNMPSupplies: False\n");
+  cupsFilePuts(fp, "*cupsLanguages: \"en\"\n");
+
+ /*
+  * Filters...
+  */
+
+  if ((attr = ippFindAttribute(response, "document-format-supported", IPP_TAG_MIMETYPE)) != NULL)
+  {
+    for (i = 0, count = ippGetCount(attr); i < count; i ++)
+    {
+      const char *format = ippGetString(attr, i, NULL);
+                                       /* PDL */
+
+      if (!_cups_strcasecmp(format, "application/pdf"))
+        cupsFilePuts(fp, "*cupsFilter2: \"application/vnd.cups-pdf application/pdf 10 -\"\n");
+      else if (!_cups_strcasecmp(format, "application/postscript"))
+        cupsFilePuts(fp, "*cupsFilter2: \"application/vnd.cups-postscript application/postscript 10 -\"\n");
+      else if (_cups_strcasecmp(format, "application/octet-stream") && _cups_strcasecmp(format, "application/vnd.hp-pcl") && _cups_strcasecmp(format, "text/plain"))
+        cupsFilePrintf(fp, "*cupsFilter2: \"%s %s 10 -\"\n", format, format);
+    }
+  }
+
+ /*
+  * PageSize/PageRegion/ImageableArea/PaperDimension
+  */
+
+  if ((attr = ippFindAttribute(response, "media-bottom-margin-supported", IPP_TAG_INTEGER)) != NULL)
+  {
+    for (i = 1, bottom = ippGetInteger(attr, 0), count = ippGetCount(attr); i < count; i ++)
+      if (ippGetInteger(attr, i) > bottom)
+        bottom = ippGetInteger(attr, i);
+  }
+  else
+    bottom = 1270;
+
+  if ((attr = ippFindAttribute(response, "media-left-margin-supported", IPP_TAG_INTEGER)) != NULL)
+  {
+    for (i = 1, left = ippGetInteger(attr, 0), count = ippGetCount(attr); i < count; i ++)
+      if (ippGetInteger(attr, i) > left)
+        left = ippGetInteger(attr, i);
+  }
+  else
+    left = 635;
+
+  if ((attr = ippFindAttribute(response, "media-right-margin-supported", IPP_TAG_INTEGER)) != NULL)
+  {
+    for (i = 1, right = ippGetInteger(attr, 0), count = ippGetCount(attr); i < count; i ++)
+      if (ippGetInteger(attr, i) > right)
+        right = ippGetInteger(attr, i);
+  }
+  else
+    right = 635;
+
+  if ((attr = ippFindAttribute(response, "media-top-margin-supported", IPP_TAG_INTEGER)) != NULL)
+  {
+    for (i = 1, top = ippGetInteger(attr, 0), count = ippGetCount(attr); i < count; i ++)
+      if (ippGetInteger(attr, i) > top)
+        top = ippGetInteger(attr, i);
+  }
+  else
+    top = 1270;
+
+  if ((defattr = ippFindAttribute(response, "media-col-default", IPP_TAG_BEGIN_COLLECTION)) != NULL)
+  {
+    if ((attr = ippFindAttribute(ippGetCollection(defattr, 0), "media-size", IPP_TAG_BEGIN_COLLECTION)) != NULL)
+    {
+      media_size = ippGetCollection(attr, 0);
+      x_dim      = ippFindAttribute(media_size, "x-dimension", IPP_TAG_INTEGER);
+      y_dim      = ippFindAttribute(media_size, "y-dimension", IPP_TAG_INTEGER);
+
+      if (x_dim && y_dim)
+      {
+        pwg = pwgMediaForSize(ippGetInteger(x_dim, 0), ippGetInteger(y_dim, 0));
+       strlcpy(ppdname, pwg->ppd, sizeof(ppdname));
+      }
+      else
+       strlcpy(ppdname, "Unknown", sizeof(ppdname));
+    }
+    else
+      strlcpy(ppdname, "Unknown", sizeof(ppdname));
+  }
+
+  if ((attr = ippFindAttribute(response, "media-size-supported", IPP_TAG_BEGIN_COLLECTION)) != NULL)
+  {
+    cupsFilePrintf(fp, "*OpenUI *PageSize: PickOne\n"
+                      "*OrderDependency: 10 AnySetup *PageSize\n"
+                       "*DefaultPageSize: %s\n", ppdname);
+    for (i = 0, count = ippGetCount(attr); i < count; i ++)
+    {
+      media_size = ippGetCollection(attr, i);
+      x_dim      = ippFindAttribute(media_size, "x-dimension", IPP_TAG_INTEGER);
+      y_dim      = ippFindAttribute(media_size, "y-dimension", IPP_TAG_INTEGER);
+
+      if (x_dim && y_dim)
+      {
+        char   twidth[256],            /* Width string */
+               tlength[256];           /* Length string */
+
+        pwg = pwgMediaForSize(ippGetInteger(x_dim, 0), ippGetInteger(y_dim, 0));
+
+        _cupsStrFormatd(twidth, twidth + sizeof(twidth), pwg->width * 72.0 / 2540.0, loc);
+        _cupsStrFormatd(tlength, tlength + sizeof(tlength), pwg->length * 72.0 / 2540.0, loc);
+
+        cupsFilePrintf(fp, "*PageSize %s: \"<</PageSize[%s %s]>>setpagedevice\"\n", pwg->ppd, twidth, tlength);
+      }
+    }
+    cupsFilePuts(fp, "*CloseUI: *PageSize\n");
+
+    cupsFilePrintf(fp, "*OpenUI *PageRegion: PickOne\n"
+                       "*OrderDependency: 10 AnySetup *PageRegion\n"
+                       "*DefaultPageRegion: %s\n", ppdname);
+    for (i = 0, count = ippGetCount(attr); i < count; i ++)
+    {
+      media_size = ippGetCollection(attr, i);
+      x_dim      = ippFindAttribute(media_size, "x-dimension", IPP_TAG_INTEGER);
+      y_dim      = ippFindAttribute(media_size, "y-dimension", IPP_TAG_INTEGER);
+
+      if (x_dim && y_dim)
+      {
+        char   twidth[256],            /* Width string */
+               tlength[256];           /* Length string */
+
+        pwg = pwgMediaForSize(ippGetInteger(x_dim, 0), ippGetInteger(y_dim, 0));
+
+        _cupsStrFormatd(twidth, twidth + sizeof(twidth), pwg->width * 72.0 / 2540.0, loc);
+        _cupsStrFormatd(tlength, tlength + sizeof(tlength), pwg->length * 72.0 / 2540.0, loc);
+
+        cupsFilePrintf(fp, "*PageRegion %s: \"<</PageSize[%s %s]>>setpagedevice\"\n", pwg->ppd, twidth, tlength);
+      }
+    }
+    cupsFilePuts(fp, "*CloseUI: *PageRegion\n");
+
+    cupsFilePrintf(fp, "*DefaultImageableArea: %s\n"
+                      "*DefaultPaperDimension: %s\n", ppdname, ppdname);
+    for (i = 0, count = ippGetCount(attr); i < count; i ++)
+    {
+      media_size = ippGetCollection(attr, i);
+      x_dim      = ippFindAttribute(media_size, "x-dimension", IPP_TAG_INTEGER);
+      y_dim      = ippFindAttribute(media_size, "y-dimension", IPP_TAG_INTEGER);
+
+      if (x_dim && y_dim)
+      {
+        char   tleft[256],             /* Left string */
+               tbottom[256],           /* Bottom string */
+               tright[256],            /* Right string */
+               ttop[256],              /* Top string */
+               twidth[256],            /* Width string */
+               tlength[256];           /* Length string */
+
+        pwg = pwgMediaForSize(ippGetInteger(x_dim, 0), ippGetInteger(y_dim, 0));
+
+        _cupsStrFormatd(tleft, tleft + sizeof(tleft), left * 72.0 / 2540.0, loc);
+        _cupsStrFormatd(tbottom, tbottom + sizeof(tbottom), bottom * 72.0 / 2540.0, loc);
+        _cupsStrFormatd(tright, tright + sizeof(tright), (pwg->width - right) * 72.0 / 2540.0, loc);
+        _cupsStrFormatd(ttop, ttop + sizeof(ttop), (pwg->length - top) * 72.0 / 2540.0, loc);
+        _cupsStrFormatd(twidth, twidth + sizeof(twidth), pwg->width * 72.0 / 2540.0, loc);
+        _cupsStrFormatd(tlength, tlength + sizeof(tlength), pwg->length * 72.0 / 2540.0, loc);
+
+        cupsFilePrintf(fp, "*ImageableArea %s: \"%s %s %s %s\"\n", pwg->ppd, tleft, tbottom, tright, ttop);
+        cupsFilePrintf(fp, "*PaperDimension %s: \"%s %s\"\n", pwg->ppd, twidth, tlength);
+      }
+    }
+  }
+
+ /*
+  * InputSlot...
+  */
+
+  if ((attr = ippFindAttribute(ippGetCollection(defattr, 0), "media-source", IPP_TAG_KEYWORD)) != NULL)
+    pwg_ppdize_name(ippGetString(attr, 0, NULL), ppdname, sizeof(ppdname));
+  else
+    strlcpy(ppdname, "Unknown", sizeof(ppdname));
+
+  if ((attr = ippFindAttribute(response, "media-source-supported", IPP_TAG_KEYWORD)) != NULL && (count = ippGetCount(attr)) > 1)
+  {
+    static const char * const sources[][2] =
+    {
+      { "Auto", "Automatic" },
+      { "Main", "Main" },
+      { "Alternate", "Alternate" },
+      { "LargeCapacity", "Large Capacity" },
+      { "Manual", "Manual" },
+      { "Envelope", "Envelope" },
+      { "Disc", "Disc" },
+      { "Photo", "Photo" },
+      { "Hagaki", "Hagaki" },
+      { "MainRoll", "Main Roll" },
+      { "AlternateRoll", "Alternate Roll" },
+      { "Top", "Top" },
+      { "Middle", "Middle" },
+      { "Bottom", "Bottom" },
+      { "Side", "Side" },
+      { "Left", "Left" },
+      { "Right", "Right" },
+      { "Center", "Center" },
+      { "Rear", "Rear" },
+      { "ByPassTray", "Multipurpose" },
+      { "Tray1", "Tray 1" },
+      { "Tray2", "Tray 2" },
+      { "Tray3", "Tray 3" },
+      { "Tray4", "Tray 4" },
+      { "Tray5", "Tray 5" },
+      { "Tray6", "Tray 6" },
+      { "Tray7", "Tray 7" },
+      { "Tray8", "Tray 8" },
+      { "Tray9", "Tray 9" },
+      { "Tray10", "Tray 10" },
+      { "Tray11", "Tray 11" },
+      { "Tray12", "Tray 12" },
+      { "Tray13", "Tray 13" },
+      { "Tray14", "Tray 14" },
+      { "Tray15", "Tray 15" },
+      { "Tray16", "Tray 16" },
+      { "Tray17", "Tray 17" },
+      { "Tray18", "Tray 18" },
+      { "Tray19", "Tray 19" },
+      { "Tray20", "Tray 20" },
+      { "Roll1", "Roll 1" },
+      { "Roll2", "Roll 2" },
+      { "Roll3", "Roll 3" },
+      { "Roll4", "Roll 4" },
+      { "Roll5", "Roll 5" },
+      { "Roll6", "Roll 6" },
+      { "Roll7", "Roll 7" },
+      { "Roll8", "Roll 8" },
+      { "Roll9", "Roll 9" },
+      { "Roll10", "Roll 10" }
+    };
+
+    cupsFilePrintf(fp, "*OpenUI *InputSlot: PickOne\n"
+                       "*OrderDependency: 10 AnySetup *InputSlot\n"
+                       "*DefaultInputSlot: %s\n", ppdname);
+    for (i = 0, count = ippGetCount(attr); i < count; i ++)
+    {
+      pwg_ppdize_name(ippGetString(attr, i, NULL), ppdname, sizeof(ppdname));
+
+      for (j = 0; j < (int)(sizeof(sources) / sizeof(sources[0])); j ++)
+        if (!strcmp(sources[j][0], ppdname))
+       {
+         cupsFilePrintf(fp, "*InputSlot %s/%s: \"<</MediaPosition %d>>setpagedevice\"\n", ppdname, sources[j][1], j);
+         break;
+       }
+    }
+    cupsFilePuts(fp, "*CloseUI: *InputSlot\n");
+  }
+
+ /*
+  * MediaType...
+  */
+
+  if ((attr = ippFindAttribute(ippGetCollection(defattr, 0), "media-type", IPP_TAG_KEYWORD)) != NULL)
+    pwg_ppdize_name(ippGetString(attr, 0, NULL), ppdname, sizeof(ppdname));
+  else
+    strlcpy(ppdname, "Unknown", sizeof(ppdname));
+
+  if ((attr = ippFindAttribute(response, "media-type-supported", IPP_TAG_KEYWORD)) != NULL && (count = ippGetCount(attr)) > 1)
+  {
+    static const char * const types[][2] =
+    {                                  /* Media type strings (far from complete) */
+      { "Auto", "Automatic" },
+      { "Cardstock", "Cardstock" },
+      { "Disc", "CD/DVD/Bluray" },
+      { "Envelope", "Envelope" },
+      { "Labels", "Label" },
+      { "Other", "Other" },
+      { "Photographic", "Photo" },
+      { "PhotographicGlossy", "Glossy Photo" },
+      { "PhotographicHighGloss", "High-Gloss Photo" },
+      { "PhotographicMatte", "Matte Photo" },
+      { "PhotographicSatin", "Satin Photo" },
+      { "PhotographicSemiGloss", "Semi-Gloss Photo" },
+      { "Stationery", "Plain Paper" },
+      { "StationeryLetterhead", "Letterhead" },
+      { "Transparency", "Transparency" }
+    };
+
+    cupsFilePrintf(fp, "*OpenUI *MediaType: PickOne\n"
+                       "*OrderDependency: 10 AnySetup *MediaType\n"
+                       "*DefaultMediaType: %s\n", ppdname);
+    for (i = 0, count = ippGetCount(attr); i < count; i ++)
+    {
+      pwg_ppdize_name(ippGetString(attr, i, NULL), ppdname, sizeof(ppdname));
+
+      for (j = 0; j < (int)(sizeof(types) / sizeof(types[0])); j ++)
+        if (!strcmp(types[j][0], ppdname))
+       {
+         cupsFilePrintf(fp, "*MediaType %s/%s: \"<</MediaType(%s)>>setpagedevice\"\n", ppdname, types[j][1], ppdname);
+         break;
+       }
+
+      if (j >= (int)(sizeof(types) / sizeof(types[0])))
+       cupsFilePrintf(fp, "*MediaType %s: \"<</MediaType(%s)>>setpagedevice\"\n", ppdname, ppdname);
+
+    }
+    cupsFilePuts(fp, "*CloseUI: *MediaType\n");
+  }
+
+ /*
+  * ColorModel...
+  */
+
+  if ((attr = ippFindAttribute(response, "pwg-raster-document-type-supported", IPP_TAG_KEYWORD)) == NULL)
+    attr = ippFindAttribute(response, "print-color-mode-supported", IPP_TAG_KEYWORD);
+
+  if (attr)
+  {
+    const char *default_color = NULL;  /* Default */
+
+    for (i = 0, count = ippGetCount(attr); i < count; i ++)
+    {
+      const char *keyword = ippGetString(attr, i, NULL);
+                                       /* Keyword for color/bit depth */
+
+      if (!strcmp(keyword, "black_1") || !strcmp(keyword, "bi-level") || !strcmp(keyword, "process-bi-level"))
+      {
+        if (!default_color)
+         cupsFilePuts(fp, "*OpenUI *ColorModel/Color Mode: PickOne\n"
+                          "*OrderDependency: 10 AnySetup *ColorModel\n");
+
+        cupsFilePuts(fp, "*ColorModel FastGray/Fast Grayscale: \"<</cupsColorSpace 3/cupsBitsPerColor 1/cupsColorOrder 0/cupsCompression 0>>setpagedevice\"\n");
+
+        if (!default_color)
+         default_color = "FastGray";
+      }
+      else if (!strcmp(keyword, "sgray_8") || !strcmp(keyword, "monochrome") || !strcmp(keyword, "process-monochrome"))
+      {
+        if (!default_color)
+         cupsFilePuts(fp, "*OpenUI *ColorModel/Color Mode: PickOne\n"
+                          "*OrderDependency: 10 AnySetup *ColorModel\n");
+
+        cupsFilePuts(fp, "*ColorModel Gray/Grayscale: \"<</cupsColorSpace 18/cupsBitsPerColor 8/cupsColorOrder 0/cupsCompression 0>>setpagedevice\"\n");
+
+        if (!default_color || !strcmp(default_color, "FastGray"))
+         default_color = "Gray";
+      }
+      else if (!strcmp(keyword, "srgb_8") || !strcmp(keyword, "color"))
+      {
+        if (!default_color)
+         cupsFilePuts(fp, "*OpenUI *ColorModel/Color Mode: PickOne\n"
+                          "*OrderDependency: 10 AnySetup *ColorModel\n");
+
+        cupsFilePuts(fp, "*ColorModel RGB/Color: \"<</cupsColorSpace 19/cupsBitsPerColor 8/cupsColorOrder 0/cupsCompression 0>>setpagedevice\"\n");
+
+       default_color = "RGB";
+      }
+    }
+
+    if (default_color)
+    {
+      cupsFilePrintf(fp, "*DefaultColorModel: %s\n", default_color);
+      cupsFilePuts(fp, "*CloseUI: *ColorModel\n");
+    }
+  }
+
+ /*
+  * Duplex...
+  */
+
+  if ((attr = ippFindAttribute(response, "sides-supported", IPP_TAG_KEYWORD)) != NULL && ippContainsString(attr, "two-sided-long-edge"))
+  {
+    cupsFilePuts(fp, "*OpenUI *Duplex/2-Sided Printing: PickOne\n"
+                     "*OrderDependency: 10 AnySetup *Duplex\n"
+                     "*DefaultDuplex: None\n"
+                     "*Duplex None/Off (1-Sided): \"<</Duplex false>>setpagedevice\"\n"
+                     "*Duplex DuplexNoTumble/Long-Edge (Portrait): \"<</Duplex true/Tumble false>>setpagedevice\"\n"
+                     "*Duplex DuplexTumble/Short-Edge (Landscape): \"<</Duplex true/Tumble true>>setpagedevice\"\n"
+                     "*CloseUI: *Duplex\n");
+
+    if ((attr = ippFindAttribute(response, "pwg-raster-document-sheet-back", IPP_TAG_KEYWORD)) != NULL)
+    {
+      const char *keyword = ippGetString(attr, 0, NULL);
+                                       /* Keyword value */
+
+      if (!strcmp(keyword, "flipped"))
+        cupsFilePuts(fp, "*cupsBackSide: Flipped\n");
+      else if (!strcmp(keyword, "manual-tumble"))
+        cupsFilePuts(fp, "*cupsBackSide: ManualTumble\n");
+      else if (!strcmp(keyword, "normal"))
+        cupsFilePuts(fp, "*cupsBackSide: Normal\n");
+      else
+        cupsFilePuts(fp, "*cupsBackSide: Rotated\n");
+    }
+    else if ((attr = ippFindAttribute(response, "urf-supported", IPP_TAG_KEYWORD)) != NULL)
+    {
+      for (i = 0, count = ippGetCount(attr); i < count; i ++)
+      {
+       const char *dm = ippGetString(attr, i, NULL);
+                                         /* DM value */
+
+       if (!_cups_strcasecmp(dm, "DM1"))
+       {
+         cupsFilePuts(fp, "*cupsBackSide: Normal\n");
+         break;
+       }
+       else if (!_cups_strcasecmp(dm, "DM2"))
+       {
+         cupsFilePuts(fp, "*cupsBackSide: Flipped\n");
+         break;
+       }
+       else if (!_cups_strcasecmp(dm, "DM3"))
+       {
+         cupsFilePuts(fp, "*cupsBackSide: Rotated\n");
+         break;
+       }
+       else if (!_cups_strcasecmp(dm, "DM4"))
+       {
+         cupsFilePuts(fp, "*cupsBackSide: ManualTumble\n");
+         break;
+       }
+      }
+    }
+  }
+
+ /*
+  * cupsPrintQuality and DefaultResolution...
+  */
+
+  if ((attr = ippFindAttribute(response, "pwg-raster-document-resolution-supported", IPP_TAG_RESOLUTION)) != NULL)
+  {
+    count = ippGetCount(attr);
+
+    pwg_ppdize_resolution(attr, count / 2, &xres, &yres, ppdname, sizeof(ppdname));
+    cupsFilePrintf(fp, "*DefaultResolution: %s\n", ppdname);
+
+    cupsFilePuts(fp, "*OpenUI *cupsPrintQuality/Print Quality: PickOne\n"
+                     "*OrderDependency: 10 AnySetup *cupsPrintQuality\n"
+                     "*DefaultcupsPrintQuality: Normal\n");
+    if (count > 2)
+    {
+      pwg_ppdize_resolution(attr, 0, &xres, &yres, NULL, 0);
+      cupsFilePrintf(fp, "*cupsPrintQuality Draft: \"<</HWResolution[%d %d]>>setpagedevice\"\n", xres, yres);
+    }
+    pwg_ppdize_resolution(attr, count / 2, &xres, &yres, NULL, 0);
+    cupsFilePrintf(fp, "*cupsPrintQuality Normal: \"<</HWResolution[%d %d]>>setpagedevice\"\n", xres, yres);
+    if (count > 1)
+    {
+      pwg_ppdize_resolution(attr, count - 1, &xres, &yres, NULL, 0);
+      cupsFilePrintf(fp, "*cupsPrintQuality High: \"<</HWResolution[%d %d]>>setpagedevice\"\n", xres, yres);
+    }
+
+    cupsFilePuts(fp, "*CloseUI: *cupsPrintQuality\n");
+  }
+  else if ((attr = ippFindAttribute(response, "urf-supported", IPP_TAG_KEYWORD)) != NULL)
+  {
+    int lowdpi = 0, hidpi = 0;         /* Lower and higher resolution */
+
+    for (i = 0, count = ippGetCount(attr); i < count; i ++)
+    {
+      const char *rs = ippGetString(attr, i, NULL);
+                                       /* RS value */
+
+      if (_cups_strncasecmp(rs, "RS", 2))
+        continue;
+
+      lowdpi = atoi(rs + 2);
+      if ((rs = strrchr(rs, '-')) != NULL)
+        hidpi = atoi(rs + 1);
+      else
+        hidpi = lowdpi;
+      break;
+    }
+
+    if (lowdpi == 0)
+    {
+     /*
+      * Invalid "urf-supported" value...
+      */
+
+      cupsFilePuts(fp, "*DefaultResolution: 300dpi\n");
+    }
+    else
+    {
+     /*
+      * Generate print qualities based on low and high DPIs...
+      */
+
+      cupsFilePrintf(fp, "*DefaultResolution: %ddpi\n", lowdpi);
+
+      cupsFilePuts(fp, "*OpenUI *cupsPrintQuality/Print Quality: PickOne\n"
+                      "*OrderDependency: 10 AnySetup *cupsPrintQuality\n"
+                      "*DefaultcupsPrintQuality: Normal\n");
+      if ((lowdpi & 1) == 0)
+       cupsFilePrintf(fp, "*cupsPrintQuality Draft: \"<</HWResolution[%d %d]>>setpagedevice\"\n", lowdpi, lowdpi / 2);
+      cupsFilePrintf(fp, "*cupsPrintQuality Normal: \"<</HWResolution[%d %d]>>setpagedevice\"\n", lowdpi, lowdpi);
+      if (hidpi > lowdpi)
+       cupsFilePrintf(fp, "*cupsPrintQuality High: \"<</HWResolution[%d %d]>>setpagedevice\"\n", hidpi, hidpi);
+      cupsFilePuts(fp, "*CloseUI: *cupsPrintQuality\n");
+    }
+  }
+  else if ((attr = ippFindAttribute(response, "printer-resolution-default", IPP_TAG_RESOLUTION)) != NULL)
+  {
+    pwg_ppdize_resolution(attr, 0, &xres, &yres, ppdname, sizeof(ppdname));
+    cupsFilePrintf(fp, "*DefaultResolution: %s\n", ppdname);
+  }
+  else
+    cupsFilePuts(fp, "*DefaultResolution: 300dpi\n");
+
+ /*
+  * Close up and return...
+  */
+
+  cupsFileClose(fp);
+
+  return (buffer);
+}
+
+
 /*
  * '_pwgInputSlotForSource()' - Get the InputSlot name for the given PWG
  *                              media-source.
@@ -2677,6 +3591,41 @@ pwg_ppdize_name(const char *ipp, /* I - IPP keyword */
 }
 
 
+
+/*
+ * 'pwg_ppdize_resolution()' - Convert PWG resolution values to PPD values.
+ */
+
+static void
+pwg_ppdize_resolution(
+    ipp_attribute_t *attr,             /* I - Attribute to convert */
+    int             element,           /* I - Element to convert */
+    int             *xres,             /* O - X resolution in DPI */
+    int             *yres,             /* O - Y resolution in DPI */
+    char            *name,             /* I - Name buffer */
+    size_t          namesize)          /* I - Size of name buffer */
+{
+  ipp_res_t units;                     /* Units for resolution */
+
+
+  *xres = ippGetResolution(attr, element, yres, &units);
+
+  if (units == IPP_RES_PER_CM)
+  {
+    *xres = (int)(*xres * 2.54);
+    *yres = (int)(*yres * 2.54);
+  }
+
+  if (name && namesize > 4)
+  {
+    if (*xres == *yres)
+      snprintf(name, namesize, "%ddpi", *xres);
+    else
+      snprintf(name, namesize, "%dx%ddpi", *xres, *yres);
+  }
+}
+
+
 /*
  * 'pwg_unppdize_name()' - Convert a PPD keyword to a lowercase IPP keyword.
  */
@@ -2731,5 +3680,5 @@ pwg_unppdize_name(const char *ppd,        /* I - PPD keyword */
 
 
 /*
- * End of "$Id: ppd-cache.c 12434 2015-01-28 16:29:06Z msweet $".
+ * End of "$Id: ppd-cache.c 12722 2015-06-08 22:00:19Z msweet $".
  */
index c1376d2cb9f79bec4b168bfa6abc3275eccf8a80..f6f63294f6b6ac04a4baf01942bcf6c73a3c06db 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: ppd-private.h 11558 2014-02-06 18:33:34Z msweet $"
+ * "$Id: ppd-private.h 12722 2015-06-08 22:00:19Z msweet $"
  *
  * Private PPD definitions for CUPS.
  *
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2015 by Apple Inc.
  * Copyright 1997-2007 by Easy Software Products, all rights reserved.
  *
  * These coded instructions, statements, and computer programs are the
@@ -49,7 +49,7 @@ extern "C" {
  * Constants...
  */
 
-#  define _PPD_CACHE_VERSION   6       /* Version number in cache file */
+#  define _PPD_CACHE_VERSION   7       /* Version number in cache file */
 
 
 /*
@@ -155,6 +155,7 @@ struct _ppd_cache_s                 /**** PPD cache and PWG conversion data ****/
  * Prototypes...
  */
 
+extern int             _cupsConvertOptions(ipp_t *request, ppd_file_t *ppd, _ppd_cache_t *pc, ipp_attribute_t *media_col_sup, ipp_attribute_t *doc_handling_sup, ipp_attribute_t *print_color_mode_sup, const char *user, const char *format, int copies, int num_options, cups_option_t *options);
 extern _ppd_cache_t    *_ppdCacheCreateWithFile(const char *filename,
                                                 ipp_t **attrs);
 extern _ppd_cache_t    *_ppdCacheCreateWithPPD(ppd_file_t *ppd);
@@ -187,6 +188,7 @@ extern const char   *_ppdCacheGetType(_ppd_cache_t *pc,
                                          const char *media_type);
 extern int             _ppdCacheWriteFile(_ppd_cache_t *pc,
                                           const char *filename, ipp_t *attrs);
+extern char            *_ppdCreateFromIPP(char *buffer, size_t bufsize, ipp_t *response);
 extern void            _ppdFreeLanguages(cups_array_t *languages);
 extern cups_encoding_t _ppdGetEncoding(const char *name);
 extern cups_array_t    *_ppdGetLanguages(ppd_file_t *ppd);
@@ -221,5 +223,5 @@ extern const char   *_pwgPageSizeForMedia(pwg_media_t *media,
 #endif /* !_CUPS_PPD_PRIVATE_H_ */
 
 /*
- * End of "$Id: ppd-private.h 11558 2014-02-06 18:33:34Z msweet $".
+ * End of "$Id: ppd-private.h 12722 2015-06-08 22:00:19Z msweet $".
  */
index fc453a6499086f1b31fa8faa77e5d2f60e0913a4..1f64fe55efe8e5663912cd23740ccdf85513a94a 100644 (file)
@@ -14,7 +14,7 @@
 *%
 *% Copyright 2007-2010 by Apple Inc.
 *% Copyright 2002-2006 by Easy Software Products.
-*% 
+*%
 *% These coded instructions, statements, and computer programs are the
 *% property of Apple Inc. and are protected by Federal copyright
 *% law.  Distribution and use rights are outlined in the file "LICENSE.txt"
@@ -22,7 +22,7 @@
 *% file is missing or damaged, see the license at "http://www.cups.org/".
 *FormatVersion:        "4.3"
 *FileVersion:  "1.3"
-*LanguageVersion: English 
+*LanguageVersion: English
 *LanguageEncoding: ISOLatin1
 *PCFileName:   "TEST.PPD"
 *Manufacturer: "ESP"
 *fr_CA.PageRegion A4/French Canadian A4: ""
 *fr_CA.PageRegion Env10/French Canadian #10 Envelope: ""
 
-*DefaultImageableArea: Letter 
+*DefaultImageableArea: Letter
 *ImageableArea Letter: "18 36 594 756"
 *ImageableArea Letter.Banner:  "18 0 594 792"
 *ImageableArea Letter.Fullbleed:       "0 0 612 792"
 *MediaType Transparency/Transparency Film: "MediaType=Transparency"
 *CloseUI: *MediaType
 
+*OpenUI *OutputBin/Output Tray: PickOne
+*OrderDependency: 25 AnySetup *OutputBin
+*DefaultOutputBin: Tray1
+*OutputBin Auto/Automatic Tray: "OutputBin=Auto"
+*OutputBin Tray1/Tray 1: "OutputBin=Tray1"
+*OutputBin Tray2/Tray 2: "OutputBin=Tray2"
+*OutputBin MainTray/Main Tray: "OutputBin=MainTray"
+*CloseUI: *OutputBin
+
 *OpenUI *Duplex/2-Sided Printing: PickOne
 *OrderDependency: 10 DocumentSetup *Duplex
 *DefaultDuplex: None
index 16e52c3e69b084147a4423771c4316a962fc8cac..61db0807bc1d7f331d47e9c43f7a6930de5f2597 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: testfile.c 12578 2015-03-30 19:07:29Z msweet $"
+ * "$Id: testfile.c 12577 2015-03-30 19:07:17Z msweet $"
  *
  * File test program for CUPS.
  *
@@ -825,5 +825,5 @@ read_write_tests(int compression)   /* I - Use compression? */
 
 
 /*
- * End of "$Id: testfile.c 12578 2015-03-30 19:07:29Z msweet $".
+ * End of "$Id: testfile.c 12577 2015-03-30 19:07:17Z msweet $".
  */
index cd8cb5e374d5727eaacbe659bd8752ba64830e42..cb5345ff3d2951b150737debeb918705d78a03a9 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: testhttp.c 12028 2014-07-15 14:01:27Z msweet $"
+ * "$Id: testhttp.c 12678 2015-05-28 19:09:48Z msweet $"
  *
  * HTTP test program for CUPS.
  *
@@ -645,7 +645,6 @@ main(int  argc,                             /* I - Number of command-line arguments */
 
         if (lcreds && cupsArrayCount(creds) == cupsArrayCount(lcreds))
         {
-          int                  i;
           http_credential_t    *cred, *lcred;
 
           for (i = 1, cred = (http_credential_t *)cupsArrayFirst(creds), lcred = (http_credential_t *)cupsArrayFirst(lcreds);
@@ -890,5 +889,5 @@ main(int  argc,                             /* I - Number of command-line arguments */
 
 
 /*
- * End of "$Id: testhttp.c 12028 2014-07-15 14:01:27Z msweet $".
+ * End of "$Id: testhttp.c 12678 2015-05-28 19:09:48Z msweet $".
  */
index d858106181aa189484fe3dd13de24531c0194a5b..dbd896e3fec2f91290b3ad49aad0daf2a63c1876 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: testppd.c 12604 2015-05-06 01:43:05Z msweet $"
+ * "$Id: testppd.c 12603 2015-05-06 01:42:51Z msweet $"
  *
  * PPD test program for CUPS.
  *
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2015 by Apple Inc.
  * Copyright 1997-2006 by Easy Software Products.
  *
  * These coded instructions, statements, and computer programs are the
@@ -51,6 +51,11 @@ static const char    *default_code =
                        "%%EndFeature\n"
                        "} stopped cleartomark\n"
                        "[{\n"
+                       "%%BeginFeature: *OutputBin Tray1\n"
+                       "OutputBin=Tray1\n"
+                       "%%EndFeature\n"
+                       "} stopped cleartomark\n"
+                       "[{\n"
                        "%%BeginFeature: *MediaType Plain\n"
                        "MediaType=Plain\n"
                        "%%EndFeature\n"
@@ -80,6 +85,11 @@ static const char    *custom_code =
                        "%%EndFeature\n"
                        "} stopped cleartomark\n"
                        "[{\n"
+                       "%%BeginFeature: *OutputBin Tray1\n"
+                       "OutputBin=Tray1\n"
+                       "%%EndFeature\n"
+                       "} stopped cleartomark\n"
+                       "[{\n"
                        "%%BeginFeature: *IntOption None\n"
                        "%%EndFeature\n"
                        "} stopped cleartomark\n"
@@ -853,6 +863,47 @@ main(int  argc,                            /* I - Number of command-line arguments */
       status ++;
     }
   }
+  else if (!strncmp(argv[1], "ipp://", 6) || !strncmp(argv[1], "ipps://", 7))
+  {
+   /*
+    * ipp://... or ipps://...
+    */
+
+    http_t     *http;                  /* Connection to printer */
+    ipp_t      *request,               /* Get-Printer-Attributes request */
+               *response;              /* Get-Printer-Attributes response */
+    char       scheme[32],             /* URI scheme */
+               userpass[256],          /* Username:password */
+               host[256],              /* Hostname */
+               resource[256];          /* Resource path */
+    int                port;                   /* Port number */
+
+    if (httpSeparateURI(HTTP_URI_CODING_ALL, argv[1], scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK)
+    {
+      printf("Bad URI \"%s\".\n", argv[1]);
+      return (1);
+    }
+
+    http = httpConnect2(host, port, NULL, AF_UNSPEC, !strcmp(scheme, "ipps") ? HTTP_ENCRYPTION_ALWAYS : HTTP_ENCRYPTION_IF_REQUESTED, 1, 30000, NULL);
+    if (!http)
+    {
+      printf("Unable to connect to \"%s:%d\": %s\n", host, port, cupsLastErrorString());
+      return (1);
+    }
+
+    request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
+    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, argv[1]);
+    response = cupsDoRequest(http, request, resource);
+
+    if (_ppdCreateFromIPP(buffer, sizeof(buffer), response))
+      printf("Created PPD: %s\n", buffer);
+    else
+      puts("Unable to create PPD.");
+
+    ippDelete(response);
+    httpClose(http);
+    return (0);
+  }
   else
   {
     const char *filename;              /* PPD filename */
@@ -1119,5 +1170,5 @@ main(int  argc,                           /* I - Number of command-line arguments */
 
 
 /*
- * End of "$Id: testppd.c 12604 2015-05-06 01:43:05Z msweet $".
+ * End of "$Id: testppd.c 12603 2015-05-06 01:42:51Z msweet $".
  */
index 02a44045dad9e1974e37a71cec00ae249e511a98..377919ddaf1cbf3ad55f2b916f0cf0ef6054746a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: tls-darwin.c 12481 2015-02-03 12:45:14Z msweet $"
+ * "$Id: tls-darwin.c 12675 2015-05-28 01:14:32Z msweet $"
  *
  * TLS support code for CUPS on OS X.
  *
 extern char **environ;
 
 
-/*
- * Test define - set to 1 to use SSLSetEnabledCiphers.  Currently disabled (0)
- * because of <rdar://problem/18707430>.
- */
-
-#define USE_SET_ENABLED_CIPHERS 0
-
-
 /*
  * Local globals...
  */
@@ -49,8 +41,8 @@ static char           *tls_keypath = NULL;
                                        /* Server cert keychain path */
 static _cups_mutex_t   tls_mutex = _CUPS_MUTEX_INITIALIZER;
                                        /* Mutex for keychain/certs */
-static int             tls_options = 0;/* Options for TLS connections */
 #endif /* HAVE_SECKEYCHAINOPEN */
+static int             tls_options = -1;/* Options for TLS connections */
 
 
 /*
@@ -1017,7 +1009,14 @@ _httpTLSStart(http_t *http)              /* I - HTTP connection */
   http_credential_t    *credential;    /* Credential data */
 
 
-  DEBUG_printf(("7_httpTLSStart(http=%p)", http));
+  DEBUG_printf(("3_httpTLSStart(http=%p)", http));
+
+  if (tls_options < 0)
+  {
+    DEBUG_puts("4_httpTLSStart: Setting defaults.");
+    _cupsSetDefaults();
+    DEBUG_printf(("4_httpTLSStart: tls_options=%x", tls_options));
+  }
 
 #ifdef HAVE_SECKEYCHAINOPEN
   if (http->mode == _HTTP_MODE_SERVER && !tls_keychain)
@@ -1061,11 +1060,20 @@ _httpTLSStart(http_t *http)             /* I - HTTP connection */
 
   if (!error)
   {
-    error = SSLSetProtocolVersionMin(http->tls, (tls_options & _HTTP_TLS_ALLOW_SSL3) ? kSSLProtocol3 : kTLSProtocol1);
-    DEBUG_printf(("4_httpTLSStart: SSLSetProtocolVersionMin, error=%d", (int)error));
+    SSLProtocol minProtocol;
+
+    if (tls_options & _HTTP_TLS_DENY_TLS10)
+      minProtocol = kTLSProtocol11;
+    else if (tls_options & _HTTP_TLS_ALLOW_SSL3)
+      minProtocol = kSSLProtocol3;
+    else
+      minProtocol = kTLSProtocol1;
+
+    error = SSLSetProtocolVersionMin(http->tls, minProtocol);
+    DEBUG_printf(("4_httpTLSStart: SSLSetProtocolVersionMin(%d), error=%d", minProtocol, (int)error));
   }
 
-#  if USE_SET_ENABLED_CIPHERS
+#  if HAVE_SSLSETENABLEDCIPHERS
   if (!error)
   {
     SSLCipherSuite     supported[100]; /* Supported cipher suites */
@@ -1130,6 +1138,7 @@ _httpTLSStart(http_t *http)               /* I - HTTP connection */
          case TLS_RSA_PSK_WITH_NULL_SHA256 :
          case TLS_RSA_PSK_WITH_NULL_SHA384 :
          case SSL_RSA_WITH_DES_CBC_MD5 :
+             DEBUG_printf(("4_httpTLSStart: Excluding insecure cipher suite %d", supported[i]));
              break;
 
           /* RC4 cipher suites that should only be used as a last resort */
@@ -1144,8 +1153,52 @@ _httpTLSStart(http_t *http)              /* I - HTTP connection */
          case TLS_RSA_PSK_WITH_RC4_128_SHA :
              if (tls_options & _HTTP_TLS_ALLOW_RC4)
                enabled[num_enabled ++] = supported[i];
+             else
+               DEBUG_printf(("4_httpTLSStart: Excluding RC4 cipher suite %d", supported[i]));
              break;
 
+          /* DH/DHE cipher suites that are problematic with parameters < 1024 bits */
+          case TLS_DH_DSS_WITH_AES_128_CBC_SHA :
+          case TLS_DH_RSA_WITH_AES_128_CBC_SHA :
+          case TLS_DHE_DSS_WITH_AES_128_CBC_SHA :
+          case TLS_DHE_RSA_WITH_AES_128_CBC_SHA :
+          case TLS_DH_DSS_WITH_AES_256_CBC_SHA :
+          case TLS_DH_RSA_WITH_AES_256_CBC_SHA :
+          case TLS_DHE_DSS_WITH_AES_256_CBC_SHA :
+          case TLS_DHE_RSA_WITH_AES_256_CBC_SHA :
+          case TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA :
+          case TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA :
+//          case TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA :
+          case TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA :
+          case TLS_DH_DSS_WITH_AES_128_CBC_SHA256 :
+          case TLS_DH_RSA_WITH_AES_128_CBC_SHA256 :
+          case TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 :
+          case TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 :
+          case TLS_DH_DSS_WITH_AES_256_CBC_SHA256 :
+          case TLS_DH_RSA_WITH_AES_256_CBC_SHA256 :
+          case TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 :
+          case TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 :
+          case TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA :
+          case TLS_DHE_PSK_WITH_AES_128_CBC_SHA :
+          case TLS_DHE_PSK_WITH_AES_256_CBC_SHA :
+//          case TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 :
+//          case TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 :
+          case TLS_DH_RSA_WITH_AES_128_GCM_SHA256 :
+          case TLS_DH_RSA_WITH_AES_256_GCM_SHA384 :
+//          case TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 :
+//          case TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 :
+          case TLS_DH_DSS_WITH_AES_128_GCM_SHA256 :
+          case TLS_DH_DSS_WITH_AES_256_GCM_SHA384 :
+          case TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 :
+          case TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 :
+          case TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 :
+          case TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 :
+              if (tls_options & _HTTP_TLS_ALLOW_DH)
+               enabled[num_enabled ++] = supported[i];
+             else
+               DEBUG_printf(("4_httpTLSStart: Excluding DH/DHE cipher suite %d", supported[i]));
+              break;
+
           /* Anything else we'll assume is secure */
           default :
              enabled[num_enabled ++] = supported[i];
@@ -1157,7 +1210,7 @@ _httpTLSStart(http_t *http)               /* I - HTTP connection */
       error = SSLSetEnabledCiphers(http->tls, enabled, num_enabled);
     }
   }
-#endif /* USE_SET_ENABLED_CIPHERS */
+#endif /* HAVE_SSLSETENABLEDCIPHERS */
 
   if (!error && http->mode == _HTTP_MODE_CLIENT)
   {
@@ -1782,5 +1835,5 @@ http_cdsa_write(
 
 
 /*
- * End of "$Id: tls-darwin.c 12481 2015-02-03 12:45:14Z msweet $".
+ * End of "$Id: tls-darwin.c 12675 2015-05-28 01:14:32Z msweet $".
  */
index 00ff2234c550e7f991d4e463bf5f1ee01ba4bf16..3da05e2815fb12036c1f1f39387eceabb6583f24 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: tls-gnutls.c 12481 2015-02-03 12:45:14Z msweet $"
+ * "$Id: tls-gnutls.c 12670 2015-05-27 19:48:05Z msweet $"
  *
  * TLS support code for CUPS using GNU TLS.
  *
@@ -36,7 +36,7 @@ static char           *tls_keypath = NULL;
                                        /* Server cert keychain path */
 static _cups_mutex_t   tls_mutex = _CUPS_MUTEX_INITIALIZER;
                                        /* Mutex for keychain/certs */
-static int             tls_options = 0;/* Options for TLS connections */
+static int             tls_options = -1;/* Options for TLS connections */
 
 
 /*
@@ -1028,9 +1028,18 @@ _httpTLSStart(http_t *http)              /* I - Connection to server */
   int                  status;         /* Status of handshake */
   gnutls_certificate_credentials_t *credentials;
                                        /* TLS credentials */
+  char                 priority_string[1024];
+                                       /* Priority string */
 
 
-  DEBUG_printf(("7_httpTLSStart(http=%p)", http));
+  DEBUG_printf(("3_httpTLSStart(http=%p)", http));
+
+  if (tls_options < 0)
+  {
+    DEBUG_puts("4_httpTLSStart: Setting defaults.");
+    _cupsSetDefaults();
+    DEBUG_printf(("4_httpTLSStart: tls_options=%x", tls_options));
+  }
 
   if (http->mode == _HTTP_MODE_SERVER && !tls_keypath)
   {
@@ -1199,28 +1208,28 @@ _httpTLSStart(http_t *http)             /* I - Connection to server */
     return (-1);
   }
 
-#ifdef HAVE_GNUTLS_PRIORITY_SET_DIRECT
-  if (!tls_options)
-    gnutls_priority_set_direct(http->tls, "NORMAL:-ARCFOUR-128:+VERS-TLS-ALL:-VERS-SSL3.0", NULL);
-  else if ((tls_options & _HTTP_TLS_ALLOW_SSL3) && (tls_options & _HTTP_TLS_ALLOW_RC4))
-    gnutls_priority_set_direct(http->tls, "NORMAL", NULL);
+  strlcpy(priority_string, "NORMAL", sizeof(priority_string));
+
+  if (tls_options & _HTTP_TLS_DENY_TLS10)
+    strlcat(priority_string, ":+VERS-TLS-ALL:-VERS-TLS1.0:-VERS-SSL3.0", sizeof(priority_string));
   else if (tls_options & _HTTP_TLS_ALLOW_SSL3)
-    gnutls_priority_set_direct(http->tls, "NORMAL:-ARCFOUR-128:+VERS-TLS-ALL", NULL);
+    strlcat(priority_string, ":+VERS-TLS-ALL", sizeof(priority_string));
   else
-    gnutls_priority_set_direct(http->tls, "NORMAL:+VERS-TLS-ALL:-VERS-SSL3.0", NULL);
+    strlcat(priority_string, ":+VERS-TLS-ALL:-VERS-SSL3.0", sizeof(priority_string));
+
+  if (!(tls_options & _HTTP_TLS_ALLOW_RC4))
+    strlcat(priority_string, ":-ARCFOUR-128", sizeof(priority_string));
+
+  if (!(tls_options & _HTTP_TLS_ALLOW_DH))
+    strlcat(priority_string, ":!ANON-DH", sizeof(priority_string));
+
+#ifdef HAVE_GNUTLS_PRIORITY_SET_DIRECT
+  gnutls_priority_set_direct(http->tls, priority_string, NULL);
 
 #else
   gnutls_priority_t priority;          /* Priority */
 
-  if (!tls_options)
-    gnutls_priority_init(&priority, "NORMAL:-ARCFOUR-128:+VERS-TLS-ALL:-VERS-SSL3.0", NULL);
-  else if ((tls_options & _HTTP_TLS_ALLOW_SSL3) && (tls_options & _HTTP_TLS_ALLOW_RC4))
-    gnutls_priority_init(&priority, "NORMAL", NULL);
-  else if (tls_options & _HTTP_TLS_ALLOW_SSL3)
-    gnutls_priority_init(&priority, "NORMAL:-ARCFOUR-128:+VERS-TLS-ALL", NULL);
-  else
-    gnutls_priority_init(&priority, "NORMAL:+VERS-TLS-ALL:-VERS-SSL3.0", NULL);
-
+  gnutls_priority_init(&priority, priority_string, NULL);
   gnutls_priority_set(http->tls, priority);
   gnutls_priority_deinit(priority);
 #endif /* HAVE_GNUTLS_PRIORITY_SET_DIRECT */
@@ -1332,5 +1341,5 @@ _httpTLSWrite(http_t     *http,           /* I - Connection to server */
 
 
 /*
- * End of "$Id: tls-gnutls.c 12481 2015-02-03 12:45:14Z msweet $".
+ * End of "$Id: tls-gnutls.c 12670 2015-05-27 19:48:05Z msweet $".
  */
index 28596befe4f2b33545defa31ec98dad39e9276d7..aa8994d34dcb481efab8cce1d1baad4e1dbee410 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: tls-sspi.c 12481 2015-02-03 12:45:14Z msweet $"
+ * "$Id: tls-sspi.c 12647 2015-05-20 18:37:52Z msweet $"
  *
  * TLS support for CUPS on Windows using the Security Support Provider
  * Interface (SSPI).
@@ -54,7 +54,7 @@
  * Local globals...
  */
 
-static int             tls_options = 0;/* Options for TLS connections */
+static int             tls_options = -1;/* Options for TLS connections */
 
 
 /*
@@ -930,7 +930,14 @@ _httpTLSStart(http_t *http)                /* I - HTTP connection */
        *hostptr;                       /* Pointer into hostname */
 
 
-  DEBUG_printf(("7_httpTLSStart(http=%p)", http));
+  DEBUG_printf(("3_httpTLSStart(http=%p)", http));
+
+  if (tls_options < 0)
+  {
+    DEBUG_puts("4_httpTLSStart: Setting defaults.");
+    _cupsSetDefaults();
+    DEBUG_printf(("4_httpTLSStart: tls_options=%x", tls_options));
+  }
 
   if ((http->tls = http_sspi_alloc()) == NULL)
     return (-1);
@@ -1756,14 +1763,18 @@ http_sspi_find_credentials(
 #ifdef SP_PROT_TLS1_2_SERVER
   if (http->mode == _HTTP_MODE_SERVER)
   {
-    if (tls_options & _HTTP_TLS_ALLOW_SSL3)
+    if (tls_options & _HTTP_TLS_DENY_TLS10)
+      SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_SERVER | SP_PROT_TLS1_1_SERVER;
+    else if (tls_options & _HTTP_TLS_ALLOW_SSL3)
       SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_SERVER | SP_PROT_TLS1_1_SERVER | SP_PROT_TLS1_0_SERVER | SP_PROT_SSL3_SERVER;
     else
       SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_SERVER | SP_PROT_TLS1_1_SERVER | SP_PROT_TLS1_0_SERVER;
   }
   else
   {
-    if (tls_options & _HTTP_TLS_ALLOW_SSL3)
+    if (tls_options & _HTTP_TLS_DENY_TLS10)
+      SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_CLIENT | SP_PROT_TLS1_1_CLIENT;
+    else if (tls_options & _HTTP_TLS_ALLOW_SSL3)
       SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_CLIENT | SP_PROT_TLS1_1_CLIENT | SP_PROT_TLS1_0_CLIENT | SP_PROT_SSL3_CLIENT;
     else
       SchannelCred.grbitEnabledProtocols = SP_PROT_TLS1_2_CLIENT | SP_PROT_TLS1_1_CLIENT | SP_PROT_TLS1_0_CLIENT;
@@ -1786,7 +1797,7 @@ http_sspi_find_credentials(
   }
 #endif /* SP_PROT_TLS1_2_SERVER */
 
-  /* TODO: Support _HTTP_TLS_ALLOW_RC4 option; right now we'll rely on Windows registry to enable/disable RC4... */
+  /* TODO: Support _HTTP_TLS_ALLOW_RC4 and _HTTP_TLS_ALLOW_DH options; right now we'll rely on Windows registry to enable/disable RC4/DH... */
 
  /*
   * Create an SSPI credential.
@@ -2416,5 +2427,5 @@ http_sspi_verify(
 
 
 /*
- * End of "$Id: tls-sspi.c 12481 2015-02-03 12:45:14Z msweet $".
+ * End of "$Id: tls-sspi.c 12647 2015-05-20 18:37:52Z msweet $".
  */
diff --git a/cups/tlscheck.c b/cups/tlscheck.c
new file mode 100644 (file)
index 0000000..56cc1de
--- /dev/null
@@ -0,0 +1,739 @@
+/*
+ * "$Id: tlscheck.c 12688 2015-06-03 17:31:30Z msweet $"
+ *
+ * TLS check program for CUPS.
+ *
+ * Copyright 2007-2015 by Apple Inc.
+ * Copyright 1997-2006 by Easy Software Products.
+ *
+ * These coded instructions, statements, and computer programs are the
+ * property of Apple Inc. and are protected by Federal copyright
+ * law.  Distribution and use rights are outlined in the file "LICENSE.txt"
+ * which should have been included with this file.  If this file is
+ * file is missing or damaged, see the license at "http://www.cups.org/".
+ *
+ * This file is subject to the Apple OS-Developed Software exception.
+ */
+
+/*
+ * Include necessary headers...
+ */
+
+#include "cups-private.h"
+
+
+#ifndef HAVE_SSL
+int main(void) { puts("Sorry, no TLS support compiled in."); return (1); }
+#else
+
+/*
+ * Local functions...
+ */
+
+static void    usage(void);
+
+
+/*
+ * 'main()' - Main entry.
+ */
+
+int                                    /* O - Exit status */
+main(int  argc,                                /* I - Number of command-line arguments */
+     char *argv[])                     /* I - Command-line arguments */
+{
+  int          i;                      /* Looping var */
+  http_t       *http;                  /* HTTP connection */
+  const char   *server = NULL;         /* Hostname from command-line */
+  int          port = 0;               /* Port number */
+  const char   *cipherName = "UNKNOWN";/* Cipher suite name */
+  int          dhBits = 0;             /* Diffie-Hellman bits */
+  int          tlsVersion = 0;         /* TLS version number */
+  char         uri[1024],              /* Printer URI */
+               scheme[32],             /* URI scheme */
+               host[256],              /* Hostname */
+               userpass[256],          /* Username/password */
+               resource[256];          /* Resource path */
+  int          tls_options = _HTTP_TLS_NONE,
+                                       /* TLS options */
+               verbose = 0;            /* Verbosity */
+  ipp_t                *request,               /* IPP Get-Printer-Attributes request */
+               *response;              /* IPP Get-Printer-Attributes response */
+  ipp_attribute_t *attr;               /* Current attribute */
+  const char   *name;                  /* Attribute name */
+  char         value[1024];            /* Attribute (string) value */
+  static const char * const pattrs[] = /* Requested attributes */
+  {
+    "color-supported",
+    "compression-supported",
+    "document-format-supported",
+    "pages-per-minute",
+    "printer-location",
+    "printer-make-and-model",
+    "printer-state",
+    "printer-state-reasons",
+    "sides-supported",
+    "uri-authentication-supported",
+    "uri-security-supported"
+  };
+
+
+  for (i = 1; i < argc; i ++)
+  {
+    if (!strcmp(argv[i], "--dh"))
+    {
+      tls_options |= _HTTP_TLS_ALLOW_DH;
+    }
+    else if (!strcmp(argv[i], "--no-tls10"))
+    {
+      tls_options |= _HTTP_TLS_DENY_TLS10;
+    }
+    else if (!strcmp(argv[i], "--rc4"))
+    {
+      tls_options |= _HTTP_TLS_ALLOW_RC4;
+    }
+    else if (!strcmp(argv[i], "--verbose") || !strcmp(argv[i], "-v"))
+    {
+      verbose = 1;
+    }
+    else if (argv[i][0] == '-')
+    {
+      printf("tlscheck: Unknown option '%s'.\n", argv[i]);
+      usage();
+    }
+    else if (!server)
+    {
+      if (!strncmp(argv[i], "ipps://", 7))
+      {
+        httpSeparateURI(HTTP_URI_CODING_ALL, argv[i], scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource));
+        server = host;
+      }
+      else
+      {
+        server = argv[i];
+        strlcpy(resource, "/ipp/print", sizeof(resource));
+      }
+    }
+    else if (!port && (argv[i][0] == '=' || isdigit(argv[i][0] & 255)))
+    {
+      if (argv[i][0] == '=')
+       port = atoi(argv[i] + 1);
+      else
+       port = atoi(argv[i]);
+    }
+    else
+    {
+      printf("tlscheck: Unexpected argument '%s'.\n", argv[i]);
+      usage();
+    }
+  }
+
+  if (!server)
+    usage();
+
+  if (!port)
+    port = 631;
+
+  _httpTLSSetOptions(tls_options);
+
+  http = httpConnect2(server, port, NULL, AF_UNSPEC, HTTP_ENCRYPTION_ALWAYS, 1, 30000, NULL);
+  if (!http)
+  {
+    printf("%s: ERROR (%s)\n", server, cupsLastErrorString());
+    return (1);
+  }
+
+#ifdef __APPLE__
+  SSLProtocol protocol;
+  SSLCipherSuite cipher;
+  char unknownCipherName[256];
+  int paramsNeeded = 0;
+  const void *params;
+  size_t paramsLen;
+  OSStatus err;
+
+  if ((err = SSLGetNegotiatedProtocolVersion(http->tls, &protocol)) != noErr)
+  {
+    printf("%s: ERROR (No protocol version - %d)\n", server, (int)err);
+    httpClose(http);
+    return (1);
+  }
+
+  switch (protocol)
+  {
+    default :
+        tlsVersion = 0;
+        break;
+    case kSSLProtocol3 :
+        tlsVersion = 30;
+        break;
+    case kTLSProtocol1 :
+        tlsVersion = 10;
+        break;
+    case kTLSProtocol11 :
+        tlsVersion = 11;
+        break;
+    case kTLSProtocol12 :
+        tlsVersion = 12;
+        break;
+  }
+
+  if ((err = SSLGetNegotiatedCipher(http->tls, &cipher)) != noErr)
+  {
+    printf("%s: ERROR (No cipher suite - %d)\n", server, (int)err);
+    httpClose(http);
+    return (1);
+  }
+
+  switch (cipher)
+  {
+    case TLS_NULL_WITH_NULL_NULL:
+       cipherName = "TLS_NULL_WITH_NULL_NULL";
+       break;
+    case TLS_RSA_WITH_NULL_MD5:
+       cipherName = "TLS_RSA_WITH_NULL_MD5";
+       break;
+    case TLS_RSA_WITH_NULL_SHA:
+       cipherName = "TLS_RSA_WITH_NULL_SHA";
+       break;
+    case TLS_RSA_WITH_RC4_128_MD5:
+       cipherName = "TLS_RSA_WITH_RC4_128_MD5";
+       break;
+    case TLS_RSA_WITH_RC4_128_SHA:
+       cipherName = "TLS_RSA_WITH_RC4_128_SHA";
+       break;
+    case TLS_RSA_WITH_3DES_EDE_CBC_SHA:
+       cipherName = "TLS_RSA_WITH_3DES_EDE_CBC_SHA";
+       break;
+    case TLS_RSA_WITH_NULL_SHA256:
+       cipherName = "TLS_RSA_WITH_NULL_SHA256";
+       break;
+    case TLS_RSA_WITH_AES_128_CBC_SHA256:
+       cipherName = "TLS_RSA_WITH_AES_128_CBC_SHA256";
+       break;
+    case TLS_RSA_WITH_AES_256_CBC_SHA256:
+       cipherName = "TLS_RSA_WITH_AES_256_CBC_SHA256";
+       break;
+    case TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA:
+       cipherName = "TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA:
+       cipherName = "TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA:
+       cipherName = "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA:
+       cipherName = "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_DH_DSS_WITH_AES_128_CBC_SHA256:
+       cipherName = "TLS_DH_DSS_WITH_AES_128_CBC_SHA256";
+       paramsNeeded = 1;
+       break;
+    case TLS_DH_RSA_WITH_AES_128_CBC_SHA256:
+       cipherName = "TLS_DH_RSA_WITH_AES_128_CBC_SHA256";
+       paramsNeeded = 1;
+       break;
+    case TLS_DHE_DSS_WITH_AES_128_CBC_SHA256:
+       cipherName = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256";
+       paramsNeeded = 1;
+       break;
+    case TLS_DHE_RSA_WITH_AES_128_CBC_SHA256:
+       cipherName = "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256";
+       paramsNeeded = 1;
+       break;
+    case TLS_DH_DSS_WITH_AES_256_CBC_SHA256:
+       cipherName = "TLS_DH_DSS_WITH_AES_256_CBC_SHA256";
+       paramsNeeded = 1;
+       break;
+    case TLS_DH_RSA_WITH_AES_256_CBC_SHA256:
+       cipherName = "TLS_DH_RSA_WITH_AES_256_CBC_SHA256";
+       paramsNeeded = 1;
+       break;
+    case TLS_DHE_DSS_WITH_AES_256_CBC_SHA256:
+       cipherName = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256";
+       paramsNeeded = 1;
+       break;
+    case TLS_DHE_RSA_WITH_AES_256_CBC_SHA256:
+       cipherName = "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256";
+       paramsNeeded = 1;
+       break;
+    case TLS_DH_anon_WITH_RC4_128_MD5:
+       cipherName = "TLS_DH_anon_WITH_RC4_128_MD5";
+       paramsNeeded = 1;
+       break;
+    case TLS_DH_anon_WITH_3DES_EDE_CBC_SHA:
+       cipherName = "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_DH_anon_WITH_AES_128_CBC_SHA256:
+       cipherName = "TLS_DH_anon_WITH_AES_128_CBC_SHA256";
+       paramsNeeded = 1;
+       break;
+    case TLS_DH_anon_WITH_AES_256_CBC_SHA256:
+       cipherName = "TLS_DH_anon_WITH_AES_256_CBC_SHA256";
+       paramsNeeded = 1;
+       break;
+    case TLS_PSK_WITH_RC4_128_SHA:
+       cipherName = "TLS_PSK_WITH_RC4_128_SHA";
+       break;
+    case TLS_PSK_WITH_3DES_EDE_CBC_SHA:
+       cipherName = "TLS_PSK_WITH_3DES_EDE_CBC_SHA";
+       break;
+    case TLS_PSK_WITH_AES_128_CBC_SHA:
+       cipherName = "TLS_PSK_WITH_AES_128_CBC_SHA";
+       break;
+    case TLS_PSK_WITH_AES_256_CBC_SHA:
+       cipherName = "TLS_PSK_WITH_AES_256_CBC_SHA";
+       break;
+    case TLS_DHE_PSK_WITH_RC4_128_SHA:
+       cipherName = "TLS_DHE_PSK_WITH_RC4_128_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA:
+       cipherName = "TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_DHE_PSK_WITH_AES_128_CBC_SHA:
+       cipherName = "TLS_DHE_PSK_WITH_AES_128_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_DHE_PSK_WITH_AES_256_CBC_SHA:
+       cipherName = "TLS_DHE_PSK_WITH_AES_256_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_RSA_PSK_WITH_RC4_128_SHA:
+       cipherName = "TLS_RSA_PSK_WITH_RC4_128_SHA";
+       break;
+    case TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA:
+       cipherName = "TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA";
+       break;
+    case TLS_RSA_PSK_WITH_AES_128_CBC_SHA:
+       cipherName = "TLS_RSA_PSK_WITH_AES_128_CBC_SHA";
+       break;
+    case TLS_RSA_PSK_WITH_AES_256_CBC_SHA:
+       cipherName = "TLS_RSA_PSK_WITH_AES_256_CBC_SHA";
+       break;
+    case TLS_PSK_WITH_NULL_SHA:
+       cipherName = "TLS_PSK_WITH_NULL_SHA";
+       break;
+    case TLS_DHE_PSK_WITH_NULL_SHA:
+       cipherName = "TLS_DHE_PSK_WITH_NULL_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_RSA_PSK_WITH_NULL_SHA:
+       cipherName = "TLS_RSA_PSK_WITH_NULL_SHA";
+       break;
+    case TLS_RSA_WITH_AES_128_GCM_SHA256:
+       cipherName = "TLS_RSA_WITH_AES_128_GCM_SHA256";
+       break;
+    case TLS_RSA_WITH_AES_256_GCM_SHA384:
+       cipherName = "TLS_RSA_WITH_AES_256_GCM_SHA384";
+       break;
+    case TLS_DHE_RSA_WITH_AES_128_GCM_SHA256:
+       cipherName = "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256";
+       paramsNeeded = 1;
+       break;
+    case TLS_DHE_RSA_WITH_AES_256_GCM_SHA384:
+       cipherName = "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384";
+       paramsNeeded = 1;
+       break;
+    case TLS_DH_RSA_WITH_AES_128_GCM_SHA256:
+       cipherName = "TLS_DH_RSA_WITH_AES_128_GCM_SHA256";
+       paramsNeeded = 1;
+       break;
+    case TLS_DH_RSA_WITH_AES_256_GCM_SHA384:
+       cipherName = "TLS_DH_RSA_WITH_AES_256_GCM_SHA384";
+       paramsNeeded = 1;
+       break;
+    case TLS_DHE_DSS_WITH_AES_128_GCM_SHA256:
+       cipherName = "TLS_DHE_DSS_WITH_AES_128_GCM_SHA256";
+       paramsNeeded = 1;
+       break;
+    case TLS_DHE_DSS_WITH_AES_256_GCM_SHA384:
+       cipherName = "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384";
+       paramsNeeded = 1;
+       break;
+    case TLS_DH_DSS_WITH_AES_128_GCM_SHA256:
+       cipherName = "TLS_DH_DSS_WITH_AES_128_GCM_SHA256";
+       paramsNeeded = 1;
+       break;
+    case TLS_DH_DSS_WITH_AES_256_GCM_SHA384:
+       cipherName = "TLS_DH_DSS_WITH_AES_256_GCM_SHA384";
+       paramsNeeded = 1;
+       break;
+    case TLS_DH_anon_WITH_AES_128_GCM_SHA256:
+       cipherName = "TLS_DH_anon_WITH_AES_128_GCM_SHA256";
+       paramsNeeded = 1;
+       break;
+    case TLS_DH_anon_WITH_AES_256_GCM_SHA384:
+       cipherName = "TLS_DH_anon_WITH_AES_256_GCM_SHA384";
+       paramsNeeded = 1;
+       break;
+    case TLS_PSK_WITH_AES_128_GCM_SHA256:
+       cipherName = "TLS_PSK_WITH_AES_128_GCM_SHA256";
+       break;
+    case TLS_PSK_WITH_AES_256_GCM_SHA384:
+       cipherName = "TLS_PSK_WITH_AES_256_GCM_SHA384";
+       break;
+    case TLS_DHE_PSK_WITH_AES_128_GCM_SHA256:
+       cipherName = "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256";
+       paramsNeeded = 1;
+       break;
+    case TLS_DHE_PSK_WITH_AES_256_GCM_SHA384:
+       cipherName = "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384";
+       paramsNeeded = 1;
+       break;
+    case TLS_RSA_PSK_WITH_AES_128_GCM_SHA256:
+       cipherName = "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256";
+       break;
+    case TLS_RSA_PSK_WITH_AES_256_GCM_SHA384:
+       cipherName = "TLS_RSA_PSK_WITH_AES_256_GCM_SHA384";
+       break;
+    case TLS_PSK_WITH_AES_128_CBC_SHA256:
+       cipherName = "TLS_PSK_WITH_AES_128_CBC_SHA256";
+       break;
+    case TLS_PSK_WITH_AES_256_CBC_SHA384:
+       cipherName = "TLS_PSK_WITH_AES_256_CBC_SHA384";
+       break;
+    case TLS_PSK_WITH_NULL_SHA256:
+       cipherName = "TLS_PSK_WITH_NULL_SHA256";
+       break;
+    case TLS_PSK_WITH_NULL_SHA384:
+       cipherName = "TLS_PSK_WITH_NULL_SHA384";
+       break;
+    case TLS_DHE_PSK_WITH_AES_128_CBC_SHA256:
+       cipherName = "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256";
+       paramsNeeded = 1;
+       break;
+    case TLS_DHE_PSK_WITH_AES_256_CBC_SHA384:
+       cipherName = "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384";
+       paramsNeeded = 1;
+       break;
+    case TLS_DHE_PSK_WITH_NULL_SHA256:
+       cipherName = "TLS_DHE_PSK_WITH_NULL_SHA256";
+       paramsNeeded = 1;
+       break;
+    case TLS_DHE_PSK_WITH_NULL_SHA384:
+       cipherName = "TLS_DHE_PSK_WITH_NULL_SHA384";
+       paramsNeeded = 1;
+       break;
+    case TLS_RSA_PSK_WITH_AES_128_CBC_SHA256:
+       cipherName = "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256";
+       break;
+    case TLS_RSA_PSK_WITH_AES_256_CBC_SHA384:
+       cipherName = "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384";
+       break;
+    case TLS_RSA_PSK_WITH_NULL_SHA256:
+       cipherName = "TLS_RSA_PSK_WITH_NULL_SHA256";
+       break;
+    case TLS_RSA_PSK_WITH_NULL_SHA384:
+       cipherName = "TLS_RSA_PSK_WITH_NULL_SHA384";
+       break;
+    case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256:
+       cipherName = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384:
+       cipherName = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256:
+       cipherName = "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384:
+       cipherName = "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256:
+       cipherName = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384:
+       cipherName = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256:
+       cipherName = "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384:
+       cipherName = "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:
+       cipherName = "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384:
+       cipherName = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256:
+       cipherName = "TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384:
+       cipherName = "TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:
+       cipherName = "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:
+       cipherName = "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256:
+       cipherName = "TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384:
+       cipherName = "TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384";
+       paramsNeeded = 1;
+       break;
+    case TLS_RSA_WITH_AES_128_CBC_SHA:
+       cipherName = "TLS_RSA_WITH_AES_128_CBC_SHA";
+       break;
+    case TLS_DH_DSS_WITH_AES_128_CBC_SHA:
+       cipherName = "TLS_DH_DSS_WITH_AES_128_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_DH_RSA_WITH_AES_128_CBC_SHA:
+       cipherName = "TLS_DH_RSA_WITH_AES_128_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_DHE_DSS_WITH_AES_128_CBC_SHA:
+       cipherName = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_DHE_RSA_WITH_AES_128_CBC_SHA:
+       cipherName = "TLS_DHE_RSA_WITH_AES_128_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_DH_anon_WITH_AES_128_CBC_SHA:
+       cipherName = "TLS_DH_anon_WITH_AES_128_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_RSA_WITH_AES_256_CBC_SHA:
+       cipherName = "TLS_RSA_WITH_AES_256_CBC_SHA";
+       break;
+    case TLS_DH_DSS_WITH_AES_256_CBC_SHA:
+       cipherName = "TLS_DH_DSS_WITH_AES_256_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_DH_RSA_WITH_AES_256_CBC_SHA:
+       cipherName = "TLS_DH_RSA_WITH_AES_256_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_DHE_DSS_WITH_AES_256_CBC_SHA:
+       cipherName = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_DHE_RSA_WITH_AES_256_CBC_SHA:
+       cipherName = "TLS_DHE_RSA_WITH_AES_256_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_DH_anon_WITH_AES_256_CBC_SHA:
+       cipherName = "TLS_DH_anon_WITH_AES_256_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDH_ECDSA_WITH_NULL_SHA:
+       cipherName = "TLS_ECDH_ECDSA_WITH_NULL_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDH_ECDSA_WITH_RC4_128_SHA:
+       cipherName = "TLS_ECDH_ECDSA_WITH_RC4_128_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA:
+       cipherName = "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA:
+       cipherName = "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA:
+       cipherName = "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDHE_ECDSA_WITH_NULL_SHA:
+       cipherName = "TLS_ECDHE_ECDSA_WITH_NULL_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDHE_ECDSA_WITH_RC4_128_SHA:
+       cipherName = "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA:
+       cipherName = "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA:
+       cipherName = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA:
+       cipherName = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDH_RSA_WITH_NULL_SHA:
+       cipherName = "TLS_ECDH_RSA_WITH_NULL_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDH_RSA_WITH_RC4_128_SHA:
+       cipherName = "TLS_ECDH_RSA_WITH_RC4_128_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA:
+       cipherName = "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDH_RSA_WITH_AES_128_CBC_SHA:
+       cipherName = "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDH_RSA_WITH_AES_256_CBC_SHA:
+       cipherName = "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDHE_RSA_WITH_NULL_SHA:
+       cipherName = "TLS_ECDHE_RSA_WITH_NULL_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDHE_RSA_WITH_RC4_128_SHA:
+       cipherName = "TLS_ECDHE_RSA_WITH_RC4_128_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA:
+       cipherName = "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA:
+       cipherName = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA:
+       cipherName = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDH_anon_WITH_NULL_SHA:
+       cipherName = "TLS_ECDH_anon_WITH_NULL_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDH_anon_WITH_RC4_128_SHA:
+       cipherName = "TLS_ECDH_anon_WITH_RC4_128_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA:
+       cipherName = "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDH_anon_WITH_AES_128_CBC_SHA:
+       cipherName = "TLS_ECDH_anon_WITH_AES_128_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    case TLS_ECDH_anon_WITH_AES_256_CBC_SHA:
+       cipherName = "TLS_ECDH_anon_WITH_AES_256_CBC_SHA";
+       paramsNeeded = 1;
+       break;
+    default :
+        snprintf(unknownCipherName, sizeof(unknownCipherName), "UNKNOWN_%04X", cipher);
+        cipherName = unknownCipherName;
+        break;
+  }
+
+  if (cipher == TLS_RSA_WITH_RC4_128_MD5 ||
+      cipher == TLS_RSA_WITH_RC4_128_SHA)
+  {
+    printf("%s: ERROR (Printers MUST NOT negotiate RC4 cipher suites.)\n", server);
+    httpClose(http);
+    return (1);
+  }
+
+  if ((err = SSLGetDiffieHellmanParams(http->tls, &params, &paramsLen)) != noErr && paramsNeeded)
+  {
+    printf("%s: ERROR (Unable to get Diffie-Hellman parameters - %d)\n", server, (int)err);
+    httpClose(http);
+    return (1);
+  }
+
+  if (paramsLen < 128 && paramsLen != 0)
+  {
+    printf("%s: ERROR (Diffie-Hellman parameters MUST be at least 2048 bits, but Printer uses only %d bits/%d bytes)\n", server, (int)paramsLen * 8, (int)paramsLen);
+    httpClose(http);
+    return (1);
+  }
+
+  dhBits = (int)paramsLen * 8;
+#endif /* __APPLE__ */
+
+  if (dhBits > 0)
+    printf("%s: OK (TLS: %d.%d, %s, %d DH bits)\n", server, tlsVersion / 10, tlsVersion % 10, cipherName, dhBits);
+  else
+    printf("%s: OK (TLS: %d.%d, %s)\n", server, tlsVersion / 10, tlsVersion % 10, cipherName);
+
+  if (verbose)
+  {
+    httpAssembleURI(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipps", NULL, host, port, resource);
+    request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
+    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
+    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
+    ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "requested-attributes", (int)(sizeof(pattrs) / sizeof(pattrs[0])), NULL, pattrs);
+
+    response = cupsDoRequest(http, request, resource);
+
+    for (attr = ippFirstAttribute(response); attr; attr = ippNextAttribute(response))
+    {
+      if (ippGetGroupTag(attr) != IPP_TAG_PRINTER)
+        continue;
+
+      if ((name = ippGetName(attr)) == NULL)
+        continue;
+
+      ippAttributeString(attr, value, sizeof(value));
+      printf("    %s=%s\n", name, value);
+    }
+
+    ippDelete(response);
+  }
+
+  httpClose(http);
+
+  return (0);
+}
+
+
+/*
+ * 'usage()' - Show program usage.
+ */
+
+static void
+usage(void)
+{
+  puts("Usage: ./tlscheck [options] server [port]");
+  puts("       ./tlscheck [options] ipps://server[:port]/path");
+  puts("");
+  puts("Options:");
+  puts("  --dh        Allow DH/DHE key exchange");
+  puts("  --no-tls10  Disable TLS/1.0");
+  puts("  --rc4       Allow RC4 encryption");
+  puts("  --verbose   Be verbose");
+  puts("  -v          Be verbose");
+  puts("");
+  puts("The default port is 631.");
+
+  exit(1);
+}
+#endif /* !HAVE_SSL */
+
+
+/*
+ * End of "$Id: tlscheck.c 12688 2015-06-03 17:31:30Z msweet $".
+ */
index f1b26459cfbb34a265eb7a3ffb91cbf4736545d2..81b596fe0fc3b61e97dc0b704e2fbd76778e8536 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: transcode.c 12332 2014-12-09 20:58:45Z msweet $"
+ * "$Id: transcode.c 12330 2014-12-09 20:57:28Z msweet $"
  *
  * Transcoding support for CUPS.
  *
@@ -716,5 +716,5 @@ cupsUTF32ToUTF8(
 
 
 /*
- * End of "$Id: transcode.c 12332 2014-12-09 20:58:45Z msweet $"
+ * End of "$Id: transcode.c 12330 2014-12-09 20:57:28Z msweet $"
  */
index a042171041ba3dadd81c6826824cf0ac1a66c643..da78be36885c5946fb4866465958c546ae2ce9b1 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: usersys.c 12813 2015-07-30 15:00:40Z msweet $"
+ * "$Id: usersys.c 12647 2015-05-20 18:37:52Z msweet $"
  *
  * User, system, and password routines for CUPS.
  *
@@ -68,7 +68,6 @@ typedef struct _cups_client_conf_s    /**** client.conf config data ****/
 static void    cups_finalize_client_conf(_cups_client_conf_t *cc);
 static void    cups_init_client_conf(_cups_client_conf_t *cc);
 static void    cups_read_client_conf(cups_file_t *fp, _cups_client_conf_t *cc);
-static void    cups_set_default_ipp_port(_cups_globals_t *cg);
 static void    cups_set_encryption(_cups_client_conf_t *cc, const char *value);
 #ifdef HAVE_GSSAPI
 static void    cups_set_gss_service_name(_cups_client_conf_t *cc, const char *value);
@@ -383,9 +382,6 @@ cupsSetServer(const char *server)   /* I - Server name */
       cg->ipp_port = atoi(port);
     }
 
-    if (!cg->ipp_port)
-      cups_set_default_ipp_port(cg);
-
     if (cg->server[0] == '/')
       strlcpy(cg->servername, "localhost", sizeof(cg->servername));
     else
@@ -396,7 +392,6 @@ cupsSetServer(const char *server)   /* I - Server name */
     cg->server[0]      = '\0';
     cg->servername[0]  = '\0';
     cg->server_version = 20;
-    cg->ipp_port       = 0;
   }
 
   if (cg->http)
@@ -913,7 +908,17 @@ _cupsSetDefaults(void)
     cupsSetServer(cc.server_name);
 
   if (!cg->ipp_port)
-    cups_set_default_ipp_port(cg);
+  {
+    const char *ipp_port;              /* IPP_PORT environment variable */
+
+    if ((ipp_port = getenv("IPP_PORT")) != NULL)
+    {
+      if ((cg->ipp_port = atoi(ipp_port)) <= 0)
+        cg->ipp_port = CUPS_DEFAULT_IPP_PORT;
+    }
+    else
+      cg->ipp_port = CUPS_DEFAULT_IPP_PORT;
+  }
 
   if (!cg->user[0])
     strlcpy(cg->user, cc.user, sizeof(cg->user));
@@ -1145,26 +1150,6 @@ cups_read_client_conf(
 }
 
 
-/*
- * 'cups_set_default_ipp_port()' - Set the default IPP port value.
- */
-
-static void
-cups_set_default_ipp_port(
-    _cups_globals_t *cg)               /* I - Global data */
-{
-  const char   *ipp_port;              /* IPP_PORT environment variable */
-
-
-  if ((ipp_port = getenv("IPP_PORT")) != NULL)
-  {
-    if ((cg->ipp_port = atoi(ipp_port)) <= 0)
-      cg->ipp_port = CUPS_DEFAULT_IPP_PORT;
-  }
-  else
-    cg->ipp_port = CUPS_DEFAULT_IPP_PORT;
-}
-
 /*
  * 'cups_set_encryption()' - Set the Encryption value.
  */
@@ -1224,10 +1209,10 @@ cups_set_ssl_options(
     const char          *value)                /* I - Value */
 {
  /*
-  * SSLOptions [AllowRC4] [AllowSSL3] [None]
+  * SSLOptions [AllowRC4] [AllowSSL3] [AllowDH] [DenyTLS1.0] [None]
   */
 
-  int  options = 0;                    /* SSL/TLS options */
+  int  options = _HTTP_TLS_NONE;       /* SSL/TLS options */
   char temp[256],                      /* Copy of value */
        *start,                         /* Start of option */
        *end;                           /* End of option */
@@ -1256,11 +1241,17 @@ cups_set_ssl_options(
       options |= _HTTP_TLS_ALLOW_RC4;
     else if (!_cups_strcasecmp(start, "AllowSSL3"))
       options |= _HTTP_TLS_ALLOW_SSL3;
+    else if (!_cups_strcasecmp(start, "AllowDH"))
+      options |= _HTTP_TLS_ALLOW_DH;
+    else if (!_cups_strcasecmp(start, "DenyTLS1.0"))
+      options |= _HTTP_TLS_DENY_TLS10;
     else if (!_cups_strcasecmp(start, "None"))
-      options = 0;
+      options = _HTTP_TLS_NONE;
   }
 
   cc->ssl_options = options;
+
+  DEBUG_printf(("4cups_set_ssl_options(cc=%p, value=\"%s\") options=%x", cc, value, options));
 }
 #endif /* HAVE_SSL */
 
@@ -1279,5 +1270,5 @@ cups_set_user(
 
 
 /*
- * End of "$Id: usersys.c 12813 2015-07-30 15:00:40Z msweet $".
+ * End of "$Id: usersys.c 12647 2015-05-20 18:37:52Z msweet $".
  */
index 3ccc21c1474f9733d99b50b08047c88e55208593..10ce821a0f8a95de1b6539db0b5a35c31fdb0a77 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: util.c 12449 2015-01-29 20:32:16Z msweet $"
+ * "$Id: util.c 12448 2015-01-29 20:32:07Z msweet $"
  *
  * Printing utilities for CUPS.
  *
@@ -1655,5 +1655,5 @@ cups_get_printer_uri(
 
 
 /*
- * End of "$Id: util.c 12449 2015-01-29 20:32:16Z msweet $".
+ * End of "$Id: util.c 12448 2015-01-29 20:32:07Z msweet $".
  */
index 79ac89176ea78618ee5595c5857dcf826b6db418..1e661df3481c5e59dd98e118b379097ba9952c30 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: versioning.h 12419 2015-01-22 15:51:20Z msweet $"
+ * "$Id: versioning.h 12418 2015-01-22 15:49:23Z msweet $"
  *
  *   API versioning definitions for CUPS.
  *
 #endif /* !_CUPS_VERSIONING_H_ */
 
 /*
- * End of "$Id: versioning.h 12419 2015-01-22 15:51:20Z msweet $".
+ * End of "$Id: versioning.h 12418 2015-01-22 15:49:23Z msweet $".
  */
index 7753b7dbee0d942a795553d96197cf381c66d291..484dc2615999e97e8faf90ede551b9aaee31053c 100644 (file)
@@ -1,9 +1,9 @@
 #
-# "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $"
+# "$Id: Makefile 12278 2014-12-01 13:53:56Z msweet $"
 #
 #   Datafile makefile for CUPS.
 #
-#   Copyright 2007-2011 by Apple Inc.
+#   Copyright 2007-2014 by Apple Inc.
 #   Copyright 1993-2006 by Easy Software Products.
 #
 #   These coded instructions, statements, and computer programs are the
@@ -19,17 +19,6 @@ include ../Makedefs
 # Data files...
 #
 
-BANNERS        =       \
-               classified \
-               confidential \
-               secret \
-               standard \
-               topsecret \
-               unclassified
-
-DATAFILES =    \
-               testprint
-
 PPDCFILES =    \
                epson.h \
                font.defs \
@@ -87,13 +76,7 @@ install:     all install-data install-headers install-libs install-exec
 
 install-data:
        $(INSTALL_DIR) -m 755 $(DATADIR)/banners
-       for file in $(BANNERS); do \
-               $(INSTALL_DATA) $$file $(DATADIR)/banners; \
-       done
        $(INSTALL_DIR) -m 755 $(DATADIR)/data
-       for file in $(DATAFILES); do \
-               $(INSTALL_DATA) $$file $(DATADIR)/data; \
-       done
        $(INSTALL_DIR) -m 755 $(DATADIR)/model
        $(INSTALL_DIR) -m 755 $(DATADIR)/ppdc
        for file in $(PPDCFILES); do \
@@ -128,12 +111,6 @@ install-libs:
 #
 
 uninstall:
-       for file in $(BANNERS); do \
-               $(RM) $(DATADIR)/banners/$$file; \
-       done
-       for file in $(DATAFILES); do \
-               $(RM) $(DATADIR)/data/$$file; \
-       done
        for file in $(PPDCFILES); do \
                $(RM) $(DATADIR)/ppdc/$$file; \
        done
@@ -146,5 +123,5 @@ uninstall:
 
 
 #
-# End of "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $".
+# End of "$Id: Makefile 12278 2014-12-01 13:53:56Z msweet $".
 #
diff --git a/data/classified b/data/classified
deleted file mode 100644 (file)
index ca01a13..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#CUPS-BANNER
-Show job-id job-name job-originating-user-name job-originating-host-name job-billing
-Header Classified
-Footer Classified
-Image images/cups.png
-
diff --git a/data/confidential b/data/confidential
deleted file mode 100644 (file)
index f1f0d85..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#CUPS-BANNER
-Show job-id job-name job-originating-user-name job-originating-host-name job-billing
-Header Confidential
-Footer Confidential
-Image images/cups.png
-
diff --git a/data/secret b/data/secret
deleted file mode 100644 (file)
index 66a0e8a..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#CUPS-BANNER
-Show job-id job-name job-originating-user-name job-originating-host-name job-billing
-Header Secret
-Footer Secret
-Image images/cups.png
-
diff --git a/data/standard b/data/standard
deleted file mode 100644 (file)
index 31c68a0..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#CUPS-BANNER
-Show job-id job-name job-originating-user-name job-originating-host-name job-billing
-Header Cover Page
-Footer Cover Page
-Image images/cups.png
-
diff --git a/data/testprint.in b/data/testprint.in
deleted file mode 100644 (file)
index 8cee3ab..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#CUPS-BANNER
-Show printer-name printer-info printer-location printer-make-and-model printer-driver-name printer-driver-version paper-size imageable-area
-Header Printer Test Page
-Footer Printer Test Page
-Notice CUPS @CUPS_VERSION@.
-Image images/cups.png
-Image images/color-wheel.png
diff --git a/data/topsecret b/data/topsecret
deleted file mode 100644 (file)
index d2b87fa..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#CUPS-BANNER
-Show job-id job-name job-originating-user-name job-originating-host-name job-billing
-Header Top Secret
-Footer Top Secret
-Image images/cups.png
-
diff --git a/data/unclassified b/data/unclassified
deleted file mode 100644 (file)
index 2d1a7d0..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#CUPS-BANNER
-Show job-id job-name job-originating-user-name job-originating-host-name job-billing
-Header Unclassified
-Footer Unclassified
-Image images/cups.png
-
index 220c0f1cb0eddce2f0baaad444022fcb3041ecfd..cd93e87fb269e9962b42d251dca0d68a66c7524b 100644 (file)
@@ -5,7 +5,7 @@
        <title>Array API        </title>
        <meta name="keywords" content="Programming">
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
-       <meta name="creator" content="Mini-XML v2.7">
+       <meta name="creator" content="Mini-XML v2.8">
 <style type="text/css"><!--
 BODY {
   font-family: lucida grande, geneva, helvetica, arial, sans-serif;
index 63eb9ca6d029b40911680e6aad513d65d1f78722..4996c87c25f7b44471e4620b8ee9867fb4a7af8b 100644 (file)
@@ -5,7 +5,7 @@
        <title>CGI API  </title>
        <meta name="keywords" content="Programming">
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
-       <meta name="creator" content="Mini-XML v2.7">
+       <meta name="creator" content="Mini-XML v2.8">
 <style type="text/css"><!--
 BODY {
   font-family: lucida grande, geneva, helvetica, arial, sans-serif;
index 19f7ccb908f05b15cfaa1815fb651a2148a65c17..489c23a6f66cf511d4587c152ff693fc2818d34b 100644 (file)
@@ -5,7 +5,7 @@
        <title>CUPS API </title>
        <meta name="keywords" content="Programming">
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
-       <meta name="creator" content="Mini-XML v2.7">
+       <meta name="creator" content="Mini-XML v2.8">
 <style type="text/css"><!--
 BODY {
   font-family: lucida grande, geneva, helvetica, arial, sans-serif;
index 309d09daae8fb0e69700bcb0e4c29c598f320382..0354761e1f291307e0ba9495cabd994bdb56560c 100644 (file)
@@ -5,7 +5,7 @@
        <title>File and Directory APIs  </title>
        <meta name="keywords" content="Programming">
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
-       <meta name="creator" content="Mini-XML v2.7">
+       <meta name="creator" content="Mini-XML v2.8">
 <style type="text/css"><!--
 BODY {
   font-family: lucida grande, geneva, helvetica, arial, sans-serif;
index 1ab935b51e17087b822f70e1c60d439f276baddc..39d183729c731ca1e8b3a9e1b7839d78bd3dbd53 100644 (file)
@@ -5,7 +5,7 @@
        <title>Filter and Backend Programming   </title>
        <meta name="keywords" content="Programming">
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
-       <meta name="creator" content="Mini-XML v2.7">
+       <meta name="creator" content="Mini-XML v2.8">
 <style type="text/css"><!--
 BODY {
   font-family: lucida grande, geneva, helvetica, arial, sans-serif;
index ef21b674c17f964fbf33ba2b01341056bd1066d3..236c24923e5495b5b96f6355b76f0732d80524e0 100644 (file)
@@ -5,7 +5,7 @@
        <title>HTTP and IPP APIs        </title>
        <meta name="keywords" content="Programming">
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
-       <meta name="creator" content="Mini-XML v2.7">
+       <meta name="creator" content="Mini-XML v2.8">
 <style type="text/css"><!--
 BODY {
   font-family: lucida grande, geneva, helvetica, arial, sans-serif;
@@ -6331,6 +6331,18 @@ are server-oriented...</p>
 <p class="description">IPP operations</p>
 <h4 class="constants">Constants</h4>
 <dl>
+<dt>IPP_OP_ACKNOWLEDGE_DOCUMENT </dt>
+<dd class="description">Acknowledge-Document</dd>
+<dt>IPP_OP_ACKNOWLEDGE_IDENTIFY_PRINTER </dt>
+<dd class="description">Acknowledge-Identify-Printer</dd>
+<dt>IPP_OP_ACKNOWLEDGE_JOB </dt>
+<dd class="description">Acknowledge-Job</dd>
+<dt>IPP_OP_ACTIVATE_PRINTER </dt>
+<dd class="description">Start a printer</dd>
+<dt>IPP_OP_CANCEL_CURRENT_JOB </dt>
+<dd class="description">Cancel the current job</dd>
+<dt>IPP_OP_CANCEL_DOCUMENT </dt>
+<dd class="description">Cancel-Document</dd>
 <dt>IPP_OP_CANCEL_JOB </dt>
 <dd class="description">Cancel a job</dd>
 <dt>IPP_OP_CANCEL_JOBS </dt>
@@ -6381,16 +6393,34 @@ are server-oriented...</p>
 <dd class="description">Reject new jobs on a printer</dd>
 <dt>IPP_OP_CUPS_SET_DEFAULT </dt>
 <dd class="description">Set the default printer</dd>
+<dt>IPP_OP_DEACTIVATE_PRINTER </dt>
+<dd class="description">Stop a printer</dd>
+<dt>IPP_OP_DELETE_DOCUMENT </dt>
+<dd class="description">Delete-Document</dd>
+<dt>IPP_OP_DEREGISTER_OUTPUT_DEVICE </dt>
+<dd class="description">Deregister-Output-Device</dd>
 <dt>IPP_OP_DISABLE_PRINTER </dt>
 <dd class="description">Stop a printer</dd>
 <dt>IPP_OP_ENABLE_PRINTER </dt>
 <dd class="description">Start a printer</dd>
+<dt>IPP_OP_FETCH_DOCUMENT </dt>
+<dd class="description">Fetch-Document</dd>
+<dt>IPP_OP_FETCH_JOB </dt>
+<dd class="description">Fetch-Job</dd>
+<dt>IPP_OP_GET_DOCUMENTS </dt>
+<dd class="description">Get-Documents</dd>
+<dt>IPP_OP_GET_DOCUMENT_ATTRIBUTES </dt>
+<dd class="description">Get-Document-Attributes</dd>
 <dt>IPP_OP_GET_JOBS </dt>
 <dd class="description">Get a list of jobs</dd>
 <dt>IPP_OP_GET_JOB_ATTRIBUTES </dt>
 <dd class="description">Get job attributes</dd>
+<dt>IPP_OP_GET_NEXT_DOCUMENT_DATA </dt>
+<dd class="description">Get-Next-Document-Data</dd>
 <dt>IPP_OP_GET_NOTIFICATIONS <span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span></dt>
 <dd class="description">Get notification events </dd>
+<dt>IPP_OP_GET_OUTPUT_DEVICE_ATTRIBUTES </dt>
+<dd class="description">Get-Output-Device-Attributes</dd>
 <dt>IPP_OP_GET_PRINTER_ATTRIBUTES </dt>
 <dd class="description">Get printer attributes</dd>
 <dt>IPP_OP_GET_PRINTER_SUPPORTED_VALUES </dt>
@@ -6401,26 +6431,70 @@ are server-oriented...</p>
 <dd class="description">Get subscription attributes </dd>
 <dt>IPP_OP_HOLD_JOB </dt>
 <dd class="description">Hold a job for printing</dd>
+<dt>IPP_OP_HOLD_NEW_JOBS </dt>
+<dd class="description">Hold new jobs</dd>
+<dt>IPP_OP_IDENTIFY_PRINTER </dt>
+<dd class="description">Identify-Printer</dd>
 <dt>IPP_OP_PAUSE_PRINTER </dt>
 <dd class="description">Stop a printer</dd>
+<dt>IPP_OP_PAUSE_PRINTER_AFTER_CURRENT_JOB </dt>
+<dd class="description">Stop printer after the current job</dd>
 <dt>IPP_OP_PRINT_JOB </dt>
 <dd class="description">Print a single file</dd>
+<dt>IPP_OP_PRINT_URI </dt>
+<dd class="description">Print a single URL</dd>
+<dt>IPP_OP_PROMOTE_JOB </dt>
+<dd class="description">Promote a job to print sooner</dd>
 <dt>IPP_OP_PURGE_JOBS </dt>
 <dd class="description">Cancel all jobs</dd>
+<dt>IPP_OP_RELEASE_HELD_NEW_JOBS </dt>
+<dd class="description">Release new jobs</dd>
 <dt>IPP_OP_RELEASE_JOB </dt>
 <dd class="description">Release a job for printing</dd>
 <dt>IPP_OP_RENEW_SUBSCRIPTION <span class="info">&nbsp;CUPS 1.2/OS X 10.5&nbsp;</span></dt>
 <dd class="description">Renew a printer subscription </dd>
+<dt>IPP_OP_REPROCESS_JOB </dt>
+<dd class="description">Reprint a job</dd>
 <dt>IPP_OP_RESTART_JOB </dt>
 <dd class="description">Reprint a job</dd>
+<dt>IPP_OP_RESTART_PRINTER </dt>
+<dd class="description">Restart a printer</dd>
 <dt>IPP_OP_RESUBMIT_JOB </dt>
 <dd class="description">Resubmit-Job</dd>
+<dt>IPP_OP_RESUME_JOB </dt>
+<dd class="description">Resume the current job</dd>
 <dt>IPP_OP_RESUME_PRINTER </dt>
 <dd class="description">Start a printer</dd>
+<dt>IPP_OP_SCHEDULE_JOB_AFTER </dt>
+<dd class="description">Schedule a job to print after another</dd>
 <dt>IPP_OP_SEND_DOCUMENT </dt>
 <dd class="description">Add a file to a job</dd>
+<dt>IPP_OP_SEND_HARDCOPY_DOCUMENT </dt>
+<dd class="description">Send-Hardcopy-Document</dd>
+<dt>IPP_OP_SEND_URI </dt>
+<dd class="description">Add a URL to a job</dd>
+<dt>IPP_OP_SET_DOCUMENT_ATTRIBUTES </dt>
+<dd class="description">Set-Document-Attributes</dd>
 <dt>IPP_OP_SET_JOB_ATTRIBUTES </dt>
 <dd class="description">Set job attributes</dd>
+<dt>IPP_OP_SET_PRINTER_ATTRIBUTES </dt>
+<dd class="description">Set printer attributes</dd>
+<dt>IPP_OP_SHUTDOWN_PRINTER </dt>
+<dd class="description">Turn a printer off</dd>
+<dt>IPP_OP_STARTUP_PRINTER </dt>
+<dd class="description">Turn a printer on</dd>
+<dt>IPP_OP_SUSPEND_CURRENT_JOB </dt>
+<dd class="description">Suspend the current job</dd>
+<dt>IPP_OP_UPDATE_ACTIVE_JOBS </dt>
+<dd class="description">Update-Active-Jobs</dd>
+<dt>IPP_OP_UPDATE_DOCUMENT_STATUS </dt>
+<dd class="description">Update-Document-Status</dd>
+<dt>IPP_OP_UPDATE_JOB_STATUS </dt>
+<dd class="description">Update-Job-Status</dd>
+<dt>IPP_OP_UPDATE_OUTPUT_DEVICE_ATTRIBUTES </dt>
+<dd class="description">Update-Output-Device-Attributes</dd>
+<dt>IPP_OP_VALIDATE_DOCUMENT </dt>
+<dd class="description">Validate-Document</dd>
 <dt>IPP_OP_VALIDATE_JOB </dt>
 <dd class="description">Validate job options</dd>
 </dl>
index d95734299579f12700985f8ec94a645f01deef58..2496acdcc414f087d00ab681edcd1df6152ad609 100644 (file)
@@ -5,7 +5,7 @@
        <title>MIME API </title>
        <meta name="keywords" content="Programming">
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
-       <meta name="creator" content="Mini-XML v2.7">
+       <meta name="creator" content="Mini-XML v2.8">
 <style type="text/css"><!--
 BODY {
   font-family: lucida grande, geneva, helvetica, arial, sans-serif;
index 01a041493cf6a33e225dd25e7b8e37dab3cac65e..3cd6f26f43c35c06bc3fe32bfa53e8421f8577cf 100644 (file)
@@ -5,7 +5,7 @@
        <title>Introduction to CUPS Programming </title>
        <meta name="keywords" content="Programming">
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
-       <meta name="creator" content="Mini-XML v2.7">
+       <meta name="creator" content="Mini-XML v2.8">
 <style type="text/css"><!--
 BODY {
   font-family: lucida grande, geneva, helvetica, arial, sans-serif;
index 5121b65944dfa3d2d3a44991c083333a822f8bb6..5ff14c622f4d0ac5bb48d2d6a141dba74cae5399 100644 (file)
@@ -5,7 +5,7 @@
        <title>PPD API (DEPRECATED)     </title>
        <meta name="keywords" content="Programming">
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
-       <meta name="creator" content="Mini-XML v2.7">
+       <meta name="creator" content="Mini-XML v2.8">
 <style type="text/css"><!--
 BODY {
   font-family: lucida grande, geneva, helvetica, arial, sans-serif;
index df321357543b487ce0e31b11c8f70e8f0cc711c4..d4290b7229a14f68d507dda2d69ac84bace57f60 100644 (file)
@@ -5,7 +5,7 @@
        <title>PPD Compiler API </title>
        <meta name="keywords" content="Programming">
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
-       <meta name="creator" content="Mini-XML v2.7">
+       <meta name="creator" content="Mini-XML v2.8">
 <style type="text/css"><!--
 BODY {
   font-family: lucida grande, geneva, helvetica, arial, sans-serif;
index 9acda474fd21123701dc5f0978a48978f36db4d7..3c8ffe8b1fe889ea11e6fb51997c809e58696d99 100644 (file)
@@ -5,7 +5,7 @@
        <title>Raster API       </title>
        <meta name="keywords" content="Programming">
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
-       <meta name="creator" content="Mini-XML v2.7">
+       <meta name="creator" content="Mini-XML v2.8">
 <style type="text/css"><!--
 BODY {
   font-family: lucida grande, geneva, helvetica, arial, sans-serif;
index 06093fb77a8adcb73484aa7c46512c833c0430ff..edf4470b612cfccb5ea8fab3885679905646eeea 100644 (file)
@@ -12,7 +12,7 @@ client.conf - client configuration file for cups (deprecated)
 <h2 class="title"><a name="DESCRIPTION">Description</a></h2>
 The <b>client.conf</b> file configures the CUPS client and is normally located in the <i>/etc/cups</i> and/or <i>~/.cups</i> directories.
 Each line in the file can be a configuration directive, a blank line, or a comment. Comment lines start with the # character.
-<p><b>Note:</b> Starting with OS X 10.7, this file is only used by command-line and X11 applications.
+<p><b>Note:</b> Starting with OS X 10.7, this file is only used by command-line and X11 applications plus the IPP backend.
 The <b>ServerName</b> directive is not supported on OS X at all.
 <h3><a name="DIRECTIVES">Directives</a></h3>
 The following directives are understood by the client. Consult the online help for detailed descriptions:
@@ -38,12 +38,14 @@ CUPS adds the remote hostname ("name@server.example.com") for you. The default n
 <b>Note: This directive it not supported on OS X 10.7 or later.</b>
 <dt><b>ServerName </b><i>hostname-or-ip-address</i>[<i>:port</i>]<b>/version=1.1</b>
 <dd style="margin-left: 5.0em">Specifies the address and optionally the port to use when connecting to a server running CUPS 1.3.12 and earlier.
-<dt><b>SSLOptions </b>[<i>AllowRC4</i>] [<i>AllowSSL3</i>]
+<dt><b>SSLOptions </b>[<i>AllowDH</i>] [<i>AllowRC4</i>] [<i>AllowSSL3</i>] [<i>DenyTLS1.0</i>]
 <dd style="margin-left: 5.0em"><dt><b>SSLOptions None</b>
 <dd style="margin-left: 5.0em">Sets encryption options (only in /etc/cups/client.conf).
 By default, CUPS only supports encryption using TLS v1.0 or higher using known secure cipher suites.
+The <i>AllowDH</i> option enables cipher suites using plain Diffie-Hellman key negotiation.
 The <i>AllowRC4</i> option enables the 128-bit RC4 cipher suites, which are required for some older clients that do not implement newer ones.
 The <i>AllowSSL3</i> option enables SSL v3.0, which is required for some older clients that do not support TLS v1.0.
+The <i>DenyTLS1.0</i> option disables TLS v1.0 support - this sets the minimum protocol version to TLS v1.1.
 <dt><b>User </b><i>name</i>
 <dd style="margin-left: 5.0em">Specifies the default user name to use for requests.
 <dt><b>ValidateCerts Yes</b>
@@ -57,7 +59,7 @@ The <b>client.conf</b> file is deprecated and will no longer be supported in a f
 <a href="man-cups.html?TOPIC=Man+Pages"><b>cups</b>(1),</a>
 CUPS Online Help (<a href="http://localhost:631/help">http://localhost:631/help</a>)
 <h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
-Copyright &copy; 2007-2014 by Apple Inc.
+Copyright &copy; 2007-2015 by Apple Inc.
 
 </body>
 </html>
index 9ab29e8195ca101bcce4df463c0413914f08d270..41001b163b8d61e5b71c1d917261bdde7df630e3 100644 (file)
@@ -23,9 +23,11 @@ The following directives are understood by
 <dl class="man">
 <dt><a name="AccessLog"></a><b>AccessLog</b>
 <dd style="margin-left: 5.0em"><dt><b>AccessLog </b><i>filename</i>
+<dd style="margin-left: 5.0em"><dt><b>AccessLog stderr</b>
 <dd style="margin-left: 5.0em"><dt><b>AccessLog syslog</b>
 <dd style="margin-left: 5.0em">Defines the access log filename.
 Specifying a blank filename disables access log generation.
+The value "stderr" causes log entries to be sent to the standard error file when the scheduler is running in the foreground, or to the system log daemon when run in the background.
 The value "syslog" causes log entries to be sent to the system log daemon.
 The server name may be included in filenames using the string "%s", for example:
 <pre class="man">
@@ -50,9 +52,11 @@ The default is usually "/usr/share/cups".
 The default is usually "/usr/share/doc/cups".
 <dt><a name="ErrorLog"></a><b>ErrorLog</b>
 <dd style="margin-left: 5.0em"><dt><b>ErrorLog </b><i>filename</i>
+<dd style="margin-left: 5.0em"><dt><b>ErrorLog stderr</b>
 <dd style="margin-left: 5.0em"><dt><b>ErrorLog syslog</b>
 <dd style="margin-left: 5.0em">Defines the error log filename.
 Specifying a blank filename disables error log generation.
+The value "stderr" causes log entries to be sent to the standard error file when the scheduler is running in the foreground, or to the system log daemon when run in the background.
 The value "syslog" causes log entries to be sent to the system log daemon.
 The server name may be included in filenames using the string "%s", for example:
 <pre class="man">
@@ -95,8 +99,10 @@ The default group is operating system specific but is usually "lp" or "nobody".
 <dd style="margin-left: 5.0em">Specifies the permissions of all log files that the scheduler writes.
 The default is "0644".
 <dt><a name="PageLog"></a><b>PageLog </b>[ <i>filename</i> ]
+<dd style="margin-left: 5.0em"><dt><b>PageLog stderr</b>
 <dd style="margin-left: 5.0em"><dt><b>PageLog syslog</b>
 <dd style="margin-left: 5.0em">Defines the page log filename.
+The value "stderr" causes log entries to be sent to the standard error file when the scheduler is running in the foreground, or to the system log daemon when run in the background.
 The value "syslog" causes log entries to be sent to the system log daemon.
 Specifying a blank filename disables page log generation.
 The server name may be included in filenames using the string "%s", for example:
@@ -112,8 +118,7 @@ The default is "remroot".
 <dt><a name="RequestRoot"></a><b>RequestRoot </b><i>directory</i>
 <dd style="margin-left: 5.0em">Specifies the directory that contains print jobs and other HTTP request data.
 The default is "/var/spool/cups".
-<dt><a name="Sandboxing"></a><b>Sandboxing off</b>
-<dd style="margin-left: 5.0em"><dt><b>Sandboxing relaxed</b>
+<dt><a name="Sandboxing"></a><b>Sandboxing relaxed</b>
 <dd style="margin-left: 5.0em"><dt><b>Sandboxing strict</b>
 <dd style="margin-left: 5.0em">Specifies the level of security sandboxing that is applied to print filters, backends, and other child processes of the scheduler.
 The default is "strict".
index c2ef877e2c18df3c4e87749e7865188db82b8ad6..f378bffa7e16e5fd7737838c5488528844b17d23 100644 (file)
@@ -240,8 +240,7 @@ The following percent sequences are recognized:
     "%u" inserts the username.
 
 </pre>
-The default is the empty string, which disables page logging.
-The string "%p %u %j %T %P %C %{job-billing} %{job-originating-host-name} %{job-name} %{media} %{sides}" creates a page log with the standard items.
+The default is "%p %u %j %T %P %C %{job-billing} %{job-originating-host-name} %{job-name} %{media} %{sides}".
 <dt><a name="PassEnv"></a><b>PassEnv </b><i>variable </i>[ ... <i>variable </i>]
 <dd style="margin-left: 5.0em">Passes the specified environment variable(s) to child processes.
 <dt><a name="Policy"></a><b>&lt;Policy </b><i>name</i><b>> </b>... <b>&lt;/Policy></b>
@@ -589,7 +588,7 @@ Require authentication for accesses from outside the 10. network:
 <a href="man-subscriptions.conf.html?TOPIC=Man+Pages"><b>subscriptions.conf</b>(5),</a>
 CUPS Online Help (<a href="http://localhost:631/help">http://localhost:631/help</a>)
 <h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
-Copyright &copy; 2007-2015 by Apple Inc.
+Copyright &copy; 2007-2014 by Apple Inc.
 
 </body>
 </html>
index aba14e5510c5b2ac34292d608f26da54a7570b5d..7f0dd54965d4d67ff8df082b30c36d8a369169f7 100644 (file)
@@ -215,7 +215,7 @@ IANA IPP Registry (<a href="http://www.iana.org/assignments/ipp\-registrations)"
 PWG Internet Printing Protocol Workgroup (<a href="http://www.pwg.org/ipp">http://www.pwg.org/ipp</a>)
 RFC 2911 (<a href="http://tools.ietf.org/html/rfc2911)">http://tools.ietf.org/html/rfc2911)</a>,
 <h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
-Copyright &copy; 2007-2014 by Apple Inc.
+Copyright &copy; 2007-2015 by Apple Inc.
 
 </body>
 </html>
index 3fffb25f11d85f8fe1c4c083a5dc4bf87c8c8721..4f54d6446ba1a78d0264f4ae44ed3b3fe9cd3245 100644 (file)
@@ -131,6 +131,9 @@ test report.
 <dd style="margin-left: 5.0em"><dt><b>EXPECT ?</b><i>attribute-name predicate(s)</i>
 <dd style="margin-left: 5.0em"><dt><b>EXPECT !</b><i>attribute-name</i>
 <dd style="margin-left: 5.0em">Specifies that the response must/may/must not include the named attribute. Additional requirements can be added as predicates - see the "EXPECT PREDICATES" section for more information on predicates. Attribute names can specify member attributes by separating the attribute and member names with the forward slash, for example "media-col/media-size/x-dimension".
+<dt><b>EXPECT-ALL </b><i>attribute-name </i>[ <i>predicate(s) </i>]
+<dd style="margin-left: 5.0em"><dt><b>EXPECT-ALL ?</b><i>attribute-name predicate(s)</i>
+<dd style="margin-left: 5.0em">Specifies that the response must/may include the named attribute and that all occurrences of that attribute must match the given predicates.
 <dt><b>FILE filename</b>
 <dd style="margin-left: 5.0em">Specifies a file to include at the end of the request. This is typically used when sending a test print file.
 <dt><b>GROUP tag</b>
@@ -247,6 +250,9 @@ Specifies the maximum number of times to repeat if the <b>REPEAT-MATCH</b> or <b
 <dd style="margin-left: 5.0em">Requires that at least one value of the <b>EXPECT</b> attribute matches the boolean value given.
 <dt><b>WITH-VALUE "/</b><i>regular expression</i><b>/"</b>
 <dd style="margin-left: 5.0em">Requires that at least one value of the <b>EXPECT</b> attribute matches the regular expression, which must conform to the POSIX regular expression syntax. Comparisons are case-sensitive.
+<dt><b>WITH-VALUE-FROM </b><i>attribute-name</i>
+<dd style="margin-left: 5.0em">Requires that the value(s) of the <b>EXPECT</b> attribute matches the value(s) in the specified attribute.
+For example, "EXPECT job-sheets WITH-VALUE-FROM job-sheets-supported" requires that the "job-sheets" value is listed as a value of the "job-sheets-supported" attribute.
 </dl>
 <h3><a name="STATUS_PREDICATES">Status Predicates</a></h3>
 The following predicates are understood following the <b>STATUS</b> test directive:
@@ -495,7 +501,7 @@ IANA IPP Registry (<a href="http://www.iana.org/assignments/ipp-registrations)">
 PWG Internet Printing Protocol Workgroup (<a href="http://www.pwg.org/ipp)">http://www.pwg.org/ipp)</a>,
 RFC 2911 (<a href="http://tools.ietf.org/html/rfc3911">http://tools.ietf.org/html/rfc3911</a>)
 <h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
-Copyright &copy; 2007-2014 by Apple Inc.
+Copyright &copy; 2007-2015 by Apple Inc.
 
 </body>
 </html>
index 1f8502991a06aed4aac715ef73232be26da6dc41..2a74cf06c50dac046a7a606eaa4e2cfc84a36e73 100644 (file)
@@ -79,6 +79,7 @@ This option cannot be specified with the <i>-P</i> option (PPD file) and is inte
 Use the <i>-m</i> option with the
 <a href="man-lpinfo.html?TOPIC=Man+Pages"><b>lpinfo</b>(8)</a>
 command to get a list of supported models.
+The model "raw" clears any existing interface script or PPD file and the model "everywhere" queries the printer referred to by the specified IPP <i>device-uri</i>.
 <dt><b>-o cupsIPPSupplies=true</b>
 <dd style="margin-left: 5.0em"><dt><b>-o cupsIPPSupplies=false</b>
 <dd style="margin-left: 5.0em">Specifies whether IPP supply level values should be reported.
@@ -161,6 +162,13 @@ Finally, the CUPS version of <b>lpadmin</b> may ask the user for an access passw
 This differs from the System V version which requires the root user to execute this command.
 <h2 class="title"><a name="NOTES">Notes</a></h2>
 The CUPS version of <b>lpadmin</b> does not support all of the System V or Solaris printing system configuration options.
+<h2 class="title"><a name="EXAMPLE">Example</a></h2>
+Create an IPP Everywhere print queue:
+<pre class="man">
+
+    lpadmin -p myprinter -E -v ipp://myprinter.local/ipp/print -m everywhere
+
+</pre>
 <h2 class="title"><a name="SEE_ALSO">See Also</a></h2>
 <a href="man-cupsaccept.html?TOPIC=Man+Pages"><b>cupsaccept</b>(8),</a>
 <a href="man-cupsenable.html?TOPIC=Man+Pages"><b>cupsenable</b>(8),</a>
@@ -168,7 +176,7 @@ The CUPS version of <b>lpadmin</b> does not support all of the System V or Solar
 <a href="man-lpoptions.html?TOPIC=Man+Pages"><b>lpoptions</b>(1),</a>
 CUPS Online Help (<a href="http://localhost:631/help">http://localhost:631/help</a>)
 <h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
-Copyright &copy; 2007-2014 by Apple Inc.
+Copyright &copy; 2007-2015 by Apple Inc.
 
 </body>
 </html>
index 1469f45e51da7857aee050e573af1fc8fab8a78f..2c0cd2eec8a3865aaf1a53dbd7a0b1305e31e687 100644 (file)
@@ -5,7 +5,7 @@
        <title>Developing PostScript Printer Drivers    </title>
        <meta name="keywords" content="Programming">
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
-       <meta name="creator" content="Mini-XML v2.7">
+       <meta name="creator" content="Mini-XML v2.8">
 <style type="text/css"><!--
 BODY {
   font-family: lucida grande, geneva, helvetica, arial, sans-serif;
index 729e26851ee2a8f3fe827de0cbfd0a548473148b..7e24866bb4dd9bc5236ae289388572978ec07508 100644 (file)
@@ -5,7 +5,7 @@
        <title>Introduction to the PPD Compiler </title>
        <meta name="keywords" content="Programming">
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
-       <meta name="creator" content="Mini-XML v2.7">
+       <meta name="creator" content="Mini-XML v2.8">
 <style type="text/css"><!--
 BODY {
   font-family: lucida grande, geneva, helvetica, arial, sans-serif;
index 8055705f4f2cc2ddafb7a424c18694e067fb855d..3a6c1320fac70d2f50ec929612408b613e7fe99c 100644 (file)
@@ -5,7 +5,7 @@
        <title>Developing Raster Printer Drivers        </title>
        <meta name="keywords" content="Programming">
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
-       <meta name="creator" content="Mini-XML v2.7">
+       <meta name="creator" content="Mini-XML v2.8">
 <style type="text/css"><!--
 BODY {
   font-family: lucida grande, geneva, helvetica, arial, sans-serif;
index e0142cfe04fb7e304670a6f9688da2883a6563be..4bbe7f0eefe0212d8123c047a0961b5eb371925b 100644 (file)
@@ -14,7 +14,7 @@
 
 <H2 CLASS="title"><A NAME="OVERVIEW">Overview</A></H2>
 
-<P>CUPS is developed by Apple Inc. and distributed as open source software under a combination of GNU GPL2 and GNU LGPL2 licenses with exceptions to allow linking to OpenSSL (which has a GPL-incompatible license) and for developers on Apple's operating systems to develop CUPS-based software under alternate license terms. Significant contributions to CUPS must be licensed to Apple using the <A HREF="https://www.cups.org/AppleContributorAgreement_2011-03-10.pdf">Apple Contributor Agreement</A>.</P>
+<P>CUPS is developed by Apple Inc. and distributed as open source software under a combination of GNU GPL2 and GNU LGPL2 licenses with exceptions to allow linking to OpenSSL (which has a GPL-incompatible license) and for developers on Apple's operating systems to develop CUPS-based software until alternate license terms. Significant contributions to CUPS must be licensed to Apple using the <A HREF="https://www.cups.org/AppleContributorAgreement_2011-03-10.pdf">Apple Contributor Agreement</A>.</P>
 
 <P>Apple releases updates to the CUPS software approximately every three months. Each release has a version number consisting of the major version (currently 1), minor version (currently 6), and patch version (starting at 0) separated by the period, for example "1.6.0". Releases where only the patch version number changes will contain only bug fixes to the previous release, for example "1.6.1" includes bug fixes for the "1.6.0" release. New features require the major or minor version numbers to change, for example "1.6.0" release contains new features compared to the "1.5.3" release. Multiple beta and "candidate" releases generally precede each new feature release, for example "1.5b1", "1.5b2", and "1.5rc1" preceded the "1.5.0" release. Finally, we also post regular Subversion snapshot releases, for example "1.6svn-r10486", which represent a snapshot of the development for the next feature release.</P>
 
index 4cdb4721a6bd0e861aaa37e579e963b231bc386c..f25113b0c652c8b98e6cb14c03a30c46af89e03c 100644 (file)
@@ -5,7 +5,7 @@
        <title>CUPS PPD Extensions      </title>
        <meta name="keywords" content="Specifications">
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
-       <meta name="creator" content="Mini-XML v2.7">
+       <meta name="creator" content="Mini-XML v2.8">
 <style type="text/css"><!--
 BODY {
   font-family: lucida grande, geneva, helvetica, arial, sans-serif;
index 99d2ee0505038a9b62ad03851378056f2134fb00..322705b748880daf280d8698a6069dd88ef41716 100644 (file)
@@ -1,5 +1,5 @@
 #
-# "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $"
+# "$Id: Makefile 12568 2015-03-25 13:49:23Z msweet $"
 #
 #   Filter makefile for CUPS.
 #
@@ -367,6 +367,12 @@ rastertopwg:       rastertopwg.o ../cups/$(LIBCUPS) $(LIBCUPSIMAGE)
        echo Linking $@...
        $(CC) $(LDFLAGS) -o $@ rastertopwg.o $(LINKCUPSIMAGE) $(IMGLIBS) $(LIBS)
 
+rastertopwg-static:    rastertopwg.o ../cups/$(LIBCUPSSTATIC) libcupsimage.a
+       echo Linking $@...
+       $(CC) $(LDFLAGS) -o $@ rastertopwg.o libcupsimage.a \
+               ../cups/$(LIBCUPSSTATIC) $(IMGLIBS) $(DSOLIBS) $(COMMONLIBS) \
+               $(SSLLIBS) $(DNSSDLIBS) $(LIBGSSAPI)
+
 
 #
 # testraster
@@ -398,5 +404,5 @@ include Dependencies
 
 
 #
-# End of "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $".
+# End of "$Id: Makefile 12568 2015-03-25 13:49:23Z msweet $".
 #
index bb9f14f00a5cf686ffa6c71270f27b00137efb83..e062757a13c0963f444cfaeffdec68eddc3d43f5 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: error.c 12748 2015-06-24 15:58:40Z msweet $"
+ * "$Id: error.c 11558 2014-02-06 18:33:34Z msweet $"
  *
  * Raster error handling for CUPS.
  *
- * Copyright 2007-2015 by Apple Inc.
+ * Copyright 2007-2014 by Apple Inc.
  * Copyright 2007 by Easy Software Products.
  *
  * These coded instructions, statements, and computer programs are the
@@ -56,8 +56,6 @@ _cupsRasterAddError(const char *f,    /* I - Printf-style error message */
   ssize_t      bytes;                  /* Bytes in message string */
 
 
-  DEBUG_printf(("_cupsRasterAddError(f=\"%s\", ...)", f));
-
   va_start(ap, f);
   bytes = vsnprintf(s, sizeof(s), f, ap);
   va_end(ap);
@@ -65,8 +63,6 @@ _cupsRasterAddError(const char *f,    /* I - Printf-style error message */
   if (bytes <= 0)
     return;
 
-  DEBUG_printf(("1_cupsRasterAddError: %s", s));
-
   bytes ++;
 
   if ((size_t)bytes >= sizeof(s))
@@ -189,7 +185,7 @@ get_error_buffer(void)
   * Initialize the global data exactly once...
   */
 
-  DEBUG_puts("3get_error_buffer()");
+  DEBUG_puts("get_error_buffer()");
 
   pthread_once(&raster_key_once, raster_init);
 
@@ -200,7 +196,7 @@ get_error_buffer(void)
   if ((buf = (_cups_raster_error_t *)pthread_getspecific(raster_key))
           == NULL)
   {
-    DEBUG_puts("4get_error_buffer: allocating memory for thread.");
+    DEBUG_puts("get_error_buffer: allocating memory for thread...");
 
    /*
     * No, allocate memory as set the pointer for the key...
@@ -209,7 +205,7 @@ get_error_buffer(void)
     buf = calloc(1, sizeof(_cups_raster_error_t));
     pthread_setspecific(raster_key, buf);
 
-    DEBUG_printf(("4get_error_buffer: buf=%p", buf));
+    DEBUG_printf(("    buf=%p\n", buf));
   }
 
  /*
@@ -229,7 +225,8 @@ raster_init(void)
 {
   pthread_key_create(&raster_key, raster_destructor);
 
-  DEBUG_printf(("3raster_init(): raster_key=%x(%u)", (unsigned)raster_key, (unsigned)raster_key));
+  DEBUG_printf(("raster_init(): raster_key=%x(%u)\n", (unsigned)raster_key,
+                (unsigned)raster_key));
 }
 
 
@@ -244,7 +241,7 @@ raster_destructor(void *value)              /* I - Data to free */
                                        /* Error buffer */
 
 
-  DEBUG_printf(("3raster_destructor(value=%p)", value));
+  DEBUG_printf(("raster_destructor(value=%p)\n", value));
 
   if (buf->start)
     free(buf->start);
@@ -275,5 +272,5 @@ get_error_buffer(void)
 
 
 /*
- * End of "$Id: error.c 12748 2015-06-24 15:58:40Z msweet $".
+ * End of "$Id: error.c 11558 2014-02-06 18:33:34Z msweet $".
  */
index a7b5d8933f9705548045ee343f0fed26db9dc1c2..9af404d7e4fab9793275ad7034468bf55eada555 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: gziptoany.c 12656 2015-05-22 17:27:37Z msweet $"
+ * "$Id: gziptoany.c 12655 2015-05-22 17:26:40Z msweet $"
  *
  * GZIP/raw pre-filter for CUPS.
  *
@@ -112,5 +112,5 @@ main(int  argc,                             /* I - Number of command-line arguments */
 
 
 /*
- * End of "$Id: gziptoany.c 12656 2015-05-22 17:27:37Z msweet $".
+ * End of "$Id: gziptoany.c 12655 2015-05-22 17:26:40Z msweet $".
  */
index c8a724552a0ec93951258e84541f40fd3e61e4f9..f784fa09072204db3a4193484442fb03a3837416 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: interpret.c 12748 2015-06-24 15:58:40Z msweet $"
+ * "$Id: interpret.c 11848 2014-05-07 00:26:44Z msweet $"
  *
  * PPD command interpreter for CUPS.
  *
- * Copyright 2007-2015 by Apple Inc.
+ * Copyright 2007-2014 by Apple Inc.
  * Copyright 1993-2007 by Easy Software Products.
  *
  * These coded instructions, statements, and computer programs are the
@@ -91,8 +91,8 @@ static int            setpagedevice(_cups_ps_stack_t *st,
                                        cups_page_header2_t *h,
                                        int *preferred_bits);
 #ifdef DEBUG
-static void            DEBUG_object(const char *prefix, _cups_ps_obj_t *obj);
-static void            DEBUG_stack(const char *prefix, _cups_ps_stack_t *st);
+static void            DEBUG_object(_cups_ps_obj_t *obj);
+static void            DEBUG_stack(_cups_ps_stack_t *st);
 #endif /* DEBUG */
 
 
@@ -547,8 +547,8 @@ _cupsRasterExecPS(
   while ((obj = scan_ps(st, &codeptr)) != NULL)
   {
 #ifdef DEBUG
-    DEBUG_printf(("_cupsRasterExecPS: Stack (%d objects)", st->num_objs));
-    DEBUG_object("_cupsRasterExecPS", obj);
+    DEBUG_printf(("_cupsRasterExecPS: Stack (%d objects)\n", st->num_objs));
+    DEBUG_object(obj);
 #endif /* DEBUG */
 
     switch (obj->type)
@@ -561,11 +561,11 @@ _cupsRasterExecPS(
           pop_stack(st);
 
          if (cleartomark_stack(st))
-           _cupsRasterAddError("cleartomark: Stack underflow.\n");
+           _cupsRasterAddError("cleartomark: Stack underflow!\n");
 
 #ifdef DEBUG
-          DEBUG_puts("1_cupsRasterExecPS:    dup");
-         DEBUG_stack("_cupsRasterExecPS", st);
+          DEBUG_puts("    dup: ");
+         DEBUG_stack(st);
 #endif /* DEBUG */
           break;
 
@@ -577,7 +577,7 @@ _cupsRasterExecPS(
 
 #ifdef DEBUG
             DEBUG_puts("_cupsRasterExecPS: copy");
-           DEBUG_stack("_cupsRasterExecPS", st);
+           DEBUG_stack(st);
 #endif /* DEBUG */
           }
           break;
@@ -588,7 +588,7 @@ _cupsRasterExecPS(
 
 #ifdef DEBUG
           DEBUG_puts("_cupsRasterExecPS: dup");
-         DEBUG_stack("_cupsRasterExecPS", st);
+         DEBUG_stack(st);
 #endif /* DEBUG */
           break;
 
@@ -600,7 +600,7 @@ _cupsRasterExecPS(
 
 #ifdef DEBUG
             DEBUG_puts("_cupsRasterExecPS: index");
-           DEBUG_stack("_cupsRasterExecPS", st);
+           DEBUG_stack(st);
 #endif /* DEBUG */
           }
           break;
@@ -611,7 +611,7 @@ _cupsRasterExecPS(
 
 #ifdef DEBUG
           DEBUG_puts("_cupsRasterExecPS: pop");
-         DEBUG_stack("_cupsRasterExecPS", st);
+         DEBUG_stack(st);
 #endif /* DEBUG */
           break;
 
@@ -630,7 +630,7 @@ _cupsRasterExecPS(
 
 #ifdef DEBUG
               DEBUG_puts("_cupsRasterExecPS: roll");
-             DEBUG_stack("_cupsRasterExecPS", st);
+             DEBUG_stack(st);
 #endif /* DEBUG */
             }
          }
@@ -642,7 +642,7 @@ _cupsRasterExecPS(
 
 #ifdef DEBUG
           DEBUG_puts("_cupsRasterExecPS: setpagedevice");
-         DEBUG_stack("_cupsRasterExecPS", st);
+         DEBUG_stack(st);
 #endif /* DEBUG */
           break;
 
@@ -653,9 +653,10 @@ _cupsRasterExecPS(
          break;
 
       case CUPS_PS_OTHER :
-          _cupsRasterAddError("Unknown operator \"%s\".\n", obj->value.other);
+          _cupsRasterAddError("Unknown operator \"%s\"!\n", obj->value.other);
          error = 1;
-          DEBUG_printf(("_cupsRasterExecPS: Unknown operator \"%s\".", obj->value.other));
+          DEBUG_printf(("_cupsRasterExecPS: Unknown operator \"%s\"!\n",
+                       obj->value.other));
           break;
     }
 
@@ -674,8 +675,8 @@ _cupsRasterExecPS(
     error_stack(st, "Stack not empty:");
 
 #ifdef DEBUG
-    DEBUG_puts("_cupsRasterExecPS: Stack not empty");
-    DEBUG_stack("_cupsRasterExecPS", st);
+    DEBUG_puts("_cupsRasterExecPS: Stack not empty:");
+    DEBUG_stack(st);
 #endif /* DEBUG */
 
     delete_stack(st);
@@ -976,7 +977,7 @@ roll_stack(_cups_ps_stack_t *st,    /* I - Stack */
   int                  n;              /* Index into array */
 
 
-  DEBUG_printf(("3roll_stack(st=%p, s=%d, c=%d)", st, s, c));
+  DEBUG_printf(("    roll_stack(st=%p, s=%d, c=%d)\n", st, s, c));
 
  /*
   * Range check input...
@@ -1434,7 +1435,7 @@ setpagedevice(
   * Now pull /name and value pairs from the dictionary...
   */
 
-  DEBUG_puts("3setpagedevice: Dictionary:");
+  DEBUG_puts("setpagedevice: Dictionary:");
 
   for (obj ++; obj < end; obj ++)
   {
@@ -1449,8 +1450,8 @@ setpagedevice(
     obj ++;
 
 #ifdef DEBUG
-    DEBUG_printf(("4setpagedevice: /%s ", name));
-    DEBUG_object("setpagedevice", obj);
+    DEBUG_printf(("setpagedevice: /%s ", name));
+    DEBUG_object(obj);
 #endif /* DEBUG */
 
    /*
@@ -1600,7 +1601,7 @@ setpagedevice(
       * Ignore unknown name+value...
       */
 
-      DEBUG_printf(("4setpagedevice: Unknown name (\"%s\") or value...\n", name));
+      DEBUG_printf(("    Unknown name (\"%s\") or value...\n", name));
 
       while (obj[1].type != CUPS_PS_NAME && obj < end)
         obj ++;
@@ -1617,92 +1618,91 @@ setpagedevice(
  */
 
 static void
-DEBUG_object(const char *prefix,       /* I - Prefix string */
-             _cups_ps_obj_t *obj)      /* I - Object to print */
+DEBUG_object(_cups_ps_obj_t *obj)      /* I - Object to print */
 {
   switch (obj->type)
   {
     case CUPS_PS_NAME :
-       DEBUG_printf(("4%s: /%s\n", prefix, obj->value.name));
+       DEBUG_printf(("/%s\n", obj->value.name));
        break;
 
     case CUPS_PS_NUMBER :
-       DEBUG_printf(("4%s: %g\n", prefix, obj->value.number));
+       DEBUG_printf(("%g\n", obj->value.number));
        break;
 
     case CUPS_PS_STRING :
-       DEBUG_printf(("4%s: (%s)\n", prefix, obj->value.string));
+       DEBUG_printf(("(%s)\n", obj->value.string));
        break;
 
     case CUPS_PS_BOOLEAN :
        if (obj->value.boolean)
-         DEBUG_printf(("4%s: true", prefix));
+         DEBUG_puts("true");
        else
-         DEBUG_printf(("4%s: false", prefix));
+         DEBUG_puts("false");
        break;
 
     case CUPS_PS_NULL :
-       DEBUG_printf(("4%s: null", prefix));
+       DEBUG_puts("null");
        break;
 
     case CUPS_PS_START_ARRAY :
-       DEBUG_printf(("4%s: [", prefix));
+       DEBUG_puts("[");
        break;
 
     case CUPS_PS_END_ARRAY :
-       DEBUG_printf(("4%s: ]", prefix));
+       DEBUG_puts("]");
        break;
 
     case CUPS_PS_START_DICT :
-       DEBUG_printf(("4%s: <<", prefix));
+       DEBUG_puts("<<");
        break;
 
     case CUPS_PS_END_DICT :
-       DEBUG_printf(("4%s: >>", prefix));
+       DEBUG_puts(">>");
        break;
 
     case CUPS_PS_START_PROC :
-       DEBUG_printf(("4%s: {", prefix));
+       DEBUG_puts("{");
        break;
 
     case CUPS_PS_END_PROC :
-       DEBUG_printf(("4%s: }", prefix));
+       DEBUG_puts("}");
        break;
 
     case CUPS_PS_CLEARTOMARK :
-       DEBUG_printf(("4%s: --cleartomark--", prefix));
+       DEBUG_puts("--cleartomark--");
         break;
 
     case CUPS_PS_COPY :
-       DEBUG_printf(("4%s: --copy--", prefix));
+       DEBUG_puts("--copy--");
         break;
 
     case CUPS_PS_DUP :
-       DEBUG_printf(("4%s: --dup--", prefix));
+       DEBUG_puts("--dup--");
         break;
 
     case CUPS_PS_INDEX :
-       DEBUG_printf(("4%s: --index--", prefix));
+       DEBUG_puts("--index--");
         break;
 
     case CUPS_PS_POP :
-       DEBUG_printf(("4%s: --pop--", prefix));
+       DEBUG_puts("--pop--");
         break;
 
     case CUPS_PS_ROLL :
-       DEBUG_printf(("4%s: --roll--", prefix));
+       DEBUG_puts("--roll--");
         break;
 
     case CUPS_PS_SETPAGEDEVICE :
-       DEBUG_printf(("4%s: --setpagedevice--", prefix));
+       DEBUG_puts("--setpagedevice--");
         break;
 
     case CUPS_PS_STOPPED :
-       DEBUG_printf(("4%s: --stopped--", prefix));
+       DEBUG_puts("--stopped--");
         break;
 
     case CUPS_PS_OTHER :
-       DEBUG_printf(("4%s: --%s--", prefix, obj->value.other));
+       DEBUG_printf(("--%s--\n", obj->value.other));
        break;
   }
 }
@@ -1713,19 +1713,18 @@ DEBUG_object(const char *prefix,        /* I - Prefix string */
  */
 
 static void
-DEBUG_stack(const char       *prefix,  /* I - Prefix string */
-            _cups_ps_stack_t *st)      /* I - Stack */
+DEBUG_stack(_cups_ps_stack_t *st)      /* I - Stack */
 {
   int                  c;              /* Looping var */
   _cups_ps_obj_t       *obj;           /* Current object on stack */
 
 
   for (obj = st->objs, c = st->num_objs; c > 0; c --, obj ++)
-    DEBUG_object(prefix, obj);
+    DEBUG_object(obj);
 }
 #endif /* DEBUG */
 
 
 /*
- * End of "$Id: interpret.c 12748 2015-06-24 15:58:40Z msweet $".
+ * End of "$Id: interpret.c 11848 2014-05-07 00:26:44Z msweet $".
  */
index f5560235b976d23459b12af49485c78c4f24c208..2cdde86caccea4e44607aaadb5fa05b393fe3983 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: pstops.c 12656 2015-05-22 17:27:37Z msweet $"
+ * "$Id: pstops.c 12655 2015-05-22 17:26:40Z msweet $"
  *
  * PostScript filter for CUPS.
  *
@@ -3405,5 +3405,5 @@ write_options(
 
 
 /*
- * End of "$Id: pstops.c 12656 2015-05-22 17:27:37Z msweet $".
+ * End of "$Id: pstops.c 12655 2015-05-22 17:26:40Z msweet $".
  */
index 820382d649cc9e4d7b95fb72122da93927ac59bd..f36ae1a8176adcbf5534e24a332fbf61e9797eaa 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: raster.c 12748 2015-06-24 15:58:40Z msweet $"
+ * "$Id: raster.c 12678 2015-05-28 19:09:48Z msweet $"
  *
  * Raster file routines for CUPS.
  *
@@ -50,9 +50,6 @@ struct _cups_raster_s                 /**** Raster stream data ****/
                        *bufptr,        /* Current (read) position in buffer */
                        *bufend;        /* End of current (read) buffer */
   size_t               bufsize;        /* Buffer size */
-#ifdef DEBUG
-  size_t               iocount;        /* Number of bytes read/written */
-#endif /* DEBUG */
 };
 
 
@@ -196,7 +193,7 @@ cupsRasterOpenIO(
         r->sync == CUPS_RASTER_REVSYNCv2)
       r->swapped = 1;
 
-    DEBUG_printf(("1cupsRasterOpenIO: r->swapped=%d, r->sync=%08x\n", r->swapped, r->sync));
+    DEBUG_printf(("r->swapped=%d, r->sync=%08x\n", r->swapped, r->sync));
   }
   else
   {
@@ -290,8 +287,6 @@ cupsRasterReadHeader2(
   * Get the raster header...
   */
 
-  DEBUG_printf(("cupsRasterReadHeader2(r=%p, h=%p)", r, h));
-
   if (!cups_raster_read_header(r))
   {
     memset(h, 0, sizeof(cups_page_header2_t));
@@ -330,16 +325,9 @@ cupsRasterReadPixels(cups_raster_t *r,     /* I - Raster stream */
   unsigned     count;                  /* Repetition count */
 
 
-  DEBUG_printf(("cupsRasterReadPixels(r=%p, p=%p, len=%u)", r, p, len));
-
   if (r == NULL || r->mode != CUPS_RASTER_READ || r->remaining == 0 ||
       r->header.cupsBytesPerLine == 0)
-  {
-    DEBUG_puts("1cupsRasterReadPixels: Returning 0.");
     return (0);
-  }
-
-  DEBUG_printf(("1cupsRasterReadPixels: compressed=%d, remaining=%u", r->compressed, r->remaining));
 
   if (!r->compressed)
   {
@@ -350,10 +338,7 @@ cupsRasterReadPixels(cups_raster_t *r,     /* I - Raster stream */
     r->remaining -= len / r->header.cupsBytesPerLine;
 
     if (cups_raster_io(r, p, len) < (ssize_t)len)
-    {
-      DEBUG_puts("1cupsRasterReadPixels: Read error, returning 0.");
       return (0);
-    }
 
    /*
     * Swap bytes as needed...
@@ -369,8 +354,6 @@ cupsRasterReadPixels(cups_raster_t *r,      /* I - Raster stream */
     * Return...
     */
 
-    DEBUG_printf(("1cupsRasterReadPixels: Returning %u", len));
-
     return (len);
   }
 
@@ -399,10 +382,7 @@ cupsRasterReadPixels(cups_raster_t *r,     /* I - Raster stream */
       */
 
       if (!cups_raster_read(r, &byte, 1))
-      {
-       DEBUG_puts("1cupsRasterReadPixels: Read error, returning 0.");
        return (0);
-      }
 
       r->count = (unsigned)byte + 1;
 
@@ -419,10 +399,7 @@ cupsRasterReadPixels(cups_raster_t *r,     /* I - Raster stream */
        */
 
         if (!cups_raster_read(r, &byte, 1))
-       {
-         DEBUG_puts("1cupsRasterReadPixels: Read error, returning 0.");
          return (0);
-       }
 
        if (byte & 128)
        {
@@ -436,10 +413,7 @@ cupsRasterReadPixels(cups_raster_t *r,     /* I - Raster stream */
            count = (unsigned)bytes;
 
           if (!cups_raster_read(r, temp, count))
-         {
-           DEBUG_puts("1cupsRasterReadPixels: Read error, returning 0.");
            return (0);
-         }
 
          temp  += count;
          bytes -= count;
@@ -460,10 +434,7 @@ cupsRasterReadPixels(cups_raster_t *r,     /* I - Raster stream */
          bytes -= count;
 
           if (!cups_raster_read(r, temp, r->bpp))
-         {
-           DEBUG_puts("1cupsRasterReadPixels: Read error, returning 0.");
            return (0);
-         }
 
          temp  += r->bpp;
          count -= r->bpp;
@@ -535,8 +506,6 @@ cupsRasterReadPixels(cups_raster_t *r,      /* I - Raster stream */
     p         += bytes;
   }
 
-  DEBUG_printf(("1cupsRasterReadPixels: Returning %u", len));
-
   return (len);
 }
 
@@ -826,15 +795,10 @@ cupsRasterWritePixels(cups_raster_t *r,   /* I - Raster stream */
       * Write the byte-swapped buffer...
       */
 
-      bytes = cups_raster_io(r, r->buffer, len);
+      return ((unsigned)cups_raster_io(r, r->buffer, len));
     }
     else
-      bytes = cups_raster_io(r, p, len);
-
-    if (bytes < len)
-      return (0);
-    else
-      return (len);
+      return ((unsigned)cups_raster_io(r, p, len));
   }
 
  /*
@@ -858,7 +822,7 @@ cupsRasterWritePixels(cups_raster_t *r,     /* I - Raster stream */
 
       if (memcmp(p, r->pcurrent, (size_t)bytes))
       {
-        if (cups_raster_write(r, r->pixels) <= 0)
+        if (!cups_raster_write(r, r->pixels))
          return (0);
 
        r->count = 0;
@@ -887,15 +851,10 @@ cupsRasterWritePixels(cups_raster_t *r,   /* I - Raster stream */
          r->remaining --;
 
          if (r->remaining == 0)
-         {
-           if (cups_raster_write(r, r->pixels) <= 0)
-             return (0);
-           else
-             return (len);
-         }
+           return ((unsigned)cups_raster_write(r, r->pixels));
          else if (r->count == 256)
          {
-           if (cups_raster_write(r, r->pixels) <= 0)
+           if (cups_raster_write(r, r->pixels) == 0)
              return (0);
 
            r->count = 0;
@@ -932,10 +891,7 @@ cupsRasterWritePixels(cups_raster_t *r,    /* I - Raster stream */
        r->remaining --;
 
        if (r->remaining == 0)
-       {
-         if (cups_raster_write(r, r->pixels) <= 0)
-           return (0);
-       }
+         return ((unsigned)cups_raster_write(r, r->pixels));
       }
     }
   }
@@ -955,13 +911,9 @@ cups_raster_read_header(
   size_t       len;                    /* Length for read/swap */
 
 
-  DEBUG_printf(("3cups_raster_read_header(r=%p), r->mode=%d", r, r ? r->mode : 0));
-
   if (r == NULL || r->mode != CUPS_RASTER_READ)
     return (0);
 
-  DEBUG_printf(("4cups_raster_read_header: r->iocount=" CUPS_LLFMT, CUPS_LLCAST r->iocount));
-
  /*
   * Get the length of the raster header...
   */
@@ -971,8 +923,6 @@ cups_raster_read_header(
   else
     len = sizeof(cups_page_header2_t);
 
-  DEBUG_printf(("4cups_raster_read_header: len=%d", (int)len));
-
  /*
   * Read the header...
   */
@@ -980,10 +930,7 @@ cups_raster_read_header(
   memset(&(r->header), 0, sizeof(r->header));
 
   if (cups_raster_read(r, (unsigned char *)&(r->header), len) < (ssize_t)len)
-  {
-    DEBUG_printf(("4cups_raster_read_header: EOF, r->iocount=" CUPS_LLFMT, CUPS_LLCAST r->iocount));
     return (0);
-  }
 
  /*
   * Swap bytes as needed...
@@ -995,19 +942,21 @@ cups_raster_read_header(
                temp;                   /* Temporary copy */
 
 
-    DEBUG_puts("4cups_raster_read_header: Swapping header bytes.");
+    DEBUG_puts("Swapping header bytes...");
 
     for (len = 81, s = &(r->header.AdvanceDistance);
         len > 0;
         len --, s ++)
     {
+      DEBUG_printf(("%08x =>", *s));
+
       temp = *s;
       *s   = ((temp & 0xff) << 24) |
              ((temp & 0xff00) << 8) |
              ((temp & 0xff0000) >> 8) |
              ((temp & 0xff000000) >> 24);
 
-      DEBUG_printf(("4cups_raster_read_header: %08x => %08x", temp, *s));
+      DEBUG_printf((" %08x\n", *s));
     }
   }
 
@@ -1017,8 +966,6 @@ cups_raster_read_header(
 
   cups_raster_update(r);
 
-  DEBUG_printf(("4cups_raster_read_header: cupsBitsPerPixel=%u, cupsBitsPerColor=%u, cupsBytesPerLine=%u, cupsWidth=%u, cupsHeight=%u, r->bpp=%d", r->header.cupsBitsPerPixel, r->header.cupsBitsPerColor, r->header.cupsBytesPerLine, r->header.cupsWidth, r->header.cupsHeight, r->bpp));
-
   return (r->header.cupsBitsPerPixel != 0 && r->header.cupsBitsPerColor != 0 && r->header.cupsBytesPerLine != 0 && r->header.cupsHeight != 0 && (r->header.cupsBytesPerLine % r->bpp) == 0);
 }
 
@@ -1036,31 +983,20 @@ cups_raster_io(cups_raster_t *r, /* I - Raster stream */
                total;                  /* Total bytes read/written */
 
 
-  DEBUG_printf(("5cups_raster_io(r=%p, buf=%p, bytes=" CUPS_LLFMT ")", r, buf, CUPS_LLCAST bytes));
+  DEBUG_printf(("4cups_raster_io(r=%p, buf=%p, bytes=" CUPS_LLFMT ")", r, buf, CUPS_LLCAST bytes));
 
   for (total = 0; total < (ssize_t)bytes; total += count, buf += count)
   {
     count = (*r->iocb)(r->ctx, buf, bytes - (size_t)total);
 
-    DEBUG_printf(("6cups_raster_io: count=%d, total=%d", (int)count, (int)total));
+    DEBUG_printf(("5cups_raster_io: count=%d, total=%d", (int)count,
+                  (int)total));
     if (count == 0)
-    {
-      DEBUG_puts("6cups_raster_io: Returning 0.");
       return (0);
-    }
     else if (count < 0)
-    {
-      DEBUG_puts("6cups_raster_io: Returning -1 on error.");
       return (-1);
-    }
-
-#ifdef DEBUG
-    r->iocount += (size_t)count;
-#endif /* DEBUG */
   }
 
-  DEBUG_printf(("6cups_raster_io: Returning " CUPS_LLFMT ".", CUPS_LLCAST total));
-
   return (total);
 }
 
@@ -1079,7 +1015,7 @@ cups_raster_read(cups_raster_t *r,        /* I - Raster stream */
                total;                  /* Total bytes read */
 
 
-  DEBUG_printf(("5cups_raster_read(r=%p, buf=%p, bytes=" CUPS_LLFMT ")\n", r, buf, CUPS_LLCAST bytes));
+  DEBUG_printf(("cups_raster_read(r=%p, buf=%p, bytes=" CUPS_LLFMT ")\n", r, buf, CUPS_LLCAST bytes));
 
   if (!r->compressed)
     return (cups_raster_io(r, buf, bytes));
@@ -1089,8 +1025,6 @@ cups_raster_read(cups_raster_t *r,        /* I - Raster stream */
   */
 
   count = (ssize_t)(2 * r->header.cupsBytesPerLine);
-  if (count < 65536)
-    count = 65536;
 
   if ((size_t)count > r->bufsize)
   {
@@ -1123,7 +1057,7 @@ cups_raster_read(cups_raster_t *r,        /* I - Raster stream */
   {
     count = (ssize_t)bytes - total;
 
-    DEBUG_printf(("6cups_raster_read: count=" CUPS_LLFMT ", remaining=" CUPS_LLFMT ", buf=%p, bufptr=%p, bufend=%p", CUPS_LLCAST count, CUPS_LLCAST remaining, buf, r->bufptr, r->bufend));
+    DEBUG_printf(("count=" CUPS_LLFMT ", remaining=" CUPS_LLFMT ", buf=%p, bufptr=%p, bufend=%p...\n", CUPS_LLCAST count, CUPS_LLCAST remaining, buf, r->bufptr, r->bufend));
 
     if (remaining == 0)
     {
@@ -1139,10 +1073,6 @@ cups_raster_read(cups_raster_t *r,       /* I - Raster stream */
 
        r->bufptr = r->buffer;
        r->bufend = r->buffer + remaining;
-
-#ifdef DEBUG
-        r->iocount += (size_t)remaining;
-#endif /* DEBUG */
       }
       else
       {
@@ -1155,10 +1085,6 @@ cups_raster_read(cups_raster_t *r,       /* I - Raster stream */
        if (count <= 0)
          return (0);
 
-#ifdef DEBUG
-        r->iocount += (size_t)count;
-#endif /* DEBUG */
-
        continue;
       }
     }
@@ -1208,8 +1134,6 @@ cups_raster_read(cups_raster_t *r,        /* I - Raster stream */
     }
   }
 
-  DEBUG_printf(("6cups_raster_read: Returning %ld", (long)total));
-
   return (total);
 }
 
@@ -1359,15 +1283,15 @@ cups_raster_write(
                        count;          /* Count */
 
 
-  DEBUG_printf(("3cups_raster_write(r=%p, pixels=%p)\n", r, pixels));
+  DEBUG_printf(("cups_raster_write(r=%p, pixels=%p)\n", r, pixels));
 
  /*
   * Allocate a write buffer as needed...
   */
 
   count = r->header.cupsBytesPerLine * 2;
-  if (count < 65536)
-    count = 65536;
+  if (count < 3)
+    count = 3;
 
   if ((size_t)count > r->bufsize)
   {
@@ -1377,10 +1301,7 @@ cups_raster_write(
       wptr = malloc(count);
 
     if (!wptr)
-    {
-      DEBUG_printf(("4cups_raster_write: Unable to allocate " CUPS_LLFMT " bytes for raster buffer: %s", CUPS_LLCAST count, strerror(errno)));
       return (-1);
-    }
 
     r->buffer  = wptr;
     r->bufsize = count;
@@ -1453,8 +1374,6 @@ cups_raster_write(
     }
   }
 
-  DEBUG_printf(("4cups_raster_write: Writing " CUPS_LLFMT " bytes.", CUPS_LLCAST (wptr - r->buffer)));
-
   return (cups_raster_io(r, r->buffer, (size_t)(wptr - r->buffer)));
 }
 
@@ -1479,12 +1398,7 @@ cups_read_fd(void          *ctx, /* I - File descriptor as pointer */
   while ((count = read(fd, buf, bytes)) < 0)
 #endif /* WIN32 */
     if (errno != EINTR && errno != EAGAIN)
-    {
-      DEBUG_printf(("4cups_read_fd: %s", strerror(errno)));
       return (-1);
-    }
-
-  DEBUG_printf(("4cups_read_fd: Returning %d bytes.", (int)count));
 
   return (count);
 }
@@ -1536,15 +1450,12 @@ cups_write_fd(void          *ctx,       /* I - File descriptor pointer */
   while ((count = write(fd, buf, bytes)) < 0)
 #endif /* WIN32 */
     if (errno != EINTR && errno != EAGAIN)
-    {
-      DEBUG_printf(("4cups_write_fd: %s", strerror(errno)));
       return (-1);
-    }
 
   return (count);
 }
 
 
 /*
- * End of "$Id: raster.c 12748 2015-06-24 15:58:40Z msweet $".
+ * End of "$Id: raster.c 12678 2015-05-28 19:09:48Z msweet $".
  */
index cd203416a082cee312356ab0b5aa4fc0c7803465..f5602d069020134fdebaf51300fb9c57397c3df2 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: rastertoepson.c 12618 2015-05-06 20:28:48Z msweet $"
+ * "$Id: rastertoepson.c 12617 2015-05-06 20:28:22Z msweet $"
  *
  * EPSON ESC/P and ESC/P2 filter for CUPS.
  *
@@ -1150,5 +1150,5 @@ main(int  argc,                           /* I - Number of command-line arguments */
 
 
 /*
- * End of "$Id: rastertoepson.c 12618 2015-05-06 20:28:48Z msweet $".
+ * End of "$Id: rastertoepson.c 12617 2015-05-06 20:28:22Z msweet $".
  */
index 1178688b0711ddb58bbed994e53f6d15342b2def..188e34bbfa208598eea0ab7317b3414f7a15319d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: rastertohp.c 12575 2015-03-26 16:36:54Z msweet $"
+ * "$Id: rastertohp.c 12574 2015-03-26 16:36:18Z msweet $"
  *
  * Hewlett-Packard Page Control Language filter for CUPS.
  *
@@ -871,5 +871,5 @@ main(int  argc,                             /* I - Number of command-line arguments */
 
 
 /*
- * End of "$Id: rastertohp.c 12575 2015-03-26 16:36:54Z msweet $".
+ * End of "$Id: rastertohp.c 12574 2015-03-26 16:36:18Z msweet $".
  */
index aa17478ddeb5ada78d82ec15aa37f46effc22404..03ad0aba68b41ebfa2e42945bec117b89bec932d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: rastertopwg.c 12610 2015-05-06 12:24:54Z msweet $"
+ * "$Id: rastertopwg.c 12609 2015-05-06 12:24:47Z msweet $"
  *
  * CUPS raster to PWG raster format filter for CUPS.
  *
@@ -459,5 +459,5 @@ main(int  argc,                             /* I - Number of command-line args */
 
 
 /*
- * End of "$Id: rastertopwg.c 12610 2015-05-06 12:24:54Z msweet $".
+ * End of "$Id: rastertopwg.c 12609 2015-05-06 12:24:47Z msweet $".
  */
index 56842fa70189e8200b2045f0b22b2357aa20df26..bd7185bab71cdd1d571ebfbaf420548abd4aaba3 100644 (file)
@@ -1,5 +1,5 @@
 #
-# "$Id: Makefile 12347 2014-12-09 21:47:23Z msweet $"
+# "$Id: Makefile 12233 2014-10-25 00:03:02Z msweet $"
 #
 # Locale file makefile for CUPS.
 #
@@ -204,5 +204,5 @@ include Dependencies
 
 
 #
-# End of "$Id: Makefile 12347 2014-12-09 21:47:23Z msweet $".
+# End of "$Id: Makefile 12233 2014-10-25 00:03:02Z msweet $".
 #
index 591989b866b2af86b1d81f17adeee480f2bfb19a..d7d2101e866bab1942b969642840f045b07bb740 100644 (file)
@@ -30,7 +30,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 1.6\n"
 "Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2014-08-29 22:25-0400\n"
+"POT-Creation-Date: 2015-06-08 17:14-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -192,61 +192,61 @@ msgstr ""
 msgid "\treason unknown"
 msgstr ""
 
-#: systemv/cupstestppd.c:454
+#: systemv/cupstestppd.c:434
 msgid ""
 "\n"
 "    DETAILED CONFORMANCE TEST RESULTS"
 msgstr ""
 
-#: systemv/cupstestppd.c:3820
+#: systemv/cupstestppd.c:3864
 msgid "                          Ignore specific warnings."
 msgstr ""
 
-#: systemv/cupstestppd.c:3824
+#: systemv/cupstestppd.c:3868
 msgid "                          Issue warnings instead of errors."
 msgstr ""
 
-#: systemv/cupstestppd.c:410 systemv/cupstestppd.c:415
+#: systemv/cupstestppd.c:390 systemv/cupstestppd.c:395
 msgid "                REF: Page 15, section 3.1."
 msgstr ""
 
-#: systemv/cupstestppd.c:405
+#: systemv/cupstestppd.c:385
 msgid "                REF: Page 15, section 3.2."
 msgstr ""
 
-#: systemv/cupstestppd.c:425
+#: systemv/cupstestppd.c:405
 msgid "                REF: Page 19, section 3.3."
 msgstr ""
 
-#: systemv/cupstestppd.c:378
+#: systemv/cupstestppd.c:358
 msgid "                REF: Page 20, section 3.4."
 msgstr ""
 
-#: systemv/cupstestppd.c:430
+#: systemv/cupstestppd.c:410
 msgid "                REF: Page 27, section 3.5."
 msgstr ""
 
-#: systemv/cupstestppd.c:373
+#: systemv/cupstestppd.c:353
 msgid "                REF: Page 42, section 5.2."
 msgstr ""
 
-#: systemv/cupstestppd.c:420
+#: systemv/cupstestppd.c:400
 msgid "                REF: Pages 16-17, section 3.2."
 msgstr ""
 
-#: systemv/cupstestppd.c:390
+#: systemv/cupstestppd.c:370
 msgid "                REF: Pages 42-45, section 5.2."
 msgstr ""
 
-#: systemv/cupstestppd.c:384
+#: systemv/cupstestppd.c:364
 msgid "                REF: Pages 45-46, section 5.2."
 msgstr ""
 
-#: systemv/cupstestppd.c:395
+#: systemv/cupstestppd.c:375
 msgid "                REF: Pages 48-49, section 5.2."
 msgstr ""
 
-#: systemv/cupstestppd.c:400
+#: systemv/cupstestppd.c:380
 msgid "                REF: Pages 52-54, section 5.2."
 msgstr ""
 
@@ -255,147 +255,147 @@ msgstr ""
 msgid "        %-39.39s %.0f bytes"
 msgstr ""
 
-#: systemv/cupstestppd.c:589
+#: systemv/cupstestppd.c:569
 #, c-format
 msgid "        PASS    Default%s"
 msgstr ""
 
-#: systemv/cupstestppd.c:524
+#: systemv/cupstestppd.c:504
 msgid "        PASS    DefaultImageableArea"
 msgstr ""
 
-#: systemv/cupstestppd.c:558
+#: systemv/cupstestppd.c:538
 msgid "        PASS    DefaultPaperDimension"
 msgstr ""
 
-#: systemv/cupstestppd.c:631
+#: systemv/cupstestppd.c:611
 msgid "        PASS    FileVersion"
 msgstr ""
 
-#: systemv/cupstestppd.c:675
+#: systemv/cupstestppd.c:655
 msgid "        PASS    FormatVersion"
 msgstr ""
 
-#: systemv/cupstestppd.c:695
+#: systemv/cupstestppd.c:675
 msgid "        PASS    LanguageEncoding"
 msgstr ""
 
-#: systemv/cupstestppd.c:715
+#: systemv/cupstestppd.c:695
 msgid "        PASS    LanguageVersion"
 msgstr ""
 
-#: systemv/cupstestppd.c:769
+#: systemv/cupstestppd.c:749
 msgid "        PASS    Manufacturer"
 msgstr ""
 
-#: systemv/cupstestppd.c:809
+#: systemv/cupstestppd.c:789
 msgid "        PASS    ModelName"
 msgstr ""
 
-#: systemv/cupstestppd.c:829
+#: systemv/cupstestppd.c:809
 msgid "        PASS    NickName"
 msgstr ""
 
-#: systemv/cupstestppd.c:889
+#: systemv/cupstestppd.c:869
 msgid "        PASS    PCFileName"
 msgstr ""
 
-#: systemv/cupstestppd.c:964
+#: systemv/cupstestppd.c:944
 msgid "        PASS    PSVersion"
 msgstr ""
 
-#: systemv/cupstestppd.c:869
+#: systemv/cupstestppd.c:849
 msgid "        PASS    PageRegion"
 msgstr ""
 
-#: systemv/cupstestppd.c:849
+#: systemv/cupstestppd.c:829
 msgid "        PASS    PageSize"
 msgstr ""
 
-#: systemv/cupstestppd.c:924
+#: systemv/cupstestppd.c:904
 msgid "        PASS    Product"
 msgstr ""
 
-#: systemv/cupstestppd.c:999
+#: systemv/cupstestppd.c:979
 msgid "        PASS    ShortNickName"
 msgstr ""
 
-#: systemv/cupstestppd.c:1374
+#: systemv/cupstestppd.c:1354
 #, c-format
 msgid "        WARN    %s has no corresponding options."
 msgstr ""
 
-#: systemv/cupstestppd.c:1486
+#: systemv/cupstestppd.c:1466
 #, c-format
 msgid ""
 "        WARN    %s shares a common prefix with %s\n"
 "                REF: Page 15, section 3.2."
 msgstr ""
 
-#: systemv/cupstestppd.c:1345
+#: systemv/cupstestppd.c:1325
 #, c-format
 msgid ""
 "        WARN    Duplex option keyword %s may not work as expected and should be named Duplex.\n"
 "                REF: Page 122, section 5.17"
 msgstr ""
 
-#: systemv/cupstestppd.c:1744
+#: systemv/cupstestppd.c:1724
 msgid "        WARN    File contains a mix of CR, LF, and CR LF line endings."
 msgstr ""
 
-#: systemv/cupstestppd.c:1390
+#: systemv/cupstestppd.c:1370
 msgid ""
 "        WARN    LanguageEncoding required by PPD 4.3 spec.\n"
 "                REF: Pages 56-57, section 5.3."
 msgstr ""
 
-#: systemv/cupstestppd.c:1726
+#: systemv/cupstestppd.c:1706
 #, c-format
 msgid "        WARN    Line %d only contains whitespace."
 msgstr ""
 
-#: systemv/cupstestppd.c:1398
+#: systemv/cupstestppd.c:1378
 msgid ""
 "        WARN    Manufacturer required by PPD 4.3 spec.\n"
 "                REF: Pages 58-59, section 5.3."
 msgstr ""
 
-#: systemv/cupstestppd.c:1749
+#: systemv/cupstestppd.c:1729
 msgid "        WARN    Non-Windows PPD files should use lines ending with only LF, not CR LF."
 msgstr ""
 
-#: systemv/cupstestppd.c:1382
+#: systemv/cupstestppd.c:1362
 #, c-format
 msgid ""
 "        WARN    Obsolete PPD version %.1f.\n"
 "                REF: Page 42, section 5.2."
 msgstr ""
 
-#: systemv/cupstestppd.c:1413
+#: systemv/cupstestppd.c:1393
 msgid ""
 "        WARN    PCFileName longer than 8.3 in violation of PPD spec.\n"
 "                REF: Pages 61-62, section 5.3."
 msgstr ""
 
-#: systemv/cupstestppd.c:1421
+#: systemv/cupstestppd.c:1401
 msgid ""
 "        WARN    PCFileName should contain a unique filename.\n"
 "                REF: Pages 61-62, section 5.3."
 msgstr ""
 
-#: systemv/cupstestppd.c:1456
+#: systemv/cupstestppd.c:1436
 msgid ""
 "        WARN    Protocols contains PJL but JCL attributes are not set.\n"
 "                REF: Pages 78-79, section 5.7."
 msgstr ""
 
-#: systemv/cupstestppd.c:1447
+#: systemv/cupstestppd.c:1427
 msgid ""
 "        WARN    Protocols contains both PJL and BCP; expected TBCP.\n"
 "                REF: Pages 78-79, section 5.7."
 msgstr ""
 
-#: systemv/cupstestppd.c:1430
+#: systemv/cupstestppd.c:1410
 msgid ""
 "        WARN    ShortNickName required by PPD 4.3 spec.\n"
 "                REF: Pages 64-65, section 5.3."
@@ -409,376 +409,376 @@ msgstr ""
 msgid "       cupstestdsc [options] -"
 msgstr ""
 
-#: systemv/cupstestppd.c:3815
+#: systemv/cupstestppd.c:3859
 msgid "       program | cupstestppd [options] -"
 msgstr ""
 
-#: systemv/cupstestppd.c:3747
+#: systemv/cupstestppd.c:3791
 #, c-format
 msgid ""
 "      %s  \"%s %s\" conflicts with \"%s %s\"\n"
 "                (constraint=\"%s %s %s %s\")."
 msgstr ""
 
-#: systemv/cupstestppd.c:2248
+#: systemv/cupstestppd.c:2228
 #, c-format
 msgid "      %s  %s %s does not exist."
 msgstr ""
 
-#: systemv/cupstestppd.c:3904
+#: systemv/cupstestppd.c:3948
 #, c-format
 msgid "      %s  %s file \"%s\" has the wrong capitalization."
 msgstr ""
 
-#: systemv/cupstestppd.c:2318
+#: systemv/cupstestppd.c:2298
 #, c-format
 msgid ""
 "      %s  Bad %s choice %s.\n"
 "                REF: Page 122, section 5.17"
 msgstr ""
 
-#: systemv/cupstestppd.c:3507 systemv/cupstestppd.c:3556
-#: systemv/cupstestppd.c:3595
+#: systemv/cupstestppd.c:3551 systemv/cupstestppd.c:3600
+#: systemv/cupstestppd.c:3639
 #, c-format
 msgid "      %s  Bad UTF-8 \"%s\" translation string for option %s, choice %s."
 msgstr ""
 
-#: systemv/cupstestppd.c:3461
+#: systemv/cupstestppd.c:3505
 #, c-format
 msgid "      %s  Bad UTF-8 \"%s\" translation string for option %s."
 msgstr ""
 
-#: systemv/cupstestppd.c:2389
+#: systemv/cupstestppd.c:2369 systemv/cupstestppd.c:2391
 #, c-format
 msgid "      %s  Bad cupsFilter value \"%s\"."
 msgstr ""
 
-#: systemv/cupstestppd.c:2475
+#: systemv/cupstestppd.c:2487 systemv/cupstestppd.c:2509
 #, c-format
 msgid "      %s  Bad cupsFilter2 value \"%s\"."
 msgstr ""
 
-#: systemv/cupstestppd.c:2964
+#: systemv/cupstestppd.c:3008
 #, c-format
 msgid "      %s  Bad cupsICCProfile %s."
 msgstr ""
 
-#: systemv/cupstestppd.c:2571
+#: systemv/cupstestppd.c:2615
 #, c-format
 msgid "      %s  Bad cupsPreFilter value \"%s\"."
 msgstr ""
 
-#: systemv/cupstestppd.c:1822
+#: systemv/cupstestppd.c:1802
 #, c-format
 msgid "      %s  Bad cupsUIConstraints %s: \"%s\""
 msgstr ""
 
-#: systemv/cupstestppd.c:3411
+#: systemv/cupstestppd.c:3455
 #, c-format
 msgid "      %s  Bad language \"%s\"."
 msgstr ""
 
-#: systemv/cupstestppd.c:2433 systemv/cupstestppd.c:2529
-#: systemv/cupstestppd.c:2615 systemv/cupstestppd.c:2673
-#: systemv/cupstestppd.c:2728 systemv/cupstestppd.c:2783
-#: systemv/cupstestppd.c:2838 systemv/cupstestppd.c:2891
-#: systemv/cupstestppd.c:3013
+#: systemv/cupstestppd.c:2445 systemv/cupstestppd.c:2573
+#: systemv/cupstestppd.c:2659 systemv/cupstestppd.c:2717
+#: systemv/cupstestppd.c:2772 systemv/cupstestppd.c:2827
+#: systemv/cupstestppd.c:2882 systemv/cupstestppd.c:2935
+#: systemv/cupstestppd.c:3057
 #, c-format
 msgid "      %s  Bad permissions on %s file \"%s\"."
 msgstr ""
 
-#: systemv/cupstestppd.c:2373 systemv/cupstestppd.c:2459
-#: systemv/cupstestppd.c:2555 systemv/cupstestppd.c:2642
-#: systemv/cupstestppd.c:2697 systemv/cupstestppd.c:2752
-#: systemv/cupstestppd.c:2807 systemv/cupstestppd.c:2862
+#: systemv/cupstestppd.c:2353 systemv/cupstestppd.c:2471
+#: systemv/cupstestppd.c:2599 systemv/cupstestppd.c:2686
+#: systemv/cupstestppd.c:2741 systemv/cupstestppd.c:2796
+#: systemv/cupstestppd.c:2851 systemv/cupstestppd.c:2906
 #, c-format
 msgid "      %s  Bad spelling of %s - should be %s."
 msgstr ""
 
-#: systemv/cupstestppd.c:2907
+#: systemv/cupstestppd.c:2951
 #, c-format
 msgid "      %s  Cannot provide both APScanAppPath and APScanAppBundleID."
 msgstr ""
 
-#: systemv/cupstestppd.c:2205
+#: systemv/cupstestppd.c:2185
 #, c-format
 msgid "      %s  Default choices conflicting."
 msgstr ""
 
-#: systemv/cupstestppd.c:1803
+#: systemv/cupstestppd.c:1783
 #, c-format
 msgid "      %s  Empty cupsUIConstraints %s"
 msgstr ""
 
-#: systemv/cupstestppd.c:3539 systemv/cupstestppd.c:3579
+#: systemv/cupstestppd.c:3583 systemv/cupstestppd.c:3623
 #, c-format
 msgid "      %s  Missing \"%s\" translation string for option %s, choice %s."
 msgstr ""
 
-#: systemv/cupstestppd.c:3447
+#: systemv/cupstestppd.c:3491
 #, c-format
 msgid "      %s  Missing \"%s\" translation string for option %s."
 msgstr ""
 
-#: systemv/cupstestppd.c:2418 systemv/cupstestppd.c:2514
-#: systemv/cupstestppd.c:2600 systemv/cupstestppd.c:2658
-#: systemv/cupstestppd.c:2713 systemv/cupstestppd.c:2768
-#: systemv/cupstestppd.c:2823 systemv/cupstestppd.c:2875
-#: systemv/cupstestppd.c:2998
+#: systemv/cupstestppd.c:2430 systemv/cupstestppd.c:2558
+#: systemv/cupstestppd.c:2644 systemv/cupstestppd.c:2702
+#: systemv/cupstestppd.c:2757 systemv/cupstestppd.c:2812
+#: systemv/cupstestppd.c:2867 systemv/cupstestppd.c:2919
+#: systemv/cupstestppd.c:3042
 #, c-format
 msgid "      %s  Missing %s file \"%s\"."
 msgstr ""
 
-#: systemv/cupstestppd.c:3121
+#: systemv/cupstestppd.c:3165
 #, c-format
 msgid ""
 "      %s  Missing REQUIRED PageRegion option.\n"
 "                REF: Page 100, section 5.14."
 msgstr ""
 
-#: systemv/cupstestppd.c:3106
+#: systemv/cupstestppd.c:3150
 #, c-format
 msgid ""
 "      %s  Missing REQUIRED PageSize option.\n"
 "                REF: Page 99, section 5.14."
 msgstr ""
 
-#: systemv/cupstestppd.c:2013 systemv/cupstestppd.c:2054
+#: systemv/cupstestppd.c:1993 systemv/cupstestppd.c:2034
 #, c-format
 msgid "      %s  Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\"."
 msgstr ""
 
-#: systemv/cupstestppd.c:1908
+#: systemv/cupstestppd.c:1888
 #, c-format
 msgid "      %s  Missing choice *%s %s in cupsUIConstraints %s: \"%s\""
 msgstr ""
 
-#: systemv/cupstestppd.c:1840
+#: systemv/cupstestppd.c:1820
 #, c-format
 msgid "      %s  Missing cupsUIResolver %s"
 msgstr ""
 
-#: systemv/cupstestppd.c:1999 systemv/cupstestppd.c:2040
+#: systemv/cupstestppd.c:1979 systemv/cupstestppd.c:2020
 #, c-format
 msgid "      %s  Missing option %s in UIConstraints \"*%s %s *%s %s\"."
 msgstr ""
 
-#: systemv/cupstestppd.c:1892
+#: systemv/cupstestppd.c:1872
 #, c-format
 msgid "      %s  Missing option %s in cupsUIConstraints %s: \"%s\""
 msgstr ""
 
-#: systemv/cupstestppd.c:3633
+#: systemv/cupstestppd.c:3677
 #, c-format
 msgid "      %s  No base translation \"%s\" is included in file."
 msgstr ""
 
-#: systemv/cupstestppd.c:2294
+#: systemv/cupstestppd.c:2274
 #, c-format
 msgid ""
 "      %s  REQUIRED %s does not define choice None.\n"
 "                REF: Page 122, section 5.17"
 msgstr ""
 
-#: systemv/cupstestppd.c:3180 systemv/cupstestppd.c:3194
+#: systemv/cupstestppd.c:3224 systemv/cupstestppd.c:3238
 #, c-format
 msgid "      %s  Size \"%s\" defined for %s but not for %s."
 msgstr ""
 
-#: systemv/cupstestppd.c:3160
+#: systemv/cupstestppd.c:3204
 #, c-format
 msgid "      %s  Size \"%s\" has unexpected dimensions (%gx%g)."
 msgstr ""
 
-#: systemv/cupstestppd.c:3351
+#: systemv/cupstestppd.c:3395
 #, c-format
 msgid "      %s  Size \"%s\" should be \"%s\"."
 msgstr ""
 
-#: systemv/cupstestppd.c:3300
+#: systemv/cupstestppd.c:3344
 #, c-format
 msgid "      %s  Size \"%s\" should be the Adobe standard name \"%s\"."
 msgstr ""
 
-#: systemv/cupstestppd.c:3041
+#: systemv/cupstestppd.c:3085
 #, c-format
 msgid "      %s  cupsICCProfile %s hash value collides with %s."
 msgstr ""
 
-#: systemv/cupstestppd.c:1963
+#: systemv/cupstestppd.c:1943
 #, c-format
 msgid "      %s  cupsUIResolver %s causes a loop."
 msgstr ""
 
-#: systemv/cupstestppd.c:1945
+#: systemv/cupstestppd.c:1925
 #, c-format
 msgid "      %s  cupsUIResolver %s does not list at least two different options."
 msgstr ""
 
-#: systemv/cupstestppd.c:1168
+#: systemv/cupstestppd.c:1148
 #, c-format
 msgid ""
 "      **FAIL**  %s must be 1284DeviceID\n"
 "                REF: Page 72, section 5.5"
 msgstr ""
 
-#: systemv/cupstestppd.c:580
+#: systemv/cupstestppd.c:560
 #, c-format
 msgid ""
 "      **FAIL**  Bad Default%s %s\n"
 "                REF: Page 40, section 4.5."
 msgstr ""
 
-#: systemv/cupstestppd.c:514
+#: systemv/cupstestppd.c:494
 #, c-format
 msgid ""
 "      **FAIL**  Bad DefaultImageableArea %s\n"
 "                REF: Page 102, section 5.15."
 msgstr ""
 
-#: systemv/cupstestppd.c:550
+#: systemv/cupstestppd.c:530
 #, c-format
 msgid ""
 "      **FAIL**  Bad DefaultPaperDimension %s\n"
 "                REF: Page 103, section 5.15."
 msgstr ""
 
-#: systemv/cupstestppd.c:623
+#: systemv/cupstestppd.c:603
 #, c-format
 msgid ""
 "      **FAIL**  Bad FileVersion \"%s\"\n"
 "                REF: Page 56, section 5.3."
 msgstr ""
 
-#: systemv/cupstestppd.c:667
+#: systemv/cupstestppd.c:647
 #, c-format
 msgid ""
 "      **FAIL**  Bad FormatVersion \"%s\"\n"
 "                REF: Page 56, section 5.3."
 msgstr ""
 
-#: systemv/cupstestppd.c:1025
+#: systemv/cupstestppd.c:1005
 msgid ""
 "      **FAIL**  Bad JobPatchFile attribute in file\n"
 "                REF: Page 24, section 3.4."
 msgstr ""
 
-#: systemv/cupstestppd.c:1213
+#: systemv/cupstestppd.c:1193
 #, c-format
 msgid "      **FAIL**  Bad LanguageEncoding %s - must be ISOLatin1."
 msgstr ""
 
-#: systemv/cupstestppd.c:1227
+#: systemv/cupstestppd.c:1207
 #, c-format
 msgid "      **FAIL**  Bad LanguageVersion %s - must be English."
 msgstr ""
 
-#: systemv/cupstestppd.c:743 systemv/cupstestppd.c:760
+#: systemv/cupstestppd.c:723 systemv/cupstestppd.c:740
 #, c-format
 msgid ""
 "      **FAIL**  Bad Manufacturer (should be \"%s\")\n"
 "                REF: Page 211, table D.1."
 msgstr ""
 
-#: systemv/cupstestppd.c:800
+#: systemv/cupstestppd.c:780
 #, c-format
 msgid ""
 "      **FAIL**  Bad ModelName - \"%c\" not allowed in string.\n"
 "                REF: Pages 59-60, section 5.3."
 msgstr ""
 
-#: systemv/cupstestppd.c:956
+#: systemv/cupstestppd.c:936
 msgid ""
 "      **FAIL**  Bad PSVersion - not \"(string) int\".\n"
 "                REF: Pages 62-64, section 5.3."
 msgstr ""
 
-#: systemv/cupstestppd.c:917
+#: systemv/cupstestppd.c:897
 msgid ""
 "      **FAIL**  Bad Product - not \"(string)\".\n"
 "                REF: Page 62, section 5.3."
 msgstr ""
 
-#: systemv/cupstestppd.c:991
+#: systemv/cupstestppd.c:971
 msgid ""
 "      **FAIL**  Bad ShortNickName - longer than 31 chars.\n"
 "                REF: Pages 64-65, section 5.3."
 msgstr ""
 
-#: systemv/cupstestppd.c:1149
+#: systemv/cupstestppd.c:1129
 #, c-format
 msgid ""
 "      **FAIL**  Bad option %s choice %s\n"
 "                REF: Page 84, section 5.9"
 msgstr ""
 
-#: systemv/cupstestppd.c:3774 systemv/cupstestppd.c:3796
+#: systemv/cupstestppd.c:3818 systemv/cupstestppd.c:3840
 #, c-format
 msgid "      **FAIL**  Default option code cannot be interpreted: %s"
 msgstr ""
 
-#: systemv/cupstestppd.c:1286
+#: systemv/cupstestppd.c:1266
 #, c-format
 msgid "      **FAIL**  Default translation string for option %s choice %s contains 8-bit characters."
 msgstr ""
 
-#: systemv/cupstestppd.c:1259
+#: systemv/cupstestppd.c:1239
 #, c-format
 msgid "      **FAIL**  Default translation string for option %s contains 8-bit characters."
 msgstr ""
 
-#: systemv/cupstestppd.c:2101
+#: systemv/cupstestppd.c:2081
 #, c-format
 msgid "      **FAIL**  Group names %s and %s differ only by case."
 msgstr ""
 
-#: systemv/cupstestppd.c:2146
+#: systemv/cupstestppd.c:2126
 #, c-format
 msgid "      **FAIL**  Multiple occurrences of option %s choice name %s."
 msgstr ""
 
-#: systemv/cupstestppd.c:2163
+#: systemv/cupstestppd.c:2143
 #, c-format
 msgid "      **FAIL**  Option %s choice names %s and %s differ only by case."
 msgstr ""
 
-#: systemv/cupstestppd.c:2123
+#: systemv/cupstestppd.c:2103
 #, c-format
 msgid "      **FAIL**  Option names %s and %s differ only by case."
 msgstr ""
 
-#: systemv/cupstestppd.c:600
+#: systemv/cupstestppd.c:580
 #, c-format
 msgid ""
 "      **FAIL**  REQUIRED Default%s\n"
 "                REF: Page 40, section 4.5."
 msgstr ""
 
-#: systemv/cupstestppd.c:499
+#: systemv/cupstestppd.c:479
 msgid ""
 "      **FAIL**  REQUIRED DefaultImageableArea\n"
 "                REF: Page 102, section 5.15."
 msgstr ""
 
-#: systemv/cupstestppd.c:535
+#: systemv/cupstestppd.c:515
 msgid ""
 "      **FAIL**  REQUIRED DefaultPaperDimension\n"
 "                REF: Page 103, section 5.15."
 msgstr ""
 
-#: systemv/cupstestppd.c:641
+#: systemv/cupstestppd.c:621
 msgid ""
 "      **FAIL**  REQUIRED FileVersion\n"
 "                REF: Page 56, section 5.3."
 msgstr ""
 
-#: systemv/cupstestppd.c:685
+#: systemv/cupstestppd.c:665
 msgid ""
 "      **FAIL**  REQUIRED FormatVersion\n"
 "                REF: Page 56, section 5.3."
 msgstr ""
 
-#: systemv/cupstestppd.c:1076
+#: systemv/cupstestppd.c:1056
 #, c-format
 msgid ""
 "      **FAIL**  REQUIRED ImageableArea for PageSize %s\n"
@@ -786,68 +786,68 @@ msgid ""
 "                REF: Page 102, section 5.15."
 msgstr ""
 
-#: systemv/cupstestppd.c:705
+#: systemv/cupstestppd.c:685
 msgid ""
 "      **FAIL**  REQUIRED LanguageEncoding\n"
 "                REF: Pages 56-57, section 5.3."
 msgstr ""
 
-#: systemv/cupstestppd.c:725
+#: systemv/cupstestppd.c:705
 msgid ""
 "      **FAIL**  REQUIRED LanguageVersion\n"
 "                REF: Pages 57-58, section 5.3."
 msgstr ""
 
-#: systemv/cupstestppd.c:779
+#: systemv/cupstestppd.c:759
 msgid ""
 "      **FAIL**  REQUIRED Manufacturer\n"
 "                REF: Pages 58-59, section 5.3."
 msgstr ""
 
-#: systemv/cupstestppd.c:819
+#: systemv/cupstestppd.c:799
 msgid ""
 "      **FAIL**  REQUIRED ModelName\n"
 "                REF: Pages 59-60, section 5.3."
 msgstr ""
 
-#: systemv/cupstestppd.c:839
+#: systemv/cupstestppd.c:819
 msgid ""
 "      **FAIL**  REQUIRED NickName\n"
 "                REF: Page 60, section 5.3."
 msgstr ""
 
-#: systemv/cupstestppd.c:899
+#: systemv/cupstestppd.c:879
 msgid ""
 "      **FAIL**  REQUIRED PCFileName\n"
 "                REF: Pages 61-62, section 5.3."
 msgstr ""
 
-#: systemv/cupstestppd.c:974
+#: systemv/cupstestppd.c:954
 msgid ""
 "      **FAIL**  REQUIRED PSVersion\n"
 "                REF: Pages 62-64, section 5.3."
 msgstr ""
 
-#: systemv/cupstestppd.c:879
+#: systemv/cupstestppd.c:859
 msgid ""
 "      **FAIL**  REQUIRED PageRegion\n"
 "                REF: Page 100, section 5.14."
 msgstr ""
 
-#: systemv/cupstestppd.c:1045
+#: systemv/cupstestppd.c:1025
 msgid ""
 "      **FAIL**  REQUIRED PageSize\n"
 "                REF: Page 41, section 5.\n"
 "                REF: Page 99, section 5.14."
 msgstr ""
 
-#: systemv/cupstestppd.c:859
+#: systemv/cupstestppd.c:839
 msgid ""
 "      **FAIL**  REQUIRED PageSize\n"
 "                REF: Pages 99-100, section 5.14."
 msgstr ""
 
-#: systemv/cupstestppd.c:1098
+#: systemv/cupstestppd.c:1078
 #, c-format
 msgid ""
 "      **FAIL**  REQUIRED PaperDimension for PageSize %s\n"
@@ -855,25 +855,25 @@ msgid ""
 "                REF: Page 103, section 5.15."
 msgstr ""
 
-#: systemv/cupstestppd.c:934
+#: systemv/cupstestppd.c:914
 msgid ""
 "      **FAIL**  REQUIRED Product\n"
 "                REF: Page 62, section 5.3."
 msgstr ""
 
-#: systemv/cupstestppd.c:1009
+#: systemv/cupstestppd.c:989
 msgid ""
 "      **FAIL**  REQUIRED ShortNickName\n"
 "                REF: Page 64-65, section 5.3."
 msgstr ""
 
-#: systemv/cupstestppd.c:334 systemv/cupstestppd.c:353
-#: systemv/cupstestppd.c:365
+#: systemv/cupstestppd.c:314 systemv/cupstestppd.c:333
+#: systemv/cupstestppd.c:345
 #, c-format
 msgid "      **FAIL**  Unable to open PPD file - %s on line %d."
 msgstr ""
 
-#: systemv/cupstestppd.c:1498
+#: systemv/cupstestppd.c:1478
 #, c-format
 msgid "    %d ERRORS FOUND"
 msgstr ""
@@ -942,7 +942,7 @@ msgid ""
 "        REF: Page 43, %%Pages:"
 msgstr ""
 
-#: systemv/cupstestppd.c:1500
+#: systemv/cupstestppd.c:1480
 msgid "    NO ERRORS FOUND"
 msgstr ""
 
@@ -975,11 +975,11 @@ msgstr ""
 msgid "    Warning: obsolete DSC version %.1f in file."
 msgstr ""
 
-#: test/ippfind.c:2788
+#: test/ippfind.c:2796
 msgid "  ! expression            Unary NOT of expression."
 msgstr ""
 
-#: test/ippfind.c:2787
+#: test/ippfind.c:2795
 msgid "  ( expressions )         Group expressions."
 msgstr ""
 
@@ -1011,29 +1011,29 @@ msgstr ""
 msgid "  --crlf                  End lines with CR + LF (Windows)."
 msgstr ""
 
-#: test/ippfind.c:2769
+#: test/ippfind.c:2777
 msgid "  --domain regex          Match domain to regular expression."
 msgstr ""
 
-#: test/ippfind.c:2770
+#: test/ippfind.c:2778
 msgid ""
 "  --exec utility [argument ...] ;\n"
 "                          Execute program if true."
 msgstr ""
 
-#: test/ippfind.c:2790
+#: test/ippfind.c:2798
 msgid "  --false                 Always false."
 msgstr ""
 
-#: test/ipptool.c:4806
+#: test/ipptool.c:4858
 msgid "  --help                  Show help."
 msgstr ""
 
-#: test/ippfind.c:2752
+#: test/ippfind.c:2760
 msgid "  --help                  Show this help."
 msgstr ""
 
-#: test/ippfind.c:2772
+#: test/ippfind.c:2780
 msgid "  --host regex            Match hostname to regular expression."
 msgstr ""
 
@@ -1045,85 +1045,85 @@ msgstr ""
 msgid "  --list-filters          List filters that will be used."
 msgstr ""
 
-#: test/ippfind.c:2774
+#: test/ippfind.c:2782
 msgid "  --local                 True if service is local."
 msgstr ""
 
-#: test/ippfind.c:2773
+#: test/ippfind.c:2781
 msgid "  --ls                    List attributes."
 msgstr ""
 
-#: test/ippfind.c:2775
+#: test/ippfind.c:2783
 msgid "  --name regex            Match service name to regular expression."
 msgstr ""
 
-#: test/ippfind.c:2789
+#: test/ippfind.c:2797
 msgid "  --not expression        Unary NOT of expression."
 msgstr ""
 
-#: test/ippfind.c:2776
+#: test/ippfind.c:2784
 msgid "  --path regex            Match resource path to regular expression."
 msgstr ""
 
-#: test/ippfind.c:2777
+#: test/ippfind.c:2785
 msgid "  --port number[-number]  Match port to number or range."
 msgstr ""
 
-#: test/ippfind.c:2778
+#: test/ippfind.c:2786
 msgid "  --print                 Print URI if true."
 msgstr ""
 
-#: test/ippfind.c:2779
+#: test/ippfind.c:2787
 msgid "  --print-name            Print service name if true."
 msgstr ""
 
-#: test/ippfind.c:2780
+#: test/ippfind.c:2788
 msgid "  --quiet                 Quietly report match via exit code."
 msgstr ""
 
-#: test/ippfind.c:2781
+#: test/ippfind.c:2789
 msgid "  --remote                True if service is remote."
 msgstr ""
 
-#: test/ipptool.c:4807
+#: test/ipptool.c:4859
 msgid ""
 "  --stop-after-include-error\n"
 "                          Stop tests after a failed INCLUDE."
 msgstr ""
 
-#: test/ippfind.c:2791
+#: test/ippfind.c:2799
 msgid "  --true                  Always true."
 msgstr ""
 
-#: test/ippfind.c:2782
+#: test/ippfind.c:2790
 msgid "  --txt key               True if the TXT record contains the key."
 msgstr ""
 
-#: test/ippfind.c:2783
+#: test/ippfind.c:2791
 msgid "  --txt-* regex           Match TXT record key to regular expression."
 msgstr ""
 
-#: test/ippfind.c:2784
+#: test/ippfind.c:2792
 msgid "  --uri regex             Match URI to regular expression."
 msgstr ""
 
-#: test/ippfind.c:2753
+#: test/ippfind.c:2761
 msgid "  --version               Show program version."
 msgstr ""
 
-#: test/ipptool.c:4809
+#: test/ipptool.c:4861
 msgid "  --version               Show version."
 msgstr ""
 
-#: test/ippfind.c:2746 test/ipptool.c:4810
+#: test/ippfind.c:2754 test/ipptool.c:4862
 msgid "  -4                      Connect using IPv4."
 msgstr ""
 
-#: test/ippfind.c:2747 test/ipptool.c:4811
+#: test/ippfind.c:2755 test/ipptool.c:4863
 msgid "  -6                      Connect using IPv6."
 msgstr ""
 
-#: test/ipptool.c:4812
+#: test/ipptool.c:4864
 msgid "  -C                      Send requests using chunking (default)."
 msgstr ""
 
@@ -1131,7 +1131,7 @@ msgstr ""
 msgid "  -D                      Remove the input file when finished."
 msgstr ""
 
-#: ppdc/ppdc.cxx:433 ppdc/ppdhtml.cxx:175 ppdc/ppdpo.cxx:255
+#: ppdc/ppdc.cxx:433 ppdc/ppdhtml.cxx:180 ppdc/ppdpo.cxx:250
 msgid "  -D name=value           Set named variable to value."
 msgstr ""
 
@@ -1139,11 +1139,11 @@ msgstr ""
 msgid "  -E                      Encrypt the connection."
 msgstr ""
 
-#: test/ipptool.c:4814
+#: test/ipptool.c:4866
 msgid "  -E                      Test with HTTP Upgrade to TLS."
 msgstr ""
 
-#: scheduler/main.c:2149
+#: scheduler/main.c:2180
 msgid "  -F                      Run in the foreground but detach from console."
 msgstr ""
 
@@ -1151,23 +1151,23 @@ msgstr ""
 msgid "  -H samba-server         Use the named SAMBA server."
 msgstr ""
 
-#: test/ipptool.c:4816
+#: test/ipptool.c:4868
 msgid "  -I                      Ignore errors."
 msgstr ""
 
-#: ppdc/ppdc.cxx:435 ppdc/ppdhtml.cxx:177 ppdc/ppdi.cxx:131 ppdc/ppdpo.cxx:257
+#: ppdc/ppdc.cxx:435 ppdc/ppdhtml.cxx:182 ppdc/ppdi.cxx:131 ppdc/ppdpo.cxx:252
 msgid "  -I include-dir          Add include directory to search path."
 msgstr ""
 
-#: systemv/cupstestppd.c:3819
+#: systemv/cupstestppd.c:3863
 msgid "  -I {filename,filters,none,profiles}"
 msgstr ""
 
-#: test/ipptool.c:4817
+#: test/ipptool.c:4869
 msgid "  -L                      Send requests using content-length."
 msgstr ""
 
-#: test/ipptool.c:4819
+#: test/ipptool.c:4871
 msgid "  -P filename.plist       Produce XML plist to a file and test report to standard output."
 msgstr ""
 
@@ -1175,23 +1175,23 @@ msgstr ""
 msgid "  -P filename.ppd         Set PPD file."
 msgstr ""
 
-#: test/ippfind.c:2756
+#: test/ippfind.c:2764
 msgid "  -P number[-number]      Match port to number or range."
 msgstr ""
 
-#: systemv/cupstestppd.c:3821
+#: systemv/cupstestppd.c:3865
 msgid "  -R root-directory       Set alternate root."
 msgstr ""
 
-#: test/ipptool.c:4820
+#: test/ipptool.c:4872
 msgid "  -S                      Test with SSL encryption."
 msgstr ""
 
-#: test/ippfind.c:2748
+#: test/ippfind.c:2756
 msgid "  -T seconds              Set the browse timeout in seconds."
 msgstr ""
 
-#: test/ipptool.c:4822
+#: test/ipptool.c:4874
 msgid "  -T seconds              Set the receive/send timeout in seconds."
 msgstr ""
 
@@ -1199,15 +1199,15 @@ msgstr ""
 msgid "  -U username             Specify username."
 msgstr ""
 
-#: test/ippfind.c:2750 test/ipptool.c:4824
+#: test/ippfind.c:2758 test/ipptool.c:4876
 msgid "  -V version              Set default IPP version."
 msgstr ""
 
-#: systemv/cupstestppd.c:3822
+#: systemv/cupstestppd.c:3866
 msgid "  -W {all,none,constraints,defaults,duplex,filters,profiles,sizes,translations}"
 msgstr ""
 
-#: test/ipptool.c:4826
+#: test/ipptool.c:4878
 msgid "  -X                      Produce XML plist instead of plain text."
 msgstr ""
 
@@ -1219,7 +1219,7 @@ msgstr ""
 msgid "  -a                      Export all printers."
 msgstr ""
 
-#: test/ipptool.c:4828
+#: test/ipptool.c:4880
 msgid "  -c                      Produce CSV output."
 msgstr ""
 
@@ -1231,7 +1231,7 @@ msgstr ""
 msgid "  -c cups-files.conf      Set cups-files.conf file to use."
 msgstr ""
 
-#: scheduler/main.c:2147
+#: scheduler/main.c:2178
 msgid "  -c cupsd.conf           Set cupsd.conf file to use."
 msgstr ""
 
@@ -1239,7 +1239,7 @@ msgstr ""
 msgid "  -d domain               Browse/resolve in specified domain."
 msgstr ""
 
-#: test/ipptool.c:4829
+#: test/ipptool.c:4881
 msgid "  -d name=value           Set named variable to value."
 msgstr ""
 
@@ -1251,7 +1251,7 @@ msgstr ""
 msgid "  -d printer              Use the named printer."
 msgstr ""
 
-#: test/ippfind.c:2757
+#: test/ippfind.c:2765
 msgid "  -d regex                Match domain to regular expression."
 msgstr ""
 
@@ -1259,19 +1259,19 @@ msgstr ""
 msgid "  -e                      Use every filter from the PPD file."
 msgstr ""
 
-#: scheduler/main.c:2148
+#: scheduler/main.c:2179
 msgid "  -f                      Run in the foreground."
 msgstr ""
 
-#: test/ipptool.c:4831
+#: test/ipptool.c:4883
 msgid "  -f filename             Set default request filename."
 msgstr ""
 
-#: scheduler/main.c:2151
+#: scheduler/main.c:2182
 msgid "  -h                      Show this usage message."
 msgstr ""
 
-#: test/ippfind.c:2758
+#: test/ippfind.c:2766
 msgid "  -h regex                Match hostname to regular expression."
 msgstr ""
 
@@ -1283,7 +1283,7 @@ msgstr ""
 msgid "  -i mime/type            Set input MIME type (otherwise auto-typed)."
 msgstr ""
 
-#: test/ipptool.c:4833
+#: test/ipptool.c:4885
 msgid "  -i seconds              Repeat the last file with the given time interval."
 msgstr ""
 
@@ -1291,15 +1291,15 @@ msgstr ""
 msgid "  -j job-id[,N]           Filter file N from the specified job (default is file 1)."
 msgstr ""
 
-#: test/ippfind.c:2759
+#: test/ippfind.c:2767
 msgid "  -l                      List attributes."
 msgstr ""
 
-#: test/ipptool.c:4835
+#: test/ipptool.c:4887
 msgid "  -l                      Produce plain text output."
 msgstr ""
 
-#: scheduler/main.c:2152
+#: scheduler/main.c:2183
 msgid "  -l                      Run cupsd on demand."
 msgstr ""
 
@@ -1319,11 +1319,11 @@ msgstr ""
 msgid "  -n copies               Set number of copies."
 msgstr ""
 
-#: test/ipptool.c:4836
+#: test/ipptool.c:4888
 msgid "  -n count                Repeat the last file the given number of times."
 msgstr ""
 
-#: test/ippfind.c:2760
+#: test/ippfind.c:2768
 msgid "  -n regex                Match service name to regular expression."
 msgstr ""
 
@@ -1339,7 +1339,7 @@ msgstr ""
 msgid "  -o name=value           Set option(s)."
 msgstr ""
 
-#: test/ippfind.c:2761
+#: test/ippfind.c:2769
 msgid "  -p                      Print URI if true."
 msgstr ""
 
@@ -1351,27 +1351,27 @@ msgstr ""
 msgid "  -p program              Run specified program for each service."
 msgstr ""
 
-#: test/ippfind.c:2762
+#: test/ippfind.c:2770
 msgid "  -q                      Quietly report match via exit code."
 msgstr ""
 
-#: systemv/cupstestppd.c:3826 test/ipptool.c:4838
+#: systemv/cupstestppd.c:3870 test/ipptool.c:4890
 msgid "  -q                      Run silently."
 msgstr ""
 
-#: test/ippfind.c:2763
+#: test/ippfind.c:2771
 msgid "  -r                      True if service is remote."
 msgstr ""
 
-#: systemv/cupstestppd.c:3827
+#: systemv/cupstestppd.c:3871
 msgid "  -r                      Use 'relaxed' open mode."
 msgstr ""
 
-#: test/ippfind.c:2764
+#: test/ippfind.c:2772
 msgid "  -s                      Print service name if true."
 msgstr ""
 
-#: test/ipptool.c:4839
+#: test/ipptool.c:4891
 msgid "  -t                      Produce a test report."
 msgstr ""
 
@@ -1379,11 +1379,11 @@ msgstr ""
 msgid "  -t                      Test PPDs instead of generating them."
 msgstr ""
 
-#: scheduler/main.c:2153
+#: scheduler/main.c:2184
 msgid "  -t                      Test the configuration file."
 msgstr ""
 
-#: test/ippfind.c:2765
+#: test/ippfind.c:2773
 msgid "  -t key                  True if the TXT record contains the key."
 msgstr ""
 
@@ -1399,20 +1399,20 @@ msgstr ""
 msgid "  -u                      Remove the PPD file when finished."
 msgstr ""
 
-#: test/ippfind.c:2766
+#: test/ippfind.c:2774
 msgid "  -u regex                Match URI to regular expression."
 msgstr ""
 
-#: systemv/cupsaddsmb.c:291 systemv/cupstestppd.c:3828 test/ipptool.c:4840
-#: ppdc/ppdc.cxx:447 ppdc/ppdpo.cxx:259
+#: systemv/cupsaddsmb.c:291 systemv/cupstestppd.c:3872 test/ipptool.c:4892
+#: ppdc/ppdc.cxx:447 ppdc/ppdpo.cxx:254
 msgid "  -v                      Be verbose."
 msgstr ""
 
-#: systemv/cupstestppd.c:3829
+#: systemv/cupstestppd.c:3873
 msgid "  -vv                     Be very verbose."
 msgstr ""
 
-#: test/ippfind.c:2767
+#: test/ippfind.c:2775
 msgid ""
 "  -x utility [argument ...] ;\n"
 "                          Execute program if true."
@@ -1422,150 +1422,151 @@ msgstr ""
 msgid "  -z                      Compress PPD files using GNU zip."
 msgstr ""
 
-#: test/ippfind.c:2810
+#: test/ippfind.c:2818
 msgid "  IPPFIND_SERVICE_DOMAIN  Domain name"
 msgstr ""
 
-#: test/ippfind.c:2811
+#: test/ippfind.c:2819
 msgid ""
 "  IPPFIND_SERVICE_HOSTNAME\n"
 "                          Fully-qualified domain name"
 msgstr ""
 
-#: test/ippfind.c:2813
+#: test/ippfind.c:2821
 msgid "  IPPFIND_SERVICE_NAME    Service instance name"
 msgstr ""
 
-#: test/ippfind.c:2814
+#: test/ippfind.c:2822
 msgid "  IPPFIND_SERVICE_PORT    Port number"
 msgstr ""
 
-#: test/ippfind.c:2815
+#: test/ippfind.c:2823
 msgid "  IPPFIND_SERVICE_REGTYPE DNS-SD registration type"
 msgstr ""
 
-#: test/ippfind.c:2816
+#: test/ippfind.c:2824
 msgid "  IPPFIND_SERVICE_SCHEME  URI scheme"
 msgstr ""
 
-#: test/ippfind.c:2817
+#: test/ippfind.c:2825
 msgid "  IPPFIND_SERVICE_URI     URI"
 msgstr ""
 
-#: test/ippfind.c:2818
+#: test/ippfind.c:2826
 msgid "  IPPFIND_TXT_*           Value of TXT record key"
 msgstr ""
 
-#: test/ippfind.c:2793
+#: test/ippfind.c:2801
 msgid ""
 "  expression --and expression\n"
 "                          Logical AND."
 msgstr ""
 
-#: test/ippfind.c:2795
+#: test/ippfind.c:2803
 msgid ""
 "  expression --or expression\n"
 "                          Logical OR."
 msgstr ""
 
-#: test/ippfind.c:2792
+#: test/ippfind.c:2800
 msgid "  expression expression   Logical AND."
 msgstr ""
 
-#: test/ippfind.c:2800
+#: test/ippfind.c:2808
 msgid "  {service_domain}        Domain name"
 msgstr ""
 
-#: test/ippfind.c:2801
+#: test/ippfind.c:2809
 msgid "  {service_hostname}      Fully-qualified domain name"
 msgstr ""
 
-#: test/ippfind.c:2802
+#: test/ippfind.c:2810
 msgid "  {service_name}          Service instance name"
 msgstr ""
 
-#: test/ippfind.c:2803
+#: test/ippfind.c:2811
 msgid "  {service_port}          Port number"
 msgstr ""
 
-#: test/ippfind.c:2804
+#: test/ippfind.c:2812
 msgid "  {service_regtype}       DNS-SD registration type"
 msgstr ""
 
-#: test/ippfind.c:2805
+#: test/ippfind.c:2813
 msgid "  {service_scheme}        URI scheme"
 msgstr ""
 
-#: test/ippfind.c:2806
+#: test/ippfind.c:2814
 msgid "  {service_uri}           URI"
 msgstr ""
 
-#: test/ippfind.c:2807
+#: test/ippfind.c:2815
 msgid "  {txt_*}                 Value of TXT record key"
 msgstr ""
 
-#: test/ippfind.c:2799
+#: test/ippfind.c:2807
 msgid "  {}                      URI"
 msgstr ""
 
-#: systemv/cupstestppd.c:332 systemv/cupstestppd.c:351
-#: systemv/cupstestppd.c:363 systemv/cupstestppd.c:496
-#: systemv/cupstestppd.c:511 systemv/cupstestppd.c:532
-#: systemv/cupstestppd.c:547 systemv/cupstestppd.c:577
-#: systemv/cupstestppd.c:597 systemv/cupstestppd.c:620
-#: systemv/cupstestppd.c:638 systemv/cupstestppd.c:664
-#: systemv/cupstestppd.c:682 systemv/cupstestppd.c:702
-#: systemv/cupstestppd.c:722 systemv/cupstestppd.c:740
-#: systemv/cupstestppd.c:757 systemv/cupstestppd.c:776
-#: systemv/cupstestppd.c:797 systemv/cupstestppd.c:816
-#: systemv/cupstestppd.c:836 systemv/cupstestppd.c:856
-#: systemv/cupstestppd.c:876 systemv/cupstestppd.c:896
-#: systemv/cupstestppd.c:914 systemv/cupstestppd.c:931
-#: systemv/cupstestppd.c:953 systemv/cupstestppd.c:971
-#: systemv/cupstestppd.c:988 systemv/cupstestppd.c:1006
-#: systemv/cupstestppd.c:1022 systemv/cupstestppd.c:1042
-#: systemv/cupstestppd.c:1073 systemv/cupstestppd.c:1095
-#: systemv/cupstestppd.c:1146 systemv/cupstestppd.c:1165
-#: systemv/cupstestppd.c:1209 systemv/cupstestppd.c:1223
-#: systemv/cupstestppd.c:1255 systemv/cupstestppd.c:1282
-#: systemv/cupstestppd.c:1800 systemv/cupstestppd.c:1819
-#: systemv/cupstestppd.c:1837 systemv/cupstestppd.c:1889
-#: systemv/cupstestppd.c:1905 systemv/cupstestppd.c:1942
-#: systemv/cupstestppd.c:1960 systemv/cupstestppd.c:1996
-#: systemv/cupstestppd.c:2010 systemv/cupstestppd.c:2037
-#: systemv/cupstestppd.c:2051 systemv/cupstestppd.c:2097
-#: systemv/cupstestppd.c:2119 systemv/cupstestppd.c:2142
-#: systemv/cupstestppd.c:2159 systemv/cupstestppd.c:2201
-#: systemv/cupstestppd.c:2244 systemv/cupstestppd.c:2291
-#: systemv/cupstestppd.c:2315 systemv/cupstestppd.c:2369
-#: systemv/cupstestppd.c:2385 systemv/cupstestppd.c:2415
-#: systemv/cupstestppd.c:2429 systemv/cupstestppd.c:2455
-#: systemv/cupstestppd.c:2471 systemv/cupstestppd.c:2511
-#: systemv/cupstestppd.c:2525 systemv/cupstestppd.c:2551
-#: systemv/cupstestppd.c:2567 systemv/cupstestppd.c:2597
-#: systemv/cupstestppd.c:2611 systemv/cupstestppd.c:2638
-#: systemv/cupstestppd.c:2655 systemv/cupstestppd.c:2669
-#: systemv/cupstestppd.c:2693 systemv/cupstestppd.c:2710
-#: systemv/cupstestppd.c:2724 systemv/cupstestppd.c:2748
-#: systemv/cupstestppd.c:2765 systemv/cupstestppd.c:2779
-#: systemv/cupstestppd.c:2803 systemv/cupstestppd.c:2820
-#: systemv/cupstestppd.c:2834 systemv/cupstestppd.c:2858
-#: systemv/cupstestppd.c:2872 systemv/cupstestppd.c:2887
-#: systemv/cupstestppd.c:2904 systemv/cupstestppd.c:2960
-#: systemv/cupstestppd.c:2995 systemv/cupstestppd.c:3009
-#: systemv/cupstestppd.c:3037 systemv/cupstestppd.c:3102
-#: systemv/cupstestppd.c:3117 systemv/cupstestppd.c:3156
-#: systemv/cupstestppd.c:3176 systemv/cupstestppd.c:3190
-#: systemv/cupstestppd.c:3407 systemv/cupstestppd.c:3443
-#: systemv/cupstestppd.c:3457 systemv/cupstestppd.c:3503
-#: systemv/cupstestppd.c:3535 systemv/cupstestppd.c:3552
-#: systemv/cupstestppd.c:3575 systemv/cupstestppd.c:3591
-#: systemv/cupstestppd.c:3629 systemv/cupstestppd.c:3770
-#: systemv/cupstestppd.c:3792 systemv/cupstestppd.c:3900
+#: systemv/cupstestppd.c:312 systemv/cupstestppd.c:331
+#: systemv/cupstestppd.c:343 systemv/cupstestppd.c:476
+#: systemv/cupstestppd.c:491 systemv/cupstestppd.c:512
+#: systemv/cupstestppd.c:527 systemv/cupstestppd.c:557
+#: systemv/cupstestppd.c:577 systemv/cupstestppd.c:600
+#: systemv/cupstestppd.c:618 systemv/cupstestppd.c:644
+#: systemv/cupstestppd.c:662 systemv/cupstestppd.c:682
+#: systemv/cupstestppd.c:702 systemv/cupstestppd.c:720
+#: systemv/cupstestppd.c:737 systemv/cupstestppd.c:756
+#: systemv/cupstestppd.c:777 systemv/cupstestppd.c:796
+#: systemv/cupstestppd.c:816 systemv/cupstestppd.c:836
+#: systemv/cupstestppd.c:856 systemv/cupstestppd.c:876
+#: systemv/cupstestppd.c:894 systemv/cupstestppd.c:911
+#: systemv/cupstestppd.c:933 systemv/cupstestppd.c:951
+#: systemv/cupstestppd.c:968 systemv/cupstestppd.c:986
+#: systemv/cupstestppd.c:1002 systemv/cupstestppd.c:1022
+#: systemv/cupstestppd.c:1053 systemv/cupstestppd.c:1075
+#: systemv/cupstestppd.c:1126 systemv/cupstestppd.c:1145
+#: systemv/cupstestppd.c:1189 systemv/cupstestppd.c:1203
+#: systemv/cupstestppd.c:1235 systemv/cupstestppd.c:1262
+#: systemv/cupstestppd.c:1780 systemv/cupstestppd.c:1799
+#: systemv/cupstestppd.c:1817 systemv/cupstestppd.c:1869
+#: systemv/cupstestppd.c:1885 systemv/cupstestppd.c:1922
+#: systemv/cupstestppd.c:1940 systemv/cupstestppd.c:1976
+#: systemv/cupstestppd.c:1990 systemv/cupstestppd.c:2017
+#: systemv/cupstestppd.c:2031 systemv/cupstestppd.c:2077
+#: systemv/cupstestppd.c:2099 systemv/cupstestppd.c:2122
+#: systemv/cupstestppd.c:2139 systemv/cupstestppd.c:2181
+#: systemv/cupstestppd.c:2224 systemv/cupstestppd.c:2271
+#: systemv/cupstestppd.c:2295 systemv/cupstestppd.c:2349
+#: systemv/cupstestppd.c:2365 systemv/cupstestppd.c:2387
+#: systemv/cupstestppd.c:2427 systemv/cupstestppd.c:2441
+#: systemv/cupstestppd.c:2467 systemv/cupstestppd.c:2483
+#: systemv/cupstestppd.c:2505 systemv/cupstestppd.c:2555
+#: systemv/cupstestppd.c:2569 systemv/cupstestppd.c:2595
+#: systemv/cupstestppd.c:2611 systemv/cupstestppd.c:2641
+#: systemv/cupstestppd.c:2655 systemv/cupstestppd.c:2682
+#: systemv/cupstestppd.c:2699 systemv/cupstestppd.c:2713
+#: systemv/cupstestppd.c:2737 systemv/cupstestppd.c:2754
+#: systemv/cupstestppd.c:2768 systemv/cupstestppd.c:2792
+#: systemv/cupstestppd.c:2809 systemv/cupstestppd.c:2823
+#: systemv/cupstestppd.c:2847 systemv/cupstestppd.c:2864
+#: systemv/cupstestppd.c:2878 systemv/cupstestppd.c:2902
+#: systemv/cupstestppd.c:2916 systemv/cupstestppd.c:2931
+#: systemv/cupstestppd.c:2948 systemv/cupstestppd.c:3004
+#: systemv/cupstestppd.c:3039 systemv/cupstestppd.c:3053
+#: systemv/cupstestppd.c:3081 systemv/cupstestppd.c:3146
+#: systemv/cupstestppd.c:3161 systemv/cupstestppd.c:3200
+#: systemv/cupstestppd.c:3220 systemv/cupstestppd.c:3234
+#: systemv/cupstestppd.c:3451 systemv/cupstestppd.c:3487
+#: systemv/cupstestppd.c:3501 systemv/cupstestppd.c:3547
+#: systemv/cupstestppd.c:3579 systemv/cupstestppd.c:3596
+#: systemv/cupstestppd.c:3619 systemv/cupstestppd.c:3635
+#: systemv/cupstestppd.c:3673 systemv/cupstestppd.c:3814
+#: systemv/cupstestppd.c:3836 systemv/cupstestppd.c:3944
 msgid " FAIL"
 msgstr ""
 
-#: systemv/cupstestppd.c:1306
+#: systemv/cupstestppd.c:1286
 msgid " PASS"
 msgstr ""
 
@@ -1784,7 +1785,7 @@ msgstr ""
 msgid "%s accepting requests since %s"
 msgstr ""
 
-#: scheduler/ipp.c:9952
+#: scheduler/ipp.c:9984
 #, c-format
 msgid "%s cannot be changed."
 msgstr ""
@@ -1809,7 +1810,7 @@ msgstr ""
 msgid "%s is ready and printing"
 msgstr ""
 
-#: filter/rastertoepson.c:970 filter/rastertohp.c:700
+#: filter/rastertoepson.c:982 filter/rastertohp.c:700
 #: filter/rastertolabel.c:1120
 #, c-format
 msgid "%s job-id user title copies options [file]"
@@ -1820,7 +1821,7 @@ msgstr ""
 msgid "%s not accepting requests since %s -"
 msgstr ""
 
-#: scheduler/ipp.c:618
+#: scheduler/ipp.c:617
 #, c-format
 msgid "%s not supported."
 msgstr ""
@@ -1841,10 +1842,10 @@ msgid "%s: %-33.33s [job %d localhost]"
 msgstr ""
 
 #. TRANSLATORS: Message is "subject: error"
-#: cups/langprintf.c:77 scheduler/cupsfilter.c:726 systemv/lpadmin.c:791
-#: systemv/lpadmin.c:842 systemv/lpadmin.c:892 systemv/lpadmin.c:948
-#: systemv/lpadmin.c:1046 systemv/lpadmin.c:1098 systemv/lpadmin.c:1154
-#: systemv/lpadmin.c:1463
+#: cups/langprintf.c:77 scheduler/cupsfilter.c:726 systemv/lpadmin.c:803
+#: systemv/lpadmin.c:854 systemv/lpadmin.c:904 systemv/lpadmin.c:960
+#: systemv/lpadmin.c:1058 systemv/lpadmin.c:1110 systemv/lpadmin.c:1166
+#: systemv/lpadmin.c:1581
 #, c-format
 msgid "%s: %s"
 msgstr ""
@@ -1854,7 +1855,12 @@ msgstr ""
 msgid "%s: %s failed: %s"
 msgstr ""
 
-#: test/ippfind.c:777 test/ipptool.c:378
+#: systemv/lpadmin.c:1216
+#, c-format
+msgid "%s: Bad printer URI \"%s\"."
+msgstr ""
+
+#: test/ippfind.c:777 test/ipptool.c:381
 #, c-format
 msgid "%s: Bad version %s for \"-V\"."
 msgstr ""
@@ -1982,7 +1988,7 @@ msgid "%s: Error - expected title after \"-t\" option."
 msgstr ""
 
 #: berkeley/lpq.c:97 berkeley/lpr.c:81 berkeley/lprm.c:104 systemv/cancel.c:95
-#: systemv/cupsaccept.c:101 systemv/lp.c:110 systemv/lpadmin.c:424
+#: systemv/cupsaccept.c:101 systemv/lp.c:110 systemv/lpadmin.c:426
 #: systemv/lpstat.c:124
 #, c-format
 msgid "%s: Error - expected username after \"-U\" option."
@@ -2069,17 +2075,17 @@ msgstr ""
 msgid "%s: Invalid filter string \"%s\"."
 msgstr ""
 
-#: test/ipptool.c:309
+#: test/ipptool.c:312
 #, c-format
 msgid "%s: Missing filename for \"-P\"."
 msgstr ""
 
-#: test/ippfind.c:749 test/ipptool.c:346
+#: test/ippfind.c:749 test/ipptool.c:349
 #, c-format
 msgid "%s: Missing timeout for \"-T\"."
 msgstr ""
 
-#: test/ippfind.c:762 test/ipptool.c:360
+#: test/ippfind.c:762 test/ipptool.c:363
 #, c-format
 msgid "%s: Missing version for \"-V\"."
 msgstr ""
@@ -2101,12 +2107,17 @@ msgstr ""
 
 #: berkeley/lpq.c:83 berkeley/lpr.c:67 berkeley/lprm.c:67 systemv/cancel.c:82
 #: systemv/cupsaccept.c:88 systemv/cupsaddsmb.c:86 systemv/lp.c:96
-#: systemv/lpadmin.c:225 systemv/lpinfo.c:88 systemv/lpmove.c:73
-#: systemv/lpstat.c:88 test/ipptool.c:291 test/ipptool.c:335
+#: systemv/lpadmin.c:230 systemv/lpinfo.c:88 systemv/lpmove.c:73
+#: systemv/lpstat.c:88 test/ipptool.c:294 test/ipptool.c:338
 #, c-format
 msgid "%s: Sorry, no encryption support."
 msgstr ""
 
+#: systemv/lpadmin.c:1223
+#, c-format
+msgid "%s: Unable to connect to \"%s:%d\": %s"
+msgstr ""
+
 #: berkeley/lpq.c:284 scheduler/cupsfilter.c:1275 systemv/cancel.c:245
 #: systemv/cupsaddsmb.c:144 systemv/cupsaddsmb.c:171
 #, c-format
@@ -2118,12 +2129,17 @@ msgstr ""
 msgid "%s: Unable to contact server."
 msgstr ""
 
+#: systemv/lpadmin.c:1236
+#, c-format
+msgid "%s: Unable to create PPD file: %s"
+msgstr ""
+
 #: scheduler/cupsfilter.c:416
 #, c-format
 msgid "%s: Unable to determine MIME type of \"%s\"."
 msgstr ""
 
-#: test/ipptool.c:318
+#: test/ipptool.c:321
 #, c-format
 msgid "%s: Unable to open \"%s\": %s"
 msgstr ""
@@ -2143,6 +2159,11 @@ msgstr ""
 msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"."
 msgstr ""
 
+#: systemv/lpadmin.c:1207
+#, c-format
+msgid "%s: Unable to resolve \"%s\"."
+msgstr ""
+
 #: berkeley/lpq.c:140 systemv/lpstat.c:575
 #, c-format
 msgid "%s: Unknown destination \"%s\"."
@@ -2990,20 +3011,20 @@ msgstr ""
 msgid "?Invalid help command unknown."
 msgstr ""
 
-#: cgi-bin/admin.c:2348
+#: cgi-bin/admin.c:2354
 msgid "A Samba password is required to export printer drivers"
 msgstr ""
 
-#: cgi-bin/admin.c:2344
+#: cgi-bin/admin.c:2350
 msgid "A Samba username is required to export printer drivers"
 msgstr ""
 
-#: scheduler/ipp.c:2274
+#: scheduler/ipp.c:2252
 #, c-format
 msgid "A class named \"%s\" already exists."
 msgstr ""
 
-#: scheduler/ipp.c:916
+#: scheduler/ipp.c:915
 #, c-format
 msgid "A printer named \"%s\" already exists."
 msgstr ""
@@ -3152,16 +3173,16 @@ msgstr ""
 msgid "Accepted"
 msgstr ""
 
-#: cgi-bin/admin.c:548
+#: cgi-bin/admin.c:546
 msgid "Add Class"
 msgstr ""
 
-#: cgi-bin/admin.c:860
+#: cgi-bin/admin.c:859
 msgid "Add Printer"
 msgstr ""
 
-#: cgi-bin/admin.c:422 cgi-bin/admin.c:455 cgi-bin/admin.c:503
-#: cgi-bin/admin.c:513
+#: cgi-bin/admin.c:420 cgi-bin/admin.c:453 cgi-bin/admin.c:501
+#: cgi-bin/admin.c:511
 msgid "Add RSS Subscription"
 msgstr ""
 
@@ -3169,7 +3190,7 @@ msgstr ""
 msgid "Address"
 msgstr ""
 
-#: cgi-bin/admin.c:188 cgi-bin/admin.c:262 cgi-bin/admin.c:2725
+#: cgi-bin/admin.c:186 cgi-bin/admin.c:260 cgi-bin/admin.c:2731
 msgid "Administration"
 msgstr ""
 
@@ -3185,7 +3206,7 @@ msgstr ""
 msgid "Applicator"
 msgstr ""
 
-#: scheduler/ipp.c:991
+#: scheduler/ipp.c:998
 #, c-format
 msgid "Attempt to set %s printer-state to bad value %d."
 msgstr ""
@@ -3243,12 +3264,12 @@ msgstr ""
 msgid "B9"
 msgstr ""
 
-#: scheduler/ipp.c:10877
+#: scheduler/ipp.c:10929
 #, c-format
 msgid "Bad 'document-format' value \"%s\"."
 msgstr ""
 
-#: cups/dest.c:1736
+#: cups/dest.c:1737
 msgid "Bad NULL dests pointer"
 msgstr ""
 
@@ -3264,16 +3285,16 @@ msgstr ""
 msgid "Bad OrderDependency"
 msgstr ""
 
-#: cups/ppd-cache.c:117 cups/ppd-cache.c:164 cups/ppd-cache.c:202
-#: cups/ppd-cache.c:208 cups/ppd-cache.c:224 cups/ppd-cache.c:240
-#: cups/ppd-cache.c:249 cups/ppd-cache.c:257 cups/ppd-cache.c:274
-#: cups/ppd-cache.c:282 cups/ppd-cache.c:297 cups/ppd-cache.c:305
-#: cups/ppd-cache.c:326 cups/ppd-cache.c:338 cups/ppd-cache.c:353
-#: cups/ppd-cache.c:365 cups/ppd-cache.c:387 cups/ppd-cache.c:395
-#: cups/ppd-cache.c:413 cups/ppd-cache.c:421 cups/ppd-cache.c:436
-#: cups/ppd-cache.c:444 cups/ppd-cache.c:462 cups/ppd-cache.c:470
-#: cups/ppd-cache.c:497 cups/ppd-cache.c:567 cups/ppd-cache.c:575
-#: cups/ppd-cache.c:583
+#: cups/ppd-cache.c:434 cups/ppd-cache.c:481 cups/ppd-cache.c:566
+#: cups/ppd-cache.c:572 cups/ppd-cache.c:588 cups/ppd-cache.c:604
+#: cups/ppd-cache.c:613 cups/ppd-cache.c:621 cups/ppd-cache.c:638
+#: cups/ppd-cache.c:646 cups/ppd-cache.c:661 cups/ppd-cache.c:669
+#: cups/ppd-cache.c:690 cups/ppd-cache.c:702 cups/ppd-cache.c:717
+#: cups/ppd-cache.c:729 cups/ppd-cache.c:751 cups/ppd-cache.c:759
+#: cups/ppd-cache.c:777 cups/ppd-cache.c:785 cups/ppd-cache.c:800
+#: cups/ppd-cache.c:808 cups/ppd-cache.c:826 cups/ppd-cache.c:834
+#: cups/ppd-cache.c:861 cups/ppd-cache.c:931 cups/ppd-cache.c:939
+#: cups/ppd-cache.c:947
 msgid "Bad PPD cache file."
 msgstr ""
 
@@ -3293,7 +3314,7 @@ msgstr ""
 msgid "Bad arguments to function"
 msgstr ""
 
-#: scheduler/ipp.c:1352
+#: scheduler/ipp.c:1368
 #, c-format
 msgid "Bad copies value %d."
 msgstr ""
@@ -3302,22 +3323,22 @@ msgstr ""
 msgid "Bad custom parameter"
 msgstr ""
 
-#: cups/http-support.c:1598 scheduler/ipp.c:2360
+#: cups/http-support.c:1598 scheduler/ipp.c:2347
 #, c-format
 msgid "Bad device-uri \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:2399
+#: scheduler/ipp.c:2386
 #, c-format
 msgid "Bad device-uri scheme \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:8125 scheduler/ipp.c:8141 scheduler/ipp.c:9360
+#: scheduler/ipp.c:8141 scheduler/ipp.c:8159 scheduler/ipp.c:9385
 #, c-format
 msgid "Bad document-format \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:9376
+#: scheduler/ipp.c:9403
 #, c-format
 msgid "Bad document-format-default \"%s\"."
 msgstr ""
@@ -3330,51 +3351,51 @@ msgstr ""
 msgid "Bad hostname/address in URI"
 msgstr ""
 
-#: scheduler/ipp.c:1527
+#: scheduler/ipp.c:1543
 #, c-format
 msgid "Bad job-name value: %s"
 msgstr ""
 
-#: scheduler/ipp.c:1520
+#: scheduler/ipp.c:1536
 msgid "Bad job-name value: Wrong type or count."
 msgstr ""
 
-#: scheduler/ipp.c:9967
+#: scheduler/ipp.c:9999
 msgid "Bad job-priority value."
 msgstr ""
 
-#: scheduler/ipp.c:1382
+#: scheduler/ipp.c:1398
 #, c-format
 msgid "Bad job-sheets value \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:1366
+#: scheduler/ipp.c:1382
 msgid "Bad job-sheets value type."
 msgstr ""
 
-#: scheduler/ipp.c:9997
+#: scheduler/ipp.c:10029
 msgid "Bad job-state value."
 msgstr ""
 
-#: scheduler/ipp.c:2981 scheduler/ipp.c:3441 scheduler/ipp.c:5930
-#: scheduler/ipp.c:6077 scheduler/ipp.c:7559 scheduler/ipp.c:7828
-#: scheduler/ipp.c:8678 scheduler/ipp.c:8904 scheduler/ipp.c:9256
-#: scheduler/ipp.c:9860
+#: scheduler/ipp.c:2970 scheduler/ipp.c:3430 scheduler/ipp.c:5935
+#: scheduler/ipp.c:6082 scheduler/ipp.c:7570 scheduler/ipp.c:7839
+#: scheduler/ipp.c:8703 scheduler/ipp.c:8927 scheduler/ipp.c:9279
+#: scheduler/ipp.c:9892
 #, c-format
 msgid "Bad job-uri \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:2040 scheduler/ipp.c:5468
+#: scheduler/ipp.c:2018 scheduler/ipp.c:5473
 #, c-format
 msgid "Bad notify-pull-method \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:2004 scheduler/ipp.c:5432
+#: scheduler/ipp.c:1982 scheduler/ipp.c:5437
 #, c-format
 msgid "Bad notify-recipient-uri \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:1398
+#: scheduler/ipp.c:1414
 #, c-format
 msgid "Bad number-up value %d."
 msgstr ""
@@ -3384,7 +3405,7 @@ msgstr ""
 msgid "Bad option + choice on line %d."
 msgstr ""
 
-#: scheduler/ipp.c:1415
+#: scheduler/ipp.c:1431
 #, c-format
 msgid "Bad page-ranges values %d-%d."
 msgstr ""
@@ -3393,17 +3414,17 @@ msgstr ""
 msgid "Bad port number in URI"
 msgstr ""
 
-#: scheduler/ipp.c:2442
+#: scheduler/ipp.c:2429
 #, c-format
 msgid "Bad port-monitor \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:2503
+#: scheduler/ipp.c:2490
 #, c-format
 msgid "Bad printer-state value %d."
 msgstr ""
 
-#: cups/dest.c:610 cups/dest.c:1296 cups/dest.c:1343
+#: cups/dest.c:610 cups/dest.c:1297 cups/dest.c:1344
 msgid "Bad printer-uri."
 msgstr ""
 
@@ -3425,7 +3446,7 @@ msgstr ""
 msgid "Bad scheme in URI"
 msgstr ""
 
-#: cgi-bin/admin.c:1464
+#: cgi-bin/admin.c:1470
 msgid "Bad subscription ID"
 msgstr ""
 
@@ -3441,7 +3462,7 @@ msgstr ""
 msgid "Bad/empty URI"
 msgstr ""
 
-#: cgi-bin/admin.c:3270 cgi-bin/admin.c:3516
+#: cgi-bin/admin.c:3276 cgi-bin/admin.c:3522
 msgid "Banners"
 msgstr ""
 
@@ -3449,12 +3470,12 @@ msgstr ""
 msgid "Bond Paper"
 msgstr ""
 
-#: backend/usb-darwin.c:1874
+#: backend/usb-darwin.c:2024
 #, c-format
 msgid "Boolean expected for waiteof option \"%s\"."
 msgstr ""
 
-#: filter/pstops.c:2029
+#: filter/pstops.c:2034
 msgid "Buffer overflow detected, aborting."
 msgstr ""
 
@@ -3470,15 +3491,15 @@ msgstr ""
 msgid "Cancel Jobs"
 msgstr ""
 
-#: cgi-bin/admin.c:1465 cgi-bin/admin.c:1504 cgi-bin/admin.c:1514
+#: cgi-bin/admin.c:1471 cgi-bin/admin.c:1510 cgi-bin/admin.c:1520
 msgid "Cancel RSS Subscription"
 msgstr ""
 
-#: backend/ipp.c:2198
+#: backend/ipp.c:2205
 msgid "Canceling print job."
 msgstr ""
 
-#: scheduler/ipp.c:2483
+#: scheduler/ipp.c:2470
 msgid "Cannot share a remote Kerberized printer."
 msgstr ""
 
@@ -3486,12 +3507,12 @@ msgstr ""
 msgid "Cassette"
 msgstr ""
 
-#: cgi-bin/admin.c:1635 cgi-bin/admin.c:1777 cgi-bin/admin.c:1790
-#: cgi-bin/admin.c:1801
+#: cgi-bin/admin.c:1641 cgi-bin/admin.c:1783 cgi-bin/admin.c:1796
+#: cgi-bin/admin.c:1807
 msgid "Change Settings"
 msgstr ""
 
-#: scheduler/ipp.c:2052 scheduler/ipp.c:5480
+#: scheduler/ipp.c:2030 scheduler/ipp.c:5485
 #, c-format
 msgid "Character set \"%s\" not supported."
 msgstr ""
@@ -3504,7 +3525,7 @@ msgstr ""
 msgid "Clean Print Heads"
 msgstr ""
 
-#: scheduler/ipp.c:3893
+#: scheduler/ipp.c:3882
 msgid "Close-Job doesn't support the job-uri attribute."
 msgstr ""
 
@@ -3527,11 +3548,11 @@ msgstr ""
 msgid "Community name uses indefinite length"
 msgstr ""
 
-#: backend/ipp.c:854 backend/lpd.c:879 backend/socket.c:400
+#: backend/ipp.c:858 backend/lpd.c:879 backend/socket.c:400
 msgid "Connected to printer."
 msgstr ""
 
-#: backend/ipp.c:759 backend/lpd.c:702 backend/socket.c:319
+#: backend/ipp.c:763 backend/lpd.c:702 backend/socket.c:319
 msgid "Connecting to printer."
 msgstr ""
 
@@ -3547,7 +3568,7 @@ msgstr ""
 msgid "Control file sent successfully."
 msgstr ""
 
-#: backend/ipp.c:1349 backend/lpd.c:472
+#: backend/ipp.c:1358 backend/lpd.c:472
 msgid "Copying print data."
 msgstr ""
 
@@ -3587,11 +3608,11 @@ msgstr ""
 msgid "Data file sent successfully."
 msgstr ""
 
-#: cgi-bin/admin.c:2074 cgi-bin/admin.c:2085 cgi-bin/admin.c:2130
+#: cgi-bin/admin.c:2080 cgi-bin/admin.c:2091 cgi-bin/admin.c:2136
 msgid "Delete Class"
 msgstr ""
 
-#: cgi-bin/admin.c:2159 cgi-bin/admin.c:2170 cgi-bin/admin.c:2215
+#: cgi-bin/admin.c:2165 cgi-bin/admin.c:2176 cgi-bin/admin.c:2221
 msgid "Delete Printer"
 msgstr ""
 
@@ -3599,7 +3620,7 @@ msgstr ""
 msgid "DeskJet Series"
 msgstr ""
 
-#: scheduler/ipp.c:1276
+#: scheduler/ipp.c:1297
 #, c-format
 msgid "Destination \"%s\" is not accepting jobs."
 msgstr ""
@@ -3648,7 +3669,7 @@ msgstr ""
 msgid "Disabled"
 msgstr ""
 
-#: scheduler/ipp.c:5979
+#: scheduler/ipp.c:5984
 #, c-format
 msgid "Document #%d does not exist in job #%d."
 msgstr ""
@@ -3669,9 +3690,9 @@ msgstr ""
 msgid "EPL2 Label Printer"
 msgstr ""
 
-#: cgi-bin/admin.c:1829 cgi-bin/admin.c:1841 cgi-bin/admin.c:1895
-#: cgi-bin/admin.c:1902 cgi-bin/admin.c:1937 cgi-bin/admin.c:1950
-#: cgi-bin/admin.c:1974 cgi-bin/admin.c:2047
+#: cgi-bin/admin.c:1835 cgi-bin/admin.c:1847 cgi-bin/admin.c:1901
+#: cgi-bin/admin.c:1908 cgi-bin/admin.c:1943 cgi-bin/admin.c:1956
+#: cgi-bin/admin.c:1980 cgi-bin/admin.c:2053
 msgid "Edit Configuration File"
 msgstr ""
 
@@ -3679,12 +3700,12 @@ msgstr ""
 msgid "Empty PPD file."
 msgstr ""
 
-#: cups/http.c:4624
+#: cups/http.c:4648
 msgid "Encryption is not supported."
 msgstr ""
 
 #. TRANSLATORS: Banner/cover sheet after the print job.
-#: cgi-bin/admin.c:3541
+#: cgi-bin/admin.c:3547
 msgid "Ending Banner"
 msgstr ""
 
@@ -3692,7 +3713,7 @@ msgstr ""
 msgid "English"
 msgstr ""
 
-#: scheduler/client.c:2209
+#: scheduler/client.c:2219
 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 ""
 
@@ -3908,7 +3929,7 @@ msgstr ""
 msgid "Envelope You4 Long Edge"
 msgstr ""
 
-#: test/ippfind.c:2809
+#: test/ippfind.c:2817
 msgid "Environment Variables:"
 msgstr ""
 
@@ -3916,12 +3937,16 @@ msgstr ""
 msgid "Epson"
 msgstr ""
 
-#: cgi-bin/admin.c:3584
+#: cgi-bin/admin.c:3590
 msgid "Error Policy"
 msgstr ""
 
-#: filter/rastertopwg.c:395 filter/rastertopwg.c:410 filter/rastertopwg.c:421
-#: filter/rastertopwg.c:432
+#: filter/rastertopwg.c:423
+msgid "Error reading raster data."
+msgstr ""
+
+#: filter/rastertopwg.c:395 filter/rastertopwg.c:413 filter/rastertopwg.c:431
+#: filter/rastertopwg.c:442
 msgid "Error sending raster data."
 msgstr ""
 
@@ -3977,11 +4002,11 @@ msgstr ""
 msgid "Expectation Failed"
 msgstr ""
 
-#: cgi-bin/admin.c:2336 cgi-bin/admin.c:2355
+#: cgi-bin/admin.c:2342 cgi-bin/admin.c:2361
 msgid "Export Printers to Samba"
 msgstr ""
 
-#: test/ippfind.c:2755
+#: test/ippfind.c:2763
 msgid "Expressions:"
 msgstr ""
 
@@ -4036,12 +4061,12 @@ msgstr ""
 msgid "File Folder "
 msgstr ""
 
-#: scheduler/ipp.c:2378
+#: scheduler/ipp.c:2365
 #, c-format
 msgid "File device URIs have been disabled. To enable, see the FileDevice directive in \"%s/cups-files.conf\"."
 msgstr ""
 
-#: filter/rastertoepson.c:1102 filter/rastertohp.c:834
+#: filter/rastertoepson.c:1114 filter/rastertohp.c:834
 #: filter/rastertolabel.c:1259
 #, c-format
 msgid "Finished page %d."
@@ -4071,10 +4096,10 @@ msgstr ""
 msgid "Glossy Paper"
 msgstr ""
 
-#: scheduler/ipp.c:2959 scheduler/ipp.c:3367 scheduler/ipp.c:3905
-#: scheduler/ipp.c:5908 scheduler/ipp.c:6055 scheduler/ipp.c:7536
-#: scheduler/ipp.c:8656 scheduler/ipp.c:8882 scheduler/ipp.c:9234
-#: scheduler/ipp.c:9838
+#: scheduler/ipp.c:2948 scheduler/ipp.c:3356 scheduler/ipp.c:3894
+#: scheduler/ipp.c:5913 scheduler/ipp.c:6060 scheduler/ipp.c:7547
+#: scheduler/ipp.c:8681 scheduler/ipp.c:8905 scheduler/ipp.c:9257
+#: scheduler/ipp.c:9870
 msgid "Got a printer-uri attribute but no job-id."
 msgstr ""
 
@@ -4102,7 +4127,7 @@ msgstr ""
 msgid "IPP attribute has no name."
 msgstr ""
 
-#: cups/ipp.c:7000
+#: cups/ipp.c:7016
 msgid "IPP attribute is not a member of the message."
 msgstr ""
 
@@ -4242,7 +4267,7 @@ msgstr ""
 msgid "Internet Postage 3-Part"
 msgstr ""
 
-#: backend/ipp.c:319
+#: backend/ipp.c:323
 msgid "Internet Printing Protocol"
 msgstr ""
 
@@ -4319,52 +4344,52 @@ msgstr ""
 msgid "JIS B9"
 msgstr ""
 
-#: scheduler/ipp.c:8954
+#: scheduler/ipp.c:8977
 #, c-format
 msgid "Job #%d cannot be restarted - no files."
 msgstr ""
 
-#: scheduler/ipp.c:2999 scheduler/ipp.c:3233 scheduler/ipp.c:3292
-#: scheduler/ipp.c:3469 scheduler/ipp.c:3915 scheduler/ipp.c:5566
-#: scheduler/ipp.c:5948 scheduler/ipp.c:6095 scheduler/ipp.c:6433
-#: scheduler/ipp.c:7383 scheduler/ipp.c:7405 scheduler/ipp.c:7577
-#: scheduler/ipp.c:7802 scheduler/ipp.c:7845 scheduler/ipp.c:8696
-#: scheduler/ipp.c:8922 scheduler/ipp.c:9274 scheduler/ipp.c:9878
+#: scheduler/ipp.c:2988 scheduler/ipp.c:3222 scheduler/ipp.c:3281
+#: scheduler/ipp.c:3458 scheduler/ipp.c:3904 scheduler/ipp.c:5571
+#: scheduler/ipp.c:5953 scheduler/ipp.c:6100 scheduler/ipp.c:6438
+#: scheduler/ipp.c:7394 scheduler/ipp.c:7416 scheduler/ipp.c:7588
+#: scheduler/ipp.c:7813 scheduler/ipp.c:7856 scheduler/ipp.c:8721
+#: scheduler/ipp.c:8945 scheduler/ipp.c:9297 scheduler/ipp.c:9910
 #, c-format
 msgid "Job #%d does not exist."
 msgstr ""
 
-#: scheduler/ipp.c:3501
+#: scheduler/ipp.c:3490
 #, c-format
 msgid "Job #%d is already aborted - can't cancel."
 msgstr ""
 
-#: scheduler/ipp.c:3495
+#: scheduler/ipp.c:3484
 #, c-format
 msgid "Job #%d is already canceled - can't cancel."
 msgstr ""
 
-#: scheduler/ipp.c:3507
+#: scheduler/ipp.c:3496
 #, c-format
 msgid "Job #%d is already completed - can't cancel."
 msgstr ""
 
-#: scheduler/ipp.c:7603 scheduler/ipp.c:7887 scheduler/ipp.c:9893
+#: scheduler/ipp.c:7614 scheduler/ipp.c:7898 scheduler/ipp.c:9925
 #, c-format
 msgid "Job #%d is finished and cannot be altered."
 msgstr ""
 
-#: scheduler/ipp.c:8936
+#: scheduler/ipp.c:8959
 #, c-format
 msgid "Job #%d is not complete."
 msgstr ""
 
-#: scheduler/ipp.c:3014
+#: scheduler/ipp.c:3003
 #, c-format
 msgid "Job #%d is not held for authentication."
 msgstr ""
 
-#: scheduler/ipp.c:8710
+#: scheduler/ipp.c:8735
 #, c-format
 msgid "Job #%d is not held."
 msgstr ""
@@ -4385,7 +4410,7 @@ msgstr ""
 msgid "Job Stopped"
 msgstr ""
 
-#: scheduler/ipp.c:9975
+#: scheduler/ipp.c:10007
 msgid "Job is completed and cannot be changed."
 msgstr ""
 
@@ -4393,11 +4418,11 @@ msgstr ""
 msgid "Job operation failed"
 msgstr ""
 
-#: scheduler/ipp.c:10011 scheduler/ipp.c:10028 scheduler/ipp.c:10039
+#: scheduler/ipp.c:10043 scheduler/ipp.c:10060 scheduler/ipp.c:10071
 msgid "Job state cannot be changed."
 msgstr ""
 
-#: scheduler/ipp.c:8802
+#: scheduler/ipp.c:8825
 msgid "Job subscriptions cannot be renewed."
 msgstr ""
 
@@ -4417,7 +4442,7 @@ msgstr ""
 msgid "Label Top"
 msgstr ""
 
-#: scheduler/ipp.c:2061 scheduler/ipp.c:5489
+#: scheduler/ipp.c:2039 scheduler/ipp.c:5494
 #, c-format
 msgid "Language \"%s\" not supported."
 msgstr ""
@@ -4446,7 +4471,7 @@ msgstr ""
 msgid "Line longer than the maximum allowed (255 characters)"
 msgstr ""
 
-#: cgi-bin/admin.c:2373
+#: cgi-bin/admin.c:2379
 msgid "List Available Printers"
 msgstr ""
 
@@ -4502,7 +4527,7 @@ msgstr ""
 msgid "Missing asterisk in column 1"
 msgstr ""
 
-#: scheduler/ipp.c:5971
+#: scheduler/ipp.c:5976
 msgid "Missing document-number attribute."
 msgstr ""
 
@@ -4511,13 +4536,13 @@ msgstr ""
 msgid "Missing double quote on line %d."
 msgstr ""
 
-#: cgi-bin/admin.c:714 cgi-bin/admin.c:2086 cgi-bin/admin.c:2171
-#: cgi-bin/admin.c:2765 cgi-bin/admin.c:3019 cgi-bin/admin.c:3130
-#: cgi-bin/admin.c:3840
+#: cgi-bin/admin.c:712 cgi-bin/admin.c:2092 cgi-bin/admin.c:2177
+#: cgi-bin/admin.c:2771 cgi-bin/admin.c:3025 cgi-bin/admin.c:3136
+#: cgi-bin/admin.c:3846
 msgid "Missing form variable"
 msgstr ""
 
-#: scheduler/ipp.c:9328
+#: scheduler/ipp.c:9351
 msgid "Missing last-document attribute in request."
 msgstr ""
 
@@ -4529,7 +4554,7 @@ msgstr ""
 msgid "Missing media-size in media-col."
 msgstr ""
 
-#: scheduler/ipp.c:6574
+#: scheduler/ipp.c:6579
 msgid "Missing notify-subscription-ids attribute."
 msgstr ""
 
@@ -4537,7 +4562,7 @@ msgstr ""
 msgid "Missing option keyword"
 msgstr ""
 
-#: scheduler/ipp.c:3140 scheduler/ipp.c:3165
+#: scheduler/ipp.c:3129 scheduler/ipp.c:3154
 msgid "Missing requesting-user-name attribute."
 msgstr ""
 
@@ -4579,15 +4604,15 @@ msgid ""
 "        device-id = %s"
 msgstr ""
 
-#: test/ippfind.c:2786
+#: test/ippfind.c:2794
 msgid "Modifiers:"
 msgstr ""
 
-#: cgi-bin/admin.c:548
+#: cgi-bin/admin.c:546
 msgid "Modify Class"
 msgstr ""
 
-#: cgi-bin/admin.c:860
+#: cgi-bin/admin.c:859
 msgid "Modify Printer"
 msgstr ""
 
@@ -4611,7 +4636,7 @@ msgstr ""
 msgid "Name OID uses indefinite length"
 msgstr ""
 
-#: scheduler/ipp.c:1054
+#: scheduler/ipp.c:1061
 msgid "Nested classes are not allowed."
 msgstr ""
 
@@ -4647,7 +4672,7 @@ msgstr ""
 msgid "No active connection."
 msgstr ""
 
-#: scheduler/ipp.c:3418
+#: scheduler/ipp.c:3407
 #, c-format
 msgid "No active jobs on %s."
 msgstr ""
@@ -4656,7 +4681,7 @@ msgstr ""
 msgid "No attributes in request."
 msgstr ""
 
-#: scheduler/ipp.c:3041
+#: scheduler/ipp.c:3030
 msgid "No authentication information provided."
 msgstr ""
 
@@ -4664,11 +4689,11 @@ msgstr ""
 msgid "No community name"
 msgstr ""
 
-#: scheduler/ipp.c:5771
+#: scheduler/ipp.c:5776
 msgid "No default printer."
 msgstr ""
 
-#: cgi-bin/ipp-var.c:421 scheduler/ipp.c:7149
+#: cgi-bin/ipp-var.c:421 scheduler/ipp.c:7160
 msgid "No destinations added."
 msgstr ""
 
@@ -4684,7 +4709,7 @@ msgstr ""
 msgid "No error-status"
 msgstr ""
 
-#: scheduler/ipp.c:8091 scheduler/ipp.c:9342
+#: scheduler/ipp.c:8103 scheduler/ipp.c:9365
 msgid "No file in print request."
 msgstr ""
 
@@ -4696,7 +4721,7 @@ msgstr ""
 msgid "No name OID"
 msgstr ""
 
-#: filter/rastertoepson.c:1132 filter/rastertohp.c:865
+#: filter/rastertoepson.c:1144 filter/rastertohp.c:865
 #: filter/rastertolabel.c:1288
 msgid "No pages were found."
 msgstr ""
@@ -4713,7 +4738,7 @@ msgstr ""
 msgid "No printer-uri found for class"
 msgstr ""
 
-#: scheduler/ipp.c:6179
+#: scheduler/ipp.c:6184
 msgid "No printer-uri in request."
 msgstr ""
 
@@ -4733,11 +4758,11 @@ msgstr ""
 msgid "No request-id"
 msgstr ""
 
-#: scheduler/ipp.c:5374
+#: scheduler/ipp.c:5379
 msgid "No subscription attributes in request."
 msgstr ""
 
-#: scheduler/ipp.c:7476
+#: scheduler/ipp.c:7487
 msgid "No subscriptions found."
 msgstr ""
 
@@ -4781,7 +4806,7 @@ msgstr ""
 msgid "Not Supported"
 msgstr ""
 
-#: scheduler/ipp.c:1490 scheduler/ipp.c:10572
+#: scheduler/ipp.c:1506 scheduler/ipp.c:10624
 msgid "Not allowed to print."
 msgstr ""
 
@@ -4822,32 +4847,32 @@ msgstr ""
 msgid "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first"
 msgstr ""
 
-#: cgi-bin/admin.c:3611
+#: cgi-bin/admin.c:3617
 msgid "Operation Policy"
 msgstr ""
 
-#: filter/pstops.c:2177
+#: filter/pstops.c:2182
 #, c-format
 msgid "Option \"%s\" cannot be included via %%%%IncludeFeature."
 msgstr ""
 
-#: cgi-bin/admin.c:3261 cgi-bin/admin.c:3345
+#: cgi-bin/admin.c:3267 cgi-bin/admin.c:3351
 msgid "Options Installed"
 msgstr ""
 
-#: scheduler/cupsfilter.c:1482 scheduler/main.c:2146 systemv/cupsaddsmb.c:284
-#: systemv/cupsctl.c:203 systemv/cupstestdsc.c:429 systemv/cupstestppd.c:3817
-#: test/ippfind.c:2745 test/ipptool.c:4805 ppdc/ppdc.cxx:432
-#: ppdc/ppdhtml.cxx:174 ppdc/ppdi.cxx:130 ppdc/ppdmerge.cxx:363
-#: ppdc/ppdpo.cxx:254
+#: scheduler/cupsfilter.c:1482 scheduler/main.c:2177 systemv/cupsaddsmb.c:284
+#: systemv/cupsctl.c:203 systemv/cupstestdsc.c:429 systemv/cupstestppd.c:3861
+#: test/ippfind.c:2753 test/ipptool.c:4857 ppdc/ppdc.cxx:432
+#: ppdc/ppdhtml.cxx:179 ppdc/ppdi.cxx:130 ppdc/ppdmerge.cxx:363
+#: ppdc/ppdpo.cxx:249
 msgid "Options:"
 msgstr ""
 
-#: cups/ppd-cache.c:125
+#: cups/ppd-cache.c:442
 msgid "Out of date PPD cache file."
 msgstr ""
 
-#: cups/ppd-cache.c:1410
+#: cups/ppd-cache.c:1810
 msgid "Out of memory."
 msgstr ""
 
@@ -4965,11 +4990,11 @@ msgstr ""
 msgid "Plain Paper"
 msgstr ""
 
-#: cgi-bin/admin.c:3279 cgi-bin/admin.c:3560
+#: cgi-bin/admin.c:3285 cgi-bin/admin.c:3566
 msgid "Policies"
 msgstr ""
 
-#: cgi-bin/admin.c:3286 cgi-bin/admin.c:3629 cgi-bin/admin.c:3642
+#: cgi-bin/admin.c:3292 cgi-bin/admin.c:3635 cgi-bin/admin.c:3648
 msgid "Port Monitor"
 msgstr ""
 
@@ -4993,7 +5018,7 @@ msgstr ""
 msgid "Postcard Long Edge"
 msgstr ""
 
-#: backend/ipp.c:961 backend/ipp.c:969
+#: backend/ipp.c:965 backend/ipp.c:973
 msgid "Preparing to print."
 msgstr ""
 
@@ -5037,15 +5062,15 @@ msgstr ""
 msgid "Print file sent."
 msgstr ""
 
-#: backend/ipp.c:2172
+#: backend/ipp.c:2179
 msgid "Print job canceled at printer."
 msgstr ""
 
-#: backend/ipp.c:2164
+#: backend/ipp.c:2171
 msgid "Print job too large."
 msgstr ""
 
-#: backend/ipp.c:1642
+#: backend/ipp.c:1653
 msgid "Print job was not accepted."
 msgstr ""
 
@@ -5073,11 +5098,11 @@ msgstr ""
 msgid "Printer Settings"
 msgstr ""
 
-#: backend/ipp.c:2167
+#: backend/ipp.c:2174
 msgid "Printer cannot print supplied content."
 msgstr ""
 
-#: backend/ipp.c:2170
+#: backend/ipp.c:2177
 msgid "Printer cannot print with supplied options."
 msgstr ""
 
@@ -5089,7 +5114,7 @@ msgstr ""
 msgid "Printers"
 msgstr ""
 
-#: filter/rastertoepson.c:1078 filter/rastertohp.c:806
+#: filter/rastertoepson.c:1090 filter/rastertohp.c:806
 #: filter/rastertolabel.c:1235
 #, c-format
 msgid "Printing page %d, %u%% complete."
@@ -5099,7 +5124,7 @@ msgstr ""
 msgid "Quarto"
 msgstr ""
 
-#: scheduler/ipp.c:1485 scheduler/ipp.c:10567
+#: scheduler/ipp.c:1501 scheduler/ipp.c:10619
 msgid "Quota limit reached."
 msgstr ""
 
@@ -5166,7 +5191,7 @@ msgstr ""
 msgid "See Other"
 msgstr ""
 
-#: backend/usb-darwin.c:552 backend/usb-libusb.c:346
+#: backend/usb-darwin.c:564 backend/usb-libusb.c:346
 msgid "Sending data to printer."
 msgstr ""
 
@@ -5186,7 +5211,7 @@ msgstr ""
 msgid "Server Stopped"
 msgstr ""
 
-#: cups/tls-darwin.c:1008 cups/tls-gnutls.c:1024
+#: cups/tls-darwin.c:1030 cups/tls-gnutls.c:1049
 msgid "Server credentials not set."
 msgstr ""
 
@@ -5194,24 +5219,24 @@ msgstr ""
 msgid "Service Unavailable"
 msgstr ""
 
-#: cgi-bin/admin.c:2766 cgi-bin/admin.c:2812 cgi-bin/admin.c:2969
-#: cgi-bin/admin.c:2988
+#: cgi-bin/admin.c:2772 cgi-bin/admin.c:2818 cgi-bin/admin.c:2975
+#: cgi-bin/admin.c:2994
 msgid "Set Allowed Users"
 msgstr ""
 
-#: cgi-bin/admin.c:3015
+#: cgi-bin/admin.c:3021
 msgid "Set As Server Default"
 msgstr ""
 
-#: cgi-bin/admin.c:3115
+#: cgi-bin/admin.c:3121
 msgid "Set Class Options"
 msgstr ""
 
-#: cgi-bin/admin.c:3115 cgi-bin/admin.c:3289 cgi-bin/admin.c:3671
+#: cgi-bin/admin.c:3121 cgi-bin/admin.c:3295 cgi-bin/admin.c:3677
 msgid "Set Printer Options"
 msgstr ""
 
-#: cgi-bin/admin.c:3841 cgi-bin/admin.c:3885 cgi-bin/admin.c:3903
+#: cgi-bin/admin.c:3847 cgi-bin/admin.c:3891 cgi-bin/admin.c:3909
 msgid "Set Publishing"
 msgstr ""
 
@@ -5237,11 +5262,11 @@ msgid "Standard"
 msgstr ""
 
 #. TRANSLATORS: Banner/cover sheet before the print job.
-#: cgi-bin/admin.c:3532
+#: cgi-bin/admin.c:3538
 msgid "Starting Banner"
 msgstr ""
 
-#: filter/rastertoepson.c:1054 filter/rastertohp.c:782
+#: filter/rastertoepson.c:1066 filter/rastertohp.c:782
 #: filter/rastertolabel.c:1211
 #, c-format
 msgid "Starting page %d."
@@ -5251,13 +5276,13 @@ msgstr ""
 msgid "Statement"
 msgstr ""
 
-#: scheduler/ipp.c:3564 scheduler/ipp.c:6590 scheduler/ipp.c:7289
-#: scheduler/ipp.c:8790
+#: scheduler/ipp.c:3553 scheduler/ipp.c:6595 scheduler/ipp.c:7300
+#: scheduler/ipp.c:8813
 #, c-format
 msgid "Subscription #%d does not exist."
 msgstr ""
 
-#: test/ippfind.c:2798
+#: test/ippfind.c:2806
 msgid "Substitutions:"
 msgstr ""
 
@@ -5301,43 +5326,43 @@ msgstr ""
 msgid "Tear-Off Adjust Position"
 msgstr ""
 
-#: scheduler/ipp.c:1321
+#: scheduler/ipp.c:1337
 #, c-format
 msgid "The \"%s\" attribute is required for print jobs."
 msgstr ""
 
-#: scheduler/ipp.c:6250 scheduler/ipp.c:6330 scheduler/ipp.c:6343
-#: scheduler/ipp.c:6355 scheduler/ipp.c:6370
+#: scheduler/ipp.c:6255 scheduler/ipp.c:6335 scheduler/ipp.c:6348
+#: scheduler/ipp.c:6360 scheduler/ipp.c:6375
 #, c-format
 msgid "The %s attribute cannot be provided with job-ids."
 msgstr ""
 
-#: scheduler/ipp.c:1297
+#: scheduler/ipp.c:1316
 #, c-format
-msgid "The '%s' Job Description attribute cannot be supplied in a job creation request."
+msgid "The '%s' Job Status attribute cannot be supplied in a job creation request."
 msgstr ""
 
-#: scheduler/ipp.c:5183
+#: scheduler/ipp.c:5188
 #, c-format
 msgid "The '%s' operation attribute cannot be supplied in a Create-Job request."
 msgstr ""
 
-#: scheduler/ipp.c:6820
+#: scheduler/ipp.c:6825
 #, c-format
 msgid "The PPD file \"%s\" could not be found."
 msgstr ""
 
-#: scheduler/ipp.c:6807
+#: scheduler/ipp.c:6812
 #, c-format
 msgid "The PPD file \"%s\" could not be opened: %s"
 msgstr ""
 
-#: filter/rastertoepson.c:1023 filter/rastertohp.c:753
+#: filter/rastertoepson.c:1035 filter/rastertohp.c:753
 #: filter/rastertolabel.c:1175
 msgid "The PPD file could not be opened."
 msgstr ""
 
-#: cgi-bin/admin.c:727
+#: cgi-bin/admin.c:725
 msgid "The class name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)."
 msgstr ""
 
@@ -5357,11 +5382,11 @@ msgstr ""
 msgid "The fuser's temperature is low."
 msgstr ""
 
-#: scheduler/ipp.c:2088
+#: scheduler/ipp.c:2066
 msgid "The notify-lease-duration attribute cannot be used with job subscriptions."
 msgstr ""
 
-#: scheduler/ipp.c:2071 scheduler/ipp.c:5499
+#: scheduler/ipp.c:2049 scheduler/ipp.c:5504
 #, c-format
 msgid "The notify-user-data value is too large (%d > 63 octets)."
 msgstr ""
@@ -5374,7 +5399,7 @@ msgstr ""
 msgid "The optical photoconductor will need to be replaced soon."
 msgstr ""
 
-#: backend/ipp.c:981
+#: backend/ipp.c:985
 msgid "The printer configuration is incorrect or the printer no longer exists."
 msgstr ""
 
@@ -5382,8 +5407,8 @@ msgstr ""
 msgid "The printer did not respond."
 msgstr ""
 
-#: backend/ipp.c:825 backend/ipp.c:944 backend/ipp.c:1058 backend/ipp.c:1449
-#: backend/ipp.c:1614 backend/lpd.c:836 backend/socket.c:379
+#: backend/ipp.c:829 backend/ipp.c:948 backend/ipp.c:1062 backend/ipp.c:1459
+#: backend/ipp.c:1625 backend/lpd.c:836 backend/socket.c:379
 #: backend/usb-unix.c:124 backend/usb-unix.c:414 backend/usb-unix.c:497
 msgid "The printer is in use."
 msgstr ""
@@ -5400,7 +5425,7 @@ msgstr ""
 msgid "The printer is not connected."
 msgstr ""
 
-#: backend/ipp.c:803 backend/ipp.c:836 backend/ipp.c:940 backend/lpd.c:815
+#: backend/ipp.c:807 backend/ipp.c:840 backend/ipp.c:944 backend/lpd.c:815
 #: backend/lpd.c:856 backend/socket.c:358 backend/socket.c:391
 msgid "The printer is not responding."
 msgstr ""
@@ -5409,15 +5434,15 @@ msgstr ""
 msgid "The printer is now connected."
 msgstr ""
 
-#: backend/usb-darwin.c:1300
+#: backend/usb-darwin.c:1342
 msgid "The printer is now online."
 msgstr ""
 
-#: backend/usb-darwin.c:1321
+#: backend/usb-darwin.c:1381
 msgid "The printer is offline."
 msgstr ""
 
-#: backend/ipp.c:818 backend/lpd.c:829 backend/socket.c:372
+#: backend/ipp.c:822 backend/lpd.c:829 backend/socket.c:372
 msgid "The printer is unreachable at this time."
 msgstr ""
 
@@ -5429,26 +5454,26 @@ msgstr ""
 msgid "The printer may be out of toner."
 msgstr ""
 
-#: backend/ipp.c:812 backend/lpd.c:823 backend/socket.c:366
+#: backend/ipp.c:816 backend/lpd.c:823 backend/socket.c:366
 msgid "The printer may not exist or is unavailable at this time."
 msgstr ""
 
-#: cgi-bin/admin.c:909
+#: cgi-bin/admin.c:908
 msgid "The printer name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)."
 msgstr ""
 
-#: scheduler/ipp.c:788 scheduler/ipp.c:1048 scheduler/ipp.c:3205
-#: scheduler/ipp.c:3384 scheduler/ipp.c:5166 scheduler/ipp.c:5333
-#: scheduler/ipp.c:5647 scheduler/ipp.c:6216 scheduler/ipp.c:7025
-#: scheduler/ipp.c:7081 scheduler/ipp.c:7395 scheduler/ipp.c:7661
-#: scheduler/ipp.c:7750 scheduler/ipp.c:7783 scheduler/ipp.c:8106
-#: scheduler/ipp.c:8500 scheduler/ipp.c:8582 scheduler/ipp.c:9747
-#: scheduler/ipp.c:10199 scheduler/ipp.c:10530 scheduler/ipp.c:10612
-#: scheduler/ipp.c:10987
+#: scheduler/ipp.c:787 scheduler/ipp.c:1055 scheduler/ipp.c:3194
+#: scheduler/ipp.c:3373 scheduler/ipp.c:5171 scheduler/ipp.c:5338
+#: scheduler/ipp.c:5652 scheduler/ipp.c:6221 scheduler/ipp.c:7030
+#: scheduler/ipp.c:7086 scheduler/ipp.c:7406 scheduler/ipp.c:7672
+#: scheduler/ipp.c:7761 scheduler/ipp.c:7794 scheduler/ipp.c:8118
+#: scheduler/ipp.c:8525 scheduler/ipp.c:8607 scheduler/ipp.c:9779
+#: scheduler/ipp.c:10231 scheduler/ipp.c:10582 scheduler/ipp.c:10664
+#: scheduler/ipp.c:11039
 msgid "The printer or class does not exist."
 msgstr ""
 
-#: scheduler/ipp.c:1234
+#: scheduler/ipp.c:1255
 msgid "The printer or class is not shared."
 msgstr ""
 
@@ -5472,42 +5497,42 @@ msgstr ""
 msgid "The printer's waste bin is full."
 msgstr ""
 
-#: scheduler/ipp.c:894 scheduler/ipp.c:2252
+#: scheduler/ipp.c:893 scheduler/ipp.c:2230
 #, c-format
 msgid "The printer-uri \"%s\" contains invalid characters."
 msgstr ""
 
-#: scheduler/ipp.c:3182
+#: scheduler/ipp.c:3171
 msgid "The printer-uri attribute is required."
 msgstr ""
 
-#: scheduler/ipp.c:878
+#: scheduler/ipp.c:877
 msgid "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"."
 msgstr ""
 
-#: scheduler/ipp.c:2236
+#: scheduler/ipp.c:2214
 msgid "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"."
 msgstr ""
 
-#: cgi-bin/admin.c:452
+#: cgi-bin/admin.c:450
 msgid "The subscription name may not contain spaces, slashes (/), question marks (?), or the pound sign (#)."
 msgstr ""
 
-#: scheduler/client.c:2232
+#: scheduler/client.c:2242
 msgid "The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to enable it."
 msgstr ""
 
-#: scheduler/ipp.c:6314
+#: scheduler/ipp.c:6319
 #, c-format
 msgid "The which-jobs value \"%s\" is not supported."
 msgstr ""
 
-#: scheduler/ipp.c:5577
+#: scheduler/ipp.c:5582
 msgid "There are too many subscriptions."
 msgstr ""
 
-#: backend/usb-darwin.c:386 backend/usb-darwin.c:445 backend/usb-darwin.c:514
-#: backend/usb-darwin.c:535 backend/usb-libusb.c:271 backend/usb-libusb.c:325
+#: backend/usb-darwin.c:398 backend/usb-darwin.c:457 backend/usb-darwin.c:526
+#: backend/usb-darwin.c:547 backend/usb-libusb.c:271 backend/usb-libusb.c:325
 msgid "There was an unrecoverable USB error."
 msgstr ""
 
@@ -5515,16 +5540,16 @@ msgstr ""
 msgid "Thermal Transfer Media"
 msgstr ""
 
-#: scheduler/ipp.c:1479
+#: scheduler/ipp.c:1495
 msgid "Too many active jobs."
 msgstr ""
 
-#: scheduler/ipp.c:1373
+#: scheduler/ipp.c:1389
 #, c-format
 msgid "Too many job-sheets values (%d > 2)."
 msgstr ""
 
-#: scheduler/ipp.c:2537
+#: scheduler/ipp.c:2524
 #, c-format
 msgid "Too many printer-state-reasons values (%d > %d)."
 msgstr ""
@@ -5593,7 +5618,7 @@ msgstr ""
 msgid "US Letter Small"
 msgstr ""
 
-#: cgi-bin/admin.c:1939 cgi-bin/admin.c:1952 cgi-bin/admin.c:1976
+#: cgi-bin/admin.c:1945 cgi-bin/admin.c:1958 cgi-bin/admin.c:1982
 msgid "Unable to access cupsd.conf file"
 msgstr ""
 
@@ -5601,56 +5626,56 @@ msgstr ""
 msgid "Unable to access help file."
 msgstr ""
 
-#: cgi-bin/admin.c:504
+#: cgi-bin/admin.c:502
 msgid "Unable to add RSS subscription"
 msgstr ""
 
-#: cgi-bin/admin.c:792
+#: cgi-bin/admin.c:790
 msgid "Unable to add class"
 msgstr ""
 
-#: backend/ipp.c:1796
+#: backend/ipp.c:1807
 msgid "Unable to add document to print job."
 msgstr ""
 
-#: scheduler/ipp.c:1537
+#: scheduler/ipp.c:1553
 #, c-format
 msgid "Unable to add job for destination \"%s\"."
 msgstr ""
 
-#: cgi-bin/admin.c:1037 cgi-bin/admin.c:1399
+#: cgi-bin/admin.c:1036 cgi-bin/admin.c:1405
 msgid "Unable to add printer"
 msgstr ""
 
-#: scheduler/ipp.c:1164
+#: scheduler/ipp.c:1173
 msgid "Unable to allocate memory for file types."
 msgstr ""
 
-#: filter/pstops.c:418
+#: filter/pstops.c:423
 msgid "Unable to allocate memory for page info"
 msgstr ""
 
-#: filter/pstops.c:412
+#: filter/pstops.c:417
 msgid "Unable to allocate memory for pages array"
 msgstr ""
 
-#: cgi-bin/admin.c:1505
+#: cgi-bin/admin.c:1511
 msgid "Unable to cancel RSS subscription"
 msgstr ""
 
-#: backend/ipp.c:2077 backend/ipp.c:2512
+#: backend/ipp.c:2084 backend/ipp.c:2532
 msgid "Unable to cancel print job."
 msgstr ""
 
-#: cgi-bin/admin.c:2970
+#: cgi-bin/admin.c:2976
 msgid "Unable to change printer"
 msgstr ""
 
-#: cgi-bin/admin.c:3886
+#: cgi-bin/admin.c:3892
 msgid "Unable to change printer-is-shared attribute"
 msgstr ""
 
-#: cgi-bin/admin.c:1637 cgi-bin/admin.c:1779
+#: cgi-bin/admin.c:1643 cgi-bin/admin.c:1785
 msgid "Unable to change server settings"
 msgstr ""
 
@@ -5672,7 +5697,7 @@ msgstr ""
 msgid "Unable to connect to host."
 msgstr ""
 
-#: backend/ipp.c:781 backend/ipp.c:1254 backend/lpd.c:795 backend/socket.c:338
+#: backend/ipp.c:785 backend/ipp.c:1258 backend/lpd.c:795 backend/socket.c:338
 #: backend/usb-unix.c:110
 msgid "Unable to contact printer, queuing on next printer in class."
 msgstr ""
@@ -5692,12 +5717,12 @@ msgstr ""
 msgid "Unable to copy CUPS printer driver files (%d)."
 msgstr ""
 
-#: scheduler/ipp.c:2657
+#: scheduler/ipp.c:2644
 #, c-format
 msgid "Unable to copy PPD file - %s"
 msgstr ""
 
-#: scheduler/ipp.c:2712
+#: scheduler/ipp.c:2699
 msgid "Unable to copy PPD file."
 msgstr ""
 
@@ -5711,7 +5736,7 @@ msgstr ""
 msgid "Unable to copy Windows 9x printer driver files (%d)."
 msgstr ""
 
-#: scheduler/ipp.c:2634
+#: scheduler/ipp.c:2621
 #, c-format
 msgid "Unable to copy interface script - %s"
 msgstr ""
@@ -5720,19 +5745,19 @@ msgstr ""
 msgid "Unable to create printer-uri"
 msgstr ""
 
-#: cups/tls-darwin.c:1116 cups/tls-gnutls.c:1157
+#: cups/tls-darwin.c:1291 cups/tls-gnutls.c:1181
 msgid "Unable to create server credentials."
 msgstr ""
 
-#: cgi-bin/admin.c:1830 cgi-bin/admin.c:1842 scheduler/cupsfilter.c:1290
+#: cgi-bin/admin.c:1836 cgi-bin/admin.c:1848 scheduler/cupsfilter.c:1290
 msgid "Unable to create temporary file"
 msgstr ""
 
-#: cgi-bin/admin.c:2133
+#: cgi-bin/admin.c:2139
 msgid "Unable to delete class"
 msgstr ""
 
-#: cgi-bin/admin.c:2218
+#: cgi-bin/admin.c:2224
 msgid "Unable to delete printer"
 msgstr ""
 
@@ -5740,39 +5765,39 @@ msgstr ""
 msgid "Unable to do maintenance command"
 msgstr ""
 
-#: cgi-bin/admin.c:1954
+#: cgi-bin/admin.c:1960
 msgid "Unable to edit cupsd.conf files larger than 1MB"
 msgstr ""
 
-#: cups/tls-darwin.c:1284
+#: cups/tls-darwin.c:1459
 msgid "Unable to establish a secure connection to host (certificate chain invalid)."
 msgstr ""
 
-#: cups/tls-darwin.c:1274
+#: cups/tls-darwin.c:1449
 msgid "Unable to establish a secure connection to host (certificate not yet valid)."
 msgstr ""
 
-#: cups/tls-darwin.c:1269
+#: cups/tls-darwin.c:1444
 msgid "Unable to establish a secure connection to host (expired certificate)."
 msgstr ""
 
-#: cups/tls-darwin.c:1279
+#: cups/tls-darwin.c:1454
 msgid "Unable to establish a secure connection to host (host name mismatch)."
 msgstr ""
 
-#: cups/tls-darwin.c:1289
+#: cups/tls-darwin.c:1464
 msgid "Unable to establish a secure connection to host (peer dropped connection before responding)."
 msgstr ""
 
-#: cups/tls-darwin.c:1264
+#: cups/tls-darwin.c:1439
 msgid "Unable to establish a secure connection to host (self-signed certificate)."
 msgstr ""
 
-#: cups/tls-darwin.c:1259
+#: cups/tls-darwin.c:1434
 msgid "Unable to establish a secure connection to host (untrusted certificate)."
 msgstr ""
 
-#: cups/tls-darwin.c:1316 cups/tls-sspi.c:1247 cups/tls-sspi.c:1264
+#: cups/tls-darwin.c:1491 cups/tls-sspi.c:1279 cups/tls-sspi.c:1296
 msgid "Unable to establish a secure connection to host."
 msgstr ""
 
@@ -5784,11 +5809,11 @@ msgstr ""
 msgid "Unable to find printer."
 msgstr ""
 
-#: cups/tls-darwin.c:1130
+#: cups/tls-darwin.c:1305
 msgid "Unable to find server credentials."
 msgstr ""
 
-#: backend/ipp.c:3493
+#: backend/ipp.c:3220
 msgid "Unable to get backend exit status."
 msgstr ""
 
@@ -5800,11 +5825,11 @@ msgstr ""
 msgid "Unable to get class status"
 msgstr ""
 
-#: cgi-bin/admin.c:1300
+#: cgi-bin/admin.c:1299
 msgid "Unable to get list of printer drivers"
 msgstr ""
 
-#: cgi-bin/admin.c:2820
+#: cgi-bin/admin.c:2826
 msgid "Unable to get printer attributes"
 msgstr ""
 
@@ -5816,7 +5841,7 @@ msgstr ""
 msgid "Unable to get printer status"
 msgstr ""
 
-#: backend/ipp.c:1005
+#: backend/ipp.c:1009
 msgid "Unable to get printer status."
 msgstr ""
 
@@ -5834,21 +5859,21 @@ msgstr ""
 msgid "Unable to load help index."
 msgstr ""
 
-#: backend/ipp.c:668 backend/lpd.c:426 backend/socket.c:277
+#: backend/ipp.c:672 backend/lpd.c:426 backend/socket.c:277
 #, c-format
 msgid "Unable to locate printer \"%s\"."
 msgstr ""
 
-#: backend/dnssd.c:787 backend/ipp.c:336 backend/lpd.c:196
+#: backend/dnssd.c:787 backend/ipp.c:340 backend/lpd.c:196
 #: backend/socket.c:163
 msgid "Unable to locate printer."
 msgstr ""
 
-#: cgi-bin/admin.c:791
+#: cgi-bin/admin.c:789
 msgid "Unable to modify class"
 msgstr ""
 
-#: cgi-bin/admin.c:1036 cgi-bin/admin.c:1398
+#: cgi-bin/admin.c:1035 cgi-bin/admin.c:1404
 msgid "Unable to modify printer"
 msgstr ""
 
@@ -5860,11 +5885,11 @@ msgstr ""
 msgid "Unable to move jobs"
 msgstr ""
 
-#: cgi-bin/admin.c:3166 cups/ppd.c:297
+#: cgi-bin/admin.c:3172 cups/ppd.c:297
 msgid "Unable to open PPD file"
 msgstr ""
 
-#: cgi-bin/admin.c:2588
+#: cgi-bin/admin.c:2594
 msgid "Unable to open cupsd.conf file:"
 msgstr ""
 
@@ -5872,7 +5897,7 @@ msgstr ""
 msgid "Unable to open device file"
 msgstr ""
 
-#: scheduler/ipp.c:5992
+#: scheduler/ipp.c:5997
 #, c-format
 msgid "Unable to open document #%d in job #%d."
 msgstr ""
@@ -5881,13 +5906,13 @@ msgstr ""
 msgid "Unable to open help file."
 msgstr ""
 
-#: backend/ipp.c:378 backend/ipp.c:1543 backend/ipp.c:1751 backend/lpd.c:496
-#: backend/socket.c:150 backend/usb.c:237 filter/gziptoany.c:67
-#: filter/pstops.c:267
+#: backend/ipp.c:382 backend/ipp.c:1554 backend/ipp.c:1762 backend/lpd.c:496
+#: backend/socket.c:150 backend/usb.c:237 filter/gziptoany.c:73
+#: filter/pstops.c:270
 msgid "Unable to open print file"
 msgstr ""
 
-#: filter/rastertoepson.c:983 filter/rastertohp.c:713
+#: filter/rastertoepson.c:995 filter/rastertohp.c:713
 #: filter/rastertolabel.c:1133
 msgid "Unable to open raster file"
 msgstr ""
@@ -5896,12 +5921,16 @@ msgstr ""
 msgid "Unable to print test page"
 msgstr ""
 
-#: backend/runloop.c:85 backend/runloop.c:314 backend/usb-darwin.c:622
-#: backend/usb-darwin.c:666 backend/usb-libusb.c:416 backend/usb-libusb.c:451
+#: backend/runloop.c:85 backend/runloop.c:314 backend/usb-darwin.c:634
+#: backend/usb-darwin.c:678 backend/usb-libusb.c:416 backend/usb-libusb.c:451
 msgid "Unable to read print data."
 msgstr ""
 
-#: cups/dest.c:3445
+#: scheduler/ipp.c:8277 scheduler/ipp.c:9518
+msgid "Unable to rename job document file."
+msgstr ""
+
+#: cups/dest.c:3446
 msgid "Unable to resolve printer-uri."
 msgstr ""
 
@@ -5910,7 +5939,7 @@ msgstr ""
 msgid "Unable to run \"%s\": %s"
 msgstr ""
 
-#: filter/pstops.c:530
+#: filter/pstops.c:535
 msgid "Unable to see in file"
 msgstr ""
 
@@ -5918,7 +5947,7 @@ msgstr ""
 msgid "Unable to send command to printer driver"
 msgstr ""
 
-#: backend/usb-darwin.c:744 backend/usb-libusb.c:527
+#: backend/usb-darwin.c:756 backend/usb-libusb.c:527
 msgid "Unable to send data to printer."
 msgstr ""
 
@@ -5927,23 +5956,23 @@ msgstr ""
 msgid "Unable to set Windows printer driver (%d)."
 msgstr ""
 
-#: cgi-bin/admin.c:3787
+#: cgi-bin/admin.c:3793
 msgid "Unable to set options"
 msgstr ""
 
-#: cgi-bin/admin.c:3057
+#: cgi-bin/admin.c:3063
 msgid "Unable to set server default"
 msgstr ""
 
-#: backend/ipp.c:3352 backend/ipp.c:3429 backend/ipp.c:3437
+#: backend/ipp.c:3079 backend/ipp.c:3156 backend/ipp.c:3164
 msgid "Unable to start backend process."
 msgstr ""
 
-#: cgi-bin/admin.c:1892
+#: cgi-bin/admin.c:1898
 msgid "Unable to upload cupsd.conf file"
 msgstr ""
 
-#: backend/usb-darwin.c:2016 backend/usb-darwin.c:2040
+#: backend/usb-darwin.c:2166 backend/usb-darwin.c:2190
 msgid "Unable to use legacy USB class driver."
 msgstr ""
 
@@ -5951,7 +5980,7 @@ msgstr ""
 msgid "Unable to write print data"
 msgstr ""
 
-#: filter/gziptoany.c:86
+#: filter/gziptoany.c:92
 #, c-format
 msgid "Unable to write uncompressed print data: %s"
 msgstr ""
@@ -5960,7 +5989,7 @@ msgstr ""
 msgid "Unauthorized"
 msgstr ""
 
-#: cgi-bin/admin.c:3483
+#: cgi-bin/admin.c:3489
 msgid "Units"
 msgstr ""
 
@@ -5968,12 +5997,12 @@ msgstr ""
 msgid "Unknown"
 msgstr ""
 
-#: filter/pstops.c:2185
+#: filter/pstops.c:2190
 #, c-format
 msgid "Unknown choice \"%s\" for option \"%s\"."
 msgstr ""
 
-#: backend/ipp.c:520
+#: backend/ipp.c:524
 #, c-format
 msgid "Unknown encryption option value: \"%s\"."
 msgstr ""
@@ -5992,12 +6021,12 @@ msgstr ""
 msgid "Unknown media size name."
 msgstr ""
 
-#: backend/ipp.c:584
+#: backend/ipp.c:588
 #, c-format
 msgid "Unknown option \"%s\" with value \"%s\"."
 msgstr ""
 
-#: filter/pstops.c:2168
+#: filter/pstops.c:2173
 #, c-format
 msgid "Unknown option \"%s\"."
 msgstr ""
@@ -6007,12 +6036,12 @@ msgstr ""
 msgid "Unknown print mode: \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:10401
+#: scheduler/ipp.c:10453
 #, c-format
 msgid "Unknown printer-error-policy \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:10384
+#: scheduler/ipp.c:10436
 #, c-format
 msgid "Unknown printer-op-policy \"%s\"."
 msgstr ""
@@ -6033,22 +6062,22 @@ msgstr ""
 msgid "Unknown service name."
 msgstr ""
 
-#: backend/ipp.c:549
+#: backend/ipp.c:553
 #, c-format
 msgid "Unknown version option value: \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:10858
+#: scheduler/ipp.c:10910
 #, c-format
 msgid "Unsupported 'compression' value \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:10888
+#: scheduler/ipp.c:10940
 #, c-format
 msgid "Unsupported 'document-format' value \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:10963
+#: scheduler/ipp.c:11015
 msgid "Unsupported 'job-name' value."
 msgstr ""
 
@@ -6057,27 +6086,27 @@ msgstr ""
 msgid "Unsupported character set \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:8072 scheduler/ipp.c:9307
+#: scheduler/ipp.c:8084 scheduler/ipp.c:9330
 #, c-format
 msgid "Unsupported compression \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:8206 scheduler/ipp.c:9457
+#: scheduler/ipp.c:8220 scheduler/ipp.c:9483
 #, c-format
 msgid "Unsupported document-format \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:9440
+#: scheduler/ipp.c:9466
 #, c-format
 msgid "Unsupported document-format \"%s/%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:1339
+#: scheduler/ipp.c:1355
 #, c-format
 msgid "Unsupported format \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:1437
+#: scheduler/ipp.c:1453
 msgid "Unsupported margins."
 msgstr ""
 
@@ -6085,17 +6114,17 @@ msgstr ""
 msgid "Unsupported media value."
 msgstr ""
 
-#: filter/pstops.c:2450
+#: filter/pstops.c:2455
 #, c-format
 msgid "Unsupported number-up value %d, using number-up=1."
 msgstr ""
 
-#: filter/pstops.c:2484
+#: filter/pstops.c:2489
 #, c-format
 msgid "Unsupported number-up-layout value %s, using number-up-layout=lrtb."
 msgstr ""
 
-#: filter/pstops.c:2535
+#: filter/pstops.c:2540
 #, c-format
 msgid "Unsupported page-border value %s, using page-border=none."
 msgstr ""
@@ -6112,7 +6141,7 @@ msgstr ""
 msgid "Upgrade Required"
 msgstr ""
 
-#: systemv/lpadmin.c:654
+#: systemv/lpadmin.c:666
 msgid ""
 "Usage:\n"
 "\n"
@@ -6124,7 +6153,7 @@ msgid ""
 "                       [-u allow:user,user] [-u deny:user,user]"
 msgstr ""
 
-#: backend/dnssd.c:227 backend/ipp.c:325 backend/lpd.c:183
+#: backend/dnssd.c:227 backend/ipp.c:329 backend/lpd.c:183
 #: backend/socket.c:127 backend/usb.c:183 filter/commandtops.c:63
 #: filter/gziptoany.c:46 filter/pstops.c:231 monitor/bcp.c:56
 #: monitor/tbcp.c:55
@@ -6140,7 +6169,7 @@ msgstr ""
 msgid "Usage: cupsctl [options] [param=value ... paramN=valueN]"
 msgstr ""
 
-#: scheduler/main.c:2145
+#: scheduler/main.c:2176
 msgid "Usage: cupsd [options]"
 msgstr ""
 
@@ -6152,7 +6181,7 @@ msgstr ""
 msgid "Usage: cupstestdsc [options] filename.ps [... filename.ps]"
 msgstr ""
 
-#: systemv/cupstestppd.c:3813
+#: systemv/cupstestppd.c:3857
 msgid "Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]"
 msgstr ""
 
@@ -6164,7 +6193,7 @@ msgid ""
 "Options:"
 msgstr ""
 
-#: test/ippfind.c:2738
+#: test/ippfind.c:2746
 msgid ""
 "Usage: ippfind [options] regtype[,subtype][.domain.] ... [expression]\n"
 "       ippfind [options] name[.regtype[.domain.]] ... [expression]\n"
@@ -6172,7 +6201,7 @@ msgid ""
 "       ippfind --version"
 msgstr ""
 
-#: test/ipptool.c:4803
+#: test/ipptool.c:4855
 msgid "Usage: ipptool [options] URI filename [ ... filenameN ]"
 msgstr ""
 
@@ -6196,7 +6225,7 @@ msgstr ""
 msgid "Usage: ppdc [options] filename.drv [ ... filenameN.drv ]"
 msgstr ""
 
-#: ppdc/ppdhtml.cxx:172
+#: ppdc/ppdhtml.cxx:177
 msgid "Usage: ppdhtml [options] filename.drv >filename.html"
 msgstr ""
 
@@ -6208,7 +6237,7 @@ msgstr ""
 msgid "Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]"
 msgstr ""
 
-#: ppdc/ppdpo.cxx:252
+#: ppdc/ppdpo.cxx:247
 msgid "Usage: ppdpo [options] -o filename.po filename.drv [ ... filenameN.drv ]"
 msgstr ""
 
@@ -6228,11 +6257,11 @@ msgstr ""
 msgid "Version uses indefinite length"
 msgstr ""
 
-#: backend/ipp.c:1913
+#: backend/ipp.c:1924
 msgid "Waiting for job to complete."
 msgstr ""
 
-#: backend/usb-darwin.c:469 backend/usb-libusb.c:223
+#: backend/usb-darwin.c:481 backend/usb-libusb.c:223
 msgid "Waiting for printer to become available."
 msgstr ""
 
@@ -6252,7 +6281,7 @@ msgstr ""
 msgid "Yes"
 msgstr ""
 
-#: scheduler/client.c:2219
+#: scheduler/client.c:2229
 #, c-format
 msgid "You must access this page using the URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A>."
 msgstr ""
@@ -6277,11 +6306,11 @@ msgstr ""
 msgid "completed"
 msgstr ""
 
-#: scheduler/ipp.c:5864
+#: scheduler/ipp.c:5869
 msgid "cups-deviced failed to execute."
 msgstr ""
 
-#: scheduler/ipp.c:6743 scheduler/ipp.c:6992
+#: scheduler/ipp.c:6748 scheduler/ipp.c:6997
 msgid "cups-driverd failed to execute."
 msgstr ""
 
@@ -6309,36 +6338,36 @@ msgstr ""
 msgid "cupsctl: Unknown option \"-%c\""
 msgstr ""
 
-#: scheduler/main.c:171
+#: scheduler/main.c:182
 msgid "cupsd: Expected config filename after \"-c\" option."
 msgstr ""
 
-#: scheduler/main.c:258
+#: scheduler/main.c:278
 msgid "cupsd: Expected cups-files.conf filename after \"-s\" option."
 msgstr ""
 
-#: scheduler/main.c:236
+#: scheduler/main.c:252
 msgid "cupsd: On-demand support not compiled in, running in normal mode."
 msgstr ""
 
-#: scheduler/main.c:269
+#: scheduler/main.c:289
 msgid "cupsd: Relative cups-files.conf filename not allowed."
 msgstr ""
 
-#: scheduler/main.c:202 scheduler/main.c:209
+#: scheduler/main.c:213 scheduler/main.c:220
 msgid "cupsd: Unable to get current directory."
 msgstr ""
 
-#: scheduler/main.c:316 scheduler/main.c:325
+#: scheduler/main.c:338 scheduler/main.c:347
 msgid "cupsd: Unable to get path to cups-files.conf file."
 msgstr ""
 
-#: scheduler/main.c:298
+#: scheduler/main.c:320
 #, c-format
 msgid "cupsd: Unknown argument \"%s\" - aborting."
 msgstr ""
 
-#: scheduler/main.c:291
+#: scheduler/main.c:313
 #, c-format
 msgid "cupsd: Unknown option \"%c\" - aborting."
 msgstr ""
@@ -6362,11 +6391,11 @@ msgstr ""
 msgid "cupsfilter: Unable to get job file - %s"
 msgstr ""
 
-#: systemv/cupstestppd.c:261
+#: systemv/cupstestppd.c:241
 msgid "cupstestppd: The -q option is incompatible with the -v option."
 msgstr ""
 
-#: systemv/cupstestppd.c:277
+#: systemv/cupstestppd.c:257
 msgid "cupstestppd: The -v option is incompatible with the -q option."
 msgstr ""
 
@@ -6499,194 +6528,199 @@ msgstr ""
 msgid "ippfind: Unknown variable \"{%s}\"."
 msgstr ""
 
-#: test/ipptool.c:326 test/ipptool.c:389 test/ipptool.c:544 test/ipptool.c:567
+#: test/ipptool.c:329 test/ipptool.c:392 test/ipptool.c:547 test/ipptool.c:570
 msgid "ipptool: \"-i\" and \"-n\" are incompatible with \"-P\" and \"-X\"."
 msgstr ""
 
-#: test/ipptool.c:623
+#: test/ipptool.c:626
 #, c-format
 msgid "ipptool: Bad URI - %s."
 msgstr ""
 
-#: test/ipptool.c:537
+#: test/ipptool.c:540
 msgid "ipptool: Invalid seconds for \"-i\"."
 msgstr ""
 
-#: test/ipptool.c:604
+#: test/ipptool.c:607
 msgid "ipptool: May only specify a single URI."
 msgstr ""
 
-#: test/ipptool.c:559
+#: test/ipptool.c:562
 msgid "ipptool: Missing count for \"-n\"."
 msgstr ""
 
-#: test/ipptool.c:423
+#: test/ipptool.c:426
 msgid "ipptool: Missing filename for \"-f\"."
 msgstr ""
 
-#: test/ipptool.c:404
+#: test/ipptool.c:407
 msgid "ipptool: Missing name=value for \"-d\"."
 msgstr ""
 
-#: test/ipptool.c:527
+#: test/ipptool.c:530
 msgid "ipptool: Missing seconds for \"-i\"."
 msgstr ""
 
-#: test/ipptool.c:649
+#: test/ipptool.c:652
 msgid "ipptool: URI required before test file."
 msgstr ""
 
-#: test/ipptool.c:585
+#: test/ipptool.c:588
 #, c-format
 msgid "ipptool: Unknown option \"-%c\"."
 msgstr ""
 
-#: scheduler/ipp.c:7739
+#: scheduler/ipp.c:7750
 msgid "job-printer-uri attribute missing."
 msgstr ""
 
-#: systemv/lpadmin.c:117 systemv/lpadmin.c:361
+#: systemv/lpadmin.c:123 systemv/lpadmin.c:364
 msgid "lpadmin: Class name can only contain printable characters."
 msgstr ""
 
-#: systemv/lpadmin.c:600
+#: systemv/lpadmin.c:601
 msgid "lpadmin: Expected PPD after \"-P\" option."
 msgstr ""
 
-#: systemv/lpadmin.c:443
+#: systemv/lpadmin.c:445
 msgid "lpadmin: Expected allow/deny:userlist after \"-u\" option."
 msgstr ""
 
-#: systemv/lpadmin.c:350
+#: systemv/lpadmin.c:353
 msgid "lpadmin: Expected class after \"-r\" option."
 msgstr ""
 
-#: systemv/lpadmin.c:106
+#: systemv/lpadmin.c:112
 msgid "lpadmin: Expected class name after \"-c\" option."
 msgstr ""
 
-#: systemv/lpadmin.c:544
+#: systemv/lpadmin.c:545
 msgid "lpadmin: Expected description after \"-D\" option."
 msgstr ""
 
-#: systemv/lpadmin.c:477
+#: systemv/lpadmin.c:479
 msgid "lpadmin: Expected device URI after \"-v\" option."
 msgstr ""
 
-#: systemv/lpadmin.c:560
+#: systemv/lpadmin.c:561
 msgid "lpadmin: Expected file type(s) after \"-I\" option."
 msgstr ""
 
-#: systemv/lpadmin.c:188
+#: systemv/lpadmin.c:193
 msgid "lpadmin: Expected hostname after \"-h\" option."
 msgstr ""
 
-#: systemv/lpadmin.c:207
+#: systemv/lpadmin.c:212
 msgid "lpadmin: Expected interface after \"-i\" option."
 msgstr ""
 
-#: systemv/lpadmin.c:580
+#: systemv/lpadmin.c:581
 msgid "lpadmin: Expected location after \"-L\" option."
 msgstr ""
 
-#: systemv/lpadmin.c:260
+#: systemv/lpadmin.c:264
 msgid "lpadmin: Expected model after \"-m\" option."
 msgstr ""
 
-#: systemv/lpadmin.c:403
+#: systemv/lpadmin.c:405
 msgid "lpadmin: Expected name after \"-R\" option."
 msgstr ""
 
-#: systemv/lpadmin.c:280
+#: systemv/lpadmin.c:284
 msgid "lpadmin: Expected name=value after \"-o\" option."
 msgstr ""
 
-#: systemv/lpadmin.c:299
+#: systemv/lpadmin.c:303
 msgid "lpadmin: Expected printer after \"-p\" option."
 msgstr ""
 
-#: systemv/lpadmin.c:150
+#: systemv/lpadmin.c:155
 msgid "lpadmin: Expected printer name after \"-d\" option."
 msgstr ""
 
-#: systemv/lpadmin.c:511
+#: systemv/lpadmin.c:512
 msgid "lpadmin: Expected printer or class after \"-x\" option."
 msgstr ""
 
-#: systemv/lpadmin.c:961
+#: systemv/lpadmin.c:973
 msgid "lpadmin: No member names were seen."
 msgstr ""
 
-#: systemv/lpadmin.c:748
+#: systemv/lpadmin.c:760
 #, c-format
 msgid "lpadmin: Printer %s is already a member of class %s."
 msgstr ""
 
-#: systemv/lpadmin.c:975
+#: systemv/lpadmin.c:987
 #, c-format
 msgid "lpadmin: Printer %s is not a member of class %s."
 msgstr ""
 
-#: systemv/lpadmin.c:161 systemv/lpadmin.c:310 systemv/lpadmin.c:522
+#: systemv/lpadmin.c:166 systemv/lpadmin.c:314 systemv/lpadmin.c:523
 msgid "lpadmin: Printer name can only contain printable characters."
 msgstr ""
 
-#: systemv/lpadmin.c:91
+#: systemv/lpadmin.c:97
 msgid ""
 "lpadmin: Unable to add a printer to the class:\n"
 "         You must specify a printer name first."
 msgstr ""
 
-#: systemv/lpadmin.c:82 systemv/lpadmin.c:135 systemv/lpadmin.c:239
-#: systemv/lpadmin.c:325 systemv/lpadmin.c:379 systemv/lpadmin.c:496
-#: systemv/lpadmin.c:633
+#: systemv/lpadmin.c:88 systemv/lpadmin.c:140 systemv/lpadmin.c:243
+#: systemv/lpadmin.c:328 systemv/lpadmin.c:381 systemv/lpadmin.c:497
+#: systemv/lpadmin.c:642
 #, c-format
 msgid "lpadmin: Unable to connect to server: %s"
 msgstr ""
 
-#: systemv/lpadmin.c:1314
+#: systemv/lpadmin.c:1427
 msgid "lpadmin: Unable to create temporary file"
 msgstr ""
 
-#: systemv/lpadmin.c:388
+#: systemv/lpadmin.c:390
 msgid ""
 "lpadmin: Unable to delete option:\n"
 "         You must specify a printer name first."
 msgstr ""
 
-#: systemv/lpadmin.c:1324
+#: systemv/lpadmin.c:1419
+#, c-format
+msgid "lpadmin: Unable to open PPD \"%s\": %s on line %d."
+msgstr ""
+
+#: systemv/lpadmin.c:1439
 #, c-format
 msgid "lpadmin: Unable to open PPD file \"%s\" - %s"
 msgstr ""
 
-#: systemv/lpadmin.c:334
+#: systemv/lpadmin.c:337
 msgid ""
 "lpadmin: Unable to remove a printer from the class:\n"
 "         You must specify a printer name first."
 msgstr ""
 
-#: systemv/lpadmin.c:642
+#: systemv/lpadmin.c:651
 msgid ""
 "lpadmin: Unable to set the printer options:\n"
 "         You must specify a printer name first."
 msgstr ""
 
-#: systemv/lpadmin.c:460
+#: systemv/lpadmin.c:462
 #, c-format
 msgid "lpadmin: Unknown allow/deny option \"%s\"."
 msgstr ""
 
-#: systemv/lpadmin.c:615
+#: systemv/lpadmin.c:616
 #, c-format
 msgid "lpadmin: Unknown argument \"%s\"."
 msgstr ""
 
-#: systemv/lpadmin.c:610
+#: systemv/lpadmin.c:611
 #, c-format
 msgid "lpadmin: Unknown option \"%c\"."
 msgstr ""
 
-#: systemv/lpadmin.c:566
+#: systemv/lpadmin.c:567
 msgid "lpadmin: Warning - content type list ignored."
 msgstr ""
 
@@ -6793,16 +6827,16 @@ msgstr ""
 msgid "no system default destination"
 msgstr ""
 
-#: scheduler/ipp.c:5548
+#: scheduler/ipp.c:5553
 msgid "notify-events not specified."
 msgstr ""
 
-#: scheduler/ipp.c:2025 scheduler/ipp.c:5453
+#: scheduler/ipp.c:2003 scheduler/ipp.c:5458
 #, c-format
 msgid "notify-recipient-uri URI \"%s\" is already used."
 msgstr ""
 
-#: scheduler/ipp.c:2015 scheduler/ipp.c:5443
+#: scheduler/ipp.c:1993 scheduler/ipp.c:5448
 #, c-format
 msgid "notify-recipient-uri URI \"%s\" uses unknown scheme."
 msgstr ""
@@ -6811,12 +6845,12 @@ msgstr ""
 msgid "pending"
 msgstr ""
 
-#: ppdc/ppdc.cxx:108 ppdc/ppdpo.cxx:93
+#: ppdc/ppdc.cxx:108 ppdc/ppdpo.cxx:87
 #, c-format
 msgid "ppdc: Adding include directory \"%s\"."
 msgstr ""
 
-#: ppdc/ppdpo.cxx:134
+#: ppdc/ppdpo.cxx:130
 #, c-format
 msgid "ppdc: Adding/updating UI text from %s."
 msgstr ""
@@ -7106,7 +7140,7 @@ msgstr ""
 msgid "ppdc: Invalid option type \"%s\" on line %d of %s."
 msgstr ""
 
-#: ppdc/ppdc.cxx:246 ppdc/ppdpo.cxx:123
+#: ppdc/ppdc.cxx:246 ppdc/ppdpo.cxx:117
 #, c-format
 msgid "ppdc: Loading driver information file \"%s\"."
 msgstr ""
index 33e9891aed0d800ca7af686ad121780b424ab66b..65bf6e0a515c84d190ffbd92369765bb93a4bb51 100644 (file)
 // TRANSLATORS: Message is "subject: error"
 "%s: %s" = "%s: %s";
 "%s: %s failed: %s" = "%s: %s failed: %s";
+"%s: Bad printer URI \"%s\"." = "%s: Bad printer URI \"%s\".";
 "%s: Bad version %s for \"-V\"." = "%s: Bad version %s for \"-V\".";
 "%s: Don't know what to do." = "%s: Don't know what to do.";
 "%s: Error - %s environment variable names non-existent destination \"%s\"." = "%s: Error - %s environment variable names non-existent destination \"%s\".";
 "%s: No filter to convert from %s/%s to %s/%s." = "%s: No filter to convert from %s/%s to %s/%s.";
 "%s: Operation failed: %s" = "%s: Operation failed: %s";
 "%s: Sorry, no encryption support." = "%s: Sorry, no encryption support.";
+"%s: Unable to connect to \"%s:%d\": %s" = "%s: Unable to connect to \"%s:%d\": %s";
 "%s: Unable to connect to server." = "%s: Unable to connect to server.";
 "%s: Unable to contact server." = "%s: Unable to contact server.";
+"%s: Unable to create PPD file: %s" = "%s: Unable to create PPD file: %s";
 "%s: Unable to determine MIME type of \"%s\"." = "%s: Unable to determine MIME type of \"%s\".";
 "%s: Unable to open \"%s\": %s" = "%s: Unable to open \"%s\": %s";
 "%s: Unable to open %s: %s" = "%s: Unable to open %s: %s";
 "%s: Unable to open PPD file: %s on line %d." = "%s: Unable to open PPD file: %s on line %d.";
 "%s: Unable to read MIME database from \"%s\" or \"%s\"." = "%s: Unable to read MIME database from \"%s\" or \"%s\".";
+"%s: Unable to resolve \"%s\"." = "%s: Unable to resolve \"%s\".";
 "%s: Unknown destination \"%s\"." = "%s: Unknown destination \"%s\".";
 "%s: Unknown destination MIME type %s/%s." = "%s: Unknown destination MIME type %s/%s.";
 "%s: Unknown option \"%c\"." = "%s: Unknown option \"%c\".";
 "Environment Variables:" = "Environment Variables:";
 "Epson" = "Epson";
 "Error Policy" = "Error Policy";
+"Error reading raster data." = "Error reading raster data.";
 "Error sending raster data." = "Error sending raster data.";
 "Error: need hostname after \"-h\" option." = "Error: need hostname after \"-h\" option.";
 "Every 10 Labels" = "Every 10 Labels";
 "Tear-Off Adjust Position" = "Tear-Off Adjust Position";
 "The \"%s\" attribute is required for print jobs." = "The \"%s\" attribute is required for print jobs.";
 "The %s attribute cannot be provided with job-ids." = "The %s attribute cannot be provided with job-ids.";
-"The '%s' Job Description attribute cannot be supplied in a job creation request." = "The '%s' Job Description attribute cannot be supplied in a job creation request.";
+"The '%s' Job Status attribute cannot be supplied in a job creation request." = "The '%s' Job Status attribute cannot be supplied in a job creation request.";
 "The '%s' operation attribute cannot be supplied in a Create-Job request." = "The '%s' operation attribute cannot be supplied in a Create-Job request.";
 "The PPD file \"%s\" could not be found." = "The PPD file \"%s\" could not be found.";
 "The PPD file \"%s\" could not be opened: %s" = "The PPD file \"%s\" could not be opened: %s";
 "Unable to open raster file" = "Unable to open raster file";
 "Unable to print test page" = "Unable to print test page";
 "Unable to read print data." = "Unable to read print data.";
+"Unable to rename job document file." = "Unable to rename job document file.";
 "Unable to resolve printer-uri." = "Unable to resolve printer-uri.";
 "Unable to run \"%s\": %s" = "Unable to run \"%s\": %s";
 "Unable to see in file" = "Unable to see in file";
 "lpadmin: Unable to connect to server: %s" = "lpadmin: Unable to connect to server: %s";
 "lpadmin: Unable to create temporary file" = "lpadmin: Unable to create temporary file";
 "lpadmin: Unable to delete option:\n         You must specify a printer name first." = "lpadmin: Unable to delete option:\n         You must specify a printer name first.";
+"lpadmin: Unable to open PPD \"%s\": %s on line %d." = "lpadmin: Unable to open PPD \"%s\": %s on line %d.";
 "lpadmin: Unable to open PPD file \"%s\" - %s" = "lpadmin: Unable to open PPD file \"%s\" - %s";
 "lpadmin: Unable to remove a printer from the class:\n         You must specify a printer name first." = "lpadmin: Unable to remove a printer from the class:\n         You must specify a printer name first.";
 "lpadmin: Unable to set the printer options:\n         You must specify a printer name first." = "lpadmin: Unable to set the printer options:\n         You must specify a printer name first.";
index 9c6985f289b8d2fd295d7993cf19f5ffd3035e7c..c0a27b8c0e1ca0d48689a4292325886ca1f719cb 100644 (file)
@@ -32,7 +32,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 1.4.6\n"
 "Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2014-08-29 22:25-0400\n"
+"POT-Creation-Date: 2015-06-08 17:14-0400\n"
 "PO-Revision-Date: 2012-09-29 11:21+0200\n"
 "Last-Translator: Àngel Mompó <mecatxis@gmail.com>\n"
 "Language-Team: Catalan <ca@dodds.net>\n"
@@ -1637,6 +1637,10 @@ msgstr "%s: %s"
 msgid "%s: %s failed: %s"
 msgstr "%s: %s ha fallat: %s"
 
+#, c-format
+msgid "%s: Bad printer URI \"%s\"."
+msgstr ""
+
 #, c-format
 msgid "%s: Bad version %s for \"-V\"."
 msgstr ""
@@ -1840,6 +1844,10 @@ msgstr "%s: ha fallat l'operació: %s"
 msgid "%s: Sorry, no encryption support."
 msgstr "%s: ho sento, no està compilada la compatibilitat pel xifrat."
 
+#, c-format
+msgid "%s: Unable to connect to \"%s:%d\": %s"
+msgstr ""
+
 #, c-format
 msgid "%s: Unable to connect to server."
 msgstr "%s: no es pot connectar al servidor."
@@ -1848,6 +1856,10 @@ msgstr "%s: no es pot connectar al servidor."
 msgid "%s: Unable to contact server."
 msgstr "%s: no es pot contactar amb el servidor."
 
+#, c-format
+msgid "%s: Unable to create PPD file: %s"
+msgstr ""
+
 #, c-format
 msgid "%s: Unable to determine MIME type of \"%s\"."
 msgstr "%s: no es pot determinar el tips de MIME de «%s»."
@@ -1868,6 +1880,10 @@ msgstr "%s: no es pot obrir el fitxer PPD: %s a la línia %d."
 msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"."
 msgstr "%s: no es pot llegir la base de dades MIME de «%s» o «%s»."
 
+#, c-format
+msgid "%s: Unable to resolve \"%s\"."
+msgstr ""
+
 #, c-format
 msgid "%s: Unknown destination \"%s\"."
 msgstr "%s: el destí «%s» és desconegut."
@@ -3227,6 +3243,9 @@ msgstr "Epson"
 msgid "Error Policy"
 msgstr "Normes d'error"
 
+msgid "Error reading raster data."
+msgstr ""
+
 msgid "Error sending raster data."
 msgstr "S'ha produït un error quan s'enviaven les dades de la trama."
 
@@ -4277,8 +4296,7 @@ msgstr "No es pot fer servir l'atribut %s amb les job-ids."
 
 #, c-format
 msgid ""
-"The '%s' Job Description attribute cannot be supplied in a job creation "
-"request."
+"The '%s' Job Status attribute cannot be supplied in a job creation request."
 msgstr ""
 
 #, c-format
@@ -4773,6 +4791,9 @@ msgstr "No es pot imprimir la pàgina de prova"
 msgid "Unable to read print data."
 msgstr "No es poden llegir les dades d'impressió."
 
+msgid "Unable to rename job document file."
+msgstr ""
+
 msgid "Unable to resolve printer-uri."
 msgstr ""
 
@@ -5384,6 +5405,10 @@ msgstr ""
 "lpadmin: no s'ha pogut esborrar l'opció:\n"
 "         Heu d'especificar primer un nom d'impressora."
 
+#, c-format
+msgid "lpadmin: Unable to open PPD \"%s\": %s on line %d."
+msgstr ""
+
 #, c-format
 msgid "lpadmin: Unable to open PPD file \"%s\" - %s"
 msgstr "lpadmin: no s'ha pogut obrir el fitxer PPD «%s» - %s"
index 307c15fa842b2b48684ec1ab58082b599c566ad0..94c752d88651baf39bc11f5cebfbaa9bef0aa02a 100644 (file)
@@ -29,7 +29,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 1.6\n"
 "Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2014-08-29 22:25-0400\n"
+"POT-Creation-Date: 2015-06-08 17:14-0400\n"
 "PO-Revision-Date: 2012-09-14 10:26+0100\n"
 "Last-Translator: Jan Bartos <jan.bartos@madeta.cz>\n"
 "Language-Team: Czech\n"
@@ -1459,6 +1459,10 @@ msgstr ""
 msgid "%s: %s failed: %s"
 msgstr ""
 
+#, c-format
+msgid "%s: Bad printer URI \"%s\"."
+msgstr ""
+
 #, c-format
 msgid "%s: Bad version %s for \"-V\"."
 msgstr ""
@@ -1654,6 +1658,10 @@ msgstr ""
 msgid "%s: Sorry, no encryption support."
 msgstr ""
 
+#, c-format
+msgid "%s: Unable to connect to \"%s:%d\": %s"
+msgstr ""
+
 #, c-format
 msgid "%s: Unable to connect to server."
 msgstr ""
@@ -1662,6 +1670,10 @@ msgstr ""
 msgid "%s: Unable to contact server."
 msgstr ""
 
+#, c-format
+msgid "%s: Unable to create PPD file: %s"
+msgstr ""
+
 #, c-format
 msgid "%s: Unable to determine MIME type of \"%s\"."
 msgstr ""
@@ -1682,6 +1694,10 @@ msgstr ""
 msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"."
 msgstr ""
 
+#, c-format
+msgid "%s: Unable to resolve \"%s\"."
+msgstr ""
+
 #, c-format
 msgid "%s: Unknown destination \"%s\"."
 msgstr ""
@@ -3024,6 +3040,9 @@ msgstr "Epson"
 msgid "Error Policy"
 msgstr "Chování při chybě"
 
+msgid "Error reading raster data."
+msgstr ""
+
 msgid "Error sending raster data."
 msgstr ""
 
@@ -4063,8 +4082,7 @@ msgstr ""
 
 #, c-format
 msgid ""
-"The '%s' Job Description attribute cannot be supplied in a job creation "
-"request."
+"The '%s' Job Status attribute cannot be supplied in a job creation request."
 msgstr ""
 
 #, c-format
@@ -4522,6 +4540,9 @@ msgstr "Nelze vytisknout zkušební stránku"
 msgid "Unable to read print data."
 msgstr ""
 
+msgid "Unable to rename job document file."
+msgstr ""
+
 msgid "Unable to resolve printer-uri."
 msgstr ""
 
@@ -5108,6 +5129,10 @@ msgid ""
 "         You must specify a printer name first."
 msgstr ""
 
+#, c-format
+msgid "lpadmin: Unable to open PPD \"%s\": %s on line %d."
+msgstr ""
+
 #, c-format
 msgid "lpadmin: Unable to open PPD file \"%s\" - %s"
 msgstr ""
index be9e4282763ab78b61745a74e84d291d9c6a6519..93dff404e52ba71ef06bde685863ff1e7370cedc 100644 (file)
@@ -29,7 +29,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 2.0\n"
 "Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2015-05-09 22:25+0100\n"
+"POT-Creation-Date: 2015-06-08 17:14-0400\n"
 "PO-Revision-Date: 2015-05-09 22:25+0100\n"
 "Last-Translator: Joachim Schwender <joachim.schwender@web.de>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -57,7 +57,7 @@ msgstr "\tNach einem Fehler: fortfahren"
 
 #, c-format
 msgid "\tAlerts: %s"
-msgstr "\Alarme: %s"
+msgstr "\tAlarme: %s"
 
 msgid "\tBanner required"
 msgstr "\tBanner erforderlich"
@@ -807,7 +807,9 @@ msgid "  --[no-]share-printers   Turn printer sharing on/off."
 msgstr "  --[no-]share-printers   Druckerfreigabe ein/aus."
 
 msgid "  --[no-]user-cancel-any  Allow/prevent users to cancel any job."
-msgstr "  --[no-]user-cancel-any  Erlaube/sperre Benutzern das abbrechen eines Druckauftrags."
+msgstr ""
+"  --[no-]user-cancel-any  Erlaube/sperre Benutzern das abbrechen eines "
+"Druckauftrags."
 
 msgid "  --cr                    End lines with CR (Mac OS 9)."
 msgstr "  --cr                    Zeilenenden mit CR (OS 9)"
@@ -816,7 +818,8 @@ msgid "  --crlf                  End lines with CR + LF (Windows)."
 msgstr "  --crlf                  Zeilenenden mit CR+LF (Windows)"
 
 msgid "  --domain regex          Match domain to regular expression."
-msgstr "  --domain regex          Prüfe auf Übereinstimmung mit Regulärem Ausdruck"
+msgstr ""
+"  --domain regex          Prüfe auf Übereinstimmung mit Regulärem Ausdruck"
 
 msgid ""
 "  --exec utility [argument ...] ;\n"
@@ -833,7 +836,9 @@ msgid "  --help                  Show this help."
 msgstr "  --help                  Zeige diese Hilfe."
 
 msgid "  --host regex            Match hostname to regular expression."
-msgstr "  --host regex            Prüfe den Hostnamen auf Übereinstimmung mit Regulärem Audruck"
+msgstr ""
+"  --host regex            Prüfe den Hostnamen auf Übereinstimmung mit "
+"Regulärem Audruck"
 
 msgid "  --lf                    End lines with LF (UNIX/Linux/OS X)."
 msgstr "  --lf                    Zeilenenden mit LF (UNIX/Linux/OS X)"
@@ -918,7 +923,8 @@ msgstr "  -E                      Teste mit HTTP Upgrade auf TLS."
 msgid ""
 "  -F                      Run in the foreground but detach from console."
 msgstr ""
-"  -F                      Laufe im Vordergrund aber abgetrennt von der Konsole."
+"  -F                      Laufe im Vordergrund aber abgetrennt von der "
+"Konsole."
 
 msgid "  -H samba-server         Use the named SAMBA server."
 msgstr "  -H samba-server         Benutze den SAMBA Server."
@@ -953,10 +959,14 @@ msgid "  -S                      Test with SSL encryption."
 msgstr "  -S                      Teste mit SSL Verschlüsselung."
 
 msgid "  -T seconds              Set the browse timeout in seconds."
-msgstr "  -T seconds              Setze die Zeitüberschreitung für das Browsen in Sekunden."
+msgstr ""
+"  -T seconds              Setze die Zeitüberschreitung für das Browsen in "
+"Sekunden."
 
 msgid "  -T seconds              Set the receive/send timeout in seconds."
-msgstr "  -T seconds              Setze die Zeitüberschreitung für das Senden/Empfangen in Sekunden."
+msgstr ""
+"  -T seconds              Setze die Zeitüberschreitung für das Senden/"
+"Empfangen in Sekunden."
 
 msgid "  -U username             Specify username."
 msgstr "  -U username             Gebe den Benutzernamen an."
@@ -985,7 +995,8 @@ msgid "  -c catalog.po           Load the specified message catalog."
 msgstr ""
 
 msgid "  -c cups-files.conf      Set cups-files.conf file to use."
-msgstr "  -c cups-files.conf      Setze die zu benutzende Datei cups-files.conf"
+msgstr ""
+"  -c cups-files.conf      Setze die zu benutzende Datei cups-files.conf"
 
 msgid "  -c cupsd.conf           Set cupsd.conf file to use."
 msgstr "  -c cups.conf            Setze die zu benutzende Datei cups.conf"
@@ -1134,7 +1145,8 @@ msgid ""
 msgstr ""
 
 msgid "  -z                      Compress PPD files using GNU zip."
-msgstr "  -z                      Komprimiere PPD Datei unter Verwendung von GNU zip."
+msgstr ""
+"  -z                      Komprimiere PPD Datei unter Verwendung von GNU zip."
 
 msgid "  IPPFIND_SERVICE_DOMAIN  Domain name"
 msgstr ""
@@ -1460,6 +1472,10 @@ msgstr ""
 msgid "%s: %s failed: %s"
 msgstr ""
 
+#, c-format
+msgid "%s: Bad printer URI \"%s\"."
+msgstr ""
+
 #, c-format
 msgid "%s: Bad version %s for \"-V\"."
 msgstr ""
@@ -1655,6 +1671,10 @@ msgstr ""
 msgid "%s: Sorry, no encryption support."
 msgstr ""
 
+#, c-format
+msgid "%s: Unable to connect to \"%s:%d\": %s"
+msgstr ""
+
 #, c-format
 msgid "%s: Unable to connect to server."
 msgstr ""
@@ -1663,6 +1683,10 @@ msgstr ""
 msgid "%s: Unable to contact server."
 msgstr ""
 
+#, c-format
+msgid "%s: Unable to create PPD file: %s"
+msgstr ""
+
 #, c-format
 msgid "%s: Unable to determine MIME type of \"%s\"."
 msgstr ""
@@ -1683,6 +1707,10 @@ msgstr ""
 msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"."
 msgstr ""
 
+#, c-format
+msgid "%s: Unable to resolve \"%s\"."
+msgstr ""
+
 #, c-format
 msgid "%s: Unknown destination \"%s\"."
 msgstr "%s: Unbekanntes Druckziel \"%s\"."
@@ -1845,6 +1873,7 @@ msgstr "1"
 
 msgid "1 inch/sec."
 msgstr "1 inch/s"
+
 # Die Verwendung des x ist nur ersatzweise erlaubt, typografisch korrekt und in UTF-8 auch möglich ist ×
 # Keine Leerzeichen zwischen Zahl und ×!
 # Die Verwendung von " für die Einheit Inch ist nicht zulässig (ISO 80000).
@@ -2109,7 +2138,7 @@ msgid "3.25x5.00\""
 msgstr "3,25×5,00 inch"
 
 msgid "3.25x5.50\""
-msgstr "3,25×5,50 inch
+msgstr "3,25×5,50 inch"
 
 msgid "3.25x5.83\""
 msgstr "3,25×5,83 inch"
@@ -3033,6 +3062,9 @@ msgstr "Epson"
 msgid "Error Policy"
 msgstr "Fehlerbehandlung"
 
+msgid "Error reading raster data."
+msgstr ""
+
 msgid "Error sending raster data."
 msgstr "Fehler beim Senden von Rasterdaten."
 
@@ -3594,7 +3626,8 @@ msgid "No destinations added."
 msgstr "Keine Druckziele hinzugefügt."
 
 msgid "No device URI found in argv[0] or in DEVICE_URI environment variable."
-msgstr "Keine Geräte-URI in argv[0] oder der Umgebungsvariablen DEVICE_URI gefunden."
+msgstr ""
+"Keine Geräte-URI in argv[0] oder der Umgebungsvariablen DEVICE_URI gefunden."
 
 msgid "No error-index"
 msgstr "Kein Fehlerindex"
@@ -3684,7 +3717,8 @@ msgid ""
 "Note: this program only validates the DSC comments, not the PostScript "
 "itself."
 msgstr ""
-"Hinweis: dieses Programme validiert nur die DSC Kommentare, nicht PostScript selber"
+"Hinweis: dieses Programme validiert nur die DSC Kommentare, nicht PostScript "
+"selber"
 
 msgid "OK"
 msgstr "OK"
@@ -4074,8 +4108,7 @@ msgstr ""
 
 #, c-format
 msgid ""
-"The '%s' Job Description attribute cannot be supplied in a job creation "
-"request."
+"The '%s' Job Status attribute cannot be supplied in a job creation request."
 msgstr ""
 
 #, c-format
@@ -4229,8 +4262,8 @@ msgid ""
 "The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to "
 "enable it."
 msgstr ""
-"Die Web-Schnittstelle ist derzeit abgeschaltet. Das Einschalten kann mit"
-"dem Befehl \"cupsctl WebInterface=yes\" erfolgen."
+"Die Web-Schnittstelle ist derzeit abgeschaltet. Das Einschalten kann mitdem "
+"Befehl \"cupsctl WebInterface=yes\" erfolgen."
 
 #, c-format
 msgid "The which-jobs value \"%s\" is not supported."
@@ -4540,6 +4573,9 @@ msgstr "Die Testseite kann nicht gedruckt werden"
 msgid "Unable to read print data."
 msgstr ""
 
+msgid "Unable to rename job document file."
+msgstr ""
+
 msgid "Unable to resolve printer-uri."
 msgstr ""
 
@@ -5051,7 +5087,8 @@ msgid "lpadmin: Expected PPD after \"-P\" option."
 msgstr "lpadmin: Nach der \"-P\" Option PPD erwartet."
 
 msgid "lpadmin: Expected allow/deny:userlist after \"-u\" option."
-msgstr "lpadmin: Nach der \"-u\" Option wird eine allow/deny:userlist erwartet."
+msgstr ""
+"lpadmin: Nach der \"-u\" Option wird eine allow/deny:userlist erwartet."
 
 msgid "lpadmin: Expected class after \"-r\" option."
 msgstr ""
@@ -5128,6 +5165,10 @@ msgid ""
 "         You must specify a printer name first."
 msgstr ""
 
+#, c-format
+msgid "lpadmin: Unable to open PPD \"%s\": %s on line %d."
+msgstr ""
+
 #, c-format
 msgid "lpadmin: Unable to open PPD file \"%s\" - %s"
 msgstr "lpadmin: Kann PPD Datei \"%s\" - %s nicht öffnen"
index 00a63b8a4b7f5e3705732af95742d71810b788e1..966b07fff99339b4098a34882a3222f7a36b3b29 100644 (file)
@@ -16,7 +16,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 1.6\n"
 "Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2014-08-29 22:25-0400\n"
+"POT-Creation-Date: 2015-06-08 17:14-0400\n"
 "PO-Revision-Date: 2014-09-23 23:45+0100\n"
 "Last-Translator: Juan Pablo González Riopedre <jpgriopedre@yahoo.es>\n"
 "Language-Team: Spanish\n"
@@ -25,160 +25,122 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: systemv/lpstat.c:1867 systemv/lpstat.c:1990
 msgid "\t\t(all)"
 msgstr "\t\t(todos)"
 
-#: systemv/lpstat.c:1870 systemv/lpstat.c:1873 systemv/lpstat.c:1993
-#: systemv/lpstat.c:1996
 msgid "\t\t(none)"
 msgstr "\t\t(ninguno)"
 
-#: berkeley/lpc.c:426
 #, c-format
 msgid "\t%d entries"
 msgstr "\t%d entradas"
 
-#: systemv/lpstat.c:783 systemv/lpstat.c:799
 #, c-format
 msgid "\t%s"
 msgstr "\t%s"
 
-#: systemv/lpstat.c:1848 systemv/lpstat.c:1971
 msgid "\tAfter fault: continue"
 msgstr "\tTras fallo: continuar"
 
-#: systemv/lpstat.c:1471 systemv/lpstat.c:1817 systemv/lpstat.c:1941
 #, c-format
 msgid "\tAlerts: %s"
 msgstr "\tAlertas: %s"
 
-#: systemv/lpstat.c:1871 systemv/lpstat.c:1994
 msgid "\tBanner required"
 msgstr "\tSe necesita un rótulo"
 
-#: systemv/lpstat.c:1872 systemv/lpstat.c:1995
 msgid "\tCharset sets:"
 msgstr "\tJuegos de caracteres:"
 
-#: systemv/lpstat.c:1836 systemv/lpstat.c:1959
 msgid "\tConnection: direct"
 msgstr "\tConexión: directa"
 
-#: systemv/lpstat.c:1827 systemv/lpstat.c:1951
 msgid "\tConnection: remote"
 msgstr "\tConexión: remota"
 
-#: systemv/lpstat.c:1793 systemv/lpstat.c:1917
 msgid "\tContent types: any"
 msgstr "\tTipos de contenido: cualesquiera"
 
-#: systemv/lpstat.c:1875 systemv/lpstat.c:1998
 msgid "\tDefault page size:"
 msgstr "\tTamaño de página predeterminado:"
 
-#: systemv/lpstat.c:1874 systemv/lpstat.c:1997
 msgid "\tDefault pitch:"
 msgstr "\tPaso predeterminado:"
 
-#: systemv/lpstat.c:1876 systemv/lpstat.c:1999
 msgid "\tDefault port settings:"
 msgstr "\tAjustes del puerto predeterminados:"
 
-#: systemv/lpstat.c:1799 systemv/lpstat.c:1923
 #, c-format
 msgid "\tDescription: %s"
 msgstr "\tDescripción: %s"
 
-#: systemv/lpstat.c:1792 systemv/lpstat.c:1916
 msgid "\tForm mounted:"
 msgstr "\tFormulario montado:"
 
-#: systemv/lpstat.c:1869 systemv/lpstat.c:1992
 msgid "\tForms allowed:"
 msgstr "\tFormularios permitidos:"
 
-#: systemv/lpstat.c:1831 systemv/lpstat.c:1955
 #, c-format
 msgid "\tInterface: %s.ppd"
 msgstr "\tInterfaz: %s.ppd"
 
-#: systemv/lpstat.c:1840 systemv/lpstat.c:1963
 #, c-format
 msgid "\tInterface: %s/interfaces/%s"
 msgstr "\tInterfaz: %s/interfaces/%s"
 
-#: systemv/lpstat.c:1844 systemv/lpstat.c:1967
 #, c-format
 msgid "\tInterface: %s/ppd/%s.ppd"
 msgstr "\tInterfaz: %s/ppd/%s.ppd"
 
-#: systemv/lpstat.c:1822 systemv/lpstat.c:1946
 #, c-format
 msgid "\tLocation: %s"
 msgstr "\tUbicación: %s"
 
-#: systemv/lpstat.c:1847 systemv/lpstat.c:1970
 msgid "\tOn fault: no alert"
 msgstr "\tEn fallo: no alertar"
 
-#: systemv/lpstat.c:1794 systemv/lpstat.c:1918
 msgid "\tPrinter types: unknown"
 msgstr "\tTipos de impresora: desconocidos"
 
-#: systemv/lpstat.c:1454
 #, c-format
 msgid "\tStatus: %s"
 msgstr "\tEstado: %s"
 
-#: systemv/lpstat.c:1852 systemv/lpstat.c:1866 systemv/lpstat.c:1975
-#: systemv/lpstat.c:1989
 msgid "\tUsers allowed:"
 msgstr "\tUsuarios permitidos:"
 
-#: systemv/lpstat.c:1859 systemv/lpstat.c:1982
 msgid "\tUsers denied:"
 msgstr "\tUsuarios denegados:"
 
-#: berkeley/lpc.c:428
 msgid "\tdaemon present"
 msgstr "\tdemonio presente"
 
-#: berkeley/lpc.c:424
 msgid "\tno entries"
 msgstr "\tno hay entradas"
 
-#: berkeley/lpc.c:396 berkeley/lpc.c:408
 #, c-format
 msgid "\tprinter is on device '%s' speed -1"
 msgstr "\tla impresora está conectada a '%s' velocidad -1"
 
-#: berkeley/lpc.c:421
 msgid "\tprinting is disabled"
 msgstr "\tla impresión está desactivada"
 
-#: berkeley/lpc.c:419
 msgid "\tprinting is enabled"
 msgstr "\tla impresión está activada"
 
-#: systemv/lpstat.c:1474
 #, c-format
 msgid "\tqueued for %s"
 msgstr "\ten cola para %s"
 
-#: berkeley/lpc.c:416
 msgid "\tqueuing is disabled"
 msgstr "\tla cola está desactivada"
 
-#: berkeley/lpc.c:414
 msgid "\tqueuing is enabled"
 msgstr "\tla cola está activada"
 
-#: systemv/lpstat.c:1785 systemv/lpstat.c:1909
 msgid "\treason unknown"
 msgstr "\trazón desconocida"
 
-#: systemv/cupstestppd.c:454
 msgid ""
 "\n"
 "    DETAILED CONFORMANCE TEST RESULTS"
@@ -186,135 +148,103 @@ msgstr ""
 "\n"
 "    RESULTADOS DETALLADOS DE LA PRUEBA DE CONFORMIDAD"
 
-#: systemv/cupstestppd.c:3820
 msgid "                          Ignore specific warnings."
 msgstr "                          Ignorar advertencias (warnings) específicas."
 
-#: systemv/cupstestppd.c:3824
 msgid "                          Issue warnings instead of errors."
 msgstr ""
 "                          Emitir advertencias (warnings) en vez de errores."
 
-#: systemv/cupstestppd.c:410 systemv/cupstestppd.c:415
 msgid "                REF: Page 15, section 3.1."
 msgstr "                REF: Página 15, sección 3.1."
 
-#: systemv/cupstestppd.c:405
 msgid "                REF: Page 15, section 3.2."
 msgstr "                REF: Página 15, sección 3.2."
 
-#: systemv/cupstestppd.c:425
 msgid "                REF: Page 19, section 3.3."
 msgstr "                REF: Página 19, sección 3.3."
 
-#: systemv/cupstestppd.c:378
 msgid "                REF: Page 20, section 3.4."
 msgstr "                REF: Página 20, sección 3.4."
 
-#: systemv/cupstestppd.c:430
 msgid "                REF: Page 27, section 3.5."
 msgstr "                REF: Página 27, sección 3.5."
 
-#: systemv/cupstestppd.c:373
 msgid "                REF: Page 42, section 5.2."
 msgstr "                REF: Página 42, sección 5.2."
 
-#: systemv/cupstestppd.c:420
 msgid "                REF: Pages 16-17, section 3.2."
 msgstr "                REF: Páginas 16-17, sección 3.2."
 
-#: systemv/cupstestppd.c:390
 msgid "                REF: Pages 42-45, section 5.2."
 msgstr "                REF: Páginas 42-45, sección 5.2."
 
-#: systemv/cupstestppd.c:384
 msgid "                REF: Pages 45-46, section 5.2."
 msgstr "                REF: Páginas 45-46, sección 5.2."
 
-#: systemv/cupstestppd.c:395
 msgid "                REF: Pages 48-49, section 5.2."
 msgstr "                REF: Páginas 48-49, sección 5.2."
 
-#: systemv/cupstestppd.c:400
 msgid "                REF: Pages 52-54, section 5.2."
 msgstr "                REF: Páginas 52-54, sección 5.2."
 
-#: berkeley/lpq.c:528
 #, c-format
 msgid "        %-39.39s %.0f bytes"
 msgstr "        %-39.39s %.0f bytes"
 
-#: systemv/cupstestppd.c:589
 #, c-format
 msgid "        PASS    Default%s"
 msgstr "        PASA    Default%s"
 
-#: systemv/cupstestppd.c:524
 msgid "        PASS    DefaultImageableArea"
 msgstr "        PASA    DefaultImageableArea"
 
-#: systemv/cupstestppd.c:558
 msgid "        PASS    DefaultPaperDimension"
 msgstr "        PASA    DefaultPaperDimension"
 
-#: systemv/cupstestppd.c:631
 msgid "        PASS    FileVersion"
 msgstr "        PASA    FileVersion"
 
-#: systemv/cupstestppd.c:675
 msgid "        PASS    FormatVersion"
 msgstr "        PASA    FormatVersion"
 
-#: systemv/cupstestppd.c:695
 msgid "        PASS    LanguageEncoding"
 msgstr "        PASA    LanguageEncoding"
 
-#: systemv/cupstestppd.c:715
 msgid "        PASS    LanguageVersion"
 msgstr "        PASA    LanguageVersion"
 
-#: systemv/cupstestppd.c:769
 msgid "        PASS    Manufacturer"
 msgstr "        PASA    Manufacturer"
 
-#: systemv/cupstestppd.c:809
 msgid "        PASS    ModelName"
 msgstr "        PASA    ModelName"
 
-#: systemv/cupstestppd.c:829
 msgid "        PASS    NickName"
 msgstr "        PASA    NickName"
 
-#: systemv/cupstestppd.c:889
 msgid "        PASS    PCFileName"
 msgstr "        PASA    PCFileName"
 
-#: systemv/cupstestppd.c:964
 msgid "        PASS    PSVersion"
 msgstr "        PASA    PSVersion"
 
-#: systemv/cupstestppd.c:869
 msgid "        PASS    PageRegion"
 msgstr "        PASA    PageRegion"
 
-#: systemv/cupstestppd.c:849
 msgid "        PASS    PageSize"
 msgstr "        PASA    PageSize"
 
-#: systemv/cupstestppd.c:924
 msgid "        PASS    Product"
 msgstr "        PASA    Product"
 
-#: systemv/cupstestppd.c:999
 msgid "        PASS    ShortNickName"
 msgstr "        PASA    ShortNickName"
 
-#: systemv/cupstestppd.c:1374
 #, c-format
 msgid "        WARN    %s has no corresponding options."
 msgstr "        ADVERTENCIA    %s tiene opciones que no corresponden."
 
-#: systemv/cupstestppd.c:1486
 #, c-format
 msgid ""
 "        WARN    %s shares a common prefix with %s\n"
@@ -323,7 +253,6 @@ msgstr ""
 "        ADVERTENCIA    %s comparte un prefijo común con %s\n"
 "                REF: Página 15, sección 3.2."
 
-#: systemv/cupstestppd.c:1345
 #, c-format
 msgid ""
 "        WARN    Duplex option keyword %s may not work as expected and should "
@@ -334,13 +263,11 @@ msgstr ""
 "como se espera y debería llamarse Duplex.\n"
 "                REF: Página 122, sección 5.17"
 
-#: systemv/cupstestppd.c:1744
 msgid "        WARN    File contains a mix of CR, LF, and CR LF line endings."
 msgstr ""
 "        ADVERTENCIA    El archivo contiene una mezcla de líneas acabadas en "
 "CR, LF y CR LF."
 
-#: systemv/cupstestppd.c:1390
 msgid ""
 "        WARN    LanguageEncoding required by PPD 4.3 spec.\n"
 "                REF: Pages 56-57, section 5.3."
@@ -349,12 +276,10 @@ msgstr ""
 "PPD 4.3.\n"
 "                REF: Páginas 56-57, sección 5.3."
 
-#: systemv/cupstestppd.c:1726
 #, c-format
 msgid "        WARN    Line %d only contains whitespace."
 msgstr "        ADVERTENCIA    La línea %d solo contiene espacios en blanco."
 
-#: systemv/cupstestppd.c:1398
 msgid ""
 "        WARN    Manufacturer required by PPD 4.3 spec.\n"
 "                REF: Pages 58-59, section 5.3."
@@ -363,7 +288,6 @@ msgstr ""
 "4.3.\n"
 "                REF: Páginas 58-59, sección 5.3."
 
-#: systemv/cupstestppd.c:1749
 msgid ""
 "        WARN    Non-Windows PPD files should use lines ending with only LF, "
 "not CR LF."
@@ -371,7 +295,6 @@ msgstr ""
 "        ADVERTENCIA    Los archivos PPD que no sean de Windows deben tener "
 "líneas que acaben sólo en LF, no en CR LF."
 
-#: systemv/cupstestppd.c:1382
 #, c-format
 msgid ""
 "        WARN    Obsolete PPD version %.1f.\n"
@@ -380,7 +303,6 @@ msgstr ""
 "        ADVERTENCIA    Versión de PPD %.1f anticuada.\n"
 "                REF: Página 42, sección 5.2."
 
-#: systemv/cupstestppd.c:1413
 msgid ""
 "        WARN    PCFileName longer than 8.3 in violation of PPD spec.\n"
 "                REF: Pages 61-62, section 5.3."
@@ -389,7 +311,6 @@ msgstr ""
 "especificación PPD.\n"
 "                REF: Páginas 61-62, sección 5.3."
 
-#: systemv/cupstestppd.c:1421
 msgid ""
 "        WARN    PCFileName should contain a unique filename.\n"
 "                REF: Pages 61-62, section 5.3."
@@ -397,7 +318,6 @@ msgstr ""
 "        ADVERTENCIA    PCFileName debe contener un único nombre de archivo.\n"
 "                REF: Páginas 61-62, sección 5.3."
 
-#: systemv/cupstestppd.c:1456
 msgid ""
 "        WARN    Protocols contains PJL but JCL attributes are not set.\n"
 "                REF: Pages 78-79, section 5.7."
@@ -406,7 +326,6 @@ msgstr ""
 "los atributos JCL.\n"
 "                REF: Páginas 78-79, sección 5.7."
 
-#: systemv/cupstestppd.c:1447
 msgid ""
 "        WARN    Protocols contains both PJL and BCP; expected TBCP.\n"
 "                REF: Pages 78-79, section 5.7."
@@ -415,7 +334,6 @@ msgstr ""
 "esperaba TBCP.\n"
 "                REF: Páginas 78-79, sección 5.7."
 
-#: systemv/cupstestppd.c:1430
 msgid ""
 "        WARN    ShortNickName required by PPD 4.3 spec.\n"
 "                REF: Pages 64-65, section 5.3."
@@ -424,19 +342,15 @@ msgstr ""
 "4.3.\n"
 "                REF: Páginas 64-65, sección 5.3."
 
-#: systemv/cupsaddsmb.c:282
 msgid "       cupsaddsmb [options] -a"
 msgstr "       cupsaddsmb [opciones] -a"
 
-#: systemv/cupstestdsc.c:427
 msgid "       cupstestdsc [options] -"
 msgstr "       cupstestdsc [opciones] -"
 
-#: systemv/cupstestppd.c:3815
 msgid "       program | cupstestppd [options] -"
 msgstr "       programa | cupstestppd [opciones] -"
 
-#: systemv/cupstestppd.c:3747
 #, c-format
 msgid ""
 "      %s  \"%s %s\" conflicts with \"%s %s\"\n"
@@ -445,17 +359,14 @@ msgstr ""
 "      %s  \"%s %s\" está en conflictocon \"%s %s\"\n"
 "                (restricción=\"%s %s %s %s\")."
 
-#: systemv/cupstestppd.c:2248
 #, c-format
 msgid "      %s  %s %s does not exist."
 msgstr "      %s  %s %s no existe."
 
-#: systemv/cupstestppd.c:3904
 #, c-format
 msgid "      %s  %s file \"%s\" has the wrong capitalization."
 msgstr "      %s  %s archivo \"%s\" tiene las mayúsculas equivocadas."
 
-#: systemv/cupstestppd.c:2318
 #, c-format
 msgid ""
 "      %s  Bad %s choice %s.\n"
@@ -464,102 +375,73 @@ msgstr ""
 "      %s  Preferencia %s incorrecta %s.\n"
 "                REF: Página 122, sección 5.17"
 
-#: systemv/cupstestppd.c:3507 systemv/cupstestppd.c:3556
-#: systemv/cupstestppd.c:3595
 #, c-format
 msgid "      %s  Bad UTF-8 \"%s\" translation string for option %s, choice %s."
 msgstr ""
 "      %s  Cadena de traducción UTF-8 \"%s\" incorrecta para opción %s, "
 "preferencia %s."
 
-#: systemv/cupstestppd.c:3461
 #, c-format
 msgid "      %s  Bad UTF-8 \"%s\" translation string for option %s."
 msgstr "      %s  Cadena de traducción UTF-8 \"%s\" incorrecta para opción %s."
 
-#: systemv/cupstestppd.c:2389
 #, c-format
 msgid "      %s  Bad cupsFilter value \"%s\"."
 msgstr "      %s  Valor cupsFilter \"%s\" incorrecto."
 
-#: systemv/cupstestppd.c:2475
 #, c-format
 msgid "      %s  Bad cupsFilter2 value \"%s\"."
 msgstr "      %s  Valor cupsFilter2 \"%s\" incorrecto."
 
-#: systemv/cupstestppd.c:2964
 #, c-format
 msgid "      %s  Bad cupsICCProfile %s."
 msgstr "      %s  cupsICCProfile %s incorrecto."
 
-#: systemv/cupstestppd.c:2571
 #, c-format
 msgid "      %s  Bad cupsPreFilter value \"%s\"."
 msgstr "      %s  Valor cupsPreFilter \"%s\" incorrecto."
 
-#: systemv/cupstestppd.c:1822
 #, c-format
 msgid "      %s  Bad cupsUIConstraints %s: \"%s\""
 msgstr "      %s  cupsUIConstraints %s: \"%s\" incorrecto"
 
-#: systemv/cupstestppd.c:3411
 #, c-format
 msgid "      %s  Bad language \"%s\"."
 msgstr "      %s  Idioma incorrecto \"%s\"."
 
-#: systemv/cupstestppd.c:2433 systemv/cupstestppd.c:2529
-#: systemv/cupstestppd.c:2615 systemv/cupstestppd.c:2673
-#: systemv/cupstestppd.c:2728 systemv/cupstestppd.c:2783
-#: systemv/cupstestppd.c:2838 systemv/cupstestppd.c:2891
-#: systemv/cupstestppd.c:3013
 #, c-format
 msgid "      %s  Bad permissions on %s file \"%s\"."
 msgstr "      %s  Permisos incorrectos en el archivo %s \"%s\"."
 
-#: systemv/cupstestppd.c:2373 systemv/cupstestppd.c:2459
-#: systemv/cupstestppd.c:2555 systemv/cupstestppd.c:2642
-#: systemv/cupstestppd.c:2697 systemv/cupstestppd.c:2752
-#: systemv/cupstestppd.c:2807 systemv/cupstestppd.c:2862
 #, c-format
 msgid "      %s  Bad spelling of %s - should be %s."
 msgstr "      %s  %s mal escrito - debería ser %s."
 
-#: systemv/cupstestppd.c:2907
 #, c-format
 msgid "      %s  Cannot provide both APScanAppPath and APScanAppBundleID."
 msgstr "      %s  No puede proporcionar APScanAppPath y APScanAppBundleID."
 
-#: systemv/cupstestppd.c:2205
 #, c-format
 msgid "      %s  Default choices conflicting."
 msgstr "      %s  Las preferencias predeterminadas están en conflicto."
 
-#: systemv/cupstestppd.c:1803
 #, c-format
 msgid "      %s  Empty cupsUIConstraints %s"
 msgstr "      %s  cupsUIConstraints vacío %s"
 
-#: systemv/cupstestppd.c:3539 systemv/cupstestppd.c:3579
 #, c-format
 msgid "      %s  Missing \"%s\" translation string for option %s, choice %s."
 msgstr ""
 "      %s  Falta cadena de traducción \"%s\" para opción %s, preferencia %s."
 
-#: systemv/cupstestppd.c:3447
 #, c-format
 msgid "      %s  Missing \"%s\" translation string for option %s."
 msgstr "      %s  Falta cadena de traducción \"%s\" para opción %s."
 
-#: systemv/cupstestppd.c:2418 systemv/cupstestppd.c:2514
-#: systemv/cupstestppd.c:2600 systemv/cupstestppd.c:2658
-#: systemv/cupstestppd.c:2713 systemv/cupstestppd.c:2768
-#: systemv/cupstestppd.c:2823 systemv/cupstestppd.c:2875
-#: systemv/cupstestppd.c:2998
 #, c-format
 msgid "      %s  Missing %s file \"%s\"."
 msgstr "      %s  Falta archivo %s \"%s\"."
 
-#: systemv/cupstestppd.c:3121
 #, c-format
 msgid ""
 "      %s  Missing REQUIRED PageRegion option.\n"
@@ -568,7 +450,6 @@ msgstr ""
 "      %s  Falta la opción NECESARIA PageRegion.\n"
 "                REF: Página 100, sección 5.14."
 
-#: systemv/cupstestppd.c:3106
 #, c-format
 msgid ""
 "      %s  Missing REQUIRED PageSize option.\n"
@@ -577,38 +458,31 @@ msgstr ""
 "      %s  Falta la opción NECESARIA PageSize.\n"
 "                REF: Página 99, sección 5.14."
 
-#: systemv/cupstestppd.c:2013 systemv/cupstestppd.c:2054
 #, c-format
 msgid "      %s  Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\"."
 msgstr ""
 "      %s  Falta la preferencia *%s %s en UIConstraint \"*%s %s *%s %s\"."
 
-#: systemv/cupstestppd.c:1908
 #, c-format
 msgid "      %s  Missing choice *%s %s in cupsUIConstraints %s: \"%s\""
 msgstr "      %s  Falta la preferencia *%s %s en cupsUIConstraints %s: \"%s\""
 
-#: systemv/cupstestppd.c:1840
 #, c-format
 msgid "      %s  Missing cupsUIResolver %s"
 msgstr "      %s  Falta cupsUIResolver %s"
 
-#: systemv/cupstestppd.c:1999 systemv/cupstestppd.c:2040
 #, c-format
 msgid "      %s  Missing option %s in UIConstraints \"*%s %s *%s %s\"."
 msgstr "      %s  Falta la opción %s en UIConstraints \"*%s %s *%s %s\"."
 
-#: systemv/cupstestppd.c:1892
 #, c-format
 msgid "      %s  Missing option %s in cupsUIConstraints %s: \"%s\""
 msgstr "      %s  Falta la opción %s en cupsUIConstraints %s: \"%s\""
 
-#: systemv/cupstestppd.c:3633
 #, c-format
 msgid "      %s  No base translation \"%s\" is included in file."
 msgstr "      %s  No hay traducción base \"%s\" incluida en el archivo."
 
-#: systemv/cupstestppd.c:2294
 #, c-format
 msgid ""
 "      %s  REQUIRED %s does not define choice None.\n"
@@ -617,44 +491,36 @@ msgstr ""
 "      %s  NECESARIA %s no define la opción None.\n"
 "                REF: Página 122, sección 5.17"
 
-#: systemv/cupstestppd.c:3180 systemv/cupstestppd.c:3194
 #, c-format
 msgid "      %s  Size \"%s\" defined for %s but not for %s."
 msgstr "      %s  Tamaño \"%s\" definido para %s pero no para %s."
 
-#: systemv/cupstestppd.c:3160
 #, c-format
 msgid "      %s  Size \"%s\" has unexpected dimensions (%gx%g)."
 msgstr "      %s  El tamaño \"%s\" tiene dimensiones inesperadas (%gx%g)."
 
-#: systemv/cupstestppd.c:3351
 #, c-format
 msgid "      %s  Size \"%s\" should be \"%s\"."
 msgstr "      %s  Tamaño \"%s\" debería ser \"%s\"."
 
-#: systemv/cupstestppd.c:3300
 #, c-format
 msgid "      %s  Size \"%s\" should be the Adobe standard name \"%s\"."
 msgstr ""
 "      %s  Tamaño \"%s\" debería ser el nombre estandar de Adobe \"%s\"."
 
-#: systemv/cupstestppd.c:3041
 #, c-format
 msgid "      %s  cupsICCProfile %s hash value collides with %s."
 msgstr "      %s  Valor hash de cupsICCProfile %s colisiona con %s."
 
-#: systemv/cupstestppd.c:1963
 #, c-format
 msgid "      %s  cupsUIResolver %s causes a loop."
 msgstr "      %s  cupsUIResolver %s genera un bucle."
 
-#: systemv/cupstestppd.c:1945
 #, c-format
 msgid ""
 "      %s  cupsUIResolver %s does not list at least two different options."
 msgstr "      %s  cupsUIResolver %s no lista al menos dos opciones diferentes."
 
-#: systemv/cupstestppd.c:1168
 #, c-format
 msgid ""
 "      **FAIL**  %s must be 1284DeviceID\n"
@@ -663,7 +529,6 @@ msgstr ""
 "      **FALLO**  %s debe ser 1284DeviceID\n"
 "                REF: Página 72, sección 5.5"
 
-#: systemv/cupstestppd.c:580
 #, c-format
 msgid ""
 "      **FAIL**  Bad Default%s %s\n"
@@ -672,7 +537,6 @@ msgstr ""
 "      **FALLO**  Default%s %s incorrecto\n"
 "                REF: Página 40, sección 4.5."
 
-#: systemv/cupstestppd.c:514
 #, c-format
 msgid ""
 "      **FAIL**  Bad DefaultImageableArea %s\n"
@@ -681,7 +545,6 @@ msgstr ""
 "      **FALLO**  DefaultImageableArea %s incorrecto\n"
 "                REF: Página 102, sección 5.15."
 
-#: systemv/cupstestppd.c:550
 #, c-format
 msgid ""
 "      **FAIL**  Bad DefaultPaperDimension %s\n"
@@ -690,7 +553,6 @@ msgstr ""
 "      **FALLO**  DefaultPaperDimension %s incorrecto\n"
 "                REF: Página 103, sección 5.15."
 
-#: systemv/cupstestppd.c:623
 #, c-format
 msgid ""
 "      **FAIL**  Bad FileVersion \"%s\"\n"
@@ -699,7 +561,6 @@ msgstr ""
 "      **FALLO**  FileVersion \"%s\" incorrecto\n"
 "                REF: Página 56, sección 5.3."
 
-#: systemv/cupstestppd.c:667
 #, c-format
 msgid ""
 "      **FAIL**  Bad FormatVersion \"%s\"\n"
@@ -708,7 +569,6 @@ msgstr ""
 "      **FALLO**  FormatVersion \"%s\" incorrecto\n"
 "                REF: Página 56, sección 5.3."
 
-#: systemv/cupstestppd.c:1025
 msgid ""
 "      **FAIL**  Bad JobPatchFile attribute in file\n"
 "                REF: Page 24, section 3.4."
@@ -716,19 +576,16 @@ msgstr ""
 "      **FALLO**  Atributo JobPatchFile en archivo, incorrecto\n"
 "                REF: Página 24, sección 3.4."
 
-#: systemv/cupstestppd.c:1213
 #, c-format
 msgid "      **FAIL**  Bad LanguageEncoding %s - must be ISOLatin1."
 msgstr ""
 "      **FALLO**  LanguageEncoding %s incorrecto: debería ser ISOLatin1."
 
-#: systemv/cupstestppd.c:1227
 #, c-format
 msgid "      **FAIL**  Bad LanguageVersion %s - must be English."
 msgstr ""
 "      **FALLO**  LanguageVersion %s incorrecto: debería ser English (Inglés)."
 
-#: systemv/cupstestppd.c:743 systemv/cupstestppd.c:760
 #, c-format
 msgid ""
 "      **FAIL**  Bad Manufacturer (should be \"%s\")\n"
@@ -737,7 +594,6 @@ msgstr ""
 "      **FALLO**  Fabricante incorrecto (debería ser \"%s\")\n"
 "                REF: Página 211, tabla D.1."
 
-#: systemv/cupstestppd.c:800
 #, c-format
 msgid ""
 "      **FAIL**  Bad ModelName - \"%c\" not allowed in string.\n"
@@ -746,7 +602,6 @@ msgstr ""
 "      **FALLO**  ModelName incorrecto - \"%c\" no permitido en la cadena.\n"
 "                REF: Páginas 59-60, sección 5.3."
 
-#: systemv/cupstestppd.c:956
 msgid ""
 "      **FAIL**  Bad PSVersion - not \"(string) int\".\n"
 "                REF: Pages 62-64, section 5.3."
@@ -754,7 +609,6 @@ msgstr ""
 "      **FALLO**  PSVersion incorrecto - no es \"(string) int\".\n"
 "                REF: Páginas 62-64, sección 5.3."
 
-#: systemv/cupstestppd.c:917
 msgid ""
 "      **FAIL**  Bad Product - not \"(string)\".\n"
 "                REF: Page 62, section 5.3."
@@ -762,7 +616,6 @@ msgstr ""
 "      **FALLO**  Product incorrecto - no es \"(string)\".\n"
 "                REF: Página 62, sección 5.3."
 
-#: systemv/cupstestppd.c:991
 msgid ""
 "      **FAIL**  Bad ShortNickName - longer than 31 chars.\n"
 "                REF: Pages 64-65, section 5.3."
@@ -770,7 +623,6 @@ msgstr ""
 "      **FALLO**  ShortNickName incorrecto - mayor de 31 caracteres.\n"
 "                REF: Páginas 64-65, sección 5.3."
 
-#: systemv/cupstestppd.c:1149
 #, c-format
 msgid ""
 "      **FAIL**  Bad option %s choice %s\n"
@@ -779,14 +631,12 @@ msgstr ""
 "      **FALLO**  Opción %s, preferencia %s incorrecta\n"
 "                REF: Página 84, sección 5.9"
 
-#: systemv/cupstestppd.c:3774 systemv/cupstestppd.c:3796
 #, c-format
 msgid "      **FAIL**  Default option code cannot be interpreted: %s"
 msgstr ""
 "      **FALLO**  El código de opción predeterminado no puede ser "
 "interpretado: %s"
 
-#: systemv/cupstestppd.c:1286
 #, c-format
 msgid ""
 "      **FAIL**  Default translation string for option %s choice %s contains "
@@ -795,7 +645,6 @@ msgstr ""
 "      **FALLO**  Cadena de traducción predeterminada para opción %s "
 "preferencia %s contiene caracteres de 8-bits."
 
-#: systemv/cupstestppd.c:1259
 #, c-format
 msgid ""
 "      **FAIL**  Default translation string for option %s contains 8-bit "
@@ -804,34 +653,29 @@ msgstr ""
 "      **FALLO**  Cadena de traducción predeterminada para opción %s contiene "
 "caracteres de 8-bits."
 
-#: systemv/cupstestppd.c:2101
 #, c-format
 msgid "      **FAIL**  Group names %s and %s differ only by case."
 msgstr ""
 "      **FALLO**  Nombres de grupo %s y %s se diferencian sólo en la "
 "capitalización."
 
-#: systemv/cupstestppd.c:2146
 #, c-format
 msgid "      **FAIL**  Multiple occurrences of option %s choice name %s."
 msgstr ""
 "      **FALLO**  Múltiples apariciones de opción %s nombre de preferencia %s."
 
-#: systemv/cupstestppd.c:2163
 #, c-format
 msgid "      **FAIL**  Option %s choice names %s and %s differ only by case."
 msgstr ""
 "      **FALLO**  Opción %s nombres de preferencia %s y %s se diferencian "
 "sólo en la capitalización."
 
-#: systemv/cupstestppd.c:2123
 #, c-format
 msgid "      **FAIL**  Option names %s and %s differ only by case."
 msgstr ""
 "      **FALLO**  Nombres de opción %s y %s se diferencian sólo en la "
 "capitalización."
 
-#: systemv/cupstestppd.c:600
 #, c-format
 msgid ""
 "      **FAIL**  REQUIRED Default%s\n"
@@ -840,7 +684,6 @@ msgstr ""
 "      **FALLO**  SE NECESITA Default%s\n"
 "                REF: Página 40, sección 4.5."
 
-#: systemv/cupstestppd.c:499
 msgid ""
 "      **FAIL**  REQUIRED DefaultImageableArea\n"
 "                REF: Page 102, section 5.15."
@@ -848,7 +691,6 @@ msgstr ""
 "      **FALLO**  SE NECESITA DefaultImageableArea\n"
 "                REF: Página 102, sección 5.15."
 
-#: systemv/cupstestppd.c:535
 msgid ""
 "      **FAIL**  REQUIRED DefaultPaperDimension\n"
 "                REF: Page 103, section 5.15."
@@ -856,7 +698,6 @@ msgstr ""
 "      **FALLO**  SE NECESITA DefaultPaperDimension\n"
 "                REF: Página 103, sección 5.15."
 
-#: systemv/cupstestppd.c:641
 msgid ""
 "      **FAIL**  REQUIRED FileVersion\n"
 "                REF: Page 56, section 5.3."
@@ -864,7 +705,6 @@ msgstr ""
 "      **FALLO**  SE NECESITA FileVersion\n"
 "                REF: Página 56, sección 5.3."
 
-#: systemv/cupstestppd.c:685
 msgid ""
 "      **FAIL**  REQUIRED FormatVersion\n"
 "                REF: Page 56, section 5.3."
@@ -872,7 +712,6 @@ msgstr ""
 "      **FALLO**  SE NECESITA FormatVersion\n"
 "                REF: Página 56, sección 5.3."
 
-#: systemv/cupstestppd.c:1076
 #, c-format
 msgid ""
 "      **FAIL**  REQUIRED ImageableArea for PageSize %s\n"
@@ -883,7 +722,6 @@ msgstr ""
 "                REF: Página 41, sección 5.\n"
 "                REF: Página 102, sección 5.15."
 
-#: systemv/cupstestppd.c:705
 msgid ""
 "      **FAIL**  REQUIRED LanguageEncoding\n"
 "                REF: Pages 56-57, section 5.3."
@@ -891,7 +729,6 @@ msgstr ""
 "      **FALLO**  SE NECESITA LanguageEncoding\n"
 "                REF: Páginas 56-57, sección 5.3."
 
-#: systemv/cupstestppd.c:725
 msgid ""
 "      **FAIL**  REQUIRED LanguageVersion\n"
 "                REF: Pages 57-58, section 5.3."
@@ -899,7 +736,6 @@ msgstr ""
 "      **FALLO**  SE NECESITA LanguageVersion\n"
 "                REF: Páginas 57-58, sección 5.3."
 
-#: systemv/cupstestppd.c:779
 msgid ""
 "      **FAIL**  REQUIRED Manufacturer\n"
 "                REF: Pages 58-59, section 5.3."
@@ -907,7 +743,6 @@ msgstr ""
 "      **FALLO**  SE NECESITA Manufacturer\n"
 "                REF: Páginas 58-59, sección 5.3."
 
-#: systemv/cupstestppd.c:819
 msgid ""
 "      **FAIL**  REQUIRED ModelName\n"
 "                REF: Pages 59-60, section 5.3."
@@ -915,7 +750,6 @@ msgstr ""
 "      **FALLO**  SE NECESITA ModelName\n"
 "                REF: Páginas 59-60, sección 5.3."
 
-#: systemv/cupstestppd.c:839
 msgid ""
 "      **FAIL**  REQUIRED NickName\n"
 "                REF: Page 60, section 5.3."
@@ -923,7 +757,6 @@ msgstr ""
 "      **FALLO**  SE NECESITA NickName\n"
 "                REF: Página 60, sección 5.3."
 
-#: systemv/cupstestppd.c:899
 msgid ""
 "      **FAIL**  REQUIRED PCFileName\n"
 "                REF: Pages 61-62, section 5.3."
@@ -931,7 +764,6 @@ msgstr ""
 "      **FALLO**  SE NECESITA PCFileName\n"
 "                REF: Páginas 61-62, sección 5.3."
 
-#: systemv/cupstestppd.c:974
 msgid ""
 "      **FAIL**  REQUIRED PSVersion\n"
 "                REF: Pages 62-64, section 5.3."
@@ -939,7 +771,6 @@ msgstr ""
 "      **FALLO**  SE NECESITA PSVersion\n"
 "                REF: Páginas 62-64, sección 5.3."
 
-#: systemv/cupstestppd.c:879
 msgid ""
 "      **FAIL**  REQUIRED PageRegion\n"
 "                REF: Page 100, section 5.14."
@@ -947,7 +778,6 @@ msgstr ""
 "      **FALLO**  SE NECESITA PageRegion\n"
 "                REF: Página 100, sección 5.14."
 
-#: systemv/cupstestppd.c:1045
 msgid ""
 "      **FAIL**  REQUIRED PageSize\n"
 "                REF: Page 41, section 5.\n"
@@ -957,7 +787,6 @@ msgstr ""
 "                REF: Página 41, sección 5.\n"
 "                REF: Página 99, sección 5.14."
 
-#: systemv/cupstestppd.c:859
 msgid ""
 "      **FAIL**  REQUIRED PageSize\n"
 "                REF: Pages 99-100, section 5.14."
@@ -965,7 +794,6 @@ msgstr ""
 "      **FALLO**  SE NECESITA PageSize\n"
 "                REF: Páginas 99-100, sección 5.14."
 
-#: systemv/cupstestppd.c:1098
 #, c-format
 msgid ""
 "      **FAIL**  REQUIRED PaperDimension for PageSize %s\n"
@@ -976,7 +804,6 @@ msgstr ""
 "                REF: Página 41, sección 5.\n"
 "                REF: Página 103, sección 5.15."
 
-#: systemv/cupstestppd.c:934
 msgid ""
 "      **FAIL**  REQUIRED Product\n"
 "                REF: Page 62, section 5.3."
@@ -984,7 +811,6 @@ msgstr ""
 "      **FALLO**  SE NECESITA Product\n"
 "                REF: Página 62, sección 5.3."
 
-#: systemv/cupstestppd.c:1009
 msgid ""
 "      **FAIL**  REQUIRED ShortNickName\n"
 "                REF: Page 64-65, section 5.3."
@@ -992,23 +818,18 @@ msgstr ""
 "      **FALLO**  SE NECESITA ShortNickName\n"
 "                REF: Página 64-65, sección 5.3."
 
-#: systemv/cupstestppd.c:334 systemv/cupstestppd.c:353
-#: systemv/cupstestppd.c:365
 #, c-format
 msgid "      **FAIL**  Unable to open PPD file - %s on line %d."
 msgstr ""
 "      **FALLO**  No se ha podido abrir el archivo PPD - %s en la línea %d."
 
-#: systemv/cupstestppd.c:1498
 #, c-format
 msgid "    %d ERRORS FOUND"
 msgstr "    %d ERRORES ENCONTRADOS"
 
-#: systemv/cupstestdsc.c:431
 msgid "    -h       Show program usage"
 msgstr "    -h       Mostrar el uso del programa"
 
-#: systemv/cupstestdsc.c:234 systemv/cupstestdsc.c:276
 #, c-format
 msgid ""
 "    Bad %%%%BoundingBox: on line %d.\n"
@@ -1017,7 +838,6 @@ msgstr ""
 "    %%%%BoundingBox: incorrecto en línea %d.\n"
 "        REF: Página 39, %%%%BoundingBox:"
 
-#: systemv/cupstestdsc.c:305
 #, c-format
 msgid ""
 "    Bad %%%%Page: on line %d.\n"
@@ -1026,7 +846,6 @@ msgstr ""
 "    %%%%Page: incorrecto en línea %d.\n"
 "        REF: Página 53, %%%%Page:"
 
-#: systemv/cupstestdsc.c:218 systemv/cupstestdsc.c:258
 #, c-format
 msgid ""
 "    Bad %%%%Pages: on line %d.\n"
@@ -1035,7 +854,6 @@ msgstr ""
 "    %%%%Pages: incorrecto en línea %d.\n"
 "        REF: Página 43, %%%%Pages:"
 
-#: systemv/cupstestdsc.c:176
 #, c-format
 msgid ""
 "    Line %d is longer than 255 characters (%d).\n"
@@ -1044,7 +862,6 @@ msgstr ""
 "    La línea %d es más larga de 255 caracteres (%d).\n"
 "        REF: Página 25, Longitud de Línea"
 
-#: systemv/cupstestdsc.c:192
 msgid ""
 "    Missing %!PS-Adobe-3.0 on first line.\n"
 "        REF: Page 17, 3.1 Conforming Documents"
@@ -1052,13 +869,11 @@ msgstr ""
 "    Falta %!PS-Adobe-3.0 en la primera línea.\n"
 "        REF: Página 17, 3.1 Conformidad de documentos"
 
-#: systemv/cupstestdsc.c:362
 #, c-format
 msgid "    Missing %%EndComments comment.        REF: Page 41, %%EndComments"
 msgstr ""
 "    Falta comentario %%EndComments.        REF: Página 41, %%EndComments"
 
-#: systemv/cupstestdsc.c:342
 #, c-format
 msgid ""
 "    Missing or bad %%BoundingBox: comment.\n"
@@ -1067,7 +882,6 @@ msgstr ""
 "    Falta comentario %%BoundingBox: o incorrecto.\n"
 "        REF: Página 39, %%BoundingBox:"
 
-#: systemv/cupstestdsc.c:372
 #, c-format
 msgid ""
 "    Missing or bad %%Page: comments.\n"
@@ -1076,7 +890,6 @@ msgstr ""
 "    Falta comentario %%Page: o incorrecto.\n"
 "        REF: Página 53, %%Page:"
 
-#: systemv/cupstestdsc.c:352
 #, c-format
 msgid ""
 "    Missing or bad %%Pages: comment.\n"
@@ -1085,85 +898,67 @@ msgstr ""
 "    Falta comentario %%Pages: o incorrecto.\n"
 "        REF: Página 43, %%Pages:"
 
-#: systemv/cupstestppd.c:1500
 msgid "    NO ERRORS FOUND"
 msgstr "    NO SE HAN ENCONTRADO ERRORES"
 
-#: systemv/cupstestdsc.c:395
 #, c-format
 msgid "    Saw %d lines that exceeded 255 characters."
 msgstr "    Se han visto %d líneas que exceden de 255 caracteres."
 
-#: systemv/cupstestdsc.c:390
 #, c-format
 msgid "    Too many %%BeginDocument comments."
 msgstr "    Demasiados comentarios %%BeginDocument."
 
-#: systemv/cupstestdsc.c:382
 #, c-format
 msgid "    Too many %%EndDocument comments."
 msgstr "    Demasiados comentarios %%EndDocument."
 
-#: systemv/cupstestdsc.c:402
 msgid "    Warning: file contains binary data."
 msgstr "    Advertencia: el archivo contiene datos binarios."
 
-#: systemv/cupstestdsc.c:410
 #, c-format
 msgid "    Warning: no %%EndComments comment in file."
 msgstr "    Advertencia: no hay comentario %%EndComments en el archivo."
 
-#: systemv/cupstestdsc.c:406
 #, c-format
 msgid "    Warning: obsolete DSC version %.1f in file."
 msgstr "    Advertencia: versión DSC %.1f obsoleta en el archivo."
 
-#: test/ippfind.c:2788
 msgid "  ! expression            Unary NOT of expression."
 msgstr "  ! expresión            NOT unario de la expresión."
 
-#: test/ippfind.c:2787
 msgid "  ( expressions )         Group expressions."
 msgstr "  ( expresiones )         Agrupar expresiones."
 
-#: systemv/cupsctl.c:210
 msgid "  --[no-]debug-logging    Turn debug logging on/off."
 msgstr "  --[no-]debug-logging    Activar/desactivar registro de depuración."
 
-#: systemv/cupsctl.c:212
 msgid "  --[no-]remote-admin     Turn remote administration on/off."
 msgstr "  --[no-]remote-admin     Activar/desactivar administración remota."
 
-#: systemv/cupsctl.c:214
 msgid "  --[no-]remote-any       Allow/prevent access from the Internet."
 msgstr "  --[no-]remote-any       Permitir/evitar acceso desde Internet."
 
-#: systemv/cupsctl.c:216
 msgid "  --[no-]share-printers   Turn printer sharing on/off."
 msgstr ""
 "  --[no-]share-printers   Activar/desactivar compartición de impresoras."
 
-#: systemv/cupsctl.c:218
 msgid "  --[no-]user-cancel-any  Allow/prevent users to cancel any job."
 msgstr ""
 "  --[no-]user-cancel-any  Permitir/evitar a usuarios que cancelen cualquier "
 "trabajo."
 
-#: ppdc/ppdc.cxx:450
 msgid "  --cr                    End lines with CR (Mac OS 9)."
 msgstr "  --cr                    Finalizar líneas con CR (Mac OS 9)."
 
-#: ppdc/ppdc.cxx:452
 msgid "  --crlf                  End lines with CR + LF (Windows)."
 msgstr "  --crlf                  Finalizar líneas con CR + LF (Windows)."
 
-#: test/ippfind.c:2769
 msgid "  --domain regex          Match domain to regular expression."
 msgstr ""
 "  --domain regex          Hacer coincidir el dominio con la expresión "
 "regular."
 
-#: test/ippfind.c:2770
 msgid ""
 "  --exec utility [argument ...] ;\n"
 "                          Execute program if true."
@@ -1171,81 +966,64 @@ msgstr ""
 "  --exec utilidad [argumento ...] ;\n"
 "                          Ejecutar programa si es cierto."
 
-#: test/ippfind.c:2790
 msgid "  --false                 Always false."
 msgstr "  --false                 Siempre falso."
 
-#: test/ipptool.c:4806
 msgid "  --help                  Show help."
 msgstr "  --help                  Muestra ayuda."
 
-#: test/ippfind.c:2752
 msgid "  --help                  Show this help."
 msgstr "  --help                  Muestra esta ayuda."
 
-#: test/ippfind.c:2772
 msgid "  --host regex            Match hostname to regular expression."
 msgstr ""
 "  --host regex            Hacer coincidir el nombre del equipo con la "
 "expresión regular."
 
-#: ppdc/ppdc.cxx:454
 msgid "  --lf                    End lines with LF (UNIX/Linux/OS X)."
 msgstr "  --lf                    Finalizar líneas con LF (UNIX/Linux/OS X)."
 
-#: scheduler/cupsfilter.c:1483
 msgid "  --list-filters          List filters that will be used."
 msgstr "  --list-filters          Listar los filtros a usar."
 
-#: test/ippfind.c:2774
 msgid "  --local                 True if service is local."
 msgstr "  --local                 Cierto si el servicio es local."
 
-#: test/ippfind.c:2773
 msgid "  --ls                    List attributes."
 msgstr "  --ls                    Lista atributos."
 
-#: test/ippfind.c:2775
 msgid "  --name regex            Match service name to regular expression."
 msgstr ""
 "  --name regex            Hacer coincidir el servicio con la expresión "
 "regular."
 
-#: test/ippfind.c:2789
 msgid "  --not expression        Unary NOT of expression."
 msgstr "  [parcial]expresión            NOT unario de la expresión."
 
-#: test/ippfind.c:2776
 msgid "  --path regex            Match resource path to regular expression."
 msgstr ""
 "  --path regex            Hacer coincidir la ruta del recurso con la "
 "expresión regular."
 
-#: test/ippfind.c:2777
 msgid "  --port number[-number]  Match port to number or range."
 msgstr ""
 "  --port número[-número]  Hacer coincidir el puerto con un número o "
 "intervalo de números."
 
-#: test/ippfind.c:2778
 msgid "  --print                 Print URI if true."
 msgstr "  --print                 Imprimir URI si es cierto."
 
-#: test/ippfind.c:2779
 msgid "  --print-name            Print service name if true."
 msgstr "  --print-name            Imprimir nombre del servicio si es cierto."
 
-#: test/ippfind.c:2780
 msgid "  --quiet                 Quietly report match via exit code."
 msgstr ""
 "  --quiet                 Silenciosamente informar de la coincidencia via "
 "código de salida."
 
-#: test/ippfind.c:2781
 msgid "  --remote                True if service is remote."
 msgstr "  --remote                Cierto si el servicio es remoto."
 
-#: test/ipptool.c:4807
 msgid ""
 "  --stop-after-include-error\n"
 "                          Stop tests after a failed INCLUDE."
@@ -1253,93 +1031,73 @@ msgstr ""
 "  --stop-after-include-error\n"
 "                          Detiene las pruebas tras un INCLUDE fallido."
 
-#: test/ippfind.c:2791
 msgid "  --true                  Always true."
 msgstr "  --true                  Siempre cierto."
 
-#: test/ippfind.c:2782
 msgid "  --txt key               True if the TXT record contains the key."
 msgstr ""
 "  --txt clave               Cierto si el registro TXT contiene la clave."
 
-#: test/ippfind.c:2783
 msgid "  --txt-* regex           Match TXT record key to regular expression."
 msgstr ""
 "  --txt-* regex           Hacer coincidir la clave del registro TXT a la "
 "expresión regular."
 
-#: test/ippfind.c:2784
 msgid "  --uri regex             Match URI to regular expression."
 msgstr ""
 "  --uri regex             Hacer coincidir la URI a la expresión regular."
 
-#: test/ippfind.c:2753
 msgid "  --version               Show program version."
 msgstr "  --version               Muestra la versión del programa."
 
-#: test/ipptool.c:4809
 msgid "  --version               Show version."
 msgstr "  --version               Muestra la versión."
 
-#: test/ippfind.c:2746 test/ipptool.c:4810
 msgid "  -4                      Connect using IPv4."
 msgstr "  -4                      Conectar usando IPv4."
 
-#: test/ippfind.c:2747 test/ipptool.c:4811
 msgid "  -6                      Connect using IPv6."
 msgstr "  -6                      Conectar usando IPv6."
 
-#: test/ipptool.c:4812
 msgid "  -C                      Send requests using chunking (default)."
 msgstr ""
 "  -C                      Enviar peticiones usando fragmentación "
 "(predeterminado)."
 
-#: scheduler/cupsfilter.c:1484
 msgid "  -D                      Remove the input file when finished."
 msgstr "  -D                      Eliminar el archivo de entrada al terminar."
 
-#: ppdc/ppdc.cxx:433 ppdc/ppdhtml.cxx:175 ppdc/ppdpo.cxx:255
 msgid "  -D name=value           Set named variable to value."
 msgstr "  -D nombre=valor           Establece la variable nombre al valor."
 
-#: systemv/cupsaddsmb.c:285 systemv/cupsctl.c:205
 msgid "  -E                      Encrypt the connection."
 msgstr "  -E                      Cifra la conexión."
 
-#: test/ipptool.c:4814
 msgid "  -E                      Test with HTTP Upgrade to TLS."
 msgstr "  -E                      Prueba con actualización HTTP a TLS."
 
-#: scheduler/main.c:2149
 msgid ""
 "  -F                      Run in the foreground but detach from console."
 msgstr ""
 "  -F                      Ejecuta en primer plano pero separado de la "
 "consola."
 
-#: systemv/cupsaddsmb.c:286
 msgid "  -H samba-server         Use the named SAMBA server."
 msgstr "  -H servidor-samba         Usa el servidor SAMBA nombrado."
 
-#: test/ipptool.c:4816
 msgid "  -I                      Ignore errors."
 msgstr "  -I                      Ignora errores."
 
-#: ppdc/ppdc.cxx:435 ppdc/ppdhtml.cxx:177 ppdc/ppdi.cxx:131 ppdc/ppdpo.cxx:257
 msgid "  -I include-dir          Add include directory to search path."
 msgstr ""
 "  -I include-dir          Añade directorio include a la ruta de búsqueda."
 
-#: systemv/cupstestppd.c:3819
 msgid "  -I {filename,filters,none,profiles}"
 msgstr "  -I {filename,filters,none,profiles}"
 
-#: test/ipptool.c:4817
 msgid "  -L                      Send requests using content-length."
 msgstr "  -L                      Envía peticiones usando content-length."
 
-#: test/ipptool.c:4819
 msgid ""
 "  -P filename.plist       Produce XML plist to a file and test report to "
 "standard output."
@@ -1347,45 +1105,36 @@ msgstr ""
 "  -P filename.plist       Produce plist XML a un archivo y un informe de "
 "prueba a la salida estandar."
 
-#: scheduler/cupsfilter.c:1485
 msgid "  -P filename.ppd         Set PPD file."
 msgstr "  -P nombre_archivo.ppd         Establece archivo PPD."
 
-#: test/ippfind.c:2756
 msgid "  -P number[-number]      Match port to number or range."
 msgstr ""
 "  -P número[-número]    Hacer coincidir el puerto con un número o intervalo "
 "de números."
 
-#: systemv/cupstestppd.c:3821
 msgid "  -R root-directory       Set alternate root."
 msgstr "  -R directorio-raíz       Establece directorio raíz alternativo."
 
-#: test/ipptool.c:4820
 msgid "  -S                      Test with SSL encryption."
 msgstr "  -S                      Prueba con cifrado SSL."
 
-#: test/ippfind.c:2748
 msgid "  -T seconds              Set the browse timeout in seconds."
 msgstr ""
 "  -T segundos              Establece el tiempo de espera de navegación en "
 "segundos."
 
-#: test/ipptool.c:4822
 msgid "  -T seconds              Set the receive/send timeout in seconds."
 msgstr ""
 "  -T segundos             Establece el tiempo de espera de recepción/envío "
 "en segundos."
 
-#: scheduler/cupsfilter.c:1486 systemv/cupsaddsmb.c:288 systemv/cupsctl.c:206
 msgid "  -U username             Specify username."
 msgstr "  -U nombre_usuario             Especifica el nombre de usuario."
 
-#: test/ippfind.c:2750 test/ipptool.c:4824
 msgid "  -V version              Set default IPP version."
 msgstr "  -V versión              Establece la versión IPP predeterminada."
 
-#: systemv/cupstestppd.c:3822
 msgid ""
 "  -W {all,none,constraints,defaults,duplex,filters,profiles,sizes,"
 "translations}"
@@ -1393,98 +1142,77 @@ msgstr ""
 "  -W {all,none,constraints,defaults,duplex,filters,profiles,sizes,"
 "translations}"
 
-#: test/ipptool.c:4826
 msgid "  -X                      Produce XML plist instead of plain text."
 msgstr ""
 "  -X                      Produce XML plist en vez de texto sin formato."
 
-#: test/ippdiscover.c:818
 msgid "  -a                      Browse for all services."
 msgstr "  -a                      Explorar todos los servicios."
 
-#: systemv/cupsaddsmb.c:289
 msgid "  -a                      Export all printers."
 msgstr "  -a                      Exporta todas las impresoras."
 
-#: test/ipptool.c:4828
 msgid "  -c                      Produce CSV output."
 msgstr "  -c                      Produce salida CSV."
 
-#: ppdc/ppdc.cxx:437
 msgid "  -c catalog.po           Load the specified message catalog."
 msgstr "  -c catálogo.po           Carga el catálogo de mensajes especificado."
 
-#: scheduler/cupsfilter.c:1487
 msgid "  -c cups-files.conf      Set cups-files.conf file to use."
 msgstr "  -c cups-files.conf      Establece el archivo cups-files.conf a usar."
 
-#: scheduler/main.c:2147
 msgid "  -c cupsd.conf           Set cupsd.conf file to use."
 msgstr "  -c cupsd.conf           Establece el archivo cupsd.conf a usar."
 
-#: test/ippdiscover.c:819
 msgid "  -d domain               Browse/resolve in specified domain."
 msgstr ""
 "  -d dominio               Explora/resuelve en el dominio especificado."
 
-#: test/ipptool.c:4829
 msgid "  -d name=value           Set named variable to value."
 msgstr "  -d nombre=valor           Establece la variable al valor."
 
-#: ppdc/ppdc.cxx:439
 msgid "  -d output-dir           Specify the output directory."
 msgstr "  -d dir-salida           Especifica el directorio de salida."
 
-#: scheduler/cupsfilter.c:1488
 msgid "  -d printer              Use the named printer."
 msgstr "  -d impresora              Usa la impresora especificada."
 
-#: test/ippfind.c:2757
 msgid "  -d regex                Match domain to regular expression."
 msgstr ""
 "  -d regex               Hacer coincidir el dominio con la expresión regular."
 
-#: scheduler/cupsfilter.c:1489
 msgid "  -e                      Use every filter from the PPD file."
 msgstr "  -e                      Usa cada filtro desde el archivo PPD."
 
-#: scheduler/main.c:2148
 msgid "  -f                      Run in the foreground."
 msgstr "  -f                      Ejecuta en primer plano."
 
-#: test/ipptool.c:4831
 msgid "  -f filename             Set default request filename."
 msgstr ""
 "  -f nombre_archivo             Establece nombre de archivo predeterminado."
 
-#: scheduler/main.c:2151
 msgid "  -h                      Show this usage message."
 msgstr "  -h                      Muestra este mensaje de uso."
 
-#: test/ippfind.c:2758
 msgid "  -h regex                Match hostname to regular expression."
 msgstr ""
 "  -h regex                Hacer coincidir el nombre del equipo con la "
 "expresión regular."
 
-#: systemv/cupsaddsmb.c:290 systemv/cupsctl.c:207
 msgid "  -h server[:port]        Specify server address."
 msgstr "  -h servidor[:puerto]        Especifica la dirección del servidor."
 
-#: scheduler/cupsfilter.c:1490
 msgid "  -i mime/type            Set input MIME type (otherwise auto-typed)."
 msgstr ""
 "  -i tipo/mime            Establece el tipo MIME de entrada (si no, auto-"
 "typed)."
 
-#: test/ipptool.c:4833
 msgid ""
 "  -i seconds              Repeat the last file with the given time interval."
 msgstr ""
 "  -i segundos              Repite el último archivo con el intervalo de "
 "tiempo dado."
 
-#: scheduler/cupsfilter.c:1491
 msgid ""
 "  -j job-id[,N]           Filter file N from the specified job (default is "
 "file 1)."
@@ -1492,149 +1220,117 @@ msgstr ""
 "  -j id-trabajo[,N]           Filtra el archivo N desde el trabajo "
 "especificado (predeterminado archivo 1)."
 
-#: test/ippfind.c:2759
 msgid "  -l                      List attributes."
 msgstr "  -l                    Lista atributos."
 
-#: test/ipptool.c:4835
 msgid "  -l                      Produce plain text output."
 msgstr "  -l                      Produce salida en texto plano."
 
-#: scheduler/main.c:2152
 msgid "  -l                      Run cupsd on demand."
 msgstr "  -l                      Ejecuta cupsd según demanda."
 
-#: ppdc/ppdc.cxx:441
 msgid "  -l lang[,lang,...]      Specify the output language(s) (locale)."
 msgstr ""
 "  -l idioma[,idioma,...]      Especifica los idiomas de salida (código "
 "regional)."
 
-#: ppdc/ppdc.cxx:443
 msgid "  -m                      Use the ModelName value as the filename."
 msgstr ""
 "  -m                      Usa el valor ModelName como nombre de archivo."
 
-#: scheduler/cupsfilter.c:1492
 msgid ""
 "  -m mime/type            Set output MIME type (otherwise application/pdf)."
 msgstr ""
 "  -m tipo/mime            Establece el tipo MIME de salida (si no, "
 "application/pdf)."
 
-#: scheduler/cupsfilter.c:1493
 msgid "  -n copies               Set number of copies."
 msgstr "  -n copias               Establece el número de copias."
 
-#: test/ipptool.c:4836
 msgid ""
 "  -n count                Repeat the last file the given number of times."
 msgstr ""
 "  -n contador                Repite el último archivo el número de veces "
 "especificado."
 
-#: test/ippfind.c:2760
 msgid "  -n regex                Match service name to regular expression."
 msgstr ""
 "  -n regex            Hacer coincidir el nombre del servicio con la "
 "expresión regular."
 
-#: ppdc/ppdi.cxx:133
 msgid ""
 "  -o filename.drv         Set driver information file (otherwise ppdi.drv)."
 msgstr ""
 "  -o nombre_archivo.drv         Establece el archivo de información del "
 "controlador (si no, ppdi.drv)."
 
-#: ppdc/ppdmerge.cxx:364
 msgid "  -o filename.ppd[.gz]    Set output file (otherwise stdout)."
 msgstr ""
 "  -o nombre_archivo.ppd[.gz]    Establece el archivo de salida (si no, "
 "stdout)."
 
-#: scheduler/cupsfilter.c:1494
 msgid "  -o name=value           Set option(s)."
 msgstr "  -o nombre=valor           Establece opciones."
 
-#: test/ippfind.c:2761
 msgid "  -p                      Print URI if true."
 msgstr "  -p                      Imprimir URI si es cierto."
 
-#: scheduler/cupsfilter.c:1495
 msgid "  -p filename.ppd         Set PPD file."
 msgstr "  -p nombre_archivo.ppd         Establece archivo PPD."
 
-#: test/ippdiscover.c:820
 msgid "  -p program              Run specified program for each service."
 msgstr ""
 "  -p program              Ejecuta el programa especificado para cada "
 "servicio."
 
-#: test/ippfind.c:2762
 msgid "  -q                      Quietly report match via exit code."
 msgstr ""
 "  -q                      Silenciosamente informar de la coincidencia via "
 "código de salida."
 
-#: systemv/cupstestppd.c:3826 test/ipptool.c:4838
 msgid "  -q                      Run silently."
 msgstr "  -q                      Ejecución silenciosa."
 
-#: test/ippfind.c:2763
 msgid "  -r                      True if service is remote."
 msgstr "  -r                      Cierto si el servicio es remoto."
 
-#: systemv/cupstestppd.c:3827
 msgid "  -r                      Use 'relaxed' open mode."
 msgstr "  -r                      Usa modo abierto 'relajado'."
 
-#: test/ippfind.c:2764
 msgid "  -s                      Print service name if true."
 msgstr "  -s                      Imprimir nombre del servicio si es cierto."
 
-#: test/ipptool.c:4839
 msgid "  -t                      Produce a test report."
 msgstr "  -t                      Produce un informe de la prueba."
 
-#: ppdc/ppdc.cxx:445
 msgid "  -t                      Test PPDs instead of generating them."
 msgstr "  -t                      Prueba los PPDs en vez de generarlos."
 
-#: scheduler/main.c:2153
 msgid "  -t                      Test the configuration file."
 msgstr "  -t                      Prueba el archivo de configuración."
 
-#: test/ippfind.c:2765
 msgid "  -t key                  True if the TXT record contains the key."
 msgstr "  -t clave                Cierto si el registro TXT contiene la clave."
 
-#: scheduler/cupsfilter.c:1496
 msgid "  -t title                Set title."
 msgstr "  -t título               Establece título."
 
-#: test/ippdiscover.c:821
 msgid "  -t type                 Browse/resolve with specified type."
 msgstr "  -t tipo                 Explora/resuelve con el tipo especificado."
 
-#: scheduler/cupsfilter.c:1497
 msgid "  -u                      Remove the PPD file when finished."
 msgstr "  -u                      Borra el archivo PPD tras terminar."
 
-#: test/ippfind.c:2766
 msgid "  -u regex                Match URI to regular expression."
 msgstr ""
 "  -u regex                Hacer coincidir la URI a la expresión regular."
 
-#: systemv/cupsaddsmb.c:291 systemv/cupstestppd.c:3828 test/ipptool.c:4840
-#: ppdc/ppdc.cxx:447 ppdc/ppdpo.cxx:259
 msgid "  -v                      Be verbose."
 msgstr "  -v                      Ser detallado."
 
-#: systemv/cupstestppd.c:3829
 msgid "  -vv                     Be very verbose."
 msgstr "  -vv                     Ser muy detallado."
 
-#: test/ippfind.c:2767
 msgid ""
 "  -x utility [argument ...] ;\n"
 "                          Execute program if true."
@@ -1642,15 +1338,12 @@ msgstr ""
 "  -x utilidad [argumento ...] ;\n"
 "                        Ejecutar programa si es cierto."
 
-#: ppdc/ppdc.cxx:448
 msgid "  -z                      Compress PPD files using GNU zip."
 msgstr "  -z                      Comprimir archivos PPD usando GNU zip."
 
-#: test/ippfind.c:2810
 msgid "  IPPFIND_SERVICE_DOMAIN  Domain name"
 msgstr "  IPPFIND_SERVICE_DOMAIN  Nombre de dominio"
 
-#: test/ippfind.c:2811
 msgid ""
 "  IPPFIND_SERVICE_HOSTNAME\n"
 "                          Fully-qualified domain name"
@@ -1658,31 +1351,24 @@ msgstr ""
 "  IPPFIND_SERVICE_HOSTNAME\n"
 "                          Nombre de dominio completo"
 
-#: test/ippfind.c:2813
 msgid "  IPPFIND_SERVICE_NAME    Service instance name"
 msgstr "  IPPFIND_SERVICE_NAME    Nombre de la instancia del servicio"
 
-#: test/ippfind.c:2814
 msgid "  IPPFIND_SERVICE_PORT    Port number"
 msgstr "  IPPFIND_SERVICE_PORT    Número del puerto"
 
-#: test/ippfind.c:2815
 msgid "  IPPFIND_SERVICE_REGTYPE DNS-SD registration type"
 msgstr "  IPPFIND_SERVICE_REGTYPE Tipo de registro DNS-SD"
 
-#: test/ippfind.c:2816
 msgid "  IPPFIND_SERVICE_SCHEME  URI scheme"
 msgstr "  IPPFIND_SERVICE_SCHEME  Esquema URI"
 
-#: test/ippfind.c:2817
 msgid "  IPPFIND_SERVICE_URI     URI"
 msgstr "  IPPFIND_SERVICE_URI     URI"
 
-#: test/ippfind.c:2818
 msgid "  IPPFIND_TXT_*           Value of TXT record key"
 msgstr "  IPPFIND_TXT_*           Valor de la clave del registro TXT"
 
-#: test/ippfind.c:2793
 msgid ""
 "  expression --and expression\n"
 "                          Logical AND."
@@ -1690,7 +1376,6 @@ msgstr ""
 "  expresión --and expresión\n"
 "                            AND lógico."
 
-#: test/ippfind.c:2795
 msgid ""
 "  expression --or expression\n"
 "                          Logical OR."
@@ -1698,127 +1383,58 @@ msgstr ""
 "  expresión --or expresión\n"
 "                            OR lógico."
 
-#: test/ippfind.c:2792
 msgid "  expression expression   Logical AND."
 msgstr "  expresión expresión     AND lógico."
 
-#: test/ippfind.c:2800
 msgid "  {service_domain}        Domain name"
 msgstr "  {service_domain}        Nombre de dominio"
 
-#: test/ippfind.c:2801
 msgid "  {service_hostname}      Fully-qualified domain name"
 msgstr "  {service_hostname}      Nombre de dominio completo"
 
-#: test/ippfind.c:2802
 msgid "  {service_name}          Service instance name"
 msgstr "  {service_name}          Nombre de la instancia del servicio"
 
-#: test/ippfind.c:2803
 msgid "  {service_port}          Port number"
 msgstr "  {service_port}          Número de puerto"
 
-#: test/ippfind.c:2804
 msgid "  {service_regtype}       DNS-SD registration type"
 msgstr "  {service_regtype}       Tipo de registro DNS-SD"
 
-#: test/ippfind.c:2805
 msgid "  {service_scheme}        URI scheme"
 msgstr "  {service_scheme}        Esquema URI"
 
-#: test/ippfind.c:2806
 msgid "  {service_uri}           URI"
 msgstr "  {service_uri}           URI"
 
-#: test/ippfind.c:2807
 msgid "  {txt_*}                 Value of TXT record key"
 msgstr "  {txt_*}                 Valor de la clave del registro TXT"
 
-#: test/ippfind.c:2799
 msgid "  {}                      URI"
 msgstr "  {}                      URI"
 
-#: systemv/cupstestppd.c:332 systemv/cupstestppd.c:351
-#: systemv/cupstestppd.c:363 systemv/cupstestppd.c:496
-#: systemv/cupstestppd.c:511 systemv/cupstestppd.c:532
-#: systemv/cupstestppd.c:547 systemv/cupstestppd.c:577
-#: systemv/cupstestppd.c:597 systemv/cupstestppd.c:620
-#: systemv/cupstestppd.c:638 systemv/cupstestppd.c:664
-#: systemv/cupstestppd.c:682 systemv/cupstestppd.c:702
-#: systemv/cupstestppd.c:722 systemv/cupstestppd.c:740
-#: systemv/cupstestppd.c:757 systemv/cupstestppd.c:776
-#: systemv/cupstestppd.c:797 systemv/cupstestppd.c:816
-#: systemv/cupstestppd.c:836 systemv/cupstestppd.c:856
-#: systemv/cupstestppd.c:876 systemv/cupstestppd.c:896
-#: systemv/cupstestppd.c:914 systemv/cupstestppd.c:931
-#: systemv/cupstestppd.c:953 systemv/cupstestppd.c:971
-#: systemv/cupstestppd.c:988 systemv/cupstestppd.c:1006
-#: systemv/cupstestppd.c:1022 systemv/cupstestppd.c:1042
-#: systemv/cupstestppd.c:1073 systemv/cupstestppd.c:1095
-#: systemv/cupstestppd.c:1146 systemv/cupstestppd.c:1165
-#: systemv/cupstestppd.c:1209 systemv/cupstestppd.c:1223
-#: systemv/cupstestppd.c:1255 systemv/cupstestppd.c:1282
-#: systemv/cupstestppd.c:1800 systemv/cupstestppd.c:1819
-#: systemv/cupstestppd.c:1837 systemv/cupstestppd.c:1889
-#: systemv/cupstestppd.c:1905 systemv/cupstestppd.c:1942
-#: systemv/cupstestppd.c:1960 systemv/cupstestppd.c:1996
-#: systemv/cupstestppd.c:2010 systemv/cupstestppd.c:2037
-#: systemv/cupstestppd.c:2051 systemv/cupstestppd.c:2097
-#: systemv/cupstestppd.c:2119 systemv/cupstestppd.c:2142
-#: systemv/cupstestppd.c:2159 systemv/cupstestppd.c:2201
-#: systemv/cupstestppd.c:2244 systemv/cupstestppd.c:2291
-#: systemv/cupstestppd.c:2315 systemv/cupstestppd.c:2369
-#: systemv/cupstestppd.c:2385 systemv/cupstestppd.c:2415
-#: systemv/cupstestppd.c:2429 systemv/cupstestppd.c:2455
-#: systemv/cupstestppd.c:2471 systemv/cupstestppd.c:2511
-#: systemv/cupstestppd.c:2525 systemv/cupstestppd.c:2551
-#: systemv/cupstestppd.c:2567 systemv/cupstestppd.c:2597
-#: systemv/cupstestppd.c:2611 systemv/cupstestppd.c:2638
-#: systemv/cupstestppd.c:2655 systemv/cupstestppd.c:2669
-#: systemv/cupstestppd.c:2693 systemv/cupstestppd.c:2710
-#: systemv/cupstestppd.c:2724 systemv/cupstestppd.c:2748
-#: systemv/cupstestppd.c:2765 systemv/cupstestppd.c:2779
-#: systemv/cupstestppd.c:2803 systemv/cupstestppd.c:2820
-#: systemv/cupstestppd.c:2834 systemv/cupstestppd.c:2858
-#: systemv/cupstestppd.c:2872 systemv/cupstestppd.c:2887
-#: systemv/cupstestppd.c:2904 systemv/cupstestppd.c:2960
-#: systemv/cupstestppd.c:2995 systemv/cupstestppd.c:3009
-#: systemv/cupstestppd.c:3037 systemv/cupstestppd.c:3102
-#: systemv/cupstestppd.c:3117 systemv/cupstestppd.c:3156
-#: systemv/cupstestppd.c:3176 systemv/cupstestppd.c:3190
-#: systemv/cupstestppd.c:3407 systemv/cupstestppd.c:3443
-#: systemv/cupstestppd.c:3457 systemv/cupstestppd.c:3503
-#: systemv/cupstestppd.c:3535 systemv/cupstestppd.c:3552
-#: systemv/cupstestppd.c:3575 systemv/cupstestppd.c:3591
-#: systemv/cupstestppd.c:3629 systemv/cupstestppd.c:3770
-#: systemv/cupstestppd.c:3792 systemv/cupstestppd.c:3900
 msgid " FAIL"
 msgstr " FALLO"
 
-#: systemv/cupstestppd.c:1306
 msgid " PASS"
 msgstr " PASA"
 
-#: cups/ipp.c:5227
 #, c-format
 msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 2911 section 4.1.5)."
 msgstr "\"%s\": Valor URI \"%s\" incorrecto - %s (RFC 2911 sección 4.1.5)."
 
-#: cups/ipp.c:5238
 #, c-format
 msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 2911 section 4.1.5)."
 msgstr ""
 "\"%s\": Valor URI \"%s\" incorrecto - longitud %d incorrecta (RFC 2911 "
 "sección 4.1.5)."
 
-#: cups/ipp.c:4858
 #, c-format
 msgid "\"%s\": Bad attribute name - bad length %d (RFC 2911 section 4.1.3)."
 msgstr ""
 "\"%s\": Nombre de atributo incorrecto - longitud %d incorrecta (RFC 2911 "
 "sección 4.1.3)."
 
-#: cups/ipp.c:4850
 #, c-format
 msgid ""
 "\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)."
@@ -1826,12 +1442,10 @@ msgstr ""
 "\"%s\": Nombre de atributo incorrecto - carácter inválido (RFC 2911 sección "
 "4.1.3)."
 
-#: cups/ipp.c:4876
 #, c-format
 msgid "\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11)."
 msgstr "\"%s\": Valor lógico \"%d\" incorrecto (RFC 2911 sección 4.1.11)."
 
-#: cups/ipp.c:5290
 #, c-format
 msgid ""
 "\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section 4.1.7)."
@@ -1839,7 +1453,6 @@ msgstr ""
 "\"%s\": Valor del juego de caracteres \"%s\" incorrecto - caracteres "
 "incorrectos (RFC 2911 sección 4.1.7)."
 
-#: cups/ipp.c:5299
 #, c-format
 msgid ""
 "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)."
@@ -1847,60 +1460,49 @@ msgstr ""
 "\"%s\": Valor del juego de caracteres \"%s\" incorrecto - longitud %d "
 "incorrecta (RFC 2911 sección 4.1.7)."
 
-#: cups/ipp.c:4976
 #, c-format
 msgid "\"%s\": Bad dateTime UTC hours %u (RFC 2911 section 4.1.14)."
 msgstr "\"%s\": Horas dateTime UTC %u incorrectas (RFC 2911 sección 4.1.14)."
 
-#: cups/ipp.c:4984
 #, c-format
 msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 2911 section 4.1.14)."
 msgstr "\"%s\": Minutos dateTime UTC %u incorrectos (RFC 2911 sección 4.1.14)."
 
-#: cups/ipp.c:4968
 #, c-format
 msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14)."
 msgstr "\"%s\": Signo dateTime UTC %c incorrecto (RFC 2911 sección 4.1.14)."
 
-#: cups/ipp.c:4928
 #, c-format
 msgid "\"%s\": Bad dateTime day %u (RFC 2911 section 4.1.14)."
 msgstr "\"%s\": Día dateTime %u incorrecto (RFC 2911 sección 4.1.14)."
 
-#: cups/ipp.c:4960
 #, c-format
 msgid "\"%s\": Bad dateTime deciseconds %u (RFC 2911 section 4.1.14)."
 msgstr ""
 "\"%s\": Décimas de segundo dateTime %u incorrectas (RFC 2911 sección 4.1.14)."
 
-#: cups/ipp.c:4936
 #, c-format
 msgid "\"%s\": Bad dateTime hours %u (RFC 2911 section 4.1.14)."
 msgstr "\"%s\": Horas dateTime %u incorrectas (RFC 2911 sección 4.1.14)."
 
-#: cups/ipp.c:4944
 #, c-format
 msgid "\"%s\": Bad dateTime minutes %u (RFC 2911 section 4.1.14)."
 msgstr "\"%s\": Minutos dateTime %u incorrectos (RFC 2911 sección 4.1.14)."
 
-#: cups/ipp.c:4920
 #, c-format
 msgid "\"%s\": Bad dateTime month %u (RFC 2911 section 4.1.14)."
 msgstr "\"%s\": Mes dateTime %u incorrecto (RFC 2911 sección 4.1.14)."
 
-#: cups/ipp.c:4952
 #, c-format
 msgid "\"%s\": Bad dateTime seconds %u (RFC 2911 section 4.1.14)."
 msgstr "\"%s\": Segundos dateTime %u incorrectos (RFC 2911 sección 4.1.14)."
 
-#: cups/ipp.c:4890
 #, c-format
 msgid "\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4)."
 msgstr ""
 "\"%s\": Valor enumerado %d incorrecto - fuera de intervalo (RFC 2911 sección "
 "4.1.4)."
 
-#: cups/ipp.c:5205
 #, c-format
 msgid ""
 "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3)."
@@ -1908,7 +1510,6 @@ msgstr ""
 "\"%s\": Valor clave \"%s\" incorrecto - longitud %d incorrecta (RFC 2911 "
 "sección 4.1.3)."
 
-#: cups/ipp.c:5196
 #, c-format
 msgid ""
 "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section "
@@ -1917,7 +1518,6 @@ msgstr ""
 "\"%s\": Valor clave \"%s\" incorrecto - carácter inválido (RFC 2911 sección "
 "4.1.3)."
 
-#: cups/ipp.c:5399
 #, c-format
 msgid ""
 "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section "
@@ -1926,7 +1526,6 @@ msgstr ""
 "\"%s\": Valor mimeMediaType \"%s\" incorrecto - caracteres incorrectos (RFC "
 "2911 sección 4.1.9)."
 
-#: cups/ipp.c:5409
 #, c-format
 msgid ""
 "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section "
@@ -1935,7 +1534,6 @@ msgstr ""
 "\"%s\": Valor mimeMediaType \"%s\" incorrecto - longitud %d incorrecta (RFC "
 "2911 sección 4.1.9)."
 
-#: cups/ipp.c:5167
 #, c-format
 msgid ""
 "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.2)."
@@ -1943,14 +1541,12 @@ msgstr ""
 "\"%s\": Valor del nombre \"%s\" incorrecto - secuencia UTF-8 incorrecta (RFC "
 "2911 sección 4.1.2)."
 
-#: cups/ipp.c:5176
 #, c-format
 msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2)."
 msgstr ""
 "\"%s\": Valor del nombre \"%s\" incorrecto - longitud %d incorrecta (RFC "
 "2911 sección 4.1.2)."
 
-#: cups/ipp.c:5345
 #, c-format
 msgid ""
 "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 section "
@@ -1959,7 +1555,6 @@ msgstr ""
 "\"%s\": Valor naturalLanguage \"%s\" incorrecto - caracteres incorrectos "
 "(RFC 2911 sección 4.1.8)."
 
-#: cups/ipp.c:5355
 #, c-format
 msgid ""
 "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 2911 section "
@@ -1968,7 +1563,6 @@ msgstr ""
 "\"%s\": Valor naturalLanguage \"%s\" incorrecto - longitud %d incorrecta "
 "(RFC 2911 sección 4.1.8)."
 
-#: cups/ipp.c:4904
 #, c-format
 msgid ""
 "\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10)."
@@ -1976,7 +1570,6 @@ msgstr ""
 "\"%s\": Valor octetString incorrecto - longitud %d incorrecta (RFC 2911 "
 "sección 4.1.10)."
 
-#: cups/ipp.c:5047
 #, c-format
 msgid ""
 "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 2911 "
@@ -1985,7 +1578,6 @@ msgstr ""
 "\"%s\": Valor rangeOfInteger %d-%d incorrecto - el más bajo es mayor que el "
 "más alto (RFC 2911 section 4.1.13)."
 
-#: cups/ipp.c:5028
 #, c-format
 msgid ""
 "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section "
@@ -1994,7 +1586,6 @@ msgstr ""
 "\"%s\": Valor de resolución %dx%d%s incorrecto - valores de unidades "
 "incorrectas (RFC 2911 section 4.1.15)."
 
-#: cups/ipp.c:4997
 #, c-format
 msgid ""
 "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be "
@@ -2003,7 +1594,6 @@ msgstr ""
 "\"%s\": Valor de resolución %dx%d%s incorrecto - la resolución de la "
 "alimentación cruzada debe ser positiva (RFC 2911 sección 4.1.15)."
 
-#: cups/ipp.c:5012
 #, c-format
 msgid ""
 "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC "
@@ -2012,7 +1602,6 @@ msgstr ""
 "\"%s\": Valor de resolución %dx%d%s incorrecto - la resolución de la "
 "alimentación debe ser positiva (RFC 2911 sección 4.1.15)."
 
-#: cups/ipp.c:5109
 #, c-format
 msgid ""
 "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.1)."
@@ -2020,14 +1609,12 @@ msgstr ""
 "\"%s\": Valor del texto \"%s\" incorrecto - secuencia UTF-8 incorrecta (RFC "
 "2911 sección 4.1.1)."
 
-#: cups/ipp.c:5118
 #, c-format
 msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 2911 section 4.1.1)."
 msgstr ""
 "\"%s\": Valor del texto \"%s\" incorrecto - longitud %d incorrecta (RFC 2911 "
 "sección 4.1.1)."
 
-#: cups/ipp.c:5261
 #, c-format
 msgid ""
 "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section 4.1.6)."
@@ -2035,7 +1622,6 @@ msgstr ""
 "\"%s\": Valor uriScheme \"%s\" incorrecto - caracteres incorrectos (RFC 2911 "
 "sección 4.1.6)."
 
-#: cups/ipp.c:5270
 #, c-format
 msgid ""
 "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 2911 section 4.1.6)."
@@ -2043,272 +1629,213 @@ msgstr ""
 "\"%s\": Valor uriScheme \"%s\" incorrecto - longitud %d incorrecta (RFC 2911 "
 "sección 4.1.6)."
 
-#: berkeley/lpq.c:533
 #, c-format
 msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
 msgstr "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
 
-#: cups/dest-localization.c:114
 #, c-format
 msgid "%d x %d mm"
 msgstr "%d x %d mm"
 
-#: cups/dest-localization.c:106
 #, c-format
 msgid "%g x %g"
 msgstr "%g x %g"
 
-#: cups/dest-localization.c:169 cups/dest-localization.c:176
 #, c-format
 msgid "%s (%s)"
 msgstr "%s (%s)"
 
-#: cups/dest-localization.c:183
 #, c-format
 msgid "%s (%s, %s)"
 msgstr "%s (%s, %s)"
 
-#: cups/dest-localization.c:160
 #, c-format
 msgid "%s (Borderless)"
 msgstr "%s (Sin bordes)"
 
-#: cups/dest-localization.c:167 cups/dest-localization.c:174
 #, c-format
 msgid "%s (Borderless, %s)"
 msgstr "%s (Sin bordes, %s)"
 
-#: cups/dest-localization.c:181
 #, c-format
 msgid "%s (Borderless, %s, %s)"
 msgstr "%s (Sin bordes, %s, %s)"
 
-#: systemv/lpstat.c:777
 #, c-format
 msgid "%s accepting requests since %s"
 msgstr "%s aceptando peticiones desde %s"
 
-#: scheduler/ipp.c:9952
 #, c-format
 msgid "%s cannot be changed."
 msgstr "%s no puede ser cambiado."
 
-#: berkeley/lpc.c:181
 #, c-format
 msgid "%s is not implemented by the CUPS version of lpc."
 msgstr "%s no está implementado en la versión de CUPS de lpc."
 
-#: berkeley/lpq.c:618
 #, c-format
 msgid "%s is not ready"
 msgstr "%s no está preparada"
 
-#: berkeley/lpq.c:611
 #, c-format
 msgid "%s is ready"
 msgstr "%s está preparada"
 
-#: berkeley/lpq.c:614
 #, c-format
 msgid "%s is ready and printing"
 msgstr "%s está preparada e imprimiendo"
 
-#: filter/rastertoepson.c:970 filter/rastertohp.c:700
-#: filter/rastertolabel.c:1120
 #, c-format
 msgid "%s job-id user title copies options [file]"
 msgstr "%s job-id usuario título copias opciones [archivo]"
 
-#: systemv/lpstat.c:781
 #, c-format
 msgid "%s not accepting requests since %s -"
 msgstr "%s no acepta peticiones desde %s -"
 
-#: scheduler/ipp.c:618
 #, c-format
 msgid "%s not supported."
 msgstr "%s no está implementado."
 
-#: systemv/lpstat.c:792
 #, c-format
 msgid "%s/%s accepting requests since %s"
 msgstr "%s/%s aceptando peticiones desde %s"
 
-#: systemv/lpstat.c:797
 #, c-format
 msgid "%s/%s not accepting requests since %s -"
 msgstr "%s/%s no acepta peticiones desde %s -"
 
-#: berkeley/lpq.c:526
 #, c-format
 msgid "%s: %-33.33s [job %d localhost]"
 msgstr "%s: %-33.33s [trabajo %d localhost]"
 
 #. TRANSLATORS: Message is "subject: error"
-#: cups/langprintf.c:77 scheduler/cupsfilter.c:726 systemv/lpadmin.c:791
-#: systemv/lpadmin.c:842 systemv/lpadmin.c:892 systemv/lpadmin.c:948
-#: systemv/lpadmin.c:1046 systemv/lpadmin.c:1098 systemv/lpadmin.c:1154
-#: systemv/lpadmin.c:1463
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: systemv/cancel.c:305 systemv/cancel.c:368
 #, c-format
 msgid "%s: %s failed: %s"
 msgstr "%s: %s ha fallado: %s"
 
-#: test/ippfind.c:777 test/ipptool.c:378
+#, c-format
+msgid "%s: Bad printer URI \"%s\"."
+msgstr ""
+
 #, c-format
 msgid "%s: Bad version %s for \"-V\"."
 msgstr "%s: Versión %s incorrecta para \"-V\"."
 
-#: systemv/cupsaccept.c:68
 #, c-format
 msgid "%s: Don't know what to do."
 msgstr "%s: No sé que hay que hacer."
 
-#: berkeley/lpq.c:225 berkeley/lpr.c:358 systemv/lp.c:602
 #, c-format
 msgid ""
 "%s: Error - %s environment variable names non-existent destination \"%s\"."
 msgstr ""
 "%s: Error - %s nombres de variables de entorno no existen en destino \"%s\"."
 
-#: berkeley/lpq.c:133 berkeley/lpq.c:203 berkeley/lpr.c:230 berkeley/lpr.c:333
-#: systemv/lp.c:157 systemv/lp.c:577 systemv/lp.c:697 systemv/lp.c:746
-#: systemv/lpstat.c:195 systemv/lpstat.c:241 systemv/lpstat.c:332
-#: systemv/lpstat.c:361 systemv/lpstat.c:385 systemv/lpstat.c:444
-#: systemv/lpstat.c:510 systemv/lpstat.c:571 systemv/lpstat.c:696
-#: systemv/lpstat.c:880 systemv/lpstat.c:1141 systemv/lpstat.c:1339
-#: systemv/lpstat.c:1579
 #, c-format
 msgid "%s: Error - add '/version=1.1' to server name."
 msgstr "%s: Error - añada '/version=1.1' al nombre del servidor."
 
-#: systemv/lp.c:234
 #, c-format
 msgid "%s: Error - bad job ID."
 msgstr "%s: Error - ID de trabajo incorrecta."
 
-#: systemv/lp.c:222
 #, c-format
 msgid "%s: Error - cannot print files and alter jobs simultaneously."
 msgstr ""
 "%s: Error - no se pueden imprimir archivos y alterar trabajos al mismo "
 "tiempo."
 
-#: systemv/lp.c:515
 #, c-format
 msgid "%s: Error - cannot print from stdin if files or a job ID are provided."
 msgstr ""
 "%s: Error - no se puede imprimir desde stdin si se proporcionan archivos o "
 "una ID de trabajo."
 
-#: systemv/lp.c:464
 #, c-format
 msgid "%s: Error - expected character set after \"-S\" option."
 msgstr "%s: Error - se esperaba un juego de caracteres tras la opción \"-S\"."
 
-#: systemv/lp.c:483
 #, c-format
 msgid "%s: Error - expected content type after \"-T\" option."
 msgstr "%s: Error - se esperaba un tipo de contenido tras la opción \"-T\"."
 
-#: berkeley/lpr.c:245
 #, c-format
 msgid "%s: Error - expected copies after \"-#\" option."
 msgstr "%s: Error - se esperaba número de copias tras la opción \"-#\"."
 
-#: systemv/lp.c:267
 #, c-format
 msgid "%s: Error - expected copies after \"-n\" option."
 msgstr "%s: Error - se esperaba número de copias tras la opción \"-n\"."
 
-#: berkeley/lpr.c:206
 #, c-format
 msgid "%s: Error - expected destination after \"-P\" option."
 msgstr "%s: Error - se esperaba un destino tras la opción \"-P\"."
 
-#: systemv/lp.c:132
 #, c-format
 msgid "%s: Error - expected destination after \"-d\" option."
 msgstr "%s: Error - se esperaba un destino tras la opción \"-d\"."
 
-#: systemv/lp.c:171
 #, c-format
 msgid "%s: Error - expected form after \"-f\" option."
 msgstr "%s: Error - se esperaba un formulario tras la opción \"-f\"."
 
-#: systemv/lp.c:394
 #, c-format
 msgid "%s: Error - expected hold name after \"-H\" option."
 msgstr "%s: Error - se esperaba un nombre de retención tras la opción \"-H\"."
 
-#: berkeley/lpr.c:100
 #, c-format
 msgid "%s: Error - expected hostname after \"-H\" option."
 msgstr "%s: Error - se esperaba un nombre de equipo tras la opción \"-H\"."
 
-#: berkeley/lpq.c:169 berkeley/lprm.c:123 systemv/cancel.c:124
-#: systemv/cupsaccept.c:123 systemv/lp.c:192 systemv/lpstat.c:266
 #, c-format
 msgid "%s: Error - expected hostname after \"-h\" option."
 msgstr "%s: Error - se esperaba un nombre de equipo tras la opción \"-h\"."
 
-#: systemv/lp.c:374
 #, c-format
 msgid "%s: Error - expected mode list after \"-y\" option."
 msgstr "%s: Error - se esperaba una lista de modos tras la opción \"-y\"."
 
-#: berkeley/lpr.c:268
 #, c-format
 msgid "%s: Error - expected name after \"-%c\" option."
 msgstr "%s: Error - se esperaba un nombre tras la opción \"-%c\"."
 
-#: berkeley/lpr.c:150 systemv/lp.c:291
 #, c-format
 msgid "%s: Error - expected option=value after \"-o\" option."
 msgstr "%s: Error - se esperaba opción=valor tras la opción \"-o\"."
 
-#: systemv/lp.c:444
 #, c-format
 msgid "%s: Error - expected page list after \"-P\" option."
 msgstr "%s: Error - se esperaba una lista de páginas tras la opción \"-P\"."
 
-#: systemv/lp.c:311
 #, c-format
 msgid "%s: Error - expected priority after \"-%c\" option."
 msgstr "%s: Error - se esperaba un valor de prioridad tras la opción \"-%c\"."
 
-#: systemv/cupsaccept.c:141
 #, c-format
 msgid "%s: Error - expected reason text after \"-r\" option."
 msgstr "%s: Error - se esperaba un texto con una razón tras la opción \"-r\"."
 
-#: systemv/lp.c:357
 #, c-format
 msgid "%s: Error - expected title after \"-t\" option."
 msgstr "%s: Error - se esperaba un título tras la opción \"-t\"."
 
-#: berkeley/lpq.c:97 berkeley/lpr.c:81 berkeley/lprm.c:104 systemv/cancel.c:95
-#: systemv/cupsaccept.c:101 systemv/lp.c:110 systemv/lpadmin.c:424
-#: systemv/lpstat.c:124
 #, c-format
 msgid "%s: Error - expected username after \"-U\" option."
 msgstr "%s: Error - se esperaba un nombre de usuario tras la opción \"-U\"."
 
-#: systemv/cancel.c:145
 #, c-format
 msgid "%s: Error - expected username after \"-u\" option."
 msgstr "%s: Error - se esperaba un nombre de usuario tras la opción \"-u\"."
 
-#: berkeley/lpr.c:122
 #, c-format
 msgid "%s: Error - expected value after \"-%c\" option."
 msgstr "%s: Error - se esperaba un valor tras la opción \"-%c\"."
 
-#: systemv/lpstat.c:144 systemv/lpstat.c:158
 #, c-format
 msgid ""
 "%s: Error - need \"completed\", \"not-completed\", or \"all\" after \"-W\" "
@@ -2317,178 +1844,151 @@ msgstr ""
 "%s: Error - se necesita \"completed\", \"not completed\", o \"all\" tras la "
 "opción \"-W\"."
 
-#: berkeley/lpq.c:230 berkeley/lpr.c:363 systemv/lp.c:607
 #, c-format
 msgid "%s: Error - no default destination available."
 msgstr "%s: Error - destino predeterminado no disponible."
 
-#: systemv/lp.c:333
 #, c-format
 msgid "%s: Error - priority must be between 1 and 100."
 msgstr "%s: Error - la prioridad debe estar entre 1 y 100."
 
-#: berkeley/lpr.c:366 systemv/lp.c:610
 #, c-format
 msgid "%s: Error - scheduler not responding."
 msgstr "%s: Error - el programa planificador de tareas no responde."
 
-#: berkeley/lpr.c:311 systemv/lp.c:547
 #, c-format
 msgid "%s: Error - too many files - \"%s\"."
 msgstr "%s: Error - demasiados archivos - \"%s\"."
 
-#: berkeley/lpr.c:293 systemv/lp.c:530
 #, c-format
 msgid "%s: Error - unable to access \"%s\" - %s"
 msgstr "%s: Error - no se ha podido acceder a \"%s\" - %s"
 
-#: berkeley/lpr.c:409 systemv/lp.c:641
 #, c-format
 msgid "%s: Error - unable to queue from stdin - %s."
 msgstr "%s: Error - no se ha podido poner en cola desde stdin - %s."
 
-#: berkeley/lprm.c:87 berkeley/lprm.c:172 systemv/cancel.c:222
 #, c-format
 msgid "%s: Error - unknown destination \"%s\"."
 msgstr "%s: Error - destino \"%s\" desconocido."
 
-#: berkeley/lpq.c:137
 #, c-format
 msgid "%s: Error - unknown destination \"%s/%s\"."
 msgstr "%s: Error - destino \"%s/%s\" desconocido."
 
-#: berkeley/lpr.c:279 berkeley/lprm.c:139 systemv/cancel.c:163
-#: systemv/cupsaccept.c:164 systemv/lp.c:506 systemv/lpstat.c:456
 #, c-format
 msgid "%s: Error - unknown option \"%c\"."
 msgstr "%s: Error - opción \"%c\" desconocida."
 
-#: systemv/cupsaccept.c:157 systemv/lp.c:497
 #, c-format
 msgid "%s: Error - unknown option \"%s\"."
 msgstr "%s: Error - opción \"%s\" desconocida."
 
-#: systemv/lp.c:211
 #, c-format
 msgid "%s: Expected job ID after \"-i\" option."
 msgstr "%s: Se esperaba una ID de trabajo tras la opción \"-i\"."
 
-#: systemv/lpstat.c:514 systemv/lpstat.c:554
 #, c-format
 msgid "%s: Invalid destination name in list \"%s\"."
 msgstr "%s: Nombre de destino no válido en la lista \"%s\"."
 
-#: scheduler/cupsfilter.c:579
 #, c-format
 msgid "%s: Invalid filter string \"%s\"."
 msgstr "%s: Cadena de filtro \"%s\" no válida."
 
-#: test/ipptool.c:309
 #, c-format
 msgid "%s: Missing filename for \"-P\"."
 msgstr "%s: Falta el nombre del archivo para \"-P\"."
 
-#: test/ippfind.c:749 test/ipptool.c:346
 #, c-format
 msgid "%s: Missing timeout for \"-T\"."
 msgstr "%s: Falta el tiempo de espera para \"-T\"."
 
-#: test/ippfind.c:762 test/ipptool.c:360
 #, c-format
 msgid "%s: Missing version for \"-V\"."
 msgstr "%s: Falta la versión para \"-V\"."
 
-#: systemv/lp.c:421
 #, c-format
 msgid "%s: Need job ID (\"-i jobid\") before \"-H restart\"."
 msgstr ""
 "%s: Se necesita un ID de trabajo (\"-i id_trabajo\") antes de \"-H restart\"."
 
-#: scheduler/cupsfilter.c:451
 #, c-format
 msgid "%s: No filter to convert from %s/%s to %s/%s."
 msgstr "%s: No hay ningún filtro para convertir de %s/%s a %s/%s."
 
-#: systemv/cupsaccept.c:198
 #, c-format
 msgid "%s: Operation failed: %s"
 msgstr "%s: La operación ha fallado: %s"
 
-#: berkeley/lpq.c:83 berkeley/lpr.c:67 berkeley/lprm.c:67 systemv/cancel.c:82
-#: systemv/cupsaccept.c:88 systemv/cupsaddsmb.c:86 systemv/lp.c:96
-#: systemv/lpadmin.c:225 systemv/lpinfo.c:88 systemv/lpmove.c:73
-#: systemv/lpstat.c:88 test/ipptool.c:291 test/ipptool.c:335
 #, c-format
 msgid "%s: Sorry, no encryption support."
 msgstr "%s: Lo siento, no está implementado el cifrado."
 
-#: berkeley/lpq.c:284 scheduler/cupsfilter.c:1275 systemv/cancel.c:245
-#: systemv/cupsaddsmb.c:144 systemv/cupsaddsmb.c:171
+#, c-format
+msgid "%s: Unable to connect to \"%s:%d\": %s"
+msgstr ""
+
 #, c-format
 msgid "%s: Unable to connect to server."
 msgstr "%s: No se ha podido conectar al servidor."
 
-#: systemv/cancel.c:328
 #, c-format
 msgid "%s: Unable to contact server."
 msgstr "%s: No se ha podido contactar con el servidor."
 
-#: scheduler/cupsfilter.c:416
+#, c-format
+msgid "%s: Unable to create PPD file: %s"
+msgstr ""
+
 #, c-format
 msgid "%s: Unable to determine MIME type of \"%s\"."
 msgstr "%s: No se ha podido determinar el tipo MIME de \"%s\"."
 
-#: test/ipptool.c:318
 #, c-format
 msgid "%s: Unable to open \"%s\": %s"
 msgstr "%s: No se pudo abrir \"%s\": %s"
 
-#: ppdc/ppdmerge.cxx:90
 #, c-format
 msgid "%s: Unable to open %s: %s"
 msgstr "%s: No se pudo abrir %s: %s"
 
-#: scheduler/cupsfilter.c:674 ppdc/ppdmerge.cxx:106
 #, c-format
 msgid "%s: Unable to open PPD file: %s on line %d."
 msgstr "%s: No se ha podido abrir el archivo PPD: %s en la línea %d."
 
-#: scheduler/cupsfilter.c:383
 #, c-format
 msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"."
 msgstr "%s: No se pudo leer base de datos MIME desde \"%s\" o \"%s\"."
 
-#: berkeley/lpq.c:140 systemv/lpstat.c:575
+#, c-format
+msgid "%s: Unable to resolve \"%s\"."
+msgstr ""
+
 #, c-format
 msgid "%s: Unknown destination \"%s\"."
 msgstr "%s: Destino \"%s\" desconocido."
 
-#: scheduler/cupsfilter.c:428
 #, c-format
 msgid "%s: Unknown destination MIME type %s/%s."
 msgstr "%s: Tipo MIME de destino %s/%s desconocido."
 
-#: scheduler/cupsfilter.c:1479
 #, c-format
 msgid "%s: Unknown option \"%c\"."
 msgstr "%s: Opción \"%c\" desconocida."
 
-#: test/ippfind.c:648
 #, c-format
 msgid "%s: Unknown option \"%s\"."
 msgstr "%s: Opción \"%s\" desconocida."
 
-#: test/ippfind.c:928
 #, c-format
 msgid "%s: Unknown option \"-%c\"."
 msgstr "%s: Opción \"-%c\" desconocida."
 
-#: scheduler/cupsfilter.c:408
 #, c-format
 msgid "%s: Unknown source MIME type %s/%s."
 msgstr "%s: Tipo MIME de origen %s/%s desconocido."
 
-#: berkeley/lpr.c:136
 #, c-format
 msgid ""
 "%s: Warning - \"%c\" format modifier not supported - output may not be "
@@ -2497,1350 +1997,1011 @@ msgstr ""
 "%s: Advertencia - no se admite el uso del modificador de formato \"%c\" - la "
 "salida puede no ser correcta."
 
-#: systemv/lp.c:471
 #, c-format
 msgid "%s: Warning - character set option ignored."
 msgstr "%s: Advertencia - opción de juego de caracteres no tenida en cuenta."
 
-#: systemv/lp.c:490
 #, c-format
 msgid "%s: Warning - content type option ignored."
 msgstr "%s: Advertencia - opción de tipo de contenido no tenida en cuenta."
 
-#: systemv/lp.c:178
 #, c-format
 msgid "%s: Warning - form option ignored."
 msgstr "%s: Advertencia - opción de formulario no tenida en cuenta."
 
-#: systemv/lp.c:381
 #, c-format
 msgid "%s: Warning - mode option ignored."
 msgstr "%s: Advertencia - opción de modo no tenida en cuenta."
 
-#: ppdc/sample.c:305
 msgid "-1"
 msgstr "-1"
 
-#: ppdc/sample.c:296
 msgid "-10"
 msgstr "-10"
 
-#: ppdc/sample.c:388
 msgid "-100"
 msgstr "-100"
 
-#: ppdc/sample.c:387
 msgid "-105"
 msgstr "-105"
 
-#: ppdc/sample.c:295
 msgid "-11"
 msgstr "-11"
 
-#: ppdc/sample.c:386
 msgid "-110"
 msgstr "-110"
 
-#: ppdc/sample.c:385
 msgid "-115"
 msgstr "-115"
 
-#: ppdc/sample.c:294
 msgid "-12"
 msgstr "-12"
 
-#: ppdc/sample.c:384
 msgid "-120"
 msgstr "-120"
 
-#: ppdc/sample.c:293
 msgid "-13"
 msgstr "-13"
 
-#: ppdc/sample.c:292
 msgid "-14"
 msgstr "-14"
 
-#: ppdc/sample.c:291
 msgid "-15"
 msgstr "-15"
 
-#: ppdc/sample.c:304
 msgid "-2"
 msgstr "-2"
 
-#: ppdc/sample.c:404
 msgid "-20"
 msgstr "-20"
 
-#: ppdc/sample.c:403
 msgid "-25"
 msgstr "-25"
 
-#: ppdc/sample.c:303
 msgid "-3"
 msgstr "-3"
 
-#: ppdc/sample.c:402
 msgid "-30"
 msgstr "-30"
 
-#: ppdc/sample.c:401
 msgid "-35"
 msgstr "-35"
 
-#: ppdc/sample.c:302
 msgid "-4"
 msgstr "-4"
 
-#: ppdc/sample.c:400
 msgid "-40"
 msgstr "-40"
 
-#: ppdc/sample.c:399
 msgid "-45"
 msgstr "-45"
 
-#: ppdc/sample.c:301
 msgid "-5"
 msgstr "-5"
 
-#: ppdc/sample.c:398
 msgid "-50"
 msgstr "-50"
 
-#: ppdc/sample.c:397
 msgid "-55"
 msgstr "-55"
 
-#: ppdc/sample.c:300
 msgid "-6"
 msgstr "-6"
 
-#: ppdc/sample.c:396
 msgid "-60"
 msgstr "-60"
 
-#: ppdc/sample.c:395
 msgid "-65"
 msgstr "-65"
 
-#: ppdc/sample.c:299
 msgid "-7"
 msgstr "-7"
 
-#: ppdc/sample.c:394
 msgid "-70"
 msgstr "-70"
 
-#: ppdc/sample.c:393
 msgid "-75"
 msgstr "-75"
 
-#: ppdc/sample.c:298
 msgid "-8"
 msgstr "-8"
 
-#: ppdc/sample.c:392
 msgid "-80"
 msgstr "-80"
 
-#: ppdc/sample.c:391
 msgid "-85"
 msgstr "-85"
 
-#: ppdc/sample.c:297
 msgid "-9"
 msgstr "-9"
 
-#: ppdc/sample.c:390
 msgid "-90"
 msgstr "-90"
 
-#: ppdc/sample.c:389
 msgid "-95"
 msgstr "-95"
 
-#: ppdc/sample.c:306
 msgid "0"
 msgstr "0"
 
-#: ppdc/sample.c:307
 msgid "1"
 msgstr "1"
 
-#: ppdc/sample.c:379
 msgid "1 inch/sec."
 msgstr "1 pulg./seg"
 
-#: ppdc/sample.c:172
 msgid "1.25x0.25\""
 msgstr "1.25x0.25 pulg."
 
-#: ppdc/sample.c:173
 msgid "1.25x2.25\""
 msgstr "1.25x2.25 pulg."
 
-#: ppdc/sample.c:427
 msgid "1.5 inch/sec."
 msgstr "1.5 pulg./seg"
 
-#: ppdc/sample.c:174
 msgid "1.50x0.25\""
 msgstr "1.50x0.25 pulg."
 
-#: ppdc/sample.c:175
 msgid "1.50x0.50\""
 msgstr "1.50x0.50 pulg."
 
-#: ppdc/sample.c:176
 msgid "1.50x1.00\""
 msgstr "1.50x1.00 pulg."
 
-#: ppdc/sample.c:177
 msgid "1.50x2.00\""
 msgstr "1.50x2.00 pulg."
 
-#: ppdc/sample.c:316
 msgid "10"
 msgstr "10"
 
-#: ppdc/sample.c:438
 msgid "10 inches/sec."
 msgstr "10 pulg./seg"
 
-#: ppdc/sample.c:6
 msgid "10 x 11"
 msgstr "10 x 11"
 
-#: ppdc/sample.c:7
 msgid "10 x 13"
 msgstr "10 x 13"
 
-#: ppdc/sample.c:8
 msgid "10 x 14"
 msgstr "10 x 14"
 
-#: ppdc/sample.c:418
 msgid "100"
 msgstr "100"
 
-#: ppdc/sample.c:329
 msgid "100 mm/sec."
 msgstr "100 mm/seg"
 
-#: ppdc/sample.c:419
 msgid "105"
 msgstr "105"
 
-#: ppdc/sample.c:317
 msgid "11"
 msgstr "11"
 
-#: ppdc/sample.c:439
 msgid "11 inches/sec."
 msgstr "11 pulg./seg"
 
-#: ppdc/sample.c:420
 msgid "110"
 msgstr "110"
 
-#: ppdc/sample.c:421
 msgid "115"
 msgstr "115"
 
-#: ppdc/sample.c:318
 msgid "12"
 msgstr "12"
 
-#: ppdc/sample.c:440
 msgid "12 inches/sec."
 msgstr "12 pulg./seg"
 
-#: ppdc/sample.c:9
 msgid "12 x 11"
 msgstr "12 x 11"
 
-#: ppdc/sample.c:422
 msgid "120"
 msgstr "120"
 
-#: ppdc/sample.c:330
 msgid "120 mm/sec."
 msgstr "120 mm/seg"
 
-#: ppdc/sample.c:243
 msgid "120x60dpi"
 msgstr "120x60ppp"
 
-#: ppdc/sample.c:249
 msgid "120x72dpi"
 msgstr "120x72ppp"
 
-#: ppdc/sample.c:319
 msgid "13"
 msgstr "13"
 
-#: ppdc/sample.c:232
 msgid "136dpi"
 msgstr "136ppp"
 
-#: ppdc/sample.c:320
 msgid "14"
 msgstr "14"
 
-#: ppdc/sample.c:321
 msgid "15"
 msgstr "15"
 
-#: ppdc/sample.c:323
 msgid "15 mm/sec."
 msgstr "15 mm/seg"
 
-#: ppdc/sample.c:10
 msgid "15 x 11"
 msgstr "15 x 11"
 
-#: ppdc/sample.c:331
 msgid "150 mm/sec."
 msgstr "150 mm/seg"
 
-#: ppdc/sample.c:278
 msgid "150dpi"
 msgstr "150ppp"
 
-#: ppdc/sample.c:363
 msgid "16"
 msgstr "16"
 
-#: ppdc/sample.c:364
 msgid "17"
 msgstr "17"
 
-#: ppdc/sample.c:365
 msgid "18"
 msgstr "18"
 
-#: ppdc/sample.c:244
 msgid "180dpi"
 msgstr "180ppp"
 
-#: ppdc/sample.c:366
 msgid "19"
 msgstr "19"
 
-#: ppdc/sample.c:308
 msgid "2"
 msgstr "2"
 
-#: ppdc/sample.c:380
 msgid "2 inches/sec."
 msgstr "2 pulg./seg"
 
-#: ppdc/sample.c:262
 msgid "2-Sided Printing"
 msgstr "Dúplex"
 
-#: ppdc/sample.c:178
 msgid "2.00x0.37\""
 msgstr "2.00x0.37 pulg."
 
-#: ppdc/sample.c:179
 msgid "2.00x0.50\""
 msgstr "2.00x0.50 pulg."
 
-#: ppdc/sample.c:180
 msgid "2.00x1.00\""
 msgstr "2.00x1.00 pulg."
 
-#: ppdc/sample.c:181
 msgid "2.00x1.25\""
 msgstr "2.00x1.25 pulg."
 
-#: ppdc/sample.c:182
 msgid "2.00x2.00\""
 msgstr "2.00x2.00 pulg."
 
-#: ppdc/sample.c:183
 msgid "2.00x3.00\""
 msgstr "2.00x3.00 pulg."
 
-#: ppdc/sample.c:184
 msgid "2.00x4.00\""
 msgstr "2.00x4.00 pulg."
 
-#: ppdc/sample.c:185
 msgid "2.00x5.50\""
 msgstr "2.00x5.50 pulg."
 
-#: ppdc/sample.c:186
 msgid "2.25x0.50\""
 msgstr "2.25x0.50 pulg."
 
-#: ppdc/sample.c:187
 msgid "2.25x1.25\""
 msgstr "2.25x1.25 pulg."
 
-#: ppdc/sample.c:188
 msgid "2.25x4.00\""
 msgstr "2.25x4.00 pulg."
 
-#: ppdc/sample.c:189
 msgid "2.25x5.50\""
 msgstr "2.25x5.50 pulg."
 
-#: ppdc/sample.c:190
 msgid "2.38x5.50\""
 msgstr "2.38x5.50 pulg."
 
-#: ppdc/sample.c:428
 msgid "2.5 inches/sec."
 msgstr "2.5 pulg./seg"
 
-#: ppdc/sample.c:191
 msgid "2.50x1.00\""
 msgstr "2.50x1.00 pulg."
 
-#: ppdc/sample.c:192
 msgid "2.50x2.00\""
 msgstr "2.50x2.00 pulg."
 
-#: ppdc/sample.c:193
 msgid "2.75x1.25\""
 msgstr "2.75x1.25 pulg."
 
-#: ppdc/sample.c:194
 msgid "2.9 x 1\""
 msgstr "2.9 x 1 pulg."
 
-#: ppdc/sample.c:367
 msgid "20"
 msgstr "20"
 
-#: ppdc/sample.c:324
 msgid "20 mm/sec."
 msgstr "20 mm/seg"
 
-#: ppdc/sample.c:332
 msgid "200 mm/sec."
 msgstr "200 mm/seg"
 
-#: ppdc/sample.c:233
 msgid "203dpi"
 msgstr "203ppp"
 
-#: ppdc/sample.c:368
 msgid "21"
 msgstr "21"
 
-#: ppdc/sample.c:369
 msgid "22"
 msgstr "22"
 
-#: ppdc/sample.c:370
 msgid "23"
 msgstr "23"
 
-#: ppdc/sample.c:371
 msgid "24"
 msgstr "24"
 
-#: ppdc/sample.c:241
 msgid "24-Pin Series"
 msgstr "24-Pin Series"
 
-#: ppdc/sample.c:250
 msgid "240x72dpi"
 msgstr "240x72ppp"
 
-#: ppdc/sample.c:372
 msgid "25"
 msgstr "25"
 
-#: ppdc/sample.c:333
 msgid "250 mm/sec."
 msgstr "250 mm/seg"
 
-#: ppdc/sample.c:373
 msgid "26"
 msgstr "26"
 
-#: ppdc/sample.c:374
 msgid "27"
 msgstr "27"
 
-#: ppdc/sample.c:375
 msgid "28"
 msgstr "28"
 
-#: ppdc/sample.c:376
 msgid "29"
 msgstr "29"
 
-#: ppdc/sample.c:309
 msgid "3"
 msgstr "3"
 
-#: ppdc/sample.c:381
 msgid "3 inches/sec."
 msgstr "3 pulg./seg"
 
-#: ppdc/sample.c:3
 msgid "3 x 5"
 msgstr "3 x 5"
 
-#: ppdc/sample.c:195
 msgid "3.00x1.00\""
 msgstr "3.00x1.00 pulg."
 
-#: ppdc/sample.c:196
 msgid "3.00x1.25\""
 msgstr "3.00x1.25 pulg."
 
-#: ppdc/sample.c:197
 msgid "3.00x2.00\""
 msgstr "3.00x2.00 pulg."
 
-#: ppdc/sample.c:198
 msgid "3.00x3.00\""
 msgstr "3.00x3.00 pulg."
 
-#: ppdc/sample.c:199
 msgid "3.00x5.00\""
 msgstr "3.00x5.00 pulg."
 
-#: ppdc/sample.c:200
 msgid "3.25x2.00\""
 msgstr "3.25x2.00 pulg."
 
-#: ppdc/sample.c:201
 msgid "3.25x5.00\""
 msgstr "3.25x5.00 pulg."
 
-#: ppdc/sample.c:202
 msgid "3.25x5.50\""
 msgstr "3.25x5.50 pulg."
 
-#: ppdc/sample.c:203
 msgid "3.25x5.83\""
 msgstr "3.25x5.83 pulg."
 
-#: ppdc/sample.c:204
 msgid "3.25x7.83\""
 msgstr "3.25x7.83 pulg."
 
-#: ppdc/sample.c:4
 msgid "3.5 x 5"
 msgstr "3.5 x 5"
 
-#: ppdc/sample.c:171
 msgid "3.5\" Disk"
 msgstr "Disco de 3.5 pulg."
 
-#: ppdc/sample.c:205
 msgid "3.50x1.00\""
 msgstr "3.50x1.00 pulg."
 
-#: ppdc/sample.c:377
 msgid "30"
 msgstr "30"
 
-#: ppdc/sample.c:325
 msgid "30 mm/sec."
 msgstr "30 mm/seg"
 
-#: ppdc/sample.c:334
 msgid "300 mm/sec."
 msgstr "300 mm/seg"
 
-#: ppdc/sample.c:234
 msgid "300dpi"
 msgstr "300ppp"
 
-#: ppdc/sample.c:405
 msgid "35"
 msgstr "35"
 
-#: ppdc/sample.c:246
 msgid "360dpi"
 msgstr "360ppp"
 
-#: ppdc/sample.c:245
 msgid "360x180dpi"
 msgstr "360x180ppp"
 
-#: ppdc/sample.c:310
 msgid "4"
 msgstr "4"
 
-#: ppdc/sample.c:382
 msgid "4 inches/sec."
 msgstr "4 pulg./seg"
 
-#: ppdc/sample.c:206
 msgid "4.00x1.00\""
 msgstr "4.00x1.00 pulg."
 
-#: ppdc/sample.c:214
 msgid "4.00x13.00\""
 msgstr "4.00x13.00 pulg."
 
-#: ppdc/sample.c:207
 msgid "4.00x2.00\""
 msgstr "4.00x2.00 pulg."
 
-#: ppdc/sample.c:208
 msgid "4.00x2.50\""
 msgstr "4.00x2.50 pulg."
 
-#: ppdc/sample.c:209
 msgid "4.00x3.00\""
 msgstr "4.00x3.00 pulg."
 
-#: ppdc/sample.c:210
 msgid "4.00x4.00\""
 msgstr "4.00x4.00 pulg."
 
-#: ppdc/sample.c:211
 msgid "4.00x5.00\""
 msgstr "4.00x5.00 pulg."
 
-#: ppdc/sample.c:212
 msgid "4.00x6.00\""
 msgstr "4.00x6.00 pulg."
 
-#: ppdc/sample.c:213
 msgid "4.00x6.50\""
 msgstr "4.00x6.50 pulg."
 
-#: ppdc/sample.c:406
 msgid "40"
 msgstr "40"
 
-#: ppdc/sample.c:326
 msgid "40 mm/sec."
 msgstr "40 mm/seg"
 
-#: ppdc/sample.c:407
 msgid "45"
 msgstr "45"
 
-#: ppdc/sample.c:311
 msgid "5"
 msgstr "5"
 
-#: ppdc/sample.c:432
 msgid "5 inches/sec."
 msgstr "5 pulg./seg"
 
-#: ppdc/sample.c:5
 msgid "5 x 7"
 msgstr "5 x 7"
 
-#: ppdc/sample.c:408
 msgid "50"
 msgstr "50"
 
-#: ppdc/sample.c:409
 msgid "55"
 msgstr "55"
 
-#: ppdc/sample.c:312
 msgid "6"
 msgstr "6"
 
-#: ppdc/sample.c:433
 msgid "6 inches/sec."
 msgstr "6 pulg./seg"
 
-#: ppdc/sample.c:215
 msgid "6.00x1.00\""
 msgstr "6.00x1.00 pulg."
 
-#: ppdc/sample.c:216
 msgid "6.00x2.00\""
 msgstr "6.00x2.00 pulg."
 
-#: ppdc/sample.c:217
 msgid "6.00x3.00\""
 msgstr "6.00x3.00 pulg."
 
-#: ppdc/sample.c:218
 msgid "6.00x4.00\""
 msgstr "6.00x4.00 pulg."
 
-#: ppdc/sample.c:219
 msgid "6.00x5.00\""
 msgstr "6.00x5.00 pulg."
 
-#: ppdc/sample.c:220
 msgid "6.00x6.00\""
 msgstr "6.00x6.00 pulg."
 
-#: ppdc/sample.c:221
 msgid "6.00x6.50\""
 msgstr "6.00x6.50 pulg."
 
-#: ppdc/sample.c:410
 msgid "60"
 msgstr "60"
 
-#: ppdc/sample.c:327
 msgid "60 mm/sec."
 msgstr "60 mm/seg"
 
-#: ppdc/sample.c:253
 msgid "600dpi"
 msgstr "600ppp"
 
-#: ppdc/sample.c:242
 msgid "60dpi"
 msgstr "60ppp"
 
-#: ppdc/sample.c:248
 msgid "60x72dpi"
 msgstr "60x72ppp"
 
-#: ppdc/sample.c:411
 msgid "65"
 msgstr "65"
 
-#: ppdc/sample.c:313
 msgid "7"
 msgstr "7"
 
-#: ppdc/sample.c:435
 msgid "7 inches/sec."
 msgstr "7 pulg./seg"
 
-#: ppdc/sample.c:11
 msgid "7 x 9"
 msgstr "7 x 9"
 
-#: ppdc/sample.c:412
 msgid "70"
 msgstr "70"
 
-#: ppdc/sample.c:413
 msgid "75"
 msgstr "75"
 
-#: ppdc/sample.c:314
 msgid "8"
 msgstr "8"
 
-#: ppdc/sample.c:436
 msgid "8 inches/sec."
 msgstr "8 pulg./seg"
 
-#: ppdc/sample.c:12
 msgid "8 x 10"
 msgstr "8 x 10"
 
-#: ppdc/sample.c:222
 msgid "8.00x1.00\""
 msgstr "8.00x1.00 pulg."
 
-#: ppdc/sample.c:223
 msgid "8.00x2.00\""
 msgstr "8.00x2.00 pulg."
 
-#: ppdc/sample.c:224
 msgid "8.00x3.00\""
 msgstr "8.00x3.00 pulg."
 
-#: ppdc/sample.c:225
 msgid "8.00x4.00\""
 msgstr "8.00x4.00 pulg."
 
-#: ppdc/sample.c:226
 msgid "8.00x5.00\""
 msgstr "8.00x5.00 pulg."
 
-#: ppdc/sample.c:227
 msgid "8.00x6.00\""
 msgstr "8.00x6.00 pulg."
 
-#: ppdc/sample.c:228
 msgid "8.00x6.50\""
 msgstr "8.00x6.50 pulg."
 
-#: ppdc/sample.c:414
 msgid "80"
 msgstr "80"
 
-#: ppdc/sample.c:328
 msgid "80 mm/sec."
 msgstr "80 mm/seg"
 
-#: ppdc/sample.c:415
 msgid "85"
 msgstr "85"
 
-#: ppdc/sample.c:315
 msgid "9"
 msgstr "9"
 
-#: ppdc/sample.c:437
 msgid "9 inches/sec."
 msgstr "9 pulg./seg"
 
-#: ppdc/sample.c:13
 msgid "9 x 11"
 msgstr "9 x 11"
 
-#: ppdc/sample.c:14
 msgid "9 x 12"
 msgstr "9 x 12"
 
-#: ppdc/sample.c:247
 msgid "9-Pin Series"
 msgstr "9-Pin Series"
 
-#: ppdc/sample.c:416
 msgid "90"
 msgstr "90"
 
-#: ppdc/sample.c:417
 msgid "95"
 msgstr "95"
 
-#: berkeley/lpc.c:205
 msgid "?Invalid help command unknown."
 msgstr "?Comando de ayuda no válido desconocido."
 
-#: cgi-bin/admin.c:2348
 msgid "A Samba password is required to export printer drivers"
 msgstr ""
 "Se requiere una contraseña Samba para exportar los controladores de impresora"
 
-#: cgi-bin/admin.c:2344
 msgid "A Samba username is required to export printer drivers"
 msgstr ""
 "Se requiere un nombre de usuario Samba para exportar los controladores de "
 "impresora"
 
-#: scheduler/ipp.c:2274
 #, c-format
 msgid "A class named \"%s\" already exists."
 msgstr "Ya existe una clase llamada \"%s\"."
 
-#: scheduler/ipp.c:916
 #, c-format
 msgid "A printer named \"%s\" already exists."
 msgstr "Ya existe una impresora llamada \"%s\"."
 
-#: ppdc/sample.c:15
 msgid "A0"
 msgstr "A0"
 
-#: ppdc/sample.c:16
 msgid "A0 Long Edge"
 msgstr "A0 lado largo"
 
-#: ppdc/sample.c:17
 msgid "A1"
 msgstr "A1"
 
-#: ppdc/sample.c:18
 msgid "A1 Long Edge"
 msgstr "A1 lado largo"
 
-#: ppdc/sample.c:37
 msgid "A10"
 msgstr "A10"
 
-#: ppdc/sample.c:19
 msgid "A2"
 msgstr "A2"
 
-#: ppdc/sample.c:20
 msgid "A2 Long Edge"
 msgstr "A2 lado largo"
 
-#: ppdc/sample.c:21
 msgid "A3"
 msgstr "A3"
 
-#: ppdc/sample.c:22
 msgid "A3 Long Edge"
 msgstr "A3 lado largo"
 
-#: ppdc/sample.c:23
 msgid "A3 Oversize"
 msgstr "A3 Extragrande"
 
-#: ppdc/sample.c:24
 msgid "A3 Oversize Long Edge"
 msgstr "A3 Extragrande lado largo"
 
-#: ppdc/sample.c:25
 msgid "A4"
 msgstr "A4"
 
-#: ppdc/sample.c:27
 msgid "A4 Long Edge"
 msgstr "A4 lado largo"
 
-#: ppdc/sample.c:26
 msgid "A4 Oversize"
 msgstr "A4 Extragrande"
 
-#: ppdc/sample.c:28
 msgid "A4 Small"
 msgstr "A4 Pequeño"
 
-#: ppdc/sample.c:29
 msgid "A5"
 msgstr "A5"
 
-#: ppdc/sample.c:31
 msgid "A5 Long Edge"
 msgstr "A5 lado largo"
 
-#: ppdc/sample.c:30
 msgid "A5 Oversize"
 msgstr "A5 Extragrande"
 
-#: ppdc/sample.c:32
 msgid "A6"
 msgstr "A6"
 
-#: ppdc/sample.c:33
 msgid "A6 Long Edge"
 msgstr "A6 lado largo"
 
-#: ppdc/sample.c:34
 msgid "A7"
 msgstr "A7"
 
-#: ppdc/sample.c:35
 msgid "A8"
 msgstr "A8"
 
-#: ppdc/sample.c:36
 msgid "A9"
 msgstr "A9"
 
-#: ppdc/sample.c:38
 msgid "ANSI A"
 msgstr "ANSI A"
 
-#: ppdc/sample.c:39
 msgid "ANSI B"
 msgstr "ANSI B"
 
-#: ppdc/sample.c:40
 msgid "ANSI C"
 msgstr "ANSI C"
 
-#: ppdc/sample.c:41
 msgid "ANSI D"
 msgstr "ANSI D"
 
-#: ppdc/sample.c:42
 msgid "ANSI E"
 msgstr "ANSI E"
 
-#: ppdc/sample.c:47
 msgid "ARCH C"
 msgstr "ARCH C"
 
-#: ppdc/sample.c:48
 msgid "ARCH C Long Edge"
 msgstr "ARCH C lado largo"
 
-#: ppdc/sample.c:49
 msgid "ARCH D"
 msgstr "ARCH D"
 
-#: ppdc/sample.c:50
 msgid "ARCH D Long Edge"
 msgstr "ARCH D lado largo"
 
-#: ppdc/sample.c:51
 msgid "ARCH E"
 msgstr "ARCH E"
 
-#: ppdc/sample.c:52
 msgid "ARCH E Long Edge"
 msgstr "ARCH E lado largo"
 
-#: cgi-bin/classes.c:161 cgi-bin/printers.c:164
 msgid "Accept Jobs"
 msgstr "Aceptar trabajos"
 
-#: cups/http-support.c:1347
 msgid "Accepted"
 msgstr "Aceptado"
 
-#: cgi-bin/admin.c:548
 msgid "Add Class"
 msgstr "Añadir clase"
 
-#: cgi-bin/admin.c:860
 msgid "Add Printer"
 msgstr "Añadir impresora"
 
-#: cgi-bin/admin.c:422 cgi-bin/admin.c:455 cgi-bin/admin.c:503
-#: cgi-bin/admin.c:513
 msgid "Add RSS Subscription"
 msgstr "Añadir subscripción RSS"
 
-#: ppdc/sample.c:163
 msgid "Address"
 msgstr "Dirección"
 
-#: cgi-bin/admin.c:188 cgi-bin/admin.c:262 cgi-bin/admin.c:2725
 msgid "Administration"
 msgstr "Administración"
 
-#: ppdc/sample.c:424
 msgid "Always"
 msgstr "Siempre"
 
-#: backend/socket.c:121
 msgid "AppSocket/HP JetDirect"
 msgstr "AppSocket/HP JetDirect"
 
-#: ppdc/sample.c:445
 msgid "Applicator"
 msgstr "Aplicador"
 
-#: scheduler/ipp.c:991
 #, 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."
 
-#: scheduler/ipp.c:239
 #, c-format
 msgid "Attribute groups are out of order (%x < %x)."
 msgstr "Los grupos de atributos están desordenados (%x < %x)."
 
-#: ppdc/sample.c:126
 msgid "B0"
 msgstr "B0"
 
-#: ppdc/sample.c:127
 msgid "B1"
 msgstr "B1"
 
-#: ppdc/sample.c:137
 msgid "B10"
 msgstr "B10"
 
-#: ppdc/sample.c:128
 msgid "B2"
 msgstr "B2"
 
-#: ppdc/sample.c:129
 msgid "B3"
 msgstr "B3"
 
-#: ppdc/sample.c:130
 msgid "B4"
 msgstr "B4"
 
-#: ppdc/sample.c:131
 msgid "B5"
 msgstr "B5"
 
-#: ppdc/sample.c:132
 msgid "B5 Oversize"
 msgstr "A5 Extragrande"
 
-#: ppdc/sample.c:133
 msgid "B6"
 msgstr "B6"
 
-#: ppdc/sample.c:134
 msgid "B7"
 msgstr "B7"
 
-#: ppdc/sample.c:135
 msgid "B8"
 msgstr "B8"
 
-#: ppdc/sample.c:136
 msgid "B9"
 msgstr "B9"
 
-#: scheduler/ipp.c:10877
 #, c-format
 msgid "Bad 'document-format' value \"%s\"."
 msgstr "Valor 'document-format' \"%s\" incorrecto."
 
-#: cups/dest.c:1736
 msgid "Bad NULL dests pointer"
 msgstr "Puntero destino NULLincorrecto"
 
-#: cups/ppd.c:303
 msgid "Bad OpenGroup"
 msgstr "OpenGroup incorrecto"
 
-#: cups/ppd.c:305
 msgid "Bad OpenUI/JCLOpenUI"
 msgstr "OpenUI/JCLOpenUI incorrecto"
 
-#: cups/ppd.c:307
 msgid "Bad OrderDependency"
 msgstr "OrderDependency incorrecto"
 
-#: cups/ppd-cache.c:117 cups/ppd-cache.c:164 cups/ppd-cache.c:202
-#: cups/ppd-cache.c:208 cups/ppd-cache.c:224 cups/ppd-cache.c:240
-#: cups/ppd-cache.c:249 cups/ppd-cache.c:257 cups/ppd-cache.c:274
-#: cups/ppd-cache.c:282 cups/ppd-cache.c:297 cups/ppd-cache.c:305
-#: cups/ppd-cache.c:326 cups/ppd-cache.c:338 cups/ppd-cache.c:353
-#: cups/ppd-cache.c:365 cups/ppd-cache.c:387 cups/ppd-cache.c:395
-#: cups/ppd-cache.c:413 cups/ppd-cache.c:421 cups/ppd-cache.c:436
-#: cups/ppd-cache.c:444 cups/ppd-cache.c:462 cups/ppd-cache.c:470
-#: cups/ppd-cache.c:497 cups/ppd-cache.c:567 cups/ppd-cache.c:575
-#: cups/ppd-cache.c:583
 msgid "Bad PPD cache file."
 msgstr "Archivo de caché PPD incorrecto."
 
-#: cups/http-support.c:1362
 msgid "Bad Request"
 msgstr "Petición incorrecta"
 
-#: cups/snmp.c:954
 msgid "Bad SNMP version number"
 msgstr "Número de versión SNMP incorrecto"
 
-#: cups/ppd.c:308
 msgid "Bad UIConstraints"
 msgstr "UIConstraints incorrecto"
 
-#: cups/http-support.c:1456
 msgid "Bad arguments to function"
 msgstr "Argumentos de la función incorrectos"
 
-#: scheduler/ipp.c:1352
 #, c-format
 msgid "Bad copies value %d."
 msgstr "Valor de copias %d incorrecto."
 
-#: cups/ppd.c:316
 msgid "Bad custom parameter"
 msgstr "Parámetro a medida incorrecto"
 
-#: cups/http-support.c:1598 scheduler/ipp.c:2360
 #, c-format
 msgid "Bad device-uri \"%s\"."
 msgstr "device-uri \"%s\" incorrecto."
 
-#: scheduler/ipp.c:2399
 #, c-format
 msgid "Bad device-uri scheme \"%s\"."
 msgstr "Esquema device-uri \"%s\" incorrecto."
 
-#: scheduler/ipp.c:8125 scheduler/ipp.c:8141 scheduler/ipp.c:9360
 #, c-format
 msgid "Bad document-format \"%s\"."
 msgstr "document-format \"%s\" incorrecto."
 
-#: scheduler/ipp.c:9376
 #, c-format
 msgid "Bad document-format-default \"%s\"."
 msgstr "document-format-default \"%s\" incorrecto."
 
-#: cups/util.c:823
 msgid "Bad filename buffer"
 msgstr "Nombre de archivo del búfer incorrecto"
 
-#: cups/http-support.c:1465
 msgid "Bad hostname/address in URI"
 msgstr "Nombre de equipo/dirección incorrecto en la URI"
 
-#: scheduler/ipp.c:1527
 #, c-format
 msgid "Bad job-name value: %s"
 msgstr "Valor job-name incorrecto: %s"
 
-#: scheduler/ipp.c:1520
 msgid "Bad job-name value: Wrong type or count."
 msgstr "Valor job-name incorrecto: tipo o contador equivocado."
 
-#: scheduler/ipp.c:9967
 msgid "Bad job-priority value."
 msgstr "Valor job-priority incorrecto."
 
-#: scheduler/ipp.c:1382
 #, c-format
 msgid "Bad job-sheets value \"%s\"."
 msgstr "Valor de job-sheets \"%s\" incorrecto."
 
-#: scheduler/ipp.c:1366
 msgid "Bad job-sheets value type."
 msgstr "Tipo de valor de job-sheets incorrecto."
 
-#: scheduler/ipp.c:9997
 msgid "Bad job-state value."
 msgstr "Valor job-state incorrecto."
 
-#: scheduler/ipp.c:2981 scheduler/ipp.c:3441 scheduler/ipp.c:5930
-#: scheduler/ipp.c:6077 scheduler/ipp.c:7559 scheduler/ipp.c:7828
-#: scheduler/ipp.c:8678 scheduler/ipp.c:8904 scheduler/ipp.c:9256
-#: scheduler/ipp.c:9860
 #, c-format
 msgid "Bad job-uri \"%s\"."
 msgstr "job-uri \"%s\" incorrecto."
 
-#: scheduler/ipp.c:2040 scheduler/ipp.c:5468
 #, c-format
 msgid "Bad notify-pull-method \"%s\"."
 msgstr "notify-pull-method \"%s\" incorrecto."
 
-#: scheduler/ipp.c:2004 scheduler/ipp.c:5432
 #, c-format
 msgid "Bad notify-recipient-uri \"%s\"."
 msgstr "notify-recipient-uri \"%s\" incorrecto."
 
-#: scheduler/ipp.c:1398
 #, c-format
 msgid "Bad number-up value %d."
 msgstr "Valor number-up (páginas por hoja) %d incorrecto."
 
-#: cups/adminutil.c:281
 #, c-format
 msgid "Bad option + choice on line %d."
 msgstr "Opción + preferencia incorrectas en línea %d."
 
-#: scheduler/ipp.c:1415
 #, c-format
 msgid "Bad page-ranges values %d-%d."
 msgstr "Valores de page-ranges %d-%d incorrectos."
 
-#: cups/http-support.c:1462
 msgid "Bad port number in URI"
 msgstr "Número de puerto incorrecto en URI"
 
-#: scheduler/ipp.c:2442
 #, c-format
 msgid "Bad port-monitor \"%s\"."
 msgstr "port-monitor \"%s\" incorrecto."
 
-#: scheduler/ipp.c:2503
 #, c-format
 msgid "Bad printer-state value %d."
 msgstr "Valor printer-state %d incorrecto."
 
-#: cups/dest.c:610 cups/dest.c:1296 cups/dest.c:1343
 msgid "Bad printer-uri."
 msgstr "printer-uri incorrecto."
 
-#: scheduler/ipp.c:207
 #, c-format
 msgid "Bad request ID %d."
 msgstr "Petición incorrecta de ID %d."
 
-#: scheduler/ipp.c:192
 #, c-format
 msgid "Bad request version number %d.%d."
 msgstr "Petición incorrecta de número de versión %d.%d."
 
-#: cups/http-support.c:1459
 msgid "Bad resource in URI"
 msgstr "Recurso incorrecto en URI"
 
-#: cups/http-support.c:1471
 msgid "Bad scheme in URI"
 msgstr "Esquema incorrecto en URI"
 
-#: cgi-bin/admin.c:1464
 msgid "Bad subscription ID"
 msgstr "ID de subscripción incorrecto"
 
-#: cups/http-support.c:1468
 msgid "Bad username in URI"
 msgstr "Nombre de usuario incorrecto en URI"
 
-#: cups/ppd.c:318
 msgid "Bad value string"
 msgstr "Cadena de valores incorrecta"
 
-#: cups/http-support.c:1474
 msgid "Bad/empty URI"
 msgstr "URI incorrecta/vacía"
 
-#: cgi-bin/admin.c:3270 cgi-bin/admin.c:3516
 msgid "Banners"
 msgstr "Rótulos"
 
-#: ppdc/sample.c:282
 msgid "Bond Paper"
 msgstr "Papel de cartas"
 
-#: backend/usb-darwin.c:1874
 #, c-format
 msgid "Boolean expected for waiteof option \"%s\"."
 msgstr "Se esperaba un valor lógico para la opción waiteof \"%s\"."
 
-#: filter/pstops.c:2029
 msgid "Buffer overflow detected, aborting."
 msgstr "Se ha detectado un desbordamiento de buffer, cancelando."
 
-#: ppdc/sample.c:277
 msgid "CMYK"
 msgstr "CMYK"
 
-#: ppdc/sample.c:358
 msgid "CPCL Label Printer"
 msgstr "Impresora de etiquetas CPCL"
 
-#: cgi-bin/classes.c:165 cgi-bin/printers.c:168
 msgid "Cancel Jobs"
 msgstr "Cancelar trabajos"
 
-#: cgi-bin/admin.c:1465 cgi-bin/admin.c:1504 cgi-bin/admin.c:1514
 msgid "Cancel RSS Subscription"
 msgstr "Cancelar subscripción RSS"
 
-#: backend/ipp.c:2198
 msgid "Canceling print job."
 msgstr "Cancelando trabajo de impresión."
 
-#: scheduler/ipp.c:2483
 msgid "Cannot share a remote Kerberized printer."
 msgstr "No se puede compartir una impresora remota Kerberizada."
 
-#: ppdc/sample.c:271
 msgid "Cassette"
 msgstr "Casete"
 
-#: cgi-bin/admin.c:1635 cgi-bin/admin.c:1777 cgi-bin/admin.c:1790
-#: cgi-bin/admin.c:1801
 msgid "Change Settings"
 msgstr "Cambiar configuración"
 
-#: scheduler/ipp.c:2052 scheduler/ipp.c:5480
 #, c-format
 msgid "Character set \"%s\" not supported."
 msgstr "No se admite el juego de caracteres \"%s\"."
 
-#: cgi-bin/classes.c:187 cgi-bin/classes.c:314
 msgid "Classes"
 msgstr "Clases"
 
-#: cgi-bin/printers.c:174
 msgid "Clean Print Heads"
 msgstr "Limpiar cabezales de impresión"
 
-#: scheduler/ipp.c:3893
 msgid "Close-Job doesn't support the job-uri attribute."
 msgstr "Close-Job no admite el atributo job-uri."
 
-#: ppdc/sample.c:276
 msgid "Color"
 msgstr "Color"
 
-#: ppdc/sample.c:274
 msgid "Color Mode"
 msgstr "Modo de color"
 
-#: berkeley/lpc.c:196
 msgid ""
 "Commands may be abbreviated.  Commands are:\n"
 "\n"
@@ -3850,88 +3011,67 @@ msgstr ""
 "\n"
 "exit    help    quit    status  ?"
 
-#: cups/snmp.c:958
 msgid "Community name uses indefinite length"
 msgstr "Nombre de comunidad usa una longitud indefinida"
 
-#: backend/ipp.c:854 backend/lpd.c:879 backend/socket.c:400
 msgid "Connected to printer."
 msgstr "Conectado a la impresora."
 
-#: backend/ipp.c:759 backend/lpd.c:702 backend/socket.c:319
 msgid "Connecting to printer."
 msgstr "Conectando a la impresora."
 
-#: cups/http-support.c:1335
 msgid "Continue"
 msgstr "Continuar"
 
-#: ppdc/sample.c:360
 msgid "Continuous"
 msgstr "Continuo"
 
-#: backend/lpd.c:1028 backend/lpd.c:1160
 msgid "Control file sent successfully."
 msgstr "Archivo de control enviado correctamente."
 
-#: backend/ipp.c:1349 backend/lpd.c:472
 msgid "Copying print data."
 msgstr "Copiando datos de impresión."
 
-#: cups/http-support.c:1344
 msgid "Created"
 msgstr "Creado"
 
-#: cups/ppd.c:1069 cups/ppd.c:1109 cups/ppd.c:1354 cups/ppd.c:1457
 msgid "Custom"
 msgstr "A medida"
 
-#: ppdc/sample.c:354
 msgid "CustominCutInterval"
 msgstr "CustominCutInterval"
 
-#: ppdc/sample.c:352
 msgid "CustominTearInterval"
 msgstr "CustominTearInterval"
 
-#: ppdc/sample.c:338
 msgid "Cut"
 msgstr "Cortar"
 
-#: ppdc/sample.c:446
 msgid "Cutter"
 msgstr "Cortadora"
 
-#: ppdc/sample.c:239
 msgid "Dark"
 msgstr "Oscuro"
 
-#: ppdc/sample.c:235
 msgid "Darkness"
 msgstr "Oscuridad"
 
-#: backend/lpd.c:1113
 msgid "Data file sent successfully."
 msgstr "Archivo de datos enviado correctamente."
 
-#: cgi-bin/admin.c:2074 cgi-bin/admin.c:2085 cgi-bin/admin.c:2130
 msgid "Delete Class"
 msgstr "Borrar clase"
 
-#: cgi-bin/admin.c:2159 cgi-bin/admin.c:2170 cgi-bin/admin.c:2215
 msgid "Delete Printer"
 msgstr "Borrar impresora"
 
-#: ppdc/sample.c:273
 msgid "DeskJet Series"
 msgstr "DeskJet Series"
 
-#: scheduler/ipp.c:1276
 #, c-format
 msgid "Destination \"%s\" is not accepting jobs."
 msgstr "El destino %s no acepta trabajos."
 
-#: systemv/lpinfo.c:300
 #, c-format
 msgid ""
 "Device: uri = %s\n"
@@ -3948,84 +3088,64 @@ msgstr ""
 "        id dispositivo= %s\n"
 "        ubicación = %s"
 
-#: ppdc/sample.c:431
 msgid "Direct Thermal Media"
 msgstr "Soporte térmico directo"
 
-#: cups/file.c:258
 #, c-format
 msgid "Directory \"%s\" contains a relative path."
 msgstr "El directorio \"%s\" contiene una ruta relativa."
 
-#: cups/file.c:230
 #, c-format
 msgid "Directory \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)."
 msgstr "El directorio \"%s\" tiene permisos no seguros (0%o/uid=%d/gid=%d)."
 
-#: cups/file.c:247
 #, c-format
 msgid "Directory \"%s\" is a file."
 msgstr "El directorio \"%s\" es un archivo."
 
-#: cups/file.c:218
 #, c-format
 msgid "Directory \"%s\" not available: %s"
 msgstr "Directorio \"%s\" no disponible: %s"
 
-#: cups/file.c:203
 #, c-format
 msgid "Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d)."
 msgstr "Permisos del directorio \"%s\" OK (0%o/uid=%d/gid=%d)."
 
-#: ppdc/sample.c:340
 msgid "Disabled"
 msgstr "Deshabilitado"
 
-#: scheduler/ipp.c:5979
 #, c-format
 msgid "Document #%d does not exist in job #%d."
 msgstr "El documento #%d no existe en el trabajo #%d."
 
-#: ppdc/sample.c:267
 msgid "Duplexer"
 msgstr "Unidad de impresión dúplex"
 
-#: ppdc/sample.c:229
 msgid "Dymo"
 msgstr "Dymo"
 
-#: ppdc/sample.c:426
 msgid "EPL1 Label Printer"
 msgstr "Impresora de etiquetas EPL1"
 
-#: ppdc/sample.c:429
 msgid "EPL2 Label Printer"
 msgstr "Impresora de etiquetas EPL2"
 
-#: cgi-bin/admin.c:1829 cgi-bin/admin.c:1841 cgi-bin/admin.c:1895
-#: cgi-bin/admin.c:1902 cgi-bin/admin.c:1937 cgi-bin/admin.c:1950
-#: cgi-bin/admin.c:1974 cgi-bin/admin.c:2047
 msgid "Edit Configuration File"
 msgstr "Editar archivo de configuración"
 
-#: cups/adminutil.c:326
 msgid "Empty PPD file."
 msgstr "Archivo PPD vacío."
 
-#: cups/http.c:4624
 msgid "Encryption is not supported."
 msgstr "El cifrado no está implementado."
 
 #. TRANSLATORS: Banner/cover sheet after the print job.
-#: cgi-bin/admin.c:3541
 msgid "Ending Banner"
 msgstr "Rótulo final"
 
-#: ppdc/sample.c:2
 msgid "English"
 msgstr "Spanish"
 
-#: scheduler/client.c:2209
 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 "
@@ -4035,347 +3155,260 @@ msgstr ""
 "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."
 
-#: ppdc/sample.c:73
 msgid "Envelope #10 "
 msgstr "Sobre #10 "
 
-#: ppdc/sample.c:74
 msgid "Envelope #11"
 msgstr "Sobre #11"
 
-#: ppdc/sample.c:75
 msgid "Envelope #12"
 msgstr "Sobre #12"
 
-#: ppdc/sample.c:76
 msgid "Envelope #14"
 msgstr "Sobre #14"
 
-#: ppdc/sample.c:77
 msgid "Envelope #9"
 msgstr "Sobre #9"
 
-#: ppdc/sample.c:89
 msgid "Envelope B4"
 msgstr "Sobre B4"
 
-#: ppdc/sample.c:90
 msgid "Envelope B5"
 msgstr "Sobre B5"
 
-#: ppdc/sample.c:91
 msgid "Envelope B6"
 msgstr "Sobre B6"
 
-#: ppdc/sample.c:78
 msgid "Envelope C0"
 msgstr "Sobre C0"
 
-#: ppdc/sample.c:79
 msgid "Envelope C1"
 msgstr "Sobre C1"
 
-#: ppdc/sample.c:80
 msgid "Envelope C2"
 msgstr "Sobre C2"
 
-#: ppdc/sample.c:81
 msgid "Envelope C3"
 msgstr "Sobre C3"
 
-#: ppdc/sample.c:67
 msgid "Envelope C4"
 msgstr "Sobre C4"
 
-#: ppdc/sample.c:68
 msgid "Envelope C5"
 msgstr "Sobre C5"
 
-#: ppdc/sample.c:69
 msgid "Envelope C6"
 msgstr "Sobre C6"
 
-#: ppdc/sample.c:82
 msgid "Envelope C65"
 msgstr "Sobre C65"
 
-#: ppdc/sample.c:83
 msgid "Envelope C7"
 msgstr "Sobre C7"
 
-#: ppdc/sample.c:84
 msgid "Envelope Choukei 3"
 msgstr "Sobre Choukei 3"
 
-#: ppdc/sample.c:85
 msgid "Envelope Choukei 3 Long Edge"
 msgstr "Sobre Choukei 3 lado largo"
 
-#: ppdc/sample.c:86
 msgid "Envelope Choukei 4"
 msgstr "Sobre Choukei 4"
 
-#: ppdc/sample.c:87
 msgid "Envelope Choukei 4 Long Edge"
 msgstr "Sobre Choukei 4 lado largo"
 
-#: ppdc/sample.c:70
 msgid "Envelope DL"
 msgstr "Sobre DL"
 
-#: ppdc/sample.c:261
 msgid "Envelope Feed"
 msgstr "Alimentador de sobre"
 
-#: ppdc/sample.c:88
 msgid "Envelope Invite"
 msgstr "Sobre Invitación"
 
-#: ppdc/sample.c:92
 msgid "Envelope Italian"
 msgstr "Sobre Italiano"
 
-#: ppdc/sample.c:93
 msgid "Envelope Kaku2"
 msgstr "Sobre Kaku2"
 
-#: ppdc/sample.c:94
 msgid "Envelope Kaku2 Long Edge"
 msgstr "Sobre Kaku2 lado largo"
 
-#: ppdc/sample.c:95
 msgid "Envelope Kaku3"
 msgstr "Sobre Kaku3"
 
-#: ppdc/sample.c:96
 msgid "Envelope Kaku3 Long Edge"
 msgstr "Sobre Kaku3 lado largo"
 
-#: ppdc/sample.c:97
 msgid "Envelope Monarch"
 msgstr "Sobre Monarch"
 
-#: ppdc/sample.c:99
 msgid "Envelope PRC1 "
 msgstr "Sobre PRC1 "
 
-#: ppdc/sample.c:100
 msgid "Envelope PRC1 Long Edge"
 msgstr "Sobre PRC1 lado largo"
 
-#: ppdc/sample.c:117
 msgid "Envelope PRC10"
 msgstr "Sobre PRC10"
 
-#: ppdc/sample.c:118
 msgid "Envelope PRC10 Long Edge"
 msgstr "Sobre PRC10 lado largo"
 
-#: ppdc/sample.c:101
 msgid "Envelope PRC2"
 msgstr "Sobre PRC2"
 
-#: ppdc/sample.c:102
 msgid "Envelope PRC2 Long Edge"
 msgstr "Sobre PRC2 lado largo"
 
-#: ppdc/sample.c:103
 msgid "Envelope PRC3"
 msgstr "Sobre PRC3"
 
-#: ppdc/sample.c:104
 msgid "Envelope PRC3 Long Edge"
 msgstr "Sobre PRC3 lado largo"
 
-#: ppdc/sample.c:105
 msgid "Envelope PRC4"
 msgstr "Sobre PRC4"
 
-#: ppdc/sample.c:106
 msgid "Envelope PRC4 Long Edge"
 msgstr "Sobre PRC4 lado largo"
 
-#: ppdc/sample.c:108
 msgid "Envelope PRC5 Long Edge"
 msgstr "Sobre PRC5 lado largo"
 
-#: ppdc/sample.c:107
 msgid "Envelope PRC5PRC5"
 msgstr "Sobre PRC5PRC5"
 
-#: ppdc/sample.c:109
 msgid "Envelope PRC6"
 msgstr "Sobre PRC6"
 
-#: ppdc/sample.c:110
 msgid "Envelope PRC6 Long Edge"
 msgstr "Sobre PRC6 lado largo"
 
-#: ppdc/sample.c:111
 msgid "Envelope PRC7"
 msgstr "Sobre PRC7"
 
-#: ppdc/sample.c:112
 msgid "Envelope PRC7 Long Edge"
 msgstr "Sobre PRC7 lado largo"
 
-#: ppdc/sample.c:113
 msgid "Envelope PRC8"
 msgstr "Sobre PRC8"
 
-#: ppdc/sample.c:114
 msgid "Envelope PRC8 Long Edge"
 msgstr "Sobre PRC8 lado largo"
 
-#: ppdc/sample.c:115
 msgid "Envelope PRC9"
 msgstr "Sobre PRC9"
 
-#: ppdc/sample.c:116
 msgid "Envelope PRC9 Long Edge"
 msgstr "Sobre PRC9 lado largo"
 
-#: ppdc/sample.c:98
 msgid "Envelope Personal"
 msgstr "Sobre Personal"
 
-#: ppdc/sample.c:119
 msgid "Envelope You4"
 msgstr "Sobre You4"
 
-#: ppdc/sample.c:120
 msgid "Envelope You4 Long Edge"
 msgstr "Sobre You4 lado largo"
 
-#: test/ippfind.c:2809
 msgid "Environment Variables:"
 msgstr "Variables de entorno:"
 
-#: ppdc/sample.c:240
 msgid "Epson"
 msgstr "Epson"
 
-#: cgi-bin/admin.c:3584
 msgid "Error Policy"
 msgstr "Directiva de error"
 
-#: filter/rastertopwg.c:395 filter/rastertopwg.c:410 filter/rastertopwg.c:421
-#: filter/rastertopwg.c:432
+msgid "Error reading raster data."
+msgstr ""
+
 msgid "Error sending raster data."
 msgstr "Error enviando trama de datos (raster)."
 
-#: systemv/lpinfo.c:103 systemv/lpmove.c:88
 msgid "Error: need hostname after \"-h\" option."
 msgstr "Error: se necesita un nombre de equipo tras la opción \"-h\"."
 
-#: ppdc/sample.c:350
 msgid "Every 10 Labels"
 msgstr "Cada 10 etiquetas"
 
-#: ppdc/sample.c:342
 msgid "Every 2 Labels"
 msgstr "Cada 2 etiquetas"
 
-#: ppdc/sample.c:343
 msgid "Every 3 Labels"
 msgstr "Cada 3 etiquetas"
 
-#: ppdc/sample.c:344
 msgid "Every 4 Labels"
 msgstr "Cada 4 etiquetas"
 
-#: ppdc/sample.c:345
 msgid "Every 5 Labels"
 msgstr "Cada 5 etiquetas"
 
-#: ppdc/sample.c:346
 msgid "Every 6 Labels"
 msgstr "Cada 6 etiquetas"
 
-#: ppdc/sample.c:347
 msgid "Every 7 Labels"
 msgstr "Cada 7 etiquetas"
 
-#: ppdc/sample.c:348
 msgid "Every 8 Labels"
 msgstr "Cada 8 etiquetas"
 
-#: ppdc/sample.c:349
 msgid "Every 9 Labels"
 msgstr "Cada 9 etiquetas"
 
-#: ppdc/sample.c:341
 msgid "Every Label"
 msgstr "Cada etiqueta"
 
-#: ppdc/sample.c:121
 msgid "Executive"
 msgstr "Ejecutivo"
 
-#: cups/http-support.c:1390
 msgid "Expectation Failed"
 msgstr "Lo que se esperaba, falló."
 
-#: cgi-bin/admin.c:2336 cgi-bin/admin.c:2355
 msgid "Export Printers to Samba"
 msgstr "Exportar impresoras a Samba"
 
-#: test/ippfind.c:2755
 msgid "Expressions:"
 msgstr "Expresiones:"
 
-#: systemv/cupstestdsc.c:172 systemv/cupstestdsc.c:189
-#: systemv/cupstestdsc.c:214 systemv/cupstestdsc.c:231
-#: systemv/cupstestdsc.c:255 systemv/cupstestdsc.c:273
-#: systemv/cupstestdsc.c:302 systemv/cupstestdsc.c:339
-#: systemv/cupstestdsc.c:349 systemv/cupstestdsc.c:359
-#: systemv/cupstestdsc.c:369 systemv/cupstestdsc.c:379
-#: systemv/cupstestdsc.c:387
 msgid "FAIL"
 msgstr "FALLO"
 
-#: ppdc/sample.c:122
 msgid "FanFold German"
 msgstr "FanFold alemán"
 
-#: ppdc/sample.c:123
 msgid "FanFold Legal German"
 msgstr "FanFold Legal alemán"
 
-#: ppdc/sample.c:124
 msgid "Fanfold US"
 msgstr "FanFold de EE.UU"
 
-#: cups/file.c:262
 #, c-format
 msgid "File \"%s\" contains a relative path."
 msgstr "El archivo \"%s\" contiene una ruta relativa."
 
-#: cups/file.c:237
 #, c-format
 msgid "File \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)."
 msgstr "El archivo \"%s\" tiene permisos no seguros (0%o/uid=%d/gid=%d)."
 
-#: cups/file.c:251
 #, c-format
 msgid "File \"%s\" is a directory."
 msgstr "El archivo \"%s\" es un directorio."
 
-#: cups/file.c:223
 #, c-format
 msgid "File \"%s\" not available: %s"
 msgstr "Archivo \"%s\" no disponible: %s"
 
-#: cups/file.c:209
 #, c-format
 msgid "File \"%s\" permissions OK (0%o/uid=%d/gid=%d)."
 msgstr "Permisos del archivo \"%s\" OK (0%o/uid=%d/gid=%d)."
 
-#: ppdc/sample.c:169
 msgid "File Folder "
 msgstr "Carpeta de archivo "
 
-#: scheduler/ipp.c:2378
 #, c-format
 msgid ""
 "File device URIs have been disabled. To enable, see the FileDevice directive "
@@ -4384,536 +3417,398 @@ msgstr ""
 "Los URIs del dispositivo de archivo han sido deshabilitados. Para "
 "habilitarlos, vea la directiva FileDevice en \"%s/cups-files.conf\"."
 
-#: filter/rastertoepson.c:1102 filter/rastertohp.c:834
-#: filter/rastertolabel.c:1259
 #, c-format
 msgid "Finished page %d."
 msgstr "Acabada la página %d."
 
-#: ppdc/sample.c:125
 msgid "Folio"
 msgstr "Folio"
 
-#: cups/http-support.c:1369
 msgid "Forbidden"
 msgstr "Prohibido"
 
-#: cups/ppd.c:700 cups/ppd.c:1258
 msgid "General"
 msgstr "General"
 
-#: ppdc/sample.c:251
 msgid "Generic"
 msgstr "Genérico"
 
-#: cups/snmp.c:968
 msgid "Get-Response-PDU uses indefinite length"
 msgstr "Get-Response-PDU usa una longitud indefinida"
 
-#: ppdc/sample.c:285
 msgid "Glossy Paper"
 msgstr "Papel satinado"
 
-#: scheduler/ipp.c:2959 scheduler/ipp.c:3367 scheduler/ipp.c:3905
-#: scheduler/ipp.c:5908 scheduler/ipp.c:6055 scheduler/ipp.c:7536
-#: scheduler/ipp.c:8656 scheduler/ipp.c:8882 scheduler/ipp.c:9234
-#: scheduler/ipp.c:9838
 msgid "Got a printer-uri attribute but no job-id."
 msgstr "Se ha obtenido el atributo printer-uri pero no el job-id."
 
-#: ppdc/sample.c:275
 msgid "Grayscale"
 msgstr "Escale de grises"
 
-#: ppdc/sample.c:272
 msgid "HP"
 msgstr "HP"
 
-#: ppdc/sample.c:170
 msgid "Hanging Folder"
 msgstr "Carpeta colgante"
 
-#: cgi-bin/help.c:143
 msgid "Help file not in index."
 msgstr "El archivo de ayuda no está en el índice."
 
-#: cups/ipp.c:3183 cups/ipp.c:3210 cups/ipp.c:3233
 msgid "IPP 1setOf attribute with incompatible value tags."
 msgstr "Atributo IPP 1setOf con etiquetas de valor incompatibles."
 
-#: cups/ipp.c:3146
 msgid "IPP attribute has no name."
 msgstr "Atributo IPP sin nombre."
 
-#: cups/ipp.c:7000
 msgid "IPP attribute is not a member of the message."
 msgstr "El atributo IPP no es un miembro del mensaje."
 
-#: cups/ipp.c:3594
 msgid "IPP begCollection value not 0 bytes."
 msgstr "IPP el valor begCollection no es de 0 bytes."
 
-#: cups/ipp.c:3376
 msgid "IPP boolean value not 1 byte."
 msgstr "IPP el valor lógico no es de 1 byte."
 
-#: cups/ipp.c:3437
 msgid "IPP date value not 11 bytes."
 msgstr "IPP el valor de fecha no es de 11 bytes."
 
-#: cups/ipp.c:3615
 msgid "IPP endCollection value not 0 bytes."
 msgstr "IPP el valor endCollection no es de 0 bytes."
 
-#: cups/ipp.c:3351
 msgid "IPP enum value not 4 bytes."
 msgstr "IPP el valor enum no es de 4 bytes."
 
-#: cups/ipp.c:3075
 msgid "IPP extension tag larger than 0x7FFFFFFF."
 msgstr "IPP etiqueta de extensión mayor de 0x7FFFFFFF."
 
-#: cups/ipp.c:3348
 msgid "IPP integer value not 4 bytes."
 msgstr "IPP el valor entero no es de 4 bytes."
 
-#: cups/ipp.c:3547
 msgid "IPP language length overflows value."
 msgstr "IPP la longitud del idioma sobrepasa el valor."
 
-#: cups/ipp.c:3556
 msgid "IPP language length too large."
 msgstr "Longitud de idioma IPP demasiado larga."
 
-#: cups/ipp.c:3260
 msgid "IPP member name is not empty."
 msgstr "IPP el nombre del miembro no está vacío."
 
-#: cups/ipp.c:3641
 msgid "IPP memberName value is empty."
 msgstr "IPP el valor memberName está vacío."
 
-#: cups/ipp.c:3633
 msgid "IPP memberName with no attribute."
 msgstr "IPP memberName sin atributo."
 
-#: cups/ipp.c:3129
 msgid "IPP name larger than 32767 bytes."
 msgstr "IPP nombre mayor de 32767 bytes."
 
-#: cups/ipp.c:3514
 msgid "IPP nameWithLanguage value less than minimum 4 bytes."
 msgstr "IPP el valor nameWithLanguage menor del mínimo de 4 bytes."
 
-#: cups/ipp.c:3671
 msgid "IPP octetString length too large."
 msgstr "Longitud de IPP octetString demasiado larga."
 
-#: cups/ipp.c:3482
 msgid "IPP rangeOfInteger value not 8 bytes."
 msgstr "IPP el valor rangeOfInteger no es de 8 bytes."
 
-#: cups/ipp.c:3455
 msgid "IPP resolution value not 9 bytes."
 msgstr "IPP el valor de la resolución no es de 9 bytes."
 
-#: cups/ipp.c:3574
 msgid "IPP string length overflows value."
 msgstr "IPP la longitud de la cadena sobrepasa el valor."
 
-#: cups/ipp.c:3510
 msgid "IPP textWithLanguage value less than minimum 4 bytes."
 msgstr "IPP el valor textWithLanguage menor del mínimo de 4 bytes."
 
-#: cups/ipp.c:3334
 msgid "IPP value larger than 32767 bytes."
 msgstr "IPP valor mayor de 32767 bytes."
 
-#: ppdc/sample.c:1
 msgid "ISOLatin1"
 msgstr "UTF-8"
 
-#: cups/ppd.c:311
 msgid "Illegal control character"
 msgstr "Carácter de control ilegal"
 
-#: cups/ppd.c:312
 msgid "Illegal main keyword string"
 msgstr "Cadena de clave principal ilegal"
 
-#: cups/ppd.c:313
 msgid "Illegal option keyword string"
 msgstr "Cadena de clave de opción ilegal"
 
-#: cups/ppd.c:314
 msgid "Illegal translation string"
 msgstr "Cadena de traducción ilegal"
 
-#: cups/ppd.c:315
 msgid "Illegal whitespace character"
 msgstr "Carácter de espacio en blanco ilegal"
 
-#: ppdc/sample.c:266
 msgid "Installable Options"
 msgstr "Opciones instalables"
 
-#: ppdc/sample.c:269
 msgid "Installed"
 msgstr "Instalada"
 
-#: ppdc/sample.c:288
 msgid "IntelliBar Label Printer"
 msgstr "Impresora de etiquetas IntelliBar"
 
-#: ppdc/sample.c:287
 msgid "Intellitech"
 msgstr "Intellitech"
 
-#: cups/http-support.c:1396
 msgid "Internal Server Error"
 msgstr "Error interno del servidor"
 
-#: cups/ppd.c:302
 msgid "Internal error"
 msgstr "Error interno"
 
-#: ppdc/sample.c:167
 msgid "Internet Postage 2-Part"
 msgstr "Correo por Internet Parte-2"
 
-#: ppdc/sample.c:168
 msgid "Internet Postage 3-Part"
 msgstr "Correo por Internet Parte-3"
 
-#: backend/ipp.c:319
 msgid "Internet Printing Protocol"
 msgstr "Protocolo de Impresión de Internet IPP"
 
-#: cups/pwg-media.c:293 cups/pwg-media.c:312
 msgid "Invalid media name arguments."
 msgstr "Argumentos del nombre del papel no válidos."
 
-#: cups/dest-options.c:1032
 msgid "Invalid media size."
 msgstr "Tamaño de papel no válido."
 
-#: filter/commandtops.c:114
 #, c-format
 msgid "Invalid printer command \"%s\"."
 msgstr "Comando de impresora \"%s\" no válido."
 
-#: cups/ppd.c:1376
 msgid "JCL"
 msgstr "JCL"
 
-#: ppdc/sample.c:53
 msgid "JIS B0"
 msgstr "JIS B0"
 
-#: ppdc/sample.c:55
 msgid "JIS B1"
 msgstr "JIS B1"
 
-#: ppdc/sample.c:54
 msgid "JIS B10"
 msgstr "JIS B10"
 
-#: ppdc/sample.c:56
 msgid "JIS B2"
 msgstr "JIS B2"
 
-#: ppdc/sample.c:57
 msgid "JIS B3"
 msgstr "JIS B3"
 
-#: ppdc/sample.c:58
 msgid "JIS B4"
 msgstr "JIS B4"
 
-#: ppdc/sample.c:59
 msgid "JIS B4 Long Edge"
 msgstr "JIS B4 lado largo"
 
-#: ppdc/sample.c:60
 msgid "JIS B5"
 msgstr "JIS B5"
 
-#: ppdc/sample.c:61
 msgid "JIS B5 Long Edge"
 msgstr "JIS B5 lado largo"
 
-#: ppdc/sample.c:62
 msgid "JIS B6"
 msgstr "JIS B6"
 
-#: ppdc/sample.c:63
 msgid "JIS B6 Long Edge"
 msgstr "JIS B6 lado largo"
 
-#: ppdc/sample.c:64
 msgid "JIS B7"
 msgstr "JIS B7"
 
-#: ppdc/sample.c:65
 msgid "JIS B8"
 msgstr "JIS B8"
 
-#: ppdc/sample.c:66
 msgid "JIS B9"
 msgstr "JIS B9"
 
-#: scheduler/ipp.c:8954
 #, c-format
 msgid "Job #%d cannot be restarted - no files."
 msgstr "El trabajo #%d no puede ser reiniciado - no hay archivos."
 
-#: scheduler/ipp.c:2999 scheduler/ipp.c:3233 scheduler/ipp.c:3292
-#: scheduler/ipp.c:3469 scheduler/ipp.c:3915 scheduler/ipp.c:5566
-#: scheduler/ipp.c:5948 scheduler/ipp.c:6095 scheduler/ipp.c:6433
-#: scheduler/ipp.c:7383 scheduler/ipp.c:7405 scheduler/ipp.c:7577
-#: scheduler/ipp.c:7802 scheduler/ipp.c:7845 scheduler/ipp.c:8696
-#: scheduler/ipp.c:8922 scheduler/ipp.c:9274 scheduler/ipp.c:9878
 #, c-format
 msgid "Job #%d does not exist."
 msgstr "El trabajo #%d no existe."
 
-#: scheduler/ipp.c:3501
 #, c-format
 msgid "Job #%d is already aborted - can't cancel."
 msgstr "El trabajo #%d ya está anulado - no se puede cancelar."
 
-#: scheduler/ipp.c:3495
 #, c-format
 msgid "Job #%d is already canceled - can't cancel."
 msgstr "El trabajo #%d ya está cancelado - no se puede cancelar."
 
-#: scheduler/ipp.c:3507
 #, c-format
 msgid "Job #%d is already completed - can't cancel."
 msgstr "El trabajo #%d ya ha sido completado - no se puede cancelar."
 
-#: scheduler/ipp.c:7603 scheduler/ipp.c:7887 scheduler/ipp.c:9893
 #, c-format
 msgid "Job #%d is finished and cannot be altered."
 msgstr "El trabajo #%d ha terminado y no puede ser modificado."
 
-#: scheduler/ipp.c:8936
 #, c-format
 msgid "Job #%d is not complete."
 msgstr "El trabajo #%d no ha sido completado."
 
-#: scheduler/ipp.c:3014
 #, c-format
 msgid "Job #%d is not held for authentication."
 msgstr "El trabajo #%d no está retenido para autentificación."
 
-#: scheduler/ipp.c:8710
 #, c-format
 msgid "Job #%d is not held."
 msgstr "El trabajo #%d no está retenido."
 
-#: cgi-bin/ipp-var.c:1035
 msgid "Job Completed"
 msgstr "Trabajo completado"
 
-#: cgi-bin/ipp-var.c:1033
 msgid "Job Created"
 msgstr "Trabajo creado"
 
-#: cgi-bin/ipp-var.c:1039
 msgid "Job Options Changed"
 msgstr "Opciones de trabajo cambiadas"
 
-#: cgi-bin/ipp-var.c:1037
 msgid "Job Stopped"
 msgstr "Trabajo detenido"
 
-#: scheduler/ipp.c:9975
 msgid "Job is completed and cannot be changed."
 msgstr "El trabajo está terminado y no puede ser cambiado."
 
-#: cgi-bin/jobs.c:192
 msgid "Job operation failed"
 msgstr "La operación del trabajo ha fallado"
 
-#: scheduler/ipp.c:10011 scheduler/ipp.c:10028 scheduler/ipp.c:10039
 msgid "Job state cannot be changed."
 msgstr "No se puede cambiar el estado del trabajo."
 
-#: scheduler/ipp.c:8802
 msgid "Job subscriptions cannot be renewed."
 msgstr "Las suscripciones de trabajos no han podido ser renovadas."
 
-#: cgi-bin/jobs.c:97 cgi-bin/jobs.c:108 cgi-bin/jobs.c:189
 msgid "Jobs"
 msgstr "Trabajos"
 
-#: backend/lpd.c:177
 msgid "LPD/LPR Host or Printer"
 msgstr "Equipo o impresora LPD/LPR"
 
-#: ppdc/sample.c:230
 msgid "Label Printer"
 msgstr "Impresora de etiquetas"
 
-#: ppdc/sample.c:441
 msgid "Label Top"
 msgstr "Parte superior de la etiqueta"
 
-#: scheduler/ipp.c:2061 scheduler/ipp.c:5489
 #, c-format
 msgid "Language \"%s\" not supported."
 msgstr "No se admite el uso del idioma \"%s\"."
 
-#: ppdc/sample.c:164
 msgid "Large Address"
 msgstr "Dirección grande"
 
-#: ppdc/sample.c:286
 msgid "LaserJet Series PCL 4/5"
 msgstr "LaserJet Series PCL 4/5"
 
-#: ppdc/sample.c:43
 msgid "Letter Oversize"
 msgstr "Carta Extragrande"
 
-#: ppdc/sample.c:44
 msgid "Letter Oversize Long Edge"
 msgstr "Carta Extragrande lado largo"
 
-#: ppdc/sample.c:236
 msgid "Light"
 msgstr "Ligero"
 
-#: cups/ppd.c:310
 msgid "Line longer than the maximum allowed (255 characters)"
 msgstr "Línea más larga que el máximo permitido (255 caracteres)"
 
-#: cgi-bin/admin.c:2373
 msgid "List Available Printers"
 msgstr "Listar impresoras disponibles"
 
-#: cups/localize.c:291
 msgid "Load paper."
 msgstr "Cargar papel."
 
-#: ppdc/sample.c:264
 msgid "Long-Edge (Portrait)"
 msgstr "Lado largo (retrato)"
 
-#: cups/http-support.c:1725
 msgid "Looking for printer."
 msgstr "Buscando impresora."
 
-#: ppdc/sample.c:260
 msgid "Manual Feed"
 msgstr "Alimentación manual"
 
-#: cups/ppd.c:747 cups/ppd.c:1313
 msgid "Media Size"
 msgstr "Tamaño de papel"
 
-#: cups/ppd.c:751 cups/ppd.c:1317 ppdc/sample.c:254
 msgid "Media Source"
 msgstr "Fuente del papel"
 
-#: ppdc/sample.c:359
 msgid "Media Tracking"
 msgstr "Seguimiento del medio"
 
-#: cups/ppd.c:749 cups/ppd.c:1315 ppdc/sample.c:280
 msgid "Media Type"
 msgstr "Tipo de papel"
 
-#: ppdc/sample.c:237
 msgid "Medium"
 msgstr "Media"
 
-#: cups/ppd.c:299
 msgid "Memory allocation error"
 msgstr "Error de reserva de memoria"
 
-#: cups/ppd.c:319
 msgid "Missing CloseGroup"
 msgstr "Falta CloseGroup"
 
-#: cups/ppd.c:300
 msgid "Missing PPD-Adobe-4.x header"
 msgstr "Falta cabecera PPD-Adobe-4.x"
 
-#: cups/ppd.c:309
 msgid "Missing asterisk in column 1"
 msgstr "Falta un asterisco en la columna 1"
 
-#: scheduler/ipp.c:5971
 msgid "Missing document-number attribute."
 msgstr "Falta el atributo document-number."
 
-#: cups/adminutil.c:262
 #, c-format
 msgid "Missing double quote on line %d."
 msgstr "Faltan dobles comillas en línea %d."
 
-#: cgi-bin/admin.c:714 cgi-bin/admin.c:2086 cgi-bin/admin.c:2171
-#: cgi-bin/admin.c:2765 cgi-bin/admin.c:3019 cgi-bin/admin.c:3130
-#: cgi-bin/admin.c:3840
 msgid "Missing form variable"
 msgstr "Falta una variable de formulario"
 
-#: scheduler/ipp.c:9328
 msgid "Missing last-document attribute in request."
 msgstr "Falta el atributo last-document en la petición."
 
-#: cups/pwg-media.c:555
 msgid "Missing media or media-col."
 msgstr "Falta media o media-col."
 
-#: cups/pwg-media.c:474
 msgid "Missing media-size in media-col."
 msgstr "Falta media-size en media-col."
 
-#: scheduler/ipp.c:6574
 msgid "Missing notify-subscription-ids attribute."
 msgstr "Falta el atributo notify-subscription-ids."
 
-#: cups/ppd.c:317
 msgid "Missing option keyword"
 msgstr "Falta cadena de clave de opción"
 
-#: scheduler/ipp.c:3140 scheduler/ipp.c:3165
 msgid "Missing requesting-user-name attribute."
 msgstr "Falta el atributo requesting-user-name."
 
-#: scheduler/ipp.c:388
 msgid "Missing required attributes."
 msgstr "Faltan atributos necesarios."
 
-#: cups/http-support.c:1486
 msgid "Missing resource in URI"
 msgstr "Falta recurso en URI"
 
-#: cups/http-support.c:1480
 msgid "Missing scheme in URI"
 msgstr "Falta esquema en URI"
 
-#: cups/adminutil.c:243
 #, c-format
 msgid "Missing value on line %d."
 msgstr "Falta un valor en la línea %d."
 
-#: cups/ppd.c:301
 msgid "Missing value string"
 msgstr "Falta cadena de valores"
 
-#: cups/pwg-media.c:462
 msgid "Missing x-dimension in media-size."
 msgstr "Falta x-dimension en media-size."
 
-#: cups/pwg-media.c:468
 msgid "Missing y-dimension in media-size."
 msgstr "Falta y-dimension en media-size."
 
-#: systemv/lpinfo.c:470
 #, c-format
 msgid ""
 "Model:  name = %s\n"
@@ -4926,754 +3821,562 @@ msgstr ""
 "        make-and-model = %s\n"
 "        device-id = %s"
 
-#: test/ippfind.c:2786
 msgid "Modifiers:"
 msgstr "Modificadores:"
 
-#: cgi-bin/admin.c:548
 msgid "Modify Class"
 msgstr "Modificar clase"
 
-#: cgi-bin/admin.c:860
 msgid "Modify Printer"
 msgstr "Modificar impresora"
 
-#: cgi-bin/ipp-var.c:410 cgi-bin/ipp-var.c:501
 msgid "Move All Jobs"
 msgstr "Mover todos los trabajos"
 
-#: cgi-bin/ipp-var.c:349 cgi-bin/ipp-var.c:408 cgi-bin/ipp-var.c:499
 msgid "Move Job"
 msgstr "Mover trabajo"
 
-#: cups/http-support.c:1353
 msgid "Moved Permanently"
 msgstr "Movido permanentemente"
 
-#: cups/ppd.c:298
 msgid "NULL PPD file pointer"
 msgstr "Puntero de archivo PPD NULO"
 
-#: cups/snmp.c:1005
 msgid "Name OID uses indefinite length"
 msgstr "Nombre OID usa una longitud indefinida"
 
-#: scheduler/ipp.c:1054
 msgid "Nested classes are not allowed."
 msgstr "No se permiten clases anidadas."
 
-#: ppdc/sample.c:425
 msgid "Never"
 msgstr "Nunca"
 
-#: cups/ppd.c:1904
 msgid "No"
 msgstr "No"
 
-#: cups/http-support.c:1350
 msgid "No Content"
 msgstr "No hay contenido"
 
-#: cups/util.c:1123
 msgid "No PPD name"
 msgstr "No hay nombre de PPD"
 
-#: cups/snmp.c:999
 msgid "No VarBind SEQUENCE"
 msgstr "No hay Varbind SEQUENCE"
 
-#: cups/adminutil.c:777
 msgid "No Windows printer drivers are installed."
 msgstr "No está instalado ningún controlador de impresora de Windows."
 
-#: cups/request.c:570 cups/request.c:933
 msgid "No active connection"
 msgstr "No hay conexión activa"
 
-#: cups/request.c:350
 msgid "No active connection."
 msgstr "No hay conexión activa."
 
-#: scheduler/ipp.c:3418
 #, c-format
 msgid "No active jobs on %s."
 msgstr "No hay trabajos activos en %s."
 
-#: scheduler/ipp.c:216
 msgid "No attributes in request."
 msgstr "No hay atributos en la solicitud."
 
-#: scheduler/ipp.c:3041
 msgid "No authentication information provided."
 msgstr "No se ha proporcionado información de autentificación."
 
-#: cups/snmp.c:956
 msgid "No community name"
 msgstr "No hay nombre de comunidad"
 
-#: scheduler/ipp.c:5771
 msgid "No default printer."
 msgstr "No hay impresora predeterminada."
 
-#: cgi-bin/ipp-var.c:421 scheduler/ipp.c:7149
 msgid "No destinations added."
 msgstr "No se han añadido destinos."
 
-#: backend/usb.c:200
 msgid "No device URI found in argv[0] or in DEVICE_URI environment variable."
 msgstr ""
 "No se ha encontrado el URI del dispositivo en argv[0] o en la variable de "
 "entorno DEVICE_URI."
 
-#: cups/snmp.c:986
 msgid "No error-index"
 msgstr "No hay error-index"
 
-#: cups/snmp.c:978
 msgid "No error-status"
 msgstr "No hay error-status"
 
-#: scheduler/ipp.c:8091 scheduler/ipp.c:9342
 msgid "No file in print request."
 msgstr "No hay ningún archivo en la solicitud de impresión."
 
-#: cups/util.c:817
 msgid "No modification time"
 msgstr "No hay tiempo de modificación"
 
-#: cups/snmp.c:1003
 msgid "No name OID"
 msgstr "No hay nombre OID"
 
-#: filter/rastertoepson.c:1132 filter/rastertohp.c:865
-#: filter/rastertolabel.c:1288
 msgid "No pages were found."
 msgstr "No se han encontrado páginas."
 
-#: cups/util.c:811
 msgid "No printer name"
 msgstr "No hay nombre de impresora"
 
-#: cups/util.c:1647
 msgid "No printer-uri found"
 msgstr "No se encontró printer-uri"
 
-#: cups/util.c:1631
 msgid "No printer-uri found for class"
 msgstr "No se encontró printer-uri para la clase"
 
-#: scheduler/ipp.c:6179
 msgid "No printer-uri in request."
 msgstr "No hay printer-uri en la solicitud."
 
-#: cups/http.c:2260
 msgid "No request URI."
 msgstr "No se ha solicitado URI."
 
-#: cups/http.c:2277
 msgid "No request protocol version."
 msgstr "No se ha solicitado versión del protocolo."
 
-#: cups/request.c:358
 msgid "No request sent."
 msgstr "No se ha enviado solicitud."
 
-#: cups/snmp.c:970
 msgid "No request-id"
 msgstr "No hay request-id"
 
-#: scheduler/ipp.c:5374
 msgid "No subscription attributes in request."
 msgstr "No hay atributos de subscripción en la solicitud."
 
-#: scheduler/ipp.c:7476
 msgid "No subscriptions found."
 msgstr "No se han encontrado subscripciones."
 
-#: cups/snmp.c:994
 msgid "No variable-bindings SEQUENCE"
 msgstr "No hay variable-bindings SEQUENCE"
 
-#: cups/snmp.c:949
 msgid "No version number"
 msgstr "No hay número de versión"
 
-#: ppdc/sample.c:362
 msgid "Non-continuous (Mark sensing)"
 msgstr "No continuo (sensible a señal)"
 
-#: ppdc/sample.c:361
 msgid "Non-continuous (Web sensing)"
 msgstr "No continuo (sensible a web)"
 
-#: ppdc/sample.c:238
 msgid "Normal"
 msgstr "Normal"
 
-#: cups/http-support.c:1372
 msgid "Not Found"
 msgstr "No encontrado"
 
-#: cups/http-support.c:1384
 msgid "Not Implemented"
 msgstr "No implementado"
 
-#: ppdc/sample.c:268
 msgid "Not Installed"
 msgstr "No instalado"
 
-#: cups/http-support.c:1359
 msgid "Not Modified"
 msgstr "No modificado"
 
-#: cups/http-support.c:1387
 msgid "Not Supported"
 msgstr "No implementado"
 
-#: scheduler/ipp.c:1490 scheduler/ipp.c:10572
 msgid "Not allowed to print."
 msgstr "No se permite imprimir."
 
-#: ppdc/sample.c:146
 msgid "Note"
 msgstr "Nota"
 
-#: systemv/cupstestdsc.c:433
 msgid ""
 "Note: this program only validates the DSC comments, not the PostScript "
 "itself."
 msgstr ""
 "Nota: este programa sólo valida los comentarios DSC, no los PostScript."
 
-#: cups/http-support.c:1341 cups/http-support.c:1477 cups/ppd.c:296
 msgid "OK"
 msgstr "OK"
 
-#: ppdc/sample.c:263
 msgid "Off (1-Sided)"
 msgstr "Desactivado (1 cara)"
 
-#: ppdc/sample.c:356
 msgid "Oki"
 msgstr "Oki"
 
-#: cgi-bin/help.c:91 cgi-bin/help.c:132 cgi-bin/help.c:142 cgi-bin/help.c:172
 msgid "Online Help"
 msgstr "Ayuda en línea"
 
-#: cups/adminutil.c:944
 #, c-format
 msgid "Open of %s failed: %s"
 msgstr "La apertura de %s ha fallado: %s"
 
-#: cups/ppd.c:304
 msgid "OpenGroup without a CloseGroup first"
 msgstr "OpenGroup sin un CloseGroup previo"
 
-#: cups/ppd.c:306
 msgid "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first"
 msgstr "OpenUI/JCLOpenUI sin un CloseUI/JCLCloseUI previo"
 
-#: cgi-bin/admin.c:3611
 msgid "Operation Policy"
 msgstr "Directiva de operación"
 
-#: filter/pstops.c:2177
 #, c-format
 msgid "Option \"%s\" cannot be included via %%%%IncludeFeature."
 msgstr "La opción \"%s\" no puede incluirse via %%%%IncludeFeature."
 
-#: cgi-bin/admin.c:3261 cgi-bin/admin.c:3345
 msgid "Options Installed"
 msgstr "Opciones instaladas"
 
-#: scheduler/cupsfilter.c:1482 scheduler/main.c:2146 systemv/cupsaddsmb.c:284
-#: systemv/cupsctl.c:203 systemv/cupstestdsc.c:429 systemv/cupstestppd.c:3817
-#: test/ippfind.c:2745 test/ipptool.c:4805 ppdc/ppdc.cxx:432
-#: ppdc/ppdhtml.cxx:174 ppdc/ppdi.cxx:130 ppdc/ppdmerge.cxx:363
-#: ppdc/ppdpo.cxx:254
 msgid "Options:"
 msgstr "Opciones:"
 
-#: cups/ppd-cache.c:125
 msgid "Out of date PPD cache file."
 msgstr "Archivo de caché PPD obsoleto."
 
-#: cups/ppd-cache.c:1410
 msgid "Out of memory."
 msgstr "Sin memoria."
 
-#: cups/ppd.c:753 cups/ppd.c:1319
 msgid "Output Mode"
 msgstr "Modo de salida"
 
-#: cups/localize.c:316
 msgid "Output bin is almost full."
 msgstr "El recipiente de salida está casi lleno."
 
-#: cups/localize.c:318
 msgid "Output bin is full."
 msgstr "El recipiente de salida está lleno."
 
-#: cups/localize.c:314
 msgid "Output bin is missing."
 msgstr "No se encuentra el recipiente de salida."
 
-#: systemv/cupstestdsc.c:399
 msgid "PASS"
 msgstr "PASA"
 
-#: ppdc/sample.c:252
 msgid "PCL Laser Printer"
 msgstr "Impresora Laser PCL"
 
-#: ppdc/sample.c:149
 msgid "PRC16K"
 msgstr "PRC16K"
 
-#: ppdc/sample.c:150
 msgid "PRC16K Long Edge"
 msgstr "PRC16K lado largo"
 
-#: ppdc/sample.c:151
 msgid "PRC32K"
 msgstr "PRC32K"
 
-#: ppdc/sample.c:154
 msgid "PRC32K Long Edge"
 msgstr "PRC32K lado largo"
 
-#: ppdc/sample.c:152
 msgid "PRC32K Oversize"
 msgstr "PRC32K Extragrande"
 
-#: ppdc/sample.c:153
 msgid "PRC32K Oversize Long Edge"
 msgstr "PRC32K Extragrande lado largo"
 
-#: cups/snmp.c:966
 msgid "Packet does not contain a Get-Response-PDU"
 msgstr "El paquete no contiene un Get-Response-PDU"
 
-#: cups/snmp.c:945
 msgid "Packet does not start with SEQUENCE"
 msgstr "El paquete no empieza por SEQUENCE"
 
-#: cups/localize.c:293
 msgid "Paper jam."
 msgstr "Atasco de papel."
 
-#: cups/localize.c:310
 msgid "Paper tray is almost empty."
 msgstr "La bandeja de papel está casi vacía."
 
-#: cups/localize.c:312
 msgid "Paper tray is empty."
 msgstr "La bandeja de papel está vacía."
 
-#: cups/localize.c:308
 msgid "Paper tray is missing."
 msgstr "No se encuentra la bandeja de papel."
 
-#: ppdc/sample.c:355
 msgid "ParamCustominCutInterval"
 msgstr "ParamCustominCutInterval"
 
-#: ppdc/sample.c:353
 msgid "ParamCustominTearInterval"
 msgstr "ParamCustominTearInterval"
 
-#: cups/auth.c:195 cups/auth.c:362
 #, c-format
 msgid "Password for %s on %s? "
 msgstr "¿Contraseña de %s en %s? "
 
-#: systemv/cupsaddsmb.c:252
 #, c-format
 msgid "Password for %s required to access %s via SAMBA: "
 msgstr "Se requiere la contraseña de %s para acceder a %s vía SAMBA: "
 
-#: cgi-bin/classes.c:159
 msgid "Pause Class"
 msgstr "Pausar clase"
 
-#: cgi-bin/printers.c:162
 msgid "Pause Printer"
 msgstr "Pausar impresora"
 
-#: ppdc/sample.c:443
 msgid "Peel-Off"
 msgstr "Despegar"
 
-#: ppdc/sample.c:160
 msgid "Photo"
 msgstr "Foto"
 
-#: ppdc/sample.c:161
 msgid "Photo Labels"
 msgstr "Foto pequeña"
 
-#: ppdc/sample.c:281
 msgid "Plain Paper"
 msgstr "Papel normal"
 
-#: cgi-bin/admin.c:3279 cgi-bin/admin.c:3560
 msgid "Policies"
 msgstr "Reglas"
 
-#: cgi-bin/admin.c:3286 cgi-bin/admin.c:3629 cgi-bin/admin.c:3642
 msgid "Port Monitor"
 msgstr "Monitor de puerto"
 
-#: ppdc/sample.c:270
 msgid "PostScript Printer"
 msgstr "Impresora PostScript"
 
-#: ppdc/sample.c:147
 msgid "Postcard"
 msgstr "Postal"
 
-#: ppdc/sample.c:71
 msgid "Postcard Double "
 msgstr "Postal doble "
 
-#: ppdc/sample.c:72
 msgid "Postcard Double Long Edge"
 msgstr "Postal doble lado largo"
 
-#: ppdc/sample.c:148
 msgid "Postcard Long Edge"
 msgstr "Postal lado largo"
 
-#: backend/ipp.c:961 backend/ipp.c:969
 msgid "Preparing to print."
 msgstr "Preparando la impresión."
 
-#: ppdc/sample.c:290
 msgid "Print Density"
 msgstr "Densidad de impresión"
 
-#: cups/notify.c:82
 msgid "Print Job:"
 msgstr "Imprimir trabajo:"
 
-#: ppdc/sample.c:335
 msgid "Print Mode"
 msgstr "Modo de impresión"
 
-#: ppdc/sample.c:378
 msgid "Print Rate"
 msgstr "Tasa de impresión"
 
-#: cgi-bin/printers.c:171
 msgid "Print Self-Test Page"
 msgstr "Imprimir página de auto-prueba"
 
-#: ppdc/sample.c:322
 msgid "Print Speed"
 msgstr "Velocidad de impresión"
 
-#: cgi-bin/ipp-var.c:777
 msgid "Print Test Page"
 msgstr "Imprimir página de prueba"
 
-#: ppdc/sample.c:351
 msgid "Print and Cut"
 msgstr "Imprimir y cortar"
 
-#: ppdc/sample.c:339
 msgid "Print and Tear"
 msgstr "Imprimir y romper"
 
-#: backend/socket.c:429 backend/usb-unix.c:184
 msgid "Print file sent."
 msgstr "Archivo de impresión enviado."
 
-#: backend/ipp.c:2172
 msgid "Print job canceled at printer."
 msgstr "Trabajo de impresión cancelado en la impresora."
 
-#: backend/ipp.c:2164
 msgid "Print job too large."
 msgstr "Trabajo de impresión demasiado grande."
 
-#: backend/ipp.c:1642
 msgid "Print job was not accepted."
 msgstr "No se acepta el trabajo de impresión."
 
-#: cgi-bin/ipp-var.c:1027
 msgid "Printer Added"
 msgstr "Impresora añadida"
 
-#: ppdc/sample.c:255
 msgid "Printer Default"
 msgstr "Predeterminado de la impresora"
 
-#: cgi-bin/ipp-var.c:1031
 msgid "Printer Deleted"
 msgstr "Impresora borrada"
 
-#: cgi-bin/ipp-var.c:1029
 msgid "Printer Modified"
 msgstr "Impresora modificada"
 
-#: cgi-bin/ipp-var.c:1025
 msgid "Printer Paused"
 msgstr "Impresora en pausa"
 
-#: ppdc/sample.c:289
 msgid "Printer Settings"
 msgstr "Configuración de la impresora"
 
-#: backend/ipp.c:2167
 msgid "Printer cannot print supplied content."
 msgstr "La impresora no puede imprimir el contenido suministrado."
 
-#: backend/ipp.c:2170
 msgid "Printer cannot print with supplied options."
 msgstr "La impresora no puede imprimir con las opciones suministradas."
 
-#: cups/notify.c:126
 msgid "Printer:"
 msgstr "Impresora:"
 
-#: cgi-bin/printers.c:196 cgi-bin/printers.c:324
 msgid "Printers"
 msgstr "Impresoras"
 
-#: filter/rastertoepson.c:1078 filter/rastertohp.c:806
-#: filter/rastertolabel.c:1235
 #, c-format
 msgid "Printing page %d, %u%% complete."
 msgstr "Imprimiendo página %d, %u%% completado."
 
-#: ppdc/sample.c:155
 msgid "Quarto"
 msgstr "Quarto"
 
-#: scheduler/ipp.c:1485 scheduler/ipp.c:10567
 msgid "Quota limit reached."
 msgstr "Se ha alcanzado el límite de cuota."
 
-#: berkeley/lpq.c:490
 msgid "Rank    Owner   Job     File(s)                         Total Size"
 msgstr "Rango  Propiet. Trabajo Archivo(s)                      Tamaño total"
 
-#: cgi-bin/classes.c:163 cgi-bin/printers.c:166
 msgid "Reject Jobs"
 msgstr "Rechazar trabajos"
 
-#: backend/lpd.c:1024 backend/lpd.c:1156
 #, c-format
 msgid "Remote host did not accept control file (%d)."
 msgstr "El equipo remoto no ha aceptado el archivo de control (%d)."
 
-#: backend/lpd.c:1109
 #, c-format
 msgid "Remote host did not accept data file (%d)."
 msgstr "El equipo remoto no ha aceptado el archivo de datos (%d)."
 
-#: ppdc/sample.c:423
 msgid "Reprint After Error"
 msgstr "Volver a imprimir tras un error"
 
-#: cups/http-support.c:1375
 msgid "Request Entity Too Large"
 msgstr "La entidad requerida es demasiado larga"
 
-#: cups/ppd.c:755 cups/ppd.c:1321 ppdc/sample.c:231
 msgid "Resolution"
 msgstr "Resolución"
 
-#: cgi-bin/classes.c:157
 msgid "Resume Class"
 msgstr "Reanudar clase"
 
-#: cgi-bin/printers.c:159
 msgid "Resume Printer"
 msgstr "Reanudar impresora"
 
-#: ppdc/sample.c:165
 msgid "Return Address"
 msgstr "Remite"
 
-#: ppdc/sample.c:444
 msgid "Rewind"
 msgstr "Rebobinar"
 
-#: cups/adminutil.c:2041
 #, c-format
 msgid "Running command: %s %s -N -A %s -c '%s'"
 msgstr "Ejecutando comando: %s %s -N -A %s -c '%s'"
 
-#: cups/snmp.c:947
 msgid "SEQUENCE uses indefinite length"
 msgstr "SEQUENCE usa una longitud indefinida"
 
-#: cups/http-support.c:1399
 msgid "SSL/TLS Negotiation Error"
 msgstr "Error en negociación SSL/TLS"
 
-#: cups/http-support.c:1356
 msgid "See Other"
 msgstr "Ver otros"
 
-#: backend/usb-darwin.c:552 backend/usb-libusb.c:346
 msgid "Sending data to printer."
 msgstr "Enviando datos a la impresora."
 
-#: cgi-bin/ipp-var.c:1041
 msgid "Server Restarted"
 msgstr "Servidor reiniciado"
 
-#: cgi-bin/ipp-var.c:1047
 msgid "Server Security Auditing"
 msgstr "Auditoría de seguridad del servidor"
 
-#: cgi-bin/ipp-var.c:1043
 msgid "Server Started"
 msgstr "Servidor iniciado"
 
-#: cgi-bin/ipp-var.c:1045
 msgid "Server Stopped"
 msgstr "Servidor parado"
 
-#: cups/tls-darwin.c:1008 cups/tls-gnutls.c:1024
 msgid "Server credentials not set."
 msgstr "Credenciales del servidor no establecidas."
 
-#: cups/http-support.c:1393
 msgid "Service Unavailable"
 msgstr "Servicio no disponible"
 
-#: cgi-bin/admin.c:2766 cgi-bin/admin.c:2812 cgi-bin/admin.c:2969
-#: cgi-bin/admin.c:2988
 msgid "Set Allowed Users"
 msgstr "Establecer usuarios permitidos"
 
-#: cgi-bin/admin.c:3015
 msgid "Set As Server Default"
 msgstr "Establecer como predeterminada del servidor"
 
-#: cgi-bin/admin.c:3115
 msgid "Set Class Options"
 msgstr "Cambiar opciones clase"
 
-#: cgi-bin/admin.c:3115 cgi-bin/admin.c:3289 cgi-bin/admin.c:3671
 msgid "Set Printer Options"
 msgstr "Cambiar opciones impresora"
 
-#: cgi-bin/admin.c:3841 cgi-bin/admin.c:3885 cgi-bin/admin.c:3903
 msgid "Set Publishing"
 msgstr "Hacer pública"
 
-#: ppdc/sample.c:166
 msgid "Shipping Address"
 msgstr "Dirección de envío"
 
-#: ppdc/sample.c:265
 msgid "Short-Edge (Landscape)"
 msgstr "Lado corto (apaisado)"
 
-#: ppdc/sample.c:283
 msgid "Special Paper"
 msgstr "Papel especial"
 
-#: backend/lpd.c:1065
 #, c-format
 msgid "Spooling job, %.0f%% complete."
 msgstr "Guardando trabajo en cola, %.0f%% completado."
 
-#: ppdc/sample.c:336
 msgid "Standard"
 msgstr "Estándar"
 
 #. TRANSLATORS: Banner/cover sheet before the print job.
-#: cgi-bin/admin.c:3532
 msgid "Starting Banner"
 msgstr "Rótulo inicial"
 
-#: filter/rastertoepson.c:1054 filter/rastertohp.c:782
-#: filter/rastertolabel.c:1211
 #, c-format
 msgid "Starting page %d."
 msgstr "Iniciando página %d."
 
-#: ppdc/sample.c:156
 msgid "Statement"
 msgstr "Declaración"
 
-#: scheduler/ipp.c:3564 scheduler/ipp.c:6590 scheduler/ipp.c:7289
-#: scheduler/ipp.c:8790
 #, c-format
 msgid "Subscription #%d does not exist."
 msgstr "Subscripción #%d no existe."
 
-#: test/ippfind.c:2798
 msgid "Substitutions:"
 msgstr "Substituciones:"
 
-#: ppdc/sample.c:157
 msgid "Super A"
 msgstr "Super A"
 
-#: ppdc/sample.c:158
 msgid "Super B"
 msgstr "Super B (13 x 19  pulg.)"
 
-#: ppdc/sample.c:162
 msgid "Super B/A3"
 msgstr "Super B/A3"
 
-#: cups/http-support.c:1338
 msgid "Switching Protocols"
 msgstr "Protocolos de conexión"
 
-#: ppdc/sample.c:159
 msgid "Tabloid"
 msgstr "Tabloide"
 
-#: ppdc/sample.c:45
 msgid "Tabloid Oversize"
 msgstr "Tabloide Extragrande"
 
-#: ppdc/sample.c:46
 msgid "Tabloid Oversize Long Edge"
 msgstr "Tabloide Extragrande lado largo"
 
-#: ppdc/sample.c:337
 msgid "Tear"
 msgstr "Pestaña"
 
-#: ppdc/sample.c:442
 msgid "Tear-Off"
 msgstr "Pestaña desprendible"
 
-#: ppdc/sample.c:383
 msgid "Tear-Off Adjust Position"
 msgstr "Ajuste de posición de la pestaña desprendible"
 
-#: scheduler/ipp.c:1321
 #, c-format
 msgid "The \"%s\" attribute is required for print jobs."
 msgstr "Se necesita el atributo \"%s\" para los trabajos de impresión."
 
-#: scheduler/ipp.c:6250 scheduler/ipp.c:6330 scheduler/ipp.c:6343
-#: scheduler/ipp.c:6355 scheduler/ipp.c:6370
 #, c-format
 msgid "The %s attribute cannot be provided with job-ids."
 msgstr "El atributo %s no puede ser usado con jobs-ids."
 
-#: scheduler/ipp.c:1297
 #, c-format
 msgid ""
-"The '%s' Job Description attribute cannot be supplied in a job creation "
-"request."
+"The '%s' Job Status attribute cannot be supplied in a job creation request."
 msgstr ""
-"El atributo de descripción de trabajo '%s' no puede ser suministrado en una "
-"solicitud de creación de trabajo."
 
-#: scheduler/ipp.c:5183
 #, c-format
 msgid ""
 "The '%s' operation attribute cannot be supplied in a Create-Job request."
@@ -5681,22 +4384,17 @@ msgstr ""
 "El atributo de operación '%s' no puede ser suministrado en una petición "
 "Create-Job."
 
-#: scheduler/ipp.c:6820
 #, c-format
 msgid "The PPD file \"%s\" could not be found."
 msgstr "No se ha podido encontrar el archivo PPD \"%s\"."
 
-#: scheduler/ipp.c:6807
 #, c-format
 msgid "The PPD file \"%s\" could not be opened: %s"
 msgstr "No se ha podido abrir el archivo PPD \"%s\": %s"
 
-#: filter/rastertoepson.c:1023 filter/rastertohp.c:753
-#: filter/rastertolabel.c:1175
 msgid "The PPD file could not be opened."
 msgstr "No se ha podido abrir el archivo PPD."
 
-#: cgi-bin/admin.c:727
 msgid ""
 "The class name may only contain up to 127 printable characters and may not "
 "contain spaces, slashes (/), or the pound sign (#)."
@@ -5704,103 +4402,77 @@ msgstr ""
 "El nombre de la clase sólo puede contener hasta 127 caracteres imprimibles y "
 "no puede contener espacios, barras (/), o la almohadilla (#)."
 
-#: cups/localize.c:338
 msgid "The developer unit needs to be replaced."
 msgstr "La unidad de revelado debe ser reemplazada."
 
-#: cups/localize.c:336
 msgid "The developer unit will need to be replaced soon."
 msgstr "La unidad de revelado necesitará ser cambiada pronto."
 
-#: cups/localize.c:328
 msgid "The fuser's temperature is high."
 msgstr "Temperatura del fusor alta."
 
-#: cups/localize.c:330
 msgid "The fuser's temperature is low."
 msgstr "Temperatura del fusor baja."
 
-#: scheduler/ipp.c:2088
 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."
 
-#: scheduler/ipp.c:2071 scheduler/ipp.c:5499
 #, 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)."
 
-#: cups/localize.c:334
 msgid "The optical photoconductor needs to be replaced."
 msgstr "El fotoconductor óptico necesita ser cambiado."
 
-#: cups/localize.c:332
 msgid "The optical photoconductor will need to be replaced soon."
 msgstr "El fotoconductor óptico necesitará ser cambiado pronto."
 
-#: backend/ipp.c:981
 msgid "The printer configuration is incorrect or the printer no longer exists."
 msgstr ""
 "La configuración de la impresora es incorrecta o la impresora ya no existe."
 
-#: backend/lpd.c:627 backend/lpd.c:1017 backend/lpd.c:1099 backend/lpd.c:1149
 msgid "The printer did not respond."
 msgstr "La impresora no respondió."
 
-#: backend/ipp.c:825 backend/ipp.c:944 backend/ipp.c:1058 backend/ipp.c:1449
-#: backend/ipp.c:1614 backend/lpd.c:836 backend/socket.c:379
-#: backend/usb-unix.c:124 backend/usb-unix.c:414 backend/usb-unix.c:497
 msgid "The printer is in use."
 msgstr "La impresora está en uso."
 
-#: cups/localize.c:320
 msgid "The printer is low on ink."
 msgstr "La impresora tiene poca tinta."
 
-#: cups/localize.c:298
 msgid "The printer is low on toner."
 msgstr "La impresora tiene poco toner."
 
-#: backend/runloop.c:243 backend/runloop.c:363 cups/localize.c:296
 msgid "The printer is not connected."
 msgstr "La impresora no está conectada."
 
-#: backend/ipp.c:803 backend/ipp.c:836 backend/ipp.c:940 backend/lpd.c:815
-#: backend/lpd.c:856 backend/socket.c:358 backend/socket.c:391
 msgid "The printer is not responding."
 msgstr "La impresora no responde."
 
-#: backend/runloop.c:385
 msgid "The printer is now connected."
 msgstr "La impresora está ahora conectada."
 
-#: backend/usb-darwin.c:1300
 msgid "The printer is now online."
 msgstr "La impresora está ahora en línea."
 
-#: backend/usb-darwin.c:1321
 msgid "The printer is offline."
 msgstr "La impresora está fuera de línea."
 
-#: backend/ipp.c:818 backend/lpd.c:829 backend/socket.c:372
 msgid "The printer is unreachable at this time."
 msgstr "La impresora es inalcanzable en este momento."
 
-#: cups/localize.c:322
 msgid "The printer may be out of ink."
 msgstr "La impresora puede que no tenga tinta."
 
-#: cups/localize.c:300
 msgid "The printer may be out of toner."
 msgstr "La impresora puede que esté sin toner."
 
-#: backend/ipp.c:812 backend/lpd.c:823 backend/socket.c:366
 msgid "The printer may not exist or is unavailable at this time."
 msgstr "La impresora puede no existir o no estar disponible en este momento."
 
-#: cgi-bin/admin.c:909
 msgid ""
 "The printer name may only contain up to 127 printable characters and may not "
 "contain spaces, slashes (/), or the pound sign (#)."
@@ -5808,65 +4480,46 @@ msgstr ""
 "El nombre de la impresora sólo puede contener hasta 127 caracteres "
 "imprimibles y no puede contener espacios, barras (/), o la almohadilla (#)."
 
-#: scheduler/ipp.c:788 scheduler/ipp.c:1048 scheduler/ipp.c:3205
-#: scheduler/ipp.c:3384 scheduler/ipp.c:5166 scheduler/ipp.c:5333
-#: scheduler/ipp.c:5647 scheduler/ipp.c:6216 scheduler/ipp.c:7025
-#: scheduler/ipp.c:7081 scheduler/ipp.c:7395 scheduler/ipp.c:7661
-#: scheduler/ipp.c:7750 scheduler/ipp.c:7783 scheduler/ipp.c:8106
-#: scheduler/ipp.c:8500 scheduler/ipp.c:8582 scheduler/ipp.c:9747
-#: scheduler/ipp.c:10199 scheduler/ipp.c:10530 scheduler/ipp.c:10612
-#: scheduler/ipp.c:10987
 msgid "The printer or class does not exist."
 msgstr "La impresora o clase no existe."
 
-#: scheduler/ipp.c:1234
 msgid "The printer or class is not shared."
 msgstr "La impresora o clase no está compartida."
 
-#: cups/localize.c:302
 msgid "The printer's cover is open."
 msgstr "La tapa de la impresora está abierta."
 
-#: cups/localize.c:306
 msgid "The printer's door is open."
 msgstr "La puerta de la impresora está abierta."
 
-#: cups/localize.c:304
 msgid "The printer's interlock is open."
 msgstr "El dispositivo de seguridad de la impresora está abierto."
 
-#: cups/localize.c:324
 msgid "The printer's waste bin is almost full."
 msgstr "Recipiente de residuos de la impresora está casi lleno."
 
-#: cups/localize.c:326
 msgid "The printer's waste bin is full."
 msgstr "Recipiente de residuos de la impresora está lleno."
 
-#: scheduler/ipp.c:894 scheduler/ipp.c:2252
 #, c-format
 msgid "The printer-uri \"%s\" contains invalid characters."
 msgstr "El printer-uri \"%s\" contiene caracteres no válidos."
 
-#: scheduler/ipp.c:3182
 msgid "The printer-uri attribute is required."
 msgstr "Se necesita el atributo printer-uri."
 
-#: scheduler/ipp.c:878
 msgid ""
 "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"."
 msgstr ""
 "El printer-uri debe ser de la forma \"ipp://NOMBRE_EQUIPO/classes/"
 "NOMBRE_CLASE\"."
 
-#: scheduler/ipp.c:2236
 msgid ""
 "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"."
 msgstr ""
 "El printer-uri debe ser de la forma \"ipp://NOMBRE_EQUIPO/printers/"
 "NOMBRE_IMPRESORA\"."
 
-#: cgi-bin/admin.c:452
 msgid ""
 "The subscription name may not contain spaces, slashes (/), question marks "
 "(?), or the pound sign (#)."
@@ -5874,7 +4527,6 @@ msgstr ""
 "El nombre de la subscripción no puede contener espacios, barras (/), signos "
 "de interrogación (?), o la almohadilla (#)."
 
-#: scheduler/client.c:2232
 msgid ""
 "The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to "
 "enable it."
@@ -5882,292 +4534,227 @@ msgstr ""
 "La interfaz web está desactivada en este momento. Ejecute \"cupsctl "
 "WebInterface=yes\" para activarla."
 
-#: scheduler/ipp.c:6314
 #, c-format
 msgid "The which-jobs value \"%s\" is not supported."
 msgstr "No se admite el uso del valor which-jobs \"%s\"."
 
-#: scheduler/ipp.c:5577
 msgid "There are too many subscriptions."
 msgstr "Hay demasiadas subscripciones."
 
-#: backend/usb-darwin.c:386 backend/usb-darwin.c:445 backend/usb-darwin.c:514
-#: backend/usb-darwin.c:535 backend/usb-libusb.c:271 backend/usb-libusb.c:325
 msgid "There was an unrecoverable USB error."
 msgstr "Ha habido un error USB irrecuperable."
 
-#: ppdc/sample.c:430
 msgid "Thermal Transfer Media"
 msgstr "Soporte de transferencia térmica"
 
-#: scheduler/ipp.c:1479
 msgid "Too many active jobs."
 msgstr "Demasiados trabajos activos."
 
-#: scheduler/ipp.c:1373
 #, c-format
 msgid "Too many job-sheets values (%d > 2)."
 msgstr "Demasiados valores de job-sheets (%d > 2)."
 
-#: scheduler/ipp.c:2537
 #, c-format
 msgid "Too many printer-state-reasons values (%d > %d)."
 msgstr "Demasiados valores printer-state-reasons (%d > %d)."
 
-#: ppdc/sample.c:284
 msgid "Transparency"
 msgstr "Transparencia"
 
-#: ppdc/sample.c:279
 msgid "Tray"
 msgstr "Bandeja"
 
-#: ppdc/sample.c:256
 msgid "Tray 1"
 msgstr "Bandeja 1"
 
-#: ppdc/sample.c:257
 msgid "Tray 2"
 msgstr "Bandeja 2"
 
-#: ppdc/sample.c:258
 msgid "Tray 3"
 msgstr "Bandeja 3"
 
-#: ppdc/sample.c:259
 msgid "Tray 4"
 msgstr "Bandeja 4"
 
-#: cups/http-support.c:1378
 msgid "URI Too Long"
 msgstr "URI demasiado largo"
 
-#: cups/http-support.c:1453
 msgid "URI too large"
 msgstr "URI demasiado grande"
 
-#: ppdc/sample.c:138
 msgid "US Ledger"
 msgstr "Libro Mayor, 17 x 11 pulg."
 
-#: ppdc/sample.c:139
 msgid "US Legal"
 msgstr "Legal EE.UU."
 
-#: ppdc/sample.c:140
 msgid "US Legal Oversize"
 msgstr "Legal EE.UU. Extragrande"
 
-#: ppdc/sample.c:141
 msgid "US Letter"
 msgstr "Carta EE.UU."
 
-#: ppdc/sample.c:142
 msgid "US Letter Long Edge"
 msgstr "Carta EE.UU. lado largo"
 
-#: ppdc/sample.c:143
 msgid "US Letter Oversize"
 msgstr "Carta EE.UU. Extragrande"
 
-#: ppdc/sample.c:144
 msgid "US Letter Oversize Long Edge"
 msgstr "Carta EE.UU. Extragrande lado largo"
 
-#: ppdc/sample.c:145
 msgid "US Letter Small"
 msgstr "Carta EE.UU. Pequeña"
 
-#: cgi-bin/admin.c:1939 cgi-bin/admin.c:1952 cgi-bin/admin.c:1976
 msgid "Unable to access cupsd.conf file"
 msgstr "No se ha podido acceder al archivo cupsd.conf"
 
-#: cgi-bin/help.c:133
 msgid "Unable to access help file."
 msgstr "No se ha podido acceder al archivo de ayuda."
 
-#: cgi-bin/admin.c:504
 msgid "Unable to add RSS subscription"
 msgstr "No se ha podido añadir la subscripción RSS"
 
-#: cgi-bin/admin.c:792
 msgid "Unable to add class"
 msgstr "No se ha podido añadir la clase"
 
-#: backend/ipp.c:1796
 msgid "Unable to add document to print job."
 msgstr "No se ha podido añadir el documento al trabajo de impresión."
 
-#: scheduler/ipp.c:1537
 #, c-format
 msgid "Unable to add job for destination \"%s\"."
 msgstr "No se ha podido añadir el trabajo para el destino \"%s\"."
 
-#: cgi-bin/admin.c:1037 cgi-bin/admin.c:1399
 msgid "Unable to add printer"
 msgstr "No se ha podido añadir la impresora"
 
-#: scheduler/ipp.c:1164
 msgid "Unable to allocate memory for file types."
 msgstr "No se ha podido reservar memoria para tipos de archivo."
 
-#: filter/pstops.c:418
 msgid "Unable to allocate memory for page info"
 msgstr "No se ha podido reservar memoria para la información de página."
 
-#: filter/pstops.c:412
 msgid "Unable to allocate memory for pages array"
 msgstr "No se ha podido reservar memoria para la secuencia de páginas"
 
-#: cgi-bin/admin.c:1505
 msgid "Unable to cancel RSS subscription"
 msgstr "No se ha podido cancelar la subscripción RSS"
 
-#: backend/ipp.c:2077 backend/ipp.c:2512
 msgid "Unable to cancel print job."
 msgstr "No se ha podido cancelar el trabajo de impresión."
 
-#: cgi-bin/admin.c:2970
 msgid "Unable to change printer"
 msgstr "No se ha podido cambiar la impresora"
 
-#: cgi-bin/admin.c:3886
 msgid "Unable to change printer-is-shared attribute"
 msgstr "No se ha podido cambiar el atributo printer-is-shared"
 
-#: cgi-bin/admin.c:1637 cgi-bin/admin.c:1779
 msgid "Unable to change server settings"
 msgstr "No se ha podido cambiar la configuración del servidor"
 
-#: cups/ipp.c:5389
 #, c-format
 msgid "Unable to compile mimeMediaType regular expression: %s."
 msgstr "No se ha podido compilar la expresión regular mimeMediaType: %s."
 
-#: cups/ipp.c:5335
 #, c-format
 msgid "Unable to compile naturalLanguage regular expression: %s."
 msgstr "No se ha podido compilar la expresión regular naturalLanguage: %s."
 
-#: filter/commandtops.c:407
 msgid "Unable to configure printer options."
 msgstr "No se han podido configurar las opciones de impresión."
 
-#: cups/adminutil.c:900 cups/request.c:1066
 msgid "Unable to connect to host."
 msgstr "No se ha podido conectar al equipo."
 
-#: backend/ipp.c:781 backend/ipp.c:1254 backend/lpd.c:795 backend/socket.c:338
-#: backend/usb-unix.c:110
 msgid "Unable to contact printer, queuing on next printer in class."
 msgstr ""
 "No se ha podido contactar con la impresora; poniendo en cola en la siguiente "
 "impresora de la clase."
 
-#: cups/adminutil.c:715
 #, 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)."
 
-#: cups/adminutil.c:680
 #, 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)."
 
-#: cups/adminutil.c:511
 #, 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)."
 
-#: scheduler/ipp.c:2657
 #, c-format
 msgid "Unable to copy PPD file - %s"
 msgstr "No se ha podido copiar el archivo PPD - %s"
 
-#: scheduler/ipp.c:2712
 msgid "Unable to copy PPD file."
 msgstr "No se ha podido copiar el archivo PPD."
 
-#: cups/adminutil.c:476
 #, 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)."
 
-#: cups/adminutil.c:599
 #, 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)."
 
-#: scheduler/ipp.c:2634
 #, c-format
 msgid "Unable to copy interface script - %s"
 msgstr "No se ha podido copiar el script de interfaz - %s"
 
-#: cups/util.c:496 cups/util.c:1479
 msgid "Unable to create printer-uri"
 msgstr "No se ha podido crear printer-uri"
 
-#: cups/tls-darwin.c:1116 cups/tls-gnutls.c:1157
 msgid "Unable to create server credentials."
 msgstr "No se han podido crear las credenciales del servidor."
 
-#: cgi-bin/admin.c:1830 cgi-bin/admin.c:1842 scheduler/cupsfilter.c:1290
 msgid "Unable to create temporary file"
 msgstr "No se ha podido crear el archivo temporal"
 
-#: cgi-bin/admin.c:2133
 msgid "Unable to delete class"
 msgstr "No se ha podido borrar la clase"
 
-#: cgi-bin/admin.c:2218
 msgid "Unable to delete printer"
 msgstr "No se ha podido borrar la impresora"
 
-#: cgi-bin/classes.c:252 cgi-bin/printers.c:261
 msgid "Unable to do maintenance command"
 msgstr "No se ha podido realizar el comando de mantenimiento"
 
-#: cgi-bin/admin.c:1954
 msgid "Unable to edit cupsd.conf files larger than 1MB"
 msgstr "No se pueden editar archivos cupsd.conf mayores de 1MB"
 
-#: cups/tls-darwin.c:1284
 msgid ""
 "Unable to establish a secure connection to host (certificate chain invalid)."
 msgstr ""
 "No se ha podido establecer una conexión segura con el equipo (cadena "
 "certificado incorrecta)."
 
-#: cups/tls-darwin.c:1274
 msgid ""
 "Unable to establish a secure connection to host (certificate not yet valid)."
 msgstr ""
 "No se ha podido establecer una conexión segura con el equipo (el certificado "
 "aún no es válido)."
 
-#: cups/tls-darwin.c:1269
 msgid "Unable to establish a secure connection to host (expired certificate)."
 msgstr ""
 "No se ha podido establecer una conexión segura con el equipo (certificado "
 "caducado)."
 
-#: cups/tls-darwin.c:1279
 msgid "Unable to establish a secure connection to host (host name mismatch)."
 msgstr ""
 "No se ha podido establecer una conexión segura con el equipo (el nombre de "
 "equipo no coincide)."
 
-#: cups/tls-darwin.c:1289
 msgid ""
 "Unable to establish a secure connection to host (peer dropped connection "
 "before responding)."
@@ -6175,372 +4762,290 @@ msgstr ""
 "No se ha podido establecer una conexión segura con el equipo (el par cortó "
 "la conexión antes de responder)."
 
-#: cups/tls-darwin.c:1264
 msgid ""
 "Unable to establish a secure connection to host (self-signed certificate)."
 msgstr ""
 "No se ha podido establecer una conexión segura con el equipo (certificado "
 "auto-firmado)."
 
-#: cups/tls-darwin.c:1259
 msgid ""
 "Unable to establish a secure connection to host (untrusted certificate)."
 msgstr ""
 "No se ha podido establecer una conexión segura con el equipo (certificado no "
 "seguro)."
 
-#: cups/tls-darwin.c:1316 cups/tls-sspi.c:1247 cups/tls-sspi.c:1264
 msgid "Unable to establish a secure connection to host."
 msgstr "No se ha podido establecer una conexión segura al equipo."
 
-#: cgi-bin/ipp-var.c:350
 msgid "Unable to find destination for job"
 msgstr "No se ha podido encontrar destino para el trabajo"
 
-#: cups/http-support.c:1949
 msgid "Unable to find printer."
 msgstr "No se ha podido encontrar la impresora."
 
-#: cups/tls-darwin.c:1130
 msgid "Unable to find server credentials."
 msgstr "No se han podido encontrar las credenciales del servidor."
 
-#: backend/ipp.c:3493
 msgid "Unable to get backend exit status."
 msgstr "No se ha podido obtener el estado de salida del programa backend."
 
-#: cgi-bin/classes.c:442
 msgid "Unable to get class list"
 msgstr "No se ha podido obtener la lista de clases"
 
-#: cgi-bin/classes.c:541
 msgid "Unable to get class status"
 msgstr "No se ha podido obtener el estado de la clase"
 
-#: cgi-bin/admin.c:1300
 msgid "Unable to get list of printer drivers"
 msgstr "No se ha podido obtener la lista de controladores de impresora"
 
-#: cgi-bin/admin.c:2820
 msgid "Unable to get printer attributes"
 msgstr "No se han podido obtener los atributos de la impresora"
 
-#: cgi-bin/printers.c:459
 msgid "Unable to get printer list"
 msgstr "No se ha podido obtener la lista de impresoras"
 
-#: cgi-bin/printers.c:561
 msgid "Unable to get printer status"
 msgstr "No se ha podido obtener el estado de la impresora"
 
-#: backend/ipp.c:1005
 msgid "Unable to get printer status."
 msgstr "No se ha podido obtener el estado de la impresora."
 
-#: cups/adminutil.c:554 cups/adminutil.c:758
 #, 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)."
 
-#: cups/adminutil.c:628
 #, 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)."
 
-#: cgi-bin/help.c:92
 msgid "Unable to load help index."
 msgstr "No se ha podido cargar el índice de ayuda."
 
-#: backend/ipp.c:668 backend/lpd.c:426 backend/socket.c:277
 #, c-format
 msgid "Unable to locate printer \"%s\"."
 msgstr "No se ha podido localizar la impresora \"%s\"."
 
-#: backend/dnssd.c:787 backend/ipp.c:336 backend/lpd.c:196
-#: backend/socket.c:163
 msgid "Unable to locate printer."
 msgstr "No se ha podido localizar la impresora."
 
-#: cgi-bin/admin.c:791
 msgid "Unable to modify class"
 msgstr "No se ha podido modificar la clase"
 
-#: cgi-bin/admin.c:1036 cgi-bin/admin.c:1398
 msgid "Unable to modify printer"
 msgstr "No se ha podido modificar la impresora"
 
-#: cgi-bin/ipp-var.c:417 cgi-bin/ipp-var.c:506
 msgid "Unable to move job"
 msgstr "No se ha podido mover el trabajo"
 
-#: cgi-bin/ipp-var.c:419 cgi-bin/ipp-var.c:508
 msgid "Unable to move jobs"
 msgstr "No se han podido mover los trabajos"
 
-#: cgi-bin/admin.c:3166 cups/ppd.c:297
 msgid "Unable to open PPD file"
 msgstr "No se ha podido abrir el archivo PPD"
 
-#: cgi-bin/admin.c:2588
 msgid "Unable to open cupsd.conf file:"
 msgstr "No se ha podido abrir el archivo cupsd.conf:"
 
-#: backend/usb-unix.c:134
 msgid "Unable to open device file"
 msgstr "No se ha podido abrir el archivo de dispositivo"
 
-#: scheduler/ipp.c:5992
 #, c-format
 msgid "Unable to open document #%d in job #%d."
 msgstr "No se ha podido abrir el documento #%d del trabajo #%d."
 
-#: cgi-bin/help.c:364
 msgid "Unable to open help file."
 msgstr "No se ha podido abrir el archivo de ayuda."
 
-#: backend/ipp.c:378 backend/ipp.c:1543 backend/ipp.c:1751 backend/lpd.c:496
-#: backend/socket.c:150 backend/usb.c:237 filter/gziptoany.c:67
-#: filter/pstops.c:267
 msgid "Unable to open print file"
 msgstr "No se ha podido abrir el archivo de impresión"
 
-#: filter/rastertoepson.c:983 filter/rastertohp.c:713
-#: filter/rastertolabel.c:1133
 msgid "Unable to open raster file"
 msgstr "No se ha podido abrir el archivo de trama de datos (raster)"
 
-#: cgi-bin/ipp-var.c:780
 msgid "Unable to print test page"
 msgstr "No se ha podido imprimir la página de prueba"
 
-#: backend/runloop.c:85 backend/runloop.c:314 backend/usb-darwin.c:622
-#: backend/usb-darwin.c:666 backend/usb-libusb.c:416 backend/usb-libusb.c:451
 msgid "Unable to read print data."
 msgstr "No se han podido leer los datos de impresión."
 
-#: cups/dest.c:3445
+msgid "Unable to rename job document file."
+msgstr ""
+
 msgid "Unable to resolve printer-uri."
 msgstr "No se ha podido resolver printer-uri."
 
-#: cups/adminutil.c:2077
 #, c-format
 msgid "Unable to run \"%s\": %s"
 msgstr "No se ha podido ejecutar \"%s\": %s"
 
-#: filter/pstops.c:530
 msgid "Unable to see in file"
 msgstr "No se ha podido mirar en el archivo"
 
-#: cgi-bin/ipp-var.c:583 cgi-bin/ipp-var.c:603
 msgid "Unable to send command to printer driver"
 msgstr "No se ha podido enviar un comando al controlador de la impresora"
 
-#: backend/usb-darwin.c:744 backend/usb-libusb.c:527
 msgid "Unable to send data to printer."
 msgstr "No se han podido enviar datos a la impresora."
 
-#: cups/adminutil.c:810
 #, c-format
 msgid "Unable to set Windows printer driver (%d)."
 msgstr ""
 "No se ha podido configurar el controlador de impresora de Windows (%d)."
 
-#: cgi-bin/admin.c:3787
 msgid "Unable to set options"
 msgstr "No se han podido cambiar las opciones"
 
-#: cgi-bin/admin.c:3057
 msgid "Unable to set server default"
 msgstr "No se ha podido establecer el servidor predeterminado"
 
-#: backend/ipp.c:3352 backend/ipp.c:3429 backend/ipp.c:3437
 msgid "Unable to start backend process."
 msgstr "No se ha podido iniciar el proceso backend."
 
-#: cgi-bin/admin.c:1892
 msgid "Unable to upload cupsd.conf file"
 msgstr "No se ha podido enviar el archivo cupsd.conf"
 
-#: backend/usb-darwin.c:2016 backend/usb-darwin.c:2040
 msgid "Unable to use legacy USB class driver."
 msgstr ""
 "No se ha podido usar el controlador de dispositivo de clase USB obsoleto."
 
-#: backend/runloop.c:114 backend/runloop.c:369
 msgid "Unable to write print data"
 msgstr "No se han podido escribir los datos de impresión"
 
-#: filter/gziptoany.c:86
 #, c-format
 msgid "Unable to write uncompressed print data: %s"
 msgstr "No se han podido escribir los datos de impresión sin comprimir: %s"
 
-#: cups/http-support.c:1366
 msgid "Unauthorized"
 msgstr "No autorizado"
 
-#: cgi-bin/admin.c:3483
 msgid "Units"
 msgstr "Unidades"
 
-#: cups/http-support.c:1406 cups/http-support.c:1490 cups/ppd.c:324
 msgid "Unknown"
 msgstr "Desconocido"
 
-#: filter/pstops.c:2185
 #, c-format
 msgid "Unknown choice \"%s\" for option \"%s\"."
 msgstr "Preferencia \"%s\" desconocida para la opción \"%s\"."
 
-#: backend/ipp.c:520
 #, c-format
 msgid "Unknown encryption option value: \"%s\"."
 msgstr "Valor de opción de cifrado \"%s\" desconocida."
 
-#: backend/lpd.c:342
 #, c-format
 msgid "Unknown file order: \"%s\"."
 msgstr "Orden de archivos \"%s\" desconocido."
 
-#: backend/lpd.c:313
 #, c-format
 msgid "Unknown format character: \"%c\"."
 msgstr "Carácter de formato \"%c\" desconocido."
 
-#: cups/dest-options.c:964
 msgid "Unknown media size name."
 msgstr "Nombre de tamaño de papel desconocido."
 
-#: backend/ipp.c:584
 #, c-format
 msgid "Unknown option \"%s\" with value \"%s\"."
 msgstr "Opción \"%s\" con valor \"%s\" desconocida."
 
-#: filter/pstops.c:2168
 #, c-format
 msgid "Unknown option \"%s\"."
 msgstr "Opción \"%s\" desconocida."
 
-#: backend/lpd.c:328
 #, c-format
 msgid "Unknown print mode: \"%s\"."
 msgstr "Modo de impresión \"%s\" desconocido."
 
-#: scheduler/ipp.c:10401
 #, c-format
 msgid "Unknown printer-error-policy \"%s\"."
 msgstr "printer-error-policy \"%s\" incorrecto."
 
-#: scheduler/ipp.c:10384
 #, c-format
 msgid "Unknown printer-op-policy \"%s\"."
 msgstr "printer-op-policy \"%s\" incorrecto."
 
-#: cups/http.c:2309
 msgid "Unknown request method."
 msgstr "Método de solicitud desconocido."
 
-#: cups/http.c:2329
 msgid "Unknown request version."
 msgstr "Versión de solicitud desconocida."
 
-#: cups/http-support.c:1483
 msgid "Unknown scheme in URI"
 msgstr "Esquema en URI desconocido"
 
-#: cups/http-addrlist.c:737
 msgid "Unknown service name."
 msgstr "Nombre de servicio desconocido."
 
-#: backend/ipp.c:549
 #, c-format
 msgid "Unknown version option value: \"%s\"."
 msgstr "Valor de opción de versión \"%s\" desconocida."
 
-#: scheduler/ipp.c:10858
 #, c-format
 msgid "Unsupported 'compression' value \"%s\"."
 msgstr "Valor 'compression' \"%s\" no implementado."
 
-#: scheduler/ipp.c:10888
 #, c-format
 msgid "Unsupported 'document-format' value \"%s\"."
 msgstr "Valor 'document-format' \"%s\" no implementado."
 
-#: scheduler/ipp.c:10963
 msgid "Unsupported 'job-name' value."
 msgstr "Valor 'job-name' no implementado."
 
-#: scheduler/ipp.c:329
 #, c-format
 msgid "Unsupported character set \"%s\"."
 msgstr "Juego de caracteres \"%s\" no implementado."
 
-#: scheduler/ipp.c:8072 scheduler/ipp.c:9307
 #, c-format
 msgid "Unsupported compression \"%s\"."
 msgstr "Compresión \"%s\" no implementada."
 
-#: scheduler/ipp.c:8206 scheduler/ipp.c:9457
 #, c-format
 msgid "Unsupported document-format \"%s\"."
 msgstr "document-format \"%s\" no implementado."
 
-#: scheduler/ipp.c:9440
 #, c-format
 msgid "Unsupported document-format \"%s/%s\"."
 msgstr "document-format \"%s/%s\" no implementado."
 
-#: scheduler/ipp.c:1339
 #, c-format
 msgid "Unsupported format \"%s\"."
 msgstr "Formato \"%s\" no implementado."
 
-#: scheduler/ipp.c:1437
 msgid "Unsupported margins."
 msgstr "Márgenes no implementados."
 
-#: cups/pwg-media.c:549
 msgid "Unsupported media value."
 msgstr "Valor del medio no implementado."
 
-#: filter/pstops.c:2450
 #, c-format
 msgid "Unsupported number-up value %d, using number-up=1."
 msgstr ""
 "Valor de number-up (páginas por hoja) %d no implementado; usando number-up=1."
 
-#: filter/pstops.c:2484
 #, c-format
 msgid "Unsupported number-up-layout value %s, using number-up-layout=lrtb."
 msgstr ""
 "Valor de number-up-layout (disposición de páginas por hoja) %s no "
 "implementado; usando number-up-layout=lrtb."
 
-#: filter/pstops.c:2535
 #, c-format
 msgid "Unsupported page-border value %s, using page-border=none."
 msgstr ""
 "Valor de page-border (borde de página) %s no implementado; usando page-"
 "border=none (ninguno)."
 
-#: filter/rastertopwg.c:139 filter/rastertopwg.c:147 filter/rastertopwg.c:156
 msgid "Unsupported raster data."
 msgstr "Trama de datos no implementados."
 
-#: cups/snmp.c:1064
 msgid "Unsupported value type"
 msgstr "Tipo de valor no implementado"
 
-#: cups/http-support.c:1381
 msgid "Upgrade Required"
 msgstr "Se requiere actualización"
 
-#: systemv/lpadmin.c:654
 msgid ""
 "Usage:\n"
 "\n"
@@ -6560,42 +5065,31 @@ msgstr ""
 "                         [-P archivo_ppd] [-o nombre=valor]\n"
 "                         [-u allow:usuario,usuario] [-u deny:usuario,usuario]"
 
-#: backend/dnssd.c:227 backend/ipp.c:325 backend/lpd.c:183
-#: backend/socket.c:127 backend/usb.c:183 filter/commandtops.c:63
-#: filter/gziptoany.c:46 filter/pstops.c:231 monitor/bcp.c:56
-#: monitor/tbcp.c:55
 #, c-format
 msgid "Usage: %s job-id user title copies options [file]"
 msgstr "Uso: %s job-id usuario título copias opciones [archivo]"
 
-#: systemv/cupsaddsmb.c:281
 msgid "Usage: cupsaddsmb [options] printer1 ... printerN"
 msgstr "Uso: cupsaddsmb [opciones] impresora1 ... impresoraN"
 
-#: systemv/cupsctl.c:200
 msgid "Usage: cupsctl [options] [param=value ... paramN=valueN]"
 msgstr "Uso: cupsctl [opciones] [param=valor ... paramN=valorN]"
 
-#: scheduler/main.c:2145
 msgid "Usage: cupsd [options]"
 msgstr "Uso: cupsd [opciones]"
 
-#: scheduler/cupsfilter.c:1481
 msgid "Usage: cupsfilter [ options ] [ -- ] filename"
 msgstr "Uso: cupsfilter [ opciones ] [ -- ] nombre_archivo"
 
-#: systemv/cupstestdsc.c:425
 msgid "Usage: cupstestdsc [options] filename.ps [... filename.ps]"
 msgstr "Uso: cupstestdsc [opciones] nombre_archivo.ps [... nombre_archivo.ps]"
 
-#: systemv/cupstestppd.c:3813
 msgid ""
 "Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]"
 msgstr ""
-"Uso: cupstestppd [opciones] nombre_archivo1.ppd[.gz] [... nombre_archivoN."
-"ppd[.gz]]"
+"Uso: cupstestppd [opciones] nombre_archivo1.ppd[.gz] [... nombre_archivoN.ppd"
+"[.gz]]"
 
-#: test/ippdiscover.c:814
 msgid ""
 "Usage: ippdiscover [options] -a\n"
 "       ippdiscover [options] \"service name\"\n"
@@ -6607,7 +5101,6 @@ msgstr ""
 "\n"
 "Opciones:"
 
-#: test/ippfind.c:2738
 msgid ""
 "Usage: ippfind [options] regtype[,subtype][.domain.] ... [expression]\n"
 "       ippfind [options] name[.regtype[.domain.]] ... [expression]\n"
@@ -6619,15 +5112,12 @@ msgstr ""
 "       ippfind --help\n"
 "       ippfind --version"
 
-#: test/ipptool.c:4803
 msgid "Usage: ipptool [options] URI filename [ ... filenameN ]"
 msgstr "Uso: ipptool [opciones] URI nombre_archivo [ ... nombre_archivoN ]"
 
-#: systemv/lpmove.c:125
 msgid "Usage: lpmove job/src dest"
 msgstr "Uso: lpmove trabajo/fuente destino"
 
-#: systemv/lpoptions.c:539
 msgid ""
 "Usage: lpoptions [-h server] [-E] -d printer\n"
 "       lpoptions [-h server] [-E] [-p printer] -l\n"
@@ -6639,80 +5129,63 @@ msgstr ""
 "     lpoptions [-h servidor] [-E] -p impresora -o opción[=valor] ...\n"
 "     lpoptions [-h servidor] [-E] -x impresora"
 
-#: berkeley/lpq.c:637
 msgid ""
 "Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]"
 msgstr ""
 "Uso: lpq [-P dest] [-U nombre_usuario] [-h nombre_equipo[:puerto]] [-l] "
 "[+intervalo]"
 
-#: ppdc/ppdc.cxx:430
 msgid "Usage: ppdc [options] filename.drv [ ... filenameN.drv ]"
 msgstr "Uso: ppdc [opciones] nombre_archivo.drv [ ... nombre_archivoN.drv ]"
 
-#: ppdc/ppdhtml.cxx:172
 msgid "Usage: ppdhtml [options] filename.drv >filename.html"
 msgstr "Uso: ppdhtml [opciones] nombre_archivo.drv >nombre_archivo.html"
 
-#: ppdc/ppdi.cxx:128
 msgid "Usage: ppdi [options] filename.ppd [ ... filenameN.ppd ]"
 msgstr "Uso: ppdi [opciones] nombre_archivo.ppd [ ... nombre_archivoN.ppd ]"
 
-#: ppdc/ppdmerge.cxx:361
 msgid "Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]"
 msgstr ""
 "Uso: ppdmerge [opciones] nombre_archivo.ppd [ ... nombre_archivoN.ppd ]"
 
-#: ppdc/ppdpo.cxx:252
 msgid ""
 "Usage: ppdpo [options] -o filename.po filename.drv [ ... filenameN.drv ]"
 msgstr ""
 "Uso: ppdpo [opciones] -o nombre_archivo.po nombre_archivo.drv [ ... "
 "nombre_archivoN.drv ]"
 
-#: backend/snmp.c:192
 msgid "Usage: snmp [host-or-ip-address]"
 msgstr "Uso: snmp [equipo-o-dirección-ip]"
 
-#: cups/snmp.c:1016
 msgid "Value uses indefinite length"
 msgstr "Valor usa una longitud indefinida"
 
-#: cups/snmp.c:1001
 msgid "VarBind uses indefinite length"
 msgstr "VarBind usa una longitud indefinida"
 
-#: cups/snmp.c:951
 msgid "Version uses indefinite length"
 msgstr "Versión usa una longitud indefinida"
 
-#: backend/ipp.c:1913
 msgid "Waiting for job to complete."
 msgstr "Esperando a que finalice el trabajo."
 
-#: backend/usb-darwin.c:469 backend/usb-libusb.c:223
 msgid "Waiting for printer to become available."
 msgstr "Esperando a que la impresora esté disponible."
 
-#: backend/socket.c:440
 msgid "Waiting for printer to finish."
 msgstr "Esperando a que finalice la impresora."
 
-#: cups/adminutil.c:782
 msgid "Warning, no Windows 2000 printer drivers are installed."
 msgstr ""
 "Advertencia, no está instalado ningún controlador de impresora de Windows "
 "2000."
 
-#: cups/http-support.c:1402
 msgid "Web Interface is Disabled"
 msgstr "La interfaz web está desactivada."
 
-#: cups/ppd.c:1902
 msgid "Yes"
 msgstr "Si"
 
-#: scheduler/client.c:2219
 #, c-format
 msgid ""
 "You must access this page using the URL <A HREF=\"https://%s:%d%s\">https://"
@@ -6721,389 +5194,300 @@ msgstr ""
 "Debe acceder a esta página usando el URL <A HREF=\"https://%s:%d%s\">https://"
 "%s:%d%s</A>."
 
-#: ppdc/sample.c:434
 msgid "ZPL Label Printer"
 msgstr "Impresora de etiquetas ZPL"
 
-#: ppdc/sample.c:357
 msgid "Zebra"
 msgstr "Zebra"
 
-#: cups/notify.c:102
 msgid "aborted"
 msgstr "cancelado"
 
-#: cups/notify.c:99
 msgid "canceled"
 msgstr "cancelado"
 
-#: cups/notify.c:105
 msgid "completed"
 msgstr "completado"
 
-#: scheduler/ipp.c:5864
 msgid "cups-deviced failed to execute."
 msgstr "Ha fallado al ejecutarse cups-deviced."
 
-#: scheduler/ipp.c:6743 scheduler/ipp.c:6992
 msgid "cups-driverd failed to execute."
 msgstr "Ha fallado al ejecutarse cups-driverd."
 
-#: systemv/cupsaddsmb.c:233
 #, c-format
 msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s"
 msgstr "cupsaddsmb: No hay archivo PPD para la impresora \"%s\" - %s"
 
-#: systemv/cupsctl.c:141
 msgid "cupsctl: Cannot set Listen or Port directly."
 msgstr "cupsctl: No se puede establecer Listen o Port directamente."
 
-#: systemv/cupsctl.c:152
 #, c-format
 msgid "cupsctl: Unable to connect to server: %s"
 msgstr "cupsctl: No se ha podido conectar al servidor: %s"
 
-#: systemv/cupsctl.c:195
 #, c-format
 msgid "cupsctl: Unknown option \"%s\""
 msgstr "cupsctl: Opción \"%s\" desconocida"
 
-#: systemv/cupsctl.c:197
 #, c-format
 msgid "cupsctl: Unknown option \"-%c\""
 msgstr "cupsctl: Opción \"-%c\" desconocida"
 
-#: scheduler/main.c:171
 msgid "cupsd: Expected config filename after \"-c\" option."
 msgstr ""
 "cupsd: Se esperaba un nombre de archivo de configuración tras la opción \"-c"
 "\"."
 
-#: scheduler/main.c:258
 msgid "cupsd: Expected cups-files.conf filename after \"-s\" option."
 msgstr ""
 "cupsd: Se esperaba el nombre de archivo cups-files.conf tras la opción \"-s"
 "\"."
 
-#: scheduler/main.c:236
 msgid "cupsd: On-demand support not compiled in, running in normal mode."
 msgstr ""
 "cupsd: El uso bajo-demanda no está compilado. Funcionando en modo normal."
 
-#: scheduler/main.c:269
 msgid "cupsd: Relative cups-files.conf filename not allowed."
 msgstr "cupsd: No se permite nombre de archivo cups-files.conf relativo."
 
-#: scheduler/main.c:202 scheduler/main.c:209
 msgid "cupsd: Unable to get current directory."
 msgstr "cupsd: No se ha podido obtener el directorio actual."
 
-#: scheduler/main.c:316 scheduler/main.c:325
 msgid "cupsd: Unable to get path to cups-files.conf file."
 msgstr "cupsd: No se ha podido obtener la ruta al archivo cups-files.conf."
 
-#: scheduler/main.c:298
 #, c-format
 msgid "cupsd: Unknown argument \"%s\" - aborting."
 msgstr "cupsd: Argumento \"%s\" desconocido - cancelando."
 
-#: scheduler/main.c:291
 #, c-format
 msgid "cupsd: Unknown option \"%c\" - aborting."
 msgstr "cupsd: Opción \"%c\" desconocida - cancelando."
 
-#: scheduler/cupsfilter.c:1263
 #, c-format
 msgid "cupsfilter: Invalid document number %d."
 msgstr "cupsfilter: Número de documento %d no válido."
 
-#: scheduler/cupsfilter.c:1257
 #, c-format
 msgid "cupsfilter: Invalid job ID %d."
 msgstr "cupsfilter: ID de trabajo %d no válida."
 
-#: scheduler/cupsfilter.c:348
 msgid "cupsfilter: Only one filename can be specified."
 msgstr "cupsfilter: Solo se puede especificar un nombre de archivo."
 
-#: scheduler/cupsfilter.c:1305
 #, c-format
 msgid "cupsfilter: Unable to get job file - %s"
 msgstr "cupsfilter: No se ha podido obtener el archivo del trabajo - %s"
 
-#: systemv/cupstestppd.c:261
 msgid "cupstestppd: The -q option is incompatible with the -v option."
 msgstr "cupstestppd: La opción -q es incompatible con la opción -v."
 
-#: systemv/cupstestppd.c:277
 msgid "cupstestppd: The -v option is incompatible with the -q option."
 msgstr "cupstestppd: La opción -v es incompatible con la opción -q."
 
-#: systemv/lpstat.c:1232 systemv/lpstat.c:1235 systemv/lpstat.c:1238
 #, c-format
 msgid "device for %s/%s: %s"
 msgstr "dispositivo para %s/%s: %s"
 
-#: systemv/lpstat.c:1218 systemv/lpstat.c:1221 systemv/lpstat.c:1224
 #, c-format
 msgid "device for %s: %s"
 msgstr "dispositivo para %s: %s"
 
-#: cups/snmp.c:988
 msgid "error-index uses indefinite length"
 msgstr "error-index usa una longitud indefinida"
 
-#: cups/snmp.c:980
 msgid "error-status uses indefinite length"
 msgstr "error-status usa una longitud indefinida"
 
-#: cups/notify.c:90
 msgid "held"
 msgstr "retenido"
 
-#: berkeley/lpc.c:201
 msgid "help\t\tGet help on commands."
 msgstr "help\t\tProporciona ayuda sobre los comandos."
 
-#: cups/notify.c:131
 msgid "idle"
 msgstr "inactiva"
 
-#: test/ippfind.c:2465
 #, c-format
 msgid "ippfind: Bad regular expression: %s"
 msgstr "ippfind: Expresión regular incorrecta: %s"
 
-#: test/ippfind.c:328
 msgid "ippfind: Cannot use --and after --or."
 msgstr "ippfind: No se puede usar --and tras --or."
 
-#: test/ippfind.c:601
 #, c-format
 msgid "ippfind: Expected key name after %s."
 msgstr "ippfind: Se esperaba un nombre de clave tras %s."
 
-#: test/ippfind.c:551 test/ippfind.c:734
 #, c-format
 msgid "ippfind: Expected port range after %s."
 msgstr "ippfind: Se esperaba un intervalo de puertos tras %s."
 
-#: test/ippfind.c:361
 #, c-format
 msgid "ippfind: Expected program after %s."
 msgstr "ippfind: Se esperaba un programa tras %s."
 
-#: test/ippfind.c:378
 #, c-format
 msgid "ippfind: Expected semi-colon after %s."
 msgstr "ippfind: Se esperaba un punto y coma tras %s."
 
-#: test/ippfind.c:1965
 msgid "ippfind: Missing close brace in substitution."
 msgstr "ippfind: Falta la llave de cierre en la substitución."
 
-#: test/ippfind.c:1053
 msgid "ippfind: Missing close parenthesis."
 msgstr "ippfind: Falta el paréntesis de cierre."
 
-#: test/ippfind.c:335
 msgid "ippfind: Missing expression before \"--and\"."
 msgstr "ippfind: Falta una expresión antes de \"--and\"."
 
-#: test/ippfind.c:448
 msgid "ippfind: Missing expression before \"--or\"."
 msgstr "ippfind: Falta una expresión antes de \"--or\"."
 
-#: test/ippfind.c:871
 #, c-format
 msgid "ippfind: Missing key name after %s."
 msgstr "ippfind: Falta un nombre de clave tras %s."
 
-#: test/ippfind.c:1024
 msgid "ippfind: Missing open parenthesis."
 msgstr "ippfind: Falta el paréntesis de apertura."
 
-#: test/ippfind.c:901
 #, c-format
 msgid "ippfind: Missing program after %s."
 msgstr "ippfind: Falta un programa tras %s."
 
-#: test/ippfind.c:347 test/ippfind.c:401 test/ippfind.c:430 test/ippfind.c:536
-#: test/ippfind.c:618 test/ippfind.c:633 test/ippfind.c:788 test/ippfind.c:803
-#: test/ippfind.c:826 test/ippfind.c:886
 #, c-format
 msgid "ippfind: Missing regular expression after %s."
 msgstr "ippfind: Falta una expresión regular tras %s."
 
-#: test/ippfind.c:919
 #, c-format
 msgid "ippfind: Missing semi-colon after %s."
 msgstr "ippfind: Falta un punto y coma tras %s."
 
-#: test/ippfind.c:1912 test/ippfind.c:1937
 msgid "ippfind: Out of memory."
 msgstr "ippfind: Sin memoria."
 
-#: test/ippfind.c:997
 msgid "ippfind: Too many parenthesis."
 msgstr "ippfind: Demasiados paréntesis."
 
-#: test/ippfind.c:1266 test/ippfind.c:1402 test/ippfind.c:2557
 #, c-format
 msgid "ippfind: Unable to browse or resolve: %s"
 msgstr "ippfind: No se ha podido examinar o resolver: %s"
 
-#: test/ippfind.c:2035 test/ippfind.c:2062
 #, c-format
 msgid "ippfind: Unable to execute \"%s\": %s"
 msgstr "ippfind: No se ha podido ejecutar \"%s\": %s"
 
-#: test/ippfind.c:1143 test/ippfind.c:1151 test/ippfind.c:1162
 #, c-format
 msgid "ippfind: Unable to use Bonjour: %s"
 msgstr "ippfind: No se ha podido usar Bonjour: %s"
 
-#: test/ippfind.c:1994
 #, c-format
 msgid "ippfind: Unknown variable \"{%s}\"."
 msgstr "ippfind: Variable desconocida \"{%s}\"."
 
-#: test/ipptool.c:326 test/ipptool.c:389 test/ipptool.c:544 test/ipptool.c:567
 msgid "ipptool: \"-i\" and \"-n\" are incompatible with \"-P\" and \"-X\"."
 msgstr "ipptool: \"-i\" y \"-n\" no son compatibles con \"-P\" y \"-X\"."
 
-#: test/ipptool.c:623
 #, c-format
 msgid "ipptool: Bad URI - %s."
 msgstr "ipptool: URI - %s incorrecto."
 
-#: test/ipptool.c:537
 msgid "ipptool: Invalid seconds for \"-i\"."
 msgstr "ipptool: Número de segundos no válido para \"-i\"."
 
-#: test/ipptool.c:604
 msgid "ipptool: May only specify a single URI."
 msgstr "ipptool: Sólo se puede especificar un URI."
 
-#: test/ipptool.c:559
 msgid "ipptool: Missing count for \"-n\"."
 msgstr "ipptool: Falta el contador para \"-n\"."
 
-#: test/ipptool.c:423
 msgid "ipptool: Missing filename for \"-f\"."
 msgstr "ipptool: Falta el nombre del archivo para \"-f\"."
 
-#: test/ipptool.c:404
 msgid "ipptool: Missing name=value for \"-d\"."
 msgstr "ipptool: Falta un nombre=valor para \"-d\"."
 
-#: test/ipptool.c:527
 msgid "ipptool: Missing seconds for \"-i\"."
 msgstr "ipptool: Falta el número de segundos para \"-i\"."
 
-#: test/ipptool.c:649
 msgid "ipptool: URI required before test file."
 msgstr "ipptool: Se requiere un URI antes del archivo de prueba."
 
-#: test/ipptool.c:585
 #, c-format
 msgid "ipptool: Unknown option \"-%c\"."
 msgstr "ipptool: Opción \"-%c\" desconocida."
 
-#: scheduler/ipp.c:7739
 msgid "job-printer-uri attribute missing."
 msgstr "Falta el atributo job-printer-uri."
 
-#: systemv/lpadmin.c:117 systemv/lpadmin.c:361
 msgid "lpadmin: Class name can only contain printable characters."
 msgstr ""
 "lpadmin: El nombre de la clase sólo puede contener caracteres imprimibles."
 
-#: systemv/lpadmin.c:600
 msgid "lpadmin: Expected PPD after \"-P\" option."
 msgstr "lpadmin: Se esperaba un PPD tras la opción \"-P\"."
 
-#: systemv/lpadmin.c:443
 msgid "lpadmin: Expected allow/deny:userlist after \"-u\" option."
 msgstr "lpadmin: Se esperaba allow/deny:lista_usuarios tras la opción \"-u\"."
 
-#: systemv/lpadmin.c:350
 msgid "lpadmin: Expected class after \"-r\" option."
 msgstr "lpadmin: Se esperaba una clase tras la opción \"-r\"."
 
-#: systemv/lpadmin.c:106
 msgid "lpadmin: Expected class name after \"-c\" option."
 msgstr "lpadmin: Se esperaba un nombre de clase tras la opción \"-c\"."
 
-#: systemv/lpadmin.c:544
 msgid "lpadmin: Expected description after \"-D\" option."
 msgstr "lpadmin: Se esperaba una descripción tras la opción \"-D\"."
 
-#: systemv/lpadmin.c:477
 msgid "lpadmin: Expected device URI after \"-v\" option."
 msgstr "lpadmin: Se esperaba un URI de dispositivo tras la opción \"-v\"."
 
-#: systemv/lpadmin.c:560
 msgid "lpadmin: Expected file type(s) after \"-I\" option."
 msgstr "lpadmin: Se esperaba(n) tipo(s) de archivo(s) tras la opción \"-l\"."
 
-#: systemv/lpadmin.c:188
 msgid "lpadmin: Expected hostname after \"-h\" option."
 msgstr "lpadmin: Se esperaba un nombre de equipo tras la opción \"-h\"."
 
-#: systemv/lpadmin.c:207
 msgid "lpadmin: Expected interface after \"-i\" option."
 msgstr "lpadmin: Se esperaba una interfaz tras la opción \"-i\"."
 
-#: systemv/lpadmin.c:580
 msgid "lpadmin: Expected location after \"-L\" option."
 msgstr "lpadmin: Se esperaba una ubicación tras la opción \"-L\"."
 
-#: systemv/lpadmin.c:260
 msgid "lpadmin: Expected model after \"-m\" option."
 msgstr "lpadmin: Se esperaba un modelo tras la opción \"-m\"."
 
-#: systemv/lpadmin.c:403
 msgid "lpadmin: Expected name after \"-R\" option."
 msgstr "lpadmin: Se esperaba un nombre tras la opción \"-R\"."
 
-#: systemv/lpadmin.c:280
 msgid "lpadmin: Expected name=value after \"-o\" option."
 msgstr "lpadmin: Se esperaba un nombre=valor tras la opción \"-o\"."
 
-#: systemv/lpadmin.c:299
 msgid "lpadmin: Expected printer after \"-p\" option."
 msgstr "lpadmin: Se esperaba una impresora tras la opción \"-p\"."
 
-#: systemv/lpadmin.c:150
 msgid "lpadmin: Expected printer name after \"-d\" option."
 msgstr "lpadmin: Se esperaba un nombre de impresora tras la opción \"-d\"."
 
-#: systemv/lpadmin.c:511
 msgid "lpadmin: Expected printer or class after \"-x\" option."
 msgstr "lpadmin: Se esperaba una impresora o clase tras la opción \"-x\"."
 
-#: systemv/lpadmin.c:961
 msgid "lpadmin: No member names were seen."
 msgstr "lpadmin: No se han visto nombres de miembros."
 
-#: systemv/lpadmin.c:748
 #, c-format
 msgid "lpadmin: Printer %s is already a member of class %s."
 msgstr "lpadmin: La impresora %s ya es miembro de la clase %s."
 
-#: systemv/lpadmin.c:975
 #, c-format
 msgid "lpadmin: Printer %s is not a member of class %s."
 msgstr "lpadmin: La impresora %s no es miembro de la clase %s."
 
-#: systemv/lpadmin.c:161 systemv/lpadmin.c:310 systemv/lpadmin.c:522
 msgid "lpadmin: Printer name can only contain printable characters."
 msgstr ""
 "lpadmin: El nombre de la impresora sólo puede contener caracteres "
 "imprimibles."
 
-#: systemv/lpadmin.c:91
 msgid ""
 "lpadmin: Unable to add a printer to the class:\n"
 "         You must specify a printer name first."
@@ -7111,18 +5495,13 @@ msgstr ""
 "lpadmin: No se ha podido añadir una impresora a la clase:\n"
 "         Debe especificar un nombre de impresora primero."
 
-#: systemv/lpadmin.c:82 systemv/lpadmin.c:135 systemv/lpadmin.c:239
-#: systemv/lpadmin.c:325 systemv/lpadmin.c:379 systemv/lpadmin.c:496
-#: systemv/lpadmin.c:633
 #, c-format
 msgid "lpadmin: Unable to connect to server: %s"
 msgstr "lpadmin: No se ha podido conectar al servidor: %s"
 
-#: systemv/lpadmin.c:1314
 msgid "lpadmin: Unable to create temporary file"
 msgstr "lpadmin: No se ha podido crear el archivo temporal"
 
-#: systemv/lpadmin.c:388
 msgid ""
 "lpadmin: Unable to delete option:\n"
 "         You must specify a printer name first."
@@ -7130,12 +5509,14 @@ msgstr ""
 "lpadmin: No se ha podido borrar la opción:\n"
 "         Primero debe especificar un nombre de impresora."
 
-#: systemv/lpadmin.c:1324
+#, c-format
+msgid "lpadmin: Unable to open PPD \"%s\": %s on line %d."
+msgstr ""
+
 #, c-format
 msgid "lpadmin: Unable to open PPD file \"%s\" - %s"
 msgstr "lpadmin: No se ha podido abrir el archivo PPD \"%s\" - %s"
 
-#: systemv/lpadmin.c:334
 msgid ""
 "lpadmin: Unable to remove a printer from the class:\n"
 "         You must specify a printer name first."
@@ -7143,7 +5524,6 @@ msgstr ""
 "lpadmin: No se ha podido quitar una impresora de la clase:\n"
 "         Primero debe especificar un nombre de impresora."
 
-#: systemv/lpadmin.c:642
 msgid ""
 "lpadmin: Unable to set the printer options:\n"
 "         You must specify a printer name first."
@@ -7151,112 +5531,88 @@ msgstr ""
 "lpadmin: No se han podido establecer las opciones de impresora:\n"
 "         Primero debe especificar un nombre de impresora."
 
-#: systemv/lpadmin.c:460
 #, c-format
 msgid "lpadmin: Unknown allow/deny option \"%s\"."
 msgstr "lpadmin: Opción allow/deny desconocida \"%s\"."
 
-#: systemv/lpadmin.c:615
 #, c-format
 msgid "lpadmin: Unknown argument \"%s\"."
 msgstr "lpadmin: Argumento \"%s\" desconocido."
 
-#: systemv/lpadmin.c:610
 #, c-format
 msgid "lpadmin: Unknown option \"%c\"."
 msgstr "lpadmin: Opción \"%c\" desconocida."
 
-#: systemv/lpadmin.c:566
 msgid "lpadmin: Warning - content type list ignored."
 msgstr "lpadmin: Advertencia - lista de tipo de contenido no tenida en cuenta."
 
-#: berkeley/lpc.c:68 berkeley/lpc.c:96 berkeley/lpc.c:132
 msgid "lpc> "
 msgstr "lpc> "
 
-#: systemv/lpinfo.c:137
 msgid "lpinfo: Expected 1284 device ID string after \"--device-id\"."
 msgstr ""
 "lpinfo: Se esperaba una cadena ID de dispositivo 1284 tras \"--device-id\"."
 
-#: systemv/lpinfo.c:190
 msgid "lpinfo: Expected language after \"--language\"."
 msgstr "lpinfo: Se esperaba un idioma tras \"--language\"."
 
-#: systemv/lpinfo.c:207
 msgid "lpinfo: Expected make and model after \"--make-and-model\"."
 msgstr "lpinfo: Se esperaba marca y modelo tras \"--make-and-model\"."
 
-#: systemv/lpinfo.c:224
 msgid "lpinfo: Expected product string after \"--product\"."
 msgstr "lpinfo: Se esperaba una cadena de producto tras \"--product\"."
 
-#: systemv/lpinfo.c:155
 msgid "lpinfo: Expected scheme list after \"--exclude-schemes\"."
 msgstr "lpinfo: Se esperaba una lista de esquemas tras \"--exclude-schemes\"."
 
-#: systemv/lpinfo.c:173
 msgid "lpinfo: Expected scheme list after \"--include-schemes\"."
 msgstr "lpinfo: Se esperaba una lista de esquemas tras \"--include-schemes\"."
 
-#: systemv/lpinfo.c:241
 msgid "lpinfo: Expected timeout after \"--timeout\"."
 msgstr "lpinfo: Se esperaba un tiempo de espera tras \"--timeout\"."
 
-#: systemv/lpinfo.c:265
 #, c-format
 msgid "lpinfo: Unknown argument \"%s\"."
 msgstr "lpinfo: Argumento \"%s\" desconocido."
 
-#: systemv/lpinfo.c:259
 #, c-format
 msgid "lpinfo: Unknown option \"%c\"."
 msgstr "lpinfo: Opción \"%c\" desconocida."
 
-#: systemv/lpinfo.c:252
 #, c-format
 msgid "lpinfo: Unknown option \"%s\"."
 msgstr "lpinfo: Opción \"%s\" desconocida."
 
-#: systemv/lpmove.c:133
 #, c-format
 msgid "lpmove: Unable to connect to server: %s"
 msgstr "lpmove: No se ha podido conectar al servidor: %s"
 
-#: systemv/lpmove.c:119
 #, c-format
 msgid "lpmove: Unknown argument \"%s\"."
 msgstr "lpmove: Argumento \"%s\" desconocido."
 
-#: systemv/lpmove.c:97
 #, c-format
 msgid "lpmove: Unknown option \"%c\"."
 msgstr "lpmove: Opción \"%c\" desconocida."
 
-#: systemv/lpoptions.c:143 systemv/lpoptions.c:161 systemv/lpoptions.c:237
 msgid "lpoptions: No printers."
 msgstr "lpoptions: No hay impresoras."
 
-#: systemv/lpoptions.c:212
 #, c-format
 msgid "lpoptions: Unable to add printer or instance: %s"
 msgstr "lpoptions: No se ha podido añadir la impresora o la instancia: %s"
 
-#: systemv/lpoptions.c:507
 #, c-format
 msgid "lpoptions: Unable to get PPD file for %s: %s"
 msgstr "lpoptions: No se ha podido obtener el archivo PPD para %s: %s"
 
-#: systemv/lpoptions.c:515
 #, c-format
 msgid "lpoptions: Unable to open PPD file for %s."
 msgstr "lpoptions: No se ha podido abrir el archivo PPD para %s."
 
-#: systemv/lpoptions.c:92
 msgid "lpoptions: Unknown printer or class."
 msgstr "lpoptions: Impresora o clase desconocida."
 
-#: systemv/lpstat.c:1074
 #, c-format
 msgid ""
 "lpstat: error - %s environment variable names non-existent destination \"%s"
@@ -7265,137 +5621,110 @@ msgstr ""
 "lpstat: error - Los nombre de variable de entorno %s no existen en el "
 "destino \"%s\"."
 
-#: systemv/lpstat.c:1010
 #, c-format
 msgid "members of class %s:"
 msgstr "miembros de la clase %s:"
 
-#: berkeley/lpq.c:549
 msgid "no entries"
 msgstr "no hay entradas"
 
-#: systemv/lpstat.c:1078
 msgid "no system default destination"
 msgstr "no hay un destino predeterminado del sistema"
 
-#: scheduler/ipp.c:5548
 msgid "notify-events not specified."
 msgstr "notify-events no especificado."
 
-#: scheduler/ipp.c:2025 scheduler/ipp.c:5453
 #, c-format
 msgid "notify-recipient-uri URI \"%s\" is already used."
 msgstr "El URI notify-recipient-uri \"%s\" ya está usado."
 
-#: scheduler/ipp.c:2015 scheduler/ipp.c:5443
 #, c-format
 msgid "notify-recipient-uri URI \"%s\" uses unknown scheme."
 msgstr "El URI notify-recipient-uri \"%s\" usa un esquema desconocido."
 
-#: cups/notify.c:87
 msgid "pending"
 msgstr "pendiente"
 
-#: ppdc/ppdc.cxx:108 ppdc/ppdpo.cxx:93
 #, c-format
 msgid "ppdc: Adding include directory \"%s\"."
 msgstr "ppdc: Añadiendo directorio include \"%s\"."
 
-#: ppdc/ppdpo.cxx:134
 #, c-format
 msgid "ppdc: Adding/updating UI text from %s."
 msgstr "ppdc: Añadiendo/actualizando texto UI desde %s."
 
-#: ppdc/ppdc-source.cxx:367
 #, c-format
 msgid "ppdc: Bad boolean value (%s) on line %d of %s."
 msgstr "ppdc: Valor lógico (%s) incorrecto en línea %d de %s."
 
-#: ppdc/ppdc-import.cxx:264
 #, c-format
 msgid "ppdc: Bad font attribute: %s"
 msgstr "ppdc: Atributo de fuente incorrecto: %s"
 
-#: ppdc/ppdc-source.cxx:1753
 #, c-format
 msgid "ppdc: Bad resolution name \"%s\" on line %d of %s."
 msgstr "ppdc: Resolución de nombre \"%s\" incorrecta en línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:1070
 #, c-format
 msgid "ppdc: Bad status keyword %s on line %d of %s."
 msgstr "ppdc: Clave de estado %s incorrecta en línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:1990
 #, c-format
 msgid "ppdc: Bad variable substitution ($%c) on line %d of %s."
 msgstr "ppdc: Sustitución de variable ($%c) errónea en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:2675
 #, c-format
 msgid "ppdc: Choice found on line %d of %s with no Option."
 msgstr "ppdc: Selección encontrada en línea %d de %s sin opciones."
 
-#: ppdc/ppdc-source.cxx:1655
 #, c-format
 msgid "ppdc: Duplicate #po for locale %s on line %d of %s."
 msgstr "ppdc: #po duplicado para código regional %s en línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:889
 #, c-format
 msgid "ppdc: Expected a filter definition on line %d of %s."
 msgstr "ppdc: Se esperaba una definición de filtro en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:912
 #, c-format
 msgid "ppdc: Expected a program name on line %d of %s."
 msgstr "ppdc: Se esperaba un nombre de programa en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:351
 #, c-format
 msgid "ppdc: Expected boolean value on line %d of %s."
 msgstr "ppdc: Se esperaba un valor lógico en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:1050
 #, c-format
 msgid "ppdc: Expected charset after Font on line %d of %s."
 msgstr ""
 "ppdc: Se esperaba un juego de caracteres tras Font en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:404
 #, c-format
 msgid "ppdc: Expected choice code on line %d of %s."
 msgstr "ppdc: Se esperaba un código apropiado en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:392
 #, c-format
 msgid "ppdc: Expected choice name/text on line %d of %s."
 msgstr "ppdc: Se esperaba un nombre/texto apropiado en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:460
 #, c-format
 msgid "ppdc: Expected color order for ColorModel on line %d of %s."
 msgstr ""
 "ppdc: Se esperaba un orden de color para ColorModel en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:449
 #, c-format
 msgid "ppdc: Expected colorspace for ColorModel on line %d of %s."
 msgstr "ppdc: Se esperaba colorspace para ColorModel en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:471
 #, c-format
 msgid "ppdc: Expected compression for ColorModel on line %d of %s."
 msgstr "ppdc: Se esperaba compresión para ColorModel en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:652
 #, c-format
 msgid "ppdc: Expected constraints string for UIConstraints on line %d of %s."
 msgstr ""
 "ppdc: Se esperaba una cadena de restricciones para UIConstraints en la línea "
 "%d de %s."
 
-#: ppdc/ppdc-source.cxx:2861
 #, c-format
 msgid ""
 "ppdc: Expected driver type keyword following DriverType on line %d of %s."
@@ -7403,133 +5732,108 @@ msgstr ""
 "ppdc: Se esperaba una clave de tipo de controlador tras DriverType en la "
 "línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:783
 #, c-format
 msgid "ppdc: Expected duplex type after Duplex on line %d of %s."
 msgstr "ppdc: Se esperaba un tipo dúplex tras Duplex en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:1034
 #, c-format
 msgid "ppdc: Expected encoding after Font on line %d of %s."
 msgstr "ppdc: Se esperaba una codificación tras Font en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:1646
 #, c-format
 msgid "ppdc: Expected filename after #po %s on line %d of %s."
 msgstr ""
 "ppdc: Se esperaba un nombre de archivo tras #po %s en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:1162
 #, c-format
 msgid "ppdc: Expected group name/text on line %d of %s."
 msgstr "ppdc: Se esperaba un nombre/texto de grupo en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:2575
 #, c-format
 msgid "ppdc: Expected include filename on line %d of %s."
 msgstr "ppdc: Se esperaba un nombre de archivo include en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:1459
 #, c-format
 msgid "ppdc: Expected integer on line %d of %s."
 msgstr "ppdc: Se esperaba un número entero en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:1638
 #, c-format
 msgid "ppdc: Expected locale after #po on line %d of %s."
 msgstr "ppdc: Se esperaba un código regional tras #po en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:310
 #, c-format
 msgid "ppdc: Expected name after %s on line %d of %s."
 msgstr "ppdc: Se esperaba un nombre tras %s en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:3233
 #, c-format
 msgid "ppdc: Expected name after FileName on line %d of %s."
 msgstr "ppdc: Se esperaba un nombre tras FileName en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:1015
 #, c-format
 msgid "ppdc: Expected name after Font on line %d of %s."
 msgstr "ppdc: Se esperaba un nombre tras Font en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:3064
 #, c-format
 msgid "ppdc: Expected name after Manufacturer on line %d of %s."
 msgstr "ppdc: Se esperaba un nombre tras Manufacturer en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:3097
 #, c-format
 msgid "ppdc: Expected name after MediaSize on line %d of %s."
 msgstr "ppdc: Se esperaba un nombre tras MediaSize en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:3187
 #, c-format
 msgid "ppdc: Expected name after ModelName on line %d of %s."
 msgstr "ppdc: Se esperaba un nombre tras ModelName en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:3250
 #, c-format
 msgid "ppdc: Expected name after PCFileName on line %d of %s."
 msgstr "ppdc: Se esperaba un nombre tras PCFileName en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:1113
 #, c-format
 msgid "ppdc: Expected name/text after %s on line %d of %s."
 msgstr "ppdc: Se esperaba un nombre/texto tras %s en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:1202
 #, c-format
 msgid "ppdc: Expected name/text after Installable on line %d of %s."
 msgstr ""
 "ppdc: Se esperaba un nombre/texto tras Installable en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:1739
 #, c-format
 msgid "ppdc: Expected name/text after Resolution on line %d of %s."
 msgstr ""
 "ppdc: Se esperaba un nombre/texto tras Resolution en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:436
 #, c-format
 msgid "ppdc: Expected name/text combination for ColorModel on line %d of %s."
 msgstr ""
 "ppdc: Se esperaba una combinación nombre/texto para ColorModel en la línea "
 "%d de %s."
 
-#: ppdc/ppdc-source.cxx:1531
 #, c-format
 msgid "ppdc: Expected option name/text on line %d of %s."
 msgstr "ppdc: Se esperaba una opción de nombre/texto en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:1565
 #, c-format
 msgid "ppdc: Expected option section on line %d of %s."
 msgstr "ppdc: Se esperaba una sección de opciones en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:1543
 #, c-format
 msgid "ppdc: Expected option type on line %d of %s."
 msgstr "ppdc: Se esperaba un tipo de opción en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:1722
 #, c-format
 msgid "ppdc: Expected override field after Resolution on line %d of %s."
 msgstr ""
 "ppdc: Se esperaba un campo de anulación tras Resolution en la línea %d de %s."
 
-#: ppdc/ppdc-catalog.cxx:389 ppdc/ppdc-catalog.cxx:401
 #, c-format
 msgid "ppdc: Expected quoted string on line %d of %s."
 msgstr "ppdc: Se esperaba una cadena entrecomillada en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:961
 #, c-format
 msgid "ppdc: Expected real number on line %d of %s."
 msgstr "ppdc: Se esperaba un número real en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:529
 #, c-format
 msgid ""
 "ppdc: Expected resolution/mediatype following ColorProfile on line %d of %s."
@@ -7537,7 +5841,6 @@ msgstr ""
 "ppdc: Se esperaba resolución/tipo de soporte tras ColorProfile en la línea "
 "%d de %s."
 
-#: ppdc/ppdc-source.cxx:1820
 #, c-format
 msgid ""
 "ppdc: Expected resolution/mediatype following SimpleColorProfile on line %d "
@@ -7546,100 +5849,80 @@ msgstr ""
 "ppdc: Se esperaba resolución/tipo de soporte tras SimpleColorProfile en la "
 "línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:318
 #, c-format
 msgid "ppdc: Expected selector after %s on line %d of %s."
 msgstr "ppdc: Se esperaba un selector tras %s en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:1058
 #, c-format
 msgid "ppdc: Expected status after Font on line %d of %s."
 msgstr "ppdc: Se esperaba un estado tras Font en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:2750
 #, c-format
 msgid "ppdc: Expected string after Copyright on line %d of %s."
 msgstr "ppdc: Se esperaba una cadena tras Copyright en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:3353
 #, c-format
 msgid "ppdc: Expected string after Version on line %d of %s."
 msgstr "ppdc: Se esperaba una cadena tras Version en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:685
 #, c-format
 msgid "ppdc: Expected two option names on line %d of %s."
 msgstr "ppdc: Se esperaban dos nombres de opciones en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:329
 #, c-format
 msgid "ppdc: Expected value after %s on line %d of %s."
 msgstr "ppdc: Se esperaba un valor tras %s en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:1042
 #, c-format
 msgid "ppdc: Expected version after Font on line %d of %s."
 msgstr "ppdc: Se esperaba una versión tras Font en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:184
 #, c-format
 msgid "ppdc: Invalid #include/#po filename \"%s\"."
 msgstr "ppdc: Nombre de archivo #include/#po incorrecto \"%s\"."
 
-#: ppdc/ppdc-source.cxx:929
 #, c-format
 msgid "ppdc: Invalid cost for filter on line %d of %s."
 msgstr "ppdc: Coste incorrecto para el filtro en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:921
 #, c-format
 msgid "ppdc: Invalid empty MIME type for filter on line %d of %s."
 msgstr "ppdc: Tipo MIME vacío incorrecto para el filtro en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:937
 #, c-format
 msgid "ppdc: Invalid empty program name for filter on line %d of %s."
 msgstr ""
 "ppdc: Nombre de programa vacío incorrecto para el filtro en la línea %d de "
 "%s."
 
-#: ppdc/ppdc-source.cxx:1585
 #, c-format
 msgid "ppdc: Invalid option section \"%s\" on line %d of %s."
 msgstr "ppdc: Sección de opción incorrecta \"%s\" en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:1557
 #, c-format
 msgid "ppdc: Invalid option type \"%s\" on line %d of %s."
 msgstr "ppdc: Tipo de opción incorrecta \"%s\" en la línea %d de %s."
 
-#: ppdc/ppdc.cxx:246 ppdc/ppdpo.cxx:123
 #, c-format
 msgid "ppdc: Loading driver information file \"%s\"."
 msgstr "ppdc: Cargando archivo de información de controlador \"%s\"."
 
-#: ppdc/ppdc.cxx:182
 #, c-format
 msgid "ppdc: Loading messages for locale \"%s\"."
 msgstr "ppdc: Cargando mensajes del idioma \"%s\"."
 
-#: ppdc/ppdc.cxx:121
 #, c-format
 msgid "ppdc: Loading messages from \"%s\"."
 msgstr "ppdc: Cargando mensajes desde \"%s\"."
 
-#: ppdc/ppdc-source.cxx:2368 ppdc/ppdc-source.cxx:2600
 #, c-format
 msgid "ppdc: Missing #endif at end of \"%s\"."
 msgstr "ppdc: Falta un #endif al final de \"%s\"."
 
-#: ppdc/ppdc-source.cxx:2469 ppdc/ppdc-source.cxx:2504
-#: ppdc/ppdc-source.cxx:2534
 #, c-format
 msgid "ppdc: Missing #if on line %d of %s."
 msgstr "ppdc: Falta un #if en la línea %d de %s."
 
-#: ppdc/ppdc-catalog.cxx:466
 #, c-format
 msgid ""
 "ppdc: Need a msgid line before any translation strings on line %d of %s."
@@ -7647,118 +5930,94 @@ msgstr ""
 "ppdc: Se necesita una línea msgid antes de cualquier cadena de traducción en "
 "línea %d de %s."
 
-#: ppdc/ppdc-driver.cxx:712
 #, c-format
 msgid "ppdc: No message catalog provided for locale %s."
 msgstr "ppdc: No se ha proporcionado catálogo de mensajes para el idioma %s."
 
-#: ppdc/ppdc-source.cxx:1608 ppdc/ppdc-source.cxx:2838
-#: ppdc/ppdc-source.cxx:2924 ppdc/ppdc-source.cxx:3017
-#: ppdc/ppdc-source.cxx:3150 ppdc/ppdc-source.cxx:3283
 #, c-format
 msgid "ppdc: Option %s defined in two different groups on line %d of %s."
 msgstr ""
 "ppdc: Opción %s definida en dos diferentes grupos en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:1601
 #, c-format
 msgid "ppdc: Option %s redefined with a different type on line %d of %s."
 msgstr "ppdc: Opción %s redefinida con un tipo diferente en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:662
 #, c-format
 msgid "ppdc: Option constraint must *name on line %d of %s."
 msgstr "ppdc: Opción de restricción debe *name en línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:2451
 #, c-format
 msgid "ppdc: Too many nested #if's on line %d of %s."
 msgstr "ppdc: Demasiados #if anidados en la línea %d de %s."
 
-#: ppdc/ppdc.cxx:369
 #, c-format
 msgid "ppdc: Unable to create PPD file \"%s\" - %s."
 msgstr "ppdc: No se ha podido crear el archivo PPD \"%s\" - %s."
 
-#: ppdc/ppdc.cxx:261
 #, c-format
 msgid "ppdc: Unable to create output directory %s: %s"
 msgstr "ppdc: No se ha podido crear el directorio de salida %s: %s"
 
-#: ppdc/ppdc.cxx:282
 #, c-format
 msgid "ppdc: Unable to create output pipes: %s"
 msgstr "ppdc: No se han podido crear canales (pipes) de salida: %s"
 
-#: ppdc/ppdc.cxx:298 ppdc/ppdc.cxx:304
 #, c-format
 msgid "ppdc: Unable to execute cupstestppd: %s"
 msgstr "ppdc: No se ha podido ejecutar cupstestppd: %s"
 
-#: ppdc/ppdc-source.cxx:1687
 #, c-format
 msgid "ppdc: Unable to find #po file %s on line %d of %s."
 msgstr ""
 "ppdc: No se ha podido encontrar el archivo #po %s en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:2607
 #, c-format
 msgid "ppdc: Unable to find include file \"%s\" on line %d of %s."
 msgstr ""
 "ppdc: No se ha podido encontrar el archivo include \"%s\" en la línea %d de "
 "%s."
 
-#: ppdc/ppdc.cxx:193
 #, c-format
 msgid "ppdc: Unable to find localization for \"%s\" - %s"
 msgstr "ppdc: No se ha podido encontrar localización para \"%s\" - %s"
 
-#: ppdc/ppdc.cxx:130
 #, c-format
 msgid "ppdc: Unable to load localization file \"%s\" - %s"
 msgstr "ppdc: No se ha podido cargar el archivo de localización \"%s\" - %s"
 
-#: ppdc/ppdc-file.cxx:50
 #, c-format
 msgid "ppdc: Unable to open %s: %s"
 msgstr "ppdc: No se pudo abrir %s: %s"
 
-#: ppdc/ppdc-source.cxx:2011
 #, c-format
 msgid "ppdc: Undefined variable (%s) on line %d of %s."
 msgstr "ppdc: Variable no definida (%s) en la línea %d de %s."
 
-#: ppdc/ppdc-catalog.cxx:483
 #, c-format
 msgid "ppdc: Unexpected text on line %d of %s."
 msgstr "ppdc: Texto inesperado en la línea %d del %s."
 
-#: ppdc/ppdc-source.cxx:2880
 #, c-format
 msgid "ppdc: Unknown driver type %s on line %d of %s."
 msgstr "ppdc: Tipo de controlador desconocido %s en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:863
 #, c-format
 msgid "ppdc: Unknown duplex type \"%s\" on line %d of %s."
 msgstr "ppdc: Tipo dúplex desconocido \"%s\" en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:3110
 #, c-format
 msgid "ppdc: Unknown media size \"%s\" on line %d of %s."
 msgstr "ppdc: Tamaño de papel desconocido \"%s\" en la línea %d de %s."
 
-#: ppdc/ppdc-catalog.cxx:511
 #, c-format
 msgid "ppdc: Unknown message catalog format for \"%s\"."
 msgstr "ppdc: Formato del catálogo de mensajes para \"%s\" desconocido."
 
-#: ppdc/ppdc-source.cxx:3364
 #, c-format
 msgid "ppdc: Unknown token \"%s\" seen on line %d of %s."
 msgstr "ppdc: Elemento desconocido \"%s\" visto en la línea %d de %s."
 
-#: ppdc/ppdc-source.cxx:971
 #, c-format
 msgid ""
 "ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s."
@@ -7766,128 +6025,104 @@ msgstr ""
 "ppdc: Caracteres finales desconocidos en el número real \"%s\" en la línea "
 "%d de %s."
 
-#: ppdc/ppdc-source.cxx:2121
 #, c-format
 msgid "ppdc: Unterminated string starting with %c on line %d of %s."
 msgstr "ppdc: Cadena que comienza por %c sin terminar en la línea %d de %s."
 
-#: ppdc/ppdc.cxx:360
 #, c-format
 msgid "ppdc: Warning - overlapping filename \"%s\"."
 msgstr "ppdc: Advertencia - nombre de archivo superpuesto \"%s\"."
 
-#: ppdc/ppdc.cxx:375
 #, c-format
 msgid "ppdc: Writing %s."
 msgstr "ppdc: Escribiendo %s."
 
-#: ppdc/ppdc.cxx:143
 #, c-format
 msgid "ppdc: Writing PPD files to directory \"%s\"."
 msgstr "ppdc: Escribiendo archivos PPD al directorio \"%s\"."
 
-#: ppdc/ppdmerge.cxx:130
 #, c-format
 msgid "ppdmerge: Bad LanguageVersion \"%s\" in %s."
 msgstr "ppdmerge: LanguageVersion \"%s\" incorrecto en %s."
 
-#: ppdc/ppdmerge.cxx:170
 #, c-format
 msgid "ppdmerge: Ignoring PPD file %s."
 msgstr "ppdmerge: Ignorando archivo PPD %s."
 
-#: ppdc/ppdmerge.cxx:154
 #, c-format
 msgid "ppdmerge: Unable to backup %s to %s - %s"
 msgstr "ppdmerge: No se ha podido hacer copia de respaldo de %s a %s - %s"
 
-#: systemv/lpstat.c:1777
 #, c-format
 msgid "printer %s disabled since %s -"
 msgstr "la impresora %s está deshabilitada desde %s -"
 
-#: systemv/lpstat.c:1766
 #, c-format
 msgid "printer %s is idle.  enabled since %s"
 msgstr "la impresora %s está inactiva.  activada desde %s"
 
-#: systemv/lpstat.c:1771
 #, c-format
 msgid "printer %s now printing %s-%d.  enabled since %s"
 msgstr "la impresora %s está imprimiendo %s-%d.  activada desde %s"
 
-#: systemv/lpstat.c:1900
 #, c-format
 msgid "printer %s/%s disabled since %s -"
 msgstr "la impresora %s/%s está desactivada desde %s -"
 
-#: systemv/lpstat.c:1886
 #, c-format
 msgid "printer %s/%s is idle.  enabled since %s"
 msgstr "la impresora %s/%s está inactiva.  activada desde %s"
 
-#: systemv/lpstat.c:1893
 #, c-format
 msgid "printer %s/%s now printing %s-%d.  enabled since %s"
 msgstr "la impresora %s/%s está imprimiendo %s-%d.  activada desde %s"
 
-#: cups/notify.c:93 cups/notify.c:134
 msgid "processing"
 msgstr "en proceso"
 
-#: systemv/lp.c:662
 #, c-format
 msgid "request id is %s-%d (%d file(s))"
 msgstr "la id solicitada es %s-%d (%d archivo(s))"
 
-#: cups/snmp.c:972
 msgid "request-id uses indefinite length"
 msgstr "request-id usa una longitud indefinida"
 
-#: systemv/lpstat.c:2032
 msgid "scheduler is not running"
 msgstr "el planificador de tareas no se está ejecutando"
 
-#: systemv/lpstat.c:2028
 msgid "scheduler is running"
 msgstr "el planificador de tareas se está ejecutando"
 
-#: cups/adminutil.c:2148
 #, c-format
 msgid "stat of %s failed: %s"
 msgstr "estado de %s ha fallado: %s"
 
-#: berkeley/lpc.c:203
 msgid "status\t\tShow status of daemon and queue."
 msgstr "status\t\tMuestra el estado del demonio (daemon) y la cola."
 
-#: cups/notify.c:96 cups/notify.c:137
 msgid "stopped"
 msgstr "parada"
 
-#: systemv/lpstat.c:1052
 #, c-format
 msgid "system default destination: %s"
 msgstr "destino predeterminado del sistema: %s"
 
-#: systemv/lpstat.c:1049
 #, c-format
 msgid "system default destination: %s/%s"
 msgstr "destino predeterminado del sistema: %s/%s"
 
-#: cups/notify.c:108 cups/notify.c:140
 msgid "unknown"
 msgstr "desconocido"
 
-#: cups/notify.c:117
 msgid "untitled"
 msgstr "sin título"
 
-#: cups/snmp.c:997
 msgid "variable-bindings uses indefinite length"
 msgstr "variable-bindings usa una longitud indefinida"
 
-
-#
-# End of "$Id$".
-#
+#~ msgid ""
+#~ "The '%s' Job Description attribute cannot be supplied in a job creation "
+#~ "request."
+#~ msgstr ""
+#~ "El atributo de descripción de trabajo '%s' no puede ser suministrado en "
+#~ "una solicitud de creación de trabajo."
index 98433845bbdecf7b68968be7d77e4f9ff8233c1d..df2be2a0b1d4819aab57ccca3da791d1536b2380 100644 (file)
@@ -29,7 +29,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 1.6\n"
 "Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2014-08-29 22:25-0400\n"
+"POT-Creation-Date: 2015-06-08 17:14-0400\n"
 "PO-Revision-Date: 2012-12-12 11:12+0100\n"
 "Last-Translator: denis meramdjougoma <dcmeram@libertysurf.fr>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -1459,6 +1459,10 @@ msgstr ""
 msgid "%s: %s failed: %s"
 msgstr ""
 
+#, c-format
+msgid "%s: Bad printer URI \"%s\"."
+msgstr ""
+
 #, c-format
 msgid "%s: Bad version %s for \"-V\"."
 msgstr ""
@@ -1654,6 +1658,10 @@ msgstr ""
 msgid "%s: Sorry, no encryption support."
 msgstr ""
 
+#, c-format
+msgid "%s: Unable to connect to \"%s:%d\": %s"
+msgstr ""
+
 #, c-format
 msgid "%s: Unable to connect to server."
 msgstr ""
@@ -1662,6 +1670,10 @@ msgstr ""
 msgid "%s: Unable to contact server."
 msgstr ""
 
+#, c-format
+msgid "%s: Unable to create PPD file: %s"
+msgstr ""
+
 #, c-format
 msgid "%s: Unable to determine MIME type of \"%s\"."
 msgstr ""
@@ -1682,6 +1694,10 @@ msgstr ""
 msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"."
 msgstr ""
 
+#, c-format
+msgid "%s: Unable to resolve \"%s\"."
+msgstr ""
+
 #, c-format
 msgid "%s: Unknown destination \"%s\"."
 msgstr ""
@@ -3021,6 +3037,9 @@ msgstr "Epson"
 msgid "Error Policy"
 msgstr "Règles d’erreur"
 
+msgid "Error reading raster data."
+msgstr ""
+
 msgid "Error sending raster data."
 msgstr ""
 
@@ -4060,8 +4079,7 @@ msgstr ""
 
 #, c-format
 msgid ""
-"The '%s' Job Description attribute cannot be supplied in a job creation "
-"request."
+"The '%s' Job Status attribute cannot be supplied in a job creation request."
 msgstr ""
 
 #, c-format
@@ -4524,6 +4542,9 @@ msgstr "Impossible d’imprimer la page de test :"
 msgid "Unable to read print data."
 msgstr ""
 
+msgid "Unable to rename job document file."
+msgstr ""
+
 msgid "Unable to resolve printer-uri."
 msgstr ""
 
@@ -5110,6 +5131,10 @@ msgid ""
 "         You must specify a printer name first."
 msgstr ""
 
+#, c-format
+msgid "lpadmin: Unable to open PPD \"%s\": %s on line %d."
+msgstr ""
+
 #, c-format
 msgid "lpadmin: Unable to open PPD file \"%s\" - %s"
 msgstr ""
index ad8133239644e25231db4180fac592025ba7d707..7526aeef8c72c5cd72da29ee01f2b64dc6d29a92 100644 (file)
@@ -29,7 +29,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 1.6\n"
 "Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2014-08-29 22:25-0400\n"
+"POT-Creation-Date: 2015-06-08 17:14-0400\n"
 "PO-Revision-Date: 2013-07-14 12:00+0200\n"
 "Last-Translator: Giovanni Scafora <giovanni@archlinux.org>\n"
 "Language-Team: Arch Linux Italian Team <giovanni@archlinux.org>\n"
@@ -1711,6 +1711,10 @@ msgstr "%s: %s"
 msgid "%s: %s failed: %s"
 msgstr "%s: %s non riuscito correttamente: %s"
 
+#, c-format
+msgid "%s: Bad printer URI \"%s\"."
+msgstr ""
+
 #, c-format
 msgid "%s: Bad version %s for \"-V\"."
 msgstr "%s: la versione %s non è valida per \"-V\"."
@@ -1917,6 +1921,10 @@ msgstr "%s: operazione non riuscita correttamente: %s"
 msgid "%s: Sorry, no encryption support."
 msgstr "%s: spiacenti, nessun supporto per la crittografia."
 
+#, c-format
+msgid "%s: Unable to connect to \"%s:%d\": %s"
+msgstr ""
+
 #, c-format
 msgid "%s: Unable to connect to server."
 msgstr "%s: non è possibile connettersi al server."
@@ -1925,6 +1933,10 @@ msgstr "%s: non è possibile connettersi al server."
 msgid "%s: Unable to contact server."
 msgstr "%s: non è possibile contattare il server."
 
+#, c-format
+msgid "%s: Unable to create PPD file: %s"
+msgstr ""
+
 #, c-format
 msgid "%s: Unable to determine MIME type of \"%s\"."
 msgstr "%s: non è possibile determinare il tipo di MIME di \"%s\"."
@@ -1946,6 +1958,10 @@ msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"."
 msgstr ""
 "%s: non è possibile leggere il database del MIME da \"%s\" oppure da \"%s\"."
 
+#, c-format
+msgid "%s: Unable to resolve \"%s\"."
+msgstr ""
+
 #, c-format
 msgid "%s: Unknown destination \"%s\"."
 msgstr "%s: destinazione sconosciuta \"%s\"."
@@ -3302,6 +3318,9 @@ msgstr "Epson"
 msgid "Error Policy"
 msgstr "Policy dell'errore"
 
+msgid "Error reading raster data."
+msgstr ""
+
 msgid "Error sending raster data."
 msgstr "Si è verificato un errore durante l'invio dei dati raster."
 
@@ -4351,11 +4370,8 @@ msgstr "L'attributo %s non può essere fornito con job-ids."
 
 #, c-format
 msgid ""
-"The '%s' Job Description attribute cannot be supplied in a job creation "
-"request."
+"The '%s' Job Status attribute cannot be supplied in a job creation request."
 msgstr ""
-"L'attributo della descrizione del processo '%s' non può essere fornito nella "
-"richiesta di creazione di un processo."
 
 #, c-format
 msgid ""
@@ -4845,6 +4861,9 @@ msgstr "Non è possibile stampare la pagina di prova"
 msgid "Unable to read print data."
 msgstr "Non è possibile leggere i dati della stampa."
 
+msgid "Unable to rename job document file."
+msgstr ""
+
 msgid "Unable to resolve printer-uri."
 msgstr ""
 
@@ -5461,6 +5480,10 @@ msgstr ""
 "lpadmin: non è possibile eliminare l'opzione:\n"
 "         Bisogna specificare prima un nome per la stampante."
 
+#, c-format
+msgid "lpadmin: Unable to open PPD \"%s\": %s on line %d."
+msgstr ""
+
 #, c-format
 msgid "lpadmin: Unable to open PPD file \"%s\" - %s"
 msgstr "lpadmin: non è possibile aprile il file PPD \"%s\" - %s"
@@ -6126,6 +6149,13 @@ msgstr "variable-bindings utilizza una lunghezza indefinita"
 #~ msgid "Stylus Photo Series"
 #~ msgstr "Stylus Photo Series"
 
+#~ msgid ""
+#~ "The '%s' Job Description attribute cannot be supplied in a job creation "
+#~ "request."
+#~ msgstr ""
+#~ "L'attributo della descrizione del processo '%s' non può essere fornito "
+#~ "nella richiesta di creazione di un processo."
+
 #~ msgid "The output bin is almost full."
 #~ msgstr "Il raccoglitore di uscita è quasi pieno."
 
index f2e873051c1babe1c98c3e85c592d65648f87efb..a81d595bbfd676073c77d5fdb0535b23eafa0375 100644 (file)
@@ -28,7 +28,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 2.0\n"
 "Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2014-08-29 22:25-0400\n"
+"POT-Creation-Date: 2015-06-08 17:14-0400\n"
 "PO-Revision-Date: 2014-11-15 19:27+0900\n"
 "Last-Translator: OPFC TRANSCUPS <opfc-transcups@sourceforge.jp>\n"
 "Language-Team: OPFC TRANSCUPS <opfc-transcups@sourceforge.jp>\n"
@@ -37,160 +37,122 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: systemv/lpstat.c:1867 systemv/lpstat.c:1990
 msgid "\t\t(all)"
 msgstr "\t\t(すべて)"
 
-#: systemv/lpstat.c:1870 systemv/lpstat.c:1873 systemv/lpstat.c:1993
-#: systemv/lpstat.c:1996
 msgid "\t\t(none)"
 msgstr "\t\t(なし)"
 
-#: berkeley/lpc.c:426
 #, c-format
 msgid "\t%d entries"
 msgstr "\t%d エントリー"
 
-#: systemv/lpstat.c:783 systemv/lpstat.c:799
 #, c-format
 msgid "\t%s"
 msgstr "\t%s"
 
-#: systemv/lpstat.c:1848 systemv/lpstat.c:1971
 msgid "\tAfter fault: continue"
 msgstr "\t失敗後: 継続"
 
-#: systemv/lpstat.c:1471 systemv/lpstat.c:1817 systemv/lpstat.c:1941
 #, c-format
 msgid "\tAlerts: %s"
 msgstr "\t警告: %s"
 
-#: systemv/lpstat.c:1871 systemv/lpstat.c:1994
 msgid "\tBanner required"
 msgstr "\tバナーが必要"
 
-#: systemv/lpstat.c:1872 systemv/lpstat.c:1995
 msgid "\tCharset sets:"
 msgstr "\t文字セット:"
 
-#: systemv/lpstat.c:1836 systemv/lpstat.c:1959
 msgid "\tConnection: direct"
 msgstr "\t接続: 直結"
 
-#: systemv/lpstat.c:1827 systemv/lpstat.c:1951
 msgid "\tConnection: remote"
 msgstr "\t接続: リモート"
 
-#: systemv/lpstat.c:1793 systemv/lpstat.c:1917
 msgid "\tContent types: any"
 msgstr "\tコンテンツの種類: すべて"
 
-#: systemv/lpstat.c:1875 systemv/lpstat.c:1998
 msgid "\tDefault page size:"
 msgstr "\tデフォルト用紙サイズ:"
 
-#: systemv/lpstat.c:1874 systemv/lpstat.c:1997
 msgid "\tDefault pitch:"
 msgstr "\tデフォルトピッチ:"
 
-#: systemv/lpstat.c:1876 systemv/lpstat.c:1999
 msgid "\tDefault port settings:"
 msgstr "\tデフォルトポート設定:"
 
-#: systemv/lpstat.c:1799 systemv/lpstat.c:1923
 #, c-format
 msgid "\tDescription: %s"
 msgstr "\t説明: %s"
 
-#: systemv/lpstat.c:1792 systemv/lpstat.c:1916
 msgid "\tForm mounted:"
 msgstr "\t設定されたフォーム:"
 
-#: systemv/lpstat.c:1869 systemv/lpstat.c:1992
 msgid "\tForms allowed:"
 msgstr "\t許可されているフォーム:"
 
-#: systemv/lpstat.c:1831 systemv/lpstat.c:1955
 #, c-format
 msgid "\tInterface: %s.ppd"
 msgstr "\tインターフェイス: %s.ppd"
 
-#: systemv/lpstat.c:1840 systemv/lpstat.c:1963
 #, c-format
 msgid "\tInterface: %s/interfaces/%s"
 msgstr "\tインターフェイス: %s/interfaces/%s"
 
-#: systemv/lpstat.c:1844 systemv/lpstat.c:1967
 #, c-format
 msgid "\tInterface: %s/ppd/%s.ppd"
 msgstr "\tインターフェイス: %s/ppd/%s.ppd"
 
-#: systemv/lpstat.c:1822 systemv/lpstat.c:1946
 #, c-format
 msgid "\tLocation: %s"
 msgstr "\t場所: %s"
 
-#: systemv/lpstat.c:1847 systemv/lpstat.c:1970
 msgid "\tOn fault: no alert"
 msgstr "\t失敗時: 警告なし"
 
-#: systemv/lpstat.c:1794 systemv/lpstat.c:1918
 msgid "\tPrinter types: unknown"
 msgstr "\tプリンターの種類: 不明"
 
-#: systemv/lpstat.c:1454
 #, c-format
 msgid "\tStatus: %s"
 msgstr "\tステータス: %s"
 
-#: systemv/lpstat.c:1852 systemv/lpstat.c:1866 systemv/lpstat.c:1975
-#: systemv/lpstat.c:1989
 msgid "\tUsers allowed:"
 msgstr "\t許可されているユーザー:"
 
-#: systemv/lpstat.c:1859 systemv/lpstat.c:1982
 msgid "\tUsers denied:"
 msgstr "\t禁止されているユーザー:"
 
-#: berkeley/lpc.c:428
 msgid "\tdaemon present"
 msgstr "\tデーモンは提供されています"
 
-#: berkeley/lpc.c:424
 msgid "\tno entries"
 msgstr "\tエントリーがありません"
 
-#: berkeley/lpc.c:396 berkeley/lpc.c:408
 #, c-format
 msgid "\tprinter is on device '%s' speed -1"
 msgstr "\tデバイス '%s' 上のプリンター 速度 -1"
 
-#: berkeley/lpc.c:421
 msgid "\tprinting is disabled"
 msgstr "\t印刷は無効です"
 
-#: berkeley/lpc.c:419
 msgid "\tprinting is enabled"
 msgstr "\t印刷は有効です"
 
-#: systemv/lpstat.c:1474
 #, c-format
 msgid "\tqueued for %s"
 msgstr "\t%s にキューしました"
 
-#: berkeley/lpc.c:416
 msgid "\tqueuing is disabled"
 msgstr "\tキューは無効です"
 
-#: berkeley/lpc.c:414
 msgid "\tqueuing is enabled"
 msgstr "\tキューは有効です"
 
-#: systemv/lpstat.c:1785 systemv/lpstat.c:1909
 msgid "\treason unknown"
 msgstr "\t未知の理由"
 
-#: systemv/cupstestppd.c:454
 msgid ""
 "\n"
 "    DETAILED CONFORMANCE TEST RESULTS"
@@ -198,134 +160,102 @@ msgstr ""
 "\n"
 "    適合テスト結果詳細"
 
-#: systemv/cupstestppd.c:3820
 msgid "                          Ignore specific warnings."
 msgstr "                          指定された警告を無視する。"
 
-#: systemv/cupstestppd.c:3824
 msgid "                          Issue warnings instead of errors."
 msgstr "                          エラーを警告として扱う。"
 
-#: systemv/cupstestppd.c:410 systemv/cupstestppd.c:415
 msgid "                REF: Page 15, section 3.1."
 msgstr "                参照: 15 ページ、セクション 3.1。"
 
-#: systemv/cupstestppd.c:405
 msgid "                REF: Page 15, section 3.2."
 msgstr "                参照: 15 ページ、セクション 3.2。"
 
-#: systemv/cupstestppd.c:425
 msgid "                REF: Page 19, section 3.3."
 msgstr "                参照: 19 ページ、セクション 3.3。"
 
-#: systemv/cupstestppd.c:378
 msgid "                REF: Page 20, section 3.4."
 msgstr "                参照: 20 ページ、セクション 3.4。"
 
-#: systemv/cupstestppd.c:430
 msgid "                REF: Page 27, section 3.5."
 msgstr "                参照: 27 ページ、セクション 3.5。"
 
-#: systemv/cupstestppd.c:373
 msgid "                REF: Page 42, section 5.2."
 msgstr "                参照: 42 ページ、セクション 5.2。"
 
-#: systemv/cupstestppd.c:420
 msgid "                REF: Pages 16-17, section 3.2."
 msgstr "                参照: 16-17 ページ、セクション 3.2。"
 
-#: systemv/cupstestppd.c:390
 msgid "                REF: Pages 42-45, section 5.2."
 msgstr "                参照: 42-45 ページ、セクション 5.2。"
 
-#: systemv/cupstestppd.c:384
 msgid "                REF: Pages 45-46, section 5.2."
 msgstr "                参照: 45-46 ページ、セクション 5.2。"
 
-#: systemv/cupstestppd.c:395
 msgid "                REF: Pages 48-49, section 5.2."
 msgstr "                参照: 48-49 ページ、セクション 5.2。"
 
-#: systemv/cupstestppd.c:400
 msgid "                REF: Pages 52-54, section 5.2."
 msgstr "                参照: 52-54 ページ、セクション 5.2。"
 
-#: berkeley/lpq.c:528
 #, c-format
 msgid "        %-39.39s %.0f bytes"
 msgstr "        %-39.39s %.0f バイト"
 
-#: systemv/cupstestppd.c:589
 #, c-format
 msgid "        PASS    Default%s"
 msgstr "        合格    Default%s"
 
-#: systemv/cupstestppd.c:524
 msgid "        PASS    DefaultImageableArea"
 msgstr "        合格    DefaultImageableArea"
 
-#: systemv/cupstestppd.c:558
 msgid "        PASS    DefaultPaperDimension"
 msgstr "        合格    DefaultPaperDimension"
 
-#: systemv/cupstestppd.c:631
 msgid "        PASS    FileVersion"
 msgstr "        合格    FileVersion"
 
-#: systemv/cupstestppd.c:675
 msgid "        PASS    FormatVersion"
 msgstr "        合格    FormatVersion"
 
-#: systemv/cupstestppd.c:695
 msgid "        PASS    LanguageEncoding"
 msgstr "        合格    LanguageEncoding"
 
-#: systemv/cupstestppd.c:715
 msgid "        PASS    LanguageVersion"
 msgstr "        合格    LanguageVersion"
 
-#: systemv/cupstestppd.c:769
 msgid "        PASS    Manufacturer"
 msgstr "        合格    Manufacturer"
 
-#: systemv/cupstestppd.c:809
 msgid "        PASS    ModelName"
 msgstr "        合格    ModelName"
 
-#: systemv/cupstestppd.c:829
 msgid "        PASS    NickName"
 msgstr "        合格    NickName"
 
-#: systemv/cupstestppd.c:889
 msgid "        PASS    PCFileName"
 msgstr "        合格    PCFileName"
 
-#: systemv/cupstestppd.c:964
 msgid "        PASS    PSVersion"
 msgstr "        合格    PSVersion"
 
-#: systemv/cupstestppd.c:869
 msgid "        PASS    PageRegion"
 msgstr "        合格    PageRegion"
 
-#: systemv/cupstestppd.c:849
 msgid "        PASS    PageSize"
 msgstr "        合格    PageSize"
 
-#: systemv/cupstestppd.c:924
 msgid "        PASS    Product"
 msgstr "        合格    Product"
 
-#: systemv/cupstestppd.c:999
 msgid "        PASS    ShortNickName"
 msgstr "        合格    ShortNickName"
 
-#: systemv/cupstestppd.c:1374
 #, c-format
 msgid "        WARN    %s has no corresponding options."
 msgstr "        警告    %s は相当するオプションがありません。"
 
-#: systemv/cupstestppd.c:1486
 #, c-format
 msgid ""
 "        WARN    %s shares a common prefix with %s\n"
@@ -334,7 +264,6 @@ msgstr ""
 "        警告    %s は %s と一般プレフィックスを共有します。\n"
 "                参照: 15 ページ、セクション 3.2。"
 
-#: systemv/cupstestppd.c:1345
 #, c-format
 msgid ""
 "        WARN    Duplex option keyword %s may not work as expected and should "
@@ -345,12 +274,10 @@ msgstr ""
 "ません。また、Duplex という名前であるべきです。                参照: 122 ペー"
 "ジ、セクション 5.17"
 
-#: systemv/cupstestppd.c:1744
 msgid "        WARN    File contains a mix of CR, LF, and CR LF line endings."
 msgstr ""
 "        警告    ファイルが CR、LF、CR LF の行末を混在して含んでいます。"
 
-#: systemv/cupstestppd.c:1390
 msgid ""
 "        WARN    LanguageEncoding required by PPD 4.3 spec.\n"
 "                REF: Pages 56-57, section 5.3."
@@ -358,12 +285,10 @@ msgstr ""
 "        警告    LanguageEncoding は PPD 4.3 仕様で必須です。\n"
 "                参照: 56-57 ページ、セクション 5.3。"
 
-#: systemv/cupstestppd.c:1726
 #, c-format
 msgid "        WARN    Line %d only contains whitespace."
 msgstr "        警告    %d 行が空白だけです。"
 
-#: systemv/cupstestppd.c:1398
 msgid ""
 "        WARN    Manufacturer required by PPD 4.3 spec.\n"
 "                REF: Pages 58-59, section 5.3."
@@ -371,7 +296,6 @@ msgstr ""
 "        警告    Manufacturer は PPD 4.3 仕様で必須です。\n"
 "                参照: 58-59 ページ、セクション 5.3。"
 
-#: systemv/cupstestppd.c:1749
 msgid ""
 "        WARN    Non-Windows PPD files should use lines ending with only LF, "
 "not CR LF."
@@ -379,7 +303,6 @@ msgstr ""
 "        警告    非 Windows PPD ファイルは、CR LF でなく LF のみを行末に使うべ"
 "きです。"
 
-#: systemv/cupstestppd.c:1382
 #, c-format
 msgid ""
 "        WARN    Obsolete PPD version %.1f.\n"
@@ -388,7 +311,6 @@ msgstr ""
 "        警告    PPD バージョン %.1f は現在使われていません。\n"
 "                参照: 42 ページ、セクション 5.2。"
 
-#: systemv/cupstestppd.c:1413
 msgid ""
 "        WARN    PCFileName longer than 8.3 in violation of PPD spec.\n"
 "                REF: Pages 61-62, section 5.3."
@@ -396,7 +318,6 @@ msgstr ""
 "        警告    8.3 文字より長い PCFileName は PPD 仕様違反です。\n"
 "                参照: 61-62 ページ、セクション 5.3。"
 
-#: systemv/cupstestppd.c:1421
 msgid ""
 "        WARN    PCFileName should contain a unique filename.\n"
 "                REF: Pages 61-62, section 5.3."
@@ -404,7 +325,6 @@ msgstr ""
 "        警告    PCFileName はユニークなファイル名でなければなりません。\n"
 "                参照: 61-62 ページ、セクション 5.3。"
 
-#: systemv/cupstestppd.c:1456
 msgid ""
 "        WARN    Protocols contains PJL but JCL attributes are not set.\n"
 "                REF: Pages 78-79, section 5.7."
@@ -413,7 +333,6 @@ msgstr ""
 "ん。\n"
 "                参照: 78-79 ページ、セクション 5.7。"
 
-#: systemv/cupstestppd.c:1447
 msgid ""
 "        WARN    Protocols contains both PJL and BCP; expected TBCP.\n"
 "                REF: Pages 78-79, section 5.7."
@@ -422,7 +341,6 @@ msgstr ""
 "す。\n"
 "                参照: 78-79 ページ、セクション 5.7。"
 
-#: systemv/cupstestppd.c:1430
 msgid ""
 "        WARN    ShortNickName required by PPD 4.3 spec.\n"
 "                REF: Pages 64-65, section 5.3."
@@ -430,19 +348,15 @@ msgstr ""
 "        警告    ShortNickName は PPD 4.3 仕様で必須です。\n"
 "                参照: 64-65 ページ、セクション 5.3。"
 
-#: systemv/cupsaddsmb.c:282
 msgid "       cupsaddsmb [options] -a"
 msgstr "       cupsaddsmb [オプション] -a"
 
-#: systemv/cupstestdsc.c:427
 msgid "       cupstestdsc [options] -"
 msgstr "       cupstestdsc [オプション] -"
 
-#: systemv/cupstestppd.c:3815
 msgid "       program | cupstestppd [options] -"
 msgstr "       program | cupstestppd [オプション] -"
 
-#: systemv/cupstestppd.c:3747
 #, c-format
 msgid ""
 "      %s  \"%s %s\" conflicts with \"%s %s\"\n"
@@ -451,18 +365,15 @@ msgstr ""
 "      %s  \"%s %s\" は \"%s %s\" と競合します\n"
 "                (禁則=\"%s %s %s %s\")。"
 
-#: systemv/cupstestppd.c:2248
 #, c-format
 msgid "      %s  %s %s does not exist."
 msgstr "      %s  %s %s が存在しません。"
 
-#: systemv/cupstestppd.c:3904
 #, c-format
 msgid "      %s  %s file \"%s\" has the wrong capitalization."
 msgstr ""
 "      %s  %s ファイル \"%s\" は不正な大文字で始まるワードを含んでいます。"
 
-#: systemv/cupstestppd.c:2318
 #, c-format
 msgid ""
 "      %s  Bad %s choice %s.\n"
@@ -471,101 +382,72 @@ msgstr ""
 "      %s  不正な %s が %s を選んでいます。\n"
 "                参照: 122 ページ、セクション 5.17"
 
-#: systemv/cupstestppd.c:3507 systemv/cupstestppd.c:3556
-#: systemv/cupstestppd.c:3595
 #, c-format
 msgid "      %s  Bad UTF-8 \"%s\" translation string for option %s, choice %s."
 msgstr ""
 "      %s  不正な UTF-8 \"%s\" 翻訳文字列 (オプション %s 、選択 %s) です。"
 
-#: systemv/cupstestppd.c:3461
 #, c-format
 msgid "      %s  Bad UTF-8 \"%s\" translation string for option %s."
 msgstr "      %s  不正な UTF-8 \"%s\" 翻訳文字列 (オプション %s 用) です。"
 
-#: systemv/cupstestppd.c:2389
 #, c-format
 msgid "      %s  Bad cupsFilter value \"%s\"."
 msgstr "      %s  不正な値が cupsFilter に設定されています。 \"%s\""
 
-#: systemv/cupstestppd.c:2475
 #, c-format
 msgid "      %s  Bad cupsFilter2 value \"%s\"."
 msgstr "      %s  不正な値が cupsFilter2 に設定されています。 \"%s\""
 
-#: systemv/cupstestppd.c:2964
 #, c-format
 msgid "      %s  Bad cupsICCProfile %s."
 msgstr "      %s  不正な cupsICCProfile %s です。"
 
-#: systemv/cupstestppd.c:2571
 #, c-format
 msgid "      %s  Bad cupsPreFilter value \"%s\"."
 msgstr "      %s  不正な値が cupsPreFilter に設定されています。 \"%s\""
 
-#: systemv/cupstestppd.c:1822
 #, c-format
 msgid "      %s  Bad cupsUIConstraints %s: \"%s\""
 msgstr "      %s  不正な cupsUIConstraints %s: \"%s\" です。"
 
-#: systemv/cupstestppd.c:3411
 #, c-format
 msgid "      %s  Bad language \"%s\"."
 msgstr "      %s  無効な言語 \"%s\" です。"
 
-#: systemv/cupstestppd.c:2433 systemv/cupstestppd.c:2529
-#: systemv/cupstestppd.c:2615 systemv/cupstestppd.c:2673
-#: systemv/cupstestppd.c:2728 systemv/cupstestppd.c:2783
-#: systemv/cupstestppd.c:2838 systemv/cupstestppd.c:2891
-#: systemv/cupstestppd.c:3013
 #, c-format
 msgid "      %s  Bad permissions on %s file \"%s\"."
 msgstr "      %s  不正なパーミッション %s です (ファイル \"%s\")。"
 
-#: systemv/cupstestppd.c:2373 systemv/cupstestppd.c:2459
-#: systemv/cupstestppd.c:2555 systemv/cupstestppd.c:2642
-#: systemv/cupstestppd.c:2697 systemv/cupstestppd.c:2752
-#: systemv/cupstestppd.c:2807 systemv/cupstestppd.c:2862
 #, c-format
 msgid "      %s  Bad spelling of %s - should be %s."
 msgstr "      %s  %s の不正な綴りです - %s であるべきです。"
 
-#: systemv/cupstestppd.c:2907
 #, c-format
 msgid "      %s  Cannot provide both APScanAppPath and APScanAppBundleID."
 msgstr "      %s  APScanAppPath と APScanAppBundleID は同時に指定できません。"
 
-#: systemv/cupstestppd.c:2205
 #, c-format
 msgid "      %s  Default choices conflicting."
 msgstr "      %s  デフォルトの選択肢が競合しています。"
 
-#: systemv/cupstestppd.c:1803
 #, c-format
 msgid "      %s  Empty cupsUIConstraints %s"
 msgstr "      %s 空の cupsUIConstraints %s です。"
 
-#: systemv/cupstestppd.c:3539 systemv/cupstestppd.c:3579
 #, c-format
 msgid "      %s  Missing \"%s\" translation string for option %s, choice %s."
 msgstr ""
 "      %s  \"%s\" 翻訳文字列 (オプション %s 、選択 %s) が見つかりません。"
 
-#: systemv/cupstestppd.c:3447
 #, c-format
 msgid "      %s  Missing \"%s\" translation string for option %s."
 msgstr "      %s  \"%s\" 翻訳文字列 (オプション %s 用) が見つかりません。"
 
-#: systemv/cupstestppd.c:2418 systemv/cupstestppd.c:2514
-#: systemv/cupstestppd.c:2600 systemv/cupstestppd.c:2658
-#: systemv/cupstestppd.c:2713 systemv/cupstestppd.c:2768
-#: systemv/cupstestppd.c:2823 systemv/cupstestppd.c:2875
-#: systemv/cupstestppd.c:2998
 #, c-format
 msgid "      %s  Missing %s file \"%s\"."
 msgstr "      %s  %s が見つかりません (ファイル \"%s\")。"
 
-#: systemv/cupstestppd.c:3121
 #, c-format
 msgid ""
 "      %s  Missing REQUIRED PageRegion option.\n"
@@ -574,7 +456,6 @@ msgstr ""
 "      %s  必須の PageRegion オプションが見つかりません。\n"
 "                参照: 100 ページ、セクション 5.14。"
 
-#: systemv/cupstestppd.c:3106
 #, c-format
 msgid ""
 "      %s  Missing REQUIRED PageSize option.\n"
@@ -583,42 +464,35 @@ msgstr ""
 "      %s  必須の PageSize オプションが見つかりません。\n"
 "                参照: 99 ページ、セクション 5.14。"
 
-#: systemv/cupstestppd.c:2013 systemv/cupstestppd.c:2054
 #, c-format
 msgid "      %s  Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\"."
 msgstr ""
 "      %s  選択 *%s %s が UIConstraints \"*%s %s *%s %s\" 内に見つかりませ"
 "ん。"
 
-#: systemv/cupstestppd.c:1908
 #, c-format
 msgid "      %s  Missing choice *%s %s in cupsUIConstraints %s: \"%s\""
 msgstr ""
 "      %s  選択 *%s %s が cupsUIConstraints %s: \"%s\" 内に見つかりません。"
 
-#: systemv/cupstestppd.c:1840
 #, c-format
 msgid "      %s  Missing cupsUIResolver %s"
 msgstr "      %s  cupsUIResolver ファイル %s が見つかりません。"
 
-#: systemv/cupstestppd.c:1999 systemv/cupstestppd.c:2040
 #, c-format
 msgid "      %s  Missing option %s in UIConstraints \"*%s %s *%s %s\"."
 msgstr ""
 "      %s  オプション %s がUIConstraints \"*%s %s *%s %s\" に見つかりません。"
 
-#: systemv/cupstestppd.c:1892
 #, c-format
 msgid "      %s  Missing option %s in cupsUIConstraints %s: \"%s\""
 msgstr ""
 "      %s  オプション %s がcupsUIConstraints %s に見つかりません: \"%s\""
 
-#: systemv/cupstestppd.c:3633
 #, c-format
 msgid "      %s  No base translation \"%s\" is included in file."
 msgstr "      %s  ファイルにベース翻訳文字列 \"%s\" がありません。"
 
-#: systemv/cupstestppd.c:2294
 #, c-format
 msgid ""
 "      %s  REQUIRED %s does not define choice None.\n"
@@ -627,38 +501,31 @@ msgstr ""
 "      %s  必須の %s が選択肢 None を定義していません。\n"
 "                参照: 122 ページ、セクション 5.17。"
 
-#: systemv/cupstestppd.c:3180 systemv/cupstestppd.c:3194
 #, c-format
 msgid "      %s  Size \"%s\" defined for %s but not for %s."
 msgstr ""
 "      %s  サイズ \"%s\" は %s 向けに定義されていますが、%s にはありません。"
 
-#: systemv/cupstestppd.c:3160
 #, c-format
 msgid "      %s  Size \"%s\" has unexpected dimensions (%gx%g)."
 msgstr "      %s  サイズ \"%s\" は規定外の寸法 (%gx%g) を持っています。"
 
-#: systemv/cupstestppd.c:3351
 #, c-format
 msgid "      %s  Size \"%s\" should be \"%s\"."
 msgstr "      %s  サイズ \"%s\" は \"%s\" であるべきです。"
 
-#: systemv/cupstestppd.c:3300
 #, c-format
 msgid "      %s  Size \"%s\" should be the Adobe standard name \"%s\"."
 msgstr "      %s  サイズ \"%s\" は Adobe 標準名称 \"%s\" であるべきです。"
 
-#: systemv/cupstestppd.c:3041
 #, c-format
 msgid "      %s  cupsICCProfile %s hash value collides with %s."
 msgstr "      %s  cupsICCProfileのハッシュ値 %s が %s と一致しません。"
 
-#: systemv/cupstestppd.c:1963
 #, c-format
 msgid "      %s  cupsUIResolver %s causes a loop."
 msgstr "      %s  cupsUIResolverの %s がループしています。"
 
-#: systemv/cupstestppd.c:1945
 #, c-format
 msgid ""
 "      %s  cupsUIResolver %s does not list at least two different options."
@@ -666,7 +533,6 @@ msgstr ""
 "      %s  cupsUIResolver %s は最低でも 2 つの異なったオプションを持っていなけ"
 "ればなりません。"
 
-#: systemv/cupstestppd.c:1168
 #, c-format
 msgid ""
 "      **FAIL**  %s must be 1284DeviceID\n"
@@ -675,7 +541,6 @@ msgstr ""
 "      **失敗**  %s は 1284DeviceID でなければなりません。\n"
 "                参照: 72 ページ、セクション 5.5"
 
-#: systemv/cupstestppd.c:580
 #, c-format
 msgid ""
 "      **FAIL**  Bad Default%s %s\n"
@@ -684,7 +549,6 @@ msgstr ""
 "      **失敗**  不正な Default%s %s\n"
 "                参照: 40 ページ、セクション 4.5。"
 
-#: systemv/cupstestppd.c:514
 #, c-format
 msgid ""
 "      **FAIL**  Bad DefaultImageableArea %s\n"
@@ -693,7 +557,6 @@ msgstr ""
 "      **失敗**  %s は不正な DefaultImageableArea です。\n"
 "                参照: 102 ページ、セクション 5.15。"
 
-#: systemv/cupstestppd.c:550
 #, c-format
 msgid ""
 "      **FAIL**  Bad DefaultPaperDimension %s\n"
@@ -702,7 +565,6 @@ msgstr ""
 "      **失敗**  %s は不正な DefaultPaperDimension です。\n"
 "                参照: 103 ページ、セクション 5.15。"
 
-#: systemv/cupstestppd.c:623
 #, c-format
 msgid ""
 "      **FAIL**  Bad FileVersion \"%s\"\n"
@@ -711,7 +573,6 @@ msgstr ""
 "      **失敗**  不正なFileVersion \"%s\"\n"
 "                参照: 56 ページ、セクション 5.3。"
 
-#: systemv/cupstestppd.c:667
 #, c-format
 msgid ""
 "      **FAIL**  Bad FormatVersion \"%s\"\n"
@@ -720,7 +581,6 @@ msgstr ""
 "      **失敗**  FormatVersion が違います \"%s\"\n"
 "                参照: 56 ページ、セクション 5.3。"
 
-#: systemv/cupstestppd.c:1025
 msgid ""
 "      **FAIL**  Bad JobPatchFile attribute in file\n"
 "                REF: Page 24, section 3.4."
@@ -728,19 +588,16 @@ msgstr ""
 "      **失敗**  ファイルに不正な JobPatchFile 属性があります\n"
 "                参照: 24 ページ、セクション 3.4。"
 
-#: systemv/cupstestppd.c:1213
 #, c-format
 msgid "      **FAIL**  Bad LanguageEncoding %s - must be ISOLatin1."
 msgstr ""
 "      **失敗**  無効な LanguageEncoding %s - ISOLatin1 でなければなりません。"
 
-#: systemv/cupstestppd.c:1227
 #, c-format
 msgid "      **FAIL**  Bad LanguageVersion %s - must be English."
 msgstr ""
 "      **失敗**  無効な LanguageVersion %s - English でなければなりません。"
 
-#: systemv/cupstestppd.c:743 systemv/cupstestppd.c:760
 #, c-format
 msgid ""
 "      **FAIL**  Bad Manufacturer (should be \"%s\")\n"
@@ -749,7 +606,6 @@ msgstr ""
 "      **失敗**  不正な Manufacturer (\"%s\" でなければなりません)\n"
 "                参照: 211 ページ、表 D.1。"
 
-#: systemv/cupstestppd.c:800
 #, c-format
 msgid ""
 "      **FAIL**  Bad ModelName - \"%c\" not allowed in string.\n"
@@ -758,7 +614,6 @@ msgstr ""
 "      **失敗**  不正な ModelName - 文字列に \"%c\" は許可されていません。\n"
 "                参照: 59-60 ページ、セクション 5.3。"
 
-#: systemv/cupstestppd.c:956
 msgid ""
 "      **FAIL**  Bad PSVersion - not \"(string) int\".\n"
 "                REF: Pages 62-64, section 5.3."
@@ -766,7 +621,6 @@ msgstr ""
 "      **失敗**  不正な PSVersion - \"(文字列) 整数\" ではありません。\n"
 "                参照: 62-64 ページ、セクション 5.3。"
 
-#: systemv/cupstestppd.c:917
 msgid ""
 "      **FAIL**  Bad Product - not \"(string)\".\n"
 "                REF: Page 62, section 5.3."
@@ -774,7 +628,6 @@ msgstr ""
 "      **失敗**  不正な Product - \"(文字列)\" ではありません。\n"
 "                参照: 62 ページ、セクション 5.3。"
 
-#: systemv/cupstestppd.c:991
 msgid ""
 "      **FAIL**  Bad ShortNickName - longer than 31 chars.\n"
 "                REF: Pages 64-65, section 5.3."
@@ -782,7 +635,6 @@ msgstr ""
 "      **失敗**  不正な ShortNickName - 31 文字を超えています。\n"
 "                参照: 64-65 ページ、セクション 5.3。"
 
-#: systemv/cupstestppd.c:1149
 #, c-format
 msgid ""
 "      **FAIL**  Bad option %s choice %s\n"
@@ -791,12 +643,10 @@ msgstr ""
 "      **失敗**  不正な %s が %s を選んでいます。\n"
 "                参照: 84 ページ、セクション 5.9"
 
-#: systemv/cupstestppd.c:3774 systemv/cupstestppd.c:3796
 #, c-format
 msgid "      **FAIL**  Default option code cannot be interpreted: %s"
 msgstr "      **失敗**  デフォルトのオプションコードが解釈できません: %s"
 
-#: systemv/cupstestppd.c:1286
 #, c-format
 msgid ""
 "      **FAIL**  Default translation string for option %s choice %s contains "
@@ -805,7 +655,6 @@ msgstr ""
 "      **失敗**  オプション %s、選択肢 %s のデフォルトの翻訳文字列が 8 ビット"
 "文字を含んでいます。"
 
-#: systemv/cupstestppd.c:1259
 #, c-format
 msgid ""
 "      **FAIL**  Default translation string for option %s contains 8-bit "
@@ -814,28 +663,23 @@ msgstr ""
 "      **失敗**  オプション %s のデフォルトの翻訳文字列が 8 ビット文字を含んで"
 "います。"
 
-#: systemv/cupstestppd.c:2101
 #, c-format
 msgid "      **FAIL**  Group names %s and %s differ only by case."
 msgstr "      **失敗**  グループ名 %s と %s は大文字/小文字が違うだけです。"
 
-#: systemv/cupstestppd.c:2146
 #, c-format
 msgid "      **FAIL**  Multiple occurrences of option %s choice name %s."
 msgstr "      **失敗**  %s で複数のオプション %s が選択されています。"
 
-#: systemv/cupstestppd.c:2163
 #, c-format
 msgid "      **FAIL**  Option %s choice names %s and %s differ only by case."
 msgstr ""
 "      **失敗**  %s が選択した %s と %s は大文字/小文字のみが違うだけです。"
 
-#: systemv/cupstestppd.c:2123
 #, c-format
 msgid "      **FAIL**  Option names %s and %s differ only by case."
 msgstr "      **失敗**  オプション名 %s と %s は大文字/小文字が違うだけです。"
 
-#: systemv/cupstestppd.c:600
 #, c-format
 msgid ""
 "      **FAIL**  REQUIRED Default%s\n"
@@ -844,7 +688,6 @@ msgstr ""
 "      **失敗**  Default%s は必須\n"
 "                参照: 40 ページ、セクション 4.5。"
 
-#: systemv/cupstestppd.c:499
 msgid ""
 "      **FAIL**  REQUIRED DefaultImageableArea\n"
 "                REF: Page 102, section 5.15."
@@ -852,7 +695,6 @@ msgstr ""
 "      **失敗**  DefaultImageableArea は必須\n"
 "                参照: 102 ページ、セクション 5.15。"
 
-#: systemv/cupstestppd.c:535
 msgid ""
 "      **FAIL**  REQUIRED DefaultPaperDimension\n"
 "                REF: Page 103, section 5.15."
@@ -860,7 +702,6 @@ msgstr ""
 "      **失敗**  DefaultPaperDimension は必須\n"
 "                参照: 103 ページ、セクション 5.15。"
 
-#: systemv/cupstestppd.c:641
 msgid ""
 "      **FAIL**  REQUIRED FileVersion\n"
 "                REF: Page 56, section 5.3."
@@ -868,7 +709,6 @@ msgstr ""
 "      **失敗**  FileVersion は必須\n"
 "                参照: 56 ページ、セクション 5.3。"
 
-#: systemv/cupstestppd.c:685
 msgid ""
 "      **FAIL**  REQUIRED FormatVersion\n"
 "                REF: Page 56, section 5.3."
@@ -876,7 +716,6 @@ msgstr ""
 "      **失敗**  FormatVersion は必須\n"
 "                参照: 56 ページ、セクション 5.3。"
 
-#: systemv/cupstestppd.c:1076
 #, c-format
 msgid ""
 "      **FAIL**  REQUIRED ImageableArea for PageSize %s\n"
@@ -887,7 +726,6 @@ msgstr ""
 "                参照: 41 ページ、セクション 5。\n"
 "                参照: 102 ページ、セクション 5.15。"
 
-#: systemv/cupstestppd.c:705
 msgid ""
 "      **FAIL**  REQUIRED LanguageEncoding\n"
 "                REF: Pages 56-57, section 5.3."
@@ -895,7 +733,6 @@ msgstr ""
 "      **失敗**  LanguageEncoding は必須\n"
 "                参照: 56-57 ページ、セクション 5.3。"
 
-#: systemv/cupstestppd.c:725
 msgid ""
 "      **FAIL**  REQUIRED LanguageVersion\n"
 "                REF: Pages 57-58, section 5.3."
@@ -903,7 +740,6 @@ msgstr ""
 "      **失敗**  LanguageVersion は必須\n"
 "                参照: 57-58 ページ、セクション 5.3。"
 
-#: systemv/cupstestppd.c:779
 msgid ""
 "      **FAIL**  REQUIRED Manufacturer\n"
 "                REF: Pages 58-59, section 5.3."
@@ -911,7 +747,6 @@ msgstr ""
 "      **失敗**  Manufacturer は必須\n"
 "                参照: 58-59 ページ、セクション 5.3。"
 
-#: systemv/cupstestppd.c:819
 msgid ""
 "      **FAIL**  REQUIRED ModelName\n"
 "                REF: Pages 59-60, section 5.3."
@@ -919,7 +754,6 @@ msgstr ""
 "      **失敗**  ModelName は必須\n"
 "                参照: 59-60 ページ、セクション 5.3。"
 
-#: systemv/cupstestppd.c:839
 msgid ""
 "      **FAIL**  REQUIRED NickName\n"
 "                REF: Page 60, section 5.3."
@@ -927,7 +761,6 @@ msgstr ""
 "      **失敗**  NickName は必須\n"
 "                参照: 60 ページ、セクション 5.3。"
 
-#: systemv/cupstestppd.c:899
 msgid ""
 "      **FAIL**  REQUIRED PCFileName\n"
 "                REF: Pages 61-62, section 5.3."
@@ -935,7 +768,6 @@ msgstr ""
 "      **失敗**  PCFileName は必須\n"
 "                参照: 61-62 ページ、セクション 5.3。"
 
-#: systemv/cupstestppd.c:974
 msgid ""
 "      **FAIL**  REQUIRED PSVersion\n"
 "                REF: Pages 62-64, section 5.3."
@@ -943,7 +775,6 @@ msgstr ""
 "      **失敗**  PSVersion は必須\n"
 "                参照: 62-64 ページ、セクション 5.3。"
 
-#: systemv/cupstestppd.c:879
 msgid ""
 "      **FAIL**  REQUIRED PageRegion\n"
 "                REF: Page 100, section 5.14."
@@ -951,7 +782,6 @@ msgstr ""
 "      **失敗**  PageRegion は必須\n"
 "                参照: 100 ページ、セクション 5.14。"
 
-#: systemv/cupstestppd.c:1045
 msgid ""
 "      **FAIL**  REQUIRED PageSize\n"
 "                REF: Page 41, section 5.\n"
@@ -961,7 +791,6 @@ msgstr ""
 "                参照: 41 ページ、セクション 5。\n"
 "                参照: 99 ページ、セクション 5.14。"
 
-#: systemv/cupstestppd.c:859
 msgid ""
 "      **FAIL**  REQUIRED PageSize\n"
 "                REF: Pages 99-100, section 5.14."
@@ -969,7 +798,6 @@ msgstr ""
 "      **失敗**  PageSize は必須\n"
 "                参照: 99-100 ページ、セクション 5.14。"
 
-#: systemv/cupstestppd.c:1098
 #, c-format
 msgid ""
 "      **FAIL**  REQUIRED PaperDimension for PageSize %s\n"
@@ -980,7 +808,6 @@ msgstr ""
 "                参照: 41 ページ、セクション 5。\n"
 "                参照: 103 ページ、セクション 5.15。"
 
-#: systemv/cupstestppd.c:934
 msgid ""
 "      **FAIL**  REQUIRED Product\n"
 "                REF: Page 62, section 5.3."
@@ -988,7 +815,6 @@ msgstr ""
 "      **失敗**  Product は必須\n"
 "                参照: 62 ページ、セクション 5.3。"
 
-#: systemv/cupstestppd.c:1009
 msgid ""
 "      **FAIL**  REQUIRED ShortNickName\n"
 "                REF: Page 64-65, section 5.3."
@@ -996,24 +822,19 @@ msgstr ""
 "      **失敗**  ShortNickName は必須\n"
 "                参照: 64-65 ページ、セクション 5.3。"
 
-#: systemv/cupstestppd.c:334 systemv/cupstestppd.c:353
-#: systemv/cupstestppd.c:365
 #, c-format
 msgid "      **FAIL**  Unable to open PPD file - %s on line %d."
 msgstr ""
 " 失敗\n"
 "      **失敗**  PPD ファイルを開けません - %s (%d 行)。"
 
-#: systemv/cupstestppd.c:1498
 #, c-format
 msgid "    %d ERRORS FOUND"
 msgstr "    %d 個のエラーが見つかりました"
 
-#: systemv/cupstestdsc.c:431
 msgid "    -h       Show program usage"
 msgstr "    -h       このプログラムの利用法を表示する"
 
-#: systemv/cupstestdsc.c:234 systemv/cupstestdsc.c:276
 #, c-format
 msgid ""
 "    Bad %%%%BoundingBox: on line %d.\n"
@@ -1022,7 +843,6 @@ msgstr ""
 "    不正な %%%%BoundingBox: (%d 行)。\n"
 "        参照: 39 ページ、%%%%BoundingBox:"
 
-#: systemv/cupstestdsc.c:305
 #, c-format
 msgid ""
 "    Bad %%%%Page: on line %d.\n"
@@ -1031,7 +851,6 @@ msgstr ""
 "    不正な %%%%Page: (%d 行)。\n"
 "        参照: 53 ページ、%%%%Page:"
 
-#: systemv/cupstestdsc.c:218 systemv/cupstestdsc.c:258
 #, c-format
 msgid ""
 "    Bad %%%%Pages: on line %d.\n"
@@ -1040,7 +859,6 @@ msgstr ""
 "    不正な %%%%Pages: (%d 行)。\n"
 "        REF: Page 43, %%%%Pages:"
 
-#: systemv/cupstestdsc.c:176
 #, c-format
 msgid ""
 "    Line %d is longer than 255 characters (%d).\n"
@@ -1049,7 +867,6 @@ msgstr ""
 "    %d 行が 255文字より長くなっています (%d)。\n"
 "        参照: 25 ページ、Line Length"
 
-#: systemv/cupstestdsc.c:192
 msgid ""
 "    Missing %!PS-Adobe-3.0 on first line.\n"
 "        REF: Page 17, 3.1 Conforming Documents"
@@ -1057,14 +874,12 @@ msgstr ""
 "    先頭行に %!PS-Adobe-3.0 がありません。\n"
 "        参照: 17 ページ、3.1 Conforming Documents"
 
-#: systemv/cupstestdsc.c:362
 #, c-format
 msgid "    Missing %%EndComments comment.        REF: Page 41, %%EndComments"
 msgstr ""
 "    %%EndComments コメントが見つかりません。\n"
 "        参照: 41 ページ、%%EndComments"
 
-#: systemv/cupstestdsc.c:342
 #, c-format
 msgid ""
 "    Missing or bad %%BoundingBox: comment.\n"
@@ -1073,7 +888,6 @@ msgstr ""
 "    %%BoundingBox: コメントが見つからないか不正です。\n"
 "        参照: 39 ページ、%%BoundingBox:"
 
-#: systemv/cupstestdsc.c:372
 #, c-format
 msgid ""
 "    Missing or bad %%Page: comments.\n"
@@ -1082,7 +896,6 @@ msgstr ""
 "    %%Page: コメントが見つからないか不正です。\n"
 "        参照: 53 ページ、%%Page:"
 
-#: systemv/cupstestdsc.c:352
 #, c-format
 msgid ""
 "    Missing or bad %%Pages: comment.\n"
@@ -1091,82 +904,64 @@ msgstr ""
 "    %%Pages: コメントが見つからないか不正です。\n"
 "        参照: 43 ページ、%%Pages:"
 
-#: systemv/cupstestppd.c:1500
 msgid "    NO ERRORS FOUND"
 msgstr "    エラーは見つかりませんでした"
 
-#: systemv/cupstestdsc.c:395
 #, c-format
 msgid "    Saw %d lines that exceeded 255 characters."
 msgstr "    255文字を超える %d 行が見つかりました。"
 
-#: systemv/cupstestdsc.c:390
 #, c-format
 msgid "    Too many %%BeginDocument comments."
 msgstr "    %%BeginDocument コメントが多すぎます。"
 
-#: systemv/cupstestdsc.c:382
 #, c-format
 msgid "    Too many %%EndDocument comments."
 msgstr "    %%EndDocument コメントが多すぎます。"
 
-#: systemv/cupstestdsc.c:402
 msgid "    Warning: file contains binary data."
 msgstr "    警告: ファイルにバイナリデータが含まれています。"
 
-#: systemv/cupstestdsc.c:410
 #, c-format
 msgid "    Warning: no %%EndComments comment in file."
 msgstr "    警告: ファイルに %%EndComments コメントがありません。"
 
-#: systemv/cupstestdsc.c:406
 #, c-format
 msgid "    Warning: obsolete DSC version %.1f in file."
 msgstr "    警告: ファイルは時代遅れの DSC バージョン %.1f です。"
 
-#: test/ippfind.c:2788
 msgid "  ! expression            Unary NOT of expression."
 msgstr "! <式>                  式を否定する単項演算子。"
 
-#: test/ippfind.c:2787
 msgid "  ( expressions )         Group expressions."
 msgstr "  ( <複数の式> )          グループ化された複数の式。"
 
-#: systemv/cupsctl.c:210
 msgid "  --[no-]debug-logging    Turn debug logging on/off."
 msgstr "  --[no-]debug-logging    デバッグログの有効/無効を切り替える。"
 
-#: systemv/cupsctl.c:212
 msgid "  --[no-]remote-admin     Turn remote administration on/off."
 msgstr "  --[no-]remote-admin     リモート管理の有効/無効を切り替える。"
 
-#: systemv/cupsctl.c:214
 msgid "  --[no-]remote-any       Allow/prevent access from the Internet."
 msgstr ""
 "  --[no-]remote-any       インターネットからのアクセスを許可/禁止する。"
 
-#: systemv/cupsctl.c:216
 msgid "  --[no-]share-printers   Turn printer sharing on/off."
 msgstr "  --[no-]share-printers   プリンター共有の有効/無効を切り替える。"
 
-#: systemv/cupsctl.c:218
 msgid "  --[no-]user-cancel-any  Allow/prevent users to cancel any job."
 msgstr ""
 "  --[no-]user-cancel-any  あらゆるジョブのキャンセルをユーザーに許可/禁止する"
 
-#: ppdc/ppdc.cxx:450
 msgid "  --cr                    End lines with CR (Mac OS 9)."
 msgstr "  --cr                    行末を CR とする (Mac OS 9)。"
 
-#: ppdc/ppdc.cxx:452
 msgid "  --crlf                  End lines with CR + LF (Windows)."
 msgstr "  --crlf                  行末を CR + LF とする (Windows)。"
 
-#: test/ippfind.c:2769
 msgid "  --domain regex          Match domain to regular expression."
 msgstr "  --domain <正規表現>     ドメインが正規表現にマッチするか。"
 
-#: test/ippfind.c:2770
 msgid ""
 "  --exec utility [argument ...] ;\n"
 "                          Execute program if true."
@@ -1174,73 +969,56 @@ msgstr ""
 "  --exec <実行ファイル名> [引数 ...] ;\n"
 "                          成功した場合、<実行ファイル名>を実行する。"
 
-#: test/ippfind.c:2790
 msgid "  --false                 Always false."
 msgstr "  --false                 常に失敗。"
 
-#: test/ipptool.c:4806
 msgid "  --help                  Show help."
 msgstr "  --help                  ヘルプを表示する。"
 
-#: test/ippfind.c:2752
 msgid "  --help                  Show this help."
 msgstr "  --help                  このヘルプを表示する。"
 
-#: test/ippfind.c:2772
 msgid "  --host regex            Match hostname to regular expression."
 msgstr "  --host <正規表現>       ホスト名が正規表現にマッチするか。"
 
-#: ppdc/ppdc.cxx:454
 msgid "  --lf                    End lines with LF (UNIX/Linux/OS X)."
 msgstr "  --lf                    行末を LF とする (UNIX/Linux/OS X)。"
 
-#: scheduler/cupsfilter.c:1483
 msgid "  --list-filters          List filters that will be used."
 msgstr "  --list-filters          使用されるフィルターのリストを表示する。"
 
-#: test/ippfind.c:2774
 msgid "  --local                 True if service is local."
 msgstr "  --local                 サービスがローカルなら真。"
 
-#: test/ippfind.c:2773
 msgid "  --ls                    List attributes."
 msgstr "  --ls                    属性の一覧を表示する。"
 
-#: test/ippfind.c:2775
 msgid "  --name regex            Match service name to regular expression."
 msgstr "  --name <正規表現>       サービス名が正規表現とマッチするか。"
 
-#: test/ippfind.c:2789
 msgid "  --not expression        Unary NOT of expression."
 msgstr "  --not <式>              式を否定する単項演算子。"
 
-#: test/ippfind.c:2776
 msgid "  --path regex            Match resource path to regular expression."
 msgstr "  --path <正規表現>       リソースのパスが正規表現とマッチするか。"
 
-#: test/ippfind.c:2777
 msgid "  --port number[-number]  Match port to number or range."
 msgstr ""
 "  --port 番号[-番号]      ポートが指定された番号または範囲とマッチするか。"
 
-#: test/ippfind.c:2778
 msgid "  --print                 Print URI if true."
 msgstr "  --print                 結果が真なら URI を表示する。"
 
-#: test/ippfind.c:2779
 msgid "  --print-name            Print service name if true."
 msgstr "  --print-name            結果が真ならサービス名を表示する。"
 
-#: test/ippfind.c:2780
 msgid "  --quiet                 Quietly report match via exit code."
 msgstr ""
 "  --quiet                 マッチ結果を終了コードで報告し、出力をしない。"
 
-#: test/ippfind.c:2781
 msgid "  --remote                True if service is remote."
 msgstr "  --remote                サービスがリモートなら真。"
 
-#: test/ipptool.c:4807
 msgid ""
 "  --stop-after-include-error\n"
 "                          Stop tests after a failed INCLUDE."
@@ -1248,130 +1026,103 @@ msgstr ""
 "  --stop-after-include-error\n"
 "                          INCLUDE が失敗したときテストを停止する。"
 
-#: test/ippfind.c:2791
 msgid "  --true                  Always true."
 msgstr "  --true                  常に真。"
 
-#: test/ippfind.c:2782
 msgid "  --txt key               True if the TXT record contains the key."
 msgstr "  --txt <キー名>          TXT レコードがキー名を含んでいたら真。"
 
-#: test/ippfind.c:2783
 msgid "  --txt-* regex           Match TXT record key to regular expression."
 msgstr ""
 "  --txt-* <正規表現>      TXT レコードのキーが正規表現とマッチしたら真。"
 
-#: test/ippfind.c:2784
 msgid "  --uri regex             Match URI to regular expression."
 msgstr "  --uri <正規表現>        URI が正規表現とマッチするか。"
 
-#: test/ippfind.c:2753
 msgid "  --version               Show program version."
 msgstr "  --version               プログラムのバージョンを表示。"
 
-#: test/ipptool.c:4809
 msgid "  --version               Show version."
 msgstr "  --version               バージョンを表示する。"
 
-#: test/ippfind.c:2746 test/ipptool.c:4810
 msgid "  -4                      Connect using IPv4."
 msgstr "  -4                      IPv4 で接続する。"
 
-#: test/ippfind.c:2747 test/ipptool.c:4811
 msgid "  -6                      Connect using IPv6."
 msgstr "  -6                      IPv6 で接続する。"
 
-#: test/ipptool.c:4812
 msgid "  -C                      Send requests using chunking (default)."
 msgstr ""
 "  -C                      chunking を用いてリクエストを送る (デフォルト)。"
 
-#: scheduler/cupsfilter.c:1484
 msgid "  -D                      Remove the input file when finished."
 msgstr "  -D                      終了したときに入力ファイルを削除する。"
 
-#: ppdc/ppdc.cxx:433 ppdc/ppdhtml.cxx:175 ppdc/ppdpo.cxx:255
 msgid "  -D name=value           Set named variable to value."
 msgstr ""
 "  -D name=value           name で指定された変数に値 value をセットする。"
 
-#: systemv/cupsaddsmb.c:285 systemv/cupsctl.c:205
 msgid "  -E                      Encrypt the connection."
 msgstr "  -E                      接続を暗号化する。"
 
-#: test/ipptool.c:4814
 msgid "  -E                      Test with HTTP Upgrade to TLS."
 msgstr ""
 "  -E                      HTTP から TLS へのアップグレードでテストする。"
 
-#: scheduler/main.c:2149
 msgid ""
 "  -F                      Run in the foreground but detach from console."
 msgstr ""
 "  -F                      フォアグラウンドで実行するがコンソールからはデタッ"
 "チする。"
 
-#: systemv/cupsaddsmb.c:286
 msgid "  -H samba-server         Use the named SAMBA server."
 msgstr "  -H sambaサーバー        指定の SAMBA サーバーを使う。"
 
-#: test/ipptool.c:4816
 msgid "  -I                      Ignore errors."
 msgstr "  -I                      エラーを無視する。"
 
-#: ppdc/ppdc.cxx:435 ppdc/ppdhtml.cxx:177 ppdc/ppdi.cxx:131 ppdc/ppdpo.cxx:257
 msgid "  -I include-dir          Add include directory to search path."
 msgstr ""
 "  -I include-dir          インクルードディレクトリーを検索パスに含める。"
 
-#: systemv/cupstestppd.c:3819
 msgid "  -I {filename,filters,none,profiles}"
 msgstr "  -I {filename,filters,none,profiles}"
 
-#: test/ipptool.c:4817
 msgid "  -L                      Send requests using content-length."
 msgstr "  -L                      content-length を用いてリクエストを送る。"
 
-#: test/ipptool.c:4819
 msgid ""
 "  -P filename.plist       Produce XML plist to a file and test report to "
 "standard output."
-msgstr "  -P filename.plist       XML の plist 形式で書き出しテストリポートを標準出力にする。"
+msgstr ""
+"  -P filename.plist       XML の plist 形式で書き出しテストリポートを標準出力"
+"にする。"
 
-#: scheduler/cupsfilter.c:1485
 msgid "  -P filename.ppd         Set PPD file."
 msgstr "  -P filename.ppd         PPD ファイルを指定する。"
 
-#: test/ippfind.c:2756
 msgid "  -P number[-number]      Match port to number or range."
 msgstr ""
 "  -P 番号[-番号]          ポートが指定された番号または範囲とマッチするか。"
 
-#: systemv/cupstestppd.c:3821
 msgid "  -R root-directory       Set alternate root."
 msgstr "  -R root-directory       別のルートディレクトリーを指定する。"
 
-#: test/ipptool.c:4820
 msgid "  -S                      Test with SSL encryption."
 msgstr "  -S                      SSL 暗号化でテストする。"
 
-#: test/ippfind.c:2748
 msgid "  -T seconds              Set the browse timeout in seconds."
 msgstr "  -T <秒>                 ブラウズのタイムアウトを秒で指定する。"
 
-#: test/ipptool.c:4822
 msgid "  -T seconds              Set the receive/send timeout in seconds."
 msgstr "  -T seconds              受信/送信タイムアウトを秒で指定する。"
 
-#: scheduler/cupsfilter.c:1486 systemv/cupsaddsmb.c:288 systemv/cupsctl.c:206
 msgid "  -U username             Specify username."
 msgstr "  -U username             ユーザー名を指定する。"
 
-#: test/ippfind.c:2750 test/ipptool.c:4824
 msgid "  -V version              Set default IPP version."
 msgstr "  -V version              デフォルトの IPP バージョンを指定する。"
 
-#: systemv/cupstestppd.c:3822
 msgid ""
 "  -W {all,none,constraints,defaults,duplex,filters,profiles,sizes,"
 "translations}"
@@ -1379,93 +1130,72 @@ msgstr ""
 "  -W {all,none,constraints,defaults,duplex,filters,profiles,sizes,"
 "translations}"
 
-#: test/ipptool.c:4826
 msgid "  -X                      Produce XML plist instead of plain text."
 msgstr "  -X                      プレーンテキストの代わりに XML を用いる。"
 
-#: test/ippdiscover.c:818
 msgid "  -a                      Browse for all services."
 msgstr "  -a                      すべてのサービスをブラウズする。"
 
-#: systemv/cupsaddsmb.c:289
 msgid "  -a                      Export all printers."
 msgstr "  -a                      すべてのプリンターをエクスポートする。"
 
-#: test/ipptool.c:4828
 msgid "  -c                      Produce CSV output."
 msgstr "  -c                      CSV 出力を行う。"
 
-#: ppdc/ppdc.cxx:437
 msgid "  -c catalog.po           Load the specified message catalog."
 msgstr "  -c catalog.po           指定したメッセージカタログをロードする。"
 
-#: scheduler/cupsfilter.c:1487
 msgid "  -c cups-files.conf      Set cups-files.conf file to use."
 msgstr "  -c cups-files.conf      cups-files.conf を利用するよう設定する。"
 
-#: scheduler/main.c:2147
 msgid "  -c cupsd.conf           Set cupsd.conf file to use."
 msgstr "  -c cupsd.conf           使用する cupsd.conf ファイルを指定する。"
 
-#: test/ippdiscover.c:819
 msgid "  -d domain               Browse/resolve in specified domain."
 msgstr "  -d <ドメイン名>         指定されたドメインでブラウズ/名前解決する。"
 
-#: test/ipptool.c:4829
 msgid "  -d name=value           Set named variable to value."
 msgstr ""
 "  -d name=value           name で指定された変数に値 value をセットする。"
 
-#: ppdc/ppdc.cxx:439
 msgid "  -d output-dir           Specify the output directory."
 msgstr "  -d output-dir           出力先ディレクトリーを指定する。"
 
-#: scheduler/cupsfilter.c:1488
 msgid "  -d printer              Use the named printer."
 msgstr "  -d printer              指定されたプリンターを利用する。"
 
-#: test/ippfind.c:2757
 msgid "  -d regex                Match domain to regular expression."
 msgstr "  -d <正規表現>           ドメインが正規表現にマッチするか。"
 
-#: scheduler/cupsfilter.c:1489
 msgid "  -e                      Use every filter from the PPD file."
 msgstr ""
 "  -e                      PPD ファイルからすべてのフィルターを使用する。"
 
-#: scheduler/main.c:2148
 msgid "  -f                      Run in the foreground."
 msgstr "  -f                      フォアグラウンドで実行する。"
 
-#: test/ipptool.c:4831
 msgid "  -f filename             Set default request filename."
 msgstr "  -f filename             デフォルトのリクエストファイル名を指定する。"
 
-#: scheduler/main.c:2151
 msgid "  -h                      Show this usage message."
 msgstr "  -h                      このヘルプメッセージを表示する。"
 
-#: test/ippfind.c:2758
 msgid "  -h regex                Match hostname to regular expression."
 msgstr "  -h <正規表現>           ホスト名が正規表現にマッチするか。"
 
-#: systemv/cupsaddsmb.c:290 systemv/cupsctl.c:207
 msgid "  -h server[:port]        Specify server address."
 msgstr "  -h server[:port]        サーバーアドレスを指定する。"
 
-#: scheduler/cupsfilter.c:1490
 msgid "  -i mime/type            Set input MIME type (otherwise auto-typed)."
 msgstr ""
 "  -i mime/type            入力の MIME タイプを指定する (指定がなければ自動タ"
 "イプ)。"
 
-#: test/ipptool.c:4833
 msgid ""
 "  -i seconds              Repeat the last file with the given time interval."
 msgstr ""
 "  -i seconds              最後のファイルを与えられた時間間隔で繰り返す。"
 
-#: scheduler/cupsfilter.c:1491
 msgid ""
 "  -j job-id[,N]           Filter file N from the specified job (default is "
 "file 1)."
@@ -1473,139 +1203,107 @@ msgstr ""
 "  -j job-id[,N]           フィルターファイル N を指定されたジョブから使用す"
 "る (デフォルトは ファイル 1)。"
 
-#: test/ippfind.c:2759
 msgid "  -l                      List attributes."
 msgstr "  -l                      属性の一覧を表示する。"
 
-#: test/ipptool.c:4835
 msgid "  -l                      Produce plain text output."
 msgstr "  -l                      プレーンテキスト出力を行う。"
 
-#: scheduler/main.c:2152
 msgid "  -l                      Run cupsd on demand."
 msgstr "  -l                      cupsd をオンデマンドで実行する。"
 
-#: ppdc/ppdc.cxx:441
 msgid "  -l lang[,lang,...]      Specify the output language(s) (locale)."
 msgstr "  -l lang[,lang,...]      出力言語を指定する。(複数可能)"
 
-#: ppdc/ppdc.cxx:443
 msgid "  -m                      Use the ModelName value as the filename."
 msgstr "  -m                      ModelName の値をファイル名として使用する。"
 
-#: scheduler/cupsfilter.c:1492
 msgid ""
 "  -m mime/type            Set output MIME type (otherwise application/pdf)."
 msgstr ""
 "  -m mime/type            出力の MIME タイプを指定する (指定がなければ "
 "application/pdf)。"
 
-#: scheduler/cupsfilter.c:1493
 msgid "  -n copies               Set number of copies."
 msgstr "  -n copies               部数を指定する。"
 
-#: test/ipptool.c:4836
 msgid ""
 "  -n count                Repeat the last file the given number of times."
 msgstr "  -n count                最後のファイルを与えられた回数だけ繰り返す。"
 
-#: test/ippfind.c:2760
 msgid "  -n regex                Match service name to regular expression."
 msgstr "  -n <正規表現>           サービス名が正規表現とマッチするか。"
 
-#: ppdc/ppdi.cxx:133
 msgid ""
 "  -o filename.drv         Set driver information file (otherwise ppdi.drv)."
 msgstr ""
 "  -o filename.drv         ドライバー情報ファイルを指定する (指定がなければ "
 "ppdi.drv)。"
 
-#: ppdc/ppdmerge.cxx:364
 msgid "  -o filename.ppd[.gz]    Set output file (otherwise stdout)."
 msgstr ""
 "  -o filename.ppd[.gz]    出力ファイルを指定する (指定がなければ標準出力)。"
 
-#: scheduler/cupsfilter.c:1494
 msgid "  -o name=value           Set option(s)."
 msgstr "  -o name=value           オプションを指定する。"
 
-#: test/ippfind.c:2761
 msgid "  -p                      Print URI if true."
 msgstr "  -p                      結果が真なら URI を表示する。"
 
-#: scheduler/cupsfilter.c:1495
 msgid "  -p filename.ppd         Set PPD file."
 msgstr "  -p filename.ppd         PPD ファイルを指定する。"
 
-#: test/ippdiscover.c:820
 msgid "  -p program              Run specified program for each service."
 msgstr ""
 "  -p <プログラム名>       指定されたプログラムをそれぞれのサービスに対し実行"
 "する。"
 
-#: test/ippfind.c:2762
 msgid "  -q                      Quietly report match via exit code."
 msgstr ""
 "  -q                      マッチ結果を終了コードで報告し、出力をしない。"
 
-#: systemv/cupstestppd.c:3826 test/ipptool.c:4838
 msgid "  -q                      Run silently."
 msgstr "  -q                      詳細は表示しない。"
 
-#: test/ippfind.c:2763
 msgid "  -r                      True if service is remote."
 msgstr "  -r                      サービスがリモートなら真。"
 
-#: systemv/cupstestppd.c:3827
 msgid "  -r                      Use 'relaxed' open mode."
 msgstr "  -r                      寛容モードを用いる。"
 
-#: test/ippfind.c:2764
 msgid "  -s                      Print service name if true."
 msgstr "  -s                      結果が真ならサービス名を表示する。"
 
-#: test/ipptool.c:4839
 msgid "  -t                      Produce a test report."
 msgstr "  -t                      テストリポートを出力する。"
 
-#: ppdc/ppdc.cxx:445
 msgid "  -t                      Test PPDs instead of generating them."
 msgstr "  -t                      PPD を出力しないでテストする。"
 
-#: scheduler/main.c:2153
 msgid "  -t                      Test the configuration file."
 msgstr "  -t                      設定ファイルをテストする。"
 
-#: test/ippfind.c:2765
 msgid "  -t key                  True if the TXT record contains the key."
 msgstr "  -t <キー名>             TXT レコードがキー名を含んでいたら真。"
 
-#: scheduler/cupsfilter.c:1496
 msgid "  -t title                Set title."
 msgstr "  -t title                タイトルを指定する。"
 
-#: test/ippdiscover.c:821
 msgid "  -t type                 Browse/resolve with specified type."
 msgstr "  -t タイプ               指定されたタイプでブラウズ/名前解決する。"
 
-#: scheduler/cupsfilter.c:1497
 msgid "  -u                      Remove the PPD file when finished."
 msgstr "  -u                      終了したときに PPD ファイルを削除する。"
 
-#: test/ippfind.c:2766
 msgid "  -u regex                Match URI to regular expression."
 msgstr "  -u <正規表現>           URI が正規表現とマッチするか。"
 
-#: systemv/cupsaddsmb.c:291 systemv/cupstestppd.c:3828 test/ipptool.c:4840
-#: ppdc/ppdc.cxx:447 ppdc/ppdpo.cxx:259
 msgid "  -v                      Be verbose."
 msgstr "  -v                      冗長出力を行う。"
 
-#: systemv/cupstestppd.c:3829
 msgid "  -vv                     Be very verbose."
 msgstr "  -vv                     より冗長な出力を行う。"
 
-#: test/ippfind.c:2767
 msgid ""
 "  -x utility [argument ...] ;\n"
 "                          Execute program if true."
@@ -1613,15 +1311,12 @@ msgstr ""
 "  -x <実行ファイル名> [引数 ...] ;\n"
 "                          成功した場合、<実行ファイル名> を実行する。"
 
-#: ppdc/ppdc.cxx:448
 msgid "  -z                      Compress PPD files using GNU zip."
 msgstr "  -z                      PPD ファイルを GNU zip を使って圧縮する。"
 
-#: test/ippfind.c:2810
 msgid "  IPPFIND_SERVICE_DOMAIN  Domain name"
 msgstr "  IPPFIND_SERVICE_DOMAIN  ドメイン名"
 
-#: test/ippfind.c:2811
 msgid ""
 "  IPPFIND_SERVICE_HOSTNAME\n"
 "                          Fully-qualified domain name"
@@ -1629,178 +1324,98 @@ msgstr ""
 "  IPPFIND_SERVICE_HOSTNAME\n"
 "                          完全修飾ドメイン名 (FQDN)"
 
-#: test/ippfind.c:2813
 msgid "  IPPFIND_SERVICE_NAME    Service instance name"
 msgstr "  IPPFIND_SERVICE_NAME    サービスインスタンス名"
 
-#: test/ippfind.c:2814
 msgid "  IPPFIND_SERVICE_PORT    Port number"
 msgstr "  IPPFIND_SERVICE_PORT    ポート番号"
 
-#: test/ippfind.c:2815
 msgid "  IPPFIND_SERVICE_REGTYPE DNS-SD registration type"
 msgstr "  IPPFIND_SERVICE_REGTYPE DNS-SD 登録タイプ"
 
-#: test/ippfind.c:2816
 msgid "  IPPFIND_SERVICE_SCHEME  URI scheme"
 msgstr "  IPPFIND_SERVICE_SCHEME  URI スキーム"
 
-#: test/ippfind.c:2817
 msgid "  IPPFIND_SERVICE_URI     URI"
 msgstr "  IPPFIND_SERVICE_URI     URI"
 
-#: test/ippfind.c:2818
 msgid "  IPPFIND_TXT_*           Value of TXT record key"
 msgstr "  IPPFIND_TXT_*           TXT レコードキーの値"
 
-#: test/ippfind.c:2793
 msgid ""
 "  expression --and expression\n"
 "                          Logical AND."
 msgstr "  <式> --and <式>         論理 AND。"
 
-#: test/ippfind.c:2795
 msgid ""
 "  expression --or expression\n"
 "                          Logical OR."
 msgstr "  <式> --or <式>          論理 OR。"
 
-#: test/ippfind.c:2792
 msgid "  expression expression   Logical AND."
 msgstr "  <式> <式>               論理 AND。"
 
-#: test/ippfind.c:2800
 msgid "  {service_domain}        Domain name"
 msgstr "  {service_domain}        ドメイン名"
 
-#: test/ippfind.c:2801
 msgid "  {service_hostname}      Fully-qualified domain name"
 msgstr "  {service_hostname}      完全修飾ドメイン名 (FQDN)"
 
-#: test/ippfind.c:2802
 msgid "  {service_name}          Service instance name"
 msgstr "  {service_name}          サービスインスタンス名"
 
-#: test/ippfind.c:2803
 msgid "  {service_port}          Port number"
 msgstr "  {service_port}          ポート番号"
 
-#: test/ippfind.c:2804
 msgid "  {service_regtype}       DNS-SD registration type"
 msgstr "  {service_regtype}       DNS-SD 登録タイプ"
 
-#: test/ippfind.c:2805
 msgid "  {service_scheme}        URI scheme"
 msgstr "  {service_scheme}        URI スキーム"
 
-#: test/ippfind.c:2806
 msgid "  {service_uri}           URI"
 msgstr "  {service_uri}           URI"
 
-#: test/ippfind.c:2807
 msgid "  {txt_*}                 Value of TXT record key"
 msgstr "  {txt_*}                 TXT レコードキーの値"
 
-#: test/ippfind.c:2799
 msgid "  {}                      URI"
 msgstr "  {}                      URI"
 
-#: systemv/cupstestppd.c:332 systemv/cupstestppd.c:351
-#: systemv/cupstestppd.c:363 systemv/cupstestppd.c:496
-#: systemv/cupstestppd.c:511 systemv/cupstestppd.c:532
-#: systemv/cupstestppd.c:547 systemv/cupstestppd.c:577
-#: systemv/cupstestppd.c:597 systemv/cupstestppd.c:620
-#: systemv/cupstestppd.c:638 systemv/cupstestppd.c:664
-#: systemv/cupstestppd.c:682 systemv/cupstestppd.c:702
-#: systemv/cupstestppd.c:722 systemv/cupstestppd.c:740
-#: systemv/cupstestppd.c:757 systemv/cupstestppd.c:776
-#: systemv/cupstestppd.c:797 systemv/cupstestppd.c:816
-#: systemv/cupstestppd.c:836 systemv/cupstestppd.c:856
-#: systemv/cupstestppd.c:876 systemv/cupstestppd.c:896
-#: systemv/cupstestppd.c:914 systemv/cupstestppd.c:931
-#: systemv/cupstestppd.c:953 systemv/cupstestppd.c:971
-#: systemv/cupstestppd.c:988 systemv/cupstestppd.c:1006
-#: systemv/cupstestppd.c:1022 systemv/cupstestppd.c:1042
-#: systemv/cupstestppd.c:1073 systemv/cupstestppd.c:1095
-#: systemv/cupstestppd.c:1146 systemv/cupstestppd.c:1165
-#: systemv/cupstestppd.c:1209 systemv/cupstestppd.c:1223
-#: systemv/cupstestppd.c:1255 systemv/cupstestppd.c:1282
-#: systemv/cupstestppd.c:1800 systemv/cupstestppd.c:1819
-#: systemv/cupstestppd.c:1837 systemv/cupstestppd.c:1889
-#: systemv/cupstestppd.c:1905 systemv/cupstestppd.c:1942
-#: systemv/cupstestppd.c:1960 systemv/cupstestppd.c:1996
-#: systemv/cupstestppd.c:2010 systemv/cupstestppd.c:2037
-#: systemv/cupstestppd.c:2051 systemv/cupstestppd.c:2097
-#: systemv/cupstestppd.c:2119 systemv/cupstestppd.c:2142
-#: systemv/cupstestppd.c:2159 systemv/cupstestppd.c:2201
-#: systemv/cupstestppd.c:2244 systemv/cupstestppd.c:2291
-#: systemv/cupstestppd.c:2315 systemv/cupstestppd.c:2369
-#: systemv/cupstestppd.c:2385 systemv/cupstestppd.c:2415
-#: systemv/cupstestppd.c:2429 systemv/cupstestppd.c:2455
-#: systemv/cupstestppd.c:2471 systemv/cupstestppd.c:2511
-#: systemv/cupstestppd.c:2525 systemv/cupstestppd.c:2551
-#: systemv/cupstestppd.c:2567 systemv/cupstestppd.c:2597
-#: systemv/cupstestppd.c:2611 systemv/cupstestppd.c:2638
-#: systemv/cupstestppd.c:2655 systemv/cupstestppd.c:2669
-#: systemv/cupstestppd.c:2693 systemv/cupstestppd.c:2710
-#: systemv/cupstestppd.c:2724 systemv/cupstestppd.c:2748
-#: systemv/cupstestppd.c:2765 systemv/cupstestppd.c:2779
-#: systemv/cupstestppd.c:2803 systemv/cupstestppd.c:2820
-#: systemv/cupstestppd.c:2834 systemv/cupstestppd.c:2858
-#: systemv/cupstestppd.c:2872 systemv/cupstestppd.c:2887
-#: systemv/cupstestppd.c:2904 systemv/cupstestppd.c:2960
-#: systemv/cupstestppd.c:2995 systemv/cupstestppd.c:3009
-#: systemv/cupstestppd.c:3037 systemv/cupstestppd.c:3102
-#: systemv/cupstestppd.c:3117 systemv/cupstestppd.c:3156
-#: systemv/cupstestppd.c:3176 systemv/cupstestppd.c:3190
-#: systemv/cupstestppd.c:3407 systemv/cupstestppd.c:3443
-#: systemv/cupstestppd.c:3457 systemv/cupstestppd.c:3503
-#: systemv/cupstestppd.c:3535 systemv/cupstestppd.c:3552
-#: systemv/cupstestppd.c:3575 systemv/cupstestppd.c:3591
-#: systemv/cupstestppd.c:3629 systemv/cupstestppd.c:3770
-#: systemv/cupstestppd.c:3792 systemv/cupstestppd.c:3900
 msgid " FAIL"
 msgstr " 失敗"
 
-#: systemv/cupstestppd.c:1306
 msgid " PASS"
 msgstr " 合格"
 
-#: cups/ipp.c:5227
 #, c-format
 msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 2911 section 4.1.5)."
 msgstr "\"%s\": URI の値 \"%s\" が誤っています - %s (RFC 2911 4.1.5 節)。"
 
-#: cups/ipp.c:5238
 #, c-format
 msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 2911 section 4.1.5)."
 msgstr ""
 "\"%s\": URI の値 \"%s\" が誤っています - 長さの誤り %d (RFC 2911 4.1.5 節)。"
 
-#: cups/ipp.c:4858
 #, c-format
 msgid "\"%s\": Bad attribute name - bad length %d (RFC 2911 section 4.1.3)."
 msgstr "\"%s\": 属性名が誤っています - 長さの誤り %d (RFC 2911 4.1.3 節)。"
 
-#: cups/ipp.c:4850
 #, c-format
 msgid ""
 "\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)."
 msgstr "\"%s\": 属性名が誤っています - 不正な文字 (RFC 2911 4.1.3 節)。"
 
-#: cups/ipp.c:4876
 #, c-format
 msgid "\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11)."
 msgstr "\"%s\": 真偽値 %d が誤っています (RFC 2911 4.1.11 節)。"
 
-#: cups/ipp.c:5290
 #, c-format
 msgid ""
 "\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section 4.1.7)."
 msgstr ""
 "\"%s\": charset の値 \"%s\" が誤っています - 不正な文字 (RFC 2911 4.1.7 節)。"
 
-#: cups/ipp.c:5299
 #, c-format
 msgid ""
 "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)."
@@ -1808,67 +1423,55 @@ msgstr ""
 "\"%s\": charset の値 \"%s\" が誤っています - 不正な長さ %d (RFC 2911 section "
 "4.1.7)."
 
-#: cups/ipp.c:4976
 #, c-format
 msgid "\"%s\": Bad dateTime UTC hours %u (RFC 2911 section 4.1.14)."
 msgstr ""
 "\"%s\": dateTime UTC の時間指定 %u が誤っています (RFC 2911 4.1.14 節)."
 
-#: cups/ipp.c:4984
 #, c-format
 msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 2911 section 4.1.14)."
 msgstr "\"%s\": dateTime UTC の分指定 %u が誤っています (RFC 2911 4.1.14 節)。"
 
-#: cups/ipp.c:4968
 #, c-format
 msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14)."
 msgstr ""
 "\"%s\": dateTime UTC の符号指定 '%c' が誤っています (RFC 2911 4.1.14 節)。"
 
-#: cups/ipp.c:4928
 #, c-format
 msgid "\"%s\": Bad dateTime day %u (RFC 2911 section 4.1.14)."
 msgstr "\"%s\": dateTime の日付指定 %u が誤っています (RFC 2911 4.1.14 節)."
 
-#: cups/ipp.c:4960
 #, c-format
 msgid "\"%s\": Bad dateTime deciseconds %u (RFC 2911 section 4.1.14)."
 msgstr ""
 "\"%s\": dateTime の 0.1 秒の指定 %u が誤っています (RFC 2911 4.1.14 節)。"
 
-#: cups/ipp.c:4936
 #, c-format
 msgid "\"%s\": Bad dateTime hours %u (RFC 2911 section 4.1.14)."
 msgstr "\"%s\": dateTime の時間指定 %u が誤っています (RFC 2911 4.1.14 節)。"
 
-#: cups/ipp.c:4944
 #, c-format
 msgid "\"%s\": Bad dateTime minutes %u (RFC 2911 section 4.1.14)."
 msgstr "\"%s\": dateTime の分指定が誤っています %u (RFC 2911 4.1.14 節)。"
 
-#: cups/ipp.c:4920
 #, c-format
 msgid "\"%s\": Bad dateTime month %u (RFC 2911 section 4.1.14)."
 msgstr "\"%s\": dateTime の月指定 %u が誤っています (RFC 2911 4.1.14 節)。"
 
-#: cups/ipp.c:4952
 #, c-format
 msgid "\"%s\": Bad dateTime seconds %u (RFC 2911 section 4.1.14)."
 msgstr "\"%s\": 日時の秒指定 %u が誤っています (RFC 2911 4.1.14 節)。"
 
-#: cups/ipp.c:4890
 #, c-format
 msgid "\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4)."
 msgstr "\"%s\": enum の値 %d が誤っています - 範囲外の値 (RFC 2911 4.1.4 節)。"
 
-#: cups/ipp.c:5205
 #, c-format
 msgid ""
 "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3)."
 msgstr ""
 "\"%s\": keyword の値 \"%s\" が誤っています -  %d (RFC 2911 section 4.1.3)."
 
-#: cups/ipp.c:5196
 #, c-format
 msgid ""
 "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section "
@@ -1876,7 +1479,6 @@ msgid ""
 msgstr ""
 "\"%s\": keyword の値 \"%s\" が誤っています - 不正な文字 (RFC 2911 4.1.3 節)。"
 
-#: cups/ipp.c:5399
 #, c-format
 msgid ""
 "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section "
@@ -1885,7 +1487,6 @@ msgstr ""
 "\"%s\": mimeMediaType の値 \"%s\" が誤っています - 誤った文字 (RFC 2911 "
 "4.1.9 節)。"
 
-#: cups/ipp.c:5409
 #, c-format
 msgid ""
 "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section "
@@ -1894,7 +1495,6 @@ msgstr ""
 "\"%s\": mimeMediaType の値 \"%s\" が誤っています - 長さの誤り %d (RFC 2911 "
 "4.1.9 節)。"
 
-#: cups/ipp.c:5167
 #, c-format
 msgid ""
 "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.2)."
@@ -1902,14 +1502,12 @@ msgstr ""
 "\"%s\": name の値 \"%s\" が誤っています - UTF-8 として誤った並び (RFC 2911 "
 "4.1.2 節)。"
 
-#: cups/ipp.c:5176
 #, c-format
 msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2)."
 msgstr ""
 "\"%s\": name の値 \"%s\" が誤っています - 誤った長さ %d (RFC 2911 section "
 "4.1.2)。"
 
-#: cups/ipp.c:5345
 #, c-format
 msgid ""
 "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 section "
@@ -1918,7 +1516,6 @@ msgstr ""
 "\"%s\": naturalLanguage の値 \"%s\" が誤っています - 誤った文字 (RFC 2911 "
 "4.1.8 節)。"
 
-#: cups/ipp.c:5355
 #, c-format
 msgid ""
 "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 2911 section "
@@ -1927,14 +1524,12 @@ msgstr ""
 "\"%s\": naturalLanguage の値 \"%s\" が誤っています - 誤った長さ %d (RFC 2911 "
 "4.1.8 節)。"
 
-#: cups/ipp.c:4904
 #, c-format
 msgid ""
 "\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10)."
 msgstr ""
 "\"%s\": octetString 値が誤っています - 誤った長さ %d (RFC 2911 4.1.10 節)。"
 
-#: cups/ipp.c:5047
 #, c-format
 msgid ""
 "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 2911 "
@@ -1943,7 +1538,6 @@ msgstr ""
 "\"%s\": rangeOfInteger の値 %d-%d が誤っています  - 下限が上限よりも大きい "
 "(RFC 2911 4.1.13 節)。"
 
-#: cups/ipp.c:5028
 #, c-format
 msgid ""
 "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section "
@@ -1952,14 +1546,14 @@ msgstr ""
 "\"%s\": resolution の値 %dx%d%s が誤っています - 単位値の誤り (RFC 2911 "
 "4.1.15 節)。"
 
-#: cups/ipp.c:4997
 #, c-format
 msgid ""
 "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be "
 "positive (RFC 2911 section 4.1.15)."
-msgstr "\"%s\": resolution の値 %dx%d%s が誤っています - 主走査解像度が負 (RFC 2911 4.1.15 節)。"
+msgstr ""
+"\"%s\": resolution の値 %dx%d%s が誤っています - 主走査解像度が負 (RFC 2911 "
+"4.1.15 節)。"
 
-#: cups/ipp.c:5012
 #, c-format
 msgid ""
 "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC "
@@ -1968,7 +1562,6 @@ msgstr ""
 "\"%s\": resolution の値 %dx%d%s が誤っています - 副走査解像度が負 (RFC 2911 "
 "4.1.15 節)。"
 
-#: cups/ipp.c:5109
 #, c-format
 msgid ""
 "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.1)."
@@ -1976,13 +1569,11 @@ msgstr ""
 "\"%s\": text の値 \"%s\" が誤っています - UTF-8 として誤った並び (RFC 2911 "
 "4.1.1 節)。"
 
-#: cups/ipp.c:5118
 #, c-format
 msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 2911 section 4.1.1)."
 msgstr ""
 "\"%s\": text の値 \"%s\" が誤っています - 不正な長さ %d (RFC 2911 4.1.1 節)。"
 
-#: cups/ipp.c:5261
 #, c-format
 msgid ""
 "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section 4.1.6)."
@@ -1990,276 +1581,218 @@ msgstr ""
 "\"%s\": uriScheme の値 \"%s\" が誤っています - 誤った文字 (RFC 2911 4.1.6 "
 "節)."
 
-#: cups/ipp.c:5270
 #, c-format
 msgid ""
 "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 2911 section 4.1.6)."
-msgstr "\"%s\": uriScheme の値 \"%s\" が誤っています - 不正な長さ %d (RFC 2911 4.1.6 節)."
+msgstr ""
+"\"%s\": uriScheme の値 \"%s\" が誤っています - 不正な長さ %d (RFC 2911 4.1.6 "
+"節)."
 
-#: berkeley/lpq.c:533
 #, c-format
 msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
 msgstr "%-7s %-7.7s %-7d %-31.31s %.0f バイト"
 
-#: cups/dest-localization.c:114
 #, c-format
 msgid "%d x %d mm"
 msgstr "%d x %d mm"
 
-#: cups/dest-localization.c:106
 #, c-format
 msgid "%g x %g"
 msgstr "%g x %g"
 
-#: cups/dest-localization.c:169 cups/dest-localization.c:176
 #, c-format
 msgid "%s (%s)"
 msgstr "%s (%s)"
 
-#: cups/dest-localization.c:183
 #, c-format
 msgid "%s (%s, %s)"
 msgstr "%s (%s, %s)"
 
-#: cups/dest-localization.c:160
 #, c-format
 msgid "%s (Borderless)"
 msgstr "%s (ふちなし)"
 
-#: cups/dest-localization.c:167 cups/dest-localization.c:174
 #, c-format
 msgid "%s (Borderless, %s)"
 msgstr "%s (ふちなし, %s)"
 
-#: cups/dest-localization.c:181
 #, c-format
 msgid "%s (Borderless, %s, %s)"
 msgstr "%s (ふちなし, %s, %s)"
 
-#: systemv/lpstat.c:777
 #, c-format
 msgid "%s accepting requests since %s"
 msgstr "%s は %s からリクエストを受け付けています"
 
-#: scheduler/ipp.c:9952
 #, c-format
 msgid "%s cannot be changed."
 msgstr "%s は変更できません。"
 
-#: berkeley/lpc.c:181
 #, c-format
 msgid "%s is not implemented by the CUPS version of lpc."
 msgstr "%s は lpc の CUPS バージョンでは実装されていません。"
 
-#: berkeley/lpq.c:618
 #, c-format
 msgid "%s is not ready"
 msgstr "%s は準備ができていません"
 
-#: berkeley/lpq.c:611
 #, c-format
 msgid "%s is ready"
 msgstr "%s は準備ができています"
 
-#: berkeley/lpq.c:614
 #, c-format
 msgid "%s is ready and printing"
 msgstr "%s は準備ができており印刷しています"
 
-#: filter/rastertoepson.c:970 filter/rastertohp.c:700
-#: filter/rastertolabel.c:1120
 #, c-format
 msgid "%s job-id user title copies options [file]"
 msgstr "%s ジョブID ユーザー タイトル コピー数 オプション [ファイル]"
 
-#: systemv/lpstat.c:781
 #, c-format
 msgid "%s not accepting requests since %s -"
 msgstr "%s は %s からリクエストを受け付けていません -"
 
-#: scheduler/ipp.c:618
 #, c-format
 msgid "%s not supported."
 msgstr "%s はサポートされていません。"
 
-#: systemv/lpstat.c:792
 #, c-format
 msgid "%s/%s accepting requests since %s"
 msgstr "%s/%s は %s からリクエストを受け付けています"
 
-#: systemv/lpstat.c:797
 #, c-format
 msgid "%s/%s not accepting requests since %s -"
 msgstr "%s/%s は %s からリクエストを受け付けていません - "
 
-#: berkeley/lpq.c:526
 #, c-format
 msgid "%s: %-33.33s [job %d localhost]"
 msgstr "%s:%-33.33s [ジョブ %d localhost]"
 
 #. TRANSLATORS: Message is "subject: error"
-#: cups/langprintf.c:77 scheduler/cupsfilter.c:726 systemv/lpadmin.c:791
-#: systemv/lpadmin.c:842 systemv/lpadmin.c:892 systemv/lpadmin.c:948
-#: systemv/lpadmin.c:1046 systemv/lpadmin.c:1098 systemv/lpadmin.c:1154
-#: systemv/lpadmin.c:1463
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: systemv/cancel.c:305 systemv/cancel.c:368
 #, c-format
 msgid "%s: %s failed: %s"
 msgstr "%s: %s に失敗しました: %s"
 
-#: test/ippfind.c:777 test/ipptool.c:378
+#, c-format
+msgid "%s: Bad printer URI \"%s\"."
+msgstr ""
+
 #, c-format
 msgid "%s: Bad version %s for \"-V\"."
 msgstr "%s: -V オプションにおいて %s は不正なバージョンです。"
 
-#: systemv/cupsaccept.c:68
 #, c-format
 msgid "%s: Don't know what to do."
 msgstr "%s: 何が起きているか不明です。"
 
-#: berkeley/lpq.c:225 berkeley/lpr.c:358 systemv/lp.c:602
 #, c-format
 msgid ""
 "%s: Error - %s environment variable names non-existent destination \"%s\"."
 msgstr "%s: エラー - 環境変数 %s が存在しない宛先 \"%s\" を指しています。"
 
-#: berkeley/lpq.c:133 berkeley/lpq.c:203 berkeley/lpr.c:230 berkeley/lpr.c:333
-#: systemv/lp.c:157 systemv/lp.c:577 systemv/lp.c:697 systemv/lp.c:746
-#: systemv/lpstat.c:195 systemv/lpstat.c:241 systemv/lpstat.c:332
-#: systemv/lpstat.c:361 systemv/lpstat.c:385 systemv/lpstat.c:444
-#: systemv/lpstat.c:510 systemv/lpstat.c:571 systemv/lpstat.c:696
-#: systemv/lpstat.c:880 systemv/lpstat.c:1141 systemv/lpstat.c:1339
-#: systemv/lpstat.c:1579
 #, c-format
 msgid "%s: Error - add '/version=1.1' to server name."
 msgstr "%s: エラー - '/version=1.1' をサーバー名に付与してください。"
 
-#: systemv/lp.c:234
 #, c-format
 msgid "%s: Error - bad job ID."
 msgstr "%s: エラー - 不正なジョブ ID です。"
 
-#: systemv/lp.c:222
 #, c-format
 msgid "%s: Error - cannot print files and alter jobs simultaneously."
 msgstr ""
 "%s: エラー - ファイルを印刷できず、ジョブを同時に変えることができません。"
 
-#: systemv/lp.c:515
 #, c-format
 msgid "%s: Error - cannot print from stdin if files or a job ID are provided."
 msgstr ""
 "%s: エラー - ファイルまたはジョブ ID が提供されている場合、標準入力から印刷で"
 "きません。 "
 
-#: systemv/lp.c:464
 #, c-format
 msgid "%s: Error - expected character set after \"-S\" option."
 msgstr "%s: エラー - \"-S\" オプションのあとには文字セットが必要です。"
 
-#: systemv/lp.c:483
 #, c-format
 msgid "%s: Error - expected content type after \"-T\" option."
 msgstr "%s: エラー - \"-T\" オプションのあとにはコンテンツタイプが必要です。"
 
-#: berkeley/lpr.c:245
 #, c-format
 msgid "%s: Error - expected copies after \"-#\" option."
 msgstr "%s: エラー - \"-#\" オプションのあとにはコピー数が必要です。"
 
-#: systemv/lp.c:267
 #, c-format
 msgid "%s: Error - expected copies after \"-n\" option."
 msgstr "%s: エラー - \"-n\" オプションのあとにはコピー数が必要です。"
 
-#: berkeley/lpr.c:206
 #, c-format
 msgid "%s: Error - expected destination after \"-P\" option."
 msgstr "%s: エラー - \"-P\" オプションのあとには宛先が必要です。"
 
-#: systemv/lp.c:132
 #, c-format
 msgid "%s: Error - expected destination after \"-d\" option."
 msgstr "%s: エラー - \"-d\" オプションのあとにはプリンター名が必要です。"
 
-#: systemv/lp.c:171
 #, c-format
 msgid "%s: Error - expected form after \"-f\" option."
 msgstr "%s: エラー - \"-f\" オプションのあとには用紙名が必要です。"
 
-#: systemv/lp.c:394
 #, c-format
 msgid "%s: Error - expected hold name after \"-H\" option."
 msgstr "%s: エラー - \"-H\" オプションのあとにはホールド名が必要です。"
 
-#: berkeley/lpr.c:100
 #, c-format
 msgid "%s: Error - expected hostname after \"-H\" option."
 msgstr "%s: エラー - \"-H\" オプションのあとにはホスト名が必要です。"
 
-#: berkeley/lpq.c:169 berkeley/lprm.c:123 systemv/cancel.c:124
-#: systemv/cupsaccept.c:123 systemv/lp.c:192 systemv/lpstat.c:266
 #, c-format
 msgid "%s: Error - expected hostname after \"-h\" option."
 msgstr "%s: エラー -  \"-h\" オプションのあとにはホスト名が必要です。"
 
-#: systemv/lp.c:374
 #, c-format
 msgid "%s: Error - expected mode list after \"-y\" option."
 msgstr "%s: エラー - \"-y\" オプションのあとにはモードリストが必要です。"
 
-#: berkeley/lpr.c:268
 #, c-format
 msgid "%s: Error - expected name after \"-%c\" option."
 msgstr "%s: エラー - \"-%c\" オプションのあとには名前が必要です。"
 
-#: berkeley/lpr.c:150 systemv/lp.c:291
 #, c-format
 msgid "%s: Error - expected option=value after \"-o\" option."
 msgstr "%s: エラー - \"-o\" オプションのあとには オプション=値 が必要です。"
 
-#: systemv/lp.c:444
 #, c-format
 msgid "%s: Error - expected page list after \"-P\" option."
 msgstr "%s: エラー - \"-P\" オプションのあとにはページリストが必要です。"
 
-#: systemv/lp.c:311
 #, c-format
 msgid "%s: Error - expected priority after \"-%c\" option."
 msgstr "%s: エラー - \"-%c\" オプションのあとには優先度が必要です。"
 
-#: systemv/cupsaccept.c:141
 #, c-format
 msgid "%s: Error - expected reason text after \"-r\" option."
 msgstr "%s: エラー - \"-r\" のあとには理由のテキストが必要です。"
 
-#: systemv/lp.c:357
 #, c-format
 msgid "%s: Error - expected title after \"-t\" option."
 msgstr "%s: エラー - \"-t\" オプションのあとにはタイトルが必要です。"
 
-#: berkeley/lpq.c:97 berkeley/lpr.c:81 berkeley/lprm.c:104 systemv/cancel.c:95
-#: systemv/cupsaccept.c:101 systemv/lp.c:110 systemv/lpadmin.c:424
-#: systemv/lpstat.c:124
 #, c-format
 msgid "%s: Error - expected username after \"-U\" option."
 msgstr "%s: エラー - \"-U\" オプションのあとにはユーザー名が必要です。"
 
-#: systemv/cancel.c:145
 #, c-format
 msgid "%s: Error - expected username after \"-u\" option."
 msgstr "%s: エラー - \"-u\" オプションのあとにはユーザー名が必要です。"
 
-#: berkeley/lpr.c:122
 #, c-format
 msgid "%s: Error - expected value after \"-%c\" option."
 msgstr "%s: エラー -  \"-%c\" オプションのあとには値が必要です。"
 
-#: systemv/lpstat.c:144 systemv/lpstat.c:158
 #, c-format
 msgid ""
 "%s: Error - need \"completed\", \"not-completed\", or \"all\" after \"-W\" "
@@ -2268,178 +1801,151 @@ msgstr ""
 "%s: エラー - \"-W\" オプションのあとには、\"completed\"、\"not-completed"
 "\"、\"all\" のいずれかが必要です。"
 
-#: berkeley/lpq.c:230 berkeley/lpr.c:363 systemv/lp.c:607
 #, c-format
 msgid "%s: Error - no default destination available."
 msgstr "%s: エラー - 利用可能なデフォルトの宛先がありません。"
 
-#: systemv/lp.c:333
 #, c-format
 msgid "%s: Error - priority must be between 1 and 100."
 msgstr "%s: エラー - 優先度は 1 から 100 の間である必要があります。"
 
-#: berkeley/lpr.c:366 systemv/lp.c:610
 #, c-format
 msgid "%s: Error - scheduler not responding."
 msgstr "%s: エラー - スケジューラーが応答していません。"
 
-#: berkeley/lpr.c:311 systemv/lp.c:547
 #, c-format
 msgid "%s: Error - too many files - \"%s\"."
 msgstr "%s: エラー - ファイルが多すぎます - \"%s\""
 
-#: berkeley/lpr.c:293 systemv/lp.c:530
 #, c-format
 msgid "%s: Error - unable to access \"%s\" - %s"
 msgstr "%s: エラー - \"%s\" にアクセスできません - %s"
 
-#: berkeley/lpr.c:409 systemv/lp.c:641
 #, c-format
 msgid "%s: Error - unable to queue from stdin - %s."
 msgstr "%s: エラー - 標準入力からキューにデータを入力できません。 - %s"
 
-#: berkeley/lprm.c:87 berkeley/lprm.c:172 systemv/cancel.c:222
 #, c-format
 msgid "%s: Error - unknown destination \"%s\"."
 msgstr "%s: エラー - \"%s\" は未知の宛先です。"
 
-#: berkeley/lpq.c:137
 #, c-format
 msgid "%s: Error - unknown destination \"%s/%s\"."
 msgstr "%s: エラー - \"%s/%s\" は未知の宛先です。"
 
-#: berkeley/lpr.c:279 berkeley/lprm.c:139 systemv/cancel.c:163
-#: systemv/cupsaccept.c:164 systemv/lp.c:506 systemv/lpstat.c:456
 #, c-format
 msgid "%s: Error - unknown option \"%c\"."
 msgstr "%s: エラー - '%c' は未知のオプションです。"
 
-#: systemv/cupsaccept.c:157 systemv/lp.c:497
 #, c-format
 msgid "%s: Error - unknown option \"%s\"."
 msgstr "%s: エラー - '%s' は未知のオプションです。"
 
-#: systemv/lp.c:211
 #, c-format
 msgid "%s: Expected job ID after \"-i\" option."
 msgstr "%s: '-i' オプションのあとにはジョブ ID が必要です。"
 
-#: systemv/lpstat.c:514 systemv/lpstat.c:554
 #, c-format
 msgid "%s: Invalid destination name in list \"%s\"."
 msgstr "%s: リスト \"%s\" に無効な宛先名があります。"
 
-#: scheduler/cupsfilter.c:579
 #, c-format
 msgid "%s: Invalid filter string \"%s\"."
 msgstr "%s: 無効なフィルター文字列です \"%s\""
 
-#: test/ipptool.c:309
 #, c-format
 msgid "%s: Missing filename for \"-P\"."
 msgstr "%s: \"-P\" にファイル名がありません。"
 
-#: test/ippfind.c:749 test/ipptool.c:346
 #, c-format
 msgid "%s: Missing timeout for \"-T\"."
 msgstr "%s: \"-T\" オプションにタイムアウトが設定されていません。"
 
-#: test/ippfind.c:762 test/ipptool.c:360
 #, c-format
 msgid "%s: Missing version for \"-V\"."
 msgstr "%s: \"-V\" オプションにバージョンの指定がありません。"
 
-#: systemv/lp.c:421
 #, c-format
 msgid "%s: Need job ID (\"-i jobid\") before \"-H restart\"."
 msgstr "%s: '-H restart' の前にはジョブ ID ('-i ジョブID') が必要です。"
 
-#: scheduler/cupsfilter.c:451
 #, c-format
 msgid "%s: No filter to convert from %s/%s to %s/%s."
 msgstr "%s: %s/%s から %s/%s に変換するフィルターがありません。"
 
-#: systemv/cupsaccept.c:198
 #, c-format
 msgid "%s: Operation failed: %s"
 msgstr "%s: 操作に失敗しました: %s"
 
-#: berkeley/lpq.c:83 berkeley/lpr.c:67 berkeley/lprm.c:67 systemv/cancel.c:82
-#: systemv/cupsaccept.c:88 systemv/cupsaddsmb.c:86 systemv/lp.c:96
-#: systemv/lpadmin.c:225 systemv/lpinfo.c:88 systemv/lpmove.c:73
-#: systemv/lpstat.c:88 test/ipptool.c:291 test/ipptool.c:335
 #, c-format
 msgid "%s: Sorry, no encryption support."
 msgstr "%s: 残念ながら、暗号化サポートはコンパイル時に組み込まれていません。"
 
-#: berkeley/lpq.c:284 scheduler/cupsfilter.c:1275 systemv/cancel.c:245
-#: systemv/cupsaddsmb.c:144 systemv/cupsaddsmb.c:171
+#, c-format
+msgid "%s: Unable to connect to \"%s:%d\": %s"
+msgstr ""
+
 #, c-format
 msgid "%s: Unable to connect to server."
 msgstr "%s: サーバーに接続できません"
 
-#: systemv/cancel.c:328
 #, c-format
 msgid "%s: Unable to contact server."
 msgstr "%s: サーバーに連絡できません。"
 
-#: scheduler/cupsfilter.c:416
+#, c-format
+msgid "%s: Unable to create PPD file: %s"
+msgstr ""
+
 #, c-format
 msgid "%s: Unable to determine MIME type of \"%s\"."
 msgstr "%s: \"%s\" の MIME タイプを判別できません。"
 
-#: test/ipptool.c:318
 #, c-format
 msgid "%s: Unable to open \"%s\": %s"
 msgstr "%s: \"%s\" を開けません: %s"
 
-#: ppdc/ppdmerge.cxx:90
 #, c-format
 msgid "%s: Unable to open %s: %s"
 msgstr "%s: %s を開けません: %s"
 
-#: scheduler/cupsfilter.c:674 ppdc/ppdmerge.cxx:106
 #, c-format
 msgid "%s: Unable to open PPD file: %s on line %d."
 msgstr "%s: PPD ファイルを開けません: %s の %d 行目"
 
-#: scheduler/cupsfilter.c:383
 #, c-format
 msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"."
 msgstr ""
 "%s: \"%s\" または \"%s\" から MIME データベースを読み取ることができません。"
 
-#: berkeley/lpq.c:140 systemv/lpstat.c:575
+#, c-format
+msgid "%s: Unable to resolve \"%s\"."
+msgstr ""
+
 #, c-format
 msgid "%s: Unknown destination \"%s\"."
 msgstr "%s: \"%s\" は未知の宛先です。"
 
-#: scheduler/cupsfilter.c:428
 #, c-format
 msgid "%s: Unknown destination MIME type %s/%s."
 msgstr "%s: %s/%s は未知の宛先 MIME タイプです。"
 
-#: scheduler/cupsfilter.c:1479
 #, c-format
 msgid "%s: Unknown option \"%c\"."
 msgstr "%s: '%c' は未知のオプションです。"
 
-#: test/ippfind.c:648
 #, c-format
 msgid "%s: Unknown option \"%s\"."
 msgstr "%s: \"%s\" は未知のオプションです。"
 
-#: test/ippfind.c:928
 #, c-format
 msgid "%s: Unknown option \"-%c\"."
 msgstr "%s: \"-%c\" は未知のオプションです。"
 
-#: scheduler/cupsfilter.c:408
 #, c-format
 msgid "%s: Unknown source MIME type %s/%s."
 msgstr "%s: %s/%s は未知のソース MIME タイプです。"
 
-#: berkeley/lpr.c:136
 #, c-format
 msgid ""
 "%s: Warning - \"%c\" format modifier not supported - output may not be "
@@ -2448,1347 +1954,1008 @@ msgstr ""
 "%s: 警告 - '%c' 形式修飾子はサポートされていません - 出力は正しくないものにな"
 "るかもしれません。"
 
-#: systemv/lp.c:471
 #, c-format
 msgid "%s: Warning - character set option ignored."
 msgstr "%s: 警告 - 文字セットオプションは無視されます。"
 
-#: systemv/lp.c:490
 #, c-format
 msgid "%s: Warning - content type option ignored."
 msgstr "%s: 警告 - コンテンツタイプオプションは無視されます。"
 
-#: systemv/lp.c:178
 #, c-format
 msgid "%s: Warning - form option ignored."
 msgstr "%s: 警告 - 用紙オプションは無視されます。"
 
-#: systemv/lp.c:381
 #, c-format
 msgid "%s: Warning - mode option ignored."
 msgstr "%s: 警告 - モードオプションは無視されます。"
 
-#: ppdc/sample.c:305
 msgid "-1"
 msgstr "-1"
 
-#: ppdc/sample.c:296
 msgid "-10"
 msgstr "-10"
 
-#: ppdc/sample.c:388
 msgid "-100"
 msgstr "-100"
 
-#: ppdc/sample.c:387
 msgid "-105"
 msgstr "-105"
 
-#: ppdc/sample.c:295
 msgid "-11"
 msgstr "-11"
 
-#: ppdc/sample.c:386
 msgid "-110"
 msgstr "-110"
 
-#: ppdc/sample.c:385
 msgid "-115"
 msgstr "-115"
 
-#: ppdc/sample.c:294
 msgid "-12"
 msgstr "-12"
 
-#: ppdc/sample.c:384
 msgid "-120"
 msgstr "-120"
 
-#: ppdc/sample.c:293
 msgid "-13"
 msgstr "-13"
 
-#: ppdc/sample.c:292
 msgid "-14"
 msgstr "-14"
 
-#: ppdc/sample.c:291
 msgid "-15"
 msgstr "-15"
 
-#: ppdc/sample.c:304
 msgid "-2"
 msgstr "-2"
 
-#: ppdc/sample.c:404
 msgid "-20"
 msgstr "-20"
 
-#: ppdc/sample.c:403
 msgid "-25"
 msgstr "-25"
 
-#: ppdc/sample.c:303
 msgid "-3"
 msgstr "-3"
 
-#: ppdc/sample.c:402
 msgid "-30"
 msgstr "-30"
 
-#: ppdc/sample.c:401
 msgid "-35"
 msgstr "-35"
 
-#: ppdc/sample.c:302
 msgid "-4"
 msgstr "-4"
 
-#: ppdc/sample.c:400
 msgid "-40"
 msgstr "-40"
 
-#: ppdc/sample.c:399
 msgid "-45"
 msgstr "-45"
 
-#: ppdc/sample.c:301
 msgid "-5"
 msgstr "-5"
 
-#: ppdc/sample.c:398
 msgid "-50"
 msgstr "-50"
 
-#: ppdc/sample.c:397
 msgid "-55"
 msgstr "-55"
 
-#: ppdc/sample.c:300
 msgid "-6"
 msgstr "-6"
 
-#: ppdc/sample.c:396
 msgid "-60"
 msgstr "-60"
 
-#: ppdc/sample.c:395
 msgid "-65"
 msgstr "-65"
 
-#: ppdc/sample.c:299
 msgid "-7"
 msgstr "-7"
 
-#: ppdc/sample.c:394
 msgid "-70"
 msgstr "-70"
 
-#: ppdc/sample.c:393
 msgid "-75"
 msgstr "-75"
 
-#: ppdc/sample.c:298
 msgid "-8"
 msgstr "-8"
 
-#: ppdc/sample.c:392
 msgid "-80"
 msgstr "-80"
 
-#: ppdc/sample.c:391
 msgid "-85"
 msgstr "-85"
 
-#: ppdc/sample.c:297
 msgid "-9"
 msgstr "-9"
 
-#: ppdc/sample.c:390
 msgid "-90"
 msgstr "-90"
 
-#: ppdc/sample.c:389
 msgid "-95"
 msgstr "-95"
 
-#: ppdc/sample.c:306
 msgid "0"
 msgstr "0"
 
-#: ppdc/sample.c:307
 msgid "1"
 msgstr "1"
 
-#: ppdc/sample.c:379
 msgid "1 inch/sec."
 msgstr "1 インチ/秒"
 
-#: ppdc/sample.c:172
 msgid "1.25x0.25\""
 msgstr "1.25x0.25 インチ"
 
-#: ppdc/sample.c:173
 msgid "1.25x2.25\""
 msgstr "1.25x2.25 インチ"
 
-#: ppdc/sample.c:427
 msgid "1.5 inch/sec."
 msgstr "1.5 インチ/秒"
 
-#: ppdc/sample.c:174
 msgid "1.50x0.25\""
 msgstr "1.50x0.25 インチ"
 
-#: ppdc/sample.c:175
 msgid "1.50x0.50\""
 msgstr "1.50x0.50 インチ"
 
-#: ppdc/sample.c:176
 msgid "1.50x1.00\""
 msgstr "1.50x1.00 インチ"
 
-#: ppdc/sample.c:177
 msgid "1.50x2.00\""
 msgstr "1.50x2.00 インチ"
 
-#: ppdc/sample.c:316
 msgid "10"
 msgstr "10"
 
-#: ppdc/sample.c:438
 msgid "10 inches/sec."
 msgstr "10 インチ/秒"
 
-#: ppdc/sample.c:6
 msgid "10 x 11"
 msgstr "10 x 11 インチ"
 
-#: ppdc/sample.c:7
 msgid "10 x 13"
 msgstr "10 x 13 インチ"
 
-#: ppdc/sample.c:8
 msgid "10 x 14"
 msgstr "10 x 14 インチ"
 
-#: ppdc/sample.c:418
 msgid "100"
 msgstr "100"
 
-#: ppdc/sample.c:329
 msgid "100 mm/sec."
 msgstr "100 ミリメートル/秒"
 
-#: ppdc/sample.c:419
 msgid "105"
 msgstr "105"
 
-#: ppdc/sample.c:317
 msgid "11"
 msgstr "11"
 
-#: ppdc/sample.c:439
 msgid "11 inches/sec."
 msgstr "11 インチ/秒"
 
-#: ppdc/sample.c:420
 msgid "110"
 msgstr "110"
 
-#: ppdc/sample.c:421
 msgid "115"
 msgstr "115"
 
-#: ppdc/sample.c:318
 msgid "12"
 msgstr "12"
 
-#: ppdc/sample.c:440
 msgid "12 inches/sec."
 msgstr "12 インチ/秒"
 
-#: ppdc/sample.c:9
 msgid "12 x 11"
 msgstr "12 x 11 インチ"
 
-#: ppdc/sample.c:422
 msgid "120"
 msgstr "120"
 
-#: ppdc/sample.c:330
 msgid "120 mm/sec."
 msgstr "120 ミリメートル/秒"
 
-#: ppdc/sample.c:243
 msgid "120x60dpi"
 msgstr "120x60dpi"
 
-#: ppdc/sample.c:249
 msgid "120x72dpi"
 msgstr "120x72dpi"
 
-#: ppdc/sample.c:319
 msgid "13"
 msgstr "13"
 
-#: ppdc/sample.c:232
 msgid "136dpi"
 msgstr "136dpi"
 
-#: ppdc/sample.c:320
 msgid "14"
 msgstr "14"
 
-#: ppdc/sample.c:321
 msgid "15"
 msgstr "15"
 
-#: ppdc/sample.c:323
 msgid "15 mm/sec."
 msgstr "15 ミリメートル/秒"
 
-#: ppdc/sample.c:10
 msgid "15 x 11"
 msgstr "15 x 11 インチ"
 
-#: ppdc/sample.c:331
 msgid "150 mm/sec."
 msgstr "150 ミリメートル/秒"
 
-#: ppdc/sample.c:278
 msgid "150dpi"
 msgstr "150dpi"
 
-#: ppdc/sample.c:363
 msgid "16"
 msgstr "16"
 
-#: ppdc/sample.c:364
 msgid "17"
 msgstr "17"
 
-#: ppdc/sample.c:365
 msgid "18"
 msgstr "18"
 
-#: ppdc/sample.c:244
 msgid "180dpi"
 msgstr "180dpi"
 
-#: ppdc/sample.c:366
 msgid "19"
 msgstr "19"
 
-#: ppdc/sample.c:308
 msgid "2"
 msgstr "2"
 
-#: ppdc/sample.c:380
 msgid "2 inches/sec."
 msgstr "2 インチ/秒"
 
-#: ppdc/sample.c:262
 msgid "2-Sided Printing"
 msgstr "両面印刷"
 
-#: ppdc/sample.c:178
 msgid "2.00x0.37\""
 msgstr "2.00x0.37 インチ"
 
-#: ppdc/sample.c:179
 msgid "2.00x0.50\""
 msgstr "2.00x0.50 インチ"
 
-#: ppdc/sample.c:180
 msgid "2.00x1.00\""
 msgstr "2.00x1.00 インチ"
 
-#: ppdc/sample.c:181
 msgid "2.00x1.25\""
 msgstr "2.00x1.25 インチ"
 
-#: ppdc/sample.c:182
 msgid "2.00x2.00\""
 msgstr "2.00x2.00 インチ"
 
-#: ppdc/sample.c:183
 msgid "2.00x3.00\""
 msgstr "2.00x3.00 インチ"
 
-#: ppdc/sample.c:184
 msgid "2.00x4.00\""
 msgstr "2.00x4.00 インチ"
 
-#: ppdc/sample.c:185
 msgid "2.00x5.50\""
 msgstr "2.00x5.50 インチ"
 
-#: ppdc/sample.c:186
 msgid "2.25x0.50\""
 msgstr "2.25x0.50 インチ"
 
-#: ppdc/sample.c:187
 msgid "2.25x1.25\""
 msgstr "2.25x1.25 インチ"
 
-#: ppdc/sample.c:188
 msgid "2.25x4.00\""
 msgstr "2.25x4.00 インチ"
 
-#: ppdc/sample.c:189
 msgid "2.25x5.50\""
 msgstr "2.25x5.50 インチ"
 
-#: ppdc/sample.c:190
 msgid "2.38x5.50\""
 msgstr "2.38x5.50 インチ"
 
-#: ppdc/sample.c:428
 msgid "2.5 inches/sec."
 msgstr "2.5 インチ/秒"
 
-#: ppdc/sample.c:191
 msgid "2.50x1.00\""
 msgstr "2.50x1.00 インチ"
 
-#: ppdc/sample.c:192
 msgid "2.50x2.00\""
 msgstr "2.50x2.00 インチ"
 
-#: ppdc/sample.c:193
 msgid "2.75x1.25\""
 msgstr "2.75x1.25 インチ"
 
-#: ppdc/sample.c:194
 msgid "2.9 x 1\""
 msgstr "2.9 x 1 インチ"
 
-#: ppdc/sample.c:367
 msgid "20"
 msgstr "20"
 
-#: ppdc/sample.c:324
 msgid "20 mm/sec."
 msgstr "20 ミリメートル/秒"
 
-#: ppdc/sample.c:332
 msgid "200 mm/sec."
 msgstr "200 ミリメートル/秒"
 
-#: ppdc/sample.c:233
 msgid "203dpi"
 msgstr "203dpi"
 
-#: ppdc/sample.c:368
 msgid "21"
 msgstr "21"
 
-#: ppdc/sample.c:369
 msgid "22"
 msgstr "22"
 
-#: ppdc/sample.c:370
 msgid "23"
 msgstr "23"
 
-#: ppdc/sample.c:371
 msgid "24"
 msgstr "24"
 
-#: ppdc/sample.c:241
 msgid "24-Pin Series"
 msgstr "24 ピンシリーズ"
 
-#: ppdc/sample.c:250
 msgid "240x72dpi"
 msgstr "240x72dpi"
 
-#: ppdc/sample.c:372
 msgid "25"
 msgstr "25"
 
-#: ppdc/sample.c:333
 msgid "250 mm/sec."
 msgstr "250 ミリメートル/秒"
 
-#: ppdc/sample.c:373
 msgid "26"
 msgstr "26"
 
-#: ppdc/sample.c:374
 msgid "27"
 msgstr "27"
 
-#: ppdc/sample.c:375
 msgid "28"
 msgstr "28"
 
-#: ppdc/sample.c:376
 msgid "29"
 msgstr "29"
 
-#: ppdc/sample.c:309
 msgid "3"
 msgstr "3"
 
-#: ppdc/sample.c:381
 msgid "3 inches/sec."
 msgstr "3 インチ/秒"
 
-#: ppdc/sample.c:3
 msgid "3 x 5"
 msgstr "3 x 5"
 
-#: ppdc/sample.c:195
 msgid "3.00x1.00\""
 msgstr "3.00x1.00 インチ"
 
-#: ppdc/sample.c:196
 msgid "3.00x1.25\""
 msgstr "3.00x1.25 インチ"
 
-#: ppdc/sample.c:197
 msgid "3.00x2.00\""
 msgstr "3.00x2.00 インチ"
 
-#: ppdc/sample.c:198
 msgid "3.00x3.00\""
 msgstr "3.00x3.00インチ"
 
-#: ppdc/sample.c:199
 msgid "3.00x5.00\""
 msgstr "3.00x5.00 インチ"
 
-#: ppdc/sample.c:200
 msgid "3.25x2.00\""
 msgstr "3.25x2.00 インチ"
 
-#: ppdc/sample.c:201
 msgid "3.25x5.00\""
 msgstr "3.25x5.00 インチ"
 
-#: ppdc/sample.c:202
 msgid "3.25x5.50\""
 msgstr "3.25x5.50 インチ"
 
-#: ppdc/sample.c:203
 msgid "3.25x5.83\""
 msgstr "3.25x5.83 インチ"
 
-#: ppdc/sample.c:204
 msgid "3.25x7.83\""
 msgstr "3.25x7.83 インチ"
 
-#: ppdc/sample.c:4
 msgid "3.5 x 5"
 msgstr "3.5 x 5"
 
-#: ppdc/sample.c:171
 msgid "3.5\" Disk"
 msgstr "3.5 インチディスク"
 
-#: ppdc/sample.c:205
 msgid "3.50x1.00\""
 msgstr "3.50x1.00 インチ"
 
-#: ppdc/sample.c:377
 msgid "30"
 msgstr "30"
 
-#: ppdc/sample.c:325
 msgid "30 mm/sec."
 msgstr "30 ミリメートル/秒"
 
-#: ppdc/sample.c:334
 msgid "300 mm/sec."
 msgstr "300 ミリメートル/秒"
 
-#: ppdc/sample.c:234
 msgid "300dpi"
 msgstr "300dpi"
 
-#: ppdc/sample.c:405
 msgid "35"
 msgstr "35"
 
-#: ppdc/sample.c:246
 msgid "360dpi"
 msgstr "360dpi"
 
-#: ppdc/sample.c:245
 msgid "360x180dpi"
 msgstr "360x180dpi"
 
-#: ppdc/sample.c:310
 msgid "4"
 msgstr "4"
 
-#: ppdc/sample.c:382
 msgid "4 inches/sec."
 msgstr "4 インチ/秒"
 
-#: ppdc/sample.c:206
 msgid "4.00x1.00\""
 msgstr "4.00x1.00 インチ"
 
-#: ppdc/sample.c:214
 msgid "4.00x13.00\""
 msgstr "4.00x13.00 インチ"
 
-#: ppdc/sample.c:207
 msgid "4.00x2.00\""
 msgstr "4.00x2.00 インチ"
 
-#: ppdc/sample.c:208
 msgid "4.00x2.50\""
 msgstr "4.00x2.50 インチ"
 
-#: ppdc/sample.c:209
 msgid "4.00x3.00\""
 msgstr "4.00x3.00 インチ"
 
-#: ppdc/sample.c:210
 msgid "4.00x4.00\""
 msgstr "4.00x4.00 インチ"
 
-#: ppdc/sample.c:211
 msgid "4.00x5.00\""
 msgstr "4.00x5.00 インチ"
 
-#: ppdc/sample.c:212
 msgid "4.00x6.00\""
 msgstr "4.00x6.00 インチ"
 
-#: ppdc/sample.c:213
 msgid "4.00x6.50\""
 msgstr "4.00x6.50 インチ"
 
-#: ppdc/sample.c:406
 msgid "40"
 msgstr "40"
 
-#: ppdc/sample.c:326
 msgid "40 mm/sec."
 msgstr "40 ミリメートル/秒"
 
-#: ppdc/sample.c:407
 msgid "45"
 msgstr "45"
 
-#: ppdc/sample.c:311
 msgid "5"
 msgstr "5"
 
-#: ppdc/sample.c:432
 msgid "5 inches/sec."
 msgstr "5 インチ/秒"
 
-#: ppdc/sample.c:5
 msgid "5 x 7"
 msgstr "5 x 7 インチ"
 
-#: ppdc/sample.c:408
 msgid "50"
 msgstr "50"
 
-#: ppdc/sample.c:409
 msgid "55"
 msgstr "55"
 
-#: ppdc/sample.c:312
 msgid "6"
 msgstr "6"
 
-#: ppdc/sample.c:433
 msgid "6 inches/sec."
 msgstr "6 インチ/秒"
 
-#: ppdc/sample.c:215
 msgid "6.00x1.00\""
 msgstr "6.00x1.00 インチ"
 
-#: ppdc/sample.c:216
 msgid "6.00x2.00\""
 msgstr "6.00x2.00 インチ"
 
-#: ppdc/sample.c:217
 msgid "6.00x3.00\""
 msgstr "6.00x3.00 インチ"
 
-#: ppdc/sample.c:218
 msgid "6.00x4.00\""
 msgstr "6.00x4.00 インチ"
 
-#: ppdc/sample.c:219
 msgid "6.00x5.00\""
 msgstr "6.00x5.00 インチ"
 
-#: ppdc/sample.c:220
 msgid "6.00x6.00\""
 msgstr "6.00x6.00 インチ"
 
-#: ppdc/sample.c:221
 msgid "6.00x6.50\""
 msgstr "6.00x6.50 インチ"
 
-#: ppdc/sample.c:410
 msgid "60"
 msgstr "60"
 
-#: ppdc/sample.c:327
 msgid "60 mm/sec."
 msgstr "60 ミリメートル/秒"
 
-#: ppdc/sample.c:253
 msgid "600dpi"
 msgstr "600dpi"
 
-#: ppdc/sample.c:242
 msgid "60dpi"
 msgstr "60dpi"
 
-#: ppdc/sample.c:248
 msgid "60x72dpi"
 msgstr "60x72dpi"
 
-#: ppdc/sample.c:411
 msgid "65"
 msgstr "65"
 
-#: ppdc/sample.c:313
 msgid "7"
 msgstr "7"
 
-#: ppdc/sample.c:435
 msgid "7 inches/sec."
 msgstr "7 インチ/秒"
 
-#: ppdc/sample.c:11
 msgid "7 x 9"
 msgstr "7 x 9 インチ"
 
-#: ppdc/sample.c:412
 msgid "70"
 msgstr "70"
 
-#: ppdc/sample.c:413
 msgid "75"
 msgstr "75"
 
-#: ppdc/sample.c:314
 msgid "8"
 msgstr "8"
 
-#: ppdc/sample.c:436
 msgid "8 inches/sec."
 msgstr "8 インチ/秒"
 
-#: ppdc/sample.c:12
 msgid "8 x 10"
 msgstr "8 x 10 インチ"
 
-#: ppdc/sample.c:222
 msgid "8.00x1.00\""
 msgstr "8.00x1.00 インチ"
 
-#: ppdc/sample.c:223
 msgid "8.00x2.00\""
 msgstr "8.00x2.00 インチ"
 
-#: ppdc/sample.c:224
 msgid "8.00x3.00\""
 msgstr "8.00x3.00 インチ"
 
-#: ppdc/sample.c:225
 msgid "8.00x4.00\""
 msgstr "8.00x4.00 インチ"
 
-#: ppdc/sample.c:226
 msgid "8.00x5.00\""
 msgstr "8.00x5.00 インチ"
 
-#: ppdc/sample.c:227
 msgid "8.00x6.00\""
 msgstr "8.00x6.00 インチ"
 
-#: ppdc/sample.c:228
 msgid "8.00x6.50\""
 msgstr "8.00x6.50 インチ"
 
-#: ppdc/sample.c:414
 msgid "80"
 msgstr "80"
 
-#: ppdc/sample.c:328
 msgid "80 mm/sec."
 msgstr "80 ミリメートル/秒"
 
-#: ppdc/sample.c:415
 msgid "85"
 msgstr "85"
 
-#: ppdc/sample.c:315
 msgid "9"
 msgstr "9"
 
-#: ppdc/sample.c:437
 msgid "9 inches/sec."
 msgstr "9 インチ/秒"
 
-#: ppdc/sample.c:13
 msgid "9 x 11"
 msgstr "9 x 11 インチ"
 
-#: ppdc/sample.c:14
 msgid "9 x 12"
 msgstr "9 x 12 インチ"
 
-#: ppdc/sample.c:247
 msgid "9-Pin Series"
 msgstr "9 ピンシリーズ"
 
-#: ppdc/sample.c:416
 msgid "90"
 msgstr "90"
 
-#: ppdc/sample.c:417
 msgid "95"
 msgstr "95"
 
-#: berkeley/lpc.c:205
 msgid "?Invalid help command unknown."
 msgstr "?無効なヘルプコマンドです"
 
-#: cgi-bin/admin.c:2348
 msgid "A Samba password is required to export printer drivers"
 msgstr ""
 "プリンタードライバーをエクスポートするには Samba のパスワードが必要です。"
 
-#: cgi-bin/admin.c:2344
 msgid "A Samba username is required to export printer drivers"
 msgstr ""
 "プリンタードライバーをエクスポートするには、Samba のユーザー名が必要です。"
 
-#: scheduler/ipp.c:2274
 #, c-format
 msgid "A class named \"%s\" already exists."
 msgstr "\"%s\" という名前のクラスはすでに存在します。"
 
-#: scheduler/ipp.c:916
 #, c-format
 msgid "A printer named \"%s\" already exists."
 msgstr "\"%s\" という名前のプリンターはすでに存在します。"
 
-#: ppdc/sample.c:15
 msgid "A0"
 msgstr "A0"
 
-#: ppdc/sample.c:16
 msgid "A0 Long Edge"
 msgstr "A0 長辺送り"
 
-#: ppdc/sample.c:17
 msgid "A1"
 msgstr "A1"
 
-#: ppdc/sample.c:18
 msgid "A1 Long Edge"
 msgstr "A1 長辺送り"
 
-#: ppdc/sample.c:37
 msgid "A10"
 msgstr "A10"
 
-#: ppdc/sample.c:19
 msgid "A2"
 msgstr "A2"
 
-#: ppdc/sample.c:20
 msgid "A2 Long Edge"
 msgstr "A2 長辺送り"
 
-#: ppdc/sample.c:21
 msgid "A3"
 msgstr "A3"
 
-#: ppdc/sample.c:22
 msgid "A3 Long Edge"
 msgstr "A3 長辺送り"
 
-#: ppdc/sample.c:23
 msgid "A3 Oversize"
 msgstr "A3 (特大)"
 
-#: ppdc/sample.c:24
 msgid "A3 Oversize Long Edge"
 msgstr "A3 (特大) 長辺送り"
 
-#: ppdc/sample.c:25
 msgid "A4"
 msgstr "A4"
 
-#: ppdc/sample.c:27
 msgid "A4 Long Edge"
 msgstr "A4 長辺送り"
 
-#: ppdc/sample.c:26
 msgid "A4 Oversize"
 msgstr "A4 (特大)"
 
-#: ppdc/sample.c:28
 msgid "A4 Small"
 msgstr "A4 (小)"
 
-#: ppdc/sample.c:29
 msgid "A5"
 msgstr "A5"
 
-#: ppdc/sample.c:31
 msgid "A5 Long Edge"
 msgstr "A5 長辺送り"
 
-#: ppdc/sample.c:30
 msgid "A5 Oversize"
 msgstr "A5 (特大)"
 
-#: ppdc/sample.c:32
 msgid "A6"
 msgstr "A6"
 
-#: ppdc/sample.c:33
 msgid "A6 Long Edge"
 msgstr "A6 長辺送り"
 
-#: ppdc/sample.c:34
 msgid "A7"
 msgstr "A7"
 
-#: ppdc/sample.c:35
 msgid "A8"
 msgstr "A8"
 
-#: ppdc/sample.c:36
 msgid "A9"
 msgstr "A9"
 
-#: ppdc/sample.c:38
 msgid "ANSI A"
 msgstr "ANSI A"
 
-#: ppdc/sample.c:39
 msgid "ANSI B"
 msgstr "ANSI B"
 
-#: ppdc/sample.c:40
 msgid "ANSI C"
 msgstr "ANSI C"
 
-#: ppdc/sample.c:41
 msgid "ANSI D"
 msgstr "ANSI D"
 
-#: ppdc/sample.c:42
 msgid "ANSI E"
 msgstr "ANSI E"
 
-#: ppdc/sample.c:47
 msgid "ARCH C"
 msgstr "ARCH C"
 
-#: ppdc/sample.c:48
 msgid "ARCH C Long Edge"
 msgstr "ARCH C 長辺送り"
 
-#: ppdc/sample.c:49
 msgid "ARCH D"
 msgstr "ARCH D"
 
-#: ppdc/sample.c:50
 msgid "ARCH D Long Edge"
 msgstr "ARCH D 長辺送り"
 
-#: ppdc/sample.c:51
 msgid "ARCH E"
 msgstr "ARCH E"
 
-#: ppdc/sample.c:52
 msgid "ARCH E Long Edge"
 msgstr "ARCH E 長辺送り"
 
-#: cgi-bin/classes.c:161 cgi-bin/printers.c:164
 msgid "Accept Jobs"
 msgstr "ジョブの受け付け"
 
-#: cups/http-support.c:1347
 msgid "Accepted"
 msgstr "受け付けました"
 
-#: cgi-bin/admin.c:548
 msgid "Add Class"
 msgstr "クラスの追加"
 
-#: cgi-bin/admin.c:860
 msgid "Add Printer"
 msgstr "プリンターの追加"
 
-#: cgi-bin/admin.c:422 cgi-bin/admin.c:455 cgi-bin/admin.c:503
-#: cgi-bin/admin.c:513
 msgid "Add RSS Subscription"
 msgstr "RSS 購読を追加"
 
-#: ppdc/sample.c:163
 msgid "Address"
 msgstr "アドレス"
 
-#: cgi-bin/admin.c:188 cgi-bin/admin.c:262 cgi-bin/admin.c:2725
 msgid "Administration"
 msgstr "管理"
 
-#: ppdc/sample.c:424
 msgid "Always"
 msgstr "常に有効"
 
-#: backend/socket.c:121
 msgid "AppSocket/HP JetDirect"
 msgstr "AppSocket/HP JetDirect"
 
-#: ppdc/sample.c:445
 msgid "Applicator"
 msgstr "アプリケーター"
 
-#: scheduler/ipp.c:991
 #, c-format
 msgid "Attempt to set %s printer-state to bad value %d."
 msgstr "%s printer-state に 不正な値 %d を設定しようとしています。"
 
-#: scheduler/ipp.c:239
 #, c-format
 msgid "Attribute groups are out of order (%x < %x)."
 msgstr "属性グループは範囲外です (%x < %x)。"
 
-#: ppdc/sample.c:126
 msgid "B0"
 msgstr "B0"
 
-#: ppdc/sample.c:127
 msgid "B1"
 msgstr "B1"
 
-#: ppdc/sample.c:137
 msgid "B10"
 msgstr "B10"
 
-#: ppdc/sample.c:128
 msgid "B2"
 msgstr "B2"
 
-#: ppdc/sample.c:129
 msgid "B3"
 msgstr "B3"
 
-#: ppdc/sample.c:130
 msgid "B4"
 msgstr "B4"
 
-#: ppdc/sample.c:131
 msgid "B5"
 msgstr "B5"
 
-#: ppdc/sample.c:132
 msgid "B5 Oversize"
 msgstr "B5 (特大)"
 
-#: ppdc/sample.c:133
 msgid "B6"
 msgstr "B6"
 
-#: ppdc/sample.c:134
 msgid "B7"
 msgstr "B7"
 
-#: ppdc/sample.c:135
 msgid "B8"
 msgstr "B8"
 
-#: ppdc/sample.c:136
 msgid "B9"
 msgstr "B9"
 
-#: scheduler/ipp.c:10877
 #, c-format
 msgid "Bad 'document-format' value \"%s\"."
 msgstr "誤った 'document-format' の値です \"%s\"。"
 
-#: cups/dest.c:1736
 msgid "Bad NULL dests pointer"
 msgstr "不正な NULL 送信先ポインター"
 
-#: cups/ppd.c:303
 msgid "Bad OpenGroup"
 msgstr "不正な OpenGroup"
 
-#: cups/ppd.c:305
 msgid "Bad OpenUI/JCLOpenUI"
 msgstr "不正な OpenUI/JCLOpenUI"
 
-#: cups/ppd.c:307
 msgid "Bad OrderDependency"
 msgstr "不正な OrderDependency"
 
-#: cups/ppd-cache.c:117 cups/ppd-cache.c:164 cups/ppd-cache.c:202
-#: cups/ppd-cache.c:208 cups/ppd-cache.c:224 cups/ppd-cache.c:240
-#: cups/ppd-cache.c:249 cups/ppd-cache.c:257 cups/ppd-cache.c:274
-#: cups/ppd-cache.c:282 cups/ppd-cache.c:297 cups/ppd-cache.c:305
-#: cups/ppd-cache.c:326 cups/ppd-cache.c:338 cups/ppd-cache.c:353
-#: cups/ppd-cache.c:365 cups/ppd-cache.c:387 cups/ppd-cache.c:395
-#: cups/ppd-cache.c:413 cups/ppd-cache.c:421 cups/ppd-cache.c:436
-#: cups/ppd-cache.c:444 cups/ppd-cache.c:462 cups/ppd-cache.c:470
-#: cups/ppd-cache.c:497 cups/ppd-cache.c:567 cups/ppd-cache.c:575
-#: cups/ppd-cache.c:583
 msgid "Bad PPD cache file."
 msgstr "不正な PPD キャッシュファイルです。"
 
-#: cups/http-support.c:1362
 msgid "Bad Request"
 msgstr "不正なリクエスト"
 
-#: cups/snmp.c:954
 msgid "Bad SNMP version number"
 msgstr "不正な SNMP バージョン番号"
 
-#: cups/ppd.c:308
 msgid "Bad UIConstraints"
 msgstr "不正な UIConstraints"
 
-#: cups/http-support.c:1456
 msgid "Bad arguments to function"
 msgstr "関数の引数が不正"
 
-#: scheduler/ipp.c:1352
 #, c-format
 msgid "Bad copies value %d."
 msgstr "%d は不正なコピー値です。"
 
-#: cups/ppd.c:316
 msgid "Bad custom parameter"
 msgstr "不正なカスタムパラメーター"
 
-#: cups/http-support.c:1598 scheduler/ipp.c:2360
 #, c-format
 msgid "Bad device-uri \"%s\"."
 msgstr "\"%s\" は無効な device-uri です。"
 
-#: scheduler/ipp.c:2399
 #, c-format
 msgid "Bad device-uri scheme \"%s\"."
 msgstr "\"%s\" は無効な device-uri スキーマです。"
 
-#: scheduler/ipp.c:8125 scheduler/ipp.c:8141 scheduler/ipp.c:9360
 #, c-format
 msgid "Bad document-format \"%s\"."
 msgstr "\"%s\" は不正な document-format です。"
 
-#: scheduler/ipp.c:9376
 #, c-format
 msgid "Bad document-format-default \"%s\"."
 msgstr "\"%s\" は不正な document-format-default です。"
 
-#: cups/util.c:823
 msgid "Bad filename buffer"
 msgstr "不正なファイル名バッファーです。"
 
-#: cups/http-support.c:1465
 msgid "Bad hostname/address in URI"
 msgstr "URI のホスト名/アドレスが不正"
 
-#: scheduler/ipp.c:1527
 #, c-format
 msgid "Bad job-name value: %s"
 msgstr "誤った job-name 値: %s"
 
-#: scheduler/ipp.c:1520
 msgid "Bad job-name value: Wrong type or count."
 msgstr "誤った job-name 値: 型かカウントが誤っています。"
 
-#: scheduler/ipp.c:9967
 msgid "Bad job-priority value."
 msgstr "不正な job-priority 値です。"
 
-#: scheduler/ipp.c:1382
 #, c-format
 msgid "Bad job-sheets value \"%s\"."
 msgstr "\"%s\" は不正な job-sheets 値です。"
 
-#: scheduler/ipp.c:1366
 msgid "Bad job-sheets value type."
 msgstr "不正な job-sheets 値タイプ です。"
 
-#: scheduler/ipp.c:9997
 msgid "Bad job-state value."
 msgstr "不正な job-state 値です。"
 
-#: scheduler/ipp.c:2981 scheduler/ipp.c:3441 scheduler/ipp.c:5930
-#: scheduler/ipp.c:6077 scheduler/ipp.c:7559 scheduler/ipp.c:7828
-#: scheduler/ipp.c:8678 scheduler/ipp.c:8904 scheduler/ipp.c:9256
-#: scheduler/ipp.c:9860
 #, c-format
 msgid "Bad job-uri \"%s\"."
 msgstr "\"%s\" は無効な job-uri 属性です。"
 
-#: scheduler/ipp.c:2040 scheduler/ipp.c:5468
 #, c-format
 msgid "Bad notify-pull-method \"%s\"."
 msgstr "\"%s\" は無効な notify-pull-method です。"
 
-#: scheduler/ipp.c:2004 scheduler/ipp.c:5432
 #, c-format
 msgid "Bad notify-recipient-uri \"%s\"."
 msgstr "URI \"%s\" は不正な notify-recipient-uri です。"
 
-#: scheduler/ipp.c:1398
 #, c-format
 msgid "Bad number-up value %d."
 msgstr "%d は不正な number-up 値です。"
 
-#: cups/adminutil.c:281
 #, c-format
 msgid "Bad option + choice on line %d."
 msgstr "%d 行に不正なオプションと選択があります。"
 
-#: scheduler/ipp.c:1415
 #, c-format
 msgid "Bad page-ranges values %d-%d."
 msgstr "%d-%d は不正な page-ranges 値です。"
 
-#: cups/http-support.c:1462
 msgid "Bad port number in URI"
 msgstr "URI のポート番号が不正"
 
-#: scheduler/ipp.c:2442
 #, c-format
 msgid "Bad port-monitor \"%s\"."
 msgstr "\"%s\" は無効な port-monitor です。"
 
-#: scheduler/ipp.c:2503
 #, c-format
 msgid "Bad printer-state value %d."
 msgstr "%d は無効な printer-state 値です。"
 
-#: cups/dest.c:610 cups/dest.c:1296 cups/dest.c:1343
 msgid "Bad printer-uri."
 msgstr "printer-uri が不正です。"
 
-#: scheduler/ipp.c:207
 #, c-format
 msgid "Bad request ID %d."
 msgstr "%d は無効なリクエストIDです。"
 
-#: scheduler/ipp.c:192
 #, c-format
 msgid "Bad request version number %d.%d."
 msgstr "バージョン番号 %d.%d は無効なリクエストです。"
 
-#: cups/http-support.c:1459
 msgid "Bad resource in URI"
 msgstr "URI のリソースが不正"
 
-#: cups/http-support.c:1471
 msgid "Bad scheme in URI"
 msgstr "URI のスキームが不正"
 
-#: cgi-bin/admin.c:1464
 msgid "Bad subscription ID"
 msgstr "不正なサブスクリプション ID"
 
-#: cups/http-support.c:1468
 msgid "Bad username in URI"
 msgstr "URI のユーザー名が不正"
 
-#: cups/ppd.c:318
 msgid "Bad value string"
 msgstr "値文字列がありません"
 
-#: cups/http-support.c:1474
 msgid "Bad/empty URI"
 msgstr "URI が不正か空"
 
-#: cgi-bin/admin.c:3270 cgi-bin/admin.c:3516
 msgid "Banners"
 msgstr "バナー"
 
-#: ppdc/sample.c:282
 msgid "Bond Paper"
 msgstr "ボンド紙"
 
-#: backend/usb-darwin.c:1874
 #, c-format
 msgid "Boolean expected for waiteof option \"%s\"."
 msgstr "論理値は、waiteof オプション \"%s\" であるべきです"
 
-#: filter/pstops.c:2029
 msgid "Buffer overflow detected, aborting."
 msgstr "オーバーフローが検出され、中断しました。"
 
-#: ppdc/sample.c:277
 msgid "CMYK"
 msgstr "CMYK"
 
-#: ppdc/sample.c:358
 msgid "CPCL Label Printer"
 msgstr "CPCL ラベルプリンター"
 
-#: cgi-bin/classes.c:165 cgi-bin/printers.c:168
 msgid "Cancel Jobs"
 msgstr "ジョブをキャンセル"
 
-#: cgi-bin/admin.c:1465 cgi-bin/admin.c:1504 cgi-bin/admin.c:1514
 msgid "Cancel RSS Subscription"
 msgstr "RSS 購読をキャンセル"
 
-#: backend/ipp.c:2198
 msgid "Canceling print job."
 msgstr "プリントジョブをキャンセルしています。"
 
-#: scheduler/ipp.c:2483
 msgid "Cannot share a remote Kerberized printer."
 msgstr "リモートの Kerberos 認証のプリンターを共有できません。"
 
-#: ppdc/sample.c:271
 msgid "Cassette"
 msgstr "カセット"
 
-#: cgi-bin/admin.c:1635 cgi-bin/admin.c:1777 cgi-bin/admin.c:1790
-#: cgi-bin/admin.c:1801
 msgid "Change Settings"
 msgstr "設定の変更"
 
-#: scheduler/ipp.c:2052 scheduler/ipp.c:5480
 #, c-format
 msgid "Character set \"%s\" not supported."
 msgstr "文字セット \"%s\" はサポートされていません。"
 
-#: cgi-bin/classes.c:187 cgi-bin/classes.c:314
 msgid "Classes"
 msgstr "クラス"
 
-#: cgi-bin/printers.c:174
 msgid "Clean Print Heads"
 msgstr "プリントヘッドクリーニング"
 
-#: scheduler/ipp.c:3893
 msgid "Close-Job doesn't support the job-uri attribute."
 msgstr "Close-Job は job-uri 属性をサポートしていません。"
 
-#: ppdc/sample.c:276
 msgid "Color"
 msgstr "カラー"
 
-#: ppdc/sample.c:274
 msgid "Color Mode"
 msgstr "カラーモード"
 
-#: berkeley/lpc.c:196
 msgid ""
 "Commands may be abbreviated.  Commands are:\n"
 "\n"
@@ -3798,88 +2965,67 @@ msgstr ""
 "\n"
 "exit    help    quit    status  ?"
 
-#: cups/snmp.c:958
 msgid "Community name uses indefinite length"
 msgstr "コミュニティ名の長さが不定"
 
-#: backend/ipp.c:854 backend/lpd.c:879 backend/socket.c:400
 msgid "Connected to printer."
 msgstr "プリンターに接続しました。"
 
-#: backend/ipp.c:759 backend/lpd.c:702 backend/socket.c:319
 msgid "Connecting to printer."
 msgstr "プリンターに接続中。"
 
-#: cups/http-support.c:1335
 msgid "Continue"
 msgstr "継続"
 
-#: ppdc/sample.c:360
 msgid "Continuous"
 msgstr "連続"
 
-#: backend/lpd.c:1028 backend/lpd.c:1160
 msgid "Control file sent successfully."
 msgstr "コントロールファイルが正常に送信されました。"
 
-#: backend/ipp.c:1349 backend/lpd.c:472
 msgid "Copying print data."
 msgstr "印刷データをコピーしています。"
 
-#: cups/http-support.c:1344
 msgid "Created"
 msgstr "ジョブ作成"
 
-#: cups/ppd.c:1069 cups/ppd.c:1109 cups/ppd.c:1354 cups/ppd.c:1457
 msgid "Custom"
 msgstr "カスタム"
 
-#: ppdc/sample.c:354
 msgid "CustominCutInterval"
 msgstr "CustominCutInterval"
 
-#: ppdc/sample.c:352
 msgid "CustominTearInterval"
 msgstr "CustominTearInterval"
 
-#: ppdc/sample.c:338
 msgid "Cut"
 msgstr "カット"
 
-#: ppdc/sample.c:446
 msgid "Cutter"
 msgstr "カッター"
 
-#: ppdc/sample.c:239
 msgid "Dark"
 msgstr "濃い"
 
-#: ppdc/sample.c:235
 msgid "Darkness"
 msgstr "濃さ"
 
-#: backend/lpd.c:1113
 msgid "Data file sent successfully."
 msgstr "データファイルが正常に送信されました。"
 
-#: cgi-bin/admin.c:2074 cgi-bin/admin.c:2085 cgi-bin/admin.c:2130
 msgid "Delete Class"
 msgstr "クラスの削除"
 
-#: cgi-bin/admin.c:2159 cgi-bin/admin.c:2170 cgi-bin/admin.c:2215
 msgid "Delete Printer"
 msgstr "プリンターの削除"
 
-#: ppdc/sample.c:273
 msgid "DeskJet Series"
 msgstr "DeskJet シリーズ"
 
-#: scheduler/ipp.c:1276
 #, c-format
 msgid "Destination \"%s\" is not accepting jobs."
 msgstr "宛先 \"%s\" はジョブを受け付けていません。"
 
-#: systemv/lpinfo.c:300
 #, c-format
 msgid ""
 "Device: uri = %s\n"
@@ -3896,87 +3042,67 @@ msgstr ""
 "          device-id = %s\n"
 "          location = %s"
 
-#: ppdc/sample.c:431
 msgid "Direct Thermal Media"
 msgstr "感熱紙"
 
-#: cups/file.c:258
 #, c-format
 msgid "Directory \"%s\" contains a relative path."
 msgstr "ディレクトリー \"%s\" は相対パスを含んでいます。"
 
-#: cups/file.c:230
 #, c-format
 msgid "Directory \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)."
 msgstr ""
 "ディレクトリー \"%s\" は安全でないパーミッションが与えられています (0%o/uid="
 "%d/gid=%d)。"
 
-#: cups/file.c:247
 #, c-format
 msgid "Directory \"%s\" is a file."
 msgstr "ディレクトリー \"%s\" はファイルです。"
 
-#: cups/file.c:218
 #, c-format
 msgid "Directory \"%s\" not available: %s"
 msgstr "ディレクトリー \"%s\" は利用できません: %s"
 
-#: cups/file.c:203
 #, c-format
 msgid "Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d)."
 msgstr ""
 "ディレクトリー \"%s\" のパーミッションは問題ありません (0%o/uid=%d/gid=%d)。"
 
-#: ppdc/sample.c:340
 msgid "Disabled"
 msgstr "無効"
 
-#: scheduler/ipp.c:5979
 #, c-format
 msgid "Document #%d does not exist in job #%d."
 msgstr "ドキュメント #%d がジョブ #%d に見つかりません。"
 
-#: ppdc/sample.c:267
 msgid "Duplexer"
 msgstr "両面オプション"
 
-#: ppdc/sample.c:229
 msgid "Dymo"
 msgstr "Dymo"
 
-#: ppdc/sample.c:426
 msgid "EPL1 Label Printer"
 msgstr "EPL1 ラベルプリンター"
 
-#: ppdc/sample.c:429
 msgid "EPL2 Label Printer"
 msgstr "EPL2 ラベルプリンター"
 
-#: cgi-bin/admin.c:1829 cgi-bin/admin.c:1841 cgi-bin/admin.c:1895
-#: cgi-bin/admin.c:1902 cgi-bin/admin.c:1937 cgi-bin/admin.c:1950
-#: cgi-bin/admin.c:1974 cgi-bin/admin.c:2047
 msgid "Edit Configuration File"
 msgstr "設定ファイルの編集"
 
-#: cups/adminutil.c:326
 msgid "Empty PPD file."
 msgstr "PPD ファイルが空です。"
 
-#: cups/http.c:4624
 msgid "Encryption is not supported."
 msgstr "暗号化はサポートされていません。"
 
 #. TRANSLATORS: Banner/cover sheet after the print job.
-#: cgi-bin/admin.c:3541
 msgid "Ending Banner"
 msgstr "終了バナー"
 
-#: ppdc/sample.c:2
 msgid "English"
 msgstr "English"
 
-#: scheduler/client.c:2209
 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 "
@@ -3986,349 +3112,262 @@ msgstr ""
 "root のユーザー名とパスワードを入力してください。Kerberos 認証を使用している"
 "場合、有効な Kerberos チケットがあることを確認してください。"
 
-#: ppdc/sample.c:73
 msgid "Envelope #10 "
 msgstr "封筒 #10"
 
-#: ppdc/sample.c:74
 msgid "Envelope #11"
 msgstr "封筒 #11"
 
-#: ppdc/sample.c:75
 msgid "Envelope #12"
 msgstr "封筒 #12"
 
-#: ppdc/sample.c:76
 msgid "Envelope #14"
 msgstr "封筒 #14"
 
-#: ppdc/sample.c:77
 msgid "Envelope #9"
 msgstr "封筒 #9"
 
-#: ppdc/sample.c:89
 msgid "Envelope B4"
 msgstr "封筒 B4"
 
-#: ppdc/sample.c:90
 msgid "Envelope B5"
 msgstr "封筒 B5"
 
-#: ppdc/sample.c:91
 msgid "Envelope B6"
 msgstr "封筒 B6"
 
-#: ppdc/sample.c:78
 msgid "Envelope C0"
 msgstr "封筒 C0"
 
-#: ppdc/sample.c:79
 msgid "Envelope C1"
 msgstr "封筒 C1"
 
-#: ppdc/sample.c:80
 msgid "Envelope C2"
 msgstr "封筒 C2"
 
-#: ppdc/sample.c:81
 msgid "Envelope C3"
 msgstr "封筒 C3"
 
-#: ppdc/sample.c:67
 msgid "Envelope C4"
 msgstr "封筒 C4"
 
-#: ppdc/sample.c:68
 msgid "Envelope C5"
 msgstr "封筒 C5"
 
-#: ppdc/sample.c:69
 msgid "Envelope C6"
 msgstr "封筒 C6"
 
-#: ppdc/sample.c:82
 msgid "Envelope C65"
 msgstr "封筒 C65"
 
-#: ppdc/sample.c:83
 msgid "Envelope C7"
 msgstr "封筒 C7"
 
-#: ppdc/sample.c:84
 msgid "Envelope Choukei 3"
 msgstr "封筒 長形3号"
 
-#: ppdc/sample.c:85
 msgid "Envelope Choukei 3 Long Edge"
 msgstr "封筒 長形3号 長辺送り"
 
-#: ppdc/sample.c:86
 msgid "Envelope Choukei 4"
 msgstr "封筒 長形4号"
 
-#: ppdc/sample.c:87
 msgid "Envelope Choukei 4 Long Edge"
 msgstr "封筒 長形4号 長辺送り"
 
-#: ppdc/sample.c:70
 msgid "Envelope DL"
 msgstr "封筒 DL"
 
-#: ppdc/sample.c:261
 msgid "Envelope Feed"
 msgstr "封筒フィード"
 
-#: ppdc/sample.c:88
 msgid "Envelope Invite"
 msgstr "招待状封筒"
 
-#: ppdc/sample.c:92
 msgid "Envelope Italian"
 msgstr "イタリア封筒"
 
-#: ppdc/sample.c:93
 msgid "Envelope Kaku2"
 msgstr "封筒 角2"
 
-#: ppdc/sample.c:94
 msgid "Envelope Kaku2 Long Edge"
 msgstr "封筒 角2 長辺送り"
 
-#: ppdc/sample.c:95
 msgid "Envelope Kaku3"
 msgstr "封筒 角3"
 
-#: ppdc/sample.c:96
 msgid "Envelope Kaku3 Long Edge"
 msgstr "封筒 角3 長辺送り"
 
-#: ppdc/sample.c:97
 msgid "Envelope Monarch"
 msgstr "封筒 Monarch"
 
-#: ppdc/sample.c:99
 msgid "Envelope PRC1 "
 msgstr "封筒 PRC1"
 
-#: ppdc/sample.c:100
 msgid "Envelope PRC1 Long Edge"
 msgstr "封筒 PRC1 長辺送り"
 
-#: ppdc/sample.c:117
 msgid "Envelope PRC10"
 msgstr "封筒 PRC10"
 
-#: ppdc/sample.c:118
 msgid "Envelope PRC10 Long Edge"
 msgstr "封筒 PRC10 長辺送り"
 
-#: ppdc/sample.c:101
 msgid "Envelope PRC2"
 msgstr "封筒 PRC2"
 
-#: ppdc/sample.c:102
 msgid "Envelope PRC2 Long Edge"
 msgstr "封筒 PRC2 長辺送り"
 
-#: ppdc/sample.c:103
 msgid "Envelope PRC3"
 msgstr "封筒 PRC3"
 
-#: ppdc/sample.c:104
 msgid "Envelope PRC3 Long Edge"
 msgstr "封筒 PRC3 長辺送り"
 
-#: ppdc/sample.c:105
 msgid "Envelope PRC4"
 msgstr "封筒 PRC4"
 
-#: ppdc/sample.c:106
 msgid "Envelope PRC4 Long Edge"
 msgstr "封筒 PRC4 長辺送り"
 
-#: ppdc/sample.c:108
 msgid "Envelope PRC5 Long Edge"
 msgstr "封筒 PRC5 長辺送り"
 
-#: ppdc/sample.c:107
 msgid "Envelope PRC5PRC5"
 msgstr "封筒 PRC5"
 
-#: ppdc/sample.c:109
 msgid "Envelope PRC6"
 msgstr "封筒 PRC6"
 
-#: ppdc/sample.c:110
 msgid "Envelope PRC6 Long Edge"
 msgstr "封筒 PRC6 長辺送り"
 
-#: ppdc/sample.c:111
 msgid "Envelope PRC7"
 msgstr "封筒 PRC7"
 
-#: ppdc/sample.c:112
 msgid "Envelope PRC7 Long Edge"
 msgstr "封筒 PRC7 長辺送り"
 
-#: ppdc/sample.c:113
 msgid "Envelope PRC8"
 msgstr "封筒 PRC8"
 
-#: ppdc/sample.c:114
 msgid "Envelope PRC8 Long Edge"
 msgstr "封筒 PRC8 長辺送り"
 
-#: ppdc/sample.c:115
 msgid "Envelope PRC9"
 msgstr "封筒 PRC9"
 
-#: ppdc/sample.c:116
 msgid "Envelope PRC9 Long Edge"
 msgstr "封筒 PRC9 長辺送り"
 
-#: ppdc/sample.c:98
 msgid "Envelope Personal"
 msgstr "パーソナル封筒"
 
-#: ppdc/sample.c:119
 msgid "Envelope You4"
 msgstr "封筒 洋形4号"
 
-#: ppdc/sample.c:120
 msgid "Envelope You4 Long Edge"
 msgstr "封筒 洋形4号 長辺送り"
 
-#: test/ippfind.c:2809
 msgid "Environment Variables:"
 msgstr "環境変数:"
 
-#: ppdc/sample.c:240
 msgid "Epson"
 msgstr "Epson"
 
-#: cgi-bin/admin.c:3584
 msgid "Error Policy"
 msgstr "エラーポリシー"
 
-#: filter/rastertopwg.c:395 filter/rastertopwg.c:410 filter/rastertopwg.c:421
-#: filter/rastertopwg.c:432
+msgid "Error reading raster data."
+msgstr ""
+
 msgid "Error sending raster data."
 msgstr "ラスターデータの送信でエラーが起きました。"
 
-#: systemv/lpinfo.c:103 systemv/lpmove.c:88
 msgid "Error: need hostname after \"-h\" option."
 msgstr "Error: '-h' オプションのあとにはホスト名が必要です。"
 
-#: ppdc/sample.c:350
 msgid "Every 10 Labels"
 msgstr "10 ラベルごと"
 
-#: ppdc/sample.c:342
 msgid "Every 2 Labels"
 msgstr "2 ラベルごと"
 
-#: ppdc/sample.c:343
 msgid "Every 3 Labels"
 msgstr "3 ラベルごと"
 
-#: ppdc/sample.c:344
 msgid "Every 4 Labels"
 msgstr "4 ラベルごと"
 
-#: ppdc/sample.c:345
 msgid "Every 5 Labels"
 msgstr "5 ラベルごと"
 
-#: ppdc/sample.c:346
 msgid "Every 6 Labels"
 msgstr "6 ラベルごと"
 
-#: ppdc/sample.c:347
 msgid "Every 7 Labels"
 msgstr "7 ラベルごと"
 
-#: ppdc/sample.c:348
 msgid "Every 8 Labels"
 msgstr "8 ラベルごと"
 
-#: ppdc/sample.c:349
 msgid "Every 9 Labels"
 msgstr "9 ラベルごと"
 
-#: ppdc/sample.c:341
 msgid "Every Label"
 msgstr "すべてのラベル"
 
-#: ppdc/sample.c:121
 msgid "Executive"
 msgstr "エグゼクティブ"
 
-#: cups/http-support.c:1390
 msgid "Expectation Failed"
 msgstr "予測に失敗しました"
 
-#: cgi-bin/admin.c:2336 cgi-bin/admin.c:2355
 msgid "Export Printers to Samba"
 msgstr "Samba へプリンターをエクスポート"
 
-#: test/ippfind.c:2755
 msgid "Expressions:"
 msgstr "式:"
 
-#: systemv/cupstestdsc.c:172 systemv/cupstestdsc.c:189
-#: systemv/cupstestdsc.c:214 systemv/cupstestdsc.c:231
-#: systemv/cupstestdsc.c:255 systemv/cupstestdsc.c:273
-#: systemv/cupstestdsc.c:302 systemv/cupstestdsc.c:339
-#: systemv/cupstestdsc.c:349 systemv/cupstestdsc.c:359
-#: systemv/cupstestdsc.c:369 systemv/cupstestdsc.c:379
-#: systemv/cupstestdsc.c:387
 msgid "FAIL"
 msgstr "失敗"
 
-#: ppdc/sample.c:122
 msgid "FanFold German"
 msgstr "FanFold German"
 
-#: ppdc/sample.c:123
 msgid "FanFold Legal German"
 msgstr "FanFold Legal German"
 
-#: ppdc/sample.c:124
 msgid "Fanfold US"
 msgstr "Fanfold US"
 
-#: cups/file.c:262
 #, c-format
 msgid "File \"%s\" contains a relative path."
 msgstr "ファイル \"%s\" は相対パスを含んでいます。"
 
-#: cups/file.c:237
 #, c-format
 msgid "File \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)."
 msgstr ""
 "ファイル \"%s\" は安全でないパーミッションが与えられています (0%o/uid=%d/gid="
 "%d)。"
 
-#: cups/file.c:251
 #, c-format
 msgid "File \"%s\" is a directory."
 msgstr "ファイル \"%s\" はディレクトリーです。"
 
-#: cups/file.c:223
 #, c-format
 msgid "File \"%s\" not available: %s"
 msgstr "ファイル \"%s\" は利用できません: %s"
 
-#: cups/file.c:209
 #, c-format
 msgid "File \"%s\" permissions OK (0%o/uid=%d/gid=%d)."
 msgstr "ファイル \"%s\" のパーミッションは問題ありません (0%o/uid=%d/gid=%d)。"
 
-#: ppdc/sample.c:169
 msgid "File Folder "
 msgstr "ファイルフォルダー"
 
-#: scheduler/ipp.c:2378
 #, c-format
 msgid ""
 "File device URIs have been disabled. To enable, see the FileDevice directive "
@@ -4337,536 +3376,398 @@ msgstr ""
 "ファイルデバイス URI は無効になっています。有効にするには、\"%s/cups-files."
 "conf\" の FileDevice ディレクティブを参照してください。"
 
-#: filter/rastertoepson.c:1102 filter/rastertohp.c:834
-#: filter/rastertolabel.c:1259
 #, c-format
 msgid "Finished page %d."
 msgstr "ページ %d を終了。"
 
-#: ppdc/sample.c:125
 msgid "Folio"
 msgstr "フォリオ"
 
-#: cups/http-support.c:1369
 msgid "Forbidden"
 msgstr "Forbidden"
 
-#: cups/ppd.c:700 cups/ppd.c:1258
 msgid "General"
 msgstr "一般"
 
-#: ppdc/sample.c:251
 msgid "Generic"
 msgstr "汎用"
 
-#: cups/snmp.c:968
 msgid "Get-Response-PDU uses indefinite length"
 msgstr "Get-Response-PDU は不確定の長さを使用しています"
 
-#: ppdc/sample.c:285
 msgid "Glossy Paper"
 msgstr "光沢紙"
 
-#: scheduler/ipp.c:2959 scheduler/ipp.c:3367 scheduler/ipp.c:3905
-#: scheduler/ipp.c:5908 scheduler/ipp.c:6055 scheduler/ipp.c:7536
-#: scheduler/ipp.c:8656 scheduler/ipp.c:8882 scheduler/ipp.c:9234
-#: scheduler/ipp.c:9838
 msgid "Got a printer-uri attribute but no job-id."
 msgstr "printer-uri 属性を取得しましたが、job-id を取得できませんでした。"
 
-#: ppdc/sample.c:275
 msgid "Grayscale"
 msgstr "グレースケール"
 
-#: ppdc/sample.c:272
 msgid "HP"
 msgstr "HP"
 
-#: ppdc/sample.c:170
 msgid "Hanging Folder"
 msgstr "Hanging Folder"
 
-#: cgi-bin/help.c:143
 msgid "Help file not in index."
 msgstr "ヘルプファイルが索引に含まれていません。"
 
-#: cups/ipp.c:3183 cups/ipp.c:3210 cups/ipp.c:3233
 msgid "IPP 1setOf attribute with incompatible value tags."
 msgstr "IPP の 1setOf 属性が value タグと互換性がありません。"
 
-#: cups/ipp.c:3146
 msgid "IPP attribute has no name."
 msgstr "IPP の属性に名前がありません。"
 
-#: cups/ipp.c:7000
 msgid "IPP attribute is not a member of the message."
 msgstr "IPP の属性がメッセージのメンバーではありません。"
 
-#: cups/ipp.c:3594
 msgid "IPP begCollection value not 0 bytes."
 msgstr "IPP の begCollection は想定された 0 バイトになっていません。"
 
-#: cups/ipp.c:3376
 msgid "IPP boolean value not 1 byte."
 msgstr "IPP の真偽値が想定された 1 バイトになっていません。"
 
-#: cups/ipp.c:3437
 msgid "IPP date value not 11 bytes."
 msgstr "IPP の date 値は想定された 11 バイトになっていません。"
 
-#: cups/ipp.c:3615
 msgid "IPP endCollection value not 0 bytes."
 msgstr "IPP の endCollection は想定された 0 バイトになっていません。"
 
-#: cups/ipp.c:3351
 msgid "IPP enum value not 4 bytes."
 msgstr "IPP の enum 値は想定された 4 バイトになっていません。"
 
-#: cups/ipp.c:3075
 msgid "IPP extension tag larger than 0x7FFFFFFF."
 msgstr "IPP の拡張タグが 0x7FFFFFFF より大きいです。"
 
-#: cups/ipp.c:3348
 msgid "IPP integer value not 4 bytes."
 msgstr "IPP の整数値は想定された 4 バイトになっていません。"
 
-#: cups/ipp.c:3547
 msgid "IPP language length overflows value."
 msgstr "IPP の language length の値がオーバーフローしています。"
 
-#: cups/ipp.c:3556
 msgid "IPP language length too large."
 msgstr "IPP の language の長さが長すぎます。"
 
-#: cups/ipp.c:3260
 msgid "IPP member name is not empty."
 msgstr "IPP のメンバー名が空ではありません。"
 
-#: cups/ipp.c:3641
 msgid "IPP memberName value is empty."
 msgstr "IPP の memberName の値が空です。"
 
-#: cups/ipp.c:3633
 msgid "IPP memberName with no attribute."
 msgstr "IPP の memberName に属性がありません。"
 
-#: cups/ipp.c:3129
 msgid "IPP name larger than 32767 bytes."
 msgstr "IPP 名が 32767 バイトより大きいです。"
 
-#: cups/ipp.c:3514
 msgid "IPP nameWithLanguage value less than minimum 4 bytes."
 msgstr "IPP の nameWithLanguage が最小値 4 バイト未満です。"
 
-#: cups/ipp.c:3671
 msgid "IPP octetString length too large."
 msgstr "IPP の octetString の長さが大きすぎます。"
 
-#: cups/ipp.c:3482
 msgid "IPP rangeOfInteger value not 8 bytes."
 msgstr "IPP の rangeOfInteger は想定された 8 バイトになっていません。"
 
-#: cups/ipp.c:3455
 msgid "IPP resolution value not 9 bytes."
 msgstr "IPP の resolution は想定された 9 バイトになっていません。"
 
-#: cups/ipp.c:3574
 msgid "IPP string length overflows value."
 msgstr "IPP の文字列長の値がオーバーフローしています。"
 
-#: cups/ipp.c:3510
 msgid "IPP textWithLanguage value less than minimum 4 bytes."
 msgstr "IPP の textWithLanguage の値が最小値 4 バイト未満です。"
 
-#: cups/ipp.c:3334
 msgid "IPP value larger than 32767 bytes."
 msgstr "IPP の値が 32767 バイト以上です。"
 
-#: ppdc/sample.c:1
 msgid "ISOLatin1"
 msgstr "ISOLatin1"
 
-#: cups/ppd.c:311
 msgid "Illegal control character"
 msgstr "不正な制御文字"
 
-#: cups/ppd.c:312
 msgid "Illegal main keyword string"
 msgstr "不正なメインキーワード文字列"
 
-#: cups/ppd.c:313
 msgid "Illegal option keyword string"
 msgstr "不正なオプションキーワード文字列"
 
-#: cups/ppd.c:314
 msgid "Illegal translation string"
 msgstr "不正な翻訳文字列"
 
-#: cups/ppd.c:315
 msgid "Illegal whitespace character"
 msgstr "不正な空白文字"
 
-#: ppdc/sample.c:266
 msgid "Installable Options"
 msgstr "インストール可能オプション"
 
-#: ppdc/sample.c:269
 msgid "Installed"
 msgstr "インストールされています"
 
-#: ppdc/sample.c:288
 msgid "IntelliBar Label Printer"
 msgstr "IntelliBar ラベルプリンター"
 
-#: ppdc/sample.c:287
 msgid "Intellitech"
 msgstr "Intellitech"
 
-#: cups/http-support.c:1396
 msgid "Internal Server Error"
 msgstr "サーバー内部エラー"
 
-#: cups/ppd.c:302
 msgid "Internal error"
 msgstr "内部エラー"
 
-#: ppdc/sample.c:167
 msgid "Internet Postage 2-Part"
 msgstr "Internet Postage 2-Part"
 
-#: ppdc/sample.c:168
 msgid "Internet Postage 3-Part"
 msgstr "Internet Postage 3-Part"
 
-#: backend/ipp.c:319
 msgid "Internet Printing Protocol"
 msgstr "インターネット印刷プロトコル"
 
-#: cups/pwg-media.c:293 cups/pwg-media.c:312
 msgid "Invalid media name arguments."
 msgstr "無効なメディア名引数です。"
 
-#: cups/dest-options.c:1032
 msgid "Invalid media size."
 msgstr "無効なメディアサイズです。"
 
-#: filter/commandtops.c:114
 #, c-format
 msgid "Invalid printer command \"%s\"."
 msgstr "無効なプリンターコマンドです。 \"%s\""
 
-#: cups/ppd.c:1376
 msgid "JCL"
 msgstr "JCL"
 
-#: ppdc/sample.c:53
 msgid "JIS B0"
 msgstr "JIS B0"
 
-#: ppdc/sample.c:55
 msgid "JIS B1"
 msgstr "JIS B1"
 
-#: ppdc/sample.c:54
 msgid "JIS B10"
 msgstr "JIS B10"
 
-#: ppdc/sample.c:56
 msgid "JIS B2"
 msgstr "JIS B2"
 
-#: ppdc/sample.c:57
 msgid "JIS B3"
 msgstr "JIS B3"
 
-#: ppdc/sample.c:58
 msgid "JIS B4"
 msgstr "JIS B4"
 
-#: ppdc/sample.c:59
 msgid "JIS B4 Long Edge"
 msgstr "JIS B4 長辺送り"
 
-#: ppdc/sample.c:60
 msgid "JIS B5"
 msgstr "JIS B5"
 
-#: ppdc/sample.c:61
 msgid "JIS B5 Long Edge"
 msgstr "JIS B5 長辺送り"
 
-#: ppdc/sample.c:62
 msgid "JIS B6"
 msgstr "JIS B6"
 
-#: ppdc/sample.c:63
 msgid "JIS B6 Long Edge"
 msgstr "JIS B6 長辺送り"
 
-#: ppdc/sample.c:64
 msgid "JIS B7"
 msgstr "JIS B7"
 
-#: ppdc/sample.c:65
 msgid "JIS B8"
 msgstr "JIS B8"
 
-#: ppdc/sample.c:66
 msgid "JIS B9"
 msgstr "JIS B9"
 
-#: scheduler/ipp.c:8954
 #, c-format
 msgid "Job #%d cannot be restarted - no files."
 msgstr "ジョブ番号 %d を再開できません - ファイルが見つかりません。"
 
-#: scheduler/ipp.c:2999 scheduler/ipp.c:3233 scheduler/ipp.c:3292
-#: scheduler/ipp.c:3469 scheduler/ipp.c:3915 scheduler/ipp.c:5566
-#: scheduler/ipp.c:5948 scheduler/ipp.c:6095 scheduler/ipp.c:6433
-#: scheduler/ipp.c:7383 scheduler/ipp.c:7405 scheduler/ipp.c:7577
-#: scheduler/ipp.c:7802 scheduler/ipp.c:7845 scheduler/ipp.c:8696
-#: scheduler/ipp.c:8922 scheduler/ipp.c:9274 scheduler/ipp.c:9878
 #, c-format
 msgid "Job #%d does not exist."
 msgstr "ジョブ番号 %d は存在しません。"
 
-#: scheduler/ipp.c:3501
 #, c-format
 msgid "Job #%d is already aborted - can't cancel."
 msgstr "ジョブ番号 %d はすでに中断されています - キャンセルできません。"
 
-#: scheduler/ipp.c:3495
 #, c-format
 msgid "Job #%d is already canceled - can't cancel."
 msgstr "ジョブ番号 %d はすでにキャンセルされています - キャンセルできません。"
 
-#: scheduler/ipp.c:3507
 #, c-format
 msgid "Job #%d is already completed - can't cancel."
 msgstr "ジョブ番号 %d はすでに完了しています - キャンセルできません。"
 
-#: scheduler/ipp.c:7603 scheduler/ipp.c:7887 scheduler/ipp.c:9893
 #, c-format
 msgid "Job #%d is finished and cannot be altered."
 msgstr "ジョブ番号 %d はすでに終了し、変更できません。"
 
-#: scheduler/ipp.c:8936
 #, c-format
 msgid "Job #%d is not complete."
 msgstr "ジョブ番号 %d は完了していません。"
 
-#: scheduler/ipp.c:3014
 #, c-format
 msgid "Job #%d is not held for authentication."
 msgstr "ジョブ番号 %d は認証のために保留されていません。"
 
-#: scheduler/ipp.c:8710
 #, c-format
 msgid "Job #%d is not held."
 msgstr "ジョブ番号 %d は保留されていません。"
 
-#: cgi-bin/ipp-var.c:1035
 msgid "Job Completed"
 msgstr "ジョブ完了"
 
-#: cgi-bin/ipp-var.c:1033
 msgid "Job Created"
 msgstr "ジョブ作成"
 
-#: cgi-bin/ipp-var.c:1039
 msgid "Job Options Changed"
 msgstr "ジョブオプション変更"
 
-#: cgi-bin/ipp-var.c:1037
 msgid "Job Stopped"
 msgstr "ジョブ中止"
 
-#: scheduler/ipp.c:9975
 msgid "Job is completed and cannot be changed."
 msgstr "ジョブは完了し変更できません。"
 
-#: cgi-bin/jobs.c:192
 msgid "Job operation failed"
 msgstr "ジョブ操作失敗"
 
-#: scheduler/ipp.c:10011 scheduler/ipp.c:10028 scheduler/ipp.c:10039
 msgid "Job state cannot be changed."
 msgstr "ジョブの状態を変更できません。"
 
-#: scheduler/ipp.c:8802
 msgid "Job subscriptions cannot be renewed."
 msgstr "ジョブサブスクリプションを更新できません。"
 
-#: cgi-bin/jobs.c:97 cgi-bin/jobs.c:108 cgi-bin/jobs.c:189
 msgid "Jobs"
 msgstr "ジョブ"
 
-#: backend/lpd.c:177
 msgid "LPD/LPR Host or Printer"
 msgstr "LPD/LPR ホストまたはプリンター"
 
-#: ppdc/sample.c:230
 msgid "Label Printer"
 msgstr "ラベルプリンター"
 
-#: ppdc/sample.c:441
 msgid "Label Top"
 msgstr "ラベルトップ"
 
-#: scheduler/ipp.c:2061 scheduler/ipp.c:5489
 #, c-format
 msgid "Language \"%s\" not supported."
 msgstr "言語 \"%s\" はサポートされていません。"
 
-#: ppdc/sample.c:164
 msgid "Large Address"
 msgstr "ラージアドレス"
 
-#: ppdc/sample.c:286
 msgid "LaserJet Series PCL 4/5"
 msgstr "LaserJet Series PCL 4/5"
 
-#: ppdc/sample.c:43
 msgid "Letter Oversize"
 msgstr "US レター (特大)"
 
-#: ppdc/sample.c:44
 msgid "Letter Oversize Long Edge"
 msgstr "US レター (特大) 長辺送り"
 
-#: ppdc/sample.c:236
 msgid "Light"
 msgstr "薄い"
 
-#: cups/ppd.c:310
 msgid "Line longer than the maximum allowed (255 characters)"
 msgstr "1 行が最大値 (255 文字) を超えています"
 
-#: cgi-bin/admin.c:2373
 msgid "List Available Printers"
 msgstr "使用可能なプリンター一覧"
 
-#: cups/localize.c:291
 msgid "Load paper."
 msgstr "用紙を補給してください。"
 
-#: ppdc/sample.c:264
 msgid "Long-Edge (Portrait)"
 msgstr "長辺給紙 (縦向き)"
 
-#: cups/http-support.c:1725
 msgid "Looking for printer."
 msgstr "プリンターを探しています。"
 
-#: ppdc/sample.c:260
 msgid "Manual Feed"
 msgstr "手差し"
 
-#: cups/ppd.c:747 cups/ppd.c:1313
 msgid "Media Size"
 msgstr "用紙サイズ"
 
-#: cups/ppd.c:751 cups/ppd.c:1317 ppdc/sample.c:254
 msgid "Media Source"
 msgstr "給紙"
 
-#: ppdc/sample.c:359
 msgid "Media Tracking"
 msgstr "用紙の経路"
 
-#: cups/ppd.c:749 cups/ppd.c:1315 ppdc/sample.c:280
 msgid "Media Type"
 msgstr "用紙種類"
 
-#: ppdc/sample.c:237
 msgid "Medium"
 msgstr "紙質"
 
-#: cups/ppd.c:299
 msgid "Memory allocation error"
 msgstr "メモリー割り当てエラー"
 
-#: cups/ppd.c:319
 msgid "Missing CloseGroup"
 msgstr "CloseGroup がありません"
 
-#: cups/ppd.c:300
 msgid "Missing PPD-Adobe-4.x header"
 msgstr "PPD-Adobe-4.x ヘッダーがありません"
 
-#: cups/ppd.c:309
 msgid "Missing asterisk in column 1"
 msgstr "1 列目にアスタリスクがありません"
 
-#: scheduler/ipp.c:5971
 msgid "Missing document-number attribute."
 msgstr "document-number 属性がありません。"
 
-#: cups/adminutil.c:262
 #, c-format
 msgid "Missing double quote on line %d."
 msgstr "%d 行に二重引用符がありません。"
 
-#: cgi-bin/admin.c:714 cgi-bin/admin.c:2086 cgi-bin/admin.c:2171
-#: cgi-bin/admin.c:2765 cgi-bin/admin.c:3019 cgi-bin/admin.c:3130
-#: cgi-bin/admin.c:3840
 msgid "Missing form variable"
 msgstr "form 変数がありません。"
 
-#: scheduler/ipp.c:9328
 msgid "Missing last-document attribute in request."
 msgstr "リクエストに last-document 属性がありません。"
 
-#: cups/pwg-media.c:555
 msgid "Missing media or media-col."
 msgstr "media または media-col がありません。"
 
-#: cups/pwg-media.c:474
 msgid "Missing media-size in media-col."
 msgstr "media-col に media-size がありません。"
 
-#: scheduler/ipp.c:6574
 msgid "Missing notify-subscription-ids attribute."
 msgstr "notify-subscription-ids 属性がありません。"
 
-#: cups/ppd.c:317
 msgid "Missing option keyword"
 msgstr "オプションキーワードがありません"
 
-#: scheduler/ipp.c:3140 scheduler/ipp.c:3165
 msgid "Missing requesting-user-name attribute."
 msgstr "requesting-user-name 属性が設定されていません。"
 
-#: scheduler/ipp.c:388
 msgid "Missing required attributes."
 msgstr "必須の属性が設定されていません。"
 
-#: cups/http-support.c:1486
 msgid "Missing resource in URI"
 msgstr "URI のリソースがない"
 
-#: cups/http-support.c:1480
 msgid "Missing scheme in URI"
 msgstr "URI のスキームがない"
 
-#: cups/adminutil.c:243
 #, c-format
 msgid "Missing value on line %d."
 msgstr "%d 行に値がありません。"
 
-#: cups/ppd.c:301
 msgid "Missing value string"
 msgstr "値文字列がありません"
 
-#: cups/pwg-media.c:462
 msgid "Missing x-dimension in media-size."
 msgstr "media-size に x-dimension がありません。"
 
-#: cups/pwg-media.c:468
 msgid "Missing y-dimension in media-size."
 msgstr "media-size に y-dimension がありません。"
 
-#: systemv/lpinfo.c:470
 #, c-format
 msgid ""
 "Model:  name = %s\n"
@@ -4879,217 +3780,163 @@ msgstr ""
 "        プリンタードライバー = %s\n"
 "        デバイス ID = %s"
 
-#: test/ippfind.c:2786
 msgid "Modifiers:"
 msgstr "修飾子:"
 
-#: cgi-bin/admin.c:548
 msgid "Modify Class"
 msgstr "クラスの変更"
 
-#: cgi-bin/admin.c:860
 msgid "Modify Printer"
 msgstr "プリンターの変更"
 
-#: cgi-bin/ipp-var.c:410 cgi-bin/ipp-var.c:501
 msgid "Move All Jobs"
 msgstr "すべてのジョブの移動"
 
-#: cgi-bin/ipp-var.c:349 cgi-bin/ipp-var.c:408 cgi-bin/ipp-var.c:499
 msgid "Move Job"
 msgstr "ジョブの移動"
 
-#: cups/http-support.c:1353
 msgid "Moved Permanently"
 msgstr "別の場所へ移動しました"
 
-#: cups/ppd.c:298
 msgid "NULL PPD file pointer"
 msgstr "PPD ファイルポインターが NULL です"
 
-#: cups/snmp.c:1005
 msgid "Name OID uses indefinite length"
 msgstr "OID 名は限定的な長さを使用します"
 
-#: scheduler/ipp.c:1054
 msgid "Nested classes are not allowed."
 msgstr "入れ子になったクラスは許可されていません。"
 
-#: ppdc/sample.c:425
 msgid "Never"
 msgstr "Never"
 
-#: cups/ppd.c:1904
 msgid "No"
 msgstr "いいえ"
 
-#: cups/http-support.c:1350
 msgid "No Content"
 msgstr "中身がありません"
 
-#: cups/util.c:1123
 msgid "No PPD name"
 msgstr "PPD の名前がありません"
 
-#: cups/snmp.c:999
 msgid "No VarBind SEQUENCE"
 msgstr "VarBind SEQUENCE がありません"
 
-#: cups/adminutil.c:777
 msgid "No Windows printer drivers are installed."
 msgstr "Windows プリンタードライバーがインストールされていません。"
 
-#: cups/request.c:570 cups/request.c:933
 msgid "No active connection"
 msgstr "アクティブな接続はありません"
 
-#: cups/request.c:350
 msgid "No active connection."
 msgstr "アクティブな接続はありません。"
 
-#: scheduler/ipp.c:3418
 #, c-format
 msgid "No active jobs on %s."
 msgstr "%s にはアクティブなジョブはありません。"
 
-#: scheduler/ipp.c:216
 msgid "No attributes in request."
 msgstr "リクエストに属性がありません。"
 
-#: scheduler/ipp.c:3041
 msgid "No authentication information provided."
 msgstr "認証情報が提供されていません。"
 
-#: cups/snmp.c:956
 msgid "No community name"
 msgstr "コミュニティ名がありません"
 
-#: scheduler/ipp.c:5771
 msgid "No default printer."
 msgstr "デフォルトのプリンターはありません。"
 
-#: cgi-bin/ipp-var.c:421 scheduler/ipp.c:7149
 msgid "No destinations added."
 msgstr "追加された宛先はありません。"
 
-#: backend/usb.c:200
 msgid "No device URI found in argv[0] or in DEVICE_URI environment variable."
 msgstr "argv[0] または 環境変数 DEVICE_URI にデバイス URI が見つかりません。"
 
-#: cups/snmp.c:986
 msgid "No error-index"
 msgstr "エラーインデックスがありません"
 
-#: cups/snmp.c:978
 msgid "No error-status"
 msgstr "エラーステータスがありません"
 
-#: scheduler/ipp.c:8091 scheduler/ipp.c:9342
 msgid "No file in print request."
 msgstr "印刷リクエストにファイルがありません。"
 
-#: cups/util.c:817
 msgid "No modification time"
 msgstr "変更時刻がありません"
 
-#: cups/snmp.c:1003
 msgid "No name OID"
 msgstr "OID 名がありません"
 
-#: filter/rastertoepson.c:1132 filter/rastertohp.c:865
-#: filter/rastertolabel.c:1288
 msgid "No pages were found."
 msgstr " ページが見つかりません。"
 
-#: cups/util.c:811
 msgid "No printer name"
 msgstr "プリンター名がありません"
 
-#: cups/util.c:1647
 msgid "No printer-uri found"
 msgstr "プリンター URI が見つかりません"
 
-#: cups/util.c:1631
 msgid "No printer-uri found for class"
 msgstr "クラスのプリンター URI が見つかりません"
 
-#: scheduler/ipp.c:6179
 msgid "No printer-uri in request."
 msgstr "プリンター URI のリクエストがありません。"
 
-#: cups/http.c:2260
 msgid "No request URI."
 msgstr "リクエスト URI がありません。"
 
-#: cups/http.c:2277
 msgid "No request protocol version."
 msgstr "リクエストプロトコルバージョンがありません。"
 
-#: cups/request.c:358
 msgid "No request sent."
 msgstr "リクエストが送られませんでした。"
 
-#: cups/snmp.c:970
 msgid "No request-id"
 msgstr "リクエストID がありません"
 
-#: scheduler/ipp.c:5374
 msgid "No subscription attributes in request."
 msgstr "リクエストにサブスクリプション属性がありません。"
 
-#: scheduler/ipp.c:7476
 msgid "No subscriptions found."
 msgstr "サブスクリプションが見つかりません。"
 
-#: cups/snmp.c:994
 msgid "No variable-bindings SEQUENCE"
 msgstr "variable-bindings SEQUENCE がありません"
 
-#: cups/snmp.c:949
 msgid "No version number"
 msgstr "バージョン名がありません"
 
-#: ppdc/sample.c:362
 msgid "Non-continuous (Mark sensing)"
 msgstr "非連続です (Mark sensing)"
 
-#: ppdc/sample.c:361
 msgid "Non-continuous (Web sensing)"
 msgstr "非連続です (Web sensing)"
 
-#: ppdc/sample.c:238
 msgid "Normal"
 msgstr "標準"
 
-#: cups/http-support.c:1372
 msgid "Not Found"
 msgstr "見つかりません"
 
-#: cups/http-support.c:1384
 msgid "Not Implemented"
 msgstr "実装されていません"
 
-#: ppdc/sample.c:268
 msgid "Not Installed"
 msgstr "インストールされていません"
 
-#: cups/http-support.c:1359
 msgid "Not Modified"
 msgstr "変更されていません"
 
-#: cups/http-support.c:1387
 msgid "Not Supported"
 msgstr "サポートされていません"
 
-#: scheduler/ipp.c:1490 scheduler/ipp.c:10572
 msgid "Not allowed to print."
 msgstr "印刷が許可されていません。"
 
-#: ppdc/sample.c:146
 msgid "Note"
 msgstr "注意"
 
-#: systemv/cupstestdsc.c:433
 msgid ""
 "Note: this program only validates the DSC comments, not the PostScript "
 "itself."
@@ -5097,725 +3944,544 @@ msgstr ""
 "注意: このプログラムは DSC コメントを検証するだけで、PostScript 自身を検証す"
 "るものではありません。"
 
-#: cups/http-support.c:1341 cups/http-support.c:1477 cups/ppd.c:296
 msgid "OK"
 msgstr "OK"
 
-#: ppdc/sample.c:263
 msgid "Off (1-Sided)"
 msgstr "Off (片面)"
 
-#: ppdc/sample.c:356
 msgid "Oki"
 msgstr "Oki"
 
-#: cgi-bin/help.c:91 cgi-bin/help.c:132 cgi-bin/help.c:142 cgi-bin/help.c:172
 msgid "Online Help"
 msgstr "オンラインヘルプ"
 
-#: cups/adminutil.c:944
 #, c-format
 msgid "Open of %s failed: %s"
 msgstr "%s のオープンに失敗しました: %s"
 
-#: cups/ppd.c:304
 msgid "OpenGroup without a CloseGroup first"
 msgstr "OpenGroup の前にまず CloseGroup が必要です"
 
-#: cups/ppd.c:306
 msgid "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first"
 msgstr "OpenUI/JCLOpenUI の前にまず CloseUI/JCLCloseUI が必要です"
 
-#: cgi-bin/admin.c:3611
 msgid "Operation Policy"
 msgstr "操作ポリシー"
 
-#: filter/pstops.c:2177
 #, c-format
 msgid "Option \"%s\" cannot be included via %%%%IncludeFeature."
 msgstr "オプション \"%s\" は %%%%IncludeFeature 経由で含めることはできません。"
 
-#: cgi-bin/admin.c:3261 cgi-bin/admin.c:3345
 msgid "Options Installed"
 msgstr "インストールされたオプション"
 
-#: scheduler/cupsfilter.c:1482 scheduler/main.c:2146 systemv/cupsaddsmb.c:284
-#: systemv/cupsctl.c:203 systemv/cupstestdsc.c:429 systemv/cupstestppd.c:3817
-#: test/ippfind.c:2745 test/ipptool.c:4805 ppdc/ppdc.cxx:432
-#: ppdc/ppdhtml.cxx:174 ppdc/ppdi.cxx:130 ppdc/ppdmerge.cxx:363
-#: ppdc/ppdpo.cxx:254
 msgid "Options:"
 msgstr "オプション:"
 
-#: cups/ppd-cache.c:125
 msgid "Out of date PPD cache file."
 msgstr "PPD キャッシュファイルが古すぎます。"
 
-#: cups/ppd-cache.c:1410
 msgid "Out of memory."
 msgstr "メモリーが足りません。"
 
-#: cups/ppd.c:753 cups/ppd.c:1319
 msgid "Output Mode"
 msgstr "出力モード"
 
-#: cups/localize.c:316
 msgid "Output bin is almost full."
 msgstr "排紙ビンがほとんど満杯です。"
 
-#: cups/localize.c:318
 msgid "Output bin is full."
 msgstr "排紙ビンが満杯です。"
 
-#: cups/localize.c:314
 msgid "Output bin is missing."
 msgstr "排紙ビンがありません。"
 
-#: systemv/cupstestdsc.c:399
 msgid "PASS"
 msgstr "合格"
 
-#: ppdc/sample.c:252
 msgid "PCL Laser Printer"
 msgstr "PCL レーザープリンター"
 
-#: ppdc/sample.c:149
 msgid "PRC16K"
 msgstr "PRC16K"
 
-#: ppdc/sample.c:150
 msgid "PRC16K Long Edge"
 msgstr "PRC16K 長辺送り"
 
-#: ppdc/sample.c:151
 msgid "PRC32K"
 msgstr "PRC32K"
 
-#: ppdc/sample.c:154
 msgid "PRC32K Long Edge"
 msgstr "PRC32K 長辺送り"
 
-#: ppdc/sample.c:152
 msgid "PRC32K Oversize"
 msgstr "PRC32K (特大)"
 
-#: ppdc/sample.c:153
 msgid "PRC32K Oversize Long Edge"
 msgstr "PRC32K (特大) 長辺送り"
 
-#: cups/snmp.c:966
 msgid "Packet does not contain a Get-Response-PDU"
 msgstr "パケットが Get-Response-PDU を含んでいません"
 
-#: cups/snmp.c:945
 msgid "Packet does not start with SEQUENCE"
 msgstr "パケットが SEQUENCE から始まりません"
 
-#: cups/localize.c:293
 msgid "Paper jam."
 msgstr "用紙詰まりです。"
 
-#: cups/localize.c:310
 msgid "Paper tray is almost empty."
 msgstr "給紙トレイがほとんど空です。"
 
-#: cups/localize.c:312
 msgid "Paper tray is empty."
 msgstr "給紙トレイが空です。"
 
-#: cups/localize.c:308
 msgid "Paper tray is missing."
 msgstr "給紙トレイがありません。"
 
-#: ppdc/sample.c:355
 msgid "ParamCustominCutInterval"
 msgstr "ParamCustominCutInterval"
 
-#: ppdc/sample.c:353
 msgid "ParamCustominTearInterval"
 msgstr "ParamCustominTearInterval"
 
-#: cups/auth.c:195 cups/auth.c:362
 #, c-format
 msgid "Password for %s on %s? "
 msgstr "%s のパスワード (%s 上)? "
 
-#: systemv/cupsaddsmb.c:252
 #, c-format
 msgid "Password for %s required to access %s via SAMBA: "
 msgstr "%s のパスワード (SAMBA 経由で %s にアクセスするのに必要):"
 
-#: cgi-bin/classes.c:159
 msgid "Pause Class"
 msgstr "クラスの休止"
 
-#: cgi-bin/printers.c:162
 msgid "Pause Printer"
 msgstr "プリンターの休止"
 
-#: ppdc/sample.c:443
 msgid "Peel-Off"
 msgstr "Peel-Off"
 
-#: ppdc/sample.c:160
 msgid "Photo"
 msgstr "写真"
 
-#: ppdc/sample.c:161
 msgid "Photo Labels"
 msgstr "写真ラベル"
 
-#: ppdc/sample.c:281
 msgid "Plain Paper"
 msgstr "普通紙"
 
-#: cgi-bin/admin.c:3279 cgi-bin/admin.c:3560
 msgid "Policies"
 msgstr "ポリシー"
 
-#: cgi-bin/admin.c:3286 cgi-bin/admin.c:3629 cgi-bin/admin.c:3642
 msgid "Port Monitor"
 msgstr "ポートモニター"
 
-#: ppdc/sample.c:270
 msgid "PostScript Printer"
 msgstr "PostScript プリンター"
 
-#: ppdc/sample.c:147
 msgid "Postcard"
 msgstr "ハガキ"
 
-#: ppdc/sample.c:71
 msgid "Postcard Double "
 msgstr "往復ハガキ"
 
-#: ppdc/sample.c:72
 msgid "Postcard Double Long Edge"
 msgstr "往復ハガキ 長辺送り"
 
-#: ppdc/sample.c:148
 msgid "Postcard Long Edge"
 msgstr "ハガキ 長辺送り"
 
-#: backend/ipp.c:961 backend/ipp.c:969
 msgid "Preparing to print."
 msgstr "印刷準備中です。"
 
-#: ppdc/sample.c:290
 msgid "Print Density"
 msgstr "印刷密度"
 
-#: cups/notify.c:82
 msgid "Print Job:"
 msgstr "ジョブの印刷:"
 
-#: ppdc/sample.c:335
 msgid "Print Mode"
 msgstr "印刷モード"
 
-#: ppdc/sample.c:378
 msgid "Print Rate"
 msgstr "印刷レート"
 
-#: cgi-bin/printers.c:171
 msgid "Print Self-Test Page"
 msgstr "自己テストページの印刷"
 
-#: ppdc/sample.c:322
 msgid "Print Speed"
 msgstr "印刷速度"
 
-#: cgi-bin/ipp-var.c:777
 msgid "Print Test Page"
 msgstr "テストページの印刷"
 
-#: ppdc/sample.c:351
 msgid "Print and Cut"
 msgstr "プリントしてカット"
 
-#: ppdc/sample.c:339
 msgid "Print and Tear"
 msgstr "プリントして切り取る"
 
-#: backend/socket.c:429 backend/usb-unix.c:184
 msgid "Print file sent."
 msgstr "プリントファイルが送られました。"
 
-#: backend/ipp.c:2172
 msgid "Print job canceled at printer."
 msgstr "印刷ジョブはプリンターでキャンセルされました。"
 
-#: backend/ipp.c:2164
 msgid "Print job too large."
 msgstr "印刷ジョブが大きすぎます。"
 
-#: backend/ipp.c:1642
 msgid "Print job was not accepted."
 msgstr "印刷ジョブが受け付けられませんでした。"
 
-#: cgi-bin/ipp-var.c:1027
 msgid "Printer Added"
 msgstr "追加されたプリンター"
 
-#: ppdc/sample.c:255
 msgid "Printer Default"
 msgstr "デフォルトのプリンター"
 
-#: cgi-bin/ipp-var.c:1031
 msgid "Printer Deleted"
 msgstr "削除されたプリンター"
 
-#: cgi-bin/ipp-var.c:1029
 msgid "Printer Modified"
 msgstr "変更されたプリンター"
 
-#: cgi-bin/ipp-var.c:1025
 msgid "Printer Paused"
 msgstr "プリンターの休止"
 
-#: ppdc/sample.c:289
 msgid "Printer Settings"
 msgstr "プリンター設定"
 
-#: backend/ipp.c:2167
 msgid "Printer cannot print supplied content."
 msgstr "プリンターは受信した内容を印刷できませんでした。"
 
-#: backend/ipp.c:2170
 msgid "Printer cannot print with supplied options."
 msgstr "指定されたオプションではプリンターは印刷できません。"
 
-#: cups/notify.c:126
 msgid "Printer:"
 msgstr "プリンター:"
 
-#: cgi-bin/printers.c:196 cgi-bin/printers.c:324
 msgid "Printers"
 msgstr "プリンター"
 
-#: filter/rastertoepson.c:1078 filter/rastertohp.c:806
-#: filter/rastertolabel.c:1235
 #, c-format
 msgid "Printing page %d, %u%% complete."
 msgstr "ページ %d, %u%% の印刷が完了しました。"
 
-#: ppdc/sample.c:155
 msgid "Quarto"
 msgstr "Quarto"
 
-#: scheduler/ipp.c:1485 scheduler/ipp.c:10567
 msgid "Quota limit reached."
 msgstr "クォータの制限に達しました。"
 
-#: berkeley/lpq.c:490
 msgid "Rank    Owner   Job     File(s)                         Total Size"
 msgstr "ランク  所有者  ジョブ  ファイル                        合計サイズ"
 
-#: cgi-bin/classes.c:163 cgi-bin/printers.c:166
 msgid "Reject Jobs"
 msgstr "ジョブの拒否"
 
-#: backend/lpd.c:1024 backend/lpd.c:1156
 #, c-format
 msgid "Remote host did not accept control file (%d)."
 msgstr "リモートホストがコントロールファイルを受け付けませんでした (%d)。"
 
-#: backend/lpd.c:1109
 #, c-format
 msgid "Remote host did not accept data file (%d)."
 msgstr "リモートホストがデータファイルを受け付けませんでした (%d)。"
 
-#: ppdc/sample.c:423
 msgid "Reprint After Error"
 msgstr "エラー後の再印刷"
 
-#: cups/http-support.c:1375
 msgid "Request Entity Too Large"
 msgstr "要求するエンティティが大きすぎます"
 
-#: cups/ppd.c:755 cups/ppd.c:1321 ppdc/sample.c:231
 msgid "Resolution"
 msgstr "解像度"
 
-#: cgi-bin/classes.c:157
 msgid "Resume Class"
 msgstr "クラスを再開する"
 
-#: cgi-bin/printers.c:159
 msgid "Resume Printer"
 msgstr "プリンターを再開する"
 
-#: ppdc/sample.c:165
 msgid "Return Address"
 msgstr "返信用ラベル"
 
-#: ppdc/sample.c:444
 msgid "Rewind"
 msgstr "巻き取り"
 
-#: cups/adminutil.c:2041
 #, c-format
 msgid "Running command: %s %s -N -A %s -c '%s'"
 msgstr "コマンドを実行中: %s %s -N -A %s -c '%s'"
 
-#: cups/snmp.c:947
 msgid "SEQUENCE uses indefinite length"
 msgstr "SEQUENCE は不定長を使用しています"
 
-#: cups/http-support.c:1399
 msgid "SSL/TLS Negotiation Error"
 msgstr "SSL/TLS のネゴシエーションエラー"
 
-#: cups/http-support.c:1356
 msgid "See Other"
 msgstr "残りを見てください"
 
-#: backend/usb-darwin.c:552 backend/usb-libusb.c:346
 msgid "Sending data to printer."
 msgstr "データをプリンターに送信しています。"
 
-#: cgi-bin/ipp-var.c:1041
 msgid "Server Restarted"
 msgstr "再起動されたサーバー"
 
-#: cgi-bin/ipp-var.c:1047
 msgid "Server Security Auditing"
 msgstr "サーバーのセキュリティー監査"
 
-#: cgi-bin/ipp-var.c:1043
 msgid "Server Started"
 msgstr "開始されたサーバー"
 
-#: cgi-bin/ipp-var.c:1045
 msgid "Server Stopped"
 msgstr "停止されたサーバー"
 
-#: cups/tls-darwin.c:1008 cups/tls-gnutls.c:1024
 msgid "Server credentials not set."
 msgstr "サーバー証明書が設定されていません。"
 
-#: cups/http-support.c:1393
 msgid "Service Unavailable"
 msgstr "利用できないサービス"
 
-#: cgi-bin/admin.c:2766 cgi-bin/admin.c:2812 cgi-bin/admin.c:2969
-#: cgi-bin/admin.c:2988
 msgid "Set Allowed Users"
 msgstr "許可するユーザーの設定"
 
-#: cgi-bin/admin.c:3015
 msgid "Set As Server Default"
 msgstr "サーバーのデフォルトに設定"
 
-#: cgi-bin/admin.c:3115
 msgid "Set Class Options"
 msgstr "クラスオプションの設定"
 
-#: cgi-bin/admin.c:3115 cgi-bin/admin.c:3289 cgi-bin/admin.c:3671
 msgid "Set Printer Options"
 msgstr "プリンターオプションの設定"
 
-#: cgi-bin/admin.c:3841 cgi-bin/admin.c:3885 cgi-bin/admin.c:3903
 msgid "Set Publishing"
 msgstr "公開の設定"
 
-#: ppdc/sample.c:166
 msgid "Shipping Address"
 msgstr "発送先ラベル"
 
-#: ppdc/sample.c:265
 msgid "Short-Edge (Landscape)"
 msgstr "短辺 (横原稿)"
 
-#: ppdc/sample.c:283
 msgid "Special Paper"
 msgstr "特殊紙"
 
-#: backend/lpd.c:1065
 #, c-format
 msgid "Spooling job, %.0f%% complete."
 msgstr "ジョブをスプール中、%.0f%% 完了しました。"
 
-#: ppdc/sample.c:336
 msgid "Standard"
 msgstr "標準"
 
 #. TRANSLATORS: Banner/cover sheet before the print job.
-#: cgi-bin/admin.c:3532
 msgid "Starting Banner"
 msgstr "開始バナー"
 
-#: filter/rastertoepson.c:1054 filter/rastertohp.c:782
-#: filter/rastertolabel.c:1211
 #, c-format
 msgid "Starting page %d."
 msgstr "ページ %d を開始しています。"
 
-#: ppdc/sample.c:156
 msgid "Statement"
 msgstr "記述"
 
-#: scheduler/ipp.c:3564 scheduler/ipp.c:6590 scheduler/ipp.c:7289
-#: scheduler/ipp.c:8790
 #, c-format
 msgid "Subscription #%d does not exist."
 msgstr "サブスクリプション番号 %d は存在しません。"
 
-#: test/ippfind.c:2798
 msgid "Substitutions:"
 msgstr "置換:"
 
-#: ppdc/sample.c:157
 msgid "Super A"
 msgstr "スーパー A"
 
-#: ppdc/sample.c:158
 msgid "Super B"
 msgstr "スーパー B"
 
-#: ppdc/sample.c:162
 msgid "Super B/A3"
 msgstr "スーパー B/A3"
 
-#: cups/http-support.c:1338
 msgid "Switching Protocols"
 msgstr "プロトコルの変更"
 
-#: ppdc/sample.c:159
 msgid "Tabloid"
 msgstr "タブロイド"
 
-#: ppdc/sample.c:45
 msgid "Tabloid Oversize"
 msgstr "タブロイド (特大)"
 
-#: ppdc/sample.c:46
 msgid "Tabloid Oversize Long Edge"
 msgstr "タブロイド (特大) 長辺送り"
 
-#: ppdc/sample.c:337
 msgid "Tear"
 msgstr "Tear"
 
-#: ppdc/sample.c:442
 msgid "Tear-Off"
 msgstr "Tear-Off"
 
-#: ppdc/sample.c:383
 msgid "Tear-Off Adjust Position"
 msgstr "Tear-Off 位置調節"
 
-#: scheduler/ipp.c:1321
 #, c-format
 msgid "The \"%s\" attribute is required for print jobs."
 msgstr "印刷ジョブに \"%s\" 属性が必要です。"
 
-#: scheduler/ipp.c:6250 scheduler/ipp.c:6330 scheduler/ipp.c:6343
-#: scheduler/ipp.c:6355 scheduler/ipp.c:6370
 #, c-format
 msgid "The %s attribute cannot be provided with job-ids."
 msgstr "%s 属性は、ジョブ ID と一緒に使うことはできません。"
 
-#: scheduler/ipp.c:1297
 #, c-format
 msgid ""
-"The '%s' Job Description attribute cannot be supplied in a job creation "
-"request."
-msgstr "'%s' Job Description 属性はジョブ作成要求の中で指定できません。"
+"The '%s' Job Status attribute cannot be supplied in a job creation request."
+msgstr ""
 
-#: scheduler/ipp.c:5183
 #, c-format
 msgid ""
 "The '%s' operation attribute cannot be supplied in a Create-Job request."
 msgstr "%s 操作属性は、Create-Job リクエストの中で使うことはできません。"
 
-#: scheduler/ipp.c:6820
 #, c-format
 msgid "The PPD file \"%s\" could not be found."
 msgstr "PPD ファイル \"%s\" が見つかりません。"
 
-#: scheduler/ipp.c:6807
 #, c-format
 msgid "The PPD file \"%s\" could not be opened: %s"
 msgstr "PPD ファイル \"%s\" を開けませんでした: %s"
 
-#: filter/rastertoepson.c:1023 filter/rastertohp.c:753
-#: filter/rastertolabel.c:1175
 msgid "The PPD file could not be opened."
 msgstr "PPD ファイルを開けませんでした。"
 
-#: cgi-bin/admin.c:727
 msgid ""
 "The class name may only contain up to 127 printable characters and may not "
 "contain spaces, slashes (/), or the pound sign (#)."
-msgstr "クラス名は 127 文字以内の表示可能文字からなり、空白、スラッシュ (/)、ハッシュ (#) を含んではなりません。"
+msgstr ""
+"クラス名は 127 文字以内の表示可能文字からなり、空白、スラッシュ (/)、ハッ"
+"シュ (#) を含んではなりません。"
 
-#: cups/localize.c:338
 msgid "The developer unit needs to be replaced."
 msgstr "現像ユニットの交換が必要です。"
 
-#: cups/localize.c:336
 msgid "The developer unit will need to be replaced soon."
 msgstr "もうすぐ現像ユニットの交換時期です。"
 
-#: cups/localize.c:328
 msgid "The fuser's temperature is high."
 msgstr "定着器の温度が高すぎます。"
 
-#: cups/localize.c:330
 msgid "The fuser's temperature is low."
 msgstr "定着器の温度が低すぎます。"
 
-#: scheduler/ipp.c:2088
 msgid ""
 "The notify-lease-duration attribute cannot be used with job subscriptions."
 msgstr ""
 "notify-lease-duration 属性は、ジョブサブスクリプションと一緒に使うことはでき"
 "ません。"
 
-#: scheduler/ipp.c:2071 scheduler/ipp.c:5499
 #, c-format
 msgid "The notify-user-data value is too large (%d > 63 octets)."
 msgstr "notify-user-data 値が大きすぎます (%d > 63 オクテット)。"
 
-#: cups/localize.c:334
 msgid "The optical photoconductor needs to be replaced."
 msgstr "感光体の交換が必要です。"
 
-#: cups/localize.c:332
 msgid "The optical photoconductor will need to be replaced soon."
 msgstr "もうすぐ感光体の交換時期です。"
 
-#: backend/ipp.c:981
 msgid "The printer configuration is incorrect or the printer no longer exists."
 msgstr "プリンターの設定が正しくないかプリンターはすでに存在しません。"
 
-#: backend/lpd.c:627 backend/lpd.c:1017 backend/lpd.c:1099 backend/lpd.c:1149
 msgid "The printer did not respond."
 msgstr "プリンターが応答しません。"
 
-#: backend/ipp.c:825 backend/ipp.c:944 backend/ipp.c:1058 backend/ipp.c:1449
-#: backend/ipp.c:1614 backend/lpd.c:836 backend/socket.c:379
-#: backend/usb-unix.c:124 backend/usb-unix.c:414 backend/usb-unix.c:497
 msgid "The printer is in use."
 msgstr "プリンターは使用中です。"
 
-#: cups/localize.c:320
 msgid "The printer is low on ink."
 msgstr "インク残量が残り少なくなっています。"
 
-#: cups/localize.c:298
 msgid "The printer is low on toner."
 msgstr "トナー残量が残り少なくなっています。"
 
-#: backend/runloop.c:243 backend/runloop.c:363 cups/localize.c:296
 msgid "The printer is not connected."
 msgstr "プリンターは接続されていません。"
 
-#: backend/ipp.c:803 backend/ipp.c:836 backend/ipp.c:940 backend/lpd.c:815
-#: backend/lpd.c:856 backend/socket.c:358 backend/socket.c:391
 msgid "The printer is not responding."
 msgstr "プリンターが応答していません。"
 
-#: backend/runloop.c:385
 msgid "The printer is now connected."
 msgstr "プリンターが接続されました。"
 
-#: backend/usb-darwin.c:1300
 msgid "The printer is now online."
 msgstr "プリンターは現在オンラインです。"
 
-#: backend/usb-darwin.c:1321
 msgid "The printer is offline."
 msgstr "プリンターはオフラインです。"
 
-#: backend/ipp.c:818 backend/lpd.c:829 backend/socket.c:372
 msgid "The printer is unreachable at this time."
 msgstr "プリンターには現在到達できません。"
 
-#: cups/localize.c:322
 msgid "The printer may be out of ink."
 msgstr "プリンターのインクがなくなっているようです。"
 
-#: cups/localize.c:300
 msgid "The printer may be out of toner."
 msgstr "プリンターのトナーがなくなっているようです。"
 
-#: backend/ipp.c:812 backend/lpd.c:823 backend/socket.c:366
 msgid "The printer may not exist or is unavailable at this time."
 msgstr "プリンターは現在存在しないか、使用できないようです。"
 
-#: cgi-bin/admin.c:909
 msgid ""
 "The printer name may only contain up to 127 printable characters and may not "
 "contain spaces, slashes (/), or the pound sign (#)."
-msgstr "プリンター名は 127 文字以内の表示可能文字から成り、空白、スラッシュ (/)、ハッシュ (#) を含んではなりません。"
-
-#: scheduler/ipp.c:788 scheduler/ipp.c:1048 scheduler/ipp.c:3205
-#: scheduler/ipp.c:3384 scheduler/ipp.c:5166 scheduler/ipp.c:5333
-#: scheduler/ipp.c:5647 scheduler/ipp.c:6216 scheduler/ipp.c:7025
-#: scheduler/ipp.c:7081 scheduler/ipp.c:7395 scheduler/ipp.c:7661
-#: scheduler/ipp.c:7750 scheduler/ipp.c:7783 scheduler/ipp.c:8106
-#: scheduler/ipp.c:8500 scheduler/ipp.c:8582 scheduler/ipp.c:9747
-#: scheduler/ipp.c:10199 scheduler/ipp.c:10530 scheduler/ipp.c:10612
-#: scheduler/ipp.c:10987
+msgstr ""
+"プリンター名は 127 文字以内の表示可能文字から成り、空白、スラッシュ (/)、ハッ"
+"シュ (#) を含んではなりません。"
+
 msgid "The printer or class does not exist."
 msgstr "プリンターまたはクラスは存在しません。"
 
-#: scheduler/ipp.c:1234
 msgid "The printer or class is not shared."
 msgstr "プリンターまたはクラスは共有できません。"
 
-#: cups/localize.c:302
 msgid "The printer's cover is open."
 msgstr "プリンターのカバーが開いています。"
 
-#: cups/localize.c:306
 msgid "The printer's door is open."
 msgstr "プリンターのドアが開いています。"
 
-#: cups/localize.c:304
 msgid "The printer's interlock is open."
 msgstr "プリンターのインターロックが開いています。"
 
-#: cups/localize.c:324
 msgid "The printer's waste bin is almost full."
 msgstr "プリンターの廃インクまたは廃トナー容器がほとんど一杯です。"
 
-#: cups/localize.c:326
 msgid "The printer's waste bin is full."
 msgstr "プリンターの廃インクまたは廃トナー容器が一杯です。"
 
-#: scheduler/ipp.c:894 scheduler/ipp.c:2252
 #, c-format
 msgid "The printer-uri \"%s\" contains invalid characters."
 msgstr "printer-uri \"%s\" には、無効な文字が含まれています。"
 
-#: scheduler/ipp.c:3182
 msgid "The printer-uri attribute is required."
 msgstr "printer-uri 属性は必須です。"
 
-#: scheduler/ipp.c:878
 msgid ""
 "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"."
 msgstr ""
 "printer-uri は、\"ipp://ホスト名/classes/クラス名\" 形式でなければなりませ"
 "ん。"
 
-#: scheduler/ipp.c:2236
 msgid ""
 "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"."
 msgstr ""
 "printer-uri は \"ipp://ホスト名/printers/プリンター名\" 形式でなければなりま"
 "せん。"
 
-#: cgi-bin/admin.c:452
 msgid ""
 "The subscription name may not contain spaces, slashes (/), question marks "
 "(?), or the pound sign (#)."
-msgstr "サブスクリプション名には、スペース、スラッシュ (/)、疑問府 (?)、ハッシュ (#) を使用しないでください。"
+msgstr ""
+"サブスクリプション名には、スペース、スラッシュ (/)、疑問府 (?)、ハッシュ (#) "
+"を使用しないでください。"
 
-#: scheduler/client.c:2232
 msgid ""
 "The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to "
 "enable it."
@@ -5823,637 +4489,490 @@ msgstr ""
 "Web インターフェイスが現在無効になっています。有効にするには \"cupsctl "
 "WebInterface=yes\" を実行してください。"
 
-#: scheduler/ipp.c:6314
 #, c-format
 msgid "The which-jobs value \"%s\" is not supported."
 msgstr "which-jobs の値 \"%s\" はサポートされていません。"
 
-#: scheduler/ipp.c:5577
 msgid "There are too many subscriptions."
 msgstr "サブスクリプションが多すぎます。"
 
-#: backend/usb-darwin.c:386 backend/usb-darwin.c:445 backend/usb-darwin.c:514
-#: backend/usb-darwin.c:535 backend/usb-libusb.c:271 backend/usb-libusb.c:325
 msgid "There was an unrecoverable USB error."
 msgstr "回復不可能な USB のエラーが発生しています。"
 
-#: ppdc/sample.c:430
 msgid "Thermal Transfer Media"
 msgstr "熱転写メディア"
 
-#: scheduler/ipp.c:1479
 msgid "Too many active jobs."
 msgstr "アクティブなジョブが多すぎます。"
 
-#: scheduler/ipp.c:1373
 #, c-format
 msgid "Too many job-sheets values (%d > 2)."
 msgstr "job-sheets 値が多すぎます (%d > 2)。"
 
-#: scheduler/ipp.c:2537
 #, c-format
 msgid "Too many printer-state-reasons values (%d > %d)."
 msgstr "printer-state-reasons 値が多すぎます (%d > %d)。"
 
-#: ppdc/sample.c:284
 msgid "Transparency"
 msgstr "OHP シート"
 
-#: ppdc/sample.c:279
 msgid "Tray"
 msgstr "トレイ"
 
-#: ppdc/sample.c:256
 msgid "Tray 1"
 msgstr "トレイ 1"
 
-#: ppdc/sample.c:257
 msgid "Tray 2"
 msgstr "トレイ 2"
 
-#: ppdc/sample.c:258
 msgid "Tray 3"
 msgstr "トレイ 3"
 
-#: ppdc/sample.c:259
 msgid "Tray 4"
 msgstr "トレイ 4"
 
-#: cups/http-support.c:1378
 msgid "URI Too Long"
 msgstr "URI が長すぎます"
 
-#: cups/http-support.c:1453
 msgid "URI too large"
 msgstr "URI が長すぎる"
 
-#: ppdc/sample.c:138
 msgid "US Ledger"
 msgstr "US レジャー"
 
-#: ppdc/sample.c:139
 msgid "US Legal"
 msgstr "US リーガル"
 
-#: ppdc/sample.c:140
 msgid "US Legal Oversize"
 msgstr "US リーガル (特大)"
 
-#: ppdc/sample.c:141
 msgid "US Letter"
 msgstr "US レター"
 
-#: ppdc/sample.c:142
 msgid "US Letter Long Edge"
 msgstr "US レター 長辺送り"
 
-#: ppdc/sample.c:143
 msgid "US Letter Oversize"
 msgstr "US レター (特大)"
 
-#: ppdc/sample.c:144
 msgid "US Letter Oversize Long Edge"
 msgstr "US レター (特大) 長辺送り"
 
-#: ppdc/sample.c:145
 msgid "US Letter Small"
 msgstr "US レター (小)"
 
-#: cgi-bin/admin.c:1939 cgi-bin/admin.c:1952 cgi-bin/admin.c:1976
 msgid "Unable to access cupsd.conf file"
 msgstr "cupsd.conf ファイルにアクセスできません"
 
-#: cgi-bin/help.c:133
 msgid "Unable to access help file."
 msgstr "ヘルプファイルにアクセスできません。"
 
-#: cgi-bin/admin.c:504
 msgid "Unable to add RSS subscription"
 msgstr "RSS 購読を追加できません"
 
-#: cgi-bin/admin.c:792
 msgid "Unable to add class"
 msgstr "クラスを追加できません"
 
-#: backend/ipp.c:1796
 msgid "Unable to add document to print job."
 msgstr "ドキュメントを印刷ジョブに追加できません。"
 
-#: scheduler/ipp.c:1537
 #, c-format
 msgid "Unable to add job for destination \"%s\"."
 msgstr "宛先 \"%s\"にジョブを追加できません。"
 
-#: cgi-bin/admin.c:1037 cgi-bin/admin.c:1399
 msgid "Unable to add printer"
 msgstr "プリンターを追加できません"
 
-#: scheduler/ipp.c:1164
 msgid "Unable to allocate memory for file types."
 msgstr "ファイルタイプ用にメモリーを割り当てられません。"
 
-#: filter/pstops.c:418
 msgid "Unable to allocate memory for page info"
 msgstr "ページ情報のメモリー割り当てができません"
 
-#: filter/pstops.c:412
 msgid "Unable to allocate memory for pages array"
 msgstr "ページアレイのメモリー割り当てができません"
 
-#: cgi-bin/admin.c:1505
 msgid "Unable to cancel RSS subscription"
 msgstr "RSS 購読をキャンセルできません"
 
-#: backend/ipp.c:2077 backend/ipp.c:2512
 msgid "Unable to cancel print job."
 msgstr "プリンターを変更できません。"
 
-#: cgi-bin/admin.c:2970
 msgid "Unable to change printer"
 msgstr "プリンターを変更できません"
 
-#: cgi-bin/admin.c:3886
 msgid "Unable to change printer-is-shared attribute"
 msgstr "printer-is-shared 属性を変更することができません"
 
-#: cgi-bin/admin.c:1637 cgi-bin/admin.c:1779
 msgid "Unable to change server settings"
 msgstr "サーバーの設定を変更できません"
 
-#: cups/ipp.c:5389
 #, c-format
 msgid "Unable to compile mimeMediaType regular expression: %s."
 msgstr "mimeMediaType の正規表現を解釈できませんでした: %s。"
 
-#: cups/ipp.c:5335
 #, c-format
 msgid "Unable to compile naturalLanguage regular expression: %s."
 msgstr "naturalLanguage の正規表現を解釈できませんでした: %s。"
 
-#: filter/commandtops.c:407
 msgid "Unable to configure printer options."
 msgstr "プリンターオプションを設定できません。"
 
-#: cups/adminutil.c:900 cups/request.c:1066
 msgid "Unable to connect to host."
 msgstr "ホストに接続できません。"
 
-#: backend/ipp.c:781 backend/ipp.c:1254 backend/lpd.c:795 backend/socket.c:338
-#: backend/usb-unix.c:110
 msgid "Unable to contact printer, queuing on next printer in class."
 msgstr "プリンターと交信できません。クラス内の次のプリンターにキューします。"
 
-#: cups/adminutil.c:715
 #, c-format
 msgid "Unable to copy 64-bit CUPS printer driver files (%d)."
 msgstr "64-bit 版の CUPS プリンタードライバーファイルをコピーできません (%d)。"
 
-#: cups/adminutil.c:680
 #, c-format
 msgid "Unable to copy 64-bit Windows printer driver files (%d)."
 msgstr "64-bit 版の Windows プリンタードライバーをコピーできません (%d)。"
 
-#: cups/adminutil.c:511
 #, c-format
 msgid "Unable to copy CUPS printer driver files (%d)."
 msgstr "複数の CUPS プリンタードライバーファイルをコピーできません (%d)。"
 
-#: scheduler/ipp.c:2657
 #, c-format
 msgid "Unable to copy PPD file - %s"
 msgstr "PPD ファイルをコピーできません - %s"
 
-#: scheduler/ipp.c:2712
 msgid "Unable to copy PPD file."
 msgstr "PPD ファイルをコピーできません。"
 
-#: cups/adminutil.c:476
 #, c-format
 msgid "Unable to copy Windows 2000 printer driver files (%d)."
 msgstr ""
 "複数の Windows 2000 プリンタードライバーファイルをコピーできません (%d)。"
 
-#: cups/adminutil.c:599
 #, c-format
 msgid "Unable to copy Windows 9x printer driver files (%d)."
 msgstr ""
 "複数の Windows 9x プリンタードライバーファイルをコピーできません (%d)。"
 
-#: scheduler/ipp.c:2634
 #, c-format
 msgid "Unable to copy interface script - %s"
 msgstr "インターフェイススクリプトをコピーできません - %s"
 
-#: cups/util.c:496 cups/util.c:1479
 msgid "Unable to create printer-uri"
 msgstr "printer-uri を作成できません"
 
-#: cups/tls-darwin.c:1116 cups/tls-gnutls.c:1157
 msgid "Unable to create server credentials."
 msgstr "サーバー証明書を作成できません。"
 
-#: cgi-bin/admin.c:1830 cgi-bin/admin.c:1842 scheduler/cupsfilter.c:1290
 msgid "Unable to create temporary file"
 msgstr "テンポラリーファイルを作成できません"
 
-#: cgi-bin/admin.c:2133
 msgid "Unable to delete class"
 msgstr "クラスを削除できません"
 
-#: cgi-bin/admin.c:2218
 msgid "Unable to delete printer"
 msgstr "プリンターを削除できません"
 
-#: cgi-bin/classes.c:252 cgi-bin/printers.c:261
 msgid "Unable to do maintenance command"
 msgstr "メンテナンスコマンドを実行できません"
 
-#: cgi-bin/admin.c:1954
 msgid "Unable to edit cupsd.conf files larger than 1MB"
 msgstr "1MB 以上の cupsd.conf ファイルは編集できません"
 
-#: cups/tls-darwin.c:1284
 msgid ""
 "Unable to establish a secure connection to host (certificate chain invalid)."
 msgstr "ホストへの安全な接続が確立できません (認証パスが無効です)。"
 
-#: cups/tls-darwin.c:1274
 msgid ""
 "Unable to establish a secure connection to host (certificate not yet valid)."
 msgstr "ホストへの安全な接続が確立できません (認証がまだ有効ではありません)。"
 
-#: cups/tls-darwin.c:1269
 msgid "Unable to establish a secure connection to host (expired certificate)."
 msgstr "ホストへの安全な接続が確立できません (認証が期限切れです)。"
 
-#: cups/tls-darwin.c:1279
 msgid "Unable to establish a secure connection to host (host name mismatch)."
 msgstr "ホストへの安全な接続が確立できません (ホスト名が一致しません)。"
 
-#: cups/tls-darwin.c:1289
 msgid ""
 "Unable to establish a secure connection to host (peer dropped connection "
 "before responding)."
 msgstr ""
 "ホストへの安全な接続が確立できません (応答がある前に接続が切断されました)。"
 
-#: cups/tls-darwin.c:1264
 msgid ""
 "Unable to establish a secure connection to host (self-signed certificate)."
 msgstr "ホストへの安全な接続が確立できません (自己署名証明書です)。"
 
-#: cups/tls-darwin.c:1259
 msgid ""
 "Unable to establish a secure connection to host (untrusted certificate)."
 msgstr "ホストへの安全な接続が確立できません (信用できない証明書です)。"
 
-#: cups/tls-darwin.c:1316 cups/tls-sspi.c:1247 cups/tls-sspi.c:1264
 msgid "Unable to establish a secure connection to host."
 msgstr "ホストへの安全な接続を確立できません。"
 
-#: cgi-bin/ipp-var.c:350
 msgid "Unable to find destination for job"
 msgstr "ジョブの宛先が見つかりません"
 
-#: cups/http-support.c:1949
 msgid "Unable to find printer."
 msgstr "プリンターが見つかりません。"
 
-#: cups/tls-darwin.c:1130
 msgid "Unable to find server credentials."
 msgstr "サーバー証明書を見つけられません。"
 
-#: backend/ipp.c:3493
 msgid "Unable to get backend exit status."
 msgstr "バックエンドの終了ステータスを取得できません。"
 
-#: cgi-bin/classes.c:442
 msgid "Unable to get class list"
 msgstr "クラスリストを取得できません"
 
-#: cgi-bin/classes.c:541
 msgid "Unable to get class status"
 msgstr "クラスの状態を取得できません。"
 
-#: cgi-bin/admin.c:1300
 msgid "Unable to get list of printer drivers"
 msgstr "プリンタードライバーのリストを取得できません"
 
-#: cgi-bin/admin.c:2820
 msgid "Unable to get printer attributes"
 msgstr "プリンター属性を取得できません"
 
-#: cgi-bin/printers.c:459
 msgid "Unable to get printer list"
 msgstr "プリンターリストを取得できません"
 
-#: cgi-bin/printers.c:561
 msgid "Unable to get printer status"
 msgstr "プリンターの状態を取得できません"
 
-#: backend/ipp.c:1005
 msgid "Unable to get printer status."
 msgstr "プリンターの状態を取得できません。"
 
-#: cups/adminutil.c:554 cups/adminutil.c:758
 #, c-format
 msgid "Unable to install Windows 2000 printer driver files (%d)."
 msgstr ""
 "複数の Windows 2000 プリンタードライバーファイルをインストールできません "
 "(%d)。"
 
-#: cups/adminutil.c:628
 #, c-format
 msgid "Unable to install Windows 9x printer driver files (%d)."
 msgstr ""
 "複数の Windows 9x プリンタードライバーファイルをインストールできません (%d)。"
 
-#: cgi-bin/help.c:92
 msgid "Unable to load help index."
 msgstr "ヘルプの索引を読み込めません。"
 
-#: backend/ipp.c:668 backend/lpd.c:426 backend/socket.c:277
 #, c-format
 msgid "Unable to locate printer \"%s\"."
 msgstr "プリンター \"%s\" が見つかりません。"
 
-#: backend/dnssd.c:787 backend/ipp.c:336 backend/lpd.c:196
-#: backend/socket.c:163
 msgid "Unable to locate printer."
 msgstr "プリンターが見つかりません。"
 
-#: cgi-bin/admin.c:791
 msgid "Unable to modify class"
 msgstr "クラスを変更できません"
 
-#: cgi-bin/admin.c:1036 cgi-bin/admin.c:1398
 msgid "Unable to modify printer"
 msgstr "プリンターを変更できません"
 
-#: cgi-bin/ipp-var.c:417 cgi-bin/ipp-var.c:506
 msgid "Unable to move job"
 msgstr "ジョブを移動できません"
 
-#: cgi-bin/ipp-var.c:419 cgi-bin/ipp-var.c:508
 msgid "Unable to move jobs"
 msgstr "複数のジョブを移動できません"
 
-#: cgi-bin/admin.c:3166 cups/ppd.c:297
 msgid "Unable to open PPD file"
 msgstr "PPD ファイルを読み込むことができません"
 
-#: cgi-bin/admin.c:2588
 msgid "Unable to open cupsd.conf file:"
 msgstr "cupsd.conf ファイルを開けません:"
 
-#: backend/usb-unix.c:134
 msgid "Unable to open device file"
 msgstr "デバイスファイルを開けません"
 
-#: scheduler/ipp.c:5992
 #, c-format
 msgid "Unable to open document #%d in job #%d."
 msgstr "ドキュメント %d (ジョブ %d) を開けません。"
 
-#: cgi-bin/help.c:364
 msgid "Unable to open help file."
 msgstr "ヘルプファイルを読み込むことができません。"
 
-#: backend/ipp.c:378 backend/ipp.c:1543 backend/ipp.c:1751 backend/lpd.c:496
-#: backend/socket.c:150 backend/usb.c:237 filter/gziptoany.c:67
-#: filter/pstops.c:267
 msgid "Unable to open print file"
 msgstr "印刷ファイルを開けません"
 
-#: filter/rastertoepson.c:983 filter/rastertohp.c:713
-#: filter/rastertolabel.c:1133
 msgid "Unable to open raster file"
 msgstr "ラスターファイルを開けません"
 
-#: cgi-bin/ipp-var.c:780
 msgid "Unable to print test page"
 msgstr "テストページを印刷できません"
 
-#: backend/runloop.c:85 backend/runloop.c:314 backend/usb-darwin.c:622
-#: backend/usb-darwin.c:666 backend/usb-libusb.c:416 backend/usb-libusb.c:451
 msgid "Unable to read print data."
 msgstr "プリントデータを読み込めません。"
 
-#: cups/dest.c:3445
+msgid "Unable to rename job document file."
+msgstr ""
+
 msgid "Unable to resolve printer-uri."
 msgstr "printer-uri を解決できません。"
 
-#: cups/adminutil.c:2077
 #, c-format
 msgid "Unable to run \"%s\": %s"
 msgstr "\"%s\" を実行できません: %s"
 
-#: filter/pstops.c:530
 msgid "Unable to see in file"
 msgstr "ファイルを読み込むことができません"
 
-#: cgi-bin/ipp-var.c:583 cgi-bin/ipp-var.c:603
 msgid "Unable to send command to printer driver"
 msgstr "プリンタードライバーにコマンドを送信できません"
 
-#: backend/usb-darwin.c:744 backend/usb-libusb.c:527
 msgid "Unable to send data to printer."
 msgstr "プリンターにデータを送信することができません。"
 
-#: cups/adminutil.c:810
 #, c-format
 msgid "Unable to set Windows printer driver (%d)."
 msgstr "Windows プリンタードライバーを設定できません (%d)。"
 
-#: cgi-bin/admin.c:3787
 msgid "Unable to set options"
 msgstr "オプションを設定できません"
 
-#: cgi-bin/admin.c:3057
 msgid "Unable to set server default"
 msgstr "サーバーをデフォルトに設定できません"
 
-#: backend/ipp.c:3352 backend/ipp.c:3429 backend/ipp.c:3437
 msgid "Unable to start backend process."
 msgstr "バックエンドのプロセスを起動できません。"
 
-#: cgi-bin/admin.c:1892
 msgid "Unable to upload cupsd.conf file"
 msgstr "cupsd.conf ファイルをアップロードできません"
 
-#: backend/usb-darwin.c:2016 backend/usb-darwin.c:2040
 msgid "Unable to use legacy USB class driver."
 msgstr "古いタイプの USB クラスドライバーは使用できません。"
 
-#: backend/runloop.c:114 backend/runloop.c:369
 msgid "Unable to write print data"
 msgstr "プリントデータを書き込めません"
 
-#: filter/gziptoany.c:86
 #, c-format
 msgid "Unable to write uncompressed print data: %s"
 msgstr "非圧縮のプリントデータを書き込めません: %s"
 
-#: cups/http-support.c:1366
 msgid "Unauthorized"
 msgstr "未許可"
 
-#: cgi-bin/admin.c:3483
 msgid "Units"
 msgstr "ユニット"
 
-#: cups/http-support.c:1406 cups/http-support.c:1490 cups/ppd.c:324
 msgid "Unknown"
 msgstr "未知"
 
-#: filter/pstops.c:2185
 #, c-format
 msgid "Unknown choice \"%s\" for option \"%s\"."
 msgstr "\"%s\" (オプション \"%s\" 用) は未知の設定です。"
 
-#: backend/ipp.c:520
 #, c-format
 msgid "Unknown encryption option value: \"%s\"."
 msgstr "\"%s\" は未知の暗号オプション値です。"
 
-#: backend/lpd.c:342
 #, c-format
 msgid "Unknown file order: \"%s\"."
 msgstr "\"%s\" は未知のファイルオーダーです。"
 
-#: backend/lpd.c:313
 #, c-format
 msgid "Unknown format character: \"%c\"."
 msgstr "\"%c\" は未知の書式文字です。"
 
-#: cups/dest-options.c:964
 msgid "Unknown media size name."
 msgstr "未知のメディアサイズ名称です。"
 
-#: backend/ipp.c:584
 #, c-format
 msgid "Unknown option \"%s\" with value \"%s\"."
 msgstr "\"%s\" (値 \"%s\") は未知のオプションです。"
 
-#: filter/pstops.c:2168
 #, c-format
 msgid "Unknown option \"%s\"."
 msgstr "\"%s\" は未知のオプションです。"
 
-#: backend/lpd.c:328
 #, c-format
 msgid "Unknown print mode: \"%s\"."
 msgstr "\"%s\" は未知のプリントモードです。"
 
-#: scheduler/ipp.c:10401
 #, c-format
 msgid "Unknown printer-error-policy \"%s\"."
 msgstr "\"%s\" は未知の printer-error-policy です。"
 
-#: scheduler/ipp.c:10384
 #, c-format
 msgid "Unknown printer-op-policy \"%s\"."
 msgstr "\"%s\" は未知の printer-op-policy です。"
 
-#: cups/http.c:2309
 msgid "Unknown request method."
 msgstr "未知のリクエスト方法です。"
 
-#: cups/http.c:2329
 msgid "Unknown request version."
 msgstr "未知のリクエストバージョンです。"
 
-#: cups/http-support.c:1483
 msgid "Unknown scheme in URI"
 msgstr "URI に未知のスキーマがあります"
 
-#: cups/http-addrlist.c:737
 msgid "Unknown service name."
 msgstr "未知のサービス名です。"
 
-#: backend/ipp.c:549
 #, c-format
 msgid "Unknown version option value: \"%s\"."
 msgstr "\"%s\" は未知のバージョンオプション値です。"
 
-#: scheduler/ipp.c:10858
 #, c-format
 msgid "Unsupported 'compression' value \"%s\"."
 msgstr "\"%s\" はサポートされていない 'compression' の値です。"
 
-#: scheduler/ipp.c:10888
 #, c-format
 msgid "Unsupported 'document-format' value \"%s\"."
 msgstr "\"%s\" はサポートされていない 'document-format' の値です。"
 
-#: scheduler/ipp.c:10963
 msgid "Unsupported 'job-name' value."
 msgstr "サポートされていない 'job-name' の値です。"
 
-#: scheduler/ipp.c:329
 #, c-format
 msgid "Unsupported character set \"%s\"."
 msgstr "\"%s\" はサポートされていない文字セットです。"
 
-#: scheduler/ipp.c:8072 scheduler/ipp.c:9307
 #, c-format
 msgid "Unsupported compression \"%s\"."
 msgstr "\"%s\" はサポートされていない圧縮形式です。"
 
-#: scheduler/ipp.c:8206 scheduler/ipp.c:9457
 #, c-format
 msgid "Unsupported document-format \"%s\"."
 msgstr "\"%s\" はサポートされていない文書形式です。"
 
-#: scheduler/ipp.c:9440
 #, c-format
 msgid "Unsupported document-format \"%s/%s\"."
 msgstr "\"%s/%s\" はサポートされていない文書形式です。"
 
-#: scheduler/ipp.c:1339
 #, c-format
 msgid "Unsupported format \"%s\"."
 msgstr "\"%s\" はサポートされていない形式です。"
 
-#: scheduler/ipp.c:1437
 msgid "Unsupported margins."
 msgstr "サポートされていないマージンです。"
 
-#: cups/pwg-media.c:549
 msgid "Unsupported media value."
 msgstr "サポートされていないメディアの値です。"
 
-#: filter/pstops.c:2450
 #, c-format
 msgid "Unsupported number-up value %d, using number-up=1."
 msgstr "%d はサポートされていない number-up 値です。number-up=1 を使用します。"
 
-#: filter/pstops.c:2484
 #, c-format
 msgid "Unsupported number-up-layout value %s, using number-up-layout=lrtb."
 msgstr ""
 "%s はサポートされていない number-up-layout 値です。number-up-layout=lrtb を使"
 "用します。"
 
-#: filter/pstops.c:2535
 #, c-format
 msgid "Unsupported page-border value %s, using page-border=none."
 msgstr ""
 "%s はサポートされていない page-border 値です。page-border=none を使用します。"
 
-#: filter/rastertopwg.c:139 filter/rastertopwg.c:147 filter/rastertopwg.c:156
 msgid "Unsupported raster data."
 msgstr "サポートされていないラスターデータです。"
 
-#: cups/snmp.c:1064
 msgid "Unsupported value type"
 msgstr "サポートされていない型の値です"
 
-#: cups/http-support.c:1381
 msgid "Upgrade Required"
 msgstr "アップグレードが必要です"
 
-#: systemv/lpadmin.c:654
 msgid ""
 "Usage:\n"
 "\n"
@@ -6475,42 +4994,31 @@ msgstr ""
 "                       [-u allow:ユーザー,ユーザー] [-u deny:ユーザー,ユー"
 "ザー]"
 
-#: backend/dnssd.c:227 backend/ipp.c:325 backend/lpd.c:183
-#: backend/socket.c:127 backend/usb.c:183 filter/commandtops.c:63
-#: filter/gziptoany.c:46 filter/pstops.c:231 monitor/bcp.c:56
-#: monitor/tbcp.c:55
 #, c-format
 msgid "Usage: %s job-id user title copies options [file]"
 msgstr "使い方: %s ジョブID ユーザー タイトル コピー数 オプション [ファイル]"
 
-#: systemv/cupsaddsmb.c:281
 msgid "Usage: cupsaddsmb [options] printer1 ... printerN"
 msgstr "Usage: cupsaddsmb [オプション] プリンター1 ... プリンターN"
 
-#: systemv/cupsctl.c:200
 msgid "Usage: cupsctl [options] [param=value ... paramN=valueN]"
 msgstr "Usage: cupsctl [オプション] [パラメータ=値 ... パラメータN=値N]"
 
-#: scheduler/main.c:2145
 msgid "Usage: cupsd [options]"
 msgstr "使い方: cupsd [オプション]"
 
-#: scheduler/cupsfilter.c:1481
 msgid "Usage: cupsfilter [ options ] [ -- ] filename"
 msgstr "使い方: cupsfilter [ オプション ] [ -- ] ファイル名"
 
-#: systemv/cupstestdsc.c:425
 msgid "Usage: cupstestdsc [options] filename.ps [... filename.ps]"
 msgstr "使い方: cupstestdsc [オプション] ファイル名.ps [... ファイル名.ps]"
 
-#: systemv/cupstestppd.c:3813
 msgid ""
 "Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]"
 msgstr ""
 "使い方: cupstestppd [オプション] ファイル名1.ppd[.gz] [... ファイル名N.ppd[."
 "gz]]"
 
-#: test/ippdiscover.c:814
 msgid ""
 "Usage: ippdiscover [options] -a\n"
 "       ippdiscover [options] \"service name\"\n"
@@ -6522,7 +5030,6 @@ msgstr ""
 "\n"
 "オプション:"
 
-#: test/ippfind.c:2738
 msgid ""
 "Usage: ippfind [options] regtype[,subtype][.domain.] ... [expression]\n"
 "       ippfind [options] name[.regtype[.domain.]] ... [expression]\n"
@@ -6534,15 +5041,12 @@ msgstr ""
 "        ippfind --help\n"
 "        ippfind --version"
 
-#: test/ipptool.c:4803
 msgid "Usage: ipptool [options] URI filename [ ... filenameN ]"
 msgstr "使い方: ipptool [オプション] URI ファイル名 [ ... ファイル名N ]"
 
-#: systemv/lpmove.c:125
 msgid "Usage: lpmove job/src dest"
 msgstr "使い方: lpmove ジョブ/ソース 宛先"
 
-#: systemv/lpoptions.c:539
 msgid ""
 "Usage: lpoptions [-h server] [-E] -d printer\n"
 "       lpoptions [-h server] [-E] [-p printer] -l\n"
@@ -6554,76 +5058,59 @@ msgstr ""
 "        lpoptions [-h サーバー] [-E] -p プリンター -o オプション[=値] ...\n"
 "        lpoptions [-h サーバー] [-E] -x プリンター"
 
-#: berkeley/lpq.c:637
 msgid ""
 "Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]"
 msgstr ""
 "使い方: lpq [-P 宛先] [-U ユーザー名] [-h ホスト名[:ポート]] [-l] [+間隔]"
 
-#: ppdc/ppdc.cxx:430
 msgid "Usage: ppdc [options] filename.drv [ ... filenameN.drv ]"
 msgstr "使い方: ppdc [オプション] ファイル名.drv [ ... ファイル名N.drv ]"
 
-#: ppdc/ppdhtml.cxx:172
 msgid "Usage: ppdhtml [options] filename.drv >filename.html"
 msgstr "使い方: ppdhtml [オプション] ファイル名.drv >ファイル名.html"
 
-#: ppdc/ppdi.cxx:128
 msgid "Usage: ppdi [options] filename.ppd [ ... filenameN.ppd ]"
 msgstr "使い方: ppdi [オプション] ファイル名.ppd [ ... ファイル名N.ppd ]"
 
-#: ppdc/ppdmerge.cxx:361
 msgid "Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]"
 msgstr "使い方: ppdmerge [オプション] ファイル名.ppd [ ... ファイル名N.ppd ]"
 
-#: ppdc/ppdpo.cxx:252
 msgid ""
 "Usage: ppdpo [options] -o filename.po filename.drv [ ... filenameN.drv ]"
 msgstr ""
 "使い方: ppdpo [オプション] -o ファイル名.po ファイル名.drv [ ... ファイル名N."
 "drv ]"
 
-#: backend/snmp.c:192
 msgid "Usage: snmp [host-or-ip-address]"
 msgstr "使い方: snmp [ホスト名またはIPアドレス]"
 
-#: cups/snmp.c:1016
 msgid "Value uses indefinite length"
 msgstr "値は不定長です"
 
-#: cups/snmp.c:1001
 msgid "VarBind uses indefinite length"
 msgstr "VarBind は不定長です"
 
-#: cups/snmp.c:951
 msgid "Version uses indefinite length"
 msgstr "Version は不定長です"
 
-#: backend/ipp.c:1913
 msgid "Waiting for job to complete."
 msgstr "ジョブが完了するのを待っています。"
 
-#: backend/usb-darwin.c:469 backend/usb-libusb.c:223
 msgid "Waiting for printer to become available."
 msgstr "プリンターが使用可能になるのを待っています。"
 
-#: backend/socket.c:440
 msgid "Waiting for printer to finish."
 msgstr "プリンターが終了するのを待っています。"
 
-#: cups/adminutil.c:782
 msgid "Warning, no Windows 2000 printer drivers are installed."
 msgstr "警告、Windows 2000 プリンタードライバーがインストールされていません。"
 
-#: cups/http-support.c:1402
 msgid "Web Interface is Disabled"
 msgstr "Web インターフェイスが無効になっています"
 
-#: cups/ppd.c:1902
 msgid "Yes"
 msgstr "はい"
 
-#: scheduler/client.c:2219
 #, c-format
 msgid ""
 "You must access this page using the URL <A HREF=\"https://%s:%d%s\">https://"
@@ -6632,384 +5119,298 @@ msgstr ""
 "このページには URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A> を使ってア"
 "クセスする必要があります。"
 
-#: ppdc/sample.c:434
 msgid "ZPL Label Printer"
 msgstr "ZPL ラベルプリンター"
 
-#: ppdc/sample.c:357
 msgid "Zebra"
 msgstr "ゼブラ"
 
-#: cups/notify.c:102
 msgid "aborted"
 msgstr "停止"
 
-#: cups/notify.c:99
 msgid "canceled"
 msgstr "キャンセル"
 
-#: cups/notify.c:105
 msgid "completed"
 msgstr "完了"
 
-#: scheduler/ipp.c:5864
 msgid "cups-deviced failed to execute."
 msgstr "cups-deviced の実行に失敗しました。"
 
-#: scheduler/ipp.c:6743 scheduler/ipp.c:6992
 msgid "cups-driverd failed to execute."
 msgstr "cups-driverd の実行に失敗しました。"
 
-#: systemv/cupsaddsmb.c:233
 #, c-format
 msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s"
 msgstr "cupsaddsmb: プリンター \"%s\" の PPD ファイルがありません - %s"
 
-#: systemv/cupsctl.c:141
 msgid "cupsctl: Cannot set Listen or Port directly."
 msgstr "cupsctl: Listen あるいは Port を直接設定できません。"
 
-#: systemv/cupsctl.c:152
 #, c-format
 msgid "cupsctl: Unable to connect to server: %s"
 msgstr "cupsctl: サーバーに接続できません: %s"
 
-#: systemv/cupsctl.c:195
 #, c-format
 msgid "cupsctl: Unknown option \"%s\""
 msgstr "cupsctl: \"%s\" は未知のオプションです。"
 
-#: systemv/cupsctl.c:197
 #, c-format
 msgid "cupsctl: Unknown option \"-%c\""
 msgstr "cupsctl: \"-%c\"は未知のオプションです。"
 
-#: scheduler/main.c:171
 msgid "cupsd: Expected config filename after \"-c\" option."
 msgstr "cupsd: \"-c\" オプションのあとには設定ファイル名が必要です。"
 
-#: scheduler/main.c:258
 msgid "cupsd: Expected cups-files.conf filename after \"-s\" option."
 msgstr ""
 "cupsd: cups-files.conf ファイル名は \"-s\" オプションの後ろにあるべきです。"
 
-#: scheduler/main.c:236
 msgid "cupsd: On-demand support not compiled in, running in normal mode."
-msgstr "cupsd: オンデマンドサポート有効でコンパイルされていません、標準モードで動作します。"
+msgstr ""
+"cupsd: オンデマンドサポート有効でコンパイルされていません、標準モードで動作し"
+"ます。"
 
-#: scheduler/main.c:269
 msgid "cupsd: Relative cups-files.conf filename not allowed."
 msgstr "cupsd: 相対パスでの cups-files.conf の指定はできません。"
 
-#: scheduler/main.c:202 scheduler/main.c:209
 msgid "cupsd: Unable to get current directory."
 msgstr "cupsd: カレントディレクトリーを取得できません。"
 
-#: scheduler/main.c:316 scheduler/main.c:325
 msgid "cupsd: Unable to get path to cups-files.conf file."
 msgstr "cupsd: cups-files.conf ファイルへのパスが取得できません。"
 
-#: scheduler/main.c:298
 #, c-format
 msgid "cupsd: Unknown argument \"%s\" - aborting."
 msgstr "cupsd: \"%s\" は未知の引数です - 停止します。"
 
-#: scheduler/main.c:291
 #, c-format
 msgid "cupsd: Unknown option \"%c\" - aborting."
 msgstr "cupsd: \"%c\" は未知のオプションです - 停止します。"
 
-#: scheduler/cupsfilter.c:1263
 #, c-format
 msgid "cupsfilter: Invalid document number %d."
 msgstr "cupsfilter: 不正な文書番号 %d です。"
 
-#: scheduler/cupsfilter.c:1257
 #, c-format
 msgid "cupsfilter: Invalid job ID %d."
 msgstr "cupsfilter: 不正なジョブID %d です。"
 
-#: scheduler/cupsfilter.c:348
 msgid "cupsfilter: Only one filename can be specified."
 msgstr "cupsfilter: 1 つのファイル名のみを指定できます。"
 
-#: scheduler/cupsfilter.c:1305
 #, c-format
 msgid "cupsfilter: Unable to get job file - %s"
 msgstr "cupsfilter: ジョブ・ファイルを取得できません - %s"
 
-#: systemv/cupstestppd.c:261
 msgid "cupstestppd: The -q option is incompatible with the -v option."
 msgstr "cupstestppd: -q オプションは -v オプションと両立できません。"
 
-#: systemv/cupstestppd.c:277
 msgid "cupstestppd: The -v option is incompatible with the -q option."
 msgstr "cupstestppd: -v オプションは -q オプションと両立できません。"
 
-#: systemv/lpstat.c:1232 systemv/lpstat.c:1235 systemv/lpstat.c:1238
 #, c-format
 msgid "device for %s/%s: %s"
 msgstr "%s/%s のデバイス: %s"
 
-#: systemv/lpstat.c:1218 systemv/lpstat.c:1221 systemv/lpstat.c:1224
 #, c-format
 msgid "device for %s: %s"
 msgstr "%s のデバイス: %s"
 
-#: cups/snmp.c:988
 msgid "error-index uses indefinite length"
 msgstr "error-index は不定長です"
 
-#: cups/snmp.c:980
 msgid "error-status uses indefinite length"
 msgstr "error-status は不定長です"
 
-#: cups/notify.c:90
 msgid "held"
 msgstr "保留"
 
-#: berkeley/lpc.c:201
 msgid "help\t\tGet help on commands."
 msgstr "help\t\tコマンドのヘルプを取得。"
 
-#: cups/notify.c:131
 msgid "idle"
 msgstr "待機中"
 
-#: test/ippfind.c:2465
 #, c-format
 msgid "ippfind: Bad regular expression: %s"
 msgstr "ippfind: 不正な正規表現です: %s"
 
-#: test/ippfind.c:328
 msgid "ippfind: Cannot use --and after --or."
 msgstr "ippfind: --and は --or のあとに指定することはできません。"
 
-#: test/ippfind.c:601
 #, c-format
 msgid "ippfind: Expected key name after %s."
 msgstr "ippfind: %s のあとにはキー名が必要です。"
 
-#: test/ippfind.c:551 test/ippfind.c:734
 #, c-format
 msgid "ippfind: Expected port range after %s."
 msgstr "ippfind: %s のあとにはポート範囲が必要です。"
 
-#: test/ippfind.c:361
 #, c-format
 msgid "ippfind: Expected program after %s."
 msgstr "ippfind: %s のあとにはプログラム名が必要です。"
 
-#: test/ippfind.c:378
 #, c-format
 msgid "ippfind: Expected semi-colon after %s."
 msgstr "ippfind: %s のあとにはセミコロンが必要です。"
 
-#: test/ippfind.c:1965
 msgid "ippfind: Missing close brace in substitution."
 msgstr "ippfind: 置換文字列の閉じカッコがありません。"
 
-#: test/ippfind.c:1053
 msgid "ippfind: Missing close parenthesis."
 msgstr "ippfind: 閉じカッコが不足しています。"
 
-#: test/ippfind.c:335
 msgid "ippfind: Missing expression before \"--and\"."
 msgstr "ippfind: \"--and\" の前には式が必要です。"
 
-#: test/ippfind.c:448
 msgid "ippfind: Missing expression before \"--or\"."
 msgstr "ippfind: \"--or\" の前には式が必要です。"
 
-#: test/ippfind.c:871
 #, c-format
 msgid "ippfind: Missing key name after %s."
 msgstr "ippfind: %s のあとにはキー名が必要です。"
 
-#: test/ippfind.c:1024
 msgid "ippfind: Missing open parenthesis."
 msgstr "ippfind: 開きカッコが足りません。"
 
-#: test/ippfind.c:901
 #, c-format
 msgid "ippfind: Missing program after %s."
 msgstr "ippfind: %s のあとにはプログラム名が必要です。"
 
-#: test/ippfind.c:347 test/ippfind.c:401 test/ippfind.c:430 test/ippfind.c:536
-#: test/ippfind.c:618 test/ippfind.c:633 test/ippfind.c:788 test/ippfind.c:803
-#: test/ippfind.c:826 test/ippfind.c:886
 #, c-format
 msgid "ippfind: Missing regular expression after %s."
 msgstr "ippfind: %s のあとには正規表現が必要です。"
 
-#: test/ippfind.c:919
 #, c-format
 msgid "ippfind: Missing semi-colon after %s."
 msgstr "ippfind: %s のあとにはセミコロンが必要です。"
 
-#: test/ippfind.c:1912 test/ippfind.c:1937
 msgid "ippfind: Out of memory."
 msgstr "ippfind: メモリ不足です。"
 
-#: test/ippfind.c:997
 msgid "ippfind: Too many parenthesis."
 msgstr "ippfind: カッコが多すぎます。"
 
-#: test/ippfind.c:1266 test/ippfind.c:1402 test/ippfind.c:2557
 #, c-format
 msgid "ippfind: Unable to browse or resolve: %s"
 msgstr "ippfind: %s をブラウズできないか名前解決できません。"
 
-#: test/ippfind.c:2035 test/ippfind.c:2062
 #, c-format
 msgid "ippfind: Unable to execute \"%s\": %s"
 msgstr "ippfind: \"%s\" を実行できません: %s"
 
-#: test/ippfind.c:1143 test/ippfind.c:1151 test/ippfind.c:1162
 #, c-format
 msgid "ippfind: Unable to use Bonjour: %s"
 msgstr "ippfind: Bonjour を利用できません: %s"
 
-#: test/ippfind.c:1994
 #, c-format
 msgid "ippfind: Unknown variable \"{%s}\"."
 msgstr "ippfind: \"{%s}\" は不明な変数です。"
 
-#: test/ipptool.c:326 test/ipptool.c:389 test/ipptool.c:544 test/ipptool.c:567
 msgid "ipptool: \"-i\" and \"-n\" are incompatible with \"-P\" and \"-X\"."
-msgstr "ipptool: \"-i\" および \"-n\" は \"-P\"、\"-X\" と一緒に指定できません。"
+msgstr ""
+"ipptool: \"-i\" および \"-n\" は \"-P\"、\"-X\" と一緒に指定できません。"
 
-#: test/ipptool.c:623
 #, c-format
 msgid "ipptool: Bad URI - %s."
 msgstr "ipptool: 不正な URI です - %s。"
 
-#: test/ipptool.c:537
 msgid "ipptool: Invalid seconds for \"-i\"."
 msgstr "ipptool: \"-i\" に不正な秒数が指定されました。"
 
-#: test/ipptool.c:604
 msgid "ipptool: May only specify a single URI."
 msgstr "ipptool: URI は 1 つだけ指定できます。"
 
-#: test/ipptool.c:559
 msgid "ipptool: Missing count for \"-n\"."
 msgstr "ipptool: \"-n\" に回数の指定がありません。"
 
-#: test/ipptool.c:423
 msgid "ipptool: Missing filename for \"-f\"."
 msgstr "ipptool: \"-f\" にファイル名の指定がありません。"
 
-#: test/ipptool.c:404
 msgid "ipptool: Missing name=value for \"-d\"."
 msgstr "ipptool: \"-d\" に 名前=値 の指定がありません。"
 
-#: test/ipptool.c:527
 msgid "ipptool: Missing seconds for \"-i\"."
 msgstr "ipptool: \"-i\" に秒数の指定がありません。"
 
-#: test/ipptool.c:649
 msgid "ipptool: URI required before test file."
 msgstr "ipptool: テストファイルの前に URI の指定が必要です。"
 
-#: test/ipptool.c:585
 #, c-format
 msgid "ipptool: Unknown option \"-%c\"."
 msgstr "ipptool: \"-%c\"は未知のオプションです。"
 
-#: scheduler/ipp.c:7739
 msgid "job-printer-uri attribute missing."
 msgstr "job-printer-uri 属性がありません。"
 
-#: systemv/lpadmin.c:117 systemv/lpadmin.c:361
 msgid "lpadmin: Class name can only contain printable characters."
 msgstr "lpadmin: クラス名は表示可能文字のみで構成されなければなりません。"
 
-#: systemv/lpadmin.c:600
 msgid "lpadmin: Expected PPD after \"-P\" option."
 msgstr "lpadmin: \"-P\" オプションのあとには PPD が必要です。"
 
-#: systemv/lpadmin.c:443
 msgid "lpadmin: Expected allow/deny:userlist after \"-u\" option."
 msgstr ""
 "lpadmin: \"-u\" オプションのあとには allow/deny:ユーザーリスト が必要です。"
 
-#: systemv/lpadmin.c:350
 msgid "lpadmin: Expected class after \"-r\" option."
 msgstr "lpadmin: \"-r\" オプションのあとにはクラス名が必要です。"
 
-#: systemv/lpadmin.c:106
 msgid "lpadmin: Expected class name after \"-c\" option."
 msgstr "lpadmin: \"-c\" オプションのあとにはクラス名が必要です。"
 
-#: systemv/lpadmin.c:544
 msgid "lpadmin: Expected description after \"-D\" option."
 msgstr "lpadmin: \"-D\" オプションのあとには説明が必要です。"
 
-#: systemv/lpadmin.c:477
 msgid "lpadmin: Expected device URI after \"-v\" option."
 msgstr "lpadmin: \"-v\" オプションのあとにはデバイス URI が必要です。"
 
-#: systemv/lpadmin.c:560
 msgid "lpadmin: Expected file type(s) after \"-I\" option."
 msgstr "lpadmin: \"-I\" オプションのあとにはファイル形式が必要です。"
 
-#: systemv/lpadmin.c:188
 msgid "lpadmin: Expected hostname after \"-h\" option."
 msgstr "lpadmin: \"-h\" オプションのあとにはホスト名が必要です。"
 
-#: systemv/lpadmin.c:207
 msgid "lpadmin: Expected interface after \"-i\" option."
 msgstr "lpadmin: \"-i\" オプションのあとにはインターフェイス名が必要です。"
 
-#: systemv/lpadmin.c:580
 msgid "lpadmin: Expected location after \"-L\" option."
 msgstr "lpadmin: \"-L\" オプションのあとには場所が必要です。"
 
-#: systemv/lpadmin.c:260
 msgid "lpadmin: Expected model after \"-m\" option."
 msgstr "lpadmin: \"-m\" オプションのあとにはモデル名が必要です。"
 
-#: systemv/lpadmin.c:403
 msgid "lpadmin: Expected name after \"-R\" option."
 msgstr "lpadmin: \"-R\" オプションのあとには名前が必要です。"
 
-#: systemv/lpadmin.c:280
 msgid "lpadmin: Expected name=value after \"-o\" option."
 msgstr "lpadmin: \"-o\" オプションのあとには 変数名=値 が必要です。"
 
-#: systemv/lpadmin.c:299
 msgid "lpadmin: Expected printer after \"-p\" option."
 msgstr "lpadmin: \"-p\" オプションのあとにはプリンター名が必要です。"
 
-#: systemv/lpadmin.c:150
 msgid "lpadmin: Expected printer name after \"-d\" option."
 msgstr "lpadmin: \"-d\" オプションのあとにはプリンター名が必要です。"
 
-#: systemv/lpadmin.c:511
 msgid "lpadmin: Expected printer or class after \"-x\" option."
 msgstr ""
 "lpadmin: \"-x\" オプションのあとにはプリンター名またはクラス名が必要です。"
 
-#: systemv/lpadmin.c:961
 msgid "lpadmin: No member names were seen."
 msgstr "lpadmin: メンバー名が見当たりません。"
 
-#: systemv/lpadmin.c:748
 #, c-format
 msgid "lpadmin: Printer %s is already a member of class %s."
 msgstr "lpadmin: プリンター %s はすでにクラス %s のメンバーです。"
 
-#: systemv/lpadmin.c:975
 #, c-format
 msgid "lpadmin: Printer %s is not a member of class %s."
 msgstr "lpadmin: プリンター %s はクラス %s のメンバーではありません。"
 
-#: systemv/lpadmin.c:161 systemv/lpadmin.c:310 systemv/lpadmin.c:522
 msgid "lpadmin: Printer name can only contain printable characters."
 msgstr "lpadmin: プリンター名には表示可能文字だけが使用できます。"
 
-#: systemv/lpadmin.c:91
 msgid ""
 "lpadmin: Unable to add a printer to the class:\n"
 "         You must specify a printer name first."
@@ -7017,18 +5418,13 @@ msgstr ""
 "lpadmin: クラスにプリンターを追加できません:\n"
 "         先にプリンター名を指定する必要があります。"
 
-#: systemv/lpadmin.c:82 systemv/lpadmin.c:135 systemv/lpadmin.c:239
-#: systemv/lpadmin.c:325 systemv/lpadmin.c:379 systemv/lpadmin.c:496
-#: systemv/lpadmin.c:633
 #, c-format
 msgid "lpadmin: Unable to connect to server: %s"
 msgstr "lpadmin: サーバーに接続できません: %s"
 
-#: systemv/lpadmin.c:1314
 msgid "lpadmin: Unable to create temporary file"
 msgstr "lpadmin: テンポラリーファイルを作成できません"
 
-#: systemv/lpadmin.c:388
 msgid ""
 "lpadmin: Unable to delete option:\n"
 "         You must specify a printer name first."
@@ -7036,12 +5432,14 @@ msgstr ""
 "lpadmin: プリンター・オプションを削除できません:\n"
 "         先にプリンター名を指定する必要があります。"
 
-#: systemv/lpadmin.c:1324
+#, c-format
+msgid "lpadmin: Unable to open PPD \"%s\": %s on line %d."
+msgstr ""
+
 #, c-format
 msgid "lpadmin: Unable to open PPD file \"%s\" - %s"
 msgstr "lpadmin: PPD ファイル \"%s\" を開けません - %s"
 
-#: systemv/lpadmin.c:334
 msgid ""
 "lpadmin: Unable to remove a printer from the class:\n"
 "         You must specify a printer name first."
@@ -7049,7 +5447,6 @@ msgstr ""
 "lpadmin: クラスからプリンターを削除できません:\n"
 "         先にプリンター名を指定する必要があります。"
 
-#: systemv/lpadmin.c:642
 msgid ""
 "lpadmin: Unable to set the printer options:\n"
 "         You must specify a printer name first."
@@ -7057,118 +5454,96 @@ msgstr ""
 "lpadmin: プリンター・オプションを設定できません:\n"
 "         先にプリンター名を指定する必要があります。"
 
-#: systemv/lpadmin.c:460
 #, c-format
 msgid "lpadmin: Unknown allow/deny option \"%s\"."
 msgstr "lpadmin:\"%s\" は未知の allow/deny オプションです。"
 
-#: systemv/lpadmin.c:615
 #, c-format
 msgid "lpadmin: Unknown argument \"%s\"."
 msgstr "lpadmin: \"%s\" は未知の引数です。"
 
-#: systemv/lpadmin.c:610
 #, c-format
 msgid "lpadmin: Unknown option \"%c\"."
 msgstr "lpadmin: \"%c\" は未知のオプションです。"
 
-#: systemv/lpadmin.c:566
 msgid "lpadmin: Warning - content type list ignored."
 msgstr "lpadmin: 警告 - コンテンツタイプリストは無視されます。"
 
-#: berkeley/lpc.c:68 berkeley/lpc.c:96 berkeley/lpc.c:132
 msgid "lpc> "
 msgstr "lpc> "
 
-#: systemv/lpinfo.c:137
 msgid "lpinfo: Expected 1284 device ID string after \"--device-id\"."
 msgstr ""
 "lpinfo: \"--device-id\" のあとには、1284 デバイス ID を指定する必要がありま"
 "す。"
 
-#: systemv/lpinfo.c:190
 msgid "lpinfo: Expected language after \"--language\"."
 msgstr "lpinfo: \"--language\" のあとには、言語を指定する必要があります。"
 
-#: systemv/lpinfo.c:207
 msgid "lpinfo: Expected make and model after \"--make-and-model\"."
-msgstr "lpinfo: \"--make-and-model\" のあとには、メーカーとモデルを指定する必要があります。"
+msgstr ""
+"lpinfo: \"--make-and-model\" のあとには、メーカーとモデルを指定する必要があり"
+"ます。"
 
-#: systemv/lpinfo.c:224
 msgid "lpinfo: Expected product string after \"--product\"."
 msgstr "lpinfo: \"--product\" のあとには、製品名を指定する必要があります。"
 
-#: systemv/lpinfo.c:155
 msgid "lpinfo: Expected scheme list after \"--exclude-schemes\"."
 msgstr ""
 "lpinfo: \"--exclude-schemes\" のあとには、スキーマ・リストを指定する必要があ"
 "ります。"
 
-#: systemv/lpinfo.c:173
 msgid "lpinfo: Expected scheme list after \"--include-schemes\"."
 msgstr ""
 "lpinfo: \"--include-schemes\" のあとには、スキーマ・リストを指定する必要があ"
 "ります。"
 
-#: systemv/lpinfo.c:241
 msgid "lpinfo: Expected timeout after \"--timeout\"."
 msgstr ""
 "lpinfo: \"--timeout\" のあとには、タイムアウト値を指定する必要があります。"
 
-#: systemv/lpinfo.c:265
 #, c-format
 msgid "lpinfo: Unknown argument \"%s\"."
 msgstr "lpinfo: 未知の引数 \"%s\"。"
 
-#: systemv/lpinfo.c:259
 #, c-format
 msgid "lpinfo: Unknown option \"%c\"."
 msgstr "lpinfo: 未知のオプション \"%c\"。"
 
-#: systemv/lpinfo.c:252
 #, c-format
 msgid "lpinfo: Unknown option \"%s\"."
 msgstr "lpinfo: 未知のオプション \"%s\"。"
 
-#: systemv/lpmove.c:133
 #, c-format
 msgid "lpmove: Unable to connect to server: %s"
 msgstr "lpmove: サーバーに接続できません: %s"
 
-#: systemv/lpmove.c:119
 #, c-format
 msgid "lpmove: Unknown argument \"%s\"."
 msgstr "lpmove: 未知の引数 \"%s\"。"
 
-#: systemv/lpmove.c:97
 #, c-format
 msgid "lpmove: Unknown option \"%c\"."
 msgstr "lpmove: 未知のオプション \"%c\"。"
 
-#: systemv/lpoptions.c:143 systemv/lpoptions.c:161 systemv/lpoptions.c:237
 msgid "lpoptions: No printers."
 msgstr "lpoptions: プリンターがありません。"
 
-#: systemv/lpoptions.c:212
 #, c-format
 msgid "lpoptions: Unable to add printer or instance: %s"
 msgstr "lpoptions: プリンターまたはインスタンスを追加できません: %s"
 
-#: systemv/lpoptions.c:507
 #, c-format
 msgid "lpoptions: Unable to get PPD file for %s: %s"
 msgstr "lpoptions: %s の PPD ファイルを取得できません: %s"
 
-#: systemv/lpoptions.c:515
 #, c-format
 msgid "lpoptions: Unable to open PPD file for %s."
 msgstr "lpoptions: %s の PPD ファイルを開けません。"
 
-#: systemv/lpoptions.c:92
 msgid "lpoptions: Unknown printer or class."
 msgstr "lpoptions: 未知のプリンターまたはクラスです。"
 
-#: systemv/lpstat.c:1074
 #, c-format
 msgid ""
 "lpstat: error - %s environment variable names non-existent destination \"%s"
@@ -7176,143 +5551,118 @@ msgid ""
 msgstr ""
 "lpstat: エラー - 環境変数 %s が、存在しない宛先 \"%s\" を指しています。"
 
-#: systemv/lpstat.c:1010
 #, c-format
 msgid "members of class %s:"
 msgstr "クラス %s のメンバー:"
 
-#: berkeley/lpq.c:549
 msgid "no entries"
 msgstr "エントリーがありません"
 
-#: systemv/lpstat.c:1078
 msgid "no system default destination"
 msgstr "システムのデフォルトの宛先がありません"
 
-#: scheduler/ipp.c:5548
 msgid "notify-events not specified."
 msgstr "notify-events が指定されていません。"
 
-#: scheduler/ipp.c:2025 scheduler/ipp.c:5453
 #, c-format
 msgid "notify-recipient-uri URI \"%s\" is already used."
 msgstr "notify-recipient-uri URI \"%s\" はすでに使われています。"
 
-#: scheduler/ipp.c:2015 scheduler/ipp.c:5443
 #, c-format
 msgid "notify-recipient-uri URI \"%s\" uses unknown scheme."
 msgstr "notify-recipient-uri URI \"%s\" には未知のスキームが使われています。"
 
-#: cups/notify.c:87
 msgid "pending"
 msgstr "プリンター待ち"
 
-#: ppdc/ppdc.cxx:108 ppdc/ppdpo.cxx:93
 #, c-format
 msgid "ppdc: Adding include directory \"%s\"."
 msgstr "ppdc: ディレクトリー \"%s\" を追加しています。"
 
-#: ppdc/ppdpo.cxx:134
 #, c-format
 msgid "ppdc: Adding/updating UI text from %s."
 msgstr "ppdc: %s から UI テキストを追加または更新しています。"
 
-#: ppdc/ppdc-source.cxx:367
 #, c-format
 msgid "ppdc: Bad boolean value (%s) on line %d of %s."
 msgstr "ppdc:  不正な boolean 値 (%s) があります。%d 行目、ファイル名 %s。"
 
-#: ppdc/ppdc-import.cxx:264
 #, c-format
 msgid "ppdc: Bad font attribute: %s"
 msgstr "不正なフォント属性: %s"
 
-#: ppdc/ppdc-source.cxx:1753
 #, c-format
 msgid "ppdc: Bad resolution name \"%s\" on line %d of %s."
 msgstr "ppdc: 不正な resolution 名 \"%s\" があります。%d 行目、ファイル名 %s。"
 
-#: ppdc/ppdc-source.cxx:1070
 #, c-format
 msgid "ppdc: Bad status keyword %s on line %d of %s."
 msgstr "ppdc: 不正な status キーワード %s があります。%d 行目、ファイル名 %s。"
 
-#: ppdc/ppdc-source.cxx:1990
 #, c-format
 msgid "ppdc: Bad variable substitution ($%c) on line %d of %s."
 msgstr "ppdc: 不正な数値置換 ($%c) があります。%d 行目、ファイル名 %s。"
 
-#: ppdc/ppdc-source.cxx:2675
 #, c-format
 msgid "ppdc: Choice found on line %d of %s with no Option."
 msgstr ""
 "ppdc: %d 行目、ファイル名 %s で、Option がないのに Choice が見つかりました。"
 
-#: ppdc/ppdc-source.cxx:1655
 #, c-format
 msgid "ppdc: Duplicate #po for locale %s on line %d of %s."
-msgstr "ppdc: locale %s に対して #po が二重に定義されています。%d 行目、ファイル名 %s。"
+msgstr ""
+"ppdc: locale %s に対して #po が二重に定義されています。%d 行目、ファイル名 "
+"%s。"
 
-#: ppdc/ppdc-source.cxx:889
 #, c-format
 msgid "ppdc: Expected a filter definition on line %d of %s."
 msgstr "ppdc: %d 行目、ファイル名 %s においてフィルター定義が必要です。"
 
-#: ppdc/ppdc-source.cxx:912
 #, c-format
 msgid "ppdc: Expected a program name on line %d of %s."
 msgstr "ppdc: %d 行目、ファイル名 %s においてプログラム名が必要です。"
 
-#: ppdc/ppdc-source.cxx:351
 #, c-format
 msgid "ppdc: Expected boolean value on line %d of %s."
 msgstr "ppdc: %d 行目、ファイル名 %s において boolean 値が必要です。"
 
-#: ppdc/ppdc-source.cxx:1050
 #, c-format
 msgid "ppdc: Expected charset after Font on line %d of %s."
 msgstr ""
 "ppdc: %d 行目、ファイル名 %s において Font のあとに charset が必要です。"
 
-#: ppdc/ppdc-source.cxx:404
 #, c-format
 msgid "ppdc: Expected choice code on line %d of %s."
 msgstr "ppdc: %d 行目、ファイル名 %s において choice code が必要です。"
 
-#: ppdc/ppdc-source.cxx:392
 #, c-format
 msgid "ppdc: Expected choice name/text on line %d of %s."
 msgstr "ppdc: %d 行目、ファイル名 %s において choice name/text が必要です。"
 
-#: ppdc/ppdc-source.cxx:460
 #, c-format
 msgid "ppdc: Expected color order for ColorModel on line %d of %s."
 msgstr ""
 "ppdc: %d 行目、ファイル名 %s において ColorModel に対する color order が必要"
 "です。"
 
-#: ppdc/ppdc-source.cxx:449
 #, c-format
 msgid "ppdc: Expected colorspace for ColorModel on line %d of %s."
 msgstr ""
 "ppdc: %d 行目、ファイル名 %s において ColorModel に対する colorspace が必要で"
 "す。"
 
-#: ppdc/ppdc-source.cxx:471
 #, c-format
 msgid "ppdc: Expected compression for ColorModel on line %d of %s."
 msgstr ""
 "ppdc: %d 行目、ファイル名 %s において ColorModel に対する compression が必要"
 "です。"
 
-#: ppdc/ppdc-source.cxx:652
 #, c-format
 msgid "ppdc: Expected constraints string for UIConstraints on line %d of %s."
 msgstr ""
 "ppdc: %d 行目、ファイル名 %s において UIConstraints に対する constraint が必"
 "要です。"
 
-#: ppdc/ppdc-source.cxx:2861
 #, c-format
 msgid ""
 "ppdc: Expected driver type keyword following DriverType on line %d of %s."
@@ -7320,142 +5670,117 @@ msgstr ""
 "ppdc: %d 行目、ファイル名 %s において DriverType のあとに driver type "
 "keyword が必要です。"
 
-#: ppdc/ppdc-source.cxx:783
 #, c-format
 msgid "ppdc: Expected duplex type after Duplex on line %d of %s."
 msgstr ""
 "ppdc: %d 行目、ファイル名 %s において Duplex のあとに type が必要です。"
 
-#: ppdc/ppdc-source.cxx:1034
 #, c-format
 msgid "ppdc: Expected encoding after Font on line %d of %s."
 msgstr ""
 "ppdc: %d 行目、ファイル名 %s において Font のあとに encoding が必要です。"
 
-#: ppdc/ppdc-source.cxx:1646
 #, c-format
 msgid "ppdc: Expected filename after #po %s on line %d of %s."
 msgstr "ppdc: #po %s のあとにファイル名が必要です (%d 行目, ファイル %s)。"
 
-#: ppdc/ppdc-source.cxx:1162
 #, c-format
 msgid "ppdc: Expected group name/text on line %d of %s."
 msgstr "ppdc: %d 行目、ファイル名 %s において group name/text が必要です。"
 
-#: ppdc/ppdc-source.cxx:2575
 #, c-format
 msgid "ppdc: Expected include filename on line %d of %s."
 msgstr "ppdc: %d 行目、ファイル名 %s において include ファイル名 が必要です。"
 
-#: ppdc/ppdc-source.cxx:1459
 #, c-format
 msgid "ppdc: Expected integer on line %d of %s."
 msgstr "ppdc: %d 行目、ファイル名 %s において整数指定が必要です。"
 
-#: ppdc/ppdc-source.cxx:1638
 #, c-format
 msgid "ppdc: Expected locale after #po on line %d of %s."
 msgstr "ppdc: %d 行目、ファイル名 %s において #po のあとに locale が必要です。"
 
-#: ppdc/ppdc-source.cxx:310
 #, c-format
 msgid "ppdc: Expected name after %s on line %d of %s."
 msgstr "ppdc: %s のあとに name が必要です。%d 行目、ファイル名 %s。"
 
-#: ppdc/ppdc-source.cxx:3233
 #, c-format
 msgid "ppdc: Expected name after FileName on line %d of %s."
 msgstr ""
 "ppdc: %d 行目、ファイル名 %s において FileName のあとに name が必要です。"
 
-#: ppdc/ppdc-source.cxx:1015
 #, c-format
 msgid "ppdc: Expected name after Font on line %d of %s."
 msgstr "ppdc: %d 行目、ファイル名 %s において Font のあとに name が必要です。"
 
-#: ppdc/ppdc-source.cxx:3064
 #, c-format
 msgid "ppdc: Expected name after Manufacturer on line %d of %s."
 msgstr ""
 "ppdc: %d 行目、ファイル名 %s において Manufacturer のあとに name が必要です。"
 
-#: ppdc/ppdc-source.cxx:3097
 #, c-format
 msgid "ppdc: Expected name after MediaSize on line %d of %s."
 msgstr ""
 "ppdc: %d 行目、ファイル名 %s において MediaSize のあとに name が必要です。"
 
-#: ppdc/ppdc-source.cxx:3187
 #, c-format
 msgid "ppdc: Expected name after ModelName on line %d of %s."
 msgstr ""
 "ppdc: %d 行目、ファイル名 %s において ModelName のあとに name が必要です。"
 
-#: ppdc/ppdc-source.cxx:3250
 #, c-format
 msgid "ppdc: Expected name after PCFileName on line %d of %s."
 msgstr ""
 "ppdc: %d 行目、ファイル名 %s において PCFileName のあとに name が必要です。"
 
-#: ppdc/ppdc-source.cxx:1113
 #, c-format
 msgid "ppdc: Expected name/text after %s on line %d of %s."
 msgstr "ppdc: %s のあとに name/text が必要です。%d 行目、ファイル名 %s。"
 
-#: ppdc/ppdc-source.cxx:1202
 #, c-format
 msgid "ppdc: Expected name/text after Installable on line %d of %s."
 msgstr ""
 "ppdc: %d 行目、ファイル名 %s において Installable のあとに name/text が必要で"
 "す。"
 
-#: ppdc/ppdc-source.cxx:1739
 #, c-format
 msgid "ppdc: Expected name/text after Resolution on line %d of %s."
 msgstr ""
 "ppdc: %d 行目、ファイル名 %s において Resolution のあとに name/text が必要で"
 "す。"
 
-#: ppdc/ppdc-source.cxx:436
 #, c-format
 msgid "ppdc: Expected name/text combination for ColorModel on line %d of %s."
 msgstr ""
 "ppdc: %d 行目、ファイル名 %s において ColorModel に対する name/text が必要で"
 "す。"
 
-#: ppdc/ppdc-source.cxx:1531
 #, c-format
 msgid "ppdc: Expected option name/text on line %d of %s."
 msgstr "ppdc: %d 行目、ファイル名 %s において option name/text が必要です。"
 
-#: ppdc/ppdc-source.cxx:1565
 #, c-format
 msgid "ppdc: Expected option section on line %d of %s."
 msgstr "ppdc: %d 行目、ファイル名 %s において option section が必要です。"
 
-#: ppdc/ppdc-source.cxx:1543
 #, c-format
 msgid "ppdc: Expected option type on line %d of %s."
 msgstr "ppdc: %d 行目、ファイル名 %s において option type が必要です。"
 
-#: ppdc/ppdc-source.cxx:1722
 #, c-format
 msgid "ppdc: Expected override field after Resolution on line %d of %s."
 msgstr ""
 "ppdc: %d 行目、ファイル名 %s において Resolution のあとに override field が必"
 "要です。"
 
-#: ppdc/ppdc-catalog.cxx:389 ppdc/ppdc-catalog.cxx:401
 #, c-format
 msgid "ppdc: Expected quoted string on line %d of %s."
 msgstr "%d 行: %s には引用符で囲まれた文字列が必要です。"
 
-#: ppdc/ppdc-source.cxx:961
 #, c-format
 msgid "ppdc: Expected real number on line %d of %s."
 msgstr "ppdc: %d 行目、ファイル名 %s において実数が必要です。"
 
-#: ppdc/ppdc-source.cxx:529
 #, c-format
 msgid ""
 "ppdc: Expected resolution/mediatype following ColorProfile on line %d of %s."
@@ -7463,7 +5788,6 @@ msgstr ""
 "ppdc: %d 行目、ファイル名 %s において ColorProfile に続いて resolution/"
 "mediatype が必要です。"
 
-#: ppdc/ppdc-source.cxx:1820
 #, c-format
 msgid ""
 "ppdc: Expected resolution/mediatype following SimpleColorProfile on line %d "
@@ -7472,349 +5796,282 @@ msgstr ""
 "ppdc: %d 行目、ファイル名 %s において SimpleColorProfile に続いて resolution/"
 "mediatype が必要です。"
 
-#: ppdc/ppdc-source.cxx:318
 #, c-format
 msgid "ppdc: Expected selector after %s on line %d of %s."
 msgstr "ppdc: %s のあとに selector が必要です。%d 行目、ファイル名 %s。"
 
-#: ppdc/ppdc-source.cxx:1058
 #, c-format
 msgid "ppdc: Expected status after Font on line %d of %s."
 msgstr ""
 "ppdc: %d 行目、ファイル名 %s において Font のあとに status が必要です。"
 
-#: ppdc/ppdc-source.cxx:2750
 #, c-format
 msgid "ppdc: Expected string after Copyright on line %d of %s."
 msgstr ""
 "ppdc: %d 行目、ファイル名 %s において Copyright のあとに文字列が必要です。"
 
-#: ppdc/ppdc-source.cxx:3353
 #, c-format
 msgid "ppdc: Expected string after Version on line %d of %s."
 msgstr ""
 "ppdc: %d 行目、ファイル名 %s において Version のあとに文字列が必要です。"
 
-#: ppdc/ppdc-source.cxx:685
 #, c-format
 msgid "ppdc: Expected two option names on line %d of %s."
 msgstr "ppdc: %d 行目、ファイル名 %s において 2 つのオプション名が必要です。"
 
-#: ppdc/ppdc-source.cxx:329
 #, c-format
 msgid "ppdc: Expected value after %s on line %d of %s."
 msgstr "ppdc: %s のあとに value が必要です。%d 行目、ファイル名 %s。"
 
-#: ppdc/ppdc-source.cxx:1042
 #, c-format
 msgid "ppdc: Expected version after Font on line %d of %s."
 msgstr ""
 "ppdc: %d 行目、ファイル名 %s において Font のあとに version が必要です。"
 
-#: ppdc/ppdc-source.cxx:184
 #, c-format
 msgid "ppdc: Invalid #include/#po filename \"%s\"."
 msgstr "ppdc: 無効な #include/#po ファイル名です \"%s\"。"
 
-#: ppdc/ppdc-source.cxx:929
 #, c-format
 msgid "ppdc: Invalid cost for filter on line %d of %s."
 msgstr ""
 "ppdc: %d 行目、ファイル名 %s においてフィルターに対する無効な cost がありま"
 "す。"
 
-#: ppdc/ppdc-source.cxx:921
 #, c-format
 msgid "ppdc: Invalid empty MIME type for filter on line %d of %s."
 msgstr ""
 "ppdc: %d 行目、ファイル名 %s においてフィルターに対する無効な空の MIME タイプ"
 "があります。"
 
-#: ppdc/ppdc-source.cxx:937
 #, c-format
 msgid "ppdc: Invalid empty program name for filter on line %d of %s."
 msgstr ""
 "ppdc: %d 行目、ファイル名 %s においてフィルターに対するプログラム名が空であり"
 "無効です。"
 
-#: ppdc/ppdc-source.cxx:1585
 #, c-format
 msgid "ppdc: Invalid option section \"%s\" on line %d of %s."
-msgstr "ppdc: 無効な option section があります \"%s\"。%d 行目、ファイル名 %s。"
+msgstr ""
+"ppdc: 無効な option section があります \"%s\"。%d 行目、ファイル名 %s。"
 
-#: ppdc/ppdc-source.cxx:1557
 #, c-format
 msgid "ppdc: Invalid option type \"%s\" on line %d of %s."
 msgstr "ppdc: 無効な option type があります \"%s\"。%d 行目、ファイル名 %s。"
 
-#: ppdc/ppdc.cxx:246 ppdc/ppdpo.cxx:123
 #, c-format
 msgid "ppdc: Loading driver information file \"%s\"."
 msgstr "ppdc: ドライバー情報ファイル \"%s\" を読み込んでいます。"
 
-#: ppdc/ppdc.cxx:182
 #, c-format
 msgid "ppdc: Loading messages for locale \"%s\"."
 msgstr "ppdc: ロケール \"%s\" のメッセージを読み込んでいます。"
 
-#: ppdc/ppdc.cxx:121
 #, c-format
 msgid "ppdc: Loading messages from \"%s\"."
 msgstr "ppdc: \"%s\" からメッセージを読み込んでいます。"
 
-#: ppdc/ppdc-source.cxx:2368 ppdc/ppdc-source.cxx:2600
 #, c-format
 msgid "ppdc: Missing #endif at end of \"%s\"."
 msgstr "ppdc: \"%s\" の最後に #endif が見つかりません。"
 
-#: ppdc/ppdc-source.cxx:2469 ppdc/ppdc-source.cxx:2504
-#: ppdc/ppdc-source.cxx:2534
 #, c-format
 msgid "ppdc: Missing #if on line %d of %s."
 msgstr "ppdc: %d 行目、ファイル名 %s において #if が見つかりません。"
 
-#: ppdc/ppdc-catalog.cxx:466
 #, c-format
 msgid ""
 "ppdc: Need a msgid line before any translation strings on line %d of %s."
 msgstr "%d 行: %s の翻訳文字列の前に msgid 行が必要です。"
 
-#: ppdc/ppdc-driver.cxx:712
 #, c-format
 msgid "ppdc: No message catalog provided for locale %s."
 msgstr "ppdc: ロケール %s に対するメッセージカタログが見つかりません。"
 
-#: ppdc/ppdc-source.cxx:1608 ppdc/ppdc-source.cxx:2838
-#: ppdc/ppdc-source.cxx:2924 ppdc/ppdc-source.cxx:3017
-#: ppdc/ppdc-source.cxx:3150 ppdc/ppdc-source.cxx:3283
 #, c-format
 msgid "ppdc: Option %s defined in two different groups on line %d of %s."
 msgstr ""
 "ppdc: オプション %s が行 %d、ファイル %s の 2 つの異なるグループで定義されて"
 "います。"
 
-#: ppdc/ppdc-source.cxx:1601
 #, c-format
 msgid "ppdc: Option %s redefined with a different type on line %d of %s."
-msgstr "ppdc: オプション %s は異なる型で再定義されています。%d 行目、ファイル名 %s。"
+msgstr ""
+"ppdc: オプション %s は異なる型で再定義されています。%d 行目、ファイル名 %s。"
 
-#: ppdc/ppdc-source.cxx:662
 #, c-format
 msgid "ppdc: Option constraint must *name on line %d of %s."
 msgstr ""
 "ppdc: %d 行目、ファイル名 %s において Option constraint は *name で指定しなけ"
 "ればなりません。"
 
-#: ppdc/ppdc-source.cxx:2451
 #, c-format
 msgid "ppdc: Too many nested #if's on line %d of %s."
 msgstr "ppdc: %d 行目、ファイル名 %s において #if のネストが多すぎます。"
 
-#: ppdc/ppdc.cxx:369
 #, c-format
 msgid "ppdc: Unable to create PPD file \"%s\" - %s."
 msgstr "ppdc: PPD ファイル \"%s\" を作成できません - %s。"
 
-#: ppdc/ppdc.cxx:261
 #, c-format
 msgid "ppdc: Unable to create output directory %s: %s"
 msgstr "ppdc: 出力ディレクトリー \"%s\" を作成できません - %s"
 
-#: ppdc/ppdc.cxx:282
 #, c-format
 msgid "ppdc: Unable to create output pipes: %s"
 msgstr "ppdc: 出力パイプを作成できません: %s"
 
-#: ppdc/ppdc.cxx:298 ppdc/ppdc.cxx:304
 #, c-format
 msgid "ppdc: Unable to execute cupstestppd: %s"
 msgstr "ppdc: cupstestppd を実行できません: %s"
 
-#: ppdc/ppdc-source.cxx:1687
 #, c-format
 msgid "ppdc: Unable to find #po file %s on line %d of %s."
 msgstr "ppdc: #po ファイル %s が見つかりません。%d 行目、ファイル名 %s。"
 
-#: ppdc/ppdc-source.cxx:2607
 #, c-format
 msgid "ppdc: Unable to find include file \"%s\" on line %d of %s."
-msgstr "ppdc: インクルードファイル %s が見つかりません。%d 行目、ファイル名 %s。"
+msgstr ""
+"ppdc: インクルードファイル %s が見つかりません。%d 行目、ファイル名 %s。"
 
-#: ppdc/ppdc.cxx:193
 #, c-format
 msgid "ppdc: Unable to find localization for \"%s\" - %s"
 msgstr "ppdc:  \"%s\" に対する地域化情報が見つかりません - %s"
 
-#: ppdc/ppdc.cxx:130
 #, c-format
 msgid "ppdc: Unable to load localization file \"%s\" - %s"
 msgstr "ppdc:  \"%s\" に対するローカライズファイルを読み込めません - %s"
 
-#: ppdc/ppdc-file.cxx:50
 #, c-format
 msgid "ppdc: Unable to open %s: %s"
 msgstr "ppdc: %s を開けません: %s"
 
-#: ppdc/ppdc-source.cxx:2011
 #, c-format
 msgid "ppdc: Undefined variable (%s) on line %d of %s."
 msgstr "ppdc: 変数 (%s) は未定義です。%d 行目、ファイル名 %s。"
 
-#: ppdc/ppdc-catalog.cxx:483
 #, c-format
 msgid "ppdc: Unexpected text on line %d of %s."
 msgstr "%d 行: %s は予期せぬテキストです。"
 
-#: ppdc/ppdc-source.cxx:2880
 #, c-format
 msgid "ppdc: Unknown driver type %s on line %d of %s."
 msgstr "ppdc: %s は未知のドライバータイプです。%d 行目、ファイル名 %s。"
 
-#: ppdc/ppdc-source.cxx:863
 #, c-format
 msgid "ppdc: Unknown duplex type \"%s\" on line %d of %s."
 msgstr "ppdc: \"%s\" は未知の両面タイプです。%d 行目、ファイル名 %s。"
 
-#: ppdc/ppdc-source.cxx:3110
 #, c-format
 msgid "ppdc: Unknown media size \"%s\" on line %d of %s."
 msgstr "ppdc: \"%s\" は未知の用紙サイズです。%d 行目、ファイル名 %s。"
 
-#: ppdc/ppdc-catalog.cxx:511
 #, c-format
 msgid "ppdc: Unknown message catalog format for \"%s\"."
 msgstr "\"%s\" は未知のメッセージカタログの書式です。"
 
-#: ppdc/ppdc-source.cxx:3364
 #, c-format
 msgid "ppdc: Unknown token \"%s\" seen on line %d of %s."
 msgstr "ppdc: 未知のトークン \"%s\" があります。%d 行目、ファイル名 %s。"
 
-#: ppdc/ppdc-source.cxx:971
 #, c-format
 msgid ""
 "ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s."
 msgstr "ppdc: 実数 \"%s\" に未知の終了文字があります。%d 行目、ファイル名 %s。"
 
-#: ppdc/ppdc-source.cxx:2121
 #, c-format
 msgid "ppdc: Unterminated string starting with %c on line %d of %s."
 msgstr ""
 "ppdc: %c で始まる文字に対して終端文字がありません。%d 行目、ファイル名 %s。"
 
-#: ppdc/ppdc.cxx:360
 #, c-format
 msgid "ppdc: Warning - overlapping filename \"%s\"."
 msgstr "ppdc: 警告 - ファイル名 \"%s\" が重複しています。"
 
-#: ppdc/ppdc.cxx:375
 #, c-format
 msgid "ppdc: Writing %s."
 msgstr "ppdc: %s を書き込んでいます。"
 
-#: ppdc/ppdc.cxx:143
 #, c-format
 msgid "ppdc: Writing PPD files to directory \"%s\"."
 msgstr "ppdc: ディレクトリー \"%s\" に PPD ファイルを書き込んでいます。"
 
-#: ppdc/ppdmerge.cxx:130
 #, c-format
 msgid "ppdmerge: Bad LanguageVersion \"%s\" in %s."
 msgstr "ppdmerge: 不正な LanguageVersion \"%s\" が %s にあります。"
 
-#: ppdc/ppdmerge.cxx:170
 #, c-format
 msgid "ppdmerge: Ignoring PPD file %s."
 msgstr "ppdmerge: PPD ファイル %s を無視します。"
 
-#: ppdc/ppdmerge.cxx:154
 #, c-format
 msgid "ppdmerge: Unable to backup %s to %s - %s"
 msgstr "ppdmerge: %s を %s にバックアップできません - %s"
 
-#: systemv/lpstat.c:1777
 #, c-format
 msgid "printer %s disabled since %s -"
 msgstr "プリンター %s は %s から無効です -"
 
-#: systemv/lpstat.c:1766
 #, c-format
 msgid "printer %s is idle.  enabled since %s"
 msgstr "プリンター %s は待機中です。%s 以来有効です"
 
-#: systemv/lpstat.c:1771
 #, c-format
 msgid "printer %s now printing %s-%d.  enabled since %s"
 msgstr "プリンター %s は %s-%d を印刷しています。%s 以来有効です"
 
-#: systemv/lpstat.c:1900
 #, c-format
 msgid "printer %s/%s disabled since %s -"
 msgstr "プリンター %s/%s は %s から無効です -"
 
-#: systemv/lpstat.c:1886
 #, c-format
 msgid "printer %s/%s is idle.  enabled since %s"
 msgstr "プリンター %s/%s は待機中です。%s 以来有効です"
 
-#: systemv/lpstat.c:1893
 #, c-format
 msgid "printer %s/%s now printing %s-%d.  enabled since %s"
 msgstr "プリンター %s/%s は現在 %s-%d を印刷中です。%s 以来有効です"
 
-#: cups/notify.c:93 cups/notify.c:134
 msgid "processing"
 msgstr "処理中"
 
-#: systemv/lp.c:662
 #, c-format
 msgid "request id is %s-%d (%d file(s))"
 msgstr "リクエスト ID は %s-%d です (%d 個のファイル)"
 
-#: cups/snmp.c:972
 msgid "request-id uses indefinite length"
 msgstr "リクエスト ID の長さが不定"
 
-#: systemv/lpstat.c:2032
 msgid "scheduler is not running"
 msgstr "スケジューラーは動作していません"
 
-#: systemv/lpstat.c:2028
 msgid "scheduler is running"
 msgstr "スケジューラーは動作中です"
 
-#: cups/adminutil.c:2148
 #, c-format
 msgid "stat of %s failed: %s"
 msgstr "%s の状態取得に失敗しました: %s"
 
-#: berkeley/lpc.c:203
 msgid "status\t\tShow status of daemon and queue."
 msgstr "status\t\tデーモンとキューの状態を表示。"
 
-#: cups/notify.c:96 cups/notify.c:137
 msgid "stopped"
 msgstr "停止"
 
-#: systemv/lpstat.c:1052
 #, c-format
 msgid "system default destination: %s"
 msgstr "システムのデフォルトの宛先: %s"
 
-#: systemv/lpstat.c:1049
 #, c-format
 msgid "system default destination: %s/%s"
 msgstr "システムのデフォルトの宛先: %s/%s"
 
-#: cups/notify.c:108 cups/notify.c:140
 msgid "unknown"
 msgstr "未知"
 
-#: cups/notify.c:117
 msgid "untitled"
 msgstr "タイトルなし"
 
-#: cups/snmp.c:997
 msgid "variable-bindings uses indefinite length"
 msgstr "variable-bindings の長さが不定"
 
@@ -7893,6 +6150,11 @@ msgstr "variable-bindings の長さが不定"
 #~ msgid "Stylus Photo Series"
 #~ msgstr "Stylus Photo シリーズ"
 
+#~ msgid ""
+#~ "The '%s' Job Description attribute cannot be supplied in a job creation "
+#~ "request."
+#~ msgstr "'%s' Job Description 属性はジョブ作成要求の中で指定できません。"
+
 #~ msgid "The output bin is almost full."
 #~ msgstr "排紙トレイがほとんど一杯です。"
 
index 983a7e7f3e40c7d04b2fe1cc615508752c3b94e1..83dae086279bab19a017ad6ca8dc700b24943718 100644 (file)
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 2.0\n"
 "Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2015-01-28 22:25-0400\n"
+"POT-Creation-Date: 2015-06-08 17:14-0400\n"
 "PO-Revision-Date: 2015-01-28 12:00-0800\n"
 "Last-Translator: Aleksandr Proklov\n"
 "Language-Team: PuppyRus Linux Team\n"
@@ -21,6 +21,7 @@ msgstr "\t\t(нет)"
 msgid "\t%d entries"
 msgstr "\tзаписей: %d"
 
+#, c-format
 msgid "\t%s"
 msgstr "\t%s"
 
@@ -243,8 +244,8 @@ msgid ""
 "be named Duplex.\n"
 "                REF: Page 122, section 5.17"
 msgstr ""
-"\tWARN\tКлючевое слово параметра дуплекса %s может привести к "
-"некорректным результатам. Используйте имя 'Duplex'\n"
+"\tWARN\tКлючевое слово параметра дуплекса %s может привести к некорректным "
+"результатам. Используйте имя 'Duplex'\n"
 "                REF: Стр. 122, раздел 5.17"
 
 msgid "        WARN    File contains a mix of CR, LF, and CR LF line endings."
@@ -393,9 +394,7 @@ msgstr "      %s Ошибки в %s - должно быть %s."
 
 #, c-format
 msgid "      %s  Cannot provide both APScanAppPath and APScanAppBundleID."
-msgstr ""
-"\t%s Невозможно предоставить APScanAppPath и APScanAppBundleID "
-"вместе."
+msgstr "\t%s Невозможно предоставить APScanAppPath и APScanAppBundleID вместе."
 
 #, c-format
 msgid "      %s  Default choices conflicting."
@@ -410,8 +409,8 @@ msgid "      %s  Missing \"%s\" translation string for option %s, choice %s."
 msgstr "\t%s Перевод \"%s\" отсутствует для параметра %s, выбора %s"
 
 #, c-format
-msgid "      %s  Missing \"%s\" translation string for option %s"
-msgstr "\t%s Перевод \"%s\" отсутствует для параметра %s"
+msgid "      %s  Missing \"%s\" translation string for option %s."
+msgstr ""
 
 #, c-format
 msgid "      %s  Missing %s file \"%s\"."
@@ -435,8 +434,7 @@ msgstr ""
 
 #, c-format
 msgid "      %s  Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\"."
-msgstr ""
-"      %s Выбор *%s %s отсутствует в UIConstraints \"*%s %s *%s %s\"."
+msgstr "      %s Выбор *%s %s отсутствует в UIConstraints \"*%s %s *%s %s\"."
 
 #, c-format
 msgid "      %s  Missing choice *%s %s in cupsUIConstraints %s: \"%s\""
@@ -495,7 +493,6 @@ msgid ""
 "      %s  cupsUIResolver %s does not list at least two different options."
 msgstr "\t%s В cupsUIResolver %s не перечислено как минимум два параметра."
 
-
 #, c-format
 msgid ""
 "      **FAIL**  %s must be 1284DeviceID\n"
@@ -504,7 +501,6 @@ msgstr ""
 "\t**FAIL** %s должно соответствовать 1284DeviceID\n"
 "                REF: Стр. 72, раздел 5.5"
 
-
 #, c-format
 msgid ""
 "      **FAIL**  Bad Default%s %s\n"
@@ -614,21 +610,19 @@ msgid ""
 "      **FAIL**  Default translation string for option %s choice %s contains "
 "8-bit characters."
 msgstr ""
-"\t**FAIL** Стандартный перевод для параметра %s выбора %s содержит "
-"8-битовые символы."
+"\t**FAIL** Стандартный перевод для параметра %s выбора %s содержит 8-битовые "
+"символы."
 
 #, c-format
 msgid ""
 "      **FAIL**  Default translation string for option %s contains 8-bit "
 "characters."
 msgstr ""
-"\t**FAIL** Стандартный перевод для параметра %s содержит "
-"8-битовые символы."
+"\t**FAIL** Стандартный перевод для параметра %s содержит 8-битовые символы."
 
 #, c-format
 msgid "      **FAIL**  Group names %s and %s differ only by case."
-msgstr ""
-"\t**FAIL** Имена групп %s и %s отличаются только регистром символов."
+msgstr "\t**FAIL** Имена групп %s и %s отличаются только регистром символов."
 
 #, c-format
 msgid "      **FAIL**  Multiple occurrences of option %s choice name %s."
@@ -636,11 +630,14 @@ msgstr "\t**FAIL** Для выбора параметра %s имя %s  встр
 
 #, c-format
 msgid "      **FAIL**  Option %s choice names %s and %s differ only by case."
-msgstr "\t**FAIL** Параметр %s с именами %s и %s отличается только регистром символов."
+msgstr ""
+"\t**FAIL** Параметр %s с именами %s и %s отличается только регистром "
+"символов."
 
 #, c-format
 msgid "      **FAIL**  Option names %s and %s differ only by case."
-msgstr "\t**FAIL** Названия параметров %s и %s отличаются только регистром символов."
+msgstr ""
+"\t**FAIL** Названия параметров %s и %s отличаются только регистром символов."
 
 #, c-format
 msgid ""
@@ -791,6 +788,7 @@ msgstr "\t**FAIL**  Не удается открыть PPD-файл – %s в с
 #, c-format
 msgid "    %d ERRORS FOUND"
 msgstr "    ОБНАРУЖЕНО ОШИБОК: %d"
+
 msgid "    -h       Show program usage"
 msgstr "    -h       Показать справку по использованию программы"
 
@@ -802,7 +800,6 @@ msgstr ""
 "    Неверный %%%%BoundingBox: в строке %d\n"
 "        REF: Стр. 39, %%%%BoundingBox:"
 
-
 #, c-format
 msgid ""
 "    Bad %%%%Page: on line %d.\n"
@@ -835,10 +832,8 @@ msgstr ""
 "        REF: Стр. 17, 3.1 Соответствующие документы"
 
 #, c-format
-msgid "    Missing %%EndComments comment.\n"
-"        REF: Page 41, %%EndComments"
-msgstr "    Комментарий %%EndComments отсутствует.\n"
-"        REF: Стр. 41, %%EndComments"
+msgid "    Missing %%EndComments comment.        REF: Page 41, %%EndComments"
+msgstr ""
 
 #, c-format
 msgid ""
@@ -906,10 +901,13 @@ msgid "  --[no-]remote-any       Allow/prevent access from the Internet."
 msgstr "  --[no-]remote-any       Разрешается/запрещается доступ из Интернет."
 
 msgid "  --[no-]share-printers   Turn printer sharing on/off."
-msgstr "  --[no-]share-printers   Вкл./откл. совместное использование принтеров."
+msgstr ""
+"  --[no-]share-printers   Вкл./откл. совместное использование принтеров."
 
 msgid "  --[no-]user-cancel-any  Allow/prevent users to cancel any job."
-msgstr "  --[no-]user-cancel-any  Пользователям разрешается/запрещается отменять задания."
+msgstr ""
+"  --[no-]user-cancel-any  Пользователям разрешается/запрещается отменять "
+"задания."
 
 msgid "  --cr                    End lines with CR (Mac OS 9)."
 msgstr "  --cr                    Строки заканчиваются на CR (Mac OS 9)."
@@ -940,10 +938,12 @@ msgid "  --host regex            Match hostname to regular expression."
 msgstr "  --host regex            Найти hostname по регулярному выражению."
 
 msgid "  --lf                    End lines with LF (UNIX/Linux/OS X)."
-msgstr "  --lf                    Строки заканчиваются на LF (UNIX/Linux/Mac OS X)."
+msgstr ""
+"  --lf                    Строки заканчиваются на LF (UNIX/Linux/Mac OS X)."
 
 msgid "  --list-filters          List filters that will be used."
-msgstr "  --list-filters          Список фильтров которые должны использоваться."
+msgstr ""
+"  --list-filters          Список фильтров которые должны использоваться."
 
 msgid "  --local                 True if service is local."
 msgstr "  --local                 \"Истина\" если сервис локальный."
@@ -958,10 +958,12 @@ msgid "  --not expression        Unary NOT of expression."
 msgstr "  --not expression        Логическое NOT для выражения."
 
 msgid "  --path regex            Match resource path to regular expression."
-msgstr "  --path regex            Найти путь к ресурсу по регулярному выражению."
+msgstr ""
+"  --path regex            Найти путь к ресурсу по регулярному выражению."
 
 msgid "  --port number[-number]  Match port to number or range."
-msgstr "  --port number[-number]  Найти номер порта по номеру или диапазону портов."
+msgstr ""
+"  --port number[-number]  Найти номер порта по номеру или диапазону портов."
 
 msgid "  --print                 Print URI if true."
 msgstr "  --print                 Печать URI при соответствии."
@@ -970,7 +972,8 @@ msgid "  --print-name            Print service name if true."
 msgstr "  --print-name            Печать имени сервиса если соответствует."
 
 msgid "  --quiet                 Quietly report match via exit code."
-msgstr "  --quiet                 Кратко уведомлять о совпадении через код выхода."
+msgstr ""
+"  --quiet                 Кратко уведомлять о совпадении через код выхода."
 
 msgid "  --remote                True if service is remote."
 msgstr "  --remote                \"Истина\" если сервис удаленный."
@@ -1007,7 +1010,9 @@ msgid "  -6                      Connect using IPv6."
 msgstr "  -6                      Соединение используя IPv6."
 
 msgid "  -C                      Send requests using chunking (default)."
-msgstr "  -C                      Передача запроса с использованием chunking (по умолчанию)"
+msgstr ""
+"  -C                      Передача запроса с использованием chunking (по "
+"умолчанию)"
 
 msgid "  -D                      Remove the input file when finished."
 msgstr "  -D                      Удалить входной файл после завершения."
@@ -1024,7 +1029,8 @@ msgstr "  -E                      Проверять что HTTP использ
 msgid ""
 "  -F                      Run in the foreground but detach from console."
 msgstr ""
-"  -F                      Запускать с высоким приоритетом и отдельно от консоли."
+"  -F                      Запускать с высоким приоритетом и отдельно от "
+"консоли."
 
 msgid "  -H samba-server         Use the named SAMBA server."
 msgstr "  -H samba-server         Использовать заданный сервер SAMBA."
@@ -1039,20 +1045,22 @@ msgid "  -I {filename,filters,none,profiles}"
 msgstr "  -I {filename,filters,none,profiles}"
 
 msgid "  -L                      Send requests using content-length."
-msgstr "  -L                      Передача запроса с использованием content-length."
+msgstr ""
+"  -L                      Передача запроса с использованием content-length."
 
 msgid ""
 "  -P filename.plist       Produce XML plist to a file and test report to "
 "standard output."
 msgstr ""
-"  -P filename.plist       Вывести XML plist в файл и проверить результат "
-"на стандартном выводе."
+"  -P filename.plist       Вывести XML plist в файл и проверить результат на "
+"стандартном выводе."
 
 msgid "  -P filename.ppd         Set PPD file."
 msgstr "  -P filename.ppd         Задать PPD-файл."
 
 msgid "  -P number[-number]      Match port to number or range."
-msgstr "  -P number[-number]      Найти номер порта по номеру или диапазону портов."
+msgstr ""
+"  -P number[-number]      Найти номер порта по номеру или диапазону портов."
 
 msgid "  -R root-directory       Set alternate root."
 msgstr "  -R root-directory       Задать корневой каталог."
@@ -1064,7 +1072,8 @@ msgid "  -T seconds              Set the browse timeout in seconds."
 msgstr "  -T seconds              Задать время ожидания в секундах."
 
 msgid "  -T seconds              Set the receive/send timeout in seconds."
-msgstr "  -T seconds              Задать время ожидания приема/передачи в секундах."
+msgstr ""
+"  -T seconds              Задать время ожидания приема/передачи в секундах."
 
 msgid "  -U username             Specify username."
 msgstr "  -U username             Указание имени пользователя."
@@ -1134,19 +1143,22 @@ msgid "  -h server[:port]        Specify server address."
 msgstr "  -h server[:port]        Задать адрес и порт сервера."
 
 msgid "  -i mime/type            Set input MIME type (otherwise auto-typed)."
-msgstr "  -i mime/type            Указать MIME-тип данных на входе (иначе автоопред.)."
+msgstr ""
+"  -i mime/type            Указать MIME-тип данных на входе (иначе "
+"автоопред.)."
 
 msgid ""
 "  -i seconds              Repeat the last file with the given time interval."
 msgstr ""
-"  -i seconds              Повтор последнего файла через заданный интервал в сек."
+"  -i seconds              Повтор последнего файла через заданный интервал в "
+"сек."
 
 msgid ""
 "  -j job-id[,N]           Filter file N from the specified job (default is "
 "file 1)."
 msgstr ""
-"  -j job-id[,N]           Из указанного задания выбирается файл N (по умолчанию "
-"файл 1)."
+"  -j job-id[,N]           Из указанного задания выбирается файл N (по "
+"Ñ\83молÑ\87аниÑ\8e Ñ\84айл 1)."
 
 msgid "  -l                      List attributes."
 msgstr "  -l                      Список атрибутов."
@@ -1161,20 +1173,21 @@ msgid "  -l lang[,lang,...]      Specify the output language(s) (locale)."
 msgstr "  -l lang[,lang,...]      Задать выходной язык(и) (locale)."
 
 msgid "  -m                      Use the ModelName value as the filename."
-msgstr "  -m                      В качестве имени файла используется ModelName."
+msgstr ""
+"  -m                      В качестве имени файла используется ModelName."
 
 msgid ""
 "  -m mime/type            Set output MIME type (otherwise application/pdf)."
 msgstr ""
-"  -m mime/type            Указать MIME-тип данных на выходе (иначе application/pdf)."
+"  -m mime/type            Указать MIME-тип данных на выходе (иначе "
+"application/pdf)."
 
 msgid "  -n copies               Set number of copies."
 msgstr "  -n copies               Указать количество копий."
 
 msgid ""
 "  -n count                Repeat the last file the given number of times."
-msgstr ""
-"  -n count                Повтор последнего файла заданное число раз."
+msgstr "  -n count                Повтор последнего файла заданное число раз."
 
 msgid "  -n regex                Match service name to regular expression."
 msgstr "  -n regex                Найти имя по регулярному выражению."
@@ -1182,7 +1195,8 @@ msgstr "  -n regex                Найти имя по регулярному
 msgid ""
 "  -o filename.drv         Set driver information file (otherwise ppdi.drv)."
 msgstr ""
-"  -o filename.drv         Указать файл с информацией о драйвере (иначе ppdi.drv)."
+"  -o filename.drv         Указать файл с информацией о драйвере (иначе ppdi."
+"drv)."
 
 msgid "  -o filename.ppd[.gz]    Set output file (otherwise stdout)."
 msgstr "  -o filename.ppd[.gz]    Задать выходной файл (иначе stdout)."
@@ -1200,7 +1214,8 @@ msgid "  -p program              Run specified program for each service."
 msgstr "  -p program              Запустить указанную программу."
 
 msgid "  -q                      Quietly report match via exit code."
-msgstr "  -q                      Кратко уведомлять о совпадении через код выхода."
+msgstr ""
+"  -q                      Кратко уведомлять о совпадении через код выхода."
 
 msgid "  -q                      Run silently."
 msgstr "  -q                      Команда выполняется в «тихом» режиме."
@@ -1338,17 +1353,21 @@ msgstr "\"%s\": Неправильное значение URI \"%s\" - %s (RFC 2
 
 #, c-format
 msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 2911 section 4.1.5)."
-msgstr "\"%s\": Неправильное значение URI \"%s\" - ошибка длины %d (RFC 2911 раздел 4.1.5)."
+msgstr ""
+"\"%s\": Неправильное значение URI \"%s\" - ошибка длины %d (RFC 2911 раздел "
+"4.1.5)."
 
 #, c-format
 msgid "\"%s\": Bad attribute name - bad length %d (RFC 2911 section 4.1.3)."
-msgstr "\"%s\": Неправильный атрибут имени - ошибка длины %d (RFC 2911 раздел 4.1.3)."
+msgstr ""
+"\"%s\": Неправильный атрибут имени - ошибка длины %d (RFC 2911 раздел 4.1.3)."
 
 #, c-format
 msgid ""
 "\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)."
 msgstr ""
-"\"%s\": Неправильный атрибут имени - недопустимый символ (RFC 2911 раздел 4.1.3)."
+"\"%s\": Неправильный атрибут имени - недопустимый символ (RFC 2911 раздел "
+"4.1.3)."
 
 #, c-format
 msgid "\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11)."
@@ -1358,13 +1377,15 @@ msgstr "\"%s\": Неправильное двоичное значение %d (R
 msgid ""
 "\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section 4.1.7)."
 msgstr ""
-"\"%s\": Неправильное символьное значение \"%s\" - недопустимые символы (RFC 2911 раздел 4.1.7)."
+"\"%s\": Неправильное символьное значение \"%s\" - недопустимые символы (RFC "
+"2911 раздел 4.1.7)."
 
 #, c-format
 msgid ""
 "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)."
 msgstr ""
-"\"%s\": Неправильное символьное значение \"%s\" - ошибка длины %d (RFC 2911 раздел 4.1.7)."
+"\"%s\": Неправильное символьное значение \"%s\" - ошибка длины %d (RFC 2911 "
+"раздел 4.1.7)."
 
 #, c-format
 msgid "\"%s\": Bad dateTime UTC hours %u (RFC 2911 section 4.1.14)."
@@ -1404,38 +1425,40 @@ msgstr "\"%s\": Ошибка в dateTime секунды %u (RFC 2911 разде
 
 #, c-format
 msgid "\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4)."
-msgstr "\"%s\": Ошибка в значении %d - за пределами диапазона (RFC 2911 раздел 4.1.4)."
+msgstr ""
+"\"%s\": Ошибка в значении %d - за пределами диапазона (RFC 2911 раздел "
+"4.1.4)."
 
 #, c-format
 msgid ""
 "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3)."
 msgstr ""
-"\"%s\": Ошибка в значении \"%s\" - неправильная длина %d (RFC 2911 раздел 4.1.3)."
+"\"%s\": Ошибка в значении \"%s\" - неправильная длина %d (RFC 2911 раздел "
+"4.1.3)."
 
 #, c-format
 msgid ""
 "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section "
 "4.1.3)."
 msgstr ""
-"\"%s\": Ошибка в значении \"%s\" - недопустимый символ (RFC 2911 "
-"раздел 4.1.3)."
+"\"%s\": Ошибка в значении \"%s\" - недопустимый символ (RFC 2911 раздел "
+"4.1.3)."
 
 #, c-format
 msgid ""
 "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section "
 "4.1.9)."
 msgstr ""
-"\"%s\": Ошибка mimeMediaType значение \"%s\" - недопустимые символы (RFC 2911  "
-"раздел 4.1.9)."
+"\"%s\": Ошибка mimeMediaType значение \"%s\" - недопустимые символы (RFC "
+"2911  раздел 4.1.9)."
 
 #, c-format
 msgid ""
 "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section "
 "4.1.9)."
 msgstr ""
-msgid ""
-"\"%s\": Ошибка mimeMediaType значение \"%s\" - неправильная длина %d "
-"(RFC 2911 раздел 4.1.9)."
+"\"%s\": Ошибка mimeMediaType значение \"%s\" - неправильная длина %d (RFC "
+"2911 раздел 4.1.9)."
 
 #, c-format
 msgid ""
@@ -1445,37 +1468,40 @@ msgstr ""
 
 #, c-format
 msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2)."
-msgstr "\"%s\": Неправильное имя \"%s\" - неправильная длина %d (RFC 2911 раздел 4.1.2)."
+msgstr ""
+"\"%s\": Неправильное имя \"%s\" - неправильная длина %d (RFC 2911 раздел "
+"4.1.2)."
 
 #, c-format
 msgid ""
 "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 section "
 "4.1.8)."
 msgstr ""
-"\"%s\": Ошибка naturalLanguage значение \"%s\" - недопустимые символы "
-"(RFC 2911 раздел 4.1.8)."
+"\"%s\": Ошибка naturalLanguage значение \"%s\" - недопустимые символы (RFC "
+"2911 раздел 4.1.8)."
 
 #, c-format
 msgid ""
 "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 2911 section "
 "4.1.8)."
 msgstr ""
-"\"%s\": Ошибка naturalLanguage значение \"%s\" - неправильная длина %d "
-"(RFC 2911 раздел 4.1.8)."
+"\"%s\": Ошибка naturalLanguage значение \"%s\" - неправильная длина %d (RFC "
+"2911 раздел 4.1.8)."
 
 #, c-format
 msgid ""
 "\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10)."
 msgstr ""
-"\"%s\": Ошибка значения octetString - неправильная длина %d (RFC 2911 раздел 4.1.10)."
+"\"%s\": Ошибка значения octetString - неправильная длина %d (RFC 2911 раздел "
+"4.1.10)."
 
 #, c-format
 msgid ""
 "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 2911 "
 "section 4.1.13)."
 msgstr ""
-"\"%s\": Ошибка rangeOfInteger значение %d-%d - первое больше чем второе "
-"(RFC 2911 раздел 4.1.13)."
+"\"%s\": Ошибка rangeOfInteger значение %d-%d - первое больше чем второе (RFC "
+"2911 раздел 4.1.13)."
 
 #, c-format
 msgid ""
@@ -1490,38 +1516,43 @@ msgid ""
 "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be "
 "positive (RFC 2911 section 4.1.15)."
 msgstr ""
-"\"%s\": Неправильное значение разрешения %dx%d%s - значение cross feed должно быть положительным "
-"(RFC 2911 раздел 4.1.15)."
+"\"%s\": Неправильное значение разрешения %dx%d%s - значение cross feed "
+"должно быть положительным (RFC 2911 раздел 4.1.15)."
 
 #, c-format
 msgid ""
 "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC "
 "2911 section 4.1.15)."
 msgstr ""
-"\"%s\": Неправильное значение разрешения %dx%d%s - значение feed должно быть положительным "
-"(RFC 2911 раздел 4.1.15)."
+"\"%s\": Неправильное значение разрешения %dx%d%s - значение feed должно быть "
+"положительным (RFC 2911 раздел 4.1.15)."
 
 #, c-format
 msgid ""
 "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.1)."
 msgstr ""
-"\"%s\": Неправильное текстовое значение \"%s\" - ошибка в UTF-8 (RFC 2911 раздел 4.1.1)."
+"\"%s\": Неправильное текстовое значение \"%s\" - ошибка в UTF-8 (RFC 2911 "
+"раздел 4.1.1)."
 
 #, c-format
 msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 2911 section 4.1.1)."
-msgstr "\"%s\": Неправильное текстовое значение \"%s\" - ошибка длины %d (RFC 2911 раздел 4.1.1)."
+msgstr ""
+"\"%s\": Неправильное текстовое значение \"%s\" - ошибка длины %d (RFC 2911 "
+"раздел 4.1.1)."
 
 #, c-format
 msgid ""
 "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section 4.1.6)."
 msgstr ""
-"\"%s\": Ошибка uriScheme значение \"%s\" - недопустимые символы (RFC 2911 раздел 4.1.6)."
+"\"%s\": Ошибка uriScheme значение \"%s\" - недопустимые символы (RFC 2911 "
+"раздел 4.1.6)."
 
 #, c-format
 msgid ""
 "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 2911 section 4.1.6)."
 msgstr ""
-"\"%s\": Ошибка uriScheme значение \"%s\" - ошибка длины %d (RFC 2911 раздел 4.1.6)."
+"\"%s\": Ошибка uriScheme значение \"%s\" - ошибка длины %d (RFC 2911 раздел "
+"4.1.6)."
 
 #, c-format
 msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
@@ -1555,6 +1586,7 @@ msgstr "%s (без полей, %s)"
 msgid "%s (Borderless, %s, %s)"
 msgstr "%s (без полей, %s, %s)"
 
+#, c-format
 msgid "%s accepting requests since %s"
 msgstr "%s принимает запросы с момента %s"
 
@@ -1590,7 +1622,6 @@ msgstr "%s не принимает запросы с момента %s -"
 msgid "%s not supported."
 msgstr "%s не поддерживается."
 
-
 #, c-format
 msgid "%s/%s accepting requests since %s"
 msgstr "%s/%s принимает запросы с момента %s"
@@ -1612,6 +1643,10 @@ msgstr "%s: %s"
 msgid "%s: %s failed: %s"
 msgstr "%s: ошибка %s: %s"
 
+#, c-format
+msgid "%s: Bad printer URI \"%s\"."
+msgstr ""
+
 #, c-format
 msgid "%s: Bad version %s for \"-V\"."
 msgstr "%s: Неверная версия %s для \"-V\"."
@@ -1624,7 +1659,8 @@ msgstr "%s: Дальнейшие действия неизвестны."
 msgid ""
 "%s: Error - %s environment variable names non-existent destination \"%s\"."
 msgstr ""
-"%s: Ошибка - %s переменная окружения указывает на несуществующее назначение \"%s\"."
+"%s: Ошибка - %s переменная окружения указывает на несуществующее назначение "
+"\"%s\"."
 
 #, c-format
 msgid "%s: Error - add '/version=1.1' to server name."
@@ -1641,17 +1677,18 @@ msgstr ""
 
 #, c-format
 msgid "%s: Error - cannot print from stdin if files or a job ID are provided."
-msgstr "%s: Ошибка - не удается печать из stdin, если предоставлены файлы "
-"или ID задания."
+msgstr ""
+"%s: Ошибка - не удается печать из stdin, если предоставлены файлы или ID "
+"задания."
 
 #, c-format
 msgid "%s: Error - expected character set after \"-S\" option."
 msgstr "%s: Ошибка - после параметра \"-S\" должен идти набор символов."
 
-
 #, c-format
 msgid "%s: Error - expected content type after \"-T\" option."
-msgstr "%s: Ошибка - после параметра \"-T\" должен быть указан тип содержимого."
+msgstr ""
+"%s: Ошибка - после параметра \"-T\" должен быть указан тип содержимого."
 
 #, c-format
 msgid "%s: Error - expected copies after \"-#\" option."
@@ -1671,17 +1708,14 @@ msgstr "%s: Ошибка - после параметра \"-P\" должно б
 msgid "%s: Error - expected destination after \"-d\" option."
 msgstr "%s: Ошибка - после параметра \"-d\" должно быть указано назначение."
 
-
 #, c-format
 msgid "%s: Error - expected form after \"-f\" option."
 msgstr "%s: Ошибка - после параметра \"-f\" должна быть указана форма."
 
-
 #, c-format
 msgid "%s: Error - expected hold name after \"-H\" option."
 msgstr "%s: Ошибка - после параметра \"-H\" должно быть указано имя хоста."
 
-
 #, c-format
 msgid "%s: Error - expected hostname after \"-H\" option."
 msgstr "%s: Ошибка - после параметра \"-H\" должно быть указано имя хоста."
@@ -1690,22 +1724,19 @@ msgstr "%s: Ошибка - после параметра \"-H\" должно б
 msgid "%s: Error - expected hostname after \"-h\" option."
 msgstr "%s: Ошибка - после параметра \"-h\" должно быть указано имя хоста."
 
-
 #, c-format
 msgid "%s: Error - expected mode list after \"-y\" option."
-msgstr ""
-"%s: Ошибка - после параметра \"-y\" должен быть указан список режимов."
+msgstr "%s: Ошибка - после параметра \"-y\" должен быть указан список режимов."
 
 #, c-format
 msgid "%s: Error - expected name after \"-%c\" option."
 msgstr "%s: Ошибка - после параметра \"-%c\" должно быть указано имя."
 
-
 #, c-format
 msgid "%s: Error - expected option=value after \"-o\" option."
 msgstr ""
-"%s: Ошибка - после параметра '-o' должна быть указана строка вида option=value"
-
+"%s: Ошибка - после параметра '-o' должна быть указана строка вида "
+"option=value"
 
 #, c-format
 msgid "%s: Error - expected page list after \"-P\" option."
@@ -1715,12 +1746,10 @@ msgstr "%s: Ошибка – после параметра \"-P\" должен 
 msgid "%s: Error - expected priority after \"-%c\" option."
 msgstr "%s: Ошибка - после параметра \"-%c\" должен быть указан приоритет."
 
-
 #, c-format
 msgid "%s: Error - expected reason text after \"-r\" option."
 msgstr "%s: Ошибка - после параметра \"-r\" должен идти текст причины."
 
-
 #, c-format
 msgid "%s: Error - expected title after \"-t\" option."
 msgstr "%s: Ошибка - после параметра \"-t\" должен быть указан заголовок."
@@ -1735,7 +1764,6 @@ msgid "%s: Error - expected username after \"-u\" option."
 msgstr ""
 "%s: Ошибка - после параметра \"-u\" должно быть указано имя пользователя."
 
-
 #, c-format
 msgid "%s: Error - expected value after \"-%c\" option."
 msgstr "%s: Ошибка - после параметра \"-%c\" должно быть указано значение."
@@ -1748,7 +1776,6 @@ msgstr ""
 "%s: Ошибка - требуется \"завершено\",\"не завершено\" или \"все\" после "
 "параметра \"-W\" "
 
-
 #, c-format
 msgid "%s: Error - no default destination available."
 msgstr "%s: Ошибка – нет доступного назначения по умолчанию."
@@ -1761,9 +1788,6 @@ msgstr "%s: Ошибка – приоритет должен быть от 1 д
 msgid "%s: Error - scheduler not responding."
 msgstr "%s: Ошибка - планировщик не отвечает."
 
-msgid "%s: Error - scheduler not responding."
-msgstr "%s: Ошибка – планировщик не отвечает."
-
 #, c-format
 msgid "%s: Error - too many files - \"%s\"."
 msgstr "%s: Ошибка – слишком много файлов – \"%s\"."
@@ -1780,17 +1804,14 @@ msgstr "%s: Ошибка – не удается поставить в очер
 msgid "%s: Error - unknown destination \"%s\"."
 msgstr "%s: Ошибка - неизвестное назначение \"%s\"."
 
-
 #, c-format
 msgid "%s: Error - unknown destination \"%s/%s\"."
 msgstr "%s: ошибка - неизвестное назначение \"%s/%s\"."
 
-
 #, c-format
 msgid "%s: Error - unknown option \"%c\"."
 msgstr "%s: Ошибка - неизвестный параметр \"%c\"."
 
-
 #, c-format
 msgid "%s: Error - unknown option \"%s\"."
 msgstr "%s: Ошибка - неизвестный параметр \"%s\"."
@@ -1803,7 +1824,6 @@ msgstr "%s: После параметра \"-i\" должен быть указ
 msgid "%s: Invalid destination name in list \"%s\"."
 msgstr "%s: Недопустимое имя назначения в списке \"%s\"."
 
-
 #, c-format
 msgid "%s: Invalid filter string \"%s\"."
 msgstr "%s: Неверная строка фильтра \"%s\"."
@@ -1820,13 +1840,10 @@ msgstr "%s: Пропущен таймаут для \"-T\"."
 msgid "%s: Missing version for \"-V\"."
 msgstr "%s: Пропущена версия для \"-V\"."
 
-
 #, c-format
 msgid "%s: Need job ID (\"-i jobid\") before \"-H restart\"."
 msgstr "%s: Необходимо указать ID задания (\"-i jobid\") перед \"-H restart\"."
 
-
-
 #, c-format
 msgid "%s: No filter to convert from %s/%s to %s/%s."
 msgstr ""
@@ -1840,6 +1857,9 @@ msgstr "%s: Операция не удалась: %s"
 msgid "%s: Sorry, no encryption support."
 msgstr "%s:  Нет поддержки шифрования."
 
+#, c-format
+msgid "%s: Unable to connect to \"%s:%d\": %s"
+msgstr ""
 
 #, c-format
 msgid "%s: Unable to connect to server."
@@ -1849,6 +1869,10 @@ msgstr "%s: Не удается подключиться к серверу."
 msgid "%s: Unable to contact server."
 msgstr "%s: Не удается установить связь с сервером."
 
+#, c-format
+msgid "%s: Unable to create PPD file: %s"
+msgstr ""
+
 #, c-format
 msgid "%s: Unable to determine MIME type of \"%s\"."
 msgstr "%s: Не удается определить тип MIME \"%s\"."
@@ -1869,17 +1893,18 @@ msgstr "%s: Не удается открыть PPD-файл: %s в строке
 msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"."
 msgstr "%s: Не удается прочитать базу данных MIME из \"%s\" или \"%s\"."
 
+#, c-format
+msgid "%s: Unable to resolve \"%s\"."
+msgstr ""
 
 #, c-format
 msgid "%s: Unknown destination \"%s\"."
 msgstr "%s: Неизвестное назначение \"%s\"."
 
-
 #, c-format
 msgid "%s: Unknown destination MIME type %s/%s."
 msgstr "%s: Неизвестный MIME-тип назначения %s/%s."
 
-
 #, c-format
 msgid "%s: Unknown option \"%c\"."
 msgstr "%s: Неизвестный параметр \"%c\"."
@@ -1904,7 +1929,6 @@ msgstr ""
 "%s: Внимание - модификатор формата \"%c\" не поддерживается - вывод может "
 "быть неправильным."
 
-
 #, c-format
 msgid "%s: Warning - character set option ignored."
 msgstr "%s: Внимание - параметр набора символов пропущен."
@@ -3220,6 +3244,9 @@ msgstr "Epson"
 msgid "Error Policy"
 msgstr "Политика ошибок"
 
+msgid "Error reading raster data."
+msgstr ""
+
 msgid "Error sending raster data."
 msgstr "Ошибка отправки данных растра."
 
@@ -3786,7 +3813,8 @@ msgid "No destinations added."
 msgstr "Нет добавленных назначений."
 
 msgid "No device URI found in argv[0] or in DEVICE_URI environment variable."
-msgstr "Не обнаружено URI устройства в argv[0] или в переменной окружения DEVICE_URI"
+msgstr ""
+"Не обнаружено URI устройства в argv[0] или в переменной окружения DEVICE_URI"
 
 msgid "No error-index"
 msgstr "Нет значения error-index"
@@ -3876,8 +3904,8 @@ msgid ""
 "Note: this program only validates the DSC comments, not the PostScript "
 "itself."
 msgstr ""
-"Примечание: данная программа проверяет только комментарии DSC, а не "
-"сам PostScript."
+"Примечание: данная программа проверяет только комментарии DSC, а не сам "
+"PostScript."
 
 msgid "OK"
 msgstr "ОК"
@@ -4110,7 +4138,8 @@ msgid "Quota limit reached."
 msgstr "Предел квоты достигнут."
 
 msgid "Rank    Owner   Job     File(s)                         Total Size"
-msgstr "Ранг    Владелец   Задание     Файл(ы)                     Общий размер"
+msgstr ""
+"Ранг    Владелец   Задание     Файл(ы)                     Общий размер"
 
 msgid "Reject Jobs"
 msgstr "Отклонить задания"
@@ -4267,10 +4296,8 @@ msgstr "Атрибут %s не может быть использован с job
 
 #, c-format
 msgid ""
-"The '%s' Job Description attribute cannot be supplied in a job creation "
-"request."
-msgstr "Атрибут '%s' Job Description не может быть подставлен при создании"
-"задания"
+"The '%s' Job Status attribute cannot be supplied in a job creation request."
+msgstr ""
 
 #, c-format
 msgid ""
@@ -4555,8 +4582,9 @@ msgid "Unable to connect to host."
 msgstr "Не удается подключиться к хосту."
 
 msgid "Unable to contact printer, queuing on next printer in class."
-msgstr "Не удается установить связь с принтером, постановка в очередь на "
-"следующем принтере в группе."
+msgstr ""
+"Не удается установить связь с принтером, постановка в очередь на следующем "
+"принтере в группе."
 
 #, c-format
 msgid "Unable to copy 64-bit CUPS printer driver files (%d)."
@@ -4564,7 +4592,8 @@ msgstr "Не удается копировать 64-битовые файлы д
 
 #, c-format
 msgid "Unable to copy 64-bit Windows printer driver files (%d)."
-msgstr "Не удается копировать 64-битовые файлы драйвера принтера для Windows (%d)."
+msgstr ""
+"Не удается копировать 64-битовые файлы драйвера принтера для Windows (%d)."
 
 #, c-format
 msgid "Unable to copy CUPS printer driver files (%d)."
@@ -4625,14 +4654,15 @@ msgid "Unable to establish a secure connection to host (expired certificate)."
 msgstr "Не удается установить защищенное соединение (сертификат просрочен)."
 
 msgid "Unable to establish a secure connection to host (host name mismatch)."
-msgstr "Не удается установить защищенное соединение (несовпадение имени хоста)."
+msgstr ""
+"Не удается установить защищенное соединение (несовпадение имени хоста)."
 
 msgid ""
 "Unable to establish a secure connection to host (peer dropped connection "
 "before responding)."
 msgstr ""
-"Не удается установить защищенное соединение (соединение разорвано "
-"Ñ\83даленной Ñ\81Ñ\82оÑ\80оной.)
+"Не удается установить защищенное соединение (соединение разорвано удаленной "
+"Ñ\81Ñ\82оÑ\80оной.)"
 
 msgid ""
 "Unable to establish a secure connection to host (self-signed certificate)."
@@ -4641,8 +4671,7 @@ msgstr ""
 
 msgid ""
 "Unable to establish a secure connection to host (untrusted certificate)."
-msgstr ""
-"Не удается установить защищенное соединение (ненадежный сертификат)."
+msgstr "Не удается установить защищенное соединение (ненадежный сертификат)."
 
 msgid "Unable to establish a secure connection to host."
 msgstr "Не удается установить защищенное соединение."
@@ -4738,6 +4767,9 @@ msgstr "Не удается напечатать пробную страницу
 msgid "Unable to read print data."
 msgstr "Не удается считать данные печати."
 
+msgid "Unable to rename job document file."
+msgstr ""
+
 msgid "Unable to resolve printer-uri."
 msgstr "Не удается определить printer-uri"
 
@@ -4883,18 +4915,20 @@ msgstr "Неподдерживаемое значение бумаги."
 
 #, c-format
 msgid "Unsupported number-up value %d, using number-up=1."
-msgstr "Неподдерживаемое значение number-up %d, используется значение "
-"number-up=1."
+msgstr ""
+"Неподдерживаемое значение number-up %d, используется значение number-up=1."
 
 #, c-format
 msgid "Unsupported number-up-layout value %s, using number-up-layout=lrtb."
-msgstr "Неподдерживаемое значение number-up-layout %s, используется "
-"значение number-up-layout=lrtb."
+msgstr ""
+"Неподдерживаемое значение number-up-layout %s, используется значение number-"
+"up-layout=lrtb."
 
 #, c-format
 msgid "Unsupported page-border value %s, using page-border=none."
-msgstr "Неподдерживаемое значение page-border %s, используется значение "
-"page-border=none."
+msgstr ""
+"Неподдерживаемое значение page-border %s, используется значение page-"
+"border=none."
 
 msgid "Unsupported raster data."
 msgstr "Неподдерживаемые данные растра."
@@ -5095,7 +5129,9 @@ msgid "cupsd: Expected cups-files.conf filename after \"-s\" option."
 msgstr "cupsd: Пропущено имя файла cups-files.conf после параметра \"-s\""
 
 msgid "cupsd: On-demand support not compiled in, running in normal mode."
-msgstr "cupsd: Поддержка запуска \"по запросу\" не включена, запуск в нормальном режиме."
+msgstr ""
+"cupsd: Поддержка запуска \"по запросу\" не включена, запуск в нормальном "
+"режиме."
 
 msgid "cupsd: Relative cups-files.conf filename not allowed."
 msgstr ""
@@ -5355,6 +5391,10 @@ msgstr ""
 "lpadmin: Не удается удалить параметр:\n"
 "\t  Необходимо сначала указать имя принтера."
 
+#, c-format
+msgid "lpadmin: Unable to open PPD \"%s\": %s on line %d."
+msgstr ""
+
 #, c-format
 msgid "lpadmin: Unable to open PPD file \"%s\" - %s"
 msgstr "lpadmin: Не удается открыть PPD-файл \"%s\" - %s"
@@ -5516,7 +5556,8 @@ msgstr "ppdc: Недопустимая замена переменной ($%c) 
 
 #, c-format
 msgid "ppdc: Choice found on line %d of %s with no Option."
-msgstr "ppdc: В строке %d из %s обнаружено значение, не привязанное к параметру"
+msgstr ""
+"ppdc: В строке %d из %s обнаружено значение, не привязанное к параметру"
 
 #, c-format
 msgid "ppdc: Duplicate #po for locale %s on line %d of %s."
@@ -5548,8 +5589,8 @@ msgstr "ppdc: В строке %d из %s должно быть имя/текст
 
 #, c-format
 msgid "ppdc: Expected color order for ColorModel on line %d of %s."
-msgstr "ppdc: После ColorModel в строке %d из %s должна быть указана цветовая "
-"схема."
+msgstr ""
+"ppdc: После ColorModel в строке %d из %s должна быть указана цветовая схема."
 
 #, c-format
 msgid "ppdc: Expected colorspace for ColorModel on line %d of %s."
@@ -5561,15 +5602,16 @@ msgstr "ppdc: Для ColorModel в строке %d из %s должно быть
 
 #, c-format
 msgid "ppdc: Expected constraints string for UIConstraints on line %d of %s."
-msgstr "ppdc: Для UIConstraints в строке %d из %s должна быть указана строка "
+msgstr ""
+"ppdc: Для UIConstraints в строке %d из %s должна быть указана строка "
 "ограничений."
 
 #, c-format
 msgid ""
 "ppdc: Expected driver type keyword following DriverType on line %d of %s."
 msgstr ""
-"ppdc: После DriverType в строке %d из %s должно быть указано ключевое "
-"Ñ\81лово Ñ\82ипа Ð´Ñ\80айвеÑ\80а."
+"ppdc: После DriverType в строке %d из %s должно быть указано ключевое слово "
+"типа драйвера."
 
 #, c-format
 msgid "ppdc: Expected duplex type after Duplex on line %d of %s."
@@ -5633,13 +5675,13 @@ msgstr "ppdc: После %s в строке %d из %s должно быть у
 
 #, c-format
 msgid "ppdc: Expected name/text after Installable on line %d of %s."
-msgstr "
+msgstr ""
 "ppdc: После Installable в строке %d из %s должно быть указано имя/текст."
 
 #, c-format
 msgid "ppdc: Expected name/text after Resolution on line %d of %s."
 msgstr ""
-"ppdc: После Resolution в строке %d из %s должно быть указано имя/текст.
+"ppdc: После Resolution в строке %d из %s должно быть указано имя/текст."
 
 #, c-format
 msgid "ppdc: Expected name/text combination for ColorModel on line %d of %s."
@@ -5661,8 +5703,7 @@ msgstr "ppdc: В строке %d из %s должен быть указан ти
 #, c-format
 msgid "ppdc: Expected override field after Resolution on line %d of %s."
 msgstr ""
-"ppdc: После Resolution в строке %d из %s должно быть поле "
-"переопределения.
+"ppdc: После Resolution в строке %d из %s должно быть поле переопределения."
 
 #, c-format
 msgid "ppdc: Expected quoted string on line %d of %s."
@@ -5676,8 +5717,8 @@ msgstr "ppdc: В строке %d из %s должно быть действит
 msgid ""
 "ppdc: Expected resolution/mediatype following ColorProfile on line %d of %s."
 msgstr ""
-"ppdc: После ColorProfile в строке %d из %s должно быть указано "
-"Ñ\80азÑ\80еÑ\88ение/Ñ\82ип Ð½Ð¾Ñ\81иÑ\82елÑ\8f."
+"ppdc: После ColorProfile в строке %d из %s должно быть указано разрешение/"
+"тип носителя."
 
 #, c-format
 msgid ""
@@ -5729,8 +5770,7 @@ msgstr "ppdc: Недопустимый пустой MIME-тип для филь
 
 #, c-format
 msgid "ppdc: Invalid empty program name for filter on line %d of %s."
-msgstr ""
-"ppdc: Недопустимое пустое имя программы для фильтра в строке %d из %s."
+msgstr "ppdc: Недопустимое пустое имя программы для фильтра в строке %d из %s."
 
 #, c-format
 msgid "ppdc: Invalid option section \"%s\" on line %d of %s."
@@ -5763,8 +5803,7 @@ msgstr "ppdc: Отсутствует #if в строке %d из %s."
 #, c-format
 msgid ""
 "ppdc: Need a msgid line before any translation strings on line %d of %s."
-msgstr ""
-"ppdc: Требуется строка msgid перед строкой перевода в строке %d из %s"
+msgstr "ppdc: Требуется строка msgid перед строкой перевода в строке %d из %s"
 
 #, c-format
 msgid "ppdc: No message catalog provided for locale %s."
@@ -5772,8 +5811,7 @@ msgstr "ppdc: Не указан каталог сообщений для рег
 
 #, c-format
 msgid "ppdc: Option %s defined in two different groups on line %d of %s."
-msgstr ""
-"ppdc: Параметр %s определен в двух разных группах в строке %d из %s."
+msgstr "ppdc: Параметр %s определен в двух разных группах в строке %d из %s."
 
 #, c-format
 msgid "ppdc: Option %s redefined with a different type on line %d of %s."
@@ -5782,8 +5820,7 @@ msgstr "ppdc: Для параметра %s определен другой ти
 #, c-format
 msgid "ppdc: Option constraint must *name on line %d of %s."
 msgstr ""
-"ppdc: Для ограничения параметра должно быть указано *name в строке %d из "
-"%s."
+"ppdc: Для ограничения параметра должно быть указано *name в строке %d из %s."
 
 #, c-format
 msgid "ppdc: Too many nested #if's on line %d of %s."
@@ -5857,8 +5894,8 @@ msgstr "ppdc: Неизвестный маркер  \"%s\" в строке %d и
 msgid ""
 "ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s."
 msgstr ""
-"ppdc: Неизвестные конечные символы в вещественном числе \"%s\" в строке "
-"%d из %s."
+"ppdc: Неизвестные конечные символы в вещественном числе \"%s\" в строке %d "
+"из %s."
 
 #, c-format
 msgid "ppdc: Unterminated string starting with %c on line %d of %s."
@@ -5955,3 +5992,18 @@ msgstr "новый"
 msgid "variable-bindings uses indefinite length"
 msgstr "Для variable-bindings длина не установлена"
 
+#~ msgid "      %s  Missing \"%s\" translation string for option %s"
+#~ msgstr "\t%s Перевод \"%s\" отсутствует для параметра %s"
+
+#~ msgid ""
+#~ "    Missing %%EndComments comment.\n"
+#~ "        REF: Page 41, %%EndComments"
+#~ msgstr ""
+#~ "    Комментарий %%EndComments отсутствует.\n"
+#~ "        REF: Стр. 41, %%EndComments"
+
+#~ msgid ""
+#~ "The '%s' Job Description attribute cannot be supplied in a job creation "
+#~ "request."
+#~ msgstr ""
+#~ "Атрибут '%s' Job Description не может быть подставлен при созданиизадания"
index 15feafab227a24ac28c8b52e453c544266f3d0c7..dc1a8c0a4f57edcd6f52c93259df941af9d0656e 100644 (file)
@@ -1,9 +1,9 @@
 #
-# "$Id: Makefile 12815 2015-07-30 15:03:38Z msweet $"
+# "$Id: Makefile 11919 2014-06-11 15:38:28Z msweet $"
 #
 # Man page makefile for CUPS.
 #
-# Copyright 2007-2015 by Apple Inc.
+# Copyright 2007-2014 by Apple Inc.
 # Copyright 1993-2006 by Easy Software Products.
 #
 # These coded instructions, statements, and computer programs are the
@@ -43,7 +43,6 @@ MAN5  =       classes.conf.$(MAN5EXT) \
                cups-files.conf.$(MAN5EXT) \
                cups-snmp.conf.$(MAN5EXT) \
                cupsd.conf.$(MAN5EXT) \
-               cupsd-logs.$(MAN5EXT) \
                ipptoolfile.$(MAN5EXT) \
                mailto.conf.$(MAN5EXT) \
                mime.convs.$(MAN5EXT) \
@@ -62,6 +61,7 @@ MAN8  =       cupsaccept.$(MAN8EXT) \
                cups-snmp.$(MAN8EXT) \
                cupsd.$(MAN8EXT) \
                cupsd-helper.$(MAN8EXT) \
+               cupsd-logs.$(MAN8EXT) \
                cupsenable.$(MAN8EXT) \
                lpadmin.$(MAN8EXT) \
                lpinfo.$(MAN8EXT) \
@@ -228,5 +228,5 @@ mantohtml:  mantohtml.o ../cups/$(LIBCUPSSTATIC)
 
 
 #
-# End of "$Id: Makefile 12815 2015-07-30 15:03:38Z msweet $".
+# End of "$Id: Makefile 11919 2014-06-11 15:38:28Z msweet $".
 #
index 30e0d1ea0317b7aeb9126ab61187920543744299..ae6cdb05eb6c3a182b2dc6a00d84776f08dad7b3 100644 (file)
@@ -1,9 +1,9 @@
 .\"
-.\" "$Id: client.conf.man.in 12215 2014-10-20 18:24:56Z msweet $"
+.\" "$Id: client.conf.man.in 12645 2015-05-20 01:20:52Z msweet $"
 .\"
 .\" client.conf man page for CUPS.
 .\"
-.\" Copyright 2007-2014 by Apple Inc.
+.\" Copyright 2007-2015 by Apple Inc.
 .\" Copyright 2006 by Easy Software Products.
 .\"
 .\" These coded instructions, statements, and computer programs are the
 .\" which should have been included with this file.  If this file is
 .\" file is missing or damaged, see the license at "http://www.cups.org/".
 .\"
-.TH client.conf 5 "CUPS" "20 October 2014" "Apple Inc."
+.TH client.conf 5 "CUPS" "19 May 2015" "Apple Inc."
 .SH NAME
 client.conf \- client configuration file for cups (deprecated)
 .SH DESCRIPTION
 The \fBclient.conf\fR file configures the CUPS client and is normally located in the \fI/etc/cups\fR and/or \fI~/.cups\fR directories.
 Each line in the file can be a configuration directive, a blank line, or a comment. Comment lines start with the # character.
 .LP
-\fBNote:\fR Starting with OS X 10.7, this file is only used by command-line and X11 applications.
+\fBNote:\fR Starting with OS X 10.7, this file is only used by command-line and X11 applications plus the IPP backend.
 The \fBServerName\fR directive is not supported on OS X at all.
 .SS DIRECTIVES
 The following directives are understood by the client. Consult the online help for detailed descriptions:
@@ -56,13 +56,15 @@ Specifies the address and optionally the port to use when connecting to the serv
 \fBServerName \fIhostname-or-ip-address\fR[\fI:port\fR]\fB/version=1.1\fR
 Specifies the address and optionally the port to use when connecting to a server running CUPS 1.3.12 and earlier.
 .TP 5
-\fBSSLOptions \fR[\fIAllowRC4\fR] [\fIAllowSSL3\fR]
+\fBSSLOptions \fR[\fIAllowDH\fR] [\fIAllowRC4\fR] [\fIAllowSSL3\fR] [\fIDenyTLS1.0\fR]
 .TP 5
 \fBSSLOptions None\fR
 Sets encryption options (only in /etc/cups/client.conf).
 By default, CUPS only supports encryption using TLS v1.0 or higher using known secure cipher suites.
+The \fIAllowDH\fR option enables cipher suites using plain Diffie-Hellman key negotiation.
 The \fIAllowRC4\fR option enables the 128-bit RC4 cipher suites, which are required for some older clients that do not implement newer ones.
 The \fIAllowSSL3\fR option enables SSL v3.0, which is required for some older clients that do not support TLS v1.0.
+The \fIDenyTLS1.0\fR option disables TLS v1.0 support - this sets the minimum protocol version to TLS v1.1.
 .TP 5
 \fBUser \fIname\fR
 Specifies the default user name to use for requests.
@@ -78,7 +80,7 @@ The \fBclient.conf\fR file is deprecated and will no longer be supported in a fu
 .BR cups (1),
 CUPS Online Help (http://localhost:631/help)
 .SH COPYRIGHT
-Copyright \[co] 2007-2014 by Apple Inc.
+Copyright \[co] 2007-2015 by Apple Inc.
 .\"
-.\" End of "$Id: client.conf.man.in 12215 2014-10-20 18:24:56Z msweet $".
+.\" End of "$Id: client.conf.man.in 12645 2015-05-20 01:20:52Z msweet $".
 .\"
index a8daf8d3f6cd275785e2b30242166dc62ef0a989..8603754e7b18f60c185d850bcb6e1ab91d98fe33 100644 (file)
@@ -1,5 +1,5 @@
 .\"
-.\" "$Id: cups-files.conf.man.in 12477 2015-02-02 18:38:25Z msweet $"
+.\" "$Id: cups-files.conf.man.in 12699 2015-06-08 18:16:30Z msweet $"
 .\"
 .\" cups-files.conf man page for CUPS.
 .\"
@@ -12,7 +12,7 @@
 .\" which should have been included with this file.  If this file is
 .\" file is missing or damaged, see the license at "http://www.cups.org/".
 .\"
-.TH cups-files.conf 5 "CUPS" "2 February 2015" "Apple Inc."
+.TH cups-files.conf 5 "CUPS" "3 June 2015" "Apple Inc."
 .SH NAME
 cups\-files.conf \- file and directory configuration file for cups
 .SH DESCRIPTION
@@ -33,9 +33,12 @@ The following directives are understood by
 .TP 5
 \fBAccessLog \fIfilename\fR
 .TP 5
+\fBAccessLog stderr\fR
+.TP 5
 \fBAccessLog syslog\fR
 Defines the access log filename.
 Specifying a blank filename disables access log generation.
+The value "stderr" causes log entries to be sent to the standard error file when the scheduler is running in the foreground, or to the system log daemon when run in the background.
 The value "syslog" causes log entries to be sent to the system log daemon.
 The server name may be included in filenames using the string "%s", for example:
 .nf
@@ -69,9 +72,12 @@ The default is usually "/usr/share/doc/cups".
 .TP 5
 \fBErrorLog \fIfilename\fR
 .TP 5
+\fBErrorLog stderr\fR
+.TP 5
 \fBErrorLog syslog\fR
 Defines the error log filename.
 Specifying a blank filename disables error log generation.
+The value "stderr" causes log entries to be sent to the standard error file when the scheduler is running in the foreground, or to the system log daemon when run in the background.
 The value "syslog" causes log entries to be sent to the system log daemon.
 The server name may be included in filenames using the string "%s", for example:
 .nf
@@ -134,8 +140,11 @@ The default is "0644".
 .TP 5
 \fBPageLog \fR[ \fIfilename\fR ]
 .TP 5
+\fBPageLog stderr\fR
+.TP 5
 \fBPageLog syslog\fR
 Defines the page log filename.
+The value "stderr" causes log entries to be sent to the standard error file when the scheduler is running in the foreground, or to the system log daemon when run in the background.
 The value "syslog" causes log entries to be sent to the system log daemon.
 Specifying a blank filename disables page log generation.
 The server name may be included in filenames using the string "%s", for example:
@@ -157,8 +166,6 @@ Specifies the directory that contains print jobs and other HTTP request data.
 The default is "/var/spool/cups".
 .\"#Sandboxing
 .TP 5
-\fBSandboxing off\fR
-.TP 5
 \fBSandboxing relaxed\fR
 .TP 5
 \fBSandboxing strict\fR
@@ -218,5 +225,5 @@ CUPS Online Help (http://localhost:631/help)
 .SH COPYRIGHT
 Copyright \[co] 2007-2015 by Apple Inc.
 .\"
-.\" End of "$Id: cups-files.conf.man.in 12477 2015-02-02 18:38:25Z msweet $".
+.\" End of "$Id: cups-files.conf.man.in 12699 2015-06-08 18:16:30Z msweet $".
 .\"
index 97238426ff102d2afbe4a132ed173fe70332392b..13de1269400928d95acafcea76aac7095732fbf2 100644 (file)
@@ -1,9 +1,9 @@
 .\"
-.\" "$Id: cupsd.conf.man.in 12769 2015-06-30 16:13:48Z msweet $"
+.\" "$Id: cupsd.conf.man.in 12362 2014-12-12 19:50:49Z msweet $"
 .\"
 .\" cupsd.conf man page for CUPS.
 .\"
-.\" Copyright 2007-2015 by Apple Inc.
+.\" Copyright 2007-2014 by Apple Inc.
 .\" Copyright 1997-2006 by Easy Software Products.
 .\"
 .\" These coded instructions, statements, and computer programs are the
@@ -12,7 +12,7 @@
 .\" which should have been included with this file.  If this file is
 .\" file is missing or damaged, see the license at "http://www.cups.org/".
 .\"
-.TH cupsd.conf 5 "CUPS" "30 June 2015" "Apple Inc."
+.TH cupsd.conf 5 "CUPS" "20 October 2014" "Apple Inc."
 .SH NAME
 cupsd.conf \- server configuration file for cups
 .SH DESCRIPTION
@@ -369,8 +369,7 @@ The following percent sequences are recognized:
     "%u" inserts the username.
 
 .fi
-The default is the empty string, which disables page logging.
-The string "%p %u %j %T %P %C %{job-billing} %{job-originating-host-name} %{job-name} %{media} %{sides}" creates a page log with the standard items.
+The default is "%p %u %j %T %P %C %{job-billing} %{job-originating-host-name} %{job-name} %{media} %{sides}".
 .\"#PassEnv
 .TP 5
 \fBPassEnv \fIvariable \fR[ ... \fIvariable \fR]
@@ -870,7 +869,7 @@ Require authentication for accesses from outside the 10. network:
 .BR subscriptions.conf (5),
 CUPS Online Help (http://localhost:631/help)
 .SH COPYRIGHT
-Copyright \[co] 2007-2015 by Apple Inc.
+Copyright \[co] 2007-2014 by Apple Inc.
 .\"
-.\" End of "$Id: cupsd.conf.man.in 12769 2015-06-30 16:13:48Z msweet $".
+.\" End of "$Id: cupsd.conf.man.in 12362 2014-12-12 19:50:49Z msweet $".
 .\"
index 0b441dd4ca8d4e8eb3537bd583ebf1a42d8b61b6..b04d2480971d1dceb05856f5c95a7d6aac3e0d3f 100644 (file)
@@ -1,9 +1,9 @@
 .\"
-.\" "$Id: ipptool.man 12140 2014-08-30 01:51:22Z msweet $"
+.\" "$Id: ipptool.man 12484 2015-02-03 19:25:57Z msweet $"
 .\"
 .\" ipptool man page for CUPS.
 .\"
-.\" Copyright 2010-2014 by Apple Inc.
+.\" Copyright 2010-2015 by Apple Inc.
 .\"
 .\" These coded instructions, statements, and computer programs are the
 .\" property of Apple Inc. and are protected by Federal copyright
@@ -11,7 +11,7 @@
 .\" which should have been included with this file.  If this file is
 .\" file is missing or damaged, see the license at "http://www.cups.org/".
 .\"
-.TH ipptool 1 "CUPS" "29 August 2014" "Apple Inc."
+.TH ipptool 1 "CUPS" "3 February 2015" "Apple Inc."
 .SH NAME
 ipptool \- perform internet printing protocol requests
 .SH SYNOPSIS
@@ -242,7 +242,7 @@ IANA IPP Registry (http://www.iana.org/assignments/ipp\-registrations),
 PWG Internet Printing Protocol Workgroup (http://www.pwg.org/ipp)
 RFC 2911 (http://tools.ietf.org/html/rfc2911),
 .SH COPYRIGHT
-Copyright \[co] 2007-2014 by Apple Inc.
+Copyright \[co] 2007-2015 by Apple Inc.
 .\"
-.\" End of "$Id: ipptool.man 12140 2014-08-30 01:51:22Z msweet $".
+.\" End of "$Id: ipptool.man 12484 2015-02-03 19:25:57Z msweet $".
 .\"
index 2021184d2f3db4398bca517ebf499597ffcf1749..f9c5c41fb188d4d4e7bda8db85f74a5bd993125f 100644 (file)
@@ -1,5 +1,5 @@
 .\"
-.\" "$Id: ipptoolfile.man 11880 2014-05-16 06:14:11Z msweet $"
+.\" "$Id: ipptoolfile.man 12487 2015-02-05 15:42:59Z msweet $"
 .\"
 .\" ipptoolfile man page for CUPS.
 .\"
@@ -11,7 +11,7 @@
 .\" which should have been included with this file.  If this file is
 .\" file is missing or damaged, see the license at "http://www.cups.org/".
 .\"
-.TH ipptoolfile 5 "CUPS" "15 May 2014" "Apple Inc."
+.TH ipptoolfile 5 "CUPS" "4 February 2015" "Apple Inc."
 .SH NAME
 ipptoolfile \- ipptool file format
 .SH DESCRIPTION
@@ -168,6 +168,11 @@ test report.
 \fBEXPECT !\fIattribute-name\fR
 Specifies that the response must/may/must not include the named attribute. Additional requirements can be added as predicates - see the "EXPECT PREDICATES" section for more information on predicates. Attribute names can specify member attributes by separating the attribute and member names with the forward slash, for example "media\-col/media\-size/x\-dimension".
 .TP 5
+\fBEXPECT-ALL \fIattribute-name \fR[ \fIpredicate(s) \fR]
+.TP 5
+\fBEXPECT-ALL ?\fIattribute-name predicate(s)\fR
+Specifies that the response must/may include the named attribute and that all occurrences of that attribute must match the given predicates.
+.TP 5
 \fBFILE filename\fR
 Specifies a file to include at the end of the request. This is typically used when sending a test print file.
 .TP 5
@@ -345,6 +350,10 @@ Requires that at least one value of the \fBEXPECT\fR attribute matches the boole
 .TP 5
 \fBWITH\-VALUE "/\fIregular expression\fB/"\fR
 Requires that at least one value of the \fBEXPECT\fR attribute matches the regular expression, which must conform to the POSIX regular expression syntax. Comparisons are case-sensitive.
+.TP 5
+\fBWITH\-VALUE\-FROM \fIattribute-name\fR
+Requires that the value(s) of the \fBEXPECT\fR attribute matches the value(s) in the specified attribute.
+For example, "EXPECT job\-sheets WITH\-VALUE\-FROM job\-sheets\-supported" requires that the "job\-sheets" value is listed as a value of the "job\-sheets\-supported" attribute.
 .SS STATUS PREDICATES
 The following predicates are understood following the \fBSTATUS\fR test directive:
 .TP 5
@@ -610,7 +619,7 @@ IANA IPP Registry (http://www.iana.org/assignments/ipp-registrations),
 PWG Internet Printing Protocol Workgroup (http://www.pwg.org/ipp),
 RFC 2911 (http://tools.ietf.org/html/rfc3911)
 .SH COPYRIGHT
-Copyright \[co] 2007-2014 by Apple Inc.
+Copyright \[co] 2007-2015 by Apple Inc.
 .\"
-.\" End of "$Id: ipptoolfile.man 11880 2014-05-16 06:14:11Z msweet $".
+.\" End of "$Id: ipptoolfile.man 12487 2015-02-05 15:42:59Z msweet $".
 .\"
index a89e6a5d4458001c85584cdc4589a97a71a25622..1790022d1d92b6164b46f987bb88006504e9e118 100644 (file)
@@ -1,9 +1,9 @@
 .\"
-.\" "$Id: lpadmin.man 11922 2014-06-11 23:35:37Z msweet $"
+.\" "$Id: lpadmin.man 12513 2015-02-11 19:45:01Z msweet $"
 .\"
 .\" lpadmin man page for CUPS.
 .\"
-.\" Copyright 2007-2014 by Apple Inc.
+.\" Copyright 2007-2015 by Apple Inc.
 .\" Copyright 1997-2006 by Easy Software Products.
 .\"
 .\" These coded instructions, statements, and computer programs are the
@@ -12,7 +12,7 @@
 .\" which should have been included with this file.  If this file is
 .\" file is missing or damaged, see the license at "http://www.cups.org/".
 .\"
-.TH lpadmin 8 "CUPS" "11 June 2014" "Apple Inc."
+.TH lpadmin 8 "CUPS" "11 February 2015" "Apple Inc."
 .SH NAME
 lpadmin \- configure cups printers and classes
 .SH SYNOPSIS
@@ -91,6 +91,7 @@ Sets a standard System V interface script or PPD file for the printer from the \
 Use the \fI-m\fR option with the
 .BR lpinfo (8)
 command to get a list of supported models.
+The model "raw" clears any existing interface script or PPD file and the model "everywhere" queries the printer referred to by the specified IPP \fIdevice-uri\fR.
 .TP 5
 \fB\-o cupsIPPSupplies=true\fR
 .TP 5
@@ -199,6 +200,13 @@ Finally, the CUPS version of \fBlpadmin\fR may ask the user for an access passwo
 This differs from the System V version which requires the root user to execute this command.
 .SH NOTES
 The CUPS version of \fBlpadmin\fR does not support all of the System V or Solaris printing system configuration options.
+.SH EXAMPLE
+Create an IPP Everywhere print queue:
+.nf
+
+    lpadmin -p myprinter -E -v ipp://myprinter.local/ipp/print -m everywhere
+
+.fi
 .SH SEE ALSO
 .BR cupsaccept (8),
 .BR cupsenable (8),
@@ -206,7 +214,7 @@ The CUPS version of \fBlpadmin\fR does not support all of the System V or Solari
 .BR lpoptions (1),
 CUPS Online Help (http://localhost:631/help)
 .SH COPYRIGHT
-Copyright \[co] 2007-2014 by Apple Inc.
+Copyright \[co] 2007-2015 by Apple Inc.
 .\"
-.\" End of "$Id: lpadmin.man 11922 2014-06-11 23:35:37Z msweet $".
+.\" End of "$Id: lpadmin.man 12513 2015-02-11 19:45:01Z msweet $".
 .\"
index 798b03ebca2dfd8ef96f974e8585f45dc55906e1..11ae93ab238e411432a59e64fb0a493b1a2445a2 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: mantohtml.c 12363 2014-12-12 19:51:33Z msweet $"
+ * "$Id: mantohtml.c 12362 2014-12-12 19:50:49Z msweet $"
  *
  * Man page to HTML conversion program.
  *
@@ -1221,5 +1221,5 @@ strmove(char       *d,                    /* I - Destination */
 
 
 /*
- * End of "$Id: mantohtml.c 12363 2014-12-12 19:51:33Z msweet $".
+ * End of "$Id: mantohtml.c 12362 2014-12-12 19:50:49Z msweet $".
  */
index 7ddcc52124d8122e005842f318f22ba8a27d1451..befa11703040f4991228375da97922a5a5839736 100644 (file)
@@ -1,5 +1,5 @@
 #
-# "$Id: cups.spec.in 12770 2015-06-30 16:17:56Z msweet $"
+# "$Id: cups.spec.in 12713 2015-06-08 21:10:09Z msweet $"
 #
 # RPM "spec" file for CUPS.
 #
 
 Summary: CUPS
 Name: cups
-Version: 2.0.4
+Version: 2.1b1
 Release: 1
 Epoch: 1
 License: GPL
 Group: System Environment/Daemons
-Source: http://www.cups.org/software/2.0.4/cups-2.0.4-source.tar.bz2
+Source: http://www.cups.org/software/2.1b1/cups-2.1b1-source.tar.bz2
 Url: http://www.cups.org
 Packager: Anonymous <anonymous@foo.com>
 Vendor: Apple Inc.
@@ -164,7 +164,9 @@ rm -rf $RPM_BUILD_ROOT
 %defattr(-,root,root)
 %dir /etc/cups
 %config(noreplace) /etc/cups/*.conf
+/etc/cups/cups-files.conf.default
 /etc/cups/cupsd.conf.default
+/etc/cups/snmp.conf.default
 %dir /etc/cups/interfaces
 %dir /etc/cups/ppd
 %attr(0700,root,root) %dir /etc/cups/ssl
@@ -399,5 +401,5 @@ rm -rf $RPM_BUILD_ROOT
 
 
 #
-# End of "$Id: cups.spec.in 12770 2015-06-30 16:17:56Z msweet $".
+# End of "$Id: cups.spec.in 12713 2015-06-08 21:10:09Z msweet $".
 #
index 4e8fbfe50a6fe6b02b16dd45f30446c1dd7c422c..4f911783de532c1cae48391c4ca3ac3b40e58b7b 100644 (file)
@@ -1,5 +1,5 @@
 #
-# "$Id: cups.spec.in 12770 2015-06-30 16:17:56Z msweet $"
+# "$Id: cups.spec.in 12713 2015-06-08 21:10:09Z msweet $"
 #
 # RPM "spec" file for CUPS.
 #
@@ -164,7 +164,9 @@ rm -rf $RPM_BUILD_ROOT
 %defattr(-,root,root)
 %dir /etc/cups
 %config(noreplace) /etc/cups/*.conf
+/etc/cups/cups-files.conf.default
 /etc/cups/cupsd.conf.default
+/etc/cups/snmp.conf.default
 %dir /etc/cups/interfaces
 %dir /etc/cups/ppd
 %attr(0700,root,root) %dir /etc/cups/ssl
@@ -399,5 +401,5 @@ rm -rf $RPM_BUILD_ROOT
 
 
 #
-# End of "$Id: cups.spec.in 12770 2015-06-30 16:17:56Z msweet $".
+# End of "$Id: cups.spec.in 12713 2015-06-08 21:10:09Z msweet $".
 #
index 221ea18936d91de30b5de8a0a8147d59564b8793..7ac25eac127a0b597c86a5095dda4561a931e8c9 100644 (file)
@@ -1,5 +1,5 @@
 #
-# "$Id: Makefile 12616 2015-05-06 20:22:01Z msweet $"
+# "$Id: Makefile 12615 2015-05-06 20:21:51Z msweet $"
 #
 # Makefile for the CUPS PPD Compiler.
 #
@@ -388,5 +388,5 @@ include Dependencies
 
 
 #
-# End of "$Id: Makefile 12616 2015-05-06 20:22:01Z msweet $".
+# End of "$Id: Makefile 12615 2015-05-06 20:21:51Z msweet $".
 #
index 7d47d1d79e7b70d8fbb545b6f5acfc39b8107c45..234495ceffb7dcc85bdb21cc3b209ad932812510 100644 (file)
@@ -1,5 +1,5 @@
 //
-// "$Id: ppdhtml.cxx 12634 2015-05-15 19:17:07Z msweet $"
+// "$Id: ppdhtml.cxx 12633 2015-05-15 19:16:58Z msweet $"
 //
 // PPD to HTML utility for the CUPS PPD Compiler.
 //
@@ -187,5 +187,5 @@ usage(void)
 
 
 //
-// End of "$Id: ppdhtml.cxx 12634 2015-05-15 19:17:07Z msweet $".
+// End of "$Id: ppdhtml.cxx 12633 2015-05-15 19:16:58Z msweet $".
 //
index 6a0e72919458d07e001874deb136318b6e4ab70a..ab53bf4f74f91b57293b0aa00d0bce8c12cd5022 100644 (file)
@@ -1,5 +1,5 @@
 //
-// "$Id: ppdpo.cxx 12634 2015-05-15 19:17:07Z msweet $"
+// "$Id: ppdpo.cxx 12633 2015-05-15 19:16:58Z msweet $"
 //
 // PPD file message catalog program for the CUPS PPD Compiler.
 //
@@ -258,5 +258,5 @@ usage(void)
 
 
 //
-// End of "$Id: ppdpo.cxx 12634 2015-05-15 19:17:07Z msweet $".
+// End of "$Id: ppdpo.cxx 12633 2015-05-15 19:16:58Z msweet $".
 //
index 4935feb831ce41ff7ea87a073ba6634bc2885e87..fe1e55536b90e96e3b669b76d811f3e471cfa42a 100644 (file)
@@ -1,5 +1,5 @@
 //
-// "$Id: sample.drv 12105 2014-08-20 15:27:43Z msweet $"
+// "$Id: sample.drv 12201 2014-10-15 19:11:12Z msweet $"
 //
 // Driver info file for CUPS-supplied PPDs.
 //
 #media "w576h468/8.00x6.50\"" 576 468
 
 // Common stuff for all drivers...
-Attribute "cupsVersion" "" "2.0"
+Attribute "cupsVersion" "" "2.1"
 Attribute "FileSystem" "" "False"
 Attribute "LandscapeOrientation" "" "Plus90"
 Attribute "TTRasterizer" "" "Type42"
@@ -1168,5 +1168,5 @@ Version "2.0"
 }
 
 //
-// End of "$Id: sample.drv 12105 2014-08-20 15:27:43Z msweet $".
+// End of "$Id: sample.drv 12201 2014-10-15 19:11:12Z msweet $".
 //
index 3e0884a2110b222791ce53c038b27051cf98a5dc..c7d244dfc8d8b78330d43eb0d6a9fdd14f949f7d 100644 (file)
@@ -1,9 +1,9 @@
 #
-# "$Id: Makefile 12222 2014-10-21 11:55:01Z msweet $"
+# "$Id: Makefile 12519 2015-02-17 13:10:19Z msweet $"
 #
 # Scheduler Makefile for CUPS.
 #
-# Copyright 2007-2014 by Apple Inc.
+# Copyright 2007-2015 by Apple Inc.
 # Copyright 1997-2007 by Easy Software Products, all rights reserved.
 #
 # These coded instructions, statements, and computer programs are the
@@ -402,6 +402,12 @@ cupsfilter:        cupsfilter.o $(LIBCUPSMIME) ../cups/$(LIBCUPS)
        $(RM) convert
        $(LN) cupsfilter convert
 
+cupsfilter-static:     cupsfilter.o libcupsmime.a ../cups/$(LIBCUPSSTATIC)
+       echo Linking $@...
+       $(CC) $(LDFLAGS) -o cupsfilter-static cupsfilter.o libcupsmime.a \
+               ../cups/$(LIBCUPSSTATIC) $(COMMONLIBS) $(LIBZ) $(SSLLIBS) \
+               $(DNSSDLIBS) $(LIBGSSAPI)
+
 
 #
 # Make the device daemon, "cups-deviced".
@@ -548,5 +554,5 @@ include Dependencies
 
 
 #
-# End of "$Id: Makefile 12222 2014-10-21 11:55:01Z msweet $".
+# End of "$Id: Makefile 12519 2015-02-17 13:10:19Z msweet $".
 #
index 3f3f411be839cc14fa7db9af8c5241c0e9955f21..bb75756c25a2c1c8c5c785d638daac27c78f4cd9 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: auth.c 12604 2015-05-06 01:43:05Z msweet $"
+ * "$Id: auth.c 12602 2015-05-05 20:19:35Z msweet $"
  *
  * Authorization routines for the CUPS scheduler.
  *
@@ -2336,5 +2336,5 @@ to64(char          *s,                    /* O - Output string */
 
 
 /*
- * End of "$Id: auth.c 12604 2015-05-06 01:43:05Z msweet $".
+ * End of "$Id: auth.c 12602 2015-05-05 20:19:35Z msweet $".
  */
index 8c67272d42f8aa195288356d4b6cac51aefe6147..22cad512bf9c3c26023c5300a79bb9a4c9543c30 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: client.c 12754 2015-06-24 19:37:53Z msweet $"
+ * "$Id: client.c 12700 2015-06-08 18:32:35Z msweet $"
  *
  * Client routines for the CUPS scheduler.
  *
@@ -2159,9 +2159,6 @@ cupsdSendError(cupsd_client_t *con,       /* I - Connection */
                http_status_t  code,    /* I - Error code */
               int            auth_type)/* I - Authentication type */
 {
-  char location[HTTP_MAX_VALUE];       /* Location field */
-
-
   cupsdLogClient(con, CUPSD_LOG_DEBUG2, "cupsdSendError code=%d, auth_type=%d",
                 code, auth_type);
 
@@ -2194,12 +2191,8 @@ cupsdSendError(cupsd_client_t *con,      /* I - Connection */
   * never disable it in that case.
   */
 
-  strlcpy(location, httpGetField(con->http, HTTP_FIELD_LOCATION), sizeof(location));
-
   httpClearFields(con->http);
 
-  httpSetField(con->http, HTTP_FIELD_LOCATION, location);
-
   if (code >= HTTP_STATUS_BAD_REQUEST && con->type != CUPSD_AUTH_NEGOTIATE)
     httpSetKeepAlive(con->http, HTTP_KEEPALIVE_OFF);
 
@@ -4072,5 +4065,5 @@ write_pipe(cupsd_client_t *con)           /* I - Client connection */
 
 
 /*
- * End of "$Id: client.c 12754 2015-06-24 19:37:53Z msweet $".
+ * End of "$Id: client.c 12700 2015-06-08 18:32:35Z msweet $".
  */
index b3e6f08211df1515147945070b81a76ee605e085..0d90dde547958b5588ff257a2ec64bf4b3433508 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: colorman.c 12369 2014-12-15 14:51:28Z msweet $"
+ * "$Id: colorman.c 12619 2015-05-06 21:00:19Z msweet $"
  *
  * Color management routines for the CUPS scheduler.
  *
@@ -368,7 +368,7 @@ apple_register_profiles(
   * Make sure ColorSync is available...
   */
 
-  if (ColorSyncRegisterDevice == NULL)
+  if (&ColorSyncRegisterDevice == NULL)
     return;
 
  /*
@@ -868,7 +868,7 @@ apple_unregister_profiles(
   * Make sure ColorSync is available...
   */
 
-  if (ColorSyncUnregisterDevice != NULL)
+  if (&ColorSyncUnregisterDevice != NULL)
   {
     CFUUIDRef deviceUUID;              /* Device UUID */
 
@@ -1519,5 +1519,5 @@ colord_unregister_printer(
 
 
 /*
- * End of "$Id: colorman.c 12369 2014-12-15 14:51:28Z msweet $".
+ * End of "$Id: colorman.c 12619 2015-05-06 21:00:19Z msweet $".
  */
index 17a17fa5fb37dbd479a011cbbc4e08bced025f82..cbd1b7ce36fe060a4a125422cbbe01ad21862a9b 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: conf.c 12701 2015-06-08 18:33:44Z msweet $"
+ * "$Id: conf.c 12689 2015-06-03 19:49:54Z msweet $"
  *
  * Configuration routines for the CUPS scheduler.
  *
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2015 by Apple Inc.
  * Copyright 1997-2007 by Easy Software Products, all rights reserved.
  *
  * These coded instructions, statements, and computer programs are the
 #include <stdarg.h>
 #include <grp.h>
 #include <sys/utsname.h>
+#ifdef HAVE_ASL_H
+#  include <asl.h>
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+#  define SD_JOURNAL_SUPPRESS_LOCATION
+#  include <systemd/sd-journal.h>
+#endif /* HAVE_ASL_H */
 #include <syslog.h>
 
 #ifdef HAVE_LIBPAPER
@@ -269,8 +275,20 @@ cupsdCheckPermissions(
                          "Unable to create directory \"%s\" - %s", filename,
                          strerror(errno));
         else
-         syslog(LOG_ERR, "Unable to create directory \"%s\" - %s", filename,
-                strerror(errno));
+#ifdef HAVE_ASL_H
+        {
+         asl_object_t  m;              /* Log message */
+
+         m = asl_new(ASL_TYPE_MSG);
+         asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+         asl_log(NULL, m, ASL_LEVEL_ERR, "Unable to create directory \"%s\" - %s", filename, strerror(errno));
+         asl_release(m);
+       }
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+         sd_journal_print(LOG_ERR, "Unable to create directory \"%s\" - %s", filename, strerror(errno));
+#else
+         syslog(LOG_ERR, "Unable to create directory \"%s\" - %s", filename, strerror(errno));
+#endif /* HAVE_ASL_H */
 
         return (-1);
       }
@@ -307,7 +325,20 @@ cupsdCheckPermissions(
     if (create_dir >= 0)
       cupsdLogMessage(CUPSD_LOG_ERROR, "\"%s\" is not a directory.", filename);
     else
+#ifdef HAVE_ASL_H
+    {
+      asl_object_t     m;              /* Log message */
+
+      m = asl_new(ASL_TYPE_MSG);
+      asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+      asl_log(NULL, m, ASL_LEVEL_ERR, "\"%s\" is not a directory.", filename);
+      asl_release(m);
+    }
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+      sd_journal_print(LOG_ERR, "\"%s\" is not a directory.", filename);
+#else
       syslog(LOG_ERR, "\"%s\" is not a directory.", filename);
+#endif /* HAVE_ASL_H */
 
     return (-1);
   }
@@ -336,8 +367,20 @@ cupsdCheckPermissions(
                        "Unable to change ownership of \"%s\" - %s", filename,
                        strerror(errno));
       else
-       syslog(LOG_ERR, "Unable to change ownership of \"%s\" - %s", filename,
-              strerror(errno));
+#ifdef HAVE_ASL_H
+      {
+       asl_object_t    m;              /* Log message */
+
+       m = asl_new(ASL_TYPE_MSG);
+       asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+       asl_log(NULL, m, ASL_LEVEL_ERR, "Unable to change ownership of \"%s\" - %s", filename, strerror(errno));
+       asl_release(m);
+      }
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+       sd_journal_print(LOG_ERR, "Unable to change ownership of \"%s\" - %s", filename, strerror(errno));
+#else
+       syslog(LOG_ERR, "Unable to change ownership of \"%s\" - %s", filename, strerror(errno));
+#endif /* HAVE_ASL_H */
 
       return (1);
     }
@@ -356,8 +399,20 @@ cupsdCheckPermissions(
                        "Unable to change permissions of \"%s\" - %s", filename,
                        strerror(errno));
       else
-       syslog(LOG_ERR, "Unable to change permissions of \"%s\" - %s", filename,
-              strerror(errno));
+#ifdef HAVE_ASL_H
+      {
+       asl_object_t    m;              /* Log message */
+
+       m = asl_new(ASL_TYPE_MSG);
+       asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+       asl_log(NULL, m, ASL_LEVEL_ERR, "Unable to change permissions of \"%s\" - %s", filename, strerror(errno));
+       asl_release(m);
+      }
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+       sd_journal_print(LOG_ERR, "Unable to change permissions of \"%s\" - %s", filename, strerror(errno));
+#else
+       syslog(LOG_ERR, "Unable to change permissions of \"%s\" - %s", filename, strerror(errno));
+#endif /* HAVE_ASL_H */
 
       return (1);
     }
@@ -782,8 +837,20 @@ cupsdReadConfiguration(void)
       if (TestConfigFile)
         printf("\"%s\" contains errors.\n", CupsFilesFile);
       else
-        syslog(LOG_LPR, "Unable to read \"%s\" due to errors.",
-               CupsFilesFile);
+#ifdef HAVE_ASL_H
+      {
+       asl_object_t    m;              /* Log message */
+
+       m = asl_new(ASL_TYPE_MSG);
+       asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+       asl_log(NULL, m, ASL_LEVEL_ERR, "Unable to read \"%s\" due to errors.", CupsFilesFile);
+       asl_release(m);
+      }
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+       sd_journal_print(LOG_ERR, "Unable to read \"%s\" due to errors.", CupsFilesFile);
+#else
+        syslog(LOG_LPR, "Unable to read \"%s\" due to errors.", CupsFilesFile);
+#endif /* HAVE_ASL_H */
 
       return (0);
     }
@@ -792,8 +859,20 @@ cupsdReadConfiguration(void)
     cupsdLogMessage(CUPSD_LOG_INFO, "No %s, using defaults.", CupsFilesFile);
   else
   {
-    syslog(LOG_LPR, "Unable to open \"%s\": %s", CupsFilesFile,
-          strerror(errno));
+#ifdef HAVE_ASL_H
+    asl_object_t       m;              /* Log message */
+
+    m = asl_new(ASL_TYPE_MSG);
+    asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+    asl_log(NULL, m, ASL_LEVEL_ERR, "Unable to open \"%s\" - %s", CupsFilesFile, strerror(errno));
+    asl_release(m);
+
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+    sd_journal_print(LOG_ERR, "Unable to open \"%s\" - %s", CupsFilesFile, strerror(errno));
+#else
+    syslog(LOG_LPR, "Unable to open \"%s\" - %s", CupsFilesFile, strerror(errno));
+#endif /* HAVE_ASL_H */
+
     return (0);
   }
 
@@ -806,8 +885,19 @@ cupsdReadConfiguration(void)
 
   if ((fp = cupsFileOpen(ConfigurationFile, "r")) == NULL)
   {
-    syslog(LOG_LPR, "Unable to open \"%s\": %s", ConfigurationFile,
-          strerror(errno));
+#ifdef HAVE_ASL_H
+    asl_object_t       m;              /* Log message */
+
+    m = asl_new(ASL_TYPE_MSG);
+    asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+    asl_log(NULL, m, ASL_LEVEL_ERR, "Unable to open \"%s\" - %s", ConfigurationFile, strerror(errno));
+    asl_release(m);
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+    sd_journal_print(LOG_ERR, "Unable to open \"%s\" - %s", ConfigurationFile, strerror(errno));
+#else
+    syslog(LOG_LPR, "Unable to open \"%s\" - %s", ConfigurationFile, strerror(errno));
+#endif /* HAVE_ASL_H */
+
     return (0);
   }
 
@@ -820,8 +910,20 @@ cupsdReadConfiguration(void)
     if (TestConfigFile)
       printf("\"%s\" contains errors.\n", ConfigurationFile);
     else
-      syslog(LOG_LPR, "Unable to read \"%s\" due to errors.",
-            ConfigurationFile);
+#ifdef HAVE_ASL_H
+    {
+      asl_object_t     m;              /* Log message */
+
+      m = asl_new(ASL_TYPE_MSG);
+      asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+      asl_log(NULL, m, ASL_LEVEL_ERR, "Unable to read \"%s\" due to errors.", ConfigurationFile);
+      asl_release(m);
+    }
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+      sd_journal_print(LOG_ERR, "Unable to read \"%s\" due to errors.", ConfigurationFile);
+#else
+      syslog(LOG_LPR, "Unable to read \"%s\" due to errors.", ConfigurationFile);
+#endif /* HAVE_ASL_H */
 
     return (0);
   }
@@ -948,12 +1050,24 @@ cupsdReadConfiguration(void)
   * Open the system log for cupsd if necessary...
   */
 
-#ifdef HAVE_VSYSLOG
+  if (!LogStderr)
+  {
+    if (!strcmp(AccessLog, "stderr"))
+      cupsdSetString(&AccessLog, "syslog");
+
+    if (!strcmp(ErrorLog, "stderr"))
+      cupsdSetString(&ErrorLog, "syslog");
+
+    if (!strcmp(PageLog, "stderr"))
+      cupsdSetString(&PageLog, "syslog");
+  }
+
+#if defined(HAVE_VSYSLOG) && !defined(HAVE_ASL_H) && !defined(HAVE_SYSTEMD_SD_JOURNAL_H)
   if (!strcmp(AccessLog, "syslog") ||
       !strcmp(ErrorLog, "syslog") ||
       !strcmp(PageLog, "syslog"))
     openlog("cupsd", LOG_PID | LOG_NOWAIT | LOG_NDELAY, LOG_LPR);
-#endif /* HAVE_VSYSLOG */
+#endif /* HAVE_VSYSLOG && !HAVE_ASL_H && !HAVE_SYSTEMD_SD_JOURNAL_H */
 
  /*
   * Make sure each of the log files exists and gets rotated as necessary...
@@ -1182,6 +1296,19 @@ cupsdReadConfiguration(void)
 
   cupsdUpdateEnv();
 
+  /*
+   * Validate the default error policy...
+   */
+
+  if (strcmp(ErrorPolicy, "retry-current-job") &&
+      strcmp(ErrorPolicy, "abort-job") &&
+      strcmp(ErrorPolicy, "retry-job") &&
+      strcmp(ErrorPolicy, "stop-printer"))
+  {
+    cupsdLogMessage(CUPSD_LOG_ALERT, "Invalid ErrorPolicy \"%s\", resetting to \"stop-printer\".", ErrorPolicy);
+    cupsdSetString(&ErrorPolicy, "stop-printer");
+  }
+
  /*
   * Update default paper size setting as needed...
   */
@@ -3470,7 +3597,7 @@ read_cups_files_conf(cups_file_t *fp)     /* I - File to read from */
       * Level of sandboxing?
       */
 
-      if (!_cups_strcasecmp(value, "off"))
+      if (!_cups_strcasecmp(value, "off") && getuid())
       {
         Sandboxing = CUPSD_SANDBOXING_OFF;
         cupsdLogMessage(CUPSD_LOG_WARN, "Disabling sandboxing is not recommended (line %d of %s)", linenum, CupsFilesFile);
@@ -4143,5 +4270,5 @@ set_policy_defaults(cupsd_policy_t *pol)/* I - Policy */
 
 
 /*
- * End of "$Id: conf.c 12701 2015-06-08 18:33:44Z msweet $".
+ * End of "$Id: conf.c 12689 2015-06-03 19:49:54Z msweet $".
  */
index 1c47b53bc31fd1805f788996f62acf5dc38fad4e..59cb15718e7c1499b923dabfb5bf58f9e25464cc 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: conf.h 11789 2014-04-02 16:52:53Z msweet $"
+ * "$Id: conf.h 12689 2015-06-03 19:49:54Z msweet $"
  *
  * Configuration file definitions for the CUPS scheduler.
  *
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2015 by Apple Inc.
  * Copyright 1997-2007 by Easy Software Products, all rights reserved.
  *
  * These coded instructions, statements, and computer programs are the
@@ -182,6 +182,8 @@ VAR cupsd_loglevel_t        LogLevel                VALUE(CUPSD_LOG_WARN);
                                        /* Error log level */
 VAR cupsd_time_t       LogTimeFormat           VALUE(CUPSD_TIME_STANDARD);
                                        /* Log file time format */
+VAR cups_file_t                *LogStderr              VALUE(NULL);
+                                       /* Stderr file, if any */
 VAR cupsd_sandboxing_t Sandboxing              VALUE(CUPSD_SANDBOXING_STRICT);
                                        /* Sandboxing level */
 VAR int                        UseSandboxing   VALUE(1);
@@ -298,5 +300,5 @@ extern int  cupsdWriteErrorLog(int level, const char *message);
 
 
 /*
- * End of "$Id: conf.h 11789 2014-04-02 16:52:53Z msweet $".
+ * End of "$Id: conf.h 12689 2015-06-03 19:49:54Z msweet $".
  */
index 7828448054c697b1490c8275bae02ad866aabb83..8b279025e8ac7728c33e6f1dd352d16cead20aed 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: cups-driverd.cxx 12124 2014-08-28 15:37:22Z msweet $"
+ * "$Id: cups-driverd.cxx 12722 2015-06-08 22:00:19Z msweet $"
  *
  * PPD/driver support for CUPS.
  *
@@ -7,7 +7,7 @@
  * created from driver information files, and dynamically generated PPD files
  * using driver helper programs.
  *
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2015 by Apple Inc.
  * Copyright 1997-2007 by Easy Software Products.
  *
  * These coded instructions, statements, and computer programs are the
@@ -1172,11 +1172,11 @@ list_ppds(int        request_id,        /* I - Request ID */
   load_drivers(include, exclude);
 
  /*
-  * Add the raw driver...
+  * Add the raw and IPP Everywhere drivers...
   */
 
-  add_ppd("", "raw", "en", "Raw", "Raw Queue", "", "", "", 0, 0, 0,
-          PPD_TYPE_UNKNOWN, "raw");
+  add_ppd("", "everywhere", "en", "Generic", "IPP Everywhere", "", "", "", 0, 0, 0, PPD_TYPE_UNKNOWN, "everywhere");
+  add_ppd("", "raw", "en", "Raw", "Raw Queue", "", "", "", 0, 0, 0, PPD_TYPE_UNKNOWN, "raw");
 
  /*
   * Send IPP attributes...
@@ -2903,5 +2903,5 @@ regex_string(const char *s)               /* I - String to compare */
 
 
 /*
- * End of "$Id: cups-driverd.cxx 12124 2014-08-28 15:37:22Z msweet $".
+ * End of "$Id: cups-driverd.cxx 12722 2015-06-08 22:00:19Z msweet $".
  */
index 7ce14ef62839589cd5ab9ba752c9e82c1c0ff4dd..4748ce07b0e14aebaffb28906dcd792091771018 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: cups-lpd.c 12612 2015-05-06 15:30:50Z msweet $"
+ * "$Id: cups-lpd.c 12611 2015-05-06 15:30:36Z msweet $"
  *
  * Line Printer Daemon interface for CUPS.
  *
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2015 by Apple Inc.
  * Copyright 1997-2006 by Easy Software Products, all rights reserved.
  *
  * These coded instructions, statements, and computer programs are the
@@ -29,6 +29,9 @@
 #ifdef HAVE_INTTYPES_H
 #  include <inttypes.h>
 #endif /* HAVE_INTTYPES_H */
+#ifdef __APPLE__
+#  include <vproc.h>
+#endif /* __APPLE__ */
 
 
 /*
@@ -96,6 +99,9 @@ main(int  argc,                               /* I - Number of command-line arguments */
                hostip[256],            /* IP address */
                *hostfamily;            /* Address family */
   int          hostlookups;            /* Do hostname lookups? */
+#ifdef __APPLE__
+  vproc_transaction_t vtran = vproc_transaction_begin(NULL);
+#endif /* __APPLE__ */
 
 
  /*
@@ -211,6 +217,11 @@ main(int  argc,                            /* I - Number of command-line arguments */
 
     syslog(LOG_ERR, "Unable to get command line from client!");
     putchar(1);
+
+#ifdef __APPLE__
+    vproc_transaction_end(NULL, vtran);
+#endif /* __APPLE__ */
+
     return (1);
   }
 
@@ -303,6 +314,10 @@ main(int  argc,                            /* I - Number of command-line arguments */
   syslog(LOG_INFO, "Closing connection");
   closelog();
 
+#ifdef __APPLE__
+  vproc_transaction_end(NULL, vtran);
+#endif /* __APPLE__ */
+
   return (status);
 }
 
@@ -1614,5 +1629,5 @@ smart_gets(char *s,                       /* I - Pointer to line buffer */
 
 
 /*
- * End of "$Id: cups-lpd.c 12612 2015-05-06 15:30:50Z msweet $".
+ * End of "$Id: cups-lpd.c 12611 2015-05-06 15:30:36Z msweet $".
  */
index ebe035bc16d013357d94aa1090bc9d84e3b822eb..81e159d30298c0436dacade11b81f653d3bb53d8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: cupsfilter.c 12303 2014-12-09 16:16:07Z msweet $"
+ * "$Id: cupsfilter.c 12304 2014-12-09 16:16:28Z msweet $"
  *
  * Filtering program for CUPS.
  *
@@ -1501,5 +1501,5 @@ usage(const char *opt)                    /* I - Incorrect option, if any */
 
 
 /*
- * End of "$Id: cupsfilter.c 12303 2014-12-09 16:16:07Z msweet $".
+ * End of "$Id: cupsfilter.c 12304 2014-12-09 16:16:28Z msweet $".
  */
index 9a3961d28df2ee441c926f7b41c358aed1f2e517..54a08e24da0131db263472e8a465205faa4b5cc8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: dirsvc.c 12459 2015-01-30 16:16:12Z msweet $"
+ * "$Id: dirsvc.c 12458 2015-01-30 16:15:53Z msweet $"
  *
  * Directory services routines for the CUPS scheduler.
  *
@@ -1823,5 +1823,5 @@ update_smb(int onoff)                     /* I - 1 = turn on, 0 = turn off */
 
 
 /*
- * End of "$Id: dirsvc.c 12459 2015-01-30 16:16:12Z msweet $".
+ * End of "$Id: dirsvc.c 12458 2015-01-30 16:15:53Z msweet $".
  */
index 3e33afca0c666ddf2362db7716e9e7e7a8c6c59d..59eab2734d4202f140a5f939ba316b1d3837ae4c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: env.c 12701 2015-06-08 18:33:44Z msweet $"
+ * "$Id: env.c 12700 2015-06-08 18:32:35Z msweet $"
  *
  * Environment management routines for the CUPS scheduler.
  *
@@ -265,5 +265,5 @@ find_env(const char *name)          /* I - Variable name */
 
 
 /*
- * End of "$Id: env.c 12701 2015-06-08 18:33:44Z msweet $".
+ * End of "$Id: env.c 12700 2015-06-08 18:32:35Z msweet $".
  */
index c84e34f7e35aaad878bc0ed13ba1c640eec2d41f..defccb16ed794b69298d161686ca1168ec1a8157 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: ipp.c 12778 2015-07-07 17:28:51Z msweet $"
+ * "$Id: ipp.c 12700 2015-06-08 18:32:35Z msweet $"
  *
  * IPP routines for the CUPS scheduler.
  *
@@ -945,10 +945,18 @@ add_class(cupsd_client_t  *con,           /* I - Client connection */
 
   need_restart_job = 0;
 
-  if ((attr = ippFindAttribute(con->request, "printer-location",
-                               IPP_TAG_TEXT)) != NULL)
+  if ((attr = ippFindAttribute(con->request, "printer-location", IPP_TAG_TEXT)) != NULL)
     cupsdSetString(&pclass->location, attr->values[0].string.text);
 
+  if ((attr = ippFindAttribute(con->request, "printer-geo-location", IPP_TAG_URI)) != NULL && !strncmp(attr->values[0].string.text, "geo:", 4))
+    cupsdSetString(&pclass->geo_location, attr->values[0].string.text);
+
+  if ((attr = ippFindAttribute(con->request, "printer-organization", IPP_TAG_TEXT)) != NULL)
+    cupsdSetString(&pclass->organization, attr->values[0].string.text);
+
+  if ((attr = ippFindAttribute(con->request, "printer-organizational-unit", IPP_TAG_TEXT)) != NULL)
+    cupsdSetString(&pclass->organizational_unit, attr->values[0].string.text);
+
   if ((attr = ippFindAttribute(con->request, "printer-info",
                                IPP_TAG_TEXT)) != NULL)
     cupsdSetString(&pclass->info, attr->values[0].string.text);
@@ -1068,6 +1076,8 @@ add_class(cupsd_client_t  *con,           /* I - Client connection */
                                IPP_TAG_KEYWORD)) != NULL)
     cupsdSetAuthInfoRequired(pclass, NULL, attr);
 
+  pclass->config_time = time(NULL);
+
  /*
   * Update the printer class attributes and return...
   */
@@ -1203,13 +1213,25 @@ add_job(cupsd_client_t  *con,           /* I - Client connection */
   ipp_t                *unsup_col;             /* media-col in unsupported response */
   static const char * const readonly[] =/* List of read-only attributes */
   {
+    "date-time-at-completed",
+    "date-time-at-creation",
+    "date-time-at-processing",
+    "job-detailed-status-messages",
+    "job-document-access-errors",
     "job-id",
-    "job-k-octets-completed",
     "job-impressions-completed",
+    "job-k-octets-completed",
     "job-media-sheets-completed",
+    "job-pages-completed",
+    "job-printer-up-time",
+    "job-printer-uri",
     "job-state",
     "job-state-message",
     "job-state-reasons",
+    "job-uri",
+    "number-of-documents",
+    "number-of-intervening-jobs",
+    "output-device-assigned",
     "time-at-completed",
     "time-at-creation",
     "time-at-processing"
@@ -1285,22 +1307,17 @@ add_job(cupsd_client_t  *con,           /* I - Client connection */
 
   for (i = 0; i < (int)(sizeof(readonly) / sizeof(readonly[0])); i ++)
   {
-    if ((attr = ippFindAttribute(con->request, readonly[i],
-                                 IPP_TAG_ZERO)) != NULL)
+    if ((attr = ippFindAttribute(con->request, readonly[i], IPP_TAG_ZERO)) != NULL)
     {
       ippDeleteAttribute(con->request, attr);
 
       if (StrictConformance)
       {
-       send_ipp_status(con, IPP_BAD_REQUEST,
-                       _("The '%s' Job Description attribute cannot be "
-                         "supplied in a job creation request."), readonly[i]);
+       send_ipp_status(con, IPP_BAD_REQUEST, _("The '%s' Job Status attribute cannot be supplied in a job creation request."), readonly[i]);
        return (NULL);
       }
 
-      cupsdLogMessage(CUPSD_LOG_INFO,
-                      "Unexpected '%s' Job Description attribute in a job "
-                      "creation request.", readonly[i]);
+      cupsdLogMessage(CUPSD_LOG_INFO, "Unexpected '%s' Job Status attribute in a job creation request.", readonly[i]);
     }
   }
 
@@ -1625,14 +1642,12 @@ add_job(cupsd_client_t  *con,           /* I - Client connection */
                 "job-originating-host-name", NULL, con->http->hostname);
   }
 
-  ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "time-at-creation",
-                time(NULL));
-  attr = ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER,
-                       "time-at-processing", 0);
-  attr->value_tag = IPP_TAG_NOVALUE;
-  attr = ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER,
-                       "time-at-completed", 0);
-  attr->value_tag = IPP_TAG_NOVALUE;
+  ippAddOutOfBand(job->attrs, IPP_TAG_JOB, IPP_TAG_NOVALUE, "date-time-at-completed");
+  ippAddDate(job->attrs, IPP_TAG_JOB, "date-time-at-creation", ippTimeToDate(time(NULL)));
+  ippAddOutOfBand(job->attrs, IPP_TAG_JOB, IPP_TAG_NOVALUE, "date-time-at-processing");
+  ippAddOutOfBand(job->attrs, IPP_TAG_JOB, IPP_TAG_NOVALUE, "time-at-completed");
+  ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "time-at-creation", time(NULL));
+  ippAddOutOfBand(job->attrs, IPP_TAG_JOB, IPP_TAG_NOVALUE, "time-at-processing");
 
  /*
   * Add remaining job attributes...
@@ -1644,6 +1659,7 @@ add_job(cupsd_client_t  *con,             /* I - Client connection */
   job->state_value = (ipp_jstate_t)job->state->values[0].integer;
   job->reasons = ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_KEYWORD,
                               "job-state-reasons", NULL, "job-incoming");
+  job->impressions = ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-impressions-completed", 0);
   job->sheets = ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER,
                               "job-media-sheets-completed", 0);
   ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-printer-uri", NULL,
@@ -1859,6 +1875,7 @@ add_job(cupsd_client_t  *con,             /* I - Client connection */
 
   ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_ENUM, "job-state",
                 job->state_value);
+  ippAddString(con->response, IPP_TAG_JOB, IPP_TAG_TEXT, "job-state-message", NULL, "");
   ippAddString(con->response, IPP_TAG_JOB, IPP_TAG_KEYWORD, "job-state-reasons",
                NULL, job->reasons->values[0].string.text);
 
@@ -2270,6 +2287,15 @@ add_printer(cupsd_client_t  *con,        /* I - Client connection */
                                IPP_TAG_TEXT)) != NULL)
     cupsdSetString(&printer->location, attr->values[0].string.text);
 
+  if ((attr = ippFindAttribute(con->request, "printer-geo-location", IPP_TAG_URI)) != NULL && !strncmp(attr->values[0].string.text, "geo:", 4))
+    cupsdSetString(&printer->geo_location, attr->values[0].string.text);
+
+  if ((attr = ippFindAttribute(con->request, "printer-organization", IPP_TAG_TEXT)) != NULL)
+    cupsdSetString(&printer->organization, attr->values[0].string.text);
+
+  if ((attr = ippFindAttribute(con->request, "printer-organizational-unit", IPP_TAG_TEXT)) != NULL)
+    cupsdSetString(&printer->organizational_unit, attr->values[0].string.text);
+
   if ((attr = ippFindAttribute(con->request, "printer-info",
                                IPP_TAG_TEXT)) != NULL)
     cupsdSetString(&printer->info, attr->values[0].string.text);
@@ -2743,6 +2769,8 @@ add_printer(cupsd_client_t  *con, /* I - Client connection */
     }
   }
 
+  printer->config_time = time(NULL);
+
  /*
   * Update the printer attributes and return...
   */
@@ -3284,8 +3312,6 @@ cancel_all_jobs(cupsd_client_t  *con,     /* I - Client connection */
   }
 
   con->response->request.status.status_code = IPP_OK;
-
-  cupsdCheckJobs();
 }
 
 
@@ -4725,6 +4751,12 @@ copy_job_attrs(cupsd_client_t *con,      /* I - Client connection */
     * Generate attributes from the job structure...
     */
 
+    if (job->completed_time && (!ra || cupsArrayFind(ra, "date-time-at-completed")))
+      ippAddDate(con->response, IPP_TAG_JOB, "date-time-at-completed", ippTimeToDate(job->completed_time));
+
+    if (job->creation_time && (!ra || cupsArrayFind(ra, "date-time-at-creation")))
+      ippAddDate(con->response, IPP_TAG_JOB, "date-time-at-creation", ippTimeToDate(job->creation_time));
+
     if (!ra || cupsArrayFind(ra, "job-id"))
       ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-id", job->id);
 
@@ -4761,7 +4793,7 @@ copy_job_attrs(cupsd_client_t *con,       /* I - Client connection */
     if (job->completed_time && (!ra || cupsArrayFind(ra, "time-at-completed")))
       ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "time-at-completed", (int)job->completed_time);
 
-    if (job->completed_time && (!ra || cupsArrayFind(ra, "time-at-creation")))
+    if (job->creation_time && (!ra || cupsArrayFind(ra, "time-at-creation")))
       ippAddInteger(con->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "time-at-creation", (int)job->creation_time);
   }
 }
@@ -4840,6 +4872,13 @@ copy_printer_attrs(
                  "printer-alert-description", NULL,
                 printer->alert_description);
 
+  if (!ra || cupsArrayFind(ra, "printer-config-change-date-time"))
+    ippAddDate(con->response, IPP_TAG_PRINTER, "printer-config-change-date-time", ippTimeToDate(printer->config_time));
+
+  if (!ra || cupsArrayFind(ra, "printer-config-change-time"))
+    ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
+                  "printer-config-change-time", printer->config_time);
+
   if (!ra || cupsArrayFind(ra, "printer-current-time"))
     ippAddDate(con->response, IPP_TAG_PRINTER, "printer-current-time",
                ippTimeToDate(curtime));
@@ -4913,6 +4952,9 @@ copy_printer_attrs(
     ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state",
                   printer->state);
 
+  if (!ra || cupsArrayFind(ra, "printer-state-change-date-time"))
+    ippAddDate(con->response, IPP_TAG_PRINTER, "printer-state-change-date-time", ippTimeToDate(printer->state_time));
+
   if (!ra || cupsArrayFind(ra, "printer-state-change-time"))
     ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
                   "printer-state-change-time", printer->state_time);
@@ -7059,10 +7101,16 @@ get_printer_supported(
   * Return a list of attributes that can be set via Set-Printer-Attributes.
   */
 
+  ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_ADMINDEFINE,
+                "printer-geo-location", 0);
   ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_ADMINDEFINE,
                 "printer-info", 0);
   ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_ADMINDEFINE,
                 "printer-location", 0);
+  ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_ADMINDEFINE,
+                "printer-organization", 0);
+  ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_ADMINDEFINE,
+                "printer-organizational-unit", 0);
 
   con->response->request.status.status_code = IPP_OK;
 }
@@ -7997,6 +8045,7 @@ print_job(cupsd_client_t  *con,           /* I - Client connection */
          ipp_attribute_t *uri)         /* I - Printer URI */
 {
   ipp_attribute_t *attr;               /* Current attribute */
+  ipp_attribute_t *doc_name;           /* document-name attribute */
   ipp_attribute_t *format;             /* Document-format attribute */
   const char   *default_format;        /* document-format-default value */
   cupsd_job_t  *job;                   /* New job */
@@ -8074,6 +8123,10 @@ print_job(cupsd_client_t  *con,          /* I - Client connection */
   * Is it a format we support?
   */
 
+  doc_name = ippFindAttribute(con->request, "document-name", IPP_TAG_NAME);
+  if (doc_name)
+    ippSetName(con->request, &doc_name, "document-name-supplied");
+
   if ((format = ippFindAttribute(con->request, "document-format",
                                  IPP_TAG_MIMETYPE)) != NULL)
   {
@@ -8089,6 +8142,8 @@ print_job(cupsd_client_t  *con,           /* I - Client connection */
                      format->values[0].string.text);
       return;
     }
+
+    ippAddString(con->request, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format-supplied", NULL, ippGetString(format, 0, NULL));
   }
   else if ((default_format = cupsGetOption("document-format",
                                            printer->num_options,
@@ -8122,12 +8177,9 @@ print_job(cupsd_client_t  *con,          /* I - Client connection */
     * Auto-type the file...
     */
 
-    ipp_attribute_t    *doc_name;      /* document-name attribute */
-
-
     cupsdLogMessage(CUPSD_LOG_DEBUG, "[Job ???] Auto-typing file...");
 
-    doc_name = ippFindAttribute(con->request, "document-name", IPP_TAG_NAME);
+
     filetype = mimeFileType(MimeDatabase, con->filename,
                             doc_name ? doc_name->values[0].string.text : NULL,
                            &compression);
@@ -8137,6 +8189,9 @@ print_job(cupsd_client_t  *con,           /* I - Client connection */
 
     cupsdLogMessage(CUPSD_LOG_INFO, "[Job ???] Request file type is %s/%s.",
                    filetype->super, filetype->type);
+
+    snprintf(mimetype, sizeof(mimetype), "%s/%s", filetype->super, filetype->type);
+    ippAddString(con->request, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format-detected", NULL, mimetype);
   }
   else
     filetype = mimeType(MimeDatabase, super, type);
@@ -8214,9 +8269,15 @@ print_job(cupsd_client_t  *con,          /* I - Client connection */
   if (add_file(con, job, filetype, compression))
     return;
 
-  snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot, job->id,
-           job->num_files);
-  rename(con->filename, filename);
+  snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot, job->id, job->num_files);
+  if (rename(con->filename, filename))
+  {
+    cupsdLogJob(job, CUPSD_LOG_ERROR, "Unable to rename job document file \"%s\": %s", filename, strerror(errno));
+
+    send_ipp_status(con, IPP_INTERNAL_ERROR, _("Unable to rename job document file."));
+    return;
+  }
+
   cupsdClearString(&con->filename);
 
  /*
@@ -8375,12 +8436,17 @@ read_job_ticket(cupsd_client_t *con)    /* I - Client connection */
     if (attr->group_tag != IPP_TAG_JOB || !attr->name)
       continue;
 
-    if (!strcmp(attr->name, "job-originating-host-name") ||
-        !strcmp(attr->name, "job-originating-user-name") ||
+    if (!strncmp(attr->name, "date-time-at-", 13) ||
+        !strcmp(attr->name, "job-impressions-completed") ||
        !strcmp(attr->name, "job-media-sheets-completed") ||
-       !strcmp(attr->name, "job-k-octets") ||
+       !strncmp(attr->name, "job-k-octets", 12) ||
        !strcmp(attr->name, "job-id") ||
+       !strcmp(attr->name, "job-originating-host-name") ||
+        !strcmp(attr->name, "job-originating-user-name") ||
+       !strcmp(attr->name, "job-pages-completed") ||
+       !strcmp(attr->name, "job-printer-uri") ||
        !strncmp(attr->name, "job-state", 9) ||
+       !strcmp(attr->name, "job-uri") ||
        !strncmp(attr->name, "time-at-", 8))
       continue; /* Read-only attrs */
 
@@ -9304,6 +9370,8 @@ send_document(cupsd_client_t  *con,       /* I - Client connection */
   * Is it a format we support?
   */
 
+  cupsdLoadJob(job);
+
   if ((format = ippFindAttribute(con->request, "document-format",
                                  IPP_TAG_MIMETYPE)) != NULL)
   {
@@ -9318,6 +9386,8 @@ send_document(cupsd_client_t  *con,       /* I - Client connection */
                      format->values[0].string.text);
       return;
     }
+
+    ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format-supplied", NULL, ippGetString(format, 0, NULL));
   }
   else if ((default_format = cupsGetOption("document-format",
                                            printer->num_options,
@@ -9366,6 +9436,9 @@ send_document(cupsd_client_t  *con,       /* I - Client connection */
     if (filetype)
       cupsdLogJob(job, CUPSD_LOG_DEBUG, "Request file type is %s/%s.",
                  filetype->super, filetype->type);
+
+    snprintf(mimetype, sizeof(mimetype), "%s/%s", filetype->super, filetype->type);
+    ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format-detected", NULL, mimetype);
   }
   else
     filetype = mimeType(MimeDatabase, super, type);
@@ -9419,11 +9492,12 @@ send_document(cupsd_client_t  *con,     /* I - Client connection */
   * Add the file to the job...
   */
 
-  cupsdLoadJob(job);
-
   if (add_file(con, job, filetype, compression))
     return;
 
+  if ((attr = ippFindAttribute(con->request, "document-name", IPP_TAG_NAME)) != NULL)
+    ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_NAME, "document-name-supplied", NULL, ippGetString(attr, 0, NULL));
+
   if (stat(con->filename, &fileinfo))
     kbytes = 0;
   else
@@ -9436,9 +9510,14 @@ send_document(cupsd_client_t  *con,      /* I - Client connection */
   if ((attr = ippFindAttribute(job->attrs, "job-k-octets", IPP_TAG_INTEGER)) != NULL)
     attr->values[0].integer += kbytes;
 
-  snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot, job->id,
-           job->num_files);
-  rename(con->filename, filename);
+  snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot, job->id, job->num_files);
+  if (rename(con->filename, filename))
+  {
+    cupsdLogJob(job, CUPSD_LOG_ERROR, "Unable to rename job document file \"%s\": %s", filename, strerror(errno));
+
+    send_ipp_status(con, IPP_INTERNAL_ERROR, _("Unable to rename job document file."));
+    return;
+  }
 
   cupsdClearString(&con->filename);
 
@@ -9874,15 +9953,18 @@ set_job_attrs(cupsd_client_t  *con,     /* I - Client connection */
 
     if (!strcmp(attr->name, "attributes-charset") ||
        !strcmp(attr->name, "attributes-natural-language") ||
-       !strcmp(attr->name, "document-compression") ||
-       !strcmp(attr->name, "document-format") ||
+       !strncmp(attr->name, "date-time-at-", 13) ||
+       !strncmp(attr->name, "document-compression", 20) ||
+       !strncmp(attr->name, "document-format", 15) ||
        !strcmp(attr->name, "job-detailed-status-messages") ||
        !strcmp(attr->name, "job-document-access-errors") ||
        !strcmp(attr->name, "job-id") ||
        !strcmp(attr->name, "job-impressions-completed") ||
-       !strcmp(attr->name, "job-k-octets") ||
+       !strcmp(attr->name, "job-k-octets-completed") ||
+       !strcmp(attr->name, "job-media-sheets-completed") ||
         !strcmp(attr->name, "job-originating-host-name") ||
         !strcmp(attr->name, "job-originating-user-name") ||
+       !strcmp(attr->name, "job-pages-completed") ||
        !strcmp(attr->name, "job-printer-up-time") ||
        !strcmp(attr->name, "job-printer-uri") ||
        !strcmp(attr->name, "job-sheets") ||
@@ -9892,9 +9974,6 @@ set_job_attrs(cupsd_client_t  *con,       /* I - Client connection */
        !strcmp(attr->name, "number-of-documents") ||
        !strcmp(attr->name, "number-of-intervening-jobs") ||
        !strcmp(attr->name, "output-device-assigned") ||
-       !strncmp(attr->name, "date-time-at-", 13) ||
-       !strncmp(attr->name, "job-k-octets", 12) ||
-       !strncmp(attr->name, "job-media-sheets", 16) ||
        !strncmp(attr->name, "time-at-", 8))
     {
      /*
@@ -10174,6 +10253,24 @@ set_printer_attrs(cupsd_client_t  *con,        /* I - Client connection */
     changed = 1;
   }
 
+  if ((attr = ippFindAttribute(con->request, "printer-geo-location", IPP_TAG_URI)) != NULL && !strncmp(attr->values[0].string.text, "geo:", 4))
+  {
+    cupsdSetString(&printer->geo_location, attr->values[0].string.text);
+    changed = 1;
+  }
+
+  if ((attr = ippFindAttribute(con->request, "printer-organization", IPP_TAG_TEXT)) != NULL)
+  {
+    cupsdSetString(&printer->organization, attr->values[0].string.text);
+    changed = 1;
+  }
+
+  if ((attr = ippFindAttribute(con->request, "printer-organizational-unit", IPP_TAG_TEXT)) != NULL)
+  {
+    cupsdSetString(&printer->organizational_unit, attr->values[0].string.text);
+    changed = 1;
+  }
+
   if ((attr = ippFindAttribute(con->request, "printer-info",
                                IPP_TAG_TEXT)) != NULL)
   {
@@ -10187,6 +10284,8 @@ set_printer_attrs(cupsd_client_t  *con, /* I - Client connection */
 
   if (changed)
   {
+    printer->config_time = time(NULL);
+
     cupsdSetPrinterAttrs(printer);
     cupsdMarkDirty(CUPSD_DIRTY_PRINTERS);
 
@@ -11049,5 +11148,5 @@ validate_user(cupsd_job_t    *job,      /* I - Job */
 
 
 /*
- * End of "$Id: ipp.c 12778 2015-07-07 17:28:51Z msweet $".
+ * End of "$Id: ipp.c 12700 2015-06-08 18:32:35Z msweet $".
  */
index 8ca308c618a61dd9430603b77994f312d347a74b..d572a6433610152bdd02fd147cd8d943565028c4 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: job.c 12778 2015-07-07 17:28:51Z msweet $"
+ * "$Id: job.c 12700 2015-06-08 18:32:35Z msweet $"
  *
  * Job management routines for the CUPS scheduler.
  *
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2015 by Apple Inc.
  * Copyright 1997-2007 by Easy Software Products, all rights reserved.
  *
  * These coded instructions, statements, and computer programs are the
@@ -213,6 +213,8 @@ cupsdCancelJobs(const char *dest,   /* I - Destination to cancel */
                         "Job canceled by user.");
     }
   }
+
+  cupsdCheckJobs();
 }
 
 
@@ -390,9 +392,7 @@ cupsdCheckJobs(void)
          * Start the job...
          */
 
-         cupsArraySave(ActiveJobs);
          start_job(job, printer);
-         cupsArrayRestore(ActiveJobs);
        }
       }
     }
@@ -1531,9 +1531,10 @@ void
 cupsdLoadAllJobs(void)
 {
   char         filename[1024];         /* Full filename of job.cache file */
-  struct stat  fileinfo,               /* Information on job.cache file */
-               dirinfo;                /* Information on RequestRoot dir */
-
+  struct stat  fileinfo;               /* Information on job.cache file */
+  cups_dir_t   *dir;                   /* RequestRoot dir */
+  cups_dentry_t        *dent;                  /* Entry in RequestRoot */
+  int          load_cache = 1;         /* Load the job.cache file? */
 
 
  /*
@@ -1557,36 +1558,65 @@ cupsdLoadAllJobs(void)
 
   if (stat(filename, &fileinfo))
   {
-    fileinfo.st_mtime = 0;
+   /*
+    * No job.cache file...
+    */
+
+    load_cache = 0;
 
     if (errno != ENOENT)
       cupsdLogMessage(CUPSD_LOG_ERROR,
                       "Unable to get file information for \"%s\" - %s",
                      filename, strerror(errno));
   }
+  else if ((dir = cupsDirOpen(RequestRoot)) == NULL)
+  {
+   /*
+    * No spool directory...
+    */
 
-  if (stat(RequestRoot, &dirinfo))
+    load_cache = 0;
+  }
+  else
   {
-    dirinfo.st_mtime = 0;
+    while ((dent = cupsDirRead(dir)) != NULL)
+    {
+      if (strlen(dent->filename) >= 6 && dent->filename[0] == 'c' && dent->fileinfo.st_mtime > fileinfo.st_mtime)
+      {
+       /*
+        * Job history file is newer than job.cache file...
+       */
 
-    if (errno != ENOENT)
-      cupsdLogMessage(CUPSD_LOG_ERROR,
-                      "Unable to get directory information for \"%s\" - %s",
-                     RequestRoot, strerror(errno));
+        load_cache = 0;
+       break;
+      }
+    }
+
+    cupsDirClose(dir);
   }
 
  /*
   * Load the most recent source for job data...
   */
 
-  if (dirinfo.st_mtime > fileinfo.st_mtime)
+  if (load_cache)
+  {
+   /*
+    * Load the job.cache file...
+    */
+
+    load_job_cache(filename);
+  }
+  else
   {
+   /*
+    * Load the job history files...
+    */
+
     load_request_root();
 
     load_next_job_id(filename);
   }
-  else
-    load_job_cache(filename);
 
  /*
   * Clean out old jobs as needed...
@@ -1793,9 +1823,12 @@ cupsdLoadJob(cupsd_job_t *job)           /* I - Job */
       ippSetString(job->attrs, &job->reasons, 0, "none");
   }
 
-  job->sheets     = ippFindAttribute(job->attrs, "job-media-sheets-completed",
-                                     IPP_TAG_INTEGER);
-  job->job_sheets = ippFindAttribute(job->attrs, "job-sheets", IPP_TAG_NAME);
+  job->impressions = ippFindAttribute(job->attrs, "job-impressions-completed", IPP_TAG_INTEGER);
+  job->sheets      = ippFindAttribute(job->attrs, "job-media-sheets-completed", IPP_TAG_INTEGER);
+  job->job_sheets  = ippFindAttribute(job->attrs, "job-sheets", IPP_TAG_NAME);
+
+  if (!job->impressions)
+    job->impressions = ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-impressions-completed", 0);
 
   if (!job->priority)
   {
@@ -3491,6 +3524,13 @@ finalize_job(cupsd_job_t *job,           /* I - Job */
 
   job->printer->job = NULL;
   job->printer      = NULL;
+
+ /*
+  * Try printing another job...
+  */
+
+  if (printer_state != IPP_PRINTER_STOPPED)
+    cupsdCheckJobs();
 }
 
 
@@ -4476,6 +4516,7 @@ static void
 set_time(cupsd_job_t *job,             /* I - Job to update */
          const char  *name)            /* I - Name of attribute */
 {
+  char                 date_name[128]; /* date-time-at-xxx */
   ipp_attribute_t      *attr;          /* Time attribute */
   time_t               curtime;        /* Current time */
 
@@ -4490,6 +4531,14 @@ set_time(cupsd_job_t *job,               /* I - Job to update */
     attr->values[0].integer = curtime;
   }
 
+  snprintf(date_name, sizeof(date_name), "date-%s", name);
+
+  if ((attr = ippFindAttribute(job->attrs, date_name, IPP_TAG_ZERO)) != NULL)
+  {
+    attr->value_tag = IPP_TAG_DATE;
+    ippSetDate(job->attrs, &attr, 0, ippTimeToDate(curtime));
+  }
+
   if (!strcmp(name, "time-at-completed"))
   {
     job->completed_time = curtime;
@@ -4776,6 +4825,7 @@ unload_job(cupsd_job_t *job)              /* I - Job */
   job->attrs           = NULL;
   job->state           = NULL;
   job->reasons         = NULL;
+  job->impressions     = NULL;
   job->sheets          = NULL;
   job->job_sheets      = NULL;
   job->printer_message = NULL;
@@ -4797,8 +4847,6 @@ update_job(cupsd_job_t *job)              /* I - Job to check */
                *ptr;                   /* Pointer update... */
   int          loglevel,               /* Log level for message */
                event = 0;              /* Events? */
-  cupsd_printer_t *printer = job->printer;
-                                       /* Printer */
   static const char * const levels[] = /* Log levels */
                {
                  "NONE",
@@ -4836,6 +4884,25 @@ update_job(cupsd_job_t *job)             /* I - Job to check */
 
       cupsdLogJob(job, CUPSD_LOG_DEBUG, "PAGE: %s", message);
 
+      if (job->impressions)
+      {
+        if (!_cups_strncasecmp(message, "total ", 6))
+       {
+        /*
+         * Got a total count of pages from a backend or filter...
+         */
+
+         copies = atoi(message + 6);
+         copies -= ippGetInteger(job->impressions, 0); /* Just track the delta */
+       }
+       else if (!sscanf(message, "%*d%d", &copies))
+         copies = 1;
+
+        ippSetInteger(job->attrs, &job->impressions, 0, ippGetInteger(job->impressions, 0) + copies);
+        job->dirty = 1;
+       cupsdMarkDirty(CUPSD_DIRTY_JOBS);
+      }
+
       if (job->sheets)
       {
         if (!_cups_strncasecmp(message, "total ", 6))
@@ -4845,12 +4912,14 @@ update_job(cupsd_job_t *job)            /* I - Job to check */
          */
 
          copies = atoi(message + 6);
-         copies -= job->sheets->values[0].integer; /* Just track the delta */
+         copies -= ippGetInteger(job->sheets, 0); /* Just track the delta */
        }
        else if (!sscanf(message, "%*d%d", &copies))
          copies = 1;
 
-        job->sheets->values[0].integer += copies;
+        ippSetInteger(job->attrs, &job->sheets, 0, ippGetInteger(job->sheets, 0) + copies);
+        job->dirty = 1;
+       cupsdMarkDirty(CUPSD_DIRTY_JOBS);
 
        if (job->printer->page_limit)
          cupsdUpdateQuota(job->printer, job->username, copies, 0);
@@ -4859,8 +4928,7 @@ update_job(cupsd_job_t *job)              /* I - Job to check */
       cupsdLogPage(job, message);
 
       if (job->sheets)
-       cupsdAddEvent(CUPSD_EVENT_JOB_PROGRESS, job->printer, job,
-                     "Printed %d page(s).", job->sheets->values[0].integer);
+       cupsdAddEvent(CUPSD_EVENT_JOB_PROGRESS, job->printer, job, "Printed %d page(s).", ippGetInteger(job->sheets, 0));
     }
     else if (loglevel == CUPSD_LOG_JOBSTATE)
     {
@@ -5152,11 +5220,10 @@ update_job(cupsd_job_t *job)            /* I - Job to check */
     finalize_job(job, 1);
 
    /*
-    * Try printing another job...
+    * Check for new jobs...
     */
 
-    if (printer->state != IPP_PRINTER_STOPPED)
-      cupsdCheckJobs();
+    cupsdCheckJobs();
   }
 }
 
@@ -5276,5 +5343,5 @@ update_job_attrs(cupsd_job_t *job,        /* I - Job to update */
 
 
 /*
- * End of "$Id: job.c 12778 2015-07-07 17:28:51Z msweet $".
+ * End of "$Id: job.c 12700 2015-06-08 18:32:35Z msweet $".
  */
index 909e3a30ee8f6412ab7f011fd88f8f6b9453e9b9..2e3edc8ec2e3748f3e4e03263e98ad373f134aa4 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: job.h 12067 2014-07-31 00:02:30Z msweet $"
+ * "$Id: job.h 12668 2015-05-27 19:30:32Z msweet $"
  *
  * Print job definitions for the CUPS scheduler.
  *
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2015 by Apple Inc.
  * Copyright 1997-2007 by Easy Software Products, all rights reserved.
  *
  * These coded instructions, statements, and computer programs are the
@@ -46,7 +46,8 @@ struct cupsd_job_s                    /**** Job request ****/
   int                  num_files;      /* Number of files in job */
   mime_type_t          **filetypes;    /* File types */
   int                  *compressions;  /* Compression status of each file */
-  ipp_attribute_t      *sheets;        /* job-media-sheets-completed */
+  ipp_attribute_t      *impressions,   /* job-impressions-completed */
+                       *sheets;        /* job-media-sheets-completed */
   time_t               access_time,    /* Last access time */
                        cancel_time,    /* When to cancel/send SIGTERM */
                        creation_time,  /* When job was created */
@@ -179,5 +180,5 @@ extern void         cupsdUpdateJobs(void);
 
 
 /*
- * End of "$Id: job.h 12067 2014-07-31 00:02:30Z msweet $".
+ * End of "$Id: job.h 12668 2015-05-27 19:30:32Z msweet $".
  */
index 7566edbcd7c8096ef40ba78b38450c0fc948d72c..85202d3e37aaa938fb5677be464c204820fea4c5 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: log.c 11920 2014-06-11 19:03:59Z msweet $"
+ * "$Id: log.c 12691 2015-06-04 18:00:31Z msweet $"
  *
  * Log file routines for the CUPS scheduler.
  *
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2015 by Apple Inc.
  * Copyright 1997-2007 by Easy Software Products, all rights reserved.
  *
  * These coded instructions, statements, and computer programs are the
 
 #include "cupsd.h"
 #include <stdarg.h>
+#ifdef HAVE_ASL_H
+#  include <asl.h>
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+#  define SD_JOURNAL_SUPPRESS_LOCATION
+#  include <systemd/sd-journal.h>
+#endif /* HAVE_ASL_H */
 #include <syslog.h>
 
 
+/*
+ * Constants for log keys from PWG 5110.3 (PWG Common Log Format)...
+ */
+
+#define PWG_DeviceUUID                 "DUU"
+#define PWG_Event                      "E"
+#define PWG_LogNaturalLanguage         "NL"
+#define PWG_Status                     "S"
+#define PWG_ServiceURI                 "URI"
+#define PWG_UserHost                   "UH"
+#define PWG_UserName                   "UN"
+#define PWG_UserURI                    "UU"
+#define PWG_ServiceIsAcceptingJobs     "IAJ"
+#define PWG_ServiceState               "ST"
+#define PWG_ServiceStateReasons                "SR"
+#define PWG_ServiceUUID                        "SUU"
+#define PWG_JobID                      "JID"
+#define PWG_JobUUID                    "JUU"
+#define PWG_JobImagesCompleted         "JIM"
+#define PWG_JobImpressionsCompleted    "JIC"
+#define PWG_JobDestinationURI          "JD"
+#define PWG_JobState                   "JS"
+#define PWG_JobStateReasons            "JR"
+#define PWG_JobAccountingID            "JA"
+#define PWG_JobAcountingUserName       "JAUN"
+#define PWG_JobAccountingUserURI       "JAUU"
+
+
 /*
  * Local globals...
  */
@@ -31,8 +65,22 @@ static _cups_mutex_t log_mutex = _CUPS_MUTEX_INITIALIZER;
 static size_t  log_linesize = 0;       /* Size of line for output file */
 static char    *log_line = NULL;       /* Line for output file */
 
-#ifdef HAVE_VSYSLOG
-static const int syslevels[] =         /* SYSLOG levels... */
+#ifdef HAVE_ASL_H
+static const int log_levels[] =                /* ASL levels... */
+               {
+                 ASL_LEVEL_EMERG,
+                 ASL_LEVEL_EMERG,
+                 ASL_LEVEL_ALERT,
+                 ASL_LEVEL_CRIT,
+                 ASL_LEVEL_ERR,
+                 ASL_LEVEL_WARNING,
+                 ASL_LEVEL_NOTICE,
+                 ASL_LEVEL_INFO,
+                 ASL_LEVEL_DEBUG,
+                 ASL_LEVEL_DEBUG
+               };
+#elif defined(HAVE_VSYSLOG) || defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+static const int log_levels[] =                /* SYSLOG levels... */
                {
                  0,
                  LOG_EMERG,
@@ -45,7 +93,7 @@ static const int syslevels[] =                /* SYSLOG levels... */
                  LOG_DEBUG,
                  LOG_DEBUG
                };
-#endif /* HAVE_VSYSLOG */
+#endif /* HAVE_ASL_H */
 
 
 /*
@@ -76,6 +124,16 @@ cupsdCheckLogFile(cups_file_t **lf, /* IO - Log file */
   if (!lf || !logname || !logname[0])
     return (1);
 
+ /*
+  * Handle logging to stderr...
+  */
+
+  if (!strcmp(logname, "stderr"))
+  {
+    *lf = LogStderr;
+    return (1);
+  }
+
  /*
   * Format the filename as needed...
   */
@@ -169,8 +227,20 @@ cupsdCheckLogFile(cups_file_t **lf,        /* IO - Log file */
 
       if (*lf == NULL)
       {
-       syslog(LOG_ERR, "Unable to open log file \"%s\" - %s", filename,
-              strerror(errno));
+#ifdef HAVE_ASL_H
+       asl_object_t    m;              /* Log message */
+
+       m = asl_new(ASL_TYPE_MSG);
+       asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+       asl_log(NULL, m, ASL_LEVEL_ERR, "Unable to open log file \"%s\" - %s", filename, strerror(errno));
+       asl_release(m);
+
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+        sd_journal_print(LOG_ERR, "Unable to open log file \"%s\" - %s", filename, strerror(errno));
+
+#else
+       syslog(LOG_ERR, "Unable to open log file \"%s\" - %s", filename, strerror(errno));
+#endif /* HAVE_ASL_H */
 
         if (FatalErrors & CUPSD_FATAL_LOG)
          cupsdEndProcess(getpid(), 0);
@@ -211,8 +281,20 @@ cupsdCheckLogFile(cups_file_t **lf,        /* IO - Log file */
 
     if ((*lf = cupsFileOpen(filename, "a")) == NULL)
     {
-      syslog(LOG_ERR, "Unable to open log file \"%s\" - %s", filename,
-             strerror(errno));
+#ifdef HAVE_ASL_H
+       asl_object_t    m;              /* Log message */
+
+       m = asl_new(ASL_TYPE_MSG);
+       asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+       asl_log(NULL, m, ASL_LEVEL_ERR, "Unable to open log file \"%s\" - %s", filename, strerror(errno));
+       asl_release(m);
+
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+        sd_journal_print(LOG_ERR, "Unable to open log file \"%s\" - %s", filename, strerror(errno));
+
+#else
+       syslog(LOG_ERR, "Unable to open log file \"%s\" - %s", filename, strerror(errno));
+#endif /* HAVE_ASL_H */
 
       if (FatalErrors & CUPSD_FATAL_LOG)
        cupsdEndProcess(getpid(), 0);
@@ -507,6 +589,85 @@ cupsdLogJob(cupsd_job_t *job,              /* I - Job */
       LogDebugHistory <= 0)
     return (1);
 
+#ifdef HAVE_ASL_H
+  if (!strcmp(ErrorLog, "syslog"))
+  {
+    asl_object_t       m;              /* Log message */
+    char               job_id[32],     /* job-id string */
+                       completed[32];  /* job-impressions-completed string */
+    static const char * const job_states[] =
+    {                                  /* job-state strings */
+      "Pending",
+      "PendingHeld",
+      "Processing",
+      "ProcessingStopped",
+      "Canceled",
+      "Aborted",
+      "Completed"
+    };
+
+    snprintf(job_id, sizeof(job_id), "%d", job->id);
+
+    m = asl_new(ASL_TYPE_MSG);
+    asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+    asl_set(m, PWG_Event, "JobStateChanged");
+    asl_set(m, PWG_ServiceURI, job->printer->uri);
+    asl_set(m, PWG_JobID, job_id);
+    asl_set(m, PWG_JobState, job_states[job->state_value - IPP_JSTATE_PENDING]);
+
+    if (job->impressions)
+    {
+      snprintf(completed, sizeof(completed), "%d", ippGetInteger(job->impressions, 0));
+      asl_set(m, PWG_JobImpressionsCompleted, completed);
+    }
+
+    va_start(ap, message);
+    asl_vlog(NULL, m, log_levels[level], message, ap);
+    va_end(ap);
+
+    asl_release(m);
+    return (1);
+  }
+
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+  if (!strcmp(ErrorLog, "syslog"))
+  {
+    static const char * const job_states[] =
+    {                                  /* job-state strings */
+      "Pending",
+      "PendingHeld",
+      "Processing",
+      "ProcessingStopped",
+      "Canceled",
+      "Aborted",
+      "Completed"
+    };
+
+    va_start(ap, message);
+
+    do
+    {
+      va_copy(ap2, ap);
+      status = format_log_line(message, ap2);
+      va_end(ap2);
+    }
+    while (status == 0);
+
+    va_end(ap);
+
+    sd_journal_send("MESSAGE=%s", log_line,
+                    "PRIORITY=%i", log_levels[level],
+                   PWG_Event"=JobStateChanged",
+                   PWG_ServiceURI"=%s", job->printer->uri,
+                   PWG_JobID"=%d", job->id,
+                   PWG_JobState"=%s", job_states[job->state_value - IPP_JSTATE_PENDING],
+                   PWG_JobImpressionsCompleted"=%d", ippGetInteger(job->impressions, 0),
+                   NULL);
+    return (1);
+  }
+
+#endif /* HAVE_ASL_H */
+
  /*
   * Format and write the log message...
   */
@@ -604,12 +765,26 @@ cupsdLogMessage(int        level, /* I - Log level */
   if ((TestConfigFile || !ErrorLog) && level <= CUPSD_LOG_WARN)
   {
     va_start(ap, message);
-#ifdef HAVE_VSYSLOG
-    vsyslog(LOG_LPR | syslevels[level], message, ap);
+
+#ifdef HAVE_ASL_H
+    asl_object_t       m;              /* Log message */
+
+    m = asl_new(ASL_TYPE_MSG);
+    asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+    asl_vlog(NULL, m, log_levels[level], message, ap);
+    asl_release(m);
+
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+    sd_journal_printv(log_levels[level], message, ap);
+
+#elif defined(HAVE_VSYSLOG)
+    vsyslog(LOG_LPR | log_levels[level], message, ap);
+
 #else
     vfprintf(stderr, message, ap);
     putc('\n', stderr);
 #endif /* HAVE_VSYSLOG */
+
     va_end(ap);
 
     return (1);
@@ -618,6 +793,30 @@ cupsdLogMessage(int        level,  /* I - Log level */
   if (level > LogLevel || !ErrorLog)
     return (1);
 
+#ifdef HAVE_ASL_H
+  if (!strcmp(ErrorLog, "syslog"))
+  {
+    asl_object_t       m;              /* Log message */
+
+    m = asl_new(ASL_TYPE_MSG);
+    asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+
+    va_start(ap, message);
+    asl_vlog(NULL, m, log_levels[level], message, ap);
+    va_end(ap);
+
+    asl_release(m);
+    return (1);
+  }
+
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+  if (!strcmp(ErrorLog, "syslog"))
+  {
+    sd_journal_printv(log_levels[level], message, ap);
+    return (1);
+  }
+#endif /* HAVE_ASL_H */
+
  /*
   * Format and write the log message...
   */
@@ -831,7 +1030,70 @@ cupsdLogPage(cupsd_job_t *job,            /* I - Job being printed */
 
   *bufptr = '\0';
 
-#ifdef HAVE_VSYSLOG
+#ifdef HAVE_ASL_H
+  if (!strcmp(ErrorLog, "syslog"))
+  {
+    asl_object_t       m;              /* Log message */
+    char               job_id[32],     /* job-id string */
+                       completed[32];  /* job-impressions-completed string */
+    static const char * const job_states[] =
+    {                                  /* job-state strings */
+      "Pending",
+      "PendingHeld",
+      "Processing",
+      "ProcessingStopped",
+      "Canceled",
+      "Aborted",
+      "Completed"
+    };
+
+    snprintf(job_id, sizeof(job_id), "%d", job->id);
+
+    m = asl_new(ASL_TYPE_MSG);
+    asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+    asl_set(m, PWG_Event, "JobStateChanged");
+    asl_set(m, PWG_ServiceURI, job->printer->uri);
+    asl_set(m, PWG_JobID, job_id);
+    asl_set(m, PWG_JobState, job_states[job->state_value - IPP_JSTATE_PENDING]);
+
+    if (job->impressions)
+    {
+      snprintf(completed, sizeof(completed), "%d", ippGetInteger(job->impressions, 0));
+      asl_set(m, PWG_JobImpressionsCompleted, completed);
+    }
+
+    asl_log(NULL, m, ASL_LEVEL_INFO, "%s", buffer);
+
+    asl_release(m);
+    return (1);
+  }
+
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+  if (!strcmp(ErrorLog, "syslog"))
+  {
+    static const char * const job_states[] =
+    {                                  /* job-state strings */
+      "Pending",
+      "PendingHeld",
+      "Processing",
+      "ProcessingStopped",
+      "Canceled",
+      "Aborted",
+      "Completed"
+    };
+
+    sd_journal_send("MESSAGE=%s", buffer,
+                    "PRIORITY=%i", LOG_INFO,
+                   PWG_Event"=JobStateChanged",
+                   PWG_ServiceURI"=%s", job->printer->uri,
+                   PWG_JobID"=%d", job->id,
+                   PWG_JobState"=%s", job_states[job->state_value - IPP_JSTATE_PENDING],
+                   PWG_JobImpressionsCompleted"=%d", ippGetInteger(job->impressions, 0),
+                   NULL);
+    return (1);
+  }
+
+#elif defined(HAVE_VSYSLOG)
  /*
   * See if we are logging pages via syslog...
   */
@@ -842,7 +1104,7 @@ cupsdLogPage(cupsd_job_t *job,             /* I - Job being printed */
 
     return (1);
   }
-#endif /* HAVE_VSYSLOG */
+#endif /* HAVE_ASL_H */
 
  /*
   * Not using syslog; check the log file...
@@ -1003,7 +1265,36 @@ cupsdLogRequest(cupsd_client_t *con,     /* I - Request to log */
     }
   }
 
-#ifdef HAVE_VSYSLOG
+#ifdef HAVE_ASL_H
+  if (!strcmp(ErrorLog, "syslog"))
+  {
+    asl_object_t       m;              /* Log message */
+
+    m = asl_new(ASL_TYPE_MSG);
+    asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+
+    asl_log(NULL, m, ASL_LEVEL_INFO, "REQUEST %s - %s \"%s %s HTTP/%d.%d\" %d " CUPS_LLFMT " %s %s\n",
+           con->http->hostname, con->username[0] != '\0' ? con->username : "-",
+          states[con->operation], _httpEncodeURI(temp, con->uri, sizeof(temp)),
+          con->http->version / 100, con->http->version % 100,
+          code, CUPS_LLCAST con->bytes,
+          con->request ?
+              ippOpString(con->request->request.op.operation_id) : "-",
+          con->response ?
+              ippErrorString(con->response->request.status.status_code) : "-");
+
+    asl_release(m);
+    return (1);
+  }
+
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+  if (!strcmp(ErrorLog, "syslog"))
+  {
+    sd_journal_print(LOG_INFO, "REQUEST %s - %s \"%s %s HTTP/%d.%d\" %d " CUPS_LLFMT " %s %s", con->http->hostname, con->username[0] != '\0' ? con->username : "-", states[con->operation], _httpEncodeURI(temp, con->uri, sizeof(temp)), con->http->version / 100, con->http->version % 100, code, CUPS_LLCAST con->bytes, con->request ? ippOpString(con->request->request.op.operation_id) : "-", con->response ? ippErrorString(con->response->request.status.status_code) : "-");
+    return (1);
+  }
+
+#elif defined(HAVE_VSYSLOG)
  /*
   * See if we are logging accesses via syslog...
   */
@@ -1023,7 +1314,7 @@ cupsdLogRequest(cupsd_client_t *con,      /* I - Request to log */
 
     return (1);
   }
-#endif /* HAVE_VSYSLOG */
+#endif /* HAVE_ASL_H */
 
  /*
   * Not using syslog; check the log file...
@@ -1081,17 +1372,37 @@ cupsdWriteErrorLog(int        level,    /* I - Log level */
                };
 
 
-#ifdef HAVE_VSYSLOG
+#ifdef HAVE_ASL_H
+  if (!strcmp(ErrorLog, "syslog"))
+  {
+    asl_object_t       m;              /* Log message */
+
+    m = asl_new(ASL_TYPE_MSG);
+    asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+    asl_log(NULL, m, ASL_LEVEL_INFO, "%s", message);
+
+    asl_release(m);
+    return (1);
+  }
+
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+  if (!strcmp(ErrorLog, "syslog"))
+  {
+    sd_journal_print(log_levels[level], "%s", message);
+    return (1);
+  }
+
+#elif defined(HAVE_VSYSLOG)
  /*
   * See if we are logging errors via syslog...
   */
 
   if (!strcmp(ErrorLog, "syslog"))
   {
-    syslog(syslevels[level], "%s", message);
+    syslog(log_levels[level], "%s", message);
     return (1);
   }
-#endif /* HAVE_VSYSLOG */
+#endif /* HAVE_ASL_H */
 
  /*
   * Not using syslog; check the log file...
@@ -1186,5 +1497,5 @@ format_log_line(const char *message,      /* I - Printf-style format string */
 
 
 /*
- * End of "$Id: log.c 11920 2014-06-11 19:03:59Z msweet $".
+ * End of "$Id: log.c 12691 2015-06-04 18:00:31Z msweet $".
  */
index 8069419a20566e09dd206f6f0a8ec174d459f391..b1aa50375d0859e4fd15d7ce1d22e9695527b144 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: main.c 12701 2015-06-08 18:33:44Z msweet $"
+ * "$Id: main.c 12700 2015-06-08 18:32:35Z msweet $"
  *
  * Main loop for the CUPS scheduler.
  *
 #define _MAIN_C_
 #include "cupsd.h"
 #include <sys/resource.h>
+#ifdef HAVE_ASL_H
+#  include <asl.h>
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+#  define SD_JOURNAL_SUPPRESS_LOCATION
+#  include <systemd/sd-journal.h>
+#endif /* HAVE_ASL_H */
 #include <syslog.h>
 #include <grp.h>
 
@@ -396,6 +402,8 @@ main(int  argc,                             /* I - Number of command-line args */
       close(i);
     }
   }
+  else
+    LogStderr = cupsFileStderr();
 
  /*
   * Run in the background as needed...
@@ -728,8 +736,19 @@ main(int  argc,                            /* I - Number of command-line args */
 
         if (!cupsdReadConfiguration())
         {
-          syslog(LOG_LPR, "Unable to read configuration file \'%s\' - exiting!",
-                ConfigurationFile);
+#ifdef HAVE_ASL_H
+         asl_object_t  m;              /* Log message */
+
+         m = asl_new(ASL_TYPE_MSG);
+         asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
+         asl_log(NULL, m, ASL_LEVEL_ERR, "Unable to read configuration file \"%s\" - exiting.", ConfigurationFile);
+         asl_release(m);
+#elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
+         sd_journal_print(LOG_ERR, "Unable to read configuration file \"%s\" - exiting.", ConfigurationFile);
+#else
+          syslog(LOG_LPR, "Unable to read configuration file \'%s\' - exiting.", ConfigurationFile);
+#endif /* HAVE_ASL_H */
+
           break;
        }
 
@@ -2120,14 +2139,12 @@ service_checkout(void)
 
 
  /*
-  * Create or remove the systemd path file based on whether there are active
+  * Create or remove the "keep-alive" file based on whether there are active
   * jobs or shared printers to advertise...
   */
 
   if (cupsArrayCount(ActiveJobs) ||    /* Active jobs */
-#  ifdef HAVE_SYSTEMD
       WebInterface ||                  /* Web interface enabled */
-#  endif /* HAVE_SYSTEMD */
       (Browsing && BrowseLocalProtocols && cupsArrayCount(Printers)))
                                        /* Printers being shared */
   {
@@ -2172,5 +2189,5 @@ usage(int status)                 /* O - Exit status */
 
 
 /*
- * End of "$Id: main.c 12701 2015-06-08 18:33:44Z msweet $".
+ * End of "$Id: main.c 12700 2015-06-08 18:32:35Z msweet $".
  */
index 43eee68c16f605d98044176afe824f871132d1f3..76eb2eefd5ea958525a20582fef60a50a658e40c 100644 (file)
@@ -6,10 +6,12 @@
        <true/>
        <key>Label</key>
        <string>org.cups.cups-lpd</string>
+       <key>ProcessType</key>
+       <string>Background</string>
        <key>EnableTransactions</key>
-       <false/>
+       <true/>
        <key>EnablePressuredExit</key>
-       <false/>
+       <true/>
        <key>ProgramArguments</key>
        <array>
                <string>/usr/libexec/cups/daemon/cups-lpd</string>
index 51d28e2c28ef1c7501148e96a4f290829c933c70..c0755c47b2c4779de9d0a8523a844ca1ddf1b955 100644 (file)
@@ -4,6 +4,8 @@
 <dict>
        <key>Label</key>
        <string>org.cups.cupsd</string>
+       <key>ProcessType</key>
+       <string>Background</string>
        <key>EnableTransactions</key>
        <true/>
        <key>EnablePressuredExit</key>
        <dict>
                <key>Listeners</key>
                <array>
-                       <dict>
-                               <key>SockNodeName</key>
-                               <string>::1</string>
-                               <key>SockServiceName</key>
-                               <string>ipp</string>
-                       </dict>
-                       <dict>
-                               <key>SockNodeName</key>
-                               <string>127.0.0.1</string>
-                               <key>SockServiceName</key>
-                               <string>ipp</string>
-                       </dict>
                        <dict>
                                <key>SockPathMode</key>
                                <integer>49663</integer>
index 96f6d063fb6dec58d8a33c0f54138074df955c79..feb44689f178a5f4c5d0a68f37aded0e136a6ac4 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: printers.c 12463 2015-01-30 16:34:31Z msweet $"
+ * "$Id: printers.c 12722 2015-06-08 22:00:19Z msweet $"
  *
  * Printer routines for the CUPS scheduler.
  *
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2015 by Apple Inc.
  * Copyright 1997-2007 by Easy Software Products, all rights reserved.
  *
  * These coded instructions, statements, and computer programs are the
@@ -95,11 +95,12 @@ cupsdAddPrinter(const char *name)   /* I - Name of printer */
                                             uuid, sizeof(uuid)));
   cupsdSetDeviceURI(p, "file:///dev/null");
 
-  p->state      = IPP_PRINTER_STOPPED;
-  p->state_time = time(NULL);
-  p->accepting  = 0;
-  p->shared     = DefaultShared;
-  p->filetype   = mimeAddType(MimeDatabase, "printer", name);
+  p->config_time = time(NULL);
+  p->state       = IPP_PRINTER_STOPPED;
+  p->state_time  = time(NULL);
+  p->accepting   = 0;
+  p->shared      = DefaultShared;
+  p->filetype    = mimeAddType(MimeDatabase, "printer", name);
 
   cupsdSetString(&p->job_sheets[0], "none");
   cupsdSetString(&p->job_sheets[1], "none");
@@ -171,6 +172,10 @@ cupsdCreateCommonData(void)
                  "third-shift",
                  "weekend"
                };
+  static const char * const features[] =/* ipp-features-supported values */
+               {
+                 "subscription-object"
+               };
   static const char * const versions[] =/* ipp-versions-supported values */
                {
                  "1.0",
@@ -339,8 +344,11 @@ cupsdCreateCommonData(void)
                };
   static const char * const printer_settable[] =
                {                       /* printer-settable-attributes-supported */
+                 "printer-geo-location",
                  "printer-info",
-                 "printer-location"
+                 "printer-location",
+                 "printer-organization",
+                 "printer-organizational-unit"
                };
   static const char * const which_jobs[] =
                {                       /* which-jobs-supported values */
@@ -420,6 +428,9 @@ cupsdCreateCommonData(void)
   ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_LANGUAGE,
                "generated-natural-language-supported", NULL, DefaultLanguage);
 
+  /* ipp-features-supported */
+  ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "ipp-features-supported", sizeof(features) / sizeof(features[0]), NULL, features);
+
   /* ipp-versions-supported */
   ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD | IPP_TAG_COPY,
                 "ipp-versions-supported", sizeof(versions) / sizeof(versions[0]),
@@ -533,6 +544,9 @@ cupsdCreateCommonData(void)
   ippAddInteger(CommonData, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
                 "multiple-operation-time-out", MultipleOperationTimeout);
 
+  /* multiple-operation-time-out-action */
+  ippAddString(CommonData, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "multiple-operation-time-out-action", NULL, "process-job");
+
   /* natural-language-configured (no IPP_TAG_COPY) */
   ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_LANGUAGE,
                "natural-language-configured", NULL, DefaultLanguage);
@@ -618,6 +632,9 @@ cupsdCreateCommonData(void)
   ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD | IPP_TAG_COPY,
                "pdl-override-supported", NULL, "attempted");
 
+  /* printer-get-attributes-supported */
+  ippAddString(CommonData, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "printer-get-attributes-supported", NULL, "document-format");
+
   /* printer-op-policy-supported */
   attr = ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_NAME | IPP_TAG_COPY,
                        "printer-op-policy-supported", cupsArrayCount(Policies),
@@ -751,6 +768,7 @@ cupsdDeletePrinter(
   cupsdClearString(&p->hostname);
   cupsdClearString(&p->name);
   cupsdClearString(&p->location);
+  cupsdClearString(&p->geo_location);
   cupsdClearString(&p->make_model);
   cupsdClearString(&p->info);
   cupsdClearString(&p->job_sheets[0]);
@@ -960,6 +978,21 @@ cupsdLoadAllPrinters(void)
       if (value)
        cupsdSetString(&p->location, value);
     }
+    else if (!_cups_strcasecmp(line, "GeoLocation"))
+    {
+      if (value)
+        cupsdSetString(&p->geo_location, value);
+    }
+    else if (!_cups_strcasecmp(line, "Organization"))
+    {
+      if (value)
+       cupsdSetString(&p->organization, value);
+    }
+    else if (!_cups_strcasecmp(line, "OrganizationalUnit"))
+    {
+      if (value)
+       cupsdSetString(&p->organizational_unit, value);
+    }
     else if (!_cups_strcasecmp(line, "DeviceURI"))
     {
       if (value)
@@ -1064,6 +1097,15 @@ cupsdLoadAllPrinters(void)
       if (value)
         p->state_time = atoi(value);
     }
+    else if (!_cups_strcasecmp(line, "ConfigTime"))
+    {
+     /*
+      * Set the config time...
+      */
+
+      if (value)
+        p->config_time = atoi(value);
+    }
     else if (!_cups_strcasecmp(line, "Accepting"))
     {
      /*
@@ -1214,10 +1256,17 @@ cupsdLoadAllPrinters(void)
     else if (!_cups_strcasecmp(line, "ErrorPolicy"))
     {
       if (value)
-        cupsdSetString(&p->error_policy, value);
+      {
+       if (strcmp(value, "retry-current-job") &&
+           strcmp(value, "abort-job") &&
+           strcmp(value, "retry-job") &&
+           strcmp(value, "stop-printer"))
+         cupsdLogMessage(CUPSD_LOG_ALERT, "Invalid ErrorPolicy \"%s\" on line %d or printers.conf.", ErrorPolicy, linenum);
+       else
+         cupsdSetString(&p->error_policy, value);
+      }
       else
-       cupsdLogMessage(CUPSD_LOG_ERROR,
-                       "Syntax error on line %d of printers.conf.", linenum);
+       cupsdLogMessage(CUPSD_LOG_ERROR, "Syntax error on line %d of printers.conf.", linenum);
     }
     else if (!_cups_strcasecmp(line, "Attribute") && value)
     {
@@ -1413,9 +1462,18 @@ cupsdSaveAllPrinters(void)
     if (printer->location)
       cupsFilePutConf(fp, "Location", printer->location);
 
+    if (printer->geo_location)
+      cupsFilePutConf(fp, "GeoLocation", printer->geo_location);
+
     if (printer->make_model)
       cupsFilePutConf(fp, "MakeModel", printer->make_model);
 
+    if (printer->organization)
+      cupsFilePutConf(fp, "Organization", printer->organization);
+
+    if (printer->organizational_unit)
+      cupsFilePutConf(fp, "OrganizationalUnit", printer->organizational_unit);
+
     cupsFilePutConf(fp, "DeviceURI", printer->device_uri);
 
     if (printer->port_monitor)
@@ -1425,13 +1483,14 @@ cupsdSaveAllPrinters(void)
     {
       cupsFilePuts(fp, "State Stopped\n");
 
-      if (printer->state_message)
+      if (printer->state_message[0])
         cupsFilePutConf(fp, "StateMessage", printer->state_message);
     }
     else
       cupsFilePuts(fp, "State Idle\n");
 
     cupsFilePrintf(fp, "StateTime %d\n", (int)printer->state_time);
+    cupsFilePrintf(fp, "ConfigTime %d\n", (int)printer->config_time);
 
     for (i = 0; i < printer->num_reasons; i ++)
       if (strcmp(printer->reasons[i], "connecting-to-device") &&
@@ -1997,6 +2056,77 @@ cupsdSetPrinterAttr(
   }
 
   free(temp);
+
+ /*
+  * Update the printer-supply and printer-supply-description, as needed...
+  */
+
+  if (!strcmp(name, "marker-names"))
+  {
+    ipp_attribute_t *supply_desc = ippFindAttribute(p->attrs, "printer-supply-description", IPP_TAG_TEXT);
+                                       /* printer-supply-description attribute */
+
+    if (supply_desc != NULL)
+      ippDeleteAttribute(p->attrs, supply_desc);
+
+    supply_desc = ippCopyAttribute(p->attrs, attr, 0);
+    ippSetName(p->attrs, &supply_desc, "printer-supply-description");
+    ippSetValueTag(p->attrs, &supply_desc, IPP_TAG_TEXT);
+  }
+  else if (!strcmp(name, "marker-colors") || !strcmp(name, "marker-levels") || !strcmp(name, "marker-types"))
+  {
+    char       buffer[256],            /* printer-supply values */
+               pstype[64],             /* printer-supply type value */
+               *psptr;                 /* Pointer into type */
+    const char *color,                 /* marker-colors value */
+               *type;                  /* marker-types value */
+    int                level;                  /* marker-levels value */
+    ipp_attribute_t *colors = ippFindAttribute(p->attrs, "marker-colors", IPP_TAG_NAME);
+                                       /* marker-colors attribute */
+    ipp_attribute_t *levels = ippFindAttribute(p->attrs, "marker-levels", IPP_TAG_INTEGER);
+                                       /* marker-levels attribute */
+    ipp_attribute_t *types = ippFindAttribute(p->attrs, "marker-types", IPP_TAG_KEYWORD);
+                                       /* marker-types attribute */
+    ipp_attribute_t *supply = ippFindAttribute(p->attrs, "printer-supply", IPP_TAG_STRING);
+                                       /* printer-supply attribute */
+
+    if (supply != NULL)
+    {
+      ippDeleteAttribute(p->attrs, supply);
+      supply = NULL;
+    }
+
+    if (!colors || !levels || !types)
+      return;
+
+    count = ippGetCount(colors);
+    if (count != ippGetCount(levels) || count != ippGetCount(types))
+      return;
+
+    for (i = 0; i < count; i ++)
+    {
+      color = ippGetString(colors, i, NULL);
+      level = ippGetInteger(levels, i);
+      type  = ippGetString(types, i, NULL);
+
+      for (psptr = pstype; *type && psptr < (pstype + sizeof(pstype) - 1); type ++)
+        if (*type == '-')
+       {
+         type ++;
+         *psptr++ = (char)toupper(*type & 255);
+       }
+       else
+         *psptr++ = *type;
+      *psptr = '\0';
+
+      snprintf(buffer, sizeof(buffer), "index=%d;class=%s;type=%s;unit=percent;maxcapacity=100;level=%d;colorantname=%s;", i + 1, strncmp(pstype, "waste", 5) ? "supplyThatIsConsumed" : "receptacleThatIsFilled", pstype, level, color);
+
+      if (!i)
+        supply = ippAddOctetString(p->attrs, IPP_TAG_PRINTER, "printer-supply", buffer, (int)strlen(buffer));
+      else
+        ippSetOctetString(p->attrs, &supply, i, buffer, (int)strlen(buffer));
+    }
+  }
 }
 
 
@@ -2086,10 +2216,15 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)/* I - Printer to setup */
                p->name);
   ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-location",
                NULL, p->location ? p->location : "");
+  if (p->geo_location)
+    ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-geo-location", NULL, p->geo_location);
+  else
+    ippAddOutOfBand(p->attrs, IPP_TAG_PRINTER, IPP_TAG_UNKNOWN, "printer-geo-location");
   ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-info",
                NULL, p->info ? p->info : "");
-  ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-uuid", NULL,
-              p->uuid);
+  ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-organization", NULL, p->organization ? p->organization : "");
+  ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-organizational-unit", NULL, p->organizational_unit ? p->organizational_unit : "");
+  ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-uuid", NULL, p->uuid);
 
   if (cupsArrayCount(p->users) > 0)
   {
@@ -3485,8 +3620,7 @@ add_printer_formats(cupsd_printer_t *p)   /* I - Printer */
         filter;
         filter = (mime_filter_t *)cupsArrayNext(MimeDatabase->filters))
     {
-      if (filter->dst == p->filetype && filter->filter &&
-         strstr(filter->filter, "PrintJobMgr"))
+      if (filter->dst == p->filetype && strstr(filter->filter, "PrintJobMgr"))
        break;
     }
 
@@ -3785,6 +3919,9 @@ load_ppd(cupsd_printer_t *p)              /* I - Printer */
                      "pages-per-minute-color", 1);
     }
 
+    if ((ppd_attr = ppdFindAttr(ppd, "1284DeviceId", NULL)) != NULL)
+      ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-device-id", NULL, ppd_attr->value);
+
     num_qualities = 0;
 
     if ((output_mode = ppdFindOption(ppd, "OutputMode")) != NULL)
@@ -4934,5 +5071,5 @@ write_xml_string(cups_file_t *fp, /* I - File to write to */
 
 
 /*
- * End of "$Id: printers.c 12463 2015-01-30 16:34:31Z msweet $".
+ * End of "$Id: printers.c 12722 2015-06-08 22:00:19Z msweet $".
  */
index c4ccf03f2a285169a0b0d009a8d737362b72da2a..27db7505727934ed95f9163ead68801ad33ed7f5 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: printers.h 11377 2013-11-05 01:05:00Z msweet $"
+ * "$Id: printers.h 12666 2015-05-25 19:38:09Z msweet $"
  *
  * Printer definitions for the CUPS scheduler.
  *
@@ -63,9 +63,12 @@ struct cupsd_printer_s
                *uuid,                  /* Printer UUID */
                *hostname,              /* Host printer resides on */
                *name,                  /* Printer name */
-               *location,              /* Location code */
+               *location,              /* Location string */
+               *geo_location,          /* Geographic location URI */
                *make_model,            /* Make and model */
                *info,                  /* Description */
+               *organization,          /* Organization name */
+               *organizational_unit,   /* Organizational unit (department, etc.) */
                *op_policy,             /* Operation policy name */
                *error_policy;          /* Error policy */
   cupsd_policy_t *op_policy_ptr;       /* Pointer to operation policy */
@@ -77,7 +80,8 @@ struct cupsd_printer_s
   char         state_message[1024];    /* Printer state message */
   int          num_reasons;            /* Number of printer-state-reasons */
   char         *reasons[64];           /* printer-state-reasons strings */
-  time_t       state_time;             /* Time at this state */
+  time_t       config_time,            /* Time at this configuration */
+               state_time;             /* Time at this state */
   char         *job_sheets[2];         /* Banners/job sheets */
   cups_ptype_t type;                   /* Printer type (color, small, etc.) */
   char         *device_uri;            /* Device URI */
@@ -190,5 +194,5 @@ extern void         cupsdWritePrintcap(void);
 
 
 /*
- * End of "$Id: printers.h 11377 2013-11-05 01:05:00Z msweet $".
+ * End of "$Id: printers.h 12666 2015-05-25 19:38:09Z msweet $".
  */
index 33fcc500246835f210299e21bde3e3c60b0ec18a..19c7472d05d34a676328ed1a6b50df513bc9a4be 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: process.c 12522 2015-02-17 20:01:33Z msweet $"
+ * "$Id: process.c 12521 2015-02-17 20:00:17Z msweet $"
  *
  * Process management routines for the CUPS scheduler.
  *
@@ -890,5 +890,5 @@ cupsd_requote(char       *dst,              /* I - Destination buffer */
 
 
 /*
- * End of "$Id: process.c 12522 2015-02-17 20:01:33Z msweet $".
+ * End of "$Id: process.c 12521 2015-02-17 20:00:17Z msweet $".
  */
index 8b40c215597df9a839eaf4f8ab88db799ba4672c..37001de64fdd062f4f7dd27c4b7134ffa7d8e149 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: server.c 11576 2014-02-11 15:06:01Z msweet $"
+ * "$Id: server.c 12689 2015-06-03 19:49:54Z msweet $"
  *
  *   Server start/stop routines for the CUPS scheduler.
  *
@@ -142,21 +142,24 @@ cupsdStopServer(void)
 
   if (AccessFile != NULL)
   {
-    cupsFileClose(AccessFile);
+    if (AccessFile != LogStderr)
+      cupsFileClose(AccessFile);
 
     AccessFile = NULL;
   }
 
   if (ErrorFile != NULL)
   {
-    cupsFileClose(ErrorFile);
+    if (ErrorFile != LogStderr)
+      cupsFileClose(ErrorFile);
 
     ErrorFile = NULL;
   }
 
   if (PageFile != NULL)
   {
-    cupsFileClose(PageFile);
+    if (PageFile != LogStderr)
+      cupsFileClose(PageFile);
 
     PageFile = NULL;
   }
@@ -180,5 +183,5 @@ cupsdStopServer(void)
 
 
 /*
- * End of "$Id: server.c 11576 2014-02-11 15:06:01Z msweet $".
+ * End of "$Id: server.c 12689 2015-06-03 19:49:54Z msweet $".
  */
index 315db7f4d5097d0106f8ce5b2601af9194c12c87..63b51a97557733f076892980c1dab07fd80ff37d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: sysman.c 12140 2014-08-30 01:51:22Z msweet $"
+ * "$Id: sysman.c 12236 2014-11-03 04:08:41Z msweet $"
  *
  * System management functions for the CUPS scheduler.
  *
@@ -360,7 +360,8 @@ cupsdStartSystemMonitor(void)
 
   cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStartSystemMonitor: IOPSGetTimeRemainingEstimate=%f", IOPSGetTimeRemainingEstimate());
   ACPower = IOPSGetTimeRemainingEstimate() == kIOPSTimeRemainingUnlimited;
-  notify_register_dispatch(kIOPSNotifyPowerSource, &PSToken, dispatch_get_main_queue(), ^(int t) { ACPower = IOPSGetTimeRemainingEstimate() == kIOPSTimeRemainingUnlimited; });
+  notify_register_dispatch(kIOPSNotifyPowerSource, &PSToken, dispatch_get_main_queue(), ^(int t) { (void)t;
+      ACPower = IOPSGetTimeRemainingEstimate() == kIOPSTimeRemainingUnlimited; });
 }
 
 
@@ -1071,5 +1072,5 @@ sysUpdateNames(void)
 
 
 /*
- * End of "$Id: sysman.c 12140 2014-08-30 01:51:22Z msweet $".
+ * End of "$Id: sysman.c 12236 2014-11-03 04:08:41Z msweet $".
  */
index 8db5affd738b794e058d19a0b167d87e5a0c6434..a614ec4d00cf81535fd802d5e14eb85720d4c2d1 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: testlpd.c 11558 2014-02-06 18:33:34Z msweet $"
+ * "$Id: testlpd.c 12644 2015-05-19 21:22:35Z msweet $"
  *
  * cups-lpd test program for CUPS.
  *
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2015 by Apple Inc.
  * Copyright 2006 by Easy Software Products, all rights reserved.
  *
  * These coded instructions, statements, and computer programs are the
@@ -447,7 +447,7 @@ status_long(int  outfd,                     /* I - Command file descriptor */
   * Send the "send short status" command...
   */
 
-  if (args)
+  if (args[0])
     snprintf(command, sizeof(command), "\004%s %s\n", dest, args[0]);
   else
     snprintf(command, sizeof(command), "\004%s\n", dest);
@@ -490,7 +490,7 @@ status_short(int  outfd,            /* I - Command file descriptor */
   * Send the "send short status" command...
   */
 
-  if (args)
+  if (args[0])
     snprintf(command, sizeof(command), "\003%s %s\n", dest, args[0]);
   else
     snprintf(command, sizeof(command), "\003%s\n", dest);
@@ -535,5 +535,5 @@ usage(void)
 
 
 /*
- * End of "$Id: testlpd.c 11558 2014-02-06 18:33:34Z msweet $".
+ * End of "$Id: testlpd.c 12644 2015-05-19 21:22:35Z msweet $".
  */
index 2bfaf719bf710dd1020c8810fb5e5080089520ea..68ed07e33a964e03f70d15a238da8293f70fafe4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: type.c 12578 2015-03-30 19:07:29Z msweet $"
+ * "$Id: type.c 12577 2015-03-30 19:07:17Z msweet $"
  *
  * MIME typing routines for CUPS.
  *
@@ -1279,5 +1279,5 @@ mime_patmatch(const char *s,              /* I - String to match against */
 
 
 /*
- * End of "$Id: type.c 12578 2015-03-30 19:07:29Z msweet $".
+ * End of "$Id: type.c 12577 2015-03-30 19:07:17Z msweet $".
  */
index dbe5e70be2c70f62fdafc7e702b2d07f46a02066..38811024655fca9a7d4b6e0d74d152e37108b273 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: cancel.c 12248 2014-11-12 16:32:57Z msweet $"
+ * "$Id: cancel.c 12247 2014-11-12 16:23:39Z msweet $"
  *
  *   "cancel" command for CUPS.
  *
@@ -383,5 +383,5 @@ main(int  argc,                             /* I - Number of command-line arguments */
 
 
 /*
- * End of "$Id: cancel.c 12248 2014-11-12 16:32:57Z msweet $".
+ * End of "$Id: cancel.c 12247 2014-11-12 16:23:39Z msweet $".
  */
index 94d67c74c1c70dce033cc6cb77a3c85360c02452..9c6be592c2687103c71b9e69cb3b20e44b17fcc4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: cupstestppd.c 12412 2015-01-19 15:18:02Z msweet $"
+ * "$Id: cupstestppd.c 12583 2015-04-03 00:33:05Z msweet $"
  *
  *   PPD test program for CUPS.
  *
@@ -2371,8 +2371,40 @@ check_filters(ppd_file_t *ppd,           /* I - PPD file */
 
       if (!warn)
         errors ++;
+
+      continue;
     }
-    else if (strcmp(program, "-"))
+
+    if (!strncmp(program, "maxsize(", 8))
+    {
+      char     *mptr;                  /* Pointer into maxsize(nnnn) program */
+
+      strtoll(program + 8, &mptr, 10);
+
+      if (*mptr != ')')
+      {
+       if (!warn && !errors && !verbose)
+         _cupsLangPuts(stdout, _(" FAIL"));
+
+       if (verbose >= 0)
+         _cupsLangPrintf(stdout,
+                         _("      %s  Bad cupsFilter value \"%s\"."),
+                         prefix, attr->value);
+
+       if (!warn)
+         errors ++;
+
+       continue;
+      }
+
+      mptr ++;
+      while (_cups_isspace(*mptr))
+       mptr ++;
+
+      _cups_strcpy(program, mptr);
+    }
+
+    if (strcmp(program, "-"))
     {
       if (program[0] == '/')
        snprintf(pathprog, sizeof(pathprog), "%s%s", root, program);
@@ -2457,8 +2489,40 @@ check_filters(ppd_file_t *ppd,           /* I - PPD file */
 
       if (!warn)
         errors ++;
+
+      continue;
     }
-    else if (strcmp(program, "-"))
+
+    if (!strncmp(program, "maxsize(", 8))
+    {
+      char     *mptr;                  /* Pointer into maxsize(nnnn) program */
+
+      strtoll(program + 8, &mptr, 10);
+
+      if (*mptr != ')')
+      {
+       if (!warn && !errors && !verbose)
+         _cupsLangPuts(stdout, _(" FAIL"));
+
+       if (verbose >= 0)
+         _cupsLangPrintf(stdout,
+                         _("      %s  Bad cupsFilter2 value \"%s\"."),
+                         prefix, attr->value);
+
+       if (!warn)
+         errors ++;
+
+       continue;
+      }
+
+      mptr ++;
+      while (_cups_isspace(*mptr))
+       mptr ++;
+
+      _cups_strcpy(program, mptr);
+    }
+
+    if (strcmp(program, "-"))
     {
       if (strncmp(program, "maxsize(", 8) &&
           (ptr = strchr(program + 8, ')')) != NULL)
@@ -3972,5 +4036,5 @@ valid_utf8(const char *s)         /* I - String to check */
 
 
 /*
- * End of "$Id: cupstestppd.c 12412 2015-01-19 15:18:02Z msweet $".
+ * End of "$Id: cupstestppd.c 12583 2015-04-03 00:33:05Z msweet $".
  */
index 1f6f9da19f91faed5e352095600d8e558b4b0ae4..c181d2bdb45dff87f8307257303411430b04289a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: lpadmin.c 12604 2015-05-06 01:43:05Z msweet $"
+ * "$Id: lpadmin.c 12603 2015-05-06 01:42:51Z msweet $"
  *
  * "lpadmin" command for CUPS.
  *
@@ -17,6 +17,8 @@
  * Include necessary headers...
  */
 
+#define _CUPS_NO_DEPRECATED
+#define _PPD_DEPRECATED
 #include <cups/cups-private.h>
 
 
@@ -32,6 +34,7 @@ static int            delete_printer_from_class(http_t *http, char *printer,
 static int             delete_printer_option(http_t *http, char *printer,
                                              char *option);
 static int             enable_printer(http_t *http, char *printer);
+static char            *get_printer_ppd(const char *uri, char *buffer, size_t bufsize);
 static cups_ptype_t    get_printer_type(http_t *http, char *printer, char *uri,
                                         size_t urisize);
 static int             set_printer_options(http_t *http, char *printer,
@@ -55,7 +58,11 @@ main(int  argc,                      /* I - Number of command-line arguments */
                *val;           /* Pointer to allow/deny value */
   int          num_options;    /* Number of options */
   cups_option_t        *options;       /* Options */
-  char         *file;          /* New PPD file/interface script */
+  char         *file,          /* New PPD file/interface script */
+               evefile[1024] = "";
+                               /* IPP Everywhere PPD */
+  const char   *ppd_name,      /* ppd-name value */
+               *device_uri;    /* device-uri value */
 
 
   _cupsSetLocale(argv);
@@ -73,8 +80,7 @@ main(int  argc,                       /* I - Number of command-line arguments */
         case 'c' : /* Add printer to class */
            if (!http)
            {
-              http = httpConnectEncrypt(cupsServer(), ippPort(),
-                                       cupsEncryption());
+              http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC, cupsEncryption(), 1, 30000, NULL);
 
              if (http == NULL)
              {
@@ -126,8 +132,7 @@ main(int  argc,                     /* I - Number of command-line arguments */
         case 'd' : /* Set as default destination */
            if (!http)
            {
-              http = httpConnectEncrypt(cupsServer(), ippPort(),
-                                       cupsEncryption());
+              http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC, cupsEncryption(), 1, 30000, NULL);
 
              if (http == NULL)
              {
@@ -217,10 +222,10 @@ main(int  argc,                   /* I - Number of command-line arguments */
            if (printer == NULL)
            {
 #ifdef HAVE_SSL
-             cupsSetEncryption(HTTP_ENCRYPT_REQUIRED);
+             cupsSetEncryption(HTTP_ENCRYPTION_REQUIRED);
 
              if (http)
-               httpEncryption(http, HTTP_ENCRYPT_REQUIRED);
+               httpEncryption(http, HTTP_ENCRYPTION_REQUIRED);
 #else
               _cupsLangPrintf(stderr, _("%s: Sorry, no encryption support."),
                              argv[0]);
@@ -230,8 +235,7 @@ main(int  argc,                     /* I - Number of command-line arguments */
 
            if (!http)
            {
-              http = httpConnectEncrypt(cupsServer(), ippPort(),
-                                       cupsEncryption());
+              http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC, cupsEncryption(), 1, 30000, NULL);
 
              if (http == NULL)
              {
@@ -316,8 +320,7 @@ main(int  argc,                     /* I - Number of command-line arguments */
         case 'r' : /* Remove printer from class */
            if (!http)
            {
-              http = httpConnectEncrypt(cupsServer(), ippPort(),
-                                       cupsEncryption());
+              http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC, cupsEncryption(), 1, 30000, NULL);
 
              if (http == NULL)
              {
@@ -370,8 +373,7 @@ main(int  argc,                     /* I - Number of command-line arguments */
         case 'R' : /* Remove option */
            if (!http)
            {
-              http = httpConnectEncrypt(cupsServer(), ippPort(),
-                                       cupsEncryption());
+              http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC, cupsEncryption(), 1, 30000, NULL);
 
              if (http == NULL)
              {
@@ -487,8 +489,7 @@ main(int  argc,                     /* I - Number of command-line arguments */
         case 'x' : /* Delete a printer */
            if (!http)
            {
-              http = httpConnectEncrypt(cupsServer(), ippPort(),
-                                       cupsEncryption());
+              http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC, cupsEncryption(), 1, 30000, NULL);
 
              if (http == NULL)
              {
@@ -621,11 +622,19 @@ main(int  argc,                   /* I - Number of command-line arguments */
   * Set options as needed...
   */
 
+  if ((ppd_name = cupsGetOption("ppd-name", num_options, options)) != NULL && !strcmp(ppd_name, "everywhere") && (device_uri = cupsGetOption("device-uri", num_options, options)) != NULL)
+  {
+    if ((file = get_printer_ppd(device_uri, evefile, sizeof(evefile))) == NULL)
+      return (1);
+
+    num_options = cupsRemoveOption("ppd-name", num_options, &options);
+  }
+
   if (num_options || file)
   {
     if (!http)
     {
-      http = httpConnectEncrypt(cupsServer(), ippPort(), cupsEncryption());
+      http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC, cupsEncryption(), 1, 30000, NULL);
 
       if (http == NULL)
       {
@@ -648,6 +657,9 @@ main(int  argc,                     /* I - Number of command-line arguments */
       return (1);
   }
 
+  if (evefile[0])
+    unlink(evefile);
+
   if (printer == NULL)
   {
     _cupsLangPuts(stdout,
@@ -692,7 +704,7 @@ add_printer_to_class(http_t *http,  /* I - Server connection */
                 printer, pclass));
 
  /*
-  * Build an IPP_GET_PRINTER_ATTRIBUTES request, which requires the following
+  * Build an IPP_OP_GET_PRINTER_ATTRIBUTES request, which requires the following
   * attributes:
   *
   *    attributes-charset
@@ -701,7 +713,7 @@ add_printer_to_class(http_t *http,  /* I - Server connection */
   *    requesting-user-name
   */
 
-  request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES);
+  request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
 
   httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL,
                    "localhost", 0, "/classes/%s", pclass);
@@ -717,7 +729,7 @@ add_printer_to_class(http_t *http,  /* I - Server connection */
   response = cupsDoRequest(http, request, "/");
 
  /*
-  * Build a CUPS_ADD_MODIFY_CLASS request, which requires the following
+  * Build a CUPS-Add-Modify-Class request, which requires the following
   * attributes:
   *
   *    attributes-charset
@@ -727,7 +739,7 @@ add_printer_to_class(http_t *http,  /* I - Server connection */
   *    member-uris
   */
 
-  request = ippNewRequest(CUPS_ADD_MODIFY_CLASS);
+  request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_CLASS);
 
   ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
                "printer-uri", NULL, uri);
@@ -786,7 +798,7 @@ add_printer_to_class(http_t *http,  /* I - Server connection */
   ippDelete(response);
 
   ippDelete(cupsDoRequest(http, request, "/admin/"));
-  if (cupsLastError() > IPP_OK_CONFLICT)
+  if (cupsLastError() > IPP_STATUS_OK_CONFLICTING)
   {
     _cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString());
 
@@ -812,7 +824,7 @@ default_printer(http_t *http,               /* I - Server connection */
   DEBUG_printf(("default_printer(%p, \"%s\")\n", http, printer));
 
  /*
-  * Build a CUPS_SET_DEFAULT request, which requires the following
+  * Build a CUPS-Set-Default request, which requires the following
   * attributes:
   *
   *    attributes-charset
@@ -824,7 +836,7 @@ default_printer(http_t *http,               /* I - Server connection */
   httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL,
                    "localhost", 0, "/printers/%s", printer);
 
-  request = ippNewRequest(CUPS_SET_DEFAULT);
+  request = ippNewRequest(IPP_OP_CUPS_SET_DEFAULT);
 
   ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
                "printer-uri", NULL, uri);
@@ -837,7 +849,7 @@ default_printer(http_t *http,               /* I - Server connection */
 
   ippDelete(cupsDoRequest(http, request, "/admin/"));
 
-  if (cupsLastError() > IPP_OK_CONFLICT)
+  if (cupsLastError() > IPP_STATUS_OK_CONFLICTING)
   {
     _cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString());
 
@@ -863,7 +875,7 @@ delete_printer(http_t *http,                /* I - Server connection */
   DEBUG_printf(("delete_printer(%p, \"%s\")\n", http, printer));
 
  /*
-  * Build a CUPS_DELETE_PRINTER request, which requires the following
+  * Build a CUPS-Delete-Printer request, which requires the following
   * attributes:
   *
   *    attributes-charset
@@ -872,7 +884,7 @@ delete_printer(http_t *http,                /* I - Server connection */
   *    requesting-user-name
   */
 
-  request = ippNewRequest(CUPS_DELETE_PRINTER);
+  request = ippNewRequest(IPP_OP_CUPS_DELETE_PRINTER);
 
   httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL,
                    "localhost", 0, "/printers/%s", printer);
@@ -887,7 +899,7 @@ delete_printer(http_t *http,                /* I - Server connection */
 
   ippDelete(cupsDoRequest(http, request, "/admin/"));
 
-  if (cupsLastError() > IPP_OK_CONFLICT)
+  if (cupsLastError() > IPP_STATUS_OK_CONFLICTING)
   {
     _cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString());
 
@@ -920,7 +932,7 @@ delete_printer_from_class(
                 printer, pclass));
 
  /*
-  * Build an IPP_GET_PRINTER_ATTRIBUTES request, which requires the following
+  * Build an IPP_OP_GET_PRINTER_ATTRIBUTES request, which requires the following
   * attributes:
   *
   *    attributes-charset
@@ -929,7 +941,7 @@ delete_printer_from_class(
   *    requesting-user-name
   */
 
-  request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES);
+  request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
 
   httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL,
                    "localhost", 0, "/classes/%s", pclass);
@@ -943,7 +955,7 @@ delete_printer_from_class(
   */
 
   if ((response = cupsDoRequest(http, request, "/classes/")) == NULL ||
-      response->request.status.status_code == IPP_NOT_FOUND)
+      response->request.status.status_code == IPP_STATUS_ERROR_NOT_FOUND)
   {
     _cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString());
 
@@ -983,7 +995,7 @@ delete_printer_from_class(
   if (members->num_values == 1)
   {
    /*
-    * Build a CUPS_DELETE_CLASS request, which requires the following
+    * Build a CUPS-Delete-Class request, which requires the following
     * attributes:
     *
     *    attributes-charset
@@ -992,7 +1004,7 @@ delete_printer_from_class(
     *    requesting-user-name
     */
 
-    request = ippNewRequest(CUPS_DELETE_CLASS);
+    request = ippNewRequest(IPP_OP_CUPS_DELETE_CLASS);
 
     ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
                 "printer-uri", NULL, uri);
@@ -1002,7 +1014,7 @@ delete_printer_from_class(
   else
   {
    /*
-    * Build a CUPS_ADD_MODIFY_CLASS request, which requires the following
+    * Build a IPP_OP_CUPS_ADD_MODIFY_CLASS request, which requires the following
     * attributes:
     *
     *    attributes-charset
@@ -1012,7 +1024,7 @@ delete_printer_from_class(
     *    member-uris
     */
 
-    request = ippNewRequest(CUPS_ADD_MODIFY_CLASS);
+    request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_CLASS);
 
     ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
                 "printer-uri", NULL, uri);
@@ -1041,7 +1053,7 @@ delete_printer_from_class(
 
   ippDelete(cupsDoRequest(http, request, "/admin/"));
 
-  if (cupsLastError() > IPP_OK_CONFLICT)
+  if (cupsLastError() > IPP_STATUS_OK_CONFLICTING)
   {
     _cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString());
 
@@ -1066,7 +1078,7 @@ delete_printer_option(http_t *http,       /* I - Server connection */
 
 
  /*
-  * Build a CUPS_ADD_MODIFY_PRINTER or CUPS_ADD_MODIFY_CLASS request, which
+  * Build a IPP_OP_CUPS_ADD_MODIFY_PRINTER or IPP_OP_CUPS_ADD_MODIFY_CLASS request, which
   * requires the following attributes:
   *
   *    attributes-charset
@@ -1077,9 +1089,9 @@ delete_printer_option(http_t *http,       /* I - Server connection */
   */
 
   if (get_printer_type(http, printer, uri, sizeof(uri)) & CUPS_PRINTER_CLASS)
-    request = ippNewRequest(CUPS_ADD_MODIFY_CLASS);
+    request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_CLASS);
   else
-    request = ippNewRequest(CUPS_ADD_MODIFY_PRINTER);
+    request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_PRINTER);
 
   ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
                "printer-uri", NULL, uri);
@@ -1093,7 +1105,7 @@ delete_printer_option(http_t *http,       /* I - Server connection */
 
   ippDelete(cupsDoRequest(http, request, "/admin/"));
 
-  if (cupsLastError() > IPP_OK_CONFLICT)
+  if (cupsLastError() > IPP_STATUS_OK_CONFLICTING)
   {
     _cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString());
 
@@ -1119,7 +1131,7 @@ enable_printer(http_t *http,              /* I - Server connection */
   DEBUG_printf(("enable_printer(%p, \"%s\")\n", http, printer));
 
  /*
-  * Build a CUPS_ADD_MODIFY_PRINTER or CUPS_ADD_MODIFY_CLASS request, which
+  * Build a IPP_OP_CUPS_ADD_MODIFY_PRINTER or IPP_OP_CUPS_ADD_MODIFY_CLASS request, which
   * require the following attributes:
   *
   *    attributes-charset
@@ -1131,16 +1143,16 @@ enable_printer(http_t *http,            /* I - Server connection */
   */
 
   if (get_printer_type(http, printer, uri, sizeof(uri)) & CUPS_PRINTER_CLASS)
-    request = ippNewRequest(CUPS_ADD_MODIFY_CLASS);
+    request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_CLASS);
   else
-    request = ippNewRequest(CUPS_ADD_MODIFY_PRINTER);
+    request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_PRINTER);
 
   ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
                "printer-uri", NULL, uri);
   ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
                "requesting-user-name", NULL, cupsUser());
   ippAddInteger(request, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state",
-                IPP_PRINTER_IDLE);
+                IPP_PSTATE_IDLE);
   ippAddBoolean(request, IPP_TAG_PRINTER, "printer-is-accepting-jobs", 1);
 
  /*
@@ -1149,7 +1161,7 @@ enable_printer(http_t *http,              /* I - Server connection */
 
   ippDelete(cupsDoRequest(http, request, "/admin/"));
 
-  if (cupsLastError() > IPP_OK_CONFLICT)
+  if (cupsLastError() > IPP_STATUS_OK_CONFLICTING)
   {
     _cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString());
 
@@ -1160,6 +1172,79 @@ enable_printer(http_t *http,             /* I - Server connection */
 }
 
 
+/*
+ * 'get_printer_ppd()' - Get an IPP Everywhere PPD file for the given URI.
+ */
+
+static char *                          /* O - Filename or NULL */
+get_printer_ppd(const char *uri,       /* I - Printer URI */
+                char       *buffer,    /* I - Filename buffer */
+               size_t     bufsize)     /* I - Size of filename buffer */
+{
+  http_t       *http;                  /* Connection to printer */
+  ipp_t                *request,               /* Get-Printer-Attributes request */
+               *response;              /* Get-Printer-Attributes response */
+  char         resolved[1024],         /* Resolved URI */
+               scheme[32],             /* URI scheme */
+               userpass[256],          /* Username:password */
+               host[256],              /* Hostname */
+               resource[256];          /* Resource path */
+  int          port;                   /* Port number */
+
+
+ /*
+  * Connect to the printer...
+  */
+
+  if (strstr(uri, "._tcp"))
+  {
+   /*
+    * Resolve URI...
+    */
+
+    if (!_httpResolveURI(uri, resolved, sizeof(resolved), _HTTP_RESOLVE_DEFAULT, NULL, NULL))
+    {
+      _cupsLangPrintf(stderr, _("%s: Unable to resolve \"%s\"."), "lpadmin", uri);
+      return (NULL);
+    }
+
+    uri = resolved;
+  }
+
+  if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme), userpass, sizeof(userpass), host, sizeof(host), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK)
+  {
+    _cupsLangPrintf(stderr, _("%s: Bad printer URI \"%s\"."), "lpadmin", uri);
+    return (NULL);
+  }
+
+  http = httpConnect2(host, port, NULL, AF_UNSPEC, !strcmp(scheme, "ipps") ? HTTP_ENCRYPTION_ALWAYS : HTTP_ENCRYPTION_IF_REQUESTED, 1, 30000, NULL);
+  if (!http)
+  {
+    _cupsLangPrintf(stderr, _("%s: Unable to connect to \"%s:%d\": %s"), "lpadmin", host, port, cupsLastErrorString());
+    return (NULL);
+  }
+
+ /*
+  * Send a Get-Printer-Attributes request...
+  */
+
+  request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
+  ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
+  response = cupsDoRequest(http, request, resource);
+
+  if (!_ppdCreateFromIPP(buffer, bufsize, response))
+    _cupsLangPrintf(stderr, _("%s: Unable to create PPD file: %s"), "lpadmin", strerror(errno));
+
+  ippDelete(response);
+  httpClose(http);
+
+  if (buffer[0])
+    return (buffer);
+  else
+    return (NULL);
+}
+
+
 /*
  * 'get_printer_type()' - Determine the printer type and URI.
  */
@@ -1189,7 +1274,7 @@ get_printer_type(http_t *http,            /* I - Server connection */
 
   httpAssembleURIf(HTTP_URI_CODING_ALL, uri, (int)urisize, "ipp", NULL, "localhost", ippPort(), "/printers/%s", printer);
 
-  request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES);
+  request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
   ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
                "printer-uri", NULL, uri);
   ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
@@ -1257,8 +1342,8 @@ set_printer_options(
                options, file));
 
  /*
-  * Build a CUPS_ADD_MODIFY_PRINTER or CUPS_ADD_MODIFY_CLASS request, which
-  * requires the following attributes:
+  * Build a CUPS-Add-Modify-Printer or CUPS-Add-Modify-Class request,
+  * which requires the following attributes:
   *
   *    attributes-charset
   *    attributes-natural-language
@@ -1268,32 +1353,17 @@ set_printer_options(
   */
 
   if (get_printer_type(http, printer, uri, sizeof(uri)) & CUPS_PRINTER_CLASS)
-    request = ippNewRequest(CUPS_ADD_MODIFY_CLASS);
+    request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_CLASS);
   else
-    request = ippNewRequest(CUPS_ADD_MODIFY_PRINTER);
+    request = ippNewRequest(IPP_OP_CUPS_ADD_MODIFY_PRINTER);
 
-  ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
-               "printer-uri", NULL, uri);
-  ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
-               "requesting-user-name", NULL, cupsUser());
+  ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
+  ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser());
 
  /*
   * Add the options...
   */
 
-  cupsEncodeOptions2(request, num_options, options, IPP_TAG_OPERATION);
-  cupsEncodeOptions2(request, num_options, options, IPP_TAG_PRINTER);
-
-  if ((protocol = cupsGetOption("protocol", num_options, options)) != NULL)
-  {
-    if (!_cups_strcasecmp(protocol, "bcp"))
-      ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME, "port-monitor",
-                   NULL, "bcp");
-    else if (!_cups_strcasecmp(protocol, "tbcp"))
-      ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME, "port-monitor",
-                   NULL, "tbcp");
-  }
-
   if (file)
     ppdfile = file;
   else if ((ppdname = cupsGetOption("ppd-name", num_options, options)) != NULL && strcmp(ppdname, "raw") && num_options > 1)
@@ -1316,12 +1386,25 @@ set_printer_options(
       options        = temp;
     }
   }
-  else if (request->request.op.operation_id == CUPS_ADD_MODIFY_PRINTER)
+  else if (request->request.op.operation_id == IPP_OP_CUPS_ADD_MODIFY_PRINTER)
     ppdfile = cupsGetPPD(printer);
   else
     ppdfile = NULL;
 
-  if (ppdfile != NULL)
+  cupsEncodeOptions2(request, num_options, options, IPP_TAG_OPERATION);
+  cupsEncodeOptions2(request, num_options, options, IPP_TAG_PRINTER);
+
+  if ((protocol = cupsGetOption("protocol", num_options, options)) != NULL)
+  {
+    if (!_cups_strcasecmp(protocol, "bcp"))
+      ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME, "port-monitor",
+                   NULL, "bcp");
+    else if (!_cups_strcasecmp(protocol, "tbcp"))
+      ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME, "port-monitor",
+                   NULL, "tbcp");
+  }
+
+  if (ppdfile)
   {
    /*
     * Set default options in the PPD file...
@@ -1493,7 +1576,7 @@ set_printer_options(
   * Check the response...
   */
 
-  if (cupsLastError() > IPP_OK_CONFLICT)
+  if (cupsLastError() > IPP_STATUS_OK_CONFLICTING)
   {
     _cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString());
 
@@ -1534,5 +1617,5 @@ validate_name(const char *name)           /* I - Name to check */
 
 
 /*
- * End of "$Id: lpadmin.c 12604 2015-05-06 01:43:05Z msweet $".
+ * End of "$Id: lpadmin.c 12603 2015-05-06 01:42:51Z msweet $".
  */
diff --git a/templates/de/help-trailer.tmpl b/templates/de/help-trailer.tmpl
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/templates/ru/help-trailer.tmpl b/templates/ru/help-trailer.tmpl
new file mode 100644 (file)
index 0000000..e69de29
index bffe24b7437c85e459b986ffe80787a1ae254319..c6158da05aa9d1384348f1ebc0edca4675bef142 100644 (file)
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# "$Id: 5.1-lpadmin.sh 12394 2014-12-19 15:33:36Z msweet $"
+# "$Id: 5.1-lpadmin.sh 12393 2014-12-19 15:33:22Z msweet $"
 #
 # Test the lpadmin command.
 #
@@ -68,5 +68,5 @@ fi
 echo ""
 
 #
-# End of "$Id: 5.1-lpadmin.sh 12394 2014-12-19 15:33:36Z msweet $".
+# End of "$Id: 5.1-lpadmin.sh 12393 2014-12-19 15:33:22Z msweet $".
 #
index b92df0b8937771b4dd695f5762959bc5fbecce5b..9d9a182ca9e0ef2f4bdd906342d1091df48741b5 100644 (file)
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# "$Id: 5.4-lpstat.sh 12491 2015-02-06 18:46:09Z msweet $"
+# "$Id: 5.4-lpstat.sh 12490 2015-02-06 18:45:48Z msweet $"
 #
 #   Test the lpstat command.
 #
@@ -39,5 +39,5 @@ fi
 echo ""
 
 #
-# End of "$Id: 5.4-lpstat.sh 12491 2015-02-06 18:46:09Z msweet $".
+# End of "$Id: 5.4-lpstat.sh 12490 2015-02-06 18:45:48Z msweet $".
 #
index 8405117d24bdb274b09a2224e640a2792f19df80..e2822d07306140023322640005af3e929445eb24 100644 (file)
@@ -5,9 +5,17 @@ ippfind.o: ippfind.c ../cups/cups-private.h ../cups/string-private.h \
   ../cups/md5-private.h ../cups/language-private.h ../cups/transcode.h \
   ../cups/pwg-private.h ../cups/cups.h ../cups/file.h ../cups/pwg.h \
   ../cups/ppd-private.h ../cups/ppd.h ../cups/thread-private.h
-ippserver.o: ippserver.c ../cups/cups.h ../cups/file.h \
+ippinfra.o: ippinfra.c ../config.h ../cups/cups.h ../cups/file.h \
   ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h \
-  ../cups/language.h ../cups/pwg.h ../config.h ../cups/thread-private.h
+  ../cups/language.h ../cups/pwg.h ../cups/string-private.h \
+  ../cups/thread-private.h
+ippproxy.o: ippproxy.c ../cups/cups.h ../cups/file.h ../cups/versioning.h \
+  ../cups/ipp.h ../cups/http.h ../cups/array.h ../cups/language.h \
+  ../cups/pwg.h
+ippserver.o: ippserver.c ../config.h ../cups/cups.h ../cups/file.h \
+  ../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h \
+  ../cups/language.h ../cups/pwg.h ../cups/string-private.h \
+  ../cups/thread-private.h
 ipptool.o: ipptool.c ../cups/cups-private.h ../cups/string-private.h \
   ../config.h ../cups/debug-private.h ../cups/versioning.h \
   ../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \
index cda505d315c3bccf057b041c5edae23b5eb7822e..01af7cc3290ff5bba8d7cf5e7975157c2481d54a 100644 (file)
@@ -1,9 +1,9 @@
 #
-# "$Id: Makefile 12415 2015-01-21 00:03:08Z msweet $"
+# "$Id: Makefile 12414 2015-01-21 00:02:04Z msweet $"
 #
 #   IPP test makefile for CUPS.
 #
-#   Copyright 2007-2013 by Apple Inc.
+#   Copyright 2007-2014 by Apple Inc.
 #   Copyright 1997-2006 by Easy Software Products, all rights reserved.
 #
 #   These coded instructions, statements, and computer programs are the
@@ -54,6 +54,8 @@ TESTFILES     =       \
                        validate-job.test
 OBJS           =       \
                        ippfind.o \
+                       ippinfra.o \
+                       ippproxy.o \
                        ippserver.o \
                        ipptool.o \
                        xmltotest.o
@@ -90,7 +92,7 @@ unittests:
 #
 
 clean:
-       $(RM) $(TARGETS) $(OBJS) ippfind-static
+       $(RM) $(TARGETS) $(OBJS) ippfind-static ippinfra ippinfra-shared ippproxy ippproxy-shared ippserver-shared
 
 
 #
@@ -184,6 +186,44 @@ ippfind:   ippfind.o ../cups/$(LIBCUPS) ../cups/$(LIBCUPSSTATIC)
                $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
 
 
+#
+# ippinfra
+#
+
+ippinfra:      ippinfra.o ../cups/$(LIBCUPSSTATIC)
+       echo Linking $@...
+       $(CC) $(LDFLAGS) -o $@ ippinfra.o  ../cups/$(LIBCUPSSTATIC) \
+               $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
+
+
+#
+# ippinfra-shared
+#
+
+ippinfra-shared:       ippinfra.o ../cups/$(LIBCUPS)
+       echo Linking $@...
+       $(CC) $(LDFLAGS) -o $@ ippinfra.o $(LIBS)
+
+
+#
+# ippproxy
+#
+
+ippproxy:      ippproxy.o ../cups/$(LIBCUPSSTATIC)
+       echo Linking $@...
+       $(CC) $(LDFLAGS) -o $@ ippproxy.o  ../cups/$(LIBCUPSSTATIC) \
+               $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
+
+
+#
+# ippproxy-shared
+#
+
+ippproxy-shared:       ippproxy.o ../cups/$(LIBCUPS)
+       echo Linking $@...
+       $(CC) $(LDFLAGS) -o $@ ippproxy.o $(LIBS)
+
+
 #
 # ippserver
 #
@@ -241,5 +281,5 @@ include Dependencies
 
 
 #
-# End of "$Id: Makefile 12415 2015-01-21 00:03:08Z msweet $".
+# End of "$Id: Makefile 12414 2015-01-21 00:02:04Z msweet $".
 #
index 35117c09db06874871262ce8ceae227d709f0f2f..0d4c64634909029d13b3e5b0b2ab41bc70bad1a2 100644 (file)
@@ -1,5 +1,5 @@
 #
-# "$Id: ipp-1.1.test 12663 2015-05-25 14:32:17Z msweet $"
+# "$Id: ipp-1.1.test 12661 2015-05-25 14:30:52Z msweet $"
 #
 #   IPP/1.1 test suite.
 #
@@ -2346,5 +2346,5 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
 
 
 #
-# End of "$Id: ipp-1.1.test 12663 2015-05-25 14:32:17Z msweet $".
+# End of "$Id: ipp-1.1.test 12661 2015-05-25 14:30:52Z msweet $".
 #
index 109944417708d86376f01f27401d61eaf6a2826a..78b608ecdf3b4170a2982942324412717f6a2ad3 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: ippfind.c 12639 2015-05-19 02:36:30Z msweet $"
+ * "$Id: ippfind.c 12638 2015-05-19 02:36:15Z msweet $"
  *
  * Utility to find IPP printers via Bonjour/DNS-SD and optionally run
  * commands such as IPP and Bonjour conformance tests.  This tool is
@@ -1983,9 +1983,9 @@ exec_program(ippfind_srv_t *service,      /* I - Service */
            strlcpy(tptr, scheme + 22, sizeof(temp) - (size_t)(tptr - temp));
          else if (!strncmp(keyword, "txt_", 4))
          {
-           const char *txt = cupsGetOption(keyword + 4, service->num_txt, service->txt);
-           if (txt)
-             strlcpy(tptr, txt, sizeof(temp) - (size_t)(tptr - temp));
+           const char *val = cupsGetOption(keyword + 4, service->num_txt, service->txt);
+           if (val)
+             strlcpy(tptr, val, sizeof(temp) - (size_t)(tptr - temp));
            else
              *tptr = '\0';
          }
@@ -2843,5 +2843,5 @@ show_version(void)
 
 
 /*
- * End of "$Id: ippfind.c 12639 2015-05-19 02:36:30Z msweet $".
+ * End of "$Id: ippfind.c 12638 2015-05-19 02:36:15Z msweet $".
  */
diff --git a/test/ippinfra.c b/test/ippinfra.c
new file mode 100644 (file)
index 0000000..0a4a367
--- /dev/null
@@ -0,0 +1,7125 @@
+/*
+ * "$Id: ippinfra.c 12237 2014-11-03 13:07:32Z msweet $"
+ *
+ * Sample IPP INFRA server for CUPS.
+ *
+ * Copyright 2010-2014 by Apple Inc.
+ *
+ * These coded instructions, statements, and computer programs are the
+ * property of Apple Inc. and are protected by Federal copyright
+ * law.  Distribution and use rights are outlined in the file "LICENSE.txt"
+ * which should have been included with this file.  If this file is
+ * file is missing or damaged, see the license at "http://www.cups.org/".
+ *
+ * This file is subject to the Apple OS-Developed Software exception.
+ */
+
+/*
+ * Disable private and deprecated stuff so we can verify that the public API
+ * is sufficient to implement a server.
+ */
+
+#define _IPP_PRIVATE_STRUCTURES 0      /* Disable private IPP stuff */
+#define _CUPS_NO_DEPRECATED 1          /* Disable deprecated stuff */
+
+
+/*
+ * Include necessary headers...
+ */
+
+#include <config.h>                    /* CUPS configuration header */
+#include <cups/cups.h>                 /* Public API */
+#include <cups/string-private.h>       /* CUPS string functions */
+#include <cups/thread-private.h>       /* For multithreading functions */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <limits.h>
+#include <sys/stat.h>
+
+#ifdef WIN32
+#  include <fcntl.h>
+#  include <io.h>
+#  include <process.h>
+#  define WEXITSTATUS(s) (s)
+#  include <winsock2.h>
+typedef ULONG nfds_t;
+#  define poll WSAPoll
+#else
+extern char **environ;
+
+#  include <sys/fcntl.h>
+#  include <sys/wait.h>
+#  include <poll.h>
+#endif /* WIN32 */
+
+#ifdef HAVE_SYS_MOUNT_H
+#  include <sys/mount.h>
+#endif /* HAVE_SYS_MOUNT_H */
+#ifdef HAVE_SYS_STATFS_H
+#  include <sys/statfs.h>
+#endif /* HAVE_SYS_STATFS_H */
+#ifdef HAVE_SYS_STATVFS_H
+#  include <sys/statvfs.h>
+#endif /* HAVE_SYS_STATVFS_H */
+#ifdef HAVE_SYS_VFS_H
+#  include <sys/vfs.h>
+#endif /* HAVE_SYS_VFS_H */
+
+#ifdef HAVE_PTHREAD_H
+typedef pthread_cond_t _cups_cond_t;
+#  define _CUPS_COND_INITIALIZER PTHREAD_COND_INITIALIZER
+#  define _cupsCondBroadcast(c) pthread_cond_broadcast(c)
+#  define _cupsCondDeinit(c)   pthread_cond_destroy(c)
+#  define _cupsCondInit(c)     pthread_cond_init((c), NULL)
+#  define _cupsCondWait(c,m)   pthread_cond_wait((c),(m))
+#  define _cupsMutexDeinit(m)  pthread_mutex_destroy(m)
+#  define _cupsRWDeinit(rw)    pthread_rwlock_destroy(rw)
+#else
+typedef char _cups_cond_t;
+#  define _CUPS_COND_INITIALIZER 0
+#  define _cupsCondBroadcast(c)
+#  define _cupsCondDeinit(c)
+#  define _cupsCondInit(c)     *(c)=0
+#  define _cupsCondWait(c,m)   0
+#  define _cupsMutexDeinit(m)
+#  define _cupsRWDeinit(rw)
+#endif /* HAVE_PTHREAD_H */
+
+
+/*
+ * Constants...
+ */
+
+/* New IPP operation codes from IPP INFRA */
+#  define _IPP_OP_ACKNOWLEDGE_DOCUMENT                 (ipp_op_t)0x003f
+#  define _IPP_OP_ACKNOWLEDGE_IDENTIFY_PRINTER         (ipp_op_t)0x0040
+#  define _IPP_OP_ACKNOWLEDGE_JOB                      (ipp_op_t)0x0041
+#  define _IPP_OP_FETCH_DOCUMENT                       (ipp_op_t)0x0042
+#  define _IPP_OP_FETCH_JOB                            (ipp_op_t)0x0043
+#  define _IPP_OP_GET_OUTPUT_DEVICE_ATTRIBUTES         (ipp_op_t)0x0044
+#  define _IPP_OP_UPDATE_ACTIVE_JOBS                   (ipp_op_t)0x0045
+#  define _IPP_OP_UPDATE_DOCUMENT_STATUS               (ipp_op_t)0x0047
+#  define _IPP_OP_UPDATE_JOB_STATUS                    (ipp_op_t)0x0048
+#  define _IPP_OP_UPDATE_OUTPUT_DEVICE_ATTRIBUTES      (ipp_op_t)0x0049
+#  define _IPP_OP_DEREGISTER_OUTPUT_DEVICE             (ipp_op_t)0x204b
+
+/* New IPP status code from IPP INFRA */
+#  define _IPP_STATUS_ERROR_NOT_FETCHABLE              (ipp_status_t)0x0420
+
+/* Maximum lease duration value from RFC 3995 - 2^26-1 or ~2 years */
+#  define _IPP_NOTIFY_LEASE_DURATION_MAX               67108863
+/* But a value of 0 means "never expires"... */
+#  define _IPP_NOTIFY_LEASE_DURATION_FOREVER           0
+/* Default duration is 1 day */
+#  define _IPP_NOTIFY_LEASE_DURATION_DEFAULT           86400
+
+
+/*
+ * Event mask enumeration...
+ */
+
+enum _ipp_event_e                      /* notify-events bit values */
+{
+  _IPP_EVENT_DOCUMENT_COMPLETED = 0x00000001,
+  _IPP_EVENT_DOCUMENT_CONFIG_CHANGED = 0x00000002,
+  _IPP_EVENT_DOCUMENT_CREATED = 0x00000004,
+  _IPP_EVENT_DOCUMENT_FETCHABLE = 0x00000008,
+  _IPP_EVENT_DOCUMENT_STATE_CHANGED = 0x00000010,
+  _IPP_EVENT_DOCUMENT_STOPPED = 0x00000020,
+  _IPP_EVENT_JOB_COMPLETED = 0x00000040,
+  _IPP_EVENT_JOB_CONFIG_CHANGED = 0x00000080,
+  _IPP_EVENT_JOB_CREATED = 0x00000100,
+  _IPP_EVENT_JOB_FETCHABLE = 0x00000200,
+  _IPP_EVENT_JOB_PROGRESS = 0x00000400,
+  _IPP_EVENT_JOB_STATE_CHANGED = 0x00000800,
+  _IPP_EVENT_JOB_STOPPED = 0x00001000,
+  _IPP_EVENT_PRINTER_CONFIG_CHANGED = 0x00002000,
+  _IPP_EVENT_PRINTER_FINISHINGS_CHANGED = 0x00004000,
+  _IPP_EVENT_PRINTER_MEDIA_CHANGED = 0x00008000,
+  _IPP_EVENT_PRINTER_QUEUE_ORDER_CHANGED = 0x00010000,
+  _IPP_EVENT_PRINTER_RESTARTED = 0x00020000,
+  _IPP_EVENT_PRINTER_SHUTDOWN = 0x00040000,
+  _IPP_EVENT_PRINTER_STATE_CHANGED = 0x00080000,
+  _IPP_EVENT_PRINTER_STOPPED = 0x00100000,
+
+  /* "Wildcard" values... */
+  _IPP_EVENT_NONE = 0x00000000,                /* Nothing */
+  _IPP_EVENT_DOCUMENT_ALL = 0x0000003f,
+  _IPP_EVENT_DOCUMENT_STATE_ALL = 0x00000037,
+  _IPP_EVENT_JOB_ALL = 0x00001fc0,
+  _IPP_EVENT_JOB_STATE_ALL = 0x00001940,
+  _IPP_EVENT_PRINTER_ALL = 0x001fe000,
+  _IPP_EVENT_PRINTER_CONFIG_ALL = 0x0000e000,
+  _IPP_EVENT_PRINTER_STATE_ALL = 0x001e0000,
+  _IPP_EVENT_ALL = 0x001fffff          /* Everything */
+};
+typedef unsigned int _ipp_event_t;     /* Bitfield for notify-events */
+#define _IPP_EVENT_DEFAULT _IPP_EVENT_JOB_COMPLETED
+#define _IPP_EVENT_DEFAULT_STRING "job-completed"
+static const char * const _ipp_events[] =
+{                                      /* Strings for bits */
+  "document-completed",
+  "document-config-changed",
+  "document-created",
+  "document-fetchable",
+  "document-state-changed",
+  "document-stopped",
+  "job-completed",
+  "job-config-changed",
+  "job-created",
+  "job-fetchable",
+  "job-progress",
+  "job-state-changed",
+  "job-stopped",
+  "printer-config-changed",
+  "printer-finishings-changed",
+  "printer-media-changed",
+  "printer-queue-order-changed",
+  "printer-restarted",
+  "printer-shutdown",
+  "printer-state-changed",
+  "printer-stopped"
+};
+
+enum _ipp_jreason_e                    /* job-state-reasons bit values */
+{
+  _IPP_JREASON_NONE = 0x00000000,      /* none */
+  _IPP_JREASON_ABORTED_BY_SYSTEM = 0x00000001,
+  _IPP_JREASON_COMPRESSION_ERROR = 0x00000002,
+  _IPP_JREASON_DOCUMENT_ACCESS_ERROR = 0x00000004,
+  _IPP_JREASON_DOCUMENT_FORMAT_ERROR = 0x00000008,
+  _IPP_JREASON_DOCUMENT_PASSWORD_ERROR = 0x00000010,
+  _IPP_JREASON_DOCUMENT_PERMISSION_ERROR = 0x00000020,
+  _IPP_JREASON_DOCUMENT_SECURITY_ERROR = 0x00000040,
+  _IPP_JREASON_DOCUMENT_UNPRINTABLE_ERROR = 0x00000080,
+  _IPP_JREASON_ERRORS_DETECTED = 0x00000100,
+  _IPP_JREASON_JOB_CANCELED_AT_DEVICE = 0x00000200,
+  _IPP_JREASON_JOB_CANCELED_BY_USER = 0x00000400,
+  _IPP_JREASON_JOB_COMPLETED_SUCCESSFULLY = 0x00000800,
+  _IPP_JREASON_JOB_COMPLETED_WITH_ERRORS = 0x00001000,
+  _IPP_JREASON_JOB_COMPLETED_WITH_WARNINGS = 0x00002000,
+  _IPP_JREASON_JOB_DATA_INSUFFICIENT = 0x00004000,
+  _IPP_JREASON_JOB_FETCHABLE = 0x00008000,
+  _IPP_JREASON_JOB_INCOMING = 0x00010000,
+  _IPP_JREASON_JOB_PASSWORD_WAIT = 0x00020000,
+  _IPP_JREASON_JOB_PRINTING = 0x00040000,
+  _IPP_JREASON_JOB_QUEUED = 0x00080000,
+  _IPP_JREASON_JOB_SPOOLING = 0x00100000,
+  _IPP_JREASON_JOB_STOPPED = 0x00200000,
+  _IPP_JREASON_JOB_TRANSFORMING = 0x00400000,
+  _IPP_JREASON_PRINTER_STOPPED = 0x00800000,
+  _IPP_JREASON_PRINTER_STOPPED_PARTLY = 0x01000000,
+  _IPP_JREASON_PROCESSING_TO_STOP_POINT = 0x02000000,
+  _IPP_JREASON_QUEUED_IN_DEVICE = 0x04000000,
+  _IPP_JREASON_WARNINGS_DETECTED = 0x08000000
+};
+typedef unsigned int _ipp_jreason_t;   /* Bitfield for job-state-reasons */
+static const char * const _ipp_jreasons[] =
+{                                      /* Strings for bits */
+  "aborted-by-system",
+  "compression-error",
+  "document-access-error",
+  "document-format-error",
+  "document-password-error",
+  "document-permission-error",
+  "document-security-error",
+  "document-unprintable-error",
+  "errors-detected",
+  "job-canceled-at-device",
+  "job-canceled-by-user",
+  "job-completed-successfully",
+  "job-completed-with-errors",
+  "job-completed-with-warnings",
+  "job-data-insufficient",
+  "job-fetchable",
+  "job-incoming",
+  "job-password-wait",
+  "job-printing",
+  "job-queued",
+  "job-spooling",
+  "job-stopped",
+  "job-transforming",
+  "printer-stopped",
+  "printer-stopped-partly",
+  "processing-to-stop-point",
+  "queued-in-device",
+  "warnings-detected"
+};
+
+enum _ipp_preason_e                    /* printer-state-reasons bit values */
+{
+  _IPP_PREASON_NONE = 0x0000,          /* none */
+  _IPP_PREASON_OTHER = 0x0001,         /* other */
+  _IPP_PREASON_COVER_OPEN = 0x0002,    /* cover-open */
+  _IPP_PREASON_INPUT_TRAY_MISSING = 0x0004,
+                                       /* input-tray-missing */
+  _IPP_PREASON_MARKER_SUPPLY_EMPTY = 0x0008,
+                                       /* marker-supply-empty */
+  _IPP_PREASON_MARKER_SUPPLY_LOW = 0x0010,
+                                       /* marker-supply-low */
+  _IPP_PREASON_MARKER_WASTE_ALMOST_FULL = 0x0020,
+                                       /* marker-waste-almost-full */
+  _IPP_PREASON_MARKER_WASTE_FULL = 0x0040,
+                                       /* marker-waste-full */
+  _IPP_PREASON_MEDIA_EMPTY = 0x0080,   /* media-empty */
+  _IPP_PREASON_MEDIA_JAM = 0x0100,     /* media-jam */
+  _IPP_PREASON_MEDIA_LOW = 0x0200,     /* media-low */
+  _IPP_PREASON_MEDIA_NEEDED = 0x0400,  /* media-needed */
+  _IPP_PREASON_MOVING_TO_PAUSED = 0x0800,
+                                       /* moving-to-paused */
+  _IPP_PREASON_PAUSED = 0x1000,                /* paused */
+  _IPP_PREASON_SPOOL_AREA_FULL = 0x2000,/* spool-area-full */
+  _IPP_PREASON_TONER_EMPTY = 0x4000,   /* toner-empty */
+  _IPP_PREASON_TONER_LOW = 0x8000      /* toner-low */
+};
+typedef unsigned int _ipp_preason_t;   /* Bitfield for printer-state-reasons */
+static const char * const _ipp_preasons[] =
+{                                      /* Strings for bits */
+  "other",
+  "cover-open",
+  "input-tray-missing",
+  "marker-supply-empty",
+  "marker-supply-low",
+  "marker-waste-almost-full",
+  "marker-waste-full",
+  "media-empty",
+  "media-jam",
+  "media-low",
+  "media-needed",
+  "moving-to-paused",
+  "paused",
+  "spool-area-full",
+  "toner-empty",
+  "toner-low"
+};
+
+
+/*
+ * Structures...
+ */
+
+typedef struct _ipp_filter_s           /**** Attribute filter ****/
+{
+  cups_array_t         *ra;            /* Requested attributes */
+  ipp_tag_t            group_tag;      /* Group to copy */
+} _ipp_filter_t;
+
+typedef struct _ipp_job_s _ipp_job_t;
+
+typedef struct _ipp_device_s           /**** Output Device data ****/
+{
+  _cups_rwlock_t       rwlock;         /* Printer lock */
+  char                 *name,          /* printer-name (mapped to output-device) */
+                       *uuid;          /* output-device-uuid */
+  ipp_t                        *attrs;         /* All printer attributes */
+  ipp_pstate_t         state;          /* printer-state value */
+  _ipp_preason_t       reasons;        /* printer-state-reasons values */
+} _ipp_device_t;
+
+typedef struct _ipp_printer_s          /**** Printer data ****/
+{
+  _cups_rwlock_t       rwlock;         /* Printer lock */
+  int                  ipv4,           /* IPv4 listener */
+                       ipv6;           /* IPv6 listener */
+  char                 *name,          /* printer-name */
+                       *directory,     /* Spool directory */
+                       *hostname,      /* Hostname */
+                       *uri,           /* printer-uri-supported */
+                       *proxy_user,    /* Proxy username */
+                       *proxy_pass;    /* Proxy password */
+  int                  port;           /* Port */
+  size_t               urilen;         /* Length of printer URI */
+  cups_array_t         *devices;       /* Associated devices */
+  ipp_t                        *attrs;         /* Static attributes */
+  ipp_t                        *dev_attrs;     /* Current device attributes */
+  time_t               start_time;     /* Startup time */
+  time_t               config_time;    /* printer-config-change-time */
+  ipp_pstate_t         state,          /* printer-state value */
+                       dev_state;      /* Current device printer-state value */
+  _ipp_preason_t       state_reasons,  /* printer-state-reasons values */
+                       dev_reasons;    /* Current device printer-state-reasons values */
+  time_t               state_time;     /* printer-state-change-time */
+  cups_array_t         *jobs,          /* Jobs */
+                       *active_jobs,   /* Active jobs */
+                       *completed_jobs;/* Completed jobs */
+  _ipp_job_t           *processing_job;/* Current processing job */
+  int                  next_job_id;    /* Next job-id value */
+  cups_array_t         *subscriptions; /* Subscriptions */
+  int                  next_sub_id;    /* Next notify-subscription-id value */
+} _ipp_printer_t;
+
+struct _ipp_job_s                      /**** Job data ****/
+{
+  int                  id;             /* job-id */
+  _cups_rwlock_t       rwlock;         /* Job lock */
+  const char           *name,          /* job-name */
+                       *username,      /* job-originating-user-name */
+                       *format;        /* document-format */
+  int                  priority;       /* job-priority */
+  char                 *dev_uuid;      /* output-device-uuid-assigned */
+  ipp_jstate_t         state,          /* job-state value */
+                       dev_state;      /* output-device-job-state value */
+  _ipp_jreason_t       state_reasons,  /* job-state-reasons values */
+                       dev_state_reasons;
+                                       /* output-device-job-state-reasons values */
+  char                 *dev_state_message;
+                                       /* output-device-job-state-message value */
+  time_t               created,        /* time-at-creation value */
+                       processing,     /* time-at-processing value */
+                       completed;      /* time-at-completed value */
+  int                  impressions,    /* job-impressions value */
+                       impcompleted;   /* job-impressions-completed value */
+  ipp_t                        *attrs;         /* Attributes */
+  int                  cancel;         /* Non-zero when job canceled */
+  char                 *filename;      /* Print file name */
+  int                  fd;             /* Print file descriptor */
+  _ipp_printer_t       *printer;       /* Printer */
+};
+
+typedef struct _ipp_subscription_s     /**** Subscription data ****/
+{
+  int                  id;             /* notify-subscription-id */
+  const char           *uuid;          /* notify-subscription-uuid */
+  _cups_rwlock_t       rwlock;         /* Subscription lock */
+  _ipp_event_t         mask;           /* Event mask */
+  _ipp_printer_t       *printer;       /* Printer */
+  _ipp_job_t           *job;           /* Job, if any */
+  ipp_t                        *attrs;         /* Attributes */
+  const char           *username;      /* notify-subscriber-user-name */
+  int                  lease;          /* notify-lease-duration */
+  int                  interval;       /* notify-time-interval */
+  time_t               expire;         /* Lease expiration time */
+  int                  first_sequence, /* First notify-sequence-number in cache */
+                       last_sequence;  /* Last notify-sequence-number used */
+  cups_array_t         *events;        /* Events (ipp_t *'s) */
+  int                  pending_delete; /* Non-zero when the subscription is about to be deleted/canceled */
+} _ipp_subscription_t;
+
+typedef struct _ipp_client_s           /**** Client data ****/
+{
+  http_t               *http;          /* HTTP connection */
+  ipp_t                        *request,       /* IPP request */
+                       *response;      /* IPP response */
+  time_t               start;          /* Request start time */
+  http_state_t         operation;      /* Request operation */
+  ipp_op_t             operation_id;   /* IPP operation-id */
+  char                 uri[1024],      /* Request URI */
+                       *options;       /* URI options */
+  http_addr_t          addr;           /* Client address */
+  char                 hostname[256],  /* Client hostname */
+                       username[32];   /* Client authenticated username */
+  _ipp_printer_t       *printer;       /* Printer */
+  _ipp_job_t           *job;           /* Current job, if any */
+  int                  fetch_compression,
+                                       /* Compress file? */
+                       fetch_file;     /* File to fetch */
+} _ipp_client_t;
+
+
+/*
+ * Local functions...
+ */
+
+static void            add_event(_ipp_printer_t *printer, _ipp_job_t *job, _ipp_event_t event, const char *message, ...) __attribute__((__format__(__printf__, 4, 5)));
+static void            check_jobs(_ipp_printer_t *printer);
+static void            clean_jobs(_ipp_printer_t *printer);
+static int             compare_active_jobs(_ipp_job_t *a, _ipp_job_t *b);
+static int             compare_completed_jobs(_ipp_job_t *a, _ipp_job_t *b);
+static int             compare_devices(_ipp_device_t *a, _ipp_device_t *b);
+static int             compare_jobs(_ipp_job_t *a, _ipp_job_t *b);
+static void            copy_attributes(ipp_t *to, ipp_t *from, cups_array_t *ra,
+                                       ipp_tag_t group_tag, int quickcopy);
+static void            copy_job_attributes(_ipp_client_t *client,
+                                           _ipp_job_t *job, cups_array_t *ra);
+static void            copy_job_state_reasons(ipp_t *ipp, ipp_tag_t group_tag, _ipp_job_t *job);
+static void            copy_printer_state_reasons(ipp_t *ipp, ipp_tag_t group_tag, _ipp_printer_t *printer);
+static void            copy_subscription_attributes(_ipp_client_t *client, _ipp_subscription_t *sub, cups_array_t *ra);
+static _ipp_client_t   *create_client(_ipp_printer_t *printer, int sock);
+static _ipp_device_t   *create_device(_ipp_client_t *client);
+static _ipp_job_t      *create_job(_ipp_client_t *client);
+static void            create_job_filename(_ipp_printer_t *printer, _ipp_job_t *job, const char *format, char *fname, size_t fnamesize);
+static int             create_listener(int family, int port);
+static _ipp_subscription_t *create_subscription(_ipp_printer_t *printer, _ipp_job_t *job, int interval, int lease, const char *username, ipp_attribute_t *notify_events, ipp_attribute_t *notify_attributes, ipp_attribute_t *notify_user_data);
+static _ipp_printer_t  *create_printer(const char *servername, int port, const char *name, const char *directory, const char *proxy_user, const char *proxy_pass);
+static void            debug_attributes(const char *title, ipp_t *ipp,
+                                        int response);
+static void            delete_client(_ipp_client_t *client);
+static void            delete_device(_ipp_device_t *device);
+static void            delete_job(_ipp_job_t *job);
+static void            delete_printer(_ipp_printer_t *printer);
+static void            delete_subscription(_ipp_subscription_t *sub);
+static int             filter_cb(_ipp_filter_t *filter, ipp_t *dst, ipp_attribute_t *attr);
+static _ipp_device_t   *find_device(_ipp_client_t *client);
+static _ipp_job_t      *find_job(_ipp_client_t *client, int job_id);
+static _ipp_subscription_t *find_subscription(_ipp_client_t *client, int sub_id);
+static _ipp_jreason_t  get_job_state_reasons_bits(ipp_attribute_t *attr);
+static _ipp_event_t    get_notify_events_bits(ipp_attribute_t *attr);
+static const char      *get_notify_subscribed_event(_ipp_event_t event);
+static _ipp_preason_t  get_printer_state_reasons_bits(ipp_attribute_t *attr);
+static void            html_escape(_ipp_client_t *client, const char *s,
+                                   size_t slen);
+static void            html_footer(_ipp_client_t *client);
+static void            html_header(_ipp_client_t *client, const char *title);
+static void            html_printf(_ipp_client_t *client, const char *format, ...) __attribute__((__format__(__printf__, 2, 3)));
+static void            ipp_acknowledge_document(_ipp_client_t *client);
+static void            ipp_acknowledge_identify_printer(_ipp_client_t *client);
+static void            ipp_acknowledge_job(_ipp_client_t *client);
+static void            ipp_cancel_job(_ipp_client_t *client);
+static void            ipp_cancel_my_jobs(_ipp_client_t *client);
+static void            ipp_cancel_subscription(_ipp_client_t *client);
+static void            ipp_close_job(_ipp_client_t *client);
+static void            ipp_create_job(_ipp_client_t *client);
+static void            ipp_create_xxx_subscriptions(_ipp_client_t *client);
+static void            ipp_deregister_output_device(_ipp_client_t *client);
+static void            ipp_fetch_document(_ipp_client_t *client);
+static void            ipp_fetch_job(_ipp_client_t *client);
+static void            ipp_get_document_attributes(_ipp_client_t *client);
+static void            ipp_get_documents(_ipp_client_t *client);
+static void            ipp_get_job_attributes(_ipp_client_t *client);
+static void            ipp_get_jobs(_ipp_client_t *client);
+static void            ipp_get_notifications(_ipp_client_t *client);
+static void            ipp_get_output_device_attributes(_ipp_client_t *client);
+static void            ipp_get_printer_attributes(_ipp_client_t *client);
+static void            ipp_get_printer_supported_values(_ipp_client_t *client);
+static void            ipp_get_subscription_attributes(_ipp_client_t *client);
+static void            ipp_get_subscriptions(_ipp_client_t *client);
+static void            ipp_identify_printer(_ipp_client_t *client);
+static void            ipp_print_job(_ipp_client_t *client);
+static void            ipp_print_uri(_ipp_client_t *client);
+static void            ipp_renew_subscription(_ipp_client_t *client);
+static void            ipp_send_document(_ipp_client_t *client);
+static void            ipp_send_uri(_ipp_client_t *client);
+static void            ipp_update_active_jobs(_ipp_client_t *client);
+static void            ipp_update_document_status(_ipp_client_t *client);
+static void            ipp_update_job_status(_ipp_client_t *client);
+static void            ipp_update_output_device_attributes(_ipp_client_t *client);
+static void            ipp_validate_document(_ipp_client_t *client);
+static void            ipp_validate_job(_ipp_client_t *client);
+//static int           parse_options(_ipp_client_t *client, cups_option_t **options);
+static void            *process_client(_ipp_client_t *client);
+static int             process_http(_ipp_client_t *client);
+static int             process_ipp(_ipp_client_t *client);
+static void            *process_job(_ipp_job_t *job);
+static int             respond_http(_ipp_client_t *client, http_status_t code,
+                                    const char *content_coding,
+                                    const char *type, size_t length);
+static void            respond_ipp(_ipp_client_t *client, ipp_status_t status,
+                                   const char *message, ...)
+                       __attribute__ ((__format__ (__printf__, 3, 4)));
+static void            respond_unsupported(_ipp_client_t *client,
+                                           ipp_attribute_t *attr);
+static void            run_printer(_ipp_printer_t *printer);
+static char            *time_string(time_t tv, char *buffer, size_t bufsize);
+static void            update_device_attributes_no_lock(_ipp_printer_t *printer);
+static void            update_device_state_no_lock(_ipp_printer_t *printer);
+static void            usage(int status) __attribute__((noreturn));
+static int             valid_doc_attributes(_ipp_client_t *client);
+static int             valid_job_attributes(_ipp_client_t *client);
+
+
+/*
+ * Globals...
+ */
+
+static int             KeepFiles = 0,
+                       Verbosity = 0;
+//static _cups_mutex_t SubscriptionMutex = _CUPS_MUTEX_INITIALIZER;
+static _cups_cond_t    SubscriptionCondition = _CUPS_COND_INITIALIZER;
+
+
+/*
+ * 'main()' - Main entry to the sample infrastructure server.
+ */
+
+int                                    /* O - Exit status */
+main(int  argc,                                /* I - Number of command-line args */
+     char *argv[])                     /* I - Command-line arguments */
+{
+  int          i;                      /* Looping var */
+  const char   *opt,                   /* Current option character */
+               *servername = NULL,     /* Server host name */
+               *name = NULL;           /* Printer name */
+#ifdef HAVE_SSL
+  const char   *keypath = NULL;        /* Keychain path */
+#endif /* HAVE_SSL */
+  int          port = 0;               /* Port number (0 = auto) */
+  char         directory[1024] = "",   /* Spool directory */
+               hostname[1024],         /* Auto-detected hostname */
+               proxy_user[256] = "",   /* Proxy username */
+               *proxy_pass = NULL;     /* Proxy password */
+  _ipp_printer_t *printer;             /* Printer object */
+
+
+ /*
+  * Parse command-line arguments...
+  */
+
+  for (i = 1; i < argc; i ++)
+    if (argv[i][0] == '-')
+    {
+      for (opt = argv[i] + 1; *opt; opt ++)
+      {
+        switch (*opt)
+       {
+#ifdef HAVE_SSL
+         case 'K' : /* -K keypath */
+             i ++;
+             if (i >= argc)
+               usage(1);
+             keypath = argv[i];
+             break;
+#endif /* HAVE_SSL */
+
+         case 'd' : /* -d spool-directory */
+             i ++;
+             if (i >= argc)
+               usage(1);
+             strlcpy(directory, argv[i], sizeof(directory));
+             break;
+
+          case 'h' : /* -h (show help) */
+             usage(0);
+
+         case 'k' : /* -k (keep files) */
+             KeepFiles = 1;
+             break;
+
+         case 'n' : /* -n hostname */
+             i ++;
+             if (i >= argc)
+               usage(1);
+             servername = argv[i];
+             break;
+
+         case 'p' : /* -p port */
+             i ++;
+             if (i >= argc || !isdigit(argv[i][0] & 255))
+               usage(1);
+             port = atoi(argv[i]);
+             break;
+
+          case 'u' : /* -u user:pass */
+             i ++;
+             if (i >= argc)
+               usage(1);
+             strlcpy(proxy_user, argv[i], sizeof(proxy_user));
+             if ((proxy_pass = strchr(proxy_user, ':')) != NULL)
+               *proxy_pass++ = '\0';
+             break;
+
+         case 'v' : /* -v (be verbose) */
+             Verbosity ++;
+             break;
+
+          default : /* Unknown */
+             fprintf(stderr, "Unknown option \"-%c\".\n", *opt);
+             usage(1);
+       }
+      }
+    }
+    else if (!name)
+    {
+      name = argv[i];
+    }
+    else
+    {
+      fprintf(stderr, "Unexpected command-line argument \"%s\"\n", argv[i]);
+      usage(1);
+    }
+
+  if (!name)
+    usage(1);
+
+ /*
+  * Apply defaults as needed...
+  */
+
+  if (!servername)
+    servername = httpGetHostname(NULL, hostname, sizeof(hostname));
+
+  if (!port)
+  {
+#ifdef WIN32
+   /*
+    * Windows is almost always used as a single user system, so use a default port
+    * number of 8631.
+    */
+
+    port = 8631;
+
+#else
+   /*
+    * Use 8000 + UID mod 1000 for the default port number...
+    */
+
+    port = 8000 + ((int)getuid() % 1000);
+#endif /* WIN32 */
+
+    fprintf(stderr, "Listening on port %d.\n", port);
+  }
+
+  if (!directory[0])
+  {
+    snprintf(directory, sizeof(directory), "/tmp/ippserver.%d", (int)getpid());
+
+    if (mkdir(directory, 0777) && errno != EEXIST)
+    {
+      fprintf(stderr, "Unable to create spool directory \"%s\": %s\n",
+             directory, strerror(errno));
+      usage(1);
+    }
+
+    if (Verbosity)
+      fprintf(stderr, "Using spool directory \"%s\".\n", directory);
+  }
+
+  if (!proxy_user[0])
+  {
+    strlcpy(proxy_user, "test", sizeof(proxy_user));
+
+    if (Verbosity)
+      fputs("Using proxy username \"test\".\n", stderr);
+  }
+
+  if (!proxy_pass)
+  {
+    proxy_pass = "test123";
+
+    if (Verbosity)
+      fputs("Using proxy password \"test123\".\n", stderr);
+  }
+
+#ifdef HAVE_SSL
+  cupsSetServerCredentials(keypath, servername, 1);
+#endif /* HAVE_SSL */
+
+ /*
+  * Create the printer...
+  */
+
+  if ((printer = create_printer(servername, port, name, directory, proxy_user, proxy_pass)) == NULL)
+    return (1);
+
+ /*
+  * Run the print service...
+  */
+
+  run_printer(printer);
+
+ /*
+  * Destroy the printer and exit...
+  */
+
+  delete_printer(printer);
+
+  return (0);
+}
+
+
+/*
+ * 'add_event()' - Add an event to a subscription.
+ */
+
+static void
+add_event(_ipp_printer_t *printer,     /* I - Printer */
+          _ipp_job_t     *job,         /* I - Job, if any */
+         _ipp_event_t   event,         /* I - Event */
+         const char     *message,      /* I - Printf-style notify-text message */
+         ...)                          /* I - Additional printf arguments */
+{
+  _ipp_subscription_t *sub;            /* Current subscription */
+  ipp_t                *n;                     /* Notify attributes */
+  char         text[1024];             /* notify-text value */
+  va_list      ap;                     /* Argument pointer */
+
+
+  va_start(ap, message);
+  vsnprintf(text, sizeof(text), message, ap);
+  va_end(ap);
+
+  for (sub = (_ipp_subscription_t *)cupsArrayFirst(printer->subscriptions);
+       sub;
+       sub = (_ipp_subscription_t *)cupsArrayNext(printer->subscriptions))
+  {
+    if (sub->mask & event && (!sub->job || job == sub->job))
+    {
+      _cupsRWLockWrite(&sub->rwlock);
+
+      n = ippNew();
+      ippAddString(n, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_CHARSET, "notify-charset", NULL, "utf-8");
+      ippAddString(n, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_LANGUAGE, "notify-natural-language", NULL, "en");
+      ippAddInteger(n, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER, "notify-printer-up-time", time(NULL) - printer->start_time);
+      ippAddString(n, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_URI, "notify-printer-uri", NULL, printer->uri);
+      if (job)
+       ippAddInteger(n, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER, "notify-job-id", job->id);
+      ippAddInteger(n, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER, "notify-subcription-id", sub->id);
+      ippAddString(n, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_URI, "notify-subscription-uuid", NULL, sub->uuid);
+      ippAddInteger(n, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER, "notify-sequence-number", ++ sub->last_sequence);
+      ippAddString(n, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_KEYWORD, "notify-subscribed-event", NULL, get_notify_subscribed_event(event));
+      ippAddString(n, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_TEXT, "notify-text", NULL, text);
+      if (event & _IPP_EVENT_PRINTER_ALL)
+      {
+       ippAddInteger(n, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_ENUM, "printer-state", printer->state);
+       copy_printer_state_reasons(n, IPP_TAG_EVENT_NOTIFICATION, printer);
+      }
+      if (event & _IPP_EVENT_JOB_ALL)
+      {
+       ippAddInteger(n, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_ENUM, "job-state", job->state);
+       copy_job_state_reasons(n, IPP_TAG_EVENT_NOTIFICATION, job);
+       if (event == _IPP_EVENT_JOB_CREATED)
+       {
+         ippAddString(n, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_NAME, "job-name", NULL, job->name);
+         ippAddString(n, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_NAME, "job-originating-user-name", NULL, job->username);
+       }
+      }
+
+      cupsArrayAdd(sub->events, n);
+      if (cupsArrayCount(sub->events) > 100)
+      {
+        n = (ipp_t *)cupsArrayFirst(sub->events);
+       cupsArrayRemove(sub->events, n);
+       ippDelete(n);
+       sub->first_sequence ++;
+      }
+
+      _cupsRWUnlock(&sub->rwlock);
+      _cupsCondBroadcast(&SubscriptionCondition);
+    }
+  }
+}
+
+
+/*
+ * 'check_jobs()' - Check for new jobs to process.
+ */
+
+static void
+check_jobs(_ipp_printer_t *printer)    /* I - Printer */
+{
+  _ipp_job_t   *job;                   /* Current job */
+
+
+  if (printer->processing_job)
+    return;
+
+  _cupsRWLockWrite(&(printer->rwlock));
+  for (job = (_ipp_job_t *)cupsArrayFirst(printer->active_jobs);
+       job;
+       job = (_ipp_job_t *)cupsArrayNext(printer->active_jobs))
+  {
+    if (job->state == IPP_JSTATE_PENDING)
+    {
+      if (!_cupsThreadCreate((_cups_thread_func_t)process_job, job))
+      {
+        job->state     = IPP_JSTATE_ABORTED;
+       job->completed = time(NULL);
+
+        add_event(printer, job, _IPP_EVENT_JOB_COMPLETED, "Job aborted because creation of processing thread failed.");
+      }
+      break;
+    }
+  }
+  _cupsRWUnlock(&(printer->rwlock));
+}
+
+
+/*
+ * 'clean_jobs()' - Clean out old (completed) jobs.
+ */
+
+static void
+clean_jobs(_ipp_printer_t *printer)    /* I - Printer */
+{
+  _ipp_job_t   *job;                   /* Current job */
+  time_t       cleantime;              /* Clean time */
+
+
+  if (cupsArrayCount(printer->jobs) == 0)
+    return;
+
+  cleantime = time(NULL) - 60;
+
+  _cupsRWLockWrite(&(printer->rwlock));
+  for (job = (_ipp_job_t *)cupsArrayFirst(printer->jobs);
+       job;
+       job = (_ipp_job_t *)cupsArrayNext(printer->jobs))
+    if (job->completed && job->completed < cleantime)
+    {
+      cupsArrayRemove(printer->jobs, job);
+      delete_job(job);
+    }
+    else
+      break;
+  _cupsRWUnlock(&(printer->rwlock));
+}
+
+
+/*
+ * 'compare_active_jobs()' - Compare two active jobs.
+ */
+
+static int                             /* O - Result of comparison */
+compare_active_jobs(_ipp_job_t *a,     /* I - First job */
+                    _ipp_job_t *b)     /* I - Second job */
+{
+  int  diff;                           /* Difference */
+
+
+  if ((diff = b->priority - a->priority) == 0)
+    diff = b->id - a->id;
+
+  return (diff);
+}
+
+
+/*
+ * 'compare_completed_jobs()' - Compare two completed jobs.
+ */
+
+static int                             /* O - Result of comparison */
+compare_completed_jobs(_ipp_job_t *a,  /* I - First job */
+                       _ipp_job_t *b)  /* I - Second job */
+{
+  int  diff;                           /* Difference */
+
+
+  if ((diff = a->completed - b->completed) == 0)
+    diff = b->id - a->id;
+
+  return (diff);
+}
+
+
+/*
+ * 'compare_devices()' - Compare two devices...
+ */
+
+static int                             /* O - Result of comparison */
+compare_devices(_ipp_device_t *a,      /* I - First device */
+                _ipp_device_t *b)      /* I - Second device */
+{
+  return (strcmp(a->uuid, b->uuid));
+}
+
+
+/*
+ * 'compare_jobs()' - Compare two jobs.
+ */
+
+static int                             /* O - Result of comparison */
+compare_jobs(_ipp_job_t *a,            /* I - First job */
+             _ipp_job_t *b)            /* I - Second job */
+{
+  return (b->id - a->id);
+}
+
+
+/*
+ * 'copy_attributes()' - Copy attributes from one request to another.
+ */
+
+static void
+copy_attributes(ipp_t        *to,      /* I - Destination request */
+               ipp_t        *from,     /* I - Source request */
+               cups_array_t *ra,       /* I - Requested attributes */
+               ipp_tag_t    group_tag, /* I - Group to copy */
+               int          quickcopy) /* I - Do a quick copy? */
+{
+  _ipp_filter_t        filter;                 /* Filter data */
+
+
+  filter.ra        = ra;
+  filter.group_tag = group_tag;
+
+  ippCopyAttributes(to, from, quickcopy, (ipp_copycb_t)filter_cb, &filter);
+}
+
+
+/*
+ * 'copy_job_attrs()' - Copy job attributes to the response.
+ */
+
+static void
+copy_job_attributes(
+    _ipp_client_t *client,             /* I - Client */
+    _ipp_job_t    *job,                        /* I - Job */
+    cups_array_t  *ra)                 /* I - requested-attributes */
+{
+  copy_attributes(client->response, job->attrs, ra, IPP_TAG_JOB, 0);
+
+  if (!ra || cupsArrayFind(ra, "date-time-at-completed"))
+  {
+    if (job->completed)
+      ippAddDate(client->response, IPP_TAG_JOB, "date-time-at-completed", ippTimeToDate(job->completed));
+    else
+      ippAddOutOfBand(client->response, IPP_TAG_JOB, IPP_TAG_NOVALUE, "date-time-at-completed");
+  }
+
+  if (!ra || cupsArrayFind(ra, "date-time-at-processing"))
+  {
+    if (job->processing)
+      ippAddDate(client->response, IPP_TAG_JOB, "date-time-at-processing", ippTimeToDate(job->processing));
+    else
+      ippAddOutOfBand(client->response, IPP_TAG_JOB, IPP_TAG_NOVALUE, "date-time-at-processing");
+  }
+
+  if (!ra || cupsArrayFind(ra, "job-impressions"))
+    ippAddInteger(client->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-impressions", job->impressions);
+
+  if (!ra || cupsArrayFind(ra, "job-impressions-completed"))
+    ippAddInteger(client->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-impressions-completed", job->impcompleted);
+
+  if (!ra || cupsArrayFind(ra, "job-printer-up-time"))
+    ippAddInteger(client->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-printer-up-time", (int)(time(NULL) - client->printer->start_time));
+
+  if (!ra || cupsArrayFind(ra, "job-state"))
+    ippAddInteger(client->response, IPP_TAG_JOB, IPP_TAG_ENUM,
+                 "job-state", job->state);
+
+  if (!ra || cupsArrayFind(ra, "job-state-message"))
+  {
+    if (job->dev_state_message)
+    {
+      ippAddString(client->response, IPP_TAG_JOB, IPP_TAG_TEXT, "job-state-message", NULL, job->dev_state_message);
+    }
+    else
+    {
+      const char *message = "";                /* Message string */
+
+      switch (job->state)
+      {
+       case IPP_JSTATE_PENDING :
+           message = "Job pending.";
+           break;
+
+       case IPP_JSTATE_HELD :
+           if (job->state_reasons & _IPP_JREASON_JOB_INCOMING)
+             message = "Job incoming.";
+           else if (ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_ZERO))
+             message = "Job held.";
+           else
+             message = "Job created.";
+           break;
+
+       case IPP_JSTATE_PROCESSING :
+           if (job->state_reasons & _IPP_JREASON_PROCESSING_TO_STOP_POINT)
+           {
+             if (job->cancel)
+               message = "Cancel in progress.";
+             else
+               message = "Abort in progress.";
+           }
+           else
+             message = "Job printing.";
+           break;
+
+       case IPP_JSTATE_STOPPED :
+           message = "Job stopped.";
+           break;
+
+       case IPP_JSTATE_CANCELED :
+           message = "Job canceled.";
+           break;
+
+       case IPP_JSTATE_ABORTED :
+           message = "Job aborted.";
+           break;
+
+       case IPP_JSTATE_COMPLETED :
+           message = "Job completed.";
+           break;
+      }
+
+      ippAddString(client->response, IPP_TAG_JOB, IPP_CONST_TAG(IPP_TAG_TEXT), "job-state-message", NULL, message);
+    }
+  }
+
+  if (!ra || cupsArrayFind(ra, "job-state-reasons"))
+    copy_job_state_reasons(client->response, IPP_TAG_JOB, job);
+/*
+    switch (job->state)
+    {
+      case IPP_JSTATE_PENDING :
+         ippAddString(client->response, IPP_TAG_JOB,
+                      IPP_CONST_TAG(IPP_TAG_KEYWORD), "job-state-reasons",
+                      NULL, "none");
+         break;
+
+      case IPP_JSTATE_HELD :
+          if (job->fd >= 0)
+           ippAddString(client->response, IPP_TAG_JOB,
+                        IPP_CONST_TAG(IPP_TAG_KEYWORD),
+                        "job-state-reasons", NULL, "job-incoming");
+         else if (ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_ZERO))
+           ippAddString(client->response, IPP_TAG_JOB,
+                        IPP_CONST_TAG(IPP_TAG_KEYWORD),
+                        "job-state-reasons", NULL, "job-hold-until-specified");
+          else
+           ippAddString(client->response, IPP_TAG_JOB,
+                        IPP_CONST_TAG(IPP_TAG_KEYWORD),
+                        "job-state-reasons", NULL, "job-data-insufficient");
+         break;
+
+      case IPP_JSTATE_PROCESSING :
+         if (job->cancel)
+           ippAddString(client->response, IPP_TAG_JOB,
+                        IPP_CONST_TAG(IPP_TAG_KEYWORD),
+                        "job-state-reasons", NULL, "processing-to-stop-point");
+         else
+           ippAddString(client->response, IPP_TAG_JOB,
+                        IPP_CONST_TAG(IPP_TAG_KEYWORD),
+                        "job-state-reasons", NULL, "job-printing");
+         break;
+
+      case IPP_JSTATE_STOPPED :
+         ippAddString(client->response, IPP_TAG_JOB,
+                      IPP_CONST_TAG(IPP_TAG_KEYWORD), "job-state-reasons",
+                      NULL, "job-stopped");
+         break;
+
+      case IPP_JSTATE_CANCELED :
+         ippAddString(client->response, IPP_TAG_JOB,
+                      IPP_CONST_TAG(IPP_TAG_KEYWORD), "job-state-reasons",
+                      NULL, "job-canceled-by-user");
+         break;
+
+      case IPP_JSTATE_ABORTED :
+         ippAddString(client->response, IPP_TAG_JOB,
+                      IPP_CONST_TAG(IPP_TAG_KEYWORD), "job-state-reasons",
+                      NULL, "aborted-by-system");
+         break;
+
+      case IPP_JSTATE_COMPLETED :
+         ippAddString(client->response, IPP_TAG_JOB,
+                      IPP_CONST_TAG(IPP_TAG_KEYWORD), "job-state-reasons",
+                      NULL, "job-completed-successfully");
+         break;
+    }
+*/
+
+  if (!ra || cupsArrayFind(ra, "time-at-completed"))
+    ippAddInteger(client->response, IPP_TAG_JOB,
+                  job->completed ? IPP_TAG_INTEGER : IPP_TAG_NOVALUE,
+                  "time-at-completed", (int)(job->completed - client->printer->start_time));
+
+  if (!ra || cupsArrayFind(ra, "time-at-processing"))
+    ippAddInteger(client->response, IPP_TAG_JOB,
+                  job->processing ? IPP_TAG_INTEGER : IPP_TAG_NOVALUE,
+                  "time-at-processing", (int)(job->processing - client->printer->start_time));
+}
+
+
+/*
+ * 'copy_job_state_reasons()' - Copy printer-state-reasons values.
+ */
+
+static void
+copy_job_state_reasons(
+    ipp_t      *ipp,                   /* I - Attributes */
+    ipp_tag_t  group_tag,              /* I - Group */
+    _ipp_job_t *job)                   /* I - Printer */
+{
+  _ipp_jreason_t       creasons;       /* Combined job-state-reasons */
+
+
+  creasons = job->state_reasons | job->dev_state_reasons;
+
+  if (!creasons)
+  {
+    ippAddString(ipp, group_tag, IPP_CONST_TAG(IPP_TAG_KEYWORD), "job-state-reasons", NULL, "none");
+  }
+  else
+  {
+    int                        i,              /* Looping var */
+                       num_reasons = 0;/* Number of reasons */
+    _ipp_jreason_t     reason;         /* Current reason */
+    const char         *reasons[32];   /* Reason strings */
+
+    for (i = 0, reason = 1; i < (int)(sizeof(_ipp_jreasons) / sizeof(_ipp_jreasons[0])); i ++, reason <<= 1)
+    {
+      if (creasons & reason)
+        reasons[num_reasons ++] = _ipp_jreasons[i];
+    }
+
+    ippAddStrings(ipp, group_tag, IPP_CONST_TAG(IPP_TAG_KEYWORD), "job-state-reasons", num_reasons, NULL, reasons);
+  }
+}
+
+
+/*
+ * 'copy_printer_state_reasons()' - Copy printer-state-reasons values.
+ */
+
+static void
+copy_printer_state_reasons(
+    ipp_t          *ipp,               /* I - Attributes */
+    ipp_tag_t      group_tag,          /* I - Group */
+    _ipp_printer_t *printer)           /* I - Printer */
+{
+  _ipp_preason_t       creasons = printer->state_reasons | printer->dev_reasons;
+                                       /* Combined reasons */
+
+
+  if (creasons == _IPP_PREASON_NONE)
+  {
+    ippAddString(ipp, group_tag, IPP_CONST_TAG(IPP_TAG_KEYWORD), "printer-state-reasons", NULL, "none");
+  }
+  else
+  {
+    int                        i,              /* Looping var */                               num_reasons = 0;/* Number of reasons */
+    _ipp_preason_t     reason;         /* Current reason */
+    const char         *reasons[32];   /* Reason strings */
+
+    for (i = 0, reason = 1; i < (int)(sizeof(_ipp_preasons) / sizeof(_ipp_preasons[0])); i ++, reason <<= 1)
+    {
+      if (creasons & reason)
+       reasons[num_reasons ++] = _ipp_preasons[i];
+    }
+
+    ippAddStrings(ipp, group_tag, IPP_CONST_TAG(IPP_TAG_KEYWORD), "printer-state-reasons", num_reasons, NULL, reasons);
+  }
+}
+
+
+/*
+ * 'copy_sub_attrs()' - Copy job attributes to the response.
+ */
+
+static void
+copy_subscription_attributes(
+    _ipp_client_t       *client,       /* I - Client */
+    _ipp_subscription_t *sub,          /* I - Subscription */
+    cups_array_t        *ra)           /* I - requested-attributes */
+{
+  copy_attributes(client->response, sub->attrs, ra, IPP_TAG_SUBSCRIPTION, 0);
+
+  if (!ra || cupsArrayFind(ra, "notify-lease-expiration-time"))
+    ippAddInteger(client->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_INTEGER, "notify-lease-expiration-time", (int)(sub->expire - client->printer->start_time));
+
+  if (!ra || cupsArrayFind(ra, "notify-printer-up-time"))
+    ippAddInteger(client->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_INTEGER, "notify-printer-up-time", (int)(time(NULL) - client->printer->start_time));
+
+  if (!ra || cupsArrayFind(ra, "notify-sequence-number"))
+    ippAddInteger(client->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_INTEGER, "notify-sequence-number", sub->last_sequence);
+}
+
+
+/*
+ * 'create_client()' - Accept a new network connection and create a client
+ *                     object.
+ */
+
+static _ipp_client_t *                 /* O - Client */
+create_client(_ipp_printer_t *printer, /* I - Printer */
+              int            sock)     /* I - Listen socket */
+{
+  _ipp_client_t        *client;                /* Client */
+
+
+  if ((client = calloc(1, sizeof(_ipp_client_t))) == NULL)
+  {
+    perror("Unable to allocate memory for client");
+    return (NULL);
+  }
+
+  client->printer    = printer;
+  client->fetch_file = -1;
+
+ /*
+  * Accept the client and get the remote address...
+  */
+
+  if ((client->http = httpAcceptConnection(sock, 1)) == NULL)
+  {
+    perror("Unable to accept client connection");
+
+    free(client);
+
+    return (NULL);
+  }
+
+  httpGetHostname(client->http, client->hostname, sizeof(client->hostname));
+
+  if (Verbosity)
+    fprintf(stderr, "Accepted connection from %s\n", client->hostname);
+
+  return (client);
+}
+
+
+/*
+ * 'create_device()' - Create an output device tracking object.
+ */
+
+static _ipp_device_t *                 /* O - Device */
+create_device(_ipp_client_t *client)   /* I - Client */
+{
+  _ipp_device_t                *device;        /* Device */
+  ipp_attribute_t      *uuid;          /* output-device-uuid */
+
+
+  if ((uuid = ippFindAttribute(client->request, "output-device-uuid", IPP_TAG_URI)) == NULL)
+    return (NULL);
+
+  if ((device = calloc(1, sizeof(_ipp_device_t))) == NULL)
+    return (NULL);
+
+  _cupsRWInit(&device->rwlock);
+
+  device->uuid  = strdup(ippGetString(uuid, 0, NULL));
+  device->state = IPP_PSTATE_STOPPED;
+
+  _cupsRWLockWrite(&client->printer->rwlock);
+  cupsArrayAdd(client->printer->devices, device);
+  _cupsRWUnlock(&client->printer->rwlock);
+
+  return (device);
+}
+
+
+/*
+ * 'create_job()' - Create a new job object from a Print-Job or Create-Job
+ *                  request.
+ */
+
+static _ipp_job_t *                    /* O - Job */
+create_job(_ipp_client_t *client)      /* I - Client */
+{
+  _ipp_job_t           *job;           /* Job */
+  ipp_attribute_t      *attr;          /* Job attribute */
+  char                 uri[1024],      /* job-uri value */
+                       uuid[64];       /* job-uuid value */
+
+
+  _cupsRWLockWrite(&(client->printer->rwlock));
+
+ /*
+  * Allocate and initialize the job object...
+  */
+
+  if ((job = calloc(1, sizeof(_ipp_job_t))) == NULL)
+  {
+    perror("Unable to allocate memory for job");
+    return (NULL);
+  }
+
+  job->printer    = client->printer;
+  job->attrs      = ippNew();
+  job->state      = IPP_JSTATE_HELD;
+  job->fd         = -1;
+
+ /*
+  * Copy all of the job attributes...
+  */
+
+  copy_attributes(job->attrs, client->request, NULL, IPP_TAG_JOB, 0);
+
+ /*
+  * Get the requesting-user-name, document format, and priority...
+  */
+
+  if ((attr = ippFindAttribute(client->request, "job-priority", IPP_TAG_INTEGER)) != NULL)
+    job->priority = ippGetInteger(attr, 0);
+  else
+    job->priority = 50;
+
+  if ((attr = ippFindAttribute(client->request, "requesting-user-name", IPP_TAG_NAME)) != NULL)
+    job->username = ippGetString(attr, 0, NULL);
+  else
+    job->username = "anonymous";
+
+  ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_NAME, "job-originating-user-name", NULL, job->username);
+
+  if (ippGetOperation(client->request) != IPP_OP_CREATE_JOB)
+  {
+    if ((attr = ippFindAttribute(job->attrs, "document-format-detected", IPP_TAG_MIMETYPE)) != NULL)
+      job->format = ippGetString(attr, 0, NULL);
+    else if ((attr = ippFindAttribute(job->attrs, "document-format-supplied", IPP_TAG_MIMETYPE)) != NULL)
+      job->format = ippGetString(attr, 0, NULL);
+    else
+      job->format = "application/octet-stream";
+  }
+
+  if ((attr = ippFindAttribute(client->request, "job-impressions", IPP_TAG_INTEGER)) != NULL)
+    job->impressions = ippGetInteger(attr, 0);
+
+  if ((attr = ippFindAttribute(client->request, "job-name", IPP_TAG_NAME)) != NULL)
+    job->name = ippGetString(attr, 0, NULL);
+
+ /*
+  * Add job description attributes and add to the jobs array...
+  */
+
+  job->id = client->printer->next_job_id ++;
+
+  snprintf(uri, sizeof(uri), "%s/%d", client->printer->uri, job->id);
+  httpAssembleUUID(client->printer->hostname, client->printer->port, client->printer->name, job->id, uuid, sizeof(uuid));
+
+  ippAddDate(job->attrs, IPP_TAG_JOB, "date-time-at-creation", ippTimeToDate(time(&job->created)));
+  ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-id", job->id);
+  ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-uri", NULL, uri);
+  ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-uuid", NULL, uuid);
+  ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-printer-uri", NULL, client->printer->uri);
+  ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "time-at-creation", (int)(job->created - client->printer->start_time));
+
+  cupsArrayAdd(client->printer->jobs, job);
+  cupsArrayAdd(client->printer->active_jobs, job);
+
+  _cupsRWUnlock(&(client->printer->rwlock));
+
+  return (job);
+}
+
+
+/*
+ * 'create_job_filename()' - Create the filename for a document in a job.
+ */
+
+static void create_job_filename(
+    _ipp_printer_t *printer,           /* I - Printer */
+    _ipp_job_t     *job,               /* I - Job */
+    const char     *format,            /* I - Format or NULL */
+    char           *fname,             /* I - Filename buffer */
+    size_t         fnamesize)          /* I - Size of filename buffer */
+{
+  char                 name[256],      /* "Safe" filename */
+                       *nameptr;       /* Pointer into filename */
+  const char           *ext,           /* Filename extension */
+                       *job_name;      /* job-name value */
+  ipp_attribute_t      *job_name_attr; /* job-name attribute */
+
+
+ /*
+  * Make a name from the job-name attribute...
+  */
+
+  if ((job_name_attr = ippFindAttribute(job->attrs, "job-name", IPP_TAG_NAME)) != NULL)
+    job_name = ippGetString(job_name_attr, 0, NULL);
+  else
+    job_name = "untitled";
+
+  for (nameptr = name; *job_name && nameptr < (name + sizeof(name) - 1); job_name ++)
+    if (isalnum(*job_name & 255) || *job_name == '-')
+      *nameptr++ = (char)tolower(*job_name & 255);
+    else
+      *nameptr++ = '_';
+
+  *nameptr = '\0';
+
+ /*
+  * Figure out the extension...
+  */
+
+  if (!format)
+    format = job->format;
+
+  if (!strcasecmp(format, "image/jpeg"))
+    ext = "jpg";
+  else if (!strcasecmp(format, "image/png"))
+    ext = "png";
+  else if (!strcasecmp(format, "image/pwg-raster"))
+    ext = "ras";
+  else if (!strcasecmp(format, "image/urf"))
+    ext = "urf";
+  else if (!strcasecmp(format, "application/pdf"))
+    ext = "pdf";
+  else if (!strcasecmp(format, "application/postscript"))
+    ext = "ps";
+  else
+    ext = "prn";
+
+ /*
+  * Create a filename with the job-id, job-name, and document-format (extension)...
+  */
+
+  snprintf(fname, fnamesize, "%s/%d-%s.%s", printer->directory, job->id, name, ext);
+}
+
+
+/*
+ * 'create_listener()' - Create a listener socket.
+ */
+
+static int                             /* O - Listener socket or -1 on error */
+create_listener(int family,            /* I - Address family */
+                int port)              /* I - Port number */
+{
+  int                  sock;           /* Listener socket */
+  http_addrlist_t      *addrlist;      /* Listen address */
+  char                 service[255];   /* Service port */
+
+
+  snprintf(service, sizeof(service), "%d", port);
+  if ((addrlist = httpAddrGetList(NULL, family, service)) == NULL)
+    return (-1);
+
+  sock = httpAddrListen(&(addrlist->addr), port);
+
+  httpAddrFreeList(addrlist);
+
+  return (sock);
+}
+
+
+/*
+ * 'create_printer()' - Create, register, and listen for connections to a
+ *                      printer object.
+ */
+
+static _ipp_printer_t *                        /* O - Printer */
+create_printer(const char *servername, /* I - Server hostname (NULL for default) */
+               int        port,                /* I - Port number */
+               const char *name,       /* I - printer-name */
+              const char *directory,   /* I - Spool directory */
+              const char *proxy_user,  /* I - Proxy account username */
+              const char *proxy_pass)  /* I - Proxy account password */
+{
+  _ipp_printer_t       *printer;       /* Printer */
+  char                 uri[1024],      /* Printer URI */
+                       adminurl[1024], /* printer-more-info URI */
+                       supplyurl[1024],/* printer-supply-info-uri URI */
+                       uuid[128];      /* printer-uuid */
+  int                  k_supported;    /* Maximum file size supported */
+#ifdef HAVE_STATVFS
+  struct statvfs       spoolinfo;      /* FS info for spool directory */
+  double               spoolsize;      /* FS size */
+#elif defined(HAVE_STATFS)
+  struct statfs                spoolinfo;      /* FS info for spool directory */
+  double               spoolsize;      /* FS size */
+#endif /* HAVE_STATVFS */
+  static const char * const versions[] =/* ipp-versions-supported values */
+  {
+    "1.0",
+    "1.1",
+    "2.0"
+  };
+  static const char * const features[] =/* ipp-features-supported values */
+  {
+    "document-object",
+    "ipp-everywhere",
+    "infrastructure-printer",
+    "page-overrides"
+  };
+  static const int     ops[] =         /* operations-supported values */
+  {
+    IPP_OP_PRINT_JOB,
+    IPP_OP_PRINT_URI,
+    IPP_OP_VALIDATE_JOB,
+    IPP_OP_CREATE_JOB,
+    IPP_OP_SEND_DOCUMENT,
+    IPP_OP_SEND_URI,
+    IPP_OP_CANCEL_JOB,
+    IPP_OP_GET_JOB_ATTRIBUTES,
+    IPP_OP_GET_JOBS,
+    IPP_OP_GET_PRINTER_ATTRIBUTES,
+    IPP_OP_GET_PRINTER_SUPPORTED_VALUES,
+    IPP_OP_CREATE_PRINTER_SUBSCRIPTIONS,
+    IPP_OP_CREATE_JOB_SUBSCRIPTIONS,
+    IPP_OP_GET_SUBSCRIPTION_ATTRIBUTES,
+    IPP_OP_GET_SUBSCRIPTIONS,
+    IPP_OP_RENEW_SUBSCRIPTION,
+    IPP_OP_CANCEL_SUBSCRIPTION,
+    IPP_OP_GET_NOTIFICATIONS,
+    IPP_OP_GET_DOCUMENT_ATTRIBUTES,
+    IPP_OP_GET_DOCUMENTS,
+    IPP_OP_CANCEL_MY_JOBS,
+    IPP_OP_CLOSE_JOB,
+    IPP_OP_IDENTIFY_PRINTER,
+    IPP_OP_VALIDATE_DOCUMENT,
+    _IPP_OP_ACKNOWLEDGE_DOCUMENT,
+    _IPP_OP_ACKNOWLEDGE_IDENTIFY_PRINTER,
+    _IPP_OP_ACKNOWLEDGE_JOB,
+    _IPP_OP_FETCH_DOCUMENT,
+    _IPP_OP_FETCH_JOB,
+    _IPP_OP_GET_OUTPUT_DEVICE_ATTRIBUTES,
+    _IPP_OP_UPDATE_ACTIVE_JOBS,
+    _IPP_OP_UPDATE_DOCUMENT_STATUS,
+    _IPP_OP_UPDATE_JOB_STATUS,
+    _IPP_OP_UPDATE_OUTPUT_DEVICE_ATTRIBUTES,
+    _IPP_OP_DEREGISTER_OUTPUT_DEVICE
+  };
+  static const char * const charsets[] =/* charset-supported values */
+  {
+    "us-ascii",
+    "utf-8"
+  };
+  static const char * const compressions[] =/* compression-supported values */
+  {
+#ifdef HAVE_LIBZ
+    "deflate",
+    "gzip",
+#endif /* HAVE_LIBZ */
+    "none"
+  };
+  static const char * const notify_attributes[] =
+  {                                    /* notify-attributes-supported */
+    "printer-state-change-time",
+    "notify-lease-expiration-time",
+    "notify-subscriber-user-name"
+  };
+  static const char * const reference_uri_schemes_supported[] =
+  {                                    /* reference-uri-schemes-supported */
+    "file",
+    "ftp",
+    "http"
+#ifdef HAVE_SSL
+    , "https"
+#endif /* HAVE_SSL */
+  };
+  static const char * const which_jobs[] =
+  {                                    /* which-jobs-supported values */
+    "completed",
+    "not-completed",
+    "aborted",
+    "all",
+    "canceled",
+    "pending",
+    "pending-held",
+    "processing",
+    "processing-stopped"
+  };
+
+
+ /*
+  * Allocate memory for the printer...
+  */
+
+  if ((printer = calloc(1, sizeof(_ipp_printer_t))) == NULL)
+  {
+    perror("ippserver: Unable to allocate memory for printer");
+    return (NULL);
+  }
+
+  printer->ipv4           = -1;
+  printer->ipv6           = -1;
+  printer->name           = strdup(name);
+  printer->directory      = strdup(directory);
+  printer->hostname       = strdup(servername);
+  printer->port           = port;
+  printer->start_time     = time(NULL);
+  printer->config_time    = printer->start_time;
+  printer->state          = IPP_PSTATE_IDLE;
+  printer->state_reasons  = _IPP_PREASON_NONE;
+  printer->state_time     = printer->start_time;
+  printer->jobs           = cupsArrayNew3((cups_array_func_t)compare_jobs, NULL, NULL, 0, NULL, (cups_afree_func_t)delete_job);
+  printer->active_jobs    = cupsArrayNew((cups_array_func_t)compare_active_jobs, NULL);
+  printer->completed_jobs = cupsArrayNew((cups_array_func_t)compare_completed_jobs, NULL);
+  printer->next_job_id    = 1;
+
+  httpAssembleURI(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL,
+                 printer->hostname, printer->port, "/ipp/print");
+  printer->uri    = strdup(uri);
+  printer->urilen = strlen(uri);
+
+  if (proxy_user)
+    printer->proxy_user = strdup(proxy_user);
+  if (proxy_pass)
+    printer->proxy_pass = strdup(proxy_pass);
+
+  printer->devices = cupsArrayNew((cups_array_func_t)compare_devices, NULL);
+
+  _cupsRWInit(&(printer->rwlock));
+
+ /*
+  * Create the listener sockets...
+  */
+
+  if ((printer->ipv4 = create_listener(AF_INET, printer->port)) < 0)
+  {
+    perror("Unable to create IPv4 listener");
+    goto bad_printer;
+  }
+
+  if ((printer->ipv6 = create_listener(AF_INET6, printer->port)) < 0)
+  {
+    perror("Unable to create IPv6 listener");
+    goto bad_printer;
+  }
+
+ /*
+  * Prepare values for the printer attributes...
+  */
+
+  httpAssembleURI(HTTP_URI_CODING_ALL, adminurl, sizeof(adminurl), "http", NULL, printer->hostname, printer->port, "/");
+  httpAssembleURI(HTTP_URI_CODING_ALL, supplyurl, sizeof(supplyurl), "http", NULL, printer->hostname, printer->port, "/supplies");
+
+  if (Verbosity)
+  {
+    fprintf(stderr, "printer-more-info=\"%s\"\n", adminurl);
+    fprintf(stderr, "printer-supply-info-uri=\"%s\"\n", supplyurl);
+    fprintf(stderr, "printer-uri=\"%s\"\n", uri);
+  }
+
+ /*
+  * Get the maximum spool size based on the size of the filesystem used for
+  * the spool directory.  If the host OS doesn't support the statfs call
+  * or the filesystem is larger than 2TiB, always report INT_MAX.
+  */
+
+#ifdef HAVE_STATVFS
+  if (statvfs(printer->directory, &spoolinfo))
+    k_supported = INT_MAX;
+  else if ((spoolsize = (double)spoolinfo.f_frsize *
+                        spoolinfo.f_blocks / 1024) > INT_MAX)
+    k_supported = INT_MAX;
+  else
+    k_supported = (int)spoolsize;
+
+#elif defined(HAVE_STATFS)
+  if (statfs(printer->directory, &spoolinfo))
+    k_supported = INT_MAX;
+  else if ((spoolsize = (double)spoolinfo.f_bsize *
+                        spoolinfo.f_blocks / 1024) > INT_MAX)
+    k_supported = INT_MAX;
+  else
+    k_supported = (int)spoolsize;
+
+#else
+  k_supported = INT_MAX;
+#endif /* HAVE_STATVFS */
+
+ /*
+  * Create the printer attributes.  This list of attributes is sorted to improve
+  * performance when the client provides a requested-attributes attribute...
+  */
+
+  printer->attrs = ippNew();
+
+  /* charset-configured */
+  ippAddString(printer->attrs, IPP_TAG_PRINTER,
+               IPP_CONST_TAG(IPP_TAG_CHARSET),
+               "charset-configured", NULL, "utf-8");
+
+  /* charset-supported */
+  ippAddStrings(printer->attrs, IPP_TAG_PRINTER,
+                IPP_CONST_TAG(IPP_TAG_CHARSET),
+                "charset-supported", sizeof(charsets) / sizeof(charsets[0]),
+               NULL, charsets);
+
+  /* compression-supported */
+  ippAddStrings(printer->attrs, IPP_TAG_PRINTER,
+                IPP_CONST_TAG(IPP_TAG_KEYWORD),
+               "compression-supported",
+               (int)(sizeof(compressions) / sizeof(compressions[0])), NULL,
+               compressions);
+
+  /* generated-natural-language-supported */
+  ippAddString(printer->attrs, IPP_TAG_PRINTER,
+               IPP_CONST_TAG(IPP_TAG_LANGUAGE),
+               "generated-natural-language-supported", NULL, "en");
+
+  /* ipp-features-supported */
+  ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "ipp-features-supported", sizeof(features) / sizeof(features[0]), NULL, features);
+
+  /* ipp-versions-supported */
+  ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "ipp-versions-supported", sizeof(versions) / sizeof(versions[0]), NULL, versions);
+
+  /* ippget-event-life */
+  ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "ippget-event-life", 300);
+
+  /* job-ids-supported */
+  ippAddBoolean(printer->attrs, IPP_TAG_PRINTER, "job-ids-supported", 1);
+
+  /* job-k-octets-supported */
+  ippAddRange(printer->attrs, IPP_TAG_PRINTER, "job-k-octets-supported", 0,
+             k_supported);
+
+  /* job-priority-default */
+  ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
+                "job-priority-default", 50);
+
+  /* job-priority-supported */
+  ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
+                "job-priority-supported", 100);
+
+  /* multiple-document-jobs-supported */
+  ippAddBoolean(printer->attrs, IPP_TAG_PRINTER, "multiple-document-jobs-supported", 0);
+
+  /* multiple-operation-time-out */
+  ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "multiple-operation-time-out", 60);
+
+  /* multiple-operation-time-out-action */
+  ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "multiple-operation-time-out-action", NULL, "abort-job");
+
+  /* natural-language-configured */
+  ippAddString(printer->attrs, IPP_TAG_PRINTER,
+               IPP_CONST_TAG(IPP_TAG_LANGUAGE),
+               "natural-language-configured", NULL, "en");
+
+  /* notify-attributes-supported */
+  ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "notify-attributes-supported", sizeof(notify_attributes) / sizeof(notify_attributes[0]), NULL, notify_attributes);
+
+  /* notify-events-default */
+  ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "notify-events-default", NULL, "job-completed");
+
+  /* notify-events-supported */
+  ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "notify-events-supported", sizeof(_ipp_events) / sizeof(_ipp_events[0]), NULL, _ipp_events);
+
+  /* notify-lease-duration-default */
+  ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "notify-lease-duration-default", 86400);
+
+  /* notify-lease-duration-supported */
+  ippAddRange(printer->attrs, IPP_TAG_PRINTER, "notify-lease-duration-supported", 0, _IPP_NOTIFY_LEASE_DURATION_MAX);
+
+  /* notify-max-events-supported */
+  ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "notify-lease-duration-default", (int)(sizeof(_ipp_events) / sizeof(_ipp_events[0])));
+
+  /* notify-pull-method-supported */
+  ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "notify-pull-method-supported", NULL, "ippget");
+
+  /* operations-supported */
+  ippAddIntegers(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM,
+                "operations-supported", sizeof(ops) / sizeof(ops[0]), ops);
+
+  /* printer-get-attributes-supported */
+  ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "printer-get-attributes-supported", NULL, "document-format");
+
+  /* printer-is-accepting-jobs */
+  ippAddBoolean(printer->attrs, IPP_TAG_PRINTER, "printer-is-accepting-jobs", 1);
+
+  /* printer-info */
+  ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-info", NULL, name);
+
+  /* printer-more-info */
+  ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-more-info", NULL, adminurl);
+
+  /* printer-name */
+  ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_NAME, "printer-name", NULL, name);
+
+  /* printer-supply-info-uri */
+  ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-supply-info-uri", NULL, supplyurl);
+
+  /* printer-uri-supported */
+  ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-uri-supported", NULL, uri);
+
+  /* printer-uuid */
+  httpAssembleUUID(printer->hostname, port, name, 0, uuid, sizeof(uuid));
+  ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-uuid", NULL, uuid);
+
+  /* reference-uri-scheme-supported */
+  ippAddStrings(printer->attrs, IPP_TAG_PRINTER,
+                IPP_CONST_TAG(IPP_TAG_URISCHEME),
+                "reference-uri-schemes-supported",
+                (int)(sizeof(reference_uri_schemes_supported) /
+                      sizeof(reference_uri_schemes_supported[0])),
+                NULL, reference_uri_schemes_supported);
+
+  /* uri-authentication-supported */
+  ippAddString(printer->attrs, IPP_TAG_PRINTER,
+               IPP_CONST_TAG(IPP_TAG_KEYWORD),
+               "uri-authentication-supported", NULL, "basic");
+
+  /* uri-security-supported */
+  ippAddString(printer->attrs, IPP_TAG_PRINTER,
+               IPP_CONST_TAG(IPP_TAG_KEYWORD),
+               "uri-security-supported", NULL, "tls");
+
+  /* which-jobs-supported */
+  ippAddStrings(printer->attrs, IPP_TAG_PRINTER,
+                IPP_CONST_TAG(IPP_TAG_KEYWORD),
+                "which-jobs-supported",
+                sizeof(which_jobs) / sizeof(which_jobs[0]), NULL, which_jobs);
+
+  debug_attributes("Printer", printer->attrs, 0);
+
+ /*
+  * Return it!
+  */
+
+  return (printer);
+
+
+ /*
+  * If we get here we were unable to create the printer...
+  */
+
+  bad_printer:
+
+  delete_printer(printer);
+  return (NULL);
+}
+
+
+/*
+ * 'create_subscription()' - Create a new subscription object from a
+ *                           Print-Job, Create-Job, or Create-xxx-Subscription
+ *                           request.
+ */
+
+static _ipp_subscription_t *           /* O - Subscription object */
+create_subscription(
+    _ipp_printer_t  *printer,          /* I - Printer */
+    _ipp_job_t      *job,              /* I - Job, if any */
+    int             interval,          /* I - Interval for progress events */
+    int             lease,             /* I - Lease duration */
+    const char      *username,         /* I - User creating the subscription */
+    ipp_attribute_t *notify_events,    /* I - Events to monitor */
+    ipp_attribute_t *notify_attributes,        /* I - Attributes to report */
+    ipp_attribute_t *notify_user_data) /* I - User data, if any */
+{
+  _ipp_subscription_t  *sub;           /* Subscription */
+  ipp_attribute_t      *attr;          /* Subscription attribute */
+  char                 uuid[64];       /* notify-subscription-uuid value */
+
+
+ /*
+  * Allocate and initialize the subscription object...
+  */
+
+  if ((sub = calloc(1, sizeof(_ipp_subscription_t))) == NULL)
+  {
+    perror("Unable to allocate memory for subscription");
+    return (NULL);
+  }
+
+  _cupsRWLockWrite(&(printer->rwlock));
+
+  sub->id       = printer->next_sub_id ++;
+  sub->mask     = notify_events ? get_notify_events_bits(notify_events) : _IPP_EVENT_DEFAULT;
+  sub->printer  = printer;
+  sub->job      = job;
+  sub->interval = interval;
+  sub->lease    = lease;
+  sub->attrs    = ippNew();
+
+  if (lease)
+    sub->expire = time(NULL) + sub->lease;
+  else
+    sub->expire = INT_MAX;
+
+  _cupsRWInit(&(sub->rwlock));
+
+ /*
+  * Add subscription description attributes and add to the subscriptions
+  * array...
+  */
+
+  ippAddInteger(sub->attrs, IPP_TAG_SUBSCRIPTION, IPP_TAG_INTEGER, "notify-subscription-id", sub->id);
+
+  httpAssembleUUID(printer->hostname, printer->port, printer->name, -sub->id, uuid, sizeof(uuid));
+  attr = ippAddString(sub->attrs, IPP_TAG_SUBSCRIPTION, IPP_TAG_URI, "notify-subscription-uuid", NULL, uuid);
+  sub->uuid = ippGetString(attr, 0, NULL);
+
+  ippAddString(sub->attrs, IPP_TAG_SUBSCRIPTION, IPP_TAG_URI, "notify-printer-uri", NULL, printer->uri);
+
+  if (job)
+    ippAddInteger(sub->attrs, IPP_TAG_SUBSCRIPTION, IPP_TAG_INTEGER, "notify-job-id", job->id);
+  else
+    ippAddInteger(sub->attrs, IPP_TAG_SUBSCRIPTION, IPP_TAG_INTEGER, "notify-lease-duration", sub->lease);
+
+  attr = ippAddString(sub->attrs, IPP_TAG_SUBSCRIPTION, IPP_TAG_NAME, "notify-subscriber-user-name", NULL, username);
+  sub->username = ippGetString(attr, 0, NULL);
+
+  if (notify_events)
+    ippCopyAttribute(sub->attrs, notify_events, 0);
+  else
+    ippAddString(sub->attrs, IPP_TAG_SUBSCRIPTION, IPP_CONST_TAG(IPP_TAG_KEYWORD), "notify-events", NULL, _IPP_EVENT_DEFAULT_STRING);
+
+  ippAddString(sub->attrs, IPP_TAG_SUBSCRIPTION, IPP_CONST_TAG(IPP_TAG_KEYWORD), "notify-pull-method", NULL, "ippget");
+
+  if (notify_attributes)
+    ippCopyAttribute(sub->attrs, notify_attributes, 0);
+
+  if (notify_user_data)
+    ippCopyAttribute(sub->attrs, notify_user_data, 0);
+
+  sub->events = cupsArrayNew3(NULL, NULL, NULL, 0, NULL, (cups_afree_func_t)ippDelete);
+
+  cupsArrayAdd(printer->subscriptions, sub);
+
+  _cupsRWUnlock(&(printer->rwlock));
+
+  return (sub);
+}
+
+
+/*
+ * 'debug_attributes()' - Print attributes in a request or response.
+ */
+
+static void
+debug_attributes(const char *title,    /* I - Title */
+                 ipp_t      *ipp,      /* I - Request/response */
+                 int        type)      /* I - 0 = object, 1 = request, 2 = response */
+{
+  ipp_tag_t            group_tag;      /* Current group */
+  ipp_attribute_t      *attr;          /* Current attribute */
+  char                 buffer[2048];   /* String buffer for value */
+  int                  major, minor;   /* Version */
+
+
+  if (Verbosity <= 1)
+    return;
+
+  fprintf(stderr, "%s:\n", title);
+  major = ippGetVersion(ipp, &minor);
+  fprintf(stderr, "  version=%d.%d\n", major, minor);
+  if (type == 1)
+    fprintf(stderr, "  operation-id=%s(%04x)\n",
+            ippOpString(ippGetOperation(ipp)), ippGetOperation(ipp));
+  else if (type == 2)
+    fprintf(stderr, "  status-code=%s(%04x)\n",
+            ippErrorString(ippGetStatusCode(ipp)), ippGetStatusCode(ipp));
+  fprintf(stderr, "  request-id=%d\n\n", ippGetRequestId(ipp));
+
+  for (attr = ippFirstAttribute(ipp), group_tag = IPP_TAG_ZERO;
+       attr;
+       attr = ippNextAttribute(ipp))
+  {
+    if (ippGetGroupTag(attr) != group_tag)
+    {
+      group_tag = ippGetGroupTag(attr);
+      fprintf(stderr, "  %s\n", ippTagString(group_tag));
+    }
+
+    if (ippGetName(attr))
+    {
+      ippAttributeString(attr, buffer, sizeof(buffer));
+      fprintf(stderr, "    %s (%s%s) %s\n", ippGetName(attr),
+             ippGetCount(attr) > 1 ? "1setOf " : "",
+             ippTagString(ippGetValueTag(attr)), buffer);
+    }
+  }
+}
+
+
+/*
+ * 'delete_client()' - Close the socket and free all memory used by a client
+ *                     object.
+ */
+
+static void
+delete_client(_ipp_client_t *client)   /* I - Client */
+{
+  if (Verbosity)
+    fprintf(stderr, "Closing connection from %s\n", client->hostname);
+
+ /*
+  * Flush pending writes before closing...
+  */
+
+  httpFlushWrite(client->http);
+
+ /*
+  * Free memory...
+  */
+
+  httpClose(client->http);
+
+  ippDelete(client->request);
+  ippDelete(client->response);
+
+  free(client);
+}
+
+
+/*
+ * 'delete_device()' - Remove a device from a printer.
+ *
+ * Note: Caller is responsible for locking the printer object.
+ */
+
+static void
+delete_device(_ipp_device_t *device)   /* I - Device */
+{
+ /*
+  * Free memory used for the device...
+  */
+
+  _cupsRWDeinit(&device->rwlock);
+
+  if (device->name)
+    free(device->name);
+
+  free(device->uuid);
+
+  ippDelete(device->attrs);
+
+  free(device);
+}
+
+
+/*
+ * 'delete_job()' - Remove from the printer and free all memory used by a job
+ *                  object.
+ */
+
+static void
+delete_job(_ipp_job_t *job)            /* I - Job */
+{
+  if (Verbosity)
+    fprintf(stderr, "Removing job #%d from history.\n", job->id);
+
+  _cupsRWLockWrite(&job->rwlock);
+
+  ippDelete(job->attrs);
+
+  if (job->filename)
+  {
+    if (!KeepFiles)
+      unlink(job->filename);
+
+    free(job->filename);
+  }
+
+  _cupsRWDeinit(&job->rwlock);
+
+  free(job);
+}
+
+
+/*
+ * 'delete_printer()' - Unregister, close listen sockets, and free all memory
+ *                      used by a printer object.
+ */
+
+static void
+delete_printer(_ipp_printer_t *printer)        /* I - Printer */
+{
+  _cupsRWLockWrite(&printer->rwlock);
+
+  if (printer->ipv4 >= 0)
+    close(printer->ipv4);
+
+  if (printer->ipv6 >= 0)
+    close(printer->ipv6);
+
+  if (printer->name)
+    free(printer->name);
+  if (printer->directory)
+    free(printer->directory);
+  if (printer->hostname)
+    free(printer->hostname);
+  if (printer->uri)
+    free(printer->uri);
+  if (printer->proxy_user)
+    free(printer->proxy_user);
+  if (printer->proxy_pass)
+    free(printer->proxy_pass);
+
+
+  ippDelete(printer->attrs);
+  ippDelete(printer->dev_attrs);
+
+  cupsArrayDelete(printer->active_jobs);
+  cupsArrayDelete(printer->completed_jobs);
+  cupsArrayDelete(printer->jobs);
+  cupsArrayDelete(printer->subscriptions);
+
+  _cupsRWDeinit(&printer->rwlock);
+
+  free(printer);
+}
+
+
+/*
+ * 'delete_subscription()' - Delete a subscription.
+ */
+
+static void
+delete_subscription(
+    _ipp_subscription_t *sub)          /* I - Subscription */
+{
+  sub->pending_delete = 1;
+
+  _cupsCondBroadcast(&SubscriptionCondition);
+
+  _cupsRWLockWrite(&sub->rwlock);
+
+  ippDelete(sub->attrs);
+  cupsArrayDelete(sub->events);
+
+  _cupsRWDeinit(&sub->rwlock);
+
+  free(sub);
+}
+
+
+/*
+ * 'filter_cb()' - Filter printer attributes based on the requested array.
+ */
+
+static int                             /* O - 1 to copy, 0 to ignore */
+filter_cb(_ipp_filter_t   *filter,     /* I - Filter parameters */
+          ipp_t           *dst,                /* I - Destination (unused) */
+         ipp_attribute_t *attr)        /* I - Source attribute */
+{
+ /*
+  * Filter attributes as needed...
+  */
+
+  (void)dst;
+
+  ipp_tag_t group = ippGetGroupTag(attr);
+  const char *name = ippGetName(attr);
+
+  if ((filter->group_tag != IPP_TAG_ZERO && group != filter->group_tag && group != IPP_TAG_ZERO) || !name || (!strcmp(name, "media-col-database") && !cupsArrayFind(filter->ra, (void *)name)))
+    return (0);
+
+  return (!filter->ra || cupsArrayFind(filter->ra, (void *)name) != NULL);
+}
+
+
+/*
+ * 'find_device()' - Find a device.
+ */
+
+static _ipp_device_t *                 /* I - Device */
+find_device(_ipp_client_t *client)     /* I - Client */
+{
+  ipp_attribute_t      *uuid;          /* output-device-uuid */
+  _ipp_device_t                key,            /* Search key */
+                       *device;        /* Matching device */
+
+
+  if ((uuid = ippFindAttribute(client->request, "output-device-uuid", IPP_TAG_URI)) == NULL)
+    return (NULL);
+
+  key.uuid = (char *)ippGetString(uuid, 0, NULL);
+
+  _cupsRWLockRead(&client->printer->rwlock);
+  device = (_ipp_device_t *)cupsArrayFind(client->printer->devices, &key);
+  _cupsRWUnlock(&client->printer->rwlock);
+
+  return (device);
+}
+
+
+/*
+ * 'find_job()' - Find a job specified in a request.
+ */
+
+static _ipp_job_t *                    /* O - Job or NULL */
+find_job(_ipp_client_t *client,                /* I - Client */
+         int           job_id)         /* I - Job ID to find or 0 to lookup */
+{
+  ipp_attribute_t      *attr;          /* job-id or job-uri attribute */
+  _ipp_job_t           key,            /* Job search key */
+                       *job;           /* Matching job, if any */
+
+
+  if (job_id > 0)
+  {
+    key.id = job_id;
+  }
+  else if ((attr = ippFindAttribute(client->request, "job-uri", IPP_TAG_URI)) != NULL)
+  {
+    const char *uri = ippGetString(attr, 0, NULL);
+
+    if (!strncmp(uri, client->printer->uri, client->printer->urilen) &&
+        uri[client->printer->urilen] == '/')
+      key.id = atoi(uri + client->printer->urilen + 1);
+    else
+      return (NULL);
+  }
+  else if ((attr = ippFindAttribute(client->request, "job-id", IPP_TAG_INTEGER)) != NULL)
+  {
+    key.id = ippGetInteger(attr, 0);
+  }
+
+  _cupsRWLockRead(&(client->printer->rwlock));
+  job = (_ipp_job_t *)cupsArrayFind(client->printer->jobs, &key);
+  _cupsRWUnlock(&(client->printer->rwlock));
+
+  return (job);
+}
+
+
+/*
+ * 'find_subscription()' - Find a subcription.
+ */
+
+static _ipp_subscription_t *           /* O - Subscription */
+find_subscription(_ipp_client_t *client,/* I - Client */
+                  int           sub_id)        /* I - Subscription ID or 0 */
+{
+  ipp_attribute_t      *notify_subscription_id;
+                                       /* notify-subscription-id */
+  _ipp_subscription_t  key,            /* Search key */
+                       *sub;           /* Matching subscription */
+
+
+  if (sub_id > 0)
+    key.id = sub_id;
+  else if ((notify_subscription_id = ippFindAttribute(client->request, "notify-subscription-id", IPP_TAG_INTEGER)) == NULL)
+    return (NULL);
+  else
+    key.id = ippGetInteger(notify_subscription_id, 0);
+
+  _cupsRWLockRead(&client->printer->rwlock);
+  sub = (_ipp_subscription_t *)cupsArrayFind(client->printer->subscriptions, &key);
+  _cupsRWUnlock(&client->printer->rwlock);
+
+  return (sub);
+}
+
+
+/*
+ * 'get_job_state_reasons_bits()' - Get the bits associates with "job-state-reasons" values.
+ */
+
+static _ipp_jreason_t                  /* O - Bits */
+get_job_state_reasons_bits(
+    ipp_attribute_t *attr)             /* I - "job-state-reasons" attribute */
+{
+  int                  i, j,           /* Looping vars */
+                       count;          /* Number of "job-state-reasons" values */
+  const char           *keyword;       /* "job-state-reasons" value */
+  _ipp_jreason_t       jreasons = _IPP_JREASON_NONE;
+                                       /* Bits for "job-state-reasons" values */
+
+
+  count = ippGetCount(attr);
+  for (i = 0; i < count; i ++)
+  {
+    keyword = ippGetString(attr, i, NULL);
+
+    for (j = 0; j < (int)(sizeof(_ipp_jreasons) / sizeof(_ipp_jreasons[0])); j ++)
+    {
+      if (!strcmp(keyword, _ipp_jreasons[j]))
+      {
+        jreasons |= 1 << j;
+       break;
+      }
+    }
+  }
+
+  return (jreasons);
+}
+
+
+/*
+ * 'get_notify_event_bits()' - Get the bits associated with "notify-events" values.
+ */
+
+static _ipp_event_t                    /* O - Bits */
+get_notify_events_bits(
+    ipp_attribute_t *attr)             /* I - "notify-events" attribute */
+{
+  int          i, j,                   /* Looping vars */
+               count;                  /* Number of "notify-events" values */
+  const char   *keyword;               /* "notify-events" value */
+  _ipp_event_t events = _IPP_EVENT_NONE;
+                                       /* Bits for "notify-events" values */
+
+
+  count = ippGetCount(attr);
+  for (i = 0; i < count; i ++)
+  {
+    keyword = ippGetString(attr, i, NULL);
+
+    for (j = 0; j < (int)(sizeof(_ipp_events) / sizeof(_ipp_events[0])); j ++)
+    {
+      if (!strcmp(keyword, _ipp_jreasons[j]))
+      {
+        events |= 1 << j;
+       break;
+      }
+    }
+  }
+
+  return (events);
+}
+
+
+/*
+ * 'get_notify_subscribed_event()' - Get the event name.
+ */
+
+static const char *                    /* O - Event name */
+get_notify_subscribed_event(
+    _ipp_event_t event)                        /* I - Event bit */
+{
+  int          i;                      /* Looping var */
+  _ipp_event_t mask;                   /* Current mask */
+
+  for (i = 0, mask = 1; i < (int)(sizeof(_ipp_events) / sizeof(_ipp_events[0])); i ++, mask <<= 1)
+    if (event & mask)
+      return (_ipp_events[i]);
+
+  return ("none");
+}
+
+
+/*
+ * 'get_printer_state_reasons_bits()' - Get the bits associated with "printer-state-reasons" values.
+ */
+
+static _ipp_preason_t                  /* O - Bits */
+get_printer_state_reasons_bits(
+    ipp_attribute_t *attr)             /* I - "printer-state-reasons" bits */
+{
+  int                  i, j,           /* Looping vars */
+                       count;          /* Number of "printer-state-reasons" values */
+  const char           *keyword;       /* "printer-state-reasons" value */
+  _ipp_preason_t       preasons = _IPP_PREASON_NONE;
+                                       /* Bits for "printer-state-reasons" values */
+
+
+  count = ippGetCount(attr);
+  for (i = 0; i < count; i ++)
+  {
+    keyword = ippGetString(attr, i, NULL);
+
+    for (j = 0; j < (int)(sizeof(_ipp_preasons) / sizeof(_ipp_preasons[0])); j ++)
+    {
+      if (!strcmp(keyword, _ipp_preasons[j]))
+      {
+        preasons |= 1 << j;
+       break;
+      }
+    }
+  }
+
+  return (preasons);
+}
+
+
+/*
+ * 'html_escape()' - Write a HTML-safe string.
+ */
+
+static void
+html_escape(_ipp_client_t *client,     /* I - Client */
+           const char    *s,           /* I - String to write */
+           size_t        slen)         /* I - Number of characters to write */
+{
+  const char   *start,                 /* Start of segment */
+               *end;                   /* End of string */
+
+
+  start = s;
+  end   = s + (slen > 0 ? slen : strlen(s));
+
+  while (*s && s < end)
+  {
+    if (*s == '&' || *s == '<')
+    {
+      if (s > start)
+        httpWrite2(client->http, start, (size_t)(s - start));
+
+      if (*s == '&')
+        httpWrite2(client->http, "&amp;", 5);
+      else
+        httpWrite2(client->http, "&lt;", 4);
+
+      start = s + 1;
+    }
+
+    s ++;
+  }
+
+  if (s > start)
+    httpWrite2(client->http, start, (size_t)(s - start));
+}
+
+
+/*
+ * 'html_footer()' - Show the web interface footer.
+ *
+ * This function also writes the trailing 0-length chunk.
+ */
+
+static void
+html_footer(_ipp_client_t *client)     /* I - Client */
+{
+  html_printf(client,
+             "</div>\n"
+             "</body>\n"
+             "</html>\n");
+  httpWrite2(client->http, "", 0);
+}
+
+
+/*
+ * 'html_header()' - Show the web interface header and title.
+ */
+
+static void
+html_header(_ipp_client_t *client,     /* I - Client */
+            const char    *title)      /* I - Title */
+{
+  html_printf(client,
+             "<!doctype html>\n"
+             "<html>\n"
+             "<head>\n"
+             "<title>%s</title>\n"
+             "<link rel=\"shortcut icon\" href=\"/icon.png\" type=\"image/png\">\n"
+             "<link rel=\"apple-touch-icon\" href=\"/icon.png\" type=\"image/png\">\n"
+             "<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\">\n"
+             "<meta name=\"viewport\" content=\"width=device-width\">\n"
+             "<style>\n"
+             "body { font-family: sans-serif; margin: 0; }\n"
+             "div.body { padding: 0px 10px 10px; }\n"
+             "blockquote { background: #dfd; border-radius: 5px; color: #006; padding: 10px; }\n"
+             "table.form { border-collapse: collapse; margin-top: 10px; width: 100%%; }\n"
+             "table.form td, table.form th { padding: 5px 2px; width: 50%%; }\n"
+             "table.form th { text-align: right; }\n"
+             "table.striped { border-bottom: solid thin black; border-collapse: collapse; width: 100%%; }\n"
+             "table.striped tr:nth-child(even) { background: #fcfcfc; }\n"
+             "table.striped tr:nth-child(odd) { background: #f0f0f0; }\n"
+             "table.striped th { background: white; border-bottom: solid thin black; text-align: left; vertical-align: bottom; }\n"
+             "table.striped td { margin: 0; padding: 5px; vertical-align: top; }\n"
+             "table.nav { border-collapse: collapse; width: 100%%; }\n"
+             "table.nav td { margin: 0; text-align: center; }\n"
+             "td.nav a, td.nav a:active, td.nav a:hover, td.nav a:hover:link, td.nav a:hover:link:visited, td.nav a:link, td.nav a:link:visited, td.nav a:visited { background: inherit; color: inherit; font-size: 80%%; text-decoration: none; }\n"
+             "td.nav { background: #333; color: #fff; padding: 4px 8px; width: 33%%; }\n"
+             "td.nav.sel { background: #fff; color: #000; font-weight: bold; }\n"
+             "td.nav:hover { background: #666; color: #fff; }\n"
+             "td.nav:active { background: #000; color: #ff0; }\n"
+             "</style>\n"
+             "</head>\n"
+             "<body>\n"
+             "<table class=\"nav\"><tr>"
+             "<td class=\"nav%s\"><a href=\"/\">Status</a></td>"
+             "<td class=\"nav%s\"><a href=\"/supplies\">Supplies</a></td>"
+             "<td class=\"nav%s\"><a href=\"/media\">Media</a></td>"
+             "</tr></table>\n"
+             "<div class=\"body\">\n", title, !strcmp(client->uri, "/") ? " sel" : "", !strcmp(client->uri, "/supplies") ? " sel" : "", !strcmp(client->uri, "/media") ? " sel" : "");
+}
+
+
+/*
+ * 'html_printf()' - Send formatted text to the client, quoting as needed.
+ */
+
+static void
+html_printf(_ipp_client_t *client,     /* I - Client */
+           const char    *format,      /* I - Printf-style format string */
+           ...)                        /* I - Additional arguments as needed */
+{
+  va_list      ap;                     /* Pointer to arguments */
+  const char   *start;                 /* Start of string */
+  char         size,                   /* Size character (h, l, L) */
+               type;                   /* Format type character */
+  int          width,                  /* Width of field */
+               prec;                   /* Number of characters of precision */
+  char         tformat[100],           /* Temporary format string for sprintf() */
+               *tptr,                  /* Pointer into temporary format */
+               temp[1024];             /* Buffer for formatted numbers */
+  char         *s;                     /* Pointer to string */
+
+
+ /*
+  * Loop through the format string, formatting as needed...
+  */
+
+  va_start(ap, format);
+  start = format;
+
+  while (*format)
+  {
+    if (*format == '%')
+    {
+      if (format > start)
+        httpWrite2(client->http, start, (size_t)(format - start));
+
+      tptr    = tformat;
+      *tptr++ = *format++;
+
+      if (*format == '%')
+      {
+        httpWrite2(client->http, "%", 1);
+        format ++;
+       start = format;
+       continue;
+      }
+      else if (strchr(" -+#\'", *format))
+        *tptr++ = *format++;
+
+      if (*format == '*')
+      {
+       /*
+        * Get width from argument...
+       */
+
+       format ++;
+       width = va_arg(ap, int);
+
+       snprintf(tptr, sizeof(tformat) - (size_t)(tptr - tformat), "%d", width);
+       tptr += strlen(tptr);
+      }
+      else
+      {
+       width = 0;
+
+       while (isdigit(*format & 255))
+       {
+         if (tptr < (tformat + sizeof(tformat) - 1))
+           *tptr++ = *format;
+
+         width = width * 10 + *format++ - '0';
+       }
+      }
+
+      if (*format == '.')
+      {
+       if (tptr < (tformat + sizeof(tformat) - 1))
+         *tptr++ = *format;
+
+        format ++;
+
+        if (*format == '*')
+       {
+         /*
+         * Get precision from argument...
+         */
+
+         format ++;
+         prec = va_arg(ap, int);
+
+         snprintf(tptr, sizeof(tformat) - (size_t)(tptr - tformat), "%d", prec);
+         tptr += strlen(tptr);
+       }
+       else
+       {
+         prec = 0;
+
+         while (isdigit(*format & 255))
+         {
+           if (tptr < (tformat + sizeof(tformat) - 1))
+             *tptr++ = *format;
+
+           prec = prec * 10 + *format++ - '0';
+         }
+       }
+      }
+
+      if (*format == 'l' && format[1] == 'l')
+      {
+        size = 'L';
+
+       if (tptr < (tformat + sizeof(tformat) - 2))
+       {
+         *tptr++ = 'l';
+         *tptr++ = 'l';
+       }
+
+       format += 2;
+      }
+      else if (*format == 'h' || *format == 'l' || *format == 'L')
+      {
+       if (tptr < (tformat + sizeof(tformat) - 1))
+         *tptr++ = *format;
+
+        size = *format++;
+      }
+      else
+        size = 0;
+
+
+      if (!*format)
+      {
+        start = format;
+        break;
+      }
+
+      if (tptr < (tformat + sizeof(tformat) - 1))
+        *tptr++ = *format;
+
+      type  = *format++;
+      *tptr = '\0';
+      start = format;
+
+      switch (type)
+      {
+       case 'E' : /* Floating point formats */
+       case 'G' :
+       case 'e' :
+       case 'f' :
+       case 'g' :
+           if ((size_t)(width + 2) > sizeof(temp))
+             break;
+
+           sprintf(temp, tformat, va_arg(ap, double));
+
+            httpWrite2(client->http, temp, strlen(temp));
+           break;
+
+        case 'B' : /* Integer formats */
+       case 'X' :
+       case 'b' :
+        case 'd' :
+       case 'i' :
+       case 'o' :
+       case 'u' :
+       case 'x' :
+           if ((size_t)(width + 2) > sizeof(temp))
+             break;
+
+#  ifdef HAVE_LONG_LONG
+            if (size == 'L')
+             sprintf(temp, tformat, va_arg(ap, long long));
+           else
+#  endif /* HAVE_LONG_LONG */
+            if (size == 'l')
+             sprintf(temp, tformat, va_arg(ap, long));
+           else
+             sprintf(temp, tformat, va_arg(ap, int));
+
+            httpWrite2(client->http, temp, strlen(temp));
+           break;
+
+       case 'p' : /* Pointer value */
+           if ((size_t)(width + 2) > sizeof(temp))
+             break;
+
+           sprintf(temp, tformat, va_arg(ap, void *));
+
+            httpWrite2(client->http, temp, strlen(temp));
+           break;
+
+        case 'c' : /* Character or character array */
+            if (width <= 1)
+            {
+              temp[0] = (char)va_arg(ap, int);
+              temp[1] = '\0';
+              html_escape(client, temp, 1);
+            }
+            else
+              html_escape(client, va_arg(ap, char *), (size_t)width);
+           break;
+
+       case 's' : /* String */
+           if ((s = va_arg(ap, char *)) == NULL)
+             s = "(null)";
+
+            html_escape(client, s, strlen(s));
+           break;
+      }
+    }
+    else
+      format ++;
+  }
+
+  if (format > start)
+    httpWrite2(client->http, start, (size_t)(format - start));
+
+  va_end(ap);
+}
+
+
+/*
+ * 'ipp_acknowledge_document()' - Acknowledge receipt of a document.
+ */
+
+static void
+ipp_acknowledge_document(
+    _ipp_client_t *client)             /* I - Client */
+{
+  _ipp_device_t                *device;        /* Device */
+  _ipp_job_t           *job;           /* Job */
+  ipp_attribute_t      *attr;          /* Attribute */
+
+
+  if ((device = find_device(client)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Device was not found.");
+    return;
+  }
+
+  if ((job = find_job(client, 0)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job was not found.");
+    return;
+  }
+
+  if (!job->dev_uuid || strcmp(job->dev_uuid, device->uuid))
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Job not assigned to device.");
+    return;
+  }
+
+  if ((attr = ippFindAttribute(client->request, "document-number", IPP_TAG_ZERO)) == NULL || ippGetGroupTag(attr) != IPP_TAG_OPERATION || ippGetValueTag(attr) != IPP_TAG_INTEGER || ippGetCount(attr) != 1 || ippGetInteger(attr, 0) != 1)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, attr ? "Bad document-number attribute." : "Missing document-number attribute.");
+    return;
+  }
+
+  respond_ipp(client, IPP_STATUS_OK, NULL);
+}
+
+
+/*
+ * 'ipp_acknowledge_identify_printer()' - Acknowledge an identify command.
+ */
+
+static void
+ipp_acknowledge_identify_printer(
+    _ipp_client_t *client)             /* I - Client */
+{
+  // TODO: Implement this!
+  respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Need to implement this.");
+}
+
+
+/*
+ * 'ipp_acknowledge_job()' - Acknowledge receipt of a job.
+ */
+
+static void
+ipp_acknowledge_job(
+    _ipp_client_t *client)             /* I - Client */
+{
+  _ipp_device_t                *device;        /* Device */
+  _ipp_job_t           *job;           /* Job */
+
+
+  if ((device = find_device(client)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Device was not found.");
+    return;
+  }
+
+  if ((job = find_job(client, 0)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job was not found.");
+    return;
+  }
+
+  if (job->dev_uuid && strcmp(job->dev_uuid, device->uuid))
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_AUTHORIZED, "Job not assigned to device.");
+    return;
+  }
+
+  if (!(job->state_reasons & _IPP_JREASON_JOB_FETCHABLE))
+  {
+    respond_ipp(client, _IPP_STATUS_ERROR_NOT_FETCHABLE, "Job not fetchable.");
+    return;
+  }
+
+  if (!job->dev_uuid)
+    job->dev_uuid = strdup(device->uuid);
+
+  job->state_reasons &= (_ipp_jreason_t)~_IPP_JREASON_JOB_FETCHABLE;
+
+  add_event(client->printer, job, _IPP_EVENT_JOB_STATE_CHANGED, "Job acknowledged.");
+
+  respond_ipp(client, IPP_STATUS_OK, NULL);
+}
+
+
+/*
+ * 'ipp_cancel_job()' - Cancel a job.
+ */
+
+static void
+ipp_cancel_job(_ipp_client_t *client)  /* I - Client */
+{
+  _ipp_job_t           *job;           /* Job information */
+
+
+ /*
+  * Get the job...
+  */
+
+  if ((job = find_job(client, 0)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job does not exist.");
+    return;
+  }
+
+ /*
+  * See if the job is already completed, canceled, or aborted; if so,
+  * we can't cancel...
+  */
+
+  switch (job->state)
+  {
+    case IPP_JSTATE_CANCELED :
+       respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE,
+                   "Job #%d is already canceled - can\'t cancel.", job->id);
+        break;
+
+    case IPP_JSTATE_ABORTED :
+       respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE,
+                   "Job #%d is already aborted - can\'t cancel.", job->id);
+        break;
+
+    case IPP_JSTATE_COMPLETED :
+       respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE,
+                   "Job #%d is already completed - can\'t cancel.", job->id);
+        break;
+
+    default :
+       /*
+        * Cancel the job...
+       */
+
+       _cupsRWLockWrite(&(client->printer->rwlock));
+
+       if (job->state == IPP_JSTATE_PROCESSING ||
+           (job->state == IPP_JSTATE_HELD && job->fd >= 0))
+          job->cancel = 1;
+       else
+       {
+         job->state     = IPP_JSTATE_CANCELED;
+         job->completed = time(NULL);
+       }
+
+       _cupsRWUnlock(&(client->printer->rwlock));
+
+        add_event(client->printer, job, _IPP_EVENT_JOB_COMPLETED, NULL);
+
+       respond_ipp(client, IPP_STATUS_OK, NULL);
+        break;
+  }
+}
+
+
+/*
+ * 'ipp_cancel_my_jobs()' - Cancel a user's jobs.
+ */
+
+static void
+ipp_cancel_my_jobs(
+    _ipp_client_t *client)             /* I - Client */
+{
+  // TODO: Implement this!
+  respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Need to implement this.");
+}
+
+
+/*
+ * 'ipp_cancel_subscription()' - Cancel a subscription.
+ */
+
+static void
+ipp_cancel_subscription(
+    _ipp_client_t *client)             /* I - Client */
+{
+  _ipp_subscription_t  *sub;           /* Subscription */
+
+
+  if ((sub = find_subscription(client, 0)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Subscription was not found.");
+    return;
+  }
+
+  _cupsRWLockWrite(&client->printer->rwlock);
+  cupsArrayRemove(client->printer->subscriptions, sub);
+  delete_subscription(sub);
+  _cupsRWUnlock(&client->printer->rwlock);
+  respond_ipp(client, IPP_STATUS_OK, NULL);
+}
+
+
+/*
+ * 'ipp_close_job()' - Close an open job.
+ */
+
+static void
+ipp_close_job(_ipp_client_t *client)   /* I - Client */
+{
+  _ipp_job_t           *job;           /* Job information */
+
+
+ /*
+  * Get the job...
+  */
+
+  if ((job = find_job(client, 0)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job does not exist.");
+    return;
+  }
+
+ /*
+  * See if the job is already completed, canceled, or aborted; if so,
+  * we can't cancel...
+  */
+
+  switch (job->state)
+  {
+    case IPP_JSTATE_CANCELED :
+       respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE,
+                   "Job #%d is canceled - can\'t close.", job->id);
+        break;
+
+    case IPP_JSTATE_ABORTED :
+       respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE,
+                   "Job #%d is aborted - can\'t close.", job->id);
+        break;
+
+    case IPP_JSTATE_COMPLETED :
+       respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE,
+                   "Job #%d is completed - can\'t close.", job->id);
+        break;
+
+    case IPP_JSTATE_PROCESSING :
+    case IPP_JSTATE_STOPPED :
+       respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE,
+                   "Job #%d is already closed.", job->id);
+        break;
+
+    default :
+       respond_ipp(client, IPP_STATUS_OK, NULL);
+        break;
+  }
+}
+
+
+/*
+ * 'ipp_create_job()' - Create a job object.
+ */
+
+static void
+ipp_create_job(_ipp_client_t *client)  /* I - Client */
+{
+  _ipp_job_t           *job;           /* New job */
+  cups_array_t         *ra;            /* Attributes to send in response */
+
+
+ /*
+  * Validate print job attributes...
+  */
+
+  if (!valid_job_attributes(client))
+  {
+    httpFlush(client->http);
+    return;
+  }
+
+ /*
+  * Do we have a file to print?
+  */
+
+  if (httpGetState(client->http) == HTTP_STATE_POST_RECV)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST,
+                "Unexpected document data following request.");
+    return;
+  }
+
+ /*
+  * Create the job...
+  */
+
+  if ((job = create_job(client)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_TOO_MANY_JOBS, "Too many jobs are queued.");
+    return;
+  }
+
+ /*
+  * Return the job info...
+  */
+
+  respond_ipp(client, IPP_STATUS_OK, NULL);
+
+  ra = cupsArrayNew((cups_array_func_t)strcmp, NULL);
+  cupsArrayAdd(ra, "job-id");
+  cupsArrayAdd(ra, "job-state");
+  cupsArrayAdd(ra, "job-state-message");
+  cupsArrayAdd(ra, "job-state-reasons");
+  cupsArrayAdd(ra, "job-uri");
+
+  copy_job_attributes(client, job, ra);
+  cupsArrayDelete(ra);
+
+ /*
+  * Add any subscriptions...
+  */
+
+  client->job = job;
+  ipp_create_xxx_subscriptions(client);
+}
+
+
+/*
+ * 'ipp_create_xxx_subscriptions()' - Create job and printer subscriptions.
+ */
+
+static void
+ipp_create_xxx_subscriptions(
+    _ipp_client_t *client)
+{
+  _ipp_subscription_t  *sub;           /* Subscription */
+  ipp_attribute_t      *attr;          /* Subscription attribute */
+  const char           *username;      /* requesting-user-name or
+                                          authenticated username */
+  int                  num_subs = 0,   /* Number of subscriptions */
+                       ok_subs = 0;    /* Number of good subscriptions */
+
+
+ /*
+  * For the Create-xxx-Subscriptions operations, queue up a successful-ok
+  * response...
+  */
+
+  if (ippGetOperation(client->request) == IPP_OP_CREATE_JOB_SUBSCRIPTIONS || ippGetOperation(client->request) == IPP_OP_CREATE_PRINTER_SUBSCRIPTIONS)
+    respond_ipp(client, IPP_STATUS_OK, NULL);
+
+ /*
+  * Get the authenticated user name, if any...
+  */
+
+  if (client->username[0])
+    username = client->username;
+  else if ((attr = ippFindAttribute(client->request, "requesting-user-name", IPP_TAG_NAME)) != NULL && ippGetGroupTag(attr) == IPP_TAG_OPERATION && ippGetCount(attr) == 1)
+    username = ippGetString(attr, 0, NULL);
+  else
+    username = "guest";
+
+ /*
+  * Skip past the initial attributes to the first subscription group.
+  */
+
+  attr = ippFirstAttribute(client->request);
+  while (attr && ippGetGroupTag(attr) != IPP_TAG_SUBSCRIPTION)
+    attr = ippNextAttribute(client->request);
+
+  while (attr)
+  {
+    _ipp_job_t         *job = NULL;    /* Job */
+    const char         *attrname,      /* Attribute name */
+                       *pullmethod = NULL;
+                                       /* notify-pull-method */
+    ipp_attribute_t    *notify_attributes = NULL,
+                                       /* notify-attributes */
+                       *notify_events = NULL,
+                                       /* notify-events */
+                       *notify_user_data = NULL;
+                                       /* notify-user-data */
+    int                        interval = 0,   /* notify-time-interval */
+                       lease = _IPP_NOTIFY_LEASE_DURATION_DEFAULT;
+                                       /* notify-lease-duration */
+    ipp_status_t       status = IPP_STATUS_OK;
+                                       /* notify-status-code */
+
+    num_subs ++;
+
+    while (attr)
+    {
+      if ((attrname = ippGetName(attr)) == NULL)
+        break;
+
+      if (!strcmp(attrname, "notify-recipient-uri"))
+      {
+       /*
+        * Push notifications not supported.
+       */
+
+        status = IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES;
+       ippCopyAttribute(client->response, attr, 0);
+      }
+      else if (!strcmp(attrname, "notify-pull-method"))
+      {
+       pullmethod = ippGetString(attr, 0, NULL);
+
+        if (ippGetValueTag(attr) != IPP_TAG_KEYWORD || ippGetCount(attr) != 1 || !pullmethod || strcmp(pullmethod, "ippget"))
+       {
+          ippCopyAttribute(client->response, attr, 0);
+         pullmethod = NULL;
+         status     = IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES;
+       }
+      }
+      else if (!strcmp(attrname, "notify-attributes"))
+      {
+        if (ippGetValueTag(attr) != IPP_TAG_KEYWORD)
+       {
+         status = IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES;
+         ippCopyAttribute(client->response, attr, 0);
+       }
+
+       notify_attributes = attr;
+      }
+      else if (!strcmp(attrname, "notify-charset"))
+      {
+        if (ippGetValueTag(attr) != IPP_TAG_CHARSET || ippGetCount(attr) != 1 ||
+           (strcmp(ippGetString(attr, 0, NULL), "us-ascii") && strcmp(ippGetString(attr, 0, NULL), "utf-8")))
+       {
+         status = IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES;
+         ippCopyAttribute(client->response, attr, 0);
+       }
+      }
+      else if (!strcmp(attrname, "notify-natural-language"))
+      {
+        if (ippGetValueTag(attr) !=  IPP_TAG_LANGUAGE || ippGetCount(attr) != 1 || strcmp(ippGetString(attr, 0, NULL), "en"))
+        {
+         status = IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES;
+         ippCopyAttribute(client->response, attr, 0);
+       }
+      }
+      else if (!strcmp(attrname, "notify-user-data"))
+      {
+        int    datalen;                /* Length of data */
+
+        if (ippGetValueTag(attr) != IPP_TAG_STRING || ippGetCount(attr) != 1 || !ippGetOctetString(attr, 0, &datalen) || datalen > 63)
+       {
+         status = IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES;
+         ippCopyAttribute(client->response, attr, 0);
+       }
+       else
+         notify_user_data = attr;
+      }
+      else if (!strcmp(attrname, "notify-events"))
+      {
+        if (ippGetValueTag(attr) != IPP_TAG_KEYWORD)
+       {
+         status = IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES;
+         ippCopyAttribute(client->response, attr, 0);
+       }
+       else
+          notify_events = attr;
+      }
+      else if (!strcmp(attrname, "notify-lease-duration"))
+      {
+        if (ippGetValueTag(attr) != IPP_TAG_INTEGER || ippGetCount(attr) != 1 || ippGetInteger(attr, 0) < 0)
+       {
+         status = IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES;
+         ippCopyAttribute(client->response, attr, 0);
+       }
+       else
+          lease = ippGetInteger(attr, 0);
+      }
+      else if (!strcmp(attrname, "notify-time-interval"))
+      {
+        if (ippGetValueTag(attr) != IPP_TAG_INTEGER || ippGetCount(attr) != 1 || ippGetInteger(attr, 0) < 0)
+       {
+         status = IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES;
+         ippCopyAttribute(client->response, attr, 0);
+       }
+       else
+          interval = ippGetInteger(attr, 0);
+      }
+      else if (!strcmp(attrname, "notify-job-id"))
+      {
+        if (ippGetOperation(client->request) != IPP_OP_CREATE_JOB_SUBSCRIPTIONS || ippGetValueTag(attr) != IPP_TAG_INTEGER || ippGetInteger(attr, 0) < 1)
+        {
+         status = IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES;
+         ippCopyAttribute(client->response, attr, 0);
+       }
+       else if ((job = find_job(client, ippGetInteger(attr, 0))) == NULL)
+       {
+         status = IPP_STATUS_ERROR_NOT_FOUND;
+         ippCopyAttribute(client->response, attr, 0);
+       }
+      }
+
+      attr = ippNextAttribute(client->request);
+    }
+
+    if (status)
+    {
+      ippAddInteger(client->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_ENUM, "notify-status-code", status);
+    }
+    else if (!pullmethod)
+    {
+      ippAddInteger(client->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_ENUM, "notify-status-code", IPP_STATUS_ERROR_BAD_REQUEST);
+    }
+    else
+    {
+      switch (ippGetOperation(client->request))
+      {
+       case IPP_OP_PRINT_JOB :
+       case IPP_OP_PRINT_URI :
+       case IPP_OP_CREATE_JOB :
+           job = client->job;
+           break;
+
+       default :
+           break;
+      }
+
+      if ((sub = create_subscription(client->printer, job, interval, lease, username, notify_events, notify_attributes, notify_user_data)) == NULL)
+      {
+        ippAddInteger(client->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_INTEGER, "notify-subscription-id", sub->id);
+        ok_subs ++;
+      }
+      else
+        ippAddInteger(client->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_ENUM, "notify-status-code", IPP_STATUS_ERROR_INTERNAL);
+    }
+  }
+
+  if (ok_subs == 0)
+    ippSetStatusCode(client->response, IPP_STATUS_ERROR_IGNORED_ALL_SUBSCRIPTIONS);
+  else if (ok_subs != num_subs)
+    ippSetStatusCode(client->response, IPP_STATUS_OK_IGNORED_SUBSCRIPTIONS);
+}
+
+
+/*
+ * 'ipp_deregister_output_device()' - Unregister an output device.
+ */
+
+static void
+ipp_deregister_output_device(
+    _ipp_client_t *client)             /* I - Client */
+{
+  _ipp_device_t        *device;                /* Device */
+
+
+ /*
+  * Find the device...
+  */
+
+  if ((device = find_device(client)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Output device not found.");
+    return;
+  }
+
+ /*
+  * Remove the device from the printer...
+  */
+
+  _cupsRWLockWrite(&client->printer->rwlock);
+
+  cupsArrayRemove(client->printer->devices, device);
+
+  update_device_attributes_no_lock(client->printer);
+  update_device_state_no_lock(client->printer);
+
+  _cupsRWUnlock(&client->printer->rwlock);
+
+ /*
+  * Delete the device...
+  */
+
+  delete_device(device);
+
+  respond_ipp(client, IPP_STATUS_OK, NULL);
+}
+
+
+/*
+ * 'ipp_fetch_document()' - Download a document.
+ */
+
+static void
+ipp_fetch_document(
+    _ipp_client_t *client)             /* I - Client */
+{
+  _ipp_device_t                *device;        /* Device */
+  _ipp_job_t           *job;           /* Job */
+  ipp_attribute_t      *attr;          /* Attribute */
+  int                  compression;    /* compression */
+  char                 filename[1024]; /* Job filename */
+  const char           *format;        /* document-format */
+
+
+  if ((device = find_device(client)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Device was not found.");
+    return;
+  }
+
+  if ((job = find_job(client, 0)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job was not found.");
+    return;
+  }
+
+  if (!job->dev_uuid || strcmp(job->dev_uuid, device->uuid))
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Job not assigned to device.");
+    return;
+  }
+
+  if ((attr = ippFindAttribute(client->request, "document-number", IPP_TAG_ZERO)) == NULL || ippGetGroupTag(attr) != IPP_TAG_OPERATION || ippGetValueTag(attr) != IPP_TAG_INTEGER || ippGetCount(attr) != 1 || ippGetInteger(attr, 0) != 1)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, attr ? "Bad document-number attribute." : "Missing document-number attribute.");
+    return;
+  }
+
+  if ((attr = ippFindAttribute(client->request, "compression-accepted", IPP_TAG_KEYWORD)) != NULL)
+    compression = !strcmp(ippGetString(attr, 0, NULL), "gzip");
+  else
+    compression = 0;
+
+  if ((attr = ippFindAttribute(client->request, "document-format-accepted", IPP_TAG_MIMETYPE)) != NULL)
+  {
+    int        i,                              /* Looping var */
+       count = ippGetCount(attr);      /* Number of values */
+
+
+    for (i = 0; i < count; i ++)
+    {
+      format = ippGetString(attr, i, NULL);
+
+      create_job_filename(client->printer, job, NULL, filename, sizeof(filename));
+
+      if (!access(filename, R_OK))
+        break;
+    }
+
+    if (i >= count)
+    {
+      respond_ipp(client, _IPP_STATUS_ERROR_NOT_FETCHABLE, "Document not available in requested format.");
+      return;
+    }
+  }
+  else if ((attr = ippFindAttribute(job->attrs, "document-format", IPP_TAG_MIMETYPE)) != NULL)
+    format = ippGetString(attr, 0, NULL);
+  else
+  {
+    respond_ipp(client, _IPP_STATUS_ERROR_NOT_FETCHABLE, "Document format unknown.");
+    return;
+  }
+
+  respond_ipp(client, IPP_STATUS_OK, NULL);
+  ippAddString(client->response, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format", NULL, format);
+  ippAddString(client->response, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "compression", NULL, compression ? "gzip" : "none");
+
+  client->fetch_file = open(filename, O_RDONLY);
+}
+
+
+/*
+ * 'ipp_fetch_job()' - Download a job.
+ */
+
+static void
+ipp_fetch_job(_ipp_client_t *client)   /* I - Client */
+{
+  _ipp_device_t                *device;        /* Device */
+  _ipp_job_t           *job;           /* Job */
+
+
+  if ((device = find_device(client)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Device was not found.");
+    return;
+  }
+
+  if ((job = find_job(client, 0)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job was not found.");
+    return;
+  }
+
+  if (job->dev_uuid && strcmp(job->dev_uuid, device->uuid))
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Job not assigned to device.");
+    return;
+  }
+
+  if (!(job->state_reasons & _IPP_JREASON_JOB_FETCHABLE))
+  {
+    respond_ipp(client, _IPP_STATUS_ERROR_NOT_FETCHABLE, "Job not fetchable.");
+    return;
+  }
+
+  respond_ipp(client, IPP_STATUS_OK, NULL);
+  copy_attributes(client->response, job->attrs, NULL, IPP_TAG_JOB, 0);
+}
+
+
+/*
+ * 'ipp_get_document_attributes()' - Get the attributes for a document object.
+ *
+ * Note: This implementation only supports single document jobs so we
+ *       synthesize the information for a single document from the job.
+ */
+
+static void
+ipp_get_document_attributes(
+    _ipp_client_t *client)             /* I - Client */
+{
+  // TODO: Implement this!
+  respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Need to implement this.");
+}
+
+
+/*
+ * 'ipp_get_documents()' - Get the list of documents in a job.
+ *
+ * Note: This implementation only supports single document jobs so we
+ *       synthesize the information for a single document from the job.
+ */
+
+static void
+ipp_get_documents(_ipp_client_t *client)/* I - Client */
+{
+  // TODO: Implement this!
+  respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Need to implement this.");
+}
+
+
+/*
+ * 'ipp_get_job_attributes()' - Get the attributes for a job object.
+ */
+
+static void
+ipp_get_job_attributes(
+    _ipp_client_t *client)             /* I - Client */
+{
+  _ipp_job_t   *job;                   /* Job */
+  cups_array_t *ra;                    /* requested-attributes */
+
+
+  if ((job = find_job(client, 0)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job not found.");
+    return;
+  }
+
+  respond_ipp(client, IPP_STATUS_OK, NULL);
+
+  ra = ippCreateRequestedArray(client->request);
+  copy_job_attributes(client, job, ra);
+  cupsArrayDelete(ra);
+}
+
+
+/*
+ * 'ipp_get_jobs()' - Get a list of job objects.
+ */
+
+static void
+ipp_get_jobs(_ipp_client_t *client)    /* I - Client */
+{
+  ipp_attribute_t      *attr;          /* Current attribute */
+  const char           *which_jobs = NULL;
+                                       /* which-jobs values */
+  int                  job_comparison; /* Job comparison */
+  ipp_jstate_t         job_state;      /* job-state value */
+  int                  first_job_id,   /* First job ID */
+                       limit,          /* Maximum number of jobs to return */
+                       count;          /* Number of jobs that match */
+  const char           *username;      /* Username */
+  _ipp_job_t           *job;           /* Current job pointer */
+  cups_array_t         *ra;            /* Requested attributes array */
+
+
+ /*
+  * See if the "which-jobs" attribute have been specified...
+  */
+
+  if ((attr = ippFindAttribute(client->request, "which-jobs",
+                               IPP_TAG_KEYWORD)) != NULL)
+  {
+    which_jobs = ippGetString(attr, 0, NULL);
+    fprintf(stderr, "%s Get-Jobs which-jobs=%s", client->hostname, which_jobs);
+  }
+
+  if (!which_jobs || !strcmp(which_jobs, "not-completed"))
+  {
+    job_comparison = -1;
+    job_state      = IPP_JSTATE_STOPPED;
+  }
+  else if (!strcmp(which_jobs, "completed"))
+  {
+    job_comparison = 1;
+    job_state      = IPP_JSTATE_CANCELED;
+  }
+  else if (!strcmp(which_jobs, "aborted"))
+  {
+    job_comparison = 0;
+    job_state      = IPP_JSTATE_ABORTED;
+  }
+  else if (!strcmp(which_jobs, "all"))
+  {
+    job_comparison = 1;
+    job_state      = IPP_JSTATE_PENDING;
+  }
+  else if (!strcmp(which_jobs, "canceled"))
+  {
+    job_comparison = 0;
+    job_state      = IPP_JSTATE_CANCELED;
+  }
+  else if (!strcmp(which_jobs, "pending"))
+  {
+    job_comparison = 0;
+    job_state      = IPP_JSTATE_PENDING;
+  }
+  else if (!strcmp(which_jobs, "pending-held"))
+  {
+    job_comparison = 0;
+    job_state      = IPP_JSTATE_HELD;
+  }
+  else if (!strcmp(which_jobs, "processing"))
+  {
+    job_comparison = 0;
+    job_state      = IPP_JSTATE_PROCESSING;
+  }
+  else if (!strcmp(which_jobs, "processing-stopped"))
+  {
+    job_comparison = 0;
+    job_state      = IPP_JSTATE_STOPPED;
+  }
+  else
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES,
+                "The which-jobs value \"%s\" is not supported.", which_jobs);
+    ippAddString(client->response, IPP_TAG_UNSUPPORTED_GROUP, IPP_TAG_KEYWORD,
+                 "which-jobs", NULL, which_jobs);
+    return;
+  }
+
+ /*
+  * See if they want to limit the number of jobs reported...
+  */
+
+  if ((attr = ippFindAttribute(client->request, "limit",
+                               IPP_TAG_INTEGER)) != NULL)
+  {
+    limit = ippGetInteger(attr, 0);
+
+    fprintf(stderr, "%s Get-Jobs limit=%d", client->hostname, limit);
+  }
+  else
+    limit = 0;
+
+  if ((attr = ippFindAttribute(client->request, "first-job-id",
+                               IPP_TAG_INTEGER)) != NULL)
+  {
+    first_job_id = ippGetInteger(attr, 0);
+
+    fprintf(stderr, "%s Get-Jobs first-job-id=%d", client->hostname,
+            first_job_id);
+  }
+  else
+    first_job_id = 1;
+
+ /*
+  * See if we only want to see jobs for a specific user...
+  */
+
+  username = NULL;
+
+  if ((attr = ippFindAttribute(client->request, "my-jobs",
+                               IPP_TAG_BOOLEAN)) != NULL)
+  {
+    int my_jobs = ippGetBoolean(attr, 0);
+
+    fprintf(stderr, "%s Get-Jobs my-jobs=%s\n", client->hostname,
+            my_jobs ? "true" : "false");
+
+    if (my_jobs)
+    {
+      if ((attr = ippFindAttribute(client->request, "requesting-user-name",
+                                       IPP_TAG_NAME)) == NULL)
+      {
+       respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST,
+                   "Need requesting-user-name with my-jobs.");
+       return;
+      }
+
+      username = ippGetString(attr, 0, NULL);
+
+      fprintf(stderr, "%s Get-Jobs requesting-user-name=\"%s\"\n",
+              client->hostname, username);
+    }
+  }
+
+ /*
+  * OK, build a list of jobs for this printer...
+  */
+
+  ra = ippCreateRequestedArray(client->request);
+
+  respond_ipp(client, IPP_STATUS_OK, NULL);
+
+  _cupsRWLockRead(&(client->printer->rwlock));
+
+  for (count = 0, job = (_ipp_job_t *)cupsArrayFirst(client->printer->jobs);
+       (limit <= 0 || count < limit) && job;
+       job = (_ipp_job_t *)cupsArrayNext(client->printer->jobs))
+  {
+   /*
+    * Filter out jobs that don't match...
+    */
+
+    if ((job_comparison < 0 && job->state > job_state) ||
+       (job_comparison == 0 && job->state != job_state) ||
+       (job_comparison > 0 && job->state < job_state) ||
+       job->id < first_job_id ||
+       (username && job->username &&
+        strcasecmp(username, job->username)))
+      continue;
+
+    if (count > 0)
+      ippAddSeparator(client->response);
+
+    count ++;
+    copy_job_attributes(client, job, ra);
+  }
+
+  cupsArrayDelete(ra);
+
+  _cupsRWUnlock(&(client->printer->rwlock));
+}
+
+
+/*
+ * 'ipp_get_notifications()' - Get notification events for one or more subscriptions.
+ */
+
+static void
+ipp_get_notifications(
+    _ipp_client_t *client)             /* I - Client */
+{
+  ipp_attribute_t      *sub_ids,       /* notify-subscription-ids */
+                       *seq_nums,      /* notify-sequence-numbers */
+                       *notify_wait;   /* Wait for events? */
+  int                  i,              /* Looping vars */
+                       count,          /* Number of IDs */
+                       first = 1,      /* First event? */
+                       seq_num;        /* Sequence number */
+  _ipp_subscription_t  *sub;           /* Current subscription */
+  ipp_t                        *event;         /* Current event */
+
+
+  if ((sub_ids = ippFindAttribute(client->request, "notify-subscription-ids", IPP_TAG_INTEGER)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Missing notify-subscription-ids attribute.");
+    return;
+  }
+
+  count       = ippGetCount(sub_ids);
+  seq_nums    = ippFindAttribute(client->request, "notify-sequence-numbers", IPP_TAG_INTEGER);
+  notify_wait = ippFindAttribute(client->request, "notify-wait", IPP_TAG_BOOLEAN);
+
+  if (seq_nums && count != ippGetCount(seq_nums))
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "The notify-subscription-ids and notify-sequence-numbers attributes are different lengths.");
+    return;
+  }
+
+  respond_ipp(client, IPP_STATUS_OK, NULL);
+  ippAddInteger(client->response, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "notify-get-interval", 30);
+
+  for (i = 0; i < count; i ++)
+  {
+    if ((sub = find_subscription(client, ippGetInteger(sub_ids, i))) == NULL)
+      continue;
+
+    seq_num = ippGetInteger(seq_nums, i);
+    if (seq_num < sub->first_sequence)
+      seq_num = sub->first_sequence;
+
+    if (seq_num > sub->last_sequence)
+      continue;
+
+    for (event = (ipp_t *)cupsArrayIndex(sub->events, seq_num - sub->first_sequence);
+         event;
+        event = (ipp_t *)cupsArrayNext(sub->events))
+    {
+      if (first)
+        first = 0;
+      else
+        ippAddSeparator(client->response);
+
+      ippCopyAttributes(client->response, event, 0, NULL, NULL);
+    }
+  }
+}
+
+
+/*
+ * 'ipp_get_output_device_attributes()' - Get attributes for an output device.
+ */
+
+static void
+ipp_get_output_device_attributes(
+    _ipp_client_t *client)             /* I - Client */
+{
+  // TODO: Implement this!
+  respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Need to implement this.");
+}
+
+
+/*
+ * 'ipp_get_printer_attributes()' - Get the attributes for a printer object.
+ */
+
+static void
+ipp_get_printer_attributes(
+    _ipp_client_t *client)             /* I - Client */
+{
+  cups_array_t         *ra;            /* Requested attributes array */
+  _ipp_printer_t       *printer;       /* Printer */
+
+
+ /*
+  * Send the attributes...
+  */
+
+  ra      = ippCreateRequestedArray(client->request);
+  printer = client->printer;
+
+  respond_ipp(client, IPP_STATUS_OK, NULL);
+
+  _cupsRWLockRead(&(printer->rwlock));
+
+  copy_attributes(client->response, printer->attrs, ra, IPP_TAG_ZERO,
+                 IPP_TAG_CUPS_CONST);
+  copy_attributes(client->response, printer->dev_attrs, ra, IPP_TAG_ZERO, IPP_TAG_ZERO);
+
+  if (!ra || cupsArrayFind(ra, "printer-config-change-date-time"))
+    ippAddDate(client->response, IPP_TAG_PRINTER, "printer-config-change-date-time", ippTimeToDate(printer->config_time));
+
+  if (!ra || cupsArrayFind(ra, "printer-config-change-time"))
+    ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "printer-config-change-time", (int)(printer->config_time - printer->start_time));
+
+  if (!ra || cupsArrayFind(ra, "printer-current-time"))
+    ippAddDate(client->response, IPP_TAG_PRINTER, "printer-current-time", ippTimeToDate(time(NULL)));
+
+
+  if (!ra || cupsArrayFind(ra, "printer-state"))
+    ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_ENUM,
+                  "printer-state", printer->state > printer->dev_state ? printer->state : printer->dev_state);
+
+  if (!ra || cupsArrayFind(ra, "printer-state-change-date-time"))
+    ippAddDate(client->response, IPP_TAG_PRINTER, "printer-state-change-date-time", ippTimeToDate(printer->state_time));
+
+  if (!ra || cupsArrayFind(ra, "printer-state-change-time"))
+    ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "printer-state-change-time", (int)(printer->state_time - printer->start_time));
+
+  if (!ra || cupsArrayFind(ra, "printer-state-message"))
+  {
+    static const char * const messages[] = { "Idle.", "Printing.", "Stopped." };
+
+    if (printer->state > printer->dev_state)
+      ippAddString(client->response, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_TEXT), "printer-state-message", NULL, messages[printer->state - IPP_PSTATE_IDLE]);
+    else
+      ippAddString(client->response, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_TEXT), "printer-state-message", NULL, messages[printer->dev_state - IPP_PSTATE_IDLE]);
+  }
+
+  if (!ra || cupsArrayFind(ra, "printer-state-reasons"))
+    copy_printer_state_reasons(client->response, IPP_TAG_PRINTER, printer);
+
+  if (!ra || cupsArrayFind(ra, "printer-up-time"))
+    ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "printer-up-time", (int)(time(NULL) - printer->start_time));
+
+  if (!ra || cupsArrayFind(ra, "queued-job-count"))
+    ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "queued-job-count", cupsArrayCount(printer->active_jobs));
+
+  _cupsRWUnlock(&(printer->rwlock));
+
+  cupsArrayDelete(ra);
+}
+
+
+/*
+ * 'ipp_get_printer_supported_values()' - Return the supported values for
+ *                                        the infrastructure printer.
+ */
+
+static void
+ipp_get_printer_supported_values(
+    _ipp_client_t *client)             /* I - Client */
+{
+  cups_array_t *ra = ippCreateRequestedArray(client->request);
+                                       /* Requested attributes */
+
+
+  respond_ipp(client, IPP_STATUS_OK, NULL);
+
+  copy_attributes(client->response, client->printer->attrs, ra, IPP_TAG_PRINTER, 1);
+
+  cupsArrayDelete(ra);
+}
+
+
+/*
+ * 'ipp_get_subscription_attributes()' - Get attributes for a subscription.
+ */
+
+static void
+ipp_get_subscription_attributes(
+    _ipp_client_t *client)             /* I - Client */
+{
+  _ipp_subscription_t  *sub;           /* Subscription */
+  cups_array_t         *ra = ippCreateRequestedArray(client->request);
+                                       /* Requested attributes */
+
+
+  if ((sub = find_subscription(client, 0)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Subscription was not found.");
+  }
+  else
+  {
+    respond_ipp(client, IPP_STATUS_OK, NULL);
+    copy_subscription_attributes(client, sub, ra);
+  }
+
+  cupsArrayDelete(ra);
+}
+
+
+/*
+ * 'ipp_get_subscriptions()' - Get attributes for all subscriptions.
+ */
+
+static void
+ipp_get_subscriptions(
+    _ipp_client_t *client)             /* I - Client */
+{
+  _ipp_subscription_t  *sub;           /* Current subscription */
+  cups_array_t         *ra = ippCreateRequestedArray(client->request);
+                                       /* Requested attributes */
+  int                  first = 1;      /* First time? */
+
+
+  respond_ipp(client, IPP_STATUS_OK, NULL);
+  _cupsRWLockRead(&client->printer->rwlock);
+  for (sub = (_ipp_subscription_t *)cupsArrayFirst(client->printer->subscriptions);
+       sub;
+       sub = (_ipp_subscription_t *)cupsArrayNext(client->printer->subscriptions))
+  {
+    if (first)
+      first = 0;
+    else
+      ippAddSeparator(client->response);
+
+    copy_subscription_attributes(client, sub, ra);
+  }
+
+  cupsArrayDelete(ra);
+}
+
+
+/*
+ * 'ipp_identify_printer()' - Beep or display a message.
+ */
+
+static void
+ipp_identify_printer(
+    _ipp_client_t *client)             /* I - Client */
+{
+  /* TODO: Do something */
+
+  respond_ipp(client, IPP_STATUS_OK, NULL);
+}
+
+
+/*
+ * 'ipp_print_job()' - Create a job object with an attached document.
+ */
+
+static void
+ipp_print_job(_ipp_client_t *client)   /* I - Client */
+{
+  _ipp_job_t           *job;           /* New job */
+  char                 filename[1024], /* Filename buffer */
+                       buffer[4096];   /* Copy buffer */
+  ssize_t              bytes;          /* Bytes read */
+  cups_array_t         *ra;            /* Attributes to send in response */
+
+
+ /*
+  * Validate print job attributes...
+  */
+
+  if (!valid_job_attributes(client))
+  {
+    httpFlush(client->http);
+    return;
+  }
+
+ /*
+  * Do we have a file to print?
+  */
+
+  if (httpGetState(client->http) == HTTP_STATE_POST_SEND)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "No file in request.");
+    return;
+  }
+
+ /*
+  * Print the job...
+  */
+
+  if ((job = create_job(client)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_BUSY,
+                "Currently printing another job.");
+    return;
+  }
+
+ /*
+  * Create a file for the request data...
+  */
+
+  create_job_filename(client->printer, job, NULL, filename, sizeof(filename));
+
+  if (Verbosity)
+    fprintf(stderr, "Creating job file \"%s\", format \"%s\".\n", filename, job->format);
+
+  if ((job->fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0600)) < 0)
+  {
+    job->state = IPP_JSTATE_ABORTED;
+
+    respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+                "Unable to create print file: %s", strerror(errno));
+    return;
+  }
+
+  while ((bytes = httpRead2(client->http, buffer, sizeof(buffer))) > 0)
+  {
+    if (write(job->fd, buffer, (size_t)bytes) < bytes)
+    {
+      int error = errno;               /* Write error */
+
+      job->state = IPP_JSTATE_ABORTED;
+
+      close(job->fd);
+      job->fd = -1;
+
+      unlink(filename);
+
+      respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+                  "Unable to write print file: %s", strerror(error));
+      return;
+    }
+  }
+
+  if (bytes < 0)
+  {
+   /*
+    * Got an error while reading the print data, so abort this job.
+    */
+
+    job->state = IPP_JSTATE_ABORTED;
+
+    close(job->fd);
+    job->fd = -1;
+
+    unlink(filename);
+
+    respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+                "Unable to read print file.");
+    return;
+  }
+
+  if (close(job->fd))
+  {
+    int error = errno;         /* Write error */
+
+    job->state = IPP_JSTATE_ABORTED;
+    job->fd    = -1;
+
+    unlink(filename);
+
+    respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+                "Unable to write print file: %s", strerror(error));
+    return;
+  }
+
+  job->fd       = -1;
+  job->filename = strdup(filename);
+  job->state    = IPP_JSTATE_PENDING;
+
+ /*
+  * Process the job, if possible...
+  */
+
+  check_jobs(client->printer);
+  
+ /*
+  * Return the job info...
+  */
+
+  respond_ipp(client, IPP_STATUS_OK, NULL);
+
+  ra = cupsArrayNew((cups_array_func_t)strcmp, NULL);
+  cupsArrayAdd(ra, "job-id");
+  cupsArrayAdd(ra, "job-state");
+  cupsArrayAdd(ra, "job-state-message");
+  cupsArrayAdd(ra, "job-state-reasons");
+  cupsArrayAdd(ra, "job-uri");
+
+  copy_job_attributes(client, job, ra);
+  cupsArrayDelete(ra);
+
+ /*
+  * Process any pending subscriptions...
+  */
+
+  client->job = job;
+  ipp_create_xxx_subscriptions(client);
+}
+
+
+/*
+ * 'ipp_print_uri()' - Create a job object with a referenced document.
+ */
+
+static void
+ipp_print_uri(_ipp_client_t *client)   /* I - Client */
+{
+  _ipp_job_t           *job;           /* New job */
+  ipp_attribute_t      *uri;           /* document-uri */
+  char                 scheme[256],    /* URI scheme */
+                       userpass[256],  /* Username and password info */
+                       hostname[256],  /* Hostname */
+                       resource[1024]; /* Resource path */
+  int                  port;           /* Port number */
+  http_uri_status_t    uri_status;     /* URI decode status */
+  http_encryption_t    encryption;     /* Encryption to use, if any */
+  http_t               *http;          /* Connection for http/https URIs */
+  http_status_t                status;         /* Access status for http/https URIs */
+  int                  infile;         /* Input file for local file URIs */
+  char                 filename[1024], /* Filename buffer */
+                       buffer[4096];   /* Copy buffer */
+  ssize_t              bytes;          /* Bytes read */
+  cups_array_t         *ra;            /* Attributes to send in response */
+  static const char * const uri_status_strings[] =
+  {                                    /* URI decode errors */
+    "URI too large.",
+    "Bad arguments to function.",
+    "Bad resource in URI.",
+    "Bad port number in URI.",
+    "Bad hostname in URI.",
+    "Bad username in URI.",
+    "Bad scheme in URI.",
+    "Bad/empty URI."
+  };
+
+
+ /*
+  * Validate print job attributes...
+  */
+
+  if (!valid_job_attributes(client))
+  {
+    httpFlush(client->http);
+    return;
+  }
+
+ /*
+  * Do we have a file to print?
+  */
+
+  if (httpGetState(client->http) == HTTP_STATE_POST_RECV)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST,
+                "Unexpected document data following request.");
+    return;
+  }
+
+ /*
+  * Do we have a document URI?
+  */
+
+  if ((uri = ippFindAttribute(client->request, "document-uri",
+                              IPP_TAG_URI)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Missing document-uri.");
+    return;
+  }
+
+  if (ippGetCount(uri) != 1)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST,
+                "Too many document-uri values.");
+    return;
+  }
+
+  uri_status = httpSeparateURI(HTTP_URI_CODING_ALL, ippGetString(uri, 0, NULL),
+                               scheme, sizeof(scheme), userpass,
+                               sizeof(userpass), hostname, sizeof(hostname),
+                               &port, resource, sizeof(resource));
+  if (uri_status < HTTP_URI_STATUS_OK)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Bad document-uri: %s",
+                uri_status_strings[uri_status - HTTP_URI_STATUS_OVERFLOW]);
+    return;
+  }
+
+  if (strcmp(scheme, "file") &&
+#ifdef HAVE_SSL
+      strcmp(scheme, "https") &&
+#endif /* HAVE_SSL */
+      strcmp(scheme, "http"))
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_URI_SCHEME,
+                "URI scheme \"%s\" not supported.", scheme);
+    return;
+  }
+
+  if (!strcmp(scheme, "file") && access(resource, R_OK))
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS,
+                "Unable to access URI: %s", strerror(errno));
+    return;
+  }
+
+ /*
+  * Print the job...
+  */
+
+  if ((job = create_job(client)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_BUSY,
+                "Currently printing another job.");
+    return;
+  }
+
+ /*
+  * Create a file for the request data...
+  */
+
+  if (!strcasecmp(job->format, "image/jpeg"))
+    snprintf(filename, sizeof(filename), "%s/%d.jpg",
+             client->printer->directory, job->id);
+  else if (!strcasecmp(job->format, "image/png"))
+    snprintf(filename, sizeof(filename), "%s/%d.png",
+             client->printer->directory, job->id);
+  else if (!strcasecmp(job->format, "application/pdf"))
+    snprintf(filename, sizeof(filename), "%s/%d.pdf",
+             client->printer->directory, job->id);
+  else if (!strcasecmp(job->format, "application/postscript"))
+    snprintf(filename, sizeof(filename), "%s/%d.ps",
+             client->printer->directory, job->id);
+  else
+    snprintf(filename, sizeof(filename), "%s/%d.prn",
+             client->printer->directory, job->id);
+
+  if ((job->fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0600)) < 0)
+  {
+    job->state = IPP_JSTATE_ABORTED;
+
+    respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+                "Unable to create print file: %s", strerror(errno));
+    return;
+  }
+
+  if (!strcmp(scheme, "file"))
+  {
+    if ((infile = open(resource, O_RDONLY)) < 0)
+    {
+      respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS,
+                  "Unable to access URI: %s", strerror(errno));
+      return;
+    }
+
+    do
+    {
+      if ((bytes = read(infile, buffer, sizeof(buffer))) < 0 &&
+          (errno == EAGAIN || errno == EINTR))
+        bytes = 1;
+      else if (bytes > 0 && write(job->fd, buffer, (size_t)bytes) < bytes)
+      {
+       int error = errno;              /* Write error */
+
+       job->state = IPP_JSTATE_ABORTED;
+
+       close(job->fd);
+       job->fd = -1;
+
+       unlink(filename);
+       close(infile);
+
+       respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+                   "Unable to write print file: %s", strerror(error));
+       return;
+      }
+    }
+    while (bytes > 0);
+
+    close(infile);
+  }
+  else
+  {
+#ifdef HAVE_SSL
+    if (port == 443 || !strcmp(scheme, "https"))
+      encryption = HTTP_ENCRYPTION_ALWAYS;
+    else
+#endif /* HAVE_SSL */
+    encryption = HTTP_ENCRYPTION_IF_REQUESTED;
+
+    if ((http = httpConnect2(hostname, port, NULL, AF_UNSPEC, encryption,
+                             1, 30000, NULL)) == NULL)
+    {
+      respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS,
+                  "Unable to connect to %s: %s", hostname,
+                 cupsLastErrorString());
+      job->state = IPP_JSTATE_ABORTED;
+
+      close(job->fd);
+      job->fd = -1;
+
+      unlink(filename);
+      return;
+    }
+
+    httpClearFields(http);
+    httpSetField(http, HTTP_FIELD_ACCEPT_LANGUAGE, "en");
+    if (httpGet(http, resource))
+    {
+      respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS,
+                  "Unable to GET URI: %s", strerror(errno));
+
+      job->state = IPP_JSTATE_ABORTED;
+
+      close(job->fd);
+      job->fd = -1;
+
+      unlink(filename);
+      httpClose(http);
+      return;
+    }
+
+    while ((status = httpUpdate(http)) == HTTP_STATUS_CONTINUE);
+
+    if (status != HTTP_STATUS_OK)
+    {
+      respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS,
+                  "Unable to GET URI: %s", httpStatus(status));
+
+      job->state = IPP_JSTATE_ABORTED;
+
+      close(job->fd);
+      job->fd = -1;
+
+      unlink(filename);
+      httpClose(http);
+      return;
+    }
+
+    while ((bytes = httpRead2(http, buffer, sizeof(buffer))) > 0)
+    {
+      if (write(job->fd, buffer, (size_t)bytes) < bytes)
+      {
+       int error = errno;              /* Write error */
+
+       job->state = IPP_JSTATE_ABORTED;
+
+       close(job->fd);
+       job->fd = -1;
+
+       unlink(filename);
+       httpClose(http);
+
+       respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+                   "Unable to write print file: %s", strerror(error));
+       return;
+      }
+    }
+
+    httpClose(http);
+  }
+
+  if (close(job->fd))
+  {
+    int error = errno;         /* Write error */
+
+    job->state = IPP_JSTATE_ABORTED;
+    job->fd    = -1;
+
+    unlink(filename);
+
+    respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+                "Unable to write print file: %s", strerror(error));
+    return;
+  }
+
+  job->fd       = -1;
+  job->filename = strdup(filename);
+  job->state    = IPP_JSTATE_PENDING;
+
+  /* TODO: Do something different here - only process if the printer is idle */
+ /*
+  * Process the job...
+  */
+
+  check_jobs(client->printer);
+
+ /*
+  * Return the job info...
+  */
+
+  respond_ipp(client, IPP_STATUS_OK, NULL);
+
+  ra = cupsArrayNew((cups_array_func_t)strcmp, NULL);
+  cupsArrayAdd(ra, "job-id");
+  cupsArrayAdd(ra, "job-state");
+  cupsArrayAdd(ra, "job-state-reasons");
+  cupsArrayAdd(ra, "job-uri");
+
+  copy_job_attributes(client, job, ra);
+  cupsArrayDelete(ra);
+
+ /*
+  * Process any pending subscriptions...
+  */
+
+  client->job = job;
+  ipp_create_xxx_subscriptions(client);
+}
+
+
+/*
+ * 'ipp_renew_subscription()' - Renew a subscription.
+ */
+
+static void
+ipp_renew_subscription(
+    _ipp_client_t *client)             /* I - Client */
+{
+  _ipp_subscription_t  *sub;           /* Subscription */
+  ipp_attribute_t      *attr;          /* notify-lease-duration */
+  int                  lease;          /* Lease duration in seconds */
+
+
+  if ((sub = find_subscription(client, 0)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Subscription was not found.");
+    return;
+  }
+
+  if (sub->job)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Per-job subscriptions cannot be renewed.");
+    return;
+  }
+
+  if ((attr = ippFindAttribute(client->request, "notify-lease-duration", IPP_TAG_ZERO)) != NULL)
+  {
+    if (ippGetGroupTag(attr) != IPP_TAG_SUBSCRIPTION || ippGetValueTag(attr) != IPP_TAG_INTEGER || ippGetCount(attr) != 1 || ippGetInteger(attr, 0) < 0)
+    {
+      respond_ipp(client, IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES, "Bad notify-lease-duration.");
+      return;
+    }
+
+    lease = ippGetInteger(attr, 0);
+  }
+  else
+    lease = _IPP_NOTIFY_LEASE_DURATION_DEFAULT;
+
+  sub->lease = lease;
+
+  if (lease)
+    sub->expire = time(NULL) + sub->lease;
+  else
+    sub->expire = INT_MAX;
+
+  respond_ipp(client, IPP_STATUS_OK, NULL);
+}
+
+
+/*
+ * 'ipp_send_document()' - Add an attached document to a job object created with
+ *                         Create-Job.
+ */
+
+static void
+ipp_send_document(_ipp_client_t *client)/* I - Client */
+{
+  _ipp_job_t           *job;           /* Job information */
+  char                 filename[1024], /* Filename buffer */
+                       buffer[4096];   /* Copy buffer */
+  ssize_t              bytes;          /* Bytes read */
+  ipp_attribute_t      *attr;          /* Current attribute */
+  cups_array_t         *ra;            /* Attributes to send in response */
+
+
+ /*
+  * Get the job...
+  */
+
+  if ((job = find_job(client, 0)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job does not exist.");
+    httpFlush(client->http);
+    return;
+  }
+
+ /*
+  * See if we already have a document for this job or the job has already
+  * in a non-pending state...
+  */
+
+  if (job->state > IPP_JSTATE_HELD)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE,
+                "Job is not in a pending state.");
+    httpFlush(client->http);
+    return;
+  }
+  else if (job->filename || job->fd >= 0)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_MULTIPLE_JOBS_NOT_SUPPORTED,
+                "Multiple document jobs are not supported.");
+    httpFlush(client->http);
+    return;
+  }
+
+  if ((attr = ippFindAttribute(client->request, "last-document",
+                               IPP_TAG_ZERO)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST,
+                "Missing required last-document attribute.");
+    httpFlush(client->http);
+    return;
+  }
+  else if (ippGetValueTag(attr) != IPP_TAG_BOOLEAN || ippGetCount(attr) != 1 ||
+           !ippGetBoolean(attr, 0))
+  {
+    respond_unsupported(client, attr);
+    httpFlush(client->http);
+    return;
+  }
+
+ /*
+  * Validate document attributes...
+  */
+
+  if (!valid_doc_attributes(client))
+  {
+    httpFlush(client->http);
+    return;
+  }
+
+  copy_attributes(job->attrs, client->request, NULL, IPP_TAG_JOB, 0);
+
+ /*
+  * Get the document format for the job...
+  */
+
+  _cupsRWLockWrite(&(client->printer->rwlock));
+
+  if ((attr = ippFindAttribute(job->attrs, "document-format-detected", IPP_TAG_MIMETYPE)) != NULL)
+    job->format = ippGetString(attr, 0, NULL);
+  else if ((attr = ippFindAttribute(job->attrs, "document-format-supplied", IPP_TAG_MIMETYPE)) != NULL)
+    job->format = ippGetString(attr, 0, NULL);
+  else
+    job->format = "application/octet-stream";
+
+ /*
+  * Create a file for the request data...
+  */
+
+  create_job_filename(client->printer, job, NULL, filename, sizeof(filename));
+
+  if (Verbosity)
+    fprintf(stderr, "Creating job file \"%s\", format \"%s\".\n", filename, job->format);
+
+  job->fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0600);
+
+  _cupsRWUnlock(&(client->printer->rwlock));
+
+  if (job->fd < 0)
+  {
+    job->state = IPP_JSTATE_ABORTED;
+
+    respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+                "Unable to create print file: %s", strerror(errno));
+    return;
+  }
+
+  while ((bytes = httpRead2(client->http, buffer, sizeof(buffer))) > 0)
+  {
+    if (write(job->fd, buffer, (size_t)bytes) < bytes)
+    {
+      int error = errno;               /* Write error */
+
+      job->state = IPP_JSTATE_ABORTED;
+
+      close(job->fd);
+      job->fd = -1;
+
+      unlink(filename);
+
+      respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+                  "Unable to write print file: %s", strerror(error));
+      return;
+    }
+  }
+
+  if (bytes < 0)
+  {
+   /*
+    * Got an error while reading the print data, so abort this job.
+    */
+
+    job->state = IPP_JSTATE_ABORTED;
+
+    close(job->fd);
+    job->fd = -1;
+
+    unlink(filename);
+
+    respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+                "Unable to read print file.");
+    return;
+  }
+
+  if (close(job->fd))
+  {
+    int error = errno;                 /* Write error */
+
+    job->state = IPP_JSTATE_ABORTED;
+    job->fd    = -1;
+
+    unlink(filename);
+
+    respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+                "Unable to write print file: %s", strerror(error));
+    return;
+  }
+
+  _cupsRWLockWrite(&(client->printer->rwlock));
+
+  job->fd       = -1;
+  job->filename = strdup(filename);
+  job->state    = IPP_JSTATE_PENDING;
+
+  _cupsRWUnlock(&(client->printer->rwlock));
+
+ /*
+  * Process the job, if possible...
+  */
+
+  check_jobs(client->printer);
+  
+ /*
+  * Return the job info...
+  */
+
+  respond_ipp(client, IPP_STATUS_OK, NULL);
+
+  ra = cupsArrayNew((cups_array_func_t)strcmp, NULL);
+  cupsArrayAdd(ra, "job-id");
+  cupsArrayAdd(ra, "job-state");
+  cupsArrayAdd(ra, "job-state-reasons");
+  cupsArrayAdd(ra, "job-uri");
+
+  copy_job_attributes(client, job, ra);
+  cupsArrayDelete(ra);
+}
+
+
+/*
+ * 'ipp_send_uri()' - Add a referenced document to a job object created with
+ *                    Create-Job.
+ */
+
+static void
+ipp_send_uri(_ipp_client_t *client)    /* I - Client */
+{
+  _ipp_job_t           *job;           /* Job information */
+  ipp_attribute_t      *uri;           /* document-uri */
+  char                 scheme[256],    /* URI scheme */
+                       userpass[256],  /* Username and password info */
+                       hostname[256],  /* Hostname */
+                       resource[1024]; /* Resource path */
+  int                  port;           /* Port number */
+  http_uri_status_t    uri_status;     /* URI decode status */
+  http_encryption_t    encryption;     /* Encryption to use, if any */
+  http_t               *http;          /* Connection for http/https URIs */
+  http_status_t                status;         /* Access status for http/https URIs */
+  int                  infile;         /* Input file for local file URIs */
+  char                 filename[1024], /* Filename buffer */
+                       buffer[4096];   /* Copy buffer */
+  ssize_t              bytes;          /* Bytes read */
+  ipp_attribute_t      *attr;          /* Current attribute */
+  cups_array_t         *ra;            /* Attributes to send in response */
+  static const char * const uri_status_strings[] =
+  {                                    /* URI decode errors */
+    "URI too large.",
+    "Bad arguments to function.",
+    "Bad resource in URI.",
+    "Bad port number in URI.",
+    "Bad hostname in URI.",
+    "Bad username in URI.",
+    "Bad scheme in URI.",
+    "Bad/empty URI."
+  };
+
+
+ /*
+  * Get the job...
+  */
+
+  if ((job = find_job(client, 0)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job does not exist.");
+    httpFlush(client->http);
+    return;
+  }
+
+ /*
+  * See if we already have a document for this job or the job has already
+  * in a non-pending state...
+  */
+
+  if (job->state > IPP_JSTATE_HELD)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE,
+                "Job is not in a pending state.");
+    httpFlush(client->http);
+    return;
+  }
+  else if (job->filename || job->fd >= 0)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_MULTIPLE_JOBS_NOT_SUPPORTED,
+                "Multiple document jobs are not supported.");
+    httpFlush(client->http);
+    return;
+  }
+
+  if ((attr = ippFindAttribute(client->request, "last-document",
+                               IPP_TAG_ZERO)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST,
+                "Missing required last-document attribute.");
+    httpFlush(client->http);
+    return;
+  }
+  else if (ippGetValueTag(attr) != IPP_TAG_BOOLEAN || ippGetCount(attr) != 1 ||
+           !ippGetBoolean(attr, 0))
+  {
+    respond_unsupported(client, attr);
+    httpFlush(client->http);
+    return;
+  }
+
+ /*
+  * Validate document attributes...
+  */
+
+  if (!valid_doc_attributes(client))
+  {
+    httpFlush(client->http);
+    return;
+  }
+
+ /*
+  * Do we have a file to print?
+  */
+
+  if (httpGetState(client->http) == HTTP_STATE_POST_RECV)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST,
+                "Unexpected document data following request.");
+    return;
+  }
+
+ /*
+  * Do we have a document URI?
+  */
+
+  if ((uri = ippFindAttribute(client->request, "document-uri",
+                              IPP_TAG_URI)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Missing document-uri.");
+    return;
+  }
+
+  if (ippGetCount(uri) != 1)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST,
+                "Too many document-uri values.");
+    return;
+  }
+
+  uri_status = httpSeparateURI(HTTP_URI_CODING_ALL, ippGetString(uri, 0, NULL),
+                               scheme, sizeof(scheme), userpass,
+                               sizeof(userpass), hostname, sizeof(hostname),
+                               &port, resource, sizeof(resource));
+  if (uri_status < HTTP_URI_STATUS_OK)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Bad document-uri: %s",
+                uri_status_strings[uri_status - HTTP_URI_STATUS_OVERFLOW]);
+    return;
+  }
+
+  if (strcmp(scheme, "file") &&
+#ifdef HAVE_SSL
+      strcmp(scheme, "https") &&
+#endif /* HAVE_SSL */
+      strcmp(scheme, "http"))
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_URI_SCHEME,
+                "URI scheme \"%s\" not supported.", scheme);
+    return;
+  }
+
+  if (!strcmp(scheme, "file") && access(resource, R_OK))
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS,
+                "Unable to access URI: %s", strerror(errno));
+    return;
+  }
+
+ /*
+  * Get the document format for the job...
+  */
+
+  _cupsRWLockWrite(&(client->printer->rwlock));
+
+  if ((attr = ippFindAttribute(job->attrs, "document-format",
+                               IPP_TAG_MIMETYPE)) != NULL)
+    job->format = ippGetString(attr, 0, NULL);
+  else
+    job->format = "application/octet-stream";
+
+ /*
+  * Create a file for the request data...
+  */
+
+  if (!strcasecmp(job->format, "image/jpeg"))
+    snprintf(filename, sizeof(filename), "%s/%d.jpg",
+             client->printer->directory, job->id);
+  else if (!strcasecmp(job->format, "image/png"))
+    snprintf(filename, sizeof(filename), "%s/%d.png",
+             client->printer->directory, job->id);
+  else if (!strcasecmp(job->format, "application/pdf"))
+    snprintf(filename, sizeof(filename), "%s/%d.pdf",
+             client->printer->directory, job->id);
+  else if (!strcasecmp(job->format, "application/postscript"))
+    snprintf(filename, sizeof(filename), "%s/%d.ps",
+             client->printer->directory, job->id);
+  else
+    snprintf(filename, sizeof(filename), "%s/%d.prn",
+             client->printer->directory, job->id);
+
+  job->fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0600);
+
+  _cupsRWUnlock(&(client->printer->rwlock));
+
+  if (job->fd < 0)
+  {
+    job->state = IPP_JSTATE_ABORTED;
+
+    respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+                "Unable to create print file: %s", strerror(errno));
+    return;
+  }
+
+  if (!strcmp(scheme, "file"))
+  {
+    if ((infile = open(resource, O_RDONLY)) < 0)
+    {
+      respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS,
+                  "Unable to access URI: %s", strerror(errno));
+      return;
+    }
+
+    do
+    {
+      if ((bytes = read(infile, buffer, sizeof(buffer))) < 0 &&
+          (errno == EAGAIN || errno == EINTR))
+        bytes = 1;
+      else if (bytes > 0 && write(job->fd, buffer, (size_t)bytes) < bytes)
+      {
+       int error = errno;              /* Write error */
+
+       job->state = IPP_JSTATE_ABORTED;
+
+       close(job->fd);
+       job->fd = -1;
+
+       unlink(filename);
+       close(infile);
+
+       respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+                   "Unable to write print file: %s", strerror(error));
+       return;
+      }
+    }
+    while (bytes > 0);
+
+    close(infile);
+  }
+  else
+  {
+#ifdef HAVE_SSL
+    if (port == 443 || !strcmp(scheme, "https"))
+      encryption = HTTP_ENCRYPTION_ALWAYS;
+    else
+#endif /* HAVE_SSL */
+    encryption = HTTP_ENCRYPTION_IF_REQUESTED;
+
+    if ((http = httpConnect2(hostname, port, NULL, AF_UNSPEC, encryption,
+                             1, 30000, NULL)) == NULL)
+    {
+      respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS,
+                  "Unable to connect to %s: %s", hostname,
+                 cupsLastErrorString());
+      job->state = IPP_JSTATE_ABORTED;
+
+      close(job->fd);
+      job->fd = -1;
+
+      unlink(filename);
+      return;
+    }
+
+    httpClearFields(http);
+    httpSetField(http, HTTP_FIELD_ACCEPT_LANGUAGE, "en");
+    if (httpGet(http, resource))
+    {
+      respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS,
+                  "Unable to GET URI: %s", strerror(errno));
+
+      job->state = IPP_JSTATE_ABORTED;
+
+      close(job->fd);
+      job->fd = -1;
+
+      unlink(filename);
+      httpClose(http);
+      return;
+    }
+
+    while ((status = httpUpdate(http)) == HTTP_STATUS_CONTINUE);
+
+    if (status != HTTP_STATUS_OK)
+    {
+      respond_ipp(client, IPP_STATUS_ERROR_DOCUMENT_ACCESS,
+                  "Unable to GET URI: %s", httpStatus(status));
+
+      job->state = IPP_JSTATE_ABORTED;
+
+      close(job->fd);
+      job->fd = -1;
+
+      unlink(filename);
+      httpClose(http);
+      return;
+    }
+
+    while ((bytes = httpRead2(http, buffer, sizeof(buffer))) > 0)
+    {
+      if (write(job->fd, buffer, (size_t)bytes) < bytes)
+      {
+       int error = errno;              /* Write error */
+
+       job->state = IPP_JSTATE_ABORTED;
+
+       close(job->fd);
+       job->fd = -1;
+
+       unlink(filename);
+       httpClose(http);
+
+       respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+                   "Unable to write print file: %s", strerror(error));
+       return;
+      }
+    }
+
+    httpClose(http);
+  }
+
+  if (close(job->fd))
+  {
+    int error = errno;         /* Write error */
+
+    job->state = IPP_JSTATE_ABORTED;
+    job->fd    = -1;
+
+    unlink(filename);
+
+    respond_ipp(client, IPP_STATUS_ERROR_INTERNAL,
+                "Unable to write print file: %s", strerror(error));
+    return;
+  }
+
+  _cupsRWLockWrite(&(client->printer->rwlock));
+
+  job->fd       = -1;
+  job->filename = strdup(filename);
+  job->state    = IPP_JSTATE_PENDING;
+
+  _cupsRWUnlock(&(client->printer->rwlock));
+
+ /*
+  * Process the job, if possible...
+  */
+
+  check_jobs(client->printer);
+  
+ /*
+  * Return the job info...
+  */
+
+  respond_ipp(client, IPP_STATUS_OK, NULL);
+
+  ra = cupsArrayNew((cups_array_func_t)strcmp, NULL);
+  cupsArrayAdd(ra, "job-id");
+  cupsArrayAdd(ra, "job-state");
+  cupsArrayAdd(ra, "job-state-reasons");
+  cupsArrayAdd(ra, "job-uri");
+
+  copy_job_attributes(client, job, ra);
+  cupsArrayDelete(ra);
+}
+
+
+/*
+ * 'ipp_update_active_jobs()' - Update the list of active jobs.
+ */
+
+static void
+ipp_update_active_jobs(
+    _ipp_client_t *client)             /* I - Client */
+{
+  _ipp_device_t                *device;        /* Output device */
+  _ipp_job_t           *job;           /* Job */
+  ipp_attribute_t      *job_ids,       /* job-ids */
+                       *job_states;    /* output-device-job-states */
+  int                  i,              /* Looping var */
+                       count,          /* Number of values */
+                       num_different = 0,
+                                       /* Number of jobs with different states */
+                       different[1000],/* Jobs with different states */
+                       num_unsupported = 0,
+                                       /* Number of unsupported job-ids */
+                       unsupported[1000];
+                                       /* Unsupported job-ids */
+  ipp_jstate_t         states[1000];   /* Different job state values */
+
+
+ /*
+  * Process the job-ids and output-device-job-states values...
+  */
+
+  if ((device = find_device(client)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Device was not found.");
+    return;
+  }
+
+  if ((job_ids = ippFindAttribute(client->request, "job-ids", IPP_TAG_ZERO)) == NULL || ippGetGroupTag(job_ids) != IPP_TAG_OPERATION || ippGetValueTag(job_ids) != IPP_TAG_INTEGER)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, job_ids ? "Bad job-ids attribute." : "Missing required job-ids attribute.");
+    return;
+  }
+
+  if ((job_states = ippFindAttribute(client->request, "output-device-job-states", IPP_TAG_ZERO)) == NULL || ippGetGroupTag(job_states) != IPP_TAG_OPERATION || ippGetValueTag(job_states) != IPP_TAG_ENUM)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, job_ids ? "Bad output-device-job-states attribute." : "Missing required output-device-job-states attribute.");
+    return;
+  }
+
+  count = ippGetCount(job_ids);
+  if (count != ippGetCount(job_states))
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "The job-ids and output-device-job-states attributes do not have the same number of values.");
+    return;
+  }
+
+  for (i = 0; i < count; i ++)
+  {
+    if ((job = find_job(client, ippGetInteger(job_ids, i))) == NULL || !job->dev_uuid || strcmp(job->dev_uuid, device->uuid))
+    {
+      if (num_unsupported < 1000)
+        unsupported[num_unsupported ++] = ippGetInteger(job_ids, i);
+    }
+    else
+    {
+      ipp_jstate_t     state = (ipp_jstate_t)ippGetInteger(job_states, i);
+
+      if (job->state >= IPP_JSTATE_STOPPED && state != job->state)
+      {
+        if (num_different < 1000)
+       {
+         different[num_different] = job->id;
+         states[num_different ++] = job->state;
+       }
+      }
+      else
+        job->dev_state = state;
+    }
+  }
+
+ /*
+  * Then look for jobs assigned to the device but not listed...
+  */
+
+  for (job = (_ipp_job_t *)cupsArrayFirst(client->printer->jobs);
+       job && num_different < 1000;
+       job = (_ipp_job_t *)cupsArrayNext(client->printer->jobs))
+  {
+    if (job->dev_uuid && !strcmp(job->dev_uuid, device->uuid) && !ippContainsInteger(job_ids, job->id))
+    {
+      different[num_different] = job->id;
+      states[num_different ++] = job->state;
+    }
+  }
+
+  respond_ipp(client, IPP_STATUS_OK, NULL);
+
+  if (num_different > 0)
+  {
+    ippAddIntegers(client->response, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "job-ids", num_different, different);
+    ippAddIntegers(client->response, IPP_TAG_OPERATION, IPP_TAG_ENUM, "output-device-job-states", num_different, (int *)states);
+  }
+
+  if (num_unsupported > 0)
+  {
+    ippAddIntegers(client->response, IPP_TAG_UNSUPPORTED_GROUP, IPP_TAG_INTEGER, "job-ids", num_unsupported, unsupported);
+  }
+}
+
+
+/*
+ * 'ipp_update_document_status()' - Update the state of a document.
+ */
+
+static void
+ipp_update_document_status(
+    _ipp_client_t *client)             /* I - Client */
+{
+  _ipp_device_t                *device;        /* Device */
+  _ipp_job_t           *job;           /* Job */
+  ipp_attribute_t      *attr;          /* Attribute */
+
+
+  if ((device = find_device(client)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Device was not found.");
+    return;
+  }
+
+  if ((job = find_job(client, 0)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job was not found.");
+    return;
+  }
+
+  if (!job->dev_uuid || strcmp(job->dev_uuid, device->uuid))
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Job not assigned to device.");
+    return;
+  }
+
+  if ((attr = ippFindAttribute(client->request, "document-number", IPP_TAG_ZERO)) == NULL || ippGetGroupTag(attr) != IPP_TAG_OPERATION || ippGetValueTag(attr) != IPP_TAG_INTEGER || ippGetCount(attr) != 1 || ippGetInteger(attr, 0) != 1)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, attr ? "Bad document-number attribute." : "Missing document-number attribute.");
+    return;
+  }
+
+  if ((attr = ippFindAttribute(client->request, "impressions-completed", IPP_TAG_INTEGER)) != NULL)
+  {
+    job->impcompleted = ippGetInteger(attr, 0);
+    add_event(client->printer, job, _IPP_EVENT_JOB_PROGRESS, NULL);
+  }
+
+  respond_ipp(client, IPP_STATUS_OK, NULL);
+}
+
+
+/*
+ * 'ipp_update_job_status()' - Update the state of a job.
+ */
+
+static void
+ipp_update_job_status(
+    _ipp_client_t *client)             /* I - Client */
+{
+  _ipp_device_t                *device;        /* Device */
+  _ipp_job_t           *job;           /* Job */
+  ipp_attribute_t      *attr;          /* Attribute */
+  _ipp_event_t         events = _IPP_EVENT_NONE;
+                                       /* Event(s) */
+
+
+  if ((device = find_device(client)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Device was not found.");
+    return;
+  }
+
+  if ((job = find_job(client, 0)) == NULL)
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job was not found.");
+    return;
+  }
+
+  if (!job->dev_uuid || strcmp(job->dev_uuid, device->uuid))
+  {
+    respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Job not assigned to device.");
+    return;
+  }
+
+  if ((attr = ippFindAttribute(client->request, "job-impressions-completed", IPP_TAG_INTEGER)) != NULL)
+  {
+    job->impcompleted = ippGetInteger(attr, 0);
+    events |= _IPP_EVENT_JOB_PROGRESS;
+  }
+
+  if ((attr = ippFindAttribute(client->request, "output-device-job-state", IPP_TAG_ENUM)) != NULL)
+  {
+    job->dev_state = (ipp_jstate_t)ippGetInteger(attr, 0);
+    events |= _IPP_EVENT_JOB_STATE_CHANGED;
+  }
+
+  if ((attr = ippFindAttribute(client->request, "output-device-job-state-reasons", IPP_TAG_KEYWORD)) != NULL)
+  {
+    job->dev_state_reasons = get_job_state_reasons_bits(attr);
+    events |= _IPP_EVENT_JOB_STATE_CHANGED;
+  }
+
+  if (events)
+    add_event(client->printer, job, events, NULL);
+
+  respond_ipp(client, IPP_STATUS_OK, NULL);
+}
+
+
+/*
+ * 'ipp_update_output_device_attributes()' - Update the values for an output device.
+ */
+
+static void
+ipp_update_output_device_attributes(
+    _ipp_client_t *client)             /* I - Client */
+{
+  _ipp_device_t                *device;        /* Device */
+  ipp_attribute_t      *attr,          /* Current attribute */
+                       *dev_attr;      /* Device attribute */
+  _ipp_event_t         events = _IPP_EVENT_NONE;
+                                       /* Config/state changed? */
+
+
+  if ((device = find_device(client)) == NULL)
+  {
+    if ((device = create_device(client)) == NULL)
+    {
+      respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE, "Unable to add output device.");
+      return;
+    }
+  }
+
+  _cupsRWLockWrite(&device->rwlock);
+
+  attr = ippFirstAttribute(client->request);
+  while (attr && ippGetGroupTag(attr) != IPP_TAG_PRINTER)
+    attr = ippNextAttribute(client->request);
+
+  for (; attr; attr = ippNextAttribute(client->request))
+  {
+    const char *attrname = ippGetName(attr),
+                                       /* Attribute name */
+               *dotptr;                /* Pointer to dot in name */
+
+   /*
+    * Skip attributes we don't care about...
+    */
+
+    if (!attrname)
+      continue;
+
+    if (strncmp(attrname, "copies", 6) && strncmp(attrname, "document-format", 15) && strncmp(attrname, "finishings", 10) && strncmp(attrname, "media", 5) && strncmp(attrname, "print-", 6) && strncmp(attrname, "sides", 5) && strncmp(attrname, "printer-alert", 13) && strncmp(attrname, "printer-input", 13) && strncmp(attrname, "printer-output", 14) && strncmp(attrname, "printer-resolution", 18) && strncmp(attrname, "pwg-raster", 10) && strncmp(attrname, "urf-", 4))
+      continue;
+
+    if (strncmp(attrname, "printer-alert", 13) || strncmp(attrname, "printer-state", 13))
+      events |= _IPP_EVENT_PRINTER_CONFIG_CHANGED;
+    else
+      events |= _IPP_EVENT_PRINTER_STATE_CHANGED;
+
+    if (!strcmp(attrname, "media-col-ready") || !strcmp(attrname, "media-ready"))
+      events |= _IPP_EVENT_PRINTER_MEDIA_CHANGED;
+
+    if (!strcmp(attrname, "finishings-col-ready") || !strcmp(attrname, "finishings-ready"))
+      events |= _IPP_EVENT_PRINTER_FINISHINGS_CHANGED;
+
+    if ((dotptr = strrchr(attrname, '.')) != NULL && isdigit(dotptr[1] & 255))
+    {
+#if 0
+     /*
+      * Sparse representation: name.NNN or name.NNN-NNN
+      */
+
+      char     temp[256],              /* Temporary name string */
+               *tempptr;               /* Pointer into temporary string */
+      int      low, high;              /* Low and high numbers in range */
+
+      low = (int)strtol(dotptr + 1, (char **)&dotptr, 10);
+      if (dotptr && *dotptr == '-')
+        high = (int)strtol(dotptr + 1, NULL, 10);
+      else
+        high = low;
+
+      strlcpy(temp, attrname, sizeof(temp));
+      if ((tempptr = strrchr(temp, '.')) != NULL)
+        *tempptr = '\0';
+
+      if ((dev_attr = ippFindAttribute(device->attrs, temp, IPP_TAG_ZERO)) != NULL)
+      {
+      }
+      else
+#endif /* 0 */
+        respond_unsupported(client, attr);
+    }
+    else
+    {
+     /*
+      * Regular representation - replace or delete current attribute,
+      * if any...
+      */
+
+      if ((dev_attr = ippFindAttribute(device->attrs, attrname, IPP_TAG_ZERO)) != NULL)
+        ippDeleteAttribute(device->attrs, dev_attr);
+
+      if (ippGetValueTag(attr) != IPP_TAG_DELETEATTR)
+        ippCopyAttribute(device->attrs, attr, 0);
+    }
+  }
+
+  _cupsRWUnlock(&device->rwlock);
+
+  if (events)
+  {
+    _cupsRWLockWrite(&client->printer->rwlock);
+    if (events & _IPP_EVENT_PRINTER_CONFIG_CHANGED)
+      update_device_attributes_no_lock(client->printer);
+    if (events & _IPP_EVENT_PRINTER_STATE_CHANGED)
+      update_device_state_no_lock(client->printer);
+    _cupsRWUnlock(&client->printer->rwlock);
+
+    add_event(client->printer, NULL, events, NULL);
+  }
+}
+
+
+/*
+ * 'ipp_validate_document()' - Validate document creation attributes.
+ */
+
+static void
+ipp_validate_document(
+    _ipp_client_t *client)             /* I - Client */
+{
+  if (valid_doc_attributes(client))
+    respond_ipp(client, IPP_STATUS_OK, NULL);
+}
+
+
+/*
+ * 'ipp_validate_job()' - Validate job creation attributes.
+ */
+
+static void
+ipp_validate_job(_ipp_client_t *client)        /* I - Client */
+{
+  if (valid_job_attributes(client))
+    respond_ipp(client, IPP_STATUS_OK, NULL);
+}
+
+
+#if 0
+/*
+ * 'parse_options()' - Parse URL options into CUPS options.
+ *
+ * The client->options string is destroyed by this function.
+ */
+
+static int                             /* O - Number of options */
+parse_options(_ipp_client_t *client,   /* I - Client */
+              cups_option_t **options) /* O - Options */
+{
+  char *name,                          /* Name */
+       *value,                         /* Value */
+       *next;                          /* Next name=value pair */
+  int  num_options = 0;                /* Number of options */
+
+
+  *options = NULL;
+
+  for (name = client->options; name && *name; name = next)
+  {
+    if ((value = strchr(name, '=')) == NULL)
+      break;
+
+    *value++ = '\0';
+    if ((next = strchr(value, '&')) != NULL)
+      *next++ = '\0';
+
+    num_options = cupsAddOption(name, value, num_options, options);
+  }
+
+  return (num_options);
+}
+#endif /* 0 */
+
+
+/*
+ * 'process_client()' - Process client requests on a thread.
+ */
+
+static void *                          /* O - Exit status */
+process_client(_ipp_client_t *client)  /* I - Client */
+{
+ /*
+  * Loop until we are out of requests or timeout (30 seconds)...
+  */
+
+#ifdef HAVE_SSL
+  int first_time = 1;                  /* First time request? */
+#endif /* HAVE_SSL */
+
+  while (httpWait(client->http, 30000))
+  {
+#ifdef HAVE_SSL
+    if (first_time)
+    {
+     /*
+      * See if we need to negotiate a TLS connection...
+      */
+
+      char buf[1];                     /* First byte from client */
+
+      if (recv(httpGetFd(client->http), buf, 1, MSG_PEEK) == 1 && (!buf[0] || !strchr("DGHOPT", buf[0])))
+      {
+        fprintf(stderr, "%s Starting HTTPS session.\n", client->hostname);
+
+       if (httpEncryption(client->http, HTTP_ENCRYPTION_ALWAYS))
+       {
+         fprintf(stderr, "%s Unable to encrypt connection: %s\n", client->hostname, cupsLastErrorString());
+         break;
+        }
+
+        fprintf(stderr, "%s Connection now encrypted.\n", client->hostname);
+      }
+
+      first_time = 0;
+    }
+#endif /* HAVE_SSL */
+
+    if (!process_http(client))
+      break;
+  }
+
+ /*
+  * Close the conection to the client and return...
+  */
+
+  delete_client(client);
+
+  return (NULL);
+}
+
+
+/*
+ * 'process_http()' - Process a HTTP request.
+ */
+
+int                                    /* O - 1 on success, 0 on failure */
+process_http(_ipp_client_t *client)    /* I - Client connection */
+{
+  char                 uri[1024];      /* URI */
+  http_state_t         http_state;     /* HTTP state */
+  http_status_t                http_status;    /* HTTP status */
+  ipp_state_t          ipp_state;      /* State of IPP transfer */
+  char                 scheme[32],     /* Method/scheme */
+                       userpass[128],  /* Username:password */
+                       hostname[HTTP_MAX_HOST];
+                                       /* Hostname */
+  int                  port;           /* Port number */
+  const char           *encoding;      /* Content-Encoding value */
+  static const char * const http_states[] =
+  {                                    /* Strings for logging HTTP method */
+    "WAITING",
+    "OPTIONS",
+    "GET",
+    "GET_SEND",
+    "HEAD",
+    "POST",
+    "POST_RECV",
+    "POST_SEND",
+    "PUT",
+    "PUT_RECV",
+    "DELETE",
+    "TRACE",
+    "CONNECT",
+    "STATUS",
+    "UNKNOWN_METHOD",
+    "UNKNOWN_VERSION"
+  };
+
+
+ /*
+  * Clear state variables...
+  */
+
+  ippDelete(client->request);
+  ippDelete(client->response);
+
+  client->request   = NULL;
+  client->response  = NULL;
+  client->operation = HTTP_STATE_WAITING;
+
+ /*
+  * Read a request from the connection...
+  */
+
+  while ((http_state = httpReadRequest(client->http, uri,
+                                       sizeof(uri))) == HTTP_STATE_WAITING)
+    usleep(1);
+
+ /*
+  * Parse the request line...
+  */
+
+  if (http_state == HTTP_STATE_ERROR)
+  {
+    if (httpError(client->http) == EPIPE)
+      fprintf(stderr, "%s Client closed connection.\n", client->hostname);
+    else
+      fprintf(stderr, "%s Bad request line (%s).\n", client->hostname,
+              strerror(httpError(client->http)));
+
+    return (0);
+  }
+  else if (http_state == HTTP_STATE_UNKNOWN_METHOD)
+  {
+    fprintf(stderr, "%s Bad/unknown operation.\n", client->hostname);
+    respond_http(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0);
+    return (0);
+  }
+  else if (http_state == HTTP_STATE_UNKNOWN_VERSION)
+  {
+    fprintf(stderr, "%s Bad HTTP version.\n", client->hostname);
+    respond_http(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0);
+    return (0);
+  }
+
+  fprintf(stderr, "%s %s %s\n", client->hostname, http_states[http_state],
+          uri);
+
+ /*
+  * Separate the URI into its components...
+  */
+
+  if (httpSeparateURI(HTTP_URI_CODING_MOST, uri, scheme, sizeof(scheme),
+                     userpass, sizeof(userpass),
+                     hostname, sizeof(hostname), &port,
+                     client->uri, sizeof(client->uri)) < HTTP_URI_STATUS_OK &&
+      (http_state != HTTP_STATE_OPTIONS || strcmp(uri, "*")))
+  {
+    fprintf(stderr, "%s Bad URI \"%s\".\n", client->hostname, uri);
+    respond_http(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0);
+    return (0);
+  }
+
+  if ((client->options = strchr(client->uri, '?')) != NULL)
+    *(client->options)++ = '\0';
+
+ /*
+  * Process the request...
+  */
+
+  client->start     = time(NULL);
+  client->operation = httpGetState(client->http);
+
+ /*
+  * Parse incoming parameters until the status changes...
+  */
+
+  while ((http_status = httpUpdate(client->http)) == HTTP_STATUS_CONTINUE);
+
+  if (http_status != HTTP_STATUS_OK)
+  {
+    respond_http(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0);
+    return (0);
+  }
+
+  if (!httpGetField(client->http, HTTP_FIELD_HOST)[0] &&
+      httpGetVersion(client->http) >= HTTP_VERSION_1_1)
+  {
+   /*
+    * HTTP/1.1 and higher require the "Host:" field...
+    */
+
+    respond_http(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0);
+    return (0);
+  }
+
+ /*
+  * Handle HTTP Upgrade...
+  */
+
+  if (!strcasecmp(httpGetField(client->http, HTTP_FIELD_CONNECTION),
+                        "Upgrade"))
+  {
+#ifdef HAVE_SSL
+    if (strstr(httpGetField(client->http, HTTP_FIELD_UPGRADE), "TLS/") != NULL && !httpIsEncrypted(client->http))
+    {
+      if (!respond_http(client, HTTP_STATUS_SWITCHING_PROTOCOLS, NULL, NULL, 0))
+        return (0);
+
+      fprintf(stderr, "%s Upgrading to encrypted connection.\n", client->hostname);
+
+      if (httpEncryption(client->http, HTTP_ENCRYPTION_REQUIRED))
+      {
+        fprintf(stderr, "%s Unable to encrypt connection: %s\n", client->hostname, cupsLastErrorString());
+       return (0);
+      }
+
+      fprintf(stderr, "%s Connection now encrypted.\n", client->hostname);
+    }
+    else
+#endif /* HAVE_SSL */
+
+    if (!respond_http(client, HTTP_STATUS_NOT_IMPLEMENTED, NULL, NULL, 0))
+      return (0);
+  }
+
+ /*
+  * Handle HTTP Expect...
+  */
+
+  if (httpGetExpect(client->http) &&
+      (client->operation == HTTP_STATE_POST ||
+       client->operation == HTTP_STATE_PUT))
+  {
+    if (httpGetExpect(client->http) == HTTP_STATUS_CONTINUE)
+    {
+     /*
+      * Send 100-continue header...
+      */
+
+      if (!respond_http(client, HTTP_STATUS_CONTINUE, NULL, NULL, 0))
+       return (0);
+    }
+    else
+    {
+     /*
+      * Send 417-expectation-failed header...
+      */
+
+      if (!respond_http(client, HTTP_STATUS_EXPECTATION_FAILED, NULL, NULL, 0))
+       return (0);
+    }
+  }
+
+ /*
+  * Handle new transfers...
+  */
+
+  encoding = httpGetContentEncoding(client->http);
+
+  switch (client->operation)
+  {
+    case HTTP_STATE_OPTIONS :
+       /*
+       * Do OPTIONS command...
+       */
+
+       return (respond_http(client, HTTP_STATUS_OK, NULL, NULL, 0));
+
+    case HTTP_STATE_HEAD :
+#if 0 /* TODO: Work out icon support */
+        if (!strcmp(client->uri, "/icon.png"))
+         return (respond_http(client, HTTP_STATUS_OK, NULL, "image/png", 0));
+       else
+#endif /* 0 */
+       if (!strcmp(client->uri, "/") || !strcmp(client->uri, "/media") || !strcmp(client->uri, "/supplies"))
+         return (respond_http(client, HTTP_STATUS_OK, NULL, "text/html", 0));
+       else
+         return (respond_http(client, HTTP_STATUS_NOT_FOUND, NULL, NULL, 0));
+
+    case HTTP_STATE_GET :
+#if 0 /* TODO: Work out icon support */
+        if (!strcmp(client->uri, "/icon.png"))
+       {
+        /*
+         * Send PNG icon file.
+         */
+
+          int          fd;             /* Icon file */
+         struct stat   fileinfo;       /* Icon file information */
+         char          buffer[4096];   /* Copy buffer */
+         ssize_t       bytes;          /* Bytes */
+
+          fprintf(stderr, "Icon file is \"%s\".\n", client->printer->icon);
+
+          if (!stat(client->printer->icon, &fileinfo) &&
+             (fd = open(client->printer->icon, O_RDONLY)) >= 0)
+         {
+           if (!respond_http(client, HTTP_STATUS_OK, NULL, "image/png",
+                             (size_t)fileinfo.st_size))
+           {
+             close(fd);
+             return (0);
+           }
+
+           while ((bytes = read(fd, buffer, sizeof(buffer))) > 0)
+             httpWrite2(client->http, buffer, (size_t)bytes);
+
+           httpFlushWrite(client->http);
+
+           close(fd);
+         }
+         else
+           return (respond_http(client, HTTP_STATUS_NOT_FOUND, NULL, NULL, 0));
+       }
+       else
+#endif /* 0 */
+       if (!strcmp(client->uri, "/"))
+       {
+        /*
+         * Show web status page...
+         */
+
+          _ipp_job_t   *job;           /* Current job */
+         int           i;              /* Looping var */
+         _ipp_preason_t reason;        /* Current reason */
+         static const char * const reasons[] =
+         {                             /* Reason strings */
+           "Other",
+           "Cover Open",
+           "Input Tray Missing",
+           "Marker Supply Empty",
+           "Marker Supply Low",
+           "Marker Waste Almost Full",
+           "Marker Waste Full",
+           "Media Empty",
+           "Media Jam",
+           "Media Low",
+           "Media Needed",
+           "Moving to Paused",
+           "Paused",
+           "Spool Area Full",
+           "Toner Empty",
+           "Toner Low"
+         };
+
+          if (!respond_http(client, HTTP_STATUS_OK, encoding, "text/html", 0))
+           return (0);
+
+          html_header(client, client->printer->name);
+          html_printf(client,
+                     "<p><img align=\"right\" src=\"/icon.png\" width=\"64\" height=\"64\"><b>ippserver (" CUPS_SVERSION ")</b></p>\n"
+                     "<p>%s, %d job(s).", client->printer->state == IPP_PSTATE_IDLE ? "Idle" : client->printer->state == IPP_PSTATE_PROCESSING ? "Printing" : "Stopped", cupsArrayCount(client->printer->jobs));
+         for (i = 0, reason = 1; i < (int)(sizeof(reasons) / sizeof(reasons[0])); i ++, reason <<= 1)
+           if (client->printer->state_reasons & reason)
+             html_printf(client, "\n<br>&nbsp;&nbsp;&nbsp;&nbsp;%s", reasons[i]);
+         html_printf(client, "</p>\n");
+         
+          if (cupsArrayCount(client->printer->jobs) > 0)
+         {
+            _cupsRWLockRead(&(client->printer->rwlock));
+
+           html_printf(client, "<table class=\"striped\" summary=\"Jobs\"><thead><tr><th>Job #</th><th>Name</th><th>Owner</th><th>When</th></tr></thead><tbody>\n");
+           for (job = (_ipp_job_t *)cupsArrayFirst(client->printer->jobs); job; job = (_ipp_job_t *)cupsArrayNext(client->printer->jobs))
+           {
+             char      when[256],      /* When job queued/started/finished */
+                       hhmmss[64];     /* Time HH:MM:SS */
+
+              switch (job->state)
+             {
+               case IPP_JSTATE_PENDING :
+               case IPP_JSTATE_HELD :
+                   snprintf(when, sizeof(when), "Queued at %s", time_string(job->created, hhmmss, sizeof(hhmmss)));
+                   break;
+               case IPP_JSTATE_PROCESSING :
+               case IPP_JSTATE_STOPPED :
+                   snprintf(when, sizeof(when), "Started at %s", time_string(job->processing, hhmmss, sizeof(hhmmss)));
+                   break;
+               case IPP_JSTATE_ABORTED :
+                   snprintf(when, sizeof(when), "Aborted at %s", time_string(job->completed, hhmmss, sizeof(hhmmss)));
+                   break;
+               case IPP_JSTATE_CANCELED :
+                   snprintf(when, sizeof(when), "Canceled at %s", time_string(job->completed, hhmmss, sizeof(hhmmss)));
+                   break;
+               case IPP_JSTATE_COMPLETED :
+                   snprintf(when, sizeof(when), "Completed at %s", time_string(job->completed, hhmmss, sizeof(hhmmss)));
+                   break;
+             }
+
+             html_printf(client, "<tr><td>%d</td><td>%s</td><td>%s</td><td>%s</td></tr>\n", job->id, job->name, job->username, when);
+           }
+           html_printf(client, "</tbody></table>\n");
+
+           _cupsRWUnlock(&(client->printer->rwlock));
+         }
+          html_footer(client);
+
+         return (1);
+       }
+#if 0 /* TODO: Pull media and supply info from device attrs */
+       else if (!strcmp(client->uri, "/media"))
+       {
+        /*
+         * Show web media page...
+         */
+
+         int           i,              /* Looping var */
+                       num_options;    /* Number of form options */
+         cups_option_t *options;       /* Form options */
+          static const char * const sizes[] =
+         {                             /* Size strings */
+           "ISO A4",
+           "ISO A5",
+           "ISO A6",
+           "DL Envelope",
+           "US Legal",
+           "US Letter",
+           "#10 Envelope",
+           "3x5 Photo",
+           "3.5x5 Photo",
+           "4x6 Photo",
+           "5x7 Photo"
+         };
+         static const char * const types[] =
+                                         /* Type strings */
+         {
+           "Auto",
+           "Cardstock",
+           "Envelope",
+           "Labels",
+           "Other",
+           "Glossy Photo",
+           "High-Gloss Photo",
+           "Matte Photo",
+           "Satin Photo",
+           "Semi-Gloss Photo",
+           "Plain",
+           "Letterhead",
+           "Transparency"
+         };
+         static const int sheets[] =   /* Number of sheets */
+         {
+           250,
+           100,
+           25,
+           5,
+           0
+         };
+
+          if (!respond_http(client, HTTP_STATUS_OK, encoding, "text/html", 0))
+           return (0);
+
+          html_header(client, client->printer->name);
+
+         if ((num_options = parse_options(client, &options)) > 0)
+         {
+          /*
+           * WARNING: A real printer/server implementation MUST NOT implement
+           * media updates via a GET request - GET requests are supposed to be
+           * idempotent (without side-effects) and we obviously are not
+           * authenticating access here.  This form is provided solely to
+           * enable testing and development!
+           */
+
+           const char  *val;           /* Form value */
+
+           if ((val = cupsGetOption("main_size", num_options, options)) != NULL)
+             client->printer->main_size = atoi(val);
+           if ((val = cupsGetOption("main_type", num_options, options)) != NULL)
+             client->printer->main_type = atoi(val);
+           if ((val = cupsGetOption("main_level", num_options, options)) != NULL)
+             client->printer->main_level = atoi(val);
+
+           if ((val = cupsGetOption("envelope_size", num_options, options)) != NULL)
+             client->printer->envelope_size = atoi(val);
+           if ((val = cupsGetOption("envelope_level", num_options, options)) != NULL)
+             client->printer->envelope_level = atoi(val);
+
+           if ((val = cupsGetOption("photo_size", num_options, options)) != NULL)
+             client->printer->photo_size = atoi(val);
+           if ((val = cupsGetOption("photo_type", num_options, options)) != NULL)
+             client->printer->photo_type = atoi(val);
+           if ((val = cupsGetOption("photo_level", num_options, options)) != NULL)
+             client->printer->photo_level = atoi(val);
+
+            if ((client->printer->main_level < 100 && client->printer->main_level > 0) || (client->printer->envelope_level < 25 && client->printer->envelope_level > 0) || (client->printer->photo_level < 25 && client->printer->photo_level > 0))
+             client->printer->state_reasons |= _IPP_PREASON_MEDIA_LOW;
+           else
+             client->printer->state_reasons &= (_ipp_preason_t)~_IPP_PREASON_MEDIA_LOW;
+
+            if ((client->printer->main_level == 0 && client->printer->main_size > _IPP_MEDIA_SIZE_NONE) || (client->printer->envelope_level == 0 && client->printer->envelope_size > _IPP_MEDIA_SIZE_NONE) || (client->printer->photo_level == 0 && client->printer->photo_size > _IPP_MEDIA_SIZE_NONE))
+           {
+             client->printer->state_reasons |= _IPP_PREASON_MEDIA_EMPTY;
+             if (client->printer->active_job)
+               client->printer->state_reasons |= _IPP_PREASON_MEDIA_NEEDED;
+           }
+           else
+             client->printer->state_reasons &= (_ipp_preason_t)~(_IPP_PREASON_MEDIA_EMPTY | _IPP_PREASON_MEDIA_NEEDED);
+
+           html_printf(client, "<blockquote>Media updated.</blockquote>\n");
+          }
+
+          html_printf(client, "<form method=\"GET\" action=\"/media\">\n");
+
+          html_printf(client, "<table class=\"form\" summary=\"Media\">\n");
+          html_printf(client, "<tr><th>Main Tray:</th><td><select name=\"main_size\"><option value=\"-1\">None</option>");
+          for (i = 0; i < (int)(sizeof(sizes) / sizeof(sizes[0])); i ++)
+           if (!strstr(sizes[i], "Envelope") && !strstr(sizes[i], "Photo"))
+             html_printf(client, "<option value=\"%d\"%s>%s</option>", i, i == client->printer->main_size ? " selected" : "", sizes[i]);
+         html_printf(client, "</select> <select name=\"main_type\"><option value=\"-1\">None</option>");
+          for (i = 0; i < (int)(sizeof(types) / sizeof(types[0])); i ++)
+           if (!strstr(types[i], "Photo"))
+             html_printf(client, "<option value=\"%d\"%s>%s</option>", i, i == client->printer->main_type ? " selected" : "", types[i]);
+         html_printf(client, "</select> <select name=\"main_level\">");
+          for (i = 0; i < (int)(sizeof(sheets) / sizeof(sheets[0])); i ++)
+           html_printf(client, "<option value=\"%d\"%s>%d sheets</option>", sheets[i], sheets[i] == client->printer->main_level ? " selected" : "", sheets[i]);
+         html_printf(client, "</select></td></tr>\n");
+
+          html_printf(client,
+                     "<tr><th>Envelope Feeder:</th><td><select name=\"envelope_size\"><option value=\"-1\">None</option>");
+          for (i = 0; i < (int)(sizeof(sizes) / sizeof(sizes[0])); i ++)
+           if (strstr(sizes[i], "Envelope"))
+             html_printf(client, "<option value=\"%d\"%s>%s</option>", i, i == client->printer->envelope_size ? " selected" : "", sizes[i]);
+         html_printf(client, "</select> <select name=\"envelope_level\">");
+          for (i = 0; i < (int)(sizeof(sheets) / sizeof(sheets[0])); i ++)
+           html_printf(client, "<option value=\"%d\"%s>%d sheets</option>", sheets[i], sheets[i] == client->printer->envelope_level ? " selected" : "", sheets[i]);
+         html_printf(client, "</select></td></tr>\n");
+
+          html_printf(client,
+                     "<tr><th>Photo Tray:</th><td><select name=\"photo_size\"><option value=\"-1\">None</option>");
+          for (i = 0; i < (int)(sizeof(sizes) / sizeof(sizes[0])); i ++)
+           if (strstr(sizes[i], "Photo"))
+             html_printf(client, "<option value=\"%d\"%s>%s</option>", i, i == client->printer->photo_size ? " selected" : "", sizes[i]);
+         html_printf(client, "</select> <select name=\"photo_type\"><option value=\"-1\">None</option>");
+          for (i = 0; i < (int)(sizeof(types) / sizeof(types[0])); i ++)
+           if (strstr(types[i], "Photo"))
+             html_printf(client, "<option value=\"%d\"%s>%s</option>", i, i == client->printer->photo_type ? " selected" : "", types[i]);
+         html_printf(client, "</select> <select name=\"photo_level\">");
+          for (i = 0; i < (int)(sizeof(sheets) / sizeof(sheets[0])); i ++)
+           html_printf(client, "<option value=\"%d\"%s>%d sheets</option>", sheets[i], sheets[i] == client->printer->photo_level ? " selected" : "", sheets[i]);
+         html_printf(client, "</select></td></tr>\n");
+
+         html_printf(client, "<tr><td></td><td><input type=\"submit\" value=\"Update Media\"></td></tr></table></form>\n");
+          html_footer(client);
+
+         return (1);
+       }
+       else if (!strcmp(client->uri, "/supplies"))
+       {
+        /*
+         * Show web supplies page...
+         */
+
+          int          i, j,           /* Looping vars */
+                       num_options;    /* Number of form options */
+         cups_option_t *options;       /* Form options */
+         static const int levels[] = { 0, 5, 10, 25, 50, 75, 90, 95, 100 };
+
+          if (!respond_http(client, HTTP_STATUS_OK, encoding, "text/html", 0))
+           return (0);
+
+          html_header(client, client->printer->name);
+
+         if ((num_options = parse_options(client, &options)) > 0)
+         {
+          /*
+           * WARNING: A real printer/server implementation MUST NOT implement
+           * supply updates via a GET request - GET requests are supposed to be
+           * idempotent (without side-effects) and we obviously are not
+           * authenticating access here.  This form is provided solely to
+           * enable testing and development!
+           */
+
+           char        name[64];       /* Form field */
+           const char  *val;           /* Form value */
+
+            client->printer->state_reasons &= (_ipp_preason_t)~(_IPP_PREASON_MARKER_SUPPLY_EMPTY | _IPP_PREASON_MARKER_SUPPLY_LOW | _IPP_PREASON_MARKER_WASTE_ALMOST_FULL | _IPP_PREASON_MARKER_WASTE_FULL | _IPP_PREASON_TONER_EMPTY | _IPP_PREASON_TONER_LOW);
+
+           for (i = 0; i < (int)(sizeof(printer_supplies) / sizeof(printer_supplies[0])); i ++)
+           {
+             snprintf(name, sizeof(name), "supply_%d", i);
+             if ((val = cupsGetOption(name, num_options, options)) != NULL)
+             {
+               int level = client->printer->supplies[i] = atoi(val);
+                                       /* New level */
+
+               if (i < 4)
+               {
+                 if (level == 0)
+                   client->printer->state_reasons |= _IPP_PREASON_TONER_EMPTY;
+                 else if (level < 10)
+                   client->printer->state_reasons |= _IPP_PREASON_TONER_LOW;
+               }
+               else
+               {
+                 if (level == 100)
+                   client->printer->state_reasons |= _IPP_PREASON_MARKER_WASTE_FULL;
+                 else if (level > 90)
+                   client->printer->state_reasons |= _IPP_PREASON_MARKER_WASTE_ALMOST_FULL;
+               }
+             }
+            }
+
+           html_printf(client, "<blockquote>Supplies updated.</blockquote>\n");
+          }
+
+          html_printf(client, "<form method=\"GET\" action=\"/supplies\">\n");
+
+         html_printf(client, "<table class=\"form\" summary=\"Supplies\">\n");
+         for (i = 0; i < (int)(sizeof(printer_supplies) / sizeof(printer_supplies[0])); i ++)
+         {
+           html_printf(client, "<tr><th>%s:</th><td><select name=\"supply_%d\">", printer_supplies[i], i);
+           for (j = 0; j < (int)(sizeof(levels) / sizeof(levels[0])); j ++)
+             html_printf(client, "<option value=\"%d\"%s>%d%%</option>", levels[j], levels[j] == client->printer->supplies[i] ? " selected" : "", levels[j]);
+           html_printf(client, "</select></td></tr>\n");
+         }
+         html_printf(client, "<tr><td></td><td><input type=\"submit\" value=\"Update Supplies\"></td></tr>\n</table>\n</form>\n");
+          html_footer(client);
+
+         return (1);
+       }
+#endif /* 0 */
+       else
+         return (respond_http(client, HTTP_STATUS_NOT_FOUND, NULL, NULL, 0));
+       break;
+
+    case HTTP_STATE_POST :
+       if (strcmp(httpGetField(client->http, HTTP_FIELD_CONTENT_TYPE),
+                  "application/ipp"))
+        {
+        /*
+         * Not an IPP request...
+         */
+
+         return (respond_http(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0));
+       }
+
+       /*
+        * Read the IPP request...
+       */
+
+       client->request = ippNew();
+
+        while ((ipp_state = ippRead(client->http,
+                                    client->request)) != IPP_STATE_DATA)
+       {
+         if (ipp_state == IPP_STATE_ERROR)
+         {
+            fprintf(stderr, "%s IPP read error (%s).\n", client->hostname,
+                   cupsLastErrorString());
+           respond_http(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0);
+           return (0);
+         }
+       }
+
+       /*
+        * Now that we have the IPP request, process the request...
+       */
+
+        return (process_ipp(client));
+
+    default :
+        break; /* Anti-compiler-warning-code */
+  }
+
+  return (1);
+}
+
+
+/*
+ * 'process_ipp()' - Process an IPP request.
+ */
+
+static int                             /* O - 1 on success, 0 on error */
+process_ipp(_ipp_client_t *client)     /* I - Client */
+{
+  ipp_tag_t            group;          /* Current group tag */
+  ipp_attribute_t      *attr;          /* Current attribute */
+  ipp_attribute_t      *charset;       /* Character set attribute */
+  ipp_attribute_t      *language;      /* Language attribute */
+  ipp_attribute_t      *uri;           /* Printer URI attribute */
+  int                  major, minor;   /* Version number */
+  const char           *name;          /* Name of attribute */
+
+
+  debug_attributes("Request", client->request, 1);
+
+ /*
+  * First build an empty response message for this request...
+  */
+
+  client->operation_id = ippGetOperation(client->request);
+  client->response     = ippNewResponse(client->request);
+
+ /*
+  * Then validate the request header and required attributes...
+  */
+
+  major = ippGetVersion(client->request, &minor);
+
+  if (major < 1 || major > 2)
+  {
+   /*
+    * Return an error, since we only support IPP 1.x and 2.x.
+    */
+
+    respond_ipp(client, IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED,
+                "Bad request version number %d.%d.", major, minor);
+  }
+  else if (ippGetRequestId(client->request) <= 0)
+    respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST, "Bad request-id %d.",
+                ippGetRequestId(client->request));
+  else if (!ippFirstAttribute(client->request))
+    respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST,
+                "No attributes in request.");
+  else
+  {
+   /*
+    * Make sure that the attributes are provided in the correct order and
+    * don't repeat groups...
+    */
+
+    for (attr = ippFirstAttribute(client->request),
+             group = ippGetGroupTag(attr);
+        attr;
+        attr = ippNextAttribute(client->request))
+    {
+      if (ippGetGroupTag(attr) < group && ippGetGroupTag(attr) != IPP_TAG_ZERO)
+      {
+       /*
+       * Out of order; return an error...
+       */
+
+       respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST,
+                   "Attribute groups are out of order (%x < %x).",
+                   ippGetGroupTag(attr), group);
+       break;
+      }
+      else
+       group = ippGetGroupTag(attr);
+    }
+
+    if (!attr)
+    {
+     /*
+      * Then make sure that the first three attributes are:
+      *
+      *     attributes-charset
+      *     attributes-natural-language
+      *     printer-uri/job-uri
+      */
+
+      attr = ippFirstAttribute(client->request);
+      name = ippGetName(attr);
+      if (attr && name && !strcmp(name, "attributes-charset") &&
+         ippGetValueTag(attr) == IPP_TAG_CHARSET)
+       charset = attr;
+      else
+       charset = NULL;
+
+      attr = ippNextAttribute(client->request);
+      name = ippGetName(attr);
+
+      if (attr && name && !strcmp(name, "attributes-natural-language") &&
+         ippGetValueTag(attr) == IPP_TAG_LANGUAGE)
+       language = attr;
+      else
+       language = NULL;
+
+      if ((attr = ippFindAttribute(client->request, "printer-uri",
+                                   IPP_TAG_URI)) != NULL)
+       uri = attr;
+      else if ((attr = ippFindAttribute(client->request, "job-uri",
+                                        IPP_TAG_URI)) != NULL)
+       uri = attr;
+      else
+       uri = NULL;
+
+      if (charset &&
+          strcasecmp(ippGetString(charset, 0, NULL), "us-ascii") &&
+          strcasecmp(ippGetString(charset, 0, NULL), "utf-8"))
+      {
+       /*
+        * Bad character set...
+       */
+
+       respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST,
+                   "Unsupported character set \"%s\".",
+                   ippGetString(charset, 0, NULL));
+      }
+      else if (!charset || !language || !uri)
+      {
+       /*
+       * Return an error, since attributes-charset,
+       * attributes-natural-language, and printer-uri/job-uri are required
+       * for all operations.
+       */
+
+       respond_ipp(client, IPP_STATUS_ERROR_BAD_REQUEST,
+                   "Missing required attributes.");
+      }
+      else
+      {
+        char           scheme[32],     /* URI scheme */
+                       userpass[32],   /* Username/password in URI */
+                       host[256],      /* Host name in URI */
+                       resource[256];  /* Resource path in URI */
+       int             port;           /* Port number in URI */
+
+        name = ippGetName(uri);
+
+        if (httpSeparateURI(HTTP_URI_CODING_ALL, ippGetString(uri, 0, NULL),
+                            scheme, sizeof(scheme),
+                            userpass, sizeof(userpass),
+                            host, sizeof(host), &port,
+                            resource, sizeof(resource)) < HTTP_URI_STATUS_OK)
+         respond_ipp(client, IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES,
+                     "Bad %s value '%s'.", name, ippGetString(uri, 0, NULL));
+        else if ((!strcmp(name, "job-uri") && strncmp(resource, "/ipp/print/", 11)) ||
+                 (!strcmp(name, "printer-uri") && strcmp(resource, "/ipp/print")))
+         respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "%s %s not found.",
+                     name, ippGetString(uri, 0, NULL));
+       else
+       {
+        /*
+         * Try processing the operation...
+         */
+
+         switch ((int)ippGetOperation(client->request))
+         {
+           case IPP_OP_PRINT_JOB :
+               ipp_print_job(client);
+               break;
+
+           case IPP_OP_PRINT_URI :
+               ipp_print_uri(client);
+               break;
+
+           case IPP_OP_VALIDATE_JOB :
+               ipp_validate_job(client);
+               break;
+
+           case IPP_OP_CREATE_JOB :
+               ipp_create_job(client);
+               break;
+
+           case IPP_OP_SEND_DOCUMENT :
+               ipp_send_document(client);
+               break;
+
+           case IPP_OP_SEND_URI :
+               ipp_send_uri(client);
+               break;
+
+           case IPP_OP_CANCEL_JOB :
+               ipp_cancel_job(client);
+               break;
+
+           case IPP_OP_CANCEL_MY_JOBS :
+               ipp_cancel_my_jobs(client);
+               break;
+
+           case IPP_OP_GET_JOB_ATTRIBUTES :
+               ipp_get_job_attributes(client);
+               break;
+
+           case IPP_OP_GET_JOBS :
+               ipp_get_jobs(client);
+               break;
+
+           case IPP_OP_GET_PRINTER_ATTRIBUTES :
+               ipp_get_printer_attributes(client);
+               break;
+
+           case IPP_OP_GET_PRINTER_SUPPORTED_VALUES :
+               ipp_get_printer_supported_values(client);
+               break;
+
+           case IPP_OP_CLOSE_JOB :
+               ipp_close_job(client);
+               break;
+
+           case IPP_OP_IDENTIFY_PRINTER :
+               ipp_identify_printer(client);
+               break;
+
+           case IPP_OP_CANCEL_SUBSCRIPTION :
+               ipp_cancel_subscription(client);
+               break;
+
+            case IPP_OP_CREATE_JOB_SUBSCRIPTIONS :
+           case IPP_OP_CREATE_PRINTER_SUBSCRIPTIONS :
+               ipp_create_xxx_subscriptions(client);
+               break;
+
+           case IPP_OP_GET_NOTIFICATIONS :
+               ipp_get_notifications(client);
+               break;
+
+           case IPP_OP_GET_SUBSCRIPTION_ATTRIBUTES :
+               ipp_get_subscription_attributes(client);
+               break;
+
+           case IPP_OP_GET_SUBSCRIPTIONS :
+               ipp_get_subscriptions(client);
+               break;
+
+           case IPP_OP_RENEW_SUBSCRIPTION :
+               ipp_renew_subscription(client);
+               break;
+
+           case IPP_OP_GET_DOCUMENT_ATTRIBUTES :
+               ipp_get_document_attributes(client);
+               break;
+
+           case IPP_OP_GET_DOCUMENTS :
+               ipp_get_documents(client);
+               break;
+
+           case IPP_OP_VALIDATE_DOCUMENT :
+               ipp_validate_document(client);
+               break;
+
+            case _IPP_OP_ACKNOWLEDGE_DOCUMENT :
+               ipp_acknowledge_document(client);
+               break;
+
+            case _IPP_OP_ACKNOWLEDGE_IDENTIFY_PRINTER :
+               ipp_acknowledge_identify_printer(client);
+               break;
+
+            case _IPP_OP_ACKNOWLEDGE_JOB :
+               ipp_acknowledge_job(client);
+               break;
+
+            case _IPP_OP_FETCH_DOCUMENT :
+               ipp_fetch_document(client);
+               break;
+
+            case _IPP_OP_FETCH_JOB :
+               ipp_fetch_job(client);
+               break;
+
+            case _IPP_OP_GET_OUTPUT_DEVICE_ATTRIBUTES :
+               ipp_get_output_device_attributes(client);
+               break;
+
+            case _IPP_OP_UPDATE_ACTIVE_JOBS :
+               ipp_update_active_jobs(client);
+               break;
+
+            case _IPP_OP_UPDATE_DOCUMENT_STATUS :
+               ipp_update_document_status(client);
+               break;
+
+            case _IPP_OP_UPDATE_JOB_STATUS :
+               ipp_update_job_status(client);
+               break;
+
+            case _IPP_OP_UPDATE_OUTPUT_DEVICE_ATTRIBUTES :
+               ipp_update_output_device_attributes(client);
+               break;
+
+            case _IPP_OP_DEREGISTER_OUTPUT_DEVICE :
+               ipp_deregister_output_device(client);
+               break;
+
+           default :
+               respond_ipp(client, IPP_STATUS_ERROR_OPERATION_NOT_SUPPORTED,
+                           "Operation not supported.");
+               break;
+         }
+       }
+      }
+    }
+  }
+
+ /*
+  * Send the HTTP header and return...
+  */
+
+  if (httpGetState(client->http) != HTTP_STATE_POST_SEND)
+    httpFlush(client->http);           /* Flush trailing (junk) data */
+
+  return (respond_http(client, HTTP_STATUS_OK, NULL, "application/ipp",
+                       client->fetch_file >= 0 ? 0 : ippLength(client->response)));
+}
+
+
+/*
+ * 'process_job()' - Process a print job.
+ */
+
+static void *                          /* O - Thread exit status */
+process_job(_ipp_job_t *job)           /* I - Job */
+{
+  job->state                   = IPP_JSTATE_PROCESSING;
+  job->printer->state          = IPP_PSTATE_PROCESSING;
+  job->processing              = time(NULL);
+  job->printer->processing_job = job;
+
+  add_event(job->printer, job, _IPP_EVENT_JOB_STATE_CHANGED, "Job processing.");
+
+ /*
+  * TODO: Perform any preprocessing needed...
+  */
+
+  // job->state_reasons |= _IPP_JREASON_JOB_TRANSFORMING;
+  // job->state_reasons &= ~_IPP_JREASON_JOB_TRANSFORMING;
+
+ /*
+  * Set the state to processing-stopped, fetchable, then send a
+  * notification.
+  */
+
+  job->state         = IPP_JSTATE_STOPPED;
+  job->state_reasons |= _IPP_JREASON_JOB_FETCHABLE;
+
+  add_event(job->printer, job, _IPP_EVENT_JOB_STATE_CHANGED, "Job fetchable.");
+
+  return (NULL);
+}
+
+
+/*
+ * 'respond_http()' - Send a HTTP response.
+ */
+
+int                                    /* O - 1 on success, 0 on failure */
+respond_http(
+    _ipp_client_t *client,             /* I - Client */
+    http_status_t code,                        /* I - HTTP status of response */
+    const char    *content_encoding,   /* I - Content-Encoding of response */
+    const char    *type,               /* I - MIME media type of response */
+    size_t        length)              /* I - Length of response */
+{
+  char message[1024];                  /* Text message */
+
+
+  fprintf(stderr, "%s %s\n", client->hostname, httpStatus(code));
+
+  if (code == HTTP_STATUS_CONTINUE)
+  {
+   /*
+    * 100-continue doesn't send any headers...
+    */
+
+    return (httpWriteResponse(client->http, HTTP_STATUS_CONTINUE) == 0);
+  }
+
+ /*
+  * Format an error message...
+  */
+
+  if (!type && !length && code != HTTP_STATUS_OK && code != HTTP_STATUS_SWITCHING_PROTOCOLS)
+  {
+    snprintf(message, sizeof(message), "%d - %s\n", code, httpStatus(code));
+
+    type   = "text/plain";
+    length = strlen(message);
+  }
+  else
+    message[0] = '\0';
+
+ /*
+  * Send the HTTP response header...
+  */
+
+  httpClearFields(client->http);
+
+  if (code == HTTP_STATUS_METHOD_NOT_ALLOWED ||
+      client->operation == HTTP_STATE_OPTIONS)
+    httpSetField(client->http, HTTP_FIELD_ALLOW, "GET, HEAD, OPTIONS, POST");
+
+  if (type)
+  {
+    if (!strcmp(type, "text/html"))
+      httpSetField(client->http, HTTP_FIELD_CONTENT_TYPE,
+                   "text/html; charset=utf-8");
+    else
+      httpSetField(client->http, HTTP_FIELD_CONTENT_TYPE, type);
+
+    if (content_encoding)
+      httpSetField(client->http, HTTP_FIELD_CONTENT_ENCODING, content_encoding);
+  }
+
+  httpSetLength(client->http, length);
+
+  if (httpWriteResponse(client->http, code) < 0)
+    return (0);
+
+ /*
+  * Send the response data...
+  */
+
+  if (message[0])
+  {
+   /*
+    * Send a plain text message.
+    */
+
+    if (httpPrintf(client->http, "%s", message) < 0)
+      return (0);
+
+    if (httpWrite2(client->http, "", 0) < 0)
+      return (0);
+  }
+  else if (client->response)
+  {
+   /*
+    * Send an IPP response...
+    */
+
+    debug_attributes("Response", client->response, 2);
+
+    ippSetState(client->response, IPP_STATE_IDLE);
+
+    if (ippWrite(client->http, client->response) != IPP_STATE_DATA)
+      return (0);
+
+    if (client->fetch_file >= 0)
+    {
+      ssize_t  bytes;                  /* Bytes read */
+      char     buffer[32768];          /* Buffer */
+
+      if (client->fetch_compression)
+        httpSetField(client->http, HTTP_FIELD_CONTENT_ENCODING, "gzip");
+
+      while ((bytes = read(client->fetch_file, buffer, sizeof(buffer))) > 0)
+        httpWrite2(client->http, buffer, (size_t)bytes);
+
+      httpWrite2(client->http, "", 0);
+      close(client->fetch_file);
+      client->fetch_file = -1;
+    }
+  }
+
+  return (1);
+}
+
+
+/*
+ * 'respond_ipp()' - Send an IPP response.
+ */
+
+static void
+respond_ipp(_ipp_client_t *client,     /* I - Client */
+            ipp_status_t  status,      /* I - status-code */
+           const char    *message,     /* I - printf-style status-message */
+           ...)                        /* I - Additional args as needed */
+{
+  const char   *formatted = NULL;      /* Formatted message */
+
+
+  ippSetStatusCode(client->response, status);
+
+  if (message)
+  {
+    va_list            ap;             /* Pointer to additional args */
+    ipp_attribute_t    *attr;          /* New status-message attribute */
+
+    va_start(ap, message);
+    if ((attr = ippFindAttribute(client->response, "status-message",
+                                IPP_TAG_TEXT)) != NULL)
+      ippSetStringfv(client->response, &attr, 0, message, ap);
+    else
+      attr = ippAddStringfv(client->response, IPP_TAG_OPERATION, IPP_TAG_TEXT,
+                           "status-message", NULL, message, ap);
+    va_end(ap);
+
+    formatted = ippGetString(attr, 0, NULL);
+  }
+
+  if (formatted)
+    fprintf(stderr, "%s %s %s (%s)\n", client->hostname,
+           ippOpString(client->operation_id), ippErrorString(status),
+           formatted);
+  else
+    fprintf(stderr, "%s %s %s\n", client->hostname,
+           ippOpString(client->operation_id), ippErrorString(status));
+}
+
+
+/*
+ * 'respond_unsupported()' - Respond with an unsupported attribute.
+ */
+
+static void
+respond_unsupported(
+    _ipp_client_t   *client,           /* I - Client */
+    ipp_attribute_t *attr)             /* I - Atribute */
+{
+  ipp_attribute_t      *temp;          /* Copy of attribute */
+
+
+  respond_ipp(client, IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES,
+              "Unsupported %s %s%s value.", ippGetName(attr),
+              ippGetCount(attr) > 1 ? "1setOf " : "",
+             ippTagString(ippGetValueTag(attr)));
+
+  temp = ippCopyAttribute(client->response, attr, 0);
+  ippSetGroupTag(client->response, &temp, IPP_TAG_UNSUPPORTED_GROUP);
+}
+
+
+/*
+ * 'run_printer()' - Run the printer service.
+ */
+
+static void
+run_printer(_ipp_printer_t *printer)   /* I - Printer */
+{
+  int          num_fds;                /* Number of file descriptors */
+  struct pollfd        polldata[3];            /* poll() data */
+  int          timeout;                /* Timeout for poll() */
+  _ipp_client_t        *client;                /* New client */
+
+
+ /*
+  * Setup poll() data for the Bonjour service socket and IPv4/6 listeners...
+  */
+
+  polldata[0].fd     = printer->ipv4;
+  polldata[0].events = POLLIN;
+
+  polldata[1].fd     = printer->ipv6;
+  polldata[1].events = POLLIN;
+
+  num_fds = 2;
+
+ /*
+  * Loop until we are killed or have a hard error...
+  */
+
+  for (;;)
+  {
+    if (cupsArrayCount(printer->jobs))
+      timeout = 10;
+    else
+      timeout = -1;
+
+    if (poll(polldata, (nfds_t)num_fds, timeout) < 0 && errno != EINTR)
+    {
+      perror("poll() failed");
+      break;
+    }
+
+    if (polldata[0].revents & POLLIN)
+    {
+      if ((client = create_client(printer, printer->ipv4)) != NULL)
+      {
+       if (!_cupsThreadCreate((_cups_thread_func_t)process_client, client))
+       {
+         perror("Unable to create client thread");
+         delete_client(client);
+       }
+      }
+    }
+
+    if (polldata[1].revents & POLLIN)
+    {
+      if ((client = create_client(printer, printer->ipv6)) != NULL)
+      {
+       if (!_cupsThreadCreate((_cups_thread_func_t)process_client, client))
+       {
+         perror("Unable to create client thread");
+         delete_client(client);
+       }
+      }
+    }
+
+   /*
+    * Clean out old jobs...
+    */
+
+    clean_jobs(printer);
+  }
+}
+
+
+/*
+ * 'time_string()' - Return the local time in hours, minutes, and seconds.
+ */
+
+static char *
+time_string(time_t tv,                 /* I - Time value */
+            char   *buffer,            /* I - Buffer */
+           size_t bufsize)             /* I - Size of buffer */
+{
+  struct tm    *curtime = localtime(&tv);
+                                       /* Local time */
+
+  strftime(buffer, bufsize, "%X", curtime);
+  return (buffer);
+}
+
+
+/*
+ * 'update_device_attributes_no_lock()' - Update the composite device attributes.
+ *
+ * Note: Caller MUST lock the printer object for writing before using.
+ */
+
+static void
+update_device_attributes_no_lock(
+    _ipp_printer_t *printer)           /* I - Printer */
+{
+  _ipp_device_t                *device;        /* Current device */
+  ipp_t                        *dev_attrs;     /* Device attributes */
+
+
+ /* TODO: Support multiple output devices, icons, etc... */
+  device    = (_ipp_device_t *)cupsArrayFirst(printer->devices);
+  dev_attrs = ippNew();
+
+  if (device)
+    copy_attributes(dev_attrs, device->attrs, NULL, IPP_TAG_PRINTER, 0);
+
+  ippDelete(printer->dev_attrs);
+  printer->dev_attrs = dev_attrs;
+
+  printer->config_time = time(NULL);
+}
+
+
+/*
+ * 'update_device_status_no_lock()' - Update the composite device state.
+ *
+ * Note: Caller MUST lock the printer object for writing before using.
+ */
+
+static void
+update_device_state_no_lock(
+    _ipp_printer_t *printer)           /* I - Printer */
+{
+  _ipp_device_t                *device;        /* Current device */
+  ipp_attribute_t      *attr;          /* Current attribute */
+
+
+ /* TODO: Support multiple output devices, icons, etc... */
+  device = (_ipp_device_t *)cupsArrayFirst(printer->devices);
+
+  if ((attr = ippFindAttribute(device->attrs, "printer-state", IPP_TAG_ENUM)) != NULL)
+    printer->dev_state = (ipp_pstate_t)ippGetInteger(attr, 0);
+  else
+    printer->dev_state = IPP_PSTATE_STOPPED;
+
+  if ((attr = ippFindAttribute(device->attrs, "printer-state-reasons", IPP_TAG_KEYWORD)) != NULL)
+    printer->dev_reasons = get_printer_state_reasons_bits(attr);
+  else
+    printer->dev_reasons = _IPP_PREASON_PAUSED;
+
+  printer->state_time = time(NULL);
+}
+
+
+/*
+ * 'usage()' - Show program usage.
+ */
+
+static void
+usage(int status)                      /* O - Exit status */
+{
+  if (!status)
+  {
+    puts(CUPS_SVERSION " - Copyright 2010-2014 by Apple Inc. All rights reserved.");
+    puts("");
+  }
+
+  puts("Usage: ippinfra [options] \"name\"");
+  puts("");
+  puts("Options:");
+  printf("-d spool-directory      Spool directory "
+         "(default=/tmp/ippserver.%d)\n", (int)getpid());
+  puts("-h                      Show program help");
+  puts("-k                      Keep job spool files");
+  puts("-n hostname             Hostname for printer");
+  puts("-p port                 Port number (default=auto)");
+  puts("-u user:pass            Set proxy username and password");
+  puts("-v[vvv]                 Be (very) verbose");
+
+  exit(status);
+}
+
+
+/*
+ * 'valid_doc_attributes()' - Determine whether the document attributes are
+ *                            valid.
+ *
+ * When one or more document attributes are invalid, this function adds a
+ * suitable response and attributes to the unsupported group.
+ */
+
+static int                             /* O - 1 if valid, 0 if not */
+valid_doc_attributes(
+    _ipp_client_t *client)             /* I - Client */
+{
+  int                  valid = 1;      /* Valid attributes? */
+  ipp_op_t             op = ippGetOperation(client->request);
+                                       /* IPP operation */
+  const char           *op_name = ippOpString(op);
+                                       /* IPP operation name */
+  ipp_attribute_t      *attr,          /* Current attribute */
+                       *supported;     /* xxx-supported attribute */
+  const char           *compression = NULL,
+                                       /* compression value */
+                       *format = NULL; /* document-format value */
+
+
+ /*
+  * Check operation attributes...
+  */
+
+  if ((attr = ippFindAttribute(client->request, "compression", IPP_TAG_ZERO)) != NULL)
+  {
+   /*
+    * If compression is specified, only accept a supported value in a Print-Job
+    * or Send-Document request...
+    */
+
+    compression = ippGetString(attr, 0, NULL);
+    supported   = ippFindAttribute(client->printer->attrs,
+                                   "compression-supported", IPP_TAG_KEYWORD);
+
+    if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_KEYWORD ||
+        ippGetGroupTag(attr) != IPP_TAG_OPERATION ||
+        (op != IPP_OP_PRINT_JOB && op != IPP_OP_SEND_DOCUMENT &&
+         op != IPP_OP_VALIDATE_JOB) ||
+        !ippContainsString(supported, compression))
+    {
+      respond_unsupported(client, attr);
+      valid = 0;
+    }
+    else
+    {
+      fprintf(stderr, "%s %s compression=\"%s\"\n", client->hostname, op_name, compression);
+
+      ippAddString(client->request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "compression-supplied", NULL, compression);
+
+      if (strcmp(compression, "none"))
+      {
+       if (Verbosity)
+         fprintf(stderr, "Receiving job file with \"%s\" compression.\n", compression);
+        httpSetField(client->http, HTTP_FIELD_CONTENT_ENCODING, compression);
+      }
+    }
+  }
+
+ /*
+  * Is it a format we support?
+  */
+
+  if ((attr = ippFindAttribute(client->request, "document-format", IPP_TAG_ZERO)) != NULL)
+  {
+    if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_MIMETYPE ||
+        ippGetGroupTag(attr) != IPP_TAG_OPERATION)
+    {
+      respond_unsupported(client, attr);
+      valid = 0;
+    }
+    else
+    {
+      format = ippGetString(attr, 0, NULL);
+
+      fprintf(stderr, "%s %s document-format=\"%s\"\n",
+             client->hostname, op_name, format);
+
+      ippAddString(client->request, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format-supplied", NULL, format);
+    }
+  }
+  else
+  {
+    format = ippGetString(ippFindAttribute(client->printer->attrs, "document-format-default", IPP_TAG_MIMETYPE), 0, NULL);
+    if (!format)
+      format = "application/octet-stream"; /* Should never happen */
+
+    attr = ippAddString(client->request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format", NULL, format);
+  }
+
+  if (!strcmp(format, "application/octet-stream") && (ippGetOperation(client->request) == IPP_OP_PRINT_JOB || ippGetOperation(client->request) == IPP_OP_SEND_DOCUMENT))
+  {
+   /*
+    * Auto-type the file using the first 8 bytes of the file...
+    */
+
+    unsigned char      header[8];      /* First 8 bytes of file */
+
+    memset(header, 0, sizeof(header));
+    httpPeek(client->http, (char *)header, sizeof(header));
+
+    if (!memcmp(header, "%PDF", 4))
+      format = "application/pdf";
+    else if (!memcmp(header, "%!", 2))
+      format = "application/postscript";
+    else if (!memcmp(header, "\377\330\377", 3) && header[3] >= 0xe0 && header[3] <= 0xef)
+      format = "image/jpeg";
+    else if (!memcmp(header, "\211PNG", 4))
+      format = "image/png";
+    else if (!memcmp(header, "RAS2", 4))
+      format = "image/pwg-raster";
+    else if (!memcmp(header, "UNIRAST", 8))
+      format = "image/urf";
+    else
+      format = NULL;
+
+    if (format)
+    {
+      fprintf(stderr, "%s %s Auto-typed document-format=\"%s\"\n",
+             client->hostname, op_name, format);
+
+      ippAddString(client->request, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format-detected", NULL, format);
+    }
+  }
+
+  if (op != IPP_OP_CREATE_JOB && (supported = ippFindAttribute(client->printer->attrs, "document-format-supported", IPP_TAG_MIMETYPE)) != NULL && !ippContainsString(supported, format))
+  {
+    respond_unsupported(client, attr);
+    valid = 0;
+  }
+
+ /*
+  * document-name
+  */
+
+  if ((attr = ippFindAttribute(client->request, "document-name", IPP_TAG_NAME)) != NULL)
+    ippAddString(client->request, IPP_TAG_JOB, IPP_TAG_NAME, "document-name-supplied", NULL, ippGetString(attr, 0, NULL));
+
+  return (valid);
+}
+
+
+/*
+ * 'valid_job_attributes()' - Determine whether the job attributes are valid.
+ *
+ * When one or more job attributes are invalid, this function adds a suitable
+ * response and attributes to the unsupported group.
+ */
+
+static int                             /* O - 1 if valid, 0 if not */
+valid_job_attributes(
+    _ipp_client_t *client)             /* I - Client */
+{
+  int                  i,              /* Looping var */
+                       valid = 1;      /* Valid attributes? */
+  ipp_attribute_t      *attr,          /* Current attribute */
+                       *supported;     /* xxx-supported attribute */
+
+
+ /*
+  * Check operation attributes...
+  */
+
+  valid = valid_doc_attributes(client);
+
+ /*
+  * Check the various job template attributes...
+  */
+
+  if ((attr = ippFindAttribute(client->request, "copies", IPP_TAG_ZERO)) != NULL)
+  {
+    if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_INTEGER ||
+        ippGetInteger(attr, 0) < 1 || ippGetInteger(attr, 0) > 999)
+    {
+      respond_unsupported(client, attr);
+      valid = 0;
+    }
+  }
+
+  if ((attr = ippFindAttribute(client->request, "ipp-attribute-fidelity", IPP_TAG_ZERO)) != NULL)
+  {
+    if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_BOOLEAN)
+    {
+      respond_unsupported(client, attr);
+      valid = 0;
+    }
+  }
+
+  if ((attr = ippFindAttribute(client->request, "job-hold-until", IPP_TAG_ZERO)) != NULL)
+  {
+    if (ippGetCount(attr) != 1 ||
+        (ippGetValueTag(attr) != IPP_TAG_NAME &&
+        ippGetValueTag(attr) != IPP_TAG_NAMELANG &&
+        ippGetValueTag(attr) != IPP_TAG_KEYWORD) ||
+       strcmp(ippGetString(attr, 0, NULL), "no-hold"))
+    {
+      respond_unsupported(client, attr);
+      valid = 0;
+    }
+  }
+
+  if ((attr = ippFindAttribute(client->request, "job-impressions", IPP_TAG_ZERO)) != NULL)
+  {
+    if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_INTEGER || ippGetInteger(attr, 0) < 0)
+    {
+      respond_unsupported(client, attr);
+      valid = 0;
+    }
+  }
+
+  if ((attr = ippFindAttribute(client->request, "job-name", IPP_TAG_ZERO)) != NULL)
+  {
+    if (ippGetCount(attr) != 1 ||
+        (ippGetValueTag(attr) != IPP_TAG_NAME &&
+        ippGetValueTag(attr) != IPP_TAG_NAMELANG))
+    {
+      respond_unsupported(client, attr);
+      valid = 0;
+    }
+
+    ippSetGroupTag(client->request, &attr, IPP_TAG_JOB);
+  }
+  else
+    ippAddString(client->request, IPP_TAG_JOB, IPP_TAG_NAME, "job-name", NULL, "Untitled");
+
+  if ((attr = ippFindAttribute(client->request, "job-priority", IPP_TAG_ZERO)) != NULL)
+  {
+    if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_INTEGER ||
+        ippGetInteger(attr, 0) < 1 || ippGetInteger(attr, 0) > 100)
+    {
+      respond_unsupported(client, attr);
+      valid = 0;
+    }
+  }
+
+  if ((attr = ippFindAttribute(client->request, "job-sheets", IPP_TAG_ZERO)) != NULL)
+  {
+    if (ippGetCount(attr) != 1 ||
+        (ippGetValueTag(attr) != IPP_TAG_NAME &&
+        ippGetValueTag(attr) != IPP_TAG_NAMELANG &&
+        ippGetValueTag(attr) != IPP_TAG_KEYWORD) ||
+       strcmp(ippGetString(attr, 0, NULL), "none"))
+    {
+      respond_unsupported(client, attr);
+      valid = 0;
+    }
+  }
+
+  if ((attr = ippFindAttribute(client->request, "media", IPP_TAG_ZERO)) != NULL)
+  {
+    if (ippGetCount(attr) != 1 ||
+        (ippGetValueTag(attr) != IPP_TAG_NAME &&
+        ippGetValueTag(attr) != IPP_TAG_NAMELANG &&
+        ippGetValueTag(attr) != IPP_TAG_KEYWORD))
+    {
+      respond_unsupported(client, attr);
+      valid = 0;
+    }
+    else
+    {
+#if 0 /* TODO: Validate media */
+      for (i = 0;
+           i < (int)(sizeof(media_supported) / sizeof(media_supported[0]));
+          i ++)
+        if (!strcmp(ippGetString(attr, 0, NULL), media_supported[i]))
+         break;
+
+      if (i >= (int)(sizeof(media_supported) / sizeof(media_supported[0])))
+      {
+       respond_unsupported(client, attr);
+       valid = 0;
+      }
+#endif /* 0 */
+    }
+  }
+
+  if ((attr = ippFindAttribute(client->request, "media-col", IPP_TAG_ZERO)) != NULL)
+  {
+    if (ippGetCount(attr) != 1 ||
+        ippGetValueTag(attr) != IPP_TAG_BEGIN_COLLECTION)
+    {
+      respond_unsupported(client, attr);
+      valid = 0;
+    }
+    /* TODO: check for valid media-col */
+  }
+
+  if ((attr = ippFindAttribute(client->request, "multiple-document-handling", IPP_TAG_ZERO)) != NULL)
+  {
+    if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_KEYWORD ||
+        (strcmp(ippGetString(attr, 0, NULL),
+               "separate-documents-uncollated-copies") &&
+        strcmp(ippGetString(attr, 0, NULL),
+               "separate-documents-collated-copies")))
+    {
+      respond_unsupported(client, attr);
+      valid = 0;
+    }
+  }
+
+  if ((attr = ippFindAttribute(client->request, "orientation-requested", IPP_TAG_ZERO)) != NULL)
+  {
+    if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_ENUM ||
+        ippGetInteger(attr, 0) < IPP_ORIENT_PORTRAIT ||
+        ippGetInteger(attr, 0) > IPP_ORIENT_REVERSE_PORTRAIT)
+    {
+      respond_unsupported(client, attr);
+      valid = 0;
+    }
+  }
+
+  if ((attr = ippFindAttribute(client->request, "page-ranges", IPP_TAG_ZERO)) != NULL)
+  {
+    if (ippGetValueTag(attr) != IPP_TAG_RANGE)
+    {
+      respond_unsupported(client, attr);
+      valid = 0;
+    }
+  }
+
+  if ((attr = ippFindAttribute(client->request, "print-quality", IPP_TAG_ZERO)) != NULL)
+  {
+    if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_ENUM ||
+        ippGetInteger(attr, 0) < IPP_QUALITY_DRAFT ||
+        ippGetInteger(attr, 0) > IPP_QUALITY_HIGH)
+    {
+      respond_unsupported(client, attr);
+      valid = 0;
+    }
+  }
+
+  if ((attr = ippFindAttribute(client->request, "printer-resolution", IPP_TAG_ZERO)) != NULL)
+  {
+    supported = ippFindAttribute(client->printer->dev_attrs, "printer-resolution-supported", IPP_TAG_RESOLUTION);
+
+    if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_RESOLUTION ||
+        !supported)
+    {
+      respond_unsupported(client, attr);
+      valid = 0;
+    }
+    else
+    {
+      int      count,                  /* Number of supported values */
+               xdpi,                   /* Horizontal resolution for job template attribute */
+               ydpi,                   /* Vertical resolution for job template attribute */
+               sydpi;                  /* Vertical resolution for supported value */
+      ipp_res_t        units,                  /* Units for job template attribute */
+               sunits;                 /* Units for supported value */
+
+      xdpi  = ippGetResolution(attr, 0, &ydpi, &units);
+      count = ippGetCount(supported);
+
+      for (i = 0; i < count; i ++)
+      {
+        if (xdpi == ippGetResolution(supported, i, &sydpi, &sunits) && ydpi == sydpi && units == sunits)
+          break;
+      }
+
+      if (i >= count)
+      {
+       respond_unsupported(client, attr);
+       valid = 0;
+      }
+    }
+  }
+
+  if ((attr = ippFindAttribute(client->request, "sides", IPP_TAG_ZERO)) != NULL)
+  {
+    const char *sides = ippGetString(attr, 0, NULL);
+                                       /* "sides" value... */
+
+    if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_KEYWORD)
+    {
+      respond_unsupported(client, attr);
+      valid = 0;
+    }
+    else if ((supported = ippFindAttribute(client->printer->dev_attrs, "sides-supported", IPP_TAG_KEYWORD)) != NULL)
+    {
+      if (!ippContainsString(supported, sides))
+      {
+       respond_unsupported(client, attr);
+       valid = 0;
+      }
+    }
+    else if (strcmp(sides, "one-sided"))
+    {
+      respond_unsupported(client, attr);
+      valid = 0;
+    }
+  }
+
+  return (valid);
+}
+
+
+/*
+ * End of "$Id: ippinfra.c 12237 2014-11-03 13:07:32Z msweet $".
+ */
diff --git a/test/ippinfra.man b/test/ippinfra.man
new file mode 100644 (file)
index 0000000..46ac84e
--- /dev/null
@@ -0,0 +1,103 @@
+.\"
+.\" "$Id$"
+.\"
+.\" ippinfra man page for CUPS.
+.\"
+.\" Copyright 2014 by Apple Inc.
+.\"
+.\" These coded instructions, statements, and computer programs are the
+.\" property of Apple Inc. and are protected by Federal copyright
+.\" law.  Distribution and use rights are outlined in the file "LICENSE.txt"
+.\" which should have been included with this file.  If this file is
+.\" file is missing or damaged, see the license at "http://www.cups.org/".
+.\"
+.TH ippinfra 1 "CUPS" "16 September 2014" "Apple Inc."
+.SH NAME
+ippinfra \- a simple ipp infrastructure server
+.SH SYNOPSIS
+.B ippinfra
+[
+.B \-d
+.I spool-directory
+] [
+.B \-h
+] [
+.B \-k
+] [
+.B \-n
+.I hostname
+] [
+.B \-p
+.I port
+] [
+.B \-u
+.I username:password
+] [
+.B \-v[vvv]
+]
+.I service-name
+.SH DESCRIPTION
+.B ippinfra
+is a simple Internet Printing Protocol (IPP) infrastructure server conforming to the IPP Shared Infrastructure Extensions (INFRA) specification. It can be used as a very basic infrastructure server between standard IPP clients and IPP proxies conforming to the INFRA specification.
+.SH OPTIONS
+The following options are recognized by
+.B ippinfra:
+.TP 5
+\fB\-d \fIspool-directory\fR
+Specifies the directory that will hold the print files.
+The default is a directory under the user's current temporary directory.
+.TP 5
+.B \-h
+Shows program help.
+.TP 5
+.B \-k
+Keeps the print documents in the spool directory rather than deleting them.
+.TP 5
+\fB\-n \fIhostname\fR
+Specifies the hostname that is reported by the server.
+The default is the name returned by the
+.BR hostname (1)
+command.
+.TP 5
+\fB\-p \fIport\fR
+Specifies the port number to listen on.
+The default is a user-specific number from 8000 to 8999.
+.TP 5
+\fB\-u \fIusername:password\fR
+Specifies the username and password for the IPP proxy.
+The default is "test:test123".
+.TP 5
+.B \-v[vvv]
+Be (very) verbose when logging activity to the standard output.
+.SH EXIT STATUS
+The
+.B ippinfra
+program returns 1 if it is unable to process the command-line arguments.
+Otherwise
+.B ippinfra
+will run continuously until terminated.
+.SH CONFORMING TO
+The
+.B ippinfra
+program is unique to CUPS and conforms to the IPP Shared Infrastructure Extensions (INFRA) specification as an Infrastructure Printer.
+.SH EXAMPLES
+Run
+.B ippinfra
+with a service name of My Cool Printer:
+.nf
+
+    ippinfra "My Cool Printer"
+.fi
+.LP
+Specify a proxy username of "foo" and password of "bar":
+.nf
+
+    ippinfra \-u foo:bar "My Cool Printer"
+.fi
+.SH SEE ALSO
+PWG Internet Printing Protocol Workgroup (http://www.pwg.org/ipp)
+.SH COPYRIGHT
+Copyright \[co] 2007-2014 by Apple Inc.
+.\"
+.\" End of "$Id$".
+.\"
diff --git a/test/ippproxy.c b/test/ippproxy.c
new file mode 100644 (file)
index 0000000..e8dd2c1
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * "$Id: ippproxy.c 12191 2014-10-01 19:00:21Z msweet $"
+ *
+ * CUPS Cloud Proxy for HP PCL and IPP Everywhere printers.
+ *
+ * Copyright 2014 by Apple Inc.
+ */
+
+#include <cups/cups.h>
+
+
+/*
+ * 'main()' - Main entry for cupsproxy.
+ */
+
+int                                    /* O - Exit status */
+main(int  argc,                                /* I - Number of command-line arguments */
+     char *argv[])                     /* I - Command-line arguments */
+{
+  (void)argc;
+  (void)argv;
+
+  return (0);
+}
+
+
+/*
+ * End of "$Id: ippproxy.c 12191 2014-10-01 19:00:21Z msweet $".
+ */
diff --git a/test/ippproxy.man b/test/ippproxy.man
new file mode 100644 (file)
index 0000000..1d46c9a
--- /dev/null
@@ -0,0 +1,59 @@
+.\"
+.\" "$Id$"
+.\"
+.\" ippproxy man page for CUPS.
+.\"
+.\" Copyright 2014 by Apple Inc.
+.\"
+.\" These coded instructions, statements, and computer programs are the
+.\" property of Apple Inc. and are protected by Federal copyright
+.\" law.  Distribution and use rights are outlined in the file "LICENSE.txt"
+.\" which should have been included with this file.  If this file is
+.\" file is missing or damaged, see the license at "http://www.cups.org/".
+.\"
+.TH ippproxy 1 "CUPS" "16 September 2014" "Apple Inc."
+.SH NAME
+ippproxy \- a simple ipp proxy client
+.SH SYNOPSIS
+.B ippproxy
+[
+.B \-v[vvv]
+]
+.I infrastructure-printer-uri
+.I local-printer-uri
+.SH DESCRIPTION
+.B ippproxy
+is a simple IPP proxy client conforming to the IPP Shared Infrastructure Extensions (INFRA) specification. It can be used to proxy access to a local IPP printer through an Infrastructure Printer such as
+.BR ippinfra (1).
+.SH OPTIONS
+The following options are recognized by
+.B ippproxy:
+.TP 5
+.B \-v[vvv]
+Be (very) verbose when logging activity to the standard output.
+.SH EXIT STATUS
+The
+.B ippproxy
+program returns 1 if it is unable to process the command-line arguments or connect to either the infrastructure or local printers.
+Otherwise
+.B ippproxy
+will run continuously until terminated.
+.SH CONFORMING TO
+The
+.B ippproxy
+program is unique to CUPS and conforms to the IPP Shared Infrastructure Extensions (INFRA) specification.
+.SH EXAMPLE
+Run
+.B ippproxy
+with an infrastructure URI of "ipps://host.example.com/ipp/print" and a local URI of "ipp://10.0.1.2/ipp/print":
+.nf
+
+    ippproxy ipps://host.example.com/ipp/print ipp://10.0.1.2/ipp/print
+.fi
+.SH SEE ALSO
+PWG Internet Printing Protocol Workgroup (http://www.pwg.org/ipp)
+.SH COPYRIGHT
+Copyright \[co] 2007-2014 by Apple Inc.
+.\"
+.\" End of "$Id$".
+.\"
index 22c2dd51c097f54f6532f882604168f0400c1430..03c8cfb2a4de85d777f92238072313edd852150e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: ippserver.c 12486 2015-02-04 13:13:21Z msweet $"
+ * "$Id: ippserver.c 12598 2015-05-05 18:57:57Z msweet $"
  *
  * Sample IPP Everywhere server for CUPS.
  *
@@ -1371,16 +1371,15 @@ create_printer(const char *servername,  /* I - Server hostname (NULL for default)
   static const int     pwg_raster_document_resolution_supported[] =
   {
     150,
-    300,
-    600
+    300
   };
   static const char * const pwg_raster_document_type_supported[] =
   {
-    "black-1",
-    "cmyk-8",
-    "sgray-8",
-    "srgb-8",
-    "srgb-16"
+    "black_1",
+    "cmyk_8",
+    "sgray_8",
+    "srgb_8",
+    "srgb_16"
   };
   static const char * const reference_uri_schemes_supported[] =
   {                                    /* reference-uri-schemes-supported */
@@ -1402,7 +1401,7 @@ create_printer(const char *servername,    /* I - Server hostname (NULL for default)
     "CP1",
     "IS1-5-7",
     "MT1-2-3-4-5-6-8-9-10-11-12-13",
-    "RS600",
+    "RS300",
     "SRGB24",
     "V1.4",
     "W8",
@@ -1992,6 +1991,7 @@ create_printer(const char *servername,    /* I - Server hostname (NULL for default)
   {
     static const char * const names[] =
     {
+      "job-account-id",
       "job-accounting-user-id",
       "job-password"
     };
@@ -4812,7 +4812,7 @@ process_http(_ipp_client_t *client)       /* I - Client connection */
            if (client->printer->state_reasons & reason)
              html_printf(client, "\n<br>&nbsp;&nbsp;&nbsp;&nbsp;%s", reasons[i]);
          html_printf(client, "</p>\n");
-         
+
           if (cupsArrayCount(client->printer->jobs) > 0)
          {
             _cupsRWLockRead(&(client->printer->rwlock));
@@ -5603,6 +5603,11 @@ register_printer(
 #  ifdef HAVE_SSL
   TXTRecordSetValue(&ipp_txt, "TLS", 3, "1.2");
 #  endif /* HAVE_SSL */
+  if (strstr(formats, "image/urf"))
+    TXTRecordSetValue(&ipp_txt, "URF", 66, "CP1,IS1-5-7,MT1-2-3-4-5-6-8-9-10-11-12-13,RS300,SRGB24,V1.4,W8,DM1");
+
+  TXTRecordSetValue(&ipp_txt, "txtvers", 1, "1");
+  TXTRecordSetValue(&ipp_txt, "qtotal", 1, "1");
 
  /*
   * Register the _printer._tcp (LPD) service type with a port number of 0 to
@@ -6489,5 +6494,5 @@ valid_job_attributes(
 
 
 /*
- * End of "$Id: ippserver.c 12486 2015-02-04 13:13:21Z msweet $".
+ * End of "$Id: ippserver.c 12598 2015-05-05 18:57:57Z msweet $".
  */
index b1f784359b27f072471e1bc70917f7c5d4d602bb..bbb865abb13a29f98fe17ad11922b87ba1472d5f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: ipptool.c 12465 2015-02-01 02:47:23Z msweet $"
+ * "$Id: ipptool.c 12644 2015-05-19 21:22:35Z msweet $"
  *
  * ipptool command for CUPS.
  *
@@ -70,13 +70,15 @@ typedef enum _cups_with_e           /**** WITH flags ****/
 typedef struct _cups_expect_s          /**** Expected attribute info ****/
 {
   int          optional,               /* Optional attribute? */
-               not_expect;             /* Don't expect attribute? */
+               not_expect,             /* Don't expect attribute? */
+               expect_all;             /* Expect all attributes to match/not match */
   char         *name,                  /* Attribute name */
                *of_type,               /* Type name */
                *same_count_as,         /* Parallel attribute name */
                *if_defined,            /* Only required if variable defined */
                *if_not_defined,        /* Only required if variable is not defined */
                *with_value,            /* Attribute must include this value */
+               *with_value_from,       /* Attribute must have one of the values in this attribute */
                *define_match,          /* Variable to define on match */
                *define_no_match,       /* Variable to define on no-match */
                *define_value;          /* Variable to define with value */
@@ -189,6 +191,7 @@ static int  validate_attr(FILE *outfile, cups_array_t *errors, ipp_attribute_t *a
 static int      with_value(FILE *outfile, cups_array_t *errors, char *value, int flags,
                           ipp_attribute_t *attr, char *matchbuf,
                           size_t matchlen);
+static int      with_value_from(cups_array_t *errors, ipp_attribute_t *fromattr, ipp_attribute_t *attr, char *matchbuf, size_t matchlen);
 
 
 /*
@@ -1258,7 +1261,8 @@ do_tests(FILE         *outfile,           /* I - Output file */
           _cups_strcasecmp(token, "WITH-HOSTNAME") &&
           _cups_strcasecmp(token, "WITH-RESOURCE") &&
           _cups_strcasecmp(token, "WITH-SCHEME") &&
-          _cups_strcasecmp(token, "WITH-VALUE"))
+          _cups_strcasecmp(token, "WITH-VALUE") &&
+          _cups_strcasecmp(token, "WITH-VALUE-FROM"))
         last_expect = NULL;
 
       if (_cups_strcasecmp(token, "DEFINE-MATCH") &&
@@ -1993,12 +1997,14 @@ do_tests(FILE         *outfile,         /* I - Output file */
        last_status->repeat_match    = 0;
        last_status->repeat_no_match = 0;
       }
-      else if (!_cups_strcasecmp(token, "EXPECT"))
+      else if (!_cups_strcasecmp(token, "EXPECT") || !_cups_strcasecmp(token, "EXPECT-ALL"))
       {
        /*
         * Expected attributes...
        */
 
+       int expect_all = !_cups_strcasecmp(token, "EXPECT-ALL");
+
         if (num_expects >= (int)(sizeof(expects) / sizeof(expects[0])))
         {
          print_fatal_error(outfile, "Too many EXPECT's on line %d.", linenum);
@@ -2018,6 +2024,7 @@ do_tests(FILE         *outfile,           /* I - Output file */
 
        memset(last_expect, 0, sizeof(_cups_expect_t));
        last_expect->repeat_limit = 1000;
+       last_expect->expect_all   = expect_all;
 
         if (token[0] == '!')
         {
@@ -2369,6 +2376,34 @@ do_tests(FILE         *outfile,          /* I - Output file */
          goto test_exit;
        }
       }
+      else if (!_cups_strcasecmp(token, "WITH-VALUE-FROM"))
+      {
+       if (!get_token(fp, temp, sizeof(temp), &linenum))
+       {
+         print_fatal_error(outfile, "Missing %s value on line %d.", token, linenum);
+         pass = 0;
+         goto test_exit;
+       }
+
+        if (last_expect)
+       {
+        /*
+         * Expand any variables in the value and then save it.
+         */
+
+         expand_variables(vars, token, temp, sizeof(token));
+
+         last_expect->with_value_from = strdup(token);
+         last_expect->with_flags      = _CUPS_WITH_LITERAL;
+       }
+       else
+       {
+         print_fatal_error(outfile, "%s without a preceding EXPECT on line %d.", token,
+                           linenum);
+         pass = 0;
+         goto test_exit;
+       }
+      }
       else if (!_cups_strcasecmp(token, "DISPLAY"))
       {
        /*
@@ -2938,192 +2973,210 @@ do_tests(FILE         *outfile,               /* I - Output file */
              get_variable(vars, expect->if_not_defined))
            continue;
 
-         found = ippFindAttribute(response, expect->name, IPP_TAG_ZERO);
+          found = ippFindAttribute(response, expect->name, IPP_TAG_ZERO);
 
-         if ((found && expect->not_expect) ||
-             (!found && !(expect->not_expect || expect->optional)) ||
-             (found && !expect_matches(expect, found->value_tag)) ||
-             (found && expect->in_group &&
-              found->group_tag != expect->in_group))
-         {
-           if (expect->define_no_match)
-             set_variable(outfile, vars, expect->define_no_match, "1");
-           else if (!expect->define_match && !expect->define_value)
+          do
+          {
+           if ((found && expect->not_expect) ||
+               (!found && !(expect->not_expect || expect->optional)) ||
+               (found && !expect_matches(expect, found->value_tag)) ||
+               (found && expect->in_group &&
+                found->group_tag != expect->in_group))
            {
-             if (found && expect->not_expect)
-               add_stringf(errors, "NOT EXPECTED: %s", expect->name);
-             else if (!found && !(expect->not_expect || expect->optional))
-               add_stringf(errors, "EXPECTED: %s", expect->name);
-             else if (found)
+             if (expect->define_no_match)
+               set_variable(outfile, vars, expect->define_no_match, "1");
+             else if (!expect->define_match && !expect->define_value)
              {
-               if (!expect_matches(expect, found->value_tag))
-                 add_stringf(errors, "EXPECTED: %s OF-TYPE %s (got %s)",
-                             expect->name, expect->of_type,
-                             ippTagString(found->value_tag));
-
-               if (expect->in_group && found->group_tag != expect->in_group)
-                 add_stringf(errors, "EXPECTED: %s IN-GROUP %s (got %s).",
-                             expect->name, ippTagString(expect->in_group),
-                             ippTagString(found->group_tag));
-              }
-            }
+               if (found && expect->not_expect)
+                 add_stringf(errors, "NOT EXPECTED: %s", expect->name);
+               else if (!found && !(expect->not_expect || expect->optional))
+                 add_stringf(errors, "EXPECTED: %s", expect->name);
+               else if (found)
+               {
+                 if (!expect_matches(expect, found->value_tag))
+                   add_stringf(errors, "EXPECTED: %s OF-TYPE %s (got %s)",
+                               expect->name, expect->of_type,
+                               ippTagString(found->value_tag));
+
+                 if (expect->in_group && found->group_tag != expect->in_group)
+                   add_stringf(errors, "EXPECTED: %s IN-GROUP %s (got %s).",
+                               expect->name, ippTagString(expect->in_group),
+                               ippTagString(found->group_tag));
+               }
+             }
 
-           if (expect->repeat_no_match &&
-               repeat_count < expect->repeat_limit)
-             repeat_test = 1;
+             if (expect->repeat_no_match &&
+                 repeat_count < expect->repeat_limit)
+               repeat_test = 1;
 
-           continue;
-         }
+             break;
+           }
 
-         if (found)
-           ippAttributeString(found, buffer, sizeof(buffer));
+           if (found)
+             ippAttributeString(found, buffer, sizeof(buffer));
 
-         if (found &&
-             !with_value(outfile, NULL, expect->with_value, expect->with_flags, found,
-                         buffer, sizeof(buffer)))
-         {
-           if (expect->define_no_match)
-             set_variable(outfile, vars, expect->define_no_match, "1");
-           else if (!expect->define_match && !expect->define_value &&
-                    !expect->repeat_match && !expect->repeat_no_match)
+            if (found && expect->with_value_from && !with_value_from(NULL, ippFindAttribute(response, expect->with_value_from, IPP_TAG_ZERO), found, buffer, sizeof(buffer)))
            {
-             if (expect->with_flags & _CUPS_WITH_REGEX)
-               add_stringf(errors, "EXPECTED: %s %s /%s/",
-                           expect->name,
-                           (expect->with_flags & _CUPS_WITH_ALL) ?
-                               "WITH-ALL-VALUES" : "WITH-VALUE",
-                           expect->with_value);
-             else
-               add_stringf(errors, "EXPECTED: %s %s \"%s\"",
-                           expect->name,
-                           (expect->with_flags & _CUPS_WITH_ALL) ?
-                               "WITH-ALL-VALUES" : "WITH-VALUE",
-                           expect->with_value);
-
-             with_value(outfile, errors, expect->with_value, expect->with_flags, found,
-                        buffer, sizeof(buffer));
-           }
+             if (expect->define_no_match)
+               set_variable(outfile, vars, expect->define_no_match, "1");
+             else if (!expect->define_match && !expect->define_value && !expect->repeat_match && !expect->repeat_no_match)
+             {
+               add_stringf(errors, "EXPECTED: %s WITH-VALUES-FROM %s", expect->name, expect->with_value_from);
 
-           if (expect->repeat_no_match &&
-               repeat_count < expect->repeat_limit)
-             repeat_test = 1;
+               with_value_from(errors, ippFindAttribute(response, expect->with_value_from, IPP_TAG_ZERO), found, buffer, sizeof(buffer));
+             }
 
-           continue;
-         }
+             if (expect->repeat_no_match && repeat_count < expect->repeat_limit)
+               repeat_test = 1;
 
-         if (found && expect->count > 0 &&
-             found->num_values != expect->count)
-         {
-           if (expect->define_no_match)
-             set_variable(outfile, vars, expect->define_no_match, "1");
-           else if (!expect->define_match && !expect->define_value)
-           {
-             add_stringf(errors, "EXPECTED: %s COUNT %d (got %d)", expect->name,
-                         expect->count, found->num_values);
+             break;
            }
+           else if (found && !with_value(outfile, NULL, expect->with_value, expect->with_flags, found, buffer, sizeof(buffer)))
+           {
+             if (expect->define_no_match)
+               set_variable(outfile, vars, expect->define_no_match, "1");
+             else if (!expect->define_match && !expect->define_value &&
+                      !expect->repeat_match && !expect->repeat_no_match)
+             {
+               if (expect->with_flags & _CUPS_WITH_REGEX)
+                 add_stringf(errors, "EXPECTED: %s %s /%s/",
+                             expect->name,
+                             (expect->with_flags & _CUPS_WITH_ALL) ?
+                                 "WITH-ALL-VALUES" : "WITH-VALUE",
+                             expect->with_value);
+               else
+                 add_stringf(errors, "EXPECTED: %s %s \"%s\"",
+                             expect->name,
+                             (expect->with_flags & _CUPS_WITH_ALL) ?
+                                 "WITH-ALL-VALUES" : "WITH-VALUE",
+                             expect->with_value);
+
+               with_value(outfile, errors, expect->with_value, expect->with_flags, found,
+                          buffer, sizeof(buffer));
+             }
 
-           if (expect->repeat_no_match &&
-               repeat_count < expect->repeat_limit)
-             repeat_test = 1;
-
-           continue;
-         }
+             if (expect->repeat_no_match &&
+                 repeat_count < expect->repeat_limit)
+               repeat_test = 1;
 
-         if (found && expect->same_count_as)
-         {
-           attrptr = ippFindAttribute(response, expect->same_count_as,
-                                      IPP_TAG_ZERO);
+             break;
+           }
 
-           if (!attrptr || attrptr->num_values != found->num_values)
+           if (found && expect->count > 0 &&
+               found->num_values != expect->count)
            {
              if (expect->define_no_match)
                set_variable(outfile, vars, expect->define_no_match, "1");
              else if (!expect->define_match && !expect->define_value)
              {
-               if (!attrptr)
-                 add_stringf(errors,
-                             "EXPECTED: %s (%d values) SAME-COUNT-AS %s "
-                             "(not returned)", expect->name,
-                             found->num_values, expect->same_count_as);
-               else if (attrptr->num_values != found->num_values)
-                 add_stringf(errors,
-                             "EXPECTED: %s (%d values) SAME-COUNT-AS %s "
-                             "(%d values)", expect->name, found->num_values,
-                             expect->same_count_as, attrptr->num_values);
+               add_stringf(errors, "EXPECTED: %s COUNT %d (got %d)", expect->name,
+                           expect->count, found->num_values);
              }
 
              if (expect->repeat_no_match &&
-                 repeat_count < expect->repeat_limit)
+                 repeat_count < expect->repeat_limit)
                repeat_test = 1;
 
-             continue;
+             break;
            }
-         }
 
-         if (found && expect->define_match)
-           set_variable(outfile, vars, expect->define_match, "1");
-
-         if (found && expect->define_value)
-         {
-           if (!expect->with_value)
+           if (found && expect->same_count_as)
            {
-             int last = ippGetCount(found) - 1;
-                                       /* Last element in attribute */
+             attrptr = ippFindAttribute(response, expect->same_count_as,
+                                        IPP_TAG_ZERO);
 
-             switch (ippGetValueTag(found))
+             if (!attrptr || attrptr->num_values != found->num_values)
              {
-               case IPP_TAG_ENUM :
-               case IPP_TAG_INTEGER :
-                   snprintf(buffer, sizeof(buffer), "%d", ippGetInteger(found, last));
-                   break;
-
-               case IPP_TAG_BOOLEAN :
-                   if (ippGetBoolean(found, last))
-                     strlcpy(buffer, "true", sizeof(buffer));
-                   else
-                     strlcpy(buffer, "false", sizeof(buffer));
-                   break;
+               if (expect->define_no_match)
+                 set_variable(outfile, vars, expect->define_no_match, "1");
+               else if (!expect->define_match && !expect->define_value)
+               {
+                 if (!attrptr)
+                   add_stringf(errors,
+                               "EXPECTED: %s (%d values) SAME-COUNT-AS %s "
+                               "(not returned)", expect->name,
+                               found->num_values, expect->same_count_as);
+                 else if (attrptr->num_values != found->num_values)
+                   add_stringf(errors,
+                               "EXPECTED: %s (%d values) SAME-COUNT-AS %s "
+                               "(%d values)", expect->name, found->num_values,
+                               expect->same_count_as, attrptr->num_values);
+               }
 
-               case IPP_TAG_RESOLUTION :
-                   {
-                     int       xres,   /* Horizontal resolution */
-                               yres;   /* Vertical resolution */
-                     ipp_res_t units;  /* Resolution units */
+               if (expect->repeat_no_match &&
+                   repeat_count < expect->repeat_limit)
+                 repeat_test = 1;
 
-                     xres = ippGetResolution(found, last, &yres, &units);
+               break;
+             }
+           }
 
-                     if (xres == yres)
-                       snprintf(buffer, sizeof(buffer), "%d%s", xres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
-                     else
-                       snprintf(buffer, sizeof(buffer), "%dx%d%s", xres, yres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
-                   }
-                   break;
+           if (found && expect->define_match)
+             set_variable(outfile, vars, expect->define_match, "1");
 
-               case IPP_TAG_CHARSET :
-               case IPP_TAG_KEYWORD :
-               case IPP_TAG_LANGUAGE :
-               case IPP_TAG_MIMETYPE :
-               case IPP_TAG_NAME :
-               case IPP_TAG_NAMELANG :
-               case IPP_TAG_TEXT :
-               case IPP_TAG_TEXTLANG :
-               case IPP_TAG_URI :
-               case IPP_TAG_URISCHEME :
-                   strlcpy(buffer, ippGetString(found, last, NULL), sizeof(buffer));
-                   break;
+           if (found && expect->define_value)
+           {
+             if (!expect->with_value)
+             {
+               int last = ippGetCount(found) - 1;
+                                         /* Last element in attribute */
 
-               default :
-                   ippAttributeString(found, buffer, sizeof(buffer));
-                   break;
+               switch (ippGetValueTag(found))
+               {
+                 case IPP_TAG_ENUM :
+                 case IPP_TAG_INTEGER :
+                     snprintf(buffer, sizeof(buffer), "%d", ippGetInteger(found, last));
+                     break;
+
+                 case IPP_TAG_BOOLEAN :
+                     if (ippGetBoolean(found, last))
+                       strlcpy(buffer, "true", sizeof(buffer));
+                     else
+                       strlcpy(buffer, "false", sizeof(buffer));
+                     break;
+
+                 case IPP_TAG_RESOLUTION :
+                     {
+                       int     xres,   /* Horizontal resolution */
+                                 yres; /* Vertical resolution */
+                       ipp_res_t       units;  /* Resolution units */
+
+                       xres = ippGetResolution(found, last, &yres, &units);
+
+                       if (xres == yres)
+                         snprintf(buffer, sizeof(buffer), "%d%s", xres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
+                       else
+                         snprintf(buffer, sizeof(buffer), "%dx%d%s", xres, yres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
+                     }
+                     break;
+
+                 case IPP_TAG_CHARSET :
+                 case IPP_TAG_KEYWORD :
+                 case IPP_TAG_LANGUAGE :
+                 case IPP_TAG_MIMETYPE :
+                 case IPP_TAG_NAME :
+                 case IPP_TAG_NAMELANG :
+                 case IPP_TAG_TEXT :
+                 case IPP_TAG_TEXTLANG :
+                 case IPP_TAG_URI :
+                 case IPP_TAG_URISCHEME :
+                     strlcpy(buffer, ippGetString(found, last, NULL), sizeof(buffer));
+                     break;
+
+                 default :
+                     ippAttributeString(found, buffer, sizeof(buffer));
+                     break;
+               }
              }
-           }
 
-           set_variable(outfile, vars, expect->define_value, buffer);
-         }
+             set_variable(outfile, vars, expect->define_value, buffer);
+           }
 
-         if (found && expect->repeat_match &&
-             repeat_count < expect->repeat_limit)
-           repeat_test = 1;
+           if (found && expect->repeat_match &&
+               repeat_count < expect->repeat_limit)
+             repeat_test = 1;
+          }
+          while (expect->expect_all && (found = ippFindNextAttribute(response, expect->name, IPP_TAG_ZERO)) != NULL);
        }
       }
 
@@ -3463,7 +3516,7 @@ expand_variables(_cups_vars_t *vars,      /* I - Variables */
        value = getenv(temp);
         src   += tempptr - temp + 5;
       }
-      else if (vars)
+      else
       {
         if (src[1] == '{')
        {
@@ -3510,11 +3563,6 @@ expand_variables(_cups_vars_t *vars,     /* I - Variables */
 
         src += tempptr - temp + 1;
       }
-      else
-      {
-        value = "$";
-       src ++;
-      }
 
       if (value)
       {
@@ -5870,5 +5918,165 @@ with_value(FILE            *outfile,    /* I - Output file */
 
 
 /*
- * End of "$Id: ipptool.c 12465 2015-02-01 02:47:23Z msweet $".
+ * 'with_value_from()' - Test a WITH-VALUE-FROM predicate.
+ */
+
+static int                             /* O - 1 on match, 0 on non-match */
+with_value_from(
+    cups_array_t    *errors,           /* I - Errors array */
+    ipp_attribute_t *fromattr,         /* I - "From" attribute */
+    ipp_attribute_t *attr,             /* I - Attribute to compare */
+    char            *matchbuf,         /* I - Buffer to hold matching value */
+    size_t          matchlen)          /* I - Length of match buffer */
+{
+  int  i, j,                           /* Looping vars */
+       count = ippGetCount(attr),      /* Number of attribute values */
+       match = 1;                      /* Match? */
+
+
+  *matchbuf = '\0';
+
+ /*
+  * Compare the from value(s) to the attribute value(s)...
+  */
+
+  switch (ippGetValueTag(attr))
+  {
+    case IPP_TAG_INTEGER :
+        if (ippGetValueTag(fromattr) != IPP_TAG_INTEGER && ippGetValueTag(fromattr) != IPP_TAG_RANGE)
+         goto wrong_value_tag;
+
+       for (i = 0; i < count; i ++)
+       {
+         int value = ippGetInteger(attr, i);
+                                       /* Current integer value */
+
+         if (ippContainsInteger(fromattr, value))
+         {
+           if (!matchbuf[0])
+             snprintf(matchbuf, matchlen, "%d", value);
+         }
+         else
+         {
+           add_stringf(errors, "GOT: %s=%d", ippGetName(attr), value);
+           match = 0;
+         }
+       }
+       break;
+
+    case IPP_TAG_ENUM :
+        if (ippGetValueTag(fromattr) != IPP_TAG_ENUM)
+         goto wrong_value_tag;
+
+       for (i = 0; i < count; i ++)
+       {
+         int value = ippGetInteger(attr, i);
+                                       /* Current integer value */
+
+         if (ippContainsInteger(fromattr, value))
+         {
+           if (!matchbuf[0])
+             snprintf(matchbuf, matchlen, "%d", value);
+         }
+         else
+         {
+           add_stringf(errors, "GOT: %s=%d", ippGetName(attr), value);
+           match = 0;
+         }
+       }
+       break;
+
+    case IPP_TAG_RESOLUTION :
+        if (ippGetValueTag(fromattr) != IPP_TAG_RESOLUTION)
+         goto wrong_value_tag;
+
+       for (i = 0; i < count; i ++)
+       {
+         int xres, yres;
+         ipp_res_t units;
+          int fromcount = ippGetCount(fromattr);
+         int fromxres, fromyres;
+         ipp_res_t fromunits;
+
+         xres = ippGetResolution(attr, i, &yres, &units);
+
+          for (j = 0; j < fromcount; j ++)
+         {
+           fromxres = ippGetResolution(fromattr, j, &fromyres, &fromunits);
+           if (fromxres == xres && fromyres == yres && fromunits == units)
+             break;
+         }
+
+         if (j < fromcount)
+         {
+           if (!matchbuf[0])
+           {
+             if (xres == yres)
+               snprintf(matchbuf, matchlen, "%d%s", xres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
+             else
+               snprintf(matchbuf, matchlen, "%dx%d%s", xres, yres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
+           }
+         }
+         else
+         {
+           if (xres == yres)
+             add_stringf(errors, "GOT: %s=%d%s", ippGetName(attr), xres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
+           else
+             add_stringf(errors, "GOT: %s=%dx%d%s", ippGetName(attr), xres, yres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
+
+           match = 0;
+         }
+       }
+       break;
+
+    case IPP_TAG_NOVALUE :
+    case IPP_TAG_UNKNOWN :
+       return (1);
+
+    case IPP_TAG_CHARSET :
+    case IPP_TAG_KEYWORD :
+    case IPP_TAG_LANGUAGE :
+    case IPP_TAG_MIMETYPE :
+    case IPP_TAG_NAME :
+    case IPP_TAG_NAMELANG :
+    case IPP_TAG_TEXT :
+    case IPP_TAG_TEXTLANG :
+    case IPP_TAG_URI :
+    case IPP_TAG_URISCHEME :
+       for (i = 0; i < count; i ++)
+       {
+         const char *value = ippGetString(attr, i, NULL);
+                                       /* Current string value */
+
+         if (ippContainsString(fromattr, value))
+         {
+           if (!matchbuf[0])
+             strlcpy(matchbuf, value, matchlen);
+         }
+         else
+         {
+           add_stringf(errors, "GOT: %s='%s'", ippGetName(attr), value);
+           match = 0;
+         }
+       }
+       break;
+
+    default :
+        match = 0;
+        break;
+  }
+
+  return (match);
+
+  /* value tag mismatch between fromattr and attr */
+  wrong_value_tag :
+
+  add_stringf(errors, "GOT: %s OF-TYPE %s", ippGetName(attr), ippTagString(ippGetValueTag(attr)));
+
+  return (0);
+}
+
+
+/*
+ * End of "$Id: ipptool.c 12644 2015-05-19 21:22:35Z msweet $".
  */
index 0f02ba24962399cb77609cb174294083d66a8480..88560dac1b603c627d69c1001d18d6fc09ce18bc 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# "$Id: run-stp-tests.sh 12658 2015-05-22 17:53:45Z msweet $"
+# "$Id: run-stp-tests.sh 12696 2015-06-08 15:05:11Z msweet $"
 #
 # Perform the complete set of IPP compliance tests specified in the
 # CUPS Software Test Plan.
@@ -722,9 +722,9 @@ date=`date "+%Y-%m-%d"`
 
 if test -d $root/.svn; then
        rev=`svn info . | grep Revision: | awk '{print $2}'`
-       strfile=$BASE/cups-str-2.0-r$rev-$user.html
+       strfile=$BASE/cups-str-2.1-r$rev-$user.html
 else
-       strfile=$BASE/cups-str-2.0-$date-$user.html
+       strfile=$BASE/cups-str-2.1-$date-$user.html
 fi
 
 rm -f $strfile
@@ -737,7 +737,7 @@ cat str-header.html >$strfile
 echo ""
 echo "Running IPP compliance tests..."
 
-echo "<H1>1 - IPP Compliance Tests</H1>" >>$strfile
+echo "<H1><A NAME='IPP'>1 - IPP Compliance Tests</A></H1>" >>$strfile
 echo "<P>This section provides the results to the IPP compliance tests" >>$strfile
 echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
 echo `date "+%Y-%m-%d"` by $user on `hostname`. >>$strfile
@@ -775,7 +775,7 @@ echo "</PRE>" >>$strfile
 echo ""
 echo "Running command tests..."
 
-echo "<H1>2 - Command Tests</H1>" >>$strfile
+echo "<H1><A NAME='COMMAND'>2 - Command Tests</A></H1>" >>$strfile
 echo "<P>This section provides the results to the command tests" >>$strfile
 echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
 echo $date by $user on `hostname`. >>$strfile
@@ -840,12 +840,8 @@ echo "</PRE>" >>$strfile
 #
 
 kill $cupsd
-
-#
-# Append the log files for post-mortim...
-#
-
-echo "<H1>3 - Log Files</H1>" >>$strfile
+wait $cupsd
+cupsdstatus=$?
 
 #
 # Verify counts...
@@ -853,7 +849,16 @@ echo "<H1>3 - Log Files</H1>" >>$strfile
 
 echo "Test Summary"
 echo ""
-echo "<H2>Summary</H2>" >>$strfile
+echo "<H1><A NAME='SUMMARY'>3 - Test Summary</A></H1>" >>$strfile
+
+if test $cupsdstatus != 0; then
+       echo "FAIL: cupsd failed with exit status $cupsdstatus."
+       echo "<p>FAIL: cupsd failed with exit status $cupsdstatus.</p>" >>$strfile
+       fail=`expr $fail + 1`
+else
+       echo "PASS: cupsd exited with no errors."
+       echo "<p>PASS: cupsd exited with no errors.</p>" >>$strfile
+fi
 
 # Job control files
 count=`ls -1 $BASE/spool | wc -l`
@@ -1052,18 +1057,23 @@ else
        echo "<P>PASS: $count debug2 messages.</P>" >>$strfile
 fi
 
+#
 # Log files...
-echo "<H2>access_log</H2>" >>$strfile
+#
+
+echo "<H1><A NAME='LOGS'>4 - Log Files</A></H1>" >>$strfile
+
+echo "<H2><A NAME='access_log'>access_log</A></H2>" >>$strfile
 echo "<PRE>" >>$strfile
 sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' $BASE/log/access_log >>$strfile
 echo "</PRE>" >>$strfile
 
-echo "<H2>error_log</H2>" >>$strfile
+echo "<H2><A NAME='error_log'>error_log</A></H2>" >>$strfile
 echo "<PRE>" >>$strfile
 $GREP -v '^d' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
 echo "</PRE>" >>$strfile
 
-echo "<H2>page_log</H2>" >>$strfile
+echo "<H2><A NAME='page_log'>page_log</A></H2>" >>$strfile
 echo "<PRE>" >>$strfile
 sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' $BASE/log/page_log >>$strfile
 echo "</PRE>" >>$strfile
@@ -1103,5 +1113,5 @@ if test $fail != 0; then
 fi
 
 #
-# End of "$Id: run-stp-tests.sh 12658 2015-05-22 17:53:45Z msweet $"
+# End of "$Id: run-stp-tests.sh 12696 2015-06-08 15:05:11Z msweet $"
 #
index 4dafd6806be7fbd602ae8ea20ea8e760c7bafe3b..d13205af63b575ccd7d7c6c1e38aa53a17b2935f 100644 (file)
@@ -1,10 +1,10 @@
 <HTML>
 <HEAD>
        <META NAME="Description" CONTENT="CUPS Test Report">
-       <META NAME="COPYRIGHT" CONTENT="Copyright 2007-2013, All Rights Reserved">
-       <META NAME="DOCNUMBER" CONTENT="CUPS-STR-2.0">
+       <META NAME="COPYRIGHT" CONTENT="Copyright 2007-2015, All Rights Reserved">
+       <META NAME="DOCNUMBER" CONTENT="CUPS-STR-2.1">
        <META NAME="Author" CONTENT="Apple Inc.">
-       <TITLE>CUPS 2.0 Software Test Report</TITLE>
+       <TITLE>CUPS 2.1 Software Test Report</TITLE>
        <STYLE TYPE="text/css"><!--
        PRE {
          font-size: 80%;
 </HEAD>
 <BODY>
 
-<H1>CUPS 2.0 Software Test Report</H1>
+<H1>CUPS 2.1 Software Test Report</H1>
 
 <P>This software test report provides detailed test results that
-are used to evaluate the stability and compliance of CUPS Version 2.0.
+are used to evaluate the stability and compliance of CUPS Version 2.1.
 
 <H2>Document Overview</H2>
 
 <P>This software test plan is organized into the following sections:
 
 <UL>
-       <LI>1 - IPP Compliance Tests</LI>
-       <LI>2 - Command Tests</LI>
-       <LI>3 - Log Files</LI>
+       <LI><A HREF="#IPP">1 - IPP Compliance Tests</A></LI>
+       <LI><A HREF="#COMMAND">2 - Command Tests</A></LI>
+       <LI><A HREF="#SUMMARY">3 - Test Summary</A></LI>
+       <LI><A HREF="#LOGS">4 - Log Files</A><UL>
+               <LI><A HREF="#access_log">access_log</A></LI>
+               <LI><A HREF="#error_log">error_log</A></LI>
+               <LI><A HREF="#page_log">page_log</A></LI>
+       </UL></LI>
 </UL>
index 7a8bd0fdafbbf69452d1c73a863992da4eefb513..156c42d80b37bfd4c06929d09783e2c70d5cef55 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: config.h 12762 2015-06-24 20:11:53Z msweet $"
+ * "$Id: config.h 12269 2014-11-20 15:37:29Z msweet $"
  *
  * Configuration file for CUPS on Windows.
  *
- * Copyright 2007-2015 by Apple Inc.
+ * Copyright 2007-2014 by Apple Inc.
  * Copyright 1997-2007 by Easy Software Products.
  *
  * These coded instructions, statements, and computer programs are the
@@ -96,8 +96,8 @@ typedef unsigned long useconds_t;
  * Version of software...
  */
 
-#define CUPS_SVERSION "CUPS v2.0.4"
-#define CUPS_MINIMAL "CUPS/2.0.4"
+#define CUPS_SVERSION "CUPS v2.1svn"
+#define CUPS_MINIMAL "CUPS/2.1svn"
 
 
 /*
@@ -799,5 +799,5 @@ static __inline int _cups_abs(int i) { return (i < 0 ? -i : i); }
 #endif /* !_CUPS_CONFIG_H_ */
 
 /*
- * End of "$Id: config.h 12762 2015-06-24 20:11:53Z msweet $".
+ * End of "$Id: config.h 12269 2014-11-20 15:37:29Z msweet $".
  */
index 81ed4acbdff4b09ca93c43f72812c2804dadc0a3..37c0a31101fcd5af687746741fed2ac3485728b4 100644 (file)
@@ -13,6 +13,8 @@
                        buildPhases = (
                        );
                        dependencies = (
+                               274EE2861A03EEEE003213D1 /* PBXTargetDependency */,
+                               274EE2881A03EEEE003213D1 /* PBXTargetDependency */,
                                726AD704135E8AA1002C930D /* PBXTargetDependency */,
                                2767FC5419267469000F61D3 /* PBXTargetDependency */,
                                273BF6DE1333B6370022CAAB /* PBXTargetDependency */,
@@ -29,6 +31,9 @@
                        buildPhases = (
                        );
                        dependencies = (
+                               27A034871A8BDC6900650675 /* PBXTargetDependency */,
+                               274EE2821A03EEE0003213D1 /* PBXTargetDependency */,
+                               274EE2841A03EEE0003213D1 /* PBXTargetDependency */,
                                274FF5E313332D4300317ECB /* PBXTargetDependency */,
                                72BEA8D819AFA8BB0085F0F3 /* PBXTargetDependency */,
                                72F75A711336FACD004BB496 /* PBXTargetDependency */,
                270CCDBA135E3D0900007BE2 /* libcupsmime.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220FAC13330B2200FCA411 /* libcupsmime.dylib */; };
                270CCDBC135E3D3E00007BE2 /* testmime.c in Sources */ = {isa = PBXBuildFile; fileRef = 270CCDBB135E3D3E00007BE2 /* testmime.c */; };
                273BF6C71333B5370022CAAB /* testcups.c in Sources */ = {isa = PBXBuildFile; fileRef = 273BF6C61333B5370022CAAB /* testcups.c */; };
+               274EE2611A03EDCA003213D1 /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; };
+               274EE2621A03EDCA003213D1 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC591926750C000F61D3 /* CoreFoundation.framework */; };
+               274EE2631A03EDCA003213D1 /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5B1926750C000F61D3 /* libresolv.dylib */; };
+               274EE2641A03EDCA003213D1 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5C1926750C000F61D3 /* libz.dylib */; };
+               274EE2651A03EDCA003213D1 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5D1926750C000F61D3 /* Security.framework */; };
+               274EE2661A03EDCA003213D1 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5E1926750C000F61D3 /* SystemConfiguration.framework */; };
+               274EE2721A03EDCB003213D1 /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; };
+               274EE2731A03EDCB003213D1 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC591926750C000F61D3 /* CoreFoundation.framework */; };
+               274EE2741A03EDCB003213D1 /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5B1926750C000F61D3 /* libresolv.dylib */; };
+               274EE2751A03EDCB003213D1 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5C1926750C000F61D3 /* libz.dylib */; };
+               274EE2761A03EDCB003213D1 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5D1926750C000F61D3 /* Security.framework */; };
+               274EE2771A03EDCB003213D1 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5E1926750C000F61D3 /* SystemConfiguration.framework */; };
+               274EE27E1A03EE0B003213D1 /* ippinfra.c in Sources */ = {isa = PBXBuildFile; fileRef = 274EE27D1A03EE0B003213D1 /* ippinfra.c */; };
+               274EE2801A03EE41003213D1 /* ippproxy.c in Sources */ = {isa = PBXBuildFile; fileRef = 274EE27F1A03EE41003213D1 /* ippproxy.c */; };
                274FF5D913332CC700317ECB /* cups-driverd.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274FF5D613332CC700317ECB /* cups-driverd.cxx */; };
                274FF5DA13332CC700317ECB /* util.c in Sources */ = {isa = PBXBuildFile; fileRef = 274FF5D713332CC700317ECB /* util.c */; };
                274FF5DD13332D0600317ECB /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; };
                278C58EA136B64B000836530 /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; };
                278C58EB136B64B000836530 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E7136B64B000836530 /* Security.framework */; };
                278C58EC136B64B000836530 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E8136B64B000836530 /* SystemConfiguration.framework */; };
+               27A034821A8BDC3A00650675 /* lpadmin.c in Sources */ = {isa = PBXBuildFile; fileRef = 2732E08D137A3F5200FAFEF6 /* lpadmin.c */; };
+               27A034851A8BDC5C00650675 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; };
                7200511218F492F200E7B81B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; };
                720DD6CD1358FD720064AA82 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; };
                720DD6D31358FDDE0064AA82 /* snmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 720DD6D21358FDDE0064AA82 /* snmp.c */; };
                        remoteGlobalIDString = 273BF6BC1333B5000022CAAB;
                        remoteInfo = testcups;
                };
+               274EE25D1A03EDCA003213D1 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 274FF6891333B1C400317ECB;
+                       remoteInfo = libcups_static;
+               };
+               274EE26E1A03EDCB003213D1 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 274FF6891333B1C400317ECB;
+                       remoteInfo = libcups_static;
+               };
+               274EE2811A03EEE0003213D1 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 274EE25B1A03EDCA003213D1;
+                       remoteInfo = ippinfra;
+               };
+               274EE2831A03EEE0003213D1 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 274EE26C1A03EDCB003213D1;
+                       remoteInfo = ippproxy;
+               };
+               274EE2851A03EEEE003213D1 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 274EE25B1A03EDCA003213D1;
+                       remoteInfo = ippinfra;
+               };
+               274EE2871A03EEEE003213D1 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 274EE26C1A03EDCB003213D1;
+                       remoteInfo = ippproxy;
+               };
                274FF5DB13332CF900317ECB /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
                        remoteGlobalIDString = 274FF6891333B1C400317ECB;
                        remoteInfo = libcups_static;
                };
+               27A034831A8BDC4A00650675 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 72220EAD1333047D00FCA411;
+                       remoteInfo = libcups;
+               };
+               27A034861A8BDC6900650675 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 27A0347A1A8BDB1200650675;
+                       remoteInfo = lpadmin;
+               };
                720DD6CE1358FD790064AA82 /* PBXContainerItemProxy */ = {
                        isa = PBXContainerItemProxy;
                        containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
                        );
                        runOnlyForDeploymentPostprocessing = 1;
                };
+               274EE2671A03EDCA003213D1 /* CopyFiles */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 2147483647;
+                       dstPath = /usr/share/man/man1/;
+                       dstSubfolderSpec = 0;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 1;
+               };
+               274EE2781A03EDCB003213D1 /* CopyFiles */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 2147483647;
+                       dstPath = /usr/share/man/man1/;
+                       dstSubfolderSpec = 0;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 1;
+               };
                274FF5CA13332B1F00317ECB /* CopyFiles */ = {
                        isa = PBXCopyFilesBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 1;
                };
+               27A034791A8BDB1200650675 /* CopyFiles */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 2147483647;
+                       dstPath = /usr/share/man/man1/;
+                       dstSubfolderSpec = 0;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 1;
+               };
                720DD6C01358FD5F0064AA82 /* CopyFiles */ = {
                        isa = PBXCopyFilesBuildPhase;
                        buildActionMask = 2147483647;
                2732E092137A3F5200FAFEF6 /* lpstat.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = lpstat.c; path = ../systemv/lpstat.c; sourceTree = "<group>"; };
                273BF6BD1333B5000022CAAB /* testcups */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testcups; sourceTree = BUILT_PRODUCTS_DIR; };
                273BF6C61333B5370022CAAB /* testcups.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testcups.c; path = ../cups/testcups.c; sourceTree = "<group>"; };
+               274EE26B1A03EDCA003213D1 /* ippserver copy */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "ippserver copy"; sourceTree = BUILT_PRODUCTS_DIR; };
+               274EE27C1A03EDCB003213D1 /* ippserver copy copy */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "ippserver copy copy"; sourceTree = BUILT_PRODUCTS_DIR; };
+               274EE27D1A03EE0B003213D1 /* ippinfra.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ippinfra.c; path = ../test/ippinfra.c; sourceTree = "<group>"; };
+               274EE27F1A03EE41003213D1 /* ippproxy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ippproxy.c; path = ../test/ippproxy.c; sourceTree = "<group>"; };
                274FF5CC13332B1F00317ECB /* cups-driverd */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "cups-driverd"; sourceTree = BUILT_PRODUCTS_DIR; };
                274FF5D613332CC700317ECB /* cups-driverd.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "cups-driverd.cxx"; path = "../scheduler/cups-driverd.cxx"; sourceTree = "<group>"; };
                274FF5D713332CC700317ECB /* util.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = util.c; path = ../scheduler/util.c; sourceTree = "<group>"; };
                278C58E6136B64B000836530 /* Kerberos.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Kerberos.framework; path = /System/Library/Frameworks/Kerberos.framework; sourceTree = "<absolute>"; };
                278C58E7136B64B000836530 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = /System/Library/Frameworks/Security.framework; sourceTree = "<absolute>"; };
                278C58E8136B64B000836530 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = /System/Library/Frameworks/SystemConfiguration.framework; sourceTree = "<absolute>"; };
+               27A0347B1A8BDB1300650675 /* lpadmin */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = lpadmin; sourceTree = BUILT_PRODUCTS_DIR; };
                27D3037D134148CB00F022B1 /* libcups2.def */ = {isa = PBXFileReference; lastKnownFileType = text; name = libcups2.def; path = ../cups/libcups2.def; sourceTree = "<group>"; };
                720DD6C21358FD5F0064AA82 /* snmp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = snmp; sourceTree = BUILT_PRODUCTS_DIR; };
                720DD6D21358FDDE0064AA82 /* snmp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = snmp.c; path = ../backend/snmp.c; sourceTree = "<group>"; };
                724379C41333FFC7009631B9 /* usb-darwin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "usb-darwin.c"; path = "../backend/usb-darwin.c"; sourceTree = "<group>"; };
                724379C51333FFC7009631B9 /* usb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = usb.c; path = ../backend/usb.c; sourceTree = "<group>"; };
                724379CA1334000E009631B9 /* ieee1284.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ieee1284.c; path = ../backend/ieee1284.c; sourceTree = "<group>"; };
+               72496E161A13A03B0051899C /* org.cups.cups-lpd.socket */ = {isa = PBXFileReference; lastKnownFileType = text; name = "org.cups.cups-lpd.socket"; path = "../scheduler/org.cups.cups-lpd.socket"; sourceTree = SOURCE_ROOT; };
+               72496E171A13A03B0051899C /* org.cups.cups-lpdAT.service.in */ = {isa = PBXFileReference; lastKnownFileType = text; name = "org.cups.cups-lpdAT.service.in"; path = "../scheduler/org.cups.cups-lpdAT.service.in"; sourceTree = SOURCE_ROOT; };
                7258EAE2134594C4009286F1 /* rastertopwg */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = rastertopwg; sourceTree = BUILT_PRODUCTS_DIR; };
                7258EAEC134594EB009286F1 /* rastertopwg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rastertopwg.c; path = ../filter/rastertopwg.c; sourceTree = "<group>"; };
                726AD6F7135E88F0002C930D /* ippserver */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = ippserver; sourceTree = BUILT_PRODUCTS_DIR; };
                7271882313746EA8001A2036 /* rastertolabel.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = rastertolabel.c; path = ../filter/rastertolabel.c; sourceTree = "<group>"; };
                7271883C1374AB14001A2036 /* mime-private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "mime-private.h"; path = "../scheduler/mime-private.h"; sourceTree = "<group>"; };
                727AD5B619100A58009F6862 /* tls.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tls.c; path = ../cups/tls.c; sourceTree = "<group>"; };
-               727EF02F192E3498001EF690 /* admin.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = admin.c; path = "../cgi-bin/admin.c"; sourceTree = "<group>"; };
+               727EF02F192E3498001EF690 /* admin.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = admin.c; path = "../cgi-bin/admin.c"; sourceTree = "<group>"; wrapsLines = 1; };
                727EF030192E3498001EF690 /* cgi-private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "cgi-private.h"; path = "../cgi-bin/cgi-private.h"; sourceTree = "<group>"; };
                727EF031192E3498001EF690 /* cgi.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cgi.h; path = "../cgi-bin/cgi.h"; sourceTree = "<group>"; };
                727EF032192E3498001EF690 /* classes.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = classes.c; path = "../cgi-bin/classes.c"; sourceTree = "<group>"; };
                728FB7EC1536161C005426E1 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = /usr/lib/libz.dylib; sourceTree = "<absolute>"; };
                728FB7EF1536167A005426E1 /* libiconv.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libiconv.dylib; path = /usr/lib/libiconv.dylib; sourceTree = "<absolute>"; };
                728FB7F01536167A005426E1 /* libresolv.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libresolv.dylib; path = /usr/lib/libresolv.dylib; sourceTree = "<absolute>"; };
+               729D4B561A2CB48700692B21 /* CHANGES-2.0.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = "CHANGES-2.0.txt"; path = "../CHANGES-2.0.txt"; sourceTree = "<group>"; };
+               729D4B571A2CB48700692B21 /* CHANGES-IPPTOOL.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = "CHANGES-IPPTOOL.txt"; path = "../CHANGES-IPPTOOL.txt"; sourceTree = "<group>"; };
                72A4332F155844CF002E172D /* libcups_static.a */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libcups_static.a; sourceTree = BUILT_PRODUCTS_DIR; };
                72C16CB8137B195D007E4BF4 /* file.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = file.c; path = ../scheduler/file.c; sourceTree = SOURCE_ROOT; };
                72CF95E018A13543000FCAE4 /* dest-job.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "dest-job.c"; path = "../cups/dest-job.c"; sourceTree = "<group>"; };
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               274EE2601A03EDCA003213D1 /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               274EE2611A03EDCA003213D1 /* libcups_static.a in Frameworks */,
+                               274EE2621A03EDCA003213D1 /* CoreFoundation.framework in Frameworks */,
+                               274EE2631A03EDCA003213D1 /* libresolv.dylib in Frameworks */,
+                               274EE2641A03EDCA003213D1 /* libz.dylib in Frameworks */,
+                               274EE2651A03EDCA003213D1 /* Security.framework in Frameworks */,
+                               274EE2661A03EDCA003213D1 /* SystemConfiguration.framework in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               274EE2711A03EDCB003213D1 /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               274EE2721A03EDCB003213D1 /* libcups_static.a in Frameworks */,
+                               274EE2731A03EDCB003213D1 /* CoreFoundation.framework in Frameworks */,
+                               274EE2741A03EDCB003213D1 /* libresolv.dylib in Frameworks */,
+                               274EE2751A03EDCB003213D1 /* libz.dylib in Frameworks */,
+                               274EE2761A03EDCB003213D1 /* Security.framework in Frameworks */,
+                               274EE2771A03EDCB003213D1 /* SystemConfiguration.framework in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                274FF5C913332B1F00317ECB /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               27A034781A8BDB1200650675 /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               27A034851A8BDC5C00650675 /* libcups.dylib in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                720DD6BF1358FD5F0064AA82 /* Frameworks */ = {
                        isa = PBXFrameworksBuildPhase;
                        buildActionMask = 2147483647;
                                2732E08B137A3F5200FAFEF6 /* cupstestdsc.c */,
                                72F75A5B1336F988004BB496 /* cupstestppd.c */,
                                72CF95F218A19165000FCAE4 /* ippfind.c */,
+                               274EE27D1A03EE0B003213D1 /* ippinfra.c */,
+                               274EE27F1A03EE41003213D1 /* ippproxy.c */,
                                726AD701135E8A90002C930D /* ippserver.c */,
                                276683F91337F7A9000D33D0 /* ipptool.c */,
                                2732E08C137A3F5200FAFEF6 /* lp.c */,
                                72A4332F155844CF002E172D /* libcups_static.a */,
                                72CF95F118A19134000FCAE4 /* ipptool copy */,
                                2767FC5019266A0D000F61D3 /* testdest */,
+                               274EE26B1A03EDCA003213D1 /* ippserver copy */,
+                               274EE27C1A03EDCB003213D1 /* ippserver copy copy */,
+                               27A0347B1A8BDB1300650675 /* lpadmin */,
                        );
                        name = Products;
                        sourceTree = "<group>";
                                72E65BDC18DC852700097E89 /* Makefile */,
                                7226369B18AE6D19004ED309 /* org.cups.cups-lpd.plist */,
                                72E65BD518DC818400097E89 /* org.cups.cups-lpd.plist.in */,
+                               72496E171A13A03B0051899C /* org.cups.cups-lpdAT.service.in */,
+                               72496E161A13A03B0051899C /* org.cups.cups-lpd.socket */,
                                72E65BD618DC818400097E89 /* org.cups.cupsd.path.in */,
                                7226369C18AE6D19004ED309 /* org.cups.cupsd.plist */,
                                72E65BD718DC818400097E89 /* org.cups.cupsd.service.in */,
                                72E65BD818DC818400097E89 /* org.cups.cupsd.socket.in */,
-                               72D53A3615B4929D003F877F /* colorman.c */,
-                               72D53A3715B4929D003F877F /* colorman.h */,
                                72220F6913330B0C00FCA411 /* auth.c */,
                                72220F6A13330B0C00FCA411 /* auth.h */,
                                72220F6B13330B0C00FCA411 /* banners.c */,
                                72220F7013330B0C00FCA411 /* classes.h */,
                                72220F7113330B0C00FCA411 /* client.c */,
                                72220F7213330B0C00FCA411 /* client.h */,
+                               72D53A3615B4929D003F877F /* colorman.c */,
+                               72D53A3715B4929D003F877F /* colorman.h */,
                                72220F7313330B0C00FCA411 /* conf.c */,
                                72220F7413330B0C00FCA411 /* conf.h */,
                                72220F7513330B0C00FCA411 /* cupsd.h */,
                        indentWidth = 2;
                        sourceTree = "<group>";
                        tabWidth = 8;
-                       wrapsLines = 0;
+                       wrapsLines = 1;
                };
                72E65BA218DC796500097E89 /* Autoconf Files */ = {
                        isa = PBXGroup;
                72E65BB818DC79F800097E89 /* Documentation */ = {
                        isa = PBXGroup;
                        children = (
-                               72E65BDE18DCA35700097E89 /* CHANGES.txt */,
-                               72E65BDD18DCA35700097E89 /* CHANGES-1.7.txt */,
-                               72E65BDF18DCA35700097E89 /* CREDITS.txt */,
-                               72E65BE018DCA35700097E89 /* INSTALL.txt */,
-                               72E65BE118DCA35700097E89 /* IPPTOOL.txt */,
-                               72E65BE218DCA35700097E89 /* LICENSE.txt */,
-                               72E65BE318DCA35700097E89 /* README.txt */,
-                               72E65BB918DC7A3600097E89 /* doc */,
-                               72E65BBA18DC7A3600097E89 /* man */,
                                72E65BBB18DC7A6B00097E89 /* api-array.header */,
                                72E65BBC18DC7A6B00097E89 /* api-array.shtml */,
                                72E65BBD18DC7A6B00097E89 /* api-cups.header */,
                                72E65BCA18DC7A7E00097E89 /* api-ppdc.shtml */,
                                72E65BCB18DC7A9800097E89 /* api-raster.header */,
                                72E65BCC18DC7A9800097E89 /* api-raster.shtml */,
+                               72E65BDD18DCA35700097E89 /* CHANGES-1.7.txt */,
+                               729D4B561A2CB48700692B21 /* CHANGES-2.0.txt */,
+                               729D4B571A2CB48700692B21 /* CHANGES-IPPTOOL.txt */,
+                               72E65BDE18DCA35700097E89 /* CHANGES.txt */,
+                               72E65BDF18DCA35700097E89 /* CREDITS.txt */,
+                               72E65BB918DC7A3600097E89 /* doc */,
+                               72E65BE018DCA35700097E89 /* INSTALL.txt */,
+                               72E65BE118DCA35700097E89 /* IPPTOOL.txt */,
+                               72E65BE218DCA35700097E89 /* LICENSE.txt */,
+                               72E65BBA18DC7A3600097E89 /* man */,
                                72E65BCD18DC7A9800097E89 /* postscript-driver.header */,
                                72E65BCE18DC7A9800097E89 /* postscript-driver.shtml */,
                                72E65BCF18DC7A9800097E89 /* ppd-compiler.header */,
                                72E65BD018DC7A9800097E89 /* ppd-compiler.shtml */,
                                72E65BD118DC7A9800097E89 /* raster-driver.header */,
                                72E65BD218DC7A9800097E89 /* raster-driver.shtml */,
+                               72E65BE318DCA35700097E89 /* README.txt */,
                                72E65BD318DC7A9800097E89 /* spec-ppd.header */,
                                72E65BD418DC7A9800097E89 /* spec-ppd.shtml */,
                        );
                        productReference = 273BF6BD1333B5000022CAAB /* testcups */;
                        productType = "com.apple.product-type.tool";
                };
+               274EE25B1A03EDCA003213D1 /* ippinfra */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 274EE2681A03EDCA003213D1 /* Build configuration list for PBXNativeTarget "ippinfra" */;
+                       buildPhases = (
+                               274EE25E1A03EDCA003213D1 /* Sources */,
+                               274EE2601A03EDCA003213D1 /* Frameworks */,
+                               274EE2671A03EDCA003213D1 /* CopyFiles */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                               274EE25C1A03EDCA003213D1 /* PBXTargetDependency */,
+                       );
+                       name = ippinfra;
+                       productName = ippserver;
+                       productReference = 274EE26B1A03EDCA003213D1 /* ippserver copy */;
+                       productType = "com.apple.product-type.tool";
+               };
+               274EE26C1A03EDCB003213D1 /* ippproxy */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 274EE2791A03EDCB003213D1 /* Build configuration list for PBXNativeTarget "ippproxy" */;
+                       buildPhases = (
+                               274EE26F1A03EDCB003213D1 /* Sources */,
+                               274EE2711A03EDCB003213D1 /* Frameworks */,
+                               274EE2781A03EDCB003213D1 /* CopyFiles */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                               274EE26D1A03EDCB003213D1 /* PBXTargetDependency */,
+                       );
+                       name = ippproxy;
+                       productName = ippserver;
+                       productReference = 274EE27C1A03EDCB003213D1 /* ippserver copy copy */;
+                       productType = "com.apple.product-type.tool";
+               };
                274FF5CB13332B1F00317ECB /* cups-driverd */ = {
                        isa = PBXNativeTarget;
                        buildConfigurationList = 274FF5D213332B1F00317ECB /* Build configuration list for PBXNativeTarget "cups-driverd" */;
                        productReference = 278C58CB136B640300836530 /* testhttp */;
                        productType = "com.apple.product-type.tool";
                };
+               27A0347A1A8BDB1200650675 /* lpadmin */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 27A034811A8BDB1300650675 /* Build configuration list for PBXNativeTarget "lpadmin" */;
+                       buildPhases = (
+                               27A034771A8BDB1200650675 /* Sources */,
+                               27A034781A8BDB1200650675 /* Frameworks */,
+                               27A034791A8BDB1200650675 /* CopyFiles */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                               27A034841A8BDC4A00650675 /* PBXTargetDependency */,
+                       );
+                       name = lpadmin;
+                       productName = lpadmin;
+                       productReference = 27A0347B1A8BDB1300650675 /* lpadmin */;
+                       productType = "com.apple.product-type.tool";
+               };
                720DD6C11358FD5F0064AA82 /* snmp */ = {
                        isa = PBXNativeTarget;
                        buildConfigurationList = 720DD6CB1358FD600064AA82 /* Build configuration list for PBXNativeTarget "snmp" */;
                        attributes = {
                                LastUpgradeCheck = 0600;
                                ORGANIZATIONNAME = "Apple Inc.";
+                               TargetAttributes = {
+                                       27A0347A1A8BDB1200650675 = {
+                                               CreatedOnToolsVersion = 6.1.1;
+                                       };
+                               };
                        };
                        buildConfigurationList = 72BF963A1333042100B1EAD7 /* Build configuration list for PBXProject "CUPS" */;
                        compatibilityVersion = "Xcode 3.2";
                                724379461333FEA9009631B9 /* dnssd */,
                                724378FC1333E43E009631B9 /* ipp */,
                                72CF95E618A19134000FCAE4 /* ippfind */,
+                               274EE25B1A03EDCA003213D1 /* ippinfra */,
+                               274EE26C1A03EDCB003213D1 /* ippproxy */,
                                726AD6F6135E88F0002C930D /* ippserver */,
                                276683EF1337F78E000D33D0 /* ipptool */,
+                               27A0347A1A8BDB1200650675 /* lpadmin */,
                                724379171333E532009631B9 /* lpd */,
                                2766836F1337AC79000D33D0 /* ppdc */,
                                2766837C1337AC8C000D33D0 /* ppdhtml */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               274EE25E1A03EDCA003213D1 /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               274EE27E1A03EE0B003213D1 /* ippinfra.c in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+               274EE26F1A03EDCB003213D1 /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               274EE2801A03EE41003213D1 /* ippproxy.c in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                274FF5C813332B1F00317ECB /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
+               27A034771A8BDB1200650675 /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               27A034821A8BDC3A00650675 /* lpadmin.c in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
                720DD6BE1358FD5F0064AA82 /* Sources */ = {
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        target = 273BF6BC1333B5000022CAAB /* testcups */;
                        targetProxy = 273BF6DD1333B6370022CAAB /* PBXContainerItemProxy */;
                };
+               274EE25C1A03EDCA003213D1 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 274FF6891333B1C400317ECB /* libcups_static */;
+                       targetProxy = 274EE25D1A03EDCA003213D1 /* PBXContainerItemProxy */;
+               };
+               274EE26D1A03EDCB003213D1 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 274FF6891333B1C400317ECB /* libcups_static */;
+                       targetProxy = 274EE26E1A03EDCB003213D1 /* PBXContainerItemProxy */;
+               };
+               274EE2821A03EEE0003213D1 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 274EE25B1A03EDCA003213D1 /* ippinfra */;
+                       targetProxy = 274EE2811A03EEE0003213D1 /* PBXContainerItemProxy */;
+               };
+               274EE2841A03EEE0003213D1 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 274EE26C1A03EDCB003213D1 /* ippproxy */;
+                       targetProxy = 274EE2831A03EEE0003213D1 /* PBXContainerItemProxy */;
+               };
+               274EE2861A03EEEE003213D1 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 274EE25B1A03EDCA003213D1 /* ippinfra */;
+                       targetProxy = 274EE2851A03EEEE003213D1 /* PBXContainerItemProxy */;
+               };
+               274EE2881A03EEEE003213D1 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 274EE26C1A03EDCB003213D1 /* ippproxy */;
+                       targetProxy = 274EE2871A03EEEE003213D1 /* PBXContainerItemProxy */;
+               };
                274FF5DC13332CF900317ECB /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = 72220EAD1333047D00FCA411 /* libcups */;
                        target = 274FF6891333B1C400317ECB /* libcups_static */;
                        targetProxy = 278C58D7136B642F00836530 /* PBXContainerItemProxy */;
                };
+               27A034841A8BDC4A00650675 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 72220EAD1333047D00FCA411 /* libcups */;
+                       targetProxy = 27A034831A8BDC4A00650675 /* PBXContainerItemProxy */;
+               };
+               27A034871A8BDC6900650675 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 27A0347A1A8BDB1200650675 /* lpadmin */;
+                       targetProxy = 27A034861A8BDC6900650675 /* PBXContainerItemProxy */;
+               };
                720DD6CF1358FD790064AA82 /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
                        target = 72220EAD1333047D00FCA411 /* libcups */;
                        };
                        name = Release;
                };
+               274EE2691A03EDCA003213D1 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               PRODUCT_NAME = "ippserver copy";
+                       };
+                       name = Debug;
+               };
+               274EE26A1A03EDCA003213D1 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               PRODUCT_NAME = "ippserver copy";
+                       };
+                       name = Release;
+               };
+               274EE27A1A03EDCB003213D1 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               PRODUCT_NAME = "ippserver copy copy";
+                       };
+                       name = Debug;
+               };
+               274EE27B1A03EDCB003213D1 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               PRODUCT_NAME = "ippserver copy copy";
+                       };
+                       name = Release;
+               };
                274FF5D313332B1F00317ECB /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        };
                        name = Release;
                };
+               27A0347F1A8BDB1300650675 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+                               CLANG_CXX_LIBRARY = "libc++";
+                               CLANG_ENABLE_MODULES = YES;
+                               CLANG_ENABLE_OBJC_ARC = YES;
+                               CLANG_WARN_BOOL_CONVERSION = YES;
+                               CLANG_WARN_CONSTANT_CONVERSION = YES;
+                               CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+                               CLANG_WARN_EMPTY_BODY = YES;
+                               CLANG_WARN_INT_CONVERSION = YES;
+                               CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+                               CLANG_WARN_UNREACHABLE_CODE = YES;
+                               CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+                               COPY_PHASE_STRIP = NO;
+                               ENABLE_STRICT_OBJC_MSGSEND = YES;
+                               GCC_C_LANGUAGE_STANDARD = gnu99;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               GCC_PREPROCESSOR_DEFINITIONS = (
+                                       "DEBUG=1",
+                                       "$(inherited)",
+                               );
+                               GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+                               GCC_WARN_UNDECLARED_SELECTOR = YES;
+                               GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+                               INSTALL_PATH = /usr/sbin;
+                               MACOSX_DEPLOYMENT_TARGET = 10.10;
+                               MTL_ENABLE_DEBUG_INFO = YES;
+                               PRODUCT_NAME = "$(TARGET_NAME)";
+                               SDKROOT = macosx;
+                       };
+                       name = Debug;
+               };
+               27A034801A8BDB1300650675 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+                               CLANG_CXX_LIBRARY = "libc++";
+                               CLANG_ENABLE_MODULES = YES;
+                               CLANG_ENABLE_OBJC_ARC = YES;
+                               CLANG_WARN_BOOL_CONVERSION = YES;
+                               CLANG_WARN_CONSTANT_CONVERSION = YES;
+                               CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+                               CLANG_WARN_EMPTY_BODY = YES;
+                               CLANG_WARN_INT_CONVERSION = YES;
+                               CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+                               CLANG_WARN_UNREACHABLE_CODE = YES;
+                               CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+                               COPY_PHASE_STRIP = YES;
+                               ENABLE_NS_ASSERTIONS = NO;
+                               ENABLE_STRICT_OBJC_MSGSEND = YES;
+                               GCC_C_LANGUAGE_STANDARD = gnu99;
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+                               GCC_WARN_UNDECLARED_SELECTOR = YES;
+                               GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+                               INSTALL_PATH = /usr/sbin;
+                               MACOSX_DEPLOYMENT_TARGET = 10.10;
+                               MTL_ENABLE_DEBUG_INFO = NO;
+                               PRODUCT_NAME = "$(TARGET_NAME)";
+                               SDKROOT = macosx;
+                       };
+                       name = Release;
+               };
                720DD6C91358FD5F0064AA82 /* Debug */ = {
                        isa = XCBuildConfiguration;
                        buildSettings = {
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
+               274EE2681A03EDCA003213D1 /* Build configuration list for PBXNativeTarget "ippinfra" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               274EE2691A03EDCA003213D1 /* Debug */,
+                               274EE26A1A03EDCA003213D1 /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+               274EE2791A03EDCB003213D1 /* Build configuration list for PBXNativeTarget "ippproxy" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               274EE27A1A03EDCB003213D1 /* Debug */,
+                               274EE27B1A03EDCB003213D1 /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
                274FF5D213332B1F00317ECB /* Build configuration list for PBXNativeTarget "cups-driverd" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
+               27A034811A8BDB1300650675 /* Build configuration list for PBXNativeTarget "lpadmin" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               27A0347F1A8BDB1300650675 /* Debug */,
+                               27A034801A8BDB1300650675 /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
                720DD6CB1358FD600064AA82 /* Build configuration list for PBXNativeTarget "snmp" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
index 24f2da2fca4914a5c7597d4485bf240b46a40c25..abe5107c683b64b20a8145cf5873c9722a46f706 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: config.h 12762 2015-06-24 20:11:53Z msweet $"
+ * "$Id: config.h 12687 2015-06-03 17:19:04Z msweet $"
  *
  * Configuration file for CUPS and Xcode.
  *
 #ifndef _CUPS_CONFIG_H_
 #define _CUPS_CONFIG_H_
 
+#include <AvailabilityMacros.h>
+
 /*
  * Version of software...
  */
 
-#define CUPS_SVERSION "CUPS v2.0.4"
-#define CUPS_MINIMAL "CUPS/2.0.4"
+#define CUPS_SVERSION "CUPS v2.1svn"
+#define CUPS_MINIMAL "CUPS/2.1svn"
 
 
 /*
 #define HAVE_VSYSLOG 1
 
 
+/*
+ * Do we have the ASL functions?
+ */
+
+#define HAVE_ASL_H
+
+
+/*
+ * Do we have the systemd journal functions?
+ */
+
+/*#undef HAVE_SYSTEMD_SD_JOURNAL_H*/
+
+
 /*
  * Do we have the (v)snprintf() functions?
  */
 #define HAVE_SECKEYCHAINOPEN 1
 
 
+/*
+ * Do we have (a working) SSLSetEnabledCiphers function?
+ */
+
+#ifdef AVAILABLE_MAC_OS_X_VERSION_10_11_AND_LATER
+#  define HAVE_SSLSETENABLEDCIPHERS 1
+#endif /* AVAILABLE_MAC_OS_X_VERSION_10_11_AND_LATER */
+
+
 /*
  * Do we have libpaper?
  */
 
 #define HAVE_LAUNCH_H 1
 #define HAVE_LAUNCHD 1
-#undef HAVE_LAUNCH_ACTIVATE_SOCKET
+#define HAVE_LAUNCH_ACTIVATE_SOCKET 1
 
 
 /*
@@ -713,5 +738,5 @@ static __inline int _cups_abs(int i) { return (i < 0 ? -i : i); }
 #endif /* !_CUPS_CONFIG_H_ */
 
 /*
- * End of "$Id: config.h 12762 2015-06-24 20:11:53Z msweet $".
+ * End of "$Id: config.h 12687 2015-06-03 17:19:04Z msweet $".
  */