summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDongHun Kwak <dh0128.kwak@samsung.com>2017-09-13 11:54:26 +0900
committerDongHun Kwak <dh0128.kwak@samsung.com>2017-09-13 11:54:32 +0900
commitcc669fe9bb14b037c6c7d88bea780cf053664b15 (patch)
tree645f5d4f7de33d361e6f83fe8ec2e815c9335840
parent5ed126d6de36f982f1f800f54d468dac5730050d (diff)
downloadcups-cc669fe9bb14b037c6c7d88bea780cf053664b15.tar.gz
cups-cc669fe9bb14b037c6c7d88bea780cf053664b15.tar.bz2
cups-cc669fe9bb14b037c6c7d88bea780cf053664b15.zip
Imported Upstream version 2.2.4upstream/2.2.4
Change-Id: I6e6af59f8c880d483a83eb33c963ac9fb5ec2e4d Signed-off-by: DongHun Kwak <dh0128.kwak@samsung.com>
-rw-r--r--CHANGES.md183
-rw-r--r--CHANGES.txt146
-rw-r--r--CREDITS.md (renamed from CREDITS.txt)8
-rw-r--r--INSTALL.md215
-rw-r--r--INSTALL.txt212
-rw-r--r--Makedefs.in18
-rw-r--r--README.md160
-rw-r--r--README.txt157
-rw-r--r--backend/dnssd.c4
-rw-r--r--backend/org.cups.usb-quirks3
-rw-r--r--cgi-bin/help.c2
-rw-r--r--conf/mime.types10
-rw-r--r--config-scripts/cups-common.m424
-rw-r--r--config-scripts/cups-compiler.m426
-rw-r--r--config-scripts/cups-defaults.m452
-rw-r--r--config-scripts/cups-directories.m424
-rw-r--r--config-scripts/cups-dnssd.m48
-rw-r--r--config-scripts/cups-gssapi.m414
-rw-r--r--config-scripts/cups-manpages.m412
-rw-r--r--config-scripts/cups-network.m46
-rw-r--r--config-scripts/cups-opsys.m442
-rw-r--r--config-scripts/cups-pam.m46
-rw-r--r--config-scripts/cups-sharedlibs.m418
-rw-r--r--config-scripts/cups-ssl.m46
-rw-r--r--config-scripts/cups-startup.m426
-rw-r--r--config-scripts/cups-threads.m44
-rwxr-xr-xconfig.guess1568
-rwxr-xr-xconfig.sub1793
-rwxr-xr-xconfigure373
-rw-r--r--configure.ac2
-rw-r--r--cups/Makefile52
-rw-r--r--cups/auth.c2
-rw-r--r--cups/cups-private.h4
-rw-r--r--cups/cups.h48
-rw-r--r--cups/cupspm-icon.pngbin0 -> 15804 bytes
-rw-r--r--cups/cupspm.md994
-rw-r--r--cups/cupspm.opacitybin0 -> 78640 bytes
-rw-r--r--cups/cupspm.pngbin0 -> 169850 bytes
-rw-r--r--cups/dest-job.c34
-rw-r--r--cups/dest-options.c90
-rw-r--r--cups/dest.c821
-rw-r--r--cups/dir.c31
-rw-r--r--cups/encode.c6
-rw-r--r--cups/file-private.h4
-rw-r--r--cups/file.c37
-rw-r--r--cups/file.h4
-rw-r--r--cups/http-addr.c12
-rw-r--r--cups/http-addrlist.c4
-rw-r--r--cups/http-private.h3
-rw-r--r--cups/http-support.c28
-rw-r--r--cups/http.c55
-rw-r--r--cups/http.h9
-rw-r--r--cups/ipp-support.c6
-rw-r--r--cups/ipp.c160
-rw-r--r--cups/ipp.h273
-rw-r--r--cups/language.h2
-rw-r--r--cups/options.c59
-rw-r--r--cups/ppd-cache.c8
-rw-r--r--cups/pwg.h6
-rw-r--r--cups/snmp.c4
-rw-r--r--cups/string.c7
-rw-r--r--cups/testdest.c7
-rw-r--r--cups/tls-darwin.c30
-rw-r--r--cups/tls-gnutls.c7
-rw-r--r--cups/tls-sspi.c2
-rw-r--r--cups/usersys.c14
-rw-r--r--cups/util.c125
-rw-r--r--cups/versioning.h16
-rw-r--r--doc/Makefile6
-rw-r--r--doc/help/api-admin.html253
-rw-r--r--doc/help/api-array.html1070
-rw-r--r--doc/help/api-cups.html3607
-rw-r--r--doc/help/api-filedir.html1003
-rw-r--r--doc/help/api-filter.html643
-rw-r--r--doc/help/api-httpipp.html6777
-rw-r--r--doc/help/api-overview.html512
-rw-r--r--doc/help/api-ppd.html2352
-rw-r--r--doc/help/api-raster.html1440
-rw-r--r--doc/help/cupspm.epubbin0 -> 219684 bytes
-rw-r--r--doc/help/cupspm.html6493
-rw-r--r--doc/help/man-ipptool.html3
-rw-r--r--doc/help/man-ipptoolfile.html51
-rw-r--r--doc/help/man-lpstat.html6
-rw-r--r--doc/help/postscript-driver.html49
-rw-r--r--doc/help/ppd-compiler.html63
-rw-r--r--doc/help/raster-driver.html45
-rw-r--r--doc/help/spec-ppd.html173
-rw-r--r--locale/cups.pot1252
-rw-r--r--locale/cups.strings118
-rw-r--r--locale/cups_ca.po99
-rw-r--r--locale/cups_cs.po89
-rw-r--r--locale/cups_de.po103
-rw-r--r--locale/cups_es.po353
-rw-r--r--locale/cups_fr.po89
-rw-r--r--locale/cups_it.po354
-rw-r--r--locale/cups_ja.po340
-rw-r--r--locale/cups_pt_BR.po351
-rw-r--r--locale/cups_ru.po348
-rw-r--r--locale/cups_zh_CN.po6972
-rw-r--r--locale/po2strings.c28
-rw-r--r--man/Makefile11
-rw-r--r--man/client.conf.man.in7
-rw-r--r--man/cupsd.conf.man.in7
-rw-r--r--man/ipptool.man9
-rw-r--r--man/ipptoolfile.man66
-rw-r--r--man/lpstat.man11
-rw-r--r--packaging/cups.list.in3
-rw-r--r--packaging/cups.spec42
-rw-r--r--packaging/cups.spec.in38
-rw-r--r--ppdc/Makefile13
-rw-r--r--scheduler/conf.c8
-rw-r--r--scheduler/cups-lpd.c10
-rw-r--r--scheduler/ipp.c5
-rw-r--r--scheduler/job.c2
-rw-r--r--scheduler/main.c37
-rw-r--r--scheduler/printers.c56
-rw-r--r--scheduler/printers.h3
-rw-r--r--scheduler/process.c1
-rw-r--r--scheduler/sysman.c19
-rw-r--r--systemv/cupstestppd.c2
-rw-r--r--systemv/lpstat.c39
-rw-r--r--templates/de/printer.tmpl2
-rw-r--r--templates/es/jobs.tmpl1
-rw-r--r--templates/ja/printer.tmpl2
-rw-r--r--templates/pt_BR/printer.tmpl2
-rw-r--r--templates/ru/printer.tmpl2
-rw-r--r--test/5.4-lpstat.sh21
-rw-r--r--test/Makefile14
-rw-r--r--test/ipp-1.1.test167
-rw-r--r--test/ipp-2.0.test25
-rw-r--r--test/ipp-2.1.test23
-rw-r--r--test/ipp-2.2.test23
-rw-r--r--test/ipp-everywhere.test23
-rw-r--r--test/ippserver.c3
-rw-r--r--test/ipptool.c758
-rw-r--r--test/print-job-manual.test37
-rwxr-xr-xtest/run-stp-tests.sh216
-rw-r--r--test/str-header.html70
-rw-r--r--test/str-trailer.html4
-rw-r--r--vcnet/config.h4
-rw-r--r--xcode/CUPS.xcodeproj/project.pbxproj32
-rw-r--r--xcode/config.h4
142 files changed, 25682 insertions, 19268 deletions
diff --git a/CHANGES.md b/CHANGES.md
new file mode 100644
index 0000000..24270ba
--- /dev/null
+++ b/CHANGES.md
@@ -0,0 +1,183 @@
+CHANGES - 2.2.4 - 2017-06-30
+============================
+
+CHANGES IN CUPS V2.2.4
+----------------------
+
+- The scheduler did not remove old job files (Issue #4987)
+- cupsEnumDests did not return early when all printers had been discovered
+ (Issue #4989)
+- The CUPS build system now supports cross-compilation (Issue #4897)
+- Added a new CUPS Programming Manual to replace the aging API documentation.
+- Added the `cupsAddIntegerOption` and `cupsGetIntegerOption` functions
+ (Issue #4992)
+- The `cupsGetDests` and `cupsCreateJob` functions now support Bonjour printers
+ (Issue #4993)
+- Added a USB quirk rule for Lexmark E260dn printers (Issue #4994)
+- Fixed a potential buffer overflow in the `cupstestppd` utility (Issue #4996)
+- IPP Everywhere improvements (Issue #4998)
+- Fixed the "cancel all jobs" function in the web interface for several
+ languages (Issue #4999)
+- Fixed issues with local queues (Issue #5003, Issue #5008, Issue #5009)
+- The `lpstat` command now supports a `-e` option to enumerate local printers
+ (either previously added or on the network) that can be accessed
+ (Issue #5005)
+- The `lp` and `lpr` commands now support printing to network printers that
+ haven't yet been added (Issue #5006)
+- Fixed a typo in the mime.types file.
+- Fixed a bug in the Spanish web interface template (Issue #5016)
+- The `cupsEnumDests*` and `cupsGetDest*` functions now report the value of the
+ "printer-is-temporary" Printer Status attribute (Issue #5028)
+- Added Chinese localization (Issue #5029)
+- The `cupsCheckDestSupported` function did not support `NULL` values
+ (Issue #5031)
+- Fixed some issues in the RPM spec file (Issue #5032)
+- The `cupsConnectDest` function now supports the `CUPS_DEST_FLAGS_DEVICE` flag
+ for explicitly connecting to the device (printer) associated with the
+ destination.
+- The `SSLOptions` directive in "client.conf" and "cupsd.conf" now supports
+ `DenyCBC` and `DenyTLS1.0` options (Issue #5037)
+
+
+CHANGES IN CUPS V2.2.3
+----------------------
+
+- The IPP backend could get into an infinite loop for certain errors, causing a
+ hung queue (<rdar://problem/28008717>)
+- The scheduler could pause responding to client requests in order to save state
+ changes to disk (<rdar://problem/28690656>)
+- Added support for PPD finishing keywords (Issue #4960, Issue #4961,
+ Issue #4962)
+- The IPP backend did not send a media-col attribute for just the source or type
+ (Issue #4963)
+- IPP Everywhere print queues did not always support all print qualities
+ supported by the printer (Issue #4953)
+- IPP Everywhere print queues did not always support all media types supported
+ by the printer (Issue #4953)
+- The IPP Everywhere PPD generator did not return useful error messages
+ (Issue #4954)
+- The IPP Everywhere finishings support did not work correctly with common UI or
+ command-line options (Issue #4976)
+- Fixed an error handling issue for the network backends (Issue #4979)
+- The default cupsd.conf file did not work on systems compiled without Kerberos
+ support (Issue #4947)
+- The "reprint job" option was not available for some canceled jobs
+ (Issue #4915)
+- Updated the job listing in the web interface (Issue #4978)
+- Fixed some localization issues on macOS (<rdar://problem/27245567>)
+
+
+CHANGES IN CUPS V2.2.2
+----------------------
+
+- Fixed some issues with the Zebra ZPL printer driver (Issue #4898)
+- Fixed some issues with IPP Everywhere printer support (Issue #4893,
+ Issue #4909, Issue #4916, Issue #4921, Issue #4923, Issue #4932, Issue #4933,
+ Issue #4938)
+- The rastertopwg filter could crash with certain input (Issue #4942)
+- Optimized connection usage in the IPP backend (<rdar://problem/29547323>)
+- The scheduler did not detect when an encrypted connection was closed by the
+ client on Linux (Issue #4901)
+- The cups-lpd program did not catch all legacy usage of ISO-8859-1
+ (Issue #4899)
+- Fixed builds on systems without a working poll() implementation (Issue #4905)
+- Added a USB quirk rule for the Kyocera Ecosys P6026cdn (Issue #4900)
+- The scheduler no longer creates log files on startup
+ (<rdar://problem/28332470>)
+- The ippContainsString function now uses case-insensitive comparisons for
+ mimeMediaType, name, and text values in conformance with RFC 2911.
+- The network backends now log the addresses that were found for a printer
+ (<rdar://problem/29268474>)
+- Let's Encrypt certificates did not work when the hostname contained uppercase
+ letters (Issue #4919)
+- Fixed reporting of printed pages in the web interface (Issue #4924)
+- Updated systemd config files (Issue #4935)
+- Updated documentation (PR #4896)
+- Updated localizations (PR #4894, PR #4895, PR #4904, PR #4908, Issue #4946)
+- Updated packaging files (Issue #4940)
+
+
+CHANGES IN CUPS V2.2.1
+----------------------
+
+- Added "CreateSelfSignedCerts" directive for cups-files.conf to control whether
+ the scheduler automatically creates its own self-signed X.509 certificates for
+ TLS connections (Issue #4876)
+- http*Connect did not handle partial failures (Issue #4870)
+- Addressed some build warnings on Linux (Issue #4881)
+- cupsHashData did not use the correct hashing algorithm
+ (<rdar://problem/28209220>)
+- Updated man pages (PR #4885)
+- Updated localizations (PR #4877, PR #4886)
+
+
+CHANGES IN CUPS V2.2.0
+----------------------
+
+- Normalized the TLS certificate validation code and added additional error
+ messages to aid troubleshooting.
+- The httpConnect functions did not work on Linux when cupsd was not running
+ (Issue #4870)
+- The --no-remote-any option of cupsctl had no effect (Issue #4866)
+- http*Connect did not return early when all addresses failed (Issue #4870)
+
+
+CHANGES IN CUPS V2.2rc1
+-----------------------
+
+- Updated the list of supported IPP Everywhere media types.
+- The IPP backend did not validate TLS credentials properly.
+- The printer-state-message attribute was not cleared after a print job with no
+ errors (Issue #4851)
+- The CUPS-Add-Modify-Class and CUPS-Add-Modify-Printer operations did not
+ always return an error for failed adds (Issue #4854)
+- PPD files with names longer than 127 bytes did not work (Issue #4860)
+- Updated localizations (Issue #4846, PR #4858)
+
+
+CHANGES IN CUPS V2.2b2
+----------------------
+
+- Added Upstart support (PR #4825)
+- CUPS now supports Let's Encrypt certificates on Linux.
+
+
+CHANGES IN CUPS V2.2b1
+----------------------
+
+- All CUPS commands now support POSIX options (Issue #4813)
+- The scheduler now restarts faster (Issue #4760)
+- Improved performance of web interface with large numbers of jobs (Issue #3819)
+- Encrypted printing can now be limited to only trusted printers and servers
+ (<rdar://problem/25711658>)
+- The scheduler now advertises PWG Raster attributes for IPP Everywhere clients
+ (Issue #4428)
+- The scheduler now logs informational messages for jobs at LogLevel "info"
+ (Issue #4815)
+- The scheduler now uses the getgrouplist function when available (Issue #4611)
+- The IPP backend no longer enables compression by default except for certain
+ raster formats that generally benefit from it (<rdar://problem/25166952>)
+- The scheduler did not handle out-of-disk situations gracefully (Issue #4742)
+- The LPD mini-daemon now detects invalid UTF-8 sequences in job, document, and
+ user names (Issue #4748)
+- The IPP backend now continues on to the next job when the remote server/
+ printer puts the job on hold (<rdar://problem/24858548>)
+- The scheduler did not cancel multi-document jobs immediately
+ (<rdar://problem/24854834>)
+- The scheduler did not return non-shared printers to local clients unless they
+ connected to the domain socket (<rdar://problem/24566996>)
+- The scheduler now reads the spool directory if one or more job cache entries
+ point to deleted jobs (<rdar://problem/24048846>)
+- Added support for disc media sizes (<rdar://problem/20219536>)
+- The httpAddrConnect and httpConnect* APIs now try connecting to multiple
+ addresses in parallel (<rdar://problem/20643153>)
+- The cupsd domain socket is no longer world-accessible on macOS
+ (<rdar://problem/7542560>)
+- Interface scripts are no longer supported for security reasons
+ (<rdar://problem/23135640>)
+- Added a new cupsHashData API and support for hashed job passwords
+ (<rdar://problem/20221502>)
+- Localization fixes (<rdar://problem/25292403>, <rdar://problem/25461517>,
+ Issue #4041, Issue #4796)
+- Documentation changes (Issue #4624, Issue #4781)
+- Packaging fixes (PR #4832)
diff --git a/CHANGES.txt b/CHANGES.txt
deleted file mode 100644
index 769a61a..0000000
--- a/CHANGES.txt
+++ /dev/null
@@ -1,146 +0,0 @@
-CHANGES.txt - 2.2.3 - 2017-03-28
---------------------------------
-
-CHANGES IN CUPS V2.2.3
-
- - The IPP backend could get into an infinite loop for certain errors,
- causing a hung queue (<rdar://problem/28008717>)
- - The scheduler could pause responding to client requests in order to
- save state changes to disk (<rdar://problem/28690656>)
- - Added support for PPD finishing keywords (Issue #4960, Issue #4961,
- Issue #4962)
- - The IPP backend did not send a media-col attribute for just the source
- or type (Issue #4963)
- - IPP Everywhere print queues did not always support all print qualities
- supported by the printer (Issue #4953)
- - IPP Everywhere print queues did not always support all media types
- supported by the printer (Issue #4953)
- - The IPP Everywhere PPD generator did not return useful error messages
- (Issue #4954)
- - The IPP Everywhere finishings support did not work correctly with
- common UI or command-line options (Issue #4976)
- - Fixed an error handling issue for the network backends (Issue #4979)
- - The default cupsd.conf file did not work on systems compiled without
- Kerberos support (Issue #4947)
- - The "reprint job" option was not available for some canceled jobs
- (Issue #4915)
- - Updated the job listing in the web interface (Issue #4978)
- - Fixed some localization issues on macOS (<rdar://problem/27245567>)
-
-
-CHANGES IN CUPS V2.2.2
-
- - Fixed some issues with the Zebra ZPL printer driver (Issue #4898)
- - Fixed some issues with IPP Everywhere printer support (Issue #4893,
- Issue #4909, Issue #4916, Issue #4921, Issue #4923, Issue #4932,
- Issue #4933, Issue #4938)
- - The rastertopwg filter could crash with certain input (Issue #4942)
- - Optimized connection usage in the IPP backend
- (<rdar://problem/29547323>)
- - The scheduler did not detect when an encrypted connection was closed
- by the client on Linux (Issue #4901)
- - The cups-lpd program did not catch all legacy usage of ISO-8859-1
- (Issue #4899)
- - Fixed builds on systems without a working poll() implementation
- (Issue #4905)
- - Added a USB quirk rule for the Kyocera Ecosys P6026cdn (Issue #4900)
- - The scheduler no longer creates log files on startup
- (<rdar://problem/28332470>)
- - The ippContainsString function now uses case-insensitive comparisons
- for mimeMediaType, name, and text values in conformance with RFC 2911.
- - The network backends now log the addresses that were found for a
- printer (<rdar://problem/29268474>)
- - Let's Encrypt certificates did not work when the hostname contained
- uppercase letters (Issue #4919)
- - Fixed reporting of printed pages in the web interface (Issue #4924)
- - Updated systemd config files (Issue #4935)
- - Updated documentation (PR #4896)
- - Updated localizations (PR #4894, PR #4895, PR #4904, PR #4908,
- Issue #4946)
- - Updated packaging files (Issue #4940)
-
-
-CHANGES IN CUPS V2.2.1
-
- - Added "CreateSelfSignedCerts" directive for cups-files.conf to
- control whether the scheduler automatically creates its own
- self-signed X.509 certificates for TLS connections (Issue #4876)
- - http*Connect did not handle partial failures (Issue #4870)
- - Addressed some build warnings on Linux (Issue #4881)
- - cupsHashData did not use the correct hashing algorithm
- (<rdar://problem/28209220>)
- - Updated man pages (PR #4885)
- - Updated localizations (PR #4877, PR #4886)
-
-
-CHANGES IN CUPS V2.2.0
-
- - Normalized the TLS certificate validation code and added additional
- error messages to aid troubleshooting.
- - http*Connect did not work on Linux when cupsd was not running
- (Issue #4870)
- - The --no-remote-any option of cupsctl had no effect (Issue #4866)
- - http*Connect did not return early when all addresses failed
- (Issue #4870)
-
-
-CHANGES IN CUPS V2.2rc1
-
- - Updated the list of supported IPP Everywhere media types.
- - The IPP backend did not validate TLS credentials properly.
- - The printer-state-message attribute was not cleared after a
- print job with no errors (Issue #4851)
- - The CUPS-Add-Modify-Class and CUPS-Add-Modify-Printer operations did
- not always return an error for failed adds (Issue #4854)
- - PPD files with names longer than 127 bytes did not work (Issue #4860)
- - Updated localizations (Issue #4846, PR #4858)
-
-
-CHANGES IN CUPS V2.2b2
-
- - Added Upstart support (PR #4825)
- - CUPS now supports Let's Encrypt certificates on Linux.
-
-
-CHANGES IN CUPS V2.2b1
-
- - All CUPS commands now support POSIX options (Issue #4813)
- - The scheduler now restarts faster (Issue #4760)
- - Improved performance of web interface with large numbers of jobs
- (Issue #3819)
- - Encrypted printing can now be limited to only trusted printers and
- servers (<rdar://problem/25711658>)
- - The scheduler now advertises PWG Raster attributes for IPP Everywhere
- clients (Issue #4428)
- - The scheduler now logs informational messages for jobs at LogLevel
- "info" (Issue #4815)
- - The scheduler now uses the getgrouplist function when available
- (Issue #4611)
- - The IPP backend no longer enables compression by default except for
- certain raster formats that generally benefit from it
- (<rdar://problem/25166952>)
- - The scheduler did not handle out-of-disk situations gracefully
- (Issue #4742)
- - The LPD mini-daemon now detects invalid UTF-8 sequences in job,
- document, and user names (Issue #4748)
- - The IPP backend now continues on to the next job when the remote
- server/printer puts the job on hold (<rdar://problem/24858548>)
- - The scheduler did not cancel multi-document jobs immediately
- (<rdar://problem/24854834>)
- - The scheduler did not return non-shared printers to local clients
- unless they connected to the domain socket (<rdar://problem/24566996>)
- - The scheduler now reads the spool directory if one or more job cache
- entries point to deleted jobs (<rdar://problem/24048846>)
- - Added support for disc media sizes (<rdar://problem/20219536>)
- - The httpAddrConnect and httpConnect* APIs now try connecting to
- multiple addresses in parallel (<rdar://problem/20643153>)
- - The cupsd domain socket is no longer world-accessible on macOS
- (<rdar://problem/7542560>)
- - Interface scripts are no longer supported for security reasons
- (<rdar://problem/23135640>)
- - Added a new cupsHashData API and support for hashed job passwords
- (<rdar://problem/20221502>)
- - Localization fixes (<rdar://problem/25292403>,
- <rdar://problem/25461517>, Issue #4041, Issue #4796)
- - Documentation changes (Issue #4624, Issue #4781)
- - Packaging fixes (PR #4832)
diff --git a/CREDITS.txt b/CREDITS.md
index 04cb814..7d5a8b9 100644
--- a/CREDITS.txt
+++ b/CREDITS.md
@@ -1,8 +1,8 @@
-CREDITS.txt - 2016-06-21
-------------------------
+CREDITS - 2017-05-01
+====================
-Few projects are completed by one person, and CUPS is no exception. We'd
-like to thank the following individuals for their contributions:
+Few projects are completed by one person, and CUPS is no exception. We'd like
+to thank the following individuals for their contributions:
Niklas 'Nille' Åkerström - Swedish localization.
Nathaniel Barbour - Lots of testing and feedback.
diff --git a/INSTALL.md b/INSTALL.md
new file mode 100644
index 0000000..4a2529a
--- /dev/null
+++ b/INSTALL.md
@@ -0,0 +1,215 @@
+INSTALL - CUPS v2.2.4 - 2017-06-30
+==================================
+
+This file describes how to compile and install CUPS from source code. For more
+information on CUPS see the file called "README.txt". A complete change log can
+be found in "CHANGES.txt".
+
+> USING CUPS REQUIRES ADDITIONAL THIRD-PARTY SUPPORT SOFTWARE AND PRINTER
+> DRIVERS. THESE ARE TYPICALLY INCLUDED WITH YOUR OPERATING SYSTEM
+> DISTRIBUTION. APPLE DOES NOT ENDORSE OR SUPPORT THIRD-PARTY SUPPORT SOFTWARE
+> FOR CUPS.
+
+
+BEFORE YOU BEGIN
+----------------
+
+You'll need ANSI-compliant C and C++ compilers, plus a make program and POSIX-
+compliant shell (/bin/sh). The GNU compiler tools and Bash work well and we
+have tested the current CUPS code against several versions of GCC with excellent
+results.
+
+The makefiles used by the project should work with most versions of make. We've
+tested them with GNU make as well as the make programs shipped by Compaq, HP,
+SGI, and Sun. BSD users should use GNU make (gmake) since BSD make does not
+support "include".
+
+Besides these tools you'll want ZLIB library for compression support, the GNU
+TLS library for encryption support on platforms other than iOS, macOS, or
+Windows, and either MIT (1.6.3 or higher) or Heimdal Kerberos for Kerberos
+support. CUPS will compile and run without these, however you'll miss out on
+many of the features provided by CUPS.
+
+On a stock Ubuntu install, the following command will install the required
+prerequisites:
+
+ sudo apt-get install autoconf build-essential libavahi-client-dev \
+ libgnutls28-dev libkrb5-dev libnss-mdns libpam-dev \
+ libsystemd-dev libusb-1.0-0-dev zlib1g-dev
+
+Also, please note that CUPS does not include print filters to support PDF or
+raster printing. You *must* download GPL Ghostscript and/or the Open Printing
+CUPS filters package separately to print on operating systems other than macOS.
+
+
+CONFIGURATION
+-------------
+
+CUPS uses GNU autoconf, so you should find the usual "configure" script in the
+main CUPS source directory. To configure CUPS for your system, type:
+
+ ./configure
+
+The default installation will put the CUPS software in the "/etc", "/usr", and
+"/var" directories on your system, which will overwrite any existing printing
+commands on your system. Use the "--prefix" option to install the CUPS software
+in another location:
+
+ ./configure --prefix=/some/directory
+
+To see a complete list of configuration options, use the --help option:
+
+ ./configure --help
+
+If any of the dependent libraries are not installed in a system default location
+(typically "/usr/include" and "/usr/lib") you'll need to set the CFLAGS,
+CPPFLAGS, CXXFLAGS, DSOFLAGS, and LDFLAGS environment variables prior to running
+configure:
+
+ setenv CFLAGS "-I/some/directory"
+ setenv CPPFLAGS "-I/some/directory"
+ setenv CXXFLAGS "-I/some/directory"
+ setenv DSOFLAGS "-L/some/directory"
+ setenv LDFLAGS "-L/some/directory"
+ ./configure ...
+
+or:
+
+ CFLAGS="-I/some/directory" \
+ CPPFLAGS="-I/some/directory" \
+ CXXFLAGS="-I/some/directory" \
+ DSOFLAGS="-L/some/directory" \
+ LDFLAGS="-L/some/directory" \
+ ./configure ...
+
+The "--enable-debug" option compiles CUPS with debugging information enabled.
+Additional debug logging support can be enabled using the
+"--enable-debug-printfs" option - these debug messages are enabled using the
+CUPS_DEBUG_LOG environment variable at run-time.
+
+CUPS also includes an extensive set of unit tests that can be used to find and
+diagnose a variety of common problems - use the "--enable-unit-tests" configure
+option to run them at build time.
+
+On macOS, use the "--with-archflags" option to build with the correct set of
+architectures:
+
+ ./configure --with-archflags="-arch i386 -arch x86_64" ...
+
+> Note: Current versions of macOS DO NOT allow installation to /usr with the
+> default system integrity settings. In addition, we do not recommend replacing
+> the CUPS supplied with macOS because not all versions of CUPS are compatible
+> with every macOS release, and because software updates will replace parts
+> of your local installation potentially rendering your system unusable.
+
+Once you have configured things, just type:
+
+ make ENTER
+
+or if you have FreeBSD, NetBSD, or OpenBSD type:
+
+ gmake ENTER
+
+to build the software.
+
+
+TESTING THE SOFTWARE
+--------------------
+
+Aside from the built-in unit tests, CUPS includes an automated test framework
+for testing the entire printing system. To run the tests, just type:
+
+ make check ENTER
+
+or if you have FreeBSD, NetBSD, or OpenBSD type:
+
+ gmake check ENTER
+
+The test framework runs a copy of the CUPS scheduler (cupsd) on port 8631 in
+/tmp/cups-$USER and produces a nice HTML report of the results.
+
+
+INSTALLING THE SOFTWARE
+-----------------------
+
+Once you have built the software you need to install it. The "install" target
+provides a quick way to install the software on your local system:
+
+ make install ENTER
+
+or for FreeBSD, NetBSD, or OpenBSD:
+
+ gmake install ENTER
+
+Use the BUILDROOT variable to install to an alternate root directory:
+
+ make BUILDROOT=/some/other/root/directory install ENTER
+
+You can also build binary packages that can be installed on other machines using
+the RPM spec file ("packaging/cups.spec") or EPM list file
+("packaging/cups.list"). The latter also supports building of binary RPMs, so
+it may be more convenient to use.
+
+You can find the RPM software at:
+
+ http://www.rpm.org/
+
+The EPM software is available at:
+
+ https://michaelrsweet.github.io/epm
+
+
+CREATING BINARY DISTRIBUTIONS WITH EPM
+--------------------------------------
+
+The top level makefile supports generation of many types of binary distributions
+using EPM. To build a binary distribution type:
+
+ make <format> ENTER
+
+or
+
+ gmake <format> ENTER
+
+for FreeBSD, NetBSD, and OpenBSD. The <format> target is one of the following:
+
+- "epm": Builds a script + tarfile package
+- "bsd": Builds a *BSD package
+- "deb": Builds a Debian package
+- "pkg": Builds a Solaris package
+- "rpm": Builds a RPM package
+- "slackware": Build a Slackware package
+
+
+GETTING DEBUG LOGGING FROM CUPS
+-------------------------------
+
+When configured with the "--enable-debug-printfs" option, CUPS compiles in
+additional debug logging support in the scheduler, CUPS API, and CUPS Imaging
+API. The following environment variables are used to enable and control debug
+logging:
+
+- `CUPS_DEBUG_FILTER`: Specifies a POSIX regular expression to control which
+ messages are logged.
+- `CUPS_DEBUG_LEVEL`: Specifies a number from 0 to 9 to control the verbosity of
+ the logging. The default level is 1.
+- `CUPS_DEBUG_LOG`: Specifies a log file to use. Specify the name "-" to send
+ the messages to stderr. Prefix a filename with "+" to append to an existing
+ file.
+
+
+REPORTING PROBLEMS
+------------------
+
+If you have problems, READ THE DOCUMENTATION FIRST! If the documentation does
+not solve your problems, please post a message on the users forum at:
+
+ https://www.cups.org/
+
+Include your operating system and version, compiler and version, and any errors
+or problems you've run into. The "config.log" file and the output from the
+configure script and make should also be sent, as it often helps to determine
+the cause of your problem.
+
+If you are running a version of Linux, be sure to provide the Linux distribution
+you have, too.
diff --git a/INSTALL.txt b/INSTALL.txt
deleted file mode 100644
index b2996cd..0000000
--- a/INSTALL.txt
+++ /dev/null
@@ -1,212 +0,0 @@
-INSTALL - CUPS v2.2.3 - 2017-03-28
-----------------------------------
-
-This file describes how to compile and install CUPS from source code. For more
-information on CUPS see the file called "README.txt". A complete change log can
-be found in "CHANGES.txt".
-
-*******************************************************************************
-*******************************************************************************
-**** ****
-**** USING CUPS REQUIRES ADDITIONAL THIRD-PARTY SUPPORT SOFTWARE AND ****
-**** PRINTER DRIVERS. THESE ARE TYPICALLY INCLUDED WITH YOUR OPERATING ****
-**** SYSTEM DISTRIBUTION. APPLE DOES NOT ENDORSE OR SUPPORT THIRD-PARTY ****
-**** SUPPORT SOFTWARE FOR CUPS. ****
-**** ****
-*******************************************************************************
-*******************************************************************************
-
-
-BEFORE YOU BEGIN
-
- You'll need ANSI-compliant C and C++ compilers, plus a make program and
- POSIX-compliant shell (/bin/sh). The GNU compiler tools and Bash work well
- and we have tested the current CUPS code against several versions of GCC
- with excellent results.
-
- The makefiles used by the project should work with most versions of make.
- We've tested them with GNU make as well as the make programs shipped by
- Compaq, HP, SGI, and Sun. BSD users should use GNU make (gmake) since BSD
- make does not support "include".
-
- Besides these tools you'll want ZLIB library for compression support, the
- GNU TLS library for encryption support on platforms other than iOS, macOS,
- or Windows, and either MIT (1.6.3 or higher) or Heimdal Kerberos for
- Kerberos support. CUPS will compile and run without these, however you'll
- miss out on many of the features provided by CUPS.
-
- Also, please note that CUPS does not include print filters to support PDF
- or raster printing. You *must* download GPL Ghostscript and/or the Open
- Printing CUPS filters package separately to print on operating systems
- other than macOS.
-
-
-CONFIGURATION
-
- CUPS uses GNU autoconf, so you should find the usual "configure" script in
- the main CUPS source directory. To configure CUPS for your system, type:
-
- ./configure
-
- The default installation will put the CUPS software in the "/etc", "/usr",
- and "/var" directories on your system, which will overwrite any existing
- printing commands on your system. Use the "--prefix" option to install the
- CUPS software in another location:
-
- ./configure --prefix=/some/directory
-
- To see a complete list of configuration options, use the --help option:
-
- ./configure --help
-
- If any of the dependent libraries are not installed in a system default
- location (typically "/usr/include" and "/usr/lib") you'll need to set the
- CFLAGS, CPPFLAGS, CXXFLAGS, DSOFLAGS, and LDFLAGS environment variables
- prior to running configure:
-
- setenv CFLAGS "-I/some/directory"
- setenv CPPFLAGS "-I/some/directory"
- setenv CXXFLAGS "-I/some/directory"
- setenv DSOFLAGS "-L/some/directory"
- setenv LDFLAGS "-L/some/directory"
- ./configure ...
-
- or:
-
- CFLAGS="-I/some/directory" \
- CPPFLAGS="-I/some/directory" \
- CXXFLAGS="-I/some/directory" \
- DSOFLAGS="-L/some/directory" \
- LDFLAGS="-L/some/directory" \
- ./configure ...
-
- The "--enable-debug" option compiles CUPS with debugging information
- enabled. Additional debug logging support can be enabled using the
- "--enable-debug-printfs" option - these debug messages are enabled using the
- CUPS_DEBUG_LOG environment variable at run-time.
-
- CUPS also includes an extensive set of unit tests that can be used to find
- and diagnose a variety of common problems - use the "--enable-unit-tests"
- configure option to run them at build time.
-
- On macOS, use the "--with-archflags" option to build with the correct set of
- architectures:
-
- ./configure --with-archflags="-arch i386 -arch x86_64" ...
-
- Note: Current versions of macOS DO NOT allow installation to
- /usr with the default system integrity settings. In addition,
- we do not recommend replacing the CUPS supplied with macOS
- because not all versions of CUPS are compatible with every
- macOS release, and because software updates will replace parts
- of your local installation potentially rendering your system
- unusable.
-
- Once you have configured things, just type:
-
- make ENTER
-
- or if you have FreeBSD, NetBSD, or OpenBSD type:
-
- gmake ENTER
-
- to build the software.
-
-
-TESTING THE SOFTWARE
-
- Aside from the built-in unit tests, CUPS includes an automated test
- framework for testing the entire printing system. To run the tests, just
- type:
-
- make check ENTER
-
- or if you have FreeBSD, NetBSD, or OpenBSD type:
-
- gmake check ENTER
-
- The test framework runs a copy of the CUPS scheduler (cupsd) on port 8631
- in /tmp/cups-$USER and produces a nice HTML report of the results.
-
-
-INSTALLING THE SOFTWARE
-
- Once you have built the software you need to install it. The "install"
- target provides a quick way to install the software on your local system:
-
- make install ENTER
-
- or for FreeBSD, NetBSD, or OpenBSD:
-
- gmake install ENTER
-
- Use the BUILDROOT variable to install to an alternate root directory:
-
- make BUILDROOT=/some/other/root/directory install ENTER
-
- You can also build binary packages that can be installed on other machines
- using the RPM spec file ("packaging/cups.spec") or EPM list file
- ("packaging/cups.list"). The latter also supports building of binary RPMs,
- so it may be more convenient to use.
-
- You can find the RPM software at:
-
- http://www.rpm.org/
-
- The EPM software is available at:
-
- http://www.msweet.org/
-
-
-CREATING BINARY DISTRIBUTIONS WITH EPM
-
- The top level makefile supports generation of many types of binary
- distributions using EPM. To build a binary distribution type:
-
- make <format> ENTER
-
- or
-
- gmake <format> ENTER
-
- for FreeBSD, NetBSD, and OpenBSD. The <format> target is one of the
- following:
-
- epm - Builds a script + tarfile package
- bsd - Builds a *BSD package
- deb - Builds a Debian package
- pkg - Builds a Solaris package
- rpm - Builds a RPM package
- slackware - Build a Slackware package
-
-
-GETTING DEBUG LOGGING FROM CUPS
-
- When configured with the "--enable-debug-printfs" option, CUPS compiles in
- additional debug logging support in the scheduler, CUPS API, and CUPS
- Imaging API. The following environment variables are used to enable and
- control debug logging:
-
- CUPS_DEBUG_FILTER Specifies a POSIX regular expression to control
- which messages are logged.
- CUPS_DEBUG_LEVEL Specifies a number from 0 to 9 to control the
- verbosity of the logging. The default level is 1.
- CUPS_DEBUG_LOG Specifies a log file to use. Specify the name "-"
- to send the messages to stderr. Prefix a filename
- with "+" to append to an existing file.
-
-
-REPORTING PROBLEMS
-
- If you have problems, READ THE DOCUMENTATION FIRST! If the documentation
- does not solve your problems, please post a message on the users forum at:
-
- http://www.cups.org/
-
- Include your operating system and version, compiler and version, and any
- errors or problems you've run into. The "config.log" file and the output
- from the configure script and make should also be sent, as it often helps to
- determine the cause of your problem.
-
- If you are running a version of Linux, be sure to provide the Linux
- distribution you have, too.
diff --git a/Makedefs.in b/Makedefs.in
index dae0e7d..f958c26 100644
--- a/Makedefs.in
+++ b/Makedefs.in
@@ -1,7 +1,7 @@
#
# Common makefile definitions for CUPS.
#
-# Copyright 2007-2014 by Apple Inc.
+# Copyright 2007-2017 by Apple Inc.
# Copyright 1997-2007 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
@@ -38,14 +38,14 @@ SHELL = /bin/sh
# Installation programs...
#
-INSTALL_BIN = $(LIBTOOL) $(INSTALL) -c -m 555 @INSTALL_STRIP@
+INSTALL_BIN = $(LIBTOOL) $(INSTALL) -c -m @CUPS_EXE_FILE_PERM@ @INSTALL_STRIP@
INSTALL_COMPDATA = $(INSTALL) -c -m 444 @INSTALL_GZIP@
INSTALL_CONFIG = $(INSTALL) -c -m @CUPS_CONFIG_FILE_PERM@
INSTALL_DATA = $(INSTALL) -c -m 444
INSTALL_DIR = $(INSTALL) -d
-INSTALL_LIB = $(LIBTOOL) $(INSTALL) -c -m 555 @INSTALL_STRIP@
+INSTALL_LIB = $(LIBTOOL) $(INSTALL) -c -m @CUPS_EXE_FILE_PERM@ @INSTALL_STRIP@
INSTALL_MAN = $(INSTALL) -c -m 444
-INSTALL_SCRIPT = $(INSTALL) -c -m 555
+INSTALL_SCRIPT = $(INSTALL) -c -m @CUPS_EXE_FILE_PERM@
#
# Default user, group, and system groups for the scheduler...
@@ -73,6 +73,14 @@ INSTALL_LANGUAGES = @INSTALL_LANGUAGES@
UNINSTALL_LANGUAGES = @UNINSTALL_LANGUAGES@
#
+# Cross-compilation support: "local" target is used for any tools that are
+# built and run locally.
+#
+
+LOCALTARGET = @LOCALTARGET@
+
+
+#
# Libraries...
#
@@ -141,7 +149,7 @@ IPPFIND_MAN = @IPPFIND_MAN@
LDFLAGS = -L../cgi-bin -L../cups -L../filter -L../ppdc \
-L../scheduler @LDARCHFLAGS@ \
@LDFLAGS@ @RELROFLAGS@ @PIEFLAGS@ $(OPTIM)
-LINKCUPS = @LINKCUPS@ $(LIBGSSAPI) $(DNSSDLIBS) $(LIBZ)
+LINKCUPS = @LINKCUPS@ $(LIBGSSAPI) $(DNSSDLIBS) $(SSLLIBS) $(LIBZ)
LINKCUPSIMAGE = @LINKCUPSIMAGE@
LIBS = $(LINKCUPS) $(COMMONLIBS)
ONDEMANDFLAGS = @ONDEMANDFLAGS@
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..97672e9
--- /dev/null
+++ b/README.md
@@ -0,0 +1,160 @@
+README - CUPS v2.2.4 - 2017-06-30
+=================================
+
+Looking for compile instructions? Read the file "INSTALL.md" instead...
+
+
+INTRODUCTION
+------------
+
+
+CUPS is a standards-based, open source printing system developed by Apple Inc.
+for macOS® and other UNIX®-like operating systems. CUPS uses the Internet
+Printing Protocol ("IPP") and provides System V and Berkeley command-line
+interfaces, a web interface, and a C API to manage printers and print jobs. It
+supports printing to both local (parallel, serial, USB) and networked printers,
+and printers can be shared from one computer to another, even over the Internet!
+
+Internally, CUPS uses PostScript Printer Description ("PPD") files to describe
+printer capabilities and features and a wide variety of generic and device-
+specific programs to convert and print many types of files. Sample drivers are
+included with CUPS to support many Dymo, EPSON, HP, Intellitech, OKIDATA, and
+Zebra printers. Many more drivers are available online and (in some cases) on
+the driver CD-ROM that came with your printer.
+
+CUPS is licensed under the GNU General Public License and GNU Library General
+Public License versions 2. See the file "LICENSE.txt" for more information.
+
+
+READING THE DOCUMENTATION
+-------------------------
+
+Once you have installed the software you can access the documentation (and a
+bunch of other stuff) online at:
+
+ http://localhost:631/
+
+If you're having trouble getting that far, the documentation is located under
+the "doc/help" directory.
+
+Please read the documentation before asking questions.
+
+
+GETTING SUPPORT AND OTHER RESOURCES
+-----------------------------------
+
+If you have problems, READ THE DOCUMENTATION FIRST! We also provide two mailing
+lists which are available at:
+
+ https://lists.cups.org/mailman/listinfo
+
+See the CUPS web site at <https://www.cups.org/> for other resources.
+
+
+SETTING UP PRINTER QUEUES USING YOUR WEB BROWSER
+------------------------------------------------
+
+CUPS includes a web-based administration tool that allows you to manage
+printers, classes, and jobs on your server. Open the following URL in your
+browser to access the printer administration tools:
+
+ http://localhost:631/admin/
+
+*Do not* use the hostname for your machine - it will not work with the default
+CUPS configuration. To enable administration access on other addresses, check
+the "Allow Remote Administration" box and click on the "Change Settings" button.
+
+You will be asked for the administration password (root or any other user in the
+sys/system/root/admin/lpadmin group on your system) when performing any
+administrative function.
+
+
+SETTING UP PRINTER QUEUES FROM THE COMMAND-LINE
+-----------------------------------------------
+
+CUPS works best with PPD (PostScript Printer Description) files. In a pinch you
+can also use System V style printer interface scripts.
+
+CUPS includes several sample PPD files you can use:
+
+ Driver PPD Name
+ ----------------------------- ------------------------------
+ Dymo Label Printers drv:///sample.drv/dymo.ppd
+ Intellitech Intellibar drv:///sample.drv/intelbar.ppd
+ EPSON 9-pin Series drv:///sample.drv/epson9.ppd
+ EPSON 24-pin Series drv:///sample.drv/epson24.ppd
+ Generic PCL Laser Printer drv:///sample.drv/generpcl.ppd
+ Generic PostScript Printer drv:///sample.drv/generic.ppd
+ HP DeskJet Series drv:///sample.drv/deskjet.ppd
+ HP LaserJet Series drv:///sample.drv/laserjet.ppd
+ OKIDATA 9-Pin Series drv:///sample.drv/okidata9.ppd
+ OKIDATA 24-Pin Series drv:///sample.drv/okidat24.ppd
+ Zebra CPCL Label Printer drv:///sample.drv/zebracpl.ppd
+ Zebra EPL1 Label Printer drv:///sample.drv/zebraep1.ppd
+ Zebra EPL2 Label Printer drv:///sample.drv/zebraep2.ppd
+ Zebra ZPL Label Printer drv:///sample.drv/zebra.ppd
+
+Run the "lpinfo -m" command to list the available drivers:
+
+ lpinfo -m
+
+Run the "lpinfo -v" command to list the available printers:
+
+ lpinfo -v
+
+Then use the correct URI to add the printer using the "lpadmin" command:
+
+ lpadmin -p printername -E -v device-uri -m ppd-name
+
+Network printers typically use "socket" or "lpd" URIs:
+
+ lpadmin -p printername -E -v socket://11.22.33.44 -m ppd-name
+ lpadmin -p printername -E -v lpd://11.22.33.44/ -m ppd-name
+
+The sample drivers provide basic printing capabilities, but generally do not
+exercise the full potential of the printers or CUPS.
+
+CUPS also supports IPP Everywhere printers using the "everywhere" model, for
+example:
+
+ lpadmin -p printername -E -v ipp://11.22.33.44/ipp/print -m everywhere
+
+
+PRINTING FILES
+--------------
+
+CUPS provides both the System V "lp" and Berkeley "lpr" commands for printing:
+
+ lp filename
+ lpr filename
+
+Both the "lp" and "lpr" commands support printing options for the driver:
+
+ lp -o media=A4 -o resolution=600dpi filename
+ lpr -o media=A4 -o resolution=600dpi filename
+
+CUPS recognizes many types of images files as well as PDF, PostScript, and text
+files, so you can print those files directly rather than through an application.
+
+If you have an application that generates output specifically for your printer
+then you need to use the "-oraw" or "-l" options:
+
+ lp -o raw filename
+ lpr -l filename
+
+This will prevent the filters from misinterpreting your print file.
+
+
+LEGAL STUFF
+-----------
+
+CUPS is copyright © 2007-2017 by Apple Inc. CUPS and the CUPS logo are
+trademarks of Apple Inc.
+
+The MD5 Digest code is Copyright 1999 Aladdin Enterprises.
+
+CUPS is provided under the terms of version 2 of the GNU General Public License
+and GNU Library General Public License. This program is distributed in the hope
+that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+"doc/help/license.html" or "LICENSE.txt" files for more information.
diff --git a/README.txt b/README.txt
deleted file mode 100644
index a6a6079..0000000
--- a/README.txt
+++ /dev/null
@@ -1,157 +0,0 @@
-README - CUPS v2.2.3 - 2017-03-28
----------------------------------
-
-Looking for compile instructions? Read the file "INSTALL.txt" instead...
-
-
-INTRODUCTION
-
- CUPS is a standards-based, open source printing system developed by Apple
- Inc. for macOS® and other UNIX®-like operating systems. CUPS uses the
- Internet Printing Protocol ("IPP") and provides System V and Berkeley
- command-line interfaces, a web interface, and a C API to manage printers and
- print jobs. It supports printing to both local (parallel, serial, USB) and
- networked printers, and printers can be shared from one computer to another,
- even over the Internet!
-
- Internally, CUPS uses PostScript Printer Description ("PPD") files to
- describe printer capabilities and features and a wide variety of generic
- and device-specific programs to convert and print many types of files.
- Sample drivers are included with CUPS to support many Dymo, EPSON, HP,
- Intellitech, OKIDATA, and Zebra printers. Many more drivers are available
- online and (in some cases) on the driver CD-ROM that came with your printer.
-
- CUPS is licensed under the GNU General Public License and GNU Library
- General Public License versions 2. See the file "LICENSE.txt" for more
- information.
-
-
-READING THE DOCUMENTATION
-
- Once you have installed the software you can access the documentation (and
- a bunch of other stuff) online at:
-
- http://localhost:631/
-
- If you're having trouble getting that far, the documentation is located
- under the "doc/help" directory.
-
- Please read the documentation before asking questions.
-
-
-GETTING SUPPORT AND OTHER RESOURCES
-
- If you have problems, READ THE DOCUMENTATION FIRST! We also provide two
- mailing lists which are available at:
-
- http://lists.cups.org/mailman/listinfo
-
- See the CUPS web site at "http://www.cups.org/" for other resources.
-
-
-SETTING UP PRINTER QUEUES USING YOUR WEB BROWSER
-
- CUPS includes a web-based administration tool that allows you to manage
- printers, classes, and jobs on your server. Open the following URL in your
- browser to access the printer administration tools:
-
- http://localhost:631/admin/
-
- DO NOT use the hostname for your machine - it will not work with the default
- CUPS configuration. To enable administration access on other addresses,
- check the "Allow Remote Administration" box and click on the "Change
- Settings" button.
-
- You will be asked for the administration password (root or any other user in
- the sys/system/root/admin/lpadmin group on your system) when performing any
- administrative function.
-
-
-SETTING UP PRINTER QUEUES FROM THE COMMAND-LINE
-
- CUPS works best with PPD (PostScript Printer Description) files. In a pinch
- you can also use System V style printer interface scripts.
-
- CUPS includes several sample PPD files you can use:
-
- Driver PPD Name
- ----------------------------- ------------------------------
- Dymo Label Printers drv:///sample.drv/dymo.ppd
- Intellitech Intellibar drv:///sample.drv/intelbar.ppd
- EPSON 9-pin Series drv:///sample.drv/epson9.ppd
- EPSON 24-pin Series drv:///sample.drv/epson24.ppd
- Generic PCL Laser Printer drv:///sample.drv/generpcl.ppd
- Generic PostScript Printer drv:///sample.drv/generic.ppd
- HP DeskJet Series drv:///sample.drv/deskjet.ppd
- HP LaserJet Series drv:///sample.drv/laserjet.ppd
- OKIDATA 9-Pin Series drv:///sample.drv/okidata9.ppd
- OKIDATA 24-Pin Series drv:///sample.drv/okidat24.ppd
- Zebra CPCL Label Printer drv:///sample.drv/zebracpl.ppd
- Zebra EPL1 Label Printer drv:///sample.drv/zebraep1.ppd
- Zebra EPL2 Label Printer drv:///sample.drv/zebraep2.ppd
- Zebra ZPL Label Printer drv:///sample.drv/zebra.ppd
-
- Run the "lpinfo -m" command to list the available drivers:
-
- lpinfo -m
-
- Run the "lpinfo -v" command to list the available printers:
-
- lpinfo -v
-
- Then use the correct URI to add the printer using the "lpadmin" command:
-
- lpadmin -p printername -E -v device-uri -m ppd-name
-
- Network printers typically use "socket" or "lpd" URIs:
-
- lpadmin -p printername -E -v socket://11.22.33.44 -m ppd-name
- lpadmin -p printername -E -v lpd://11.22.33.44/ -m ppd-name
-
- The sample drivers provide basic printing capabilities, but generally do not
- exercise the full potential of the printers or CUPS.
-
- CUPS also supports IPP Everywhere printers using the "everywhere" model,
- for example:
-
- lpadmin -p printername -E -v ipp://11.22.33.44/ipp/print -m everywhere
-
-
-PRINTING FILES
-
- CUPS provides both the System V "lp" and Berkeley "lpr" commands for
- printing:
-
- lp filename
- lpr filename
-
- Both the "lp" and "lpr" commands support printing options for the driver:
-
- lp -o media=A4 -o resolution=600dpi filename
- lpr -o media=A4 -o resolution=600dpi filename
-
- CUPS recognizes many types of images files as well as PDF, PostScript,
- and text files, so you can print those files directly rather than through
- an application.
-
- If you have an application that generates output specifically for your
- printer then you need to use the "-oraw" or "-l" options:
-
- lp -o raw filename
- lpr -l filename
-
- This will prevent the filters from misinterpreting your print file.
-
-
-LEGAL STUFF
-
- CUPS is Copyright 2007-2017 by Apple Inc. CUPS and the CUPS logo are
- trademarks of Apple Inc.
-
- The MD5 Digest code is Copyright 1999 Aladdin Enterprises.
-
- CUPS is provided under the terms of version 2 of the GNU General Public
- License and GNU Library General Public License. This program is distributed
- in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the "doc/help/license.html" or "LICENSE.txt" files for more information.
diff --git a/backend/dnssd.c b/backend/dnssd.c
index 0aa01a9..849595d 100644
--- a/backend/dnssd.c
+++ b/backend/dnssd.c
@@ -1,7 +1,7 @@
/*
* DNS-SD discovery backend for CUPS.
*
- * Copyright 2008-2015 by Apple Inc.
+ * Copyright 2008-2017 by Apple Inc.
*
* These coded instructions, statements, and computer programs are the
* property of Apple Inc. and are protected by Federal copyright
@@ -949,7 +949,7 @@ get_device(cups_array_t *devices, /* I - Device array */
*
* Note: This function is needed because avahi_simple_poll_iterate is broken
* and always uses a timeout of 0 (!) milliseconds.
- * (Avahi Ticket #364)
+ * (https://github.com/lathiat/avahi/issues/127)
*/
static int /* O - Number of file descriptors matching */
diff --git a/backend/org.cups.usb-quirks b/backend/org.cups.usb-quirks
index d126a32..b15a75c 100644
--- a/backend/org.cups.usb-quirks
+++ b/backend/org.cups.usb-quirks
@@ -250,3 +250,6 @@
# Kyocera Ecosys P6026cdn (Issue #4900)
0x0482 0x063f no-reattach
+
+# Lexmark E260dn (Issue #4994)
+0x043d 0x0123 no-reattach
diff --git a/cgi-bin/help.c b/cgi-bin/help.c
index 07f6f27..df33926 100644
--- a/cgi-bin/help.c
+++ b/cgi-bin/help.c
@@ -271,7 +271,7 @@ main(int argc, /* I - Number of command-line arguments */
section = n->section;
}
- if (!topic || strcmp(n->section, topic))
+ if (!topic || !n->section || strcmp(n->section, topic))
continue;
/*
diff --git a/conf/mime.types b/conf/mime.types
index 1c50f16..fa53714 100644
--- a/conf/mime.types
+++ b/conf/mime.types
@@ -5,7 +5,7 @@
# VERSIONS OF CUPS. Instead, create a "local.types" file that
# reflects your local configuration changes.
#
-# Copyright 2007-2016 by Apple Inc.
+# Copyright 2007-2017 by Apple Inc.
# Copyright 1997-2007 by Easy Software Products.
#
# These coded instructions, statements, and computer programs are the
@@ -79,12 +79,6 @@ application/postscript ai eps ps string(0,%!) string(0,<04>%!) \
(contains(0,4096,<0a>%!) + \
!contains(0,4096,"ENTER LANGUAGE")))
-application/g-code gcode
-application/sla stl string(0,"solid ") + contains(0,4096,"facet") + contains(0,4096,"vertex")
-application/vnd.makerbot-s3g x3g
-model/amf amf
-model/vnd.collada+xml dae
-
########################################################################
#
@@ -131,7 +125,7 @@ application/x-shell sh printable(0,1024) + string(0,#!) +\
contains(2,80,/sh) contains(2,80,/zsh))
application/x-csource c cxx cpp cc C h hpp \
printable(0,1024) + ! css + \
- (string(0,/*) string(0,//)
+ (string(0,/*) string(0,//) \
string(0,#include) contains(0,1024,<0a>#include) \
string(0,#define) contains(0,1024,<0a>#define))
text/html html htm printable(0,1024) +\
diff --git a/config-scripts/cups-common.m4 b/config-scripts/cups-common.m4
index b5075fd..8136ce1 100644
--- a/config-scripts/cups-common.m4
+++ b/config-scripts/cups-common.m4
@@ -1,7 +1,7 @@
dnl
dnl Common configuration stuff for CUPS.
dnl
-dnl Copyright 2007-2016 by Apple Inc.
+dnl Copyright 2007-2017 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
@@ -161,7 +161,7 @@ AC_CHECK_FUNCS(statfs statvfs)
dnl Checks for string functions.
AC_CHECK_FUNCS(strdup strlcat strlcpy)
-if test "$uname" = "HP-UX" -a "$uversion" = "1020"; then
+if test "$host_os_name" = "hp-ux" -a "$host_os_version" = "1020"; then
echo Forcing snprintf emulation for HP-UX.
else
AC_CHECK_FUNCS(snprintf vsnprintf)
@@ -180,8 +180,8 @@ dnl Check for vsyslog function.
AC_CHECK_FUNCS(vsyslog)
dnl Checks for signal functions.
-case "$uname" in
- Linux | GNU)
+case "$host_os_name" in
+ linux* | gnu*)
# Do not use sigset on Linux or GNU HURD
;;
*)
@@ -229,7 +229,7 @@ AC_SUBST(LIBUSB)
AC_SUBST(USBQUIRKS)
if test "x$PKGCONFIG" != x; then
- if test x$enable_libusb != xno -a $uname != Darwin; then
+ if test x$enable_libusb != xno -a $host_os_name != darwin; then
AC_MSG_CHECKING(for libusb-1.0)
if $PKGCONFIG --exists libusb-1.0; then
AC_MSG_RESULT(yes)
@@ -277,8 +277,8 @@ AC_SUBST(INSTALL_GZIP)
AC_SUBST(LIBZ)
dnl Flags for "ar" command...
-case $uname in
- Darwin* | *BSD*)
+case $host_os_name in
+ darwin* | *bsd*)
ARFLAGS="-rcv"
;;
*)
@@ -313,7 +313,7 @@ DBUSDIR=""
DBUS_NOTIFIER=""
DBUS_NOTIFIERLIBS=""
-if test "x$enable_dbus" != xno -a "x$PKGCONFIG" != x -a "x$uname" != xDarwin; then
+if test "x$enable_dbus" != xno -a "x$PKGCONFIG" != x -a "x$host_os_name" != xdarwin; then
AC_MSG_CHECKING(for DBUS)
if $PKGCONFIG --exists dbus-1; then
AC_MSG_RESULT(yes)
@@ -347,8 +347,8 @@ CUPS_DEFAULT_SYSTEM_AUTHKEY=""
CUPS_SYSTEM_AUTHKEY=""
INSTALLXPC=""
-case $uname in
- Darwin*)
+case $host_os_name in
+ darwin*)
BACKLIBS="$BACKLIBS -framework IOKit"
SERVERLIBS="$SERVERLIBS -framework IOKit -weak_framework ApplicationServices"
LIBS="-framework SystemConfiguration -framework CoreFoundation -framework Security $LIBS"
@@ -406,10 +406,10 @@ case $uname in
AC_CHECK_HEADER(Security/SecBasePriv.h,AC_DEFINE(HAVE_SECBASEPRIV_H))
dnl Check for sandbox/Seatbelt support
- if test $uversion -ge 100; then
+ if test $host_os_version -ge 100; then
AC_CHECK_HEADER(sandbox.h,AC_DEFINE(HAVE_SANDBOX_H))
fi
- if test $uversion -ge 110 -a $uversion -lt 120; then
+ if test $host_os_version -ge 110 -a $host_os_version -lt 120; then
# Broken public headers in 10.7.x...
AC_MSG_CHECKING(for sandbox/private.h presence)
if test -f /usr/local/include/sandbox/private.h; then
diff --git a/config-scripts/cups-compiler.m4 b/config-scripts/cups-compiler.m4
index d9490a7..bf4411e 100644
--- a/config-scripts/cups-compiler.m4
+++ b/config-scripts/cups-compiler.m4
@@ -1,7 +1,7 @@
dnl
dnl Compiler stuff for CUPS.
dnl
-dnl Copyright 2007-2014 by Apple Inc.
+dnl Copyright 2007-2017 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
@@ -46,6 +46,10 @@ fi
dnl Unit tests take up time during a compile...
if test x$enable_unit_tests = xyes; then
+ if test "$build" != "$host"; then
+ AC_MSG_ERROR([Sorry, cannot build unit tests when cross-compiling.])
+ fi
+
UNITTESTS="unittests"
else
UNITTESTS=""
@@ -63,7 +67,7 @@ else
fi
if test -z "$with_ldarchflags"; then
- if test "$uname" = Darwin; then
+ if test "$host_os_name" = darwin; then
# Only create Intel programs by default
LDARCHFLAGS="`echo $ARCHFLAGS | sed -e '1,$s/-arch ppc64//'`"
else
@@ -130,8 +134,8 @@ if test -n "$GCC"; then
# Not available to LSB binaries...
AC_MSG_CHECKING(whether compiler supports -fPIE)
OLDCFLAGS="$CFLAGS"
- case "$uname" in
- Darwin*)
+ case "$host_os_name" in
+ darwin*)
CFLAGS="$CFLAGS -fPIE -Wl,-pie"
AC_TRY_COMPILE(,,[
PIEFLAGS="-fPIE -Wl,-pie"
@@ -187,8 +191,8 @@ if test -n "$GCC"; then
fi
fi
- case "$uname" in
- Darwin*)
+ case "$host_os_name" in
+ darwin*)
# -D_FORTIFY_SOURCE=2 adds additional object size
# checking, basically wrapping all string functions
# with buffer-limited ones. Not strictly needed for
@@ -197,7 +201,7 @@ if test -n "$GCC"; then
CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2"
;;
- Linux*)
+ linux*)
# The -z relro option is provided by the Linux linker command to
# make relocatable data read-only.
if test x$enable_relro = xyes; then
@@ -207,8 +211,8 @@ if test -n "$GCC"; then
esac
else
# Add vendor-specific compiler options...
- case $uname in
- SunOS*)
+ case $host_os_name in
+ sunos*)
# Solaris
if test -z "$OPTIM"; then
if test "x$with_optim" = x; then
@@ -235,8 +239,8 @@ else
fi
# Add general compiler options per platform...
-case $uname in
- Linux*)
+case $host_os_name in
+ linux*)
# glibc 2.8 and higher breaks peer credentials unless you
# define _GNU_SOURCE...
OPTIM="$OPTIM -D_GNU_SOURCE"
diff --git a/config-scripts/cups-defaults.m4 b/config-scripts/cups-defaults.m4
index c29d587..9fd9968 100644
--- a/config-scripts/cups-defaults.m4
+++ b/config-scripts/cups-defaults.m4
@@ -1,7 +1,7 @@
dnl
dnl Default cupsd configuration settings for CUPS.
dnl
-dnl Copyright 2007-2015 by Apple Inc.
+dnl Copyright 2007-2017 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
@@ -25,7 +25,7 @@ AC_SUBST(LANGUAGES)
dnl macOS bundle-based localization support
AC_ARG_WITH(bundledir, [ --with-bundledir set macOS localization bundle directory ],
CUPS_BUNDLEDIR="$withval",
- if test "x$uname" = xDarwin -a $uversion -ge 100; then
+ if test "x$host_os_name" = xdarwin -a $host_os_version -ge 100; then
CUPS_BUNDLEDIR="/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A"
LANGUAGES=""
else
@@ -37,21 +37,41 @@ if test "x$CUPS_BUNDLEDIR" != x; then
AC_DEFINE_UNQUOTED(CUPS_BUNDLEDIR, "$CUPS_BUNDLEDIR")
fi
+dnl Default executable file permissions
+AC_ARG_WITH(exe_file_perm, [ --with-exe-file-perm set default exectuable permissions value, default=0555],
+ CUPS_EXE_FILE_PERM="$withval",
+ [case "$host_os_name" in
+ linux* | gnu*)
+ CUPS_EXE_FILE_PERM="755"
+ ;;
+ *)
+ CUPS_EXE_FILE_PERM="555"
+ ;;
+ esac])
+AC_SUBST(CUPS_EXE_FILE_PERM)
+
dnl Default ConfigFilePerm
AC_ARG_WITH(config_file_perm, [ --with-config-file-perm set default ConfigFilePerm value, default=0640],
CUPS_CONFIG_FILE_PERM="$withval",
- if test "x$uname" = xDarwin; then
+ [if test "x$host_os_name" = xdarwin; then
CUPS_CONFIG_FILE_PERM="644"
else
CUPS_CONFIG_FILE_PERM="640"
- fi)
+ fi])
AC_SUBST(CUPS_CONFIG_FILE_PERM)
AC_DEFINE_UNQUOTED(CUPS_DEFAULT_CONFIG_FILE_PERM, 0$CUPS_CONFIG_FILE_PERM)
dnl Default permissions for cupsd
AC_ARG_WITH(cupsd_file_perm, [ --with-cupsd-file-perm set default cupsd permissions, default=0500],
CUPS_CUPSD_FILE_PERM="$withval",
- CUPS_CUPSD_FILE_PERM="500")
+ [case "$host_os_name" in
+ linux* | gnu*)
+ CUPS_CUPSD_FILE_PERM="700"
+ ;;
+ *)
+ CUPS_CUPSD_FILE_PERM="500"
+ ;;
+ esac])
AC_SUBST(CUPS_CUPSD_FILE_PERM)
dnl Default LogFilePerm
@@ -141,7 +161,7 @@ dnl Determine the correct username and group for this OS...
AC_ARG_WITH(cups_user, [ --with-cups-user set default user for CUPS],
CUPS_USER="$withval",
AC_MSG_CHECKING(for default print user)
- if test x$uname = xDarwin; then
+ if test x$host_os_name = xdarwin; then
if test x`id -u _lp 2>/dev/null` = x; then
CUPS_USER="lp";
else
@@ -174,7 +194,7 @@ fi
AC_ARG_WITH(cups_group, [ --with-cups-group set default group for CUPS],
CUPS_GROUP="$withval",
AC_MSG_CHECKING(for default print group)
- if test x$uname = xDarwin; then
+ if test x$host_os_name = xdarwin; then
if test x`id -g _lp 2>/dev/null` = x; then
CUPS_GROUP="lp";
else
@@ -207,7 +227,7 @@ fi
AC_ARG_WITH(system_groups, [ --with-system-groups set default system groups for CUPS],
CUPS_SYSTEM_GROUPS="$withval",
- if test x$uname = xDarwin; then
+ if test x$host_os_name = xdarwin; then
CUPS_SYSTEM_GROUPS="admin"
else
AC_MSG_CHECKING(for default system groups)
@@ -260,15 +280,15 @@ AC_ARG_WITH(printcap, [ --with-printcap set default printcap file],
if test x$default_printcap != xno; then
if test "x$default_printcap" = "xdefault"; then
- case $uname in
- Darwin*)
- if test $uversion -ge 90; then
+ case $host_os_name in
+ darwin*)
+ if test $host_os_version -ge 90; then
CUPS_DEFAULT_PRINTCAP="/Library/Preferences/org.cups.printers.plist"
else
CUPS_DEFAULT_PRINTCAP="/etc/printcap"
fi
;;
- SunOS*)
+ sunos*)
CUPS_DEFAULT_PRINTCAP="/etc/printers.conf"
;;
*)
@@ -292,8 +312,8 @@ AC_ARG_WITH(lpdconfigfile, [ --with-lpdconfigfile set default LPDConfigFile
if test x$default_lpdconfigfile != xno; then
if test "x$default_lpdconfigfile" = "xdefault"; then
- case $uname in
- Darwin*)
+ case $host_os_name in
+ darwin*)
CUPS_DEFAULT_LPD_CONFIG_FILE="launchd:///System/Library/LaunchDaemons/org.cups.cups-lpd.plist"
;;
*)
@@ -360,7 +380,7 @@ AC_ARG_WITH(snmp-address, [ --with-snmp-address set SNMP query address, def
else
CUPS_SNMP_ADDRESS="Address $withval"
fi,
- if test "x$uname" = xDarwin; then
+ if test "x$host_os_name" = xdarwin; then
CUPS_SNMP_ADDRESS=""
else
CUPS_SNMP_ADDRESS="Address @LOCAL"
@@ -393,7 +413,7 @@ case "x$enable_webif" in
CUPS_DEFAULT_WEBIF=1
;;
*)
- if test $uname = Darwin; then
+ if test $host_os_name = darwin; then
CUPS_WEBIF=No
CUPS_DEFAULT_WEBIF=0
else
diff --git a/config-scripts/cups-directories.m4 b/config-scripts/cups-directories.m4
index 2ba0174..c995507 100644
--- a/config-scripts/cups-directories.m4
+++ b/config-scripts/cups-directories.m4
@@ -1,7 +1,7 @@
dnl
dnl Directory stuff for CUPS.
dnl
-dnl Copyright 2007-2016 by Apple Inc.
+dnl Copyright 2007-2017 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
@@ -74,7 +74,7 @@ fi
dnl Fix "localstatedir" variable if it hasn't been specified...
if test "$localstatedir" = "\${prefix}/var"; then
if test "$prefix" = "/"; then
- if test "$uname" = Darwin; then
+ if test "$host_os_name" = darwin; then
localstatedir="/private/var"
else
localstatedir="/var"
@@ -87,7 +87,7 @@ fi
dnl Fix "sysconfdir" variable if it hasn't been specified...
if test "$sysconfdir" = "\${prefix}/etc"; then
if test "$prefix" = "/"; then
- if test "$uname" = Darwin; then
+ if test "$host_os_name" = darwin; then
sysconfdir="/private/etc"
else
sysconfdir="/etc"
@@ -99,8 +99,8 @@ fi
dnl Fix "libdir" variable...
if test "$libdir" = "\${exec_prefix}/lib"; then
- case "$uname" in
- Linux*)
+ case "$host_os_name" in
+ linux*)
if test -d /usr/lib64 -a ! -d /usr/lib64/fakeroot; then
libdir="$exec_prefix/lib64"
fi
@@ -165,7 +165,7 @@ dnl Setup default locations...
AC_ARG_WITH(cachedir, [ --with-cachedir set path for cache files],cachedir="$withval",cachedir="")
if test x$cachedir = x; then
- if test "x$uname" = xDarwin; then
+ if test "x$host_os_name" = xdarwin; then
CUPS_CACHEDIR="$localstatedir/spool/cups/cache"
else
CUPS_CACHEDIR="$localstatedir/cache/cups"
@@ -230,8 +230,8 @@ AC_DEFINE_UNQUOTED(CUPS_FONTPATH, "$CUPS_FONTPATH")
# Locale data
if test "$localedir" = "\${datarootdir}/locale"; then
- case "$uname" in
- Linux | GNU | *BSD* | Darwin*)
+ case "$host_os_name" in
+ linux* | gnu* | *bsd* | darwin*)
CUPS_LOCALEDIR="$datarootdir/locale"
;;
@@ -265,8 +265,8 @@ AC_DEFINE_UNQUOTED(CUPS_REQUESTS, "$localstatedir/spool/cups")
AC_SUBST(CUPS_REQUESTS)
# Server executables...
-case "$uname" in
- *BSD* | Darwin*)
+case "$host_os_name" in
+ *bsd* | darwin*)
# *BSD and Darwin (macOS)
INSTALL_SYSV=""
CUPS_SERVERBIN="$exec_prefix/libexec/cups"
@@ -289,8 +289,8 @@ AC_SUBST(CUPS_SERVERROOT)
# Transient run-time state
AC_ARG_WITH(rundir, [ --with-rundir set transient run-time state directory],CUPS_STATEDIR="$withval",[
- case "$uname" in
- Darwin*)
+ case "$host_os_name" in
+ darwin*)
# Darwin (macOS)
CUPS_STATEDIR="$CUPS_SERVERROOT"
;;
diff --git a/config-scripts/cups-dnssd.m4 b/config-scripts/cups-dnssd.m4
index dc9cf81..31062f9 100644
--- a/config-scripts/cups-dnssd.m4
+++ b/config-scripts/cups-dnssd.m4
@@ -1,7 +1,7 @@
dnl
dnl DNS Service Discovery (aka Bonjour) stuff for CUPS.
dnl
-dnl Copyright 2007-2016 by Apple Inc.
+dnl Copyright 2007-2017 by Apple Inc.
dnl
dnl These coded instructions, statements, and computer programs are the
dnl property of Apple Inc. and are protected by Federal copyright
@@ -24,7 +24,7 @@ DNSSD_BACKEND=""
IPPFIND_BIN=""
IPPFIND_MAN=""
-if test "x$PKGCONFIG" != x -a x$enable_avahi != xno -a x$uname != xDarwin; then
+if test "x$PKGCONFIG" != x -a x$enable_avahi != xno -a x$host_os_name != xdarwin; then
AC_MSG_CHECKING(for Avahi)
if $PKGCONFIG --exists avahi-client; then
AC_MSG_RESULT(yes)
@@ -41,8 +41,8 @@ fi
if test "x$DNSSD_BACKEND" = x -a x$enable_dnssd != xno; then
AC_CHECK_HEADER(dns_sd.h, [
- case "$uname" in
- Darwin*)
+ case "$host_os_name" in
+ darwin*)
# Darwin and macOS...
AC_DEFINE(HAVE_DNSSD)
DNSSDLIBS="-framework CoreFoundation -framework SystemConfiguration"
diff --git a/config-scripts/cups-gssapi.m4 b/config-scripts/cups-gssapi.m4
index f2687f6..974902c 100644
--- a/config-scripts/cups-gssapi.m4
+++ b/config-scripts/cups-gssapi.m4
@@ -1,7 +1,7 @@
dnl
dnl GSSAPI/Kerberos library detection for CUPS.
dnl
-dnl Copyright 2007-2013 by Apple Inc.
+dnl Copyright 2007-2017 by Apple Inc.
dnl Copyright 2006-2007 by Easy Software Products.
dnl
dnl This file contains Kerberos support code, copyright 2006 by
@@ -22,8 +22,8 @@ AC_SUBST(LIBGSSAPI)
if test x$enable_gssapi != xno; then
AC_PATH_TOOL(KRB5CONFIG, krb5-config)
if test "x$KRB5CONFIG" != x; then
- case "$uname" in
- Darwin)
+ case "$host_os_name" in
+ darwin)
# macOS weak-links to the Kerberos framework...
LIBGSSAPI="-weak_framework Kerberos"
AC_MSG_CHECKING(for GSS framework)
@@ -34,7 +34,7 @@ if test x$enable_gssapi != xno; then
AC_MSG_RESULT(no)
fi
;;
- SunOS*)
+ sunos*)
# Solaris has a non-standard krb5-config, don't use it!
AC_CHECK_LIB(gss, gss_display_status,
AC_DEFINE(HAVE_GSSAPI, 1, [Whether GSSAPI is available])
@@ -52,13 +52,13 @@ if test x$enable_gssapi != xno; then
AC_DEFINE(HAVE_GSSAPI, 1, [Whether GSSAPI is available])
else
# Check for vendor-specific implementations...
- case "$uname" in
- HP-UX*)
+ case "$host_os_name" in
+ hp-ux*)
AC_CHECK_LIB(gss, gss_display_status,
AC_DEFINE(HAVE_GSSAPI, 1, [Whether GSSAPI is available])
LIBGSSAPI="-lgss -lgssapi_krb5")
;;
- SunOS*)
+ sunos*)
AC_CHECK_LIB(gss, gss_display_status,
AC_DEFINE(HAVE_GSSAPI, 1, [Whether GSSAPI is available])
LIBGSSAPI="-lgss")
diff --git a/config-scripts/cups-manpages.m4 b/config-scripts/cups-manpages.m4
index 00a8c76..e693e3a 100644
--- a/config-scripts/cups-manpages.m4
+++ b/config-scripts/cups-manpages.m4
@@ -1,7 +1,7 @@
dnl
dnl Manpage stuff for CUPS.
dnl
-dnl Copyright 2007-2016 by Apple Inc.
+dnl Copyright 2007-2017 by Apple Inc.
dnl Copyright 1997-2006 by Easy Software Products, all rights reserved.
dnl
dnl These coded instructions, statements, and computer programs are the
@@ -19,8 +19,8 @@ if test "$mandir" = "\${datarootdir}/man" -a "$prefix" = "/"; then
fi
if test "$mandir" = "\${prefix}/man" -a "$prefix" = "/"; then
- case "$uname" in
- Darwin* | Linux | GNU | *BSD*)
+ case "$host_os_name" in
+ darwin* | linux* | gnu* | *bsd*)
# Darwin, macOS, Linux, GNU HURD, and *BSD
mandir="/usr/share/man"
AMANDIR="/usr/share/man"
@@ -42,8 +42,8 @@ AC_SUBST(AMANDIR)
AC_SUBST(PMANDIR)
dnl Setup manpage extensions...
-case "$uname" in
- SunOS*)
+case "$host_os_name" in
+ sunos*)
# Solaris
MAN1EXT=1
MAN5EXT=5
@@ -51,7 +51,7 @@ case "$uname" in
MAN8EXT=1m
MAN8DIR=1m
;;
- Linux* | GNU* | Darwin*)
+ linux* | gnu* | darwin*)
# Linux, GNU Hurd, and macOS
MAN1EXT=1.gz
MAN5EXT=5.gz
diff --git a/config-scripts/cups-network.m4 b/config-scripts/cups-network.m4
index d295368..081ef4d 100644
--- a/config-scripts/cups-network.m4
+++ b/config-scripts/cups-network.m4
@@ -28,7 +28,7 @@ AC_SEARCH_LIBS(__res_init, resolv bind, AC_DEFINE(HAVE_RES_INIT),
# Tru64 5.1b leaks file descriptors with these functions; disable until
# we can come up with a test for this...
-if test "$uname" != "OSF1"; then
+if test "$host_os_name" != "osf1"; then
AC_SEARCH_LIBS(getaddrinfo, nsl, AC_DEFINE(HAVE_GETADDRINFO))
AC_SEARCH_LIBS(getnameinfo, nsl, AC_DEFINE(HAVE_GETNAMEINFO))
fi
@@ -45,8 +45,8 @@ AC_ARG_WITH(domainsocket, [ --with-domainsocket set unix domain socket name
if test x$enable_domainsocket != xno -a x$default_domainsocket != xno; then
if test "x$default_domainsocket" = x; then
- case "$uname" in
- Darwin*)
+ case "$host_os_name" in
+ darwin*)
# Darwin and macOS do their own thing...
CUPS_DEFAULT_DOMAINSOCKET="$localstatedir/run/cupsd"
;;
diff --git a/config-scripts/cups-opsys.m4 b/config-scripts/cups-opsys.m4
index 655a95d..d854547 100644
--- a/config-scripts/cups-opsys.m4
+++ b/config-scripts/cups-opsys.m4
@@ -1,7 +1,7 @@
dnl
dnl Operating system stuff for CUPS.
dnl
-dnl Copyright 2007-2012 by Apple Inc.
+dnl Copyright 2007-2017 by Apple Inc.
dnl Copyright 1997-2006 by Easy Software Products, all rights reserved.
dnl
dnl These coded instructions, statements, and computer programs are the
@@ -11,23 +11,27 @@ dnl which should have been included with this file. If this file is
dnl missing or damaged, see the license at "http://www.cups.org/".
dnl
-dnl Get the operating system, version number, and architecture...
-uname=`uname`
-uversion=`uname -r | sed -e '1,$s/^[[^0-9]]*\([[0-9]]*\)\.\([[0-9]]*\).*/\1\2/'`
-uarch=`uname -m`
+dnl Get the build and host platforms and split the host_os value
+AC_CANONICAL_BUILD
+AC_CANONICAL_HOST
-case "$uname" in
- Darwin*)
- uname="Darwin"
- if test $uversion -lt 120; then
- AC_MSG_ERROR([Sorry, this version of CUPS requires macOS 10.8 or higher.])
- fi
- ;;
+[host_os_name=`echo $host_os | sed -e '1,$s/[0-9.]*$//g'`]
+[host_os_version=`echo $host_os | sed -e '1,$s/^[^0-9.]*//g' | awk -F. '{print $1 $2}'`]
+# Linux often does not yield an OS version we can use...
+if test "x$host_os_version" = x; then
+ host_os_version="0"
+fi
- GNU* | GNU/*)
- uname="GNU"
- ;;
- Linux*)
- uname="Linux"
- ;;
-esac
+if test "$host_os_name" = darwin -a $host_os_version -lt 120; then
+ AC_MSG_ERROR([Sorry, this version of CUPS requires macOS 10.8 or higher.])
+fi
+
+dnl Determine whether we are cross-compiling...
+if test "$build" = "$host"; then
+ # No, build local targets
+ LOCALTARGET="local"
+else
+ # Yes, don't build local targets
+ LOCALTARGET=""
+fi
+AC_SUBST(LOCALTARGET)
diff --git a/config-scripts/cups-pam.m4 b/config-scripts/cups-pam.m4
index 00ada06..0adec38 100644
--- a/config-scripts/cups-pam.m4
+++ b/config-scripts/cups-pam.m4
@@ -1,7 +1,7 @@
dnl
dnl PAM stuff for CUPS.
dnl
-dnl Copyright 2007-2013 by Apple Inc.
+dnl Copyright 2007-2017 by Apple Inc.
dnl Copyright 1997-2005 by Easy Software Products, all rights reserved.
dnl
dnl These coded instructions, statements, and computer programs are the
@@ -52,8 +52,8 @@ if test x$enable_pam != xno; then
LIBS="$SAVELIBS"
- case "$uname" in
- Darwin*)
+ case "$host_os_name" in
+ darwin*)
# Darwin/macOS
if test "x$with_pam_module" != x; then
PAMFILE="pam.$with_pam_module"
diff --git a/config-scripts/cups-sharedlibs.m4 b/config-scripts/cups-sharedlibs.m4
index 2362e38..6e6b582 100644
--- a/config-scripts/cups-sharedlibs.m4
+++ b/config-scripts/cups-sharedlibs.m4
@@ -1,7 +1,7 @@
dnl
dnl Shared library support for CUPS.
dnl
-dnl Copyright 2007-2013 by Apple Inc.
+dnl Copyright 2007-2017 by Apple Inc.
dnl Copyright 1997-2005 by Easy Software Products, all rights reserved.
dnl
dnl These coded instructions, statements, and computer programs are the
@@ -21,8 +21,8 @@ LIBCUPSBASE="lib$cupsbase"
LIBCUPSSTATIC="lib$cupsbase.a"
if test x$enable_shared != xno; then
- case "$uname" in
- SunOS*)
+ case "$host_os_name" in
+ sunos*)
LIBCUPS="lib$cupsbase.so.2"
LIBCUPSCGI="libcupscgi.so.1"
LIBCUPSIMAGE="libcupsimage.so.2"
@@ -32,7 +32,7 @@ if test x$enable_shared != xno; then
DSOXX="\$(CXX)"
DSOFLAGS="$DSOFLAGS -Wl,-h\`basename \$@\` -G \$(OPTIM)"
;;
- Linux | GNU | *BSD*)
+ linux* | gnu* | *bsd*)
LIBCUPS="lib$cupsbase.so.2"
LIBCUPSCGI="libcupscgi.so.1"
LIBCUPSIMAGE="libcupsimage.so.2"
@@ -42,7 +42,7 @@ if test x$enable_shared != xno; then
DSOXX="\$(CXX)"
DSOFLAGS="$DSOFLAGS -Wl,-soname,\`basename \$@\` -shared \$(OPTIM)"
;;
- Darwin*)
+ darwin*)
LIBCUPS="lib$cupsbase.2.dylib"
LIBCUPSCGI="libcupscgi.1.dylib"
LIBCUPSIMAGE="libcupsimage.2.dylib"
@@ -120,8 +120,8 @@ if test "$DSO" != ":"; then
# Tell the run-time linkers where to find a DSO. Some platforms
# need this option, even when the library is installed in a
# standard location...
- case $uname in
- SunOS*)
+ case $host_os_name in
+ sunos*)
# Solaris...
if test $exec_prefix != /usr; then
DSOFLAGS="-R$libdir $DSOFLAGS"
@@ -129,7 +129,7 @@ if test "$DSO" != ":"; then
EXPORT_LDFLAGS="-R$libdir"
fi
;;
- *BSD*)
+ *bsd*)
# *BSD...
if test $exec_prefix != /usr; then
DSOFLAGS="-Wl,-R$libdir $DSOFLAGS"
@@ -137,7 +137,7 @@ if test "$DSO" != ":"; then
EXPORT_LDFLAGS="-Wl,-R$libdir"
fi
;;
- Linux | GNU)
+ linux* | gnu*)
# Linux, and HURD...
if test $exec_prefix != /usr; then
DSOFLAGS="-Wl,-rpath,$libdir $DSOFLAGS"
diff --git a/config-scripts/cups-ssl.m4 b/config-scripts/cups-ssl.m4
index 1604900..1902e8a 100644
--- a/config-scripts/cups-ssl.m4
+++ b/config-scripts/cups-ssl.m4
@@ -1,7 +1,7 @@
dnl
dnl TLS stuff for CUPS.
dnl
-dnl Copyright 2007-2015 by Apple Inc.
+dnl Copyright 2007-2017 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
@@ -23,7 +23,7 @@ CUPS_SERVERKEYCHAIN=""
if test x$enable_ssl != xno; then
dnl Look for CDSA...
if test $have_ssl = 0 -a "x$enable_cdsassl" != "xno"; then
- if test $uname = Darwin; then
+ if test $host_os_name = darwin; then
AC_CHECK_HEADER(Security/SecureTransport.h, [
have_ssl=1
AC_DEFINE(HAVE_SSL)
@@ -52,7 +52,7 @@ if test x$enable_ssl != xno; then
AC_DEFINE(HAVE_CSSMERRORSTRING)
AC_DEFINE(HAVE_SECKEYCHAINOPEN)])
- if test $uversion -ge 150; then
+ if test $host_os_version -ge 150; then
AC_DEFINE(HAVE_SSLSETENABLEDCIPHERS)
fi
fi
diff --git a/config-scripts/cups-startup.m4 b/config-scripts/cups-startup.m4
index 04fc87d..978daae 100644
--- a/config-scripts/cups-startup.m4
+++ b/config-scripts/cups-startup.m4
@@ -1,7 +1,7 @@
dnl
dnl Launch-on-demand/startup stuff for CUPS.
dnl
-dnl Copyright 2007-2016 by Apple Inc.
+dnl Copyright 2007-2017 by Apple Inc.
dnl Copyright 1997-2005 by Easy Software Products, all rights reserved.
dnl
dnl These coded instructions, statements, and computer programs are the
@@ -27,16 +27,10 @@ if test x$enable_launchd != xno; then
AC_DEFINE(HAVE_ONDEMAND)])
AC_CHECK_HEADER(launch.h, AC_DEFINE(HAVE_LAUNCH_H))
- case "$uname" in
- Darwin*)
- # Darwin, macOS
- LAUNCHD_DIR="/System/Library/LaunchDaemons"
- # liblaunch is already part of libSystem
- ;;
- *)
- # All others; this test will need to be updated
- ;;
- esac
+ if test "$host_os_name" = darwin; then
+ LAUNCHD_DIR="/System/Library/LaunchDaemons"
+ # liblaunch is already part of libSystem
+ fi
fi
dnl Systemd is used on Linux...
@@ -123,13 +117,13 @@ if test x$rcdir = x; then
fi
if test "x$rcstart" = x; then
- case "$uname" in
- Linux | GNU | GNU/k*BSD*)
+ case "$host_os_name" in
+ linux* | gnu*)
# Linux
rcstart="81"
;;
- SunOS*)
+ sunos*)
# Solaris
rcstart="81"
;;
@@ -142,8 +136,8 @@ if test "x$rcstart" = x; then
fi
if test "x$rcstop" = x; then
- case "$uname" in
- Linux | GNU | GNU/k*BSD*)
+ case "$host_os_name" in
+ linux* | gnu*)
# Linux
rcstop="36"
;;
diff --git a/config-scripts/cups-threads.m4 b/config-scripts/cups-threads.m4
index d4e3f01..ae6044d 100644
--- a/config-scripts/cups-threads.m4
+++ b/config-scripts/cups-threads.m4
@@ -1,7 +1,7 @@
dnl
dnl Threading stuff for CUPS.
dnl
-dnl Copyright 2007-2011 by Apple Inc.
+dnl Copyright 2007-2017 by Apple Inc.
dnl Copyright 1997-2005 by Easy Software Products, all rights reserved.
dnl
dnl These coded instructions, statements, and computer programs are the
@@ -36,7 +36,7 @@ if test "x$enable_threads" != xno; then
# Solaris requires -D_POSIX_PTHREAD_SEMANTICS to
# be POSIX-compliant... :(
- if test $uname = SunOS; then
+ if test $host_os_name = sunos; then
PTHREAD_FLAGS="$PTHREAD_FLAGS -D_POSIX_PTHREAD_SEMANTICS"
fi
break
diff --git a/config.guess b/config.guess
new file mode 100755
index 0000000..9afd676
--- /dev/null
+++ b/config.guess
@@ -0,0 +1,1568 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright 1992-2013 Free Software Foundation, Inc.
+
+timestamp='2013-11-29'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that
+# program. This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+#
+# Originally written by Per Bothner.
+#
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+#
+# Please send patches with a ChangeLog entry to config-patches@gnu.org.
+
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright 1992-2013 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+ * )
+ break ;;
+ esac
+done
+
+if test $# != 0; then
+ echo "$me: too many arguments$help" >&2
+ exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,) echo "int x;" > $dummy.c ;
+ for c in cc gcc c89 c99 ; do
+ if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+ CC_FOR_BUILD="$c"; break ;
+ fi ;
+ done ;
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found ;
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+case "${UNAME_SYSTEM}" in
+Linux|GNU|GNU/*)
+ # If the system lacks a compiler, then just pick glibc.
+ # We could probably try harder.
+ LIBC=gnu
+
+ eval $set_cc_for_build
+ cat <<-EOF > $dummy.c
+ #include <features.h>
+ #if defined(__UCLIBC__)
+ LIBC=uclibc
+ #elif defined(__dietlibc__)
+ LIBC=dietlibc
+ #else
+ LIBC=gnu
+ #endif
+ EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+ ;;
+esac
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ *:NetBSD:*:*)
+ # NetBSD (nbsd) targets should (where applicable) match one or
+ # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+ # compatibility and a consistent mechanism for selecting the
+ # object file format.
+ #
+ # Note: NetBSD doesn't particularly care about the vendor
+ # portion of the name. We always set it to "unknown".
+ sysctl="sysctl -n hw.machine_arch"
+ UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ case "${UNAME_MACHINE_ARCH}" in
+ armeb) machine=armeb-unknown ;;
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
+ sh5el) machine=sh5le-unknown ;;
+ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+ # to ELF recently, or will in the future.
+ case "${UNAME_MACHINE_ARCH}" in
+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ eval $set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ELF__
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
+ esac
+ # The OS release
+ # Debian GNU/NetBSD machines have a different userland, and
+ # thus, need a distinct triplet. However, they do not need
+ # kernel version information, so it can be replaced with a
+ # suitable tag, in the style of linux-gnu.
+ case "${UNAME_VERSION}" in
+ Debian*)
+ release='-gnu'
+ ;;
+ *)
+ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ ;;
+ esac
+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+ # contains redundant information, the shorter form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ echo "${machine}-${os}${release}"
+ exit ;;
+ *:Bitrig:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
+ exit ;;
+ *:OpenBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
+ *:ekkoBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+ exit ;;
+ *:SolidBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+ exit ;;
+ macppc:MirBSD:*:*)
+ echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ *:MirBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ alpha:OSF1:*:*)
+ case $UNAME_RELEASE in
+ *4.0)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ ;;
+ *5.*)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ ;;
+ esac
+ # According to Compaq, /usr/sbin/psrinfo has been available on
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
+ # covers most systems running today. This code pipes the CPU
+ # types through head -n 1, so we only detect the type of CPU 0.
+ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+ case "$ALPHA_CPU_TYPE" in
+ "EV4 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "EV4.5 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "LCA4 (21066/21068)")
+ UNAME_MACHINE="alpha" ;;
+ "EV5 (21164)")
+ UNAME_MACHINE="alphaev5" ;;
+ "EV5.6 (21164A)")
+ UNAME_MACHINE="alphaev56" ;;
+ "EV5.6 (21164PC)")
+ UNAME_MACHINE="alphapca56" ;;
+ "EV5.7 (21164PC)")
+ UNAME_MACHINE="alphapca57" ;;
+ "EV6 (21264)")
+ UNAME_MACHINE="alphaev6" ;;
+ "EV6.7 (21264A)")
+ UNAME_MACHINE="alphaev67" ;;
+ "EV6.8CB (21264C)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8AL (21264B)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8CX (21264D)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.9A (21264/EV69A)")
+ UNAME_MACHINE="alphaev69" ;;
+ "EV7 (21364)")
+ UNAME_MACHINE="alphaev7" ;;
+ "EV7.9 (21364A)")
+ UNAME_MACHINE="alphaev79" ;;
+ esac
+ # A Pn.n version is a patched version.
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+ exitcode=$?
+ trap '' 0
+ exit $exitcode ;;
+ Alpha\ *:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # Should we change UNAME_MACHINE based on the output of uname instead
+ # of the specific Alpha model?
+ echo alpha-pc-interix
+ exit ;;
+ 21064:Windows_NT:50:3)
+ echo alpha-dec-winnt3.5
+ exit ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-unknown-sysv4
+ exit ;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-amigaos
+ exit ;;
+ *:[Mm]orph[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-morphos
+ exit ;;
+ *:OS/390:*:*)
+ echo i370-ibm-openedition
+ exit ;;
+ *:z/VM:*:*)
+ echo s390-ibm-zvmoe
+ exit ;;
+ *:OS400:*:*)
+ echo powerpc-ibm-os400
+ exit ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit ;;
+ arm*:riscos:*:*|arm*:RISCOS:*:*)
+ echo arm-unknown-riscos
+ exit ;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ echo hppa1.1-hitachi-hiuxmpp
+ exit ;;
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ echo pyramid-pyramid-sysv3
+ else
+ echo pyramid-pyramid-bsd
+ fi
+ exit ;;
+ NILE*:*:*:dcosx)
+ echo pyramid-pyramid-svr4
+ exit ;;
+ DRS?6000:unix:4.0:6*)
+ echo sparc-icl-nx6
+ exit ;;
+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+ case `/usr/bin/uname -p` in
+ sparc) echo sparc-icl-nx7; exit ;;
+ esac ;;
+ s390x:SunOS:*:*)
+ echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4H:SunOS:5.*:*)
+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+ echo i386-pc-auroraux${UNAME_RELEASE}
+ exit ;;
+ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+ eval $set_cc_for_build
+ SUN_ARCH="i386"
+ # If there is a compiler, see if it is configured for 64-bit objects.
+ # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+ # This test works for both compilers.
+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ SUN_ARCH="x86_64"
+ fi
+ fi
+ echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:*:*)
+ case "`/usr/bin/arch -k`" in
+ Series*|S4*)
+ UNAME_RELEASE=`uname -v`
+ ;;
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+ exit ;;
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ exit ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+ case "`/bin/arch`" in
+ sun3)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ ;;
+ sun4)
+ echo sparc-sun-sunos${UNAME_RELEASE}
+ ;;
+ esac
+ exit ;;
+ aushp:SunOS:*:*)
+ echo sparc-auspex-sunos${UNAME_RELEASE}
+ exit ;;
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
+ # to the lowercase version "mint" (or "freemint"). Finally
+ # the system name "TOS" denotes a system which is actually not
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ echo m68k-unknown-mint${UNAME_RELEASE}
+ exit ;;
+ m68k:machten:*:*)
+ echo m68k-apple-machten${UNAME_RELEASE}
+ exit ;;
+ powerpc:machten:*:*)
+ echo powerpc-apple-machten${UNAME_RELEASE}
+ exit ;;
+ RISC*:Mach:*:*)
+ echo mips-dec-mach_bsd4.3
+ exit ;;
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ echo clipper-intergraph-clix${UNAME_RELEASE}
+ exit ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h> /* for printf() prototype */
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+ #if defined (host_mips) && defined (MIPSEB)
+ #if defined (SYSTYPE_SYSV)
+ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_SVR4)
+ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+ #endif
+ #endif
+ exit (-1);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c &&
+ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+ SYSTEM_NAME=`$dummy $dummyarg` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo mips-mips-riscos${UNAME_RELEASE}
+ exit ;;
+ Motorola:PowerMAX_OS:*:*)
+ echo powerpc-motorola-powermax
+ exit ;;
+ Motorola:*:4.3:PL8-*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:Power_UNIX:*:*)
+ echo powerpc-harris-powerunix
+ exit ;;
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+ exit ;;
+ m88k:*:4*:R4*)
+ echo m88k-motorola-sysv4
+ exit ;;
+ m88k:*:3*:R3*)
+ echo m88k-motorola-sysv3
+ exit ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+ then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+ [ ${TARGET_BINARY_INTERFACE}x = x ]
+ then
+ echo m88k-dg-dgux${UNAME_RELEASE}
+ else
+ echo m88k-dg-dguxbcs${UNAME_RELEASE}
+ fi
+ else
+ echo i586-dg-dgux${UNAME_RELEASE}
+ fi
+ exit ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+ exit ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ echo m88k-motorola-sysv3
+ exit ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ echo m88k-tektronix-sysv3
+ exit ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ echo m68k-tektronix-bsd
+ exit ;;
+ *:IRIX*:*:*)
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+ exit ;;
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i*86:AIX:*:*)
+ echo i386-ibm-aix
+ exit ;;
+ ia64:AIX:*:*)
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <sys/systemcfg.h>
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+ then
+ echo "$SYSTEM_NAME"
+ else
+ echo rs6000-ibm-aix3.2.5
+ fi
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ echo rs6000-ibm-aix3.2.4
+ else
+ echo rs6000-ibm-aix3.2
+ fi
+ exit ;;
+ *:AIX:*:[4567])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+ else
+ IBM_ARCH=powerpc
+ fi
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+ exit ;;
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ echo romp-ibm-bsd4.4
+ exit ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+ exit ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+ exit ;;
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+ exit ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+ exit ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+ exit ;;
+ 9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ case "${UNAME_MACHINE}" in
+ 9000/31? ) HP_ARCH=m68000 ;;
+ 9000/[34]?? ) HP_ARCH=m68k ;;
+ 9000/[678][0-9][0-9])
+ if [ -x /usr/bin/getconf ]; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case "${sc_cpu_version}" in
+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case "${sc_kernel_bits}" in
+ 32) HP_ARCH="hppa2.0n" ;;
+ 64) HP_ARCH="hppa2.0w" ;;
+ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
+ esac ;;
+ esac
+ fi
+ if [ "${HP_ARCH}" = "" ]; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
+
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
+
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
+EOF
+ (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+ test -z "$HP_ARCH" && HP_ARCH=hppa
+ fi ;;
+ esac
+ if [ ${HP_ARCH} = "hppa2.0w" ]
+ then
+ eval $set_cc_for_build
+
+ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
+ # generating 64-bit code. GNU and HP use different nomenclature:
+ #
+ # $ CC_FOR_BUILD=cc ./config.guess
+ # => hppa2.0w-hp-hpux11.23
+ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+ # => hppa64-hp-hpux11.23
+
+ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+ grep -q __LP64__
+ then
+ HP_ARCH="hppa2.0w"
+ else
+ HP_ARCH="hppa64"
+ fi
+ fi
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+ exit ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ia64-hp-hpux${HPUX_REV}
+ exit ;;
+ 3050*:HI-UX:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <unistd.h>
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo unknown-hitachi-hiuxwe2
+ exit ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ echo hppa1.1-hp-bsd
+ exit ;;
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+ exit ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+ exit ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ echo hppa1.1-hp-osf
+ exit ;;
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+ exit ;;
+ i*86:OSF1:*:*)
+ if [ -x /usr/sbin/sysversion ] ; then
+ echo ${UNAME_MACHINE}-unknown-osf1mk
+ else
+ echo ${UNAME_MACHINE}-unknown-osf1
+ fi
+ exit ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+ exit ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+ exit ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+ exit ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+ exit ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+ exit ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*T3E:*:*:*)
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*SV1:*:*:*)
+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ *:UNICOS/mp:*:*)
+ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ 5000:UNIX_System_V:4.*:*)
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ exit ;;
+ sparc*:BSD/OS:*:*)
+ echo sparc-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:FreeBSD:*:*)
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ case ${UNAME_PROCESSOR} in
+ amd64)
+ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ *)
+ echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ esac
+ exit ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit ;;
+ *:MINGW64*:*)
+ echo ${UNAME_MACHINE}-pc-mingw64
+ exit ;;
+ *:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ exit ;;
+ i*:MSYS*:*)
+ echo ${UNAME_MACHINE}-pc-msys
+ exit ;;
+ i*:windows32*:*)
+ # uname -m includes "-pc" on this system.
+ echo ${UNAME_MACHINE}-mingw32
+ exit ;;
+ i*:PW*:*)
+ echo ${UNAME_MACHINE}-pc-pw32
+ exit ;;
+ *:Interix*:*)
+ case ${UNAME_MACHINE} in
+ x86)
+ echo i586-pc-interix${UNAME_RELEASE}
+ exit ;;
+ authenticamd | genuineintel | EM64T)
+ echo x86_64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ IA64)
+ echo ia64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ esac ;;
+ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+ echo i${UNAME_MACHINE}-pc-mks
+ exit ;;
+ 8664:Windows_NT:*)
+ echo x86_64-pc-mks
+ exit ;;
+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+ # UNAME_MACHINE based on the output of uname instead of i386?
+ echo i586-pc-interix
+ exit ;;
+ i*:UWIN*:*)
+ echo ${UNAME_MACHINE}-pc-uwin
+ exit ;;
+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+ echo x86_64-unknown-cygwin
+ exit ;;
+ p*:CYGWIN*:*)
+ echo powerpcle-unknown-cygwin
+ exit ;;
+ prep*:SunOS:5.*:*)
+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ *:GNU:*:*)
+ # the GNU system
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit ;;
+ *:GNU/*:*:*)
+ # other systems with GNU libc and userland
+ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
+ exit ;;
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ exit ;;
+ aarch64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ aarch64_be:Linux:*:*)
+ UNAME_MACHINE=aarch64_be
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+ objdump --private-headers /bin/sh | grep -q ld.so.1
+ if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ arc:Linux:*:* | arceb:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ arm*:Linux:*:*)
+ eval $set_cc_for_build
+ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_EABI__
+ then
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ else
+ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_PCS_VFP
+ then
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
+ else
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
+ fi
+ fi
+ exit ;;
+ avr32*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ cris:Linux:*:*)
+ echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+ exit ;;
+ crisv32:Linux:*:*)
+ echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+ exit ;;
+ frv:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ hexagon:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ i*86:Linux:*:*)
+ echo ${UNAME_MACHINE}-pc-linux-${LIBC}
+ exit ;;
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ m32r*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ mips:Linux:*:* | mips64:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef ${UNAME_MACHINE}
+ #undef ${UNAME_MACHINE}el
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=${UNAME_MACHINE}el
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=${UNAME_MACHINE}
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
+ ;;
+ or1k:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ or32:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ padre:Linux:*:*)
+ echo sparc-unknown-linux-${LIBC}
+ exit ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-${LIBC}
+ exit ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
+ PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
+ *) echo hppa-unknown-linux-${LIBC} ;;
+ esac
+ exit ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-${LIBC}
+ exit ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-${LIBC}
+ exit ;;
+ ppc64le:Linux:*:*)
+ echo powerpc64le-unknown-linux-${LIBC}
+ exit ;;
+ ppcle:Linux:*:*)
+ echo powerpcle-unknown-linux-${LIBC}
+ exit ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
+ exit ;;
+ sh64*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ tile*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ vax:Linux:*:*)
+ echo ${UNAME_MACHINE}-dec-linux-${LIBC}
+ exit ;;
+ x86_64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ xtensa*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
+ echo i386-sequent-sysv4
+ exit ;;
+ i*86:UNIX_SV:4.2MP:2.*)
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+ # I am not positive that other SVR4 systems won't match this,
+ # I just have to hope. -- rms.
+ # Use sysv4.2uw... so that sysv4* matches it.
+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+ exit ;;
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ echo ${UNAME_MACHINE}-pc-os2-emx
+ exit ;;
+ i*86:XTS-300:*:STOP)
+ echo ${UNAME_MACHINE}-unknown-stop
+ exit ;;
+ i*86:atheos:*:*)
+ echo ${UNAME_MACHINE}-unknown-atheos
+ exit ;;
+ i*86:syllable:*:*)
+ echo ${UNAME_MACHINE}-pc-syllable
+ exit ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+ echo i386-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ i*86:*DOS:*:*)
+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
+ exit ;;
+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+ else
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+ fi
+ exit ;;
+ i*86:*:5:[678]*)
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ exit ;;
+ i*86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+ && UNAME_MACHINE=i686
+ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+ && UNAME_MACHINE=i686
+ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+ else
+ echo ${UNAME_MACHINE}-pc-sysv32
+ fi
+ exit ;;
+ pc:*:*:*)
+ # Left here for compatibility:
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i586.
+ # Note: whatever this is, it MUST be the same as what config.sub
+ # prints for the "djgpp" host, or else GDB configury will decide that
+ # this is a cross-build.
+ echo i586-pc-msdosdjgpp
+ exit ;;
+ Intel:Mach:3*:*)
+ echo i386-pc-mach3
+ exit ;;
+ paragon:*:*:*)
+ echo i860-intel-osf1
+ exit ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
+ fi
+ exit ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ echo m68010-convergent-sysv
+ exit ;;
+ mc68k:UNIX:SYSTEM5:3.51m)
+ echo m68k-convergent-sysv
+ exit ;;
+ M680?0:D-NIX:5.3:*)
+ echo m68k-diab-dnix
+ exit ;;
+ M68*:*:R3V[5678]*:*)
+ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4; exit; } ;;
+ NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+ OS_REL='.3'
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ echo m68k-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ mc68030:UNIX_System_V:4.*:*)
+ echo m68k-atari-sysv4
+ exit ;;
+ TSUNAMI:LynxOS:2.*:*)
+ echo sparc-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ rs6000:LynxOS:2.*:*)
+ echo rs6000-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+ echo powerpc-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ SM[BE]S:UNIX_SV:*:*)
+ echo mips-dde-sysv${UNAME_RELEASE}
+ exit ;;
+ RM*:ReliantUNIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ echo ${UNAME_MACHINE}-sni-sysv4
+ else
+ echo ns32k-sni-sysv
+ fi
+ exit ;;
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+ exit ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes@openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+ echo hppa1.1-stratus-sysv4
+ exit ;;
+ *:*:*:FTX*)
+ # From seanf@swdc.stratus.com.
+ echo i860-stratus-sysv4
+ exit ;;
+ i*86:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo ${UNAME_MACHINE}-stratus-vos
+ exit ;;
+ *:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo hppa1.1-stratus-vos
+ exit ;;
+ mc68*:A/UX:*:*)
+ echo m68k-apple-aux${UNAME_RELEASE}
+ exit ;;
+ news*:NEWS-OS:6*:*)
+ echo mips-sony-newsos6
+ exit ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if [ -d /usr/nec ]; then
+ echo mips-nec-sysv${UNAME_RELEASE}
+ else
+ echo mips-unknown-sysv${UNAME_RELEASE}
+ fi
+ exit ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ echo powerpc-be-beos
+ exit ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ echo powerpc-apple-beos
+ exit ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ echo i586-pc-beos
+ exit ;;
+ BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
+ echo i586-pc-haiku
+ exit ;;
+ x86_64:Haiku:*:*)
+ echo x86_64-unknown-haiku
+ exit ;;
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-5:SUPER-UX:*:*)
+ echo sx5-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-6:SUPER-UX:*:*)
+ echo sx6-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-7:SUPER-UX:*:*)
+ echo sx7-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8:SUPER-UX:*:*)
+ echo sx8-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8R:SUPER-UX:*:*)
+ echo sx8r-nec-superux${UNAME_RELEASE}
+ exit ;;
+ Power*:Rhapsody:*:*)
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Rhapsody:*:*)
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Darwin:*:*)
+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+ eval $set_cc_for_build
+ if test "$UNAME_PROCESSOR" = unknown ; then
+ UNAME_PROCESSOR=powerpc
+ fi
+ if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ case $UNAME_PROCESSOR in
+ i386) UNAME_PROCESSOR=x86_64 ;;
+ powerpc) UNAME_PROCESSOR=powerpc64 ;;
+ esac
+ fi
+ fi
+ elif test "$UNAME_PROCESSOR" = i386 ; then
+ # Avoid executing cc on OS X 10.9, as it ships with a stub
+ # that puts up a graphical alert prompting to install
+ # developer tools. Any system running Mac OS X 10.7 or
+ # later (Darwin 11 and later) is required to have a 64-bit
+ # processor. This is not true of the ARM version of Darwin
+ # that Apple uses in portable devices.
+ UNAME_PROCESSOR=x86_64
+ fi
+ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+ exit ;;
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ UNAME_PROCESSOR=`uname -p`
+ if test "$UNAME_PROCESSOR" = "x86"; then
+ UNAME_PROCESSOR=i386
+ UNAME_MACHINE=pc
+ fi
+ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+ exit ;;
+ *:QNX:*:4*)
+ echo i386-pc-qnx
+ exit ;;
+ NEO-?:NONSTOP_KERNEL:*:*)
+ echo neo-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSE-*:NONSTOP_KERNEL:*:*)
+ echo nse-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSR-?:NONSTOP_KERNEL:*:*)
+ echo nsr-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ *:NonStop-UX:*:*)
+ echo mips-compaq-nonstopux
+ exit ;;
+ BS2000:POSIX*:*:*)
+ echo bs2000-siemens-sysv
+ exit ;;
+ DS/*:UNIX_System_V:*:*)
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+ exit ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+ # operating systems.
+ if test "$cputype" = "386"; then
+ UNAME_MACHINE=i386
+ else
+ UNAME_MACHINE="$cputype"
+ fi
+ echo ${UNAME_MACHINE}-unknown-plan9
+ exit ;;
+ *:TOPS-10:*:*)
+ echo pdp10-unknown-tops10
+ exit ;;
+ *:TENEX:*:*)
+ echo pdp10-unknown-tenex
+ exit ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ echo pdp10-dec-tops20
+ exit ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ echo pdp10-xkl-tops20
+ exit ;;
+ *:TOPS-20:*:*)
+ echo pdp10-unknown-tops20
+ exit ;;
+ *:ITS:*:*)
+ echo pdp10-unknown-its
+ exit ;;
+ SEI:*:*:SEIUX)
+ echo mips-sei-seiux${UNAME_RELEASE}
+ exit ;;
+ *:DragonFly:*:*)
+ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit ;;
+ *:*VMS:*:*)
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ case "${UNAME_MACHINE}" in
+ A*) echo alpha-dec-vms ; exit ;;
+ I*) echo ia64-dec-vms ; exit ;;
+ V*) echo vax-dec-vms ; exit ;;
+ esac ;;
+ *:XENIX:*:SysV)
+ echo i386-pc-xenix
+ exit ;;
+ i*86:skyos:*:*)
+ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+ exit ;;
+ i*86:rdos:*:*)
+ echo ${UNAME_MACHINE}-pc-rdos
+ exit ;;
+ i*86:AROS:*:*)
+ echo ${UNAME_MACHINE}-pc-aros
+ exit ;;
+ x86_64:VMkernel:*:*)
+ echo ${UNAME_MACHINE}-unknown-esx
+ exit ;;
+esac
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+ printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+ printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+# include <sys/param.h>
+# if defined (BSD)
+# if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+# else
+# if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# endif
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# else
+ printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+ case `getsysinfo -f cpu_type` in
+ c1*)
+ echo c1-convex-bsd
+ exit ;;
+ c2*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ c34*)
+ echo c34-convex-bsd
+ exit ;;
+ c38*)
+ echo c38-convex-bsd
+ exit ;;
+ c4*)
+ echo c4-convex-bsd
+ exit ;;
+ esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+and
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config.sub b/config.sub
new file mode 100755
index 0000000..61cb4bc
--- /dev/null
+++ b/config.sub
@@ -0,0 +1,1793 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright 1992-2013 Free Software Foundation, Inc.
+
+timestamp='2013-10-01'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that
+# program. This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+
+
+# Please send patches with a ChangeLog entry to config-patches@gnu.org.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support. The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+ $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright 1992-2013 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help"
+ exit 1 ;;
+
+ *local*)
+ # First pass through any local machine types.
+ echo $1
+ exit ;;
+
+ * )
+ break ;;
+ esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+ exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+ exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+ knetbsd*-gnu* | netbsd*-gnu* | \
+ kopensolaris*-gnu* | \
+ storm-chaos* | os2-emx* | rtmk-nova*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+ android-linux)
+ os=-linux-android
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+ ;;
+ *)
+ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+ if [ $basic_machine != $1 ]
+ then os=`echo $1 | sed 's/.*-/-/'`
+ else os=; fi
+ ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work. We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+ -sun*os*)
+ # Prevent following clause from handling this invalid input.
+ ;;
+ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+ -apple | -axis | -knuth | -cray | -microblaze*)
+ os=
+ basic_machine=$1
+ ;;
+ -bluegene*)
+ os=-cnk
+ ;;
+ -sim | -cisco | -oki | -wec | -winbond)
+ os=
+ basic_machine=$1
+ ;;
+ -scout)
+ ;;
+ -wrs)
+ os=-vxworks
+ basic_machine=$1
+ ;;
+ -chorusos*)
+ os=-chorusos
+ basic_machine=$1
+ ;;
+ -chorusrdb)
+ os=-chorusrdb
+ basic_machine=$1
+ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+ -sco6)
+ os=-sco5v6
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5)
+ os=-sco3.2v5
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco4)
+ os=-sco3.2v4
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2.[4-9]*)
+ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2v[4-9]*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5v6*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco*)
+ os=-sco3.2v2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -udk*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -isc)
+ os=-isc2.2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -clix*)
+ basic_machine=clipper-intergraph
+ ;;
+ -isc*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -lynx*178)
+ os=-lynxos178
+ ;;
+ -lynx*5)
+ os=-lynxos5
+ ;;
+ -lynx*)
+ os=-lynxos
+ ;;
+ -ptx*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+ ;;
+ -windowsnt*)
+ os=`echo $os | sed -e 's/windowsnt/winnt/'`
+ ;;
+ -psos*)
+ os=-psos
+ ;;
+ -mint | -mint[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+ # Recognize the basic CPU types without company name.
+ # Some are omitted here because they have special meanings below.
+ 1750a | 580 \
+ | a29k \
+ | aarch64 | aarch64_be \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | am33_2.0 \
+ | arc | arceb \
+ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
+ | avr | avr32 \
+ | be32 | be64 \
+ | bfin \
+ | c4x | c8051 | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+ | epiphany \
+ | fido | fr30 | frv \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | hexagon \
+ | i370 | i860 | i960 | ia64 \
+ | ip2k | iq2000 \
+ | k1om \
+ | le32 | le64 \
+ | lm32 \
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
+ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+ | mips64octeon | mips64octeonel \
+ | mips64orion | mips64orionel \
+ | mips64r5900 | mips64r5900el \
+ | mips64vr | mips64vrel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mips64vr5900 | mips64vr5900el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipsr5900 | mipsr5900el \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | moxie \
+ | mt \
+ | msp430 \
+ | nds32 | nds32le | nds32be \
+ | nios | nios2 | nios2eb | nios2el \
+ | ns16k | ns32k \
+ | open8 \
+ | or1k | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle \
+ | pyramid \
+ | rl78 | rx \
+ | score \
+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | sh64 | sh64le \
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+ | spu \
+ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+ | ubicom32 \
+ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
+ | we32k \
+ | x86 | xc16x | xstormy16 | xtensa \
+ | z8k | z80)
+ basic_machine=$basic_machine-unknown
+ ;;
+ c54x)
+ basic_machine=tic54x-unknown
+ ;;
+ c55x)
+ basic_machine=tic55x-unknown
+ ;;
+ c6x)
+ basic_machine=tic6x-unknown
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ ;;
+ ms1)
+ basic_machine=mt-unknown
+ ;;
+
+ strongarm | thumb | xscale)
+ basic_machine=arm-unknown
+ ;;
+ xgate)
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ xscaleeb)
+ basic_machine=armeb-unknown
+ ;;
+
+ xscaleel)
+ basic_machine=armel-unknown
+ ;;
+
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i*86 | x86_64)
+ basic_machine=$basic_machine-pc
+ ;;
+ # Object if more than one company name word.
+ *-*-*)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+ # Recognize the basic CPU types with company name.
+ 580-* \
+ | a29k-* \
+ | aarch64-* | aarch64_be-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | avr-* | avr32-* \
+ | be32-* | be64-* \
+ | bfin-* | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* \
+ | c8051-* | clipper-* | craynv-* | cydra-* \
+ | d10v-* | d30v-* | dlx-* \
+ | elxsi-* \
+ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | hexagon-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+ | ip2k-* | iq2000-* \
+ | k1om-* \
+ | le32-* | le64-* \
+ | lm32-* \
+ | m32c-* | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+ | microblaze-* | microblazeel-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | mips16-* \
+ | mips64-* | mips64el-* \
+ | mips64octeon-* | mips64octeonel-* \
+ | mips64orion-* | mips64orionel-* \
+ | mips64r5900-* | mips64r5900el-* \
+ | mips64vr-* | mips64vrel-* \
+ | mips64vr4100-* | mips64vr4100el-* \
+ | mips64vr4300-* | mips64vr4300el-* \
+ | mips64vr5000-* | mips64vr5000el-* \
+ | mips64vr5900-* | mips64vr5900el-* \
+ | mipsisa32-* | mipsisa32el-* \
+ | mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipsr5900-* | mipsr5900el-* \
+ | mipstx39-* | mipstx39el-* \
+ | mmix-* \
+ | mt-* \
+ | msp430-* \
+ | nds32-* | nds32le-* | nds32be-* \
+ | nios-* | nios2-* | nios2eb-* | nios2el-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
+ | open8-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
+ | pyramid-* \
+ | rl78-* | romp-* | rs6000-* | rx-* \
+ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+ | sparclite-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+ | tahoe-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tile*-* \
+ | tron-* \
+ | ubicom32-* \
+ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+ | vax-* \
+ | we32k-* \
+ | x86-* | x86_64-* | xc16x-* | xps100-* \
+ | xstormy16-* | xtensa*-* \
+ | ymp-* \
+ | z8k-* | z80-*)
+ ;;
+ # Recognize the basic CPU types without company name, with glob match.
+ xtensa*)
+ basic_machine=$basic_machine-unknown
+ ;;
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+ 386bsd)
+ basic_machine=i386-unknown
+ os=-bsd
+ ;;
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+ basic_machine=m68000-att
+ ;;
+ 3b*)
+ basic_machine=we32k-att
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ abacus)
+ basic_machine=abacus-unknown
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ os=-scout
+ ;;
+ alliant | fx80)
+ basic_machine=fx80-alliant
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ os=-bsd
+ ;;
+ amd64)
+ basic_machine=x86_64-pc
+ ;;
+ amd64-*)
+ basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ os=-sysv
+ ;;
+ amiga | amiga-*)
+ basic_machine=m68k-unknown
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ os=-amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ os=-sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ os=-sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ os=-bsd
+ ;;
+ aros)
+ basic_machine=i386-pc
+ os=-aros
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ os=-aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ os=-dynix
+ ;;
+ blackfin)
+ basic_machine=bfin-unknown
+ os=-linux
+ ;;
+ blackfin-*)
+ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ bluegene*)
+ basic_machine=powerpc-ibm
+ os=-cnk
+ ;;
+ c54x-*)
+ basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c55x-*)
+ basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c6x-*)
+ basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c90)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
+ cegcc)
+ basic_machine=arm-unknown
+ os=-cegcc
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ os=-bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ os=-bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ os=-bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ os=-bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ os=-bsd
+ ;;
+ cray | j90)
+ basic_machine=j90-cray
+ os=-unicos
+ ;;
+ craynv)
+ basic_machine=craynv-cray
+ os=-unicosmp
+ ;;
+ cr16 | cr16-*)
+ basic_machine=cr16-unknown
+ os=-elf
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
+ crisv32 | crisv32-* | etraxfs*)
+ basic_machine=crisv32-axis
+ ;;
+ cris | cris-* | etrax*)
+ basic_machine=cris-axis
+ ;;
+ crx)
+ basic_machine=crx-unknown
+ os=-elf
+ ;;
+ da30 | da30-*)
+ basic_machine=m68k-da30
+ ;;
+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ ;;
+ decsystem10* | dec10*)
+ basic_machine=pdp10-dec
+ os=-tops10
+ ;;
+ decsystem20* | dec20*)
+ basic_machine=pdp10-dec
+ os=-tops20
+ ;;
+ delta | 3300 | motorola-3300 | motorola-delta \
+ | 3300-motorola | delta-motorola)
+ basic_machine=m68k-motorola
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ os=-sysv3
+ ;;
+ dicos)
+ basic_machine=i686-pc
+ os=-dicos
+ ;;
+ djgpp)
+ basic_machine=i586-pc
+ os=-msdosdjgpp
+ ;;
+ dpx20 | dpx20-*)
+ basic_machine=rs6000-bull
+ os=-bosx
+ ;;
+ dpx2* | dpx2*-bull)
+ basic_machine=m68k-bull
+ os=-sysv3
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ os=-ebmon
+ ;;
+ elxsi)
+ basic_machine=elxsi-elxsi
+ os=-bsd
+ ;;
+ encore | umax | mmax)
+ basic_machine=ns32k-encore
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ os=-ose
+ ;;
+ fx2800)
+ basic_machine=i860-alliant
+ ;;
+ genix)
+ basic_machine=ns32k-ns
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ os=-sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ os=-go32
+ ;;
+ h3050r* | hiux*)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ os=-hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ os=-xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ os=-hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ os=-sysv3
+ ;;
+ hp300-*)
+ basic_machine=m68k-hp
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ os=-bsd
+ ;;
+ hp300hpux)
+ basic_machine=m68k-hp
+ os=-hpux
+ ;;
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k2[0-9][0-9] | hp9k31[0-9])
+ basic_machine=m68000-hp
+ ;;
+ hp9k3[2-9][0-9])
+ basic_machine=m68k-hp
+ ;;
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k78[0-9] | hp78[0-9])
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][13679] | hp8[0-9][13679])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hppa-next)
+ os=-nextstep3
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ os=-osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ os=-proelf
+ ;;
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
+ ;;
+ i*86v32)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+ ;;
+ i*86v4*)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv4
+ ;;
+ i*86v)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv
+ ;;
+ i*86sol2)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-solaris2
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ os=-mach
+ ;;
+ i386-vsta | vsta)
+ basic_machine=i386-unknown
+ os=-vsta
+ ;;
+ iris | iris4d)
+ basic_machine=mips-sgi
+ case $os in
+ -irix*)
+ ;;
+ *)
+ os=-irix4
+ ;;
+ esac
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ os=-sysv
+ ;;
+ m68knommu)
+ basic_machine=m68k-unknown
+ os=-linux
+ ;;
+ m68knommu-*)
+ basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ m88k-omron*)
+ basic_machine=m88k-omron
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ os=-sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+ microblaze*)
+ basic_machine=microblaze-xilinx
+ ;;
+ mingw64)
+ basic_machine=x86_64-pc
+ os=-mingw64
+ ;;
+ mingw32)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
+ mingw32ce)
+ basic_machine=arm-unknown
+ os=-mingw32ce
+ ;;
+ miniframe)
+ basic_machine=m68000-convergent
+ ;;
+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+ mips3*-*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+ ;;
+ mips3*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ morphos)
+ basic_machine=powerpc-unknown
+ os=-morphos
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ os=-msdos
+ ;;
+ ms1-*)
+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+ ;;
+ msys)
+ basic_machine=i686-pc
+ os=-msys
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+ nacl)
+ basic_machine=le32-unknown
+ os=-nacl
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-unknown
+ os=-netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ os=-linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ os=-newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ os=-newsos
+ ;;
+ news-3600 | risc-news)
+ basic_machine=mips-sony
+ os=-newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ os=-sysv
+ ;;
+ next | m*-next )
+ basic_machine=m68k-next
+ case $os in
+ -nextstep* )
+ ;;
+ -ns2*)
+ os=-nextstep2
+ ;;
+ *)
+ os=-nextstep3
+ ;;
+ esac
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ os=-cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ os=-cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ os=-nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ os=-mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ os=-nonstopux
+ ;;
+ np1)
+ basic_machine=np1-gould
+ ;;
+ neo-tandem)
+ basic_machine=neo-tandem
+ ;;
+ nse-tandem)
+ basic_machine=nse-tandem
+ ;;
+ nsr-tandem)
+ basic_machine=nsr-tandem
+ ;;
+ op50n-* | op60c-*)
+ basic_machine=hppa1.1-oki
+ os=-proelf
+ ;;
+ openrisc | openrisc-*)
+ basic_machine=or32-unknown
+ ;;
+ os400)
+ basic_machine=powerpc-ibm
+ os=-os400
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ os=-ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ os=-os68k
+ ;;
+ pa-hitachi)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ os=-osf
+ ;;
+ parisc)
+ basic_machine=hppa-unknown
+ os=-linux
+ ;;
+ parisc-*)
+ basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ pbd)
+ basic_machine=sparc-tti
+ ;;
+ pbb)
+ basic_machine=m68k-tti
+ ;;
+ pc532 | pc532-*)
+ basic_machine=ns32k-pc532
+ ;;
+ pc98)
+ basic_machine=i386-pc
+ ;;
+ pc98-*)
+ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium | p5 | k5 | k6 | nexgen | viac3)
+ basic_machine=i586-pc
+ ;;
+ pentiumpro | p6 | 6x86 | athlon | athlon_*)
+ basic_machine=i686-pc
+ ;;
+ pentiumii | pentium2 | pentiumiii | pentium3)
+ basic_machine=i686-pc
+ ;;
+ pentium4)
+ basic_machine=i786-pc
+ ;;
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumpro-* | p6-* | 6x86-* | athlon-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium4-*)
+ basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pn)
+ basic_machine=pn-gould
+ ;;
+ power) basic_machine=power-ibm
+ ;;
+ ppc | ppcbe) basic_machine=powerpc-unknown
+ ;;
+ ppc-* | ppcbe-*)
+ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppcle | powerpclittle | ppc-le | powerpc-little)
+ basic_machine=powerpcle-unknown
+ ;;
+ ppcle-* | powerpclittle-*)
+ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64) basic_machine=powerpc64-unknown
+ ;;
+ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+ basic_machine=powerpc64le-unknown
+ ;;
+ ppc64le-* | powerpc64little-*)
+ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ps2)
+ basic_machine=i386-ibm
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
+ rdos | rdos64)
+ basic_machine=x86_64-pc
+ os=-rdos
+ ;;
+ rdos32)
+ basic_machine=i386-pc
+ os=-rdos
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ rm[46]00)
+ basic_machine=mips-siemens
+ ;;
+ rtpc | rtpc-*)
+ basic_machine=romp-ibm
+ ;;
+ s390 | s390-*)
+ basic_machine=s390-ibm
+ ;;
+ s390x | s390x-*)
+ basic_machine=s390x-ibm
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ sb1)
+ basic_machine=mipsisa64sb1-unknown
+ ;;
+ sb1el)
+ basic_machine=mipsisa64sb1el-unknown
+ ;;
+ sde)
+ basic_machine=mipsisa32-sde
+ os=-elf
+ ;;
+ sei)
+ basic_machine=mips-sei
+ os=-seiux
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ ;;
+ sh)
+ basic_machine=sh-hitachi
+ os=-hms
+ ;;
+ sh5el)
+ basic_machine=sh5le-unknown
+ ;;
+ sh64)
+ basic_machine=sh64-unknown
+ ;;
+ sparclite-wrs | simso-wrs)
+ basic_machine=sparclite-wrs
+ os=-vxworks
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ os=-sysv2
+ ;;
+ spur)
+ basic_machine=spur-unknown
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ os=-sysv4
+ ;;
+ strongarm-* | thumb-*)
+ basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ os=-sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ os=-sunos4
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ os=-sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ os=-sunos4
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ os=-sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ os=-sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ os=-solaris2
+ ;;
+ sun3 | sun3-*)
+ basic_machine=m68k-sun
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ os=-unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ os=-dynix
+ ;;
+ t3e)
+ basic_machine=alphaev5-cray
+ os=-unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
+ os=-unicos
+ ;;
+ tile*)
+ basic_machine=$basic_machine-unknown
+ os=-linux-gnu
+ ;;
+ tx39)
+ basic_machine=mipstx39-unknown
+ ;;
+ tx39el)
+ basic_machine=mipstx39el-unknown
+ ;;
+ toad1)
+ basic_machine=pdp10-xkl
+ os=-tops20
+ ;;
+ tower | tower-32)
+ basic_machine=m68k-ncr
+ ;;
+ tpf)
+ basic_machine=s390x-ibm
+ os=-tpf
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ os=-sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ os=-none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ os=-sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ os=-vms
+ ;;
+ vpp*|vx|vx-*)
+ basic_machine=f301-fujitsu
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ os=-vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ os=-vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ os=-vxworks
+ ;;
+ w65*)
+ basic_machine=w65-wdc
+ os=-none
+ ;;
+ w89k-*)
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
+ xbox)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
+ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
+ xscale-* | xscalee[bl]-*)
+ basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+ ;;
+ z8k-*-coff)
+ basic_machine=z8k-unknown
+ os=-sim
+ ;;
+ z80-*-coff)
+ basic_machine=z80-unknown
+ os=-sim
+ ;;
+ none)
+ basic_machine=none-none
+ os=-none
+ ;;
+
+# Here we handle the default manufacturer of certain CPU types. It is in
+# some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ basic_machine=hppa1.1-winbond
+ ;;
+ op50n)
+ basic_machine=hppa1.1-oki
+ ;;
+ op60c)
+ basic_machine=hppa1.1-oki
+ ;;
+ romp)
+ basic_machine=romp-ibm
+ ;;
+ mmix)
+ basic_machine=mmix-knuth
+ ;;
+ rs6000)
+ basic_machine=rs6000-ibm
+ ;;
+ vax)
+ basic_machine=vax-dec
+ ;;
+ pdp10)
+ # there are many clones, so DEC is not a safe bet
+ basic_machine=pdp10-unknown
+ ;;
+ pdp11)
+ basic_machine=pdp11-dec
+ ;;
+ we32k)
+ basic_machine=we32k-att
+ ;;
+ sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
+ basic_machine=sh-unknown
+ ;;
+ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+ basic_machine=sparc-sun
+ ;;
+ cydra)
+ basic_machine=cydra-cydrome
+ ;;
+ orion)
+ basic_machine=orion-highlevel
+ ;;
+ orion105)
+ basic_machine=clipper-highlevel
+ ;;
+ mac | mpw | mac-mpw)
+ basic_machine=m68k-apple
+ ;;
+ pmac | pmac-mpw)
+ basic_machine=powerpc-apple
+ ;;
+ *-unknown)
+ # Make sure to match an already-canonicalized machine name.
+ ;;
+ *)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+ *-digital*)
+ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+ ;;
+ *-commodore*)
+ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+ ;;
+ *)
+ ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+ # First match some system type aliases
+ # that might get confused with valid system types.
+ # -solaris* is a basic system type, with this one exception.
+ -auroraux)
+ os=-auroraux
+ ;;
+ -solaris1 | -solaris1.*)
+ os=`echo $os | sed -e 's|solaris1|sunos4|'`
+ ;;
+ -solaris)
+ os=-solaris2
+ ;;
+ -svr4*)
+ os=-sysv4
+ ;;
+ -unixware*)
+ os=-sysv4.2uw
+ ;;
+ -gnu/linux*)
+ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ ;;
+ # First accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST END IN A *, to match a version number.
+ # -sysv* is not here because it comes later, after sysvr4.
+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+ | -sym* | -kopensolaris* | -plan9* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ | -aos* | -aros* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+ | -bitrig* | -openbsd* | -solidbsd* \
+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* | -cegcc* \
+ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+ | -linux-newlib* | -linux-musl* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -qnx*)
+ case $basic_machine in
+ x86-* | i*86-*)
+ ;;
+ *)
+ os=-nto$os
+ ;;
+ esac
+ ;;
+ -nto-qnx*)
+ ;;
+ -nto*)
+ os=`echo $os | sed -e 's|nto|nto-qnx|'`
+ ;;
+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ ;;
+ -mac*)
+ os=`echo $os | sed -e 's|mac|macos|'`
+ ;;
+ -linux-dietlibc)
+ os=-linux-dietlibc
+ ;;
+ -linux*)
+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ ;;
+ -sunos5*)
+ os=`echo $os | sed -e 's|sunos5|solaris2|'`
+ ;;
+ -sunos6*)
+ os=`echo $os | sed -e 's|sunos6|solaris3|'`
+ ;;
+ -opened*)
+ os=-openedition
+ ;;
+ -os400*)
+ os=-os400
+ ;;
+ -wince*)
+ os=-wince
+ ;;
+ -osfrose*)
+ os=-osfrose
+ ;;
+ -osf*)
+ os=-osf
+ ;;
+ -utek*)
+ os=-bsd
+ ;;
+ -dynix*)
+ os=-bsd
+ ;;
+ -acis*)
+ os=-aos
+ ;;
+ -atheos*)
+ os=-atheos
+ ;;
+ -syllable*)
+ os=-syllable
+ ;;
+ -386bsd)
+ os=-bsd
+ ;;
+ -ctix* | -uts*)
+ os=-sysv
+ ;;
+ -nova*)
+ os=-rtmk-nova
+ ;;
+ -ns2 )
+ os=-nextstep2
+ ;;
+ -nsk*)
+ os=-nsk
+ ;;
+ # Preserve the version number of sinix5.
+ -sinix5.*)
+ os=`echo $os | sed -e 's|sinix|sysv|'`
+ ;;
+ -sinix*)
+ os=-sysv4
+ ;;
+ -tpf*)
+ os=-tpf
+ ;;
+ -triton*)
+ os=-sysv3
+ ;;
+ -oss*)
+ os=-sysv3
+ ;;
+ -svr4)
+ os=-sysv4
+ ;;
+ -svr3)
+ os=-sysv3
+ ;;
+ -sysvr4)
+ os=-sysv4
+ ;;
+ # This must come after -sysvr4.
+ -sysv*)
+ ;;
+ -ose*)
+ os=-ose
+ ;;
+ -es1800*)
+ os=-ose
+ ;;
+ -xenix)
+ os=-xenix
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ os=-mint
+ ;;
+ -aros*)
+ os=-aros
+ ;;
+ -zvmoe)
+ os=-zvmoe
+ ;;
+ -dicos*)
+ os=-dicos
+ ;;
+ -nacl*)
+ ;;
+ -none)
+ ;;
+ *)
+ # Get rid of the `-' at the beginning of $os.
+ os=`echo $os | sed 's/[^-]*-//'`
+ echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system. Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+ score-*)
+ os=-elf
+ ;;
+ spu-*)
+ os=-elf
+ ;;
+ *-acorn)
+ os=-riscix1.2
+ ;;
+ arm*-rebel)
+ os=-linux
+ ;;
+ arm*-semi)
+ os=-aout
+ ;;
+ c4x-* | tic4x-*)
+ os=-coff
+ ;;
+ c8051-*)
+ os=-elf
+ ;;
+ hexagon-*)
+ os=-elf
+ ;;
+ tic54x-*)
+ os=-coff
+ ;;
+ tic55x-*)
+ os=-coff
+ ;;
+ tic6x-*)
+ os=-coff
+ ;;
+ # This must come before the *-dec entry.
+ pdp10-*)
+ os=-tops20
+ ;;
+ pdp11-*)
+ os=-none
+ ;;
+ *-dec | vax-*)
+ os=-ultrix4.2
+ ;;
+ m68*-apollo)
+ os=-domain
+ ;;
+ i386-sun)
+ os=-sunos4.0.2
+ ;;
+ m68000-sun)
+ os=-sunos3
+ ;;
+ m68*-cisco)
+ os=-aout
+ ;;
+ mep-*)
+ os=-elf
+ ;;
+ mips*-cisco)
+ os=-elf
+ ;;
+ mips*-*)
+ os=-elf
+ ;;
+ or1k-*)
+ os=-elf
+ ;;
+ or32-*)
+ os=-coff
+ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=-sysv3
+ ;;
+ sparc-* | *-sun)
+ os=-sunos4.1.1
+ ;;
+ *-be)
+ os=-beos
+ ;;
+ *-haiku)
+ os=-haiku
+ ;;
+ *-ibm)
+ os=-aix
+ ;;
+ *-knuth)
+ os=-mmixware
+ ;;
+ *-wec)
+ os=-proelf
+ ;;
+ *-winbond)
+ os=-proelf
+ ;;
+ *-oki)
+ os=-proelf
+ ;;
+ *-hp)
+ os=-hpux
+ ;;
+ *-hitachi)
+ os=-hiux
+ ;;
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+ os=-sysv
+ ;;
+ *-cbm)
+ os=-amigaos
+ ;;
+ *-dg)
+ os=-dgux
+ ;;
+ *-dolphin)
+ os=-sysv3
+ ;;
+ m68k-ccur)
+ os=-rtu
+ ;;
+ m88k-omron*)
+ os=-luna
+ ;;
+ *-next )
+ os=-nextstep
+ ;;
+ *-sequent)
+ os=-ptx
+ ;;
+ *-crds)
+ os=-unos
+ ;;
+ *-ns)
+ os=-genix
+ ;;
+ i370-*)
+ os=-mvs
+ ;;
+ *-next)
+ os=-nextstep3
+ ;;
+ *-gould)
+ os=-sysv
+ ;;
+ *-highlevel)
+ os=-bsd
+ ;;
+ *-encore)
+ os=-bsd
+ ;;
+ *-sgi)
+ os=-irix
+ ;;
+ *-siemens)
+ os=-sysv4
+ ;;
+ *-masscomp)
+ os=-rtu
+ ;;
+ f30[01]-fujitsu | f700-fujitsu)
+ os=-uxpv
+ ;;
+ *-rom68k)
+ os=-coff
+ ;;
+ *-*bug)
+ os=-coff
+ ;;
+ *-apple)
+ os=-macos
+ ;;
+ *-atari*)
+ os=-mint
+ ;;
+ *)
+ os=-none
+ ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer. We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+ *-unknown)
+ case $os in
+ -riscix*)
+ vendor=acorn
+ ;;
+ -sunos*)
+ vendor=sun
+ ;;
+ -cnk*|-aix*)
+ vendor=ibm
+ ;;
+ -beos*)
+ vendor=be
+ ;;
+ -hpux*)
+ vendor=hp
+ ;;
+ -mpeix*)
+ vendor=hp
+ ;;
+ -hiux*)
+ vendor=hitachi
+ ;;
+ -unos*)
+ vendor=crds
+ ;;
+ -dgux*)
+ vendor=dg
+ ;;
+ -luna*)
+ vendor=omron
+ ;;
+ -genix*)
+ vendor=ns
+ ;;
+ -mvs* | -opened*)
+ vendor=ibm
+ ;;
+ -os400*)
+ vendor=ibm
+ ;;
+ -ptx*)
+ vendor=sequent
+ ;;
+ -tpf*)
+ vendor=ibm
+ ;;
+ -vxsim* | -vxworks* | -windiss*)
+ vendor=wrs
+ ;;
+ -aux*)
+ vendor=apple
+ ;;
+ -hms*)
+ vendor=hitachi
+ ;;
+ -mpw* | -macos*)
+ vendor=apple
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ vendor=atari
+ ;;
+ -vos*)
+ vendor=stratus
+ ;;
+ esac
+ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+ ;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/configure b/configure
index 51cb587..5ba1b60 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for CUPS 2.2.3.
+# Generated by GNU Autoconf 2.68 for CUPS 2.2.4.
#
# Report bugs to <https://github.com/apple/cups/issues>.
#
@@ -560,8 +560,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='CUPS'
PACKAGE_TARNAME='cups'
-PACKAGE_VERSION='2.2.3'
-PACKAGE_STRING='CUPS 2.2.3'
+PACKAGE_VERSION='2.2.4'
+PACKAGE_STRING='CUPS 2.2.4'
PACKAGE_BUGREPORT='https://github.com/apple/cups/issues'
PACKAGE_URL='https://www.cups.org/'
@@ -634,6 +634,7 @@ CUPS_FATAL_ERRORS
CUPS_LOG_FILE_PERM
CUPS_CUPSD_FILE_PERM
CUPS_CONFIG_FILE_PERM
+CUPS_EXE_FILE_PERM
CUPS_BUNDLEDIR
LANGUAGES
XINETD
@@ -768,6 +769,15 @@ AWK
CUPS_BUILD
CUPS_REVISION
CUPS_VERSION
+LOCALTARGET
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
target_alias
host_alias
build_alias
@@ -867,6 +877,7 @@ with_rcstop
with_xinetd
with_languages
with_bundledir
+with_exe_file_perm
with_config_file_perm
with_cupsd_file_perm
with_log_file_perm
@@ -1448,7 +1459,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures CUPS 2.2.3 to adapt to many kinds of systems.
+\`configure' configures CUPS 2.2.4 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1504,12 +1515,16 @@ Fine tuning of the installation directories:
_ACEOF
cat <<\_ACEOF
+
+System types:
+ --build=BUILD configure for building on BUILD [guessed]
+ --host=HOST cross-compile to build programs to run on HOST [BUILD]
_ACEOF
fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of CUPS 2.2.3:";;
+ short | recursive ) echo "Configuration of CUPS 2.2.4:";;
esac
cat <<\_ACEOF
@@ -1588,6 +1603,7 @@ Optional Packages:
--with-xinetd set path for xinetd config files
--with-languages set installed languages, default=all
--with-bundledir set macOS localization bundle directory
+ --with-exe-file-perm set default exectuable permissions value, default=0555
--with-config-file-perm set default ConfigFilePerm value, default=0640
--with-cupsd-file-perm set default cupsd permissions, default=0500
--with-log-file-perm set default LogFilePerm value, default=0644
@@ -1689,7 +1705,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-CUPS configure 2.2.3
+CUPS configure 2.2.4
generated by GNU Autoconf 2.68
Copyright (C) 2010 Free Software Foundation, Inc.
@@ -2153,7 +2169,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by CUPS $as_me 2.2.3, which was
+It was created by CUPS $as_me 2.2.4, which was
generated by GNU Autoconf 2.68. Invocation command line was
$ $0 $@
@@ -2503,31 +2519,132 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
-uname=`uname`
-uversion=`uname -r | sed -e '1,$s/^[^0-9]*\([0-9]*\)\.\([0-9]*\).*/\1\2/'`
-uarch=`uname -m`
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+ if test -f "$ac_dir/install-sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f "$ac_dir/install.sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f "$ac_dir/shtool"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+fi
-case "$uname" in
- Darwin*)
- uname="Darwin"
- if test $uversion -lt 120; then
- as_fn_error $? "Sorry, this version of CUPS requires macOS 10.8 or higher." "$LINENO" 5
- fi
- ;;
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
- GNU* | GNU/*)
- uname="GNU"
- ;;
- Linux*)
- uname="Linux"
- ;;
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if ${ac_cv_build+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+ as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if ${ac_cv_host+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "x$host_alias" = x; then
+ ac_cv_host=$ac_cv_build
+else
+ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+
+host_os_name=`echo $host_os | sed -e '1,$s/[0-9.]*$//g'`
+host_os_version=`echo $host_os | sed -e '1,$s/^[^0-9.]*//g' | awk -F. '{print $1 $2}'`
+# Linux often does not yield an OS version we can use...
+if test "x$host_os_version" = x; then
+ host_os_version="0"
+fi
+
+if test "$host_os_name" = darwin -a $host_os_version -lt 120; then
+ as_fn_error $? "Sorry, this version of CUPS requires macOS 10.8 or higher." "$LINENO" 5
+fi
+
+if test "$build" = "$host"; then
+ # No, build local targets
+ LOCALTARGET="local"
+else
+ # Yes, don't build local targets
+ LOCALTARGET=""
+fi
+
ac_config_headers="$ac_config_headers config.h"
-CUPS_VERSION="2.2.3"
+CUPS_VERSION="2.2.4"
CUPS_REVISION=""
CUPS_BUILD="cups-$CUPS_VERSION"
@@ -5162,7 +5279,7 @@ _ACEOF
fi
done
-if test "$uname" = "HP-UX" -a "$uversion" = "1020"; then
+if test "$host_os_name" = "hp-ux" -a "$host_os_version" = "1020"; then
echo Forcing snprintf emulation for HP-UX.
else
for ac_func in snprintf vsnprintf
@@ -5228,8 +5345,8 @@ fi
done
-case "$uname" in
- Linux | GNU)
+case "$host_os_name" in
+ linux* | gnu*)
# Do not use sigset on Linux or GNU HURD
;;
*)
@@ -5371,7 +5488,7 @@ USBQUIRKS=""
if test "x$PKGCONFIG" != x; then
- if test x$enable_libusb != xno -a $uname != Darwin; then
+ if test x$enable_libusb != xno -a $host_os_name != darwin; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libusb-1.0" >&5
$as_echo_n "checking for libusb-1.0... " >&6; }
if $PKGCONFIG --exists libusb-1.0; then
@@ -5551,8 +5668,8 @@ fi
-case $uname in
- Darwin* | *BSD*)
+case $host_os_name in
+ darwin* | *bsd*)
ARFLAGS="-rcv"
;;
*)
@@ -5652,7 +5769,7 @@ DBUSDIR=""
DBUS_NOTIFIER=""
DBUS_NOTIFIERLIBS=""
-if test "x$enable_dbus" != xno -a "x$PKGCONFIG" != x -a "x$uname" != xDarwin; then
+if test "x$enable_dbus" != xno -a "x$PKGCONFIG" != x -a "x$host_os_name" != xdarwin; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for DBUS" >&5
$as_echo_n "checking for DBUS... " >&6; }
if $PKGCONFIG --exists dbus-1; then
@@ -5697,8 +5814,8 @@ CUPS_DEFAULT_SYSTEM_AUTHKEY=""
CUPS_SYSTEM_AUTHKEY=""
INSTALLXPC=""
-case $uname in
- Darwin*)
+case $host_os_name in
+ darwin*)
BACKLIBS="$BACKLIBS -framework IOKit"
SERVERLIBS="$SERVERLIBS -framework IOKit -weak_framework ApplicationServices"
LIBS="-framework SystemConfiguration -framework CoreFoundation -framework Security $LIBS"
@@ -5849,7 +5966,7 @@ fi
- if test $uversion -ge 100; then
+ if test $host_os_version -ge 100; then
ac_fn_c_check_header_mongrel "$LINENO" "sandbox.h" "ac_cv_header_sandbox_h" "$ac_includes_default"
if test "x$ac_cv_header_sandbox_h" = xyes; then :
$as_echo "#define HAVE_SANDBOX_H 1" >>confdefs.h
@@ -5858,7 +5975,7 @@ fi
fi
- if test $uversion -ge 110 -a $uversion -lt 120; then
+ if test $host_os_version -ge 110 -a $host_os_version -lt 120; then
# Broken public headers in 10.7.x...
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sandbox/private.h presence" >&5
$as_echo_n "checking for sandbox/private.h presence... " >&6; }
@@ -5988,7 +6105,7 @@ fi
if test "$localstatedir" = "\${prefix}/var"; then
if test "$prefix" = "/"; then
- if test "$uname" = Darwin; then
+ if test "$host_os_name" = darwin; then
localstatedir="/private/var"
else
localstatedir="/var"
@@ -6000,7 +6117,7 @@ fi
if test "$sysconfdir" = "\${prefix}/etc"; then
if test "$prefix" = "/"; then
- if test "$uname" = Darwin; then
+ if test "$host_os_name" = darwin; then
sysconfdir="/private/etc"
else
sysconfdir="/etc"
@@ -6011,8 +6128,8 @@ if test "$sysconfdir" = "\${prefix}/etc"; then
fi
if test "$libdir" = "\${exec_prefix}/lib"; then
- case "$uname" in
- Linux*)
+ case "$host_os_name" in
+ linux*)
if test -d /usr/lib64 -a ! -d /usr/lib64/fakeroot; then
libdir="$exec_prefix/lib64"
fi
@@ -6111,7 +6228,7 @@ fi
if test x$cachedir = x; then
- if test "x$uname" = xDarwin; then
+ if test "x$host_os_name" = xdarwin; then
CUPS_CACHEDIR="$localstatedir/spool/cups/cache"
else
CUPS_CACHEDIR="$localstatedir/cache/cups"
@@ -6216,8 +6333,8 @@ _ACEOF
# Locale data
if test "$localedir" = "\${datarootdir}/locale"; then
- case "$uname" in
- Linux | GNU | *BSD* | Darwin*)
+ case "$host_os_name" in
+ linux* | gnu* | *bsd* | darwin*)
CUPS_LOCALEDIR="$datarootdir/locale"
;;
@@ -6270,8 +6387,8 @@ _ACEOF
# Server executables...
-case "$uname" in
- *BSD* | Darwin*)
+case "$host_os_name" in
+ *bsd* | darwin*)
# *BSD and Darwin (macOS)
INSTALL_SYSV=""
CUPS_SERVERBIN="$exec_prefix/libexec/cups"
@@ -6305,8 +6422,8 @@ if test "${with_rundir+set}" = set; then :
withval=$with_rundir; CUPS_STATEDIR="$withval"
else
- case "$uname" in
- Darwin*)
+ case "$host_os_name" in
+ darwin*)
# Darwin (macOS)
CUPS_STATEDIR="$CUPS_SERVERROOT"
;;
@@ -6331,8 +6448,8 @@ if test "$mandir" = "\${datarootdir}/man" -a "$prefix" = "/"; then
fi
if test "$mandir" = "\${prefix}/man" -a "$prefix" = "/"; then
- case "$uname" in
- Darwin* | Linux | GNU | *BSD*)
+ case "$host_os_name" in
+ darwin* | linux* | gnu* | *bsd*)
# Darwin, macOS, Linux, GNU HURD, and *BSD
mandir="/usr/share/man"
AMANDIR="/usr/share/man"
@@ -6353,8 +6470,8 @@ fi
-case "$uname" in
- SunOS*)
+case "$host_os_name" in
+ sunos*)
# Solaris
MAN1EXT=1
MAN5EXT=5
@@ -6362,7 +6479,7 @@ case "$uname" in
MAN8EXT=1m
MAN8DIR=1m
;;
- Linux* | GNU* | Darwin*)
+ linux* | gnu* | darwin*)
# Linux, GNU Hurd, and macOS
MAN1EXT=1.gz
MAN5EXT=5.gz
@@ -6402,8 +6519,8 @@ LIBCUPSBASE="lib$cupsbase"
LIBCUPSSTATIC="lib$cupsbase.a"
if test x$enable_shared != xno; then
- case "$uname" in
- SunOS*)
+ case "$host_os_name" in
+ sunos*)
LIBCUPS="lib$cupsbase.so.2"
LIBCUPSCGI="libcupscgi.so.1"
LIBCUPSIMAGE="libcupsimage.so.2"
@@ -6413,7 +6530,7 @@ if test x$enable_shared != xno; then
DSOXX="\$(CXX)"
DSOFLAGS="$DSOFLAGS -Wl,-h\`basename \$@\` -G \$(OPTIM)"
;;
- Linux | GNU | *BSD*)
+ linux* | gnu* | *bsd*)
LIBCUPS="lib$cupsbase.so.2"
LIBCUPSCGI="libcupscgi.so.1"
LIBCUPSIMAGE="libcupsimage.so.2"
@@ -6423,7 +6540,7 @@ if test x$enable_shared != xno; then
DSOXX="\$(CXX)"
DSOFLAGS="$DSOFLAGS -Wl,-soname,\`basename \$@\` -shared \$(OPTIM)"
;;
- Darwin*)
+ darwin*)
LIBCUPS="lib$cupsbase.2.dylib"
LIBCUPSCGI="libcupscgi.1.dylib"
LIBCUPSIMAGE="libcupsimage.2.dylib"
@@ -6500,8 +6617,8 @@ if test "$DSO" != ":"; then
# Tell the run-time linkers where to find a DSO. Some platforms
# need this option, even when the library is installed in a
# standard location...
- case $uname in
- SunOS*)
+ case $host_os_name in
+ sunos*)
# Solaris...
if test $exec_prefix != /usr; then
DSOFLAGS="-R$libdir $DSOFLAGS"
@@ -6509,7 +6626,7 @@ if test "$DSO" != ":"; then
EXPORT_LDFLAGS="-R$libdir"
fi
;;
- *BSD*)
+ *bsd*)
# *BSD...
if test $exec_prefix != /usr; then
DSOFLAGS="-Wl,-R$libdir $DSOFLAGS"
@@ -6517,7 +6634,7 @@ if test "$DSO" != ":"; then
EXPORT_LDFLAGS="-Wl,-R$libdir"
fi
;;
- Linux | GNU)
+ linux* | gnu*)
# Linux, and HURD...
if test $exec_prefix != /usr; then
DSOFLAGS="-Wl,-rpath,$libdir $DSOFLAGS"
@@ -6609,6 +6726,10 @@ if test x$enable_debug_guards = xyes; then
fi
if test x$enable_unit_tests = xyes; then
+ if test "$build" != "$host"; then
+ as_fn_error $? "Sorry, cannot build unit tests when cross-compiling." "$LINENO" 5
+ fi
+
UNITTESTS="unittests"
else
UNITTESTS=""
@@ -6635,7 +6756,7 @@ else
fi
if test -z "$with_ldarchflags"; then
- if test "$uname" = Darwin; then
+ if test "$host_os_name" = darwin; then
# Only create Intel programs by default
LDARCHFLAGS="`echo $ARCHFLAGS | sed -e '1,$s/-arch ppc64//'`"
else
@@ -6723,8 +6844,8 @@ rm -f core conftest.err conftest.$ac_objext \
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler supports -fPIE" >&5
$as_echo_n "checking whether compiler supports -fPIE... " >&6; }
OLDCFLAGS="$CFLAGS"
- case "$uname" in
- Darwin*)
+ case "$host_os_name" in
+ darwin*)
CFLAGS="$CFLAGS -fPIE -Wl,-pie"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -6865,8 +6986,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
fi
- case "$uname" in
- Darwin*)
+ case "$host_os_name" in
+ darwin*)
# -D_FORTIFY_SOURCE=2 adds additional object size
# checking, basically wrapping all string functions
# with buffer-limited ones. Not strictly needed for
@@ -6875,7 +6996,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2"
;;
- Linux*)
+ linux*)
# The -z relro option is provided by the Linux linker command to
# make relocatable data read-only.
if test x$enable_relro = xyes; then
@@ -6885,8 +7006,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
esac
else
# Add vendor-specific compiler options...
- case $uname in
- SunOS*)
+ case $host_os_name in
+ sunos*)
# Solaris
if test -z "$OPTIM"; then
if test "x$with_optim" = x; then
@@ -6913,8 +7034,8 @@ else
fi
# Add general compiler options per platform...
-case $uname in
- Linux*)
+case $host_os_name in
+ linux*)
# glibc 2.8 and higher breaks peer credentials unless you
# define _GNU_SOURCE...
OPTIM="$OPTIM -D_GNU_SOURCE"
@@ -7395,7 +7516,7 @@ fi
# Tru64 5.1b leaks file descriptors with these functions; disable until
# we can come up with a test for this...
-if test "$uname" != "OSF1"; then
+if test "$host_os_name" != "osf1"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing getaddrinfo" >&5
$as_echo_n "checking for library containing getaddrinfo... " >&6; }
if ${ac_cv_search_getaddrinfo+:} false; then :
@@ -7539,8 +7660,8 @@ fi
if test x$enable_domainsocket != xno -a x$default_domainsocket != xno; then
if test "x$default_domainsocket" = x; then
- case "$uname" in
- Darwin*)
+ case "$host_os_name" in
+ darwin*)
# Darwin and macOS do their own thing...
CUPS_DEFAULT_DOMAINSOCKET="$localstatedir/run/cupsd"
;;
@@ -7696,8 +7817,8 @@ else
fi
if test "x$KRB5CONFIG" != x; then
- case "$uname" in
- Darwin)
+ case "$host_os_name" in
+ darwin)
# macOS weak-links to the Kerberos framework...
LIBGSSAPI="-weak_framework Kerberos"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GSS framework" >&5
@@ -7711,7 +7832,7 @@ $as_echo "yes" >&6; }
$as_echo "no" >&6; }
fi
;;
- SunOS*)
+ sunos*)
# Solaris has a non-standard krb5-config, don't use it!
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gss_display_status in -lgss" >&5
$as_echo_n "checking for gss_display_status in -lgss... " >&6; }
@@ -7771,8 +7892,8 @@ $as_echo "#define HAVE_GSSAPI 1" >>confdefs.h
else
# Check for vendor-specific implementations...
- case "$uname" in
- HP-UX*)
+ case "$host_os_name" in
+ hp-ux*)
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gss_display_status in -lgss" >&5
$as_echo_n "checking for gss_display_status in -lgss... " >&6; }
if ${ac_cv_lib_gss_gss_display_status+:} false; then :
@@ -7817,7 +7938,7 @@ $as_echo "#define HAVE_GSSAPI 1" >>confdefs.h
fi
;;
- SunOS*)
+ sunos*)
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gss_display_status in -lgss" >&5
$as_echo_n "checking for gss_display_status in -lgss... " >&6; }
if ${ac_cv_lib_gss_gss_display_status+:} false; then :
@@ -8072,7 +8193,7 @@ $as_echo "$have_pthread" >&6; }
# Solaris requires -D_POSIX_PTHREAD_SEMANTICS to
# be POSIX-compliant... :(
- if test $uname = SunOS; then
+ if test $host_os_name = sunos; then
PTHREAD_FLAGS="$PTHREAD_FLAGS -D_POSIX_PTHREAD_SEMANTICS"
fi
break
@@ -8107,7 +8228,7 @@ CUPS_SERVERKEYCHAIN=""
if test x$enable_ssl != xno; then
if test $have_ssl = 0 -a "x$enable_cdsassl" != "xno"; then
- if test $uname = Darwin; then
+ if test $host_os_name = darwin; then
ac_fn_c_check_header_mongrel "$LINENO" "Security/SecureTransport.h" "ac_cv_header_Security_SecureTransport_h" "$ac_includes_default"
if test "x$ac_cv_header_Security_SecureTransport_h" = xyes; then :
@@ -8184,7 +8305,7 @@ fi
- if test $uversion -ge 150; then
+ if test $host_os_version -ge 150; then
$as_echo "#define HAVE_SSLSETENABLEDCIPHERS 1" >>confdefs.h
fi
@@ -8676,8 +8797,8 @@ fi
LIBS="$SAVELIBS"
- case "$uname" in
- Darwin*)
+ case "$host_os_name" in
+ darwin*)
# Darwin/macOS
if test "x$with_pam_module" != x; then
PAMFILE="pam.$with_pam_module"
@@ -9001,7 +9122,7 @@ DNSSD_BACKEND=""
IPPFIND_BIN=""
IPPFIND_MAN=""
-if test "x$PKGCONFIG" != x -a x$enable_avahi != xno -a x$uname != xDarwin; then
+if test "x$PKGCONFIG" != x -a x$enable_avahi != xno -a x$host_os_name != xdarwin; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Avahi" >&5
$as_echo_n "checking for Avahi... " >&6; }
if $PKGCONFIG --exists avahi-client; then
@@ -9024,8 +9145,8 @@ if test "x$DNSSD_BACKEND" = x -a x$enable_dnssd != xno; then
ac_fn_c_check_header_mongrel "$LINENO" "dns_sd.h" "ac_cv_header_dns_sd_h" "$ac_includes_default"
if test "x$ac_cv_header_dns_sd_h" = xyes; then :
- case "$uname" in
- Darwin*)
+ case "$host_os_name" in
+ darwin*)
# Darwin and macOS...
$as_echo "#define HAVE_DNSSD 1" >>confdefs.h
@@ -9115,16 +9236,10 @@ fi
- case "$uname" in
- Darwin*)
- # Darwin, macOS
- LAUNCHD_DIR="/System/Library/LaunchDaemons"
- # liblaunch is already part of libSystem
- ;;
- *)
- # All others; this test will need to be updated
- ;;
- esac
+ if test "$host_os_name" = darwin; then
+ LAUNCHD_DIR="/System/Library/LaunchDaemons"
+ # liblaunch is already part of libSystem
+ fi
fi
# Check whether --enable-systemd was given.
@@ -9268,13 +9383,13 @@ if test x$rcdir = x; then
fi
if test "x$rcstart" = x; then
- case "$uname" in
- Linux | GNU | GNU/k*BSD*)
+ case "$host_os_name" in
+ linux* | gnu*)
# Linux
rcstart="81"
;;
- SunOS*)
+ sunos*)
# Solaris
rcstart="81"
;;
@@ -9287,8 +9402,8 @@ if test "x$rcstart" = x; then
fi
if test "x$rcstop" = x; then
- case "$uname" in
- Linux | GNU | GNU/k*BSD*)
+ case "$host_os_name" in
+ linux* | gnu*)
# Linux
rcstop="36"
;;
@@ -9364,7 +9479,7 @@ fi
if test "${with_bundledir+set}" = set; then :
withval=$with_bundledir; CUPS_BUNDLEDIR="$withval"
else
- if test "x$uname" = xDarwin -a $uversion -ge 100; then
+ if test "x$host_os_name" = xdarwin -a $host_os_version -ge 100; then
CUPS_BUNDLEDIR="/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A"
LANGUAGES=""
else
@@ -9382,11 +9497,28 @@ _ACEOF
fi
+# Check whether --with-exe_file_perm was given.
+if test "${with_exe_file_perm+set}" = set; then :
+ withval=$with_exe_file_perm; CUPS_EXE_FILE_PERM="$withval"
+else
+ case "$host_os_name" in
+ linux* | gnu*)
+ CUPS_EXE_FILE_PERM="755"
+ ;;
+ *)
+ CUPS_EXE_FILE_PERM="555"
+ ;;
+ esac
+fi
+
+
+
+
# Check whether --with-config_file_perm was given.
if test "${with_config_file_perm+set}" = set; then :
withval=$with_config_file_perm; CUPS_CONFIG_FILE_PERM="$withval"
else
- if test "x$uname" = xDarwin; then
+ if test "x$host_os_name" = xdarwin; then
CUPS_CONFIG_FILE_PERM="644"
else
CUPS_CONFIG_FILE_PERM="640"
@@ -9404,7 +9536,14 @@ _ACEOF
if test "${with_cupsd_file_perm+set}" = set; then :
withval=$with_cupsd_file_perm; CUPS_CUPSD_FILE_PERM="$withval"
else
- CUPS_CUPSD_FILE_PERM="500"
+ case "$host_os_name" in
+ linux* | gnu*)
+ CUPS_CUPSD_FILE_PERM="700"
+ ;;
+ *)
+ CUPS_CUPSD_FILE_PERM="500"
+ ;;
+ esac
fi
@@ -9553,7 +9692,7 @@ if test "${with_cups_user+set}" = set; then :
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for default print user" >&5
$as_echo_n "checking for default print user... " >&6; }
- if test x$uname = xDarwin; then
+ if test x$host_os_name = xdarwin; then
if test x`id -u _lp 2>/dev/null` = x; then
CUPS_USER="lp";
else
@@ -9596,7 +9735,7 @@ if test "${with_cups_group+set}" = set; then :
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for default print group" >&5
$as_echo_n "checking for default print group... " >&6; }
- if test x$uname = xDarwin; then
+ if test x$host_os_name = xdarwin; then
if test x`id -g _lp 2>/dev/null` = x; then
CUPS_GROUP="lp";
else
@@ -9638,7 +9777,7 @@ fi
if test "${with_system_groups+set}" = set; then :
withval=$with_system_groups; CUPS_SYSTEM_GROUPS="$withval"
else
- if test x$uname = xDarwin; then
+ if test x$host_os_name = xdarwin; then
CUPS_SYSTEM_GROUPS="admin"
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for default system groups" >&5
@@ -9710,15 +9849,15 @@ fi
if test x$default_printcap != xno; then
if test "x$default_printcap" = "xdefault"; then
- case $uname in
- Darwin*)
- if test $uversion -ge 90; then
+ case $host_os_name in
+ darwin*)
+ if test $host_os_version -ge 90; then
CUPS_DEFAULT_PRINTCAP="/Library/Preferences/org.cups.printers.plist"
else
CUPS_DEFAULT_PRINTCAP="/etc/printcap"
fi
;;
- SunOS*)
+ sunos*)
CUPS_DEFAULT_PRINTCAP="/etc/printers.conf"
;;
*)
@@ -9749,8 +9888,8 @@ fi
if test x$default_lpdconfigfile != xno; then
if test "x$default_lpdconfigfile" = "xdefault"; then
- case $uname in
- Darwin*)
+ case $host_os_name in
+ darwin*)
CUPS_DEFAULT_LPD_CONFIG_FILE="launchd:///System/Library/LaunchDaemons/org.cups.cups-lpd.plist"
;;
*)
@@ -9839,7 +9978,7 @@ if test "${with_snmp_address+set}" = set; then :
CUPS_SNMP_ADDRESS="Address $withval"
fi
else
- if test "x$uname" = xDarwin; then
+ if test "x$host_os_name" = xdarwin; then
CUPS_SNMP_ADDRESS=""
else
CUPS_SNMP_ADDRESS="Address @LOCAL"
@@ -9889,7 +10028,7 @@ case "x$enable_webif" in
CUPS_DEFAULT_WEBIF=1
;;
*)
- if test $uname = Darwin; then
+ if test $host_os_name = darwin; then
CUPS_WEBIF=No
CUPS_DEFAULT_WEBIF=0
else
@@ -10748,7 +10887,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by CUPS $as_me 2.2.3, which was
+This file was extended by CUPS $as_me 2.2.4, which was
generated by GNU Autoconf 2.68. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -10811,7 +10950,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-CUPS config.status 2.2.3
+CUPS config.status 2.2.4
configured by $0, generated by GNU Autoconf 2.68,
with options \\"\$ac_cs_config\\"
diff --git a/configure.ac b/configure.ac
index ad3ec8e..b79a738 100644
--- a/configure.ac
+++ b/configure.ac
@@ -15,7 +15,7 @@ dnl We need at least autoconf 2.60...
AC_PREREQ(2.60)
dnl Package name and version...
-AC_INIT([CUPS], [2.2.3], [https://github.com/apple/cups/issues], [cups], [https://www.cups.org/])
+AC_INIT([CUPS], [2.2.4], [https://github.com/apple/cups/issues], [cups], [https://www.cups.org/])
sinclude(config-scripts/cups-opsys.m4)
sinclude(config-scripts/cups-common.m4)
diff --git a/cups/Makefile b/cups/Makefile
index 1df7d85..962bee6 100644
--- a/cups/Makefile
+++ b/cups/Makefile
@@ -571,56 +571,27 @@ tlscheck: tlscheck.o $(LIBCUPSSTATIC)
apihelp:
echo Generating CUPS API help files...
- mxmldoc --section "Programming" \
- --title "Introduction to CUPS Programming" \
- --css ../doc/cups-printable.css \
- --header api-overview.header --intro api-overview.shtml \
- >../doc/help/api-overview.html
+ $(RM) cupspm.xml
+ mxmldoc --section "Programming" --body cupspm.md \
+ cupspm.xml \
+ auth.c cups.h dest*.c encode.c http.h http*.c ipp.h ipp*.c \
+ options.c tls-darwin.c usersys.c util.c \
+ --coverimage cupspm.png \
+ --epub ../doc/help/cupspm.epub
+ mxmldoc --section "Programming" --body cupspm.md \
+ cupspm.xml > ../doc/help/cupspm.html
+ $(RM) cupspm.xml
mxmldoc --section "Programming" --title "Administration APIs" \
--css ../doc/cups-printable.css \
--header api-admin.header --intro api-admin.shtml \
api-admin.xml \
adminutil.c adminutil.h getdevices.c >../doc/help/api-admin.html
- mxmldoc --tokens help/api-admin.html api-admin.xml >../doc/help/api-admin.tokens
$(RM) api-admin.xml
- mxmldoc --section "Programming" --title "Array API" \
- --css ../doc/cups-printable.css \
- --header api-array.header --intro api-array.shtml \
- api-array.xml \
- array.h array.c >../doc/help/api-array.html
- mxmldoc --tokens help/api-array.html api-array.xml >../doc/help/api-array.tokens
- $(RM) api-array.xml
- mxmldoc --section "Programming" --title "CUPS API" \
- --css ../doc/cups-printable.css \
- --header api-cups.header --intro api-cups.shtml \
- api-cups.xml \
- cups.h pwg.h adminutil.c dest*.c language.c notify.c \
- options.c pwg-media.c tempfile.c usersys.c \
- util.c >../doc/help/api-cups.html
- mxmldoc --tokens help/api-cups.html api-cups.xml >../doc/help/api-cups.tokens
- $(RM) api-cups.xml
- mxmldoc --section "Programming" --title "File and Directory APIs" \
- --css ../doc/cups-printable.css \
- --header api-filedir.header --intro api-filedir.shtml \
- api-filedir.xml \
- file.h file.c dir.h dir.c >../doc/help/api-filedir.html
- mxmldoc --tokens api-filedir.xml >../doc/help/api-filedir.tokens
- $(RM) api-filedir.xml
mxmldoc --section "Programming" --title "PPD API (DEPRECATED)" \
--css ../doc/cups-printable.css \
--header api-ppd.header --intro api-ppd.shtml \
api-ppd.xml ppd.h ppd-*.c >../doc/help/api-ppd.html
- mxmldoc --tokens help/api-ppd.html api-ppd.xml >../doc/help/api-ppd.tokens
$(RM) api-ppd.xml
- mxmldoc --section "Programming" --title "HTTP and IPP APIs" \
- --css ../doc/cups-printable.css \
- --header api-httpipp.header --intro api-httpipp.shtml \
- api-httpipp.xml \
- http.h ipp.h auth.c getdevices.c getputfile.c encode.c \
- http.c http-addr.c http-support.c ipp.c ipp-support.c \
- md5passwd.c request.c >../doc/help/api-httpipp.html
- mxmldoc --tokens help/api-httpipp.html api-httpipp.xml >../doc/help/api-httpipp.tokens
- $(RM) api-httpipp.xml
mxmldoc --section "Programming" \
--title "Filter and Backend Programming" \
--css ../doc/cups-printable.css \
@@ -628,7 +599,6 @@ apihelp:
api-filter.xml \
backchannel.c backend.h backend.c sidechannel.c sidechannel.h \
>../doc/help/api-filter.html
- mxmldoc --tokens help/api-filter.html api-filter.xml >../doc/help/api-filter.tokens
$(RM) api-filter.xml
@@ -637,8 +607,6 @@ apihelp:
#
sloc:
- echo "libcupslite: \c"
- sloccount $(LITEOBJS:.o=.c) 2>/dev/null | grep "Total Physical" | awk '{print $$9}'
echo "libcups: \c"
sloccount $(LIBOBJS:.o=.c) 2>/dev/null | grep "Total Physical" | awk '{print $$9}'
diff --git a/cups/auth.c b/cups/auth.c
index 8348a2c..c051c86 100644
--- a/cups/auth.c
+++ b/cups/auth.c
@@ -54,7 +54,7 @@ extern const char *cssmErrorString(int error);
# else
# define GSS_AUTH_IDENTITY_TYPE_1 1
# define gss_acquire_cred_ex_f __ApplePrivate_gss_acquire_cred_ex_f
-typedef struct gss_auth_identity
+typedef struct gss_auth_identity /* @private@ */
{
uint32_t type;
uint32_t flags;
diff --git a/cups/cups-private.h b/cups/cups-private.h
index 264fd01..6fd66a9 100644
--- a/cups/cups-private.h
+++ b/cups/cups-private.h
@@ -1,7 +1,7 @@
/*
* Private definitions for CUPS.
*
- * Copyright 2007-2015 by Apple Inc.
+ * Copyright 2007-2017 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
@@ -105,7 +105,7 @@ typedef struct _cups_globals_s /**** CUPS global state data ****/
int need_res_init; /* Need to reinitialize resolver? */
/* ipp.c */
- ipp_uchar_t ipp_date[11]; /* RFC-1903 date/time data */
+ ipp_uchar_t ipp_date[11]; /* RFC-2579 date/time data */
_cups_buffer_t *cups_buffers; /* Buffer list */
/* ipp-support.c */
diff --git a/cups/cups.h b/cups/cups.h
index 3205dd8..a73cf7a 100644
--- a/cups/cups.h
+++ b/cups/cups.h
@@ -47,10 +47,10 @@ extern "C" {
* Constants...
*/
-# define CUPS_VERSION 2.0203
+# define CUPS_VERSION 2.0204
# define CUPS_VERSION_MAJOR 2
# define CUPS_VERSION_MINOR 2
-# define CUPS_VERSION_PATCH 3
+# define CUPS_VERSION_PATCH 4
# define CUPS_BC_FD 3
/* Back-channel file descriptor for
@@ -78,7 +78,7 @@ extern "C" {
# define CUPS_DEST_FLAGS_NONE 0x00
/* No flags are set */
# define CUPS_DEST_FLAGS_UNCONNECTED 0x01
- /* There is not connection */
+ /* There is no connection */
# define CUPS_DEST_FLAGS_MORE 0x02
/* There are more destinations */
# define CUPS_DEST_FLAGS_REMOVED 0x04
@@ -92,6 +92,8 @@ extern "C" {
/* A connection is being established */
# define CUPS_DEST_FLAGS_CANCELED 0x40
/* Operation was canceled */
+# define CUPS_DEST_FLAGS_DEVICE 0x80
+ /* For @link cupsConnectDest@: Connect to device */
/* Flags for cupsGetDestMediaByName/Size */
# define CUPS_MEDIA_FLAGS_DEFAULT 0x00
@@ -207,38 +209,37 @@ enum cups_ptype_e /* Printer type/capability bit
CUPS_PRINTER_REMOTE = 0x0002, /* Remote printer or class */
CUPS_PRINTER_BW = 0x0004, /* Can do B&W printing */
CUPS_PRINTER_COLOR = 0x0008, /* Can do color printing */
- CUPS_PRINTER_DUPLEX = 0x0010, /* Can do duplexing */
+ CUPS_PRINTER_DUPLEX = 0x0010, /* Can do two-sided printing */
CUPS_PRINTER_STAPLE = 0x0020, /* Can staple output */
- CUPS_PRINTER_COPIES = 0x0040, /* Can do copies */
- CUPS_PRINTER_COLLATE = 0x0080, /* Can collage copies */
+ CUPS_PRINTER_COPIES = 0x0040, /* Can do copies in hardware */
+ CUPS_PRINTER_COLLATE = 0x0080, /* Can quickly collate copies */
CUPS_PRINTER_PUNCH = 0x0100, /* Can punch output */
CUPS_PRINTER_COVER = 0x0200, /* Can cover output */
CUPS_PRINTER_BIND = 0x0400, /* Can bind output */
CUPS_PRINTER_SORT = 0x0800, /* Can sort output */
- CUPS_PRINTER_SMALL = 0x1000, /* Can do Letter/Legal/A4 */
- CUPS_PRINTER_MEDIUM = 0x2000, /* Can do Tabloid/B/C/A3/A2 */
- CUPS_PRINTER_LARGE = 0x4000, /* Can do D/E/A1/A0 */
- CUPS_PRINTER_VARIABLE = 0x8000, /* Can do variable sizes */
+ CUPS_PRINTER_SMALL = 0x1000, /* Can print on Letter/Legal/A4-size media */
+ CUPS_PRINTER_MEDIUM = 0x2000, /* Can print on Tabloid/B/C/A3/A2-size media */
+ CUPS_PRINTER_LARGE = 0x4000, /* Can print on D/E/A1/A0-size media */
+ CUPS_PRINTER_VARIABLE = 0x8000, /* Can print on rolls and custom-size media */
CUPS_PRINTER_IMPLICIT = 0x10000, /* Implicit class @private@
* @since Deprecated@ */
CUPS_PRINTER_DEFAULT = 0x20000, /* Default printer on network */
CUPS_PRINTER_FAX = 0x40000, /* Fax queue */
CUPS_PRINTER_REJECTING = 0x80000, /* Printer is rejecting jobs */
CUPS_PRINTER_DELETE = 0x100000, /* Delete printer
- * @since CUPS 1.2/macOS 10.5@ */
+ * @deprecated@ @exclude all@ */
CUPS_PRINTER_NOT_SHARED = 0x200000, /* Printer is not shared
* @since CUPS 1.2/macOS 10.5@ */
CUPS_PRINTER_AUTHENTICATED = 0x400000,/* Printer requires authentication
* @since CUPS 1.2/macOS 10.5@ */
CUPS_PRINTER_COMMANDS = 0x800000, /* Printer supports maintenance commands
* @since CUPS 1.2/macOS 10.5@ */
- CUPS_PRINTER_DISCOVERED = 0x1000000, /* Printer was automatically discovered
- * and added @private@ */
+ CUPS_PRINTER_DISCOVERED = 0x1000000, /* Printer was discovered @since CUPS 1.2/macOS 10.5@ */
CUPS_PRINTER_SCANNER = 0x2000000, /* Scanner-only device
- * @since CUPS 1.4/macOS 10.6@ */
+ * @since CUPS 1.4/macOS 10.6@ @private@ */
CUPS_PRINTER_MFP = 0x4000000, /* Printer with scanning capabilities
- * @since CUPS 1.4/macOS 10.6@ */
- CUPS_PRINTER_3D = 0x8000000, /* Printer with 3D capabilities @private@ */
+ * @since CUPS 1.4/macOS 10.6@ @private@ */
+ CUPS_PRINTER_3D = 0x8000000, /* Printer with 3D capabilities @exclude all@ @private@ */
CUPS_PRINTER_OPTIONS = 0x6fffc /* ~(CLASS | REMOTE | IMPLICIT |
* DEFAULT | FAX | REJECTING | DELETE |
* NOT_SHARED | AUTHENTICATED |
@@ -269,7 +270,7 @@ typedef struct cups_job_s /**** Job ****/
int id; /* The job ID */
char *dest; /* Printer or class name */
char *title; /* Title/job name */
- char *user; /* User the submitted the job */
+ char *user; /* User that submitted the job */
char *format; /* Document format */
ipp_jstate_t state; /* Job state */
int size; /* Size in kilobytes */
@@ -309,11 +310,12 @@ typedef int (*cups_dest_cb_t)(void *user_data, unsigned flags,
# ifdef __BLOCKS__
typedef int (^cups_dest_block_t)(unsigned flags, cups_dest_t *dest);
/* Destination enumeration block
- * @since CUPS 1.6/macOS 10.8@ */
+ * @since CUPS 1.6/macOS 10.8@
+ * @exclude all@ */
# endif /* __BLOCKS__ */
typedef const char *(*cups_password_cb_t)(const char *prompt);
- /* Password callback */
+ /* Password callback @exclude all@ */
typedef const char *(*cups_password_cb2_t)(const char *prompt, http_t *http,
const char *method,
@@ -340,11 +342,11 @@ extern ipp_t *cupsDoRequest(http_t *http, ipp_t *request,
const char *resource);
extern http_encryption_t cupsEncryption(void);
extern void cupsFreeJobs(int num_jobs, cups_job_t *jobs);
-extern int cupsGetClasses(char ***classes) _CUPS_DEPRECATED_MSG("Use cupsGetDests instead.");
+extern int cupsGetClasses(char ***classes) _CUPS_DEPRECATED_MSG("Use cupsEnumDests instead.");
extern const char *cupsGetDefault(void);
extern int cupsGetJobs(cups_job_t **jobs, const char *name,
int myjobs, int whichjobs);
-extern int cupsGetPrinters(char ***printers) _CUPS_DEPRECATED_MSG("Use cupsGetDests instead.");
+extern int cupsGetPrinters(char ***printers) _CUPS_DEPRECATED_MSG("Use cupsEnumDests instead.");
extern ipp_status_t cupsLastError(void);
extern int cupsPrintFile(const char *name, const char *filename,
const char *title, int num_options,
@@ -600,6 +602,10 @@ extern int cupsSetServerCredentials(const char *path, const char *common_name,
/* New in CUPS 2.2/macOS 10.12 */
extern ssize_t cupsHashData(const char *algorithm, const void *data, size_t datalen, unsigned char *hash, size_t hashsize) _CUPS_API_2_2;
+/* New in CUPS 2.2.4 */
+extern int cupsAddIntegerOption(const char *name, int value, int num_options, cups_option_t **options) _CUPS_API_2_2_4;
+extern int cupsGetIntegerOption(const char *name, int num_options, cups_option_t *options) _CUPS_API_2_2_4;
+
# ifdef __cplusplus
}
# endif /* __cplusplus */
diff --git a/cups/cupspm-icon.png b/cups/cupspm-icon.png
new file mode 100644
index 0000000..2074eaa
--- /dev/null
+++ b/cups/cupspm-icon.png
Binary files differ
diff --git a/cups/cupspm.md b/cups/cupspm.md
new file mode 100644
index 0000000..3c81a44
--- /dev/null
+++ b/cups/cupspm.md
@@ -0,0 +1,994 @@
+---
+title: CUPS Programming Manual
+author: Michael R Sweet
+copyright: Copyright © 2007-2017 by Apple Inc. All Rights Reserved.
+version: 2.2.4
+...
+
+> Please [file issues on Github](https://github.com/apple/cups/issues) to
+> provide feedback on this document.
+
+
+# Introduction
+
+CUPS provides the "cups" library to talk to the different parts of CUPS and with
+Internet Printing Protocol (IPP) printers. The "cups" library functions are
+accessed by including the `<cups/cups.h>` header.
+
+CUPS is based on the Internet Printing Protocol ("IPP"), which allows clients
+(applications) to communicate with a server (the scheduler, printers, etc.) to
+get a list of destinations, send print jobs, and so forth. You identify which
+server you want to communicate with using a pointer to the opaque structure
+`http_t`. The `CUPS_HTTP_DEFAULT` constant can be used when you want to talk to
+the CUPS scheduler.
+
+
+## Guidelines
+
+When writing software that uses the "cups" library:
+
+- Do not use undocumented or deprecated APIs,
+- Do not rely on pre-configured printers,
+- Do not assume that printers support specific features or formats, and
+- Do not rely on implementation details (PPDs, etc.)
+
+CUPS is designed to insulate users and developers from the implementation
+details of printers and file formats. The goal is to allow an application to
+supply a print file in a standard format with the user intent ("print four
+copies, two-sided on A4 media, and staple each copy") and have the printing
+system manage the printer communication and format conversion needed.
+
+Similarly, printer and job management applications can use standard query
+operations to obtain the status information in a common, generic form and use
+standard management operations to control the state of those printers and jobs.
+
+
+## Terms Used in This Document
+
+A *Destination* is a printer or print queue that accepts print jobs. A
+*Print Job* is one or more documents that are processed by a destination
+using options supplied when creating the job. A *Document* is a file (JPEG
+image, PDF file, etc.) suitable for printing. An *Option* controls some aspect
+of printing, such as the media used. *Media* is the sheets or roll that is
+printed on. An *Attribute* is an option encoded for an Internet Printing
+Protocol (IPP) request.
+
+
+## Compiling Programs That Use the CUPS API
+
+The CUPS libraries can be used from any C, C++, or Objective C program.
+The method of compiling against the libraries varies depending on the
+operating system and installation of CUPS. The following sections show how
+to compile a simple program (shown below) in two common environments.
+
+The following simple program lists the available destinations:
+
+ #include <stdio.h>
+ #include <cups/cups.h>
+
+ int print_dest(void *user_data, unsigned flags, cups_dest_t *dest)
+ {
+ if (dest->instance)
+ printf("%s/%s\n", dest->name, dest->instance);
+ else
+ puts(dest->name);
+
+ return (1);
+ }
+
+ int main(void)
+ {
+ cupsEnumDests(CUPS_DEST_FLAGS_NONE, 1000, NULL, 0, 0, print_dest, NULL);
+
+ return (0);
+ }
+
+
+### Compiling with Xcode
+
+In Xcode, choose *New Project...* from the *File* menu (or press SHIFT+CMD+N),
+then select the *Command Line Tool* under the macOS Application project type.
+Click *Next* and enter a name for the project, for example "firstcups". Click
+*Next* and choose a project directory. The click *Next* to create the project.
+
+In the project window, click on the *Build Phases* group and expand the
+*Link Binary with Libraries* section. Click *+*, type "libcups" to show the
+library, and then double-click on `libcups.tbd`.
+
+Finally, click on the `main.c` file in the sidebar and copy the example program
+to the file. Build and run (CMD+R) to see the list of destinations.
+
+
+### Compiling with GCC
+
+From the command-line, create a file called `sample.c` using your favorite
+editor, copy the example to this file, and save. Then run the following command
+to compile it with GCC and run it:
+
+ gcc -o simple `cups-config --cflags` simple.c `cups-config --libs`
+ ./simple
+
+The `cups-config` command provides the compiler flags (`cups-config --cflags`)
+and libraries (`cups-config --libs`) needed for the local system.
+
+
+# Working with Destinations
+
+Destinations, which in CUPS represent individual printers or classes
+(collections or pools) of printers, are represented by the `cups_dest_t`
+structure which includes the name \(`name`), instance \(`instance`, saved
+options/settings), whether the destination is the default for the user
+\(`is_default`), and the options and basic information associated with that
+destination \(`num_options` and `options`).
+
+Historically destinations have been manually maintained by the administrator of
+a system or network, but CUPS also supports dynamic discovery of destinations on
+the current network.
+
+
+## Finding Available Destinations
+
+The `cupsEnumDests` function finds all of the available destinations:
+
+ int
+ cupsEnumDests(unsigned flags, int msec, int *cancel,
+ cups_ptype_t type, cups_ptype_t mask,
+ cups_dest_cb_t cb, void *user_data)
+
+The `flags` argument specifies enumeration options, which at present must be
+`CUPS_DEST_FLAGS_NONE`.
+
+The `msec` argument specifies the maximum amount of time that should be used for
+enumeration in milliseconds - interactive applications should keep this value to
+5000 or less when run on the main thread.
+
+The `cancel` argument points to an integer variable that, when set to a non-zero
+value, will cause enumeration to stop as soon as possible. It can be `NULL` if
+not needed.
+
+The `type` and `mask` arguments are bitfields that allow the caller to filter
+the destinations based on categories and/or capabilities. The destination's
+"printer-type" value is masked by the `mask` value and compared to the `type`
+value when filtering. For example, to only enumerate destinations that are
+hosted on the local system, pass `CUPS_PRINTER_LOCAL` for the `type` argument
+and `CUPS_PRINTER_DISCOVERED` for the `mask` argument. The following constants
+can be used for filtering:
+
+- `CUPS_PRINTER_CLASS`: A collection of destinations.
+- `CUPS_PRINTER_FAX`: A facsimile device.
+- `CUPS_PRINTER_LOCAL`: A local printer or class. This constant has the value 0
+ (no bits set) and is only used for the `type` argument and is paired with the
+ `CUPS_PRINTER_REMOTE` or `CUPS_PRINTER_DISCOVERED` constant passed in the
+ `mask` argument.
+- `CUPS_PRINTER_REMOTE`: A remote (shared) printer or class.
+- `CUPS_PRINTER_DISCOVERED`: An available network printer or class.
+- `CUPS_PRINTER_BW`: Can do B&W printing.
+- `CUPS_PRINTER_COLOR`: Can do color printing.
+- `CUPS_PRINTER_DUPLEX`: Can do two-sided printing.
+- `CUPS_PRINTER_STAPLE`: Can staple output.
+- `CUPS_PRINTER_COLLATE`: Can quickly collate copies.
+- `CUPS_PRINTER_PUNCH`: Can punch output.
+- `CUPS_PRINTER_COVER`: Can cover output.
+- `CUPS_PRINTER_BIND`: Can bind output.
+- `CUPS_PRINTER_SORT`: Can sort output (mailboxes, etc.)
+- `CUPS_PRINTER_SMALL`: Can print on Letter/Legal/A4-size media.
+- `CUPS_PRINTER_MEDIUM`: Can print on Tabloid/B/C/A3/A2-size media.
+- `CUPS_PRINTER_LARGE`: Can print on D/E/A1/A0-size media.
+- `CUPS_PRINTER_VARIABLE`: Can print on rolls and custom-size media.
+
+The `cb` argument specifies a function to call for every destination that is
+found:
+
+ typedef int (*cups_dest_cb_t)(void *user_data,
+ unsigned flags,
+ cups_dest_t *dest);
+
+The callback function receives a copy of the `user_data` argument along with a
+bitfield \(`flags`) and the destination that was found. The `flags` argument
+can have any of the following constant (bit) values set:
+
+- `CUPS_DEST_FLAGS_MORE`: There are more destinations coming.
+- `CUPS_DEST_FLAGS_REMOVED`: The destination has gone away and should be removed
+ from the list of destinations a user can select.
+- `CUPS_DEST_FLAGS_ERROR`: An error occurred. The reason for the error can be
+ found by calling the `cupsLastError` and/or `cupsLastErrorString` functions.
+
+The callback function returns 0 to stop enumeration or 1 to continue.
+
+> Note that the callback function will likely be called multiple times for the
+> same destination, so it is up to the caller to suppress any duplicate
+> destinations.
+
+The following example shows how to use `cupsEnumDests` to get a filtered array
+of destinations:
+
+ typedef struct
+ {
+ int num_dests;
+ cups_dest_t *dests;
+ } my_user_data_t;
+
+ int
+ my_dest_cb(my_user_data_t *user_data, unsigned flags,
+ cups_dest_t *dest)
+ {
+ if (flags & CUPS_DEST_FLAGS_REMOVED)
+ {
+ /*
+ * Remove destination from array...
+ */
+
+ user_data->num_dests =
+ cupsRemoveDest(dest->name, dest->instance,
+ user_data->num_dests,
+ &(user_data->dests));
+ }
+ else
+ {
+ /*
+ * Add destination to array...
+ */
+
+ user_data->num_dests =
+ cupsCopyDest(dest, user_data->num_dests,
+ &(user_data->dests));
+ }
+
+ return (1);
+ }
+
+ int
+ my_get_dests(cups_ptype_t type, cups_ptype_t mask,
+ cups_dest_t **dests)
+ {
+ my_user_data_t user_data = { 0, NULL };
+
+ if (!cupsEnumDests(CUPS_DEST_FLAGS_NONE, 1000, NULL, type,
+ mask, (cups_dest_cb_t)my_dest_cb,
+ &user_data))
+ {
+ /*
+ * An error occurred, free all of the destinations and
+ * return...
+ */
+
+ cupsFreeDests(user_data.num_dests, user_dasta.dests);
+
+ *dests = NULL;
+
+ return (0);
+ }
+
+ /*
+ * Return the destination array...
+ */
+
+ *dests = user_data.dests;
+
+ return (user_data.num_dests);
+ }
+
+
+## Basic Destination Information
+
+The `num_options` and `options` members of the `cups_dest_t` structure provide
+basic attributes about the destination in addition to the user default options
+and values for that destination. The following names are predefined for various
+destination attributes:
+
+- "auth-info-required": The type of authentication required for printing to this
+ destination: "none", "username,password", "domain,username,password", or
+ "negotiate" (Kerberos).
+- "printer-info": The human-readable description of the destination such as "My
+ Laser Printer".
+- "printer-is-accepting-jobs": "true" if the destination is accepting new jobs,
+ "false" otherwise.
+- "printer-is-shared": "true" if the destination is being shared with other
+ computers, "false" otherwise.
+- "printer-location": The human-readable location of the destination such as
+ "Lab 4".
+- "printer-make-and-model": The human-readable make and model of the destination
+ such as "ExampleCorp LaserPrinter 4000 Series".
+- "printer-state": "3" if the destination is idle, "4" if the destination is
+ printing a job, and "5" if the destination is stopped.
+- "printer-state-change-time": The UNIX time when the destination entered the
+ current state.
+- "printer-state-reasons": Additional comma-delimited state keywords for the
+ destination such as "media-tray-empty-error" and "toner-low-warning".
+- "printer-type": The `cups_ptype_t` value associated with the destination.
+- "printer-uri-supported": The URI associated with the destination; if not set,
+ this destination was discovered but is not yet setup as a local printer.
+
+Use the `cupsGetOption` function to retrieve the value. For example, the
+following code gets the make and model of a destination:
+
+ const char *model = cupsGetOption("printer-make-and-model",
+ dest->num_options,
+ dest->options);
+
+
+## Detailed Destination Information
+
+Once a destination has been chosen, the `cupsCopyDestInfo` function can be used
+to gather detailed information about the destination:
+
+ cups_dinfo_t *
+ cupsCopyDestInfo(http_t *http, cups_dest_t *dest);
+
+The `http` argument specifies a connection to the CUPS scheduler and is
+typically the constant `CUPS_HTTP_DEFAULT`. The `dest` argument specifies the
+destination to query.
+
+The `cups_dinfo_t` structure that is returned contains a snapshot of the
+supported options and their supported, ready, and default values. It also can
+report constraints between different options and values, and recommend changes
+to resolve those constraints.
+
+
+### Getting Supported Options and Values
+
+The `cupsCheckDestSupported` function can be used to test whether a particular
+option or option and value is supported:
+
+ int
+ cupsCheckDestSupported(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *info,
+ const char *option,
+ const char *value);
+
+The `option` argument specifies the name of the option to check. The following
+constants can be used to check the various standard options:
+
+- `CUPS_COPIES`: Controls the number of copies that are produced.
+- `CUPS_FINISHINGS`: A comma-delimited list of integer constants that control
+ the finishing processes that are applied to the job, including stapling,
+ punching, and folding.
+- `CUPS_MEDIA`: Controls the media size that is used, typically one of the
+ following: `CUPS_MEDIA_3X5`, `CUPS_MEDIA_4X6`, `CUPS_MEDIA_5X7`,
+ `CUPS_MEDIA_8X10`, `CUPS_MEDIA_A3`, `CUPS_MEDIA_A4`, `CUPS_MEDIA_A5`,
+ `CUPS_MEDIA_A6`, `CUPS_MEDIA_ENV10`, `CUPS_MEDIA_ENVDL`, `CUPS_MEDIA_LEGAL`,
+ `CUPS_MEDIA_LETTER`, `CUPS_MEDIA_PHOTO_L`, `CUPS_MEDIA_SUPERBA3`, or
+ `CUPS_MEDIA_TABLOID`.
+- `CUPS_MEDIA_SOURCE`: Controls where the media is pulled from, typically either
+ `CUPS_MEDIA_SOURCE_AUTO` or `CUPS_MEDIA_SOURCE_MANUAL`.
+- `CUPS_MEDIA_TYPE`: Controls the type of media that is used, typically one of
+ the following: `CUPS_MEDIA_TYPE_AUTO`, `CUPS_MEDIA_TYPE_ENVELOPE`,
+ `CUPS_MEDIA_TYPE_LABELS`, `CUPS_MEDIA_TYPE_LETTERHEAD`,
+ `CUPS_MEDIA_TYPE_PHOTO`, `CUPS_MEDIA_TYPE_PHOTO_GLOSSY`,
+ `CUPS_MEDIA_TYPE_PHOTO_MATTE`, `CUPS_MEDIA_TYPE_PLAIN`, or
+ `CUPS_MEDIA_TYPE_TRANSPARENCY`.
+- `CUPS_NUMBER_UP`: Controls the number of document pages that are placed on
+ each media side.
+- `CUPS_ORIENTATION`: Controls the orientation of document pages placed on the
+ media: `CUPS_ORIENTATION_PORTRAIT` or `CUPS_ORIENTATION_LANDSCAPE`.
+- `CUPS_PRINT_COLOR_MODE`: Controls whether the output is in color
+ \(`CUPS_PRINT_COLOR_MODE_COLOR`), grayscale
+ \(`CUPS_PRINT_COLOR_MODE_MONOCHROME`), or either
+ \(`CUPS_PRINT_COLOR_MODE_AUTO`).
+- `CUPS_PRINT_QUALITY`: Controls the generate quality of the output:
+ `CUPS_PRINT_QUALITY_DRAFT`, `CUPS_PRINT_QUALITY_NORMAL`, or
+ `CUPS_PRINT_QUALITY_HIGH`.
+- `CUPS_SIDES`: Controls whether prints are placed on one or both sides of the
+ media: `CUPS_SIDES_ONE_SIDED`, `CUPS_SIDES_TWO_SIDED_PORTRAIT`, or
+ `CUPS_SIDES_TWO_SIDED_LANDSCAPE`.
+
+If the `value` argument is `NULL`, the `cupsCheckDestSupported` function returns
+whether the option is supported by the destination. Otherwise, the function
+returns whether the specified value of the option is supported.
+
+The `cupsFindDestSupported` function returns the IPP attribute containing the
+supported values for a given option:
+
+ ipp_attribute_t *
+ cupsFindDestSupported(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *dinfo,
+ const char *option);
+
+For example, the following code prints the supported finishing processes for a
+destination, if any, to the standard output:
+
+ cups_dinfo_t *info = cupsCopyDestInfo(CUPS_HTTP_DEFAULT,
+ dest);
+
+ if (cupsCheckDestSupported(CUPS_HTTP_DEFAULT, dest, info,
+ CUPS_FINISHINGS, NULL))
+ {
+ ipp_attribute_t *finishings =
+ cupsFindDestSupported(CUPS_HTTP_DEFAULT, dest, info,
+ CUPS_FINISHINGS);
+ int i, count = ippGetCount(finishings);
+
+ puts("finishings supported:");
+ for (i = 0; i < count; i ++)
+ printf(" %d\n", ippGetInteger(finishings, i));
+ }
+ else
+ puts("finishings not supported.");
+
+The "job-creation-attributes" option can be queried to get a list of supported
+options. For example, the following code prints the list of supported options
+to the standard output:
+
+ ipp_attribute_t *attrs =
+ cupsFindDestSupported(CUPS_HTTP_DEFAULT, dest, info,
+ "job-creation-attributes");
+ int i, count = ippGetCount(attrs);
+
+ for (i = 0; i < count; i ++)
+ puts(ippGetString(attrs, i, NULL));
+
+
+### Getting Default Values
+
+There are two sets of default values - user defaults that are available via the
+`num_options` and `options` members of the `cups_dest_t` structure, and
+destination defaults that available via the `cups_dinfo_t` structure and the
+`cupsFindDestDefault` function which returns the IPP attribute containing the
+default value(s) for a given option:
+
+ ipp_attribute_t *
+ cupsFindDestDefault(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *dinfo,
+ const char *option);
+
+The user defaults from `cupsGetOption` should always take preference over the
+destination defaults. For example, the following code prints the default
+finishings value(s) to the standard output:
+
+ const char *def_value =
+ cupsGetOption(CUPS_FINISHINGS, dest->num_options,
+ dest->options);
+ ipp_attribute_t *def_attr =
+ cupsFindDestDefault(CUPS_HTTP_DEFAULT, dest, info,
+ CUPS_FINISHINGS);
+
+ if (def_value != NULL)
+ {
+ printf("Default finishings: %s\n", def_value);
+ }
+ else
+ {
+ int i, count = ippGetCount(def_attr);
+
+ printf("Default finishings: %d",
+ ippGetInteger(def_attr, 0));
+ for (i = 1; i < count; i ++)
+ printf(",%d", ippGetInteger(def_attr, i));
+ putchar('\n');
+ }
+
+
+### Getting Ready (Loaded) Values
+
+The finishings and media options also support queries for the ready, or loaded,
+values. For example, a printer may have punch and staple finishers installed
+but be out of staples - the supported values will list both punch and staple
+finishing processes but the ready values will only list the punch processes.
+Similarly, a printer may support hundreds of different sizes of media but only
+have a single size loaded at any given time - the ready values are limited to
+the media that is actually in the printer.
+
+The `cupsFindDestReady` function finds the IPP attribute containing the ready
+values for a given option:
+
+ ipp_attribute_t *
+ cupsFindDestReady(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *dinfo, const char *option);
+
+For example, the following code lists the ready finishing processes:
+
+ ipp_attribute_t *ready_finishings =
+ cupsFindDestReady(CUPS_HTTP_DEFAULT, dest, info,
+ CUPS_FINISHINGS);
+
+ if (ready_finishings != NULL)
+ {
+ int i, count = ippGetCount(ready_finishings);
+
+ puts("finishings ready:");
+ for (i = 0; i < count; i ++)
+ printf(" %d\n", ippGetInteger(ready_finishings, i));
+ }
+ else
+ puts("no finishings are ready.");
+
+
+### Media Size Options
+
+CUPS provides functions for querying the dimensions and margins for each of the
+supported media size options. The `cups_size_t` structure is used to describe a
+media size:
+
+ typedef struct cups_size_s
+ {
+ char media[128];
+ int width, length;
+ int bottom, left, right, top;
+ } cups_size_t;
+
+The `width` and `length` members specify the dimensions of the media in
+hundredths of millimeters (1/2540th of an inch). The `bottom`, `left`, `right`,
+and `top` members specify the margins of the printable area, also in hundredths
+of millimeters.
+
+The `cupsGetDestMediaByName` and `cupsGetDestMediaBySize` functions lookup the
+media size information using a standard media size name or dimensions in
+hundredths of millimeters:
+
+ int
+ cupsGetDestMediaByName(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *dinfo,
+ const char *media,
+ unsigned flags, cups_size_t *size);
+
+ int
+ cupsGetDestMediaBySize(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *dinfo,
+ int width, int length,
+ unsigned flags, cups_size_t *size);
+
+The `media`, `width`, and `length` arguments specify the size to lookup. The
+`flags` argument specifies a bitfield controlling various lookup options:
+
+- `CUPS_MEDIA_FLAGS_DEFAULT`: Find the closest size supported by the printer.
+- `CUPS_MEDIA_FLAGS_BORDERLESS`: Find a borderless size.
+- `CUPS_MEDIA_FLAGS_DUPLEX`: Find a size compatible with two-sided printing.
+- `CUPS_MEDIA_FLAGS_EXACT`: Find an exact match for the size.
+- `CUPS_MEDIA_FLAGS_READY`: If the printer supports media sensing or
+ configuration of the media in each tray/source, find the size amongst the
+ "ready" media.
+
+If a matching size is found for the destination, the size information is stored
+in the structure pointed to by the `size` argument and 1 is returned. Otherwise
+0 is returned.
+
+For example, the following code prints the margins for two-sided printing on US
+Letter media:
+
+ cups_size_t size;
+
+ if (cupsGetDestMediaByName(CUPS_HTTP_DEFAULT, dest, info,
+ CUPS_MEDIA_LETTER,
+ CUPS_MEDIA_FLAGS_DUPLEX, &size))
+ {
+ puts("Margins for duplex US Letter:");
+ printf(" Bottom: %.2fin\n", size.bottom / 2540.0);
+ printf(" Left: %.2fin\n", size.left / 2540.0);
+ printf(" Right: %.2fin\n", size.right / 2540.0);
+ printf(" Top: %.2fin\n", size.top / 2540.0);
+ }
+ else
+ puts("Margins for duplex US Letter are not available.");
+
+You can also enumerate all of the sizes that match a given `flags` value using
+the `cupsGetDestMediaByIndex` and `cupsGetDestMediaCount` functions:
+
+ int
+ cupsGetDestMediaByIndex(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *dinfo, int n,
+ unsigned flags, cups_size_t *size);
+
+ int
+ cupsGetDestMediaCount(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *dinfo, unsigned flags);
+
+For example, the following code prints the list of ready media and corresponding
+margins:
+
+ cups_size_t size;
+ int i;
+ int count = cupsGetDestMediaCount(CUPS_HTTP_DEFAULT,
+ dest, info,
+ CUPS_MEDIA_FLAGS_READY);
+
+ for (i = 0; i < count; i ++)
+ {
+ if (cupsGetDestMediaByIndex(CUPS_HTTP_DEFAULT, dest, info,
+ i, CUPS_MEDIA_FLAGS_READY,
+ &size))
+ {
+ printf("%s:\n", size.name);
+ printf(" Width: %.2fin\n", size.width / 2540.0);
+ printf(" Length: %.2fin\n", size.length / 2540.0);
+ printf(" Bottom: %.2fin\n", size.bottom / 2540.0);
+ printf(" Left: %.2fin\n", size.left / 2540.0);
+ printf(" Right: %.2fin\n", size.right / 2540.0);
+ printf(" Top: %.2fin\n", size.top / 2540.0);
+ }
+ }
+
+Finally, the `cupsGetDestMediaDefault` function returns the default media size:
+
+ int
+ cupsGetDestMediaDefault(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *dinfo, unsigned flags,
+ cups_size_t *size);
+
+
+### Localizing Options and Values
+
+CUPS provides three functions to get localized, human-readable strings in the
+user's current locale for options and values: `cupsLocalizeDestMedia`,
+`cupsLocalizeDestOption`, and `cupsLocalizeDestValue`:
+
+ const char *
+ cupsLocalizeDestMedia(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *info, unsigned flags,
+ cups_size_t *size);
+
+ const char *
+ cupsLocalizeDestOption(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *info,
+ const char *option);
+
+ const char *
+ cupsLocalizeDestValue(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *info,
+ const char *option, const char *value);
+
+
+## Submitting a Print Job
+
+Once you are ready to submit a print job, you create a job using the
+`cupsCreateDestJob` function:
+
+ ipp_status_t
+ cupsCreateDestJob(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *info, int *job_id,
+ const char *title, int num_options,
+ cups_option_t *options);
+
+The `title` argument specifies a name for the print job such as "My Document".
+The `num_options` and `options` arguments specify the options for the print
+job which are allocated using the `cupsAddOption` function.
+
+When successful, the job's numeric identifier is stored in the integer pointed
+to by the `job_id` argument and `IPP_STATUS_OK` is returned. Otherwise, an IPP
+error status is returned.
+
+For example, the following code creates a new job that will print 42 copies of a
+two-sided US Letter document:
+
+ int job_id = 0;
+ int num_options = 0;
+ cups_option_t *options = NULL;
+
+ num_options = cupsAddOption(CUPS_COPIES, "42",
+ num_options, &options);
+ num_options = cupsAddOption(CUPS_MEDIA, CUPS_MEDIA_LETTER,
+ num_options, &options);
+ num_options = cupsAddOption(CUPS_SIDES,
+ CUPS_SIDES_TWO_SIDED_PORTRAIT,
+ num_options, &options);
+
+ if (cupsCreateDestJob(CUPS_HTTP_DEFAULT, dest, info,
+ &job_id, "My Document", num_options,
+ options) == IPP_STATUS_OK)
+ printf("Created job: %d\n", job_id);
+ else
+ printf("Unable to create job: %s\n",
+ cupsLastErrorString());
+
+Once the job is created, you submit documents for the job using the
+`cupsStartDestDocument`, `cupsWriteRequestData`, and `cupsFinishDestDocument`
+functions:
+
+ http_status_t
+ cupsStartDestDocument(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *info, int job_id,
+ const char *docname,
+ const char *format,
+ int num_options,
+ cups_option_t *options,
+ int last_document);
+
+ http_status_t
+ cupsWriteRequestData(http_t *http, const char *buffer,
+ size_t length);
+
+ ipp_status_t
+ cupsFinishDestDocument(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *info);
+
+The `docname` argument specifies the name of the document, typically the
+original filename. The `format` argument specifies the MIME media type of the
+document, including the following constants:
+
+- `CUPS_FORMAT_JPEG`: "image/jpeg"
+- `CUPS_FORMAT_PDF`: "application/pdf"
+- `CUPS_FORMAT_POSTSCRIPT`: "application/postscript"
+- `CUPS_FORMAT_TEXT`: "text/plain"
+
+The `num_options` and `options` arguments specify per-document print options,
+which at present must be 0 and `NULL`. The `last_document` argument specifies
+whether this is the last document in the job.
+
+For example, the following code submits a PDF file to the job that was just
+created:
+
+ FILE *fp = fopen("filename.pdf", "rb");
+ size_t bytes;
+ char buffer[65536];
+
+ if (cupsStartDestDocument(CUPS_HTTP_DEFAULT, dest, info,
+ job_id, "filename.pdf", 0, NULL,
+ 1) == HTTP_STATUS_CONTINUE)
+ {
+ while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0)
+ if (cupsWriteRequestData(CUPS_HTTP_DEFAULT, buffer,
+ bytes) != HTTP_STATUS_CONTINUE)
+ break;
+
+ if (cupsFinishDestDocument(CUPS_HTTP_DEFAULT, dest,
+ info) == IPP_STATUS_OK)
+ puts("Document send succeeded.");
+ else
+ printf("Document send failed: %s\n",
+ cupsLastErrorString());
+ }
+
+ fclose(fp);
+
+
+# Sending IPP Requests
+
+CUPS provides a rich API for sending IPP requests to the scheduler or printers,
+typically from management or utility applications whose primary purpose is not
+to send print jobs.
+
+
+## Connecting to the Scheduler or Printer
+
+The connection to the scheduler or printer is represented by the HTTP connection
+type `http_t`. The `cupsConnectDest` function connects to the scheduler or
+printer associated with the destination:
+
+ http_t *
+ cupsConnectDest(cups_dest_t *dest, unsigned flags, int msec,
+ int *cancel, char *resource,
+ size_t resourcesize, cups_dest_cb_t cb,
+ void *user_data);
+
+The `dest` argument specifies the destination to connect to.
+
+The `flags` argument specifies whether you want to connect to the scheduler
+(`CUPS_DEST_FLAGS_NONE`) or device/printer (`CUPS_DEST_FLAGS_DEVICE`) associated
+with the destination.
+
+The `msec` argument specifies how long you are willing to wait for the
+connection to be established in milliseconds. Specify a value of `-1` to wait
+indefinitely.
+
+The `cancel` argument specifies the address of an integer variable that can be
+set to a non-zero value to cancel the connection. Specify a value of `NULL`
+to not provide a cancel variable.
+
+The `resource` and `resourcesize` arguments specify the address and size of a
+character string array to hold the path to use when sending an IPP request.
+
+The `cb` and `user_data` arguments specify a destination callback function that
+returns 1 to continue connecting or 0 to stop. The destination callback work
+the same way as the one used for the `cupsEnumDests` function.
+
+On success, a HTTP connection is returned that can be used to send IPP requests
+and get IPP responses.
+
+For example, the following code connects to the printer associated with a
+destination with a 30 second timeout:
+
+ char resource[256];
+ http_t *http = cupsConnectDest(dest, CUPS_DEST_FLAGS_DEVICE,
+ 30000, NULL, resource,
+ sizeof(resource), NULL, NULL);
+
+
+## Creating an IPP Request
+
+IPP requests are represented by the IPP message type `ipp_t` and each IPP
+attribute in the request is representing using the type `ipp_attribute_t`. Each
+IPP request includes an operation code (`IPP_OP_CREATE_JOB`,
+`IPP_OP_GET_PRINTER_ATTRIBUTES`, etc.) and a 32-bit integer identifier.
+
+The `ippNewRequest` function creates a new IPP request:
+
+ ipp_t *
+ ippNewRequest(ipp_op_t op);
+
+The `op` argument specifies the IPP operation code for the request. For
+example, the following code creates an IPP Get-Printer-Attributes request:
+
+ ipp_t *request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
+
+The request identifier is automatically set to a unique value for the current
+process.
+
+Each IPP request starts with two IPP attributes, "attributes-charset" and
+"attributes-natural-language", followed by IPP attribute(s) that specify the
+target of the operation. The `ippNewRequest` automatically adds the correct
+"attributes-charset" and "attributes-natural-language" attributes, but you must
+add the target attribute(s). For example, the following code adds the
+"printer-uri" attribute to the IPP Get-Printer-Attributes request to specify
+which printer is being queried:
+
+ const char *printer_uri = cupsGetOption("device-uri",
+ dest->num_options,
+ dest->options);
+
+ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
+ "printer-uri", NULL, printer_uri);
+
+> Note: If we wanted to query the scheduler instead of the device, we would look
+> up the "printer-uri-supported" option instead of the "device-uri" value.
+
+The `ippAddString` function adds the "printer-uri" attribute the the IPP
+request. The `IPP_TAG_OPERATION` argument specifies that the attribute is part
+of the operation. The `IPP_TAG_URI` argument specifies that the value is a
+Universal Resource Identifier (URI) string. The `NULL` argument specifies there
+is no language (English, French, Japanese, etc.) associated with the string, and
+the `printer_uri` argument specifies the string value.
+
+The IPP Get-Printer-Attributes request also supports an IPP attribute called
+"requested-attributes" that lists the attributes and values you are interested
+in. For example, the following code requests the printer state attributes:
+
+ static const char * const requested_attributes[] =
+ {
+ "printer-state",
+ "printer-state-message",
+ "printer-state-reasons"
+ };
+
+ ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
+ "requested-attributes", 3, NULL,
+ requested_attributes);
+
+The `ippAddStrings` function adds an attribute with one or more strings, in this
+case three. The `IPP_TAG_KEYWORD` argument specifies that the strings are
+keyword values, which are used for attribute names. All strings use the same
+language (`NULL`), and the attribute will contain the three strings in the
+array `requested_attributes`.
+
+CUPS provides many functions to adding attributes of different types:
+
+- `ippAddBoolean` adds a boolean (`IPP_TAG_BOOLEAN`) attribute with one value.
+- `ippAddInteger` adds an enum (`IPP_TAG_ENUM`) or integer (`IPP_TAG_INTEGER`)
+ attribute with one value.
+- `ippAddIntegers` adds an enum or integer attribute with one or more values.
+- `ippAddOctetString` adds an octetString attribute with one value.
+- `ippAddOutOfBand` adds a admin-defined (`IPP_TAG_ADMINDEFINE`), default
+ (`IPP_TAG_DEFAULT`), delete-attribute (`IPP_TAG_DELETEATTR`), no-value
+ (`IPP_TAG_NOVALUE`), not-settable (`IPP_TAG_NOTSETTABLE`), unknown
+ (`IPP_TAG_UNKNOWN`), or unsupported (`IPP_TAG_UNSUPPORTED_VALUE`) out-of-band
+ attribute.
+- `ippAddRange` adds a rangeOfInteger attribute with one range.
+- `ippAddRanges` adds a rangeOfInteger attribute with one or more ranges.
+- `ippAddResolution` adds a resolution attribute with one resolution.
+- `ippAddResolutions` adds a resolution attribute with one or more resolutions.
+- `ippAddString` adds a charset (`IPP_TAG_CHARSET`), keyword (`IPP_TAG_KEYWORD`),
+ mimeMediaType (`IPP_TAG_MIMETYPE`), name (`IPP_TAG_NAME` and
+ `IPP_TAG_NAMELANG`), naturalLanguage (`IPP_TAG_NATURAL_LANGUAGE`), text
+ (`IPP_TAG_TEXT` and `IPP_TAG_TEXTLANG`), uri (`IPP_TAG_URI`), or uriScheme
+ (`IPP_TAG_URISCHEME`) attribute with one value.
+- `ippAddStrings` adds a charset, keyword, mimeMediaType, name, naturalLanguage,
+ text, uri, or uriScheme attribute with one or more values.
+
+
+## Sending the IPP Request
+
+Once you have created the IPP request, you can send it using the
+`cupsDoRequest` function. For example, the following code sends the IPP
+Get-Printer-Attributes request to the destination and saves the response:
+
+ ipp_t *response = cupsDoRequest(http, request, resource);
+
+For requests like Send-Document that include a file, the `cupsDoFileRequest`
+function should be used:
+
+ ipp_t *response = cupsDoFileRequest(http, request, resource,
+ filename);
+
+Both `cupsDoRequest` and `cupsDoFileRequest` free the IPP request. If a valid
+IPP response is received, it is stored in a new IPP message (`ipp_t`) and
+returned to the caller. Otherwise `NULL` is returned.
+
+The status from the most recent request can be queried using the `cupsLastError`
+function, for example:
+
+ if (cupsLastError() >= IPP_STATUS_ERROR_BAD_REQUEST)
+ {
+ /* request failed */
+ }
+
+A human-readable error message is also available using the `cupsLastErrorString`
+function:
+
+ if (cupsLastError() >= IPP_STATUS_ERROR_BAD_REQUEST)
+ {
+ /* request failed */
+ printf("Request failed: %s\n", cupsLastErrorString());
+ }
+
+
+## Processing the IPP Response
+
+Each response to an IPP request is also an IPP message (`ipp_t`) with its own
+IPP attributes (`ipp_attribute_t`) that includes a status code (`IPP_STATUS_OK`,
+`IPP_STATUS_ERROR_BAD_REQUEST`, etc.) and the corresponding 32-bit integer
+identifier from the request.
+
+For example, the following code finds the printer state attributes and prints
+their values:
+
+ ipp_attribute_t *attr;
+
+ if ((attr = ippFindAttribute(response, "printer-state",
+ IPP_TAG_ENUM)) != NULL)
+ {
+ printf("printer-state=%s\n",
+ ippTagString("printer-state", ippGetInteger(attr, 0)));
+ }
+ else
+ puts("printer-state=unknown");
+
+ if ((attr = ippFindAttribute(response, "printer-state-message",
+ IPP_TAG_TEXT)) != NULL)
+ {
+ printf("printer-state-message=\"%s\"\n",
+ ippGetString(attr, 0, NULL)));
+ }
+
+ if ((attr = ippFindAttribute(response, "printer-state-reasons",
+ IPP_TAG_KEYWORD)) != NULL)
+ {
+ int i, count = ippGetCount(attr);
+
+ puts("printer-state-reasons=");
+ for (i = 0; i < count; i ++)
+ printf(" %s\n", ippGetString(attr, i, NULL)));
+ }
+
+The `ippGetCount` function returns the number of values in an attribute.
+
+The `ippGetInteger` and `ippGetString` functions return a single integer or
+string value from an attribute.
+
+The `ippTagString` function converts a enum value to its keyword (string)
+equivalent.
+
+Once you are done using the IPP response message, free it using the `ippDelete`
+function:
+
+ ippDelete(response);
+
+
+## Authentication
+
+CUPS normally handles authentication through the console. GUI applications
+should set a password callback using the `cupsSetPasswordCB2` function:
+
+ void
+ cupsSetPasswordCB2(cups_password_cb2_t cb, void *user_data);
+
+The password callback will be called when needed and is responsible for setting
+the current user name using `cupsSetUser` and returning a string:
+
+ const char *
+ cups_password_cb2(const char *prompt, http_t *http,
+ const char *method, const char *resource,
+ void *user_data);
+
+The `prompt` argument is a string from CUPS that should be displayed to the
+user.
+
+The `http` argument is the connection hosting the request that is being
+authenticated. The password callback can call the `httpGetField` and
+`httpGetSubField` functions to look for additional details concerning the
+authentication challenge.
+
+The `method` argument specifies the HTTP method used for the request and is
+typically "POST".
+
+The `resource` argument specifies the path used for the request.
+
+The `user_data` argument provides the user data pointer from the
+`cupsSetPasswordCB2` call.
diff --git a/cups/cupspm.opacity b/cups/cupspm.opacity
new file mode 100644
index 0000000..261626f
--- /dev/null
+++ b/cups/cupspm.opacity
Binary files differ
diff --git a/cups/cupspm.png b/cups/cupspm.png
new file mode 100644
index 0000000..9b42722
--- /dev/null
+++ b/cups/cupspm.png
Binary files differ
diff --git a/cups/dest-job.c b/cups/dest-job.c
index b0d89b6..f12b1dc 100644
--- a/cups/dest-job.c
+++ b/cups/dest-job.c
@@ -1,7 +1,7 @@
/*
* Destination job support for CUPS.
*
- * Copyright 2012-2016 by Apple Inc.
+ * Copyright 2012-2017 by Apple Inc.
*
* These coded instructions, statements, and computer programs are the
* property of Apple Inc. and are protected by Federal copyright
@@ -25,13 +25,13 @@
* The "job_id" is the number returned by cupsCreateDestJob.
*
* Returns @code IPP_STATUS_OK@ on success and
- * @code IPP_STATUS_ERRPR_NOT_AUTHORIZED@ or
+ * @code IPP_STATUS_ERROR_NOT_AUTHORIZED@ or
* @code IPP_STATUS_ERROR_FORBIDDEN@ on failure.
*
* @since CUPS 1.6/macOS 10.8@
*/
-ipp_status_t
+ipp_status_t /* O - Status of cancel operation */
cupsCancelDestJob(http_t *http, /* I - Connection to destination */
cups_dest_t *dest, /* I - Destination */
int job_id) /* I - Job ID */
@@ -84,6 +84,13 @@ cupsCloseDestJob(
DEBUG_printf(("cupsCloseDestJob(http=%p, dest=%p(%s/%s), info=%p, job_id=%d)", (void *)http, (void *)dest, dest ? dest->name : NULL, dest ? dest->instance : NULL, (void *)info, job_id));
/*
+ * Get the default connection as needed...
+ */
+
+ if (!http)
+ http = _cupsConnect();
+
+ /*
* Range check input...
*/
@@ -172,6 +179,13 @@ cupsCreateDestJob(
"job_id=%p, title=\"%s\", num_options=%d, options=%p)", (void *)http, (void *)dest, dest ? dest->name : NULL, dest ? dest->instance : NULL, (void *)info, (void *)job_id, title, num_options, (void *)options));
/*
+ * Get the default connection as needed...
+ */
+
+ if (!http)
+ http = _cupsConnect();
+
+ /*
* Range check input...
*/
@@ -252,6 +266,13 @@ cupsFinishDestDocument(
DEBUG_printf(("cupsFinishDestDocument(http=%p, dest=%p(%s/%s), info=%p)", (void *)http, (void *)dest, dest ? dest->name : NULL, dest ? dest->instance : NULL, (void *)info));
/*
+ * Get the default connection as needed...
+ */
+
+ if (!http)
+ http = _cupsConnect();
+
+ /*
* Range check input...
*/
@@ -307,6 +328,13 @@ cupsStartDestDocument(
DEBUG_printf(("cupsStartDestDocument(http=%p, dest=%p(%s/%s), info=%p, job_id=%d, docname=\"%s\", format=\"%s\", num_options=%d, options=%p, last_document=%d)", (void *)http, (void *)dest, dest ? dest->name : NULL, dest ? dest->instance : NULL, (void *)info, job_id, docname, format, num_options, (void *)options, last_document));
/*
+ * Get the default connection as needed...
+ */
+
+ if (!http)
+ http = _cupsConnect();
+
+ /*
* Range check input...
*/
diff --git a/cups/dest-options.c b/cups/dest-options.c
index bf9020b..51705a5 100644
--- a/cups/dest-options.c
+++ b/cups/dest-options.c
@@ -1,7 +1,7 @@
/*
* Destination option/media support for CUPS.
*
- * Copyright 2012-2016 by Apple Inc.
+ * Copyright 2012-2017 by Apple Inc.
*
* These coded instructions, statements, and computer programs are the
* property of Apple Inc. and are protected by Federal copyright
@@ -73,7 +73,7 @@ cupsCheckDestSupported(
cups_dest_t *dest, /* I - Destination */
cups_dinfo_t *dinfo, /* I - Destination information */
const char *option, /* I - Option */
- const char *value) /* I - Value */
+ const char *value) /* I - Value or @code NULL@ */
{
int i; /* Looping var */
char temp[1024]; /* Temporary string */
@@ -86,10 +86,17 @@ cupsCheckDestSupported(
/*
+ * Get the default connection as needed...
+ */
+
+ if (!http)
+ http = _cupsConnect();
+
+ /*
* Range check input...
*/
- if (!http || !dest || !dinfo || !option || !value)
+ if (!http || !dest || !dinfo || !option)
return (0);
/*
@@ -107,7 +114,10 @@ cupsCheckDestSupported(
if (!attr)
return (0);
- /*
+ if (!value)
+ return (1);
+
+/*
* Compare values...
*/
@@ -316,6 +326,13 @@ cupsCopyDestConflicts(
*resolved = NULL;
/*
+ * Get the default connection as needed...
+ */
+
+ if (!http)
+ http = _cupsConnect();
+
+ /*
* Range check input...
*/
@@ -575,6 +592,13 @@ cupsCopyDestInfo(
DEBUG_printf(("cupsCopyDestSupported(http=%p, dest=%p(%s))", (void *)http, (void *)dest, dest ? dest->name : ""));
/*
+ * Get the default connection as needed...
+ */
+
+ if (!http)
+ http = _cupsConnect();
+
+ /*
* Range check input...
*/
@@ -686,6 +710,13 @@ cupsFindDestDefault(
/*
+ * Get the default connection as needed...
+ */
+
+ if (!http)
+ http = _cupsConnect();
+
+ /*
* Range check input...
*/
@@ -727,6 +758,13 @@ cupsFindDestReady(
/*
+ * Get the default connection as needed...
+ */
+
+ if (!http)
+ http = _cupsConnect();
+
+ /*
* Range check input...
*/
@@ -770,6 +808,13 @@ cupsFindDestSupported(
/*
+ * Get the default connection as needed...
+ */
+
+ if (!http)
+ http = _cupsConnect();
+
+ /*
* Range check input...
*/
@@ -791,6 +836,8 @@ cupsFindDestSupported(
/*
* 'cupsFreeDestInfo()' - Free destination information obtained using
* @link cupsCopyDestInfo@.
+ *
+ * @since CUPS 1.6/macOS 10.8@
*/
void
@@ -852,6 +899,13 @@ cupsGetDestMediaByIndex(
/*
+ * Get the default connection as needed...
+ */
+
+ if (!http)
+ http = _cupsConnect();
+
+ /*
* Range check input...
*/
@@ -940,6 +994,13 @@ cupsGetDestMediaByName(
/*
+ * Get the default connection as needed...
+ */
+
+ if (!http)
+ http = _cupsConnect();
+
+ /*
* Range check input...
*/
@@ -1008,6 +1069,13 @@ cupsGetDestMediaBySize(
/*
+ * Get the default connection as needed...
+ */
+
+ if (!http)
+ http = _cupsConnect();
+
+ /*
* Range check input...
*/
@@ -1059,6 +1127,13 @@ cupsGetDestMediaCount(
unsigned flags) /* I - Media flags */
{
/*
+ * Get the default connection as needed...
+ */
+
+ if (!http)
+ http = _cupsConnect();
+
+ /*
* Range check input...
*/
@@ -1104,6 +1179,13 @@ cupsGetDestMediaDefault(
/*
+ * Get the default connection as needed...
+ */
+
+ if (!http)
+ http = _cupsConnect();
+
+ /*
* Range check input...
*/
diff --git a/cups/dest.c b/cups/dest.c
index b06a9ee..fc57ed3 100644
--- a/cups/dest.c
+++ b/cups/dest.c
@@ -1,7 +1,7 @@
/*
* User-defined destination (and option) support for CUPS.
*
- * Copyright 2007-2016 by Apple Inc.
+ * Copyright 2007-2017 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -60,6 +60,10 @@
# define kUseLastPrinter CFSTR("UseLastPrinter")
#endif /* __APPLE__ */
+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+# define _CUPS_DNSSD_MAXTIME 500 /* Milliseconds for maximum quantum of time */
+#endif /* HAVE_DNSSD || HAVE_AVAHI */
+
/*
* Types...
@@ -85,6 +89,7 @@ typedef struct _cups_dnssd_data_s /* Enumeration data */
AvahiSimplePoll *simple_poll; /* Polling interface */
AvahiClient *client; /* Client information */
int got_data; /* Did we get data? */
+ int browsers; /* How many browsers are running? */
# endif /* HAVE_DNSSD */
cups_dest_cb_t cb; /* Callback */
void *user_data; /* User data pointer */
@@ -101,9 +106,9 @@ typedef struct _cups_dnssd_device_s /* Enumerated device */
# else /* HAVE_AVAHI */
AvahiRecordBrowser *ref; /* Browser for query */
# endif /* HAVE_DNSSD */
- char *domain, /* Domain name */
- *fullName, /* Full name */
- *regtype; /* Registration type */
+ char *fullName, /* Full name */
+ *regtype, /* Registration type */
+ *domain; /* Domain name */
cups_ptype_t type; /* Device registration type */
cups_dest_t dest; /* Destination record */
} _cups_dnssd_device_t;
@@ -115,6 +120,18 @@ typedef struct _cups_dnssd_resolve_s /* Data for resolving URI */
} _cups_dnssd_resolve_t;
#endif /* HAVE_DNSSD */
+typedef struct _cups_getdata_s
+{
+ int num_dests; /* Number of destinations */
+ cups_dest_t *dests; /* Destinations */
+} _cups_getdata_t;
+
+typedef struct _cups_namedata_s
+{
+ const char *name; /* Named destination */
+ cups_dest_t *dest; /* Destination */
+} _cups_namedata_t;
+
/*
* Local functions...
@@ -208,10 +225,12 @@ static const char *cups_dnssd_resolve(cups_dest_t *dest, const char *uri,
static int cups_dnssd_resolve_cb(void *context);
static void cups_dnssd_unquote(char *dst, const char *src,
size_t dstsize);
+static int cups_elapsed(struct timeval *t);
#endif /* HAVE_DNSSD || HAVE_AVAHI */
static int cups_find_dest(const char *name, const char *instance,
int num_dests, cups_dest_t *dests, int prev,
int *rdiff);
+static int cups_get_cb(_cups_getdata_t *data, unsigned flags, cups_dest_t *dest);
static char *cups_get_default(const char *filename, char *namebuf,
size_t namesize, const char **instance);
static int cups_get_dests(const char *filename, const char *match_name,
@@ -219,6 +238,8 @@ static int cups_get_dests(const char *filename, const char *match_name,
int num_dests, cups_dest_t **dests);
static char *cups_make_string(ipp_attribute_t *attr, char *buffer,
size_t bufsize);
+static int cups_name_cb(_cups_namedata_t *data, unsigned flags, cups_dest_t *dest);
+static void cups_queue_name(char *name, const char *serviceName, size_t namesize);
/*
@@ -549,18 +570,24 @@ _cupsAppleSetUseLastPrinter(
/*
- * 'cupsConnectDest()' - Connect to the server for a destination.
+ * 'cupsConnectDest()' - Open a conection to the destination.
*
- * Connect to the destination, returning a new http_t connection object and
- * optionally the resource path to use for the destination. These calls will
- * block until a connection is made, the timeout expires, the integer pointed
- * to by "cancel" is non-zero, or the callback function (or block) returns 0,
- * The caller is responsible for calling httpClose() on the returned object.
+ * Connect to the destination, returning a new @code http_t@ connection object
+ * and optionally the resource path to use for the destination. These calls
+ * will block until a connection is made, the timeout expires, the integer
+ * pointed to by "cancel" is non-zero, or the callback function (or block)
+ * returns 0. The caller is responsible for calling @link httpClose@ on the
+ * returned connection.
+ *
+ * Starting with CUPS 2.2.4, the caller can pass @code CUPS_DEST_FLAGS_DEVICE@
+ * for the "flags" argument to connect directly to the device associated with
+ * the destination. Otherwise, the connection is made to the CUPS scheduler
+ * associated with the destination.
*
* @since CUPS 1.6/macOS 10.8@
*/
-http_t * /* O - Connection to server or @code NULL@ */
+http_t * /* O - Connection to destination or @code NULL@ */
cupsConnectDest(
cups_dest_t *dest, /* I - Destination */
unsigned flags, /* I - Connection flags */
@@ -608,17 +635,24 @@ cupsConnectDest(
* Grab the printer URI...
*/
- if ((uri = cupsGetOption("printer-uri-supported", dest->num_options, dest->options)) == NULL)
+ if (flags & CUPS_DEST_FLAGS_DEVICE)
{
- if ((uri = cupsGetOption("resolved-device-uri", dest->num_options, dest->options)) == NULL)
+ if ((uri = cupsGetOption("device-uri", dest->num_options, dest->options)) != NULL)
{
- if ((uri = cupsGetOption("device-uri", dest->num_options, dest->options)) != NULL)
- {
#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
- if (strstr(uri, "._tcp"))
- uri = cups_dnssd_resolve(dest, uri, msec, cancel, cb, user_data);
+ if (strstr(uri, "._tcp"))
+ uri = cups_dnssd_resolve(dest, uri, msec, cancel, cb, user_data);
+#endif /* HAVE_DNSSD || HAVE_AVAHI */
+ }
+ }
+ else if ((uri = cupsGetOption("printer-uri-supported", dest->num_options, dest->options)) == NULL)
+ {
+ if ((uri = cupsGetOption("device-uri", dest->num_options, dest->options)) != NULL)
+ {
+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+ if (strstr(uri, "._tcp"))
+ uri = cups_dnssd_resolve(dest, uri, msec, cancel, cb, user_data);
#endif /* HAVE_DNSSD || HAVE_AVAHI */
- }
}
if (uri)
@@ -725,18 +759,23 @@ cupsConnectDest(
#ifdef __BLOCKS__
/*
- * 'cupsConnectDestBlock()' - Connect to the server for a destination.
+ * 'cupsConnectDestBlock()' - Open a connection to the destination.
*
- * Connect to the destination, returning a new http_t connection object and
- * optionally the resource path to use for the destination. These calls will
- * block until a connection is made, the timeout expires, the integer pointed
- * to by "cancel" is non-zero, or the callback function (or block) returns 0,
- * The caller is responsible for calling httpClose() on the returned object.
+ * Connect to the destination, returning a new @code http_t@ connection object
+ * and optionally the resource path to use for the destination. These calls
+ * will block until a connection is made, the timeout expires, the integer
+ * pointed to by "cancel" is non-zero, or the block returns 0. The caller is
+ * responsible for calling @link httpClose@ on the returned connection.
*
- * @since CUPS 1.6/macOS 10.8@
+ * Starting with CUPS 2.2.4, the caller can pass @code CUPS_DEST_FLAGS_DEVICE@
+ * for the "flags" argument to connect directly to the device associated with
+ * the destination. Otherwise, the connection is made to the CUPS scheduler
+ * associated with the destination.
+ *
+ * @since CUPS 1.6/macOS 10.8@ @exclude all@
*/
-http_t * /* O - Connection to server or @code NULL@ */
+http_t * /* O - Connection to destination or @code NULL@ */
cupsConnectDestBlock(
cups_dest_t *dest, /* I - Destination */
unsigned flags, /* I - Connection flags */
@@ -762,10 +801,10 @@ cupsConnectDestBlock(
* @since CUPS 1.6/macOS 10.8@
*/
-int
-cupsCopyDest(cups_dest_t *dest,
- int num_dests,
- cups_dest_t **dests)
+int /* O - New number of destinations */
+cupsCopyDest(cups_dest_t *dest, /* I - Destination to copy */
+ int num_dests, /* I - Number of destinations */
+ cups_dest_t **dests) /* IO - Destination array */
{
int i; /* Looping var */
cups_dest_t *new_dest; /* New destination pointer */
@@ -907,27 +946,34 @@ _cupsCreateDest(const char *name, /* I - Printer name */
/*
* 'cupsEnumDests()' - Enumerate available destinations with a callback function.
*
- * Destinations are enumerated from one or more sources. The callback function
- * receives the @code user_data@ pointer, destination name, instance, number of
- * options, and options which can be used as input to the @link cupsAddDest@
- * function. The function must return 1 to continue enumeration or 0 to stop.
+ * Destinations are enumerated from one or more sources. The callback function
+ * receives the @code user_data@ pointer and the destination pointer which can
+ * be used as input to the @link cupsCopyDest@ function. The function must
+ * return 1 to continue enumeration or 0 to stop.
+ *
+ * The @code type@ and @code mask@ arguments allow the caller to filter the
+ * destinations that are enumerated. Passing 0 for both will enumerate all
+ * printers. The constant @code CUPS_PRINTER_DISCOVERED@ is used to filter on
+ * destinations that are available but have not yet been added locally.
*
* Enumeration happens on the current thread and does not return until all
* destinations have been enumerated or the callback function returns 0.
*
+ * Note: The callback function will likely receive multiple updates for the same
+ * destinations - it is up to the caller to suppress any duplicate destinations.
+ *
* @since CUPS 1.6/macOS 10.8@
*/
int /* O - 1 on success, 0 on failure */
cupsEnumDests(
- unsigned flags, /* I - Enumeration flags */
- int msec, /* I - Timeout in milliseconds,
- * -1 for indefinite */
- int *cancel, /* I - Pointer to "cancel" variable */
- cups_ptype_t type, /* I - Printer type bits */
- cups_ptype_t mask, /* I - Mask for printer type bits */
- cups_dest_cb_t cb, /* I - Callback function */
- void *user_data) /* I - User data */
+ unsigned flags, /* I - Enumeration flags */
+ int msec, /* I - Timeout in milliseconds, -1 for indefinite */
+ int *cancel, /* I - Pointer to "cancel" variable */
+ cups_ptype_t type, /* I - Printer type bits */
+ cups_ptype_t mask, /* I - Mask for printer type bits */
+ cups_dest_cb_t cb, /* I - Callback function */
+ void *user_data) /* I - User data */
{
int i, /* Looping var */
num_dests; /* Number of destinations */
@@ -939,17 +985,19 @@ cupsEnumDests(
*user_default; /* User default printer */
#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
int count, /* Number of queries started */
+ completed, /* Number of completed queries */
remaining; /* Remainder of timeout */
+ struct timeval curtime; /* Current time */
_cups_dnssd_data_t data; /* Data for callback */
_cups_dnssd_device_t *device; /* Current device */
# ifdef HAVE_DNSSD
int nfds, /* Number of files responded */
main_fd; /* File descriptor for lookups */
- DNSServiceRef ipp_ref, /* IPP browser */
- local_ipp_ref; /* Local IPP browser */
+ DNSServiceRef ipp_ref = NULL, /* IPP browser */
+ local_ipp_ref = NULL; /* Local IPP browser */
# ifdef HAVE_SSL
- DNSServiceRef ipps_ref, /* IPPS browser */
- local_ipps_ref; /* Local IPPS browser */
+ DNSServiceRef ipps_ref = NULL,/* IPPS browser */
+ local_ipps_ref = NULL; /* Local IPPS browser */
# endif /* HAVE_SSL */
# ifdef HAVE_POLL
struct pollfd pfd; /* Polling data */
@@ -959,13 +1007,14 @@ cupsEnumDests(
# endif /* HAVE_POLL */
# else /* HAVE_AVAHI */
int error; /* Error value */
- AvahiServiceBrowser *ipp_ref; /* IPP browser */
+ AvahiServiceBrowser *ipp_ref = NULL;/* IPP browser */
# ifdef HAVE_SSL
- AvahiServiceBrowser *ipps_ref; /* IPPS browser */
+ AvahiServiceBrowser *ipps_ref = NULL; /* IPPS browser */
# endif /* HAVE_SSL */
# endif /* HAVE_DNSSD */
#endif /* HAVE_DNSSD || HAVE_AVAHI */
+
/*
* Range check input...
*/
@@ -976,59 +1025,119 @@ cupsEnumDests(
return (0);
/*
- * Get the list of local printers and pass them to the callback function...
+ * Get ready to enumerate...
*/
- num_dests = _cupsGetDests(CUPS_HTTP_DEFAULT, IPP_OP_CUPS_GET_PRINTERS, NULL,
- &dests, type, mask | CUPS_PRINTER_3D);
+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+ memset(&data, 0, sizeof(data));
- if ((user_default = _cupsUserDefault(name, sizeof(name))) != NULL)
- defprinter = name;
- else if ((defprinter = cupsGetDefault2(CUPS_HTTP_DEFAULT)) != NULL)
- {
- strlcpy(name, defprinter, sizeof(name));
- defprinter = name;
- }
+ data.type = type;
+ data.mask = mask;
+ data.cb = cb;
+ data.user_data = user_data;
+ data.devices = cupsArrayNew3((cups_array_func_t)cups_dnssd_compare_devices, NULL, NULL, 0, NULL, (cups_afree_func_t)cups_dnssd_free_device);
+#endif /* HAVE_DNSSD || HAVE_AVAHI */
- if (defprinter)
+ if (!(mask & CUPS_PRINTER_DISCOVERED) || !(type & CUPS_PRINTER_DISCOVERED))
{
/*
- * Separate printer and instance name...
+ * Get the list of local printers and pass them to the callback function...
*/
- if ((instance = strchr(name, '/')) != NULL)
- *instance++ = '\0';
+ num_dests = _cupsGetDests(CUPS_HTTP_DEFAULT, IPP_OP_CUPS_GET_PRINTERS, NULL,
+ &dests, type, mask);
- /*
- * Lookup the printer and instance and make it the default...
- */
+ if ((user_default = _cupsUserDefault(name, sizeof(name))) != NULL)
+ defprinter = name;
+ else if ((defprinter = cupsGetDefault2(CUPS_HTTP_DEFAULT)) != NULL)
+ {
+ strlcpy(name, defprinter, sizeof(name));
+ defprinter = name;
+ }
- if ((dest = cupsGetDest(name, instance, num_dests, dests)) != NULL)
- dest->is_default = 1;
- }
+ if (defprinter)
+ {
+ /*
+ * Separate printer and instance name...
+ */
- for (i = num_dests, dest = dests;
- i > 0 && (!cancel || !*cancel);
- i --, dest ++)
- if (!(*cb)(user_data, i > 1 ? CUPS_DEST_FLAGS_MORE : CUPS_DEST_FLAGS_NONE,
- dest))
- break;
+ if ((instance = strchr(name, '/')) != NULL)
+ *instance++ = '\0';
+
+ /*
+ * Lookup the printer and instance and make it the default...
+ */
- cupsFreeDests(num_dests, dests);
+ if ((dest = cupsGetDest(name, instance, num_dests, dests)) != NULL)
+ dest->is_default = 1;
+ }
- if (i > 0 || msec == 0)
- return (1);
+ for (i = num_dests, dest = dests;
+ i > 0 && (!cancel || !*cancel);
+ i --, dest ++)
+ {
+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+ const char *device_uri; /* Device URI */
+#endif /* HAVE_DNSSD || HAVE_AVAHI */
+
+ if (!(*cb)(user_data, i > 1 ? CUPS_DEST_FLAGS_MORE : CUPS_DEST_FLAGS_NONE,
+ dest))
+ break;
+
+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+ if (!dest->instance && (device_uri = cupsGetOption("device-uri", dest->num_options, dest->options)) != NULL && !strncmp(device_uri, "dnssd://", 8))
+ {
+ /*
+ * Add existing queue using service name, etc. so we don't list it again...
+ */
+
+ char scheme[32], /* URI scheme */
+ userpass[32], /* Username:password */
+ serviceName[256], /* Service name (host field) */
+ resource[256], /* Resource (options) */
+ *regtype, /* Registration type */
+ *replyDomain; /* Registration domain */
+ int port; /* Port number (not used) */
+
+ if (httpSeparateURI(HTTP_URI_CODING_ALL, device_uri, scheme, sizeof(scheme), userpass, sizeof(userpass), serviceName, sizeof(serviceName), &port, resource, sizeof(resource)) >= HTTP_URI_STATUS_OK)
+ {
+ if ((regtype = strstr(serviceName, "._ipp")) != NULL)
+ {
+ *regtype++ = '\0';
+
+ if ((replyDomain = strstr(regtype, "._tcp.")) != NULL)
+ {
+ replyDomain[5] = '\0';
+ replyDomain += 6;
+
+ if ((device = cups_dnssd_get_device(&data, serviceName, regtype, replyDomain)) != NULL)
+ device->state = _CUPS_DNSSD_ACTIVE;
+ }
+ }
+ }
+ }
+#endif /* HAVE_DNSSD || HAVE_AVAHI */
+ }
+
+ cupsFreeDests(num_dests, dests);
+
+ if (i > 0 || msec == 0)
+ goto enum_finished;
+ }
+
+ /*
+ * Return early if the caller doesn't want to do discovery...
+ */
+
+ if ((mask & CUPS_PRINTER_DISCOVERED) && !(type & CUPS_PRINTER_DISCOVERED))
+ goto enum_finished;
#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
/*
* Get Bonjour-shared printers...
*/
- data.type = type;
- data.mask = mask;
- data.cb = cb;
- data.user_data = user_data;
- data.devices = cupsArrayNew3((cups_array_func_t)cups_dnssd_compare_devices, NULL, NULL, 0, NULL, (cups_afree_func_t)cups_dnssd_free_device);
+ gettimeofday(&curtime, NULL);
# ifdef HAVE_DNSSD
if (DNSServiceCreateConnection(&data.main_ref) != kDNSServiceErr_NoError)
@@ -1079,13 +1188,12 @@ cupsEnumDests(
return (1);
}
- ipp_ref = avahi_service_browser_new(data.client, AVAHI_IF_UNSPEC,
- AVAHI_PROTO_UNSPEC, "_ipp._tcp", NULL,
- 0, cups_dnssd_browse_cb, &data);
+ data.browsers = 1;
+ ipp_ref = avahi_service_browser_new(data.client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_ipp._tcp", NULL, 0, cups_dnssd_browse_cb, &data);
+
# ifdef HAVE_SSL
- ipps_ref = avahi_service_browser_new(data.client, AVAHI_IF_UNSPEC,
- AVAHI_PROTO_UNSPEC, "_ipps._tcp", NULL,
- 0, cups_dnssd_browse_cb, &data);
+ data.browsers ++;
+ ipps_ref = avahi_service_browser_new(data.client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_ipps._tcp", NULL, 0, cups_dnssd_browse_cb, &data);
# endif /* HAVE_SSL */
# endif /* HAVE_DNSSD */
@@ -1100,32 +1208,34 @@ cupsEnumDests(
* Check for input...
*/
+ DEBUG_printf(("1cupsEnumDests: remaining=%d", remaining));
+
+ cups_elapsed(&curtime);
+
# ifdef HAVE_DNSSD
# ifdef HAVE_POLL
pfd.fd = main_fd;
pfd.events = POLLIN;
- nfds = poll(&pfd, 1, remaining > 250 ? 250 : remaining);
+ nfds = poll(&pfd, 1, remaining > _CUPS_DNSSD_MAXTIME ? _CUPS_DNSSD_MAXTIME : remaining);
# else
FD_ZERO(&input);
FD_SET(main_fd, &input);
timeout.tv_sec = 0;
- timeout.tv_usec = remaining > 250 ? 250000 : remaining * 1000;
+ timeout.tv_usec = 1000 * (remaining > _CUPS_DNSSD_MAXTIME ? _CUPS_DNSSD_MAXTIME : remaining);
nfds = select(main_fd + 1, &input, NULL, NULL, &timeout);
# endif /* HAVE_POLL */
if (nfds > 0)
DNSServiceProcessResult(data.main_ref);
- else if (nfds == 0)
- remaining -= 250;
# else /* HAVE_AVAHI */
data.got_data = 0;
- if ((error = avahi_simple_poll_iterate(data.simple_poll, 250)) > 0)
+ if ((error = avahi_simple_poll_iterate(data.simple_poll, _CUPS_DNSSD_MAXTIME)) > 0)
{
/*
* We've been told to exit the loop. Perhaps the connection to
@@ -1135,18 +1245,22 @@ cupsEnumDests(
break;
}
- if (!data.got_data)
- remaining -= 250;
+ DEBUG_printf(("1cupsEnumDests: got_data=%d", data.got_data));
# endif /* HAVE_DNSSD */
+ remaining -= cups_elapsed(&curtime);
+
for (device = (_cups_dnssd_device_t *)cupsArrayFirst(data.devices),
- count = 0;
+ count = 0, completed = 0;
device;
device = (_cups_dnssd_device_t *)cupsArrayNext(data.devices))
{
if (device->ref)
count ++;
+ if (device->state == _CUPS_DNSSD_ACTIVE)
+ completed ++;
+
if (!device->ref && device->state == _CUPS_DNSSD_NEW)
{
DEBUG_printf(("1cupsEnumDests: Querying '%s'.", device->fullName));
@@ -1173,31 +1287,28 @@ cupsEnumDests(
}
# else /* HAVE_AVAHI */
- if ((device->ref = avahi_record_browser_new(data.client,
- AVAHI_IF_UNSPEC,
- AVAHI_PROTO_UNSPEC,
- device->fullName,
- AVAHI_DNS_CLASS_IN,
- AVAHI_DNS_TYPE_TXT,
- 0,
- cups_dnssd_query_cb,
- &data)) != NULL)
+ if ((device->ref = avahi_record_browser_new(data.client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, device->fullName, AVAHI_DNS_CLASS_IN, AVAHI_DNS_TYPE_TXT, 0, cups_dnssd_query_cb, &data)) != NULL)
{
+ DEBUG_printf(("1cupsEnumDests: Query ref=%p", device->ref));
count ++;
}
else
{
device->state = _CUPS_DNSSD_ERROR;
- DEBUG_printf(("1cupsEnumDests: Query failed: %s",
- avahi_strerror(avahi_client_errno(data.client))));
+ DEBUG_printf(("1cupsEnumDests: Query failed: %s", avahi_strerror(avahi_client_errno(data.client))));
}
# endif /* HAVE_DNSSD */
}
else if (device->ref && device->state == _CUPS_DNSSD_PENDING)
{
+ completed ++;
+
+ DEBUG_printf(("1cupsEnumDests: Query for \"%s\" is complete.", device->fullName));
+
if ((device->type & mask) == type)
{
+ DEBUG_printf(("1cupsEnumDests: Add callback for \"%s\".", device->dest.name));
if (!(*cb)(user_data, CUPS_DEST_FLAGS_NONE, &device->dest))
{
remaining = -1;
@@ -1208,31 +1319,60 @@ cupsEnumDests(
device->state = _CUPS_DNSSD_ACTIVE;
}
}
+
+# ifdef HAVE_AVAHI
+ DEBUG_printf(("1cupsEnumDests: remaining=%d, browsers=%d, completed=%d, count=%d, devices count=%d", remaining, data.browsers, completed, count, cupsArrayCount(data.devices)));
+
+ if (data.browsers == 0 && completed == cupsArrayCount(data.devices))
+ break;
+# else
+ DEBUG_printf(("1cupsEnumDests: remaining=%d, completed=%d, count=%d, devices count=%d", remaining, completed, count, cupsArrayCount(data.devices)));
+
+ if (completed == cupsArrayCount(data.devices))
+ break;
+# endif /* HAVE_AVAHI */
}
+#endif /* HAVE_DNSSD || HAVE_AVAHI */
+ /*
+ * Return...
+ */
+
+ enum_finished:
+
+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
cupsArrayDelete(data.devices);
# ifdef HAVE_DNSSD
- DNSServiceRefDeallocate(ipp_ref);
- DNSServiceRefDeallocate(local_ipp_ref);
+ if (ipp_ref)
+ DNSServiceRefDeallocate(ipp_ref);
+ if (local_ipp_ref)
+ DNSServiceRefDeallocate(local_ipp_ref);
# ifdef HAVE_SSL
- DNSServiceRefDeallocate(ipp_ref);
- DNSServiceRefDeallocate(local_ipp_ref);
+ if (ipps_ref)
+ DNSServiceRefDeallocate(ipps_ref);
+ if (local_ipps_ref)
+ DNSServiceRefDeallocate(local_ipps_ref);
# endif /* HAVE_SSL */
- DNSServiceRefDeallocate(data.main_ref);
+ if (data.main_ref)
+ DNSServiceRefDeallocate(data.main_ref);
# else /* HAVE_AVAHI */
- avahi_service_browser_free(ipp_ref);
+ if (ipp_ref)
+ avahi_service_browser_free(ipp_ref);
# ifdef HAVE_SSL
- avahi_service_browser_free(ipps_ref);
+ if (ipps_ref)
+ avahi_service_browser_free(ipps_ref);
# endif /* HAVE_SSL */
- avahi_client_free(data.client);
- avahi_simple_poll_free(data.simple_poll);
+ if (data.client)
+ avahi_client_free(data.client);
+ if (data.simple_poll)
+ avahi_simple_poll_free(data.simple_poll);
# endif /* HAVE_DNSSD */
-#endif /* HAVE_DNSSD || HAVE_DNSSD */
+#endif /* HAVE_DNSSD || HAVE_AVAHI */
return (1);
}
@@ -1242,15 +1382,23 @@ cupsEnumDests(
/*
* 'cupsEnumDestsBlock()' - Enumerate available destinations with a block.
*
- * Destinations are enumerated from one or more sources. The block receives the
- * destination name, instance, number of options, and options which can be used
- * as input to the @link cupsAddDest@ function. The block must return 1 to
+ * Destinations are enumerated from one or more sources. The block receives the
+ * @code user_data@ pointer and the destination pointer which can be used as
+ * input to the @link cupsCopyDest@ function. The block must return 1 to
* continue enumeration or 0 to stop.
*
+ * The @code type@ and @code mask@ arguments allow the caller to filter the
+ * destinations that are enumerated. Passing 0 for both will enumerate all
+ * printers. The constant @code CUPS_PRINTER_DISCOVERED@ is used to filter on
+ * destinations that are available but have not yet been added locally.
+ *
* Enumeration happens on the current thread and does not return until all
* destinations have been enumerated or the block returns 0.
*
- * @since CUPS 1.6/macOS 10.8@
+ * Note: The block will likely receive multiple updates for the same
+ * destinations - it is up to the caller to suppress any duplicate destinations.
+ *
+ * @since CUPS 1.6/macOS 10.8@ @exclude all@
*/
int /* O - 1 on success, 0 on failure */
@@ -1298,7 +1446,7 @@ cupsFreeDests(int num_dests, /* I - Number of destinations */
/*
* 'cupsGetDest()' - Get the named destination from the list.
*
- * Use the @link cupsGetDests@ or @link cupsGetDests2@ functions to get a
+ * Use the @link cupsEnumDests@ or @link cupsGetDests2@ functions to get a
* list of supported destinations for the current user.
*/
@@ -1363,6 +1511,8 @@ _cupsGetDestResource(
int port; /* Port number */
+ DEBUG_printf(("_cupsGetDestResource(dest=%p(%s), resource=%p, resourcesize=%d)", (void *)dest, dest->name, (void *)resource, (int)resourcesize));
+
/*
* Range check input...
*/
@@ -1380,34 +1530,59 @@ _cupsGetDestResource(
* Grab the printer URI...
*/
- if ((uri = cupsGetOption("printer-uri-supported", dest->num_options,
- dest->options)) == NULL)
+ if ((uri = cupsGetOption("printer-uri-supported", dest->num_options, dest->options)) == NULL)
{
- if (resource)
- *resource = '\0';
+ if ((uri = cupsGetOption("device-uri", dest->num_options, dest->options)) != NULL)
+ {
+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+ if (strstr(uri, "._tcp"))
+ uri = cups_dnssd_resolve(dest, uri, 5000, NULL, NULL, NULL);
+#endif /* HAVE_DNSSD || HAVE_AVAHI */
+ }
- _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOENT), 0);
+ if (uri)
+ {
+ DEBUG_printf(("1_cupsGetDestResource: Resolved printer-uri-supported=\"%s\"", uri));
- return (NULL);
- }
+ uri = _cupsCreateDest(dest->name, cupsGetOption("printer-info", dest->num_options, dest->options), NULL, uri, resource, resourcesize);
+ }
+
+ if (uri)
+ {
+ DEBUG_printf(("1_cupsGetDestResource: Local printer-uri-supported=\"%s\"", uri));
+
+ dest->num_options = cupsAddOption("printer-uri-supported", uri, dest->num_options, &dest->options);
+
+ uri = cupsGetOption("printer-uri-supported", dest->num_options, dest->options);
+ }
+ else
+ {
+ DEBUG_puts("1_cupsGetDestResource: No printer-uri-supported found.");
+
+ if (resource)
+ *resource = '\0';
+
+ _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOENT), 0);
-#ifdef HAVE_DNSSD
- if (strstr(uri, "._tcp"))
- {
- if ((uri = cups_dnssd_resolve(dest, uri, 5000, NULL, NULL, NULL)) == NULL)
return (NULL);
+ }
}
-#endif /* HAVE_DNSSD */
-
- if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme),
- userpass, sizeof(userpass), hostname, sizeof(hostname),
- &port, resource, (int)resourcesize) < HTTP_URI_STATUS_OK)
+ else
{
- _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad printer-uri."), 1);
+ DEBUG_printf(("1_cupsGetDestResource: printer-uri-supported=\"%s\"", uri));
- return (NULL);
+ if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme),
+ userpass, sizeof(userpass), hostname, sizeof(hostname),
+ &port, resource, (int)resourcesize) < HTTP_URI_STATUS_OK)
+ {
+ _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad printer-uri."), 1);
+
+ return (NULL);
+ }
}
+ DEBUG_printf(("1_cupsGetDestResource: resource=\"%s\"", resource));
+
return (uri);
}
@@ -1434,6 +1609,7 @@ cupsGetDestWithURI(const char *name, /* I - Desired printer name or @code NULL@
hostname[256], /* Hostname from URI */
resource[1024], /* Resource path from URI */
*ptr; /* Pointer into string */
+ const char *info; /* printer-info string */
int port; /* Port number from URI */
@@ -1455,7 +1631,11 @@ cupsGetDestWithURI(const char *name, /* I - Desired printer name or @code NULL@
return (NULL);
}
- if (!name)
+ if (name)
+ {
+ info = name;
+ }
+ else
{
/*
* Create the name from the URI...
@@ -1467,24 +1647,29 @@ cupsGetDestWithURI(const char *name, /* I - Desired printer name or @code NULL@
* Use the service instance name...
*/
- if ((ptr = strchr(hostname, '.')) != NULL)
+ if ((ptr = strstr(hostname, "._")) != NULL)
*ptr = '\0';
- name = hostname;
+ cups_queue_name(temp, hostname, sizeof(temp));
+ name = temp;
+ info = hostname;
}
else if (!strncmp(resource, "/classes/", 9))
{
snprintf(temp, sizeof(temp), "%s @ %s", resource + 9, hostname);
- name = temp;
+ name = resource + 9;
+ info = temp;
}
else if (!strncmp(resource, "/printers/", 10))
{
snprintf(temp, sizeof(temp), "%s @ %s", resource + 10, hostname);
- name = temp;
+ name = resource + 10;
+ info = temp;
}
else
{
name = hostname;
+ info = hostname;
}
}
@@ -1500,7 +1685,7 @@ cupsGetDestWithURI(const char *name, /* I - Desired printer name or @code NULL@
dest->name = _cupsStrAlloc(name);
dest->num_options = cupsAddOption("device-uri", uri, dest->num_options, &(dest->options));
- dest->num_options = cupsAddOption("printer-info", name, dest->num_options, &(dest->options));
+ dest->num_options = cupsAddOption("printer-info", info, dest->num_options, &(dest->options));
return (dest);
}
@@ -1574,6 +1759,7 @@ _cupsGetDests(http_t *http, /* I - Connection to server or
"printer-info",
"printer-is-accepting-jobs",
"printer-is-shared",
+ "printer-is-temporary",
"printer-location",
"printer-make-and-model",
"printer-mandatory-job-attributes",
@@ -1586,6 +1772,8 @@ _cupsGetDests(http_t *http, /* I - Connection to server or
};
+ DEBUG_printf(("_cupsGetDests(http=%p, op=%x(%s), name=\"%s\", dests=%p, type=%x, mask=%x)", (void *)http, op, ippOpString(op), name, (void *)dests, type, mask));
+
#ifdef __APPLE__
/*
* Get the default paper size...
@@ -1678,7 +1866,8 @@ _cupsGetDests(http_t *http, /* I - Connection to server or
!strcmp(attr->name, "marker-types") ||
!strcmp(attr->name, "printer-commands") ||
!strcmp(attr->name, "printer-info") ||
- !strcmp(attr->name, "printer-is-shared") ||
+ !strcmp(attr->name, "printer-is-shared") ||
+ !strcmp(attr->name, "printer-is-temporary") ||
!strcmp(attr->name, "printer-make-and-model") ||
!strcmp(attr->name, "printer-mandatory-job-attributes") ||
!strcmp(attr->name, "printer-state") ||
@@ -1785,15 +1974,23 @@ _cupsGetDests(http_t *http, /* I - Connection to server or
* 'cupsGetDests()' - Get the list of destinations from the default server.
*
* Starting with CUPS 1.2, the returned list of destinations include the
- * printer-info, printer-is-accepting-jobs, printer-is-shared,
- * printer-make-and-model, printer-state, printer-state-change-time,
- * printer-state-reasons, and printer-type attributes as options. CUPS 1.4
- * adds the marker-change-time, marker-colors, marker-high-levels,
- * marker-levels, marker-low-levels, marker-message, marker-names,
- * marker-types, and printer-commands attributes as well.
+ * "printer-info", "printer-is-accepting-jobs", "printer-is-shared",
+ * "printer-make-and-model", "printer-state", "printer-state-change-time",
+ * "printer-state-reasons", "printer-type", and "printer-uri-supported"
+ * attributes as options.
+ *
+ * CUPS 1.4 adds the "marker-change-time", "marker-colors",
+ * "marker-high-levels", "marker-levels", "marker-low-levels", "marker-message",
+ * "marker-names", "marker-types", and "printer-commands" attributes as options.
+ *
+ * CUPS 2.2 adds accessible IPP printers to the list of destinations that can
+ * be used. The "printer-uri-supported" option will be present for those IPP
+ * printers that have been recently used.
*
* Use the @link cupsFreeDests@ function to free the destination list and
* the @link cupsGetDest@ function to find a particular destination.
+ *
+ * @exclude all@
*/
int /* O - Number of destinations */
@@ -1807,12 +2004,18 @@ cupsGetDests(cups_dest_t **dests) /* O - Destinations */
* 'cupsGetDests2()' - Get the list of destinations from the specified server.
*
* Starting with CUPS 1.2, the returned list of destinations include the
- * printer-info, printer-is-accepting-jobs, printer-is-shared,
- * printer-make-and-model, printer-state, printer-state-change-time,
- * printer-state-reasons, and printer-type attributes as options. CUPS 1.4
- * adds the marker-change-time, marker-colors, marker-high-levels,
- * marker-levels, marker-low-levels, marker-message, marker-names,
- * marker-types, and printer-commands attributes as well.
+ * "printer-info", "printer-is-accepting-jobs", "printer-is-shared",
+ * "printer-make-and-model", "printer-state", "printer-state-change-time",
+ * "printer-state-reasons", "printer-type", and "printer-uri-supported"
+ * attributes as options.
+ *
+ * CUPS 1.4 adds the "marker-change-time", "marker-colors",
+ * "marker-high-levels", "marker-levels", "marker-low-levels", "marker-message",
+ * "marker-names", "marker-types", and "printer-commands" attributes as options.
+ *
+ * CUPS 2.2 adds accessible IPP printers to the list of destinations that can
+ * be used. The "printer-uri-supported" option will be present for those IPP
+ * printers that have been recently used.
*
* Use the @link cupsFreeDests@ function to free the destination list and
* the @link cupsGetDest@ function to find a particular destination.
@@ -1824,8 +2027,8 @@ int /* O - Number of destinations */
cupsGetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */
cups_dest_t **dests) /* O - Destinations */
{
- int num_dests; /* Number of destinations */
- cups_dest_t *dest; /* Destination pointer */
+ _cups_getdata_t data; /* Enumeration data */
+ cups_dest_t *dest; /* Current destination */
const char *home; /* HOME environment variable */
char filename[1024]; /* Local ~/.cups/lpoptions file */
const char *defprinter; /* Default printer */
@@ -1851,13 +2054,17 @@ cupsGetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
* Grab the printers and classes...
*/
- *dests = (cups_dest_t *)0;
- num_dests = _cupsGetDests(http, IPP_OP_CUPS_GET_PRINTERS, NULL, dests, 0, CUPS_PRINTER_3D);
+ data.num_dests = 0;
+ data.dests = NULL;
+
+ cupsEnumDests(0, 1000, NULL, 0, 0, (cups_dest_cb_t)cups_get_cb, &data);
if (cupsLastError() >= IPP_STATUS_REDIRECTION_OTHER_SITE)
{
- cupsFreeDests(num_dests, *dests);
+ cupsFreeDests(data.num_dests, data.dests);
+
*dests = (cups_dest_t *)0;
+
return (0);
}
@@ -1865,13 +2072,13 @@ cupsGetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
* Make a copy of the "real" queues for a later sanity check...
*/
- if (num_dests > 0)
+ if (data.num_dests > 0)
{
- num_reals = num_dests;
+ num_reals = data.num_dests;
reals = calloc((size_t)num_reals, sizeof(cups_dest_t));
if (reals)
- memcpy(reals, *dests, (size_t)num_reals * sizeof(cups_dest_t));
+ memcpy(reals, data.dests, (size_t)num_reals * sizeof(cups_dest_t));
else
num_reals = 0;
}
@@ -1906,7 +2113,7 @@ cupsGetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
* Lookup the printer and instance and make it the default...
*/
- if ((dest = cupsGetDest(name, instance, num_dests, *dests)) != NULL)
+ if ((dest = cupsGetDest(name, instance, data.num_dests, data.dests)) != NULL)
dest->is_default = 1;
}
else
@@ -1917,15 +2124,13 @@ cupsGetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
*/
snprintf(filename, sizeof(filename), "%s/lpoptions", cg->cups_serverroot);
- num_dests = cups_get_dests(filename, NULL, NULL, user_default != NULL,
- num_dests, dests);
+ data.num_dests = cups_get_dests(filename, NULL, NULL, user_default != NULL, data.num_dests, &data.dests);
if ((home = getenv("HOME")) != NULL)
{
snprintf(filename, sizeof(filename), "%s/.cups/lpoptions", home);
- num_dests = cups_get_dests(filename, NULL, NULL, user_default != NULL,
- num_dests, dests);
+ data.num_dests = cups_get_dests(filename, NULL, NULL, user_default != NULL, data.num_dests, &data.dests);
}
/*
@@ -1940,7 +2145,7 @@ cupsGetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
* See if we have a default printer...
*/
- if ((dest = cupsGetDest(NULL, NULL, num_dests, *dests)) != NULL)
+ if ((dest = cupsGetDest(NULL, NULL, data.num_dests, data.dests)) != NULL)
{
/*
* Have a default; see if it is real...
@@ -1953,8 +2158,7 @@ cupsGetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
* going to an unexpected printer... (<rdar://problem/14216472>)
*/
- num_dests = cupsRemoveDest(dest->name, dest->instance, num_dests,
- dests);
+ data.num_dests = cupsRemoveDest(dest->name, dest->instance, data.num_dests, &data.dests);
}
}
@@ -1969,10 +2173,12 @@ cupsGetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
* Return the number of destinations...
*/
- if (num_dests > 0)
+ *dests = data.dests;
+
+ if (data.num_dests > 0)
_cupsSetError(IPP_STATUS_OK, NULL, 0);
- return (num_dests);
+ return (data.num_dests);
}
@@ -1980,10 +2186,10 @@ cupsGetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
* 'cupsGetNamedDest()' - Get options for the named destination.
*
* This function is optimized for retrieving a single destination and should
- * be used instead of @link cupsGetDests@ and @link cupsGetDest@ when you either
- * know the name of the destination or want to print to the default destination.
- * If @code NULL@ is returned, the destination does not exist or there is no
- * default destination.
+ * be used instead of @link cupsGetDests2@ and @link cupsGetDest@ when you
+ * either know the name of the destination or want to print to the default
+ * destination. If @code NULL@ is returned, the destination does not exist or
+ * there is no default destination.
*
* If "http" is @code CUPS_HTTP_DEFAULT@, the connection to the default print
* server will be used.
@@ -2002,6 +2208,7 @@ cupsGetNamedDest(http_t *http, /* I - Connection to server or @code CUPS_HTT
const char *name, /* I - Destination name or @code NULL@ for the default destination */
const char *instance) /* I - Instance name or @code NULL@ */
{
+ const char *dest_name; /* Working destination name */
cups_dest_t *dest; /* Destination */
char filename[1024], /* Path to lpoptions */
defname[256]; /* Default printer name */
@@ -2012,16 +2219,20 @@ cupsGetNamedDest(http_t *http, /* I - Connection to server or @code CUPS_HTT
_cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */
+ DEBUG_printf(("cupsGetNamedDest(http=%p, name=\"%s\", instance=\"%s\")", (void *)http, name, instance));
+
/*
* If "name" is NULL, find the default destination...
*/
- if (!name)
+ dest_name = name;
+
+ if (!dest_name)
{
set_as_default = 1;
- name = _cupsUserDefault(defname, sizeof(defname));
+ dest_name = _cupsUserDefault(defname, sizeof(defname));
- if (name)
+ if (dest_name)
{
char *ptr; /* Temporary pointer... */
@@ -2041,7 +2252,7 @@ cupsGetNamedDest(http_t *http, /* I - Connection to server or @code CUPS_HTT
snprintf(filename, sizeof(filename), "%s/.cups/lpoptions", home);
- name = cups_get_default(filename, defname, sizeof(defname), &instance);
+ dest_name = cups_get_default(filename, defname, sizeof(defname), &instance);
}
if (!name)
@@ -2050,27 +2261,51 @@ cupsGetNamedDest(http_t *http, /* I - Connection to server or @code CUPS_HTT
* Still not there? Try the system lpoptions file...
*/
- snprintf(filename, sizeof(filename), "%s/lpoptions",
- cg->cups_serverroot);
- name = cups_get_default(filename, defname, sizeof(defname), &instance);
+ snprintf(filename, sizeof(filename), "%s/lpoptions", cg->cups_serverroot);
+ dest_name = cups_get_default(filename, defname, sizeof(defname), &instance);
}
- if (!name)
+ if (!dest_name)
{
/*
* No locally-set default destination, ask the server...
*/
op = IPP_OP_CUPS_GET_DEFAULT;
+
+ DEBUG_puts("1cupsGetNamedDest: Asking server for default printer...");
}
+ else
+ DEBUG_printf(("1cupsGetNamedDest: Using name=\"%s\"...", name));
}
/*
* Get the printer's attributes...
*/
- if (!_cupsGetDests(http, op, name, &dest, 0, CUPS_PRINTER_3D))
- return (NULL);
+ if (!_cupsGetDests(http, op, dest_name, &dest, 0, 0))
+ {
+ if (name)
+ {
+ _cups_namedata_t data; /* Callback data */
+
+ DEBUG_puts("1cupsGetNamedDest: No queue found for printer, looking on network...");
+
+ data.name = name;
+ data.dest = NULL;
+
+ cupsEnumDests(0, 1000, NULL, 0, 0, (cups_dest_cb_t)cups_name_cb, &data);
+
+ if (!data.dest)
+ return (NULL);
+
+ dest = data.dest;
+ }
+ else
+ return (NULL);
+ }
+
+ DEBUG_printf(("1cupsGetNamedDest: Got dest=%p", (void *)dest));
if (instance)
dest->instance = _cupsStrAlloc(instance);
@@ -2083,13 +2318,13 @@ cupsGetNamedDest(http_t *http, /* I - Connection to server or @code CUPS_HTT
*/
snprintf(filename, sizeof(filename), "%s/lpoptions", cg->cups_serverroot);
- cups_get_dests(filename, name, instance, 1, 1, &dest);
+ cups_get_dests(filename, dest_name, instance, 1, 1, &dest);
if (home)
{
snprintf(filename, sizeof(filename), "%s/.cups/lpoptions", home);
- cups_get_dests(filename, name, instance, 1, 1, &dest);
+ cups_get_dests(filename, dest_name, instance, 1, 1, &dest);
}
/*
@@ -2193,6 +2428,8 @@ cupsSetDefaultDest(
*
* This function saves the destinations to /etc/cups/lpoptions when run
* as root and ~/.cups/lpoptions when run as a normal user.
+ *
+ * @exclude all@
*/
void
@@ -2245,7 +2482,7 @@ cupsSetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
* Get the server destinations...
*/
- num_temps = _cupsGetDests(http, IPP_OP_CUPS_GET_PRINTERS, NULL, &temps, 0, CUPS_PRINTER_3D);
+ num_temps = _cupsGetDests(http, IPP_OP_CUPS_GET_PRINTERS, NULL, &temps, 0, 0);
if (cupsLastError() >= IPP_STATUS_REDIRECTION_OTHER_SITE)
{
@@ -2839,11 +3076,12 @@ cups_dnssd_browse_cb(
(void)protocol;
(void)context;
+ DEBUG_printf(("cups_dnssd_browse_cb(..., name=\"%s\", type=\"%s\", domain=\"%s\", ...);", name, type, domain));
+
switch (event)
{
case AVAHI_BROWSER_FAILURE:
- DEBUG_printf(("cups_dnssd_browse_cb: %s",
- avahi_strerror(avahi_client_errno(client))));
+ DEBUG_printf(("cups_dnssd_browse_cb: %s", avahi_strerror(avahi_client_errno(client))));
avahi_simple_poll_quit(data->simple_poll);
break;
@@ -2858,8 +3096,7 @@ cups_dnssd_browse_cb(
* This comes from the local machine so ignore it.
*/
- DEBUG_printf(("cups_dnssd_browse_cb: Ignoring local service \"%s\".",
- name));
+ DEBUG_printf(("cups_dnssd_browse_cb: Ignoring local service \"%s\".", name));
}
else
{
@@ -2871,9 +3108,13 @@ cups_dnssd_browse_cb(
}
break;
- case AVAHI_BROWSER_REMOVE:
- case AVAHI_BROWSER_ALL_FOR_NOW:
- case AVAHI_BROWSER_CACHE_EXHAUSTED:
+ case AVAHI_BROWSER_REMOVE :
+ case AVAHI_BROWSER_CACHE_EXHAUSTED :
+ break;
+
+ case AVAHI_BROWSER_ALL_FOR_NOW :
+ DEBUG_puts("cups_dnssd_browse_cb: ALL_FOR_NOW");
+ data->browsers --;
break;
}
}
@@ -2895,6 +3136,8 @@ cups_dnssd_client_cb(
(void)client;
+ DEBUG_printf(("cups_dnssd_client_cb(client=%p, state=%d, context=%p)", client, state, context));
+
/*
* If the connection drops, quit.
*/
@@ -2964,8 +3207,9 @@ cups_dnssd_get_device(
{
_cups_dnssd_device_t key, /* Search key */
*device; /* Device */
- char fullName[kDNSServiceMaxDomainName];
+ char fullName[kDNSServiceMaxDomainName],
/* Full name for query */
+ name[128]; /* Queue name */
DEBUG_printf(("5cups_dnssd_get_device(data=%p, serviceName=\"%s\", regtype=\"%s\", replyDomain=\"%s\")", (void *)data, serviceName, regtype, replyDomain));
@@ -2974,7 +3218,9 @@ cups_dnssd_get_device(
* See if this is an existing device...
*/
- key.dest.name = (char *)serviceName;
+ cups_queue_name(name, serviceName, sizeof(name));
+
+ key.dest.name = name;
if ((device = cupsArrayFind(data->devices, &key)) != NULL)
{
@@ -3035,10 +3281,12 @@ cups_dnssd_get_device(
replyDomain));
device = calloc(sizeof(_cups_dnssd_device_t), 1);
- device->dest.name = _cupsStrAlloc(serviceName);
+ device->dest.name = _cupsStrAlloc(name);
device->domain = _cupsStrAlloc(replyDomain);
device->regtype = _cupsStrAlloc(regtype);
+ device->dest.num_options = cupsAddOption("printer-info", serviceName, 0, &device->dest.options);
+
cupsArrayAdd(data->devices, device);
}
@@ -3047,11 +3295,9 @@ cups_dnssd_get_device(
*/
# ifdef HAVE_DNSSD
- DNSServiceConstructFullName(fullName, device->dest.name, device->regtype,
- device->domain);
+ DNSServiceConstructFullName(fullName, serviceName, regtype, replyDomain);
# else /* HAVE_AVAHI */
- avahi_service_name_join(fullName, kDNSServiceMaxDomainName, serviceName,
- regtype, replyDomain);
+ avahi_service_name_join(fullName, kDNSServiceMaxDomainName, serviceName, regtype, replyDomain);
# endif /* HAVE_DNSSD */
_cupsStrFree(device->fullName);
@@ -3070,6 +3316,8 @@ cups_dnssd_get_device(
if (device->state == _CUPS_DNSSD_ACTIVE)
{
+ DEBUG_printf(("6cups_dnssd_get_device: Remove callback for \"%s\".", device->dest.name));
+
(*data->cb)(data->user_data, CUPS_DEST_FLAGS_REMOVED, &device->dest);
device->state = _CUPS_DNSSD_NEW;
}
@@ -3128,7 +3376,10 @@ cups_dnssd_local_cb(
}
if (device->state == _CUPS_DNSSD_ACTIVE)
+ {
+ DEBUG_printf(("6cups_dnssd_local_cb: Remove callback for \"%s\".", device->dest.name));
(*data->cb)(data->user_data, CUPS_DEST_FLAGS_REMOVED, &device->dest);
+ }
device->state = _CUPS_DNSSD_LOCAL;
}
@@ -3141,7 +3392,9 @@ cups_dnssd_local_cb(
*
* Note: This function is needed because avahi_simple_poll_iterate is broken
* and always uses a timeout of 0 (!) milliseconds.
- * (Avahi Ticket #364)
+ * (https://github.com/lathiat/avahi/issues/127)
+ *
+ * @private@
*/
static int /* O - Number of file descriptors matching */
@@ -3156,16 +3409,22 @@ cups_dnssd_poll_cb(
int val; /* Return value */
+ DEBUG_printf(("cups_dnssd_poll_cb(pollfds=%p, num_pollfds=%d, timeout=%d, context=%p)", pollfds, num_pollfds, timeout, context));
+
(void)timeout;
- val = poll(pollfds, num_pollfds, 250);
+ val = poll(pollfds, num_pollfds, _CUPS_DNSSD_MAXTIME);
+
+ DEBUG_printf(("cups_dnssd_poll_cb: poll() returned %d", val));
if (val < 0)
{
DEBUG_printf(("cups_dnssd_poll_cb: %s", strerror(errno)));
}
else if (val > 0)
+ {
data->got_data = 1;
+ }
return (val);
}
@@ -3214,7 +3473,8 @@ cups_dnssd_query_cb(
# endif /* HAVE_DNSSD */
_cups_dnssd_data_t *data = (_cups_dnssd_data_t *)context;
/* Enumeration data */
- char name[1024], /* Service name */
+ char serviceName[256],/* Service name */
+ name[128], /* Queue name */
*ptr; /* Pointer into string */
_cups_dnssd_device_t dkey, /* Search key */
*device; /* Device */
@@ -3231,11 +3491,7 @@ cups_dnssd_query_cb(
return;
# else /* HAVE_AVAHI */
- DEBUG_printf(("5cups_dnssd_query_cb(browser=%p, interfaceIndex=%d, "
- "protocol=%d, event=%d, fullName=\"%s\", rrclass=%u, "
- "rrtype=%u, rdata=%p, rdlen=%u, flags=%x, context=%p)",
- browser, interfaceIndex, protocol, event, fullName, rrclass,
- rrtype, rdata, (unsigned)rdlen, flags, context));
+ DEBUG_printf(("cups_dnssd_query_cb(browser=%p, interfaceIndex=%d, protocol=%d, event=%d, fullName=\"%s\", rrclass=%u, rrtype=%u, rdata=%p, rdlen=%u, flags=%x, context=%p)", browser, interfaceIndex, protocol, event, fullName, rrclass, rrtype, rdata, (unsigned)rdlen, flags, context));
/*
* Only process "add" data...
@@ -3244,8 +3500,7 @@ cups_dnssd_query_cb(
if (event != AVAHI_BROWSER_NEW)
{
if (event == AVAHI_BROWSER_FAILURE)
- DEBUG_printf(("cups_dnssd_query_cb: %s",
- avahi_strerror(avahi_client_errno(client))));
+ DEBUG_printf(("cups_dnssd_query_cb: %s", avahi_strerror(avahi_client_errno(client))));
return;
}
@@ -3255,14 +3510,16 @@ cups_dnssd_query_cb(
* Lookup the service in the devices array.
*/
- dkey.dest.name = name;
-
- cups_dnssd_unquote(name, fullName, sizeof(name));
+ cups_dnssd_unquote(serviceName, fullName, sizeof(serviceName));
- if ((ptr = strstr(name, "._")) != NULL)
+ if ((ptr = strstr(serviceName, "._")) != NULL)
*ptr = '\0';
- if ((device = cupsArrayFind(data->devices, &dkey)) != NULL)
+ cups_queue_name(name, serviceName, sizeof(name));
+
+ dkey.dest.name = name;
+
+ if ((device = cupsArrayFind(data->devices, &dkey)) != NULL && device->state == _CUPS_DNSSD_NEW)
{
/*
* Found it, pull out the make and model from the TXT record and save it...
@@ -3279,7 +3536,7 @@ cups_dnssd_query_cb(
model[256], /* Model */
uriname[1024], /* Name for URI */
uri[1024]; /* Printer URI */
- cups_ptype_t type = CUPS_PRINTER_REMOTE | CUPS_PRINTER_BW;
+ cups_ptype_t type = CUPS_PRINTER_DISCOVERED | CUPS_PRINTER_BW;
/* Printer type */
int saw_printer_type = 0;
/* Did we see a printer-type key? */
@@ -3398,7 +3655,7 @@ cups_dnssd_query_cb(
*/
saw_printer_type = 1;
- type = (cups_ptype_t)strtol(value, NULL, 0);
+ type = (cups_ptype_t)strtol(value, NULL, 0) | CUPS_PRINTER_DISCOVERED;
}
else if (!saw_printer_type)
{
@@ -3454,8 +3711,6 @@ cups_dnssd_query_cb(
* Save the printer-xxx values...
*/
- device->dest.num_options = cupsAddOption("printer-info", name, device->dest.num_options, &device->dest.options);
-
if (make_and_model[0])
{
strlcat(make_and_model, " ", sizeof(make_and_model));
@@ -3543,9 +3798,9 @@ cups_dnssd_resolve(
* Save the resolved URI...
*/
- dest->num_options = cupsAddOption("resolved-device-uri", uri, dest->num_options, &dest->options);
+ dest->num_options = cupsAddOption("device-uri", uri, dest->num_options, &dest->options);
- return (cupsGetOption("resolved-device-uri", dest->num_options, dest->options));
+ return (cupsGetOption("device-uri", dest->num_options, dest->options));
}
@@ -3620,6 +3875,29 @@ cups_dnssd_unquote(char *dst, /* I - Destination buffer */
#endif /* HAVE_DNSSD */
+#if defined(HAVE_AVAHI) || defined(HAVE_DNSSD)
+/*
+ * 'cups_elapsed()' - Return the elapsed time in milliseconds.
+ */
+
+static int /* O - Elapsed time in milliseconds */
+cups_elapsed(struct timeval *t) /* IO - Previous time */
+{
+ int msecs; /* Milliseconds */
+ struct timeval nt; /* New time */
+
+
+ gettimeofday(&nt, NULL);
+
+ msecs = (int)(1000 * (nt.tv_sec - t->tv_sec) + (nt.tv_usec - t->tv_usec) / 1000);
+
+ *t = nt;
+
+ return (msecs);
+}
+#endif /* HAVE_AVAHI || HAVE_DNSSD */
+
+
/*
* 'cups_find_dest()' - Find a destination using a binary search.
*/
@@ -3724,6 +4002,36 @@ cups_find_dest(const char *name, /* I - Destination name */
/*
+ * 'cups_get_cb()' - Collect enumerated destinations.
+ */
+
+static int /* O - 1 to continue, 0 to stop */
+cups_get_cb(_cups_getdata_t *data, /* I - Data from cupsGetDests */
+ unsigned flags, /* I - Enumeration flags */
+ cups_dest_t *dest) /* I - Destination */
+{
+ if (flags & CUPS_DEST_FLAGS_REMOVED)
+ {
+ /*
+ * Remove destination from array...
+ */
+
+ data->num_dests = cupsRemoveDest(dest->name, dest->instance, data->num_dests, &data->dests);
+ }
+ else
+ {
+ /*
+ * Add destination to array...
+ */
+
+ data->num_dests = cupsCopyDest(dest, data->num_dests, &data->dests);
+ }
+
+ return (1);
+}
+
+
+/*
* 'cups_get_default()' - Get the default destination from an lpoptions file.
*/
@@ -4027,3 +4335,58 @@ cups_make_string(
return (buffer);
}
+
+
+/*
+ * 'cups_name_cb()' - Find an enumerated destination.
+ */
+
+static int /* O - 1 to continue, 0 to stop */
+cups_name_cb(_cups_namedata_t *data, /* I - Data from cupsGetNamedDest */
+ unsigned flags, /* I - Enumeration flags */
+ cups_dest_t *dest) /* I - Destination */
+{
+ DEBUG_printf(("2cups_name_cb(data=%p(%s), flags=%x, dest=%p(%s)", (void *)data, data->name, flags, (void *)dest, dest->name));
+
+ if (!(flags & CUPS_DEST_FLAGS_REMOVED) && !dest->instance && !strcasecmp(data->name, dest->name))
+ {
+ /*
+ * Copy destination and stop enumeration...
+ */
+
+ cupsCopyDest(dest, 0, &data->dest);
+ return (0);
+ }
+
+ return (1);
+}
+
+
+/*
+ * 'cups_queue_name()' - Create a local queue name based on the service name.
+ */
+
+static void
+cups_queue_name(
+ char *name, /* I - Name buffer */
+ const char *serviceName, /* I - Service name */
+ size_t namesize) /* I - Size of name buffer */
+{
+ const char *ptr; /* Pointer into serviceName */
+ char *nameptr; /* Pointer into name */
+
+
+ for (nameptr = name, ptr = serviceName; *ptr && nameptr < (name + namesize - 1); ptr ++)
+ {
+ /*
+ * Sanitize the printer name...
+ */
+
+ if (_cups_isalnum(*ptr))
+ *nameptr++ = *ptr;
+ else if (nameptr == name || nameptr[-1] != '_')
+ *nameptr++ = '_';
+ }
+
+ *nameptr = '\0';
+}
diff --git a/cups/dir.c b/cups/dir.c
index 65b8c4f..b7cd400 100644
--- a/cups/dir.c
+++ b/cups/dir.c
@@ -3,7 +3,7 @@
*
* This set of APIs abstracts enumeration of directory entries.
*
- * Copyright 2007-2012 by Apple Inc.
+ * Copyright 2007-2017 by Apple Inc.
* Copyright 1997-2005 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
@@ -338,10 +338,6 @@ cupsDirRead(cups_dir_t *dp) /* I - Directory pointer */
{
struct dirent *entry; /* Pointer to entry */
char filename[1024]; /* Full filename */
-# ifdef HAVE_PTHREAD_H
- char buffer[sizeof(struct dirent) + 1024];
- /* Directory entry buffer */
-# endif /* HAVE_PTHREAD_H */
DEBUG_printf(("2cupsDirRead(dp=%p)", (void *)dp));
@@ -359,29 +355,8 @@ cupsDirRead(cups_dir_t *dp) /* I - Directory pointer */
for (;;)
{
-# ifdef HAVE_PTHREAD_H
/*
- * Read the next entry using the reentrant version of readdir...
- */
-
- if (readdir_r(dp->dir, (struct dirent *)buffer, &entry))
- {
- DEBUG_printf(("3cupsDirRead: readdir_r() failed - %s\n", strerror(errno)));
- return (NULL);
- }
-
- if (!entry)
- {
- DEBUG_puts("3cupsDirRead: readdir_r() returned a NULL pointer!");
- return (NULL);
- }
-
- DEBUG_printf(("4cupsDirRead: readdir_r() returned \"%s\"...",
- entry->d_name));
-
-# else
- /*
- * Read the next entry using the original version of readdir...
+ * Read the next entry...
*/
if ((entry = readdir(dp->dir)) == NULL)
@@ -392,8 +367,6 @@ cupsDirRead(cups_dir_t *dp) /* I - Directory pointer */
DEBUG_printf(("4cupsDirRead: readdir() returned \"%s\"...", entry->d_name));
-# endif /* HAVE_PTHREAD_H */
-
/*
* Skip "." and ".."...
*/
diff --git a/cups/encode.c b/cups/encode.c
index e60aec0..94695d0 100644
--- a/cups/encode.c
+++ b/cups/encode.c
@@ -1,7 +1,7 @@
/*
* Option encoding routines for CUPS.
*
- * Copyright 2007-2016 by Apple Inc.
+ * Copyright 2007-2017 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -329,7 +329,7 @@ static int compare_ipp_options(_ipp_option_t *a, _ipp_option_t *b);
* 'cupsEncodeOptions()' - Encode printer options into IPP attributes.
*
* This function adds operation, job, and then subscription attributes,
- * in that order. Use the cupsEncodeOptions2() function to add attributes
+ * in that order. Use the @link cupsEncodeOptions2@ function to add attributes
* for a single group.
*/
@@ -354,7 +354,7 @@ cupsEncodeOptions(ipp_t *ipp, /* I - Request to add to */
* 'cupsEncodeOptions2()' - Encode printer options into IPP attributes for a group.
*
* This function only adds attributes for a single group. Call this
- * function multiple times for each group, or use cupsEncodeOptions()
+ * function multiple times for each group, or use @link cupsEncodeOptions@
* to add the standard groups.
*
* @since CUPS 1.2/macOS 10.5@
diff --git a/cups/file-private.h b/cups/file-private.h
index b8ca431..1f4db79 100644
--- a/cups/file-private.h
+++ b/cups/file-private.h
@@ -4,9 +4,9 @@
* Since stdio files max out at 256 files on many systems, we have to
* write similar functions without this limit. At the same time, using
* our own file functions allows us to provide transparent support of
- * gzip'd print files, PPD files, etc.
+ * different line endings, gzip'd print files, PPD files, etc.
*
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2017 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
diff --git a/cups/file.c b/cups/file.c
index a027df4..8cdf036 100644
--- a/cups/file.c
+++ b/cups/file.c
@@ -4,9 +4,9 @@
* Since stdio files max out at 256 files on many systems, we have to
* write similar functions without this limit. At the same time, using
* our own file functions allows us to provide transparent support of
- * gzip'd print files, PPD files, etc.
+ * different line endings, gzip'd print files, PPD files, etc.
*
- * Copyright 2007-2015 by Apple Inc.
+ * Copyright 2007-2017 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
@@ -321,7 +321,6 @@ cupsFileClose(cups_file_t *fp) /* I - CUPS file */
int fd; /* File descriptor */
char mode; /* Open mode */
int status; /* Return status */
- int is_stdio; /* Is a stdio file? */
DEBUG_printf(("cupsFileClose(fp=%p)", (void *)fp));
@@ -410,12 +409,19 @@ cupsFileClose(cups_file_t *fp) /* I - CUPS file */
#endif /* HAVE_LIBZ */
/*
+ * If this is one of the cupsFileStdin/out/err files, return now and don't
+ * actually free memory or close (these last the life of the process...)
+ */
+
+ if (fp->is_stdio)
+ return (status);
+
+/*
* Save the file descriptor we used and free memory...
*/
- fd = fp->fd;
- mode = fp->mode;
- is_stdio = fp->is_stdio;
+ fd = fp->fd;
+ mode = fp->mode;
if (fp->printf_buffer)
free(fp->printf_buffer);
@@ -431,11 +437,8 @@ cupsFileClose(cups_file_t *fp) /* I - CUPS file */
if (httpAddrClose(NULL, fd) < 0)
status = -1;
}
- else if (!is_stdio)
- {
- if (close(fd) < 0)
- status = -1;
- }
+ else if (close(fd) < 0)
+ status = -1;
return (status);
}
@@ -1384,7 +1387,11 @@ cupsFilePrintf(cups_file_t *fp, /* I - CUPS file */
{
memcpy(fp->ptr, fp->printf_buffer, (size_t)bytes);
fp->ptr += bytes;
- return ((int)bytes);
+
+ if (fp->is_stdio && cupsFileFlush(fp))
+ return (-1);
+ else
+ return ((int)bytes);
}
}
@@ -1563,7 +1570,11 @@ cupsFilePuts(cups_file_t *fp, /* I - CUPS file */
{
memcpy(fp->ptr, s, (size_t)bytes);
fp->ptr += bytes;
- return ((int)bytes);
+
+ if (fp->is_stdio && cupsFileFlush(fp))
+ return (-1);
+ else
+ return ((int)bytes);
}
}
diff --git a/cups/file.h b/cups/file.h
index 177c2e9..42abe20 100644
--- a/cups/file.h
+++ b/cups/file.h
@@ -4,9 +4,9 @@
* Since stdio files max out at 256 files on many systems, we have to
* write similar functions without this limit. At the same time, using
* our own file functions allows us to provide transparent support of
- * gzip'd print files, PPD files, etc.
+ * different line endings, gzip'd print files, PPD files, etc.
*
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2017 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
diff --git a/cups/http-addr.c b/cups/http-addr.c
index 12d13a6..61c8638 100644
--- a/cups/http-addr.c
+++ b/cups/http-addr.c
@@ -58,9 +58,9 @@ httpAddrAny(const http_addr_t *addr) /* I - Address to check */
* 'httpAddrClose()' - Close a socket created by @link httpAddrConnect@ or
* @link httpAddrListen@.
*
- * Pass @code NULL@ for sockets created with @link httpAddrConnect@ and the
- * listen address for sockets created with @link httpAddrListen@. This will
- * ensure that domain sockets are removed when closed.
+ * Pass @code NULL@ for sockets created with @link httpAddrConnect2@ and the
+ * listen address for sockets created with @link httpAddrListen@. This function
+ * ensures that domain sockets are removed when closed.
*
* @since CUPS 2.0/OS 10.10@
*/
@@ -648,6 +648,10 @@ httpAddrString(const http_addr_t *addr, /* I - Address to convert */
/*
* 'httpGetAddress()' - Get the address of the connected peer of a connection.
*
+ * For connections created with @link httpConnect2@, the address is for the
+ * server. For connections created with @link httpAccept@, the address is for
+ * the client.
+ *
* Returns @code NULL@ if the socket is currently unconnected.
*
* @since CUPS 2.0/OS 10.10@
@@ -667,7 +671,7 @@ httpGetAddress(http_t *http) /* I - HTTP connection */
* 'httpGetHostByName()' - Lookup a hostname or IPv4 address, and return
* address records for the specified name.
*
- * @deprecated@
+ * @deprecated@ @exclude all@
*/
struct hostent * /* O - Host entry */
diff --git a/cups/http-addrlist.c b/cups/http-addrlist.c
index 723bf02..22bd5a7 100644
--- a/cups/http-addrlist.c
+++ b/cups/http-addrlist.c
@@ -1,7 +1,7 @@
/*
* HTTP address list routines for CUPS.
*
- * Copyright 2007-2016 by Apple Inc.
+ * Copyright 2007-2017 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
@@ -32,7 +32,7 @@
/*
* 'httpAddrConnect()' - Connect to any of the addresses in the list.
*
- * @since CUPS 1.2/macOS 10.5@
+ * @since CUPS 1.2/macOS 10.5@ @exclude all@
*/
http_addrlist_t * /* O - Connected address or NULL on failure */
diff --git a/cups/http-private.h b/cups/http-private.h
index ec908a6..7c39c04 100644
--- a/cups/http-private.h
+++ b/cups/http-private.h
@@ -1,7 +1,7 @@
/*
* Private HTTP definitions for CUPS.
*
- * Copyright 2007-2016 by Apple Inc.
+ * Copyright 2007-2017 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
@@ -184,6 +184,7 @@ extern "C" {
#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 */
+#define _HTTP_TLS_DENY_CBC 32 /* Deny CBC cipher suites */
/*
diff --git a/cups/http-support.c b/cups/http-support.c
index 1ca01b2..76dbb7d 100644
--- a/cups/http-support.c
+++ b/cups/http-support.c
@@ -1,7 +1,7 @@
/*
* HTTP support routines for CUPS.
*
- * Copyright 2007-2016 by Apple Inc.
+ * Copyright 2007-2017 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
@@ -543,7 +543,7 @@ httpAssembleUUID(const char *server, /* I - Server name */
* This function is deprecated. Use the httpDecode64_2() function instead
* which provides buffer length arguments.
*
- * @deprecated@
+ * @deprecated@ @exclude all@
*/
char * /* O - Decoded string */
@@ -566,6 +566,10 @@ httpDecode64(char *out, /* I - String to write to */
/*
* 'httpDecode64_2()' - Base64-decode a string.
*
+ * The caller must initialize "outlen" to the maximum size of the decoded
+ * string before calling @code httpDecode64_2@. On return "outlen" contains the
+ * decoded length of the string.
+ *
* @since CUPS 1.1.21/macOS 10.4@
*/
@@ -671,7 +675,7 @@ httpDecode64_2(char *out, /* I - String to write to */
* This function is deprecated. Use the httpEncode64_2() function instead
* which provides buffer length arguments.
*
- * @deprecated@
+ * @deprecated@ @exclude all@
*/
char * /* O - Encoded string */
@@ -690,7 +694,7 @@ httpEncode64(char *out, /* I - String to write to */
char * /* O - Encoded string */
httpEncode64_2(char *out, /* I - String to write to */
- int outlen, /* I - Size of output string */
+ int outlen, /* I - Maximum size of output string */
const char *in, /* I - String to read from */
int inlen) /* I - Size of input string */
{
@@ -778,11 +782,11 @@ httpEncode64_2(char *out, /* I - String to write to */
/*
* 'httpGetDateString()' - Get a formatted date/time string from a time value.
*
- * @deprecated@
+ * @deprecated@ @exclude all@
*/
const char * /* O - Date/time string */
-httpGetDateString(time_t t) /* I - UNIX time */
+httpGetDateString(time_t t) /* I - Time in seconds */
{
_cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */
@@ -798,7 +802,7 @@ httpGetDateString(time_t t) /* I - UNIX time */
*/
const char * /* O - Date/time string */
-httpGetDateString2(time_t t, /* I - UNIX time */
+httpGetDateString2(time_t t, /* I - Time in seconds */
char *s, /* I - String buffer */
int slen) /* I - Size of string buffer */
{
@@ -819,7 +823,7 @@ httpGetDateString2(time_t t, /* I - UNIX time */
* 'httpGetDateTime()' - Get a time value from a formatted date/time string.
*/
-time_t /* O - UNIX time */
+time_t /* O - Time in seconds */
httpGetDateTime(const char *s) /* I - Date/time string */
{
int i; /* Looping var */
@@ -888,7 +892,7 @@ httpGetDateTime(const char *s) /* I - Date/time string */
*
* This function is deprecated; use the httpSeparateURI() function instead.
*
- * @deprecated@
+ * @deprecated@ @exclude all@
*/
void
@@ -912,7 +916,7 @@ httpSeparate(const char *uri, /* I - Universal Resource Identifier */
* This function is deprecated; use the httpSeparateURI() function instead.
*
* @since CUPS 1.1.21/macOS 10.4@
- * @deprecated@
+ * @deprecated@ @exclude all@
*/
void
@@ -1419,7 +1423,7 @@ _httpStatus(cups_lang_t *lang, /* I - Language */
* 'httpStatus()' - Return a short string describing a HTTP status code.
*
* The returned string is localized to the current POSIX locale and is based
- * on the status strings defined in RFC 2616.
+ * on the status strings defined in RFC 7231.
*/
const char * /* O - Localized status string */
@@ -2310,6 +2314,8 @@ http_resolve_cb(
* Note: This function is needed because avahi_simple_poll_iterate is broken
* and always uses a timeout of 0 (!) milliseconds.
* (Avahi Ticket #364)
+ *
+ * @private@
*/
static int /* O - Number of file descriptors matching */
diff --git a/cups/http.c b/cups/http.c
index 7925513..61b88c9 100644
--- a/cups/http.c
+++ b/cups/http.c
@@ -1,7 +1,7 @@
/*
* HTTP routines for CUPS.
*
- * Copyright 2007-2015 by Apple Inc.
+ * Copyright 2007-2017 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* This file contains Kerberos support code, copyright 2006 by
@@ -417,7 +417,7 @@ httpCompareCredentials(
*
* This function is deprecated - use @link httpConnect2@ instead.
*
- * @deprecated@
+ * @deprecated@ @exclude all@
*/
http_t * /* O - New HTTP connection */
@@ -439,7 +439,7 @@ http_t * /* O - New HTTP connection */
httpConnect2(
const char *host, /* I - Host to connect to */
int port, /* I - Port number */
- http_addrlist_t *addrlist, /* I - List of addresses or NULL to lookup */
+ http_addrlist_t *addrlist, /* I - List of addresses or @code NULL@ to lookup */
int family, /* I - Address family to use or @code AF_UNSPEC@ for any */
http_encryption_t encryption, /* I - Type of encryption to use */
int blocking, /* I - 1 for blocking connection, 0 for non-blocking */
@@ -482,7 +482,7 @@ httpConnect2(
* This function is now deprecated. Please use the @link httpConnect2@ function
* instead.
*
- * @deprecated@
+ * @deprecated@ @exclude all@
*/
http_t * /* O - New HTTP connection */
@@ -609,7 +609,7 @@ httpFieldValue(const char *name) /* I - String name */
/*
- * 'httpFlush()' - Flush data from a HTTP connection.
+ * 'httpFlush()' - Flush data read from a HTTP connection.
*/
void
@@ -679,7 +679,7 @@ httpFlush(http_t *http) /* I - HTTP connection */
/*
- * 'httpFlushWrite()' - Flush data in write buffer.
+ * 'httpFlushWrite()' - Flush data written to a HTTP connection.
*
* @since CUPS 1.2/macOS 10.5@
*/
@@ -751,7 +751,7 @@ httpGet(http_t *http, /* I - HTTP connection */
/*
* 'httpGetActivity()' - Get the most recent activity for a connection.
*
- * The return value is the UNIX time of the last read or write.
+ * The return value is the time in seconds of the last read or write.
*
* @since CUPS 2.0/OS 10.10@
*/
@@ -766,10 +766,10 @@ httpGetActivity(http_t *http) /* I - HTTP connection */
/*
* 'httpGetAuthString()' - Get the current authorization string.
*
- * The authorization string is set by cupsDoAuthentication() and
- * httpSetAuthString(). Use httpGetAuthString() to retrieve the
- * string to use with httpSetField() for the HTTP_FIELD_AUTHORIZATION
- * value.
+ * The authorization string is set by @link cupsDoAuthentication@ and
+ * @link httpSetAuthString@. Use @link httpGetAuthString@ to retrieve the
+ * string to use with @link httpSetField@ for the
+ * @code HTTP_FIELD_AUTHORIZATION@ value.
*
* @since CUPS 1.3/macOS 10.5@
*/
@@ -891,7 +891,7 @@ httpGetContentEncoding(http_t *http) /* I - HTTP connection */
* @since CUPS 1.1.19/macOS 10.3@
*/
-const char * /* O - Cookie data or NULL */
+const char * /* O - Cookie data or @code NULL@ */
httpGetCookie(http_t *http) /* I - HTTP connection */
{
return (http ? http->cookie : NULL);
@@ -1006,7 +1006,7 @@ httpGetKeepAlive(http_t *http) /* I - HTTP connection */
* This function is deprecated and will not return lengths larger than
* 2^31 - 1; use httpGetLength2() instead.
*
- * @deprecated@
+ * @deprecated@ @exclude all@
*/
int /* O - Content length */
@@ -1150,7 +1150,7 @@ httpGetRemaining(http_t *http) /* I - HTTP connection */
* 'httpGets()' - Get a line of text from a HTTP connection.
*/
-char * /* O - Line or NULL */
+char * /* O - Line or @code NULL@ */
httpGets(char *line, /* I - Line to read into */
int length, /* I - Max length of buffer */
http_t *http) /* I - HTTP connection */
@@ -1346,10 +1346,10 @@ httpGetStatus(http_t *http) /* I - HTTP connection */
/*
* 'httpGetSubField()' - Get a sub-field value.
*
- * @deprecated@
+ * @deprecated@ @exclude all@
*/
-char * /* O - Value or NULL */
+char * /* O - Value or @code NULL@ */
httpGetSubField(http_t *http, /* I - HTTP connection */
http_field_t field, /* I - Field index */
const char *name, /* I - Name of sub-field */
@@ -1365,7 +1365,7 @@ httpGetSubField(http_t *http, /* I - HTTP connection */
* @since CUPS 1.2/macOS 10.5@
*/
-char * /* O - Value or NULL */
+char * /* O - Value or @code NULL@ */
httpGetSubField2(http_t *http, /* I - HTTP connection */
http_field_t field, /* I - Field index */
const char *name, /* I - Name of sub-field */
@@ -1616,7 +1616,7 @@ httpOptions(http_t *http, /* I - HTTP connection */
*
* This function copies available data from the given HTTP connection, reading
* a buffer as needed. The data is still available for reading using
- * @link httpRead@ or @link httpRead2@.
+ * @link httpRead2@.
*
* For non-blocking connections the usual timeouts apply.
*
@@ -1939,7 +1939,7 @@ httpPut(http_t *http, /* I - HTTP connection */
* This function is deprecated. Use the httpRead2() function which can
* read more than 2GB of data.
*
- * @deprecated@
+ * @deprecated@ @exclude all@
*/
int /* O - Number of bytes read */
@@ -2326,7 +2326,7 @@ httpReadRequest(http_t *http, /* I - HTTP connection */
* This function is deprecated. Please use the @link httpReconnect2@ function
* instead.
*
- * @deprecated@
+ * @deprecated@ @exclude all@
*/
int /* O - 0 on success, non-zero on failure */
@@ -2467,9 +2467,10 @@ httpReconnect2(http_t *http, /* I - HTTP connection */
* 'httpSetAuthString()' - Set the current authorization string.
*
* This function just stores a copy of the current authorization string in
- * the HTTP connection object. You must still call httpSetField() to set
- * HTTP_FIELD_AUTHORIZATION prior to issuing a HTTP request using httpGet(),
- * httpHead(), httpOptions(), httpPost, or httpPut().
+ * the HTTP connection object. You must still call @link httpSetField@ to set
+ * @code HTTP_FIELD_AUTHORIZATION@ prior to issuing a HTTP request using
+ * @link httpGet@, @link httpHead@, @link httpOptions@, @link httpPost@, or
+ * @link httpPut@.
*
* @since CUPS 1.3/macOS 10.5@
*/
@@ -2820,7 +2821,7 @@ httpSetTimeout(
http_t *http, /* I - HTTP connection */
double timeout, /* I - Number of seconds for timeout,
must be greater than 0 */
- http_timeout_cb_t cb, /* I - Callback function or NULL */
+ http_timeout_cb_t cb, /* I - Callback function or @code NULL@ */
void *user_data) /* I - User data pointer */
{
if (!http || timeout <= 0.0)
@@ -2864,6 +2865,8 @@ httpShutdown(http_t *http) /* I - HTTP connection */
/*
* 'httpTrace()' - Send an TRACE request to the server.
+ *
+ * @exclude all@
*/
int /* O - Status of call (0 = success) */
@@ -3259,7 +3262,7 @@ httpWait(http_t *http, /* I - HTTP connection */
* This function is deprecated. Use the httpWrite2() function which can
* write more than 2GB of data.
*
- * @deprecated@
+ * @deprecated@ @exclude all@
*/
int /* O - Number of bytes written */
@@ -3898,7 +3901,7 @@ static http_t * /* O - HTTP connection */
http_create(
const char *host, /* I - Hostname */
int port, /* I - Port number */
- http_addrlist_t *addrlist, /* I - Address list or NULL */
+ http_addrlist_t *addrlist, /* I - Address list or @code NULL@ */
int family, /* I - Address family or AF_UNSPEC */
http_encryption_t encryption, /* I - Encryption to use */
int blocking, /* I - 1 for blocking mode */
diff --git a/cups/http.h b/cups/http.h
index ccbf77e..c61a79e 100644
--- a/cups/http.h
+++ b/cups/http.h
@@ -1,7 +1,7 @@
/*
* Hyper-Text Transport Protocol definitions for CUPS.
*
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2017 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
@@ -109,7 +109,7 @@ extern "C" {
* Types and structures...
*/
-typedef enum http_auth_e /**** HTTP authentication types ****/
+typedef enum http_auth_e /**** HTTP authentication types @exclude all@ ****/
{
HTTP_AUTH_NONE, /* No authentication in use */
HTTP_AUTH_BASIC, /* Basic authentication in use */
@@ -393,7 +393,7 @@ typedef enum http_uri_coding_e /**** URI en/decode flags ****/
HTTP_URI_CODING_RFC6874 = 16 /* Use RFC 6874 address format */
} http_uri_coding_t;
-typedef enum http_version_e /**** HTTP version numbers ****/
+typedef enum http_version_e /**** HTTP version numbers @exclude all@ ****/
{
HTTP_VERSION_0_9 = 9, /* HTTP/0.9 */
HTTP_VERSION_1_0 = 100, /* HTTP/1.0 */
@@ -427,6 +427,7 @@ typedef struct http_addrlist_s /**** Socket address list, which is
**** used to enumerate all of the
**** addresses that are associated
**** with a hostname. @since CUPS 1.2/macOS 10.5@
+ **** @exclude all@
****/
{
struct http_addrlist_s *next; /* Pointer to next address in list */
@@ -435,7 +436,7 @@ typedef struct http_addrlist_s /**** Socket address list, which is
typedef struct _http_s http_t; /**** HTTP connection type ****/
-typedef struct http_credential_s /**** HTTP credential data @since CUPS 1.5/macOS 10.7@ ****/
+typedef struct http_credential_s /**** HTTP credential data @since CUPS 1.5/macOS 10.7@ @exclude all@ ****/
{
void *data; /* Pointer to credential data */
size_t datalen; /* Credential length */
diff --git a/cups/ipp-support.c b/cups/ipp-support.c
index b49ac0d..675e5f3 100644
--- a/cups/ipp-support.c
+++ b/cups/ipp-support.c
@@ -1,7 +1,7 @@
/*
* Internet Printing Protocol support functions for CUPS.
*
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2017 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
@@ -2243,7 +2243,7 @@ ippStateString(ipp_state_t state) /* I - State value */
/*
* 'ippTagString()' - Return the tag name corresponding to a tag value.
*
- * The returned names are defined in RFC 2911 and 3382.
+ * The returned names are defined in RFC 8011 and the IANA IPP Registry.
*
* @since CUPS 1.4/macOS 10.6@
*/
@@ -2263,7 +2263,7 @@ ippTagString(ipp_tag_t tag) /* I - Tag value */
/*
* 'ippTagValue()' - Return the tag value corresponding to a tag name.
*
- * The tag names are defined in RFC 2911 and 3382.
+ * The tag names are defined in RFC 8011 and the IANA IPP Registry.
*
* @since CUPS 1.4/macOS 10.6@
*/
diff --git a/cups/ipp.c b/cups/ipp.c
index 817c9d5..429a05e 100644
--- a/cups/ipp.c
+++ b/cups/ipp.c
@@ -316,7 +316,7 @@ ippAddCollections(
/*
- * 'ippAddDate()' - Add a date attribute to an IPP message.
+ * 'ippAddDate()' - Add a dateTime attribute to an IPP message.
*
* The @code ipp@ parameter refers to an IPP message previously created using
* the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions.
@@ -1380,7 +1380,7 @@ ippContainsInteger(
* specified string value.
*
* Returns non-zero when the attribute contains a matching charset, keyword,
- * language, mimeMediaType, name, text, URI, or URI scheme value.
+ * naturalLanguage, mimeMediaType, name, text, uri, or uriScheme value.
*
* @since CUPS 1.7/macOS 10.9@
*/
@@ -1759,12 +1759,12 @@ ippCopyAttributes(
/*
- * 'ippDateToTime()' - Convert from RFC 1903 Date/Time format to UNIX time
- * in seconds.
+ * 'ippDateToTime()' - Convert from RFC 2579 Date/Time format to time in
+ * seconds.
*/
time_t /* O - UNIX time value */
-ippDateToTime(const ipp_uchar_t *date) /* I - RFC 1903 date info */
+ippDateToTime(const ipp_uchar_t *date) /* I - RFC 2579 date info */
{
struct tm unixdate; /* UNIX date/time info */
time_t t; /* Computed time */
@@ -1776,7 +1776,7 @@ ippDateToTime(const ipp_uchar_t *date) /* I - RFC 1903 date info */
memset(&unixdate, 0, sizeof(unixdate));
/*
- * RFC-1903 date/time format is:
+ * RFC-2579 date/time format is:
*
* Byte(s) Description
* ------- -----------
@@ -2152,7 +2152,7 @@ ippFirstAttribute(ipp_t *ipp) /* I - IPP message */
* 'ippGetBoolean()' - Get a boolean value for an attribute.
*
* The @code element@ parameter specifies which value to get from 0 to
- * @link ippGetCount(attr)@ - 1.
+ * @code ippGetCount(attr)@ - 1.
*
* @since CUPS 1.6/macOS 10.8@
*/
@@ -2181,7 +2181,7 @@ ippGetBoolean(ipp_attribute_t *attr, /* I - IPP attribute */
* 'ippGetCollection()' - Get a collection value for an attribute.
*
* The @code element@ parameter specifies which value to get from 0 to
- * @link ippGetCount(attr)@ - 1.
+ * @code ippGetCount(attr)@ - 1.
*
* @since CUPS 1.6/macOS 10.8@
*/
@@ -2232,15 +2232,15 @@ ippGetCount(ipp_attribute_t *attr) /* I - IPP attribute */
/*
- * 'ippGetDate()' - Get a date value for an attribute.
+ * 'ippGetDate()' - Get a dateTime value for an attribute.
*
* The @code element@ parameter specifies which value to get from 0 to
- * @link ippGetCount(attr)@ - 1.
+ * @code ippGetCount(attr)@ - 1.
*
* @since CUPS 1.6/macOS 10.8@
*/
-const ipp_uchar_t * /* O - Date value or @code NULL@ */
+const ipp_uchar_t * /* O - dateTime value or @code NULL@ */
ippGetDate(ipp_attribute_t *attr, /* I - IPP attribute */
int element) /* I - Value number (0-based) */
{
@@ -2288,7 +2288,7 @@ ippGetGroupTag(ipp_attribute_t *attr) /* I - IPP attribute */
* 'ippGetInteger()' - Get the integer/enum value for an attribute.
*
* The @code element@ parameter specifies which value to get from 0 to
- * @link ippGetCount(attr)@ - 1.
+ * @code ippGetCount(attr)@ - 1.
*
* @since CUPS 1.6/macOS 10.8@
*/
@@ -2341,7 +2341,7 @@ ippGetName(ipp_attribute_t *attr) /* I - IPP attribute */
* 'ippGetOctetString()' - Get an octetString value from an IPP attribute.
*
* The @code element@ parameter specifies which value to get from 0 to
- * @link ippGetCount(attr)@ - 1.
+ * @code ippGetCount(attr)@ - 1.
*
* @since CUPS 1.7/macOS 10.9@
*/
@@ -2404,7 +2404,7 @@ ippGetOperation(ipp_t *ipp) /* I - IPP request message */
* 'ippGetRange()' - Get a rangeOfInteger value from an attribute.
*
* The @code element@ parameter specifies which value to get from 0 to
- * @link ippGetCount(attr)@ - 1.
+ * @code ippGetCount(attr)@ - 1.
*
* @since CUPS 1.6/macOS 10.8@
*/
@@ -2466,7 +2466,7 @@ ippGetRequestId(ipp_t *ipp) /* I - IPP message */
* 'ippGetResolution()' - Get a resolution value for an attribute.
*
* The @code element@ parameter specifies which value to get from 0 to
- * @link ippGetCount(attr)@ - 1.
+ * @code ippGetCount(attr)@ - 1.
*
* @since CUPS 1.6/macOS 10.8@
*/
@@ -2560,7 +2560,7 @@ ippGetStatusCode(ipp_t *ipp) /* I - IPP response or event message */
* 'ippGetString()' - Get the string and optionally the language code for an attribute.
*
* The @code element@ parameter specifies which value to get from 0 to
- * @link ippGetCount(attr)@ - 1.
+ * @code ippGetCount(attr)@ - 1.
*
* @since CUPS 1.6/macOS 10.8@
*/
@@ -2625,7 +2625,7 @@ ippGetValueTag(ipp_attribute_t *attr) /* I - IPP attribute */
int /* O - Major version number or 0 on error */
ippGetVersion(ipp_t *ipp, /* I - IPP message */
- int *minor) /* O - Minor version number or @code NULL@ */
+ int *minor) /* O - Minor version number or @code NULL@ for don't care */
{
/*
* Range check input...
@@ -2722,9 +2722,9 @@ ippNew(void)
/*
* 'ippNewRequest()' - Allocate a new IPP request message.
*
- * The new request message is initialized with the attributes-charset and
- * attributes-natural-language attributes added. The
- * attributes-natural-language value is derived from the current locale.
+ * The new request message is initialized with the "attributes-charset" and
+ * "attributes-natural-language" attributes added. The
+ * "attributes-natural-language" value is derived from the current locale.
*
* @since CUPS 1.2/macOS 10.5@
*/
@@ -2786,11 +2786,11 @@ ippNewRequest(ipp_op_t op) /* I - Operation code */
/*
* 'ippNewResponse()' - Allocate a new IPP response message.
*
- * The new response message is initialized with the same version-number,
- * request-id, attributes-charset, and attributes-natural-language as the
- * provided request message. If the attributes-charset or
- * attributes-natural-language attributes are missing from the request,
- * "utf-8" and a value derived from the current locale are substituted,
+ * The new response message is initialized with the same "version-number",
+ * "request-id", "attributes-charset", and "attributes-natural-language" as the
+ * provided request message. If the "attributes-charset" or
+ * "attributes-natural-language" attributes are missing from the request,
+ * 'utf-8' and a value derived from the current locale are substituted,
* respectively.
*
* @since CUPS 1.7/macOS 10.9@
@@ -3706,7 +3706,7 @@ ippReadIO(void *src, /* I - Data source */
* The @code attr@ parameter may be modified as a result of setting the value.
*
* The @code element@ parameter specifies which value to set from 0 to
- * @link ippGetCount(attr)@.
+ * @code ippGetCount(attr)@.
*
* @since CUPS 1.6/macOS 10.8@
*/
@@ -3748,7 +3748,7 @@ ippSetBoolean(ipp_t *ipp, /* I - IPP message */
* The @code attr@ parameter may be modified as a result of setting the value.
*
* The @code element@ parameter specifies which value to set from 0 to
- * @link ippGetCount(attr)@.
+ * @code ippGetCount(attr)@.
*
* @since CUPS 1.6/macOS 10.8@
*/
@@ -3789,7 +3789,7 @@ ippSetCollection(
/*
- * 'ippSetDate()' - Set a date value in an attribute.
+ * 'ippSetDate()' - Set a dateTime value in an attribute.
*
* The @code ipp@ parameter refers to an IPP message previously created using
* the @link ippNew@, @link ippNewRequest@, or @link ippNewResponse@ functions.
@@ -3797,7 +3797,7 @@ ippSetCollection(
* The @code attr@ parameter may be modified as a result of setting the value.
*
* The @code element@ parameter specifies which value to set from 0 to
- * @link ippGetCount(attr)@.
+ * @code ippGetCount(attr)@.
*
* @since CUPS 1.6/macOS 10.8@
*/
@@ -3806,7 +3806,7 @@ int /* O - 1 on success, 0 on failure */
ippSetDate(ipp_t *ipp, /* I - IPP message */
ipp_attribute_t **attr, /* IO - IPP attribute */
int element, /* I - Value number (0-based) */
- const ipp_uchar_t *datevalue)/* I - Date value */
+ const ipp_uchar_t *datevalue)/* I - dateTime value */
{
_ipp_value_t *value; /* Current value */
@@ -3854,7 +3854,7 @@ ippSetGroupTag(
ipp_tag_t group_tag) /* I - Group tag */
{
/*
- * Range check input - group tag must be 0x01 to 0x0F, per RFC 2911...
+ * Range check input - group tag must be 0x01 to 0x0F, per RFC 8011...
*/
if (!ipp || !attr || !*attr ||
@@ -3881,7 +3881,7 @@ ippSetGroupTag(
* The @code attr@ parameter may be modified as a result of setting the value.
*
* The @code element@ parameter specifies which value to set from 0 to
- * @link ippGetCount(attr)@.
+ * @code ippGetCount(attr)@.
*
* @since CUPS 1.6/macOS 10.8@
*/
@@ -3966,7 +3966,7 @@ ippSetName(ipp_t *ipp, /* I - IPP message */
* The @code attr@ parameter may be modified as a result of setting the value.
*
* The @code element@ parameter specifies which value to set from 0 to
- * @link ippGetCount(attr)@.
+ * @code ippGetCount(attr)@.
*
* @since CUPS 1.7/macOS 10.9@
*/
@@ -4084,7 +4084,7 @@ ippSetOperation(ipp_t *ipp, /* I - IPP request message */
* The @code attr@ parameter may be modified as a result of setting the value.
*
* The @code element@ parameter specifies which value to set from 0 to
- * @link ippGetCount(attr)@.
+ * @code ippGetCount(attr)@.
*
* @since CUPS 1.6/macOS 10.8@
*/
@@ -4164,7 +4164,7 @@ ippSetRequestId(ipp_t *ipp, /* I - IPP message */
* The @code attr@ parameter may be modified as a result of setting the value.
*
* The @code element@ parameter specifies which value to set from 0 to
- * @link ippGetCount(attr)@.
+ * @code ippGetCount(attr)@.
*
* @since CUPS 1.6/macOS 10.8@
*/
@@ -4272,7 +4272,7 @@ ippSetStatusCode(ipp_t *ipp, /* I - IPP response or event message */
* The @code attr@ parameter may be modified as a result of setting the value.
*
* The @code element@ parameter specifies which value to set from 0 to
- * @link ippGetCount(attr)@.
+ * @code ippGetCount(attr)@.
*
* @since CUPS 1.6/macOS 10.8@
*/
@@ -4334,7 +4334,7 @@ ippSetString(ipp_t *ipp, /* I - IPP message */
* The @code attr@ parameter may be modified as a result of setting the value.
*
* The @code element@ parameter specifies which value to set from 0 to
- * @link ippGetCount(attr)@.
+ * @code ippGetCount(attr)@.
*
* The @code format@ parameter uses formatting characters compatible with the
* printf family of standard functions. Additional arguments follow it as
@@ -4372,7 +4372,7 @@ ippSetStringf(ipp_t *ipp, /* I - IPP message */
* The @code attr@ parameter may be modified as a result of setting the value.
*
* The @code element@ parameter specifies which value to set from 0 to
- * @link ippGetCount(attr)@.
+ * @code ippGetCount(attr)@.
*
* The @code format@ parameter uses formatting characters compatible with the
* printf family of standard functions. Additional arguments follow it as
@@ -4715,19 +4715,19 @@ ippSetVersion(ipp_t *ipp, /* I - IPP message */
/*
- * 'ippTimeToDate()' - Convert from UNIX time to RFC 1903 format.
+ * 'ippTimeToDate()' - Convert from time in seconds to RFC 2579 format.
*/
-const ipp_uchar_t * /* O - RFC-1903 date/time data */
-ippTimeToDate(time_t t) /* I - UNIX time value */
+const ipp_uchar_t * /* O - RFC-2579 date/time data */
+ippTimeToDate(time_t t) /* I - Time in seconds */
{
struct tm *unixdate; /* UNIX unixdate/time info */
ipp_uchar_t *date = _cupsGlobals()->ipp_date;
- /* RFC-1903 date/time data */
+ /* RFC-2579 date/time data */
/*
- * RFC-1903 date/time format is:
+ * RFC-2579 date/time format is:
*
* Byte(s) Description
* ------- -----------
@@ -4767,7 +4767,7 @@ ippTimeToDate(time_t t) /* I - UNIX time value */
*
* This function validates the contents of an attribute based on the name and
* value tag. 1 is returned if the attribute is valid, 0 otherwise. On
- * failure, cupsLastErrorString() is set to a human-readable message.
+ * failure, @link cupsLastErrorString@ is set to a human-readable message.
*
* @since CUPS 1.7/macOS 10.9@
*/
@@ -4823,7 +4823,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad attribute name - invalid character "
- "(RFC 2911 section 4.1.3)."), attr->name);
+ "(RFC 8011 section 5.1.4)."), attr->name);
return (0);
}
@@ -4831,7 +4831,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad attribute name - bad length %d "
- "(RFC 2911 section 4.1.3)."), attr->name,
+ "(RFC 8011 section 5.1.4)."), attr->name,
(int)(ptr - attr->name));
return (0);
}
@@ -4849,7 +4849,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad boolen value %d "
- "(RFC 2911 section 4.1.11)."), attr->name,
+ "(RFC 8011 section 5.1.21)."), attr->name,
attr->values[i].boolean);
return (0);
}
@@ -4863,7 +4863,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad enum value %d - out of range "
- "(RFC 2911 section 4.1.4)."), attr->name,
+ "(RFC 8011 section 5.1.5)."), attr->name,
attr->values[i].integer);
return (0);
}
@@ -4877,7 +4877,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad octetString value - bad length %d "
- "(RFC 2911 section 4.1.10)."), attr->name,
+ "(RFC 8011 section 5.1.20)."), attr->name,
attr->values[i].unknown.length);
return (0);
}
@@ -4893,7 +4893,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad dateTime month %u "
- "(RFC 2911 section 4.1.14)."), attr->name, date[2]);
+ "(RFC 8011 section 5.1.15)."), attr->name, date[2]);
return (0);
}
@@ -4901,7 +4901,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad dateTime day %u "
- "(RFC 2911 section 4.1.14)."), attr->name, date[3]);
+ "(RFC 8011 section 5.1.15)."), attr->name, date[3]);
return (0);
}
@@ -4909,7 +4909,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad dateTime hours %u "
- "(RFC 2911 section 4.1.14)."), attr->name, date[4]);
+ "(RFC 8011 section 5.1.15)."), attr->name, date[4]);
return (0);
}
@@ -4917,7 +4917,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad dateTime minutes %u "
- "(RFC 2911 section 4.1.14)."), attr->name, date[5]);
+ "(RFC 8011 section 5.1.15)."), attr->name, date[5]);
return (0);
}
@@ -4925,7 +4925,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad dateTime seconds %u "
- "(RFC 2911 section 4.1.14)."), attr->name, date[6]);
+ "(RFC 8011 section 5.1.15)."), attr->name, date[6]);
return (0);
}
@@ -4933,7 +4933,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad dateTime deciseconds %u "
- "(RFC 2911 section 4.1.14)."), attr->name, date[7]);
+ "(RFC 8011 section 5.1.15)."), attr->name, date[7]);
return (0);
}
@@ -4941,7 +4941,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad dateTime UTC sign '%c' "
- "(RFC 2911 section 4.1.14)."), attr->name, date[8]);
+ "(RFC 8011 section 5.1.15)."), attr->name, date[8]);
return (0);
}
@@ -4949,7 +4949,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad dateTime UTC hours %u "
- "(RFC 2911 section 4.1.14)."), attr->name, date[9]);
+ "(RFC 8011 section 5.1.15)."), attr->name, date[9]);
return (0);
}
@@ -4957,7 +4957,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad dateTime UTC minutes %u "
- "(RFC 2911 section 4.1.14)."), attr->name, date[10]);
+ "(RFC 8011 section 5.1.15)."), attr->name, date[10]);
return (0);
}
}
@@ -4971,7 +4971,7 @@ ippValidateAttribute(
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad resolution value %dx%d%s - cross "
"feed resolution must be positive "
- "(RFC 2911 section 4.1.15)."), attr->name,
+ "(RFC 8011 section 5.1.16)."), attr->name,
attr->values[i].resolution.xres,
attr->values[i].resolution.yres,
attr->values[i].resolution.units ==
@@ -4986,7 +4986,7 @@ ippValidateAttribute(
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad resolution value %dx%d%s - feed "
"resolution must be positive "
- "(RFC 2911 section 4.1.15)."), attr->name,
+ "(RFC 8011 section 5.1.16)."), attr->name,
attr->values[i].resolution.xres,
attr->values[i].resolution.yres,
attr->values[i].resolution.units ==
@@ -5001,7 +5001,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad resolution value %dx%d%s - bad "
- "units value (RFC 2911 section 4.1.15)."),
+ "units value (RFC 8011 section 5.1.16)."),
attr->name, attr->values[i].resolution.xres,
attr->values[i].resolution.yres,
attr->values[i].resolution.units ==
@@ -5020,7 +5020,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad rangeOfInteger value %d-%d - lower "
- "greater than upper (RFC 2911 section 4.1.13)."),
+ "greater than upper (RFC 8011 section 5.1.14)."),
attr->name, attr->values[i].range.lower,
attr->values[i].range.upper);
return (0);
@@ -5082,7 +5082,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad text value \"%s\" - bad UTF-8 "
- "sequence (RFC 2911 section 4.1.1)."), attr->name,
+ "sequence (RFC 8011 section 5.1.2)."), attr->name,
attr->values[i].string.text);
return (0);
}
@@ -5091,7 +5091,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad text value \"%s\" - bad length %d "
- "(RFC 2911 section 4.1.1)."), attr->name,
+ "(RFC 8011 section 5.1.2)."), attr->name,
attr->values[i].string.text,
(int)(ptr - attr->values[i].string.text));
return (0);
@@ -5140,7 +5140,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad name value \"%s\" - bad UTF-8 "
- "sequence (RFC 2911 section 4.1.2)."), attr->name,
+ "sequence (RFC 8011 section 5.1.3)."), attr->name,
attr->values[i].string.text);
return (0);
}
@@ -5149,7 +5149,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad name value \"%s\" - bad length %d "
- "(RFC 2911 section 4.1.2)."), attr->name,
+ "(RFC 8011 section 5.1.3)."), attr->name,
attr->values[i].string.text,
(int)(ptr - attr->values[i].string.text));
return (0);
@@ -5169,7 +5169,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad keyword value \"%s\" - invalid "
- "character (RFC 2911 section 4.1.3)."),
+ "character (RFC 8011 section 5.1.4)."),
attr->name, attr->values[i].string.text);
return (0);
}
@@ -5178,7 +5178,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad keyword value \"%s\" - bad "
- "length %d (RFC 2911 section 4.1.3)."),
+ "length %d (RFC 8011 section 5.1.4)."),
attr->name, attr->values[i].string.text,
(int)(ptr - attr->values[i].string.text));
return (0);
@@ -5200,7 +5200,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad URI value \"%s\" - %s "
- "(RFC 2911 section 4.1.5)."), attr->name,
+ "(RFC 8011 section 5.1.6)."), attr->name,
attr->values[i].string.text,
uri_status_strings[uri_status -
HTTP_URI_STATUS_OVERFLOW]);
@@ -5211,7 +5211,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad URI value \"%s\" - bad length %d "
- "(RFC 2911 section 4.1.5)."), attr->name,
+ "(RFC 8011 section 5.1.6)."), attr->name,
attr->values[i].string.text,
(int)strlen(attr->values[i].string.text));
}
@@ -5234,7 +5234,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad uriScheme value \"%s\" - bad "
- "characters (RFC 2911 section 4.1.6)."),
+ "characters (RFC 8011 section 5.1.7)."),
attr->name, attr->values[i].string.text);
return (0);
}
@@ -5243,7 +5243,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad uriScheme value \"%s\" - bad "
- "length %d (RFC 2911 section 4.1.6)."),
+ "length %d (RFC 8011 section 5.1.7)."),
attr->name, attr->values[i].string.text,
(int)(ptr - attr->values[i].string.text));
return (0);
@@ -5263,7 +5263,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad charset value \"%s\" - bad "
- "characters (RFC 2911 section 4.1.7)."),
+ "characters (RFC 8011 section 5.1.8)."),
attr->name, attr->values[i].string.text);
return (0);
}
@@ -5272,7 +5272,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad charset value \"%s\" - bad "
- "length %d (RFC 2911 section 4.1.7)."),
+ "length %d (RFC 8011 section 5.1.8)."),
attr->name, attr->values[i].string.text,
(int)(ptr - attr->values[i].string.text));
return (0);
@@ -5318,7 +5318,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad naturalLanguage value \"%s\" - bad "
- "characters (RFC 2911 section 4.1.8)."),
+ "characters (RFC 8011 section 5.1.9)."),
attr->name, attr->values[i].string.text);
regfree(&re);
return (0);
@@ -5328,7 +5328,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad naturalLanguage value \"%s\" - bad "
- "length %d (RFC 2911 section 4.1.8)."),
+ "length %d (RFC 8011 section 5.1.9)."),
attr->name, attr->values[i].string.text,
(int)strlen(attr->values[i].string.text));
regfree(&re);
@@ -5372,7 +5372,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad mimeMediaType value \"%s\" - bad "
- "characters (RFC 2911 section 4.1.9)."),
+ "characters (RFC 8011 section 5.1.10)."),
attr->name, attr->values[i].string.text);
regfree(&re);
return (0);
@@ -5382,7 +5382,7 @@ ippValidateAttribute(
{
ipp_set_error(IPP_STATUS_ERROR_BAD_REQUEST,
_("\"%s\": Bad mimeMediaType value \"%s\" - bad "
- "length %d (RFC 2911 section 4.1.9)."),
+ "length %d (RFC 8011 section 5.1.10)."),
attr->name, attr->values[i].string.text,
(int)strlen(attr->values[i].string.text));
regfree(&re);
@@ -5405,8 +5405,8 @@ ippValidateAttribute(
* 'ippValidateAttributes()' - Validate all attributes in an IPP message.
*
* This function validates the contents of the IPP message, including each
- * attribute. Like @link ippValidateAttribute@, cupsLastErrorString() is set
- * to a human-readable message on failure.
+ * attribute. Like @link ippValidateAttribute@, @link cupsLastErrorString@ is
+ * set to a human-readable message on failure.
*
* @since CUPS 1.7/macOS 10.9@
*/
diff --git a/cups/ipp.h b/cups/ipp.h
index 54d9d4b..2a4f546 100644
--- a/cups/ipp.h
+++ b/cups/ipp.h
@@ -1,7 +1,7 @@
/*
* Internet Printing Protocol definitions for CUPS.
*
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2017 by Apple Inc.
* Copyright 1997-2006 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -77,7 +77,7 @@ extern "C" {
* Types and structures...
*/
-typedef enum ipp_dstate_e /**** Document states ****/
+typedef enum ipp_dstate_e /**** Document states @exclude all@ ****/
{
IPP_DOCUMENT_PENDING = 3, /* Document is pending */
IPP_DOCUMENT_PROCESSING = 5, /* Document is processing */
@@ -94,10 +94,10 @@ typedef enum ipp_dstate_e /**** Document states ****/
# endif /* !_CUPS_NO_DEPRECATED */
} ipp_dstate_t;
-typedef enum ipp_finishings_e /**** Finishings ****/
+typedef enum ipp_finishings_e /**** Finishings values ****/
{
IPP_FINISHINGS_NONE = 3, /* No finishing */
- IPP_FINISHINGS_STAPLE, /* Staple (any location) */
+ IPP_FINISHINGS_STAPLE, /* Staple (any location/method) */
IPP_FINISHINGS_PUNCH, /* Punch (any location/count) */
IPP_FINISHINGS_COVER, /* Add cover */
IPP_FINISHINGS_BIND, /* Bind */
@@ -169,38 +169,38 @@ typedef enum ipp_finishings_e /**** Finishings ****/
/* CUPS extensions for finishings (pre-standard versions of values above) */
IPP_FINISHINGS_CUPS_PUNCH_TOP_LEFT = 0x40000046,
- /* Punch 1 hole top left */
- IPP_FINISHINGS_CUPS_PUNCH_BOTTOM_LEFT,/* Punch 1 hole bottom left */
- IPP_FINISHINGS_CUPS_PUNCH_TOP_RIGHT, /* Punch 1 hole top right */
+ /* Punch 1 hole top left @exclude all@ */
+ IPP_FINISHINGS_CUPS_PUNCH_BOTTOM_LEFT,/* Punch 1 hole bottom left @exclude all@ */
+ IPP_FINISHINGS_CUPS_PUNCH_TOP_RIGHT, /* Punch 1 hole top right @exclude all@ */
IPP_FINISHINGS_CUPS_PUNCH_BOTTOM_RIGHT,
- /* Punch 1 hole bottom right */
- IPP_FINISHINGS_CUPS_PUNCH_DUAL_LEFT, /* Punch 2 holes left side */
- IPP_FINISHINGS_CUPS_PUNCH_DUAL_TOP, /* Punch 2 holes top edge */
- IPP_FINISHINGS_CUPS_PUNCH_DUAL_RIGHT, /* Punch 2 holes right side */
- IPP_FINISHINGS_CUPS_PUNCH_DUAL_BOTTOM,/* Punch 2 holes bottom edge */
- IPP_FINISHINGS_CUPS_PUNCH_TRIPLE_LEFT,/* Punch 3 holes left side */
- IPP_FINISHINGS_CUPS_PUNCH_TRIPLE_TOP, /* Punch 3 holes top edge */
+ /* Punch 1 hole bottom right @exclude all@ */
+ IPP_FINISHINGS_CUPS_PUNCH_DUAL_LEFT, /* Punch 2 holes left side @exclude all@ */
+ IPP_FINISHINGS_CUPS_PUNCH_DUAL_TOP, /* Punch 2 holes top edge @exclude all@ */
+ IPP_FINISHINGS_CUPS_PUNCH_DUAL_RIGHT, /* Punch 2 holes right side @exclude all@ */
+ IPP_FINISHINGS_CUPS_PUNCH_DUAL_BOTTOM,/* Punch 2 holes bottom edge @exclude all@ */
+ IPP_FINISHINGS_CUPS_PUNCH_TRIPLE_LEFT,/* Punch 3 holes left side @exclude all@ */
+ IPP_FINISHINGS_CUPS_PUNCH_TRIPLE_TOP, /* Punch 3 holes top edge @exclude all@ */
IPP_FINISHINGS_CUPS_PUNCH_TRIPLE_RIGHT,
- /* Punch 3 holes right side */
+ /* Punch 3 holes right side @exclude all@ */
IPP_FINISHINGS_CUPS_PUNCH_TRIPLE_BOTTOM,
- /* Punch 3 holes bottom edge */
- IPP_FINISHINGS_CUPS_PUNCH_QUAD_LEFT, /* Punch 4 holes left side */
- IPP_FINISHINGS_CUPS_PUNCH_QUAD_TOP, /* Punch 4 holes top edge */
- IPP_FINISHINGS_CUPS_PUNCH_QUAD_RIGHT, /* Punch 4 holes right side */
- IPP_FINISHINGS_CUPS_PUNCH_QUAD_BOTTOM,/* Punch 4 holes bottom edge */
+ /* Punch 3 holes bottom edge @exclude all@ */
+ IPP_FINISHINGS_CUPS_PUNCH_QUAD_LEFT, /* Punch 4 holes left side @exclude all@ */
+ IPP_FINISHINGS_CUPS_PUNCH_QUAD_TOP, /* Punch 4 holes top edge @exclude all@ */
+ IPP_FINISHINGS_CUPS_PUNCH_QUAD_RIGHT, /* Punch 4 holes right side @exclude all@ */
+ IPP_FINISHINGS_CUPS_PUNCH_QUAD_BOTTOM,/* Punch 4 holes bottom edge @exclude all@ */
IPP_FINISHINGS_CUPS_FOLD_ACCORDIAN = 0x4000005A,
- /* Accordian-fold the paper vertically into four sections */
- IPP_FINISHINGS_CUPS_FOLD_DOUBLE_GATE, /* Fold the top and bottom quarters of the paper towards the midline, then fold in half vertically */
- IPP_FINISHINGS_CUPS_FOLD_GATE, /* Fold the top and bottom quarters of the paper towards the midline */
- IPP_FINISHINGS_CUPS_FOLD_HALF, /* Fold the paper in half vertically */
- IPP_FINISHINGS_CUPS_FOLD_HALF_Z, /* Fold the paper in half horizontally, then Z-fold the paper vertically */
- IPP_FINISHINGS_CUPS_FOLD_LEFT_GATE, /* Fold the top quarter of the paper towards the midline */
- IPP_FINISHINGS_CUPS_FOLD_LETTER, /* Fold the paper into three sections vertically; sometimes also known as a C fold*/
- IPP_FINISHINGS_CUPS_FOLD_PARALLEL, /* Fold the paper in half vertically two times, yielding four sections */
- IPP_FINISHINGS_CUPS_FOLD_POSTER, /* Fold the paper in half horizontally and vertically; sometimes also called a cross fold */
- IPP_FINISHINGS_CUPS_FOLD_RIGHT_GATE, /* Fold the bottom quarter of the paper towards the midline */
- IPP_FINISHINGS_CUPS_FOLD_Z /* Fold the paper vertically into three sections, forming a Z */
+ /* Accordian-fold the paper vertically into four sections @exclude all@ */
+ IPP_FINISHINGS_CUPS_FOLD_DOUBLE_GATE, /* Fold the top and bottom quarters of the paper towards the midline, then fold in half vertically @exclude all@ */
+ IPP_FINISHINGS_CUPS_FOLD_GATE, /* Fold the top and bottom quarters of the paper towards the midline @exclude all@ */
+ IPP_FINISHINGS_CUPS_FOLD_HALF, /* Fold the paper in half vertically @exclude all@ */
+ IPP_FINISHINGS_CUPS_FOLD_HALF_Z, /* Fold the paper in half horizontally, then Z-fold the paper vertically @exclude all@ */
+ IPP_FINISHINGS_CUPS_FOLD_LEFT_GATE, /* Fold the top quarter of the paper towards the midline @exclude all@ */
+ IPP_FINISHINGS_CUPS_FOLD_LETTER, /* Fold the paper into three sections vertically; sometimes also known as a C fold @exclude all@ */
+ IPP_FINISHINGS_CUPS_FOLD_PARALLEL, /* Fold the paper in half vertically two times, yielding four sections @exclude all@ */
+ IPP_FINISHINGS_CUPS_FOLD_POSTER, /* Fold the paper in half horizontally and vertically; sometimes also called a cross fold @exclude all@ */
+ IPP_FINISHINGS_CUPS_FOLD_RIGHT_GATE, /* Fold the bottom quarter of the paper towards the midline @exclude all@ */
+ IPP_FINISHINGS_CUPS_FOLD_Z /* Fold the paper vertically into three sections, forming a Z @exclude all@ */
} ipp_finishings_t;
# ifndef _CUPS_NO_DEPRECATED
# define IPP_FINISHINGS_JOB_OFFSET IPP_FINISHINGS_JOG_OFFSET
@@ -208,7 +208,7 @@ typedef enum ipp_finishings_e /**** Finishings ****/
typedef enum ipp_finishings_e ipp_finish_t;
# endif /* !_CUPS_NO_DEPRECATED */
-typedef enum ipp_jcollate_e /**** Job collation types ****/
+typedef enum ipp_jcollate_e /**** Job collation types @deprecated@ @exclude all@ ****/
{
IPP_JCOLLATE_UNCOLLATED_SHEETS = 3,
IPP_JCOLLATE_COLLATED_DOCUMENTS,
@@ -248,98 +248,98 @@ 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 */
- 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 */
- IPP_OP_CANCEL_JOB, /* Cancel a job */
- IPP_OP_GET_JOB_ATTRIBUTES, /* Get job attributes */
- IPP_OP_GET_JOBS, /* Get a list of jobs */
- IPP_OP_GET_PRINTER_ATTRIBUTES, /* Get printer attributes */
- IPP_OP_HOLD_JOB, /* Hold a job for printing */
- IPP_OP_RELEASE_JOB, /* Release a job for printing */
- IPP_OP_RESTART_JOB, /* Reprint a job */
- 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 */
- 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/macOS 10.5@ */
- IPP_OP_CREATE_JOB_SUBSCRIPTIONS, /* Create one of more job subscriptions @since CUPS 1.2/macOS 10.5@ */
- IPP_OP_GET_SUBSCRIPTION_ATTRIBUTES, /* Get subscription attributes @since CUPS 1.2/macOS 10.5@ */
- IPP_OP_GET_SUBSCRIPTIONS, /* Get list of subscriptions @since CUPS 1.2/macOS 10.5@ */
- IPP_OP_RENEW_SUBSCRIPTION, /* Renew a printer subscription @since CUPS 1.2/macOS 10.5@ */
- IPP_OP_CANCEL_SUBSCRIPTION, /* Cancel a subscription @since CUPS 1.2/macOS 10.5@ */
- IPP_OP_GET_NOTIFICATIONS, /* Get notification events @since CUPS 1.2/macOS 10.5@ */
- IPP_OP_SEND_NOTIFICATIONS, /* Send notification events @private@ */
- IPP_OP_GET_RESOURCE_ATTRIBUTES, /* Get resource attributes @private@ */
- IPP_OP_GET_RESOURCE_DATA, /* Get resource data @private@ */
- IPP_OP_GET_RESOURCES, /* Get list of resources @private@ */
- IPP_OP_GET_PRINT_SUPPORT_FILES, /* Get printer support files @private@ */
- IPP_OP_ENABLE_PRINTER, /* Start a printer */
- IPP_OP_DISABLE_PRINTER, /* Stop a printer */
+ IPP_OP_PRINT_JOB = 0x0002, /* Print-Job: Print a single file */
+ IPP_OP_PRINT_URI, /* Print-URI: Print a single URL @exclude all@ */
+ IPP_OP_VALIDATE_JOB, /* Validate-Job: Validate job values prior to submission */
+ IPP_OP_CREATE_JOB, /* Create-Job: Create an empty print job */
+ IPP_OP_SEND_DOCUMENT, /* Send-Document: Add a file to a job */
+ IPP_OP_SEND_URI, /* Send-URI: Add a URL to a job @exclude all@ */
+ IPP_OP_CANCEL_JOB, /* Cancel-Job: Cancel a job */
+ IPP_OP_GET_JOB_ATTRIBUTES, /* Get-Job-Attribute: Get information about a job */
+ IPP_OP_GET_JOBS, /* Get-Jobs: Get a list of jobs */
+ IPP_OP_GET_PRINTER_ATTRIBUTES, /* Get-Printer-Attributes: Get information about a printer */
+ IPP_OP_HOLD_JOB, /* Hold-Job: Hold a job for printing */
+ IPP_OP_RELEASE_JOB, /* Release-Job: Release a job for printing */
+ IPP_OP_RESTART_JOB, /* Restart-Job: Reprint a job @deprecated@ */
+ IPP_OP_PAUSE_PRINTER = 0x0010, /* Pause-Printer: Stop a printer */
+ IPP_OP_RESUME_PRINTER, /* Resume-Printer: Start a printer */
+ IPP_OP_PURGE_JOBS, /* Purge-Jobs: Delete all jobs @deprecated@ @exclude all@ */
+ IPP_OP_SET_PRINTER_ATTRIBUTES, /* Set-Printer-Attributes: Set printer values */
+ IPP_OP_SET_JOB_ATTRIBUTES, /* Set-Job-Attributes: Set job values */
+ IPP_OP_GET_PRINTER_SUPPORTED_VALUES, /* Get-Printer-Supported-Values: Get supported values */
+ IPP_OP_CREATE_PRINTER_SUBSCRIPTIONS, /* Create-Printer-Subscriptions: Create one or more printer subscriptions @since CUPS 1.2/macOS 10.5@ */
+ IPP_OP_CREATE_JOB_SUBSCRIPTIONS, /* Create-Job-Subscriptions: Create one of more job subscriptions @since CUPS 1.2/macOS 10.5@ */
+ IPP_OP_GET_SUBSCRIPTION_ATTRIBUTES, /* Get-Subscription-Attributes: Get subscription information @since CUPS 1.2/macOS 10.5@ */
+ IPP_OP_GET_SUBSCRIPTIONS, /* Get-Subscriptions: Get list of subscriptions @since CUPS 1.2/macOS 10.5@ */
+ IPP_OP_RENEW_SUBSCRIPTION, /* Renew-Subscription: Renew a printer subscription @since CUPS 1.2/macOS 10.5@ */
+ IPP_OP_CANCEL_SUBSCRIPTION, /* Cancel-Subscription: Cancel a subscription @since CUPS 1.2/macOS 10.5@ */
+ IPP_OP_GET_NOTIFICATIONS, /* Get-Notifications: Get notification events @since CUPS 1.2/macOS 10.5@ */
+ IPP_OP_SEND_NOTIFICATIONS, /* Send-Notifications: Send notification events @private@ */
+ IPP_OP_GET_RESOURCE_ATTRIBUTES, /* Get-Resource-Attributes: Get resource information @private@ */
+ IPP_OP_GET_RESOURCE_DATA, /* Get-Resource-Data: Get resource data @private@ @deprecated@ */
+ IPP_OP_GET_RESOURCES, /* Get-Resources: Get list of resources @private@ */
+ IPP_OP_GET_PRINT_SUPPORT_FILES, /* Get-Printer-Support-Files: Get printer support files @private@ */
+ IPP_OP_ENABLE_PRINTER, /* Enable-Printer: Accept new jobs for a printer */
+ IPP_OP_DISABLE_PRINTER, /* Disable-Printer: Reject new jobs for a printer */
IPP_OP_PAUSE_PRINTER_AFTER_CURRENT_JOB,
- /* 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 */
- IPP_OP_VALIDATE_DOCUMENT, /* Validate-Document */
- IPP_OP_ADD_DOCUMENT_IMAGES, /* Add-Document-Images */
- 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 */
+ /* Pause-Printer-After-Current-Job: Stop printer after the current job */
+ IPP_OP_HOLD_NEW_JOBS, /* Hold-New-Jobs: Hold new jobs */
+ IPP_OP_RELEASE_HELD_NEW_JOBS, /* Release-Held-New-Jobs: Release new jobs that were previously held */
+ IPP_OP_DEACTIVATE_PRINTER, /* Deactivate-Printer: Stop a printer and do not accept jobs @deprecated@ @exclude all@ */
+ IPP_OP_ACTIVATE_PRINTER, /* Activate-Printer: Start a printer and accept jobs @deprecated@ @exclude all@ */
+ IPP_OP_RESTART_PRINTER, /* Restart-Printer: Restart a printer @exclude all@ */
+ IPP_OP_SHUTDOWN_PRINTER, /* Shutdown-Printer: Turn a printer off @exclude all@ */
+ IPP_OP_STARTUP_PRINTER, /* Startup-Printer: Turn a printer on @exclude all@ */
+ IPP_OP_REPROCESS_JOB, /* Reprocess-Job: Reprint a job @deprecated@ @exclude all@*/
+ IPP_OP_CANCEL_CURRENT_JOB, /* Cancel-Current-Job: Cancel the current job */
+ IPP_OP_SUSPEND_CURRENT_JOB, /* Suspend-Current-Job: Suspend the current job */
+ IPP_OP_RESUME_JOB, /* Resume-Job: Resume the current job */
+ IPP_OP_PROMOTE_JOB, /* Promote-Job: Promote a job to print sooner */
+ IPP_OP_SCHEDULE_JOB_AFTER, /* Schedule-Job-After: Schedule a job to print after another */
+ IPP_OP_CANCEL_DOCUMENT = 0x0033, /* Cancel-Document: Cancel a document @exclude all@ */
+ IPP_OP_GET_DOCUMENT_ATTRIBUTES, /* Get-Document-Attributes: Get document information @exclude all@ */
+ IPP_OP_GET_DOCUMENTS, /* Get-Documents: Get a list of documents in a job @exclude all@ */
+ IPP_OP_DELETE_DOCUMENT, /* Delete-Document: Delete a document @deprecated@ @exclude all@ */
+ IPP_OP_SET_DOCUMENT_ATTRIBUTES, /* Set-Document-Attributes: Set document values @exclude all@ */
+ IPP_OP_CANCEL_JOBS, /* Cancel-Jobs: Cancel all jobs (administrative) */
+ IPP_OP_CANCEL_MY_JOBS, /* Cancel-My-Jobs: Cancel a user's jobs */
+ IPP_OP_RESUBMIT_JOB, /* Resubmit-Job: Copy and reprint a job @exclude all@ */
+ IPP_OP_CLOSE_JOB, /* Close-Job: Close a job and start printing */
+ IPP_OP_IDENTIFY_PRINTER, /* Identify-Printer: Make the printer beep, flash, or display a message for identification */
+ IPP_OP_VALIDATE_DOCUMENT, /* Validate-Document: Validate document values prior to submission @exclude all@ */
+ IPP_OP_ADD_DOCUMENT_IMAGES, /* Add-Document-Images: Add image(s) from the specified scanner source @exclude all@ */
+ IPP_OP_ACKNOWLEDGE_DOCUMENT, /* Acknowledge-Document: Acknowledge processing of a document @exclude all@ */
+ IPP_OP_ACKNOWLEDGE_IDENTIFY_PRINTER, /* Acknowledge-Identify-Printer: Acknowledge action on an Identify-Printer request @exclude all@ */
+ IPP_OP_ACKNOWLEDGE_JOB, /* Acknowledge-Job: Acknowledge processing of a job @exclude all@ */
+ IPP_OP_FETCH_DOCUMENT, /* Fetch-Document: Fetch a document for processing @exclude all@ */
+ IPP_OP_FETCH_JOB, /* Fetch-Job: Fetch a job for processing @exclude all@ */
+ IPP_OP_GET_OUTPUT_DEVICE_ATTRIBUTES, /* Get-Output-Device-Attributes: Get printer information for a specific output device @exclude all@ */
+ IPP_OP_UPDATE_ACTIVE_JOBS, /* Update-Active-Jobs: Update the list of active jobs that a proxy has processed @exclude all@ */
+ IPP_OP_DEREGISTER_OUTPUT_DEVICE, /* Deregister-Output-Device: Remove an output device @exclude all@ */
+ IPP_OP_UPDATE_DOCUMENT_STATUS, /* Update-Document-Status: Update document values @exclude all@ */
+ IPP_OP_UPDATE_JOB_STATUS, /* Update-Job-Status: Update job values @exclude all@ */
IPP_OP_UPDATE_OUTPUT_DEVICE_ATTRIBUTES,
- /* Update-Output-Device-Attributes */
- IPP_OP_GET_NEXT_DOCUMENT_DATA, /* Get-Next-Document-Data */
+ /* Update-Output-Device-Attributes: Update output device values @exclude all@ */
+ IPP_OP_GET_NEXT_DOCUMENT_DATA, /* Get-Next-Document-Data: Scan more document data @exclude all@ */
IPP_OP_PRIVATE = 0x4000, /* Reserved @private@ */
- IPP_OP_CUPS_GET_DEFAULT, /* Get the default printer */
- IPP_OP_CUPS_GET_PRINTERS, /* Get a list of printers and/or classes */
- IPP_OP_CUPS_ADD_MODIFY_PRINTER, /* Add or modify a printer */
- IPP_OP_CUPS_DELETE_PRINTER, /* Delete a printer */
- IPP_OP_CUPS_GET_CLASSES, /* Get a list of classes @deprecated@ */
- IPP_OP_CUPS_ADD_MODIFY_CLASS, /* Add or modify a class */
- IPP_OP_CUPS_DELETE_CLASS, /* Delete a class */
- IPP_OP_CUPS_ACCEPT_JOBS, /* Accept new jobs on a printer */
- IPP_OP_CUPS_REJECT_JOBS, /* Reject new jobs on a printer */
- IPP_OP_CUPS_SET_DEFAULT, /* Set the default printer */
- IPP_OP_CUPS_GET_DEVICES, /* Get a list of supported devices @deprecated@ */
- IPP_OP_CUPS_GET_PPDS, /* Get a list of supported drivers @deprecated@ */
- IPP_OP_CUPS_MOVE_JOB, /* Move a job to a different printer */
- IPP_OP_CUPS_AUTHENTICATE_JOB, /* Authenticate a job @since CUPS 1.2/macOS 10.5@ */
- IPP_OP_CUPS_GET_PPD, /* Get a PPD file @deprecated@ */
- IPP_OP_CUPS_GET_DOCUMENT = 0x4027, /* Get a document file @since CUPS 1.4/macOS 10.6@ */
- IPP_OP_CUPS_CREATE_LOCAL_PRINTER /* Create a local (temporary) printer @since CUPS 2.2 */
+ IPP_OP_CUPS_GET_DEFAULT, /* CUPS-Get-Default: Get the default printer */
+ IPP_OP_CUPS_GET_PRINTERS, /* CUPS-Get-Printers: Get a list of printers and/or classes */
+ IPP_OP_CUPS_ADD_MODIFY_PRINTER, /* CUPS-Add-Modify-Printer: Add or modify a printer */
+ IPP_OP_CUPS_DELETE_PRINTER, /* CUPS-Delete-Printer: Delete a printer */
+ IPP_OP_CUPS_GET_CLASSES, /* CUPS-Get-Classes: Get a list of classes @deprecated@ @exclude all@ */
+ IPP_OP_CUPS_ADD_MODIFY_CLASS, /* CUPS-Add-Modify-Class: Add or modify a class */
+ IPP_OP_CUPS_DELETE_CLASS, /* CUPS-Delete-Class: Delete a class */
+ IPP_OP_CUPS_ACCEPT_JOBS, /* CUPS-Accept-Jobs: Accept new jobs on a printer @exclude all@ */
+ IPP_OP_CUPS_REJECT_JOBS, /* CUPS-Reject-Jobs: Reject new jobs on a printer @exclude all@ */
+ IPP_OP_CUPS_SET_DEFAULT, /* CUPS-Set-Default: Set the default printer */
+ IPP_OP_CUPS_GET_DEVICES, /* CUPS-Get-Devices: Get a list of supported devices @deprecated@ */
+ IPP_OP_CUPS_GET_PPDS, /* CUPS-Get-PPDs: Get a list of supported drivers @deprecated@ */
+ IPP_OP_CUPS_MOVE_JOB, /* CUPS-Move-Job: Move a job to a different printer */
+ IPP_OP_CUPS_AUTHENTICATE_JOB, /* CUPS-Authenticate-Job: Authenticate a job @since CUPS 1.2/macOS 10.5@ */
+ IPP_OP_CUPS_GET_PPD, /* CUPS-Get-PPD: Get a PPD file @deprecated@ */
+ IPP_OP_CUPS_GET_DOCUMENT = 0x4027, /* CUPS-Get-Document: Get a document file @since CUPS 1.4/macOS 10.6@ */
+ IPP_OP_CUPS_CREATE_LOCAL_PRINTER /* CUPS-Create-Local-Printer: Create a local (temporary) printer @since CUPS 2.2@ */
# ifndef _CUPS_NO_DEPRECATED
# define IPP_PRINT_JOB IPP_OP_PRINT_JOB
@@ -364,7 +364,7 @@ typedef enum ipp_op_e /**** IPP operations ****/
# define IPP_CREATE_PRINTER_SUBSCRIPTION IPP_OP_CREATE_PRINTER_SUBSCRIPTIONS
# define IPP_CREATE_JOB_SUBSCRIPTION IPP_OP_CREATE_JOB_SUBSCRIPTIONS
# define IPP_OP_CREATE_PRINTER_SUBSCRIPTION IPP_OP_CREATE_PRINTER_SUBSCRIPTIONS
-# define IPP_OP_CREATE_JOB_SUBSCRIPTION IPP_OP_CREATE_JOB_SUBSCRIPTIONS
+# define IPP_OP_CREATE_JOB_SUBSCRIPTION IPP_OP_CREATE_JOB_SUBSCRIPTIONS
# define IPP_GET_SUBSCRIPTION_ATTRIBUTES IPP_OP_GET_SUBSCRIPTION_ATTRIBUTES
# define IPP_GET_SUBSCRIPTIONS IPP_OP_GET_SUBSCRIPTIONS
# define IPP_RENEW_SUBSCRIPTION IPP_OP_RENEW_SUBSCRIPTION
@@ -442,7 +442,7 @@ typedef enum ipp_orient_e /**** Orientation values ****/
# endif /* !_CUPS_NO_DEPRECATED */
} ipp_orient_t;
-typedef enum ipp_pstate_e /**** Printer states ****/
+typedef enum ipp_pstate_e /**** Printer state values ****/
{
IPP_PSTATE_IDLE = 3, /* Printer is idle */
IPP_PSTATE_PROCESSING, /* Printer is working */
@@ -455,7 +455,7 @@ typedef enum ipp_pstate_e /**** Printer states ****/
# endif /* _CUPS_NO_DEPRECATED */
} ipp_pstate_t;
-typedef enum ipp_quality_e /**** Qualities ****/
+typedef enum ipp_quality_e /**** Print quality values ****/
{
IPP_QUALITY_DRAFT = 3, /* Draft quality */
IPP_QUALITY_NORMAL, /* Normal quality */
@@ -468,7 +468,7 @@ typedef enum ipp_res_e /**** Resolution units ****/
IPP_RES_PER_CM /* Pixels per centimeter */
} ipp_res_t;
-typedef enum ipp_state_e /**** IPP states ****/
+typedef enum ipp_state_e /**** ipp_t state values ****/
{
IPP_STATE_ERROR = -1, /* An error occurred */
IPP_STATE_IDLE, /* Nothing is happening/request completed */
@@ -485,7 +485,7 @@ typedef enum ipp_state_e /**** IPP states ****/
# endif /* !_CUPS_NO_DEPRECATED */
} ipp_state_t;
-typedef enum ipp_status_e /**** IPP status codes ****/
+typedef enum ipp_status_e /**** IPP status code values ****/
{
IPP_STATUS_CUPS_INVALID = -1, /* Invalid status name for @link ippErrorValue@ */
IPP_STATUS_OK = 0x0000, /* successful-ok */
@@ -498,7 +498,7 @@ typedef enum ipp_status_e /**** IPP status codes ****/
IPP_STATUS_OK_EVENTS_COMPLETE, /* successful-ok-events-complete */
IPP_STATUS_REDIRECTION_OTHER_SITE = 0x0200,
/* redirection-other-site @private@ */
- IPP_STATUS_CUPS_SEE_OTHER = 0x0280, /* cups-see-other */
+ IPP_STATUS_CUPS_SEE_OTHER = 0x0280, /* cups-see-other @private@ */
IPP_STATUS_ERROR_BAD_REQUEST = 0x0400,/* client-error-bad-request */
IPP_STATUS_ERROR_FORBIDDEN, /* client-error-forbidden */
IPP_STATUS_ERROR_NOT_AUTHENTICATED, /* client-error-not-authenticated */
@@ -574,7 +574,7 @@ typedef enum ipp_status_e /**** IPP status codes ****/
IPP_STATUS_ERROR_CUPS_AUTHENTICATION_CANCELED = 0x1000,
/* cups-authentication-canceled - Authentication canceled by user @since CUPS 1.5/macOS 10.7@ */
IPP_STATUS_ERROR_CUPS_PKI, /* cups-pki-error - Error negotiating a secure connection @since CUPS 1.5/macOS 10.7@ */
- IPP_STATUS_ERROR_CUPS_UPGRADE_REQUIRED/* cups-upgrade-required - TLS upgrade required */
+ IPP_STATUS_ERROR_CUPS_UPGRADE_REQUIRED/* cups-upgrade-required - TLS upgrade required @since CUPS 1.5/macOS 10.7@ */
# ifndef _CUPS_NO_DEPRECATED
# define IPP_OK IPP_STATUS_OK
@@ -636,7 +636,7 @@ typedef enum ipp_status_e /**** IPP status codes ****/
# endif /* _CUPS_NO_DEPRECATED */
} ipp_status_t;
-typedef enum ipp_tag_e /**** Format tags for attributes ****/
+typedef enum ipp_tag_e /**** Value and group tag values for attributes ****/
{
IPP_TAG_CUPS_INVALID = -1, /* Invalid tag name for @link ippTagValue@ */
IPP_TAG_ZERO = 0x00, /* Zero tag - used for separators */
@@ -648,7 +648,7 @@ typedef enum ipp_tag_e /**** Format tags for attributes ****/
IPP_TAG_SUBSCRIPTION, /* Subscription group */
IPP_TAG_EVENT_NOTIFICATION, /* Event group */
IPP_TAG_RESOURCE, /* Resource group @private@ */
- IPP_TAG_DOCUMENT, /* Document group */
+ IPP_TAG_DOCUMENT, /* Document group @exclude all@ */
IPP_TAG_UNSUPPORTED_VALUE = 0x10, /* Unsupported value */
IPP_TAG_DEFAULT, /* Default value */
IPP_TAG_UNKNOWN, /* Unknown value */
@@ -663,10 +663,10 @@ typedef enum ipp_tag_e /**** Format tags for attributes ****/
IPP_TAG_DATE, /* Date/time value */
IPP_TAG_RESOLUTION, /* Resolution value */
IPP_TAG_RANGE, /* Range value */
- IPP_TAG_BEGIN_COLLECTION, /* Beginning of collection value */
+ IPP_TAG_BEGIN_COLLECTION, /* Beginning of collection value @exclude all@ */
IPP_TAG_TEXTLANG, /* Text-with-language value */
IPP_TAG_NAMELANG, /* Name-with-language value */
- IPP_TAG_END_COLLECTION, /* End of collection value */
+ IPP_TAG_END_COLLECTION, /* End of collection value @exclude all@ */
IPP_TAG_TEXT = 0x41, /* Text value */
IPP_TAG_NAME, /* Name value */
IPP_TAG_RESERVED_STRING, /* Reserved for future string value @private@ */
@@ -676,8 +676,8 @@ typedef enum ipp_tag_e /**** Format tags for attributes ****/
IPP_TAG_CHARSET, /* Character set value */
IPP_TAG_LANGUAGE, /* Language value */
IPP_TAG_MIMETYPE, /* MIME media type value */
- IPP_TAG_MEMBERNAME, /* Collection member name value */
- IPP_TAG_EXTENSION = 0x7f, /* Extension point for 32-bit tags */
+ IPP_TAG_MEMBERNAME, /* Collection member name value @exclude all@ */
+ IPP_TAG_EXTENSION = 0x7f, /* Extension point for 32-bit tags @exclude all@ */
IPP_TAG_CUPS_MASK = 0x7fffffff, /* Mask for copied attribute values @private@ */
/* The following expression is used to avoid compiler warnings with +/-0x80000000 */
IPP_TAG_CUPS_CONST = -0x7fffffff-1 /* Bitflag for copied/const attribute values @private@ */
@@ -688,17 +688,18 @@ typedef enum ipp_tag_e /**** Format tags for attributes ****/
# endif /* !_CUPS_NO_DEPRECATED */
} ipp_tag_t;
-typedef unsigned char ipp_uchar_t; /**** Unsigned 8-bit integer/character ****/
+typedef unsigned char ipp_uchar_t; /**** Unsigned 8-bit integer/character @exclude all@ ****/
typedef struct _ipp_s ipp_t; /**** IPP request/response data ****/
typedef struct _ipp_attribute_s ipp_attribute_t;
/**** IPP attribute ****/
/**** New in CUPS 1.2/macOS 10.5 ****/
typedef ssize_t (*ipp_iocb_t)(void *context, ipp_uchar_t *buffer, size_t bytes);
- /**** IPP IO Callback Function @since CUPS 1.2/macOS 10.5@ ****/
+ /**** ippReadIO/ippWriteIO callback function @since CUPS 1.2/macOS 10.5@ ****/
/**** New in CUPS 1.6/macOS 10.8 ****/
typedef int (*ipp_copycb_t)(void *context, ipp_t *dst, ipp_attribute_t *attr);
+ /**** ippCopyAttributes callback function @since CUPS 1.6/macOS 10.8 ****/
/*
@@ -805,7 +806,7 @@ typedef union _ipp_value_u /**** Attribute Value ****/
} _ipp_value_t;
typedef _ipp_value_t ipp_value_t; /**** Convenience typedef that will be removed @private@ ****/
-struct _ipp_attribute_s /**** Attribute ****/
+struct _ipp_attribute_s /**** IPP attribute ****/
{
ipp_attribute_t *next; /* Next attribute in list */
ipp_tag_t group_tag, /* Job/Printer/Operation group tag */
diff --git a/cups/language.h b/cups/language.h
index 0a3da77..c96cbfe 100644
--- a/cups/language.h
+++ b/cups/language.h
@@ -32,7 +32,7 @@ extern "C" {
* Types...
*/
-typedef enum cups_encoding_e /**** Language Encodings ****/
+typedef enum cups_encoding_e /**** Language Encodings @exclude all@ ****/
{
CUPS_AUTO_ENCODING = -1, /* Auto-detect the encoding @private@ */
CUPS_US_ASCII, /* US ASCII */
diff --git a/cups/options.c b/cups/options.c
index aa70992..9aa20f8 100644
--- a/cups/options.c
+++ b/cups/options.c
@@ -1,7 +1,7 @@
/*
* Option routines for CUPS.
*
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2017 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -30,6 +30,31 @@ static int cups_find_option(const char *name, int num_options,
/*
+ * 'cupsAddIntegerOption()' - Add an integer option to an option array.
+ *
+ * New option arrays can be initialized simply by passing 0 for the
+ * "num_options" parameter.
+ *
+ * @since CUPS 2.2.4/macOS 10.13@
+ */
+
+int /* O - Number of options */
+cupsAddIntegerOption(
+ const char *name, /* I - Name of option */
+ int value, /* I - Value of option */
+ int num_options, /* I - Number of options */
+ cups_option_t **options) /* IO - Pointer to options */
+{
+ char strvalue[32]; /* String value */
+
+
+ snprintf(strvalue, sizeof(strvalue), "%d", value);
+
+ return (cupsAddOption(name, strvalue, num_options, options));
+}
+
+
+/*
* 'cupsAddOption()' - Add an option to an option array.
*
* New option arrays can be initialized simply by passing 0 for the
@@ -155,6 +180,38 @@ cupsFreeOptions(
/*
+ * 'cupsGetIntegerOption()' - Get an integer option value.
+ *
+ * INT_MIN is returned when the option does not exist, is not an integer, or
+ * exceeds the range of values for the "int" type.
+ *
+ * @since CUPS 2.2.4/macOS 10.13@
+ */
+
+int /* O - Option value or @code INT_MIN@ */
+cupsGetIntegerOption(
+ const char *name, /* I - Name of option */
+ int num_options, /* I - Number of options */
+ cups_option_t *options) /* I - Options */
+{
+ const char *value = cupsGetOption(name, num_options, options);
+ /* String value of option */
+ char *ptr; /* Pointer into string value */
+ long intvalue; /* Integer value */
+
+
+ if (!value || !*value)
+ return (INT_MIN);
+
+ intvalue = strtol(value, &ptr, 10);
+ if (intvalue < INT_MIN || intvalue > INT_MAX || *ptr)
+ return (INT_MIN);
+
+ return ((int)intvalue);
+}
+
+
+/*
* 'cupsGetOption()' - Get an option value.
*/
diff --git a/cups/ppd-cache.c b/cups/ppd-cache.c
index e712341..7e40214 100644
--- a/cups/ppd-cache.c
+++ b/cups/ppd-cache.c
@@ -3595,7 +3595,7 @@ _ppdCreateFromIPP(char *buffer, /* I - Filename buffer */
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 (!strcasecmp(keyword, "black_1") || !strcmp(keyword, "bi-level") || !strcmp(keyword, "process-bi-level"))
{
if (!default_color)
cupsFilePrintf(fp, "*OpenUI *ColorModel/%s: PickOne\n"
@@ -3606,7 +3606,7 @@ _ppdCreateFromIPP(char *buffer, /* I - Filename buffer */
if (!default_color)
default_color = "FastGray";
}
- else if (!strcmp(keyword, "sgray_8") || !strcmp(keyword, "W8") || !strcmp(keyword, "monochrome") || !strcmp(keyword, "process-monochrome"))
+ else if (!strcasecmp(keyword, "sgray_8") || !strcmp(keyword, "W8") || !strcmp(keyword, "monochrome") || !strcmp(keyword, "process-monochrome"))
{
if (!default_color)
cupsFilePrintf(fp, "*OpenUI *ColorModel/%s: PickOne\n"
@@ -3617,7 +3617,7 @@ _ppdCreateFromIPP(char *buffer, /* I - Filename buffer */
if (!default_color || !strcmp(default_color, "FastGray"))
default_color = "Gray";
}
- else if (!strcmp(keyword, "srgb_8") || !strcmp(keyword, "SRGB24") || !strcmp(keyword, "color"))
+ else if (!strcasecmp(keyword, "srgb_8") || !strcmp(keyword, "SRGB24") || !strcmp(keyword, "color"))
{
if (!default_color)
cupsFilePrintf(fp, "*OpenUI *ColorModel/%s: PickOne\n"
@@ -3627,7 +3627,7 @@ _ppdCreateFromIPP(char *buffer, /* I - Filename buffer */
default_color = "RGB";
}
- else if (!strcmp(keyword, "adobe-rgb_16") || !strcmp(keyword, "ADOBERGB48"))
+ else if (!strcasecmp(keyword, "adobe-rgb_16") || !strcmp(keyword, "ADOBERGB48"))
{
if (!default_color)
cupsFilePrintf(fp, "*OpenUI *ColorModel/%s: PickOne\n"
diff --git a/cups/pwg.h b/cups/pwg.h
index 2269dbe..4204050 100644
--- a/cups/pwg.h
+++ b/cups/pwg.h
@@ -1,7 +1,7 @@
/*
* PWG media API definitions for CUPS.
*
- * Copyright 2009-2013 by Apple Inc.
+ * Copyright 2009-2017 by Apple Inc.
*
* These coded instructions, statements, and computer programs are the
* property of Apple Inc. and are protected by Federal copyright
@@ -39,7 +39,7 @@ extern "C" {
* Types and structures...
*/
-typedef struct pwg_map_s /**** Map element - PPD to/from PWG */
+typedef struct pwg_map_s /**** Map element - PPD to/from PWG @exclude all@ */
{
char *pwg, /* PWG media keyword */
*ppd; /* PPD option keyword */
@@ -54,7 +54,7 @@ typedef struct pwg_media_s /**** Common media size data ****/
length; /* Length in 2540ths */
} pwg_media_t;
-typedef struct pwg_size_s /**** Size element - PPD to/from PWG */
+typedef struct pwg_size_s /**** Size element - PPD to/from PWG @exclude all@ */
{
pwg_map_t map; /* Map element */
int width, /* Width in 2540ths */
diff --git a/cups/snmp.c b/cups/snmp.c
index fffa218..7958b93 100644
--- a/cups/snmp.c
+++ b/cups/snmp.c
@@ -739,6 +739,10 @@ asn1_debug(const char *prefix, /* I - Prefix string */
_cups_globals_t *cg = _cupsGlobals(); /* Global data */
+#ifdef __clang_analyzer__ /* Suppress bogus clang error */
+ memset(string, 0, sizeof(string));
+#endif /* __clang_analyzer__ */
+
if (cg->snmp_debug <= 0)
return;
diff --git a/cups/string.c b/cups/string.c
index 39a787f..0d4ed0f 100644
--- a/cups/string.c
+++ b/cups/string.c
@@ -695,10 +695,11 @@ _cups_strlcat(char *dst, /* O - Destination string */
*/
dstlen = strlen(dst);
- size -= dstlen + 1;
- if (!size)
- return (dstlen); /* No room, return immediately... */
+ if (size < (dstlen + 1))
+ return (dstlen); /* No room, return immediately... */
+
+ size -= dstlen + 1;
/*
* Figure out how much room is needed...
diff --git a/cups/testdest.c b/cups/testdest.c
index 945e3e1..4e2cbed 100644
--- a/cups/testdest.c
+++ b/cups/testdest.c
@@ -218,9 +218,9 @@ enum_cb(void *user_data, /* I - User data (unused) */
(void)flags;
if (dest->instance)
- printf("%s/%s:\n", dest->name, dest->instance);
+ printf("%s%s/%s:\n", (flags & CUPS_DEST_FLAGS_REMOVED) ? "REMOVE " : "", dest->name, dest->instance);
else
- printf("%s:\n", dest->name);
+ printf("%s%s:\n", (flags & CUPS_DEST_FLAGS_REMOVED) ? "REMOVE " : "", dest->name);
for (i = 0; i < dest->num_options; i ++)
printf(" %s=\"%s\"\n", dest->options[i].name, dest->options[i].value);
@@ -594,7 +594,8 @@ show_supported(http_t *http, /* I - Connection to destination */
}
else if (!value)
{
- puts(option);
+ printf("%s (%s)\n", option, cupsCheckDestSupported(http, dest, dinfo, option, NULL) ? "supported" : "not-supported");
+
if ((attr = cupsFindDestSupported(http, dest, dinfo, option)) != NULL)
{
count = ippGetCount(attr);
diff --git a/cups/tls-darwin.c b/cups/tls-darwin.c
index b6e88b0..78d6de2 100644
--- a/cups/tls-darwin.c
+++ b/cups/tls-darwin.c
@@ -21,7 +21,7 @@
#include <spawn.h>
-extern char **environ;
+extern char **environ; /* @private@ */
/*
@@ -1324,7 +1324,6 @@ _httpTLSStart(http_t *http) /* I - HTTP connection */
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 :
@@ -1337,6 +1336,14 @@ _httpTLSStart(http_t *http) /* I - HTTP connection */
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_PSK_WITH_AES_128_CBC_SHA256 :
+ case TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 :
+ if (tls_options & _HTTP_TLS_DENY_CBC)
+ {
+ DEBUG_printf(("4_httpTLSStart: Excluding CBC cipher suite %d", supported[i]));
+ break;
+ }
+
// 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 :
@@ -1347,15 +1354,28 @@ _httpTLSStart(http_t *http) /* I - HTTP connection */
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 */
+ case TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA :
+ case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 :
+ case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 :
+ case TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 :
+ case TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 :
+ case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 :
+ case TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 :
+ case TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 :
+ case TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 :
+ if (tls_options & _HTTP_TLS_DENY_CBC)
+ {
+ DEBUG_printf(("4_httpTLSStart: Excluding CBC cipher suite %d", supported[i]));
+ break;
+ }
+
+ /* Anything else we'll assume is "secure" */
default :
enabled[num_enabled ++] = supported[i];
break;
diff --git a/cups/tls-gnutls.c b/cups/tls-gnutls.c
index 7193d79..48bc11a 100644
--- a/cups/tls-gnutls.c
+++ b/cups/tls-gnutls.c
@@ -1,7 +1,7 @@
/*
* TLS support code for CUPS using GNU TLS.
*
- * Copyright 2007-2016 by Apple Inc.
+ * Copyright 2007-2017 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
@@ -397,7 +397,7 @@ httpCredentialsAreValidForName(
for (i = 0; i < count; i ++)
{
rserial_size = sizeof(rserial);
- if (!gnutls_x509_crl_get_crt_serial(tls_crl, i, rserial, &rserial_size, NULL) && cserial_size == rserial_size && !memcmp(cserial, rserial, rserial_size))
+ if (!gnutls_x509_crl_get_crt_serial(tls_crl, (unsigned)i, rserial, &rserial_size, NULL) && cserial_size == rserial_size && !memcmp(cserial, rserial, rserial_size))
{
result = 0;
break;
@@ -1518,6 +1518,9 @@ _httpTLSStart(http_t *http) /* I - Connection to server */
if (!(tls_options & _HTTP_TLS_ALLOW_DH))
strlcat(priority_string, ":!ANON-DH", sizeof(priority_string));
+ if (!(tls_options & _HTTP_TLS_DENY_CBC))
+ strlcat(priority_string, ":!CBC", sizeof(priority_string));
+
#ifdef HAVE_GNUTLS_PRIORITY_SET_DIRECT
gnutls_priority_set_direct(http->tls, priority_string, NULL);
diff --git a/cups/tls-sspi.c b/cups/tls-sspi.c
index 46f6e79..77b883b 100644
--- a/cups/tls-sspi.c
+++ b/cups/tls-sspi.c
@@ -1795,7 +1795,7 @@ http_sspi_find_credentials(
}
#endif /* SP_PROT_TLS1_2_SERVER */
- /* 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... */
+ /* TODO: Support _HTTP_TLS_ALLOW_RC4, _HTTP_TLS_ALLOW_DH, and _HTTP_TLS_DENY_CBC options; right now we'll rely on Windows registry to enable/disable RC4/DH/CBC... */
/*
* Create an SSPI credential.
diff --git a/cups/usersys.c b/cups/usersys.c
index 333d21e..ff5cb30 100644
--- a/cups/usersys.c
+++ b/cups/usersys.c
@@ -1,7 +1,7 @@
/*
* User, system, and password routines for CUPS.
*
- * Copyright 2007-2015 by Apple Inc.
+ * Copyright 2007-2017 by Apple Inc.
* Copyright 1997-2006 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -132,6 +132,8 @@ cupsEncryption(void)
* thread in a program. Multi-threaded programs that override the setting via
* the @link cupsSetPasswordCB@ or @link cupsSetPasswordCB2@ functions need to
* do so in each thread for the same function to be used.
+ *
+ * @exclude all@
*/
const char * /* O - Password */
@@ -145,7 +147,7 @@ cupsGetPassword(const char *prompt) /* I - Prompt string */
/*
- * 'cupsGetPassword2()' - Get a password from the user using the advanced
+ * 'cupsGetPassword2()' - Get a password from the user using the current
* password callback.
*
* Uses the current password callback function. Returns @code NULL@ if the
@@ -153,8 +155,8 @@ cupsGetPassword(const char *prompt) /* I - Prompt string */
*
* Note: The current password callback function is tracked separately for each
* thread in a program. Multi-threaded programs that override the setting via
- * the @link cupsSetPasswordCB@ or @link cupsSetPasswordCB2@ functions need to
- * do so in each thread for the same function to be used.
+ * the @link cupsSetPasswordCB2@ function need to do so in each thread for the
+ * same function to be used.
*
* @since CUPS 1.4/macOS 10.6@
*/
@@ -297,6 +299,8 @@ cupsSetEncryption(http_encryption_t e) /* I - New encryption preference */
* Note: The current password callback is tracked separately for each thread
* in a program. Multi-threaded programs that override the callback need to do
* so in each thread for the same callback to be used.
+ *
+ * @exclude all@
*/
void
@@ -1363,6 +1367,8 @@ cups_set_ssl_options(
options |= _HTTP_TLS_ALLOW_SSL3;
else if (!_cups_strcasecmp(start, "AllowDH"))
options |= _HTTP_TLS_ALLOW_DH;
+ else if (!_cups_strcasecmp(start, "DenyCBC"))
+ options |= _HTTP_TLS_DENY_CBC;
else if (!_cups_strcasecmp(start, "DenyTLS1.0"))
options |= _HTTP_TLS_DENY_TLS10;
else if (!_cups_strcasecmp(start, "None"))
diff --git a/cups/util.c b/cups/util.c
index 5db2fc6..2f5ebdf 100644
--- a/cups/util.c
+++ b/cups/util.c
@@ -1,7 +1,7 @@
/*
* Printing utilities for CUPS.
*
- * Copyright 2007-2015 by Apple Inc.
+ * Copyright 2007-2017 by Apple Inc.
* Copyright 1997-2006 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -28,6 +28,19 @@
/*
+ * Enumeration data and callback...
+ */
+
+typedef struct _cups_createdata_s
+{
+ const char *name; /* Destination name */
+ cups_dest_t *dest; /* Matching destination */
+} _cups_createdata_t;
+
+static int cups_create_cb(_cups_createdata_t *data, unsigned flags, cups_dest_t *dest);
+
+
+/*
* 'cupsCancelJob()' - Cancel a print job on the default server.
*
* Pass @code CUPS_JOBID_ALL@ to cancel all jobs or @code CUPS_JOBID_CURRENT@
@@ -35,6 +48,8 @@
*
* Use the @link cupsLastError@ and @link cupsLastErrorString@ functions to get
* the cause of any failure.
+ *
+ * @exclude all@
*/
int /* O - 1 on success, 0 on failure */
@@ -58,7 +73,7 @@ cupsCancelJob(const char *name, /* I - Name of printer or class */
* Use the @link cupsLastError@ and @link cupsLastErrorString@ functions to get
* the cause of any failure.
*
- * @since CUPS 1.4/macOS 10.6@
+ * @since CUPS 1.4/macOS 10.6@ @exclude all@
*/
ipp_status_t /* O - IPP status */
@@ -146,7 +161,7 @@ cupsCancelJob2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
* print, use the @link cupsPrintFile2@ or @link cupsPrintFiles2@ function
* instead.
*
- * @since CUPS 1.4/macOS 10.6@
+ * @since CUPS 1.4/macOS 10.6@ @exclude all@
*/
int /* O - Job ID or 0 on error */
@@ -157,12 +172,10 @@ cupsCreateJob(
int num_options, /* I - Number of options */
cups_option_t *options) /* I - Options */
{
- char printer_uri[1024], /* Printer URI */
- resource[1024]; /* Printer resource */
- ipp_t *request, /* Create-Job request */
- *response; /* Create-Job response */
- ipp_attribute_t *attr; /* job-id attribute */
int job_id = 0; /* job-id value */
+ ipp_status_t status; /* Create-Job status */
+ _cups_createdata_t data; /* Enumeration data */
+ cups_dinfo_t *info; /* Destination information */
DEBUG_printf(("cupsCreateJob(http=%p, name=\"%s\", title=\"%s\", num_options=%d, options=%p)", (void *)http, name, title, num_options, (void *)options));
@@ -178,46 +191,47 @@ cupsCreateJob(
}
/*
- * Build a Create-Job request...
+ * Lookup the destination...
*/
- if ((request = ippNewRequest(IPP_OP_CREATE_JOB)) == NULL)
+ data.name = name;
+ data.dest = NULL;
+
+ cupsEnumDests(0, 1000, NULL, 0, 0, (cups_dest_cb_t)cups_create_cb, &data);
+
+ if (!data.dest)
{
- _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOMEM), 0);
+ DEBUG_puts("1cupsCreateJob: Destination not found.");
+ _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOENT), 0);
return (0);
}
- httpAssembleURIf(HTTP_URI_CODING_ALL, printer_uri, sizeof(printer_uri), "ipp",
- NULL, "localhost", ippPort(), "/printers/%s", name);
- snprintf(resource, sizeof(resource), "/printers/%s", name);
-
- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
- NULL, printer_uri);
- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
- NULL, cupsUser());
- if (title)
- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name", NULL,
- title);
- cupsEncodeOptions2(request, num_options, options, IPP_TAG_OPERATION);
- cupsEncodeOptions2(request, num_options, options, IPP_TAG_JOB);
- cupsEncodeOptions2(request, num_options, options, IPP_TAG_SUBSCRIPTION);
-
/*
- * Send the request and get the job-id...
+ * Query dest information and create the job...
*/
- response = cupsDoRequest(http, request, resource);
+ DEBUG_puts("1cupsCreateJob: Querying destination info.");
+ if ((info = cupsCopyDestInfo(http, data.dest)) == NULL)
+ {
+ DEBUG_puts("1cupsCreateJob: Query failed.");
+ cupsFreeDests(1, data.dest);
+ return (0);
+ }
- if ((attr = ippFindAttribute(response, "job-id", IPP_TAG_INTEGER)) != NULL)
- job_id = attr->values[0].integer;
+ status = cupsCreateDestJob(http, data.dest, info, &job_id, title, num_options, options);
+ DEBUG_printf(("1cupsCreateJob: cupsCreateDestJob returned %04x (%s)", status, ippErrorString(status)));
- ippDelete(response);
+ cupsFreeDestInfo(info);
+ cupsFreeDests(1, data.dest);
/*
- * Return it...
+ * Return the job...
*/
- return (job_id);
+ if (status >= IPP_STATUS_REDIRECTION_OTHER_SITE)
+ return (0);
+ else
+ return (job_id);
}
@@ -226,7 +240,7 @@ cupsCreateJob(
*
* The document must have been started using @link cupsStartDocument@.
*
- * @since CUPS 1.4/macOS 10.6@
+ * @since CUPS 1.4/macOS 10.6@ @exclude all@
*/
ipp_status_t /* O - Status of document submission */
@@ -277,7 +291,7 @@ cupsFreeJobs(int num_jobs, /* I - Number of jobs */
* This function is deprecated and no longer returns a list of printer
* classes - use @link cupsGetDests@ instead.
*
- * @deprecated@
+ * @deprecated@ @exclude all@
*/
int /* O - Number of classes */
@@ -299,6 +313,8 @@ cupsGetClasses(char ***classes) /* O - Classes */
* Applications should use the @link cupsGetDests@ and @link cupsGetDest@
* functions to get the user-defined default printer, as this function does
* not support the lpoptions-defined default printer.
+ *
+ * @exclude all@
*/
const char * /* O - Default printer or @code NULL@ */
@@ -322,7 +338,7 @@ cupsGetDefault(void)
* functions to get the user-defined default printer, as this function does
* not support the lpoptions-defined default printer.
*
- * @since CUPS 1.1.21/macOS 10.4@
+ * @since CUPS 1.1.21/macOS 10.4@ @exclude all@
*/
const char * /* O - Default printer or @code NULL@ */
@@ -388,6 +404,8 @@ cupsGetDefault2(http_t *http) /* I - Connection to server or @code CUPS_HTTP_DE
* of state, while @code CUPS_WHICHJOBS_ACTIVE@ returns jobs that are
* pending, processing, or held and @code CUPS_WHICHJOBS_COMPLETED@ returns
* jobs that are stopped, canceled, aborted, or completed.
+ *
+ * @exclude all@
*/
int /* O - Number of jobs */
@@ -683,7 +701,7 @@ cupsGetJobs2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_D
* This function is deprecated and no longer returns a list of printers - use
* @link cupsGetDests@ instead.
*
- * @deprecated@
+ * @deprecated@ @exclude all@
*/
int /* O - Number of printers */
@@ -698,6 +716,8 @@ cupsGetPrinters(char ***printers) /* O - Printers */
/*
* 'cupsPrintFile()' - Print a file to a printer or class on the default server.
+ *
+ * @exclude all@
*/
int /* O - Job ID or 0 on error */
@@ -718,7 +738,7 @@ cupsPrintFile(const char *name, /* I - Destination name */
* 'cupsPrintFile2()' - Print a file to a printer or class on the specified
* server.
*
- * @since CUPS 1.1.21/macOS 10.4@
+ * @since CUPS 1.1.21/macOS 10.4@ @exclude all@
*/
int /* O - Job ID or 0 on error */
@@ -740,6 +760,8 @@ cupsPrintFile2(
/*
* 'cupsPrintFiles()' - Print one or more files to a printer or class on the
* default server.
+ *
+ * @exclude all@
*/
int /* O - Job ID or 0 on error */
@@ -766,7 +788,7 @@ cupsPrintFiles(
* 'cupsPrintFiles2()' - Print one or more files to a printer or class on the
* specified server.
*
- * @since CUPS 1.1.21/macOS 10.4@
+ * @since CUPS 1.1.21/macOS 10.4@ @exclude all@
*/
int /* O - Job ID or 0 on error */
@@ -896,7 +918,7 @@ cupsPrintFiles2(
* @code CUPS_FORMAT_TEXT@ are provided for the "format" argument, although
* any supported MIME type string can be supplied.
*
- * @since CUPS 1.4/macOS 10.6@
+ * @since CUPS 1.4/macOS 10.6@ @exclude all@
*/
http_status_t /* O - HTTP status of request */
@@ -951,3 +973,26 @@ cupsStartDocument(
return (status);
}
+
+
+/*
+ * 'cups_create_cb()' - Find the destination for printing.
+ */
+
+static int /* O - 0 on match */
+cups_create_cb(
+ _cups_createdata_t *data, /* I - Data from cupsCreateJob call */
+ unsigned flags, /* I - Enumeration flags */
+ cups_dest_t *dest) /* I - Destination */
+{
+ DEBUG_printf(("2cups_create_cb(data=%p(%s), flags=%08x, dest=%p(%s))", (void *)data, data->name, flags, (void *)dest, dest->name));
+
+ (void)flags;
+
+ if (dest->instance || strcasecmp(data->name, dest->name))
+ return (1);
+
+ cupsCopyDest(dest, 0, &data->dest);
+
+ return (0);
+}
diff --git a/cups/versioning.h b/cups/versioning.h
index 2e92e6b..5a000c0 100644
--- a/cups/versioning.h
+++ b/cups/versioning.h
@@ -1,7 +1,7 @@
/*
* API versioning definitions for CUPS.
*
- * Copyright 2007-2016 by Apple Inc.
+ * Copyright 2007-2017 by Apple Inc.
*
* These coded instructions, statements, and computer programs are the
* property of Apple Inc. and are protected by Federal copyright
@@ -17,11 +17,10 @@
/*
* This header defines several constants - _CUPS_DEPRECATED,
- * _CUPS_DEPRECATED_MSG, _CUPS_INTERNAL_MSG, _CUPS_API_1_1, _CUPS_API_1_1_19,
- * _CUPS_API_1_1_20, _CUPS_API_1_1_21, _CUPS_API_1_2, _CUPS_API_1_3,
- * _CUPS_API_1_4, _CUPS_API_1_5, _CUPS_API_1_6, _CUPS_API_1_7, and
- * _CUPS_API_2_0 - which add compiler-specific attributes that flag functions
- * that are deprecated, added in particular releases, or internal to CUPS.
+ * _CUPS_DEPRECATED_MSG, _CUPS_INTERNAL_MSG, _CUPS_API_major_minor, and
+ * _CUPS_API_major_minor_patch - which add compiler-specific attributes that
+ * flag functions that are deprecated, added in particular releases, or internal
+ * to CUPS.
*
* On macOS, the _CUPS_API_* constants are defined based on the values of
* the MAC_OS_X_VERSION_MIN_ALLOWED and MAC_OS_X_VERSION_MAX_ALLOWED constants
@@ -57,6 +56,9 @@
# ifndef AVAILABLE_MAC_OS_X_VERSION_10_12_AND_LATER
# define AVAILABLE_MAC_OS_X_VERSION_10_12_AND_LATER __attribute__((unavailable))
# endif /* !AVAILABLE_MAC_OS_X_VERSION_10_12_AND_LATER */
+# ifndef AVAILABLE_MAC_OS_X_VERSION_10_13_AND_LATER
+# define AVAILABLE_MAC_OS_X_VERSION_10_13_AND_LATER __attribute__((unavailable))
+# endif /* !AVAILABLE_MAC_OS_X_VERSION_10_13_AND_LATER */
# define _CUPS_API_1_1_19 AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER
# define _CUPS_API_1_1_20 AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER
# define _CUPS_API_1_1_21 AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER
@@ -68,6 +70,7 @@
# define _CUPS_API_1_7 AVAILABLE_MAC_OS_X_VERSION_10_9_AND_LATER
# define _CUPS_API_2_0 AVAILABLE_MAC_OS_X_VERSION_10_10_AND_LATER
# define _CUPS_API_2_2 AVAILABLE_MAC_OS_X_VERSION_10_12_AND_LATER
+# define _CUPS_API_2_2_4 AVAILABLE_MAC_OS_X_VERSION_10_13_AND_LATER
# else
# define _CUPS_API_1_1_19
# define _CUPS_API_1_1_20
@@ -80,6 +83,7 @@
# define _CUPS_API_1_7
# define _CUPS_API_2_0
# define _CUPS_API_2_2
+# define _CUPS_API_2_2_4
# endif /* __APPLE__ && !_CUPS_SOURCE */
/*
diff --git a/doc/Makefile b/doc/Makefile
index eb7ae68..3b1b711 100644
--- a/doc/Makefile
+++ b/doc/Makefile
@@ -45,15 +45,11 @@ HELPIMAGES = \
HELPFILES = \
help/accounting.html \
help/api-admin.html \
- help/api-array.html \
- help/api-cups.html \
- help/api-filedir.html \
help/api-filter.html \
- help/api-httpipp.html \
- help/api-overview.html \
help/api-ppd.html \
help/api-raster.html \
help/cgi.html \
+ help/cupspm.html \
help/encryption.html \
help/glossary.html \
help/kerberos.html \
diff --git a/doc/help/api-admin.html b/doc/help/api-admin.html
index 5ca4096..c3f6838 100644
--- a/doc/help/api-admin.html
+++ b/doc/help/api-admin.html
@@ -1,12 +1,15 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!doctype html>
<html>
<!-- SECTION: Programming -->
-<head>
- <title>Administration 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">
-<style type="text/css"><!--
+ <head>
+ <title>Administration 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.11">
+ <meta name="author" content="Unknown">
+ <meta name="copyright" content="Unknown">
+ <meta name="version" content="0.0">
+ <style type="text/css"><!--
BODY {
font-family: lucida grande, geneva, helvetica, arial, sans-serif;
}
@@ -349,9 +352,8 @@ div.contents ul.subcontents li {
text-indent: -1em;
}
--></style>
-</head>
-<body>
-<div class='body'>
+ </head>
+ <body>
<!--
Administrative API header for CUPS.
@@ -386,24 +388,26 @@ div.contents ul.subcontents li {
</tr>
</tbody>
</table></div>
-<h2 class="title">Contents</h2>
-<ul class="contents">
-<li><a href="#OVERVIEW">Overview</a><ul class="subcontents">
- <li><a href="#SETTINGS">Scheduler Settings</a></li>
- <li><a href="#DEVICES">Devices</a></li>
-</ul></li>
-<li><a href="#FUNCTIONS">Functions</a><ul class="code">
- <li><a href="#cupsAdminCreateWindowsPPD" title="Create the Windows PPD file for a printer.">cupsAdminCreateWindowsPPD</a></li>
- <li><a href="#cupsAdminExportSamba" title="Export a printer to Samba.">cupsAdminExportSamba</a></li>
- <li><a href="#cupsAdminGetServerSettings" title="Get settings from the server.">cupsAdminGetServerSettings</a></li>
- <li><a href="#cupsAdminSetServerSettings" title="Set settings on the server.">cupsAdminSetServerSettings</a></li>
- <li><a href="#cupsGetDevices" title="Get available printer devices.">cupsGetDevices</a></li>
-</ul></li>
-<li><a href="#TYPES">Data Types</a><ul class="code">
- <li><a href="#cups_device_cb_t" title="Device callback
-">cups_device_cb_t</a></li>
-</ul></li>
-</ul>
+ <div class="contents">
+ <h2 class="title">Contents</h2>
+ <ul class="contents">
+ <li><a href="#OVERVIEW">Overview</a><ul class="subcontents">
+ <li><a href="#SETTINGS">Scheduler Settings</a></li>
+ <li><a href="#DEVICES">Devices</a></li>
+ </ul></li>
+ <li><a href="#FUNCTIONS">Functions</a><ul class="subcontents">
+ <li><a href="#cupsAdminCreateWindowsPPD">cupsAdminCreateWindowsPPD</a></li>
+ <li><a href="#cupsAdminExportSamba">cupsAdminExportSamba</a></li>
+ <li><a href="#cupsAdminGetServerSettings">cupsAdminGetServerSettings</a></li>
+ <li><a href="#cupsAdminSetServerSettings">cupsAdminSetServerSettings</a></li>
+ <li><a href="#cupsGetDevices">cupsGetDevices</a></li>
+ </ul></li>
+ <li><a href="#TYPES">Data Types</a><ul class="subcontents">
+ <li><a href="#cups_device_cb_t">cups_device_cb_t</a></li>
+ </ul></li>
+ </ul>
+ </div>
+ <div class="body">
<!--
Administrative API documentation for CUPS.
@@ -500,143 +504,116 @@ show_devices(void)
<a href="#cupsGetDevices">cupsGetDevices</a>(CUPS_HTTP_DEFAULT, 30, NULL, NULL, get_devices_cb, NULL);
}
</pre>
-<h2 class="title"><a name="FUNCTIONS">Functions</a></h2>
-<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="cupsAdminCreateWindowsPPD">cupsAdminCreateWindowsPPD</a></h3>
-<p class="description">Create the Windows PPD file for a printer.</p>
+ <h2 class="title"><a id="FUNCTIONS">Functions</a></h2>
+<h3 class="function"><span class="info">&#160;DEPRECATED&#160;</span><a id="cupsAdminCreateWindowsPPD">cupsAdminCreateWindowsPPD</a></h3>
+ <p class="description">Create the Windows PPD file for a printer.</p>
<p class="code">
-char *cupsAdminCreateWindowsPPD (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *dest,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *buffer,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int bufsize<br>
-);</p>
+char *cupsAdminCreateWindowsPPD(http_t *http, const char *dest, char *buffer, int bufsize);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>dest</dt>
-<dd class="description">Printer or class</dd>
-<dt>buffer</dt>
-<dd class="description">Filename buffer</dd>
-<dt>bufsize</dt>
-<dd class="description">Size of filename buffer</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></td></tr>
+<tr><th>dest</th>
+ <td class="description">Printer or class</td></tr>
+<tr><th>buffer</th>
+ <td class="description">Filename buffer</td></tr>
+<tr><th>bufsize</th>
+ <td class="description">Size of filename buffer</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">PPD file or NULL</p>
-<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="cupsAdminExportSamba">cupsAdminExportSamba</a></h3>
-<p class="description">Export a printer to Samba.</p>
+ <p class="description">PPD file or NULL</p>
+<h3 class="function"><span class="info">&#160;DEPRECATED&#160;</span><a id="cupsAdminExportSamba">cupsAdminExportSamba</a></h3>
+ <p class="description">Export a printer to Samba.</p>
<p class="code">
-int cupsAdminExportSamba (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *dest,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *ppd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *samba_server,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *samba_user,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *samba_password,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;FILE *logfile<br>
-);</p>
+int cupsAdminExportSamba(const char *dest, const char *ppd, const char *samba_server, const char *samba_user, const char *samba_password, FILE *logfile);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>dest</dt>
-<dd class="description">Destination to export</dd>
-<dt>ppd</dt>
-<dd class="description">PPD file</dd>
-<dt>samba_server</dt>
-<dd class="description">Samba server</dd>
-<dt>samba_user</dt>
-<dd class="description">Samba username</dd>
-<dt>samba_password</dt>
-<dd class="description">Samba password</dd>
-<dt>logfile</dt>
-<dd class="description">Log file, if any</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>dest</th>
+ <td class="description">Destination to export</td></tr>
+<tr><th>ppd</th>
+ <td class="description">PPD file</td></tr>
+<tr><th>samba_server</th>
+ <td class="description">Samba server</td></tr>
+<tr><th>samba_user</th>
+ <td class="description">Samba username</td></tr>
+<tr><th>samba_password</th>
+ <td class="description">Samba password</td></tr>
+<tr><th>logfile</th>
+ <td class="description">Log file, if any</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.3/macOS 10.5&nbsp;</span><a name="cupsAdminGetServerSettings">cupsAdminGetServerSettings</a></h3>
-<p class="description">Get settings from the server.</p>
+ <p class="description">1 on success, 0 on failure</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.3/macOS 10.5&#160;</span><a id="cupsAdminGetServerSettings">cupsAdminGetServerSettings</a></h3>
+ <p class="description">Get settings from the server.</p>
<p class="code">
-int cupsAdminGetServerSettings (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int *num_settings,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;cups_option_t **settings<br>
-);</p>
+int cupsAdminGetServerSettings(http_t *http, int *num_settings, cups_option_t **settings);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>num_settings</dt>
-<dd class="description">Number of settings</dd>
-<dt>settings</dt>
-<dd class="description">Settings</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></td></tr>
+<tr><th>num_settings</th>
+ <td class="description">Number of settings</td></tr>
+<tr><th>settings</th>
+ <td class="description">Settings</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
+ <p class="description">1 on success, 0 on failure</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">The returned settings should be freed with cupsFreeOptions() when
+ <p class="discussion">The returned settings should be freed with cupsFreeOptions() when
you are done with them.
</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.3/macOS 10.5&nbsp;</span><a name="cupsAdminSetServerSettings">cupsAdminSetServerSettings</a></h3>
-<p class="description">Set settings on the server.</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.3/macOS 10.5&#160;</span><a id="cupsAdminSetServerSettings">cupsAdminSetServerSettings</a></h3>
+ <p class="description">Set settings on the server.</p>
<p class="code">
-int cupsAdminSetServerSettings (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_settings,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;cups_option_t *settings<br>
-);</p>
+int cupsAdminSetServerSettings(http_t *http, int num_settings, cups_option_t *settings);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>num_settings</dt>
-<dd class="description">Number of settings</dd>
-<dt>settings</dt>
-<dd class="description">Settings</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></td></tr>
+<tr><th>num_settings</th>
+ <td class="description">Number of settings</td></tr>
+<tr><th>settings</th>
+ <td class="description">Settings</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span><a name="cupsGetDevices">cupsGetDevices</a></h3>
-<p class="description">Get available printer devices.</p>
+ <p class="description">1 on success, 0 on failure</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.4/macOS 10.6&#160;</span><a id="cupsGetDevices">cupsGetDevices</a></h3>
+ <p class="description">Get available printer devices.</p>
<p class="code">
-ipp_status_t cupsGetDevices (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int timeout,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *include_schemes,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *exclude_schemes,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_device_cb_t">cups_device_cb_t</a> callback,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;void *user_data<br>
-);</p>
+ipp_status_t cupsGetDevices(http_t *http, int timeout, const char *include_schemes, const char *exclude_schemes, <a href="#cups_device_cb_t">cups_device_cb_t</a> callback, void *user_data);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>timeout</dt>
-<dd class="description">Timeout in seconds or <code>CUPS_TIMEOUT_DEFAULT</code></dd>
-<dt>include_schemes</dt>
-<dd class="description">Comma-separated URI schemes to include or <code>CUPS_INCLUDE_ALL</code></dd>
-<dt>exclude_schemes</dt>
-<dd class="description">Comma-separated URI schemes to exclude or <code>CUPS_EXCLUDE_NONE</code></dd>
-<dt>callback</dt>
-<dd class="description">Callback function</dd>
-<dt>user_data</dt>
-<dd class="description">User data pointer</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></td></tr>
+<tr><th>timeout</th>
+ <td class="description">Timeout in seconds or <code>CUPS_TIMEOUT_DEFAULT</code></td></tr>
+<tr><th>include_schemes</th>
+ <td class="description">Comma-separated URI schemes to include or <code>CUPS_INCLUDE_ALL</code></td></tr>
+<tr><th>exclude_schemes</th>
+ <td class="description">Comma-separated URI schemes to exclude or <code>CUPS_EXCLUDE_NONE</code></td></tr>
+<tr><th>callback</th>
+ <td class="description">Callback function</td></tr>
+<tr><th>user_data</th>
+ <td class="description">User data pointer</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Request status - <code>IPP_OK</code> on success.</p>
+ <p class="description">Request status - <code>IPP_OK</code> on success.</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function sends a CUPS-Get-Devices request and streams the discovered
+ <p class="discussion">This function sends a CUPS-Get-Devices request and streams the discovered
devices to the specified callback function. The &quot;timeout&quot; parameter controls
how long the request lasts, while the &quot;include_schemes&quot; and &quot;exclude_schemes&quot;
parameters provide comma-delimited lists of backends to include or omit from
the request respectively.
</p>
-<h2 class="title"><a name="TYPES">Data Types</a></h2>
-<h3 class="typedef"><span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span><a name="cups_device_cb_t">cups_device_cb_t</a></h3>
-<p class="description">Device callback
+ <h2 class="title"><a id="TYPES">Data Types</a></h2>
+ <h3 class="typedef"><a id="cups_device_cb_t"><span class="info">&#160;CUPS 1.4/macOS 10.6&#160;</span>cups_device_cb_t</a></h3>
+ <p class="description">Device callback
</p>
-<p class="code">
+ <p class="code">
typedef void (*cups_device_cb_t)(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, void *user_data);
</p>
-</div>
-</body>
+ </div>
+ </body>
</html>
diff --git a/doc/help/api-array.html b/doc/help/api-array.html
deleted file mode 100644
index 51b8039..0000000
--- a/doc/help/api-array.html
+++ /dev/null
@@ -1,1070 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<!-- SECTION: Programming -->
-<head>
- <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">
-<style type="text/css"><!--
-BODY {
- font-family: lucida grande, geneva, helvetica, arial, sans-serif;
-}
-
-H1, H2, H3, H4, H5, H6, P, TD, TH {
- font-family: lucida grande, geneva, helvetica, arial, sans-serif;
-}
-
-KBD {
- font-family: monaco, courier, monospace;
- font-weight: bold;
-}
-
-PRE {
- font-family: monaco, courier, monospace;
-}
-
-PRE.command {
- border: dotted thin #7f7f7f;
- margin-left: 36pt;
- padding: 10px;
-}
-
-P.compact {
- margin: 0;
-}
-
-P.example {
- font-style: italic;
- margin-left: 36pt;
-}
-
-DL.man DD {
- margin-left: 5em;
-}
-
-DL.man DT {
- margin-left: 0;
-}
-
-PRE.man {
- margin: 0;
-}
-
-PRE.example {
- background: #eeeeee;
- border: dotted thin #999999;
- margin-left: 36pt;
- padding: 10pt;
-}
-
-PRE.command EM, PRE.example EM {
- font-family: lucida grande, geneva, helvetica, arial, sans-serif;
-}
-
-P.command {
- font-family: monaco, courier, monospace;
- margin-left: 36pt;
-}
-
-P.formula {
- font-style: italic;
- margin-left: 36pt;
-}
-
-BLOCKQUOTE {
- background: #eeeeee;
- border: solid thin #999999;
- padding: 10pt;
-}
-
-A IMG {
- border: none;
-}
-
-A:link:hover IMG {
- background: #f0f0f0;
- border-radius: 10px;
- -moz-border-radius: 10px;
-}
-
-A:link, A:visited {
- font-weight: inherit;
- text-decoration: none;
-}
-
-A:link:hover, A:visited:hover, A:active {
- text-decoration: underline;
-}
-
-SUB, SUP {
- font-size: 50%;
-}
-
-TR.data, TD.data, TR.data TD {
- margin-top: 10pt;
- padding: 5pt;
- border-bottom: solid 1pt #999999;
-}
-
-TR.data TH {
- border-bottom: solid 1pt #999999;
- padding-top: 10pt;
- padding-left: 5pt;
- text-align: left;
-}
-
-DIV.table TABLE {
- border: solid thin #999999;
- border-collapse: collapse;
- border-spacing: 0;
- margin-left: auto;
- margin-right: auto;
-}
-
-DIV.table CAPTION {
- caption-side: top;
- font-size: 120%;
- font-style: italic;
- font-weight: bold;
- margin-left: auto;
- margin-right: auto;
-}
-
-DIV.table TABLE TD {
- border: solid thin #cccccc;
- padding-top: 5pt;
-}
-
-DIV.table TABLE TH {
- background: #cccccc;
- border: none;
- border-bottom: solid thin #999999;
-}
-
-DIV.figure TABLE {
- margin-left: auto;
- margin-right: auto;
-}
-
-DIV.figure CAPTION {
- caption-side: bottom;
- font-size: 120%;
- font-style: italic;
- font-weight: bold;
- margin-left: auto;
- margin-right: auto;
-}
-
-TH.label {
- text-align: right;
- vertical-align: top;
-}
-
-TH.sublabel {
- text-align: right;
- font-weight: normal;
-}
-
-HR {
- border: solid thin;
-}
-
-SPAN.info {
- background: black;
- border: thin solid black;
- color: white;
- font-size: 80%;
- font-style: italic;
- font-weight: bold;
- white-space: nowrap;
-}
-
-H2 SPAN.info, H3 SPAN.info, H4 SPAN.info {
- float: right;
- font-size: 100%;
-}
-
-H1.title {
-}
-
-H2.title, H3.title {
- border-bottom: solid 2pt #000000;
-}
-
-DIV.indent, TABLE.indent {
- margin-top: 2em;
- margin-left: auto;
- margin-right: auto;
- width: 90%;
-}
-
-TABLE.indent {
- border-collapse: collapse;
-}
-
-TABLE.indent TD, TABLE.indent TH {
- padding: 0;
-}
-
-TABLE.list {
- border-collapse: collapse;
- margin-left: auto;
- margin-right: auto;
- width: 90%;
-}
-
-TABLE.list TH {
- background: white;
- border-bottom: solid thin #cccccc;
- color: #444444;
- padding-top: 10pt;
- padding-left: 5pt;
- text-align: left;
- vertical-align: bottom;
- white-space: nowrap;
-}
-
-TABLE.list TH A {
- color: #4444cc;
-}
-
-TABLE.list TD {
- border-bottom: solid thin #eeeeee;
- padding-top: 5pt;
- padding-left: 5pt;
-}
-
-TABLE.list TR:nth-child(even) {
- background: #f8f8f8;
-}
-
-TABLE.list TR:nth-child(odd) {
- background: #f4f4f4;
-}
-
-DT {
- margin-left: 36pt;
- margin-top: 12pt;
-}
-
-DD {
- margin-left: 54pt;
-}
-
-DL.category DT {
- font-weight: bold;
-}
-
-P.summary {
- margin-left: 36pt;
- font-family: monaco, courier, monospace;
-}
-
-DIV.summary TABLE {
- border: solid thin #999999;
- border-collapse: collapse;
- border-spacing: 0;
- margin: 10px;
-}
-
-DIV.summary TABLE TD, DIV.summary TABLE TH {
- border: solid thin #999999;
- padding: 5px;
- text-align: left;
- vertical-align: top;
-}
-
-DIV.summary TABLE THEAD TH {
- background: #eeeeee;
-}
-
-/* API documentation styles... */
-div.body h1 {
- margin: 0;
-}
-div.body h2 {
- margin-top: 1.5em;
-}
-div.body h3, div.body h4, div.body h5 {
- margin-bottom: 0.5em;
- margin-top: 1.5em;
-}
-.class, .enumeration, .function, .struct, .typedef, .union {
- border-bottom: solid thin #999999;
- margin-bottom: 0;
- margin-top: 2em;
-}
-.description {
- margin-top: 0.5em;
-}
-code, p.code, pre, ul.code li {
- font-family: monaco, courier, monospace;
- font-size: 90%;
-}
-ul.code, ul.contents, ul.subcontents {
- list-style-type: none;
- margin: 0;
- padding-left: 0;
-}
-ul.code li {
- margin: 0;
-}
-ul.contents > li {
- margin-top: 1em;
-}
-ul.contents li ul.code, ul.contents li ul.subcontents {
- padding-left: 2em;
-}
-div.body dl {
- margin-left: 0;
- margin-top: 0;
-}
-div.body dt {
- font-style: italic;
- margin-left: 0;
- margin-top: 0;
-}
-div.body dd {
- margin-bottom: 0.5em;
-}
-
-/* This is just for the HTML files generated with the framedhelp target */
-div.contents {
- background: #e8e8e8;
- border: solid thin black;
- padding: 10px;
-}
-div.contents h1 {
- font-size: 110%;
-}
-div.contents h2 {
- font-size: 100%;
-}
-div.contents ul.contents {
- font-size: 80%;
-}
-div.contents ul.subcontents li {
- margin-left: 1em;
- text-indent: -1em;
-}
---></style>
-</head>
-<body>
-<div class='body'>
-<!--
- Array API header for CUPS.
-
- Copyright 2008-2011 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/".
--->
-
-<h1 class='title'>Array API</h1>
-
-<div class='summary'><table summary='General Information'>
-<thead>
-<tr>
- <th>Header</th>
- <th>cups/array.h</th>
-</tr>
-</thead>
-<tbody>
-<tr>
- <th>Library</th>
- <td>-lcups</td>
-</tr>
-<tr>
- <th>See Also</th>
- <td>Programming: <a href='api-overview.html' target='_top'>Introduction to CUPS Programming</a></td>
-</tr>
-</tbody>
-</table></div>
-<h2 class="title">Contents</h2>
-<ul class="contents">
-<li><a href="#OVERVIEW">Overview</a><ul class="subcontents">
- <li><a href="#MANAGING_ARRAYS">Managing Arrays</a></li>
- <li><a href="#FINDING_AND_ENUMERATING">Finding and Enumerating Elements</a></li>
-</ul></li>
-<li><a href="#FUNCTIONS">Functions</a><ul class="code">
- <li><a href="#cupsArrayAdd" title="Add an element to the array.">cupsArrayAdd</a></li>
- <li><a href="#cupsArrayClear" title="Clear the array.">cupsArrayClear</a></li>
- <li><a href="#cupsArrayCount" title="Get the number of elements in the array.">cupsArrayCount</a></li>
- <li><a href="#cupsArrayCurrent" title="Return the current element in the array.">cupsArrayCurrent</a></li>
- <li><a href="#cupsArrayDelete" title="Free all memory used by the array.">cupsArrayDelete</a></li>
- <li><a href="#cupsArrayDup" title="Duplicate the array.">cupsArrayDup</a></li>
- <li><a href="#cupsArrayFind" title="Find an element in the array.">cupsArrayFind</a></li>
- <li><a href="#cupsArrayFirst" title="Get the first element in the array.">cupsArrayFirst</a></li>
- <li><a href="#cupsArrayGetIndex" title="Get the index of the current element.">cupsArrayGetIndex</a></li>
- <li><a href="#cupsArrayGetInsert" title="Get the index of the last inserted element.">cupsArrayGetInsert</a></li>
- <li><a href="#cupsArrayIndex" title="Get the N-th element in the array.">cupsArrayIndex</a></li>
- <li><a href="#cupsArrayInsert" title="Insert an element in the array.">cupsArrayInsert</a></li>
- <li><a href="#cupsArrayLast" title="Get the last element in the array.">cupsArrayLast</a></li>
- <li><a href="#cupsArrayNew" title="Create a new array.">cupsArrayNew</a></li>
- <li><a href="#cupsArrayNew2" title="Create a new array with hash.">cupsArrayNew2</a></li>
- <li><a href="#cupsArrayNew3" title="Create a new array with hash and/or free function.">cupsArrayNew3</a></li>
- <li><a href="#cupsArrayNext" title="Get the next element in the array.">cupsArrayNext</a></li>
- <li><a href="#cupsArrayPrev" title="Get the previous element in the array.">cupsArrayPrev</a></li>
- <li><a href="#cupsArrayRemove" title="Remove an element from the array.">cupsArrayRemove</a></li>
- <li><a href="#cupsArrayRestore" title="Reset the current element to the last cupsArraySave.">cupsArrayRestore</a></li>
- <li><a href="#cupsArraySave" title="Mark the current element for a later cupsArrayRestore.">cupsArraySave</a></li>
- <li><a href="#cupsArrayUserData" title="Return the user data for an array.">cupsArrayUserData</a></li>
-</ul></li>
-<li><a href="#TYPES">Data Types</a><ul class="code">
- <li><a href="#cups_acopy_func_t" title="Array element copy function">cups_acopy_func_t</a></li>
- <li><a href="#cups_afree_func_t" title="Array element free function">cups_afree_func_t</a></li>
- <li><a href="#cups_ahash_func_t" title="Array hash function">cups_ahash_func_t</a></li>
- <li><a href="#cups_array_func_t" title="Array comparison function">cups_array_func_t</a></li>
- <li><a href="#cups_array_t" title="CUPS array type">cups_array_t</a></li>
-</ul></li>
-</ul>
-<!--
- Array API introduction for CUPS.
-
- Copyright 2007-2011 by Apple Inc.
- Copyright 1997-2006 by Easy Software Products, all rights reserved.
-
- 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/".
--->
-
-<h2 class='title'><a name='OVERVIEW'>Overview</a></h2>
-
-<p>The CUPS array API provides a high-performance generic array container.
-The contents of the array container can be sorted and the container itself is
-designed for optimal speed and memory usage under a wide variety of conditions.
-Sorted arrays use a binary search algorithm from the last found or inserted
-element to quickly find matching elements in the array. Arrays created with the
-optional hash function can often find elements with a single lookup. The
-<a href='#cups_array_t'><code>cups_array_t</code></a> type is used when
-referring to a CUPS array.</p>
-
-<p>The CUPS scheduler (<tt>cupsd</tt>) and many of the CUPS API
-functions use the array API to efficiently manage large lists of
-data.</p>
-
-<h3><a name='MANAGING_ARRAYS'>Managing Arrays</a></h3>
-
-<p>Arrays are created using either the
-<a href='#cupsArrayNew'><code>cupsArrayNew</code></a>,
-<a href='#cupsArrayNew2'><code>cupsArrayNew2</code></a>, or
-<a href='#cupsArrayNew2'><code>cupsArrayNew3</code></a> functions. The
-first function creates a new array with the specified callback function
-and user data pointer:</p>
-
-<pre class='example'>
-#include &lt;cups/array.h&gt;
-
-static int compare_func(void *first, void *second, void *user_data);
-
-void *user_data;
-<a href='#cups_array_t'>cups_array_t</a> *array = <a href='#cupsArrayNew'>cupsArrayNew</a>(compare_func, user_data);
-</pre>
-
-<p>The comparison function (type
-<a href="#cups_arrayfunc_t"><code>cups_arrayfunc_t</code></a>) is called
-whenever an element is added to the array and can be <code>NULL</code> to
-create an unsorted array. The function returns -1 if the first element should
-come before the second, 0 if the first and second elements should have the same
-ordering, and 1 if the first element should come after the second.</p>
-
-<p>The "user_data" pointer is passed to your comparison function. Pass
-<code>NULL</code> if you do not need to associate the elements in your array
-with additional information.</p>
-
-<p>The <a href='#cupsArrayNew2'><code>cupsArrayNew2</code></a> function adds
-two more arguments to support hashed lookups, which can potentially provide
-instantaneous ("O(1)") lookups in your array:</p>
-
-<pre class='example'>
-#include &lt;cups/array.h&gt;
-
-#define HASH_SIZE 512 /* Size of hash table */
-
-static int compare_func(void *first, void *second, void *user_data);
-static int hash_func(void *element, void *user_data);
-
-void *user_data;
-<a href='#cups_array_t'>cups_array_t</a> *hash_array = <a href='#cupsArrayNew2'>cupsArrayNew2</a>(compare_func, user_data, hash_func, HASH_SIZE);
-</pre>
-
-<p>The hash function (type
-<a href="#cups_ahash_func_t"><code>cups_ahash_func_t</code></a>) should return a
-number from 0 to (hash_size-1) that (hopefully) uniquely identifies the
-element and is called whenever you look up an element in the array with
-<a href='#cupsArrayFind'><code>cupsArrayFind</code></a>. The hash size is
-only limited by available memory, but generally should not be larger than
-16384 to realize any performance improvement.</p>
-
-<p>The <a href='#cupsArrayNew3'><code>cupsArrayNew3</code></a> function adds
-copy and free callbacks to support basic memory management of elements:</p>
-
-<pre class='example'>
-#include &lt;cups/array.h&gt;
-
-#define HASH_SIZE 512 /* Size of hash table */
-
-static int compare_func(void *first, void *second, void *user_data);
-static void *copy_func(void *element, void *user_data);
-static void free_func(void *element, void *user_data);
-static int hash_func(void *element, void *user_data);
-
-void *user_data;
-<a href='#cups_array_t'>cups_array_t</a> *array = <a href='#cupsArrayNew3'>cupsArrayNew3</a>(compare_func, user_data, NULL, 0, copy_func, free_func);
-
-<a href='#cups_array_t'>cups_array_t</a> *hash_array = <a href='#cupsArrayNew3'>cupsArrayNew3</a>(compare_func, user_data, hash_func, HASH_SIZE, copy_func, free_func);
-</pre>
-
-<p>Once you have created the array, you add elements using the
-<a href='#cupsArrayAdd'><code>cupsArrayAdd</code></a>
-<a href='#cupsArrayInsert'><code>cupsArrayInsert</code></a> functions.
-The first function adds an element to the array, adding the new element
-after any elements that have the same order, while the second inserts the
-element before others with the same order. For unsorted arrays,
-<a href='#cupsArrayAdd'><code>cupsArrayAdd</code></a> appends the element to
-the end of the array while
-<a href='#cupsArrayInsert'><code>cupsArrayInsert</code></a> inserts the
-element at the beginning of the array. For example, the following code
-creates a sorted array of character strings:</p>
-
-<pre class='example'>
-#include &lt;cups/array.h&gt;
-
-/* Use strcmp() to compare strings - it will ignore the user_data pointer */
-<a href='#cups_array_t'>cups_array_t</a> *array = <a href='#cupsArrayNew'>cupsArrayNew</a>((<a href='#cups_array_func_t'>cups_array_func_t</a>)strcmp, NULL);
-
-/* Add four strings to the array */
-<a href='#cupsArrayAdd'>cupsArrayAdd</a>(array, "One Fish");
-<a href='#cupsArrayAdd'>cupsArrayAdd</a>(array, "Two Fish");
-<a href='#cupsArrayAdd'>cupsArrayAdd</a>(array, "Red Fish");
-<a href='#cupsArrayAdd'>cupsArrayAdd</a>(array, "Blue Fish");
-</pre>
-
-<p>Elements are removed using the
-<a href='#cupsArrayRemove'><code>cupsArrayRemove</code></a> function, for
-example:</p>
-
-<pre class='example'>
-#include &lt;cups/array.h&gt;
-
-/* Use strcmp() to compare strings - it will ignore the user_data pointer */
-<a href='#cups_array_t'>cups_array_t</a> *array = <a href='#cupsArrayNew'>cupsArrayNew</a>((<a href='#cups_array_func_t'>cups_array_func_t</a>)strcmp, NULL);
-
-/* Add four strings to the array */
-<a href='#cupsArrayAdd'>cupsArrayAdd</a>(array, "One Fish");
-<a href='#cupsArrayAdd'>cupsArrayAdd</a>(array, "Two Fish");
-<a href='#cupsArrayAdd'>cupsArrayAdd</a>(array, "Red Fish");
-<a href='#cupsArrayAdd'>cupsArrayAdd</a>(array, "Blue Fish");
-
-/* Remove "Red Fish" */
-<a href='#cupsArrayRemove'>cupsArrayRemove</a>(array, "Red Fish");
-</pre>
-
-<p>Finally, you free the memory used by the array using the
-<a href='#cupsArrayDelete'><code>cupsArrayDelete</code></a> function. All
-of the memory for the array and hash table (if any) is freed, however <em>CUPS
-does not free the elements unless you provide copy and free functions</em>.</p>
-
-<h3><a name='FINDING_AND_ENUMERATING'>Finding and Enumerating Elements</a></h3>
-
-<p>CUPS provides several functions to find and enumerate elements in an
-array. Each one sets or updates a "current index" into the array, such that
-future lookups will start where the last one left off:</p>
-
-<dl>
- <dt><a href='#cupsArrayFind'><code>cupsArrayFind</code></a></dt>
- <dd>Returns the first matching element.</dd>
- <dt><a href='#cupsArrayFirst'><code>cupsArrayFirst</code></a></dt>
- <dd>Returns the first element in the array.</dd>
- <dt><a href='#cupsArrayIndex'><code>cupsArrayIndex</code></a></dt>
- <dd>Returns the Nth element in the array, starting at 0.</dd>
- <dt><a href='#cupsArrayLast'><code>cupsArrayLast</code></a></dt>
- <dd>Returns the last element in the array.</dd>
- <dt><a href='#cupsArrayNext'><code>cupsArrayNext</code></a></dt>
- <dd>Returns the next element in the array.</dd>
- <dt><a href='#cupsArrayPrev'><code>cupsArrayPrev</code></a></dt>
- <dd>Returns the previous element in the array.</dd>
-</dl>
-
-<p>Each of these functions returns <code>NULL</code> when there is no
-corresponding element. For example, a simple <code>for</code> loop using the
-<a href='#cupsArrayFirst'><code>cupsArrayFirst</code></a> and
-<a href='#cupsArrayNext'><code>cupsArrayNext</code></a> functions will
-enumerate all of the strings in our previous example:</p>
-
-<pre class='example'>
-#include &lt;cups/array.h&gt;
-
-/* Use strcmp() to compare strings - it will ignore the user_data pointer */
-<a href='#cups_array_t'>cups_array_t</a> *array = <a href='#cupsArrayNew'>cupsArrayNew</a>((<a href='#cups_array_func_t'>cups_array_func_t</a>)strcmp, NULL);
-
-/* Add four strings to the array */
-<a href='#cupsArrayAdd'>cupsArrayAdd</a>(array, "One Fish");
-<a href='#cupsArrayAdd'>cupsArrayAdd</a>(array, "Two Fish");
-<a href='#cupsArrayAdd'>cupsArrayAdd</a>(array, "Red Fish");
-<a href='#cupsArrayAdd'>cupsArrayAdd</a>(array, "Blue Fish");
-
-/* Show all of the strings in the array */
-char *s;
-for (s = (char *)<a href='#cupsArrayFirst'>cupsArrayFirst</a>(array); s != NULL; s = (char *)<a href='#cupsArrayNext'>cupsArrayNext</a>(array))
- puts(s);
-</pre>
-<h2 class="title"><a name="FUNCTIONS">Functions</a></h2>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsArrayAdd">cupsArrayAdd</a></h3>
-<p class="description">Add an element to the array.</p>
-<p class="code">
-int cupsArrayAdd (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_array_t">cups_array_t</a> *a,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;void *e<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>a</dt>
-<dd class="description">Array</dd>
-<dt>e</dt>
-<dd class="description">Element</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">When adding an element to a sorted array, non-unique elements are
-appended at the end of the run of identical elements. For unsorted arrays,
-the element is appended to the end of the array.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsArrayClear">cupsArrayClear</a></h3>
-<p class="description">Clear the array.</p>
-<p class="code">
-void cupsArrayClear (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_array_t">cups_array_t</a> *a<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>a</dt>
-<dd class="description">Array</dd>
-</dl>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function is equivalent to removing all elements in the array.
-The caller is responsible for freeing the memory used by the
-elements themselves.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsArrayCount">cupsArrayCount</a></h3>
-<p class="description">Get the number of elements in the array.</p>
-<p class="code">
-int cupsArrayCount (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_array_t">cups_array_t</a> *a<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>a</dt>
-<dd class="description">Array</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of elements</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsArrayCurrent">cupsArrayCurrent</a></h3>
-<p class="description">Return the current element in the array.</p>
-<p class="code">
-void *cupsArrayCurrent (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_array_t">cups_array_t</a> *a<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>a</dt>
-<dd class="description">Array</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Element</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The current element is undefined until you call <a href="#cupsArrayFind"><code>cupsArrayFind</code></a>,
-<a href="#cupsArrayFirst"><code>cupsArrayFirst</code></a>, or <a href="#cupsArrayIndex"><code>cupsArrayIndex</code></a>, or <a href="#cupsArrayLast"><code>cupsArrayLast</code></a>.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsArrayDelete">cupsArrayDelete</a></h3>
-<p class="description">Free all memory used by the array.</p>
-<p class="code">
-void cupsArrayDelete (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_array_t">cups_array_t</a> *a<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>a</dt>
-<dd class="description">Array</dd>
-</dl>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The caller is responsible for freeing the memory used by the
-elements themselves.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsArrayDup">cupsArrayDup</a></h3>
-<p class="description">Duplicate the array.</p>
-<p class="code">
-<a href="#cups_array_t">cups_array_t</a> *cupsArrayDup (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_array_t">cups_array_t</a> *a<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>a</dt>
-<dd class="description">Array</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Duplicate array</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsArrayFind">cupsArrayFind</a></h3>
-<p class="description">Find an element in the array.</p>
-<p class="code">
-void *cupsArrayFind (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_array_t">cups_array_t</a> *a,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;void *e<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>a</dt>
-<dd class="description">Array</dd>
-<dt>e</dt>
-<dd class="description">Element</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Element found or <code>NULL</code></p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsArrayFirst">cupsArrayFirst</a></h3>
-<p class="description">Get the first element in the array.</p>
-<p class="code">
-void *cupsArrayFirst (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_array_t">cups_array_t</a> *a<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>a</dt>
-<dd class="description">Array</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">First element or <code>NULL</code> if the array is empty</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.3/macOS 10.5&nbsp;</span><a name="cupsArrayGetIndex">cupsArrayGetIndex</a></h3>
-<p class="description">Get the index of the current element.</p>
-<p class="code">
-int cupsArrayGetIndex (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_array_t">cups_array_t</a> *a<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>a</dt>
-<dd class="description">Array</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Index of the current element, starting at 0</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The current element is undefined until you call <a href="#cupsArrayFind"><code>cupsArrayFind</code></a>,
-<a href="#cupsArrayFirst"><code>cupsArrayFirst</code></a>, or <a href="#cupsArrayIndex"><code>cupsArrayIndex</code></a>, or <a href="#cupsArrayLast"><code>cupsArrayLast</code></a>.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.3/macOS 10.5&nbsp;</span><a name="cupsArrayGetInsert">cupsArrayGetInsert</a></h3>
-<p class="description">Get the index of the last inserted element.</p>
-<p class="code">
-int cupsArrayGetInsert (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_array_t">cups_array_t</a> *a<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>a</dt>
-<dd class="description">Array</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Index of the last inserted element, starting at 0</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsArrayIndex">cupsArrayIndex</a></h3>
-<p class="description">Get the N-th element in the array.</p>
-<p class="code">
-void *cupsArrayIndex (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_array_t">cups_array_t</a> *a,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int n<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>a</dt>
-<dd class="description">Array</dd>
-<dt>n</dt>
-<dd class="description">Index into array, starting at 0</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">N-th element or <code>NULL</code></p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsArrayInsert">cupsArrayInsert</a></h3>
-<p class="description">Insert an element in the array.</p>
-<p class="code">
-int cupsArrayInsert (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_array_t">cups_array_t</a> *a,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;void *e<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>a</dt>
-<dd class="description">Array</dd>
-<dt>e</dt>
-<dd class="description">Element</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">0 on failure, 1 on success</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">When inserting an element in a sorted array, non-unique elements are
-inserted at the beginning of the run of identical elements. For unsorted
-arrays, the element is inserted at the beginning of the array.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsArrayLast">cupsArrayLast</a></h3>
-<p class="description">Get the last element in the array.</p>
-<p class="code">
-void *cupsArrayLast (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_array_t">cups_array_t</a> *a<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>a</dt>
-<dd class="description">Array</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Last element or <code>NULL</code> if the array is empty</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsArrayNew">cupsArrayNew</a></h3>
-<p class="description">Create a new array.</p>
-<p class="code">
-<a href="#cups_array_t">cups_array_t</a> *cupsArrayNew (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_array_func_t">cups_array_func_t</a> f,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;void *d<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>f</dt>
-<dd class="description">Comparison function or <code>NULL</code> for an unsorted array</dd>
-<dt>d</dt>
-<dd class="description">User data pointer or <code>NULL</code></dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Array</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The comparison function (&quot;f&quot;) is used to create a sorted array. The function
-receives pointers to two elements and the user data pointer (&quot;d&quot;) - the user
-data pointer argument can safely be omitted when not required so functions
-like <code>strcmp</code> can be used for sorted string arrays.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.3/macOS 10.5&nbsp;</span><a name="cupsArrayNew2">cupsArrayNew2</a></h3>
-<p class="description">Create a new array with hash.</p>
-<p class="code">
-<a href="#cups_array_t">cups_array_t</a> *cupsArrayNew2 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_array_func_t">cups_array_func_t</a> f,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;void *d,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_ahash_func_t">cups_ahash_func_t</a> h,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int hsize<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>f</dt>
-<dd class="description">Comparison function or <code>NULL</code> for an unsorted array</dd>
-<dt>d</dt>
-<dd class="description">User data or <code>NULL</code></dd>
-<dt>h</dt>
-<dd class="description">Hash function or <code>NULL</code> for unhashed lookups</dd>
-<dt>hsize</dt>
-<dd class="description">Hash size (&gt;= 0)</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Array</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The comparison function (&quot;f&quot;) is used to create a sorted array. The function
-receives pointers to two elements and the user data pointer (&quot;d&quot;) - the user
-data pointer argument can safely be omitted when not required so functions
-like <code>strcmp</code> can be used for sorted string arrays.<br>
-<br>
-The hash function (&quot;h&quot;) is used to implement cached lookups with the
-specified hash size (&quot;hsize&quot;).
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.5/macOS 10.7&nbsp;</span><a name="cupsArrayNew3">cupsArrayNew3</a></h3>
-<p class="description">Create a new array with hash and/or free function.</p>
-<p class="code">
-<a href="#cups_array_t">cups_array_t</a> *cupsArrayNew3 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_array_func_t">cups_array_func_t</a> f,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;void *d,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_ahash_func_t">cups_ahash_func_t</a> h,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int hsize,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_acopy_func_t">cups_acopy_func_t</a> cf,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_afree_func_t">cups_afree_func_t</a> ff<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>f</dt>
-<dd class="description">Comparison function or <code>NULL</code> for an unsorted array</dd>
-<dt>d</dt>
-<dd class="description">User data or <code>NULL</code></dd>
-<dt>h</dt>
-<dd class="description">Hash function or <code>NULL</code> for unhashed lookups</dd>
-<dt>hsize</dt>
-<dd class="description">Hash size (&gt;= 0)</dd>
-<dt>cf</dt>
-<dd class="description">Copy function</dd>
-<dt>ff</dt>
-<dd class="description">Free function</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Array</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The comparison function (&quot;f&quot;) is used to create a sorted array. The function
-receives pointers to two elements and the user data pointer (&quot;d&quot;) - the user
-data pointer argument can safely be omitted when not required so functions
-like <code>strcmp</code> can be used for sorted string arrays.<br>
-<br>
-The hash function (&quot;h&quot;) is used to implement cached lookups with the
-specified hash size (&quot;hsize&quot;).<br>
-<br>
-The copy function (&quot;cf&quot;) is used to automatically copy/retain elements when
-added or the array is copied.<br>
-<br>
-The free function (&quot;cf&quot;) is used to automatically free/release elements when
-removed or the array is deleted.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsArrayNext">cupsArrayNext</a></h3>
-<p class="description">Get the next element in the array.</p>
-<p class="code">
-void *cupsArrayNext (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_array_t">cups_array_t</a> *a<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>a</dt>
-<dd class="description">Array</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Next element or <code>NULL</code></p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function is equivalent to &quot;cupsArrayIndex(a, cupsArrayGetIndex(a) + 1)&quot;.<br>
-<br>
-The next element is undefined until you call <a href="#cupsArrayFind"><code>cupsArrayFind</code></a>,
-<a href="#cupsArrayFirst"><code>cupsArrayFirst</code></a>, or <a href="#cupsArrayIndex"><code>cupsArrayIndex</code></a>, or <a href="#cupsArrayLast"><code>cupsArrayLast</code></a>
-to set the current element.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsArrayPrev">cupsArrayPrev</a></h3>
-<p class="description">Get the previous element in the array.</p>
-<p class="code">
-void *cupsArrayPrev (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_array_t">cups_array_t</a> *a<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>a</dt>
-<dd class="description">Array</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Previous element or <code>NULL</code></p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function is equivalent to &quot;cupsArrayIndex(a, cupsArrayGetIndex(a) - 1)&quot;.<br>
-<br>
-The previous element is undefined until you call <a href="#cupsArrayFind"><code>cupsArrayFind</code></a>,
-<a href="#cupsArrayFirst"><code>cupsArrayFirst</code></a>, or <a href="#cupsArrayIndex"><code>cupsArrayIndex</code></a>, or <a href="#cupsArrayLast"><code>cupsArrayLast</code></a>
-to set the current element.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsArrayRemove">cupsArrayRemove</a></h3>
-<p class="description">Remove an element from the array.</p>
-<p class="code">
-int cupsArrayRemove (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_array_t">cups_array_t</a> *a,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;void *e<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>a</dt>
-<dd class="description">Array</dd>
-<dt>e</dt>
-<dd class="description">Element</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">If more than one element matches &quot;e&quot;, only the first matching element is
-removed.<br>
-<br>
-The caller is responsible for freeing the memory used by the
-removed element.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsArrayRestore">cupsArrayRestore</a></h3>
-<p class="description">Reset the current element to the last <a href="#cupsArraySave"><code>cupsArraySave</code></a>.</p>
-<p class="code">
-void *cupsArrayRestore (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_array_t">cups_array_t</a> *a<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>a</dt>
-<dd class="description">Array</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New current element</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsArraySave">cupsArraySave</a></h3>
-<p class="description">Mark the current element for a later <a href="#cupsArrayRestore"><code>cupsArrayRestore</code></a>.</p>
-<p class="code">
-int cupsArraySave (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_array_t">cups_array_t</a> *a<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>a</dt>
-<dd class="description">Array</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The current element is undefined until you call <a href="#cupsArrayFind"><code>cupsArrayFind</code></a>,
-<a href="#cupsArrayFirst"><code>cupsArrayFirst</code></a>, or <a href="#cupsArrayIndex"><code>cupsArrayIndex</code></a>, or <a href="#cupsArrayLast"><code>cupsArrayLast</code></a>
-to set the current element.<br>
-<br>
-The save/restore stack is guaranteed to be at least 32 elements deep.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsArrayUserData">cupsArrayUserData</a></h3>
-<p class="description">Return the user data for an array.</p>
-<p class="code">
-void *cupsArrayUserData (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_array_t">cups_array_t</a> *a<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>a</dt>
-<dd class="description">Array</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">User data</p>
-<h2 class="title"><a name="TYPES">Data Types</a></h2>
-<h3 class="typedef"><a name="cups_acopy_func_t">cups_acopy_func_t</a></h3>
-<p class="description">Array element copy function</p>
-<p class="code">
-typedef void *(*cups_acopy_func_t)(void *element, void *data);
-</p>
-<h3 class="typedef"><a name="cups_afree_func_t">cups_afree_func_t</a></h3>
-<p class="description">Array element free function</p>
-<p class="code">
-typedef void (*cups_afree_func_t)(void *element, void *data);
-</p>
-<h3 class="typedef"><a name="cups_ahash_func_t">cups_ahash_func_t</a></h3>
-<p class="description">Array hash function</p>
-<p class="code">
-typedef int (*cups_ahash_func_t)(void *element, void *data);
-</p>
-<h3 class="typedef"><a name="cups_array_func_t">cups_array_func_t</a></h3>
-<p class="description">Array comparison function</p>
-<p class="code">
-typedef int (*cups_array_func_t)(void *first, void *second, void *data);
-</p>
-<h3 class="typedef"><a name="cups_array_t">cups_array_t</a></h3>
-<p class="description">CUPS array type</p>
-<p class="code">
-typedef struct _cups_array_s cups_array_t;
-</p>
-</div>
-</body>
-</html>
diff --git a/doc/help/api-cups.html b/doc/help/api-cups.html
deleted file mode 100644
index d95025b..0000000
--- a/doc/help/api-cups.html
+++ /dev/null
@@ -1,3607 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<!-- SECTION: Programming -->
-<head>
- <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">
-<style type="text/css"><!--
-BODY {
- font-family: lucida grande, geneva, helvetica, arial, sans-serif;
-}
-
-H1, H2, H3, H4, H5, H6, P, TD, TH {
- font-family: lucida grande, geneva, helvetica, arial, sans-serif;
-}
-
-KBD {
- font-family: monaco, courier, monospace;
- font-weight: bold;
-}
-
-PRE {
- font-family: monaco, courier, monospace;
-}
-
-PRE.command {
- border: dotted thin #7f7f7f;
- margin-left: 36pt;
- padding: 10px;
-}
-
-P.compact {
- margin: 0;
-}
-
-P.example {
- font-style: italic;
- margin-left: 36pt;
-}
-
-DL.man DD {
- margin-left: 5em;
-}
-
-DL.man DT {
- margin-left: 0;
-}
-
-PRE.man {
- margin: 0;
-}
-
-PRE.example {
- background: #eeeeee;
- border: dotted thin #999999;
- margin-left: 36pt;
- padding: 10pt;
-}
-
-PRE.command EM, PRE.example EM {
- font-family: lucida grande, geneva, helvetica, arial, sans-serif;
-}
-
-P.command {
- font-family: monaco, courier, monospace;
- margin-left: 36pt;
-}
-
-P.formula {
- font-style: italic;
- margin-left: 36pt;
-}
-
-BLOCKQUOTE {
- background: #eeeeee;
- border: solid thin #999999;
- padding: 10pt;
-}
-
-A IMG {
- border: none;
-}
-
-A:link:hover IMG {
- background: #f0f0f0;
- border-radius: 10px;
- -moz-border-radius: 10px;
-}
-
-A:link, A:visited {
- font-weight: inherit;
- text-decoration: none;
-}
-
-A:link:hover, A:visited:hover, A:active {
- text-decoration: underline;
-}
-
-SUB, SUP {
- font-size: 50%;
-}
-
-TR.data, TD.data, TR.data TD {
- margin-top: 10pt;
- padding: 5pt;
- border-bottom: solid 1pt #999999;
-}
-
-TR.data TH {
- border-bottom: solid 1pt #999999;
- padding-top: 10pt;
- padding-left: 5pt;
- text-align: left;
-}
-
-DIV.table TABLE {
- border: solid thin #999999;
- border-collapse: collapse;
- border-spacing: 0;
- margin-left: auto;
- margin-right: auto;
-}
-
-DIV.table CAPTION {
- caption-side: top;
- font-size: 120%;
- font-style: italic;
- font-weight: bold;
- margin-left: auto;
- margin-right: auto;
-}
-
-DIV.table TABLE TD {
- border: solid thin #cccccc;
- padding-top: 5pt;
-}
-
-DIV.table TABLE TH {
- background: #cccccc;
- border: none;
- border-bottom: solid thin #999999;
-}
-
-DIV.figure TABLE {
- margin-left: auto;
- margin-right: auto;
-}
-
-DIV.figure CAPTION {
- caption-side: bottom;
- font-size: 120%;
- font-style: italic;
- font-weight: bold;
- margin-left: auto;
- margin-right: auto;
-}
-
-TH.label {
- text-align: right;
- vertical-align: top;
-}
-
-TH.sublabel {
- text-align: right;
- font-weight: normal;
-}
-
-HR {
- border: solid thin;
-}
-
-SPAN.info {
- background: black;
- border: thin solid black;
- color: white;
- font-size: 80%;
- font-style: italic;
- font-weight: bold;
- white-space: nowrap;
-}
-
-H2 SPAN.info, H3 SPAN.info, H4 SPAN.info {
- float: right;
- font-size: 100%;
-}
-
-H1.title {
-}
-
-H2.title, H3.title {
- border-bottom: solid 2pt #000000;
-}
-
-DIV.indent, TABLE.indent {
- margin-top: 2em;
- margin-left: auto;
- margin-right: auto;
- width: 90%;
-}
-
-TABLE.indent {
- border-collapse: collapse;
-}
-
-TABLE.indent TD, TABLE.indent TH {
- padding: 0;
-}
-
-TABLE.list {
- border-collapse: collapse;
- margin-left: auto;
- margin-right: auto;
- width: 90%;
-}
-
-TABLE.list TH {
- background: white;
- border-bottom: solid thin #cccccc;
- color: #444444;
- padding-top: 10pt;
- padding-left: 5pt;
- text-align: left;
- vertical-align: bottom;
- white-space: nowrap;
-}
-
-TABLE.list TH A {
- color: #4444cc;
-}
-
-TABLE.list TD {
- border-bottom: solid thin #eeeeee;
- padding-top: 5pt;
- padding-left: 5pt;
-}
-
-TABLE.list TR:nth-child(even) {
- background: #f8f8f8;
-}
-
-TABLE.list TR:nth-child(odd) {
- background: #f4f4f4;
-}
-
-DT {
- margin-left: 36pt;
- margin-top: 12pt;
-}
-
-DD {
- margin-left: 54pt;
-}
-
-DL.category DT {
- font-weight: bold;
-}
-
-P.summary {
- margin-left: 36pt;
- font-family: monaco, courier, monospace;
-}
-
-DIV.summary TABLE {
- border: solid thin #999999;
- border-collapse: collapse;
- border-spacing: 0;
- margin: 10px;
-}
-
-DIV.summary TABLE TD, DIV.summary TABLE TH {
- border: solid thin #999999;
- padding: 5px;
- text-align: left;
- vertical-align: top;
-}
-
-DIV.summary TABLE THEAD TH {
- background: #eeeeee;
-}
-
-/* API documentation styles... */
-div.body h1 {
- margin: 0;
-}
-div.body h2 {
- margin-top: 1.5em;
-}
-div.body h3, div.body h4, div.body h5 {
- margin-bottom: 0.5em;
- margin-top: 1.5em;
-}
-.class, .enumeration, .function, .struct, .typedef, .union {
- border-bottom: solid thin #999999;
- margin-bottom: 0;
- margin-top: 2em;
-}
-.description {
- margin-top: 0.5em;
-}
-code, p.code, pre, ul.code li {
- font-family: monaco, courier, monospace;
- font-size: 90%;
-}
-ul.code, ul.contents, ul.subcontents {
- list-style-type: none;
- margin: 0;
- padding-left: 0;
-}
-ul.code li {
- margin: 0;
-}
-ul.contents > li {
- margin-top: 1em;
-}
-ul.contents li ul.code, ul.contents li ul.subcontents {
- padding-left: 2em;
-}
-div.body dl {
- margin-left: 0;
- margin-top: 0;
-}
-div.body dt {
- font-style: italic;
- margin-left: 0;
- margin-top: 0;
-}
-div.body dd {
- margin-bottom: 0.5em;
-}
-
-/* This is just for the HTML files generated with the framedhelp target */
-div.contents {
- background: #e8e8e8;
- border: solid thin black;
- padding: 10px;
-}
-div.contents h1 {
- font-size: 110%;
-}
-div.contents h2 {
- font-size: 100%;
-}
-div.contents ul.contents {
- font-size: 80%;
-}
-div.contents ul.subcontents li {
- margin-left: 1em;
- text-indent: -1em;
-}
---></style>
-</head>
-<body>
-<div class='body'>
-<!--
- CUPS API header for CUPS.
-
- Copyright 2008-2011 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/".
--->
-
-<h1 class='title'>CUPS API</h1>
-
-<div class='summary'><table summary='General Information'>
-<thead>
-<tr>
- <th>Header</th>
- <th>cups/cups.h</th>
-</tr>
-</thead>
-<tbody>
-<tr>
- <th>Library</th>
- <td>-lcups</td>
-</tr>
-<tr>
- <th>See Also</th>
- <td>Programming: <a href='api-overview.html' target='_top'>Introduction to CUPS Programming</a><br>
- Programming: <a href='api-array.html' target='_top'>Array API</a><br>
- Programming: <a href='api-filedir.html' target='_top'>File and Directory APIs</a><br>
- Programming: <a href='api-filter.html' target='_top'>Filter and Backend Programming</a><br>
- Programming: <a href='api-httpipp.html' target='_top'>HTTP and IPP APIs</a><br>
- Programming: <a href='api-ppd.html' target='_top'>PPD API</a><br>
- Programming: <a href='api-raster.html' target='_top'>Raster API</a></td>
-</tr>
-</tbody>
-</table></div>
-<h2 class="title">Contents</h2>
-<ul class="contents">
-<li><a href="#OVERVIEW">Overview</a><ul class="subcontents">
- <li><a href="#CLIENTS_AND_SERVERS">Clients and Servers</a></li>
- <li><a href="#PRINTERS_AND_CLASSES">Printers and Classes</a></li>
- <li><a href="#OPTIONS">Options</a></li>
- <li><a href="#PRINT_JOBS">Print Jobs</a></li>
- <li><a href="#ERROR_HANDLING">Error Handling</a></li>
- <li><a href="#PASSWORDS_AND_AUTHENTICATION">Passwords and Authentication</a></li>
-</ul></li>
-<li><a href="#FUNCTIONS">Functions</a><ul class="code">
- <li><a href="#cupsAddDest" title="Add a destination to the list of destinations.">cupsAddDest</a></li>
- <li><a href="#cupsAddOption" title="Add an option to an option array.">cupsAddOption</a></li>
- <li><a href="#cupsAdminCreateWindowsPPD" title="Create the Windows PPD file for a printer.">cupsAdminCreateWindowsPPD</a></li>
- <li><a href="#cupsAdminExportSamba" title="Export a printer to Samba.">cupsAdminExportSamba</a></li>
- <li><a href="#cupsAdminGetServerSettings" title="Get settings from the server.">cupsAdminGetServerSettings</a></li>
- <li><a href="#cupsAdminSetServerSettings" title="Set settings on the server.">cupsAdminSetServerSettings</a></li>
- <li><a href="#cupsCancelDestJob" title="Include necessary headers...">cupsCancelDestJob</a></li>
- <li><a href="#cupsCancelJob" title="Cancel a print job on the default server.">cupsCancelJob</a></li>
- <li><a href="#cupsCancelJob2" title="Cancel or purge a print job.">cupsCancelJob2</a></li>
- <li><a href="#cupsCheckDestSupported" title="Check that the option and value are supported
-by the destination.">cupsCheckDestSupported</a></li>
- <li><a href="#cupsCloseDestJob" title="Close a job and start printing.">cupsCloseDestJob</a></li>
- <li><a href="#cupsConnectDest" title="Connect to the server for a destination.">cupsConnectDest</a></li>
- <li><a href="#cupsConnectDestBlock" title="Connect to the server for a destination.">cupsConnectDestBlock</a></li>
- <li><a href="#cupsCopyDest" title="Callback block">cupsCopyDest</a></li>
- <li><a href="#cupsCopyDestConflicts" title="Get conflicts and resolutions for a new
-option/value pair.">cupsCopyDestConflicts</a></li>
- <li><a href="#cupsCopyDestInfo" title="Get the supported values/capabilities for the
-destination.">cupsCopyDestInfo</a></li>
- <li><a href="#cupsCreateDestJob" title="Create a job on a destination.">cupsCreateDestJob</a></li>
- <li><a href="#cupsCreateJob" title="Create an empty job for streaming.">cupsCreateJob</a></li>
- <li><a href="#cupsEncryption" title="Get the current encryption settings.">cupsEncryption</a></li>
- <li><a href="#cupsEnumDests" title="Enumerate available destinations with a callback function.">cupsEnumDests</a></li>
- <li><a href="#cupsEnumDestsBlock" title="Enumerate available destinations with a block.">cupsEnumDestsBlock</a></li>
- <li><a href="#cupsFindDestDefault" title="Find the default value(s) for the given option.">cupsFindDestDefault</a></li>
- <li><a href="#cupsFindDestReady" title="Find the default value(s) for the given option.">cupsFindDestReady</a></li>
- <li><a href="#cupsFindDestSupported" title="Find the default value(s) for the given option.">cupsFindDestSupported</a></li>
- <li><a href="#cupsFinishDestDocument" title="Finish the current document.">cupsFinishDestDocument</a></li>
- <li><a href="#cupsFinishDocument" title="Finish sending a document.">cupsFinishDocument</a></li>
- <li><a href="#cupsFreeDestInfo" title="Free destination information obtained using
-cupsCopyDestInfo.">cupsFreeDestInfo</a></li>
- <li><a href="#cupsFreeDests" title="Free the memory used by the list of destinations.">cupsFreeDests</a></li>
- <li><a href="#cupsFreeJobs" title="Free memory used by job data.">cupsFreeJobs</a></li>
- <li><a href="#cupsFreeOptions" title="Free all memory used by options.">cupsFreeOptions</a></li>
- <li><a href="#cupsGetClasses" title="Get a list of printer classes from the default server.">cupsGetClasses</a></li>
- <li><a href="#cupsGetDefault" title="Get the default printer or class for the default server.">cupsGetDefault</a></li>
- <li><a href="#cupsGetDefault2" title="Get the default printer or class for the specified server.">cupsGetDefault2</a></li>
- <li><a href="#cupsGetDest" title="Get the named destination from the list.">cupsGetDest</a></li>
- <li><a href="#cupsGetDestMediaByIndex" title="Get a media name, dimension, and margins for a
-specific size.">cupsGetDestMediaByIndex</a></li>
- <li><a href="#cupsGetDestMediaByName" title="Get media names, dimensions, and margins.">cupsGetDestMediaByName</a></li>
- <li><a href="#cupsGetDestMediaBySize" title="Get media names, dimensions, and margins.">cupsGetDestMediaBySize</a></li>
- <li><a href="#cupsGetDestMediaCount" title="Get the number of sizes supported by a
-destination.">cupsGetDestMediaCount</a></li>
- <li><a href="#cupsGetDestMediaDefault" title="Get the default size for a destination.">cupsGetDestMediaDefault</a></li>
- <li><a href="#cupsGetDestWithURI" title="Get a destination associated with a URI.">cupsGetDestWithURI</a></li>
- <li><a href="#cupsGetDests" title="Get the list of destinations from the default server.">cupsGetDests</a></li>
- <li><a href="#cupsGetDests2" title="Get the list of destinations from the specified server.">cupsGetDests2</a></li>
- <li><a href="#cupsGetJobs" title="Get the jobs from the default server.">cupsGetJobs</a></li>
- <li><a href="#cupsGetJobs2" title="Get the jobs from the specified server.">cupsGetJobs2</a></li>
- <li><a href="#cupsGetNamedDest" title="Get options for the named destination.">cupsGetNamedDest</a></li>
- <li><a href="#cupsGetOption" title="Get an option value.">cupsGetOption</a></li>
- <li><a href="#cupsGetPassword" title="Get a password from the user.">cupsGetPassword</a></li>
- <li><a href="#cupsGetPassword2" title="Get a password from the user using the advanced
-password callback.">cupsGetPassword2</a></li>
- <li><a href="#cupsGetPrinters" title="Get a list of printers from the default server.">cupsGetPrinters</a></li>
- <li><a href="#cupsLangDefault" title="Return the default language.">cupsLangDefault</a></li>
- <li><a href="#cupsLangEncoding" title="Return the character encoding (us-ascii, etc.)
-for the given language.">cupsLangEncoding</a></li>
- <li><a href="#cupsLangFlush" title="Flush all language data out of the cache.">cupsLangFlush</a></li>
- <li><a href="#cupsLangFree" title="Free language data.">cupsLangFree</a></li>
- <li><a href="#cupsLangGet" title="Get a language.">cupsLangGet</a></li>
- <li><a href="#cupsLocalizeDestMedia" title="Get the localized string for a destination media
-size.">cupsLocalizeDestMedia</a></li>
- <li><a href="#cupsLocalizeDestOption" title="Get the localized string for a destination
-option.">cupsLocalizeDestOption</a></li>
- <li><a href="#cupsLocalizeDestValue" title="Get the localized string for a destination
-option+value pair.">cupsLocalizeDestValue</a></li>
- <li><a href="#cupsNotifySubject" title="Return the subject for the given notification message.">cupsNotifySubject</a></li>
- <li><a href="#cupsNotifyText" title="Return the text for the given notification message.">cupsNotifyText</a></li>
- <li><a href="#cupsParseOptions" title="Parse options from a command-line argument.">cupsParseOptions</a></li>
- <li><a href="#cupsPrintFile" title="Print a file to a printer or class on the default server.">cupsPrintFile</a></li>
- <li><a href="#cupsPrintFile2" title="Print a file to a printer or class on the specified
-server.">cupsPrintFile2</a></li>
- <li><a href="#cupsPrintFiles" title="Print one or more files to a printer or class on the
-default server.">cupsPrintFiles</a></li>
- <li><a href="#cupsPrintFiles2" title="Print one or more files to a printer or class on the
-specified server.">cupsPrintFiles2</a></li>
- <li><a href="#cupsRemoveDest" title="Remove a destination from the destination list.">cupsRemoveDest</a></li>
- <li><a href="#cupsRemoveOption" title="Remove an option from an option array.">cupsRemoveOption</a></li>
- <li><a href="#cupsServer" title="Return the hostname/address of the current server.">cupsServer</a></li>
- <li><a href="#cupsSetClientCertCB" title="Set the client certificate callback.">cupsSetClientCertCB</a></li>
- <li><a href="#cupsSetCredentials" title="Set the default credentials to be used for SSL/TLS
-connections.">cupsSetCredentials</a></li>
- <li><a href="#cupsSetDefaultDest" title="Set the default destination.">cupsSetDefaultDest</a></li>
- <li><a href="#cupsSetDests" title="Save the list of destinations for the default server.">cupsSetDests</a></li>
- <li><a href="#cupsSetDests2" title="Save the list of destinations for the specified server.">cupsSetDests2</a></li>
- <li><a href="#cupsSetEncryption" title="Set the encryption preference.">cupsSetEncryption</a></li>
- <li><a href="#cupsSetPasswordCB" title="Set the password callback for CUPS.">cupsSetPasswordCB</a></li>
- <li><a href="#cupsSetPasswordCB2" title="Set the advanced password callback for CUPS.">cupsSetPasswordCB2</a></li>
- <li><a href="#cupsSetServer" title="Set the default server name and port.">cupsSetServer</a></li>
- <li><a href="#cupsSetServerCertCB" title="Set the server certificate callback.">cupsSetServerCertCB</a></li>
- <li><a href="#cupsSetUser" title="Set the default user name.">cupsSetUser</a></li>
- <li><a href="#cupsSetUserAgent" title="Set the default HTTP User-Agent string.">cupsSetUserAgent</a></li>
- <li><a href="#cupsStartDestDocument" title="Start a new document.">cupsStartDestDocument</a></li>
- <li><a href="#cupsStartDocument" title="Add a document to a job created with cupsCreateJob().">cupsStartDocument</a></li>
- <li><a href="#cupsTempFd" title="Creates a temporary file.">cupsTempFd</a></li>
- <li><a href="#cupsTempFile" title="Generates a temporary filename.">cupsTempFile</a></li>
- <li><a href="#cupsTempFile2" title="Creates a temporary CUPS file.">cupsTempFile2</a></li>
- <li><a href="#cupsUser" title="Return the current user's name.">cupsUser</a></li>
- <li><a href="#cupsUserAgent" title="Return the default HTTP User-Agent string.">cupsUserAgent</a></li>
- <li><a href="#pwgFormatSizeName" title="Generate a PWG self-describing media size name.">pwgFormatSizeName</a></li>
- <li><a href="#pwgInitSize" title="Initialize a pwg_size_t structure using IPP Job Template
-attributes.">pwgInitSize</a></li>
- <li><a href="#pwgMediaForLegacy" title="Find a PWG media size by ISO/IPP legacy name.">pwgMediaForLegacy</a></li>
- <li><a href="#pwgMediaForPPD" title="Find a PWG media size by Adobe PPD name.">pwgMediaForPPD</a></li>
- <li><a href="#pwgMediaForPWG" title="Find a PWG media size by 5101.1 self-describing name.">pwgMediaForPWG</a></li>
- <li><a href="#pwgMediaForSize" title="Get the PWG media size for the given dimensions.">pwgMediaForSize</a></li>
-</ul></li>
-<li><a href="#TYPES">Data Types</a><ul class="code">
- <li><a href="#cups_client_cert_cb_t" title="Client credentials callback
-">cups_client_cert_cb_t</a></li>
- <li><a href="#cups_dest_block_t" title="Destination enumeration block
-">cups_dest_block_t</a></li>
- <li><a href="#cups_dest_cb_t" title="Destination enumeration callback
-">cups_dest_cb_t</a></li>
- <li><a href="#cups_dest_t" title="Destination">cups_dest_t</a></li>
- <li><a href="#cups_dinfo_t" title="Destination capability and status
-information ">cups_dinfo_t</a></li>
- <li><a href="#cups_job_t" title="Job">cups_job_t</a></li>
- <li><a href="#cups_option_t" title="Printer Options">cups_option_t</a></li>
- <li><a href="#cups_password_cb2_t" title="New password callback
-">cups_password_cb2_t</a></li>
- <li><a href="#cups_password_cb_t" title="Password callback">cups_password_cb_t</a></li>
- <li><a href="#cups_ptype_t" title="Printer type/capability bits">cups_ptype_t</a></li>
- <li><a href="#cups_server_cert_cb_t" title="Server credentials callback
-">cups_server_cert_cb_t</a></li>
- <li><a href="#cups_size_t" title="Media Size ">cups_size_t</a></li>
- <li><a href="#pwg_map_t" title="Map element - PPD to/from PWG">pwg_map_t</a></li>
- <li><a href="#pwg_media_t" title="Common media size data">pwg_media_t</a></li>
- <li><a href="#pwg_size_t" title="Size element - PPD to/from PWG">pwg_size_t</a></li>
-</ul></li>
-<li><a href="#STRUCTURES">Structures</a><ul class="code">
- <li><a href="#cups_dest_s" title="Destination">cups_dest_s</a></li>
- <li><a href="#cups_job_s" title="Job">cups_job_s</a></li>
- <li><a href="#cups_option_s" title="Printer Options">cups_option_s</a></li>
- <li><a href="#cups_size_s" title="Media Size ">cups_size_s</a></li>
- <li><a href="#pollfd" title="User data (unused)">pollfd</a></li>
- <li><a href="#pwg_map_s" title="Map element - PPD to/from PWG">pwg_map_s</a></li>
- <li><a href="#pwg_media_s" title="Common media size data">pwg_media_s</a></li>
- <li><a href="#pwg_size_s" title="Size element - PPD to/from PWG">pwg_size_s</a></li>
-</ul></li>
-<li><a href="#VARIABLES">Variables</a><ul class="code">
- <li><a href="#CF_RETURNS_RETAINED" title="Get the Apple language identifier associated with a
-locale ID.">CF_RETURNS_RETAINED</a></li>
-</ul></li>
-<li><a href="#ENUMERATIONS">Constants</a><ul class="code">
- <li><a href="#cups_ptype_e" title="Printer type/capability bit
-constants">cups_ptype_e</a></li>
-</ul></li>
-</ul>
-<!--
- API introduction for CUPS.
-
- Copyright 2007-2013 by Apple Inc.
- Copyright 1997-2006 by Easy Software Products, all rights reserved.
-
- 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/".
--->
-
-<h2 class='title'><a name='OVERVIEW'>Overview</a></h2>
-
-<p>The CUPS API provides the convenience functions needed to support
-applications, filters, printer drivers, and backends that need to interface
-with the CUPS scheduler.</p>
-
-<h3><a name='CLIENTS_AND_SERVERS'>Clients and Servers</a></h3>
-
-<p>CUPS is based on the Internet Printing Protocol ("IPP"), which allows
-clients (applications) to communicate with a server (the scheduler) to get a
-list of printers, send print jobs, and so forth. You identify which server
-you want to communicate with using a pointer to the opaque structure
-<code>http_t</code>. All of the examples in this document use the
-<code>CUPS_HTTP_DEFAULT</code> constant, referring to the default connection
-to the scheduler. The <a href='api-httpipp.html' target='_top'>HTTP and IPP
-APIs</a> document provides more information on server connections.</p>
-
-<h3><a name='PRINTERS_AND_CLASSES'>Printers and Classes</a></h3>
-
-<p>Printers and classes (collections of printers) are accessed through
-the <a href="#cups_dest_t"><code>cups_dest_t</code></a> structure which
-includes the name (<code>name</code>), instance (<code>instance</code> -
-a way of selecting certain saved options/settings), and the options and
-attributes associated with that destination (<code>num_options</code> and
-<code>options</code>). Destinations are created using the
-<a href="#cupsGetDests"><code>cupsGetDests</code></a> function and freed
-using the <a href='#cupsFreeDests'><code>cupsFreeDests</code></a> function.
-The <a href='#cupsGetDest'><code>cupsGetDest</code></a> function finds a
-specific destination for printing:</p>
-
-<pre class='example'>
-#include &lt;cups/cups.h&gt;
-
-<a href='#cups_dest_t'>cups_dest_t</a> *dests;
-int num_dests = <a href='#cupsGetDests'>cupsGetDests</a>(&amp;dests);
-<a href='#cups_dest_t'>cups_dest_t</a> *dest = <a href='#cupsGetDest'>cupsGetDest</a>("name", NULL, num_dests, dests);
-
-/* do something with dest */
-
-<a href='#cupsFreeDests'>cupsFreeDests</a>(num_dests, dests);
-</pre>
-
-<p>Passing <code>NULL</code> to
-<a href='#cupsGetDest'><code>cupsGetDest</code></a> for the destination name
-will return the default destination. Similarly, passing a <code>NULL</code>
-instance will return the default instance for that destination.</p>
-
-<div class='table'><table summary='Table 1: Printer Attributes' width='80%'>
-<caption>Table 1: <a name='TABLE1'>Printer Attributes</a></caption>
-<thead>
-<tr>
- <th>Attribute Name</th>
- <th>Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
- <td>"auth-info-required"</td>
- <td>The type of authentication required for printing to this
- destination: "none", "username,password", "domain,username,password",
- or "negotiate" (Kerberos)</td>
-</tr>
-<tr>
- <td>"printer-info"</td>
- <td>The human-readable description of the destination such as "My
- Laser Printer".</td>
-</tr>
-<tr>
- <td>"printer-is-accepting-jobs"</td>
- <td>"true" if the destination is accepting new jobs, "false" if
- not.</td>
-</tr>
-<tr>
- <td>"printer-is-shared"</td>
- <td>"true" if the destination is being shared with other computers,
- "false" if not.</td>
-</tr>
-<tr>
- <td>"printer-location"</td>
- <td>The human-readable location of the destination such as "Lab 4".</td>
-</tr>
-<tr>
- <td>"printer-make-and-model"</td>
- <td>The human-readable make and model of the destination such as "HP
- LaserJet 4000 Series".</td>
-</tr>
-<tr>
- <td>"printer-state"</td>
- <td>"3" if the destination is idle, "4" if the destination is printing
- a job, and "5" if the destination is stopped.</td>
-</tr>
-<tr>
- <td>"printer-state-change-time"</td>
- <td>The UNIX time when the destination entered the current state.</td>
-</tr>
-<tr>
- <td>"printer-state-reasons"</td>
- <td>Additional comma-delimited state keywords for the destination
- such as "media-tray-empty-error" and "toner-low-warning".</td>
-</tr>
-<tr>
- <td>"printer-type"</td>
- <td>The <a href='#cups_printer_t'><code>cups_printer_t</code></a>
- value associated with the destination.</td>
-</tr>
-</tbody>
-</table></div>
-
-<h3><a name='OPTIONS'>Options</a></h3>
-
-<p>Options are stored in arrays of
-<a href='#cups_option_t'><code>cups_option_t</code></a> structures. Each
-option has a name (<code>name</code>) and value (<code>value</code>)
-associated with it. The <a href='#cups_dest_t'><code>cups_dest_t</code></a>
-<code>num_options</code> and <code>options</code> members contain the
-default options for a particular destination, along with several informational
-attributes about the destination as shown in <a href='#TABLE1'>Table 1</a>.
-The <a href='#cupsGetOption'><code>cupsGetOption</code></a> function gets
-the value for the named option. For example, the following code lists the
-available destinations and their human-readable descriptions:</p>
-
-<pre class='example'>
-#include &lt;cups/cups.h&gt;
-
-<a href='#cups_dest_t'>cups_dest_t</a> *dests;
-int num_dests = <a href='#cupsGetDests'>cupsGetDests</a>(&amp;dests);
-<a href='#cups_dest_t'>cups_dest_t</a> *dest;
-int i;
-const char *value;
-
-for (i = num_dests, dest = dests; i > 0; i --, dest ++)
- if (dest->instance == NULL)
- {
- value = <a href='#cupsGetOption'>cupsGetOption</a>("printer-info", dest->num_options, dest->options);
- printf("%s (%s)\n", dest->name, value ? value : "no description");
- }
-
-<a href='#cupsFreeDests'>cupsFreeDests</a>(num_dests, dests);
-</pre>
-
-<p>You can create your own option arrays using the
-<a href='#cupsAddOption'><code>cupsAddOption</code></a> function, which
-adds a single named option to an array:</p>
-
-<pre class='example'>
-#include &lt;cups/cups.h&gt;
-
-int num_options = 0;
-<a href='#cups_option_t'>cups_option_t</a> *options = NULL;
-
-/* The returned num_options value is updated as needed */
-num_options = <a href='#cupsAddOption'>cupsAddOption</a>("first", "value", num_options, &amp;options);
-
-/* This adds a second option value */
-num_options = <a href='#cupsAddOption'>cupsAddOption</a>("second", "value", num_options, &amp;options);
-
-/* This replaces the first option we added */
-num_options = <a href='#cupsAddOption'>cupsAddOption</a>("first", "new value", num_options, &amp;options);
-</pre>
-
-<p>Use a <code>for</code> loop to copy the options from a destination:</p>
-
-<pre class='example'>
-#include &lt;cups/cups.h&gt;
-
-int i;
-int num_options = 0;
-<a href='#cups_option_t'>cups_option_t</a> *options = NULL;
-<a href='#cups_dest_t'>cups_dest_t</a> *dest;
-
-for (i = 0; i &lt; dest->num_options; i ++)
- num_options = <a href='#cupsAddOption'>cupsAddOption</a>(dest->options[i].name, dest->options[i].value,
- num_options, &amp;options);
-</pre>
-
-<p>Use the <a href='#cupsFreeOptions'><code>cupsFreeOptions</code></a>
-function to free the options array when you are done using it:</p>
-
-<pre class='example'>
-<a href='#cupsFreeOptions'>cupsFreeOptions</a>(num_options, options);
-</pre>
-
-<h3><a name='PRINT_JOBS'>Print Jobs</a></h3>
-
-<p>Print jobs are identified by a locally-unique job ID number from 1 to
-2<sup>31</sup>-1 and have options and one or more files for printing to a
-single destination. The <a href='#cupsPrintFile'><code>cupsPrintFile</code></a>
-function creates a new job with one file. The following code prints the CUPS
-test page file:</p>
-
-<pre class='example'>
-#include &lt;cups/cups.h&gt;
-
-<a href='#cups_dest_t'>cups_dest_t</a> *dest;
-int num_options;
-<a href='#cups_option_t'>cups_option_t</a> *options;
-int job_id;
-
-/* Print a single file */
-job_id = <a href='#cupsPrintFile'>cupsPrintFile</a>(dest->name, "/usr/share/cups/data/testprint.ps",
- "Test Print", num_options, options);
-</pre>
-
-<p>The <a href='#cupsPrintFiles'><code>cupsPrintFiles</code></a> function
-creates a job with multiple files. The files are provided in a
-<code>char *</code> array:</p>
-
-<pre class='example'>
-#include &lt;cups/cups.h&gt;
-
-<a href='#cups_dest_t'>cups_dest_t</a> *dest;
-int num_options;
-<a href='#cups_option_t'>cups_option_t</a> *options;
-int job_id;
-char *files[3] = { "file1.pdf", "file2.pdf", "file3.pdf" };
-
-/* Print three files */
-job_id = <a href='#cupsPrintFiles'>cupsPrintFiles</a>(dest->name, 3, files, "Test Print", num_options, options);
-</pre>
-
-<p>Finally, the <a href='#cupsCreateJob'><code>cupsCreateJob</code></a>
-function creates a new job with no files in it. Files are added using the
-<a href='#cupsStartDocument'><code>cupsStartDocument</code></a>,
-<a href='api-httpipp.html#cupsWriteRequestData'><code>cupsWriteRequestData</code></a>,
-and <a href='#cupsFinishDocument'><code>cupsFinishDocument</code></a> functions.
-The following example creates a job with 10 text files for printing:</p>
-
-<pre class='example'>
-#include &lt;cups/cups.h&gt;
-
-<a href='#cups_dest_t'>cups_dest_t</a> *dest;
-int num_options;
-<a href='#cups_option_t'>cups_option_t</a> *options;
-int job_id;
-int i;
-char buffer[1024];
-
-/* Create the job */
-job_id = <a href='#cupsCreateJob'>cupsCreateJob</a>(CUPS_HTTP_DEFAULT, dest->name, "10 Text Files",
- num_options, options);
-
-/* If the job is created, add 10 files */
-if (job_id > 0)
-{
- for (i = 1; i &lt;= 10; i ++)
- {
- snprintf(buffer, sizeof(buffer), "file%d.txt", i);
-
- <a href='#cupsStartDocument'>cupsStartDocument</a>(CUPS_HTTP_DEFAULT, dest->name, job_id, buffer,
- CUPS_FORMAT_TEXT, i == 10);
-
- snprintf(buffer, sizeof(buffer),
- "File %d\n"
- "\n"
- "One fish,\n"
- "Two fish,\n
- "Red fish,\n
- "Blue fish\n", i);
-
- /* cupsWriteRequestData can be called as many times as needed */
- <a href='#cupsWriteRequestData'>cupsWriteRequestData</a>(CUPS_HTTP_DEFAULT, buffer, strlen(buffer));
-
- <a href='#cupsFinishDocument'>cupsFinishDocument</a>(CUPS_HTTP_DEFAULT, dest->name);
- }
-}
-</pre>
-
-<p>Once you have created a job, you can monitor its status using the
-<a href='#cupsGetJobs'><code>cupsGetJobs</code></a> function, which returns
-an array of <a href='#cups_job_t'><code>cups_job_t</code></a> structures.
-Each contains the job ID (<code>id</code>), destination name
-(<code>dest</code>), title (<code>title</code>), and other information
-associated with the job. The job array is freed using the
-<a href='#cupsFreeJobs'><code>cupsFreeJobs</code></a> function. The following
-example monitors a specific job ID, showing the current job state once every
-5 seconds until the job is completed:</p>
-
-<pre class='example'>
-#include &lt;cups/cups.h&gt;
-
-<a href='#cups_dest_t'>cups_dest_t</a> *dest;
-int job_id;
-int num_jobs;
-<a href='#cups_job_t'>cups_job_t</a> *jobs;
-int i;
-ipp_jstate_t job_state = IPP_JOB_PENDING;
-
-while (job_state &lt; IPP_JOB_STOPPED)
-{
- /* Get my jobs (1) with any state (-1) */
- num_jobs = <a href='#cupsGetJobs'>cupsGetJobs</a>(&amp;jobs, dest->name, 1, -1);
-
- /* Loop to find my job */
- job_state = IPP_JOB_COMPLETED;
-
- for (i = 0; i &lt; num_jobs; i ++)
- if (jobs[i].id == job_id)
- {
- job_state = jobs[i].state;
- break;
- }
-
- /* Free the job array */
- <a href='#cupsFreeJobs'>cupsFreeJobs</a>(num_jobs, jobs);
-
- /* Show the current state */
- switch (job_state)
- {
- case IPP_JOB_PENDING :
- printf("Job %d is pending.\n", job_id);
- break;
- case IPP_JOB_HELD :
- printf("Job %d is held.\n", job_id);
- break;
- case IPP_JOB_PROCESSING :
- printf("Job %d is processing.\n", job_id);
- break;
- case IPP_JOB_STOPPED :
- printf("Job %d is stopped.\n", job_id);
- break;
- case IPP_JOB_CANCELED :
- printf("Job %d is canceled.\n", job_id);
- break;
- case IPP_JOB_ABORTED :
- printf("Job %d is aborted.\n", job_id);
- break;
- case IPP_JOB_COMPLETED :
- printf("Job %d is completed.\n", job_id);
- break;
- }
-
- /* Sleep if the job is not finished */
- if (job_state &lt; IPP_JOB_STOPPED)
- sleep(5);
-}
-</pre>
-
-<p>To cancel a job, use the
-<a href='#cupsCancelJob'><code>cupsCancelJob</code></a> function with the
-job ID:</p>
-
-<pre class='example'>
-#include &lt;cups/cups.h&gt;
-
-<a href='#cups_dest_t'>cups_dest_t</a> *dest;
-int job_id;
-
-<a href='#cupsCancelJob'>cupsCancelJob</a>(dest->name, job_id);
-</pre>
-
-<h3><a name='ERROR_HANDLING'>Error Handling</a></h3>
-
-<p>If any of the CUPS API printing functions returns an error, the reason for
-that error can be found by calling the
-<a href='#cupsLastError'><code>cupsLastError</code></a> and
-<a href='#cupsLastErrorString'><code>cupsLastErrorString</code></a> functions.
-<a href='#cupsLastError'><code>cupsLastError</code></a> returns the last IPP
-error code
-(<a href='api-httpipp.html#ipp_status_t'><code>ipp_status_t</code></a>)
-that was encountered, while
-<a href='#cupsLastErrorString'><code>cupsLastErrorString</code></a> returns
-a (localized) human-readable string that can be shown to the user. For example,
-if any of the job creation functions returns a job ID of 0, you can use
-<a href='#cupsLastErrorString'><code>cupsLastErrorString</code></a> to show
-the reason why the job could not be created:</p>
-
-<pre class='example'>
-#include &lt;cups/cups.h&gt;
-
-int job_id;
-
-if (job_id == 0)
- puts(cupsLastErrorString());
-</pre>
-
-<h3><a name='PASSWORDS_AND_AUTHENTICATION'>Passwords and Authentication</a></h3>
-
-<p>CUPS supports authentication of any request, including submission of print
-jobs. The default mechanism for getting the username and password is to use the
-login user and a password from the console.</p>
-
-<p>To support other types of applications, in particular Graphical User
-Interfaces ("GUIs"), the CUPS API provides functions to set the default
-username and to register a callback function that returns a password string.</p>
-
-<p>The <a href="#cupsSetPasswordCB"><code>cupsSetPasswordCB</code></a>
-function is used to set a password callback in your program. Only one
-function can be used at any time.</p>
-
-<p>The <a href="#cupsSetUser"><code>cupsSetUser</code></a> function sets the
-current username for authentication. This function can be called by your
-password callback function to change the current username as needed.</p>
-
-<p>The following example shows a simple password callback that gets a
-username and password from the user:</p>
-
-<pre class='example'>
-#include &lt;cups/cups.h&gt;
-
-const char *
-my_password_cb(const char *prompt)
-{
- char user[65];
-
-
- puts(prompt);
-
- /* Get a username from the user */
- printf("Username: ");
- if (fgets(user, sizeof(user), stdin) == NULL)
- return (NULL);
-
- /* Strip the newline from the string and set the user */
- user[strlen(user) - 1] = '\0';
-
- <a href='#cupsSetUser'>cupsSetUser</a>(user);
-
- /* Use getpass() to ask for the password... */
- return (getpass("Password: "));
-}
-
-<a href='#cupsSetPasswordCB'>cupsSetPasswordCB</a>(my_password_cb);
-</pre>
-
-<p>Similarly, a GUI could display the prompt string in a window with input
-fields for the username and password. The username should default to the
-string returned by the <a href="#cupsUser"><code>cupsUser</code></a>
-function.</p>
-<h2 class="title"><a name="FUNCTIONS">Functions</a></h2>
-<h3 class="function"><a name="cupsAddDest">cupsAddDest</a></h3>
-<p class="description">Add a destination to the list of destinations.</p>
-<p class="code">
-int cupsAddDest (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *instance,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_dests,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> **dests<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>name</dt>
-<dd class="description">Destination name</dd>
-<dt>instance</dt>
-<dd class="description">Instance name or <code>NULL</code> for none/primary</dd>
-<dt>num_dests</dt>
-<dd class="description">Number of destinations</dd>
-<dt>dests</dt>
-<dd class="description">Destinations</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New number of destinations</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function cannot be used to add a new class or printer queue,
-it only adds a new container of saved options for the named
-destination or instance.<br>
-<br>
-If the named destination already exists, the destination list is
-returned unchanged. Adding a new instance of a destination creates
-a copy of that destination's options.<br>
-<br>
-Use the <a href="#cupsSaveDests"><code>cupsSaveDests</code></a> function to save the updated list of
-destinations to the user's lpoptions file.</p>
-<h3 class="function"><a name="cupsAddOption">cupsAddOption</a></h3>
-<p class="description">Add an option to an option array.</p>
-<p class="code">
-int cupsAddOption (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *value,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_options,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_option_t">cups_option_t</a> **options<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>name</dt>
-<dd class="description">Name of option</dd>
-<dt>value</dt>
-<dd class="description">Value of option</dd>
-<dt>num_options</dt>
-<dd class="description">Number of options</dd>
-<dt>options</dt>
-<dd class="description">Pointer to options</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of options</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">New option arrays can be initialized simply by passing 0 for the
-&quot;num_options&quot; parameter.</p>
-<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="cupsAdminCreateWindowsPPD">cupsAdminCreateWindowsPPD</a></h3>
-<p class="description">Create the Windows PPD file for a printer.</p>
-<p class="code">
-char *cupsAdminCreateWindowsPPD (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *dest,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *buffer,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int bufsize<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>dest</dt>
-<dd class="description">Printer or class</dd>
-<dt>buffer</dt>
-<dd class="description">Filename buffer</dd>
-<dt>bufsize</dt>
-<dd class="description">Size of filename buffer</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">PPD file or NULL</p>
-<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="cupsAdminExportSamba">cupsAdminExportSamba</a></h3>
-<p class="description">Export a printer to Samba.</p>
-<p class="code">
-int cupsAdminExportSamba (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *dest,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *ppd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *samba_server,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *samba_user,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *samba_password,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;FILE *logfile<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>dest</dt>
-<dd class="description">Destination to export</dd>
-<dt>ppd</dt>
-<dd class="description">PPD file</dd>
-<dt>samba_server</dt>
-<dd class="description">Samba server</dd>
-<dt>samba_user</dt>
-<dd class="description">Samba username</dd>
-<dt>samba_password</dt>
-<dd class="description">Samba password</dd>
-<dt>logfile</dt>
-<dd class="description">Log file, if any</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.3/macOS 10.5&nbsp;</span><a name="cupsAdminGetServerSettings">cupsAdminGetServerSettings</a></h3>
-<p class="description">Get settings from the server.</p>
-<p class="code">
-int cupsAdminGetServerSettings (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int *num_settings,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_option_t">cups_option_t</a> **settings<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>num_settings</dt>
-<dd class="description">Number of settings</dd>
-<dt>settings</dt>
-<dd class="description">Settings</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The returned settings should be freed with cupsFreeOptions() when
-you are done with them.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.3/macOS 10.5&nbsp;</span><a name="cupsAdminSetServerSettings">cupsAdminSetServerSettings</a></h3>
-<p class="description">Set settings on the server.</p>
-<p class="code">
-int cupsAdminSetServerSettings (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_settings,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_option_t">cups_option_t</a> *settings<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>num_settings</dt>
-<dd class="description">Number of settings</dd>
-<dt>settings</dt>
-<dd class="description">Settings</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h3 class="function"><a name="cupsCancelDestJob">cupsCancelDestJob</a></h3>
-<p class="description">Include necessary headers...</p>
-<p class="code">
-ipp_status_t cupsCancelDestJob (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> *dest,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int job_id<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to destination</dd>
-<dt>dest</dt>
-<dd class="description">Destination</dd>
-<dt>job_id</dt>
-<dd class="description">Job ID</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Cancel a job on a destination.</p>
-<p class="discussion">The &quot;job_id&quot; is the number returned by cupsCreateDestJob.<br>
-<br>
-Returns <code>IPP_STATUS_OK</code> on success and
-<code>IPP_STATUS_ERRPR_NOT_AUTHORIZED</code> or
-<code>IPP_STATUS_ERROR_FORBIDDEN</code> on failure.
-
-</p>
-<h3 class="function"><a name="cupsCancelJob">cupsCancelJob</a></h3>
-<p class="description">Cancel a print job on the default server.</p>
-<p class="code">
-int cupsCancelJob (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int job_id<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>name</dt>
-<dd class="description">Name of printer or class</dd>
-<dt>job_id</dt>
-<dd class="description">Job ID, <code>CUPS_JOBID_CURRENT</code> for the current job, or <code>CUPS_JOBID_ALL</code> for all jobs</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Pass <code>CUPS_JOBID_ALL</code> to cancel all jobs or <code>CUPS_JOBID_CURRENT</code>
-to cancel the current job on the named destination.<br>
-<br>
-Use the <a href="#cupsLastError"><code>cupsLastError</code></a> and <a href="#cupsLastErrorString"><code>cupsLastErrorString</code></a> functions to get
-the cause of any failure.</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span><a name="cupsCancelJob2">cupsCancelJob2</a></h3>
-<p class="description">Cancel or purge a print job.</p>
-<p class="code">
-ipp_status_t cupsCancelJob2 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int job_id,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int purge<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>name</dt>
-<dd class="description">Name of printer or class</dd>
-<dt>job_id</dt>
-<dd class="description">Job ID, <code>CUPS_JOBID_CURRENT</code> for the current job, or <code>CUPS_JOBID_ALL</code> for all jobs</dd>
-<dt>purge</dt>
-<dd class="description">1 to purge, 0 to cancel</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">IPP status</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Canceled jobs remain in the job history while purged jobs are removed
-from the job history.<br>
-<br>
-Pass <code>CUPS_JOBID_ALL</code> to cancel all jobs or <code>CUPS_JOBID_CURRENT</code>
-to cancel the current job on the named destination.<br>
-<br>
-Use the <a href="#cupsLastError"><code>cupsLastError</code></a> and <a href="#cupsLastErrorString"><code>cupsLastErrorString</code></a> functions to get
-the cause of any failure.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="cupsCheckDestSupported">cupsCheckDestSupported</a></h3>
-<p class="description">Check that the option and value are supported
-by the destination.</p>
-<p class="code">
-int cupsCheckDestSupported (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> *dest,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dinfo_t">cups_dinfo_t</a> *dinfo,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *option,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *value<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to destination</dd>
-<dt>dest</dt>
-<dd class="description">Destination</dd>
-<dt>dinfo</dt>
-<dd class="description">Destination information</dd>
-<dt>option</dt>
-<dd class="description">Option</dd>
-<dt>value</dt>
-<dd class="description">Value</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 if supported, 0 otherwise</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Returns 1 if supported, 0 otherwise.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="cupsCloseDestJob">cupsCloseDestJob</a></h3>
-<p class="description">Close a job and start printing.</p>
-<p class="code">
-ipp_status_t cupsCloseDestJob (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> *dest,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dinfo_t">cups_dinfo_t</a> *info,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int job_id<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to destination</dd>
-<dt>dest</dt>
-<dd class="description">Destination</dd>
-<dt>info</dt>
-<dd class="description">Destination information</dd>
-<dt>job_id</dt>
-<dd class="description">Job ID</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">IPP status code</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Use when the last call to cupsStartDocument passed 0 for &quot;last_document&quot;.
-&quot;job_id&quot; is the job ID returned by cupsCreateDestJob. Returns <code>IPP_STATUS_OK</code>
-on success.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="cupsConnectDest">cupsConnectDest</a></h3>
-<p class="description">Connect to the server for a destination.</p>
-<p class="code">
-http_t *cupsConnectDest (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> *dest,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned flags,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int msec,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int *cancel,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *resource,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;size_t resourcesize,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_cb_t">cups_dest_cb_t</a> cb,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;void *user_data<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>dest</dt>
-<dd class="description">Destination</dd>
-<dt>flags</dt>
-<dd class="description">Connection flags</dd>
-<dt>msec</dt>
-<dd class="description">Timeout in milliseconds</dd>
-<dt>cancel</dt>
-<dd class="description">Pointer to &quot;cancel&quot; variable</dd>
-<dt>resource</dt>
-<dd class="description">Resource buffer</dd>
-<dt>resourcesize</dt>
-<dd class="description">Size of resource buffer</dd>
-<dt>cb</dt>
-<dd class="description">Callback function</dd>
-<dt>user_data</dt>
-<dd class="description">User data pointer</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Connection to server or <code>NULL</code></p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Connect to the destination, returning a new http_t connection object and
-optionally the resource path to use for the destination. These calls will
-block until a connection is made, the timeout expires, the integer pointed
-to by &quot;cancel&quot; is non-zero, or the callback function (or block) returns 0,
-The caller is responsible for calling httpClose() on the returned object.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="cupsConnectDestBlock">cupsConnectDestBlock</a></h3>
-<p class="description">Connect to the server for a destination.</p>
-<p class="code">
-http_t *cupsConnectDestBlock (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> *dest,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned flags,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int msec,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int *cancel,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *resource,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;size_t resourcesize,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_block_t">cups_dest_block_t</a> block<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>dest</dt>
-<dd class="description">Destination</dd>
-<dt>flags</dt>
-<dd class="description">Connection flags</dd>
-<dt>msec</dt>
-<dd class="description">Timeout in milliseconds</dd>
-<dt>cancel</dt>
-<dd class="description">Pointer to &quot;cancel&quot; variable</dd>
-<dt>resource</dt>
-<dd class="description">Resource buffer</dd>
-<dt>resourcesize</dt>
-<dd class="description">Size of resource buffer</dd>
-<dt>block</dt>
-<dd class="description">Callback block</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Connection to server or <code>NULL</code></p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Connect to the destination, returning a new http_t connection object and
-optionally the resource path to use for the destination. These calls will
-block until a connection is made, the timeout expires, the integer pointed
-to by &quot;cancel&quot; is non-zero, or the callback function (or block) returns 0,
-The caller is responsible for calling httpClose() on the returned object.
-
-</p>
-<h3 class="function"><a name="cupsCopyDest">cupsCopyDest</a></h3>
-<p class="description">Callback block</p>
-<p class="code">
-int cupsCopyDest (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> *dest,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_dests,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> **dests<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>dest</dt>
-<dt>num_dests</dt>
-<dt>dests</dt>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Copy a destination.</p>
-<p class="discussion">Make a copy of the destination to an array of destinations (or just a single
-copy) - for use with the cupsEnumDests* functions. The caller is responsible
-for calling cupsFreeDests() on the returned object(s).
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="cupsCopyDestConflicts">cupsCopyDestConflicts</a></h3>
-<p class="description">Get conflicts and resolutions for a new
-option/value pair.</p>
-<p class="code">
-int cupsCopyDestConflicts (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> *dest,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dinfo_t">cups_dinfo_t</a> *dinfo,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_options,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_option_t">cups_option_t</a> *options,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *new_option,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *new_value,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int *num_conflicts,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_option_t">cups_option_t</a> **conflicts,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int *num_resolved,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_option_t">cups_option_t</a> **resolved<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to destination</dd>
-<dt>dest</dt>
-<dd class="description">Destination</dd>
-<dt>dinfo</dt>
-<dd class="description">Destination information</dd>
-<dt>num_options</dt>
-<dd class="description">Number of current options</dd>
-<dt>options</dt>
-<dd class="description">Current options</dd>
-<dt>new_option</dt>
-<dd class="description">New option</dd>
-<dt>new_value</dt>
-<dd class="description">New value</dd>
-<dt>num_conflicts</dt>
-<dd class="description">Number of conflicting options</dd>
-<dt>conflicts</dt>
-<dd class="description">Conflicting options</dd>
-<dt>num_resolved</dt>
-<dd class="description">Number of options to resolve</dd>
-<dt>resolved</dt>
-<dd class="description">Resolved options</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 if there is a conflict, 0 if none, -1 on error</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">&quot;num_options&quot; and &quot;options&quot; represent the currently selected options by the
-user. &quot;new_option&quot; and &quot;new_value&quot; are the setting the user has just
-changed.<br>
-<br>
-Returns 1 if there is a conflict, 0 if there are no conflicts, and -1 if
-there was an unrecoverable error such as a resolver loop.<br>
-<br>
-If &quot;num_conflicts&quot; and &quot;conflicts&quot; are not <code>NULL</code>, they are set to
-contain the list of conflicting option/value pairs. Similarly, if
-&quot;num_resolved&quot; and &quot;resolved&quot; are not <code>NULL</code> they will be set to the
-list of changes needed to resolve the conflict.<br>
-<br>
-If cupsCopyDestConflicts returns 1 but &quot;num_resolved&quot; and &quot;resolved&quot; are set
-to 0 and <code>NULL</code>, respectively, then the conflict cannot be resolved.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="cupsCopyDestInfo">cupsCopyDestInfo</a></h3>
-<p class="description">Get the supported values/capabilities for the
-destination.</p>
-<p class="code">
-<a href="#cups_dinfo_t">cups_dinfo_t</a> *cupsCopyDestInfo (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> *dest<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to destination</dd>
-<dt>dest</dt>
-<dd class="description">Destination</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Destination information</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The caller is responsible for calling <a href="#cupsFreeDestInfo"><code>cupsFreeDestInfo</code></a> on the return
-value. <code>NULL</code> is returned on error.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="cupsCreateDestJob">cupsCreateDestJob</a></h3>
-<p class="description">Create a job on a destination.</p>
-<p class="code">
-ipp_status_t cupsCreateDestJob (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> *dest,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dinfo_t">cups_dinfo_t</a> *info,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int *job_id,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *title,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_options,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_option_t">cups_option_t</a> *options<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to destination</dd>
-<dt>dest</dt>
-<dd class="description">Destination</dd>
-<dt>info</dt>
-<dd class="description">Destination information</dd>
-<dt>job_id</dt>
-<dd class="description">Job ID or 0 on error</dd>
-<dt>title</dt>
-<dd class="description">Job name</dd>
-<dt>num_options</dt>
-<dd class="description">Number of job options</dd>
-<dt>options</dt>
-<dd class="description">Job options</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">IPP status code</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Returns <code>IPP_STATUS_OK</code> or <code>IPP_STATUS_OK_SUBST</code> on success, saving the job ID
-in the variable pointed to by &quot;job_id&quot;.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span><a name="cupsCreateJob">cupsCreateJob</a></h3>
-<p class="description">Create an empty job for streaming.</p>
-<p class="code">
-int cupsCreateJob (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *title,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_options,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_option_t">cups_option_t</a> *options<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>name</dt>
-<dd class="description">Destination name</dd>
-<dt>title</dt>
-<dd class="description">Title of job</dd>
-<dt>num_options</dt>
-<dd class="description">Number of options</dd>
-<dt>options</dt>
-<dd class="description">Options</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Job ID or 0 on error</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Use this function when you want to stream print data using the
-<a href="#cupsStartDocument"><code>cupsStartDocument</code></a>, <a href="#cupsWriteRequestData"><code>cupsWriteRequestData</code></a>, and
-<a href="#cupsFinishDocument"><code>cupsFinishDocument</code></a> functions. If you have one or more files to
-print, use the <a href="#cupsPrintFile2"><code>cupsPrintFile2</code></a> or <a href="#cupsPrintFiles2"><code>cupsPrintFiles2</code></a> function
-instead.
-
-</p>
-<h3 class="function"><a name="cupsEncryption">cupsEncryption</a></h3>
-<p class="description">Get the current encryption settings.</p>
-<p class="code">
-http_encryption_t cupsEncryption (void);</p>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Encryption settings</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The default encryption setting comes from the CUPS_ENCRYPTION
-environment variable, then the ~/.cups/client.conf file, and finally the
-/etc/cups/client.conf file. If not set, the default is
-<code>HTTP_ENCRYPTION_IF_REQUESTED</code>.<br>
-<br>
-Note: The current encryption setting is tracked separately for each thread
-in a program. Multi-threaded programs that override the setting via the
-<a href="#cupsSetEncryption"><code>cupsSetEncryption</code></a> function need to do so in each thread for the same
-setting to be used.</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="cupsEnumDests">cupsEnumDests</a></h3>
-<p class="description">Enumerate available destinations with a callback function.</p>
-<p class="code">
-int cupsEnumDests (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned flags,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int msec,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int *cancel,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_ptype_t">cups_ptype_t</a> type,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_ptype_t">cups_ptype_t</a> mask,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_cb_t">cups_dest_cb_t</a> cb,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;void *user_data<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>flags</dt>
-<dd class="description">Enumeration flags</dd>
-<dt>msec</dt>
-<dd class="description">Timeout in milliseconds,
--1 for indefinite</dd>
-<dt>cancel</dt>
-<dd class="description">Pointer to &quot;cancel&quot; variable</dd>
-<dt>type</dt>
-<dd class="description">Printer type bits</dd>
-<dt>mask</dt>
-<dd class="description">Mask for printer type bits</dd>
-<dt>cb</dt>
-<dd class="description">Callback function</dd>
-<dt>user_data</dt>
-<dd class="description">User data</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Destinations are enumerated from one or more sources. The callback function
-receives the <code>user_data</code> pointer, destination name, instance, number of
-options, and options which can be used as input to the <a href="#cupsAddDest"><code>cupsAddDest</code></a>
-function. The function must return 1 to continue enumeration or 0 to stop.<br>
-<br>
-Enumeration happens on the current thread and does not return until all
-destinations have been enumerated or the callback function returns 0.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="cupsEnumDestsBlock">cupsEnumDestsBlock</a></h3>
-<p class="description">Enumerate available destinations with a block.</p>
-<p class="code">
-int cupsEnumDestsBlock (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned flags,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int timeout,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int *cancel,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_ptype_t">cups_ptype_t</a> type,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_ptype_t">cups_ptype_t</a> mask,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_block_t">cups_dest_block_t</a> block<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>flags</dt>
-<dd class="description">Enumeration flags</dd>
-<dt>timeout</dt>
-<dd class="description">Timeout in milliseconds, 0 for indefinite</dd>
-<dt>cancel</dt>
-<dd class="description">Pointer to &quot;cancel&quot; variable</dd>
-<dt>type</dt>
-<dd class="description">Printer type bits</dd>
-<dt>mask</dt>
-<dd class="description">Mask for printer type bits</dd>
-<dt>block</dt>
-<dd class="description">Block</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Destinations are enumerated from one or more sources. The block receives the
-destination name, instance, number of options, and options which can be used
-as input to the <a href="#cupsAddDest"><code>cupsAddDest</code></a> function. The block must return 1 to
-continue enumeration or 0 to stop.<br>
-<br>
-Enumeration happens on the current thread and does not return until all
-destinations have been enumerated or the block returns 0.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="cupsFindDestDefault">cupsFindDestDefault</a></h3>
-<p class="description">Find the default value(s) for the given option.</p>
-<p class="code">
-ipp_attribute_t *cupsFindDestDefault (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> *dest,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dinfo_t">cups_dinfo_t</a> *dinfo,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *option<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to destination</dd>
-<dt>dest</dt>
-<dd class="description">Destination</dd>
-<dt>dinfo</dt>
-<dd class="description">Destination information</dd>
-<dt>option</dt>
-<dd class="description">Option/attribute name</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Default attribute or <code>NULL</code> for none</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The returned value is an IPP attribute. Use the <code>ippGetBoolean</code>,
-<code>ippGetCollection</code>, <code>ippGetCount</code>, <code>ippGetDate</code>,
-<code>ippGetInteger</code>, <code>ippGetOctetString</code>, <code>ippGetRange</code>,
-<code>ippGetResolution</code>, <code>ippGetString</code>, and <code>ippGetValueTag</code>
-functions to inspect the default value(s) as needed.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="cupsFindDestReady">cupsFindDestReady</a></h3>
-<p class="description">Find the default value(s) for the given option.</p>
-<p class="code">
-ipp_attribute_t *cupsFindDestReady (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> *dest,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dinfo_t">cups_dinfo_t</a> *dinfo,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *option<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to destination</dd>
-<dt>dest</dt>
-<dd class="description">Destination</dd>
-<dt>dinfo</dt>
-<dd class="description">Destination information</dd>
-<dt>option</dt>
-<dd class="description">Option/attribute name</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Default attribute or <code>NULL</code> for none</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The returned value is an IPP attribute. Use the <code>ippGetBoolean</code>,
-<code>ippGetCollection</code>, <code>ippGetCount</code>, <code>ippGetDate</code>,
-<code>ippGetInteger</code>, <code>ippGetOctetString</code>, <code>ippGetRange</code>,
-<code>ippGetResolution</code>, <code>ippGetString</code>, and <code>ippGetValueTag</code>
-functions to inspect the default value(s) as needed.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="cupsFindDestSupported">cupsFindDestSupported</a></h3>
-<p class="description">Find the default value(s) for the given option.</p>
-<p class="code">
-ipp_attribute_t *cupsFindDestSupported (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> *dest,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dinfo_t">cups_dinfo_t</a> *dinfo,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *option<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to destination</dd>
-<dt>dest</dt>
-<dd class="description">Destination</dd>
-<dt>dinfo</dt>
-<dd class="description">Destination information</dd>
-<dt>option</dt>
-<dd class="description">Option/attribute name</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Default attribute or <code>NULL</code> for none</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The returned value is an IPP attribute. Use the <code>ippGetBoolean</code>,
-<code>ippGetCollection</code>, <code>ippGetCount</code>, <code>ippGetDate</code>,
-<code>ippGetInteger</code>, <code>ippGetOctetString</code>, <code>ippGetRange</code>,
-<code>ippGetResolution</code>, <code>ippGetString</code>, and <code>ippGetValueTag</code>
-functions to inspect the default value(s) as needed.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="cupsFinishDestDocument">cupsFinishDestDocument</a></h3>
-<p class="description">Finish the current document.</p>
-<p class="code">
-ipp_status_t cupsFinishDestDocument (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> *dest,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dinfo_t">cups_dinfo_t</a> *info<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to destination</dd>
-<dt>dest</dt>
-<dd class="description">Destination</dd>
-<dt>info</dt>
-<dd class="description">Destination information</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Status of document submission</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Returns <code>IPP_STATUS_OK</code> or <code>IPP_STATUS_OK_SUBST</code> on success.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span><a name="cupsFinishDocument">cupsFinishDocument</a></h3>
-<p class="description">Finish sending a document.</p>
-<p class="code">
-ipp_status_t cupsFinishDocument (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>name</dt>
-<dd class="description">Destination name</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Status of document submission</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The document must have been started using <a href="#cupsStartDocument"><code>cupsStartDocument</code></a>.
-
-</p>
-<h3 class="function"><a name="cupsFreeDestInfo">cupsFreeDestInfo</a></h3>
-<p class="description">Free destination information obtained using
-<a href="#cupsCopyDestInfo"><code>cupsCopyDestInfo</code></a>.</p>
-<p class="code">
-void cupsFreeDestInfo (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dinfo_t">cups_dinfo_t</a> *dinfo<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>dinfo</dt>
-<dd class="description">Destination information</dd>
-</dl>
-<h3 class="function"><a name="cupsFreeDests">cupsFreeDests</a></h3>
-<p class="description">Free the memory used by the list of destinations.</p>
-<p class="code">
-void cupsFreeDests (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_dests,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> *dests<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>num_dests</dt>
-<dd class="description">Number of destinations</dd>
-<dt>dests</dt>
-<dd class="description">Destinations</dd>
-</dl>
-<h3 class="function"><a name="cupsFreeJobs">cupsFreeJobs</a></h3>
-<p class="description">Free memory used by job data.</p>
-<p class="code">
-void cupsFreeJobs (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_jobs,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_job_t">cups_job_t</a> *jobs<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>num_jobs</dt>
-<dd class="description">Number of jobs</dd>
-<dt>jobs</dt>
-<dd class="description">Jobs</dd>
-</dl>
-<h3 class="function"><a name="cupsFreeOptions">cupsFreeOptions</a></h3>
-<p class="description">Free all memory used by options.</p>
-<p class="code">
-void cupsFreeOptions (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_options,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_option_t">cups_option_t</a> *options<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>num_options</dt>
-<dd class="description">Number of options</dd>
-<dt>options</dt>
-<dd class="description">Pointer to options</dd>
-</dl>
-<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="cupsGetClasses">cupsGetClasses</a></h3>
-<p class="description">Get a list of printer classes from the default server.</p>
-<p class="code">
-int cupsGetClasses (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char ***classes<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>classes</dt>
-<dd class="description">Classes</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of classes</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function is deprecated and no longer returns a list of printer
-classes - use <a href="#cupsGetDests"><code>cupsGetDests</code></a> instead.
-
-</p>
-<h3 class="function"><a name="cupsGetDefault">cupsGetDefault</a></h3>
-<p class="description">Get the default printer or class for the default server.</p>
-<p class="code">
-const char *cupsGetDefault (void);</p>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Default printer or <code>NULL</code></p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function returns the default printer or class as defined by
-the LPDEST or PRINTER environment variables. If these environment
-variables are not set, the server default destination is returned.
-Applications should use the <a href="#cupsGetDests"><code>cupsGetDests</code></a> and <a href="#cupsGetDest"><code>cupsGetDest</code></a>
-functions to get the user-defined default printer, as this function does
-not support the lpoptions-defined default printer.</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.1.21/macOS 10.4&nbsp;</span><a name="cupsGetDefault2">cupsGetDefault2</a></h3>
-<p class="description">Get the default printer or class for the specified server.</p>
-<p class="code">
-const char *cupsGetDefault2 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Default printer or <code>NULL</code></p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function returns the default printer or class as defined by
-the LPDEST or PRINTER environment variables. If these environment
-variables are not set, the server default destination is returned.
-Applications should use the <a href="#cupsGetDests"><code>cupsGetDests</code></a> and <a href="#cupsGetDest"><code>cupsGetDest</code></a>
-functions to get the user-defined default printer, as this function does
-not support the lpoptions-defined default printer.
-
-</p>
-<h3 class="function"><a name="cupsGetDest">cupsGetDest</a></h3>
-<p class="description">Get the named destination from the list.</p>
-<p class="code">
-<a href="#cups_dest_t">cups_dest_t</a> *cupsGetDest (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *instance,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_dests,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> *dests<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>name</dt>
-<dd class="description">Destination name or <code>NULL</code> for the default destination</dd>
-<dt>instance</dt>
-<dd class="description">Instance name or <code>NULL</code></dd>
-<dt>num_dests</dt>
-<dd class="description">Number of destinations</dd>
-<dt>dests</dt>
-<dd class="description">Destinations</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Destination pointer or <code>NULL</code></p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Use the <a href="#cupsGetDests"><code>cupsGetDests</code></a> or <a href="#cupsGetDests2"><code>cupsGetDests2</code></a> functions to get a
-list of supported destinations for the current user.</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="cupsGetDestMediaByIndex">cupsGetDestMediaByIndex</a></h3>
-<p class="description">Get a media name, dimension, and margins for a
-specific size.</p>
-<p class="code">
-int cupsGetDestMediaByIndex (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> *dest,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dinfo_t">cups_dinfo_t</a> *dinfo,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int n,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned flags,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_size_t">cups_size_t</a> *size<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to destination</dd>
-<dt>dest</dt>
-<dd class="description">Destination</dd>
-<dt>dinfo</dt>
-<dd class="description">Destination information</dd>
-<dt>n</dt>
-<dd class="description">Media size number (0-based)</dd>
-<dt>flags</dt>
-<dd class="description">Media flags</dd>
-<dt>size</dt>
-<dd class="description">Media size information</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>flags</code> parameter determines which set of media are indexed. For
-example, passing <code>CUPS_MEDIA_FLAGS_BORDERLESS</code> will get the Nth
-borderless size supported by the printer.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="cupsGetDestMediaByName">cupsGetDestMediaByName</a></h3>
-<p class="description">Get media names, dimensions, and margins.</p>
-<p class="code">
-int cupsGetDestMediaByName (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> *dest,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dinfo_t">cups_dinfo_t</a> *dinfo,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *media,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned flags,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_size_t">cups_size_t</a> *size<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to destination</dd>
-<dt>dest</dt>
-<dd class="description">Destination</dd>
-<dt>dinfo</dt>
-<dd class="description">Destination information</dd>
-<dt>media</dt>
-<dd class="description">Media name</dd>
-<dt>flags</dt>
-<dd class="description">Media matching flags</dd>
-<dt>size</dt>
-<dd class="description">Media size information</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on match, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The &quot;media&quot; string is a PWG media name. &quot;Flags&quot; provides some matching
-guidance (multiple flags can be combined):<br>
-<br>
-CUPS_MEDIA_FLAGS_DEFAULT = find the closest size supported by the printer,
-CUPS_MEDIA_FLAGS_BORDERLESS = find a borderless size,
-CUPS_MEDIA_FLAGS_DUPLEX = find a size compatible with 2-sided printing,
-CUPS_MEDIA_FLAGS_EXACT = find an exact match for the size, and
-CUPS_MEDIA_FLAGS_READY = if the printer supports media sensing, find the
-size amongst the &quot;ready&quot; media.<br>
-<br>
-The matching result (if any) is returned in the &quot;cups_size_t&quot; structure.<br>
-<br>
-Returns 1 when there is a match and 0 if there is not a match.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="cupsGetDestMediaBySize">cupsGetDestMediaBySize</a></h3>
-<p class="description">Get media names, dimensions, and margins.</p>
-<p class="code">
-int cupsGetDestMediaBySize (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> *dest,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dinfo_t">cups_dinfo_t</a> *dinfo,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int width,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int length,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned flags,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_size_t">cups_size_t</a> *size<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to destination</dd>
-<dt>dest</dt>
-<dd class="description">Destination</dd>
-<dt>dinfo</dt>
-<dd class="description">Destination information</dd>
-<dt>width</dt>
-<dd class="description">Media width in hundredths of
-of millimeters</dd>
-<dt>length</dt>
-<dd class="description">Media length in hundredths of
-of millimeters</dd>
-<dt>flags</dt>
-<dd class="description">Media matching flags</dd>
-<dt>size</dt>
-<dd class="description">Media size information</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on match, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">&quot;Width&quot; and &quot;length&quot; are the dimensions in hundredths of millimeters.
-&quot;Flags&quot; provides some matching guidance (multiple flags can be combined):<br>
-<br>
-CUPS_MEDIA_FLAGS_DEFAULT = find the closest size supported by the printer,
-CUPS_MEDIA_FLAGS_BORDERLESS = find a borderless size,
-CUPS_MEDIA_FLAGS_DUPLEX = find a size compatible with 2-sided printing,
-CUPS_MEDIA_FLAGS_EXACT = find an exact match for the size, and
-CUPS_MEDIA_FLAGS_READY = if the printer supports media sensing, find the
-size amongst the &quot;ready&quot; media.<br>
-<br>
-The matching result (if any) is returned in the &quot;cups_size_t&quot; structure.<br>
-<br>
-Returns 1 when there is a match and 0 if there is not a match.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="cupsGetDestMediaCount">cupsGetDestMediaCount</a></h3>
-<p class="description">Get the number of sizes supported by a
-destination.</p>
-<p class="code">
-int cupsGetDestMediaCount (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> *dest,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dinfo_t">cups_dinfo_t</a> *dinfo,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned flags<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to destination</dd>
-<dt>dest</dt>
-<dd class="description">Destination</dd>
-<dt>dinfo</dt>
-<dd class="description">Destination information</dd>
-<dt>flags</dt>
-<dd class="description">Media flags</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of sizes</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>flags</code> parameter determines the set of media sizes that are
-counted. For example, passing <code>CUPS_MEDIA_FLAGS_BORDERLESS</code> will return
-the number of borderless sizes.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="cupsGetDestMediaDefault">cupsGetDestMediaDefault</a></h3>
-<p class="description">Get the default size for a destination.</p>
-<p class="code">
-int cupsGetDestMediaDefault (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> *dest,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dinfo_t">cups_dinfo_t</a> *dinfo,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned flags,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_size_t">cups_size_t</a> *size<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to destination</dd>
-<dt>dest</dt>
-<dd class="description">Destination</dd>
-<dt>dinfo</dt>
-<dd class="description">Destination information</dd>
-<dt>flags</dt>
-<dd class="description">Media flags</dd>
-<dt>size</dt>
-<dd class="description">Media size information</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>flags</code> parameter determines which default size is returned. For
-example, passing <code>CUPS_MEDIA_FLAGS_BORDERLESS</code> will return the default
-borderless size, typically US Letter or A4, but sometimes 4x6 photo media.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0/macOS 10.10&nbsp;</span><a name="cupsGetDestWithURI">cupsGetDestWithURI</a></h3>
-<p class="description">Get a destination associated with a URI.</p>
-<p class="code">
-<a href="#cups_dest_t">cups_dest_t</a> *cupsGetDestWithURI (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *uri<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>name</dt>
-<dd class="description">Desired printer name or <code>NULL</code></dd>
-<dt>uri</dt>
-<dd class="description">URI for the printer</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Destination or <code>NULL</code></p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">&quot;name&quot; is the desired name for the printer. If <code>NULL</code>, a name will be
-created using the URI.<br>
-<br>
-&quot;uri&quot; is the &quot;ipp&quot; or &quot;ipps&quot; URI for the printer.
-
-</p>
-<h3 class="function"><a name="cupsGetDests">cupsGetDests</a></h3>
-<p class="description">Get the list of destinations from the default server.</p>
-<p class="code">
-int cupsGetDests (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> **dests<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>dests</dt>
-<dd class="description">Destinations</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of destinations</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Starting with CUPS 1.2, the returned list of destinations include the
-printer-info, printer-is-accepting-jobs, printer-is-shared,
-printer-make-and-model, printer-state, printer-state-change-time,
-printer-state-reasons, and printer-type attributes as options. CUPS 1.4
-adds the marker-change-time, marker-colors, marker-high-levels,
-marker-levels, marker-low-levels, marker-message, marker-names,
-marker-types, and printer-commands attributes as well.<br>
-<br>
-Use the <a href="#cupsFreeDests"><code>cupsFreeDests</code></a> function to free the destination list and
-the <a href="#cupsGetDest"><code>cupsGetDest</code></a> function to find a particular destination.</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.1.21/macOS 10.4&nbsp;</span><a name="cupsGetDests2">cupsGetDests2</a></h3>
-<p class="description">Get the list of destinations from the specified server.</p>
-<p class="code">
-int cupsGetDests2 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> **dests<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>dests</dt>
-<dd class="description">Destinations</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of destinations</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Starting with CUPS 1.2, the returned list of destinations include the
-printer-info, printer-is-accepting-jobs, printer-is-shared,
-printer-make-and-model, printer-state, printer-state-change-time,
-printer-state-reasons, and printer-type attributes as options. CUPS 1.4
-adds the marker-change-time, marker-colors, marker-high-levels,
-marker-levels, marker-low-levels, marker-message, marker-names,
-marker-types, and printer-commands attributes as well.<br>
-<br>
-Use the <a href="#cupsFreeDests"><code>cupsFreeDests</code></a> function to free the destination list and
-the <a href="#cupsGetDest"><code>cupsGetDest</code></a> function to find a particular destination.
-
-</p>
-<h3 class="function"><a name="cupsGetJobs">cupsGetJobs</a></h3>
-<p class="description">Get the jobs from the default server.</p>
-<p class="code">
-int cupsGetJobs (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_job_t">cups_job_t</a> **jobs,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int myjobs,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int whichjobs<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>jobs</dt>
-<dd class="description">Job data</dd>
-<dt>name</dt>
-<dd class="description"><code>NULL</code> = all destinations, otherwise show jobs for named destination</dd>
-<dt>myjobs</dt>
-<dd class="description">0 = all users, 1 = mine</dd>
-<dt>whichjobs</dt>
-<dd class="description"><code>CUPS_WHICHJOBS_ALL</code>, <code>CUPS_WHICHJOBS_ACTIVE</code>, or <code>CUPS_WHICHJOBS_COMPLETED</code></dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of jobs</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">A &quot;whichjobs&quot; value of <code>CUPS_WHICHJOBS_ALL</code> returns all jobs regardless
-of state, while <code>CUPS_WHICHJOBS_ACTIVE</code> returns jobs that are
-pending, processing, or held and <code>CUPS_WHICHJOBS_COMPLETED</code> returns
-jobs that are stopped, canceled, aborted, or completed.</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.1.21/macOS 10.4&nbsp;</span><a name="cupsGetJobs2">cupsGetJobs2</a></h3>
-<p class="description">Get the jobs from the specified server.</p>
-<p class="code">
-int cupsGetJobs2 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_job_t">cups_job_t</a> **jobs,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int myjobs,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int whichjobs<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>jobs</dt>
-<dd class="description">Job data</dd>
-<dt>name</dt>
-<dd class="description"><code>NULL</code> = all destinations, otherwise show jobs for named destination</dd>
-<dt>myjobs</dt>
-<dd class="description">0 = all users, 1 = mine</dd>
-<dt>whichjobs</dt>
-<dd class="description"><code>CUPS_WHICHJOBS_ALL</code>, <code>CUPS_WHICHJOBS_ACTIVE</code>, or <code>CUPS_WHICHJOBS_COMPLETED</code></dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of jobs</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">A &quot;whichjobs&quot; value of <code>CUPS_WHICHJOBS_ALL</code> returns all jobs regardless
-of state, while <code>CUPS_WHICHJOBS_ACTIVE</code> returns jobs that are
-pending, processing, or held and <code>CUPS_WHICHJOBS_COMPLETED</code> returns
-jobs that are stopped, canceled, aborted, or completed.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span><a name="cupsGetNamedDest">cupsGetNamedDest</a></h3>
-<p class="description">Get options for the named destination.</p>
-<p class="code">
-<a href="#cups_dest_t">cups_dest_t</a> *cupsGetNamedDest (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *instance<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>name</dt>
-<dd class="description">Destination name or <code>NULL</code> for the default destination</dd>
-<dt>instance</dt>
-<dd class="description">Instance name or <code>NULL</code></dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Destination or <code>NULL</code></p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function is optimized for retrieving a single destination and should
-be used instead of <a href="#cupsGetDests"><code>cupsGetDests</code></a> and <a href="#cupsGetDest"><code>cupsGetDest</code></a> when you either
-know the name of the destination or want to print to the default destination.
-If <code>NULL</code> is returned, the destination does not exist or there is no
-default destination.<br>
-<br>
-If &quot;http&quot; is <code>CUPS_HTTP_DEFAULT</code>, the connection to the default print
-server will be used.<br>
-<br>
-If &quot;name&quot; is <code>NULL</code>, the default printer for the current user will be
-returned.<br>
-<br>
-The returned destination must be freed using <a href="#cupsFreeDests"><code>cupsFreeDests</code></a> with a
-&quot;num_dests&quot; value of 1.
-
-</p>
-<h3 class="function"><a name="cupsGetOption">cupsGetOption</a></h3>
-<p class="description">Get an option value.</p>
-<p class="code">
-const char *cupsGetOption (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_options,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_option_t">cups_option_t</a> *options<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>name</dt>
-<dd class="description">Name of option</dd>
-<dt>num_options</dt>
-<dd class="description">Number of options</dd>
-<dt>options</dt>
-<dd class="description">Options</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Option value or <code>NULL</code></p>
-<h3 class="function"><a name="cupsGetPassword">cupsGetPassword</a></h3>
-<p class="description">Get a password from the user.</p>
-<p class="code">
-const char *cupsGetPassword (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *prompt<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>prompt</dt>
-<dd class="description">Prompt string</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Password</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Uses the current password callback function. Returns <code>NULL</code> if the
-user does not provide a password.<br>
-<br>
-Note: The current password callback function is tracked separately for each
-thread in a program. Multi-threaded programs that override the setting via
-the <a href="#cupsSetPasswordCB"><code>cupsSetPasswordCB</code></a> or <a href="#cupsSetPasswordCB2"><code>cupsSetPasswordCB2</code></a> functions need to
-do so in each thread for the same function to be used.</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span><a name="cupsGetPassword2">cupsGetPassword2</a></h3>
-<p class="description">Get a password from the user using the advanced
-password callback.</p>
-<p class="code">
-const char *cupsGetPassword2 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *prompt,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *method,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *resource<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>prompt</dt>
-<dd class="description">Prompt string</dd>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>method</dt>
-<dd class="description">Request method (&quot;GET&quot;, &quot;POST&quot;, &quot;PUT&quot;)</dd>
-<dt>resource</dt>
-<dd class="description">Resource path</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Password</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Uses the current password callback function. Returns <code>NULL</code> if the
-user does not provide a password.<br>
-<br>
-Note: The current password callback function is tracked separately for each
-thread in a program. Multi-threaded programs that override the setting via
-the <a href="#cupsSetPasswordCB"><code>cupsSetPasswordCB</code></a> or <a href="#cupsSetPasswordCB2"><code>cupsSetPasswordCB2</code></a> functions need to
-do so in each thread for the same function to be used.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="cupsGetPrinters">cupsGetPrinters</a></h3>
-<p class="description">Get a list of printers from the default server.</p>
-<p class="code">
-int cupsGetPrinters (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char ***printers<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>printers</dt>
-<dd class="description">Printers</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of printers</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function is deprecated and no longer returns a list of printers - use
-<a href="#cupsGetDests"><code>cupsGetDests</code></a> instead.
-
-</p>
-<h3 class="function"><a name="cupsLangDefault">cupsLangDefault</a></h3>
-<p class="description">Return the default language.</p>
-<p class="code">
-cups_lang_t *cupsLangDefault (void);</p>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Language data</p>
-<h3 class="function"><a name="cupsLangEncoding">cupsLangEncoding</a></h3>
-<p class="description">Return the character encoding (us-ascii, etc.)
-for the given language.</p>
-<p class="code">
-const char *cupsLangEncoding (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;cups_lang_t *lang<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>lang</dt>
-<dd class="description">Language data</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Character encoding</p>
-<h3 class="function"><a name="cupsLangFlush">cupsLangFlush</a></h3>
-<p class="description">Flush all language data out of the cache.</p>
-<p class="code">
-void cupsLangFlush (void);</p>
-<h3 class="function"><a name="cupsLangFree">cupsLangFree</a></h3>
-<p class="description">Free language data.</p>
-<p class="code">
-void cupsLangFree (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;cups_lang_t *lang<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>lang</dt>
-<dd class="description">Language to free</dd>
-</dl>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This does not actually free anything; use <a href="#cupsLangFlush"><code>cupsLangFlush</code></a> for that.</p>
-<h3 class="function"><a name="cupsLangGet">cupsLangGet</a></h3>
-<p class="description">Get a language.</p>
-<p class="code">
-cups_lang_t *cupsLangGet (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *language<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>language</dt>
-<dd class="description">Language or locale</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Language data</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0/macOS 10.10&nbsp;</span><a name="cupsLocalizeDestMedia">cupsLocalizeDestMedia</a></h3>
-<p class="description">Get the localized string for a destination media
-size.</p>
-<p class="code">
-const char *cupsLocalizeDestMedia (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> *dest,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dinfo_t">cups_dinfo_t</a> *dinfo,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned flags,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_size_t">cups_size_t</a> *size<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to destination</dd>
-<dt>dest</dt>
-<dd class="description">Destination</dd>
-<dt>dinfo</dt>
-<dd class="description">Destination information</dd>
-<dt>flags</dt>
-<dd class="description">Media flags</dd>
-<dt>size</dt>
-<dd class="description">Media size</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Localized string</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The returned string is stored in the destination information and will become
-invalid if the destination information is deleted.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="cupsLocalizeDestOption">cupsLocalizeDestOption</a></h3>
-<p class="description">Get the localized string for a destination
-option.</p>
-<p class="code">
-const char *cupsLocalizeDestOption (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> *dest,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dinfo_t">cups_dinfo_t</a> *dinfo,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *option<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to destination</dd>
-<dt>dest</dt>
-<dd class="description">Destination</dd>
-<dt>dinfo</dt>
-<dd class="description">Destination information</dd>
-<dt>option</dt>
-<dd class="description">Option to localize</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Localized string</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The returned string is stored in the destination information and will become
-invalid if the destination information is deleted.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="cupsLocalizeDestValue">cupsLocalizeDestValue</a></h3>
-<p class="description">Get the localized string for a destination
-option+value pair.</p>
-<p class="code">
-const char *cupsLocalizeDestValue (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> *dest,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dinfo_t">cups_dinfo_t</a> *dinfo,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *option,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *value<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to destination</dd>
-<dt>dest</dt>
-<dd class="description">Destination</dd>
-<dt>dinfo</dt>
-<dd class="description">Destination information</dd>
-<dt>option</dt>
-<dd class="description">Option to localize</dd>
-<dt>value</dt>
-<dd class="description">Value to localize</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Localized string</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The returned string is stored in the destination information and will become
-invalid if the destination information is deleted.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsNotifySubject">cupsNotifySubject</a></h3>
-<p class="description">Return the subject for the given notification message.</p>
-<p class="code">
-char *cupsNotifySubject (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;cups_lang_t *lang,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_t *event<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>lang</dt>
-<dd class="description">Language data</dd>
-<dt>event</dt>
-<dd class="description">Event data</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Subject string or <code>NULL</code></p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The returned string must be freed by the caller using <code>free</code>.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsNotifyText">cupsNotifyText</a></h3>
-<p class="description">Return the text for the given notification message.</p>
-<p class="code">
-char *cupsNotifyText (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;cups_lang_t *lang,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_t *event<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>lang</dt>
-<dd class="description">Language data</dd>
-<dt>event</dt>
-<dd class="description">Event data</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Message text or <code>NULL</code></p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The returned string must be freed by the caller using <code>free</code>.
-
-</p>
-<h3 class="function"><a name="cupsParseOptions">cupsParseOptions</a></h3>
-<p class="description">Parse options from a command-line argument.</p>
-<p class="code">
-int cupsParseOptions (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *arg,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_options,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_option_t">cups_option_t</a> **options<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>arg</dt>
-<dd class="description">Argument to parse</dd>
-<dt>num_options</dt>
-<dd class="description">Number of options</dd>
-<dt>options</dt>
-<dd class="description">Options found</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of options found</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function converts space-delimited name/value pairs according
-to the PAPI text option ABNF specification. Collection values
-(&quot;name={a=... b=... c=...}&quot;) are stored with the curley brackets
-intact - use <code>cupsParseOptions</code> on the value to extract the
-collection attributes.</p>
-<h3 class="function"><a name="cupsPrintFile">cupsPrintFile</a></h3>
-<p class="description">Print a file to a printer or class on the default server.</p>
-<p class="code">
-int cupsPrintFile (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *filename,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *title,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_options,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_option_t">cups_option_t</a> *options<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>name</dt>
-<dd class="description">Destination name</dd>
-<dt>filename</dt>
-<dd class="description">File to print</dd>
-<dt>title</dt>
-<dd class="description">Title of job</dd>
-<dt>num_options</dt>
-<dd class="description">Number of options</dd>
-<dt>options</dt>
-<dd class="description">Options</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Job ID or 0 on error</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.1.21/macOS 10.4&nbsp;</span><a name="cupsPrintFile2">cupsPrintFile2</a></h3>
-<p class="description">Print a file to a printer or class on the specified
-server.</p>
-<p class="code">
-int cupsPrintFile2 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *filename,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *title,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_options,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_option_t">cups_option_t</a> *options<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server</dd>
-<dt>name</dt>
-<dd class="description">Destination name</dd>
-<dt>filename</dt>
-<dd class="description">File to print</dd>
-<dt>title</dt>
-<dd class="description">Title of job</dd>
-<dt>num_options</dt>
-<dd class="description">Number of options</dd>
-<dt>options</dt>
-<dd class="description">Options</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Job ID or 0 on error</p>
-<h3 class="function"><a name="cupsPrintFiles">cupsPrintFiles</a></h3>
-<p class="description">Print one or more files to a printer or class on the
-default server.</p>
-<p class="code">
-int cupsPrintFiles (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_files,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char **files,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *title,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_options,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_option_t">cups_option_t</a> *options<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>name</dt>
-<dd class="description">Destination name</dd>
-<dt>num_files</dt>
-<dd class="description">Number of files</dd>
-<dt>files</dt>
-<dd class="description">File(s) to print</dd>
-<dt>title</dt>
-<dd class="description">Title of job</dd>
-<dt>num_options</dt>
-<dd class="description">Number of options</dd>
-<dt>options</dt>
-<dd class="description">Options</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Job ID or 0 on error</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.1.21/macOS 10.4&nbsp;</span><a name="cupsPrintFiles2">cupsPrintFiles2</a></h3>
-<p class="description">Print one or more files to a printer or class on the
-specified server.</p>
-<p class="code">
-int cupsPrintFiles2 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_files,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char **files,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *title,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_options,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_option_t">cups_option_t</a> *options<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>name</dt>
-<dd class="description">Destination name</dd>
-<dt>num_files</dt>
-<dd class="description">Number of files</dd>
-<dt>files</dt>
-<dd class="description">File(s) to print</dd>
-<dt>title</dt>
-<dd class="description">Title of job</dd>
-<dt>num_options</dt>
-<dd class="description">Number of options</dd>
-<dt>options</dt>
-<dd class="description">Options</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Job ID or 0 on error</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.3/macOS 10.5&nbsp;</span><a name="cupsRemoveDest">cupsRemoveDest</a></h3>
-<p class="description">Remove a destination from the destination list.</p>
-<p class="code">
-int cupsRemoveDest (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *instance,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_dests,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> **dests<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>name</dt>
-<dd class="description">Destination name</dd>
-<dt>instance</dt>
-<dd class="description">Instance name or <code>NULL</code></dd>
-<dt>num_dests</dt>
-<dd class="description">Number of destinations</dd>
-<dt>dests</dt>
-<dd class="description">Destinations</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New number of destinations</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Removing a destination/instance does not delete the class or printer
-queue, merely the lpoptions for that destination/instance. Use the
-<a href="#cupsSetDests"><code>cupsSetDests</code></a> or <a href="#cupsSetDests2"><code>cupsSetDests2</code></a> functions to save the new
-options for the user.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsRemoveOption">cupsRemoveOption</a></h3>
-<p class="description">Remove an option from an option array.</p>
-<p class="code">
-int cupsRemoveOption (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_options,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_option_t">cups_option_t</a> **options<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>name</dt>
-<dd class="description">Option name</dd>
-<dt>num_options</dt>
-<dd class="description">Current number of options</dd>
-<dt>options</dt>
-<dd class="description">Options</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New number of options</p>
-<h3 class="function"><a name="cupsServer">cupsServer</a></h3>
-<p class="description">Return the hostname/address of the current server.</p>
-<p class="code">
-const char *cupsServer (void);</p>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Server name</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The default server comes from the CUPS_SERVER environment variable, then the
-~/.cups/client.conf file, and finally the /etc/cups/client.conf file. If not
-set, the default is the local system - either &quot;localhost&quot; or a domain socket
-path.<br>
-<br>
-The returned value can be a fully-qualified hostname, a numeric IPv4 or IPv6
-address, or a domain socket pathname.<br>
-<br>
-Note: The current server is tracked separately for each thread in a program.
-Multi-threaded programs that override the server via the
-<a href="#cupsSetServer"><code>cupsSetServer</code></a> function need to do so in each thread for the same
-server to be used.</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.5/macOS 10.7&nbsp;</span><a name="cupsSetClientCertCB">cupsSetClientCertCB</a></h3>
-<p class="description">Set the client certificate callback.</p>
-<p class="code">
-void cupsSetClientCertCB (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_client_cert_cb_t">cups_client_cert_cb_t</a> cb,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;void *user_data<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>cb</dt>
-<dd class="description">Callback function</dd>
-<dt>user_data</dt>
-<dd class="description">User data pointer</dd>
-</dl>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Pass <code>NULL</code> to restore the default callback.<br>
-<br>
-Note: The current certificate callback is tracked separately for each thread
-in a program. Multi-threaded programs that override the callback need to do
-so in each thread for the same callback to be used.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.5/macOS 10.7&nbsp;</span><a name="cupsSetCredentials">cupsSetCredentials</a></h3>
-<p class="description">Set the default credentials to be used for SSL/TLS
-connections.</p>
-<p class="code">
-int cupsSetCredentials (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;cups_array_t *credentials<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>credentials</dt>
-<dd class="description">Array of credentials</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Status of call (0 = success)</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Note: The default credentials are tracked separately for each thread in a
-program. Multi-threaded programs that override the setting need to do so in
-each thread for the same setting to be used.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.3/macOS 10.5&nbsp;</span><a name="cupsSetDefaultDest">cupsSetDefaultDest</a></h3>
-<p class="description">Set the default destination.</p>
-<p class="code">
-void cupsSetDefaultDest (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *instance,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_dests,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> *dests<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>name</dt>
-<dd class="description">Destination name</dd>
-<dt>instance</dt>
-<dd class="description">Instance name or <code>NULL</code></dd>
-<dt>num_dests</dt>
-<dd class="description">Number of destinations</dd>
-<dt>dests</dt>
-<dd class="description">Destinations</dd>
-</dl>
-<h3 class="function"><a name="cupsSetDests">cupsSetDests</a></h3>
-<p class="description">Save the list of destinations for the default server.</p>
-<p class="code">
-void cupsSetDests (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_dests,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> *dests<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>num_dests</dt>
-<dd class="description">Number of destinations</dd>
-<dt>dests</dt>
-<dd class="description">Destinations</dd>
-</dl>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function saves the destinations to /etc/cups/lpoptions when run
-as root and ~/.cups/lpoptions when run as a normal user.</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.1.21/macOS 10.4&nbsp;</span><a name="cupsSetDests2">cupsSetDests2</a></h3>
-<p class="description">Save the list of destinations for the specified server.</p>
-<p class="code">
-int cupsSetDests2 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_dests,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> *dests<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>num_dests</dt>
-<dd class="description">Number of destinations</dd>
-<dt>dests</dt>
-<dd class="description">Destinations</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">0 on success, -1 on error</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function saves the destinations to /etc/cups/lpoptions when run
-as root and ~/.cups/lpoptions when run as a normal user.
-
-</p>
-<h3 class="function"><a name="cupsSetEncryption">cupsSetEncryption</a></h3>
-<p class="description">Set the encryption preference.</p>
-<p class="code">
-void cupsSetEncryption (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_encryption_t e<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>e</dt>
-<dd class="description">New encryption preference</dd>
-</dl>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The default encryption setting comes from the CUPS_ENCRYPTION
-environment variable, then the ~/.cups/client.conf file, and finally the
-/etc/cups/client.conf file. If not set, the default is
-<code>HTTP_ENCRYPTION_IF_REQUESTED</code>.<br>
-<br>
-Note: The current encryption setting is tracked separately for each thread
-in a program. Multi-threaded programs that override the setting need to do
-so in each thread for the same setting to be used.</p>
-<h3 class="function"><a name="cupsSetPasswordCB">cupsSetPasswordCB</a></h3>
-<p class="description">Set the password callback for CUPS.</p>
-<p class="code">
-void cupsSetPasswordCB (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_password_cb_t">cups_password_cb_t</a> cb<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>cb</dt>
-<dd class="description">Callback function</dd>
-</dl>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Pass <code>NULL</code> to restore the default (console) password callback, which
-reads the password from the console. Programs should call either this
-function or <a href="#cupsSetPasswordCB2"><code>cupsSetPasswordCB2</code></a>, as only one callback can be registered
-by a program per thread.<br>
-<br>
-Note: The current password callback is tracked separately for each thread
-in a program. Multi-threaded programs that override the callback need to do
-so in each thread for the same callback to be used.</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span><a name="cupsSetPasswordCB2">cupsSetPasswordCB2</a></h3>
-<p class="description">Set the advanced password callback for CUPS.</p>
-<p class="code">
-void cupsSetPasswordCB2 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_password_cb2_t">cups_password_cb2_t</a> cb,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;void *user_data<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>cb</dt>
-<dd class="description">Callback function</dd>
-<dt>user_data</dt>
-<dd class="description">User data pointer</dd>
-</dl>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Pass <code>NULL</code> to restore the default (console) password callback, which
-reads the password from the console. Programs should call either this
-function or <a href="#cupsSetPasswordCB2"><code>cupsSetPasswordCB2</code></a>, as only one callback can be registered
-by a program per thread.<br>
-<br>
-Note: The current password callback is tracked separately for each thread
-in a program. Multi-threaded programs that override the callback need to do
-so in each thread for the same callback to be used.
-
-</p>
-<h3 class="function"><a name="cupsSetServer">cupsSetServer</a></h3>
-<p class="description">Set the default server name and port.</p>
-<p class="code">
-void cupsSetServer (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *server<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>server</dt>
-<dd class="description">Server name</dd>
-</dl>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The &quot;server&quot; string can be a fully-qualified hostname, a numeric
-IPv4 or IPv6 address, or a domain socket pathname. Hostnames and numeric IP
-addresses can be optionally followed by a colon and port number to override
-the default port 631, e.g. &quot;hostname:8631&quot;. Pass <code>NULL</code> to restore the
-default server name and port.<br>
-<br>
-Note: The current server is tracked separately for each thread in a program.
-Multi-threaded programs that override the server need to do so in each
-thread for the same server to be used.</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.5/macOS 10.7&nbsp;</span><a name="cupsSetServerCertCB">cupsSetServerCertCB</a></h3>
-<p class="description">Set the server certificate callback.</p>
-<p class="code">
-void cupsSetServerCertCB (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_server_cert_cb_t">cups_server_cert_cb_t</a> cb,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;void *user_data<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>cb</dt>
-<dd class="description">Callback function</dd>
-<dt>user_data</dt>
-<dd class="description">User data pointer</dd>
-</dl>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Pass <code>NULL</code> to restore the default callback.<br>
-<br>
-Note: The current credentials callback is tracked separately for each thread
-in a program. Multi-threaded programs that override the callback need to do
-so in each thread for the same callback to be used.
-
-</p>
-<h3 class="function"><a name="cupsSetUser">cupsSetUser</a></h3>
-<p class="description">Set the default user name.</p>
-<p class="code">
-void cupsSetUser (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *user<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>user</dt>
-<dd class="description">User name</dd>
-</dl>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Pass <code>NULL</code> to restore the default user name.<br>
-<br>
-Note: The current user name is tracked separately for each thread in a
-program. Multi-threaded programs that override the user name need to do so
-in each thread for the same user name to be used.</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="cupsSetUserAgent">cupsSetUserAgent</a></h3>
-<p class="description">Set the default HTTP User-Agent string.</p>
-<p class="code">
-void cupsSetUserAgent (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *user_agent<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>user_agent</dt>
-<dd class="description">User-Agent string or <code>NULL</code></dd>
-</dl>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Setting the string to NULL forces the default value containing the CUPS
-version, IPP version, and operating system version and architecture.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="cupsStartDestDocument">cupsStartDestDocument</a></h3>
-<p class="description">Start a new document.</p>
-<p class="code">
-http_status_t cupsStartDestDocument (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dest_t">cups_dest_t</a> *dest,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dinfo_t">cups_dinfo_t</a> *info,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int job_id,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *docname,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *format,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_options,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_option_t">cups_option_t</a> *options,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int last_document<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to destination</dd>
-<dt>dest</dt>
-<dd class="description">Destination</dd>
-<dt>info</dt>
-<dd class="description">Destination information</dd>
-<dt>job_id</dt>
-<dd class="description">Job ID</dd>
-<dt>docname</dt>
-<dd class="description">Document name</dd>
-<dt>format</dt>
-<dd class="description">Document format</dd>
-<dt>num_options</dt>
-<dd class="description">Number of document options</dd>
-<dt>options</dt>
-<dd class="description">Document options</dd>
-<dt>last_document</dt>
-<dd class="description">1 if this is the last document</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Status of document creation</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">&quot;job_id&quot; is the job ID returned by cupsCreateDestJob. &quot;docname&quot; is the name
-of the document/file being printed, &quot;format&quot; is the MIME media type for the
-document (see CUPS_FORMAT_xxx constants), and &quot;num_options&quot; and &quot;options&quot;
-are the options do be applied to the document. &quot;last_document&quot; should be 1
-if this is the last document to be submitted in the job. Returns
-<code>HTTP_CONTINUE</code> on success.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span><a name="cupsStartDocument">cupsStartDocument</a></h3>
-<p class="description">Add a document to a job created with cupsCreateJob().</p>
-<p class="code">
-http_status_t cupsStartDocument (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int job_id,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *docname,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *format,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int last_document<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>name</dt>
-<dd class="description">Destination name</dd>
-<dt>job_id</dt>
-<dd class="description">Job ID from <a href="#cupsCreateJob"><code>cupsCreateJob</code></a></dd>
-<dt>docname</dt>
-<dd class="description">Name of document</dd>
-<dt>format</dt>
-<dd class="description">MIME type or <code>CUPS_FORMAT_foo</code></dd>
-<dt>last_document</dt>
-<dd class="description">1 for last document in job, 0 otherwise</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">HTTP status of request</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Use <a href="#cupsWriteRequestData"><code>cupsWriteRequestData</code></a> to write data for the document and
-<a href="#cupsFinishDocument"><code>cupsFinishDocument</code></a> to finish the document and get the submission status.<br>
-<br>
-The MIME type constants <code>CUPS_FORMAT_AUTO</code>, <code>CUPS_FORMAT_PDF</code>,
-<code>CUPS_FORMAT_POSTSCRIPT</code>, <code>CUPS_FORMAT_RAW</code>, and
-<code>CUPS_FORMAT_TEXT</code> are provided for the &quot;format&quot; argument, although
-any supported MIME type string can be supplied.
-
-</p>
-<h3 class="function"><a name="cupsTempFd">cupsTempFd</a></h3>
-<p class="description">Creates a temporary file.</p>
-<p class="code">
-int cupsTempFd (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *filename,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int len<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>filename</dt>
-<dd class="description">Pointer to buffer</dd>
-<dt>len</dt>
-<dd class="description">Size of buffer</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New file descriptor or -1 on error</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The temporary filename is returned in the filename buffer.
-The temporary file is opened for reading and writing.</p>
-<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="cupsTempFile">cupsTempFile</a></h3>
-<p class="description">Generates a temporary filename.</p>
-<p class="code">
-char *cupsTempFile (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *filename,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int len<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>filename</dt>
-<dd class="description">Pointer to buffer</dd>
-<dt>len</dt>
-<dd class="description">Size of buffer</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Filename or <code>NULL</code> on error</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The temporary filename is returned in the filename buffer.
-This function is deprecated and will no longer generate a temporary
-filename - use <a href="#cupsTempFd"><code>cupsTempFd</code></a> or <a href="#cupsTempFile2"><code>cupsTempFile2</code></a> instead.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsTempFile2">cupsTempFile2</a></h3>
-<p class="description">Creates a temporary CUPS file.</p>
-<p class="code">
-cups_file_t *cupsTempFile2 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *filename,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int len<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>filename</dt>
-<dd class="description">Pointer to buffer</dd>
-<dt>len</dt>
-<dd class="description">Size of buffer</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">CUPS file or <code>NULL</code> on error</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The temporary filename is returned in the filename buffer.
-The temporary file is opened for writing.
-
-</p>
-<h3 class="function"><a name="cupsUser">cupsUser</a></h3>
-<p class="description">Return the current user's name.</p>
-<p class="code">
-const char *cupsUser (void);</p>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">User name</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Note: The current user name is tracked separately for each thread in a
-program. Multi-threaded programs that override the user name with the
-<a href="#cupsSetUser"><code>cupsSetUser</code></a> function need to do so in each thread for the same user
-name to be used.</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="cupsUserAgent">cupsUserAgent</a></h3>
-<p class="description">Return the default HTTP User-Agent string.</p>
-<p class="code">
-const char *cupsUserAgent (void);</p>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">User-Agent string</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="pwgFormatSizeName">pwgFormatSizeName</a></h3>
-<p class="description">Generate a PWG self-describing media size name.</p>
-<p class="code">
-int pwgFormatSizeName (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *keyword,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;size_t keysize,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *prefix,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int width,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int length,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *units<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>keyword</dt>
-<dd class="description">Keyword buffer</dd>
-<dt>keysize</dt>
-<dd class="description">Size of keyword buffer</dd>
-<dt>prefix</dt>
-<dd class="description">Prefix for PWG size or <code>NULL</code> for automatic</dd>
-<dt>name</dt>
-<dd class="description">Size name or <code>NULL</code></dd>
-<dt>width</dt>
-<dd class="description">Width of page in 2540ths</dd>
-<dt>length</dt>
-<dd class="description">Length of page in 2540ths</dd>
-<dt>units</dt>
-<dd class="description">Units - &quot;in&quot;, &quot;mm&quot;, or <code>NULL</code> for automatic</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function generates a PWG self-describing media size name of the form
-&quot;prefix_name_WIDTHxLENGTHunits&quot;. The prefix is typically &quot;custom&quot; or &quot;roll&quot;
-for user-supplied sizes but can also be &quot;disc&quot;, &quot;iso&quot;, &quot;jis&quot;, &quot;jpn&quot;, &quot;na&quot;,
-&quot;oe&quot;, &quot;om&quot;, &quot;prc&quot;, or &quot;roc&quot;. A value of <code>NULL</code> automatically chooses
-&quot;oe&quot; or &quot;om&quot; depending on the units.<br>
-<br>
-The size name may only contain lowercase letters, numbers, &quot;-&quot;, and &quot;.&quot;. If
-<code>NULL</code> is passed, the size name will contain the formatted dimensions.<br>
-<br>
-The width and length are specified in hundredths of millimeters, equivalent
-to 1/100000th of a meter or 1/2540th of an inch. The width, length, and
-units used for the generated size name are calculated automatically if the
-units string is <code>NULL</code>, otherwise inches (&quot;in&quot;) or millimeters (&quot;mm&quot;)
-are used.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="pwgInitSize">pwgInitSize</a></h3>
-<p class="description">Initialize a pwg_size_t structure using IPP Job Template
-attributes.</p>
-<p class="code">
-int pwgInitSize (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#pwg_size_t">pwg_size_t</a> *size,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_t *job,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int *margins_set<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>size</dt>
-<dd class="description">Size to initialize</dd>
-<dt>job</dt>
-<dd class="description">Job template attributes</dd>
-<dt>margins_set</dt>
-<dd class="description">1 if margins were set, 0 otherwise</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 if size was initialized, 0 otherwise</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function initializes a pwg_size_t structure from an IPP &quot;media&quot; or
-&quot;media-col&quot; attribute in the specified IPP message. 0 is returned if neither
-attribute is found in the message or the values are not valid.<br>
-<br>
-The &quot;margins_set&quot; variable is initialized to 1 if any &quot;media-xxx-margin&quot;
-member attribute was specified in the &quot;media-col&quot; Job Template attribute,
-otherwise it is initialized to 0.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="pwgMediaForLegacy">pwgMediaForLegacy</a></h3>
-<p class="description">Find a PWG media size by ISO/IPP legacy name.</p>
-<p class="code">
-<a href="#pwg_media_t">pwg_media_t</a> *pwgMediaForLegacy (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *legacy<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>legacy</dt>
-<dd class="description">Legacy size name</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Matching size or NULL</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The &quot;name&quot; argument specifies the legacy ISO media size name, for example
-&quot;iso-a4&quot; or &quot;na-letter&quot;.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="pwgMediaForPPD">pwgMediaForPPD</a></h3>
-<p class="description">Find a PWG media size by Adobe PPD name.</p>
-<p class="code">
-<a href="#pwg_media_t">pwg_media_t</a> *pwgMediaForPPD (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *ppd<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD size name</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Matching size or NULL</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The &quot;ppd&quot; argument specifies an Adobe page size name as defined in Table B.1
-of the Adobe PostScript Printer Description File Format Specification Version
-4.3.<br>
-<br>
-If the name is non-standard, the returned PWG media size is stored in
-thread-local storage and is overwritten by each call to the function in the
-thread. Custom names can be of the form &quot;Custom.WIDTHxLENGTH[units]&quot; or
-&quot;WIDTHxLENGTH[units]&quot;.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="pwgMediaForPWG">pwgMediaForPWG</a></h3>
-<p class="description">Find a PWG media size by 5101.1 self-describing name.</p>
-<p class="code">
-<a href="#pwg_media_t">pwg_media_t</a> *pwgMediaForPWG (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *pwg<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>pwg</dt>
-<dd class="description">PWG size name</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Matching size or NULL</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The &quot;pwg&quot; argument specifies a self-describing media size name of the form
-&quot;prefix_name_WIDTHxLENGTHunits&quot; as defined in PWG 5101.1.<br>
-<br>
-If the name is non-standard, the returned PWG media size is stored in
-thread-local storage and is overwritten by each call to the function in the
-thread.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="pwgMediaForSize">pwgMediaForSize</a></h3>
-<p class="description">Get the PWG media size for the given dimensions.</p>
-<p class="code">
-<a href="#pwg_media_t">pwg_media_t</a> *pwgMediaForSize (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int width,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int length<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>width</dt>
-<dd class="description">Width in hundredths of millimeters</dd>
-<dt>length</dt>
-<dd class="description">Length in hundredths of millimeters</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">PWG media name</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The &quot;width&quot; and &quot;length&quot; are in hundredths of millimeters, equivalent to
-1/100000th of a meter or 1/2540th of an inch.<br>
-<br>
-If the dimensions are non-standard, the returned PWG media size is stored in
-thread-local storage and is overwritten by each call to the function in the
-thread.
-
-</p>
-<h2 class="title"><a name="TYPES">Data Types</a></h2>
-<h3 class="typedef"><span class="info">&nbsp;CUPS 1.5/macOS 10.7&nbsp;</span><a name="cups_client_cert_cb_t">cups_client_cert_cb_t</a></h3>
-<p class="description">Client credentials callback
-</p>
-<p class="code">
-typedef int (*cups_client_cert_cb_t)(http_t *http, void *tls, cups_array_t *distinguished_names, void *user_data);
-</p>
-<h3 class="typedef"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="cups_dest_block_t">cups_dest_block_t</a></h3>
-<p class="description">Destination enumeration block
-</p>
-<p class="code">
-typedef int (*cups_dest_block_t(unsigned flags, <a href="#cups_dest_t">cups_dest_t</a> *dest);
-</p>
-<h3 class="typedef"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="cups_dest_cb_t">cups_dest_cb_t</a></h3>
-<p class="description">Destination enumeration callback
-</p>
-<p class="code">
-typedef int (*cups_dest_cb_t)(void *user_data, unsigned flags, <a href="#cups_dest_t">cups_dest_t</a> *dest);
-</p>
-<h3 class="typedef"><a name="cups_dest_t">cups_dest_t</a></h3>
-<p class="description">Destination</p>
-<p class="code">
-typedef struct <a href="#cups_dest_s">cups_dest_s</a> cups_dest_t;
-</p>
-<h3 class="typedef"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="cups_dinfo_t">cups_dinfo_t</a></h3>
-<p class="description">Destination capability and status
-information </p>
-<p class="code">
-typedef struct _cups_dinfo_s cups_dinfo_t;
-</p>
-<h3 class="typedef"><a name="cups_job_t">cups_job_t</a></h3>
-<p class="description">Job</p>
-<p class="code">
-typedef struct <a href="#cups_job_s">cups_job_s</a> cups_job_t;
-</p>
-<h3 class="typedef"><a name="cups_option_t">cups_option_t</a></h3>
-<p class="description">Printer Options</p>
-<p class="code">
-typedef struct <a href="#cups_option_s">cups_option_s</a> cups_option_t;
-</p>
-<h3 class="typedef"><span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span><a name="cups_password_cb2_t">cups_password_cb2_t</a></h3>
-<p class="description">New password callback
-</p>
-<p class="code">
-typedef const char *(*cups_password_cb2_t)(const char *prompt, http_t *http, const char *method, const char *resource, void *user_data);
-</p>
-<h3 class="typedef"><a name="cups_password_cb_t">cups_password_cb_t</a></h3>
-<p class="description">Password callback</p>
-<p class="code">
-typedef const char *(*cups_password_cb_t)(const char *prompt);
-</p>
-<h3 class="typedef"><a name="cups_ptype_t">cups_ptype_t</a></h3>
-<p class="description">Printer type/capability bits</p>
-<p class="code">
-typedef unsigned cups_ptype_t;
-</p>
-<h3 class="typedef"><span class="info">&nbsp;CUPS 1.5/macOS 10.7&nbsp;</span><a name="cups_server_cert_cb_t">cups_server_cert_cb_t</a></h3>
-<p class="description">Server credentials callback
-</p>
-<p class="code">
-typedef int (*cups_server_cert_cb_t)(http_t *http, void *tls, cups_array_t *certs, void *user_data);
-</p>
-<h3 class="typedef"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="cups_size_t">cups_size_t</a></h3>
-<p class="description">Media Size </p>
-<p class="code">
-typedef struct <a href="#cups_size_s">cups_size_s</a> cups_size_t;
-</p>
-<h3 class="typedef"><a name="pwg_map_t">pwg_map_t</a></h3>
-<p class="description">Map element - PPD to/from PWG</p>
-<p class="code">
-typedef struct <a href="#pwg_map_s">pwg_map_s</a> pwg_map_t;
-</p>
-<h3 class="typedef"><a name="pwg_media_t">pwg_media_t</a></h3>
-<p class="description">Common media size data</p>
-<p class="code">
-typedef struct <a href="#pwg_media_s">pwg_media_s</a> pwg_media_t;
-</p>
-<h3 class="typedef"><a name="pwg_size_t">pwg_size_t</a></h3>
-<p class="description">Size element - PPD to/from PWG</p>
-<p class="code">
-typedef struct <a href="#pwg_size_s">pwg_size_s</a> pwg_size_t;
-</p>
-<h2 class="title"><a name="STRUCTURES">Structures</a></h2>
-<h3 class="struct"><a name="cups_dest_s">cups_dest_s</a></h3>
-<p class="description">Destination</p>
-<p class="code">struct cups_dest_s {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *name, *instance;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int is_default;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_options;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_option_t">cups_option_t</a> *options;<br>
-};</p>
-<h4 class="members">Members</h4>
-<dl>
-<dt>instance </dt>
-<dd class="description">Local instance name or NULL</dd>
-<dt>is_default </dt>
-<dd class="description">Is this printer the default?</dd>
-<dt>num_options </dt>
-<dd class="description">Number of options</dd>
-<dt>options </dt>
-<dd class="description">Options</dd>
-</dl>
-<h3 class="struct"><a name="cups_job_s">cups_job_s</a></h3>
-<p class="description">Job</p>
-<p class="code">struct cups_job_s {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;time_t completed_time;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;time_t creation_time;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *dest;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *format;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int id;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int priority;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;time_t processing_time;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int size;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_jstate_t state;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *title;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *user;<br>
-};</p>
-<h4 class="members">Members</h4>
-<dl>
-<dt>completed_time </dt>
-<dd class="description">Time the job was completed</dd>
-<dt>creation_time </dt>
-<dd class="description">Time the job was created</dd>
-<dt>dest </dt>
-<dd class="description">Printer or class name</dd>
-<dt>format </dt>
-<dd class="description">Document format</dd>
-<dt>id </dt>
-<dd class="description">The job ID</dd>
-<dt>priority </dt>
-<dd class="description">Priority (1-100)</dd>
-<dt>processing_time </dt>
-<dd class="description">Time the job was processed</dd>
-<dt>size </dt>
-<dd class="description">Size in kilobytes</dd>
-<dt>state </dt>
-<dd class="description">Job state</dd>
-<dt>title </dt>
-<dd class="description">Title/job name</dd>
-<dt>user </dt>
-<dd class="description">User the submitted the job</dd>
-</dl>
-<h3 class="struct"><a name="cups_option_s">cups_option_s</a></h3>
-<p class="description">Printer Options</p>
-<p class="code">struct cups_option_s {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *name;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *value;<br>
-};</p>
-<h4 class="members">Members</h4>
-<dl>
-<dt>name </dt>
-<dd class="description">Name of option</dd>
-<dt>value </dt>
-<dd class="description">Value of option</dd>
-</dl>
-<h3 class="struct"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="cups_size_s">cups_size_s</a></h3>
-<p class="description">Media Size </p>
-<p class="code">struct cups_size_s {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char media[128];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int width, length, bottom, left, right, top;<br>
-};</p>
-<h4 class="members">Members</h4>
-<dl>
-<dt>media[128] </dt>
-<dd class="description">Media name to use</dd>
-<dt>top </dt>
-<dd class="description">Top margin in hundredths of
-millimeters</dd>
-</dl>
-<h3 class="struct"><a name="pollfd">pollfd</a></h3>
-<p class="description">User data (unused)</p>
-<p class="code">struct pollfd *pollfds, unsigned int num_pollfds, int timeout, void *context) {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;_cups_dnssd_data_t *data;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;else if(val 0) data - got_data;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;void) timeout;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int val;<br>
-};</p>
-<h4 class="members">Members</h4>
-<dl>
-<dt>data </dt>
-<dd class="description">Enumeration data</dd>
-<dt>got_data </dt>
-<dt>timeout </dt>
-<dt>val </dt>
-<dd class="description">Return value</dd>
-</dl>
-<h3 class="struct"><a name="pwg_map_s">pwg_map_s</a></h3>
-<p class="description">Map element - PPD to/from PWG</p>
-<p class="code">struct pwg_map_s {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *pwg, *ppd;<br>
-};</p>
-<h4 class="members">Members</h4>
-<dl>
-<dt>ppd </dt>
-<dd class="description">PPD option keyword</dd>
-</dl>
-<h3 class="struct"><a name="pwg_media_s">pwg_media_s</a></h3>
-<p class="description">Common media size data</p>
-<p class="code">struct pwg_media_s {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int width, length;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *pwg, *legacy, *ppd;<br>
-};</p>
-<h4 class="members">Members</h4>
-<dl>
-<dt>length </dt>
-<dd class="description">Length in 2540ths</dd>
-<dt>ppd </dt>
-<dd class="description">Standard Adobe PPD name</dd>
-</dl>
-<h3 class="struct"><a name="pwg_size_s">pwg_size_s</a></h3>
-<p class="description">Size element - PPD to/from PWG</p>
-<p class="code">struct pwg_size_s {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#pwg_map_t">pwg_map_t</a> map;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int width, length, left, bottom, right, top;<br>
-};</p>
-<h4 class="members">Members</h4>
-<dl>
-<dt>map </dt>
-<dd class="description">Map element</dd>
-<dt>top </dt>
-<dd class="description">Top margin in 2540ths</dd>
-</dl>
-<h2 class="title"><a name="VARIABLES">Variables</a></h2>
-<h3 class="variable"><a name="CF_RETURNS_RETAINED">CF_RETURNS_RETAINED</a></h3>
-<p class="description">Get the Apple language identifier associated with a
-locale ID.</p>
-<p class="code">const char *locale) CF_RETURNS_RETAINED;</p>
-<h2 class="title"><a name="ENUMERATIONS">Constants</a></h2>
-<h3 class="enumeration"><a name="cups_ptype_e">cups_ptype_e</a></h3>
-<p class="description">Printer type/capability bit
-constants</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>CUPS_PRINTER_AUTHENTICATED <span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span></dt>
-<dd class="description">Printer requires authentication
-</dd>
-<dt>CUPS_PRINTER_BIND </dt>
-<dd class="description">Can bind output</dd>
-<dt>CUPS_PRINTER_BW </dt>
-<dd class="description">Can do B&amp;W printing</dd>
-<dt>CUPS_PRINTER_CLASS </dt>
-<dd class="description">Printer class</dd>
-<dt>CUPS_PRINTER_COLLATE </dt>
-<dd class="description">Can collage copies</dd>
-<dt>CUPS_PRINTER_COLOR </dt>
-<dd class="description">Can do color printing</dd>
-<dt>CUPS_PRINTER_COMMANDS <span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span></dt>
-<dd class="description">Printer supports maintenance commands
-</dd>
-<dt>CUPS_PRINTER_COPIES </dt>
-<dd class="description">Can do copies</dd>
-<dt>CUPS_PRINTER_COVER </dt>
-<dd class="description">Can cover output</dd>
-<dt>CUPS_PRINTER_DEFAULT </dt>
-<dd class="description">Default printer on network</dd>
-<dt>CUPS_PRINTER_DELETE <span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span></dt>
-<dd class="description">Delete printer
-</dd>
-<dt>CUPS_PRINTER_DUPLEX </dt>
-<dd class="description">Can do duplexing</dd>
-<dt>CUPS_PRINTER_FAX </dt>
-<dd class="description">Fax queue</dd>
-<dt>CUPS_PRINTER_LARGE </dt>
-<dd class="description">Can do D/E/A1/A0</dd>
-<dt>CUPS_PRINTER_LOCAL </dt>
-<dd class="description">Local printer or class</dd>
-<dt>CUPS_PRINTER_MEDIUM </dt>
-<dd class="description">Can do Tabloid/B/C/A3/A2</dd>
-<dt>CUPS_PRINTER_MFP <span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span></dt>
-<dd class="description">Printer with scanning capabilities
-</dd>
-<dt>CUPS_PRINTER_NOT_SHARED <span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span></dt>
-<dd class="description">Printer is not shared
-</dd>
-<dt>CUPS_PRINTER_PUNCH </dt>
-<dd class="description">Can punch output</dd>
-<dt>CUPS_PRINTER_REJECTING </dt>
-<dd class="description">Printer is rejecting jobs</dd>
-<dt>CUPS_PRINTER_REMOTE </dt>
-<dd class="description">Remote printer or class</dd>
-<dt>CUPS_PRINTER_SCANNER <span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span></dt>
-<dd class="description">Scanner-only device
-</dd>
-<dt>CUPS_PRINTER_SMALL </dt>
-<dd class="description">Can do Letter/Legal/A4</dd>
-<dt>CUPS_PRINTER_SORT </dt>
-<dd class="description">Can sort output</dd>
-<dt>CUPS_PRINTER_STAPLE </dt>
-<dd class="description">Can staple output</dd>
-<dt>CUPS_PRINTER_VARIABLE </dt>
-<dd class="description">Can do variable sizes</dd>
-</dl>
-</div>
-</body>
-</html>
diff --git a/doc/help/api-filedir.html b/doc/help/api-filedir.html
deleted file mode 100644
index d193729..0000000
--- a/doc/help/api-filedir.html
+++ /dev/null
@@ -1,1003 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<!-- SECTION: Programming -->
-<head>
- <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">
-<style type="text/css"><!--
-BODY {
- font-family: lucida grande, geneva, helvetica, arial, sans-serif;
-}
-
-H1, H2, H3, H4, H5, H6, P, TD, TH {
- font-family: lucida grande, geneva, helvetica, arial, sans-serif;
-}
-
-KBD {
- font-family: monaco, courier, monospace;
- font-weight: bold;
-}
-
-PRE {
- font-family: monaco, courier, monospace;
-}
-
-PRE.command {
- border: dotted thin #7f7f7f;
- margin-left: 36pt;
- padding: 10px;
-}
-
-P.compact {
- margin: 0;
-}
-
-P.example {
- font-style: italic;
- margin-left: 36pt;
-}
-
-DL.man DD {
- margin-left: 5em;
-}
-
-DL.man DT {
- margin-left: 0;
-}
-
-PRE.man {
- margin: 0;
-}
-
-PRE.example {
- background: #eeeeee;
- border: dotted thin #999999;
- margin-left: 36pt;
- padding: 10pt;
-}
-
-PRE.command EM, PRE.example EM {
- font-family: lucida grande, geneva, helvetica, arial, sans-serif;
-}
-
-P.command {
- font-family: monaco, courier, monospace;
- margin-left: 36pt;
-}
-
-P.formula {
- font-style: italic;
- margin-left: 36pt;
-}
-
-BLOCKQUOTE {
- background: #eeeeee;
- border: solid thin #999999;
- padding: 10pt;
-}
-
-A IMG {
- border: none;
-}
-
-A:link:hover IMG {
- background: #f0f0f0;
- border-radius: 10px;
- -moz-border-radius: 10px;
-}
-
-A:link, A:visited {
- font-weight: inherit;
- text-decoration: none;
-}
-
-A:link:hover, A:visited:hover, A:active {
- text-decoration: underline;
-}
-
-SUB, SUP {
- font-size: 50%;
-}
-
-TR.data, TD.data, TR.data TD {
- margin-top: 10pt;
- padding: 5pt;
- border-bottom: solid 1pt #999999;
-}
-
-TR.data TH {
- border-bottom: solid 1pt #999999;
- padding-top: 10pt;
- padding-left: 5pt;
- text-align: left;
-}
-
-DIV.table TABLE {
- border: solid thin #999999;
- border-collapse: collapse;
- border-spacing: 0;
- margin-left: auto;
- margin-right: auto;
-}
-
-DIV.table CAPTION {
- caption-side: top;
- font-size: 120%;
- font-style: italic;
- font-weight: bold;
- margin-left: auto;
- margin-right: auto;
-}
-
-DIV.table TABLE TD {
- border: solid thin #cccccc;
- padding-top: 5pt;
-}
-
-DIV.table TABLE TH {
- background: #cccccc;
- border: none;
- border-bottom: solid thin #999999;
-}
-
-DIV.figure TABLE {
- margin-left: auto;
- margin-right: auto;
-}
-
-DIV.figure CAPTION {
- caption-side: bottom;
- font-size: 120%;
- font-style: italic;
- font-weight: bold;
- margin-left: auto;
- margin-right: auto;
-}
-
-TH.label {
- text-align: right;
- vertical-align: top;
-}
-
-TH.sublabel {
- text-align: right;
- font-weight: normal;
-}
-
-HR {
- border: solid thin;
-}
-
-SPAN.info {
- background: black;
- border: thin solid black;
- color: white;
- font-size: 80%;
- font-style: italic;
- font-weight: bold;
- white-space: nowrap;
-}
-
-H2 SPAN.info, H3 SPAN.info, H4 SPAN.info {
- float: right;
- font-size: 100%;
-}
-
-H1.title {
-}
-
-H2.title, H3.title {
- border-bottom: solid 2pt #000000;
-}
-
-DIV.indent, TABLE.indent {
- margin-top: 2em;
- margin-left: auto;
- margin-right: auto;
- width: 90%;
-}
-
-TABLE.indent {
- border-collapse: collapse;
-}
-
-TABLE.indent TD, TABLE.indent TH {
- padding: 0;
-}
-
-TABLE.list {
- border-collapse: collapse;
- margin-left: auto;
- margin-right: auto;
- width: 90%;
-}
-
-TABLE.list TH {
- background: white;
- border-bottom: solid thin #cccccc;
- color: #444444;
- padding-top: 10pt;
- padding-left: 5pt;
- text-align: left;
- vertical-align: bottom;
- white-space: nowrap;
-}
-
-TABLE.list TH A {
- color: #4444cc;
-}
-
-TABLE.list TD {
- border-bottom: solid thin #eeeeee;
- padding-top: 5pt;
- padding-left: 5pt;
-}
-
-TABLE.list TR:nth-child(even) {
- background: #f8f8f8;
-}
-
-TABLE.list TR:nth-child(odd) {
- background: #f4f4f4;
-}
-
-DT {
- margin-left: 36pt;
- margin-top: 12pt;
-}
-
-DD {
- margin-left: 54pt;
-}
-
-DL.category DT {
- font-weight: bold;
-}
-
-P.summary {
- margin-left: 36pt;
- font-family: monaco, courier, monospace;
-}
-
-DIV.summary TABLE {
- border: solid thin #999999;
- border-collapse: collapse;
- border-spacing: 0;
- margin: 10px;
-}
-
-DIV.summary TABLE TD, DIV.summary TABLE TH {
- border: solid thin #999999;
- padding: 5px;
- text-align: left;
- vertical-align: top;
-}
-
-DIV.summary TABLE THEAD TH {
- background: #eeeeee;
-}
-
-/* API documentation styles... */
-div.body h1 {
- margin: 0;
-}
-div.body h2 {
- margin-top: 1.5em;
-}
-div.body h3, div.body h4, div.body h5 {
- margin-bottom: 0.5em;
- margin-top: 1.5em;
-}
-.class, .enumeration, .function, .struct, .typedef, .union {
- border-bottom: solid thin #999999;
- margin-bottom: 0;
- margin-top: 2em;
-}
-.description {
- margin-top: 0.5em;
-}
-code, p.code, pre, ul.code li {
- font-family: monaco, courier, monospace;
- font-size: 90%;
-}
-ul.code, ul.contents, ul.subcontents {
- list-style-type: none;
- margin: 0;
- padding-left: 0;
-}
-ul.code li {
- margin: 0;
-}
-ul.contents > li {
- margin-top: 1em;
-}
-ul.contents li ul.code, ul.contents li ul.subcontents {
- padding-left: 2em;
-}
-div.body dl {
- margin-left: 0;
- margin-top: 0;
-}
-div.body dt {
- font-style: italic;
- margin-left: 0;
- margin-top: 0;
-}
-div.body dd {
- margin-bottom: 0.5em;
-}
-
-/* This is just for the HTML files generated with the framedhelp target */
-div.contents {
- background: #e8e8e8;
- border: solid thin black;
- padding: 10px;
-}
-div.contents h1 {
- font-size: 110%;
-}
-div.contents h2 {
- font-size: 100%;
-}
-div.contents ul.contents {
- font-size: 80%;
-}
-div.contents ul.subcontents li {
- margin-left: 1em;
- text-indent: -1em;
-}
---></style>
-</head>
-<body>
-<div class='body'>
-<!--
- File and Directory API header for CUPS.
-
- Copyright 2008-2011 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/".
--->
-
-<h1 class='title'>File and Directory APIs</h1>
-
-<div class='summary'><table summary='General Information'>
-<thead>
-<tr>
- <th>Headers</th>
- <th>cups/file.h<br>
- cups/dir.h</th>
-</tr>
-</thead>
-<tbody>
-<tr>
- <th>Library</th>
- <td>-lcups</td>
-</tr>
-<tr>
- <th>See Also</th>
- <td>Programming: <a href='api-overview.html' target='_top'>Introduction to CUPS Programming</a><br>
- Programming: <a href='api-cups.html' target='_top'>CUPS API</a></td>
-</tr>
-</tbody>
-</table></div>
-<h2 class="title">Contents</h2>
-<ul class="contents">
-<li><a href="#OVERVIEW">Overview</a></li>
-<li><a href="#FUNCTIONS">Functions</a><ul class="code">
- <li><a href="#cupsDirClose" title="Close a directory.">cupsDirClose</a></li>
- <li><a href="#cupsDirOpen" title="Open a directory.">cupsDirOpen</a></li>
- <li><a href="#cupsDirRead" title="Read the next directory entry.">cupsDirRead</a></li>
- <li><a href="#cupsDirRewind" title="Rewind to the start of the directory.">cupsDirRewind</a></li>
- <li><a href="#cupsFileClose" title="Close a CUPS file.">cupsFileClose</a></li>
- <li><a href="#cupsFileCompression" title="Return whether a file is compressed.">cupsFileCompression</a></li>
- <li><a href="#cupsFileEOF" title="Return the end-of-file status.">cupsFileEOF</a></li>
- <li><a href="#cupsFileFind" title="Find a file using the specified path.">cupsFileFind</a></li>
- <li><a href="#cupsFileFlush" title="Flush pending output.">cupsFileFlush</a></li>
- <li><a href="#cupsFileGetChar" title="Get a single character from a file.">cupsFileGetChar</a></li>
- <li><a href="#cupsFileGetConf" title="Get a line from a configuration file.">cupsFileGetConf</a></li>
- <li><a href="#cupsFileGetLine" title="Get a CR and/or LF-terminated line that may
-contain binary data.">cupsFileGetLine</a></li>
- <li><a href="#cupsFileGets" title="Get a CR and/or LF-terminated line.">cupsFileGets</a></li>
- <li><a href="#cupsFileLock" title="Temporarily lock access to a file.">cupsFileLock</a></li>
- <li><a href="#cupsFileNumber" title="Return the file descriptor associated with a CUPS file.">cupsFileNumber</a></li>
- <li><a href="#cupsFileOpen" title="Open a CUPS file.">cupsFileOpen</a></li>
- <li><a href="#cupsFileOpenFd" title="Open a CUPS file using a file descriptor.">cupsFileOpenFd</a></li>
- <li><a href="#cupsFilePeekChar" title="Peek at the next character from a file.">cupsFilePeekChar</a></li>
- <li><a href="#cupsFilePrintf" title="Write a formatted string.">cupsFilePrintf</a></li>
- <li><a href="#cupsFilePutChar" title="Write a character.">cupsFilePutChar</a></li>
- <li><a href="#cupsFilePutConf" title="Write a configuration line.">cupsFilePutConf</a></li>
- <li><a href="#cupsFilePuts" title="Write a string.">cupsFilePuts</a></li>
- <li><a href="#cupsFileRead" title="Read from a file.">cupsFileRead</a></li>
- <li><a href="#cupsFileRewind" title="Set the current file position to the beginning of the
-file.">cupsFileRewind</a></li>
- <li><a href="#cupsFileSeek" title="Seek in a file.">cupsFileSeek</a></li>
- <li><a href="#cupsFileStderr" title="Return a CUPS file associated with stderr.">cupsFileStderr</a></li>
- <li><a href="#cupsFileStdin" title="Return a CUPS file associated with stdin.">cupsFileStdin</a></li>
- <li><a href="#cupsFileStdout" title="Return a CUPS file associated with stdout.">cupsFileStdout</a></li>
- <li><a href="#cupsFileTell" title="Return the current file position.">cupsFileTell</a></li>
- <li><a href="#cupsFileUnlock" title="Unlock access to a file.">cupsFileUnlock</a></li>
- <li><a href="#cupsFileWrite" title="Write to a file.">cupsFileWrite</a></li>
-</ul></li>
-<li><a href="#TYPES">Data Types</a><ul class="code">
- <li><a href="#cups_dentry_t" title="Directory entry type">cups_dentry_t</a></li>
- <li><a href="#cups_dir_t" title="Directory type">cups_dir_t</a></li>
- <li><a href="#cups_file_t" title="CUPS file type">cups_file_t</a></li>
-</ul></li>
-<li><a href="#STRUCTURES">Structures</a><ul class="code">
- <li><a href="#cups_dentry_s" title="Directory entry type">cups_dentry_s</a></li>
-</ul></li>
-</ul>
-<!--
- File and directory API introduction for CUPS.
-
- Copyright 2007-2011 by Apple Inc.
- Copyright 1997-2005 by Easy Software Products, all rights reserved.
-
- 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/".
--->
-
-<h2 class='title'><a name="OVERVIEW">Overview</a></h2>
-
-<p>The CUPS file and directory APIs provide portable interfaces
-for manipulating files and listing files and directories. Unlike
-stdio <code>FILE</code> streams, the <code>cupsFile</code> functions
-allow you to open more than 256 files at any given time. They
-also manage the platform-specific details of locking, large file
-support, line endings (CR, LF, or CR LF), and reading and writing
-files using Flate ("gzip") compression. Finally, you can also
-connect, read from, and write to network connections using the
-<code>cupsFile</code> functions.</p>
-
-<p>The <code>cupsDir</code> functions manage the platform-specific
-details of directory access/listing and provide a convenient way
-to get both a list of files and the information (permissions,
-size, timestamp, etc.) for each of those files.</p>
-<h2 class="title"><a name="FUNCTIONS">Functions</a></h2>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsDirClose">cupsDirClose</a></h3>
-<p class="description">Close a directory.</p>
-<p class="code">
-void cupsDirClose (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dir_t">cups_dir_t</a> *dp<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>dp</dt>
-<dd class="description">Directory pointer</dd>
-</dl>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsDirOpen">cupsDirOpen</a></h3>
-<p class="description">Open a directory.</p>
-<p class="code">
-<a href="#cups_dir_t">cups_dir_t</a> *cupsDirOpen (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *directory<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>directory</dt>
-<dd class="description">Directory name</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Directory pointer or <code>NULL</code> if the directory could not be opened.</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsDirRead">cupsDirRead</a></h3>
-<p class="description">Read the next directory entry.</p>
-<p class="code">
-<a href="#cups_dentry_t">cups_dentry_t</a> *cupsDirRead (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dir_t">cups_dir_t</a> *dp<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>dp</dt>
-<dd class="description">Directory pointer</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Directory entry or <code>NULL</code> when there are no more</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsDirRewind">cupsDirRewind</a></h3>
-<p class="description">Rewind to the start of the directory.</p>
-<p class="code">
-void cupsDirRewind (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dir_t">cups_dir_t</a> *dp<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>dp</dt>
-<dd class="description">Directory pointer</dd>
-</dl>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsFileClose">cupsFileClose</a></h3>
-<p class="description">Close a CUPS file.</p>
-<p class="code">
-int cupsFileClose (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_file_t">cups_file_t</a> *fp<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>fp</dt>
-<dd class="description">CUPS file</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">0 on success, -1 on error</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsFileCompression">cupsFileCompression</a></h3>
-<p class="description">Return whether a file is compressed.</p>
-<p class="code">
-int cupsFileCompression (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_file_t">cups_file_t</a> *fp<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>fp</dt>
-<dd class="description">CUPS file</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description"><code>CUPS_FILE_NONE</code> or <code>CUPS_FILE_GZIP</code></p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsFileEOF">cupsFileEOF</a></h3>
-<p class="description">Return the end-of-file status.</p>
-<p class="code">
-int cupsFileEOF (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_file_t">cups_file_t</a> *fp<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>fp</dt>
-<dd class="description">CUPS file</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on end of file, 0 otherwise</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsFileFind">cupsFileFind</a></h3>
-<p class="description">Find a file using the specified path.</p>
-<p class="code">
-const char *cupsFileFind (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *filename,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *path,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int executable,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *buffer,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int bufsize<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>filename</dt>
-<dd class="description">File to find</dd>
-<dt>path</dt>
-<dd class="description">Colon/semicolon-separated path</dd>
-<dt>executable</dt>
-<dd class="description">1 = executable files, 0 = any file/dir</dd>
-<dt>buffer</dt>
-<dd class="description">Filename buffer</dd>
-<dt>bufsize</dt>
-<dd class="description">Size of filename buffer</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Full path to file or <code>NULL</code> if not found</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function allows the paths in the path string to be separated by
-colons (UNIX standard) or semicolons (Windows standard) and stores the
-result in the buffer supplied. If the file cannot be found in any of
-the supplied paths, <code>NULL</code> is returned. A <code>NULL</code> path only
-matches the current directory.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsFileFlush">cupsFileFlush</a></h3>
-<p class="description">Flush pending output.</p>
-<p class="code">
-int cupsFileFlush (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_file_t">cups_file_t</a> *fp<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>fp</dt>
-<dd class="description">CUPS file</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">0 on success, -1 on error</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsFileGetChar">cupsFileGetChar</a></h3>
-<p class="description">Get a single character from a file.</p>
-<p class="code">
-int cupsFileGetChar (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_file_t">cups_file_t</a> *fp<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>fp</dt>
-<dd class="description">CUPS file</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Character or -1 on end of file</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsFileGetConf">cupsFileGetConf</a></h3>
-<p class="description">Get a line from a configuration file.</p>
-<p class="code">
-char *cupsFileGetConf (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_file_t">cups_file_t</a> *fp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *buf,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;size_t buflen,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char **value,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int *linenum<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>fp</dt>
-<dd class="description">CUPS file</dd>
-<dt>buf</dt>
-<dd class="description">String buffer</dd>
-<dt>buflen</dt>
-<dd class="description">Size of string buffer</dd>
-<dt>value</dt>
-<dd class="description">Pointer to value</dd>
-<dt>linenum</dt>
-<dd class="description">Current line number</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Line read or <code>NULL</code> on end of file or error</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsFileGetLine">cupsFileGetLine</a></h3>
-<p class="description">Get a CR and/or LF-terminated line that may
-contain binary data.</p>
-<p class="code">
-size_t cupsFileGetLine (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_file_t">cups_file_t</a> *fp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *buf,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;size_t buflen<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>fp</dt>
-<dd class="description">File to read from</dd>
-<dt>buf</dt>
-<dd class="description">Buffer</dd>
-<dt>buflen</dt>
-<dd class="description">Size of buffer</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of bytes on line or 0 on end of file</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function differs from <a href="#cupsFileGets"><code>cupsFileGets</code></a> in that the trailing CR
-and LF are preserved, as is any binary data on the line. The buffer is
-nul-terminated, however you should use the returned length to determine
-the number of bytes on the line.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsFileGets">cupsFileGets</a></h3>
-<p class="description">Get a CR and/or LF-terminated line.</p>
-<p class="code">
-char *cupsFileGets (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_file_t">cups_file_t</a> *fp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *buf,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;size_t buflen<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>fp</dt>
-<dd class="description">CUPS file</dd>
-<dt>buf</dt>
-<dd class="description">String buffer</dd>
-<dt>buflen</dt>
-<dd class="description">Size of string buffer</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Line read or <code>NULL</code> on end of file or error</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsFileLock">cupsFileLock</a></h3>
-<p class="description">Temporarily lock access to a file.</p>
-<p class="code">
-int cupsFileLock (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_file_t">cups_file_t</a> *fp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int block<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>fp</dt>
-<dd class="description">CUPS file</dd>
-<dt>block</dt>
-<dd class="description">1 to wait for the lock, 0 to fail right away</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">0 on success, -1 on error</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsFileNumber">cupsFileNumber</a></h3>
-<p class="description">Return the file descriptor associated with a CUPS file.</p>
-<p class="code">
-int cupsFileNumber (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_file_t">cups_file_t</a> *fp<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>fp</dt>
-<dd class="description">CUPS file</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">File descriptor</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsFileOpen">cupsFileOpen</a></h3>
-<p class="description">Open a CUPS file.</p>
-<p class="code">
-<a href="#cups_file_t">cups_file_t</a> *cupsFileOpen (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *filename,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *mode<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>filename</dt>
-<dd class="description">Name of file</dd>
-<dt>mode</dt>
-<dd class="description">Open mode</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">CUPS file or <code>NULL</code> if the file or socket cannot be opened</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The &quot;mode&quot; parameter can be &quot;r&quot; to read, &quot;w&quot; to write, overwriting any
-existing file, &quot;a&quot; to append to an existing file or create a new file,
-or &quot;s&quot; to open a socket connection.<br>
-<br>
-When opening for writing (&quot;w&quot;), an optional number from 1 to 9 can be
-supplied which enables Flate compression of the file. Compression is
-not supported for the &quot;a&quot; (append) mode.<br>
-<br>
-When opening a socket connection, the filename is a string of the form
-&quot;address:port&quot; or &quot;hostname:port&quot;. The socket will make an IPv4 or IPv6
-connection as needed, generally preferring IPv6 connections when there is
-a choice.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsFileOpenFd">cupsFileOpenFd</a></h3>
-<p class="description">Open a CUPS file using a file descriptor.</p>
-<p class="code">
-<a href="#cups_file_t">cups_file_t</a> *cupsFileOpenFd (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int fd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *mode<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>fd</dt>
-<dd class="description">File descriptor</dd>
-<dt>mode</dt>
-<dd class="description">Open mode</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">CUPS file or <code>NULL</code> if the file could not be opened</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The &quot;mode&quot; parameter can be &quot;r&quot; to read, &quot;w&quot; to write, &quot;a&quot; to append,
-or &quot;s&quot; to treat the file descriptor as a bidirectional socket connection.<br>
-<br>
-When opening for writing (&quot;w&quot;), an optional number from 1 to 9 can be
-supplied which enables Flate compression of the file. Compression is
-not supported for the &quot;a&quot; (append) mode.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsFilePeekChar">cupsFilePeekChar</a></h3>
-<p class="description">Peek at the next character from a file.</p>
-<p class="code">
-int cupsFilePeekChar (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_file_t">cups_file_t</a> *fp<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>fp</dt>
-<dd class="description">CUPS file</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Character or -1 on end of file</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsFilePrintf">cupsFilePrintf</a></h3>
-<p class="description">Write a formatted string.</p>
-<p class="code">
-int cupsFilePrintf (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_file_t">cups_file_t</a> *fp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *format,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;...<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>fp</dt>
-<dd class="description">CUPS file</dd>
-<dt>format</dt>
-<dd class="description">Printf-style format string</dd>
-<dt>...</dt>
-<dd class="description">Additional args as necessary</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of bytes written or -1 on error</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsFilePutChar">cupsFilePutChar</a></h3>
-<p class="description">Write a character.</p>
-<p class="code">
-int cupsFilePutChar (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_file_t">cups_file_t</a> *fp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int c<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>fp</dt>
-<dd class="description">CUPS file</dd>
-<dt>c</dt>
-<dd class="description">Character to write</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">0 on success, -1 on error</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span><a name="cupsFilePutConf">cupsFilePutConf</a></h3>
-<p class="description">Write a configuration line.</p>
-<p class="code">
-ssize_t cupsFilePutConf (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_file_t">cups_file_t</a> *fp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *directive,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *value<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>fp</dt>
-<dd class="description">CUPS file</dd>
-<dt>directive</dt>
-<dd class="description">Directive</dd>
-<dt>value</dt>
-<dd class="description">Value</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of bytes written or -1 on error</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function handles any comment escaping of the value.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsFilePuts">cupsFilePuts</a></h3>
-<p class="description">Write a string.</p>
-<p class="code">
-int cupsFilePuts (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_file_t">cups_file_t</a> *fp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *s<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>fp</dt>
-<dd class="description">CUPS file</dd>
-<dt>s</dt>
-<dd class="description">String to write</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of bytes written or -1 on error</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Like the <code>fputs</code> function, no newline is appended to the string.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsFileRead">cupsFileRead</a></h3>
-<p class="description">Read from a file.</p>
-<p class="code">
-ssize_t cupsFileRead (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_file_t">cups_file_t</a> *fp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *buf,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;size_t bytes<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>fp</dt>
-<dd class="description">CUPS file</dd>
-<dt>buf</dt>
-<dd class="description">Buffer</dd>
-<dt>bytes</dt>
-<dd class="description">Number of bytes to read</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of bytes read or -1 on error</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsFileRewind">cupsFileRewind</a></h3>
-<p class="description">Set the current file position to the beginning of the
-file.</p>
-<p class="code">
-off_t cupsFileRewind (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_file_t">cups_file_t</a> *fp<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>fp</dt>
-<dd class="description">CUPS file</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New file position or -1 on error</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsFileSeek">cupsFileSeek</a></h3>
-<p class="description">Seek in a file.</p>
-<p class="code">
-off_t cupsFileSeek (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_file_t">cups_file_t</a> *fp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;off_t pos<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>fp</dt>
-<dd class="description">CUPS file</dd>
-<dt>pos</dt>
-<dd class="description">Position in file</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New file position or -1 on error</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsFileStderr">cupsFileStderr</a></h3>
-<p class="description">Return a CUPS file associated with stderr.</p>
-<p class="code">
-<a href="#cups_file_t">cups_file_t</a> *cupsFileStderr (void);</p>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">CUPS file</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsFileStdin">cupsFileStdin</a></h3>
-<p class="description">Return a CUPS file associated with stdin.</p>
-<p class="code">
-<a href="#cups_file_t">cups_file_t</a> *cupsFileStdin (void);</p>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">CUPS file</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsFileStdout">cupsFileStdout</a></h3>
-<p class="description">Return a CUPS file associated with stdout.</p>
-<p class="code">
-<a href="#cups_file_t">cups_file_t</a> *cupsFileStdout (void);</p>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">CUPS file</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsFileTell">cupsFileTell</a></h3>
-<p class="description">Return the current file position.</p>
-<p class="code">
-off_t cupsFileTell (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_file_t">cups_file_t</a> *fp<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>fp</dt>
-<dd class="description">CUPS file</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">File position</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsFileUnlock">cupsFileUnlock</a></h3>
-<p class="description">Unlock access to a file.</p>
-<p class="code">
-int cupsFileUnlock (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_file_t">cups_file_t</a> *fp<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>fp</dt>
-<dd class="description">CUPS file</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">0 on success, -1 on error</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsFileWrite">cupsFileWrite</a></h3>
-<p class="description">Write to a file.</p>
-<p class="code">
-ssize_t cupsFileWrite (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_file_t">cups_file_t</a> *fp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *buf,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;size_t bytes<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>fp</dt>
-<dd class="description">CUPS file</dd>
-<dt>buf</dt>
-<dd class="description">Buffer</dd>
-<dt>bytes</dt>
-<dd class="description">Number of bytes to write</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of bytes written or -1 on error</p>
-<h2 class="title"><a name="TYPES">Data Types</a></h2>
-<h3 class="typedef"><a name="cups_dentry_t">cups_dentry_t</a></h3>
-<p class="description">Directory entry type</p>
-<p class="code">
-typedef struct <a href="#cups_dentry_s">cups_dentry_s</a> cups_dentry_t;
-</p>
-<h3 class="typedef"><a name="cups_dir_t">cups_dir_t</a></h3>
-<p class="description">Directory type</p>
-<p class="code">
-typedef struct _cups_dir_s cups_dir_t;
-</p>
-<h3 class="typedef"><a name="cups_file_t">cups_file_t</a></h3>
-<p class="description">CUPS file type</p>
-<p class="code">
-typedef struct _cups_file_s cups_file_t;
-</p>
-<h2 class="title"><a name="STRUCTURES">Structures</a></h2>
-<h3 class="struct"><a name="cups_dentry_s">cups_dentry_s</a></h3>
-<p class="description">Directory entry type</p>
-<p class="code">struct cups_dentry_s {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;struct stat fileinfo;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char filename[260];<br>
-};</p>
-<h4 class="members">Members</h4>
-<dl>
-<dt>fileinfo </dt>
-<dd class="description">File information</dd>
-<dt>filename[260] </dt>
-<dd class="description">File name</dd>
-</dl>
-</div>
-</body>
-</html>
diff --git a/doc/help/api-filter.html b/doc/help/api-filter.html
index 25e99da..94fec49 100644
--- a/doc/help/api-filter.html
+++ b/doc/help/api-filter.html
@@ -1,12 +1,15 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!doctype html>
<html>
<!-- SECTION: Programming -->
-<head>
- <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">
-<style type="text/css"><!--
+ <head>
+ <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.11">
+ <meta name="author" content="Unknown">
+ <meta name="copyright" content="Unknown">
+ <meta name="version" content="0.0">
+ <style type="text/css"><!--
BODY {
font-family: lucida grande, geneva, helvetica, arial, sans-serif;
}
@@ -349,9 +352,8 @@ div.contents ul.subcontents li {
text-indent: -1em;
}
--></style>
-</head>
-<body>
-<div class='body'>
+ </head>
+ <body>
<!--
Filter and backend programming header for CUPS.
@@ -392,51 +394,54 @@ div.contents ul.subcontents li {
</tr>
</tbody>
</table></div>
-<h2 class="title">Contents</h2>
-<ul class="contents">
-<li><a href="#OVERVIEW">Overview</a><ul class="subcontents">
- <li><a href="#SECURITY">Security Considerations</a></li>
- <li><a href="#SIGNALS">Canceled Jobs and Signal Handling</a></li>
- <li><a href="#PERMISSIONS">File Permissions</a></li>
- <li><a href="#TEMPFILES">Temporary Files</a></li>
- <li><a href="#COPIES">Copy Generation</a></li>
- <li><a href="#EXITCODES">Exit Codes</a></li>
- <li><a href="#ENVIRONMENT">Environment Variables</a></li>
- <li><a href="#MESSAGES">Communicating with the Scheduler</a></li>
- <li><a href="#COMMUNICATING_BACKEND">Communicating with the Backend</a></li>
- <li><a href="#COMMUNICATING_FILTER">Communicating with Filters</a></li>
- <li><a href="#SNMP">Doing SNMP Queries with Network Printers</a></li>
-</ul></li>
-<li><a href="#SANDBOXING">Sandboxing on macOS</a></li>
-<li><a href="#FUNCTIONS">Functions</a><ul class="code">
- <li><a href="#cupsBackChannelRead" title="Read data from the backchannel.">cupsBackChannelRead</a></li>
- <li><a href="#cupsBackChannelWrite" title="Write data to the backchannel.">cupsBackChannelWrite</a></li>
- <li><a href="#cupsBackendDeviceURI" title="Get the device URI for a backend.">cupsBackendDeviceURI</a></li>
- <li><a href="#cupsBackendReport" title="Write a device line from a backend.">cupsBackendReport</a></li>
- <li><a href="#cupsSideChannelDoRequest" title="Send a side-channel command to a backend and wait for a response.">cupsSideChannelDoRequest</a></li>
- <li><a href="#cupsSideChannelRead" title="Read a side-channel message.">cupsSideChannelRead</a></li>
- <li><a href="#cupsSideChannelSNMPGet" title="Query a SNMP OID's value.">cupsSideChannelSNMPGet</a></li>
- <li><a href="#cupsSideChannelSNMPWalk" title="Query multiple SNMP OID values.">cupsSideChannelSNMPWalk</a></li>
- <li><a href="#cupsSideChannelWrite" title="Write a side-channel message.">cupsSideChannelWrite</a></li>
-</ul></li>
-<li><a href="#TYPES">Data Types</a><ul class="code">
- <li><a href="#cups_backend_t" title="Backend exit codes">cups_backend_t</a></li>
- <li><a href="#cups_sc_bidi_t" title="Bidirectional capabilities">cups_sc_bidi_t</a></li>
- <li><a href="#cups_sc_command_t" title="Request command codes">cups_sc_command_t</a></li>
- <li><a href="#cups_sc_connected_t" title="Connectivity values">cups_sc_connected_t</a></li>
- <li><a href="#cups_sc_state_t" title="Printer state bits">cups_sc_state_t</a></li>
- <li><a href="#cups_sc_status_t" title="Response status codes">cups_sc_status_t</a></li>
- <li><a href="#cups_sc_walk_func_t" title="SNMP walk callback">cups_sc_walk_func_t</a></li>
-</ul></li>
-<li><a href="#ENUMERATIONS">Constants</a><ul class="code">
- <li><a href="#cups_backend_e" title="Backend exit codes">cups_backend_e</a></li>
- <li><a href="#cups_sc_bidi_e" title="Bidirectional capability values">cups_sc_bidi_e</a></li>
- <li><a href="#cups_sc_command_e" title="Request command codes">cups_sc_command_e</a></li>
- <li><a href="#cups_sc_connected_e" title="Connectivity values">cups_sc_connected_e</a></li>
- <li><a href="#cups_sc_state_e" title="Printer state bits">cups_sc_state_e</a></li>
- <li><a href="#cups_sc_status_e" title="Response status codes">cups_sc_status_e</a></li>
-</ul></li>
-</ul>
+ <div class="contents">
+ <h2 class="title">Contents</h2>
+ <ul class="contents">
+ <li><a href="#OVERVIEW">Overview</a><ul class="subcontents">
+ <li><a href="#SECURITY">Security Considerations</a></li>
+ <li><a href="#SIGNALS">Canceled Jobs and Signal Handling</a></li>
+ <li><a href="#PERMISSIONS">File Permissions</a></li>
+ <li><a href="#TEMPFILES">Temporary Files</a></li>
+ <li><a href="#COPIES">Copy Generation</a></li>
+ <li><a href="#EXITCODES">Exit Codes</a></li>
+ <li><a href="#ENVIRONMENT">Environment Variables</a></li>
+ <li><a href="#MESSAGES">Communicating with the Scheduler</a></li>
+ <li><a href="#COMMUNICATING_BACKEND">Communicating with the Backend</a></li>
+ <li><a href="#COMMUNICATING_FILTER">Communicating with Filters</a></li>
+ <li><a href="#SNMP">Doing SNMP Queries with Network Printers</a></li>
+ </ul></li>
+ <li><a href="#SANDBOXING">Sandboxing on macOS</a></li>
+ <li><a href="#FUNCTIONS">Functions</a><ul class="subcontents">
+ <li><a href="#cupsBackChannelRead">cupsBackChannelRead</a></li>
+ <li><a href="#cupsBackChannelWrite">cupsBackChannelWrite</a></li>
+ <li><a href="#cupsBackendDeviceURI">cupsBackendDeviceURI</a></li>
+ <li><a href="#cupsBackendReport">cupsBackendReport</a></li>
+ <li><a href="#cupsSideChannelDoRequest">cupsSideChannelDoRequest</a></li>
+ <li><a href="#cupsSideChannelRead">cupsSideChannelRead</a></li>
+ <li><a href="#cupsSideChannelSNMPGet">cupsSideChannelSNMPGet</a></li>
+ <li><a href="#cupsSideChannelSNMPWalk">cupsSideChannelSNMPWalk</a></li>
+ <li><a href="#cupsSideChannelWrite">cupsSideChannelWrite</a></li>
+ </ul></li>
+ <li><a href="#TYPES">Data Types</a><ul class="subcontents">
+ <li><a href="#cups_backend_t">cups_backend_t</a></li>
+ <li><a href="#cups_sc_bidi_t">cups_sc_bidi_t</a></li>
+ <li><a href="#cups_sc_command_t">cups_sc_command_t</a></li>
+ <li><a href="#cups_sc_connected_t">cups_sc_connected_t</a></li>
+ <li><a href="#cups_sc_state_t">cups_sc_state_t</a></li>
+ <li><a href="#cups_sc_status_t">cups_sc_status_t</a></li>
+ <li><a href="#cups_sc_walk_func_t">cups_sc_walk_func_t</a></li>
+ </ul></li>
+ <li><a href="#ENUMERATIONS">Enumerations</a><ul class="subcontents">
+ <li><a href="#cups_backend_e">cups_backend_e</a></li>
+ <li><a href="#cups_sc_bidi_e">cups_sc_bidi_e</a></li>
+ <li><a href="#cups_sc_command_e">cups_sc_command_e</a></li>
+ <li><a href="#cups_sc_connected_e">cups_sc_connected_e</a></li>
+ <li><a href="#cups_sc_state_e">cups_sc_state_e</a></li>
+ <li><a href="#cups_sc_status_e">cups_sc_status_e</a></li>
+ </ul></li>
+ </ul>
+ </div>
+ <div class="body">
<!--
Filter and backend programming introduction for CUPS.
@@ -1311,134 +1316,112 @@ void *my_data;
</ol>
<blockquote><b>Note:</b> The sandbox profile used in CUPS 2.0 still allows some actions that are not listed above - these privileges will be removed over time until the profile matches the list above.</blockquote>
-<h2 class="title"><a name="FUNCTIONS">Functions</a></h2>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsBackChannelRead">cupsBackChannelRead</a></h3>
-<p class="description">Read data from the backchannel.</p>
+ <h2 class="title"><a id="FUNCTIONS">Functions</a></h2>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="cupsBackChannelRead">cupsBackChannelRead</a></h3>
+ <p class="description">Read data from the backchannel.</p>
<p class="code">
-ssize_t cupsBackChannelRead (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *buffer,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;size_t bytes,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;double timeout<br>
-);</p>
+ssize_t cupsBackChannelRead(char *buffer, size_t bytes, double timeout);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>buffer</dt>
-<dd class="description">Buffer to read into</dd>
-<dt>bytes</dt>
-<dd class="description">Bytes to read</dd>
-<dt>timeout</dt>
-<dd class="description">Timeout in seconds, typically 0.0 to poll</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>buffer</th>
+ <td class="description">Buffer to read into</td></tr>
+<tr><th>bytes</th>
+ <td class="description">Bytes to read</td></tr>
+<tr><th>timeout</th>
+ <td class="description">Timeout in seconds, typically 0.0 to poll</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Bytes read or -1 on error</p>
+ <p class="description">Bytes read or -1 on error</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">Reads up to &quot;bytes&quot; bytes from the backchannel/backend. The &quot;timeout&quot;
+ <p class="discussion">Reads up to &quot;bytes&quot; bytes from the backchannel/backend. The &quot;timeout&quot;
parameter controls how many seconds to wait for the data - use 0.0 to
return immediately if there is no data, -1.0 to wait for data indefinitely.
</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsBackChannelWrite">cupsBackChannelWrite</a></h3>
-<p class="description">Write data to the backchannel.</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="cupsBackChannelWrite">cupsBackChannelWrite</a></h3>
+ <p class="description">Write data to the backchannel.</p>
<p class="code">
-ssize_t cupsBackChannelWrite (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *buffer,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;size_t bytes,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;double timeout<br>
-);</p>
+ssize_t cupsBackChannelWrite(const char *buffer, size_t bytes, double timeout);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>buffer</dt>
-<dd class="description">Buffer to write</dd>
-<dt>bytes</dt>
-<dd class="description">Bytes to write</dd>
-<dt>timeout</dt>
-<dd class="description">Timeout in seconds, typically 1.0</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>buffer</th>
+ <td class="description">Buffer to write</td></tr>
+<tr><th>bytes</th>
+ <td class="description">Bytes to write</td></tr>
+<tr><th>timeout</th>
+ <td class="description">Timeout in seconds, typically 1.0</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Bytes written or -1 on error</p>
+ <p class="description">Bytes written or -1 on error</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">Writes &quot;bytes&quot; bytes to the backchannel/filter. The &quot;timeout&quot; parameter
+ <p class="discussion">Writes &quot;bytes&quot; bytes to the backchannel/filter. The &quot;timeout&quot; parameter
controls how many seconds to wait for the data to be written - use
0.0 to return immediately if the data cannot be written, -1.0 to wait
indefinitely.
</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsBackendDeviceURI">cupsBackendDeviceURI</a></h3>
-<p class="description">Get the device URI for a backend.</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="cupsBackendDeviceURI">cupsBackendDeviceURI</a></h3>
+ <p class="description">Get the device URI for a backend.</p>
<p class="code">
-const char *cupsBackendDeviceURI (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char **argv<br>
-);</p>
+const char *cupsBackendDeviceURI(char **argv);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>argv</dt>
-<dd class="description">Command-line arguments</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>argv</th>
+ <td class="description">Command-line arguments</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Device URI or <code>NULL</code></p>
+ <p class="description">Device URI or <code>NULL</code></p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">The &quot;argv&quot; argument is the argv argument passed to main(). This
+ <p class="discussion">The &quot;argv&quot; argument is the argv argument passed to main(). This
function returns the device URI passed in the DEVICE_URI environment
variable or the device URI passed in argv[0], whichever is found
first.
</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span><a name="cupsBackendReport">cupsBackendReport</a></h3>
-<p class="description">Write a device line from a backend.</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.4/macOS 10.6&#160;</span><a id="cupsBackendReport">cupsBackendReport</a></h3>
+ <p class="description">Write a device line from a backend.</p>
<p class="code">
-void cupsBackendReport (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *device_scheme,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *device_uri,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *device_make_and_model,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *device_info,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *device_id,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *device_location<br>
-);</p>
+void cupsBackendReport(const char *device_scheme, const char *device_uri, const char *device_make_and_model, const char *device_info, const char *device_id, const char *device_location);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>device_scheme</dt>
-<dd class="description">device-scheme string</dd>
-<dt>device_uri</dt>
-<dd class="description">device-uri string</dd>
-<dt>device_make_and_model</dt>
-<dd class="description">device-make-and-model string or <code>NULL</code></dd>
-<dt>device_info</dt>
-<dd class="description">device-info string or <code>NULL</code></dd>
-<dt>device_id</dt>
-<dd class="description">device-id string or <code>NULL</code></dd>
-<dt>device_location</dt>
-<dd class="description">device-location string or <code>NULL</code></dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>device_scheme</th>
+ <td class="description">device-scheme string</td></tr>
+<tr><th>device_uri</th>
+ <td class="description">device-uri string</td></tr>
+<tr><th>device_make_and_model</th>
+ <td class="description">device-make-and-model string or <code>NULL</code></td></tr>
+<tr><th>device_info</th>
+ <td class="description">device-info string or <code>NULL</code></td></tr>
+<tr><th>device_id</th>
+ <td class="description">device-id string or <code>NULL</code></td></tr>
+<tr><th>device_location</th>
+ <td class="description">device-location string or <code>NULL</code></td></tr>
+</tbody></table>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function writes a single device line to stdout for a backend.
+ <p class="discussion">This function writes a single device line to stdout for a backend.
It handles quoting of special characters in the device-make-and-model,
device-info, device-id, and device-location strings.
</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.3/macOS 10.5&nbsp;</span><a name="cupsSideChannelDoRequest">cupsSideChannelDoRequest</a></h3>
-<p class="description">Send a side-channel command to a backend and wait for a response.</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.3/macOS 10.5&#160;</span><a id="cupsSideChannelDoRequest">cupsSideChannelDoRequest</a></h3>
+ <p class="description">Send a side-channel command to a backend and wait for a response.</p>
<p class="code">
-<a href="#cups_sc_status_t">cups_sc_status_t</a> cupsSideChannelDoRequest (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_sc_command_t">cups_sc_command_t</a> command,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *data,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int *datalen,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;double timeout<br>
-);</p>
+<a href="#cups_sc_status_t">cups_sc_status_t</a> cupsSideChannelDoRequest(<a href="#cups_sc_command_t">cups_sc_command_t</a> command, char *data, int *datalen, double timeout);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>command</dt>
-<dd class="description">Command to send</dd>
-<dt>data</dt>
-<dd class="description">Response data buffer pointer</dd>
-<dt>datalen</dt>
-<dd class="description">Size of data buffer on entry, number of bytes in buffer on return</dd>
-<dt>timeout</dt>
-<dd class="description">Timeout in seconds</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>command</th>
+ <td class="description">Command to send</td></tr>
+<tr><th>data</th>
+ <td class="description">Response data buffer pointer</td></tr>
+<tr><th>datalen</th>
+ <td class="description">Size of data buffer on entry, number of bytes in buffer on return</td></tr>
+<tr><th>timeout</th>
+ <td class="description">Timeout in seconds</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Status of command</p>
+ <p class="description">Status of command</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function is normally only called by filters, drivers, or port
+ <p class="discussion">This function is normally only called by filters, drivers, or port
monitors in order to communicate with the backend used by the current
printer. Programs must be prepared to handle timeout or &quot;not
implemented&quot; status codes, which indicate that the backend or device
@@ -1449,33 +1432,27 @@ pointed to by the &quot;data&quot; parameter. cupsSideChannelDoRequest() will
update the value to contain the number of data bytes in the buffer.
</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.3/macOS 10.5&nbsp;</span><a name="cupsSideChannelRead">cupsSideChannelRead</a></h3>
-<p class="description">Read a side-channel message.</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.3/macOS 10.5&#160;</span><a id="cupsSideChannelRead">cupsSideChannelRead</a></h3>
+ <p class="description">Read a side-channel message.</p>
<p class="code">
-int cupsSideChannelRead (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_sc_command_t">cups_sc_command_t</a> *command,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_sc_status_t">cups_sc_status_t</a> *status,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *data,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int *datalen,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;double timeout<br>
-);</p>
+int cupsSideChannelRead(<a href="#cups_sc_command_t">cups_sc_command_t</a> *command, <a href="#cups_sc_status_t">cups_sc_status_t</a> *status, char *data, int *datalen, double timeout);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>command</dt>
-<dd class="description">Command code</dd>
-<dt>status</dt>
-<dd class="description">Status code</dd>
-<dt>data</dt>
-<dd class="description">Data buffer pointer</dd>
-<dt>datalen</dt>
-<dd class="description">Size of data buffer on entry, number of bytes in buffer on return</dd>
-<dt>timeout</dt>
-<dd class="description">Timeout in seconds</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>command</th>
+ <td class="description">Command code</td></tr>
+<tr><th>status</th>
+ <td class="description">Status code</td></tr>
+<tr><th>data</th>
+ <td class="description">Data buffer pointer</td></tr>
+<tr><th>datalen</th>
+ <td class="description">Size of data buffer on entry, number of bytes in buffer on return</td></tr>
+<tr><th>timeout</th>
+ <td class="description">Timeout in seconds</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">0 on success, -1 on error</p>
+ <p class="description">0 on success, -1 on error</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function is normally only called by backend programs to read
+ <p class="discussion">This function is normally only called by backend programs to read
commands from a filter, driver, or port monitor program. The
caller must be prepared to handle incomplete or invalid messages
and return the corresponding status codes.<br>
@@ -1485,30 +1462,25 @@ pointed to by the &quot;data&quot; parameter. cupsSideChannelDoRequest() will
update the value to contain the number of data bytes in the buffer.
</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span><a name="cupsSideChannelSNMPGet">cupsSideChannelSNMPGet</a></h3>
-<p class="description">Query a SNMP OID's value.</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.4/macOS 10.6&#160;</span><a id="cupsSideChannelSNMPGet">cupsSideChannelSNMPGet</a></h3>
+ <p class="description">Query a SNMP OID's value.</p>
<p class="code">
-<a href="#cups_sc_status_t">cups_sc_status_t</a> cupsSideChannelSNMPGet (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *oid,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *data,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int *datalen,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;double timeout<br>
-);</p>
+<a href="#cups_sc_status_t">cups_sc_status_t</a> cupsSideChannelSNMPGet(const char *oid, char *data, int *datalen, double timeout);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>oid</dt>
-<dd class="description">OID to query</dd>
-<dt>data</dt>
-<dd class="description">Buffer for OID value</dd>
-<dt>datalen</dt>
-<dd class="description">Size of OID buffer on entry, size of value on return</dd>
-<dt>timeout</dt>
-<dd class="description">Timeout in seconds</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>oid</th>
+ <td class="description">OID to query</td></tr>
+<tr><th>data</th>
+ <td class="description">Buffer for OID value</td></tr>
+<tr><th>datalen</th>
+ <td class="description">Size of OID buffer on entry, size of value on return</td></tr>
+<tr><th>timeout</th>
+ <td class="description">Timeout in seconds</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Query status</p>
+ <p class="description">Query status</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function asks the backend to do a SNMP OID query on behalf of the
+ <p class="discussion">This function asks the backend to do a SNMP OID query on behalf of the
filter, port monitor, or backend using the default community name.<br>
<br>
&quot;oid&quot; contains a numeric OID consisting of integers separated by periods,
@@ -1526,30 +1498,25 @@ support SNMP queries. <code>CUPS_SC_STATUS_NO_RESPONSE</code> is returned when
the printer does not respond to the SNMP query.
</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span><a name="cupsSideChannelSNMPWalk">cupsSideChannelSNMPWalk</a></h3>
-<p class="description">Query multiple SNMP OID values.</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.4/macOS 10.6&#160;</span><a id="cupsSideChannelSNMPWalk">cupsSideChannelSNMPWalk</a></h3>
+ <p class="description">Query multiple SNMP OID values.</p>
<p class="code">
-<a href="#cups_sc_status_t">cups_sc_status_t</a> cupsSideChannelSNMPWalk (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *oid,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;double timeout,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_sc_walk_func_t">cups_sc_walk_func_t</a> cb,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;void *context<br>
-);</p>
+<a href="#cups_sc_status_t">cups_sc_status_t</a> cupsSideChannelSNMPWalk(const char *oid, double timeout, <a href="#cups_sc_walk_func_t">cups_sc_walk_func_t</a> cb, void *context);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>oid</dt>
-<dd class="description">First numeric OID to query</dd>
-<dt>timeout</dt>
-<dd class="description">Timeout for each query in seconds</dd>
-<dt>cb</dt>
-<dd class="description">Function to call with each value</dd>
-<dt>context</dt>
-<dd class="description">Application-defined pointer to send to callback</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>oid</th>
+ <td class="description">First numeric OID to query</td></tr>
+<tr><th>timeout</th>
+ <td class="description">Timeout for each query in seconds</td></tr>
+<tr><th>cb</th>
+ <td class="description">Function to call with each value</td></tr>
+<tr><th>context</th>
+ <td class="description">Application-defined pointer to send to callback</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Status of first query of <code>CUPS_SC_STATUS_OK</code> on success</p>
+ <p class="description">Status of first query of <code>CUPS_SC_STATUS_OK</code> on success</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function asks the backend to do multiple SNMP OID queries on behalf
+ <p class="discussion">This function asks the backend to do multiple SNMP OID queries on behalf
of the filter, port monitor, or backend using the default community name.
All OIDs under the &quot;parent&quot; OID are queried and the results are sent to
the callback function you provide.<br>
@@ -1572,175 +1539,133 @@ support SNMP queries. <code>CUPS_SC_STATUS_NO_RESPONSE</code> is returned when
the printer does not respond to the first SNMP query.
</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.3/macOS 10.5&nbsp;</span><a name="cupsSideChannelWrite">cupsSideChannelWrite</a></h3>
-<p class="description">Write a side-channel message.</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.3/macOS 10.5&#160;</span><a id="cupsSideChannelWrite">cupsSideChannelWrite</a></h3>
+ <p class="description">Write a side-channel message.</p>
<p class="code">
-int cupsSideChannelWrite (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_sc_command_t">cups_sc_command_t</a> command,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_sc_status_t">cups_sc_status_t</a> status,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *data,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int datalen,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;double timeout<br>
-);</p>
+int cupsSideChannelWrite(<a href="#cups_sc_command_t">cups_sc_command_t</a> command, <a href="#cups_sc_status_t">cups_sc_status_t</a> status, const char *data, int datalen, double timeout);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>command</dt>
-<dd class="description">Command code</dd>
-<dt>status</dt>
-<dd class="description">Status code</dd>
-<dt>data</dt>
-<dd class="description">Data buffer pointer</dd>
-<dt>datalen</dt>
-<dd class="description">Number of bytes of data</dd>
-<dt>timeout</dt>
-<dd class="description">Timeout in seconds</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>command</th>
+ <td class="description">Command code</td></tr>
+<tr><th>status</th>
+ <td class="description">Status code</td></tr>
+<tr><th>data</th>
+ <td class="description">Data buffer pointer</td></tr>
+<tr><th>datalen</th>
+ <td class="description">Number of bytes of data</td></tr>
+<tr><th>timeout</th>
+ <td class="description">Timeout in seconds</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">0 on success, -1 on error</p>
+ <p class="description">0 on success, -1 on error</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function is normally only called by backend programs to send
+ <p class="discussion">This function is normally only called by backend programs to send
responses to a filter, driver, or port monitor program.
</p>
-<h2 class="title"><a name="TYPES">Data Types</a></h2>
-<h3 class="typedef"><a name="cups_backend_t">cups_backend_t</a></h3>
-<p class="description">Backend exit codes</p>
-<p class="code">
+ <h2 class="title"><a id="TYPES">Data Types</a></h2>
+ <h3 class="typedef"><a id="cups_backend_t">cups_backend_t</a></h3>
+ <p class="description">Backend exit codes</p>
+ <p class="code">
typedef enum <a href="#cups_backend_e">cups_backend_e</a> cups_backend_t;
</p>
-<h3 class="typedef"><a name="cups_sc_bidi_t">cups_sc_bidi_t</a></h3>
-<p class="description">Bidirectional capabilities</p>
-<p class="code">
+ <h3 class="typedef"><a id="cups_sc_bidi_t">cups_sc_bidi_t</a></h3>
+ <p class="description">Bidirectional capabilities</p>
+ <p class="code">
typedef enum <a href="#cups_sc_bidi_e">cups_sc_bidi_e</a> cups_sc_bidi_t;
</p>
-<h3 class="typedef"><a name="cups_sc_command_t">cups_sc_command_t</a></h3>
-<p class="description">Request command codes</p>
-<p class="code">
+ <h3 class="typedef"><a id="cups_sc_command_t">cups_sc_command_t</a></h3>
+ <p class="description">Request command codes</p>
+ <p class="code">
typedef enum <a href="#cups_sc_command_e">cups_sc_command_e</a> cups_sc_command_t;
</p>
-<h3 class="typedef"><a name="cups_sc_connected_t">cups_sc_connected_t</a></h3>
-<p class="description">Connectivity values</p>
-<p class="code">
+ <h3 class="typedef"><a id="cups_sc_connected_t">cups_sc_connected_t</a></h3>
+ <p class="description">Connectivity values</p>
+ <p class="code">
typedef enum <a href="#cups_sc_connected_e">cups_sc_connected_e</a> cups_sc_connected_t;
</p>
-<h3 class="typedef"><a name="cups_sc_state_t">cups_sc_state_t</a></h3>
-<p class="description">Printer state bits</p>
-<p class="code">
+ <h3 class="typedef"><a id="cups_sc_state_t">cups_sc_state_t</a></h3>
+ <p class="description">Printer state bits</p>
+ <p class="code">
typedef enum <a href="#cups_sc_state_e">cups_sc_state_e</a> cups_sc_state_t;
</p>
-<h3 class="typedef"><a name="cups_sc_status_t">cups_sc_status_t</a></h3>
-<p class="description">Response status codes</p>
-<p class="code">
+ <h3 class="typedef"><a id="cups_sc_status_t">cups_sc_status_t</a></h3>
+ <p class="description">Response status codes</p>
+ <p class="code">
typedef enum <a href="#cups_sc_status_e">cups_sc_status_e</a> cups_sc_status_t;
</p>
-<h3 class="typedef"><a name="cups_sc_walk_func_t">cups_sc_walk_func_t</a></h3>
-<p class="description">SNMP walk callback</p>
-<p class="code">
+ <h3 class="typedef"><a id="cups_sc_walk_func_t">cups_sc_walk_func_t</a></h3>
+ <p class="description">SNMP walk callback</p>
+ <p class="code">
typedef void (*cups_sc_walk_func_t)(const char *oid, const char *data, int datalen, void *context);
</p>
-<h2 class="title"><a name="ENUMERATIONS">Constants</a></h2>
-<h3 class="enumeration"><a name="cups_backend_e">cups_backend_e</a></h3>
-<p class="description">Backend exit codes</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>CUPS_BACKEND_AUTH_REQUIRED </dt>
-<dd class="description">Job failed, authentication required</dd>
-<dt>CUPS_BACKEND_CANCEL </dt>
-<dd class="description">Job failed, cancel job</dd>
-<dt>CUPS_BACKEND_FAILED </dt>
-<dd class="description">Job failed, use error-policy</dd>
-<dt>CUPS_BACKEND_HOLD </dt>
-<dd class="description">Job failed, hold job</dd>
-<dt>CUPS_BACKEND_OK </dt>
-<dd class="description">Job completed successfully</dd>
-<dt>CUPS_BACKEND_RETRY </dt>
-<dd class="description">Job failed, retry this job later</dd>
-<dt>CUPS_BACKEND_RETRY_CURRENT </dt>
-<dd class="description">Job failed, retry this job immediately</dd>
-<dt>CUPS_BACKEND_STOP </dt>
-<dd class="description">Job failed, stop queue</dd>
-</dl>
-<h3 class="enumeration"><a name="cups_sc_bidi_e">cups_sc_bidi_e</a></h3>
-<p class="description">Bidirectional capability values</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>CUPS_SC_BIDI_NOT_SUPPORTED </dt>
-<dd class="description">Bidirectional I/O is not supported</dd>
-<dt>CUPS_SC_BIDI_SUPPORTED </dt>
-<dd class="description">Bidirectional I/O is supported</dd>
-</dl>
-<h3 class="enumeration"><a name="cups_sc_command_e">cups_sc_command_e</a></h3>
-<p class="description">Request command codes</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>CUPS_SC_CMD_DRAIN_OUTPUT </dt>
-<dd class="description">Drain all pending output</dd>
-<dt>CUPS_SC_CMD_GET_BIDI </dt>
-<dd class="description">Return bidirectional capabilities</dd>
-<dt>CUPS_SC_CMD_GET_CONNECTED <span class="info">&nbsp;CUPS 1.5/macOS 10.7&nbsp;</span></dt>
-<dd class="description">Return whether the backend is &quot;connected&quot; to the printer </dd>
-<dt>CUPS_SC_CMD_GET_DEVICE_ID </dt>
-<dd class="description">Return the IEEE-1284 device ID</dd>
-<dt>CUPS_SC_CMD_GET_STATE </dt>
-<dd class="description">Return the device state</dd>
-<dt>CUPS_SC_CMD_SNMP_GET <span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span></dt>
-<dd class="description">Query an SNMP OID </dd>
-<dt>CUPS_SC_CMD_SNMP_GET_NEXT <span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span></dt>
-<dd class="description">Query the next SNMP OID </dd>
-<dt>CUPS_SC_CMD_SOFT_RESET </dt>
-<dd class="description">Do a soft reset</dd>
-</dl>
-<h3 class="enumeration"><a name="cups_sc_connected_e">cups_sc_connected_e</a></h3>
-<p class="description">Connectivity values</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>CUPS_SC_CONNECTED </dt>
-<dd class="description">Backend is &quot;connected&quot; to printer</dd>
-<dt>CUPS_SC_NOT_CONNECTED </dt>
-<dd class="description">Backend is not &quot;connected&quot; to printer</dd>
-</dl>
-<h3 class="enumeration"><a name="cups_sc_state_e">cups_sc_state_e</a></h3>
-<p class="description">Printer state bits</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>CUPS_SC_STATE_BUSY </dt>
-<dd class="description">Device is busy</dd>
-<dt>CUPS_SC_STATE_ERROR </dt>
-<dd class="description">Other error condition</dd>
-<dt>CUPS_SC_STATE_MARKER_EMPTY </dt>
-<dd class="description">Toner/ink out condition</dd>
-<dt>CUPS_SC_STATE_MARKER_LOW </dt>
-<dd class="description">Toner/ink low condition</dd>
-<dt>CUPS_SC_STATE_MEDIA_EMPTY </dt>
-<dd class="description">Paper out condition</dd>
-<dt>CUPS_SC_STATE_MEDIA_LOW </dt>
-<dd class="description">Paper low condition</dd>
-<dt>CUPS_SC_STATE_OFFLINE </dt>
-<dd class="description">Device is offline</dd>
-<dt>CUPS_SC_STATE_ONLINE </dt>
-<dd class="description">Device is online</dd>
-</dl>
-<h3 class="enumeration"><a name="cups_sc_status_e">cups_sc_status_e</a></h3>
-<p class="description">Response status codes</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>CUPS_SC_STATUS_BAD_MESSAGE </dt>
-<dd class="description">The command/response message was invalid</dd>
-<dt>CUPS_SC_STATUS_IO_ERROR </dt>
-<dd class="description">An I/O error occurred</dd>
-<dt>CUPS_SC_STATUS_NONE </dt>
-<dd class="description">No status</dd>
-<dt>CUPS_SC_STATUS_NOT_IMPLEMENTED </dt>
-<dd class="description">Command not implemented</dd>
-<dt>CUPS_SC_STATUS_NO_RESPONSE </dt>
-<dd class="description">The device did not respond</dd>
-<dt>CUPS_SC_STATUS_OK </dt>
-<dd class="description">Operation succeeded</dd>
-<dt>CUPS_SC_STATUS_TIMEOUT </dt>
-<dd class="description">The backend did not respond</dd>
-<dt>CUPS_SC_STATUS_TOO_BIG </dt>
-<dd class="description">Response too big</dd>
-</dl>
-</div>
-</body>
+ <h2 class="title"><a id="ENUMERATIONS">Constants</a></h2>
+ <h3 class="enumeration"><a id="cups_backend_e">cups_backend_e</a></h3>
+ <p class="description">Backend exit codes</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>CUPS_BACKEND_AUTH_REQUIRED </th> <td class="description">Job failed, authentication required</td></tr>
+ <tr><th>CUPS_BACKEND_CANCEL </th> <td class="description">Job failed, cancel job</td></tr>
+ <tr><th>CUPS_BACKEND_FAILED </th> <td class="description">Job failed, use error-policy</td></tr>
+ <tr><th>CUPS_BACKEND_HOLD </th> <td class="description">Job failed, hold job</td></tr>
+ <tr><th>CUPS_BACKEND_OK </th> <td class="description">Job completed successfully</td></tr>
+ <tr><th>CUPS_BACKEND_RETRY </th> <td class="description">Job failed, retry this job later</td></tr>
+ <tr><th>CUPS_BACKEND_RETRY_CURRENT </th> <td class="description">Job failed, retry this job immediately</td></tr>
+ <tr><th>CUPS_BACKEND_STOP </th> <td class="description">Job failed, stop queue</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="cups_sc_bidi_e">cups_sc_bidi_e</a></h3>
+ <p class="description">Bidirectional capability values</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>CUPS_SC_BIDI_NOT_SUPPORTED </th> <td class="description">Bidirectional I/O is not supported</td></tr>
+ <tr><th>CUPS_SC_BIDI_SUPPORTED </th> <td class="description">Bidirectional I/O is supported</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="cups_sc_command_e">cups_sc_command_e</a></h3>
+ <p class="description">Request command codes</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>CUPS_SC_CMD_DRAIN_OUTPUT </th> <td class="description">Drain all pending output</td></tr>
+ <tr><th>CUPS_SC_CMD_GET_BIDI </th> <td class="description">Return bidirectional capabilities</td></tr>
+ <tr><th>CUPS_SC_CMD_GET_CONNECTED <span class="info">&#160;CUPS 1.5/macOS 10.7&#160;</span></th> <td class="description">Return whether the backend is &quot;connected&quot; to the printer </td></tr>
+ <tr><th>CUPS_SC_CMD_GET_DEVICE_ID </th> <td class="description">Return the IEEE-1284 device ID</td></tr>
+ <tr><th>CUPS_SC_CMD_GET_STATE </th> <td class="description">Return the device state</td></tr>
+ <tr><th>CUPS_SC_CMD_SNMP_GET <span class="info">&#160;CUPS 1.4/macOS 10.6&#160;</span></th> <td class="description">Query an SNMP OID </td></tr>
+ <tr><th>CUPS_SC_CMD_SNMP_GET_NEXT <span class="info">&#160;CUPS 1.4/macOS 10.6&#160;</span></th> <td class="description">Query the next SNMP OID </td></tr>
+ <tr><th>CUPS_SC_CMD_SOFT_RESET </th> <td class="description">Do a soft reset</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="cups_sc_connected_e">cups_sc_connected_e</a></h3>
+ <p class="description">Connectivity values</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>CUPS_SC_CONNECTED </th> <td class="description">Backend is &quot;connected&quot; to printer</td></tr>
+ <tr><th>CUPS_SC_NOT_CONNECTED </th> <td class="description">Backend is not &quot;connected&quot; to printer</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="cups_sc_state_e">cups_sc_state_e</a></h3>
+ <p class="description">Printer state bits</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>CUPS_SC_STATE_BUSY </th> <td class="description">Device is busy</td></tr>
+ <tr><th>CUPS_SC_STATE_ERROR </th> <td class="description">Other error condition</td></tr>
+ <tr><th>CUPS_SC_STATE_MARKER_EMPTY </th> <td class="description">Toner/ink out condition</td></tr>
+ <tr><th>CUPS_SC_STATE_MARKER_LOW </th> <td class="description">Toner/ink low condition</td></tr>
+ <tr><th>CUPS_SC_STATE_MEDIA_EMPTY </th> <td class="description">Paper out condition</td></tr>
+ <tr><th>CUPS_SC_STATE_MEDIA_LOW </th> <td class="description">Paper low condition</td></tr>
+ <tr><th>CUPS_SC_STATE_OFFLINE </th> <td class="description">Device is offline</td></tr>
+ <tr><th>CUPS_SC_STATE_ONLINE </th> <td class="description">Device is online</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="cups_sc_status_e">cups_sc_status_e</a></h3>
+ <p class="description">Response status codes</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>CUPS_SC_STATUS_BAD_MESSAGE </th> <td class="description">The command/response message was invalid</td></tr>
+ <tr><th>CUPS_SC_STATUS_IO_ERROR </th> <td class="description">An I/O error occurred</td></tr>
+ <tr><th>CUPS_SC_STATUS_NONE </th> <td class="description">No status</td></tr>
+ <tr><th>CUPS_SC_STATUS_NOT_IMPLEMENTED </th> <td class="description">Command not implemented</td></tr>
+ <tr><th>CUPS_SC_STATUS_NO_RESPONSE </th> <td class="description">The device did not respond</td></tr>
+ <tr><th>CUPS_SC_STATUS_OK </th> <td class="description">Operation succeeded</td></tr>
+ <tr><th>CUPS_SC_STATUS_TIMEOUT </th> <td class="description">The backend did not respond</td></tr>
+ <tr><th>CUPS_SC_STATUS_TOO_BIG </th> <td class="description">Response too big</td></tr>
+</tbody></table>
+ </div>
+ </body>
</html>
diff --git a/doc/help/api-httpipp.html b/doc/help/api-httpipp.html
deleted file mode 100644
index 525067d..0000000
--- a/doc/help/api-httpipp.html
+++ /dev/null
@@ -1,6777 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<!-- SECTION: Programming -->
-<head>
- <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">
-<style type="text/css"><!--
-BODY {
- font-family: lucida grande, geneva, helvetica, arial, sans-serif;
-}
-
-H1, H2, H3, H4, H5, H6, P, TD, TH {
- font-family: lucida grande, geneva, helvetica, arial, sans-serif;
-}
-
-KBD {
- font-family: monaco, courier, monospace;
- font-weight: bold;
-}
-
-PRE {
- font-family: monaco, courier, monospace;
-}
-
-PRE.command {
- border: dotted thin #7f7f7f;
- margin-left: 36pt;
- padding: 10px;
-}
-
-P.compact {
- margin: 0;
-}
-
-P.example {
- font-style: italic;
- margin-left: 36pt;
-}
-
-DL.man DD {
- margin-left: 5em;
-}
-
-DL.man DT {
- margin-left: 0;
-}
-
-PRE.man {
- margin: 0;
-}
-
-PRE.example {
- background: #eeeeee;
- border: dotted thin #999999;
- margin-left: 36pt;
- padding: 10pt;
-}
-
-PRE.command EM, PRE.example EM {
- font-family: lucida grande, geneva, helvetica, arial, sans-serif;
-}
-
-P.command {
- font-family: monaco, courier, monospace;
- margin-left: 36pt;
-}
-
-P.formula {
- font-style: italic;
- margin-left: 36pt;
-}
-
-BLOCKQUOTE {
- background: #eeeeee;
- border: solid thin #999999;
- padding: 10pt;
-}
-
-A IMG {
- border: none;
-}
-
-A:link:hover IMG {
- background: #f0f0f0;
- border-radius: 10px;
- -moz-border-radius: 10px;
-}
-
-A:link, A:visited {
- font-weight: inherit;
- text-decoration: none;
-}
-
-A:link:hover, A:visited:hover, A:active {
- text-decoration: underline;
-}
-
-SUB, SUP {
- font-size: 50%;
-}
-
-TR.data, TD.data, TR.data TD {
- margin-top: 10pt;
- padding: 5pt;
- border-bottom: solid 1pt #999999;
-}
-
-TR.data TH {
- border-bottom: solid 1pt #999999;
- padding-top: 10pt;
- padding-left: 5pt;
- text-align: left;
-}
-
-DIV.table TABLE {
- border: solid thin #999999;
- border-collapse: collapse;
- border-spacing: 0;
- margin-left: auto;
- margin-right: auto;
-}
-
-DIV.table CAPTION {
- caption-side: top;
- font-size: 120%;
- font-style: italic;
- font-weight: bold;
- margin-left: auto;
- margin-right: auto;
-}
-
-DIV.table TABLE TD {
- border: solid thin #cccccc;
- padding-top: 5pt;
-}
-
-DIV.table TABLE TH {
- background: #cccccc;
- border: none;
- border-bottom: solid thin #999999;
-}
-
-DIV.figure TABLE {
- margin-left: auto;
- margin-right: auto;
-}
-
-DIV.figure CAPTION {
- caption-side: bottom;
- font-size: 120%;
- font-style: italic;
- font-weight: bold;
- margin-left: auto;
- margin-right: auto;
-}
-
-TH.label {
- text-align: right;
- vertical-align: top;
-}
-
-TH.sublabel {
- text-align: right;
- font-weight: normal;
-}
-
-HR {
- border: solid thin;
-}
-
-SPAN.info {
- background: black;
- border: thin solid black;
- color: white;
- font-size: 80%;
- font-style: italic;
- font-weight: bold;
- white-space: nowrap;
-}
-
-H2 SPAN.info, H3 SPAN.info, H4 SPAN.info {
- float: right;
- font-size: 100%;
-}
-
-H1.title {
-}
-
-H2.title, H3.title {
- border-bottom: solid 2pt #000000;
-}
-
-DIV.indent, TABLE.indent {
- margin-top: 2em;
- margin-left: auto;
- margin-right: auto;
- width: 90%;
-}
-
-TABLE.indent {
- border-collapse: collapse;
-}
-
-TABLE.indent TD, TABLE.indent TH {
- padding: 0;
-}
-
-TABLE.list {
- border-collapse: collapse;
- margin-left: auto;
- margin-right: auto;
- width: 90%;
-}
-
-TABLE.list TH {
- background: white;
- border-bottom: solid thin #cccccc;
- color: #444444;
- padding-top: 10pt;
- padding-left: 5pt;
- text-align: left;
- vertical-align: bottom;
- white-space: nowrap;
-}
-
-TABLE.list TH A {
- color: #4444cc;
-}
-
-TABLE.list TD {
- border-bottom: solid thin #eeeeee;
- padding-top: 5pt;
- padding-left: 5pt;
-}
-
-TABLE.list TR:nth-child(even) {
- background: #f8f8f8;
-}
-
-TABLE.list TR:nth-child(odd) {
- background: #f4f4f4;
-}
-
-DT {
- margin-left: 36pt;
- margin-top: 12pt;
-}
-
-DD {
- margin-left: 54pt;
-}
-
-DL.category DT {
- font-weight: bold;
-}
-
-P.summary {
- margin-left: 36pt;
- font-family: monaco, courier, monospace;
-}
-
-DIV.summary TABLE {
- border: solid thin #999999;
- border-collapse: collapse;
- border-spacing: 0;
- margin: 10px;
-}
-
-DIV.summary TABLE TD, DIV.summary TABLE TH {
- border: solid thin #999999;
- padding: 5px;
- text-align: left;
- vertical-align: top;
-}
-
-DIV.summary TABLE THEAD TH {
- background: #eeeeee;
-}
-
-/* API documentation styles... */
-div.body h1 {
- margin: 0;
-}
-div.body h2 {
- margin-top: 1.5em;
-}
-div.body h3, div.body h4, div.body h5 {
- margin-bottom: 0.5em;
- margin-top: 1.5em;
-}
-.class, .enumeration, .function, .struct, .typedef, .union {
- border-bottom: solid thin #999999;
- margin-bottom: 0;
- margin-top: 2em;
-}
-.description {
- margin-top: 0.5em;
-}
-code, p.code, pre, ul.code li {
- font-family: monaco, courier, monospace;
- font-size: 90%;
-}
-ul.code, ul.contents, ul.subcontents {
- list-style-type: none;
- margin: 0;
- padding-left: 0;
-}
-ul.code li {
- margin: 0;
-}
-ul.contents > li {
- margin-top: 1em;
-}
-ul.contents li ul.code, ul.contents li ul.subcontents {
- padding-left: 2em;
-}
-div.body dl {
- margin-left: 0;
- margin-top: 0;
-}
-div.body dt {
- font-style: italic;
- margin-left: 0;
- margin-top: 0;
-}
-div.body dd {
- margin-bottom: 0.5em;
-}
-
-/* This is just for the HTML files generated with the framedhelp target */
-div.contents {
- background: #e8e8e8;
- border: solid thin black;
- padding: 10px;
-}
-div.contents h1 {
- font-size: 110%;
-}
-div.contents h2 {
- font-size: 100%;
-}
-div.contents ul.contents {
- font-size: 80%;
-}
-div.contents ul.subcontents li {
- margin-left: 1em;
- text-indent: -1em;
-}
---></style>
-</head>
-<body>
-<div class='body'>
-<!--
- HTTP and IPP API header for CUPS.
-
- Copyright 2007-2016 by Apple Inc.
- Copyright 1997-2006 by Easy Software Products, all rights reserved.
-
- 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/".
--->
-
-<h1 class='title'>HTTP and IPP APIs</h1>
-
-<div class='summary'><table summary='General Information'>
-<thead>
-<tr>
- <th>Headers</th>
- <th>cups/cups.h<br>
- cups/http.h<br>
- cups/ipp.h</th>
-</tr>
-</thead>
-<tbody>
-<tr>
- <th>Library</th>
- <td>-lcups</td>
-</tr>
-<tr>
- <th>See Also</th>
- <td>Programming: <a href='api-overview.html'>Introduction to CUPS Programming</a><br>
- Programming: <a href='api-cups.html'>CUPS API</a><br>
- References: <a href='spec-ipp.html'>CUPS Implementation of IPP</a></td>
-</tr>
-</tbody>
-</table></div>
-<h2 class="title">Contents</h2>
-<ul class="contents">
-<li><a href="#OVERVIEW">Overview</a><ul class="subcontents">
- <li><a href="#CREATING_URI_STRINGS">Creating URI Strings</a></li>
- <li><a href="#SENDING_REQUESTS_WITH_FILES">Sending Requests with Files</a></li>
- <li><a href="#ASYNCHRONOUS_REQUEST_PROCESSING">Asynchronous Request Processing</a></li>
-</ul></li>
-<li><a href="#FUNCTIONS">Functions</a><ul class="code">
- <li><a href="#cupsDoAuthentication" title="Authenticate a request.">cupsDoAuthentication</a></li>
- <li><a href="#cupsDoFileRequest" title="Do an IPP request with a file.">cupsDoFileRequest</a></li>
- <li><a href="#cupsDoIORequest" title="Do an IPP request with file descriptors.">cupsDoIORequest</a></li>
- <li><a href="#cupsDoRequest" title="Do an IPP request.">cupsDoRequest</a></li>
- <li><a href="#cupsEncodeOptions" title="Encode printer options into IPP attributes.">cupsEncodeOptions</a></li>
- <li><a href="#cupsEncodeOptions2" title="Encode printer options into IPP attributes for a group.">cupsEncodeOptions2</a></li>
- <li><a href="#cupsGetDevices" title="Get available printer devices.">cupsGetDevices</a></li>
- <li><a href="#cupsGetFd" title="Get a file from the server.">cupsGetFd</a></li>
- <li><a href="#cupsGetFile" title="Get a file from the server.">cupsGetFile</a></li>
- <li><a href="#cupsGetResponse" title="Get a response to an IPP request.">cupsGetResponse</a></li>
- <li><a href="#cupsLastError" title="Return the last IPP status code received on the current
-thread.">cupsLastError</a></li>
- <li><a href="#cupsLastErrorString" title="Return the last IPP status-message received on the
-current thread.">cupsLastErrorString</a></li>
- <li><a href="#cupsPutFd" title="Put a file on the server.">cupsPutFd</a></li>
- <li><a href="#cupsPutFile" title="Put a file on the server.">cupsPutFile</a></li>
- <li><a href="#cupsReadResponseData" title="Read additional data after the IPP response.">cupsReadResponseData</a></li>
- <li><a href="#cupsSendRequest" title="Send an IPP request.">cupsSendRequest</a></li>
- <li><a href="#cupsWriteRequestData" title="Write additional data after an IPP request.">cupsWriteRequestData</a></li>
- <li><a href="#httpAcceptConnection" title="Accept a new HTTP client connection from the
-specified listening socket.">httpAcceptConnection</a></li>
- <li><a href="#httpAddCredential" title="Allocates and adds a single credential to an array.">httpAddCredential</a></li>
- <li><a href="#httpAddrAny" title="Check for the &quot;any&quot; address.">httpAddrAny</a></li>
- <li><a href="#httpAddrClose" title="Close a socket created by httpAddrConnect or
-httpAddrListen.">httpAddrClose</a></li>
- <li><a href="#httpAddrEqual" title="Compare two addresses.">httpAddrEqual</a></li>
- <li><a href="#httpAddrFamily" title="Get the address family of an address.">httpAddrFamily</a></li>
- <li><a href="#httpAddrLength" title="Return the length of the address in bytes.">httpAddrLength</a></li>
- <li><a href="#httpAddrListen" title="Create a listening socket bound to the specified
-address and port.">httpAddrListen</a></li>
- <li><a href="#httpAddrLocalhost" title="Check for the local loopback address.">httpAddrLocalhost</a></li>
- <li><a href="#httpAddrLookup" title="Lookup the hostname associated with the address.">httpAddrLookup</a></li>
- <li><a href="#httpAddrPort" title="Get the port number associated with an address.">httpAddrPort</a></li>
- <li><a href="#httpAddrString" title="Convert an address to a numeric string.">httpAddrString</a></li>
- <li><a href="#httpAssembleURI" title="Assemble a uniform resource identifier from its
-components.">httpAssembleURI</a></li>
- <li><a href="#httpAssembleURIf" title="Assemble a uniform resource identifier from its
-components with a formatted resource.">httpAssembleURIf</a></li>
- <li><a href="#httpAssembleUUID" title="Assemble a name-based UUID URN conforming to RFC 4122.">httpAssembleUUID</a></li>
- <li><a href="#httpBlocking" title="Set blocking/non-blocking behavior on a connection.">httpBlocking</a></li>
- <li><a href="#httpCheck" title="Check to see if there is a pending response from the server.">httpCheck</a></li>
- <li><a href="#httpClearCookie" title="Clear the cookie value(s).">httpClearCookie</a></li>
- <li><a href="#httpClearFields" title="Clear HTTP request fields.">httpClearFields</a></li>
- <li><a href="#httpClose" title="Close an HTTP connection.">httpClose</a></li>
- <li><a href="#httpCompareCredentials" title="Compare two sets of X.509 credentials.">httpCompareCredentials</a></li>
- <li><a href="#httpConnect" title="Connect to a HTTP server.">httpConnect</a></li>
- <li><a href="#httpConnect2" title="Connect to a HTTP server.">httpConnect2</a></li>
- <li><a href="#httpConnectEncrypt" title="Connect to a HTTP server using encryption.">httpConnectEncrypt</a></li>
- <li><a href="#httpDecode64" title="Base64-decode a string.">httpDecode64</a></li>
- <li><a href="#httpDecode64_2" title="Base64-decode a string.">httpDecode64_2</a></li>
- <li><a href="#httpDelete" title="Send a DELETE request to the server.">httpDelete</a></li>
- <li><a href="#httpEncode64" title="Base64-encode a string.">httpEncode64</a></li>
- <li><a href="#httpEncode64_2" title="Base64-encode a string.">httpEncode64_2</a></li>
- <li><a href="#httpEncryption" title="Set the required encryption on the link.">httpEncryption</a></li>
- <li><a href="#httpError" title="Get the last error on a connection.">httpError</a></li>
- <li><a href="#httpFieldValue" title="Return the HTTP field enumeration value for a field
-name.">httpFieldValue</a></li>
- <li><a href="#httpFlush" title="Flush data from a HTTP connection.">httpFlush</a></li>
- <li><a href="#httpFlushWrite" title="Flush data in write buffer.">httpFlushWrite</a></li>
- <li><a href="#httpFreeCredentials" title="Free an array of credentials.">httpFreeCredentials</a></li>
- <li><a href="#httpGet" title="Send a GET request to the server.">httpGet</a></li>
- <li><a href="#httpGetActivity" title="Get the most recent activity for a connection.">httpGetActivity</a></li>
- <li><a href="#httpGetAddress" title="Get the address of the connected peer of a connection.">httpGetAddress</a></li>
- <li><a href="#httpGetAuthString" title="Get the current authorization string.">httpGetAuthString</a></li>
- <li><a href="#httpGetBlocking" title="Get the blocking/non-block state of a connection.">httpGetBlocking</a></li>
- <li><a href="#httpGetContentEncoding" title="Get a common content encoding, if any, between
-the client and server.">httpGetContentEncoding</a></li>
- <li><a href="#httpGetCookie" title="Get any cookie data from the response.">httpGetCookie</a></li>
- <li><a href="#httpGetDateString" title="Get a formatted date/time string from a time value.">httpGetDateString</a></li>
- <li><a href="#httpGetDateString2" title="Get a formatted date/time string from a time value.">httpGetDateString2</a></li>
- <li><a href="#httpGetDateTime" title="Get a time value from a formatted date/time string.">httpGetDateTime</a></li>
- <li><a href="#httpGetEncryption" title="Get the current encryption mode of a connection.">httpGetEncryption</a></li>
- <li><a href="#httpGetExpect" title="Get the value of the Expect header, if any.">httpGetExpect</a></li>
- <li><a href="#httpGetFd" title="Get the file descriptor associated with a connection.">httpGetFd</a></li>
- <li><a href="#httpGetField" title="Get a field value from a request/response.">httpGetField</a></li>
- <li><a href="#httpGetHostByName" title="Lookup a hostname or IPv4 address, and return
-address records for the specified name.">httpGetHostByName</a></li>
- <li><a href="#httpGetHostname" title="Get the FQDN for the connection or local system.">httpGetHostname</a></li>
- <li><a href="#httpGetKeepAlive" title="Get the current Keep-Alive state of the connection.">httpGetKeepAlive</a></li>
- <li><a href="#httpGetLength" title="Get the amount of data remaining from the
-content-length or transfer-encoding fields.">httpGetLength</a></li>
- <li><a href="#httpGetLength2" title="Get the amount of data remaining from the
-content-length or transfer-encoding fields.">httpGetLength2</a></li>
- <li><a href="#httpGetPending" title="Get the number of bytes that are buffered for writing.">httpGetPending</a></li>
- <li><a href="#httpGetReady" title="Get the number of bytes that can be read without blocking.">httpGetReady</a></li>
- <li><a href="#httpGetRemaining" title="Get the number of remaining bytes in the message
-body or current chunk.">httpGetRemaining</a></li>
- <li><a href="#httpGetState" title="Get the current state of the HTTP request.">httpGetState</a></li>
- <li><a href="#httpGetStatus" title="Get the status of the last HTTP request.">httpGetStatus</a></li>
- <li><a href="#httpGetSubField" title="Get a sub-field value.">httpGetSubField</a></li>
- <li><a href="#httpGetSubField2" title="Get a sub-field value.">httpGetSubField2</a></li>
- <li><a href="#httpGetVersion" title="Get the HTTP version at the other end.">httpGetVersion</a></li>
- <li><a href="#httpGets" title="Get a line of text from a HTTP connection.">httpGets</a></li>
- <li><a href="#httpHead" title="Send a HEAD request to the server.">httpHead</a></li>
- <li><a href="#httpInitialize" title="Initialize the HTTP interface library and set the
-default HTTP proxy (if any).">httpInitialize</a></li>
- <li><a href="#httpIsChunked" title="Report whether a message body is chunked.">httpIsChunked</a></li>
- <li><a href="#httpIsEncrypted" title="Report whether a connection is encrypted.">httpIsEncrypted</a></li>
- <li><a href="#httpMD5" title="Compute the MD5 sum of the username:group:password.">httpMD5</a></li>
- <li><a href="#httpMD5Final" title="Combine the MD5 sum of the username, group, and password
-with the server-supplied nonce value, method, and
-request-uri.">httpMD5Final</a></li>
- <li><a href="#httpMD5String" title="Convert an MD5 sum to a character string.">httpMD5String</a></li>
- <li><a href="#httpOptions" title="Send an OPTIONS request to the server.">httpOptions</a></li>
- <li><a href="#httpPeek" title="Peek at data from a HTTP connection.">httpPeek</a></li>
- <li><a href="#httpPost" title="Send a POST request to the server.">httpPost</a></li>
- <li><a href="#httpPut" title="Send a PUT request to the server.">httpPut</a></li>
- <li><a href="#httpRead" title="Read data from a HTTP connection.">httpRead</a></li>
- <li><a href="#httpRead2" title="Read data from a HTTP connection.">httpRead2</a></li>
- <li><a href="#httpReadRequest" title="Read a HTTP request from a connection.">httpReadRequest</a></li>
- <li><a href="#httpReconnect" title="Reconnect to a HTTP server.">httpReconnect</a></li>
- <li><a href="#httpReconnect2" title="Reconnect to a HTTP server with timeout and optional
-cancel.">httpReconnect2</a></li>
- <li><a href="#httpResolveHostname" title="Resolve the hostname of the HTTP connection
-address.">httpResolveHostname</a></li>
- <li><a href="#httpSeparate" title="Separate a Universal Resource Identifier into its
-components.">httpSeparate</a></li>
- <li><a href="#httpSeparate2" title="Separate a Universal Resource Identifier into its
-components.">httpSeparate2</a></li>
- <li><a href="#httpSeparateURI" title="Separate a Universal Resource Identifier into its
-components.">httpSeparateURI</a></li>
- <li><a href="#httpSetAuthString" title="Set the current authorization string.">httpSetAuthString</a></li>
- <li><a href="#httpSetCookie" title="Set the cookie value(s).">httpSetCookie</a></li>
- <li><a href="#httpSetCredentials" title="Set the credentials associated with an encrypted
-connection.">httpSetCredentials</a></li>
- <li><a href="#httpSetDefaultField" title="Set the default value of an HTTP header.">httpSetDefaultField</a></li>
- <li><a href="#httpSetExpect" title="Set the Expect: header in a request.">httpSetExpect</a></li>
- <li><a href="#httpSetField" title="Set the value of an HTTP header.">httpSetField</a></li>
- <li><a href="#httpSetKeepAlive" title="Set the current Keep-Alive state of a connection.">httpSetKeepAlive</a></li>
- <li><a href="#httpSetLength" title="Set the content-length and content-encoding.">httpSetLength</a></li>
- <li><a href="#httpSetTimeout" title="Set read/write timeouts and an optional callback.">httpSetTimeout</a></li>
- <li><a href="#httpShutdown" title="Shutdown one side of an HTTP connection.">httpShutdown</a></li>
- <li><a href="#httpStateString" title="Return the string describing a HTTP state value.">httpStateString</a></li>
- <li><a href="#httpStatus" title="Return a short string describing a HTTP status code.">httpStatus</a></li>
- <li><a href="#httpTrace" title="Send an TRACE request to the server.">httpTrace</a></li>
- <li><a href="#httpURIStatusString" title="Return a string describing a URI status code.">httpURIStatusString</a></li>
- <li><a href="#httpUpdate" title="Update the current HTTP state for incoming data.">httpUpdate</a></li>
- <li><a href="#httpWait" title="Wait for data available on a connection.">httpWait</a></li>
- <li><a href="#httpWrite" title="Write data to a HTTP connection.">httpWrite</a></li>
- <li><a href="#httpWrite2" title="Write data to a HTTP connection.">httpWrite2</a></li>
- <li><a href="#httpWriteResponse" title="Write a HTTP response to a client connection.">httpWriteResponse</a></li>
- <li><a href="#ippAddBoolean" title="Add a boolean attribute to an IPP message.">ippAddBoolean</a></li>
- <li><a href="#ippAddBooleans" title="Add an array of boolean values.">ippAddBooleans</a></li>
- <li><a href="#ippAddCollection" title="Add a collection value.">ippAddCollection</a></li>
- <li><a href="#ippAddCollections" title="Add an array of collection values.">ippAddCollections</a></li>
- <li><a href="#ippAddDate" title="Add a date attribute to an IPP message.">ippAddDate</a></li>
- <li><a href="#ippAddInteger" title="Add a integer attribute to an IPP message.">ippAddInteger</a></li>
- <li><a href="#ippAddIntegers" title="Add an array of integer values.">ippAddIntegers</a></li>
- <li><a href="#ippAddOctetString" title="Add an octetString value to an IPP message.">ippAddOctetString</a></li>
- <li><a href="#ippAddOutOfBand" title="Add an out-of-band value to an IPP message.">ippAddOutOfBand</a></li>
- <li><a href="#ippAddRange" title="Add a range of values to an IPP message.">ippAddRange</a></li>
- <li><a href="#ippAddRanges" title="Add ranges of values to an IPP message.">ippAddRanges</a></li>
- <li><a href="#ippAddResolution" title="Add a resolution value to an IPP message.">ippAddResolution</a></li>
- <li><a href="#ippAddResolutions" title="Add resolution values to an IPP message.">ippAddResolutions</a></li>
- <li><a href="#ippAddSeparator" title="Add a group separator to an IPP message.">ippAddSeparator</a></li>
- <li><a href="#ippAddString" title="Add a language-encoded string to an IPP message.">ippAddString</a></li>
- <li><a href="#ippAddStringf" title="Add a formatted string to an IPP message.">ippAddStringf</a></li>
- <li><a href="#ippAddStringfv" title="Add a formatted string to an IPP message.">ippAddStringfv</a></li>
- <li><a href="#ippAddStrings" title="Add language-encoded strings to an IPP message.">ippAddStrings</a></li>
- <li><a href="#ippAttributeString" title="Convert the attribute's value to a string.">ippAttributeString</a></li>
- <li><a href="#ippContainsInteger" title="Determine whether an attribute contains the
-specified value or is within the list of ranges.">ippContainsInteger</a></li>
- <li><a href="#ippContainsString" title="Determine whether an attribute contains the
-specified string value.">ippContainsString</a></li>
- <li><a href="#ippCopyAttribute" title="Copy an attribute.">ippCopyAttribute</a></li>
- <li><a href="#ippCopyAttributes" title="Copy attributes from one IPP message to another.">ippCopyAttributes</a></li>
- <li><a href="#ippCreateRequestedArray" title="Create a CUPS array of attribute names from the
-given requested-attributes attribute.">ippCreateRequestedArray</a></li>
- <li><a href="#ippDateToTime" title="Convert from RFC 1903 Date/Time format to UNIX time
-in seconds.">ippDateToTime</a></li>
- <li><a href="#ippDelete" title="Delete an IPP message.">ippDelete</a></li>
- <li><a href="#ippDeleteAttribute" title="Delete a single attribute in an IPP message.">ippDeleteAttribute</a></li>
- <li><a href="#ippDeleteValues" title="Delete values in an attribute.">ippDeleteValues</a></li>
- <li><a href="#ippEnumString" title="Return a string corresponding to the enum value.">ippEnumString</a></li>
- <li><a href="#ippEnumValue" title="Return the value associated with a given enum string.">ippEnumValue</a></li>
- <li><a href="#ippErrorString" title="Return a name for the given status code.">ippErrorString</a></li>
- <li><a href="#ippErrorValue" title="Return a status code for the given name.">ippErrorValue</a></li>
- <li><a href="#ippFindAttribute" title="Find a named attribute in a request.">ippFindAttribute</a></li>
- <li><a href="#ippFindNextAttribute" title="Find the next named attribute in a request.">ippFindNextAttribute</a></li>
- <li><a href="#ippFirstAttribute" title="Return the first attribute in the message.">ippFirstAttribute</a></li>
- <li><a href="#ippGetBoolean" title="Get a boolean value for an attribute.">ippGetBoolean</a></li>
- <li><a href="#ippGetCollection" title="Get a collection value for an attribute.">ippGetCollection</a></li>
- <li><a href="#ippGetCount" title="Get the number of values in an attribute.">ippGetCount</a></li>
- <li><a href="#ippGetDate" title="Get a date value for an attribute.">ippGetDate</a></li>
- <li><a href="#ippGetGroupTag" title="Get the group associated with an attribute.">ippGetGroupTag</a></li>
- <li><a href="#ippGetInteger" title="Get the integer/enum value for an attribute.">ippGetInteger</a></li>
- <li><a href="#ippGetName" title="Get the attribute name.">ippGetName</a></li>
- <li><a href="#ippGetOctetString" title="Get an octetString value from an IPP attribute.">ippGetOctetString</a></li>
- <li><a href="#ippGetOperation" title="Get the operation ID in an IPP message.">ippGetOperation</a></li>
- <li><a href="#ippGetRange" title="Get a rangeOfInteger value from an attribute.">ippGetRange</a></li>
- <li><a href="#ippGetRequestId" title="Get the request ID from an IPP message.">ippGetRequestId</a></li>
- <li><a href="#ippGetResolution" title="Get a resolution value for an attribute.">ippGetResolution</a></li>
- <li><a href="#ippGetState" title="Get the IPP message state.">ippGetState</a></li>
- <li><a href="#ippGetStatusCode" title="Get the status code from an IPP response or event message.">ippGetStatusCode</a></li>
- <li><a href="#ippGetString" title="Return the value...">ippGetString</a></li>
- <li><a href="#ippGetValueTag" title="Get the value tag for an attribute.">ippGetValueTag</a></li>
- <li><a href="#ippGetVersion" title="Get the major and minor version number from an IPP message.">ippGetVersion</a></li>
- <li><a href="#ippLength" title="Compute the length of an IPP message.">ippLength</a></li>
- <li><a href="#ippNew" title="Allocate a new IPP message.">ippNew</a></li>
- <li><a href="#ippNewRequest" title="Allocate a new IPP request message.">ippNewRequest</a></li>
- <li><a href="#ippNewResponse" title="Allocate a new IPP response message.">ippNewResponse</a></li>
- <li><a href="#ippNextAttribute" title="Return the next attribute in the message.">ippNextAttribute</a></li>
- <li><a href="#ippOpString" title="Return a name for the given operation id.">ippOpString</a></li>
- <li><a href="#ippOpValue" title="Return an operation id for the given name.">ippOpValue</a></li>
- <li><a href="#ippPort" title="Return the default IPP port number.">ippPort</a></li>
- <li><a href="#ippRead" title="Read data for an IPP message from a HTTP connection.">ippRead</a></li>
- <li><a href="#ippReadFile" title="Read data for an IPP message from a file.">ippReadFile</a></li>
- <li><a href="#ippReadIO" title="Read data for an IPP message.">ippReadIO</a></li>
- <li><a href="#ippSetBoolean" title="Set a boolean value in an attribute.">ippSetBoolean</a></li>
- <li><a href="#ippSetCollection" title="Set a collection value in an attribute.">ippSetCollection</a></li>
- <li><a href="#ippSetDate" title="Set a date value in an attribute.">ippSetDate</a></li>
- <li><a href="#ippSetGroupTag" title="Set the group tag of an attribute.">ippSetGroupTag</a></li>
- <li><a href="#ippSetInteger" title="Set an integer or enum value in an attribute.">ippSetInteger</a></li>
- <li><a href="#ippSetName" title="Set the name of an attribute.">ippSetName</a></li>
- <li><a href="#ippSetOctetString" title="Set an octetString value in an IPP attribute.">ippSetOctetString</a></li>
- <li><a href="#ippSetOperation" title="Set the operation ID in an IPP request message.">ippSetOperation</a></li>
- <li><a href="#ippSetPort" title="Set the default port number.">ippSetPort</a></li>
- <li><a href="#ippSetRange" title="Set a rangeOfInteger value in an attribute.">ippSetRange</a></li>
- <li><a href="#ippSetRequestId" title="Set the request ID in an IPP message.">ippSetRequestId</a></li>
- <li><a href="#ippSetResolution" title="Set a resolution value in an attribute.">ippSetResolution</a></li>
- <li><a href="#ippSetState" title="Set the current state of the IPP message.">ippSetState</a></li>
- <li><a href="#ippSetStatusCode" title="Set the status code in an IPP response or event message.">ippSetStatusCode</a></li>
- <li><a href="#ippSetString" title="Set a string value in an attribute.">ippSetString</a></li>
- <li><a href="#ippSetStringf" title="Set a formatted string value of an attribute.">ippSetStringf</a></li>
- <li><a href="#ippSetStringfv" title="Set a formatted string value of an attribute.">ippSetStringfv</a></li>
- <li><a href="#ippSetValueTag" title="Set the value tag of an attribute.">ippSetValueTag</a></li>
- <li><a href="#ippSetVersion" title="Set the version number in an IPP message.">ippSetVersion</a></li>
- <li><a href="#ippStateString" title="Return the name corresponding to a state value.">ippStateString</a></li>
- <li><a href="#ippTagString" title="Return the tag name corresponding to a tag value.">ippTagString</a></li>
- <li><a href="#ippTagValue" title="Return the tag value corresponding to a tag name.">ippTagValue</a></li>
- <li><a href="#ippTimeToDate" title="Convert from UNIX time to RFC 1903 format.">ippTimeToDate</a></li>
- <li><a href="#ippValidateAttribute" title="Validate the contents of an attribute.">ippValidateAttribute</a></li>
- <li><a href="#ippValidateAttributes" title="Validate all attributes in an IPP message.">ippValidateAttributes</a></li>
- <li><a href="#ippWrite" title="Write data for an IPP message to a HTTP connection.">ippWrite</a></li>
- <li><a href="#ippWriteFile" title="Write data for an IPP message to a file.">ippWriteFile</a></li>
- <li><a href="#ippWriteIO" title="Write data for an IPP message.">ippWriteIO</a></li>
-</ul></li>
-<li><a href="#TYPES">Data Types</a><ul class="code">
- <li><a href="#gss_auth_identity_desc" title="Local functions...">gss_auth_identity_desc</a></li>
- <li><a href="#http_addr_t" title="Socket address union, which
-makes using IPv6 and other
-address types easier and
-more portable. ">http_addr_t</a></li>
- <li><a href="#http_addrlist_t" title="Socket address list, which is
-used to enumerate all of the
-addresses that are associated
-with a hostname. ">http_addrlist_t</a></li>
- <li><a href="#http_auth_t" title="HTTP authentication types">http_auth_t</a></li>
- <li><a href="#http_credential_t" title="HTTP credential data ">http_credential_t</a></li>
- <li><a href="#http_encoding_t" title="HTTP transfer encoding values">http_encoding_t</a></li>
- <li><a href="#http_encryption_t" title="HTTP encryption values">http_encryption_t</a></li>
- <li><a href="#http_field_t" title="HTTP field names">http_field_t</a></li>
- <li><a href="#http_keepalive_t" title="HTTP keep-alive values">http_keepalive_t</a></li>
- <li><a href="#http_state_t" title="HTTP state values; states
-are server-oriented...">http_state_t</a></li>
- <li><a href="#http_t" title="HTTP connection type">http_t</a></li>
- <li><a href="#http_timeout_cb_t" title="HTTP timeout callback ">http_timeout_cb_t</a></li>
- <li><a href="#http_trust_t" title="Level of trust for credentials ">http_trust_t</a></li>
- <li><a href="#http_uri_coding_t" title="URI en/decode flags">http_uri_coding_t</a></li>
- <li><a href="#http_uri_status_t" title="URI separation status ">http_uri_status_t</a></li>
- <li><a href="#http_version_t" title="HTTP version numbers">http_version_t</a></li>
- <li><a href="#ipp_attribute_t" title="IPP attribute">ipp_attribute_t</a></li>
- <li><a href="#ipp_copycb_t" title="The following structures are PRIVATE starting with CUPS 1.6/macOS 10.8.
-Please use the new accessor functions available in CUPS 1.6 and later, as
-these definitions will be moved to a private header file in a future release.">ipp_copycb_t</a></li>
- <li><a href="#ipp_dstate_t" title="Document states">ipp_dstate_t</a></li>
- <li><a href="#ipp_finish_t" title="Job collation types">ipp_finish_t</a></li>
- <li><a href="#ipp_iocb_t" title="IPP IO Callback Function ">ipp_iocb_t</a></li>
- <li><a href="#ipp_jcollate_t" title="Job collation types">ipp_jcollate_t</a></li>
- <li><a href="#ipp_orient_t" title="Orientation values">ipp_orient_t</a></li>
- <li><a href="#ipp_pstate_t" title="Printer states">ipp_pstate_t</a></li>
- <li><a href="#ipp_quality_t" title="Qualities">ipp_quality_t</a></li>
- <li><a href="#ipp_res_t" title="Resolution units">ipp_res_t</a></li>
- <li><a href="#ipp_state_t" title="IPP states">ipp_state_t</a></li>
- <li><a href="#ipp_t" title="IPP request/response data">ipp_t</a></li>
- <li><a href="#ipp_uchar_t" title="Unsigned 8-bit integer/character">ipp_uchar_t</a></li>
-</ul></li>
-<li><a href="#STRUCTURES">Structures</a><ul class="code">
- <li><a href="#gss_auth_identity" title="Local functions...">gss_auth_identity</a></li>
- <li><a href="#http_addrlist_s" title="Socket address list, which is
-used to enumerate all of the
-addresses that are associated
-with a hostname. ">http_addrlist_s</a></li>
- <li><a href="#http_credential_s" title="HTTP credential data ">http_credential_s</a></li>
- <li><a href="#pollfd" title="User data (unused)">pollfd</a></li>
-</ul></li>
-<li><a href="#ENUMERATIONS">Constants</a><ul class="code">
- <li><a href="#http_auth_e" title="HTTP authentication types">http_auth_e</a></li>
- <li><a href="#http_encoding_e" title="HTTP transfer encoding values">http_encoding_e</a></li>
- <li><a href="#http_encryption_e" title="HTTP encryption values">http_encryption_e</a></li>
- <li><a href="#http_field_e" title="HTTP field names">http_field_e</a></li>
- <li><a href="#http_keepalive_e" title="HTTP keep-alive values">http_keepalive_e</a></li>
- <li><a href="#http_state_e" title="HTTP state values; states
-are server-oriented...">http_state_e</a></li>
- <li><a href="#http_status_e" title="HTTP status codes">http_status_e</a></li>
- <li><a href="#http_trust_e" title="Level of trust for credentials ">http_trust_e</a></li>
- <li><a href="#http_uri_coding_e" title="URI en/decode flags">http_uri_coding_e</a></li>
- <li><a href="#http_uri_status_e" title="URI separation status ">http_uri_status_e</a></li>
- <li><a href="#http_version_e" title="HTTP version numbers">http_version_e</a></li>
- <li><a href="#ipp_dstate_e" title="Document states">ipp_dstate_e</a></li>
- <li><a href="#ipp_finishings_e" title="Finishings">ipp_finishings_e</a></li>
- <li><a href="#ipp_jcollate_e" title="Job collation types">ipp_jcollate_e</a></li>
- <li><a href="#ipp_jstate_e" title="Job states">ipp_jstate_e</a></li>
- <li><a href="#ipp_op_e" title="IPP operations">ipp_op_e</a></li>
- <li><a href="#ipp_orient_e" title="Orientation values">ipp_orient_e</a></li>
- <li><a href="#ipp_pstate_e" title="Printer states">ipp_pstate_e</a></li>
- <li><a href="#ipp_quality_e" title="Qualities">ipp_quality_e</a></li>
- <li><a href="#ipp_res_e" title="Resolution units">ipp_res_e</a></li>
- <li><a href="#ipp_state_e" title="IPP states">ipp_state_e</a></li>
- <li><a href="#ipp_status_e" title="IPP status codes">ipp_status_e</a></li>
- <li><a href="#ipp_tag_e" title="Format tags for attributes">ipp_tag_e</a></li>
-</ul></li>
-</ul>
-<!--
- HTTP and IPP API introduction for CUPS.
-
- Copyright 2007-2012 by Apple Inc.
- Copyright 1997-2006 by Easy Software Products, all rights reserved.
-
- 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/".
--->
-
-<h2 class='title'><a name='OVERVIEW'>Overview</a></h2>
-
-<p>The CUPS HTTP and IPP APIs provide low-level access to the HTTP and IPP
-protocols and CUPS scheduler. They are typically used by monitoring and
-administration programs to perform specific functions not supported by the
-high-level CUPS API functions.</p>
-
-<p>The HTTP APIs use an opaque structure called
-<a href='#http_t'><code>http_t</code></a> to manage connections to
-a particular HTTP or IPP server. The
-<a href='#httpConnectEncrypt'><code>httpConnectEncrypt</code></a> function is
-used to create an instance of this structure for a particular server.
-The constant <code>CUPS_HTTP_DEFAULT</code> can be used with all of the
-<code>cups</code> functions to refer to the default CUPS server - the functions
-create a per-thread <a href='#http_t'><code>http_t</code></a> as needed.</p>
-
-<p>The IPP APIs use two opaque structures for requests (messages sent to the CUPS scheduler) and responses (messages sent back to your application from the scheduler). The <a href='#ipp_t'><code>ipp_t</code></a> type holds a complete request or response and is allocated using the <a href='#ippNew'><code>ippNew</code></a> or <a href='#ippNewRequest'><code>ippNewRequest</code></a> functions and freed using the <a href='#ippDelete'><code>ippDelete</code></a> function.</p>
-
-<p>The second opaque structure is called <a href='#ipp_attribute_t'><code>ipp_attribute_t</code></a> and holds a single IPP attribute which consists of a group tag (<a href='#ippGetGroupTag'><code>ippGetGroupTag</code></a>), a value type tag (<a href='#ippGetValueTag'><code>ippGetValueTag</code></a>), the attribute name (<a href='#ippGetName'><code>ippGetName</code></a>), and 1 or more values (<a href='#ippGetCount'><code>ippGetCount</code></a>, <a href='#ippGetBoolean'><code>ippGetBoolean</code></a>, <a href='#ippGetCollection'><code>ippGetCollection</code></a>, <a href='#ippGetDate'><code>ippGetDate</code></a>, <a href='#ippGetInteger'><code>ippGetInteger</code></a>, <a href='#ippGetRange'><code>ippGetRange</code></a>, <a href='#ippGetResolution'><code>ippGetResolution</code></a>, and <a href='#ippGetString'><code>ippGetString</code></a>). Attributes are added to an <a href='#ipp_t'><code>ipp_t</code></a> pointer using one of the <code>ippAdd</code> functions. For example, use <a href='#ippAddString'><code>ippAddString</code></a> to add the "printer-uri" and "requesting-user-name" string attributes to a request:</p>
-
-<pre class='example'>
-<a href='#ipp_t'>ipp_t</a> *request = <a href='#ippNewRequest'>ippNewRequest</a>(IPP_GET_JOBS);
-
-<a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
- NULL, "ipp://localhost/printers/");
-<a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
- NULL, cupsUser());
-</pre>
-
-<p>Once you have created an IPP request, use the <code>cups</code> functions to send the request to and read the response from the server. For example, the <a href='#cupsDoRequest'><code>cupsDoRequest</code></a> function can be used for simple query operations that do not involve files:</p>
-
-<pre class='example'>
-#include &lt;cups/cups.h&gt;
-
-
-<a href='#ipp_t'>ipp_t</a> *<a name='get_jobs'>get_jobs</a>(void)
-{
- <a href='#ipp_t'>ipp_t</a> *request = <a href='#ippNewRequest'>ippNewRequest</a>(IPP_GET_JOBS);
-
- <a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
- NULL, "ipp://localhost/printers/");
- <a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
- NULL, cupsUser());
-
- return (<a href='#cupsDoRequest'>cupsDoRequest</a>(CUPS_HTTP_DEFAULT, request, "/"));
-}
-</pre>
-
-<p>The <a href='#cupsDoRequest'><code>cupsDoRequest</code></a> function frees the request and returns an IPP response or <code>NULL</code> pointer if the request could not be sent to the server. Once you have a response from the server, you can either use the <a href='#ippFindAttribute'><code>ippFindAttribute</code></a> and <a href='#ippFindNextAttribute'><code>ippFindNextAttribute</code></a> functions to find specific attributes, for example:</p>
-
-<pre class='example'>
-<a href='#ipp_t'>ipp_t</a> *response;
-<a href='#ipp_attribute_t'>ipp_attribute_t</a> *attr;
-
-attr = <a href='#ippFindAttribute'>ippFindAttribute</a>(response, "printer-state", IPP_TAG_ENUM);
-</pre>
-
-<p>You can also walk the list of attributes with a simple <code>for</code> loop like this:</p>
-
-<pre class='example'>
-<a href='#ipp_t'>ipp_t</a> *response;
-<a href='#ipp_attribute_t'>ipp_attribute_t</a> *attr;
-
-for (attr = <a href='#ippFirstAttribute'>ippFirstAttribute</a>(response); attr != NULL; attr = <a href='#ippNextAttribute'>ippNextAttribute</a>(response))
- if (ippGetName(attr) == NULL)
- puts("--SEPARATOR--");
- else
- puts(ippGetName(attr));
-</pre>
-
-<p>The <code>for</code> loop approach is normally used when collecting attributes for multiple objects (jobs, printers, etc.) in a response. Attributes with <code>NULL</code> names indicate a separator between the attributes of each object. For example, the following code will list the jobs returned from our previous <a href='#get_jobs'><code>get_jobs</code></a> example code:</p>
-
-<pre class='example'>
-<a href='#ipp_t'>ipp_t</a> *response = <a href='#get_jobs'>get_jobs</a>();
-
-if (response != NULL)
-{
- <a href='#ipp_attribute_t'>ipp_attribute_t</a> *attr;
- const char *attrname;
- int job_id = 0;
- const char *job_name = NULL;
- const char *job_originating_user_name = NULL;
-
- puts("Job ID Owner Title");
- puts("------ ---------------- ---------------------------------");
-
- for (attr = <a href='#ippFirstAttribute'>ippFirstAttribute</a>(response); attr != NULL; attr = <a href='#ippNextAttribute'>ippNextAttribute</a>(response))
- {
- /* Attributes without names are separators between jobs */
- attrname = ippGetName(attr);
- if (attrname == NULL)
- {
- if (job_id > 0)
- {
- if (job_name == NULL)
- job_name = "(withheld)";
-
- if (job_originating_user_name == NULL)
- job_originating_user_name = "(withheld)";
-
- printf("%5d %-16s %s\n", job_id, job_originating_user_name, job_name);
- }
-
- job_id = 0;
- job_name = NULL;
- job_originating_user_name = NULL;
- continue;
- }
- else if (!strcmp(attrname, "job-id") &amp;&amp; ippGetValueTag(attr) == IPP_TAG_INTEGER)
- job_id = ippGetInteger(attr, 0);
- else if (!strcmp(attrname, "job-name") &amp;&amp; ippGetValueTag(attr) == IPP_TAG_NAME)
- job_name = ippGetString(attr, 0, NULL);
- else if (!strcmp(attrname, "job-originating-user-name") &amp;&amp;
- ippGetValueTag(attr) == IPP_TAG_NAME)
- job_originating_user_name = ippGetString(attr, 0, NULL);
- }
-
- if (job_id > 0)
- {
- if (job_name == NULL)
- job_name = "(withheld)";
-
- if (job_originating_user_name == NULL)
- job_originating_user_name = "(withheld)";
-
- printf("%5d %-16s %s\n", job_id, job_originating_user_name, job_name);
- }
-}
-</pre>
-
-<h3><a name='CREATING_URI_STRINGS'>Creating URI Strings</a></h3>
-
-<p>To ensure proper encoding, the
-<a href='#httpAssembleURIf'><code>httpAssembleURIf</code></a> function must be
-used to format a "printer-uri" string for all printer-based requests:</p>
-
-<pre class='example'>
-const char *name = "Foo";
-char uri[1024];
-<a href='#ipp_t'>ipp_t</a> *request;
-
-<a href='#httpAssembleURIf'>httpAssembleURIf</a>(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, cupsServer(),
- ippPort(), "/printers/%s", name);
-<a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
-</pre>
-
-<h3><a name='SENDING_REQUESTS_WITH_FILES'>Sending Requests with Files</a></h3>
-
-<p>The <a href='#cupsDoFileRequest'><code>cupsDoFileRequest</code></a> and
-<a href='#cupsDoIORequest'><code>cupsDoIORequest</code></a> functions are
-used for requests involving files. The
-<a href='#cupsDoFileRequest'><code>cupsDoFileRequest</code></a> function
-attaches the named file to a request and is typically used when sending a print
-file or changing a printer's PPD file:</p>
-
-<pre class='example'>
-const char *filename = "/usr/share/cups/data/testprint.ps";
-const char *name = "Foo";
-char uri[1024];
-char resource[1024];
-<a href='#ipp_t'>ipp_t</a> *request = <a href='#ippNewRequest'>ippNewRequest</a>(IPP_PRINT_JOB);
-<a href='#ipp_t'>ipp_t</a> *response;
-
-/* Use httpAssembleURIf for the printer-uri string */
-<a href='#httpAssembleURIf'>httpAssembleURIf</a>(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, cupsServer(),
- ippPort(), "/printers/%s", name);
-<a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
-<a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
- NULL, cupsUser());
-<a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name",
- NULL, "testprint.ps");
-
-/* Use snprintf for the resource path */
-snprintf(resource, sizeof(resource), "/printers/%s", name);
-
-response = <a href='#cupsDoFileRequest'>cupsDoFileRequest</a>(CUPS_HTTP_DEFAULT, request, resource, filename);
-</pre>
-
-<p>The <a href='#cupsDoIORequest'><code>cupsDoIORequest</code></a> function
-optionally attaches a file to the request and optionally saves a file in the
-response from the server. It is used when using a pipe for the request
-attachment or when using a request that returns a file, currently only
-<code>CUPS_GET_DOCUMENT</code> and <code>CUPS_GET_PPD</code>. For example,
-the following code will download the PPD file for the sample HP LaserJet
-printer driver:</p>
-
-<pre class='example'>
-char tempfile[1024];
-int tempfd;
-<a href='#ipp_t'>ipp_t</a> *request = <a href='#ippNewRequest'>ippNewRequest</a>(CUPS_GET_PPD);
-<a href='#ipp_t'>ipp_t</a> *response;
-
-<a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "ppd-name",
- NULL, "laserjet.ppd");
-
-tempfd = cupsTempFd(tempfile, sizeof(tempfile));
-
-response = <a href='#cupsDoIORequest'>cupsDoIORequest</a>(CUPS_HTTP_DEFAULT, request, "/", -1, tempfd);
-</pre>
-
-<p>The example passes <code>-1</code> for the input file descriptor to specify
-that no file is to be attached to the request. The PPD file attached to the
-response is written to the temporary file descriptor we created using the
-<code>cupsTempFd</code> function.</p>
-
-<h3><a name='ASYNCHRONOUS_REQUEST_PROCESSING'>Asynchronous Request Processing</a></h3>
-
-<p>The <a href='#cupsSendRequest'><code>cupsSendRequest</code></a> and
-<a href='#cupsGetResponse'><code>cupsGetResponse</code></a> support
-asynchronous communications with the server. Unlike the other request
-functions, the IPP request is not automatically freed, so remember to
-free your request with the <a href='#ippDelete'><code>ippDelete</code></a>
-function.</p>
-
-<p>File data is attached to the request using the
-<a href='#cupsWriteRequestData'><code>cupsWriteRequestData</code></a>
-function, while file data returned from the server is read using the
-<a href='#cupsReadResponseData'><code>cupsReadResponseData</code></a>
-function. We can rewrite the previous <code>CUPS_GET_PPD</code> example
-to use the asynchronous functions quite easily:</p>
-
-<pre class='example'>
-char tempfile[1024];
-int tempfd;
-<a href='#ipp_t'>ipp_t</a> *request = <a href='#ippNewRequest'>ippNewRequest</a>(CUPS_GET_PPD);
-<a href='#ipp_t'>ipp_t</a> *response;
-
-<a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "ppd-name",
- NULL, "laserjet.ppd");
-
-tempfd = cupsTempFd(tempfile, sizeof(tempfile));
-
-if (<a href='#cupsSendRequest'>cupsSendRequest</a>(CUPS_HTTP_DEFAULT, request, "/") == HTTP_CONTINUE)
-{
- response = <a href='#cupsGetResponse'>cupsGetResponse</a>(CUPS_HTTP_DEFAULT, "/");
-
- if (response != NULL)
- {
- ssize_t bytes;
- char buffer[8192];
-
- while ((bytes = <a href='#cupsReadResponseData'>cupsReadResponseData</a>(CUPS_HTTP_DEFAULT, buffer, sizeof(buffer))) > 0)
- write(tempfd, buffer, bytes);
- }
-}
-
-/* Free the request! */
-<a href='#ippDelete'>ippDelete</a>(request);
-</pre>
-
-<p>The <a href='#cupsSendRequest'><code>cupsSendRequest</code></a> function
-returns the initial HTTP request status, typically either
-<code>HTTP_CONTINUE</code> or <code>HTTP_UNAUTHORIZED</code>. The latter status
-is returned when the request requires authentication of some sort. The
-<a href='#cupsDoAuthentication'><code>cupsDoAuthentication</code></a> function
-must be called when your see <code>HTTP_UNAUTHORIZED</code> and the request
-re-sent. We can add authentication support to our example code by using a
-<code>do ... while</code> loop:</p>
-
-<pre class='example'>
-char tempfile[1024];
-int tempfd;
-<a href='#ipp_t'>ipp_t</a> *request = <a href='#ippNewRequest'>ippNewRequest</a>(CUPS_GET_PPD);
-<a href='#ipp_t'>ipp_t</a> *response;
-http_status_t status;
-
-<a href='#ippAddString'>ippAddString</a>(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "ppd-name",
- NULL, "laserjet.ppd");
-
-tempfd = cupsTempFd(tempfile, sizeof(tempfile));
-
-/* Loop for authentication */
-do
-{
- status = <a href='#cupsSendRequest'>cupsSendRequest</a>(CUPS_HTTP_DEFAULT, request, "/");
-
- if (status == HTTP_UNAUTHORIZED)
- {
- /* Try to authenticate, break out of the loop if that fails */
- if (<a href='#cupsDoAuthentication'>cupsDoAuthentication</a>(CUPS_HTTP_DEFAULT, "POST", "/"))
- break;
- }
-}
-while (status != HTTP_CONTINUE &amp;&amp; status != HTTP_UNAUTHORIZED);
-
-if (status == HTTP_CONTINUE)
-{
- response = <a href='#cupsGetResponse'>cupsGetResponse</a>(CUPS_HTTP_DEFAULT, "/");
-
- if (response != NULL)
- {
- ssize_t bytes;
- char buffer[8192];
-
- while ((bytes = <a href='#cupsReadResponseData'>cupsReadResponseData</a>(CUPS_HTTP_DEFAULT, buffer, sizeof(buffer))) > 0)
- write(tempfd, buffer, bytes);
- }
-}
-
-/* Free the request! */
-<a href='#ippDelete'>ippDelete</a>(request);
-</pre>
-<h2 class="title"><a name="FUNCTIONS">Functions</a></h2>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.1.20/macOS 10.4&nbsp;</span><a name="cupsDoAuthentication">cupsDoAuthentication</a></h3>
-<p class="description">Authenticate a request.</p>
-<p class="code">
-int cupsDoAuthentication (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *method,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *resource<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>method</dt>
-<dd class="description">Request method (&quot;GET&quot;, &quot;POST&quot;, &quot;PUT&quot;)</dd>
-<dt>resource</dt>
-<dd class="description">Resource path</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">0 on success, -1 on error</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function should be called in response to a <code>HTTP_STATUS_UNAUTHORIZED</code>
-status, prior to resubmitting your request.
-
-</p>
-<h3 class="function"><a name="cupsDoFileRequest">cupsDoFileRequest</a></h3>
-<p class="description">Do an IPP request with a file.</p>
-<p class="code">
-<a href="#ipp_t">ipp_t</a> *cupsDoFileRequest (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *request,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *resource,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *filename<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>request</dt>
-<dd class="description">IPP request</dd>
-<dt>resource</dt>
-<dd class="description">HTTP resource for POST</dd>
-<dt>filename</dt>
-<dd class="description">File to send or <code>NULL</code> for none</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Response data</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function sends the IPP request and attached file to the specified
-server, retrying and authenticating as necessary. The request is freed with
-<a href="#ippDelete"><code>ippDelete</code></a>.</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.3/macOS 10.5&nbsp;</span><a name="cupsDoIORequest">cupsDoIORequest</a></h3>
-<p class="description">Do an IPP request with file descriptors.</p>
-<p class="code">
-<a href="#ipp_t">ipp_t</a> *cupsDoIORequest (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *request,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *resource,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int infile,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int outfile<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>request</dt>
-<dd class="description">IPP request</dd>
-<dt>resource</dt>
-<dd class="description">HTTP resource for POST</dd>
-<dt>infile</dt>
-<dd class="description">File to read from or -1 for none</dd>
-<dt>outfile</dt>
-<dd class="description">File to write to or -1 for none</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Response data</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function sends the IPP request with the optional input file &quot;infile&quot; to
-the specified server, retrying and authenticating as necessary. The request
-is freed with <a href="#ippDelete"><code>ippDelete</code></a>.<br>
-<br>
-If &quot;infile&quot; is a valid file descriptor, <code>cupsDoIORequest</code> copies
-all of the data from the file after the IPP request message.<br>
-<br>
-If &quot;outfile&quot; is a valid file descriptor, <code>cupsDoIORequest</code> copies
-all of the data after the IPP response message to the file.
-
-</p>
-<h3 class="function"><a name="cupsDoRequest">cupsDoRequest</a></h3>
-<p class="description">Do an IPP request.</p>
-<p class="code">
-<a href="#ipp_t">ipp_t</a> *cupsDoRequest (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *request,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *resource<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>request</dt>
-<dd class="description">IPP request</dd>
-<dt>resource</dt>
-<dd class="description">HTTP resource for POST</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Response data</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function sends the IPP request to the specified server, retrying
-and authenticating as necessary. The request is freed with <a href="#ippDelete"><code>ippDelete</code></a>.</p>
-<h3 class="function"><a name="cupsEncodeOptions">cupsEncodeOptions</a></h3>
-<p class="description">Encode printer options into IPP attributes.</p>
-<p class="code">
-void cupsEncodeOptions (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_options,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;cups_option_t *options<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">Request to add to</dd>
-<dt>num_options</dt>
-<dd class="description">Number of options</dd>
-<dt>options</dt>
-<dd class="description">Options</dd>
-</dl>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function adds operation, job, and then subscription attributes,
-in that order. Use the cupsEncodeOptions2() function to add attributes
-for a single group.</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsEncodeOptions2">cupsEncodeOptions2</a></h3>
-<p class="description">Encode printer options into IPP attributes for a group.</p>
-<p class="code">
-void cupsEncodeOptions2 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_options,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;cups_option_t *options,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group_tag<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">Request to add to</dd>
-<dt>num_options</dt>
-<dd class="description">Number of options</dd>
-<dt>options</dt>
-<dd class="description">Options</dd>
-<dt>group_tag</dt>
-<dd class="description">Group to encode</dd>
-</dl>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function only adds attributes for a single group. Call this
-function multiple times for each group, or use cupsEncodeOptions()
-to add the standard groups.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span><a name="cupsGetDevices">cupsGetDevices</a></h3>
-<p class="description">Get available printer devices.</p>
-<p class="code">
-ipp_status_t cupsGetDevices (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int timeout,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *include_schemes,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *exclude_schemes,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;cups_device_cb_t callback,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;void *user_data<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>timeout</dt>
-<dd class="description">Timeout in seconds or <code>CUPS_TIMEOUT_DEFAULT</code></dd>
-<dt>include_schemes</dt>
-<dd class="description">Comma-separated URI schemes to include or <code>CUPS_INCLUDE_ALL</code></dd>
-<dt>exclude_schemes</dt>
-<dd class="description">Comma-separated URI schemes to exclude or <code>CUPS_EXCLUDE_NONE</code></dd>
-<dt>callback</dt>
-<dd class="description">Callback function</dd>
-<dt>user_data</dt>
-<dd class="description">User data pointer</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Request status - <code>IPP_OK</code> on success.</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function sends a CUPS-Get-Devices request and streams the discovered
-devices to the specified callback function. The &quot;timeout&quot; parameter controls
-how long the request lasts, while the &quot;include_schemes&quot; and &quot;exclude_schemes&quot;
-parameters provide comma-delimited lists of backends to include or omit from
-the request respectively.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.1.20/macOS 10.4&nbsp;</span><a name="cupsGetFd">cupsGetFd</a></h3>
-<p class="description">Get a file from the server.</p>
-<p class="code">
-http_status_t cupsGetFd (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *resource,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int fd<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>resource</dt>
-<dd class="description">Resource name</dd>
-<dt>fd</dt>
-<dd class="description">File descriptor</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">HTTP status</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function returns <code>HTTP_STATUS_OK</code> when the file is successfully retrieved.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.1.20/macOS 10.4&nbsp;</span><a name="cupsGetFile">cupsGetFile</a></h3>
-<p class="description">Get a file from the server.</p>
-<p class="code">
-http_status_t cupsGetFile (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *resource,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *filename<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>resource</dt>
-<dd class="description">Resource name</dd>
-<dt>filename</dt>
-<dd class="description">Filename</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">HTTP status</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function returns <code>HTTP_STATUS_OK</code> when the file is successfully retrieved.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span><a name="cupsGetResponse">cupsGetResponse</a></h3>
-<p class="description">Get a response to an IPP request.</p>
-<p class="code">
-<a href="#ipp_t">ipp_t</a> *cupsGetResponse (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *resource<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>resource</dt>
-<dd class="description">HTTP resource for POST</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Response or <code>NULL</code> on HTTP error</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Use this function to get the response for an IPP request sent using
-<a href="#cupsSendRequest"><code>cupsSendRequest</code></a>. For requests that return additional data, use
-<a href="#cupsReadResponseData"><code>cupsReadResponseData</code></a> after getting a successful response,
-otherwise call <a href="#httpFlush"><code>httpFlush</code></a> to complete the response processing.
-
-</p>
-<h3 class="function"><a name="cupsLastError">cupsLastError</a></h3>
-<p class="description">Return the last IPP status code received on the current
-thread.</p>
-<p class="code">
-ipp_status_t cupsLastError (void);</p>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">IPP status code from last request</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsLastErrorString">cupsLastErrorString</a></h3>
-<p class="description">Return the last IPP status-message received on the
-current thread.</p>
-<p class="code">
-const char *cupsLastErrorString (void);</p>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">status-message text from last request</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.1.20/macOS 10.4&nbsp;</span><a name="cupsPutFd">cupsPutFd</a></h3>
-<p class="description">Put a file on the server.</p>
-<p class="code">
-http_status_t cupsPutFd (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *resource,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int fd<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>resource</dt>
-<dd class="description">Resource name</dd>
-<dt>fd</dt>
-<dd class="description">File descriptor</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">HTTP status</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function returns <code>HTTP_STATUS_CREATED</code> when the file is stored
-successfully.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.1.20/macOS 10.4&nbsp;</span><a name="cupsPutFile">cupsPutFile</a></h3>
-<p class="description">Put a file on the server.</p>
-<p class="code">
-http_status_t cupsPutFile (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *resource,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *filename<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>resource</dt>
-<dd class="description">Resource name</dd>
-<dt>filename</dt>
-<dd class="description">Filename</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">HTTP status</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function returns <code>HTTP_CREATED</code> when the file is stored
-successfully.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span><a name="cupsReadResponseData">cupsReadResponseData</a></h3>
-<p class="description">Read additional data after the IPP response.</p>
-<p class="code">
-ssize_t cupsReadResponseData (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *buffer,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;size_t length<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>buffer</dt>
-<dd class="description">Buffer to use</dd>
-<dt>length</dt>
-<dd class="description">Number of bytes to read</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Bytes read, 0 on EOF, -1 on error</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function is used after <a href="#cupsGetResponse"><code>cupsGetResponse</code></a> to read the PPD or document
-files from <code>CUPS_GET_PPD</code> and <code>CUPS_GET_DOCUMENT</code> requests,
-respectively.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span><a name="cupsSendRequest">cupsSendRequest</a></h3>
-<p class="description">Send an IPP request.</p>
-<p class="code">
-http_status_t cupsSendRequest (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *request,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *resource,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;size_t length<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>request</dt>
-<dd class="description">IPP request</dd>
-<dt>resource</dt>
-<dd class="description">Resource path</dd>
-<dt>length</dt>
-<dd class="description">Length of data to follow or <code>CUPS_LENGTH_VARIABLE</code></dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Initial HTTP status</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Use <a href="#cupsWriteRequestData"><code>cupsWriteRequestData</code></a> to write any additional data (document, PPD
-file, etc.) for the request, <a href="#cupsGetResponse"><code>cupsGetResponse</code></a> to get the IPP response,
-and <a href="#cupsReadResponseData"><code>cupsReadResponseData</code></a> to read any additional data following the
-response. Only one request can be sent/queued at a time per <code>http_t</code>
-connection.<br>
-<br>
-Returns the initial HTTP status code, which will be <code>HTTP_STATUS_CONTINUE</code>
-on a successful send of the request.<br>
-<br>
-Note: Unlike <a href="#cupsDoFileRequest"><code>cupsDoFileRequest</code></a>, <a href="#cupsDoIORequest"><code>cupsDoIORequest</code></a>, and
-<a href="#cupsDoRequest"><code>cupsDoRequest</code></a>, the request is NOT freed with <a href="#ippDelete"><code>ippDelete</code></a>.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span><a name="cupsWriteRequestData">cupsWriteRequestData</a></h3>
-<p class="description">Write additional data after an IPP request.</p>
-<p class="code">
-http_status_t cupsWriteRequestData (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *buffer,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;size_t length<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>buffer</dt>
-<dd class="description">Bytes to write</dd>
-<dt>length</dt>
-<dd class="description">Number of bytes to write</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description"><code>HTTP_STATUS_CONTINUE</code> if OK or HTTP status on error</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function is used after <a href="#cupsSendRequest"><code>cupsSendRequest</code></a> to provide a PPD and
-after <a href="#cupsStartDocument"><code>cupsStartDocument</code></a> to provide a document file.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="httpAcceptConnection">httpAcceptConnection</a></h3>
-<p class="description">Accept a new HTTP client connection from the
-specified listening socket.</p>
-<p class="code">
-<a href="#http_t">http_t</a> *httpAcceptConnection (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int fd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int blocking<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>fd</dt>
-<dd class="description">Listen socket file descriptor</dd>
-<dt>blocking</dt>
-<dd class="description">1 if the connection should be
-blocking, 0 otherwise</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">HTTP connection or <code>NULL</code></p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.5/macOS 10.7&nbsp;</span><a name="httpAddCredential">httpAddCredential</a></h3>
-<p class="description">Allocates and adds a single credential to an array.</p>
-<p class="code">
-int httpAddCredential (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;cups_array_t *credentials,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const void *data,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;size_t datalen<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>credentials</dt>
-<dd class="description">Credentials array</dd>
-<dt>data</dt>
-<dd class="description">PEM-encoded X.509 data</dd>
-<dt>datalen</dt>
-<dd class="description">Length of data</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">0 on success, -1 on error</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Use <code>cupsArrayNew(NULL, NULL)</code> to create a credentials array.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="httpAddrAny">httpAddrAny</a></h3>
-<p class="description">Check for the &quot;any&quot; address.</p>
-<p class="code">
-int httpAddrAny (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#http_addr_t">http_addr_t</a> *addr<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>addr</dt>
-<dd class="description">Address to check</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 if &quot;any&quot;, 0 otherwise</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpAddrClose">httpAddrClose</a></h3>
-<p class="description">Close a socket created by <a href="#httpAddrConnect"><code>httpAddrConnect</code></a> or
-<a href="#httpAddrListen"><code>httpAddrListen</code></a>.</p>
-<p class="code">
-int httpAddrClose (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_addr_t">http_addr_t</a> *addr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int fd<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>addr</dt>
-<dd class="description">Listen address or <code>NULL</code></dd>
-<dt>fd</dt>
-<dd class="description">Socket file descriptor</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">0 on success, -1 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Pass <code>NULL</code> for sockets created with <a href="#httpAddrConnect"><code>httpAddrConnect</code></a> and the
-listen address for sockets created with <a href="#httpAddrListen"><code>httpAddrListen</code></a>. This will
-ensure that domain sockets are removed when closed.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="httpAddrEqual">httpAddrEqual</a></h3>
-<p class="description">Compare two addresses.</p>
-<p class="code">
-int httpAddrEqual (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#http_addr_t">http_addr_t</a> *addr1,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#http_addr_t">http_addr_t</a> *addr2<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>addr1</dt>
-<dd class="description">First address</dd>
-<dt>addr2</dt>
-<dd class="description">Second address</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 if equal, 0 if not</p>
-<h3 class="function"><a name="httpAddrFamily">httpAddrFamily</a></h3>
-<p class="description">Get the address family of an address.</p>
-<p class="code">
-int httpAddrFamily (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_addr_t">http_addr_t</a> *addr<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>addr</dt>
-<dd class="description">Address</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Address family</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="httpAddrLength">httpAddrLength</a></h3>
-<p class="description">Return the length of the address in bytes.</p>
-<p class="code">
-int httpAddrLength (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#http_addr_t">http_addr_t</a> *addr<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>addr</dt>
-<dd class="description">Address</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Length in bytes</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="httpAddrListen">httpAddrListen</a></h3>
-<p class="description">Create a listening socket bound to the specified
-address and port.</p>
-<p class="code">
-int httpAddrListen (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_addr_t">http_addr_t</a> *addr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int port<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>addr</dt>
-<dd class="description">Address to bind to</dd>
-<dt>port</dt>
-<dd class="description">Port number to bind to</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Socket or -1 on error</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="httpAddrLocalhost">httpAddrLocalhost</a></h3>
-<p class="description">Check for the local loopback address.</p>
-<p class="code">
-int httpAddrLocalhost (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#http_addr_t">http_addr_t</a> *addr<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>addr</dt>
-<dd class="description">Address to check</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 if local host, 0 otherwise</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="httpAddrLookup">httpAddrLookup</a></h3>
-<p class="description">Lookup the hostname associated with the address.</p>
-<p class="code">
-char *httpAddrLookup (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#http_addr_t">http_addr_t</a> *addr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int namelen<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>addr</dt>
-<dd class="description">Address to lookup</dd>
-<dt>name</dt>
-<dd class="description">Host name buffer</dd>
-<dt>namelen</dt>
-<dd class="description">Size of name buffer</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Host name</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="httpAddrPort">httpAddrPort</a></h3>
-<p class="description">Get the port number associated with an address.</p>
-<p class="code">
-int httpAddrPort (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_addr_t">http_addr_t</a> *addr<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>addr</dt>
-<dd class="description">Address</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Port number</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="httpAddrString">httpAddrString</a></h3>
-<p class="description">Convert an address to a numeric string.</p>
-<p class="code">
-char *httpAddrString (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#http_addr_t">http_addr_t</a> *addr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *s,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int slen<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>addr</dt>
-<dd class="description">Address to convert</dd>
-<dt>s</dt>
-<dd class="description">String buffer</dd>
-<dt>slen</dt>
-<dd class="description">Length of string</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Numeric address string</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="httpAssembleURI">httpAssembleURI</a></h3>
-<p class="description">Assemble a uniform resource identifier from its
-components.</p>
-<p class="code">
-<a href="#http_uri_status_t">http_uri_status_t</a> httpAssembleURI (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_uri_coding_t">http_uri_coding_t</a> encoding,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *uri,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int urilen,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *scheme,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *username,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *host,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int port,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *resource<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>encoding</dt>
-<dd class="description">Encoding flags</dd>
-<dt>uri</dt>
-<dd class="description">URI buffer</dd>
-<dt>urilen</dt>
-<dd class="description">Size of URI buffer</dd>
-<dt>scheme</dt>
-<dd class="description">Scheme name</dd>
-<dt>username</dt>
-<dd class="description">Username</dd>
-<dt>host</dt>
-<dd class="description">Hostname or address</dd>
-<dt>port</dt>
-<dd class="description">Port number</dd>
-<dt>resource</dt>
-<dd class="description">Resource</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">URI status</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function escapes reserved characters in the URI depending on the
-value of the &quot;encoding&quot; argument. You should use this function in
-place of traditional string functions whenever you need to create a
-URI string.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="httpAssembleURIf">httpAssembleURIf</a></h3>
-<p class="description">Assemble a uniform resource identifier from its
-components with a formatted resource.</p>
-<p class="code">
-<a href="#http_uri_status_t">http_uri_status_t</a> httpAssembleURIf (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_uri_coding_t">http_uri_coding_t</a> encoding,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *uri,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int urilen,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *scheme,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *username,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *host,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int port,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *resourcef,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;...<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>encoding</dt>
-<dd class="description">Encoding flags</dd>
-<dt>uri</dt>
-<dd class="description">URI buffer</dd>
-<dt>urilen</dt>
-<dd class="description">Size of URI buffer</dd>
-<dt>scheme</dt>
-<dd class="description">Scheme name</dd>
-<dt>username</dt>
-<dd class="description">Username</dd>
-<dt>host</dt>
-<dd class="description">Hostname or address</dd>
-<dt>port</dt>
-<dd class="description">Port number</dd>
-<dt>resourcef</dt>
-<dd class="description">Printf-style resource</dd>
-<dt>...</dt>
-<dd class="description">Additional arguments as needed</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">URI status</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function creates a formatted version of the resource string
-argument &quot;resourcef&quot; and escapes reserved characters in the URI
-depending on the value of the &quot;encoding&quot; argument. You should use
-this function in place of traditional string functions whenever
-you need to create a URI string.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="httpAssembleUUID">httpAssembleUUID</a></h3>
-<p class="description">Assemble a name-based UUID URN conforming to RFC 4122.</p>
-<p class="code">
-char *httpAssembleUUID (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *server,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int port,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int number,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *buffer,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;size_t bufsize<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>server</dt>
-<dd class="description">Server name</dd>
-<dt>port</dt>
-<dd class="description">Port number</dd>
-<dt>name</dt>
-<dd class="description">Object name or NULL</dd>
-<dt>number</dt>
-<dd class="description">Object number or 0</dd>
-<dt>buffer</dt>
-<dd class="description">String buffer</dd>
-<dt>bufsize</dt>
-<dd class="description">Size of buffer</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">UUID string</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function creates a unique 128-bit identifying number using the server
-name, port number, random data, and optionally an object name and/or object
-number. The result is formatted as a UUID URN as defined in RFC 4122.<br>
-<br>
-The buffer needs to be at least 46 bytes in size.
-
-</p>
-<h3 class="function"><a name="httpBlocking">httpBlocking</a></h3>
-<p class="description">Set blocking/non-blocking behavior on a connection.</p>
-<p class="code">
-void httpBlocking (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int b<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>b</dt>
-<dd class="description">1 = blocking, 0 = non-blocking</dd>
-</dl>
-<h3 class="function"><a name="httpCheck">httpCheck</a></h3>
-<p class="description">Check to see if there is a pending response from the server.</p>
-<p class="code">
-int httpCheck (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">0 = no data, 1 = data available</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span><a name="httpClearCookie">httpClearCookie</a></h3>
-<p class="description">Clear the cookie value(s).</p>
-<p class="code">
-void httpClearCookie (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h3 class="function"><a name="httpClearFields">httpClearFields</a></h3>
-<p class="description">Clear HTTP request fields.</p>
-<p class="code">
-void httpClearFields (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h3 class="function"><a name="httpClose">httpClose</a></h3>
-<p class="description">Close an HTTP connection.</p>
-<p class="code">
-void httpClose (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpCompareCredentials">httpCompareCredentials</a></h3>
-<p class="description">Compare two sets of X.509 credentials.</p>
-<p class="code">
-int httpCompareCredentials (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;cups_array_t *cred1,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;cups_array_t *cred2<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>cred1</dt>
-<dd class="description">First set of X.509 credentials</dd>
-<dt>cred2</dt>
-<dd class="description">Second set of X.509 credentials</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 if they match, 0 if they do not</p>
-<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpConnect">httpConnect</a></h3>
-<p class="description">Connect to a HTTP server.</p>
-<p class="code">
-<a href="#http_t">http_t</a> *httpConnect (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *host,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int port<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>host</dt>
-<dd class="description">Host to connect to</dd>
-<dt>port</dt>
-<dd class="description">Port number</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New HTTP connection</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function is deprecated - use <a href="#httpConnect2"><code>httpConnect2</code></a> instead.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="httpConnect2">httpConnect2</a></h3>
-<p class="description">Connect to a HTTP server.</p>
-<p class="code">
-<a href="#http_t">http_t</a> *httpConnect2 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *host,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int port,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_addrlist_t">http_addrlist_t</a> *addrlist,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int family,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_encryption_t">http_encryption_t</a> encryption,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int blocking,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int msec,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int *cancel<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>host</dt>
-<dd class="description">Host to connect to</dd>
-<dt>port</dt>
-<dd class="description">Port number</dd>
-<dt>addrlist</dt>
-<dd class="description">List of addresses or NULL to lookup</dd>
-<dt>family</dt>
-<dd class="description">Address family to use or <code>AF_UNSPEC</code> for any</dd>
-<dt>encryption</dt>
-<dd class="description">Type of encryption to use</dd>
-<dt>blocking</dt>
-<dd class="description">1 for blocking connection, 0 for non-blocking</dd>
-<dt>msec</dt>
-<dd class="description">Connection timeout in milliseconds, 0 means don't connect</dd>
-<dt>cancel</dt>
-<dd class="description">Pointer to &quot;cancel&quot; variable</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New HTTP connection</p>
-<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpConnectEncrypt">httpConnectEncrypt</a></h3>
-<p class="description">Connect to a HTTP server using encryption.</p>
-<p class="code">
-<a href="#http_t">http_t</a> *httpConnectEncrypt (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *host,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int port,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_encryption_t">http_encryption_t</a> encryption<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>host</dt>
-<dd class="description">Host to connect to</dd>
-<dt>port</dt>
-<dd class="description">Port number</dd>
-<dt>encryption</dt>
-<dd class="description">Type of encryption to use</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New HTTP connection</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function is now deprecated. Please use the <a href="#httpConnect2"><code>httpConnect2</code></a> function
-instead.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpDecode64">httpDecode64</a></h3>
-<p class="description">Base64-decode a string.</p>
-<p class="code">
-char *httpDecode64 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *out,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *in<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>out</dt>
-<dd class="description">String to write to</dd>
-<dt>in</dt>
-<dd class="description">String to read from</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Decoded string</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function is deprecated. Use the httpDecode64_2() function instead
-which provides buffer length arguments.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.1.21/macOS 10.4&nbsp;</span><a name="httpDecode64_2">httpDecode64_2</a></h3>
-<p class="description">Base64-decode a string.</p>
-<p class="code">
-char *httpDecode64_2 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *out,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int *outlen,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *in<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>out</dt>
-<dd class="description">String to write to</dd>
-<dt>outlen</dt>
-<dd class="description">Size of output string</dd>
-<dt>in</dt>
-<dd class="description">String to read from</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Decoded string</p>
-<h3 class="function"><a name="httpDelete">httpDelete</a></h3>
-<p class="description">Send a DELETE request to the server.</p>
-<p class="code">
-int httpDelete (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *uri<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>uri</dt>
-<dd class="description">URI to delete</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Status of call (0 = success)</p>
-<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpEncode64">httpEncode64</a></h3>
-<p class="description">Base64-encode a string.</p>
-<p class="code">
-char *httpEncode64 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *out,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *in<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>out</dt>
-<dd class="description">String to write to</dd>
-<dt>in</dt>
-<dd class="description">String to read from</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Encoded string</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function is deprecated. Use the httpEncode64_2() function instead
-which provides buffer length arguments.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.1.21/macOS 10.4&nbsp;</span><a name="httpEncode64_2">httpEncode64_2</a></h3>
-<p class="description">Base64-encode a string.</p>
-<p class="code">
-char *httpEncode64_2 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *out,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int outlen,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *in,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int inlen<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>out</dt>
-<dd class="description">String to write to</dd>
-<dt>outlen</dt>
-<dd class="description">Size of output string</dd>
-<dt>in</dt>
-<dd class="description">String to read from</dd>
-<dt>inlen</dt>
-<dd class="description">Size of input string</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Encoded string</p>
-<h3 class="function"><a name="httpEncryption">httpEncryption</a></h3>
-<p class="description">Set the required encryption on the link.</p>
-<p class="code">
-int httpEncryption (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_encryption_t">http_encryption_t</a> e<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>e</dt>
-<dd class="description">New encryption preference</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">-1 on error, 0 on success</p>
-<h3 class="function"><a name="httpError">httpError</a></h3>
-<p class="description">Get the last error on a connection.</p>
-<p class="code">
-int httpError (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Error code (errno) value</p>
-<h3 class="function"><a name="httpFieldValue">httpFieldValue</a></h3>
-<p class="description">Return the HTTP field enumeration value for a field
-name.</p>
-<p class="code">
-<a href="#http_field_t">http_field_t</a> httpFieldValue (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>name</dt>
-<dd class="description">String name</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Field index</p>
-<h3 class="function"><a name="httpFlush">httpFlush</a></h3>
-<p class="description">Flush data from a HTTP connection.</p>
-<p class="code">
-void httpFlush (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="httpFlushWrite">httpFlushWrite</a></h3>
-<p class="description">Flush data in write buffer.</p>
-<p class="code">
-int httpFlushWrite (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Bytes written or -1 on error</p>
-<h3 class="function"><a name="httpFreeCredentials">httpFreeCredentials</a></h3>
-<p class="description">Free an array of credentials.</p>
-<p class="code">
-void httpFreeCredentials (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;cups_array_t *credentials<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>credentials</dt>
-<dd class="description">Array of credentials</dd>
-</dl>
-<h3 class="function"><a name="httpGet">httpGet</a></h3>
-<p class="description">Send a GET request to the server.</p>
-<p class="code">
-int httpGet (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *uri<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>uri</dt>
-<dd class="description">URI to get</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Status of call (0 = success)</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpGetActivity">httpGetActivity</a></h3>
-<p class="description">Get the most recent activity for a connection.</p>
-<p class="code">
-time_t httpGetActivity (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Time of last read or write</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The return value is the UNIX time of the last read or write.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpGetAddress">httpGetAddress</a></h3>
-<p class="description">Get the address of the connected peer of a connection.</p>
-<p class="code">
-<a href="#http_addr_t">http_addr_t</a> *httpGetAddress (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Connected address or <code>NULL</code></p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Returns <code>NULL</code> if the socket is currently unconnected.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.3/macOS 10.5&nbsp;</span><a name="httpGetAuthString">httpGetAuthString</a></h3>
-<p class="description">Get the current authorization string.</p>
-<p class="code">
-char *httpGetAuthString (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Authorization string</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The authorization string is set by cupsDoAuthentication() and
-httpSetAuthString(). Use httpGetAuthString() to retrieve the
-string to use with httpSetField() for the HTTP_FIELD_AUTHORIZATION
-value.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="httpGetBlocking">httpGetBlocking</a></h3>
-<p class="description">Get the blocking/non-block state of a connection.</p>
-<p class="code">
-int httpGetBlocking (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 if blocking, 0 if non-blocking</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="httpGetContentEncoding">httpGetContentEncoding</a></h3>
-<p class="description">Get a common content encoding, if any, between
-the client and server.</p>
-<p class="code">
-const char *httpGetContentEncoding (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Content-Coding value or
-<code>NULL</code> for the identity
-coding.</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function uses the value of the Accepts-Encoding HTTP header and must be
-called after receiving a response from the server or a request from the
-client. The value returned can be use in subsequent requests (for clients)
-or in the response (for servers) in order to compress the content stream.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span><a name="httpGetCookie">httpGetCookie</a></h3>
-<p class="description">Get any cookie data from the response.</p>
-<p class="code">
-const char *httpGetCookie (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Cookie data or NULL</p>
-<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpGetDateString">httpGetDateString</a></h3>
-<p class="description">Get a formatted date/time string from a time value.</p>
-<p class="code">
-const char *httpGetDateString (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;time_t t<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>t</dt>
-<dd class="description">UNIX time</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Date/time string</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="httpGetDateString2">httpGetDateString2</a></h3>
-<p class="description">Get a formatted date/time string from a time value.</p>
-<p class="code">
-const char *httpGetDateString2 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;time_t t,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *s,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int slen<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>t</dt>
-<dd class="description">UNIX time</dd>
-<dt>s</dt>
-<dd class="description">String buffer</dd>
-<dt>slen</dt>
-<dd class="description">Size of string buffer</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Date/time string</p>
-<h3 class="function"><a name="httpGetDateTime">httpGetDateTime</a></h3>
-<p class="description">Get a time value from a formatted date/time string.</p>
-<p class="code">
-time_t httpGetDateTime (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *s<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>s</dt>
-<dd class="description">Date/time string</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">UNIX time</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpGetEncryption">httpGetEncryption</a></h3>
-<p class="description">Get the current encryption mode of a connection.</p>
-<p class="code">
-<a href="#http_encryption_t">http_encryption_t</a> httpGetEncryption (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Current encryption mode</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function returns the encryption mode for the connection. Use the
-<a href="#httpIsEncrypted"><code>httpIsEncrypted</code></a> function to determine whether a TLS session has
-been established.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="httpGetExpect">httpGetExpect</a></h3>
-<p class="description">Get the value of the Expect header, if any.</p>
-<p class="code">
-http_status_t httpGetExpect (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Expect: status, if any</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Returns <code>HTTP_STATUS_NONE</code> if there is no Expect header, otherwise
-returns the expected HTTP status code, typically <code>HTTP_STATUS_CONTINUE</code>.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="httpGetFd">httpGetFd</a></h3>
-<p class="description">Get the file descriptor associated with a connection.</p>
-<p class="code">
-int httpGetFd (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">File descriptor or -1 if none</p>
-<h3 class="function"><a name="httpGetField">httpGetField</a></h3>
-<p class="description">Get a field value from a request/response.</p>
-<p class="code">
-const char *httpGetField (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_field_t">http_field_t</a> field<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>field</dt>
-<dd class="description">Field to get</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Field value</p>
-<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpGetHostByName">httpGetHostByName</a></h3>
-<p class="description">Lookup a hostname or IPv4 address, and return
-address records for the specified name.</p>
-<p class="code">
-struct hostent *httpGetHostByName (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>name</dt>
-<dd class="description">Hostname or IP address</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Host entry</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="httpGetHostname">httpGetHostname</a></h3>
-<p class="description">Get the FQDN for the connection or local system.</p>
-<p class="code">
-const char *httpGetHostname (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *s,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int slen<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection or NULL</dd>
-<dt>s</dt>
-<dd class="description">String buffer for name</dd>
-<dt>slen</dt>
-<dd class="description">Size of buffer</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">FQDN for connection or system</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">When &quot;http&quot; points to a connected socket, return the hostname or
-address that was used in the call to httpConnect() or httpConnectEncrypt(),
-or the address of the client for the connection from httpAcceptConnection().
-Otherwise, return the FQDN for the local system using both gethostname()
-and gethostbyname() to get the local hostname with domain.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpGetKeepAlive">httpGetKeepAlive</a></h3>
-<p class="description">Get the current Keep-Alive state of the connection.</p>
-<p class="code">
-<a href="#http_keepalive_t">http_keepalive_t</a> httpGetKeepAlive (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Keep-Alive state</p>
-<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpGetLength">httpGetLength</a></h3>
-<p class="description">Get the amount of data remaining from the
-content-length or transfer-encoding fields.</p>
-<p class="code">
-int httpGetLength (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Content length</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function is deprecated and will not return lengths larger than
-2^31 - 1; use httpGetLength2() instead.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="httpGetLength2">httpGetLength2</a></h3>
-<p class="description">Get the amount of data remaining from the
-content-length or transfer-encoding fields.</p>
-<p class="code">
-off_t httpGetLength2 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Content length</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function returns the complete content length, even for
-content larger than 2^31 - 1.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpGetPending">httpGetPending</a></h3>
-<p class="description">Get the number of bytes that are buffered for writing.</p>
-<p class="code">
-size_t httpGetPending (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of bytes buffered</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpGetReady">httpGetReady</a></h3>
-<p class="description">Get the number of bytes that can be read without blocking.</p>
-<p class="code">
-size_t httpGetReady (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of bytes available</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpGetRemaining">httpGetRemaining</a></h3>
-<p class="description">Get the number of remaining bytes in the message
-body or current chunk.</p>
-<p class="code">
-size_t httpGetRemaining (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Remaining bytes</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <a href="#httpIsChunked"><code>httpIsChunked</code></a> function can be used to determine whether the
-message body is chunked or fixed-length.
-
-</p>
-<h3 class="function"><a name="httpGetState">httpGetState</a></h3>
-<p class="description">Get the current state of the HTTP request.</p>
-<p class="code">
-<a href="#http_state_t">http_state_t</a> httpGetState (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">HTTP state</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="httpGetStatus">httpGetStatus</a></h3>
-<p class="description">Get the status of the last HTTP request.</p>
-<p class="code">
-http_status_t httpGetStatus (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">HTTP status</p>
-<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpGetSubField">httpGetSubField</a></h3>
-<p class="description">Get a sub-field value.</p>
-<p class="code">
-char *httpGetSubField (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_field_t">http_field_t</a> field,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *value<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>field</dt>
-<dd class="description">Field index</dd>
-<dt>name</dt>
-<dd class="description">Name of sub-field</dd>
-<dt>value</dt>
-<dd class="description">Value string</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Value or NULL</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="httpGetSubField2">httpGetSubField2</a></h3>
-<p class="description">Get a sub-field value.</p>
-<p class="code">
-char *httpGetSubField2 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_field_t">http_field_t</a> field,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *value,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int valuelen<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>field</dt>
-<dd class="description">Field index</dd>
-<dt>name</dt>
-<dd class="description">Name of sub-field</dd>
-<dt>value</dt>
-<dd class="description">Value string</dd>
-<dt>valuelen</dt>
-<dd class="description">Size of value buffer</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Value or NULL</p>
-<h3 class="function"><a name="httpGetVersion">httpGetVersion</a></h3>
-<p class="description">Get the HTTP version at the other end.</p>
-<p class="code">
-<a href="#http_version_t">http_version_t</a> httpGetVersion (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Version number</p>
-<h3 class="function"><a name="httpGets">httpGets</a></h3>
-<p class="description">Get a line of text from a HTTP connection.</p>
-<p class="code">
-char *httpGets (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *line,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int length,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>line</dt>
-<dd class="description">Line to read into</dd>
-<dt>length</dt>
-<dd class="description">Max length of buffer</dd>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Line or NULL</p>
-<h3 class="function"><a name="httpHead">httpHead</a></h3>
-<p class="description">Send a HEAD request to the server.</p>
-<p class="code">
-int httpHead (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *uri<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>uri</dt>
-<dd class="description">URI for head</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Status of call (0 = success)</p>
-<h3 class="function"><a name="httpInitialize">httpInitialize</a></h3>
-<p class="description">Initialize the HTTP interface library and set the
-default HTTP proxy (if any).</p>
-<p class="code">
-void httpInitialize (void);</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpIsChunked">httpIsChunked</a></h3>
-<p class="description">Report whether a message body is chunked.</p>
-<p class="code">
-int httpIsChunked (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 if chunked, 0 if not</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function returns non-zero if the message body is composed of
-variable-length chunks.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpIsEncrypted">httpIsEncrypted</a></h3>
-<p class="description">Report whether a connection is encrypted.</p>
-<p class="code">
-int httpIsEncrypted (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 if encrypted, 0 if not</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function returns non-zero if the connection is currently encrypted.
-
-</p>
-<h3 class="function"><a name="httpMD5">httpMD5</a></h3>
-<p class="description">Compute the MD5 sum of the username:group:password.</p>
-<p class="code">
-char *httpMD5 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *username,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *realm,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *passwd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char md5[33]<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>username</dt>
-<dd class="description">User name</dd>
-<dt>realm</dt>
-<dd class="description">Realm name</dd>
-<dt>passwd</dt>
-<dd class="description">Password string</dd>
-<dt>md5[33]</dt>
-<dd class="description">MD5 string</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">MD5 sum</p>
-<h3 class="function"><a name="httpMD5Final">httpMD5Final</a></h3>
-<p class="description">Combine the MD5 sum of the username, group, and password
-with the server-supplied nonce value, method, and
-request-uri.</p>
-<p class="code">
-char *httpMD5Final (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *nonce,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *method,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *resource,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char md5[33]<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>nonce</dt>
-<dd class="description">Server nonce value</dd>
-<dt>method</dt>
-<dd class="description">METHOD (GET, POST, etc.)</dd>
-<dt>resource</dt>
-<dd class="description">Resource path</dd>
-<dt>md5[33]</dt>
-<dd class="description">MD5 sum</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New sum</p>
-<h3 class="function"><a name="httpMD5String">httpMD5String</a></h3>
-<p class="description">Convert an MD5 sum to a character string.</p>
-<p class="code">
-char *httpMD5String (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *sum,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char md5[33]<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>sum</dt>
-<dd class="description">MD5 sum data</dd>
-<dt>md5[33]</dt>
-<dd class="description">MD5 sum in hex</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">MD5 sum in hex</p>
-<h3 class="function"><a name="httpOptions">httpOptions</a></h3>
-<p class="description">Send an OPTIONS request to the server.</p>
-<p class="code">
-int httpOptions (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *uri<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>uri</dt>
-<dd class="description">URI for options</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Status of call (0 = success)</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="httpPeek">httpPeek</a></h3>
-<p class="description">Peek at data from a HTTP connection.</p>
-<p class="code">
-ssize_t httpPeek (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *buffer,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;size_t length<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>buffer</dt>
-<dd class="description">Buffer for data</dd>
-<dt>length</dt>
-<dd class="description">Maximum number of bytes</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of bytes copied</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function copies available data from the given HTTP connection, reading
-a buffer as needed. The data is still available for reading using
-<a href="#httpRead"><code>httpRead</code></a> or <a href="#httpRead2"><code>httpRead2</code></a>.<br>
-<br>
-For non-blocking connections the usual timeouts apply.
-
-</p>
-<h3 class="function"><a name="httpPost">httpPost</a></h3>
-<p class="description">Send a POST request to the server.</p>
-<p class="code">
-int httpPost (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *uri<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>uri</dt>
-<dd class="description">URI for post</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Status of call (0 = success)</p>
-<h3 class="function"><a name="httpPut">httpPut</a></h3>
-<p class="description">Send a PUT request to the server.</p>
-<p class="code">
-int httpPut (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *uri<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>uri</dt>
-<dd class="description">URI to put</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Status of call (0 = success)</p>
-<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpRead">httpRead</a></h3>
-<p class="description">Read data from a HTTP connection.</p>
-<p class="code">
-int httpRead (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *buffer,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int length<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>buffer</dt>
-<dd class="description">Buffer for data</dd>
-<dt>length</dt>
-<dd class="description">Maximum number of bytes</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of bytes read</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function is deprecated. Use the httpRead2() function which can
-read more than 2GB of data.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="httpRead2">httpRead2</a></h3>
-<p class="description">Read data from a HTTP connection.</p>
-<p class="code">
-ssize_t httpRead2 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *buffer,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;size_t length<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>buffer</dt>
-<dd class="description">Buffer for data</dd>
-<dt>length</dt>
-<dd class="description">Maximum number of bytes</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of bytes read</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="httpReadRequest">httpReadRequest</a></h3>
-<p class="description">Read a HTTP request from a connection.</p>
-<p class="code">
-<a href="#http_state_t">http_state_t</a> httpReadRequest (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *uri,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;size_t urilen<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>uri</dt>
-<dd class="description">URI buffer</dd>
-<dt>urilen</dt>
-<dd class="description">Size of URI buffer</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New state of connection</p>
-<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpReconnect">httpReconnect</a></h3>
-<p class="description">Reconnect to a HTTP server.</p>
-<p class="code">
-int httpReconnect (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">0 on success, non-zero on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function is deprecated. Please use the <a href="#httpReconnect2"><code>httpReconnect2</code></a> function
-instead.
-
-</p>
-<h3 class="function"><a name="httpReconnect2">httpReconnect2</a></h3>
-<p class="description">Reconnect to a HTTP server with timeout and optional
-cancel.</p>
-<p class="code">
-int httpReconnect2 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int msec,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int *cancel<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>msec</dt>
-<dd class="description">Timeout in milliseconds</dd>
-<dt>cancel</dt>
-<dd class="description">Pointer to &quot;cancel&quot; variable</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">0 on success, non-zero on failure</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpResolveHostname">httpResolveHostname</a></h3>
-<p class="description">Resolve the hostname of the HTTP connection
-address.</p>
-<p class="code">
-const char *httpResolveHostname (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *buffer,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;size_t bufsize<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>buffer</dt>
-<dd class="description">Hostname buffer</dd>
-<dt>bufsize</dt>
-<dd class="description">Size of buffer</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Resolved hostname or <code>NULL</code></p>
-<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpSeparate">httpSeparate</a></h3>
-<p class="description">Separate a Universal Resource Identifier into its
-components.</p>
-<p class="code">
-void httpSeparate (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *uri,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *scheme,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *username,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *host,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int *port,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *resource<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>uri</dt>
-<dd class="description">Universal Resource Identifier</dd>
-<dt>scheme</dt>
-<dd class="description">Scheme [32] (http, https, etc.)</dd>
-<dt>username</dt>
-<dd class="description">Username [1024]</dd>
-<dt>host</dt>
-<dd class="description">Hostname [1024]</dd>
-<dt>port</dt>
-<dd class="description">Port number to use</dd>
-<dt>resource</dt>
-<dd class="description">Resource/filename [1024]</dd>
-</dl>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function is deprecated; use the httpSeparateURI() function instead.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.1.21/macOS 10.4&nbsp;</span><a name="httpSeparate2">httpSeparate2</a></h3>
-<p class="description">Separate a Universal Resource Identifier into its
-components.</p>
-<p class="code">
-void httpSeparate2 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *uri,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *scheme,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int schemelen,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *username,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int usernamelen,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *host,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int hostlen,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int *port,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *resource,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int resourcelen<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>uri</dt>
-<dd class="description">Universal Resource Identifier</dd>
-<dt>scheme</dt>
-<dd class="description">Scheme (http, https, etc.)</dd>
-<dt>schemelen</dt>
-<dd class="description">Size of scheme buffer</dd>
-<dt>username</dt>
-<dd class="description">Username</dd>
-<dt>usernamelen</dt>
-<dd class="description">Size of username buffer</dd>
-<dt>host</dt>
-<dd class="description">Hostname</dd>
-<dt>hostlen</dt>
-<dd class="description">Size of hostname buffer</dd>
-<dt>port</dt>
-<dd class="description">Port number to use</dd>
-<dt>resource</dt>
-<dd class="description">Resource/filename</dd>
-<dt>resourcelen</dt>
-<dd class="description">Size of resource buffer</dd>
-</dl>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function is deprecated; use the httpSeparateURI() function instead.
-
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="httpSeparateURI">httpSeparateURI</a></h3>
-<p class="description">Separate a Universal Resource Identifier into its
-components.</p>
-<p class="code">
-<a href="#http_uri_status_t">http_uri_status_t</a> httpSeparateURI (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_uri_coding_t">http_uri_coding_t</a> decoding,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *uri,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *scheme,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int schemelen,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *username,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int usernamelen,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *host,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int hostlen,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int *port,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *resource,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int resourcelen<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>decoding</dt>
-<dd class="description">Decoding flags</dd>
-<dt>uri</dt>
-<dd class="description">Universal Resource Identifier</dd>
-<dt>scheme</dt>
-<dd class="description">Scheme (http, https, etc.)</dd>
-<dt>schemelen</dt>
-<dd class="description">Size of scheme buffer</dd>
-<dt>username</dt>
-<dd class="description">Username</dd>
-<dt>usernamelen</dt>
-<dd class="description">Size of username buffer</dd>
-<dt>host</dt>
-<dd class="description">Hostname</dd>
-<dt>hostlen</dt>
-<dd class="description">Size of hostname buffer</dd>
-<dt>port</dt>
-<dd class="description">Port number to use</dd>
-<dt>resource</dt>
-<dd class="description">Resource/filename</dd>
-<dt>resourcelen</dt>
-<dd class="description">Size of resource buffer</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Result of separation</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.3/macOS 10.5&nbsp;</span><a name="httpSetAuthString">httpSetAuthString</a></h3>
-<p class="description">Set the current authorization string.</p>
-<p class="code">
-void httpSetAuthString (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *scheme,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *data<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>scheme</dt>
-<dd class="description">Auth scheme (NULL to clear it)</dd>
-<dt>data</dt>
-<dd class="description">Auth data (NULL for none)</dd>
-</dl>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function just stores a copy of the current authorization string in
-the HTTP connection object. You must still call httpSetField() to set
-HTTP_FIELD_AUTHORIZATION prior to issuing a HTTP request using httpGet(),
-httpHead(), httpOptions(), httpPost, or httpPut().
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span><a name="httpSetCookie">httpSetCookie</a></h3>
-<p class="description">Set the cookie value(s).</p>
-<p class="code">
-void httpSetCookie (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *cookie<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection</dd>
-<dt>cookie</dt>
-<dd class="description">Cookie string</dd>
-</dl>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.5/macOS 10.7&nbsp;</span><a name="httpSetCredentials">httpSetCredentials</a></h3>
-<p class="description">Set the credentials associated with an encrypted
-connection.</p>
-<p class="code">
-int httpSetCredentials (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;cups_array_t *credentials<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>credentials</dt>
-<dd class="description">Array of credentials</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Status of call (0 = success)</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="httpSetDefaultField">httpSetDefaultField</a></h3>
-<p class="description">Set the default value of an HTTP header.</p>
-<p class="code">
-void httpSetDefaultField (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_field_t">http_field_t</a> field,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *value<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>field</dt>
-<dd class="description">Field index</dd>
-<dt>value</dt>
-<dd class="description">Value</dd>
-</dl>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Currently only <code>HTTP_FIELD_ACCEPT_ENCODING</code>, <code>HTTP_FIELD_SERVER</code>,
-and <code>HTTP_FIELD_USER_AGENT</code> can be set.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="httpSetExpect">httpSetExpect</a></h3>
-<p class="description">Set the Expect: header in a request.</p>
-<p class="code">
-void httpSetExpect (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_status_t expect<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>expect</dt>
-<dd class="description">HTTP status to expect
-(<code>HTTP_STATUS_CONTINUE</code>)</dd>
-</dl>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Currently only <code>HTTP_STATUS_CONTINUE</code> is supported for the &quot;expect&quot;
-argument.
-
-</p>
-<h3 class="function"><a name="httpSetField">httpSetField</a></h3>
-<p class="description">Set the value of an HTTP header.</p>
-<p class="code">
-void httpSetField (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_field_t">http_field_t</a> field,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *value<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>field</dt>
-<dd class="description">Field index</dd>
-<dt>value</dt>
-<dd class="description">Value</dd>
-</dl>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpSetKeepAlive">httpSetKeepAlive</a></h3>
-<p class="description">Set the current Keep-Alive state of a connection.</p>
-<p class="code">
-void httpSetKeepAlive (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_keepalive_t">http_keepalive_t</a> keep_alive<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>keep_alive</dt>
-<dd class="description">New Keep-Alive value</dd>
-</dl>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="httpSetLength">httpSetLength</a></h3>
-<p class="description">Set the content-length and content-encoding.</p>
-<p class="code">
-void httpSetLength (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;size_t length<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>length</dt>
-<dd class="description">Length (0 for chunked)</dd>
-</dl>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.5/macOS 10.7&nbsp;</span><a name="httpSetTimeout">httpSetTimeout</a></h3>
-<p class="description">Set read/write timeouts and an optional callback.</p>
-<p class="code">
-void httpSetTimeout (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;double timeout,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_timeout_cb_t">http_timeout_cb_t</a> cb,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;void *user_data<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>timeout</dt>
-<dd class="description">Number of seconds for timeout,
-must be greater than 0</dd>
-<dt>cb</dt>
-<dd class="description">Callback function or NULL</dd>
-<dt>user_data</dt>
-<dd class="description">User data pointer</dd>
-</dl>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The optional timeout callback receives both the HTTP connection and a user
-data pointer and must return 1 to continue or 0 to error (time) out.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpShutdown">httpShutdown</a></h3>
-<p class="description">Shutdown one side of an HTTP connection.</p>
-<p class="code">
-void httpShutdown (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpStateString">httpStateString</a></h3>
-<p class="description">Return the string describing a HTTP state value.</p>
-<p class="code">
-const char *httpStateString (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_state_t">http_state_t</a> state<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>state</dt>
-<dd class="description">HTTP state value</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">State string</p>
-<h3 class="function"><a name="httpStatus">httpStatus</a></h3>
-<p class="description">Return a short string describing a HTTP status code.</p>
-<p class="code">
-const char *httpStatus (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_status_t status<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>status</dt>
-<dd class="description">HTTP status code</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Localized status string</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The returned string is localized to the current POSIX locale and is based
-on the status strings defined in RFC 2616.</p>
-<h3 class="function"><a name="httpTrace">httpTrace</a></h3>
-<p class="description">Send an TRACE request to the server.</p>
-<p class="code">
-int httpTrace (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *uri<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>uri</dt>
-<dd class="description">URI for trace</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Status of call (0 = success)</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="httpURIStatusString">httpURIStatusString</a></h3>
-<p class="description">Return a string describing a URI status code.</p>
-<p class="code">
-const char *httpURIStatusString (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_uri_status_t">http_uri_status_t</a> status<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>status</dt>
-<dd class="description">URI status code</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Localized status string</p>
-<h3 class="function"><a name="httpUpdate">httpUpdate</a></h3>
-<p class="description">Update the current HTTP state for incoming data.</p>
-<p class="code">
-http_status_t httpUpdate (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">HTTP status</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span><a name="httpWait">httpWait</a></h3>
-<p class="description">Wait for data available on a connection.</p>
-<p class="code">
-int httpWait (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int msec<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>msec</dt>
-<dd class="description">Milliseconds to wait</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 if data is available, 0 otherwise</p>
-<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="httpWrite">httpWrite</a></h3>
-<p class="description">Write data to a HTTP connection.</p>
-<p class="code">
-int httpWrite (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *buffer,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int length<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>buffer</dt>
-<dd class="description">Buffer for data</dd>
-<dt>length</dt>
-<dd class="description">Number of bytes to write</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of bytes written</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function is deprecated. Use the httpWrite2() function which can
-write more than 2GB of data.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="httpWrite2">httpWrite2</a></h3>
-<p class="description">Write data to a HTTP connection.</p>
-<p class="code">
-ssize_t httpWrite2 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *buffer,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;size_t length<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>buffer</dt>
-<dd class="description">Buffer for data</dd>
-<dt>length</dt>
-<dd class="description">Number of bytes to write</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of bytes written</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="httpWriteResponse">httpWriteResponse</a></h3>
-<p class="description">Write a HTTP response to a client connection.</p>
-<p class="code">
-int httpWriteResponse (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_status_t status<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>status</dt>
-<dd class="description">Status code</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">0 on success, -1 on error</p>
-<h3 class="function"><a name="ippAddBoolean">ippAddBoolean</a></h3>
-<p class="description">Add a boolean attribute to an IPP message.</p>
-<p class="code">
-<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddBoolean (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char value<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>group</dt>
-<dd class="description">IPP group</dd>
-<dt>name</dt>
-<dd class="description">Name of attribute</dd>
-<dt>value</dt>
-<dd class="description">Value of attribute</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New attribute</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>group</code> parameter specifies the IPP attribute group tag: none
-(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
-event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
-(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
-(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).</p>
-<h3 class="function"><a name="ippAddBooleans">ippAddBooleans</a></h3>
-<p class="description">Add an array of boolean values.</p>
-<p class="code">
-<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddBooleans (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_values,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *values<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>group</dt>
-<dd class="description">IPP group</dd>
-<dt>name</dt>
-<dd class="description">Name of attribute</dd>
-<dt>num_values</dt>
-<dd class="description">Number of values</dd>
-<dt>values</dt>
-<dd class="description">Values</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New attribute</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>group</code> parameter specifies the IPP attribute group tag: none
-(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
-event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
-(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
-(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span><a name="ippAddCollection">ippAddCollection</a></h3>
-<p class="description">Add a collection value.</p>
-<p class="code">
-<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddCollection (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *value<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>group</dt>
-<dd class="description">IPP group</dd>
-<dt>name</dt>
-<dd class="description">Name of attribute</dd>
-<dt>value</dt>
-<dd class="description">Value</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New attribute</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>group</code> parameter specifies the IPP attribute group tag: none
-(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
-event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
-(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
-(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span><a name="ippAddCollections">ippAddCollections</a></h3>
-<p class="description">Add an array of collection values.</p>
-<p class="code">
-<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddCollections (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_values,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#ipp_t">ipp_t</a> **values<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>group</dt>
-<dd class="description">IPP group</dd>
-<dt>name</dt>
-<dd class="description">Name of attribute</dd>
-<dt>num_values</dt>
-<dd class="description">Number of values</dd>
-<dt>values</dt>
-<dd class="description">Values</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New attribute</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>group</code> parameter specifies the IPP attribute group tag: none
-(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
-event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
-(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
-(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).
-
-</p>
-<h3 class="function"><a name="ippAddDate">ippAddDate</a></h3>
-<p class="description">Add a date attribute to an IPP message.</p>
-<p class="code">
-<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddDate (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#ipp_uchar_t">ipp_uchar_t</a> *value<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>group</dt>
-<dd class="description">IPP group</dd>
-<dt>name</dt>
-<dd class="description">Name of attribute</dd>
-<dt>value</dt>
-<dd class="description">Value</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New attribute</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>group</code> parameter specifies the IPP attribute group tag: none
-(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
-event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
-(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
-(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).</p>
-<h3 class="function"><a name="ippAddInteger">ippAddInteger</a></h3>
-<p class="description">Add a integer attribute to an IPP message.</p>
-<p class="code">
-<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddInteger (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t value_tag,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int value<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>group</dt>
-<dd class="description">IPP group</dd>
-<dt>value_tag</dt>
-<dd class="description">Type of attribute</dd>
-<dt>name</dt>
-<dd class="description">Name of attribute</dd>
-<dt>value</dt>
-<dd class="description">Value of attribute</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New attribute</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>group</code> parameter specifies the IPP attribute group tag: none
-(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
-event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
-(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
-(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).<br>
-<br>
-Supported values include enum (<code>IPP_TAG_ENUM</code>) and integer
-(<code>IPP_TAG_INTEGER</code>).</p>
-<h3 class="function"><a name="ippAddIntegers">ippAddIntegers</a></h3>
-<p class="description">Add an array of integer values.</p>
-<p class="code">
-<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddIntegers (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t value_tag,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_values,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const int *values<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>group</dt>
-<dd class="description">IPP group</dd>
-<dt>value_tag</dt>
-<dd class="description">Type of attribute</dd>
-<dt>name</dt>
-<dd class="description">Name of attribute</dd>
-<dt>num_values</dt>
-<dd class="description">Number of values</dd>
-<dt>values</dt>
-<dd class="description">Values</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New attribute</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>group</code> parameter specifies the IPP attribute group tag: none
-(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
-event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
-(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
-(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).<br>
-<br>
-Supported values include enum (<code>IPP_TAG_ENUM</code>) and integer
-(<code>IPP_TAG_INTEGER</code>).</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="ippAddOctetString">ippAddOctetString</a></h3>
-<p class="description">Add an octetString value to an IPP message.</p>
-<p class="code">
-<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddOctetString (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const void *data,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int datalen<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>group</dt>
-<dd class="description">IPP group</dd>
-<dt>name</dt>
-<dd class="description">Name of attribute</dd>
-<dt>data</dt>
-<dd class="description">octetString data</dd>
-<dt>datalen</dt>
-<dd class="description">Length of data in bytes</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New attribute</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>group</code> parameter specifies the IPP attribute group tag: none
-(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
-event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
-(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
-(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippAddOutOfBand">ippAddOutOfBand</a></h3>
-<p class="description">Add an out-of-band value to an IPP message.</p>
-<p class="code">
-<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddOutOfBand (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t value_tag,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>group</dt>
-<dd class="description">IPP group</dd>
-<dt>value_tag</dt>
-<dd class="description">Type of attribute</dd>
-<dt>name</dt>
-<dd class="description">Name of attribute</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New attribute</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>group</code> parameter specifies the IPP attribute group tag: none
-(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
-event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
-(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
-(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).<br>
-<br>
-Supported out-of-band values include unsupported-value
-(<code>IPP_TAG_UNSUPPORTED_VALUE</code>), default (<code>IPP_TAG_DEFAULT</code>), unknown
-(<code>IPP_TAG_UNKNOWN</code>), no-value (<code>IPP_TAG_NOVALUE</code>), not-settable
-(<code>IPP_TAG_NOTSETTABLE</code>), delete-attribute (<code>IPP_TAG_DELETEATTR</code>), and
-admin-define (<code>IPP_TAG_ADMINDEFINE</code>).
-
-</p>
-<h3 class="function"><a name="ippAddRange">ippAddRange</a></h3>
-<p class="description">Add a range of values to an IPP message.</p>
-<p class="code">
-<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddRange (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int lower,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int upper<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>group</dt>
-<dd class="description">IPP group</dd>
-<dt>name</dt>
-<dd class="description">Name of attribute</dd>
-<dt>lower</dt>
-<dd class="description">Lower value</dd>
-<dt>upper</dt>
-<dd class="description">Upper value</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New attribute</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>group</code> parameter specifies the IPP attribute group tag: none
-(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
-event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
-(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
-(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).<br>
-<br>
-The <code>lower</code> parameter must be less than or equal to the <code>upper</code> parameter.</p>
-<h3 class="function"><a name="ippAddRanges">ippAddRanges</a></h3>
-<p class="description">Add ranges of values to an IPP message.</p>
-<p class="code">
-<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddRanges (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_values,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const int *lower,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const int *upper<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>group</dt>
-<dd class="description">IPP group</dd>
-<dt>name</dt>
-<dd class="description">Name of attribute</dd>
-<dt>num_values</dt>
-<dd class="description">Number of values</dd>
-<dt>lower</dt>
-<dd class="description">Lower values</dd>
-<dt>upper</dt>
-<dd class="description">Upper values</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New attribute</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>group</code> parameter specifies the IPP attribute group tag: none
-(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
-event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
-(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
-(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).</p>
-<h3 class="function"><a name="ippAddResolution">ippAddResolution</a></h3>
-<p class="description">Add a resolution value to an IPP message.</p>
-<p class="code">
-<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddResolution (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_res_t">ipp_res_t</a> units,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int xres,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int yres<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>group</dt>
-<dd class="description">IPP group</dd>
-<dt>name</dt>
-<dd class="description">Name of attribute</dd>
-<dt>units</dt>
-<dd class="description">Units for resolution</dd>
-<dt>xres</dt>
-<dd class="description">X resolution</dd>
-<dt>yres</dt>
-<dd class="description">Y resolution</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New attribute</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>group</code> parameter specifies the IPP attribute group tag: none
-(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
-event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
-(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
-(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).</p>
-<h3 class="function"><a name="ippAddResolutions">ippAddResolutions</a></h3>
-<p class="description">Add resolution values to an IPP message.</p>
-<p class="code">
-<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddResolutions (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_values,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_res_t">ipp_res_t</a> units,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const int *xres,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const int *yres<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>group</dt>
-<dd class="description">IPP group</dd>
-<dt>name</dt>
-<dd class="description">Name of attribute</dd>
-<dt>num_values</dt>
-<dd class="description">Number of values</dd>
-<dt>units</dt>
-<dd class="description">Units for resolution</dd>
-<dt>xres</dt>
-<dd class="description">X resolutions</dd>
-<dt>yres</dt>
-<dd class="description">Y resolutions</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New attribute</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>group</code> parameter specifies the IPP attribute group tag: none
-(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
-event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
-(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
-(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).</p>
-<h3 class="function"><a name="ippAddSeparator">ippAddSeparator</a></h3>
-<p class="description">Add a group separator to an IPP message.</p>
-<p class="code">
-<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddSeparator (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New attribute</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.</p>
-<h3 class="function"><a name="ippAddString">ippAddString</a></h3>
-<p class="description">Add a language-encoded string to an IPP message.</p>
-<p class="code">
-<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddString (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t value_tag,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *language,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *value<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>group</dt>
-<dd class="description">IPP group</dd>
-<dt>value_tag</dt>
-<dd class="description">Type of attribute</dd>
-<dt>name</dt>
-<dd class="description">Name of attribute</dd>
-<dt>language</dt>
-<dd class="description">Language code</dd>
-<dt>value</dt>
-<dd class="description">Value</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New attribute</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>group</code> parameter specifies the IPP attribute group tag: none
-(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
-event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
-(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
-(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).<br>
-<br>
-Supported string values include charset (<code>IPP_TAG_CHARSET</code>), keyword
-(<code>IPP_TAG_KEYWORD</code>), language (<code>IPP_TAG_LANGUAGE</code>), mimeMediaType
-(<code>IPP_TAG_MIMETYPE</code>), name (<code>IPP_TAG_NAME</code>), nameWithLanguage
-(<code>IPP_TAG_NAMELANG), text (</code>code IPP_TAG_TEXT@), textWithLanguage
-(<code>IPP_TAG_TEXTLANG</code>), uri (<code>IPP_TAG_URI</code>), and uriScheme
-(<code>IPP_TAG_URISCHEME</code>).<br>
-<br>
-The <code>language</code> parameter must be non-<code>NULL</code> for nameWithLanguage and
-textWithLanguage string values and must be <code>NULL</code> for all other string values.</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="ippAddStringf">ippAddStringf</a></h3>
-<p class="description">Add a formatted string to an IPP message.</p>
-<p class="code">
-<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddStringf (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t value_tag,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *language,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *format,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;...<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>group</dt>
-<dd class="description">IPP group</dd>
-<dt>value_tag</dt>
-<dd class="description">Type of attribute</dd>
-<dt>name</dt>
-<dd class="description">Name of attribute</dd>
-<dt>language</dt>
-<dd class="description">Language code (<code>NULL</code> for default)</dd>
-<dt>format</dt>
-<dd class="description">Printf-style format string</dd>
-<dt>...</dt>
-<dd class="description">Additional arguments as needed</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New attribute</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>group</code> parameter specifies the IPP attribute group tag: none
-(<code>IPP_TAG_ZERO</code>, for member attributes), document
-(<code>IPP_TAG_DOCUMENT</code>), event notification
-(<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation (<code>IPP_TAG_OPERATION</code>),
-printer (<code>IPP_TAG_PRINTER</code>), subscription (<code>IPP_TAG_SUBSCRIPTION</code>),
-or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).<br>
-<br>
-Supported string values include charset (<code>IPP_TAG_CHARSET</code>), keyword
-(<code>IPP_TAG_KEYWORD</code>), language (<code>IPP_TAG_LANGUAGE</code>), mimeMediaType
-(<code>IPP_TAG_MIMETYPE</code>), name (<code>IPP_TAG_NAME</code>), nameWithLanguage
-(<code>IPP_TAG_NAMELANG), text (</code>code IPP_TAG_TEXT@), textWithLanguage
-(<code>IPP_TAG_TEXTLANG</code>), uri (<code>IPP_TAG_URI</code>), and uriScheme
-(<code>IPP_TAG_URISCHEME</code>).<br>
-<br>
-The <code>language</code> parameter must be non-<code>NULL</code> for nameWithLanguage
-and textWithLanguage string values and must be <code>NULL</code> for all other
-string values.<br>
-<br>
-The <code>format</code> parameter uses formatting characters compatible with the
-printf family of standard functions. Additional arguments follow it as
-needed. The formatted string is truncated as needed to the maximum length of
-the corresponding value type.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="ippAddStringfv">ippAddStringfv</a></h3>
-<p class="description">Add a formatted string to an IPP message.</p>
-<p class="code">
-<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddStringfv (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t value_tag,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *language,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *format,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;va_list ap<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>group</dt>
-<dd class="description">IPP group</dd>
-<dt>value_tag</dt>
-<dd class="description">Type of attribute</dd>
-<dt>name</dt>
-<dd class="description">Name of attribute</dd>
-<dt>language</dt>
-<dd class="description">Language code (<code>NULL</code> for default)</dd>
-<dt>format</dt>
-<dd class="description">Printf-style format string</dd>
-<dt>ap</dt>
-<dd class="description">Additional arguments</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New attribute</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>group</code> parameter specifies the IPP attribute group tag: none
-(<code>IPP_TAG_ZERO</code>, for member attributes), document
-(<code>IPP_TAG_DOCUMENT</code>), event notification
-(<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation (<code>IPP_TAG_OPERATION</code>),
-printer (<code>IPP_TAG_PRINTER</code>), subscription (<code>IPP_TAG_SUBSCRIPTION</code>),
-or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).<br>
-<br>
-Supported string values include charset (<code>IPP_TAG_CHARSET</code>), keyword
-(<code>IPP_TAG_KEYWORD</code>), language (<code>IPP_TAG_LANGUAGE</code>), mimeMediaType
-(<code>IPP_TAG_MIMETYPE</code>), name (<code>IPP_TAG_NAME</code>), nameWithLanguage
-(<code>IPP_TAG_NAMELANG), text (</code>code IPP_TAG_TEXT@), textWithLanguage
-(<code>IPP_TAG_TEXTLANG</code>), uri (<code>IPP_TAG_URI</code>), and uriScheme
-(<code>IPP_TAG_URISCHEME</code>).<br>
-<br>
-The <code>language</code> parameter must be non-<code>NULL</code> for nameWithLanguage
-and textWithLanguage string values and must be <code>NULL</code> for all other
-string values.<br>
-<br>
-The <code>format</code> parameter uses formatting characters compatible with the
-printf family of standard functions. Additional arguments are passed in the
-stdarg pointer <code>ap</code>. The formatted string is truncated as needed to the
-maximum length of the corresponding value type.
-
-</p>
-<h3 class="function"><a name="ippAddStrings">ippAddStrings</a></h3>
-<p class="description">Add language-encoded strings to an IPP message.</p>
-<p class="code">
-<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddStrings (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t value_tag,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_values,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *language,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *const *values<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>group</dt>
-<dd class="description">IPP group</dd>
-<dt>value_tag</dt>
-<dd class="description">Type of attribute</dd>
-<dt>name</dt>
-<dd class="description">Name of attribute</dd>
-<dt>num_values</dt>
-<dd class="description">Number of values</dd>
-<dt>language</dt>
-<dd class="description">Language code (<code>NULL</code> for default)</dd>
-<dt>values</dt>
-<dd class="description">Values</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New attribute</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>group</code> parameter specifies the IPP attribute group tag: none
-(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
-event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
-(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
-(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).<br>
-<br>
-Supported string values include charset (<code>IPP_TAG_CHARSET</code>), keyword
-(<code>IPP_TAG_KEYWORD</code>), language (<code>IPP_TAG_LANGUAGE</code>), mimeMediaType
-(<code>IPP_TAG_MIMETYPE</code>), name (<code>IPP_TAG_NAME</code>), nameWithLanguage
-(<code>IPP_TAG_NAMELANG), text (</code>code IPP_TAG_TEXT@), textWithLanguage
-(<code>IPP_TAG_TEXTLANG</code>), uri (<code>IPP_TAG_URI</code>), and uriScheme
-(<code>IPP_TAG_URISCHEME</code>).<br>
-<br>
-The <code>language</code> parameter must be non-<code>NULL</code> for nameWithLanguage and
-textWithLanguage string values and must be <code>NULL</code> for all other string values.</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippAttributeString">ippAttributeString</a></h3>
-<p class="description">Convert the attribute's value to a string.</p>
-<p class="code">
-size_t ippAttributeString (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *buffer,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;size_t bufsize<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>attr</dt>
-<dd class="description">Attribute</dd>
-<dt>buffer</dt>
-<dd class="description">String buffer or NULL</dd>
-<dt>bufsize</dt>
-<dd class="description">Size of string buffer</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of bytes less nul</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Returns the number of bytes that would be written, not including the
-trailing nul. The buffer pointer can be NULL to get the required length,
-just like (v)snprintf.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="ippContainsInteger">ippContainsInteger</a></h3>
-<p class="description">Determine whether an attribute contains the
-specified value or is within the list of ranges.</p>
-<p class="code">
-int ippContainsInteger (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int value<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>attr</dt>
-<dd class="description">Attribute</dd>
-<dt>value</dt>
-<dd class="description">Integer/enum value</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on a match, 0 on no match</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Returns non-zero when the attribute contains either a matching integer or
-enum value, or the value falls within one of the rangeOfInteger values for
-the attribute.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="ippContainsString">ippContainsString</a></h3>
-<p class="description">Determine whether an attribute contains the
-specified string value.</p>
-<p class="code">
-int ippContainsString (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *value<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>attr</dt>
-<dd class="description">Attribute</dd>
-<dt>value</dt>
-<dd class="description">String value</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on a match, 0 on no match</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Returns non-zero when the attribute contains a matching charset, keyword,
-language, mimeMediaType, name, text, URI, or URI scheme value.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippCopyAttribute">ippCopyAttribute</a></h3>
-<p class="description">Copy an attribute.</p>
-<p class="code">
-<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippCopyAttribute (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *dst,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *srcattr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int quickcopy<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>dst</dt>
-<dd class="description">Destination IPP message</dd>
-<dt>srcattr</dt>
-<dd class="description">Attribute to copy</dd>
-<dt>quickcopy</dt>
-<dd class="description">1 for a referenced copy, 0 for normal</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New attribute</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The specified attribute, <code>attr</code>, is copied to the destination IPP message.
-When <code>quickcopy</code> is non-zero, a &quot;shallow&quot; reference copy of the attribute is
-created - this should only be done as long as the original source IPP message will
-not be freed for the life of the destination.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippCopyAttributes">ippCopyAttributes</a></h3>
-<p class="description">Copy attributes from one IPP message to another.</p>
-<p class="code">
-int ippCopyAttributes (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *dst,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *src,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int quickcopy,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_copycb_t">ipp_copycb_t</a> cb,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;void *context<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>dst</dt>
-<dd class="description">Destination IPP message</dd>
-<dt>src</dt>
-<dd class="description">Source IPP message</dd>
-<dt>quickcopy</dt>
-<dd class="description">1 for a referenced copy, 0 for normal</dd>
-<dt>cb</dt>
-<dd class="description">Copy callback or <code>NULL</code> for none</dd>
-<dt>context</dt>
-<dd class="description">Context pointer</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on error</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Zero or more attributes are copied from the source IPP message, <code>src</code>, to the
-destination IPP message, <code>dst</code>. When <code>quickcopy</code> is non-zero, a &quot;shallow&quot;
-reference copy of the attribute is created - this should only be done as long as the
-original source IPP message will not be freed for the life of the destination.<br>
-<br>
-The <code>cb</code> and <code>context</code> parameters provide a generic way to &quot;filter&quot; the
-attributes that are copied - the function must return 1 to copy the attribute or
-0 to skip it. The function may also choose to do a partial copy of the source attribute
-itself.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="ippCreateRequestedArray">ippCreateRequestedArray</a></h3>
-<p class="description">Create a CUPS array of attribute names from the
-given requested-attributes attribute.</p>
-<p class="code">
-cups_array_t *ippCreateRequestedArray (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *request<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>request</dt>
-<dd class="description">IPP request</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">CUPS array or <code>NULL</code> if all</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function creates a (sorted) CUPS array of attribute names matching the
-list of &quot;requested-attribute&quot; values supplied in an IPP request. All IANA-
-registered values are supported in addition to the CUPS IPP extension
-attributes.<br>
-<br>
-The <code>request</code> parameter specifies the request message that was read from
-the client.
-
-<code>NULL</code> is returned if all attributes should be returned. Otherwise, the
-result is a sorted array of attribute names, where <code>cupsArrayFind(array,
-"attribute-name")</code> will return a non-NULL pointer. The array must be freed
-using the <code>cupsArrayDelete</code> function.
-
-</p>
-<h3 class="function"><a name="ippDateToTime">ippDateToTime</a></h3>
-<p class="description">Convert from RFC 1903 Date/Time format to UNIX time
-in seconds.</p>
-<p class="code">
-time_t ippDateToTime (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#ipp_uchar_t">ipp_uchar_t</a> *date<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>date</dt>
-<dd class="description">RFC 1903 date info</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">UNIX time value</p>
-<h3 class="function"><a name="ippDelete">ippDelete</a></h3>
-<p class="description">Delete an IPP message.</p>
-<p class="code">
-void ippDelete (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-</dl>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span><a name="ippDeleteAttribute">ippDeleteAttribute</a></h3>
-<p class="description">Delete a single attribute in an IPP message.</p>
-<p class="code">
-void ippDeleteAttribute (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>attr</dt>
-<dd class="description">Attribute to delete</dd>
-</dl>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippDeleteValues">ippDeleteValues</a></h3>
-<p class="description">Delete values in an attribute.</p>
-<p class="code">
-int ippDeleteValues (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> **attr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int count<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>attr</dt>
-<dd class="description">Attribute</dd>
-<dt>element</dt>
-<dd class="description">Index of first value to delete (0-based)</dd>
-<dt>count</dt>
-<dd class="description">Number of values to delete</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>element</code> parameter specifies the first value to delete, starting at
-0. It must be less than the number of values returned by <a href="#ippGetCount"><code>ippGetCount</code></a>.<br>
-<br>
-The <code>attr</code> parameter may be modified as a result of setting the value.<br>
-<br>
-Deleting all values in an attribute deletes the attribute.
-
-</p>
-<h3 class="function"><a name="ippEnumString">ippEnumString</a></h3>
-<p class="description">Return a string corresponding to the enum value.</p>
-<p class="code">
-const char *ippEnumString (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *attrname,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int enumvalue<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>attrname</dt>
-<dd class="description">Attribute name</dd>
-<dt>enumvalue</dt>
-<dd class="description">Enum value</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Enum string</p>
-<h3 class="function"><a name="ippEnumValue">ippEnumValue</a></h3>
-<p class="description">Return the value associated with a given enum string.</p>
-<p class="code">
-int ippEnumValue (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *attrname,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *enumstring<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>attrname</dt>
-<dd class="description">Attribute name</dd>
-<dt>enumstring</dt>
-<dd class="description">Enum string</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Enum value or -1 if unknown</p>
-<h3 class="function"><a name="ippErrorString">ippErrorString</a></h3>
-<p class="description">Return a name for the given status code.</p>
-<p class="code">
-const char *ippErrorString (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_status_t error<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>error</dt>
-<dd class="description">Error status</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Text string</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="ippErrorValue">ippErrorValue</a></h3>
-<p class="description">Return a status code for the given name.</p>
-<p class="code">
-ipp_status_t ippErrorValue (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>name</dt>
-<dd class="description">Name</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">IPP status code</p>
-<h3 class="function"><a name="ippFindAttribute">ippFindAttribute</a></h3>
-<p class="description">Find a named attribute in a request.</p>
-<p class="code">
-<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippFindAttribute (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t type<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>name</dt>
-<dd class="description">Name of attribute</dd>
-<dt>type</dt>
-<dd class="description">Type of attribute</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Matching attribute</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Starting with CUPS 2.0, the attribute name can contain a hierarchical list
-of attribute and member names separated by slashes, for example
-&quot;media-col/media-size&quot;.</p>
-<h3 class="function"><a name="ippFindNextAttribute">ippFindNextAttribute</a></h3>
-<p class="description">Find the next named attribute in a request.</p>
-<p class="code">
-<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippFindNextAttribute (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t type<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>name</dt>
-<dd class="description">Name of attribute</dd>
-<dt>type</dt>
-<dd class="description">Type of attribute</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Matching attribute</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">Starting with CUPS 2.0, the attribute name can contain a hierarchical list
-of attribute and member names separated by slashes, for example
-&quot;media-col/media-size&quot;.</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippFirstAttribute">ippFirstAttribute</a></h3>
-<p class="description">Return the first attribute in the message.</p>
-<p class="code">
-<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippFirstAttribute (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">First attribute or <code>NULL</code> if none</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippGetBoolean">ippGetBoolean</a></h3>
-<p class="description">Get a boolean value for an attribute.</p>
-<p class="code">
-int ippGetBoolean (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int element<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>attr</dt>
-<dd class="description">IPP attribute</dd>
-<dt>element</dt>
-<dd class="description">Value number (0-based)</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Boolean value or 0 on error</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>element</code> parameter specifies which value to get from 0 to
-<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a> - 1.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippGetCollection">ippGetCollection</a></h3>
-<p class="description">Get a collection value for an attribute.</p>
-<p class="code">
-<a href="#ipp_t">ipp_t</a> *ippGetCollection (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int element<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>attr</dt>
-<dd class="description">IPP attribute</dd>
-<dt>element</dt>
-<dd class="description">Value number (0-based)</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Collection value or <code>NULL</code> on error</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>element</code> parameter specifies which value to get from 0 to
-<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a> - 1.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippGetCount">ippGetCount</a></h3>
-<p class="description">Get the number of values in an attribute.</p>
-<p class="code">
-int ippGetCount (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>attr</dt>
-<dd class="description">IPP attribute</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of values or 0 on error</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippGetDate">ippGetDate</a></h3>
-<p class="description">Get a date value for an attribute.</p>
-<p class="code">
-const <a href="#ipp_uchar_t">ipp_uchar_t</a> *ippGetDate (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int element<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>attr</dt>
-<dd class="description">IPP attribute</dd>
-<dt>element</dt>
-<dd class="description">Value number (0-based)</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Date value or <code>NULL</code></p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>element</code> parameter specifies which value to get from 0 to
-<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a> - 1.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippGetGroupTag">ippGetGroupTag</a></h3>
-<p class="description">Get the group associated with an attribute.</p>
-<p class="code">
-ipp_tag_t ippGetGroupTag (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>attr</dt>
-<dd class="description">IPP attribute</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Group tag or <code>IPP_TAG_ZERO</code> on error</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippGetInteger">ippGetInteger</a></h3>
-<p class="description">Get the integer/enum value for an attribute.</p>
-<p class="code">
-int ippGetInteger (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int element<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>attr</dt>
-<dd class="description">IPP attribute</dd>
-<dt>element</dt>
-<dd class="description">Value number (0-based)</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Value or 0 on error</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>element</code> parameter specifies which value to get from 0 to
-<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a> - 1.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippGetName">ippGetName</a></h3>
-<p class="description">Get the attribute name.</p>
-<p class="code">
-const char *ippGetName (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>attr</dt>
-<dd class="description">IPP attribute</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Attribute name or <code>NULL</code> for separators</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="ippGetOctetString">ippGetOctetString</a></h3>
-<p class="description">Get an octetString value from an IPP attribute.</p>
-<p class="code">
-void *ippGetOctetString (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int *datalen<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>attr</dt>
-<dd class="description">IPP attribute</dd>
-<dt>element</dt>
-<dd class="description">Value number (0-based)</dd>
-<dt>datalen</dt>
-<dd class="description">Length of octetString data</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Pointer to octetString data</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>element</code> parameter specifies which value to get from 0 to
-<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a> - 1.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippGetOperation">ippGetOperation</a></h3>
-<p class="description">Get the operation ID in an IPP message.</p>
-<p class="code">
-ipp_op_t ippGetOperation (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP request message</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Operation ID or 0 on error</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippGetRange">ippGetRange</a></h3>
-<p class="description">Get a rangeOfInteger value from an attribute.</p>
-<p class="code">
-int ippGetRange (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int *uppervalue<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>attr</dt>
-<dd class="description">IPP attribute</dd>
-<dt>element</dt>
-<dd class="description">Value number (0-based)</dd>
-<dt>uppervalue</dt>
-<dd class="description">Upper value of range</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Lower value of range or 0</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>element</code> parameter specifies which value to get from 0 to
-<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a> - 1.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippGetRequestId">ippGetRequestId</a></h3>
-<p class="description">Get the request ID from an IPP message.</p>
-<p class="code">
-int ippGetRequestId (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Request ID or 0 on error</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippGetResolution">ippGetResolution</a></h3>
-<p class="description">Get a resolution value for an attribute.</p>
-<p class="code">
-int ippGetResolution (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int *yres,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_res_t">ipp_res_t</a> *units<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>attr</dt>
-<dd class="description">IPP attribute</dd>
-<dt>element</dt>
-<dd class="description">Value number (0-based)</dd>
-<dt>yres</dt>
-<dd class="description">Vertical/feed resolution</dd>
-<dt>units</dt>
-<dd class="description">Units for resolution</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Horizontal/cross feed resolution or 0</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>element</code> parameter specifies which value to get from 0 to
-<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a> - 1.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippGetState">ippGetState</a></h3>
-<p class="description">Get the IPP message state.</p>
-<p class="code">
-<a href="#ipp_state_t">ipp_state_t</a> ippGetState (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">IPP message state value</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippGetStatusCode">ippGetStatusCode</a></h3>
-<p class="description">Get the status code from an IPP response or event message.</p>
-<p class="code">
-ipp_status_t ippGetStatusCode (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP response or event message</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Status code in IPP message</p>
-<h3 class="function"><a name="ippGetString">ippGetString</a></h3>
-<p class="description">Return the value...</p>
-<p class="code">
-const char *ippGetString (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char **language<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>attr</dt>
-<dd class="description">IPP attribute</dd>
-<dt>element</dt>
-<dd class="description">Value number (0-based)</dd>
-<dt>language</dt>
-<dd class="description">Language code (<code>NULL</code> for don't care)</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Get the string and optionally the language code for an attribute.</p>
-<p class="discussion">The <code>element</code> parameter specifies which value to get from 0 to
-<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a> - 1.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippGetValueTag">ippGetValueTag</a></h3>
-<p class="description">Get the value tag for an attribute.</p>
-<p class="code">
-ipp_tag_t ippGetValueTag (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>attr</dt>
-<dd class="description">IPP attribute</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Value tag or <code>IPP_TAG_ZERO</code> on error</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippGetVersion">ippGetVersion</a></h3>
-<p class="description">Get the major and minor version number from an IPP message.</p>
-<p class="code">
-int ippGetVersion (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int *minor<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>minor</dt>
-<dd class="description">Minor version number or <code>NULL</code></dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Major version number or 0 on error</p>
-<h3 class="function"><a name="ippLength">ippLength</a></h3>
-<p class="description">Compute the length of an IPP message.</p>
-<p class="code">
-size_t ippLength (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Size of IPP message</p>
-<h3 class="function"><a name="ippNew">ippNew</a></h3>
-<p class="description">Allocate a new IPP message.</p>
-<p class="code">
-<a href="#ipp_t">ipp_t</a> *ippNew (void);</p>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">New IPP message</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="ippNewRequest">ippNewRequest</a></h3>
-<p class="description">Allocate a new IPP request message.</p>
-<p class="code">
-<a href="#ipp_t">ipp_t</a> *ippNewRequest (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_op_t op<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>op</dt>
-<dd class="description">Operation code</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">IPP request message</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The new request message is initialized with the attributes-charset and
-attributes-natural-language attributes added. The
-attributes-natural-language value is derived from the current locale.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="ippNewResponse">ippNewResponse</a></h3>
-<p class="description">Allocate a new IPP response message.</p>
-<p class="code">
-<a href="#ipp_t">ipp_t</a> *ippNewResponse (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *request<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>request</dt>
-<dd class="description">IPP request message</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">IPP response message</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The new response message is initialized with the same version-number,
-request-id, attributes-charset, and attributes-natural-language as the
-provided request message. If the attributes-charset or
-attributes-natural-language attributes are missing from the request,
-&quot;utf-8&quot; and a value derived from the current locale are substituted,
-respectively.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippNextAttribute">ippNextAttribute</a></h3>
-<p class="description">Return the next attribute in the message.</p>
-<p class="code">
-<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippNextAttribute (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Next attribute or <code>NULL</code> if none</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="ippOpString">ippOpString</a></h3>
-<p class="description">Return a name for the given operation id.</p>
-<p class="code">
-const char *ippOpString (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_op_t op<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>op</dt>
-<dd class="description">Operation ID</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Name</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="ippOpValue">ippOpValue</a></h3>
-<p class="description">Return an operation id for the given name.</p>
-<p class="code">
-ipp_op_t ippOpValue (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>name</dt>
-<dd class="description">Textual name</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Operation ID</p>
-<h3 class="function"><a name="ippPort">ippPort</a></h3>
-<p class="description">Return the default IPP port number.</p>
-<p class="code">
-int ippPort (void);</p>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Port number</p>
-<h3 class="function"><a name="ippRead">ippRead</a></h3>
-<p class="description">Read data for an IPP message from a HTTP connection.</p>
-<p class="code">
-<a href="#ipp_state_t">ipp_state_t</a> ippRead (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>ipp</dt>
-<dd class="description">IPP data</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Current state</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span><a name="ippReadFile">ippReadFile</a></h3>
-<p class="description">Read data for an IPP message from a file.</p>
-<p class="code">
-<a href="#ipp_state_t">ipp_state_t</a> ippReadFile (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int fd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>fd</dt>
-<dd class="description">HTTP data</dd>
-<dt>ipp</dt>
-<dd class="description">IPP data</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Current state</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="ippReadIO">ippReadIO</a></h3>
-<p class="description">Read data for an IPP message.</p>
-<p class="code">
-<a href="#ipp_state_t">ipp_state_t</a> ippReadIO (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;void *src,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_iocb_t">ipp_iocb_t</a> cb,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int blocking,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *parent,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>src</dt>
-<dd class="description">Data source</dd>
-<dt>cb</dt>
-<dd class="description">Read callback function</dd>
-<dt>blocking</dt>
-<dd class="description">Use blocking IO?</dd>
-<dt>parent</dt>
-<dd class="description">Parent request, if any</dd>
-<dt>ipp</dt>
-<dd class="description">IPP data</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Current state</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippSetBoolean">ippSetBoolean</a></h3>
-<p class="description">Set a boolean value in an attribute.</p>
-<p class="code">
-int ippSetBoolean (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> **attr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int boolvalue<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>attr</dt>
-<dd class="description">IPP attribute</dd>
-<dt>element</dt>
-<dd class="description">Value number (0-based)</dd>
-<dt>boolvalue</dt>
-<dd class="description">Boolean value</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>attr</code> parameter may be modified as a result of setting the value.<br>
-<br>
-The <code>element</code> parameter specifies which value to set from 0 to
-<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a>.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippSetCollection">ippSetCollection</a></h3>
-<p class="description">Set a collection value in an attribute.</p>
-<p class="code">
-int ippSetCollection (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> **attr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *colvalue<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>attr</dt>
-<dd class="description">IPP attribute</dd>
-<dt>element</dt>
-<dd class="description">Value number (0-based)</dd>
-<dt>colvalue</dt>
-<dd class="description">Collection value</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>attr</code> parameter may be modified as a result of setting the value.<br>
-<br>
-The <code>element</code> parameter specifies which value to set from 0 to
-<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a>.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippSetDate">ippSetDate</a></h3>
-<p class="description">Set a date value in an attribute.</p>
-<p class="code">
-int ippSetDate (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> **attr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#ipp_uchar_t">ipp_uchar_t</a> *datevalue<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>attr</dt>
-<dd class="description">IPP attribute</dd>
-<dt>element</dt>
-<dd class="description">Value number (0-based)</dd>
-<dt>datevalue</dt>
-<dd class="description">Date value</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>attr</code> parameter may be modified as a result of setting the value.<br>
-<br>
-The <code>element</code> parameter specifies which value to set from 0 to
-<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a>.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippSetGroupTag">ippSetGroupTag</a></h3>
-<p class="description">Set the group tag of an attribute.</p>
-<p class="code">
-int ippSetGroupTag (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> **attr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t group_tag<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>attr</dt>
-<dd class="description">Attribute</dd>
-<dt>group_tag</dt>
-<dd class="description">Group tag</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>attr</code> parameter may be modified as a result of setting the value.<br>
-<br>
-The <code>group</code> parameter specifies the IPP attribute group tag: none
-(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
-event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
-(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
-(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippSetInteger">ippSetInteger</a></h3>
-<p class="description">Set an integer or enum value in an attribute.</p>
-<p class="code">
-int ippSetInteger (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> **attr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int intvalue<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>attr</dt>
-<dd class="description">IPP attribute</dd>
-<dt>element</dt>
-<dd class="description">Value number (0-based)</dd>
-<dt>intvalue</dt>
-<dd class="description">Integer/enum value</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>attr</code> parameter may be modified as a result of setting the value.<br>
-<br>
-The <code>element</code> parameter specifies which value to set from 0 to
-<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a>.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippSetName">ippSetName</a></h3>
-<p class="description">Set the name of an attribute.</p>
-<p class="code">
-int ippSetName (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> **attr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>attr</dt>
-<dd class="description">IPP attribute</dd>
-<dt>name</dt>
-<dd class="description">Attribute name</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>attr</code> parameter may be modified as a result of setting the value.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="ippSetOctetString">ippSetOctetString</a></h3>
-<p class="description">Set an octetString value in an IPP attribute.</p>
-<p class="code">
-int ippSetOctetString (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> **attr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const void *data,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int datalen<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>attr</dt>
-<dd class="description">IPP attribute</dd>
-<dt>element</dt>
-<dd class="description">Value number (0-based)</dd>
-<dt>data</dt>
-<dd class="description">Pointer to octetString data</dd>
-<dt>datalen</dt>
-<dd class="description">Length of octetString data</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>attr</code> parameter may be modified as a result of setting the value.<br>
-<br>
-The <code>element</code> parameter specifies which value to set from 0 to
-<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a>.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippSetOperation">ippSetOperation</a></h3>
-<p class="description">Set the operation ID in an IPP request message.</p>
-<p class="code">
-int ippSetOperation (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_op_t op<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP request message</dd>
-<dt>op</dt>
-<dd class="description">Operation ID</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.
-
-</p>
-<h3 class="function"><a name="ippSetPort">ippSetPort</a></h3>
-<p class="description">Set the default port number.</p>
-<p class="code">
-void ippSetPort (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int p<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>p</dt>
-<dd class="description">Port number to use</dd>
-</dl>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippSetRange">ippSetRange</a></h3>
-<p class="description">Set a rangeOfInteger value in an attribute.</p>
-<p class="code">
-int ippSetRange (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> **attr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int lowervalue,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int uppervalue<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>attr</dt>
-<dd class="description">IPP attribute</dd>
-<dt>element</dt>
-<dd class="description">Value number (0-based)</dd>
-<dt>lowervalue</dt>
-<dd class="description">Lower bound for range</dd>
-<dt>uppervalue</dt>
-<dd class="description">Upper bound for range</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>attr</code> parameter may be modified as a result of setting the value.<br>
-<br>
-The <code>element</code> parameter specifies which value to set from 0 to
-<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a>.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippSetRequestId">ippSetRequestId</a></h3>
-<p class="description">Set the request ID in an IPP message.</p>
-<p class="code">
-int ippSetRequestId (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int request_id<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>request_id</dt>
-<dd class="description">Request ID</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>request_id</code> parameter must be greater than 0.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippSetResolution">ippSetResolution</a></h3>
-<p class="description">Set a resolution value in an attribute.</p>
-<p class="code">
-int ippSetResolution (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> **attr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_res_t">ipp_res_t</a> unitsvalue,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int xresvalue,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int yresvalue<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>attr</dt>
-<dd class="description">IPP attribute</dd>
-<dt>element</dt>
-<dd class="description">Value number (0-based)</dd>
-<dt>unitsvalue</dt>
-<dd class="description">Resolution units</dd>
-<dt>xresvalue</dt>
-<dd class="description">Horizontal/cross feed resolution</dd>
-<dt>yresvalue</dt>
-<dd class="description">Vertical/feed resolution</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>attr</code> parameter may be modified as a result of setting the value.<br>
-<br>
-The <code>element</code> parameter specifies which value to set from 0 to
-<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a>.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippSetState">ippSetState</a></h3>
-<p class="description">Set the current state of the IPP message.</p>
-<p class="code">
-int ippSetState (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_state_t">ipp_state_t</a> state<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>state</dt>
-<dd class="description">IPP state value</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippSetStatusCode">ippSetStatusCode</a></h3>
-<p class="description">Set the status code in an IPP response or event message.</p>
-<p class="code">
-int ippSetStatusCode (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_status_t status<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP response or event message</dd>
-<dt>status</dt>
-<dd class="description">Status code</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippSetString">ippSetString</a></h3>
-<p class="description">Set a string value in an attribute.</p>
-<p class="code">
-int ippSetString (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> **attr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *strvalue<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>attr</dt>
-<dd class="description">IPP attribute</dd>
-<dt>element</dt>
-<dd class="description">Value number (0-based)</dd>
-<dt>strvalue</dt>
-<dd class="description">String value</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>attr</code> parameter may be modified as a result of setting the value.<br>
-<br>
-The <code>element</code> parameter specifies which value to set from 0 to
-<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a>.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="ippSetStringf">ippSetStringf</a></h3>
-<p class="description">Set a formatted string value of an attribute.</p>
-<p class="code">
-int ippSetStringf (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> **attr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *format,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;...<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>attr</dt>
-<dd class="description">IPP attribute</dd>
-<dt>element</dt>
-<dd class="description">Value number (0-based)</dd>
-<dt>format</dt>
-<dd class="description">Printf-style format string</dd>
-<dt>...</dt>
-<dd class="description">Additional arguments as needed</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>attr</code> parameter may be modified as a result of setting the value.<br>
-<br>
-The <code>element</code> parameter specifies which value to set from 0 to
-<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a>.<br>
-<br>
-The <code>format</code> parameter uses formatting characters compatible with the
-printf family of standard functions. Additional arguments follow it as
-needed. The formatted string is truncated as needed to the maximum length of
-the corresponding value type.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="ippSetStringfv">ippSetStringfv</a></h3>
-<p class="description">Set a formatted string value of an attribute.</p>
-<p class="code">
-int ippSetStringfv (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> **attr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *format,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;va_list ap<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>attr</dt>
-<dd class="description">IPP attribute</dd>
-<dt>element</dt>
-<dd class="description">Value number (0-based)</dd>
-<dt>format</dt>
-<dd class="description">Printf-style format string</dd>
-<dt>ap</dt>
-<dd class="description">Pointer to additional arguments</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>attr</code> parameter may be modified as a result of setting the value.<br>
-<br>
-The <code>element</code> parameter specifies which value to set from 0 to
-<a href="#ippGetCount(attr)"><code>ippGetCount(attr)</code></a>.<br>
-<br>
-The <code>format</code> parameter uses formatting characters compatible with the
-printf family of standard functions. Additional arguments follow it as
-needed. The formatted string is truncated as needed to the maximum length of
-the corresponding value type.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippSetValueTag">ippSetValueTag</a></h3>
-<p class="description">Set the value tag of an attribute.</p>
-<p class="code">
-int ippSetValueTag (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> **attr,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t value_tag<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>attr</dt>
-<dd class="description">IPP attribute</dd>
-<dt>value_tag</dt>
-<dd class="description">Value tag</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The <code>attr</code> parameter may be modified as a result of setting the value.<br>
-<br>
-Integer (<code>IPP_TAG_INTEGER</code>) values can be promoted to rangeOfInteger
-(<code>IPP_TAG_RANGE</code>) values, the various string tags can be promoted to name
-(<code>IPP_TAG_NAME</code>) or nameWithLanguage (<code>IPP_TAG_NAMELANG</code>) values, text
-(<code>IPP_TAG_TEXT</code>) values can be promoted to textWithLanguage
-(<code>IPP_TAG_TEXTLANG</code>) values, and all values can be demoted to the various
-out-of-band value tags such as no-value (<code>IPP_TAG_NOVALUE</code>). All other changes
-will be rejected.<br>
-<br>
-Promoting a string attribute to nameWithLanguage or textWithLanguage adds the language
-code in the &quot;attributes-natural-language&quot; attribute or, if not present, the language
-code for the current locale.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.6/macOS 10.8&nbsp;</span><a name="ippSetVersion">ippSetVersion</a></h3>
-<p class="description">Set the version number in an IPP message.</p>
-<p class="code">
-int ippSetVersion (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int major,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int minor<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-<dt>major</dt>
-<dd class="description">Major version number (major.minor)</dd>
-<dt>minor</dt>
-<dd class="description">Minor version number (major.minor)</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
-the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
-<br>
-The valid version numbers are currently 1.0, 1.1, 2.0, 2.1, and 2.2.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="ippStateString">ippStateString</a></h3>
-<p class="description">Return the name corresponding to a state value.</p>
-<p class="code">
-const char *ippStateString (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_state_t">ipp_state_t</a> state<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>state</dt>
-<dd class="description">State value</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">State name</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span><a name="ippTagString">ippTagString</a></h3>
-<p class="description">Return the tag name corresponding to a tag value.</p>
-<p class="code">
-const char *ippTagString (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ipp_tag_t tag<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>tag</dt>
-<dd class="description">Tag value</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Tag name</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The returned names are defined in RFC 2911 and 3382.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span><a name="ippTagValue">ippTagValue</a></h3>
-<p class="description">Return the tag value corresponding to a tag name.</p>
-<p class="code">
-ipp_tag_t ippTagValue (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>name</dt>
-<dd class="description">Tag name</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Tag value</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">The tag names are defined in RFC 2911 and 3382.
-
-</p>
-<h3 class="function"><a name="ippTimeToDate">ippTimeToDate</a></h3>
-<p class="description">Convert from UNIX time to RFC 1903 format.</p>
-<p class="code">
-const <a href="#ipp_uchar_t">ipp_uchar_t</a> *ippTimeToDate (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;time_t t<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>t</dt>
-<dd class="description">UNIX time value</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">RFC-1903 date/time data</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="ippValidateAttribute">ippValidateAttribute</a></h3>
-<p class="description">Validate the contents of an attribute.</p>
-<p class="code">
-int ippValidateAttribute (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>attr</dt>
-<dd class="description">Attribute</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 if valid, 0 otherwise</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function validates the contents of an attribute based on the name and
-value tag. 1 is returned if the attribute is valid, 0 otherwise. On
-failure, cupsLastErrorString() is set to a human-readable message.
-
-</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span><a name="ippValidateAttributes">ippValidateAttributes</a></h3>
-<p class="description">Validate all attributes in an IPP message.</p>
-<p class="code">
-int ippValidateAttributes (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ipp</dt>
-<dd class="description">IPP message</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 if valid, 0 otherwise</p>
-<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function validates the contents of the IPP message, including each
-attribute. Like <a href="#ippValidateAttribute"><code>ippValidateAttribute</code></a>, cupsLastErrorString() is set
-to a human-readable message on failure.
-
-</p>
-<h3 class="function"><a name="ippWrite">ippWrite</a></h3>
-<p class="description">Write data for an IPP message to a HTTP connection.</p>
-<p class="code">
-<a href="#ipp_state_t">ipp_state_t</a> ippWrite (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_t">http_t</a> *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection</dd>
-<dt>ipp</dt>
-<dd class="description">IPP data</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Current state</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span><a name="ippWriteFile">ippWriteFile</a></h3>
-<p class="description">Write data for an IPP message to a file.</p>
-<p class="code">
-<a href="#ipp_state_t">ipp_state_t</a> ippWriteFile (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int fd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>fd</dt>
-<dd class="description">HTTP data</dd>
-<dt>ipp</dt>
-<dd class="description">IPP data</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Current state</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="ippWriteIO">ippWriteIO</a></h3>
-<p class="description">Write data for an IPP message.</p>
-<p class="code">
-<a href="#ipp_state_t">ipp_state_t</a> ippWriteIO (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;void *dst,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_iocb_t">ipp_iocb_t</a> cb,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int blocking,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *parent,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *ipp<br>
-);</p>
-<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>dst</dt>
-<dd class="description">Destination</dd>
-<dt>cb</dt>
-<dd class="description">Write callback function</dd>
-<dt>blocking</dt>
-<dd class="description">Use blocking IO?</dd>
-<dt>parent</dt>
-<dd class="description">Parent IPP message</dd>
-<dt>ipp</dt>
-<dd class="description">IPP data</dd>
-</dl>
-<h4 class="returnvalue">Return Value</h4>
-<p class="description">Current state</p>
-<h2 class="title"><a name="TYPES">Data Types</a></h2>
-<h3 class="typedef"><a name="gss_auth_identity_desc">gss_auth_identity_desc</a></h3>
-<p class="description">Local functions...</p>
-<p class="code">
-typedef struct <a href="#gss_auth_identity">gss_auth_identity</a> gss_auth_identity_desc;
-</p>
-<h3 class="typedef"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="http_addr_t">http_addr_t</a></h3>
-<p class="description">Socket address union, which
-makes using IPv6 and other
-address types easier and
-more portable. </p>
-<p class="code">
-typedef union _http_addr_u / http_addr_t;
-</p>
-<h3 class="typedef"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="http_addrlist_t">http_addrlist_t</a></h3>
-<p class="description">Socket address list, which is
-used to enumerate all of the
-addresses that are associated
-with a hostname. </p>
-<p class="code">
-typedef struct <a href="#http_addrlist_s">http_addrlist_s</a> / http_addrlist_t;
-</p>
-<h3 class="typedef"><a name="http_auth_t">http_auth_t</a></h3>
-<p class="description">HTTP authentication types</p>
-<p class="code">
-typedef enum <a href="#http_auth_e">http_auth_e</a> http_auth_t;
-</p>
-<h3 class="typedef"><span class="info">&nbsp;CUPS 1.5/macOS 10.7&nbsp;</span><a name="http_credential_t">http_credential_t</a></h3>
-<p class="description">HTTP credential data </p>
-<p class="code">
-typedef struct <a href="#http_credential_s">http_credential_s</a> http_credential_t;
-</p>
-<h3 class="typedef"><a name="http_encoding_t">http_encoding_t</a></h3>
-<p class="description">HTTP transfer encoding values</p>
-<p class="code">
-typedef enum <a href="#http_encoding_e">http_encoding_e</a> http_encoding_t;
-</p>
-<h3 class="typedef"><a name="http_encryption_t">http_encryption_t</a></h3>
-<p class="description">HTTP encryption values</p>
-<p class="code">
-typedef enum <a href="#http_encryption_e">http_encryption_e</a> http_encryption_t;
-</p>
-<h3 class="typedef"><a name="http_field_t">http_field_t</a></h3>
-<p class="description">HTTP field names</p>
-<p class="code">
-typedef enum <a href="#http_field_e">http_field_e</a> http_field_t;
-</p>
-<h3 class="typedef"><a name="http_keepalive_t">http_keepalive_t</a></h3>
-<p class="description">HTTP keep-alive values</p>
-<p class="code">
-typedef enum <a href="#http_keepalive_e">http_keepalive_e</a> http_keepalive_t;
-</p>
-<h3 class="typedef"><a name="http_state_t">http_state_t</a></h3>
-<p class="description">HTTP state values; states
-are server-oriented...</p>
-<p class="code">
-typedef enum <a href="#http_state_e">http_state_e</a> http_state_t;
-</p>
-<h3 class="typedef"><a name="http_t">http_t</a></h3>
-<p class="description">HTTP connection type</p>
-<p class="code">
-typedef struct _http_s http_t;
-</p>
-<h3 class="typedef"><span class="info">&nbsp;CUPS 1.5/macOS 10.7&nbsp;</span><a name="http_timeout_cb_t">http_timeout_cb_t</a></h3>
-<p class="description">HTTP timeout callback </p>
-<p class="code">
-typedef int (*http_timeout_cb_t)(<a href="#http_t">http_t</a> *http, void *user_data);
-</p>
-<h3 class="typedef"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="http_trust_t">http_trust_t</a></h3>
-<p class="description">Level of trust for credentials </p>
-<p class="code">
-typedef enum <a href="#http_trust_e">http_trust_e</a> http_trust_t;
-</p>
-<h3 class="typedef"><a name="http_uri_coding_t">http_uri_coding_t</a></h3>
-<p class="description">URI en/decode flags</p>
-<p class="code">
-typedef enum <a href="#http_uri_coding_e">http_uri_coding_e</a> http_uri_coding_t;
-</p>
-<h3 class="typedef"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="http_uri_status_t">http_uri_status_t</a></h3>
-<p class="description">URI separation status </p>
-<p class="code">
-typedef enum <a href="#http_uri_status_e">http_uri_status_e</a> http_uri_status_t;
-</p>
-<h3 class="typedef"><a name="http_version_t">http_version_t</a></h3>
-<p class="description">HTTP version numbers</p>
-<p class="code">
-typedef enum <a href="#http_version_e">http_version_e</a> http_version_t;
-</p>
-<h3 class="typedef"><a name="ipp_attribute_t">ipp_attribute_t</a></h3>
-<p class="description">IPP attribute</p>
-<p class="code">
-typedef struct _ipp_attribute_s ipp_attribute_t;
-</p>
-<h3 class="typedef"><a name="ipp_copycb_t">ipp_copycb_t</a></h3>
-<p class="description">The following structures are PRIVATE starting with CUPS 1.6/macOS 10.8.
-Please use the new accessor functions available in CUPS 1.6 and later, as
-these definitions will be moved to a private header file in a future release.</p>
-<p class="code">
-typedef int (*ipp_copycb_t)(void *context, <a href="#ipp_t">ipp_t</a> *dst, <a href="#ipp_attribute_t">ipp_attribute_t</a> *attr);
-</p>
-<h3 class="typedef"><a name="ipp_dstate_t">ipp_dstate_t</a></h3>
-<p class="description">Document states</p>
-<p class="code">
-typedef enum <a href="#ipp_dstate_e">ipp_dstate_e</a> ipp_dstate_t;
-</p>
-<h3 class="typedef"><a name="ipp_finish_t">ipp_finish_t</a></h3>
-<p class="description">Job collation types</p>
-<p class="code">
-typedef enum <a href="#ipp_finishings_e">ipp_finishings_e</a> ipp_finish_t;
-</p>
-<h3 class="typedef"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="ipp_iocb_t">ipp_iocb_t</a></h3>
-<p class="description">IPP IO Callback Function </p>
-<p class="code">
-typedef ssize_t (*ipp_iocb_t)(void *context, <a href="#ipp_uchar_t">ipp_uchar_t</a> *buffer, size_t bytes);
-</p>
-<h3 class="typedef"><a name="ipp_jcollate_t">ipp_jcollate_t</a></h3>
-<p class="description">Job collation types</p>
-<p class="code">
-typedef enum <a href="#ipp_jcollate_e">ipp_jcollate_e</a> ipp_jcollate_t;
-</p>
-<h3 class="typedef"><a name="ipp_orient_t">ipp_orient_t</a></h3>
-<p class="description">Orientation values</p>
-<p class="code">
-typedef enum <a href="#ipp_orient_e">ipp_orient_e</a> ipp_orient_t;
-</p>
-<h3 class="typedef"><a name="ipp_pstate_t">ipp_pstate_t</a></h3>
-<p class="description">Printer states</p>
-<p class="code">
-typedef enum <a href="#ipp_pstate_e">ipp_pstate_e</a> ipp_pstate_t;
-</p>
-<h3 class="typedef"><a name="ipp_quality_t">ipp_quality_t</a></h3>
-<p class="description">Qualities</p>
-<p class="code">
-typedef enum <a href="#ipp_quality_e">ipp_quality_e</a> ipp_quality_t;
-</p>
-<h3 class="typedef"><a name="ipp_res_t">ipp_res_t</a></h3>
-<p class="description">Resolution units</p>
-<p class="code">
-typedef enum <a href="#ipp_res_e">ipp_res_e</a> ipp_res_t;
-</p>
-<h3 class="typedef"><a name="ipp_state_t">ipp_state_t</a></h3>
-<p class="description">IPP states</p>
-<p class="code">
-typedef enum <a href="#ipp_state_e">ipp_state_e</a> ipp_state_t;
-</p>
-<h3 class="typedef"><a name="ipp_t">ipp_t</a></h3>
-<p class="description">IPP request/response data</p>
-<p class="code">
-typedef struct _ipp_s ipp_t;
-</p>
-<h3 class="typedef"><a name="ipp_uchar_t">ipp_uchar_t</a></h3>
-<p class="description">Unsigned 8-bit integer/character</p>
-<p class="code">
-typedef unsigned char ipp_uchar_t;
-</p>
-<h2 class="title"><a name="STRUCTURES">Structures</a></h2>
-<h3 class="struct"><a name="gss_auth_identity">gss_auth_identity</a></h3>
-<p class="description">Local functions...</p>
-<p class="code">struct gss_auth_identity {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;gss_buffer_t *credentialsRef;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;uint32_t flags;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *password;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *realm;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;uint32_t type;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *username;<br>
-};</p>
-<h4 class="members">Members</h4>
-<dl>
-<dt>credentialsRef </dt>
-<dt>flags </dt>
-<dt>password </dt>
-<dt>realm </dt>
-<dt>type </dt>
-<dt>username </dt>
-</dl>
-<h3 class="struct"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="http_addrlist_s">http_addrlist_s</a></h3>
-<p class="description">Socket address list, which is
-used to enumerate all of the
-addresses that are associated
-with a hostname. </p>
-<p class="code">struct http_addrlist_s {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#http_addr_t">http_addr_t</a> addr;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;struct <a href="#http_addrlist_s">http_addrlist_s</a> *next;<br>
-};</p>
-<h4 class="members">Members</h4>
-<dl>
-<dt>addr </dt>
-<dd class="description">Address</dd>
-<dt>next </dt>
-<dd class="description">Pointer to next address in list</dd>
-</dl>
-<h3 class="struct"><span class="info">&nbsp;CUPS 1.5/macOS 10.7&nbsp;</span><a name="http_credential_s">http_credential_s</a></h3>
-<p class="description">HTTP credential data </p>
-<p class="code">struct http_credential_s {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;void *data;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;size_t datalen;<br>
-};</p>
-<h4 class="members">Members</h4>
-<dl>
-<dt>data </dt>
-<dd class="description">Pointer to credential data</dd>
-<dt>datalen </dt>
-<dd class="description">Credential length</dd>
-</dl>
-<h3 class="struct"><a name="pollfd">pollfd</a></h3>
-<p class="description">User data (unused)</p>
-<p class="code">struct pollfd *pollfds, unsigned int num_pollfds, int timeout, void *context) {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;void) context;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;void) timeout;<br>
-};</p>
-<h4 class="members">Members</h4>
-<dl>
-<dt>context </dt>
-<dt>timeout </dt>
-</dl>
-<h2 class="title"><a name="ENUMERATIONS">Constants</a></h2>
-<h3 class="enumeration"><a name="http_auth_e">http_auth_e</a></h3>
-<p class="description">HTTP authentication types</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>HTTP_AUTH_BASIC </dt>
-<dd class="description">Basic authentication in use</dd>
-<dt>HTTP_AUTH_MD5 </dt>
-<dd class="description">Digest authentication in use</dd>
-<dt>HTTP_AUTH_MD5_INT </dt>
-<dd class="description">Digest authentication in use for body</dd>
-<dt>HTTP_AUTH_MD5_SESS </dt>
-<dd class="description">MD5-session authentication in use</dd>
-<dt>HTTP_AUTH_MD5_SESS_INT </dt>
-<dd class="description">MD5-session authentication in use for body</dd>
-<dt>HTTP_AUTH_NEGOTIATE <span class="info">&nbsp;CUPS 1.3/macOS 10.5&nbsp;</span></dt>
-<dd class="description">GSSAPI authentication in use </dd>
-<dt>HTTP_AUTH_NONE </dt>
-<dd class="description">No authentication in use</dd>
-</dl>
-<h3 class="enumeration"><a name="http_encoding_e">http_encoding_e</a></h3>
-<p class="description">HTTP transfer encoding values</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>HTTP_ENCODING_CHUNKED </dt>
-<dd class="description">Data is chunked</dd>
-<dt>HTTP_ENCODING_FIELDS </dt>
-<dd class="description">Sending HTTP fields</dd>
-<dt>HTTP_ENCODING_LENGTH </dt>
-<dd class="description">Data is sent with Content-Length</dd>
-</dl>
-<h3 class="enumeration"><a name="http_encryption_e">http_encryption_e</a></h3>
-<p class="description">HTTP encryption values</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>HTTP_ENCRYPTION_ALWAYS </dt>
-<dd class="description">Always encrypt (SSL)</dd>
-<dt>HTTP_ENCRYPTION_IF_REQUESTED </dt>
-<dd class="description">Encrypt if requested (TLS upgrade)</dd>
-<dt>HTTP_ENCRYPTION_NEVER </dt>
-<dd class="description">Never encrypt</dd>
-<dt>HTTP_ENCRYPTION_REQUIRED </dt>
-<dd class="description">Encryption is required (TLS upgrade)</dd>
-</dl>
-<h3 class="enumeration"><a name="http_field_e">http_field_e</a></h3>
-<p class="description">HTTP field names</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>HTTP_FIELD_ACCEPT_ENCODING <span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span></dt>
-<dd class="description">Accepting-Encoding field </dd>
-<dt>HTTP_FIELD_ACCEPT_LANGUAGE </dt>
-<dd class="description">Accept-Language field</dd>
-<dt>HTTP_FIELD_ACCEPT_RANGES </dt>
-<dd class="description">Accept-Ranges field</dd>
-<dt>HTTP_FIELD_ALLOW <span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span></dt>
-<dd class="description">Allow field </dd>
-<dt>HTTP_FIELD_AUTHORIZATION </dt>
-<dd class="description">Authorization field</dd>
-<dt>HTTP_FIELD_CONNECTION </dt>
-<dd class="description">Connection field</dd>
-<dt>HTTP_FIELD_CONTENT_ENCODING </dt>
-<dd class="description">Content-Encoding field</dd>
-<dt>HTTP_FIELD_CONTENT_LANGUAGE </dt>
-<dd class="description">Content-Language field</dd>
-<dt>HTTP_FIELD_CONTENT_LENGTH </dt>
-<dd class="description">Content-Length field</dd>
-<dt>HTTP_FIELD_CONTENT_LOCATION </dt>
-<dd class="description">Content-Location field</dd>
-<dt>HTTP_FIELD_CONTENT_MD5 </dt>
-<dd class="description">Content-MD5 field</dd>
-<dt>HTTP_FIELD_CONTENT_RANGE </dt>
-<dd class="description">Content-Range field</dd>
-<dt>HTTP_FIELD_CONTENT_TYPE </dt>
-<dd class="description">Content-Type field</dd>
-<dt>HTTP_FIELD_CONTENT_VERSION </dt>
-<dd class="description">Content-Version field</dd>
-<dt>HTTP_FIELD_DATE </dt>
-<dd class="description">Date field</dd>
-<dt>HTTP_FIELD_HOST </dt>
-<dd class="description">Host field</dd>
-<dt>HTTP_FIELD_IF_MODIFIED_SINCE </dt>
-<dd class="description">If-Modified-Since field</dd>
-<dt>HTTP_FIELD_IF_UNMODIFIED_SINCE </dt>
-<dd class="description">If-Unmodified-Since field</dd>
-<dt>HTTP_FIELD_KEEP_ALIVE </dt>
-<dd class="description">Keep-Alive field</dd>
-<dt>HTTP_FIELD_LAST_MODIFIED </dt>
-<dd class="description">Last-Modified field</dd>
-<dt>HTTP_FIELD_LINK </dt>
-<dd class="description">Link field</dd>
-<dt>HTTP_FIELD_LOCATION </dt>
-<dd class="description">Location field</dd>
-<dt>HTTP_FIELD_MAX </dt>
-<dd class="description">Maximum field index</dd>
-<dt>HTTP_FIELD_RANGE </dt>
-<dd class="description">Range field</dd>
-<dt>HTTP_FIELD_REFERER </dt>
-<dd class="description">Referer field</dd>
-<dt>HTTP_FIELD_RETRY_AFTER </dt>
-<dd class="description">Retry-After field</dd>
-<dt>HTTP_FIELD_SERVER <span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span></dt>
-<dd class="description">Server field </dd>
-<dt>HTTP_FIELD_TRANSFER_ENCODING </dt>
-<dd class="description">Transfer-Encoding field</dd>
-<dt>HTTP_FIELD_UNKNOWN </dt>
-<dd class="description">Unknown field</dd>
-<dt>HTTP_FIELD_UPGRADE </dt>
-<dd class="description">Upgrade field</dd>
-<dt>HTTP_FIELD_USER_AGENT </dt>
-<dd class="description">User-Agent field</dd>
-<dt>HTTP_FIELD_WWW_AUTHENTICATE </dt>
-<dd class="description">WWW-Authenticate field</dd>
-</dl>
-<h3 class="enumeration"><a name="http_keepalive_e">http_keepalive_e</a></h3>
-<p class="description">HTTP keep-alive values</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>HTTP_KEEPALIVE_OFF </dt>
-<dd class="description">No keep alive support</dd>
-<dt>HTTP_KEEPALIVE_ON </dt>
-<dd class="description">Use keep alive</dd>
-</dl>
-<h3 class="enumeration"><a name="http_state_e">http_state_e</a></h3>
-<p class="description">HTTP state values; states
-are server-oriented...</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>HTTP_STATE_CONNECT </dt>
-<dd class="description">CONNECT command, waiting for blank line</dd>
-<dt>HTTP_STATE_DELETE </dt>
-<dd class="description">DELETE command, waiting for blank line</dd>
-<dt>HTTP_STATE_ERROR </dt>
-<dd class="description">Error on socket</dd>
-<dt>HTTP_STATE_GET </dt>
-<dd class="description">GET command, waiting for blank line</dd>
-<dt>HTTP_STATE_GET_SEND </dt>
-<dd class="description">GET command, sending data</dd>
-<dt>HTTP_STATE_HEAD </dt>
-<dd class="description">HEAD command, waiting for blank line</dd>
-<dt>HTTP_STATE_OPTIONS </dt>
-<dd class="description">OPTIONS command, waiting for blank line</dd>
-<dt>HTTP_STATE_POST </dt>
-<dd class="description">POST command, waiting for blank line</dd>
-<dt>HTTP_STATE_POST_RECV </dt>
-<dd class="description">POST command, receiving data</dd>
-<dt>HTTP_STATE_POST_SEND </dt>
-<dd class="description">POST command, sending data</dd>
-<dt>HTTP_STATE_PUT </dt>
-<dd class="description">PUT command, waiting for blank line</dd>
-<dt>HTTP_STATE_PUT_RECV </dt>
-<dd class="description">PUT command, receiving data</dd>
-<dt>HTTP_STATE_STATUS </dt>
-<dd class="description">Command complete, sending status</dd>
-<dt>HTTP_STATE_TRACE </dt>
-<dd class="description">TRACE command, waiting for blank line</dd>
-<dt>HTTP_STATE_UNKNOWN_METHOD <span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span></dt>
-<dd class="description">Unknown request method, waiting for blank line </dd>
-<dt>HTTP_STATE_UNKNOWN_VERSION <span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span></dt>
-<dd class="description">Unknown request method, waiting for blank line </dd>
-<dt>HTTP_STATE_WAITING </dt>
-<dd class="description">Waiting for command</dd>
-</dl>
-<h3 class="enumeration"><a name="http_status_e">http_status_e</a></h3>
-<p class="description">HTTP status codes</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>HTTP_STATUS_ACCEPTED </dt>
-<dd class="description">DELETE command was successful</dd>
-<dt>HTTP_STATUS_BAD_GATEWAY </dt>
-<dd class="description">Bad gateway</dd>
-<dt>HTTP_STATUS_BAD_REQUEST </dt>
-<dd class="description">Bad request</dd>
-<dt>HTTP_STATUS_CONFLICT </dt>
-<dd class="description">Request is self-conflicting</dd>
-<dt>HTTP_STATUS_CONTINUE </dt>
-<dd class="description">Everything OK, keep going...</dd>
-<dt>HTTP_STATUS_CREATED </dt>
-<dd class="description">PUT command was successful</dd>
-<dt>HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED <span class="info">&nbsp;CUPS 1.4&nbsp;</span></dt>
-<dd class="description">User canceled authorization </dd>
-<dt>HTTP_STATUS_CUPS_PKI_ERROR <span class="info">&nbsp;CUPS 1.5/macOS 10.7&nbsp;</span></dt>
-<dd class="description">Error negotiating a secure connection </dd>
-<dt>HTTP_STATUS_ERROR </dt>
-<dd class="description">An error response from httpXxxx()</dd>
-<dt>HTTP_STATUS_EXPECTATION_FAILED </dt>
-<dd class="description">The expectation given in an Expect header field was not met</dd>
-<dt>HTTP_STATUS_FORBIDDEN </dt>
-<dd class="description">Forbidden to access this URI</dd>
-<dt>HTTP_STATUS_GATEWAY_TIMEOUT </dt>
-<dd class="description">Gateway connection timed out</dd>
-<dt>HTTP_STATUS_GONE </dt>
-<dd class="description">Server has gone away</dd>
-<dt>HTTP_STATUS_LENGTH_REQUIRED </dt>
-<dd class="description">A content length or encoding is required</dd>
-<dt>HTTP_STATUS_METHOD_NOT_ALLOWED </dt>
-<dd class="description">Method is not allowed</dd>
-<dt>HTTP_STATUS_MOVED_PERMANENTLY </dt>
-<dd class="description">Document has moved permanently</dd>
-<dt>HTTP_STATUS_MOVED_TEMPORARILY </dt>
-<dd class="description">Document has moved temporarily</dd>
-<dt>HTTP_STATUS_MULTIPLE_CHOICES </dt>
-<dd class="description">Multiple files match request</dd>
-<dt>HTTP_STATUS_NONE <span class="info">&nbsp;CUPS 1.7/macOS 10.9&nbsp;</span></dt>
-<dd class="description">No Expect value </dd>
-<dt>HTTP_STATUS_NOT_ACCEPTABLE </dt>
-<dd class="description">Not Acceptable</dd>
-<dt>HTTP_STATUS_NOT_AUTHORITATIVE </dt>
-<dd class="description">Information isn't authoritative</dd>
-<dt>HTTP_STATUS_NOT_FOUND </dt>
-<dd class="description">URI was not found</dd>
-<dt>HTTP_STATUS_NOT_IMPLEMENTED </dt>
-<dd class="description">Feature not implemented</dd>
-<dt>HTTP_STATUS_NOT_MODIFIED </dt>
-<dd class="description">File not modified</dd>
-<dt>HTTP_STATUS_NOT_SUPPORTED </dt>
-<dd class="description">HTTP version not supported</dd>
-<dt>HTTP_STATUS_NO_CONTENT </dt>
-<dd class="description">Successful command, no new data</dd>
-<dt>HTTP_STATUS_OK </dt>
-<dd class="description">OPTIONS/GET/HEAD/POST/TRACE command was successful</dd>
-<dt>HTTP_STATUS_PARTIAL_CONTENT </dt>
-<dd class="description">Only a partial file was received/sent</dd>
-<dt>HTTP_STATUS_PAYMENT_REQUIRED </dt>
-<dd class="description">Payment required</dd>
-<dt>HTTP_STATUS_PRECONDITION </dt>
-<dd class="description">Precondition failed</dd>
-<dt>HTTP_STATUS_PROXY_AUTHENTICATION </dt>
-<dd class="description">Proxy Authentication is Required</dd>
-<dt>HTTP_STATUS_REQUESTED_RANGE </dt>
-<dd class="description">The requested range is not satisfiable</dd>
-<dt>HTTP_STATUS_REQUEST_TIMEOUT </dt>
-<dd class="description">Request timed out</dd>
-<dt>HTTP_STATUS_REQUEST_TOO_LARGE </dt>
-<dd class="description">Request entity too large</dd>
-<dt>HTTP_STATUS_RESET_CONTENT </dt>
-<dd class="description">Content was reset/recreated</dd>
-<dt>HTTP_STATUS_SEE_OTHER </dt>
-<dd class="description">See this other link...</dd>
-<dt>HTTP_STATUS_SERVER_ERROR </dt>
-<dd class="description">Internal server error</dd>
-<dt>HTTP_STATUS_SERVICE_UNAVAILABLE </dt>
-<dd class="description">Service is unavailable</dd>
-<dt>HTTP_STATUS_SWITCHING_PROTOCOLS </dt>
-<dd class="description">HTTP upgrade to TLS/SSL</dd>
-<dt>HTTP_STATUS_UNAUTHORIZED </dt>
-<dd class="description">Unauthorized to access host</dd>
-<dt>HTTP_STATUS_UNSUPPORTED_MEDIATYPE </dt>
-<dd class="description">The requested media type is unsupported</dd>
-<dt>HTTP_STATUS_UPGRADE_REQUIRED </dt>
-<dd class="description">Upgrade to SSL/TLS required</dd>
-<dt>HTTP_STATUS_URI_TOO_LONG </dt>
-<dd class="description">URI too long</dd>
-<dt>HTTP_STATUS_USE_PROXY </dt>
-<dd class="description">Must use a proxy to access this URI</dd>
-</dl>
-<h3 class="enumeration"><span class="info">&nbsp;CUPS 2.0/OS 10.10&nbsp;</span><a name="http_trust_e">http_trust_e</a></h3>
-<p class="description">Level of trust for credentials </p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>HTTP_TRUST_CHANGED </dt>
-<dd class="description">Credentials have changed</dd>
-<dt>HTTP_TRUST_EXPIRED </dt>
-<dd class="description">Credentials are expired</dd>
-<dt>HTTP_TRUST_INVALID </dt>
-<dd class="description">Credentials are invalid</dd>
-<dt>HTTP_TRUST_OK </dt>
-<dd class="description">Credentials are OK/trusted</dd>
-<dt>HTTP_TRUST_RENEWED </dt>
-<dd class="description">Credentials have been renewed</dd>
-<dt>HTTP_TRUST_UNKNOWN </dt>
-<dd class="description">Credentials are unknown/new</dd>
-</dl>
-<h3 class="enumeration"><a name="http_uri_coding_e">http_uri_coding_e</a></h3>
-<p class="description">URI en/decode flags</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>HTTP_URI_CODING_ALL </dt>
-<dd class="description">En/decode everything</dd>
-<dt>HTTP_URI_CODING_HOSTNAME </dt>
-<dd class="description">En/decode the hostname portion</dd>
-<dt>HTTP_URI_CODING_MOST </dt>
-<dd class="description">En/decode all but the query</dd>
-<dt>HTTP_URI_CODING_NONE </dt>
-<dd class="description">Don't en/decode anything</dd>
-<dt>HTTP_URI_CODING_QUERY </dt>
-<dd class="description">En/decode the query portion</dd>
-<dt>HTTP_URI_CODING_RESOURCE </dt>
-<dd class="description">En/decode the resource portion</dd>
-<dt>HTTP_URI_CODING_RFC6874 </dt>
-<dd class="description">Use RFC 6874 address format</dd>
-<dt>HTTP_URI_CODING_USERNAME </dt>
-<dd class="description">En/decode the username portion</dd>
-</dl>
-<h3 class="enumeration"><span class="info">&nbsp;CUPS 1.2&nbsp;</span><a name="http_uri_status_e">http_uri_status_e</a></h3>
-<p class="description">URI separation status </p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>HTTP_URI_STATUS_BAD_ARGUMENTS </dt>
-<dd class="description">Bad arguments to function (error)</dd>
-<dt>HTTP_URI_STATUS_BAD_HOSTNAME </dt>
-<dd class="description">Bad hostname in URI (error)</dd>
-<dt>HTTP_URI_STATUS_BAD_PORT </dt>
-<dd class="description">Bad port number in URI (error)</dd>
-<dt>HTTP_URI_STATUS_BAD_RESOURCE </dt>
-<dd class="description">Bad resource in URI (error)</dd>
-<dt>HTTP_URI_STATUS_BAD_SCHEME </dt>
-<dd class="description">Bad scheme in URI (error)</dd>
-<dt>HTTP_URI_STATUS_BAD_URI </dt>
-<dd class="description">Bad/empty URI (error)</dd>
-<dt>HTTP_URI_STATUS_BAD_USERNAME </dt>
-<dd class="description">Bad username in URI (error)</dd>
-<dt>HTTP_URI_STATUS_MISSING_RESOURCE </dt>
-<dd class="description">Missing resource in URI (warning)</dd>
-<dt>HTTP_URI_STATUS_MISSING_SCHEME </dt>
-<dd class="description">Missing scheme in URI (warning)</dd>
-<dt>HTTP_URI_STATUS_OK </dt>
-<dd class="description">URI decoded OK</dd>
-<dt>HTTP_URI_STATUS_OVERFLOW </dt>
-<dd class="description">URI buffer for httpAssembleURI is too small</dd>
-<dt>HTTP_URI_STATUS_UNKNOWN_SCHEME </dt>
-<dd class="description">Unknown scheme in URI (warning)</dd>
-</dl>
-<h3 class="enumeration"><a name="http_version_e">http_version_e</a></h3>
-<p class="description">HTTP version numbers</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>HTTP_VERSION_0_9 </dt>
-<dd class="description">HTTP/0.9</dd>
-<dt>HTTP_VERSION_1_0 </dt>
-<dd class="description">HTTP/1.0</dd>
-<dt>HTTP_VERSION_1_1 </dt>
-<dd class="description">HTTP/1.1</dd>
-</dl>
-<h3 class="enumeration"><a name="ipp_dstate_e">ipp_dstate_e</a></h3>
-<p class="description">Document states</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>IPP_DOCUMENT_ABORTED </dt>
-<dd class="description">Document is aborted</dd>
-<dt>IPP_DOCUMENT_CANCELED </dt>
-<dd class="description">Document is canceled</dd>
-<dt>IPP_DOCUMENT_COMPLETED </dt>
-<dd class="description">Document is completed</dd>
-<dt>IPP_DOCUMENT_PENDING </dt>
-<dd class="description">Document is pending</dd>
-<dt>IPP_DOCUMENT_PROCESSING </dt>
-<dd class="description">Document is processing</dd>
-</dl>
-<h3 class="enumeration"><a name="ipp_finishings_e">ipp_finishings_e</a></h3>
-<p class="description">Finishings</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>IPP_FINISHINGS_BALE </dt>
-<dd class="description">Bale (any type)</dd>
-<dt>IPP_FINISHINGS_BIND </dt>
-<dd class="description">Bind</dd>
-<dt>IPP_FINISHINGS_BIND_BOTTOM </dt>
-<dd class="description">Bind on bottom</dd>
-<dt>IPP_FINISHINGS_BIND_LEFT </dt>
-<dd class="description">Bind on left</dd>
-<dt>IPP_FINISHINGS_BIND_RIGHT </dt>
-<dd class="description">Bind on right</dd>
-<dt>IPP_FINISHINGS_BIND_TOP </dt>
-<dd class="description">Bind on top</dd>
-<dt>IPP_FINISHINGS_BOOKLET_MAKER </dt>
-<dd class="description">Fold to make booklet</dd>
-<dt>IPP_FINISHINGS_COAT </dt>
-<dd class="description">Apply protective liquid or powder coating</dd>
-<dt>IPP_FINISHINGS_COVER </dt>
-<dd class="description">Add cover</dd>
-<dt>IPP_FINISHINGS_CUPS_FOLD_ACCORDIAN </dt>
-<dd class="description">Accordian-fold the paper vertically into four sections</dd>
-<dt>IPP_FINISHINGS_CUPS_FOLD_DOUBLE_GATE </dt>
-<dd class="description">Fold the top and bottom quarters of the paper towards the midline, then fold in half vertically</dd>
-<dt>IPP_FINISHINGS_CUPS_FOLD_GATE </dt>
-<dd class="description">Fold the top and bottom quarters of the paper towards the midline</dd>
-<dt>IPP_FINISHINGS_CUPS_FOLD_HALF </dt>
-<dd class="description">Fold the paper in half vertically</dd>
-<dt>IPP_FINISHINGS_CUPS_FOLD_HALF_Z </dt>
-<dd class="description">Fold the paper in half horizontally, then Z-fold the paper vertically</dd>
-<dt>IPP_FINISHINGS_CUPS_FOLD_LEFT_GATE </dt>
-<dd class="description">Fold the top quarter of the paper towards the midline</dd>
-<dt>IPP_FINISHINGS_CUPS_FOLD_LETTER </dt>
-<dd class="description">Fold the paper into three sections vertically; sometimes also known as a C fold</dd>
-<dt>IPP_FINISHINGS_CUPS_FOLD_PARALLEL </dt>
-<dd class="description">Fold the paper in half vertically two times, yielding four sections</dd>
-<dt>IPP_FINISHINGS_CUPS_FOLD_POSTER </dt>
-<dd class="description">Fold the paper in half horizontally and vertically; sometimes also called a cross fold</dd>
-<dt>IPP_FINISHINGS_CUPS_FOLD_RIGHT_GATE </dt>
-<dd class="description">Fold the bottom quarter of the paper towards the midline</dd>
-<dt>IPP_FINISHINGS_CUPS_FOLD_Z </dt>
-<dd class="description">Fold the paper vertically into three sections, forming a Z</dd>
-<dt>IPP_FINISHINGS_CUPS_PUNCH_BOTTOM_LEFT </dt>
-<dd class="description">Punch 1 hole bottom left</dd>
-<dt>IPP_FINISHINGS_CUPS_PUNCH_BOTTOM_RIGHT </dt>
-<dd class="description">Punch 1 hole bottom right</dd>
-<dt>IPP_FINISHINGS_CUPS_PUNCH_DUAL_BOTTOM </dt>
-<dd class="description">Punch 2 holes bottom edge</dd>
-<dt>IPP_FINISHINGS_CUPS_PUNCH_DUAL_LEFT </dt>
-<dd class="description">Punch 2 holes left side</dd>
-<dt>IPP_FINISHINGS_CUPS_PUNCH_DUAL_RIGHT </dt>
-<dd class="description">Punch 2 holes right side</dd>
-<dt>IPP_FINISHINGS_CUPS_PUNCH_DUAL_TOP </dt>
-<dd class="description">Punch 2 holes top edge</dd>
-<dt>IPP_FINISHINGS_CUPS_PUNCH_QUAD_BOTTOM </dt>
-<dd class="description">Punch 4 holes bottom edge</dd>
-<dt>IPP_FINISHINGS_CUPS_PUNCH_QUAD_LEFT </dt>
-<dd class="description">Punch 4 holes left side</dd>
-<dt>IPP_FINISHINGS_CUPS_PUNCH_QUAD_RIGHT </dt>
-<dd class="description">Punch 4 holes right side</dd>
-<dt>IPP_FINISHINGS_CUPS_PUNCH_QUAD_TOP </dt>
-<dd class="description">Punch 4 holes top edge</dd>
-<dt>IPP_FINISHINGS_CUPS_PUNCH_TOP_LEFT </dt>
-<dd class="description">Punch 1 hole top left</dd>
-<dt>IPP_FINISHINGS_CUPS_PUNCH_TOP_RIGHT </dt>
-<dd class="description">Punch 1 hole top right</dd>
-<dt>IPP_FINISHINGS_CUPS_PUNCH_TRIPLE_BOTTOM </dt>
-<dd class="description">Punch 3 holes bottom edge</dd>
-<dt>IPP_FINISHINGS_CUPS_PUNCH_TRIPLE_LEFT </dt>
-<dd class="description">Punch 3 holes left side</dd>
-<dt>IPP_FINISHINGS_CUPS_PUNCH_TRIPLE_RIGHT </dt>
-<dd class="description">Punch 3 holes right side</dd>
-<dt>IPP_FINISHINGS_CUPS_PUNCH_TRIPLE_TOP </dt>
-<dd class="description">Punch 3 holes top edge</dd>
-<dt>IPP_FINISHINGS_EDGE_STITCH </dt>
-<dd class="description">Stitch along any side</dd>
-<dt>IPP_FINISHINGS_EDGE_STITCH_BOTTOM </dt>
-<dd class="description">Stitch along bottom edge</dd>
-<dt>IPP_FINISHINGS_EDGE_STITCH_LEFT </dt>
-<dd class="description">Stitch along left side</dd>
-<dt>IPP_FINISHINGS_EDGE_STITCH_RIGHT </dt>
-<dd class="description">Stitch along right side</dd>
-<dt>IPP_FINISHINGS_EDGE_STITCH_TOP </dt>
-<dd class="description">Stitch along top edge</dd>
-<dt>IPP_FINISHINGS_FOLD </dt>
-<dd class="description">Fold (any type)</dd>
-<dt>IPP_FINISHINGS_FOLD_ACCORDIAN </dt>
-<dd class="description">Accordian-fold the paper vertically into four sections</dd>
-<dt>IPP_FINISHINGS_FOLD_DOUBLE_GATE </dt>
-<dd class="description">Fold the top and bottom quarters of the paper towards the midline, then fold in half vertically</dd>
-<dt>IPP_FINISHINGS_FOLD_ENGINEERING_Z </dt>
-<dd class="description">Fold the paper vertically into two small sections and one larger, forming an elongated Z</dd>
-<dt>IPP_FINISHINGS_FOLD_GATE </dt>
-<dd class="description">Fold the top and bottom quarters of the paper towards the midline</dd>
-<dt>IPP_FINISHINGS_FOLD_HALF </dt>
-<dd class="description">Fold the paper in half vertically</dd>
-<dt>IPP_FINISHINGS_FOLD_HALF_Z </dt>
-<dd class="description">Fold the paper in half horizontally, then Z-fold the paper vertically</dd>
-<dt>IPP_FINISHINGS_FOLD_LEFT_GATE </dt>
-<dd class="description">Fold the top quarter of the paper towards the midline</dd>
-<dt>IPP_FINISHINGS_FOLD_LETTER </dt>
-<dd class="description">Fold the paper into three sections vertically; sometimes also known as a C fold</dd>
-<dt>IPP_FINISHINGS_FOLD_PARALLEL </dt>
-<dd class="description">Fold the paper in half vertically two times, yielding four sections</dd>
-<dt>IPP_FINISHINGS_FOLD_POSTER </dt>
-<dd class="description">Fold the paper in half horizontally and vertically; sometimes also called a cross fold</dd>
-<dt>IPP_FINISHINGS_FOLD_RIGHT_GATE </dt>
-<dd class="description">Fold the bottom quarter of the paper towards the midline</dd>
-<dt>IPP_FINISHINGS_FOLD_Z </dt>
-<dd class="description">Fold the paper vertically into three sections, forming a Z</dd>
-<dt>IPP_FINISHINGS_JOG_OFFSET </dt>
-<dd class="description">Offset for binding (any type)</dd>
-<dt>IPP_FINISHINGS_LAMINATE </dt>
-<dd class="description">Apply protective (solid) material</dd>
-<dt>IPP_FINISHINGS_NONE </dt>
-<dd class="description">No finishing</dd>
-<dt>IPP_FINISHINGS_PUNCH </dt>
-<dd class="description">Punch (any location/count)</dd>
-<dt>IPP_FINISHINGS_PUNCH_BOTTOM_LEFT </dt>
-<dd class="description">Punch 1 hole bottom left</dd>
-<dt>IPP_FINISHINGS_PUNCH_BOTTOM_RIGHT </dt>
-<dd class="description">Punch 1 hole bottom right</dd>
-<dt>IPP_FINISHINGS_PUNCH_DUAL_BOTTOM </dt>
-<dd class="description">Punch 2 holes bottom edge</dd>
-<dt>IPP_FINISHINGS_PUNCH_DUAL_LEFT </dt>
-<dd class="description">Punch 2 holes left side</dd>
-<dt>IPP_FINISHINGS_PUNCH_DUAL_RIGHT </dt>
-<dd class="description">Punch 2 holes right side</dd>
-<dt>IPP_FINISHINGS_PUNCH_DUAL_TOP </dt>
-<dd class="description">Punch 2 holes top edge</dd>
-<dt>IPP_FINISHINGS_PUNCH_MULTIPLE_BOTTOM </dt>
-<dd class="description">Pucnh multiple holes bottom edge</dd>
-<dt>IPP_FINISHINGS_PUNCH_MULTIPLE_LEFT </dt>
-<dd class="description">Pucnh multiple holes left side</dd>
-<dt>IPP_FINISHINGS_PUNCH_MULTIPLE_RIGHT </dt>
-<dd class="description">Pucnh multiple holes right side</dd>
-<dt>IPP_FINISHINGS_PUNCH_MULTIPLE_TOP </dt>
-<dd class="description">Pucnh multiple holes top edge</dd>
-<dt>IPP_FINISHINGS_PUNCH_QUAD_BOTTOM </dt>
-<dd class="description">Punch 4 holes bottom edge</dd>
-<dt>IPP_FINISHINGS_PUNCH_QUAD_LEFT </dt>
-<dd class="description">Punch 4 holes left side</dd>
-<dt>IPP_FINISHINGS_PUNCH_QUAD_RIGHT </dt>
-<dd class="description">Punch 4 holes right side</dd>
-<dt>IPP_FINISHINGS_PUNCH_QUAD_TOP </dt>
-<dd class="description">Punch 4 holes top edge</dd>
-<dt>IPP_FINISHINGS_PUNCH_TOP_LEFT </dt>
-<dd class="description">Punch 1 hole top left</dd>
-<dt>IPP_FINISHINGS_PUNCH_TOP_RIGHT </dt>
-<dd class="description">Punch 1 hole top right</dd>
-<dt>IPP_FINISHINGS_PUNCH_TRIPLE_BOTTOM </dt>
-<dd class="description">Punch 3 holes bottom edge</dd>
-<dt>IPP_FINISHINGS_PUNCH_TRIPLE_LEFT </dt>
-<dd class="description">Punch 3 holes left side</dd>
-<dt>IPP_FINISHINGS_PUNCH_TRIPLE_RIGHT </dt>
-<dd class="description">Punch 3 holes right side</dd>
-<dt>IPP_FINISHINGS_PUNCH_TRIPLE_TOP </dt>
-<dd class="description">Punch 3 holes top edge</dd>
-<dt>IPP_FINISHINGS_SADDLE_STITCH </dt>
-<dd class="description">Staple interior</dd>
-<dt>IPP_FINISHINGS_STAPLE </dt>
-<dd class="description">Staple (any location)</dd>
-<dt>IPP_FINISHINGS_STAPLE_BOTTOM_LEFT </dt>
-<dd class="description">Staple bottom left corner</dd>
-<dt>IPP_FINISHINGS_STAPLE_BOTTOM_RIGHT </dt>
-<dd class="description">Staple bottom right corner</dd>
-<dt>IPP_FINISHINGS_STAPLE_DUAL_BOTTOM </dt>
-<dd class="description">Two staples on bottom</dd>
-<dt>IPP_FINISHINGS_STAPLE_DUAL_LEFT </dt>
-<dd class="description">Two staples on left</dd>
-<dt>IPP_FINISHINGS_STAPLE_DUAL_RIGHT </dt>
-<dd class="description">Two staples on right</dd>
-<dt>IPP_FINISHINGS_STAPLE_DUAL_TOP </dt>
-<dd class="description">Two staples on top</dd>
-<dt>IPP_FINISHINGS_STAPLE_TOP_LEFT </dt>
-<dd class="description">Staple top left corner</dd>
-<dt>IPP_FINISHINGS_STAPLE_TOP_RIGHT </dt>
-<dd class="description">Staple top right corner</dd>
-<dt>IPP_FINISHINGS_STAPLE_TRIPLE_BOTTOM </dt>
-<dd class="description">Three staples on bottom</dd>
-<dt>IPP_FINISHINGS_STAPLE_TRIPLE_LEFT </dt>
-<dd class="description">Three staples on left</dd>
-<dt>IPP_FINISHINGS_STAPLE_TRIPLE_RIGHT </dt>
-<dd class="description">Three staples on right</dd>
-<dt>IPP_FINISHINGS_STAPLE_TRIPLE_TOP </dt>
-<dd class="description">Three staples on top</dd>
-<dt>IPP_FINISHINGS_TRIM </dt>
-<dd class="description">Trim (any type)</dd>
-<dt>IPP_FINISHINGS_TRIM_AFTER_COPIES </dt>
-<dd class="description">Trim output after each copy</dd>
-<dt>IPP_FINISHINGS_TRIM_AFTER_DOCUMENTS </dt>
-<dd class="description">Trim output after each document</dd>
-<dt>IPP_FINISHINGS_TRIM_AFTER_JOB </dt>
-<dd class="description">Trim output after job</dd>
-<dt>IPP_FINISHINGS_TRIM_AFTER_PAGES </dt>
-<dd class="description">Trim output after each page</dd>
-</dl>
-<h3 class="enumeration"><a name="ipp_jcollate_e">ipp_jcollate_e</a></h3>
-<p class="description">Job collation types</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>IPP_JCOLLATE_COLLATED_DOCUMENTS </dt>
-<dt>IPP_JCOLLATE_UNCOLLATED_DOCUMENTS </dt>
-<dt>IPP_JCOLLATE_UNCOLLATED_SHEETS </dt>
-</dl>
-<h3 class="enumeration"><a name="ipp_jstate_e">ipp_jstate_e</a></h3>
-<p class="description">Job states</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>IPP_JSTATE_ABORTED </dt>
-<dd class="description">Job has aborted due to error</dd>
-<dt>IPP_JSTATE_CANCELED </dt>
-<dd class="description">Job has been canceled</dd>
-<dt>IPP_JSTATE_COMPLETED </dt>
-<dd class="description">Job has completed successfully</dd>
-<dt>IPP_JSTATE_HELD </dt>
-<dd class="description">Job is held for printing</dd>
-<dt>IPP_JSTATE_PENDING </dt>
-<dd class="description">Job is waiting to be printed</dd>
-<dt>IPP_JSTATE_PROCESSING </dt>
-<dd class="description">Job is currently printing</dd>
-<dt>IPP_JSTATE_STOPPED </dt>
-<dd class="description">Job has been stopped</dd>
-</dl>
-<h3 class="enumeration"><a name="ipp_op_e">ipp_op_e</a></h3>
-<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_ADD_DOCUMENT_IMAGES </dt>
-<dd class="description">Add-Document-Images</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>
-<dd class="description">Cancel-Jobs</dd>
-<dt>IPP_OP_CANCEL_MY_JOBS </dt>
-<dd class="description">Cancel-My-Jobs</dd>
-<dt>IPP_OP_CANCEL_SUBSCRIPTION <span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span></dt>
-<dd class="description">Cancel a subscription </dd>
-<dt>IPP_OP_CLOSE_JOB </dt>
-<dd class="description">Close-Job</dd>
-<dt>IPP_OP_CREATE_JOB </dt>
-<dd class="description">Create an empty print job</dd>
-<dt>IPP_OP_CREATE_JOB_SUBSCRIPTIONS <span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span></dt>
-<dd class="description">Create one of more job subscriptions </dd>
-<dt>IPP_OP_CREATE_PRINTER_SUBSCRIPTIONS <span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span></dt>
-<dd class="description">Create one or more printer subscriptions </dd>
-<dt>IPP_OP_CUPS_ACCEPT_JOBS </dt>
-<dd class="description">Accept new jobs on a printer</dd>
-<dt>IPP_OP_CUPS_ADD_MODIFY_CLASS </dt>
-<dd class="description">Add or modify a class</dd>
-<dt>IPP_OP_CUPS_ADD_MODIFY_PRINTER </dt>
-<dd class="description">Add or modify a printer</dd>
-<dt>IPP_OP_CUPS_AUTHENTICATE_JOB <span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span></dt>
-<dd class="description">Authenticate a job </dd>
-<dt>IPP_OP_CUPS_CREATE_LOCAL_PRINTER <span class="info">&nbsp;CUPS 2.2&nbsp;</span></dt>
-<dd class="description">Create a local (temporary) printer <dt>IPP_OP_CUPS_DELETE_CLASS </dt>
-<dd class="description">Delete a class</dd>
-<dt>IPP_OP_CUPS_DELETE_PRINTER </dt>
-<dd class="description">Delete a printer</dd>
-<dt>IPP_OP_CUPS_GET_CLASSES <span class="info">&nbsp;DEPRECATED&nbsp;</span></dt>
-<dd class="description">Get a list of classes </dd>
-<dt>IPP_OP_CUPS_GET_DEFAULT </dt>
-<dd class="description">Get the default printer</dd>
-<dt>IPP_OP_CUPS_GET_DEVICES <span class="info">&nbsp;DEPRECATED&nbsp;</span></dt>
-<dd class="description">Get a list of supported devices </dd>
-<dt>IPP_OP_CUPS_GET_DOCUMENT <span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span></dt>
-<dd class="description">Get a document file </dd>
-<dt>IPP_OP_CUPS_GET_PPD <span class="info">&nbsp;DEPRECATED&nbsp;</span></dt>
-<dd class="description">Get a PPD file </dd>
-<dt>IPP_OP_CUPS_GET_PPDS <span class="info">&nbsp;DEPRECATED&nbsp;</span></dt>
-<dd class="description">Get a list of supported drivers </dd>
-<dt>IPP_OP_CUPS_GET_PRINTERS </dt>
-<dd class="description">Get a list of printers and/or classes</dd>
-<dt>IPP_OP_CUPS_INVALID </dt>
-<dd class="description">Invalid operation name for <a href="#ippOpValue"><code>ippOpValue</code></a></dd>
-<dt>IPP_OP_CUPS_MOVE_JOB </dt>
-<dd class="description">Move a job to a different printer</dd>
-<dt>IPP_OP_CUPS_REJECT_JOBS </dt>
-<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/macOS 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>
-<dd class="description">Get supported attribute values</dd>
-<dt>IPP_OP_GET_SUBSCRIPTIONS <span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span></dt>
-<dd class="description">Get list of subscriptions </dd>
-<dt>IPP_OP_GET_SUBSCRIPTION_ATTRIBUTES <span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span></dt>
-<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/macOS 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_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>
-<h3 class="enumeration"><a name="ipp_orient_e">ipp_orient_e</a></h3>
-<p class="description">Orientation values</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>IPP_ORIENT_LANDSCAPE </dt>
-<dd class="description">90 degrees counter-clockwise</dd>
-<dt>IPP_ORIENT_NONE </dt>
-<dd class="description">No rotation</dd>
-<dt>IPP_ORIENT_PORTRAIT </dt>
-<dd class="description">No rotation</dd>
-<dt>IPP_ORIENT_REVERSE_LANDSCAPE </dt>
-<dd class="description">90 degrees clockwise</dd>
-<dt>IPP_ORIENT_REVERSE_PORTRAIT </dt>
-<dd class="description">180 degrees</dd>
-</dl>
-<h3 class="enumeration"><a name="ipp_pstate_e">ipp_pstate_e</a></h3>
-<p class="description">Printer states</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>IPP_PSTATE_IDLE </dt>
-<dd class="description">Printer is idle</dd>
-<dt>IPP_PSTATE_PROCESSING </dt>
-<dd class="description">Printer is working</dd>
-<dt>IPP_PSTATE_STOPPED </dt>
-<dd class="description">Printer is stopped</dd>
-</dl>
-<h3 class="enumeration"><a name="ipp_quality_e">ipp_quality_e</a></h3>
-<p class="description">Qualities</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>IPP_QUALITY_DRAFT </dt>
-<dd class="description">Draft quality</dd>
-<dt>IPP_QUALITY_HIGH </dt>
-<dd class="description">High quality</dd>
-<dt>IPP_QUALITY_NORMAL </dt>
-<dd class="description">Normal quality</dd>
-</dl>
-<h3 class="enumeration"><a name="ipp_res_e">ipp_res_e</a></h3>
-<p class="description">Resolution units</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>IPP_RES_PER_CM </dt>
-<dd class="description">Pixels per centimeter</dd>
-<dt>IPP_RES_PER_INCH </dt>
-<dd class="description">Pixels per inch</dd>
-</dl>
-<h3 class="enumeration"><a name="ipp_state_e">ipp_state_e</a></h3>
-<p class="description">IPP states</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>IPP_STATE_ATTRIBUTE </dt>
-<dd class="description">One or more attributes need to be sent/received</dd>
-<dt>IPP_STATE_DATA </dt>
-<dd class="description">IPP request data needs to be sent/received</dd>
-<dt>IPP_STATE_ERROR </dt>
-<dd class="description">An error occurred</dd>
-<dt>IPP_STATE_HEADER </dt>
-<dd class="description">The request header needs to be sent/received</dd>
-<dt>IPP_STATE_IDLE </dt>
-<dd class="description">Nothing is happening/request completed</dd>
-</dl>
-<h3 class="enumeration"><a name="ipp_status_e">ipp_status_e</a></h3>
-<p class="description">IPP status codes</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>IPP_STATUS_CUPS_INVALID </dt>
-<dd class="description">Invalid status name for <a href="#ippErrorValue"><code>ippErrorValue</code></a></dd>
-<dt>IPP_STATUS_CUPS_SEE_OTHER </dt>
-<dd class="description">cups-see-other</dd>
-<dt>IPP_STATUS_ERROR_ACCOUNT_AUTHORIZATION_FAILED </dt>
-<dd class="description">client-error-account-authorization-failed</dd>
-<dt>IPP_STATUS_ERROR_ACCOUNT_CLOSED </dt>
-<dd class="description">client-error-account-closed</dd>
-<dt>IPP_STATUS_ERROR_ACCOUNT_INFO_NEEDED </dt>
-<dd class="description">client-error-account-info-needed</dd>
-<dt>IPP_STATUS_ERROR_ACCOUNT_LIMIT_REACHED </dt>
-<dd class="description">client-error-account-limit-reached</dd>
-<dt>IPP_STATUS_ERROR_ATTRIBUTES_NOT_SETTABLE </dt>
-<dd class="description">client-error-attributes-not-settable</dd>
-<dt>IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES </dt>
-<dd class="description">client-error-attributes-or-values-not-supported</dd>
-<dt>IPP_STATUS_ERROR_BAD_REQUEST </dt>
-<dd class="description">client-error-bad-request</dd>
-<dt>IPP_STATUS_ERROR_BUSY </dt>
-<dd class="description">server-error-busy</dd>
-<dt>IPP_STATUS_ERROR_CHARSET </dt>
-<dd class="description">client-error-charset-not-supported</dd>
-<dt>IPP_STATUS_ERROR_COMPRESSION_ERROR </dt>
-<dd class="description">client-error-compression-error</dd>
-<dt>IPP_STATUS_ERROR_COMPRESSION_NOT_SUPPORTED </dt>
-<dd class="description">client-error-compression-not-supported</dd>
-<dt>IPP_STATUS_ERROR_CONFLICTING </dt>
-<dd class="description">client-error-conflicting-attributes</dd>
-<dt>IPP_STATUS_ERROR_CUPS_ACCOUNT_AUTHORIZATION_FAILED <span class="info">&nbsp;DEPRECATED&nbsp;</span></dt>
-<dd class="description">cups-error-account-authorization-failed </dd>
-<dt>IPP_STATUS_ERROR_CUPS_ACCOUNT_CLOSED </dt>
-<dd class="description">cups-error-account-closed @deprecate@</dd>
-<dt>IPP_STATUS_ERROR_CUPS_ACCOUNT_INFO_NEEDED <span class="info">&nbsp;DEPRECATED&nbsp;</span></dt>
-<dd class="description">cups-error-account-info-needed </dd>
-<dt>IPP_STATUS_ERROR_CUPS_ACCOUNT_LIMIT_REACHED <span class="info">&nbsp;DEPRECATED&nbsp;</span></dt>
-<dd class="description">cups-error-account-limit-reached </dd>
-<dt>IPP_STATUS_ERROR_CUPS_AUTHENTICATION_CANCELED <span class="info">&nbsp;CUPS 1.5/macOS 10.7&nbsp;</span></dt>
-<dd class="description">cups-authentication-canceled - Authentication canceled by user </dd>
-<dt>IPP_STATUS_ERROR_CUPS_PKI <span class="info">&nbsp;CUPS 1.5/macOS 10.7&nbsp;</span></dt>
-<dd class="description">cups-pki-error - Error negotiating a secure connection </dd>
-<dt>IPP_STATUS_ERROR_CUPS_UPGRADE_REQUIRED </dt>
-<dd class="description">cups-upgrade-required - TLS upgrade required</dd>
-<dt>IPP_STATUS_ERROR_DEVICE </dt>
-<dd class="description">server-error-device-error</dd>
-<dt>IPP_STATUS_ERROR_DOCUMENT_ACCESS </dt>
-<dd class="description">client-error-document-access-error</dd>
-<dt>IPP_STATUS_ERROR_DOCUMENT_FORMAT_ERROR </dt>
-<dd class="description">client-error-document-format-error</dd>
-<dt>IPP_STATUS_ERROR_DOCUMENT_FORMAT_NOT_SUPPORTED </dt>
-<dd class="description">client-error-document-format-not-supported</dd>
-<dt>IPP_STATUS_ERROR_DOCUMENT_PASSWORD </dt>
-<dd class="description">client-error-document-password-error</dd>
-<dt>IPP_STATUS_ERROR_DOCUMENT_PERMISSION </dt>
-<dd class="description">client-error-document-permission-error</dd>
-<dt>IPP_STATUS_ERROR_DOCUMENT_SECURITY </dt>
-<dd class="description">client-error-document-security-error</dd>
-<dt>IPP_STATUS_ERROR_DOCUMENT_UNPRINTABLE </dt>
-<dd class="description">client-error-document-unprintable-error</dd>
-<dt>IPP_STATUS_ERROR_FORBIDDEN </dt>
-<dd class="description">client-error-forbidden</dd>
-<dt>IPP_STATUS_ERROR_GONE </dt>
-<dd class="description">client-error-gone</dd>
-<dt>IPP_STATUS_ERROR_IGNORED_ALL_SUBSCRIPTIONS </dt>
-<dd class="description">client-error-ignored-all-subscriptions</dd>
-<dt>IPP_STATUS_ERROR_INTERNAL </dt>
-<dd class="description">server-error-internal-error</dd>
-<dt>IPP_STATUS_ERROR_JOB_CANCELED </dt>
-<dd class="description">server-error-job-canceled</dd>
-<dt>IPP_STATUS_ERROR_MULTIPLE_JOBS_NOT_SUPPORTED </dt>
-<dd class="description">server-error-multiple-document-jobs-not-supported</dd>
-<dt>IPP_STATUS_ERROR_NOT_ACCEPTING_JOBS </dt>
-<dd class="description">server-error-not-accepting-jobs</dd>
-<dt>IPP_STATUS_ERROR_NOT_AUTHENTICATED </dt>
-<dd class="description">client-error-not-authenticated</dd>
-<dt>IPP_STATUS_ERROR_NOT_AUTHORIZED </dt>
-<dd class="description">client-error-not-authorized</dd>
-<dt>IPP_STATUS_ERROR_NOT_FETCHABLE </dt>
-<dd class="description">client-error-not-fetchable</dd>
-<dt>IPP_STATUS_ERROR_NOT_FOUND </dt>
-<dd class="description">client-error-not-found</dd>
-<dt>IPP_STATUS_ERROR_NOT_POSSIBLE </dt>
-<dd class="description">client-error-not-possible</dd>
-<dt>IPP_STATUS_ERROR_OPERATION_NOT_SUPPORTED </dt>
-<dd class="description">server-error-operation-not-supported</dd>
-<dt>IPP_STATUS_ERROR_PRINTER_IS_DEACTIVATED </dt>
-<dd class="description">server-error-printer-is-deactivated</dd>
-<dt>IPP_STATUS_ERROR_REQUEST_ENTITY </dt>
-<dd class="description">client-error-request-entity-too-large</dd>
-<dt>IPP_STATUS_ERROR_REQUEST_VALUE </dt>
-<dd class="description">client-error-request-value-too-long</dd>
-<dt>IPP_STATUS_ERROR_SERVICE_UNAVAILABLE </dt>
-<dd class="description">server-error-service-unavailable</dd>
-<dt>IPP_STATUS_ERROR_TEMPORARY </dt>
-<dd class="description">server-error-temporary-error</dd>
-<dt>IPP_STATUS_ERROR_TIMEOUT </dt>
-<dd class="description">client-error-timeout</dd>
-<dt>IPP_STATUS_ERROR_TOO_MANY_DOCUMENTS </dt>
-<dd class="description">server-error-too-many-documents</dd>
-<dt>IPP_STATUS_ERROR_TOO_MANY_JOBS </dt>
-<dd class="description">server-error-too-many-jobs</dd>
-<dt>IPP_STATUS_ERROR_TOO_MANY_SUBSCRIPTIONS </dt>
-<dd class="description">client-error-too-many-subscriptions</dd>
-<dt>IPP_STATUS_ERROR_URI_SCHEME </dt>
-<dd class="description">client-error-uri-scheme-not-supported</dd>
-<dt>IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED </dt>
-<dd class="description">server-error-version-not-supported</dd>
-<dt>IPP_STATUS_OK </dt>
-<dd class="description">successful-ok</dd>
-<dt>IPP_STATUS_OK_CONFLICTING </dt>
-<dd class="description">successful-ok-conflicting-attributes</dd>
-<dt>IPP_STATUS_OK_EVENTS_COMPLETE </dt>
-<dd class="description">successful-ok-events-complete</dd>
-<dt>IPP_STATUS_OK_IGNORED_OR_SUBSTITUTED </dt>
-<dd class="description">successful-ok-ignored-or-substituted-attributes</dd>
-<dt>IPP_STATUS_OK_IGNORED_SUBSCRIPTIONS </dt>
-<dd class="description">successful-ok-ignored-subscriptions</dd>
-<dt>IPP_STATUS_OK_TOO_MANY_EVENTS </dt>
-<dd class="description">successful-ok-too-many-events</dd>
-</dl>
-<h3 class="enumeration"><a name="ipp_tag_e">ipp_tag_e</a></h3>
-<p class="description">Format tags for attributes</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>IPP_TAG_ADMINDEFINE </dt>
-<dd class="description">Admin-defined value</dd>
-<dt>IPP_TAG_BEGIN_COLLECTION </dt>
-<dd class="description">Beginning of collection value</dd>
-<dt>IPP_TAG_BOOLEAN </dt>
-<dd class="description">Boolean value</dd>
-<dt>IPP_TAG_CHARSET </dt>
-<dd class="description">Character set value</dd>
-<dt>IPP_TAG_CUPS_INVALID </dt>
-<dd class="description">Invalid tag name for <a href="#ippTagValue"><code>ippTagValue</code></a></dd>
-<dt>IPP_TAG_DATE </dt>
-<dd class="description">Date/time value</dd>
-<dt>IPP_TAG_DEFAULT </dt>
-<dd class="description">Default value</dd>
-<dt>IPP_TAG_DELETEATTR </dt>
-<dd class="description">Delete-attribute value</dd>
-<dt>IPP_TAG_DOCUMENT </dt>
-<dd class="description">Document group</dd>
-<dt>IPP_TAG_END </dt>
-<dd class="description">End-of-attributes</dd>
-<dt>IPP_TAG_END_COLLECTION </dt>
-<dd class="description">End of collection value</dd>
-<dt>IPP_TAG_ENUM </dt>
-<dd class="description">Enumeration value</dd>
-<dt>IPP_TAG_EVENT_NOTIFICATION </dt>
-<dd class="description">Event group</dd>
-<dt>IPP_TAG_EXTENSION </dt>
-<dd class="description">Extension point for 32-bit tags</dd>
-<dt>IPP_TAG_INTEGER </dt>
-<dd class="description">Integer value</dd>
-<dt>IPP_TAG_JOB </dt>
-<dd class="description">Job group</dd>
-<dt>IPP_TAG_KEYWORD </dt>
-<dd class="description">Keyword value</dd>
-<dt>IPP_TAG_LANGUAGE </dt>
-<dd class="description">Language value</dd>
-<dt>IPP_TAG_MEMBERNAME </dt>
-<dd class="description">Collection member name value</dd>
-<dt>IPP_TAG_MIMETYPE </dt>
-<dd class="description">MIME media type value</dd>
-<dt>IPP_TAG_NAME </dt>
-<dd class="description">Name value</dd>
-<dt>IPP_TAG_NAMELANG </dt>
-<dd class="description">Name-with-language value</dd>
-<dt>IPP_TAG_NOTSETTABLE </dt>
-<dd class="description">Not-settable value</dd>
-<dt>IPP_TAG_NOVALUE </dt>
-<dd class="description">No-value value</dd>
-<dt>IPP_TAG_OPERATION </dt>
-<dd class="description">Operation group</dd>
-<dt>IPP_TAG_PRINTER </dt>
-<dd class="description">Printer group</dd>
-<dt>IPP_TAG_RANGE </dt>
-<dd class="description">Range value</dd>
-<dt>IPP_TAG_RESOLUTION </dt>
-<dd class="description">Resolution value</dd>
-<dt>IPP_TAG_STRING </dt>
-<dd class="description">Octet string value</dd>
-<dt>IPP_TAG_SUBSCRIPTION </dt>
-<dd class="description">Subscription group</dd>
-<dt>IPP_TAG_TEXT </dt>
-<dd class="description">Text value</dd>
-<dt>IPP_TAG_TEXTLANG </dt>
-<dd class="description">Text-with-language value</dd>
-<dt>IPP_TAG_UNKNOWN </dt>
-<dd class="description">Unknown value</dd>
-<dt>IPP_TAG_UNSUPPORTED_GROUP </dt>
-<dd class="description">Unsupported attributes group</dd>
-<dt>IPP_TAG_UNSUPPORTED_VALUE </dt>
-<dd class="description">Unsupported value</dd>
-<dt>IPP_TAG_URI </dt>
-<dd class="description">URI value</dd>
-<dt>IPP_TAG_URISCHEME </dt>
-<dd class="description">URI scheme value</dd>
-<dt>IPP_TAG_ZERO </dt>
-<dd class="description">Zero tag - used for separators</dd>
-</dl>
-</div>
-</body>
-</html>
diff --git a/doc/help/api-overview.html b/doc/help/api-overview.html
deleted file mode 100644
index d6d5140..0000000
--- a/doc/help/api-overview.html
+++ /dev/null
@@ -1,512 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<!-- SECTION: Programming -->
-<head>
- <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">
-<style type="text/css"><!--
-BODY {
- font-family: lucida grande, geneva, helvetica, arial, sans-serif;
-}
-
-H1, H2, H3, H4, H5, H6, P, TD, TH {
- font-family: lucida grande, geneva, helvetica, arial, sans-serif;
-}
-
-KBD {
- font-family: monaco, courier, monospace;
- font-weight: bold;
-}
-
-PRE {
- font-family: monaco, courier, monospace;
-}
-
-PRE.command {
- border: dotted thin #7f7f7f;
- margin-left: 36pt;
- padding: 10px;
-}
-
-P.compact {
- margin: 0;
-}
-
-P.example {
- font-style: italic;
- margin-left: 36pt;
-}
-
-DL.man DD {
- margin-left: 5em;
-}
-
-DL.man DT {
- margin-left: 0;
-}
-
-PRE.man {
- margin: 0;
-}
-
-PRE.example {
- background: #eeeeee;
- border: dotted thin #999999;
- margin-left: 36pt;
- padding: 10pt;
-}
-
-PRE.command EM, PRE.example EM {
- font-family: lucida grande, geneva, helvetica, arial, sans-serif;
-}
-
-P.command {
- font-family: monaco, courier, monospace;
- margin-left: 36pt;
-}
-
-P.formula {
- font-style: italic;
- margin-left: 36pt;
-}
-
-BLOCKQUOTE {
- background: #eeeeee;
- border: solid thin #999999;
- padding: 10pt;
-}
-
-A IMG {
- border: none;
-}
-
-A:link:hover IMG {
- background: #f0f0f0;
- border-radius: 10px;
- -moz-border-radius: 10px;
-}
-
-A:link, A:visited {
- font-weight: inherit;
- text-decoration: none;
-}
-
-A:link:hover, A:visited:hover, A:active {
- text-decoration: underline;
-}
-
-SUB, SUP {
- font-size: 50%;
-}
-
-TR.data, TD.data, TR.data TD {
- margin-top: 10pt;
- padding: 5pt;
- border-bottom: solid 1pt #999999;
-}
-
-TR.data TH {
- border-bottom: solid 1pt #999999;
- padding-top: 10pt;
- padding-left: 5pt;
- text-align: left;
-}
-
-DIV.table TABLE {
- border: solid thin #999999;
- border-collapse: collapse;
- border-spacing: 0;
- margin-left: auto;
- margin-right: auto;
-}
-
-DIV.table CAPTION {
- caption-side: top;
- font-size: 120%;
- font-style: italic;
- font-weight: bold;
- margin-left: auto;
- margin-right: auto;
-}
-
-DIV.table TABLE TD {
- border: solid thin #cccccc;
- padding-top: 5pt;
-}
-
-DIV.table TABLE TH {
- background: #cccccc;
- border: none;
- border-bottom: solid thin #999999;
-}
-
-DIV.figure TABLE {
- margin-left: auto;
- margin-right: auto;
-}
-
-DIV.figure CAPTION {
- caption-side: bottom;
- font-size: 120%;
- font-style: italic;
- font-weight: bold;
- margin-left: auto;
- margin-right: auto;
-}
-
-TH.label {
- text-align: right;
- vertical-align: top;
-}
-
-TH.sublabel {
- text-align: right;
- font-weight: normal;
-}
-
-HR {
- border: solid thin;
-}
-
-SPAN.info {
- background: black;
- border: thin solid black;
- color: white;
- font-size: 80%;
- font-style: italic;
- font-weight: bold;
- white-space: nowrap;
-}
-
-H2 SPAN.info, H3 SPAN.info, H4 SPAN.info {
- float: right;
- font-size: 100%;
-}
-
-H1.title {
-}
-
-H2.title, H3.title {
- border-bottom: solid 2pt #000000;
-}
-
-DIV.indent, TABLE.indent {
- margin-top: 2em;
- margin-left: auto;
- margin-right: auto;
- width: 90%;
-}
-
-TABLE.indent {
- border-collapse: collapse;
-}
-
-TABLE.indent TD, TABLE.indent TH {
- padding: 0;
-}
-
-TABLE.list {
- border-collapse: collapse;
- margin-left: auto;
- margin-right: auto;
- width: 90%;
-}
-
-TABLE.list TH {
- background: white;
- border-bottom: solid thin #cccccc;
- color: #444444;
- padding-top: 10pt;
- padding-left: 5pt;
- text-align: left;
- vertical-align: bottom;
- white-space: nowrap;
-}
-
-TABLE.list TH A {
- color: #4444cc;
-}
-
-TABLE.list TD {
- border-bottom: solid thin #eeeeee;
- padding-top: 5pt;
- padding-left: 5pt;
-}
-
-TABLE.list TR:nth-child(even) {
- background: #f8f8f8;
-}
-
-TABLE.list TR:nth-child(odd) {
- background: #f4f4f4;
-}
-
-DT {
- margin-left: 36pt;
- margin-top: 12pt;
-}
-
-DD {
- margin-left: 54pt;
-}
-
-DL.category DT {
- font-weight: bold;
-}
-
-P.summary {
- margin-left: 36pt;
- font-family: monaco, courier, monospace;
-}
-
-DIV.summary TABLE {
- border: solid thin #999999;
- border-collapse: collapse;
- border-spacing: 0;
- margin: 10px;
-}
-
-DIV.summary TABLE TD, DIV.summary TABLE TH {
- border: solid thin #999999;
- padding: 5px;
- text-align: left;
- vertical-align: top;
-}
-
-DIV.summary TABLE THEAD TH {
- background: #eeeeee;
-}
-
-/* API documentation styles... */
-div.body h1 {
- margin: 0;
-}
-div.body h2 {
- margin-top: 1.5em;
-}
-div.body h3, div.body h4, div.body h5 {
- margin-bottom: 0.5em;
- margin-top: 1.5em;
-}
-.class, .enumeration, .function, .struct, .typedef, .union {
- border-bottom: solid thin #999999;
- margin-bottom: 0;
- margin-top: 2em;
-}
-.description {
- margin-top: 0.5em;
-}
-code, p.code, pre, ul.code li {
- font-family: monaco, courier, monospace;
- font-size: 90%;
-}
-ul.code, ul.contents, ul.subcontents {
- list-style-type: none;
- margin: 0;
- padding-left: 0;
-}
-ul.code li {
- margin: 0;
-}
-ul.contents > li {
- margin-top: 1em;
-}
-ul.contents li ul.code, ul.contents li ul.subcontents {
- padding-left: 2em;
-}
-div.body dl {
- margin-left: 0;
- margin-top: 0;
-}
-div.body dt {
- font-style: italic;
- margin-left: 0;
- margin-top: 0;
-}
-div.body dd {
- margin-bottom: 0.5em;
-}
-
-/* This is just for the HTML files generated with the framedhelp target */
-div.contents {
- background: #e8e8e8;
- border: solid thin black;
- padding: 10px;
-}
-div.contents h1 {
- font-size: 110%;
-}
-div.contents h2 {
- font-size: 100%;
-}
-div.contents ul.contents {
- font-size: 80%;
-}
-div.contents ul.subcontents li {
- margin-left: 1em;
- text-indent: -1em;
-}
---></style>
-</head>
-<body>
-<div class='body'>
-<!--
- Introduction to CUPS programming header for CUPS.
-
- Copyright 2008-2016 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/".
--->
-
-<h1 class='title'>Introduction to CUPS Programming</h1>
-
-<div class='summary'><table summary='General Information'>
-<thead>
-<tr>
- <th>Headers</th>
- <th>cups/cups.h<br>
- cups/adminutil.h<br>
- cups/array.h<br>
- cups/dir.h<br>
- cups/file.h<br>
- cups/http.h<br>
- cups/ipp.h<br>
- cups/language.h<br>
- cups/ppd.h<br>
- cups/pwg.h<br>
- cups/raster.h</th>
-</tr>
-</thead>
-<tbody>
-<tr>
- <th>Libraries</th>
- <td>-lcups</td>
-</tr>
-<tr>
- <th>See Also</th>
- <td>Programming: <a href='raster-driver.html' target='_top'>Developing Raster Printer Drivers</a><br>
- Programming: <a href='postscript-driver.html' target='_top'>Developing PostScript Printer Drivers</a><br>
- Programming: <a href='api-filter.html' target='_top'>Filter and Backend Programming</a><br>
- Programming: <a href='ppd-compiler.html' target='_top'>Introduction to the PPD Compiler</a><br>
- Programming: <a href='api-admin.html' target='_top'>Administrative APIs</a><br>
- Programming: <a href='api-array.html' target='_top'>Array API</a><br>
- Programming: <a href='api-cups.html' target='_top'>CUPS API</a><br>
- Programming: <a href='api-filedir.html' target='_top'>File and Directory APIs</a><br>
- Programming: <a href='api-httpipp.html' target='_top'>HTTP and IPP APIs</a><br>
- Programming: <a href='api-ppd.html' target='_top'>PPD API (DEPRECATED)</a><br>
- Programming: <a href='api-raster.html' target='_top'>Raster API</a><br>
- References: <a href='ref-ppdcfile.html' target='_top'>PPD Compiler Driver Information File Reference</a><br>
- Specifications: <a href='spec-ppd.html' target='_top'>CUPS PPD Extensions</a></td>
-</tr>
-</tbody>
-</table></div>
-<h2 class="title">Contents</h2>
-<ul class="contents">
-<li><a href="#OVERVIEW">Overview</a></li>
-<li><a href="#COMPILING">Compiling Programs</a><ul class="subcontents">
- <li><a href="#XCODE">Compiling with Xcode</a></li>
- <li><a href="#COMMANDLINE">Compiling with GCC</a></li>
-</ul></li>
-<li><a href="#WHERETOGO">Where to Go Next</a></li>
-</ul>
-<!--
- Introduction to CUPS programming content for CUPS.
-
- Copyright 2008-2011 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/".
--->
-
-<h2 class="title"><a name="OVERVIEW">Overview</a></h2>
-
-<p>CUPS provides two libraries that interface with the different parts of the
-printing system. The "cups" library provides all of the common application and
-filter functions while the "cupsimage" library provides all of the imaging
-functions used in raster printer drivers. The "cups" library functions are
-accessed by including the <var>&lt;cups/cups.h&gt;</var> header, while
-"cupsimage" functions are found in the <var>&lt;cups/raster.h&gt;</var>
-header.</p>
-
-<h2 class="title"><a name="COMPILING">Compiling Programs</a></h2>
-
-<p>The CUPS libraries can be used from any C, C++, or Objective C program.
-The method of compiling against the libraries varies depending on the
-operating system and installation of CUPS. The following sections show how
-to compile a simple program (shown below) in two common environments.</p>
-
-<p>The following simple program lists the available printers on the system:</p>
-
-<pre class="example">
-#include &lt;stdio.h&gt;
-#include &lt;cups/cups.h&gt;
-
-int main(void)
-{
- int i;
- cups_dest_t *dests, *dest;
- int num_dests = cupsGetDests(&amp;dests);
-
- for (i = num_dests, dest = dests; i &gt; 0; i --, dest ++)
- {
- if (dest->instance)
- printf("%s/%s\n", dest->name, dest->instance);
- else
- puts(dest->name);
- }
-
- return (0);
-}
-</pre>
-
-<h3><a name="XCODE">Compiling with Xcode</a></h3>
-
-<p>In Xcode, choose <var>New Project...</var> from the <var>File</var> menu,
-then select the <var>Standard Tool</var> project type under <var>Command Line
-Utility</var>. Click <var>Next</var> and choose a project directory. Click
-<var>Next</var> to create the project.</p>
-
-<p>In the project window, double-click on the <var>Targets</var> group and
-control-click on the simple target to show the context menu. Choose
-<var>Existing Framework...</var> from the <var>Add</var> submenu. When the file
-chooser sheet appears, press the <kbd>/</kbd> key and enter "/usr/lib". Scroll
-down the file list and select the <var>libcups.dylib</var> file. Click the
-<var>Add</var> button in the file chooser and attributes sheets.</p>
-
-<p>In the project window, double-click on the <var>main.c</var> source file.
-Replace the template source code with the listing above and save it. Click the
-<var>Build and Go</var> button to build the sample program and run it.</p>
-
-<h3><a name="COMMANDLINE">Compiling with GCC</a></h3>
-
-<p>From the command-line, create a file called <var>sample.c</var> using your
-favorite editor and then run the following command to compile it with GCC and
-run it:</p>
-
-<pre class="command">
-gcc -o simple `cups-config --cflags` simple.c `cups-config --libs`
-./simple
-</pre>
-
-<p>The <code>cups-config</code> command provides the compiler flags
-("cups-config --cflags") and libraries ("cups-config --libs") needed for the
-local system.</p>
-
-<h2 class="title"><a name="WHERETOGO">Where to Go Next</a></h2>
-
-<p>If you are developing a print filter, driver, or backend, see the
-<a href="api-filter.html" target="_top">Filter and Backend Programming</a>
-guide. Raster printer driver developers should also read the
-<a href="api-raster.html" target="_top">Raster API</a> reference.</p>
-</div>
-</body>
-</html>
diff --git a/doc/help/api-ppd.html b/doc/help/api-ppd.html
index 55fd0ac..7e60ec4 100644
--- a/doc/help/api-ppd.html
+++ b/doc/help/api-ppd.html
@@ -1,12 +1,15 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!doctype html>
<html>
<!-- SECTION: Programming -->
-<head>
- <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">
-<style type="text/css"><!--
+ <head>
+ <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.11">
+ <meta name="author" content="Unknown">
+ <meta name="copyright" content="Unknown">
+ <meta name="version" content="0.0">
+ <style type="text/css"><!--
BODY {
font-family: lucida grande, geneva, helvetica, arial, sans-serif;
}
@@ -349,9 +352,8 @@ div.contents ul.subcontents li {
text-indent: -1em;
}
--></style>
-</head>
-<body>
-<div class='body'>
+ </head>
+ <body>
<!--
PPD API header for CUPS.
@@ -388,110 +390,105 @@ div.contents ul.subcontents li {
</tr>
</tbody>
</table></div>
-<h2 class="title">Contents</h2>
-<ul class="contents">
-<li><a href="#OVERVIEW">Overview</a><ul class="subcontents">
- <li><a href="#LOADING">Loading a PPD File</a></li>
- <li><a href="#OPTIONS_AND_GROUPS">Options and Groups</a></li>
- <li><a href="#CONSTRAINTS">Constraints</a></li>
- <li><a href="#PAGE_SIZES">Page Sizes</a></li>
- <li><a href="#ATTRIBUTES">Attributes</a></li>
-</ul></li>
-<li><a href="#FUNCTIONS">Functions</a><ul class="code">
- <li><a href="#cupsGetConflicts" title="Get a list of conflicting options in a marked PPD.">cupsGetConflicts</a></li>
- <li><a href="#cupsGetPPD" title="Get the PPD file for a printer on the default server.">cupsGetPPD</a></li>
- <li><a href="#cupsGetPPD2" title="Get the PPD file for a printer from the specified server.">cupsGetPPD2</a></li>
- <li><a href="#cupsGetPPD3" title="Get the PPD file for a printer on the specified
-server if it has changed.">cupsGetPPD3</a></li>
- <li><a href="#cupsGetServerPPD" title="Get an available PPD file from the server.">cupsGetServerPPD</a></li>
- <li><a href="#cupsMarkOptions" title="Mark command-line options in a PPD file.">cupsMarkOptions</a></li>
- <li><a href="#cupsResolveConflicts" title="Resolve conflicts in a marked PPD.">cupsResolveConflicts</a></li>
- <li><a href="#ppdCollect" title="Collect all marked options that reside in the specified
-section.">ppdCollect</a></li>
- <li><a href="#ppdCollect2" title="Collect all marked options that reside in the
-specified section and minimum order.">ppdCollect2</a></li>
- <li><a href="#ppdConflicts" title="Check to see if there are any conflicts among the
-marked option choices.">ppdConflicts</a></li>
- <li><a href="#ppdEmit" title="Emit code for marked options to a file.">ppdEmit</a></li>
- <li><a href="#ppdEmitAfterOrder" title="Emit a subset of the code for marked options to a file.">ppdEmitAfterOrder</a></li>
- <li><a href="#ppdEmitFd" title="Emit code for marked options to a file.">ppdEmitFd</a></li>
- <li><a href="#ppdEmitJCL" title="Emit code for JCL options to a file.">ppdEmitJCL</a></li>
- <li><a href="#ppdEmitJCLEnd" title="Emit JCLEnd code to a file.">ppdEmitJCLEnd</a></li>
- <li><a href="#ppdEmitString" title="Get a string containing the code for marked options.">ppdEmitString</a></li>
- <li><a href="#ppdFindAttr" title="Find the first matching attribute.">ppdFindAttr</a></li>
- <li><a href="#ppdFindChoice" title="Return a pointer to an option choice.">ppdFindChoice</a></li>
- <li><a href="#ppdFindCustomOption" title="Find a custom option.">ppdFindCustomOption</a></li>
- <li><a href="#ppdFindCustomParam" title="Find a parameter for a custom option.">ppdFindCustomParam</a></li>
- <li><a href="#ppdFindMarkedChoice" title="Return the marked choice for the specified option.">ppdFindMarkedChoice</a></li>
- <li><a href="#ppdFindNextAttr" title="Find the next matching attribute.">ppdFindNextAttr</a></li>
- <li><a href="#ppdFindOption" title="Return a pointer to the specified option.">ppdFindOption</a></li>
- <li><a href="#ppdFirstCustomParam" title="Return the first parameter for a custom option.">ppdFirstCustomParam</a></li>
- <li><a href="#ppdFirstOption" title="Return the first option in the PPD file.">ppdFirstOption</a></li>
- <li><a href="#ppdInstallableConflict" title="Test whether an option choice conflicts with
-an installable option.">ppdInstallableConflict</a></li>
- <li><a href="#ppdIsMarked" title="Check to see if an option is marked.">ppdIsMarked</a></li>
- <li><a href="#ppdLocalize" title="Localize the PPD file to the current locale.">ppdLocalize</a></li>
- <li><a href="#ppdLocalizeAttr" title="Localize an attribute.">ppdLocalizeAttr</a></li>
- <li><a href="#ppdLocalizeIPPReason" title="Get the localized version of a cupsIPPReason
-attribute.">ppdLocalizeIPPReason</a></li>
- <li><a href="#ppdLocalizeMarkerName" title="Get the localized version of a marker-names
-attribute value.">ppdLocalizeMarkerName</a></li>
- <li><a href="#ppdMarkDefaults" title="Mark all default options in the PPD file.">ppdMarkDefaults</a></li>
- <li><a href="#ppdMarkOption" title="Mark an option in a PPD file and return the number of
-conflicts.">ppdMarkOption</a></li>
- <li><a href="#ppdNextCustomParam" title="Return the next parameter for a custom option.">ppdNextCustomParam</a></li>
- <li><a href="#ppdNextOption" title="Return the next option in the PPD file.">ppdNextOption</a></li>
- <li><a href="#ppdPageLength" title="Get the page length for the given size.">ppdPageLength</a></li>
- <li><a href="#ppdPageSize" title="Get the page size record for the named size.">ppdPageSize</a></li>
- <li><a href="#ppdPageSizeLimits" title="Return the custom page size limits.">ppdPageSizeLimits</a></li>
- <li><a href="#ppdPageWidth" title="Get the page width for the given size.">ppdPageWidth</a></li>
-</ul></li>
-<li><a href="#TYPES">Data Types</a><ul class="code">
- <li><a href="#ppd_attr_t" title="PPD Attribute Structure ">ppd_attr_t</a></li>
- <li><a href="#ppd_choice_t" title="Option choices">ppd_choice_t</a></li>
- <li><a href="#ppd_conform_t" title="Conformance Levels ">ppd_conform_t</a></li>
- <li><a href="#ppd_const_t" title="Constraints">ppd_const_t</a></li>
- <li><a href="#ppd_coption_t" title="Custom Option ">ppd_coption_t</a></li>
- <li><a href="#ppd_cparam_t" title="Custom Parameter ">ppd_cparam_t</a></li>
- <li><a href="#ppd_cplimit_t" title="Custom Parameter Limit ">ppd_cplimit_t</a></li>
- <li><a href="#ppd_cptype_t" title="Custom Parameter Type ">ppd_cptype_t</a></li>
- <li><a href="#ppd_cpvalue_t" title="Custom Parameter Value ">ppd_cpvalue_t</a></li>
- <li><a href="#ppd_cs_t" title="Colorspaces">ppd_cs_t</a></li>
- <li><a href="#ppd_emul_t" title="Emulators">ppd_emul_t</a></li>
- <li><a href="#ppd_file_t" title="PPD File">ppd_file_t</a></li>
- <li><a href="#ppd_group_t" title="Groups">ppd_group_t</a></li>
- <li><a href="#ppd_option_t" title="Options">ppd_option_t</a></li>
- <li><a href="#ppd_profile_t" title="sRGB Color Profiles">ppd_profile_t</a></li>
- <li><a href="#ppd_section_t" title="Order dependency sections">ppd_section_t</a></li>
- <li><a href="#ppd_size_t" title="Page Sizes">ppd_size_t</a></li>
- <li><a href="#ppd_status_t" title="Status Codes ">ppd_status_t</a></li>
- <li><a href="#ppd_ui_t" title="UI Types">ppd_ui_t</a></li>
-</ul></li>
-<li><a href="#STRUCTURES">Structures</a><ul class="code">
- <li><a href="#ppd_attr_s" title="PPD Attribute Structure ">ppd_attr_s</a></li>
- <li><a href="#ppd_choice_s" title="Option choices">ppd_choice_s</a></li>
- <li><a href="#ppd_const_s" title="Constraints">ppd_const_s</a></li>
- <li><a href="#ppd_coption_s" title="Custom Option ">ppd_coption_s</a></li>
- <li><a href="#ppd_cparam_s" title="Custom Parameter ">ppd_cparam_s</a></li>
- <li><a href="#ppd_emul_s" title="Emulators">ppd_emul_s</a></li>
- <li><a href="#ppd_file_s" title="PPD File">ppd_file_s</a></li>
- <li><a href="#ppd_group_s" title="Groups">ppd_group_s</a></li>
- <li><a href="#ppd_option_s" title="Options">ppd_option_s</a></li>
- <li><a href="#ppd_profile_s" title="sRGB Color Profiles">ppd_profile_s</a></li>
- <li><a href="#ppd_size_s" title="Page Sizes">ppd_size_s</a></li>
-</ul></li>
-<li><a href="#UNIONS">Unions</a><ul class="code">
- <li><a href="#ppd_cplimit_u" title="Custom Parameter Limit ">ppd_cplimit_u</a></li>
- <li><a href="#ppd_cpvalue_u" title="Custom Parameter Value ">ppd_cpvalue_u</a></li>
-</ul></li>
-<li><a href="#ENUMERATIONS">Constants</a><ul class="code">
- <li><a href="#ppd_conform_e" title="Conformance Levels ">ppd_conform_e</a></li>
- <li><a href="#ppd_cs_e" title="Colorspaces">ppd_cs_e</a></li>
- <li><a href="#ppd_section_e" title="Order dependency sections">ppd_section_e</a></li>
- <li><a href="#ppd_status_e" title="Status Codes ">ppd_status_e</a></li>
- <li><a href="#ppd_ui_e" title="UI Types">ppd_ui_e</a></li>
-</ul></li>
-</ul>
+ <div class="contents">
+ <h2 class="title">Contents</h2>
+ <ul class="contents">
+ <li><a href="#OVERVIEW">Overview</a><ul class="subcontents">
+ <li><a href="#LOADING">Loading a PPD File</a></li>
+ <li><a href="#OPTIONS_AND_GROUPS">Options and Groups</a></li>
+ <li><a href="#CONSTRAINTS">Constraints</a></li>
+ <li><a href="#PAGE_SIZES">Page Sizes</a></li>
+ <li><a href="#ATTRIBUTES">Attributes</a></li>
+ </ul></li>
+ <li><a href="#FUNCTIONS">Functions</a><ul class="subcontents">
+ <li><a href="#cupsGetConflicts">cupsGetConflicts</a></li>
+ <li><a href="#cupsGetPPD">cupsGetPPD</a></li>
+ <li><a href="#cupsGetPPD2">cupsGetPPD2</a></li>
+ <li><a href="#cupsGetPPD3">cupsGetPPD3</a></li>
+ <li><a href="#cupsGetServerPPD">cupsGetServerPPD</a></li>
+ <li><a href="#cupsMarkOptions">cupsMarkOptions</a></li>
+ <li><a href="#cupsResolveConflicts">cupsResolveConflicts</a></li>
+ <li><a href="#ppdCollect">ppdCollect</a></li>
+ <li><a href="#ppdCollect2">ppdCollect2</a></li>
+ <li><a href="#ppdConflicts">ppdConflicts</a></li>
+ <li><a href="#ppdEmit">ppdEmit</a></li>
+ <li><a href="#ppdEmitAfterOrder">ppdEmitAfterOrder</a></li>
+ <li><a href="#ppdEmitFd">ppdEmitFd</a></li>
+ <li><a href="#ppdEmitJCL">ppdEmitJCL</a></li>
+ <li><a href="#ppdEmitJCLEnd">ppdEmitJCLEnd</a></li>
+ <li><a href="#ppdEmitString">ppdEmitString</a></li>
+ <li><a href="#ppdFindAttr">ppdFindAttr</a></li>
+ <li><a href="#ppdFindChoice">ppdFindChoice</a></li>
+ <li><a href="#ppdFindCustomOption">ppdFindCustomOption</a></li>
+ <li><a href="#ppdFindCustomParam">ppdFindCustomParam</a></li>
+ <li><a href="#ppdFindMarkedChoice">ppdFindMarkedChoice</a></li>
+ <li><a href="#ppdFindNextAttr">ppdFindNextAttr</a></li>
+ <li><a href="#ppdFindOption">ppdFindOption</a></li>
+ <li><a href="#ppdFirstCustomParam">ppdFirstCustomParam</a></li>
+ <li><a href="#ppdFirstOption">ppdFirstOption</a></li>
+ <li><a href="#ppdInstallableConflict">ppdInstallableConflict</a></li>
+ <li><a href="#ppdIsMarked">ppdIsMarked</a></li>
+ <li><a href="#ppdLocalize">ppdLocalize</a></li>
+ <li><a href="#ppdLocalizeAttr">ppdLocalizeAttr</a></li>
+ <li><a href="#ppdLocalizeIPPReason">ppdLocalizeIPPReason</a></li>
+ <li><a href="#ppdLocalizeMarkerName">ppdLocalizeMarkerName</a></li>
+ <li><a href="#ppdMarkDefaults">ppdMarkDefaults</a></li>
+ <li><a href="#ppdMarkOption">ppdMarkOption</a></li>
+ <li><a href="#ppdNextCustomParam">ppdNextCustomParam</a></li>
+ <li><a href="#ppdNextOption">ppdNextOption</a></li>
+ <li><a href="#ppdPageLength">ppdPageLength</a></li>
+ <li><a href="#ppdPageSize">ppdPageSize</a></li>
+ <li><a href="#ppdPageSizeLimits">ppdPageSizeLimits</a></li>
+ <li><a href="#ppdPageWidth">ppdPageWidth</a></li>
+ </ul></li>
+ <li><a href="#TYPES">Data Types</a><ul class="subcontents">
+ <li><a href="#ppd_attr_t">ppd_attr_t</a></li>
+ <li><a href="#ppd_choice_t">ppd_choice_t</a></li>
+ <li><a href="#ppd_conform_t">ppd_conform_t</a></li>
+ <li><a href="#ppd_const_t">ppd_const_t</a></li>
+ <li><a href="#ppd_coption_t">ppd_coption_t</a></li>
+ <li><a href="#ppd_cparam_t">ppd_cparam_t</a></li>
+ <li><a href="#ppd_cplimit_t">ppd_cplimit_t</a></li>
+ <li><a href="#ppd_cptype_t">ppd_cptype_t</a></li>
+ <li><a href="#ppd_cpvalue_t">ppd_cpvalue_t</a></li>
+ <li><a href="#ppd_cs_t">ppd_cs_t</a></li>
+ <li><a href="#ppd_emul_t">ppd_emul_t</a></li>
+ <li><a href="#ppd_file_t">ppd_file_t</a></li>
+ <li><a href="#ppd_group_t">ppd_group_t</a></li>
+ <li><a href="#ppd_option_t">ppd_option_t</a></li>
+ <li><a href="#ppd_profile_t">ppd_profile_t</a></li>
+ <li><a href="#ppd_section_t">ppd_section_t</a></li>
+ <li><a href="#ppd_size_t">ppd_size_t</a></li>
+ <li><a href="#ppd_status_t">ppd_status_t</a></li>
+ <li><a href="#ppd_ui_t">ppd_ui_t</a></li>
+ </ul></li>
+ <li><a href="#STRUCTURES">Structures</a><ul class="subcontents">
+ <li><a href="#ppd_attr_s">ppd_attr_s</a></li>
+ <li><a href="#ppd_choice_s">ppd_choice_s</a></li>
+ <li><a href="#ppd_const_s">ppd_const_s</a></li>
+ <li><a href="#ppd_coption_s">ppd_coption_s</a></li>
+ <li><a href="#ppd_cparam_s">ppd_cparam_s</a></li>
+ <li><a href="#ppd_emul_s">ppd_emul_s</a></li>
+ <li><a href="#ppd_file_s">ppd_file_s</a></li>
+ <li><a href="#ppd_group_s">ppd_group_s</a></li>
+ <li><a href="#ppd_option_s">ppd_option_s</a></li>
+ <li><a href="#ppd_profile_s">ppd_profile_s</a></li>
+ <li><a href="#ppd_size_s">ppd_size_s</a></li>
+ </ul></li>
+ <li><a href="#UNIONS">Unions</a><ul class="subcontents">
+ <li><a href="#ppd_cplimit_u">ppd_cplimit_u</a></li>
+ <li><a href="#ppd_cpvalue_u">ppd_cpvalue_u</a></li>
+ </ul></li>
+ <li><a href="#ENUMERATIONS">Enumerations</a><ul class="subcontents">
+ <li><a href="#ppd_conform_e">ppd_conform_e</a></li>
+ <li><a href="#ppd_cs_e">ppd_cs_e</a></li>
+ <li><a href="#ppd_section_e">ppd_section_e</a></li>
+ <li><a href="#ppd_status_e">ppd_status_e</a></li>
+ <li><a href="#ppd_ui_e">ppd_ui_e</a></li>
+ </ul></li>
+ </ul>
+ </div>
+ <div class="body">
<!--
PPD API introduction for CUPS.
@@ -709,31 +706,26 @@ for (attr = <a href="#ppdFindAttr">ppdFindAttr</a>(ppd, "Product", NULL);
attr = <a href="#ppdFindNextAttr">ppdFindNextAttr</a>(ppd, "Product", NULL))
puts(attr->value);
</pre>
-<h2 class="title"><a name="FUNCTIONS">Functions</a></h2>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span><a name="cupsGetConflicts">cupsGetConflicts</a></h3>
-<p class="description">Get a list of conflicting options in a marked PPD.</p>
+ <h2 class="title"><a id="FUNCTIONS">Functions</a></h2>
+<h3 class="function"><span class="info">&#160;CUPS 1.4/macOS 10.6&#160;</span><a id="cupsGetConflicts">cupsGetConflicts</a></h3>
+ <p class="description">Get a list of conflicting options in a marked PPD.</p>
<p class="code">
-int cupsGetConflicts (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *option,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *choice,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;cups_option_t **options<br>
-);</p>
+int cupsGetConflicts(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *option, const char *choice, cups_option_t **options);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file</dd>
-<dt>option</dt>
-<dd class="description">Option to test</dd>
-<dt>choice</dt>
-<dd class="description">Choice to test</dd>
-<dt>options</dt>
-<dd class="description">Conflicting options</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file</td></tr>
+<tr><th>option</th>
+ <td class="description">Option to test</td></tr>
+<tr><th>choice</th>
+ <td class="description">Choice to test</td></tr>
+<tr><th>options</th>
+ <td class="description">Conflicting options</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of conflicting options</p>
+ <p class="description">Number of conflicting options</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function gets a list of options that would conflict if &quot;option&quot; and
+ <p class="discussion">This function gets a list of options that would conflict if &quot;option&quot; and
&quot;choice&quot; were marked in the PPD. You would typically call this function
after marking the currently selected options in the PPD in order to
determine whether a new option selection would cause a conflict.<br>
@@ -743,44 +735,39 @@ the conflicting options. The returned option array must be freed using
<a href="#cupsFreeOptions"><code>cupsFreeOptions</code></a>.
</p>
-<h3 class="function"><a name="cupsGetPPD">cupsGetPPD</a></h3>
-<p class="description">Get the PPD file for a printer on the default server.</p>
+<h3 class="function"><a id="cupsGetPPD">cupsGetPPD</a></h3>
+ <p class="description">Get the PPD file for a printer on the default server.</p>
<p class="code">
-const char *cupsGetPPD (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
-);</p>
+const char *cupsGetPPD(const char *name);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>name</dt>
-<dd class="description">Destination name</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>name</th>
+ <td class="description">Destination name</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Filename for PPD file</p>
+ <p class="description">Filename for PPD file</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">For classes, <code>cupsGetPPD</code> returns the PPD file for the first printer
+ <p class="discussion">For classes, <code>cupsGetPPD</code> returns the PPD file for the first printer
in the class.<br>
<br>
The returned filename is stored in a static buffer and is overwritten with
each call to <code>cupsGetPPD</code> or <a href="#cupsGetPPD2"><code>cupsGetPPD2</code></a>. The caller &quot;owns&quot; the
file that is created and must <code>unlink</code> the returned filename.</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.1.21/macOS 10.4&nbsp;</span><a name="cupsGetPPD2">cupsGetPPD2</a></h3>
-<p class="description">Get the PPD file for a printer from the specified server.</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.1.21/macOS 10.4&#160;</span><a id="cupsGetPPD2">cupsGetPPD2</a></h3>
+ <p class="description">Get the PPD file for a printer from the specified server.</p>
<p class="code">
-const char *cupsGetPPD2 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
-);</p>
+const char *cupsGetPPD2(http_t *http, const char *name);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>name</dt>
-<dd class="description">Destination name</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></td></tr>
+<tr><th>name</th>
+ <td class="description">Destination name</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Filename for PPD file</p>
+ <p class="description">Filename for PPD file</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">For classes, <code>cupsGetPPD2</code> returns the PPD file for the first printer
+ <p class="discussion">For classes, <code>cupsGetPPD2</code> returns the PPD file for the first printer
in the class.<br>
<br>
The returned filename is stored in a static buffer and is overwritten with
@@ -788,34 +775,28 @@ each call to <a href="#cupsGetPPD"><code>cupsGetPPD</code></a> or <code>cupsGetP
file that is created and must <code>unlink</code> the returned filename.
</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span><a name="cupsGetPPD3">cupsGetPPD3</a></h3>
-<p class="description">Get the PPD file for a printer on the specified
+<h3 class="function"><span class="info">&#160;CUPS 1.4/macOS 10.6&#160;</span><a id="cupsGetPPD3">cupsGetPPD3</a></h3>
+ <p class="description">Get the PPD file for a printer on the specified
server if it has changed.</p>
<p class="code">
-http_status_t cupsGetPPD3 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;time_t *modtime,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *buffer,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;size_t bufsize<br>
-);</p>
+http_status_t cupsGetPPD3(http_t *http, const char *name, time_t *modtime, char *buffer, size_t bufsize);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">HTTP connection or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>name</dt>
-<dd class="description">Destination name</dd>
-<dt>modtime</dt>
-<dd class="description">Modification time</dd>
-<dt>buffer</dt>
-<dd class="description">Filename buffer</dd>
-<dt>bufsize</dt>
-<dd class="description">Size of filename buffer</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection or <code>CUPS_HTTP_DEFAULT</code></td></tr>
+<tr><th>name</th>
+ <td class="description">Destination name</td></tr>
+<tr><th>modtime</th>
+ <td class="description">Modification time</td></tr>
+<tr><th>buffer</th>
+ <td class="description">Filename buffer</td></tr>
+<tr><th>bufsize</th>
+ <td class="description">Size of filename buffer</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">HTTP status</p>
+ <p class="description">HTTP status</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">The &quot;modtime&quot; parameter contains the modification time of any
+ <p class="discussion">The &quot;modtime&quot; parameter contains the modification time of any
locally-cached content and is updated with the time from the PPD file on
the server.<br>
<br>
@@ -832,24 +813,21 @@ For classes, <code>cupsGetPPD3</code> returns the PPD file for the first printer
in the class.
</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.3/macOS 10.5&nbsp;</span><a name="cupsGetServerPPD">cupsGetServerPPD</a></h3>
-<p class="description">Get an available PPD file from the server.</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.3/macOS 10.5&#160;</span><a id="cupsGetServerPPD">cupsGetServerPPD</a></h3>
+ <p class="description">Get an available PPD file from the server.</p>
<p class="code">
-char *cupsGetServerPPD (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
-);</p>
+char *cupsGetServerPPD(http_t *http, const char *name);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>http</dt>
-<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
-<dt>name</dt>
-<dd class="description">Name of PPD file (&quot;ppd-name&quot;)</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></td></tr>
+<tr><th>name</th>
+ <td class="description">Name of PPD file (&quot;ppd-name&quot;)</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Name of PPD file or <code>NULL</code> on error</p>
+ <p class="description">Name of PPD file or <code>NULL</code> on error</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function returns the named PPD file from the server. The
+ <p class="discussion">This function returns the named PPD file from the server. The
list of available PPDs is provided by the IPP <code>CUPS_GET_PPDS</code>
operation.<br>
<br>
@@ -859,57 +837,47 @@ overwritten on the next call to <a href="#cupsGetPPD"><code>cupsGetPPD</code></a
or <a href="#cupsGetServerPPD"><code>cupsGetServerPPD</code></a>.
</p>
-<h3 class="function"><a name="cupsMarkOptions">cupsMarkOptions</a></h3>
-<p class="description">Mark command-line options in a PPD file.</p>
+<h3 class="function"><a id="cupsMarkOptions">cupsMarkOptions</a></h3>
+ <p class="description">Mark command-line options in a PPD file.</p>
<p class="code">
-int cupsMarkOptions (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_options,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;cups_option_t *options<br>
-);</p>
+int cupsMarkOptions(<a href="#ppd_file_t">ppd_file_t</a> *ppd, int num_options, cups_option_t *options);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file</dd>
-<dt>num_options</dt>
-<dd class="description">Number of options</dd>
-<dt>options</dt>
-<dd class="description">Options</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file</td></tr>
+<tr><th>num_options</th>
+ <td class="description">Number of options</td></tr>
+<tr><th>options</th>
+ <td class="description">Options</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 if conflicts exist, 0 otherwise</p>
+ <p class="description">1 if conflicts exist, 0 otherwise</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function maps the IPP &quot;finishings&quot;, &quot;media&quot;, &quot;mirror&quot;,
+ <p class="discussion">This function maps the IPP &quot;finishings&quot;, &quot;media&quot;, &quot;mirror&quot;,
&quot;multiple-document-handling&quot;, &quot;output-bin&quot;, &quot;print-color-mode&quot;,
&quot;print-quality&quot;, &quot;printer-resolution&quot;, and &quot;sides&quot; attributes to their
corresponding PPD options and choices.</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span><a name="cupsResolveConflicts">cupsResolveConflicts</a></h3>
-<p class="description">Resolve conflicts in a marked PPD.</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.4/macOS 10.6&#160;</span><a id="cupsResolveConflicts">cupsResolveConflicts</a></h3>
+ <p class="description">Resolve conflicts in a marked PPD.</p>
<p class="code">
-int cupsResolveConflicts (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *option,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *choice,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int *num_options,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;cups_option_t **options<br>
-);</p>
+int cupsResolveConflicts(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *option, const char *choice, int *num_options, cups_option_t **options);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file</dd>
-<dt>option</dt>
-<dd class="description">Newly selected option or <code>NULL</code> for none</dd>
-<dt>choice</dt>
-<dd class="description">Newly selected choice or <code>NULL</code> for none</dd>
-<dt>num_options</dt>
-<dd class="description">Number of additional selected options</dd>
-<dt>options</dt>
-<dd class="description">Additional selected options</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file</td></tr>
+<tr><th>option</th>
+ <td class="description">Newly selected option or <code>NULL</code> for none</td></tr>
+<tr><th>choice</th>
+ <td class="description">Newly selected choice or <code>NULL</code> for none</td></tr>
+<tr><th>num_options</th>
+ <td class="description">Number of additional selected options</td></tr>
+<tr><th>options</th>
+ <td class="description">Additional selected options</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
+ <p class="description">1 on success, 0 on failure</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function attempts to resolve any conflicts in a marked PPD, returning
+ <p class="discussion">This function attempts to resolve any conflicts in a marked PPD, returning
a list of option changes that are required to resolve them. On input,
&quot;num_options&quot; and &quot;options&quot; contain any pending option changes that have
not yet been marked, while &quot;option&quot; and &quot;choice&quot; contain the most recent
@@ -941,205 +909,167 @@ choice for the conflicting option, then iterating over all possible choices
until a non-conflicting option choice is found.
</p>
-<h3 class="function"><a name="ppdCollect">ppdCollect</a></h3>
-<p class="description">Collect all marked options that reside in the specified
+<h3 class="function"><a id="ppdCollect">ppdCollect</a></h3>
+ <p class="description">Collect all marked options that reside in the specified
section.</p>
<p class="code">
-int ppdCollect (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_section_t">ppd_section_t</a> section,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_choice_t">ppd_choice_t</a> ***choices<br>
-);</p>
+int ppdCollect(<a href="#ppd_file_t">ppd_file_t</a> *ppd, <a href="#ppd_section_t">ppd_section_t</a> section, <a href="#ppd_choice_t">ppd_choice_t</a> ***choices);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file data</dd>
-<dt>section</dt>
-<dd class="description">Section to collect</dd>
-<dt>choices</dt>
-<dd class="description">Pointers to choices</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file data</td></tr>
+<tr><th>section</th>
+ <td class="description">Section to collect</td></tr>
+<tr><th>choices</th>
+ <td class="description">Pointers to choices</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of options marked</p>
+ <p class="description">Number of options marked</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">The choices array should be freed using <code>free</code> when you are
+ <p class="discussion">The choices array should be freed using <code>free</code> when you are
finished with it.</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="ppdCollect2">ppdCollect2</a></h3>
-<p class="description">Collect all marked options that reside in the
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ppdCollect2">ppdCollect2</a></h3>
+ <p class="description">Collect all marked options that reside in the
specified section and minimum order.</p>
<p class="code">
-int ppdCollect2 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_section_t">ppd_section_t</a> section,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;float min_order,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_choice_t">ppd_choice_t</a> ***choices<br>
-);</p>
+int ppdCollect2(<a href="#ppd_file_t">ppd_file_t</a> *ppd, <a href="#ppd_section_t">ppd_section_t</a> section, float min_order, <a href="#ppd_choice_t">ppd_choice_t</a> ***choices);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file data</dd>
-<dt>section</dt>
-<dd class="description">Section to collect</dd>
-<dt>min_order</dt>
-<dd class="description">Minimum OrderDependency value</dd>
-<dt>choices</dt>
-<dd class="description">Pointers to choices</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file data</td></tr>
+<tr><th>section</th>
+ <td class="description">Section to collect</td></tr>
+<tr><th>min_order</th>
+ <td class="description">Minimum OrderDependency value</td></tr>
+<tr><th>choices</th>
+ <td class="description">Pointers to choices</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of options marked</p>
+ <p class="description">Number of options marked</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">The choices array should be freed using <code>free</code> when you are
+ <p class="discussion">The choices array should be freed using <code>free</code> when you are
finished with it.
</p>
-<h3 class="function"><a name="ppdConflicts">ppdConflicts</a></h3>
-<p class="description">Check to see if there are any conflicts among the
+<h3 class="function"><a id="ppdConflicts">ppdConflicts</a></h3>
+ <p class="description">Check to see if there are any conflicts among the
marked option choices.</p>
<p class="code">
-int ppdConflicts (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd<br>
-);</p>
+int ppdConflicts(<a href="#ppd_file_t">ppd_file_t</a> *ppd);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD to check</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD to check</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of conflicts found</p>
+ <p class="description">Number of conflicts found</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">The returned value is the same as returned by <a href="#ppdMarkOption"><code>ppdMarkOption</code></a>.</p>
-<h3 class="function"><a name="ppdEmit">ppdEmit</a></h3>
-<p class="description">Emit code for marked options to a file.</p>
+ <p class="discussion">The returned value is the same as returned by <a href="#ppdMarkOption"><code>ppdMarkOption</code></a>.</p>
+<h3 class="function"><a id="ppdEmit">ppdEmit</a></h3>
+ <p class="description">Emit code for marked options to a file.</p>
<p class="code">
-int ppdEmit (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;FILE *fp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_section_t">ppd_section_t</a> section<br>
-);</p>
+int ppdEmit(<a href="#ppd_file_t">ppd_file_t</a> *ppd, FILE *fp, <a href="#ppd_section_t">ppd_section_t</a> section);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file record</dd>
-<dt>fp</dt>
-<dd class="description">File to write to</dd>
-<dt>section</dt>
-<dd class="description">Section to write</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file record</td></tr>
+<tr><th>fp</th>
+ <td class="description">File to write to</td></tr>
+<tr><th>section</th>
+ <td class="description">Section to write</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">0 on success, -1 on failure</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="ppdEmitAfterOrder">ppdEmitAfterOrder</a></h3>
-<p class="description">Emit a subset of the code for marked options to a file.</p>
+ <p class="description">0 on success, -1 on failure</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ppdEmitAfterOrder">ppdEmitAfterOrder</a></h3>
+ <p class="description">Emit a subset of the code for marked options to a file.</p>
<p class="code">
-int ppdEmitAfterOrder (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;FILE *fp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_section_t">ppd_section_t</a> section,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int limit,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;float min_order<br>
-);</p>
+int ppdEmitAfterOrder(<a href="#ppd_file_t">ppd_file_t</a> *ppd, FILE *fp, <a href="#ppd_section_t">ppd_section_t</a> section, int limit, float min_order);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file record</dd>
-<dt>fp</dt>
-<dd class="description">File to write to</dd>
-<dt>section</dt>
-<dd class="description">Section to write</dd>
-<dt>limit</dt>
-<dd class="description">Non-zero to use min_order</dd>
-<dt>min_order</dt>
-<dd class="description">Lowest OrderDependency</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file record</td></tr>
+<tr><th>fp</th>
+ <td class="description">File to write to</td></tr>
+<tr><th>section</th>
+ <td class="description">Section to write</td></tr>
+<tr><th>limit</th>
+ <td class="description">Non-zero to use min_order</td></tr>
+<tr><th>min_order</th>
+ <td class="description">Lowest OrderDependency</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">0 on success, -1 on failure</p>
+ <p class="description">0 on success, -1 on failure</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">When &quot;limit&quot; is non-zero, this function only emits options whose
+ <p class="discussion">When &quot;limit&quot; is non-zero, this function only emits options whose
OrderDependency value is greater than or equal to &quot;min_order&quot;.<br>
<br>
When &quot;limit&quot; is zero, this function is identical to ppdEmit().
</p>
-<h3 class="function"><a name="ppdEmitFd">ppdEmitFd</a></h3>
-<p class="description">Emit code for marked options to a file.</p>
+<h3 class="function"><a id="ppdEmitFd">ppdEmitFd</a></h3>
+ <p class="description">Emit code for marked options to a file.</p>
<p class="code">
-int ppdEmitFd (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int fd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_section_t">ppd_section_t</a> section<br>
-);</p>
+int ppdEmitFd(<a href="#ppd_file_t">ppd_file_t</a> *ppd, int fd, <a href="#ppd_section_t">ppd_section_t</a> section);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file record</dd>
-<dt>fd</dt>
-<dd class="description">File to write to</dd>
-<dt>section</dt>
-<dd class="description">Section to write</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file record</td></tr>
+<tr><th>fd</th>
+ <td class="description">File to write to</td></tr>
+<tr><th>section</th>
+ <td class="description">Section to write</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">0 on success, -1 on failure</p>
-<h3 class="function"><a name="ppdEmitJCL">ppdEmitJCL</a></h3>
-<p class="description">Emit code for JCL options to a file.</p>
+ <p class="description">0 on success, -1 on failure</p>
+<h3 class="function"><a id="ppdEmitJCL">ppdEmitJCL</a></h3>
+ <p class="description">Emit code for JCL options to a file.</p>
<p class="code">
-int ppdEmitJCL (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;FILE *fp,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int job_id,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *user,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *title<br>
-);</p>
+int ppdEmitJCL(<a href="#ppd_file_t">ppd_file_t</a> *ppd, FILE *fp, int job_id, const char *user, const char *title);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file record</dd>
-<dt>fp</dt>
-<dd class="description">File to write to</dd>
-<dt>job_id</dt>
-<dd class="description">Job ID</dd>
-<dt>user</dt>
-<dd class="description">Username</dd>
-<dt>title</dt>
-<dd class="description">Title</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file record</td></tr>
+<tr><th>fp</th>
+ <td class="description">File to write to</td></tr>
+<tr><th>job_id</th>
+ <td class="description">Job ID</td></tr>
+<tr><th>user</th>
+ <td class="description">Username</td></tr>
+<tr><th>title</th>
+ <td class="description">Title</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">0 on success, -1 on failure</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="ppdEmitJCLEnd">ppdEmitJCLEnd</a></h3>
-<p class="description">Emit JCLEnd code to a file.</p>
+ <p class="description">0 on success, -1 on failure</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ppdEmitJCLEnd">ppdEmitJCLEnd</a></h3>
+ <p class="description">Emit JCLEnd code to a file.</p>
<p class="code">
-int ppdEmitJCLEnd (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;FILE *fp<br>
-);</p>
+int ppdEmitJCLEnd(<a href="#ppd_file_t">ppd_file_t</a> *ppd, FILE *fp);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file record</dd>
-<dt>fp</dt>
-<dd class="description">File to write to</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file record</td></tr>
+<tr><th>fp</th>
+ <td class="description">File to write to</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">0 on success, -1 on failure</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="ppdEmitString">ppdEmitString</a></h3>
-<p class="description">Get a string containing the code for marked options.</p>
+ <p class="description">0 on success, -1 on failure</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ppdEmitString">ppdEmitString</a></h3>
+ <p class="description">Get a string containing the code for marked options.</p>
<p class="code">
-char *ppdEmitString (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_section_t">ppd_section_t</a> section,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;float min_order<br>
-);</p>
+char *ppdEmitString(<a href="#ppd_file_t">ppd_file_t</a> *ppd, <a href="#ppd_section_t">ppd_section_t</a> section, float min_order);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file record</dd>
-<dt>section</dt>
-<dd class="description">Section to write</dd>
-<dt>min_order</dt>
-<dd class="description">Lowest OrderDependency</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file record</td></tr>
+<tr><th>section</th>
+ <td class="description">Section to write</td></tr>
+<tr><th>min_order</th>
+ <td class="description">Lowest OrderDependency</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">String containing option code or <code>NULL</code> if there is no option code</p>
+ <p class="description">String containing option code or <code>NULL</code> if there is no option code</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">When &quot;min_order&quot; is greater than zero, this function only includes options
+ <p class="discussion">When &quot;min_order&quot; is greater than zero, this function only includes options
whose OrderDependency value is greater than or equal to &quot;min_order&quot;.
Otherwise, all options in the specified section are included in the
returned string.<br>
@@ -1148,268 +1078,221 @@ The return string is allocated on the heap and should be freed using
<code>free</code> when you are done with it.
</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span><a name="ppdFindAttr">ppdFindAttr</a></h3>
-<p class="description">Find the first matching attribute.</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span><a id="ppdFindAttr">ppdFindAttr</a></h3>
+ <p class="description">Find the first matching attribute.</p>
<p class="code">
-<a href="#ppd_attr_t">ppd_attr_t</a> *ppdFindAttr (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *spec<br>
-);</p>
+<a href="#ppd_attr_t">ppd_attr_t</a> *ppdFindAttr(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *name, const char *spec);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file data</dd>
-<dt>name</dt>
-<dd class="description">Attribute name</dd>
-<dt>spec</dt>
-<dd class="description">Specifier string or <code>NULL</code></dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file data</td></tr>
+<tr><th>name</th>
+ <td class="description">Attribute name</td></tr>
+<tr><th>spec</th>
+ <td class="description">Specifier string or <code>NULL</code></td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Attribute or <code>NULL</code> if not found</p>
-<h3 class="function"><a name="ppdFindChoice">ppdFindChoice</a></h3>
-<p class="description">Return a pointer to an option choice.</p>
+ <p class="description">Attribute or <code>NULL</code> if not found</p>
+<h3 class="function"><a id="ppdFindChoice">ppdFindChoice</a></h3>
+ <p class="description">Return a pointer to an option choice.</p>
<p class="code">
-<a href="#ppd_choice_t">ppd_choice_t</a> *ppdFindChoice (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_option_t">ppd_option_t</a> *o,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *choice<br>
-);</p>
+<a href="#ppd_choice_t">ppd_choice_t</a> *ppdFindChoice(<a href="#ppd_option_t">ppd_option_t</a> *o, const char *choice);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>o</dt>
-<dd class="description">Pointer to option</dd>
-<dt>choice</dt>
-<dd class="description">Name of choice</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>o</th>
+ <td class="description">Pointer to option</td></tr>
+<tr><th>choice</th>
+ <td class="description">Name of choice</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Choice pointer or <code>NULL</code></p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="ppdFindCustomOption">ppdFindCustomOption</a></h3>
-<p class="description">Find a custom option.</p>
+ <p class="description">Choice pointer or <code>NULL</code></p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ppdFindCustomOption">ppdFindCustomOption</a></h3>
+ <p class="description">Find a custom option.</p>
<p class="code">
-<a href="#ppd_coption_t">ppd_coption_t</a> *ppdFindCustomOption (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *keyword<br>
-);</p>
+<a href="#ppd_coption_t">ppd_coption_t</a> *ppdFindCustomOption(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *keyword);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file</dd>
-<dt>keyword</dt>
-<dd class="description">Custom option name</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file</td></tr>
+<tr><th>keyword</th>
+ <td class="description">Custom option name</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Custom option or NULL</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="ppdFindCustomParam">ppdFindCustomParam</a></h3>
-<p class="description">Find a parameter for a custom option.</p>
+ <p class="description">Custom option or NULL</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ppdFindCustomParam">ppdFindCustomParam</a></h3>
+ <p class="description">Find a parameter for a custom option.</p>
<p class="code">
-<a href="#ppd_cparam_t">ppd_cparam_t</a> *ppdFindCustomParam (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_coption_t">ppd_coption_t</a> *opt,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
-);</p>
+<a href="#ppd_cparam_t">ppd_cparam_t</a> *ppdFindCustomParam(<a href="#ppd_coption_t">ppd_coption_t</a> *opt, const char *name);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>opt</dt>
-<dd class="description">Custom option</dd>
-<dt>name</dt>
-<dd class="description">Parameter name</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>opt</th>
+ <td class="description">Custom option</td></tr>
+<tr><th>name</th>
+ <td class="description">Parameter name</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Custom parameter or NULL</p>
-<h3 class="function"><a name="ppdFindMarkedChoice">ppdFindMarkedChoice</a></h3>
-<p class="description">Return the marked choice for the specified option.</p>
+ <p class="description">Custom parameter or NULL</p>
+<h3 class="function"><a id="ppdFindMarkedChoice">ppdFindMarkedChoice</a></h3>
+ <p class="description">Return the marked choice for the specified option.</p>
<p class="code">
-<a href="#ppd_choice_t">ppd_choice_t</a> *ppdFindMarkedChoice (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *option<br>
-);</p>
+<a href="#ppd_choice_t">ppd_choice_t</a> *ppdFindMarkedChoice(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *option);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file</dd>
-<dt>option</dt>
-<dd class="description">Keyword/option name</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file</td></tr>
+<tr><th>option</th>
+ <td class="description">Keyword/option name</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Pointer to choice or <code>NULL</code></p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span><a name="ppdFindNextAttr">ppdFindNextAttr</a></h3>
-<p class="description">Find the next matching attribute.</p>
+ <p class="description">Pointer to choice or <code>NULL</code></p>
+<h3 class="function"><span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span><a id="ppdFindNextAttr">ppdFindNextAttr</a></h3>
+ <p class="description">Find the next matching attribute.</p>
<p class="code">
-<a href="#ppd_attr_t">ppd_attr_t</a> *ppdFindNextAttr (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *spec<br>
-);</p>
+<a href="#ppd_attr_t">ppd_attr_t</a> *ppdFindNextAttr(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *name, const char *spec);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file data</dd>
-<dt>name</dt>
-<dd class="description">Attribute name</dd>
-<dt>spec</dt>
-<dd class="description">Specifier string or <code>NULL</code></dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file data</td></tr>
+<tr><th>name</th>
+ <td class="description">Attribute name</td></tr>
+<tr><th>spec</th>
+ <td class="description">Specifier string or <code>NULL</code></td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Attribute or <code>NULL</code> if not found</p>
-<h3 class="function"><a name="ppdFindOption">ppdFindOption</a></h3>
-<p class="description">Return a pointer to the specified option.</p>
+ <p class="description">Attribute or <code>NULL</code> if not found</p>
+<h3 class="function"><a id="ppdFindOption">ppdFindOption</a></h3>
+ <p class="description">Return a pointer to the specified option.</p>
<p class="code">
-<a href="#ppd_option_t">ppd_option_t</a> *ppdFindOption (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *option<br>
-);</p>
+<a href="#ppd_option_t">ppd_option_t</a> *ppdFindOption(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *option);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file data</dd>
-<dt>option</dt>
-<dd class="description">Option/Keyword name</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file data</td></tr>
+<tr><th>option</th>
+ <td class="description">Option/Keyword name</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Pointer to option or <code>NULL</code></p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="ppdFirstCustomParam">ppdFirstCustomParam</a></h3>
-<p class="description">Return the first parameter for a custom option.</p>
+ <p class="description">Pointer to option or <code>NULL</code></p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ppdFirstCustomParam">ppdFirstCustomParam</a></h3>
+ <p class="description">Return the first parameter for a custom option.</p>
<p class="code">
-<a href="#ppd_cparam_t">ppd_cparam_t</a> *ppdFirstCustomParam (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_coption_t">ppd_coption_t</a> *opt<br>
-);</p>
+<a href="#ppd_cparam_t">ppd_cparam_t</a> *ppdFirstCustomParam(<a href="#ppd_coption_t">ppd_coption_t</a> *opt);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>opt</dt>
-<dd class="description">Custom option</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>opt</th>
+ <td class="description">Custom option</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Custom parameter or NULL</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="ppdFirstOption">ppdFirstOption</a></h3>
-<p class="description">Return the first option in the PPD file.</p>
+ <p class="description">Custom parameter or NULL</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ppdFirstOption">ppdFirstOption</a></h3>
+ <p class="description">Return the first option in the PPD file.</p>
<p class="code">
-<a href="#ppd_option_t">ppd_option_t</a> *ppdFirstOption (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd<br>
-);</p>
+<a href="#ppd_option_t">ppd_option_t</a> *ppdFirstOption(<a href="#ppd_file_t">ppd_file_t</a> *ppd);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">First option or <code>NULL</code></p>
+ <p class="description">First option or <code>NULL</code></p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">Options are returned from all groups in ascending alphanumeric order.
+ <p class="discussion">Options are returned from all groups in ascending alphanumeric order.
</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span><a name="ppdInstallableConflict">ppdInstallableConflict</a></h3>
-<p class="description">Test whether an option choice conflicts with
+<h3 class="function"><span class="info">&#160;CUPS 1.4/macOS 10.6&#160;</span><a id="ppdInstallableConflict">ppdInstallableConflict</a></h3>
+ <p class="description">Test whether an option choice conflicts with
an installable option.</p>
<p class="code">
-int ppdInstallableConflict (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *option,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *choice<br>
-);</p>
+int ppdInstallableConflict(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *option, const char *choice);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file</dd>
-<dt>option</dt>
-<dd class="description">Option</dd>
-<dt>choice</dt>
-<dd class="description">Choice</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file</td></tr>
+<tr><th>option</th>
+ <td class="description">Option</td></tr>
+<tr><th>choice</th>
+ <td class="description">Choice</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 if conflicting, 0 if not conflicting</p>
+ <p class="description">1 if conflicting, 0 if not conflicting</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function tests whether a particular option choice is available based
+ <p class="discussion">This function tests whether a particular option choice is available based
on constraints against options in the &quot;InstallableOptions&quot; group.
</p>
-<h3 class="function"><a name="ppdIsMarked">ppdIsMarked</a></h3>
-<p class="description">Check to see if an option is marked.</p>
+<h3 class="function"><a id="ppdIsMarked">ppdIsMarked</a></h3>
+ <p class="description">Check to see if an option is marked.</p>
<p class="code">
-int ppdIsMarked (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *option,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *choice<br>
-);</p>
+int ppdIsMarked(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *option, const char *choice);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file data</dd>
-<dt>option</dt>
-<dd class="description">Option/Keyword name</dd>
-<dt>choice</dt>
-<dd class="description">Choice name</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file data</td></tr>
+<tr><th>option</th>
+ <td class="description">Option/Keyword name</td></tr>
+<tr><th>choice</th>
+ <td class="description">Choice name</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Non-zero if option is marked</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="ppdLocalize">ppdLocalize</a></h3>
-<p class="description">Localize the PPD file to the current locale.</p>
+ <p class="description">Non-zero if option is marked</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ppdLocalize">ppdLocalize</a></h3>
+ <p class="description">Localize the PPD file to the current locale.</p>
<p class="code">
-int ppdLocalize (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd<br>
-);</p>
+int ppdLocalize(<a href="#ppd_file_t">ppd_file_t</a> *ppd);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">0 on success, -1 on error</p>
+ <p class="description">0 on success, -1 on error</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">All groups, options, and choices are localized, as are ICC profile
+ <p class="discussion">All groups, options, and choices are localized, as are ICC profile
descriptions, printer presets, and custom option parameters. Each
localized string uses the UTF-8 character encoding.
</p>
-<h3 class="function"><a name="ppdLocalizeAttr">ppdLocalizeAttr</a></h3>
-<p class="description">Localize an attribute.</p>
+<h3 class="function"><a id="ppdLocalizeAttr">ppdLocalizeAttr</a></h3>
+ <p class="description">Localize an attribute.</p>
<p class="code">
-<a href="#ppd_attr_t">ppd_attr_t</a> *ppdLocalizeAttr (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *keyword,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *spec<br>
-);</p>
+<a href="#ppd_attr_t">ppd_attr_t</a> *ppdLocalizeAttr(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *keyword, const char *spec);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file</dd>
-<dt>keyword</dt>
-<dd class="description">Main keyword</dd>
-<dt>spec</dt>
-<dd class="description">Option keyword or <code>NULL</code> for none</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file</td></tr>
+<tr><th>keyword</th>
+ <td class="description">Main keyword</td></tr>
+<tr><th>spec</th>
+ <td class="description">Option keyword or <code>NULL</code> for none</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Localized attribute or <code>NULL</code> if none exists</p>
+ <p class="description">Localized attribute or <code>NULL</code> if none exists</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function uses the current locale to find the localized attribute for
+ <p class="discussion">This function uses the current locale to find the localized attribute for
the given main and option keywords. If no localized version of the
attribute exists for the current locale, the unlocalized version is returned.</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.3/macOS 10.5&nbsp;</span><a name="ppdLocalizeIPPReason">ppdLocalizeIPPReason</a></h3>
-<p class="description">Get the localized version of a cupsIPPReason
+<h3 class="function"><span class="info">&#160;CUPS 1.3/macOS 10.5&#160;</span><a id="ppdLocalizeIPPReason">ppdLocalizeIPPReason</a></h3>
+ <p class="description">Get the localized version of a cupsIPPReason
attribute.</p>
<p class="code">
-const char *ppdLocalizeIPPReason (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *reason,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *scheme,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *buffer,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;size_t bufsize<br>
-);</p>
+const char *ppdLocalizeIPPReason(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *reason, const char *scheme, char *buffer, size_t bufsize);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file</dd>
-<dt>reason</dt>
-<dd class="description">IPP reason keyword to look up</dd>
-<dt>scheme</dt>
-<dd class="description">URI scheme or NULL for text</dd>
-<dt>buffer</dt>
-<dd class="description">Value buffer</dd>
-<dt>bufsize</dt>
-<dd class="description">Size of value buffer</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file</td></tr>
+<tr><th>reason</th>
+ <td class="description">IPP reason keyword to look up</td></tr>
+<tr><th>scheme</th>
+ <td class="description">URI scheme or NULL for text</td></tr>
+<tr><th>buffer</th>
+ <td class="description">Value buffer</td></tr>
+<tr><th>bufsize</th>
+ <td class="description">Size of value buffer</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Value or NULL if not found</p>
+ <p class="description">Value or NULL if not found</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function uses the current locale to find the corresponding reason
+ <p class="discussion">This function uses the current locale to find the corresponding reason
text or URI from the attribute value. If &quot;scheme&quot; is NULL or &quot;text&quot;,
the returned value contains human-readable (UTF-8) text from the translation
string or attribute value. Otherwise the corresponding URI is returned.<br>
@@ -1417,798 +1300,731 @@ string or attribute value. Otherwise the corresponding URI is returned.<br>
If no value of the requested scheme can be found, NULL is returned.
</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span><a name="ppdLocalizeMarkerName">ppdLocalizeMarkerName</a></h3>
-<p class="description">Get the localized version of a marker-names
+<h3 class="function"><span class="info">&#160;CUPS 1.4/macOS 10.6&#160;</span><a id="ppdLocalizeMarkerName">ppdLocalizeMarkerName</a></h3>
+ <p class="description">Get the localized version of a marker-names
attribute value.</p>
<p class="code">
-const char *ppdLocalizeMarkerName (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
-);</p>
+const char *ppdLocalizeMarkerName(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *name);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file</dd>
-<dt>name</dt>
-<dd class="description">Marker name to look up</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file</td></tr>
+<tr><th>name</th>
+ <td class="description">Marker name to look up</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Value or <code>NULL</code> if not found</p>
+ <p class="description">Value or <code>NULL</code> if not found</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function uses the current locale to find the corresponding name
+ <p class="discussion">This function uses the current locale to find the corresponding name
text from the attribute value. If no localized text for the requested
name can be found, <code>NULL</code> is returned.
</p>
-<h3 class="function"><a name="ppdMarkDefaults">ppdMarkDefaults</a></h3>
-<p class="description">Mark all default options in the PPD file.</p>
+<h3 class="function"><a id="ppdMarkDefaults">ppdMarkDefaults</a></h3>
+ <p class="description">Mark all default options in the PPD file.</p>
<p class="code">
-void ppdMarkDefaults (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd<br>
-);</p>
+void ppdMarkDefaults(<a href="#ppd_file_t">ppd_file_t</a> *ppd);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file record</dd>
-</dl>
-<h3 class="function"><a name="ppdMarkOption">ppdMarkOption</a></h3>
-<p class="description">Mark an option in a PPD file and return the number of
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file record</td></tr>
+</tbody></table>
+<h3 class="function"><a id="ppdMarkOption">ppdMarkOption</a></h3>
+ <p class="description">Mark an option in a PPD file and return the number of
conflicts.</p>
<p class="code">
-int ppdMarkOption (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *option,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *choice<br>
-);</p>
+int ppdMarkOption(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *option, const char *choice);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file record</dd>
-<dt>option</dt>
-<dd class="description">Keyword</dd>
-<dt>choice</dt>
-<dd class="description">Option name</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file record</td></tr>
+<tr><th>option</th>
+ <td class="description">Keyword</td></tr>
+<tr><th>choice</th>
+ <td class="description">Option name</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of conflicts</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="ppdNextCustomParam">ppdNextCustomParam</a></h3>
-<p class="description">Return the next parameter for a custom option.</p>
+ <p class="description">Number of conflicts</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ppdNextCustomParam">ppdNextCustomParam</a></h3>
+ <p class="description">Return the next parameter for a custom option.</p>
<p class="code">
-<a href="#ppd_cparam_t">ppd_cparam_t</a> *ppdNextCustomParam (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_coption_t">ppd_coption_t</a> *opt<br>
-);</p>
+<a href="#ppd_cparam_t">ppd_cparam_t</a> *ppdNextCustomParam(<a href="#ppd_coption_t">ppd_coption_t</a> *opt);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>opt</dt>
-<dd class="description">Custom option</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>opt</th>
+ <td class="description">Custom option</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Custom parameter or NULL</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="ppdNextOption">ppdNextOption</a></h3>
-<p class="description">Return the next option in the PPD file.</p>
+ <p class="description">Custom parameter or NULL</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ppdNextOption">ppdNextOption</a></h3>
+ <p class="description">Return the next option in the PPD file.</p>
<p class="code">
-<a href="#ppd_option_t">ppd_option_t</a> *ppdNextOption (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd<br>
-);</p>
+<a href="#ppd_option_t">ppd_option_t</a> *ppdNextOption(<a href="#ppd_file_t">ppd_file_t</a> *ppd);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Next option or <code>NULL</code></p>
+ <p class="description">Next option or <code>NULL</code></p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">Options are returned from all groups in ascending alphanumeric order.
+ <p class="discussion">Options are returned from all groups in ascending alphanumeric order.
</p>
-<h3 class="function"><a name="ppdPageLength">ppdPageLength</a></h3>
-<p class="description">Get the page length for the given size.</p>
+<h3 class="function"><a id="ppdPageLength">ppdPageLength</a></h3>
+ <p class="description">Get the page length for the given size.</p>
<p class="code">
-float ppdPageLength (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
-);</p>
+float ppdPageLength(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *name);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file</dd>
-<dt>name</dt>
-<dd class="description">Size name</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file</td></tr>
+<tr><th>name</th>
+ <td class="description">Size name</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Length of page in points or 0.0</p>
-<h3 class="function"><a name="ppdPageSize">ppdPageSize</a></h3>
-<p class="description">Get the page size record for the named size.</p>
+ <p class="description">Length of page in points or 0.0</p>
+<h3 class="function"><a id="ppdPageSize">ppdPageSize</a></h3>
+ <p class="description">Get the page size record for the named size.</p>
<p class="code">
-<a href="#ppd_size_t">ppd_size_t</a> *ppdPageSize (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
-);</p>
+<a href="#ppd_size_t">ppd_size_t</a> *ppdPageSize(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *name);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file record</dd>
-<dt>name</dt>
-<dd class="description">Size name</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file record</td></tr>
+<tr><th>name</th>
+ <td class="description">Size name</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Size record for page or NULL</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.4/macOS 10.6&nbsp;</span><a name="ppdPageSizeLimits">ppdPageSizeLimits</a></h3>
-<p class="description">Return the custom page size limits.</p>
+ <p class="description">Size record for page or NULL</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.4/macOS 10.6&#160;</span><a id="ppdPageSizeLimits">ppdPageSizeLimits</a></h3>
+ <p class="description">Return the custom page size limits.</p>
<p class="code">
-int ppdPageSizeLimits (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_size_t">ppd_size_t</a> *minimum,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_size_t">ppd_size_t</a> *maximum<br>
-);</p>
+int ppdPageSizeLimits(<a href="#ppd_file_t">ppd_file_t</a> *ppd, <a href="#ppd_size_t">ppd_size_t</a> *minimum, <a href="#ppd_size_t">ppd_size_t</a> *maximum);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file record</dd>
-<dt>minimum</dt>
-<dd class="description">Minimum custom size</dd>
-<dt>maximum</dt>
-<dd class="description">Maximum custom size</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file record</td></tr>
+<tr><th>minimum</th>
+ <td class="description">Minimum custom size</td></tr>
+<tr><th>maximum</th>
+ <td class="description">Maximum custom size</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 if custom sizes are supported, 0 otherwise</p>
+ <p class="description">1 if custom sizes are supported, 0 otherwise</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function returns the minimum and maximum custom page sizes and printable
+ <p class="discussion">This function returns the minimum and maximum custom page sizes and printable
areas based on the currently-marked (selected) options.<br>
<br>
If the specified PPD file does not support custom page sizes, both
&quot;minimum&quot; and &quot;maximum&quot; are filled with zeroes.
</p>
-<h3 class="function"><a name="ppdPageWidth">ppdPageWidth</a></h3>
-<p class="description">Get the page width for the given size.</p>
+<h3 class="function"><a id="ppdPageWidth">ppdPageWidth</a></h3>
+ <p class="description">Get the page width for the given size.</p>
<p class="code">
-float ppdPageWidth (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_file_t">ppd_file_t</a> *ppd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
-);</p>
+float ppdPageWidth(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *name);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>ppd</dt>
-<dd class="description">PPD file record</dd>
-<dt>name</dt>
-<dd class="description">Size name</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>ppd</th>
+ <td class="description">PPD file record</td></tr>
+<tr><th>name</th>
+ <td class="description">Size name</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Width of page in points or 0.0</p>
-<h2 class="title"><a name="TYPES">Data Types</a></h2>
-<h3 class="typedef"><span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span><a name="ppd_attr_t">ppd_attr_t</a></h3>
-<p class="description">PPD Attribute Structure </p>
-<p class="code">
+ <p class="description">Width of page in points or 0.0</p>
+ <h2 class="title"><a id="TYPES">Data Types</a></h2>
+ <h3 class="typedef"><a id="ppd_attr_t"><span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span>ppd_attr_t</a></h3>
+ <p class="description">PPD Attribute Structure </p>
+ <p class="code">
typedef struct <a href="#ppd_attr_s">ppd_attr_s</a> ppd_attr_t;
</p>
-<h3 class="typedef"><a name="ppd_choice_t">ppd_choice_t</a></h3>
-<p class="description">Option choices</p>
-<p class="code">
+ <h3 class="typedef"><a id="ppd_choice_t">ppd_choice_t</a></h3>
+ <p class="description">Option choices</p>
+ <p class="code">
typedef struct <a href="#ppd_choice_s">ppd_choice_s</a> ppd_choice_t;
</p>
-<h3 class="typedef"><span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span><a name="ppd_conform_t">ppd_conform_t</a></h3>
-<p class="description">Conformance Levels </p>
-<p class="code">
+ <h3 class="typedef"><a id="ppd_conform_t"><span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span>ppd_conform_t</a></h3>
+ <p class="description">Conformance Levels </p>
+ <p class="code">
typedef enum <a href="#ppd_conform_e">ppd_conform_e</a> ppd_conform_t;
</p>
-<h3 class="typedef"><a name="ppd_const_t">ppd_const_t</a></h3>
-<p class="description">Constraints</p>
-<p class="code">
+ <h3 class="typedef"><a id="ppd_const_t">ppd_const_t</a></h3>
+ <p class="description">Constraints</p>
+ <p class="code">
typedef struct <a href="#ppd_const_s">ppd_const_s</a> ppd_const_t;
</p>
-<h3 class="typedef"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="ppd_coption_t">ppd_coption_t</a></h3>
-<p class="description">Custom Option </p>
-<p class="code">
+ <h3 class="typedef"><a id="ppd_coption_t"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span>ppd_coption_t</a></h3>
+ <p class="description">Custom Option </p>
+ <p class="code">
typedef struct <a href="#ppd_coption_s">ppd_coption_s</a> ppd_coption_t;
</p>
-<h3 class="typedef"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="ppd_cparam_t">ppd_cparam_t</a></h3>
-<p class="description">Custom Parameter </p>
-<p class="code">
+ <h3 class="typedef"><a id="ppd_cparam_t"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span>ppd_cparam_t</a></h3>
+ <p class="description">Custom Parameter </p>
+ <p class="code">
typedef struct <a href="#ppd_cparam_s">ppd_cparam_s</a> ppd_cparam_t;
</p>
-<h3 class="typedef"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="ppd_cplimit_t">ppd_cplimit_t</a></h3>
-<p class="description">Custom Parameter Limit </p>
-<p class="code">
+ <h3 class="typedef"><a id="ppd_cplimit_t"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span>ppd_cplimit_t</a></h3>
+ <p class="description">Custom Parameter Limit </p>
+ <p class="code">
typedef union <a href="#ppd_cplimit_u">ppd_cplimit_u</a> ppd_cplimit_t;
</p>
-<h3 class="typedef"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="ppd_cptype_t">ppd_cptype_t</a></h3>
-<p class="description">Custom Parameter Type </p>
-<p class="code">
+ <h3 class="typedef"><a id="ppd_cptype_t"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span>ppd_cptype_t</a></h3>
+ <p class="description">Custom Parameter Type </p>
+ <p class="code">
typedef enum ppd_cptype_e ppd_cptype_t;
</p>
-<h3 class="typedef"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="ppd_cpvalue_t">ppd_cpvalue_t</a></h3>
-<p class="description">Custom Parameter Value </p>
-<p class="code">
+ <h3 class="typedef"><a id="ppd_cpvalue_t"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span>ppd_cpvalue_t</a></h3>
+ <p class="description">Custom Parameter Value </p>
+ <p class="code">
typedef union <a href="#ppd_cpvalue_u">ppd_cpvalue_u</a> ppd_cpvalue_t;
</p>
-<h3 class="typedef"><a name="ppd_cs_t">ppd_cs_t</a></h3>
-<p class="description">Colorspaces</p>
-<p class="code">
+ <h3 class="typedef"><a id="ppd_cs_t">ppd_cs_t</a></h3>
+ <p class="description">Colorspaces</p>
+ <p class="code">
typedef enum <a href="#ppd_cs_e">ppd_cs_e</a> ppd_cs_t;
</p>
-<h3 class="typedef"><a name="ppd_emul_t">ppd_emul_t</a></h3>
-<p class="description">Emulators</p>
-<p class="code">
+ <h3 class="typedef"><a id="ppd_emul_t">ppd_emul_t</a></h3>
+ <p class="description">Emulators</p>
+ <p class="code">
typedef struct <a href="#ppd_emul_s">ppd_emul_s</a> ppd_emul_t;
</p>
-<h3 class="typedef"><a name="ppd_file_t">ppd_file_t</a></h3>
-<p class="description">PPD File</p>
-<p class="code">
+ <h3 class="typedef"><a id="ppd_file_t">ppd_file_t</a></h3>
+ <p class="description">PPD File</p>
+ <p class="code">
typedef struct <a href="#ppd_file_s">ppd_file_s</a> ppd_file_t;
</p>
-<h3 class="typedef"><a name="ppd_group_t">ppd_group_t</a></h3>
-<p class="description">Groups</p>
-<p class="code">
+ <h3 class="typedef"><a id="ppd_group_t">ppd_group_t</a></h3>
+ <p class="description">Groups</p>
+ <p class="code">
typedef struct <a href="#ppd_group_s">ppd_group_s</a> ppd_group_t;
</p>
-<h3 class="typedef"><a name="ppd_option_t">ppd_option_t</a></h3>
-<p class="description">Options</p>
-<p class="code">
+ <h3 class="typedef"><a id="ppd_option_t">ppd_option_t</a></h3>
+ <p class="description">Options</p>
+ <p class="code">
typedef struct <a href="#ppd_option_s">ppd_option_s</a> ppd_option_t;
</p>
-<h3 class="typedef"><a name="ppd_profile_t">ppd_profile_t</a></h3>
-<p class="description">sRGB Color Profiles</p>
-<p class="code">
+ <h3 class="typedef"><a id="ppd_profile_t">ppd_profile_t</a></h3>
+ <p class="description">sRGB Color Profiles</p>
+ <p class="code">
typedef struct <a href="#ppd_profile_s">ppd_profile_s</a> ppd_profile_t;
</p>
-<h3 class="typedef"><a name="ppd_section_t">ppd_section_t</a></h3>
-<p class="description">Order dependency sections</p>
-<p class="code">
+ <h3 class="typedef"><a id="ppd_section_t">ppd_section_t</a></h3>
+ <p class="description">Order dependency sections</p>
+ <p class="code">
typedef enum <a href="#ppd_section_e">ppd_section_e</a> ppd_section_t;
</p>
-<h3 class="typedef"><a name="ppd_size_t">ppd_size_t</a></h3>
-<p class="description">Page Sizes</p>
-<p class="code">
+ <h3 class="typedef"><a id="ppd_size_t">ppd_size_t</a></h3>
+ <p class="description">Page Sizes</p>
+ <p class="code">
typedef struct <a href="#ppd_size_s">ppd_size_s</a> ppd_size_t;
</p>
-<h3 class="typedef"><span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span><a name="ppd_status_t">ppd_status_t</a></h3>
-<p class="description">Status Codes </p>
-<p class="code">
+ <h3 class="typedef"><a id="ppd_status_t"><span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span>ppd_status_t</a></h3>
+ <p class="description">Status Codes </p>
+ <p class="code">
typedef enum <a href="#ppd_status_e">ppd_status_e</a> ppd_status_t;
</p>
-<h3 class="typedef"><a name="ppd_ui_t">ppd_ui_t</a></h3>
-<p class="description">UI Types</p>
-<p class="code">
+ <h3 class="typedef"><a id="ppd_ui_t">ppd_ui_t</a></h3>
+ <p class="description">UI Types</p>
+ <p class="code">
typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
</p>
-<h2 class="title"><a name="STRUCTURES">Structures</a></h2>
-<h3 class="struct"><span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span><a name="ppd_attr_s">ppd_attr_s</a></h3>
-<p class="description">PPD Attribute Structure </p>
+ <h2 class="title"><a id="STRUCTURES">Structures</a></h2>
+<h3 class="struct"><span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span><a id="ppd_attr_s">ppd_attr_s</a></h3>
+ <p class="description">PPD Attribute Structure </p>
<p class="code">struct ppd_attr_s {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char name[PPD_MAX_NAME];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char spec[PPD_MAX_NAME];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char text[PPD_MAX_TEXT];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *value;<br>
+&#160;&#160;&#160;&#160;char name[PPD_MAX_NAME];<br>
+&#160;&#160;&#160;&#160;char spec[PPD_MAX_NAME];<br>
+&#160;&#160;&#160;&#160;char text[PPD_MAX_TEXT];<br>
+&#160;&#160;&#160;&#160;char *value;<br>
};</p>
<h4 class="members">Members</h4>
-<dl>
-<dt>name[PPD_MAX_NAME] </dt>
-<dd class="description">Name of attribute (cupsXYZ)</dd>
-<dt>spec[PPD_MAX_NAME] </dt>
-<dd class="description">Specifier string, if any</dd>
-<dt>text[PPD_MAX_TEXT] </dt>
-<dd class="description">Human-readable text, if any</dd>
-<dt>value </dt>
-<dd class="description">Value string</dd>
-</dl>
-<h3 class="struct"><a name="ppd_choice_s">ppd_choice_s</a></h3>
-<p class="description">Option choices</p>
+<table class="list"><tbody>
+<tr><th>name[PPD_MAX_NAME] </th>
+ <td class="description">Name of attribute (cupsXYZ)</td></tr>
+<tr><th>spec[PPD_MAX_NAME] </th>
+ <td class="description">Specifier string, if any</td></tr>
+<tr><th>text[PPD_MAX_TEXT] </th>
+ <td class="description">Human-readable text, if any</td></tr>
+<tr><th>value </th>
+ <td class="description">Value string</td></tr>
+</tbody></table>
+<h3 class="struct"><a id="ppd_choice_s">ppd_choice_s</a></h3>
+ <p class="description">Option choices</p>
<p class="code">struct ppd_choice_s {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char choice[PPD_MAX_NAME];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *code;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char marked;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_option_t">ppd_option_t</a> *option;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char text[PPD_MAX_TEXT];<br>
+&#160;&#160;&#160;&#160;char choice[PPD_MAX_NAME];<br>
+&#160;&#160;&#160;&#160;char *code;<br>
+&#160;&#160;&#160;&#160;char marked;<br>
+&#160;&#160;&#160;&#160;<a href="#ppd_option_t">ppd_option_t</a> *option;<br>
+&#160;&#160;&#160;&#160;char text[PPD_MAX_TEXT];<br>
};</p>
<h4 class="members">Members</h4>
-<dl>
-<dt>choice[PPD_MAX_NAME] </dt>
-<dd class="description">Computer-readable option name</dd>
-<dt>code </dt>
-<dd class="description">Code to send for this option</dd>
-<dt>marked </dt>
-<dd class="description">0 if not selected, 1 otherwise</dd>
-<dt>option </dt>
-<dd class="description">Pointer to parent option structure</dd>
-<dt>text[PPD_MAX_TEXT] </dt>
-<dd class="description">Human-readable option name</dd>
-</dl>
-<h3 class="struct"><a name="ppd_const_s">ppd_const_s</a></h3>
-<p class="description">Constraints</p>
+<table class="list"><tbody>
+<tr><th>choice[PPD_MAX_NAME] </th>
+ <td class="description">Computer-readable option name</td></tr>
+<tr><th>code </th>
+ <td class="description">Code to send for this option</td></tr>
+<tr><th>marked </th>
+ <td class="description">0 if not selected, 1 otherwise</td></tr>
+<tr><th>option </th>
+ <td class="description">Pointer to parent option structure</td></tr>
+<tr><th>text[PPD_MAX_TEXT] </th>
+ <td class="description">Human-readable option name</td></tr>
+</tbody></table>
+<h3 class="struct"><a id="ppd_const_s">ppd_const_s</a></h3>
+ <p class="description">Constraints</p>
<p class="code">struct ppd_const_s {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char choice1[PPD_MAX_NAME];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char choice2[PPD_MAX_NAME];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char option1[PPD_MAX_NAME];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char option2[PPD_MAX_NAME];<br>
+&#160;&#160;&#160;&#160;char choice1[PPD_MAX_NAME];<br>
+&#160;&#160;&#160;&#160;char choice2[PPD_MAX_NAME];<br>
+&#160;&#160;&#160;&#160;char option1[PPD_MAX_NAME];<br>
+&#160;&#160;&#160;&#160;char option2[PPD_MAX_NAME];<br>
};</p>
<h4 class="members">Members</h4>
-<dl>
-<dt>choice1[PPD_MAX_NAME] </dt>
-<dd class="description">First option/choice (blank for all)</dd>
-<dt>choice2[PPD_MAX_NAME] </dt>
-<dd class="description">Second option/choice (blank for all)</dd>
-<dt>option1[PPD_MAX_NAME] </dt>
-<dd class="description">First keyword</dd>
-<dt>option2[PPD_MAX_NAME] </dt>
-<dd class="description">Second keyword</dd>
-</dl>
-<h3 class="struct"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="ppd_coption_s">ppd_coption_s</a></h3>
-<p class="description">Custom Option </p>
+<table class="list"><tbody>
+<tr><th>choice1[PPD_MAX_NAME] </th>
+ <td class="description">First option/choice (blank for all)</td></tr>
+<tr><th>choice2[PPD_MAX_NAME] </th>
+ <td class="description">Second option/choice (blank for all)</td></tr>
+<tr><th>option1[PPD_MAX_NAME] </th>
+ <td class="description">First keyword</td></tr>
+<tr><th>option2[PPD_MAX_NAME] </th>
+ <td class="description">Second keyword</td></tr>
+</tbody></table>
+<h3 class="struct"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ppd_coption_s">ppd_coption_s</a></h3>
+ <p class="description">Custom Option </p>
<p class="code">struct ppd_coption_s {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char keyword[PPD_MAX_NAME];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int marked;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_option_t">ppd_option_t</a> *option;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;cups_array_t *params;<br>
+&#160;&#160;&#160;&#160;char keyword[PPD_MAX_NAME];<br>
+&#160;&#160;&#160;&#160;int marked;<br>
+&#160;&#160;&#160;&#160;<a href="#ppd_option_t">ppd_option_t</a> *option;<br>
+&#160;&#160;&#160;&#160;cups_array_t *params;<br>
};</p>
<h4 class="members">Members</h4>
-<dl>
-<dt>keyword[PPD_MAX_NAME] </dt>
-<dd class="description">Name of option that is being extended...</dd>
-<dt>marked </dt>
-<dd class="description">Extended option is marked</dd>
-<dt>option </dt>
-<dd class="description">Option that is being extended...</dd>
-<dt>params </dt>
-<dd class="description">Parameters</dd>
-</dl>
-<h3 class="struct"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="ppd_cparam_s">ppd_cparam_s</a></h3>
-<p class="description">Custom Parameter </p>
+<table class="list"><tbody>
+<tr><th>keyword[PPD_MAX_NAME] </th>
+ <td class="description">Name of option that is being extended...</td></tr>
+<tr><th>marked </th>
+ <td class="description">Extended option is marked</td></tr>
+<tr><th>option </th>
+ <td class="description">Option that is being extended...</td></tr>
+<tr><th>params </th>
+ <td class="description">Parameters</td></tr>
+</tbody></table>
+<h3 class="struct"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ppd_cparam_s">ppd_cparam_s</a></h3>
+ <p class="description">Custom Parameter </p>
<p class="code">struct ppd_cparam_s {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_cpvalue_t">ppd_cpvalue_t</a> current;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_cplimit_t">ppd_cplimit_t</a> minimum, maximum;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char name[PPD_MAX_NAME];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int order;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char text[PPD_MAX_TEXT];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_cptype_t">ppd_cptype_t</a> type;<br>
+&#160;&#160;&#160;&#160;<a href="#ppd_cpvalue_t">ppd_cpvalue_t</a> current;<br>
+&#160;&#160;&#160;&#160;<a href="#ppd_cplimit_t">ppd_cplimit_t</a> minimum, maximum;<br>
+&#160;&#160;&#160;&#160;char name[PPD_MAX_NAME];<br>
+&#160;&#160;&#160;&#160;int order;<br>
+&#160;&#160;&#160;&#160;char text[PPD_MAX_TEXT];<br>
+&#160;&#160;&#160;&#160;<a href="#ppd_cptype_t">ppd_cptype_t</a> type;<br>
};</p>
<h4 class="members">Members</h4>
-<dl>
-<dt>current </dt>
-<dd class="description">Current value</dd>
-<dt>maximum </dt>
-<dd class="description">Maximum value</dd>
-<dt>name[PPD_MAX_NAME] </dt>
-<dd class="description">Parameter name</dd>
-<dt>order </dt>
-<dd class="description">Order (0 to N)</dd>
-<dt>text[PPD_MAX_TEXT] </dt>
-<dd class="description">Human-readable text</dd>
-<dt>type </dt>
-<dd class="description">Parameter type</dd>
-</dl>
-<h3 class="struct"><a name="ppd_emul_s">ppd_emul_s</a></h3>
-<p class="description">Emulators</p>
+<table class="list"><tbody>
+<tr><th>current </th>
+ <td class="description">Current value</td></tr>
+<tr><th>maximum </th>
+ <td class="description">Maximum value</td></tr>
+<tr><th>name[PPD_MAX_NAME] </th>
+ <td class="description">Parameter name</td></tr>
+<tr><th>order </th>
+ <td class="description">Order (0 to N)</td></tr>
+<tr><th>text[PPD_MAX_TEXT] </th>
+ <td class="description">Human-readable text</td></tr>
+<tr><th>type </th>
+ <td class="description">Parameter type</td></tr>
+</tbody></table>
+<h3 class="struct"><a id="ppd_emul_s">ppd_emul_s</a></h3>
+ <p class="description">Emulators</p>
<p class="code">struct ppd_emul_s {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char name[PPD_MAX_NAME];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *start;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *stop;<br>
+&#160;&#160;&#160;&#160;char name[PPD_MAX_NAME];<br>
+&#160;&#160;&#160;&#160;char *start;<br>
+&#160;&#160;&#160;&#160;char *stop;<br>
};</p>
<h4 class="members">Members</h4>
-<dl>
-<dt>name[PPD_MAX_NAME] </dt>
-<dd class="description">Emulator name</dd>
-<dt>start </dt>
-<dd class="description">Code to switch to this emulation</dd>
-<dt>stop </dt>
-<dd class="description">Code to stop this emulation</dd>
-</dl>
-<h3 class="struct"><a name="ppd_file_s">ppd_file_s</a></h3>
-<p class="description">PPD File</p>
+<table class="list"><tbody>
+<tr><th>name[PPD_MAX_NAME] </th>
+ <td class="description">Emulator name</td></tr>
+<tr><th>start </th>
+ <td class="description">Code to switch to this emulation</td></tr>
+<tr><th>stop </th>
+ <td class="description">Code to stop this emulation</td></tr>
+</tbody></table>
+<h3 class="struct"><a id="ppd_file_s">ppd_file_s</a></h3>
+ <p class="description">PPD File</p>
<p class="code">struct ppd_file_s {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int accurate_screens;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int color_device;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_cs_t">ppd_cs_t</a> colorspace;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_const_t">ppd_const_t</a> *consts;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int contone_only;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;float custom_margins[4];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;float custom_max[2];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;float custom_min[2];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_emul_t">ppd_emul_t</a> *emulations;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char **filters;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int flip_duplex;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char **fonts;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_group_t">ppd_group_t</a> *groups;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *jcl_begin;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *jcl_end;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *jcl_ps;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int landscape;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *lang_encoding;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *lang_version;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int language_level;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int manual_copies;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *manufacturer;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int model_number;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *modelname;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *nickname;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_consts;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_emulations;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_filters;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_fonts;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_groups;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_profiles;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_sizes;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *patches;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *pcfilename;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *product;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_profile_t">ppd_profile_t</a> *profiles;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *protocols;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *shortnickname;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_size_t">ppd_size_t</a> *sizes;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int throughput;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *ttrasterizer;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int variable_sizes;<br>
+&#160;&#160;&#160;&#160;int accurate_screens;<br>
+&#160;&#160;&#160;&#160;int color_device;<br>
+&#160;&#160;&#160;&#160;<a href="#ppd_cs_t">ppd_cs_t</a> colorspace;<br>
+&#160;&#160;&#160;&#160;<a href="#ppd_const_t">ppd_const_t</a> *consts;<br>
+&#160;&#160;&#160;&#160;int contone_only;<br>
+&#160;&#160;&#160;&#160;float custom_margins[4];<br>
+&#160;&#160;&#160;&#160;float custom_max[2];<br>
+&#160;&#160;&#160;&#160;float custom_min[2];<br>
+&#160;&#160;&#160;&#160;<a href="#ppd_emul_t">ppd_emul_t</a> *emulations;<br>
+&#160;&#160;&#160;&#160;char **filters;<br>
+&#160;&#160;&#160;&#160;int flip_duplex;<br>
+&#160;&#160;&#160;&#160;char **fonts;<br>
+&#160;&#160;&#160;&#160;<a href="#ppd_group_t">ppd_group_t</a> *groups;<br>
+&#160;&#160;&#160;&#160;char *jcl_begin;<br>
+&#160;&#160;&#160;&#160;char *jcl_end;<br>
+&#160;&#160;&#160;&#160;char *jcl_ps;<br>
+&#160;&#160;&#160;&#160;int landscape;<br>
+&#160;&#160;&#160;&#160;char *lang_encoding;<br>
+&#160;&#160;&#160;&#160;char *lang_version;<br>
+&#160;&#160;&#160;&#160;int language_level;<br>
+&#160;&#160;&#160;&#160;int manual_copies;<br>
+&#160;&#160;&#160;&#160;char *manufacturer;<br>
+&#160;&#160;&#160;&#160;int model_number;<br>
+&#160;&#160;&#160;&#160;char *modelname;<br>
+&#160;&#160;&#160;&#160;char *nickname;<br>
+&#160;&#160;&#160;&#160;int num_consts;<br>
+&#160;&#160;&#160;&#160;int num_emulations;<br>
+&#160;&#160;&#160;&#160;int num_filters;<br>
+&#160;&#160;&#160;&#160;int num_fonts;<br>
+&#160;&#160;&#160;&#160;int num_groups;<br>
+&#160;&#160;&#160;&#160;int num_profiles;<br>
+&#160;&#160;&#160;&#160;int num_sizes;<br>
+&#160;&#160;&#160;&#160;char *patches;<br>
+&#160;&#160;&#160;&#160;char *pcfilename;<br>
+&#160;&#160;&#160;&#160;char *product;<br>
+&#160;&#160;&#160;&#160;<a href="#ppd_profile_t">ppd_profile_t</a> *profiles;<br>
+&#160;&#160;&#160;&#160;char *protocols;<br>
+&#160;&#160;&#160;&#160;char *shortnickname;<br>
+&#160;&#160;&#160;&#160;<a href="#ppd_size_t">ppd_size_t</a> *sizes;<br>
+&#160;&#160;&#160;&#160;int throughput;<br>
+&#160;&#160;&#160;&#160;char *ttrasterizer;<br>
+&#160;&#160;&#160;&#160;int variable_sizes;<br>
};</p>
<h4 class="members">Members</h4>
-<dl>
-<dt>accurate_screens </dt>
-<dd class="description">1 = supports accurate screens, 0 = not</dd>
-<dt>color_device </dt>
-<dd class="description">1 = color device, 0 = grayscale</dd>
-<dt>colorspace </dt>
-<dd class="description">Default colorspace</dd>
-<dt>consts </dt>
-<dd class="description">UI/Non-UI constraints</dd>
-<dt>contone_only </dt>
-<dd class="description">1 = continuous tone only, 0 = not</dd>
-<dt>custom_margins[4] </dt>
-<dd class="description">Margins around page</dd>
-<dt>custom_max[2] </dt>
-<dd class="description">Maximum variable page size</dd>
-<dt>custom_min[2] </dt>
-<dd class="description">Minimum variable page size</dd>
-<dt>emulations </dt>
-<dd class="description">Emulations and the code to invoke them</dd>
-<dt>filters </dt>
-<dd class="description">Filter strings...</dd>
-<dt>flip_duplex <span class="info">&nbsp;DEPRECATED&nbsp;</span></dt>
-<dd class="description">1 = Flip page for back sides </dd>
-<dt>fonts </dt>
-<dd class="description">Pre-loaded fonts</dd>
-<dt>groups </dt>
-<dd class="description">UI groups</dd>
-<dt>jcl_begin </dt>
-<dd class="description">Start JCL commands</dd>
-<dt>jcl_end </dt>
-<dd class="description">End JCL commands</dd>
-<dt>jcl_ps </dt>
-<dd class="description">Enter PostScript interpreter</dd>
-<dt>landscape </dt>
-<dd class="description">-90 or 90</dd>
-<dt>lang_encoding </dt>
-<dd class="description">Language encoding</dd>
-<dt>lang_version </dt>
-<dd class="description">Language version (English, Spanish, etc.)</dd>
-<dt>language_level </dt>
-<dd class="description">Language level of device</dd>
-<dt>manual_copies </dt>
-<dd class="description">1 = Copies done manually, 0 = hardware</dd>
-<dt>manufacturer </dt>
-<dd class="description">Manufacturer name</dd>
-<dt>model_number </dt>
-<dd class="description">Device-specific model number</dd>
-<dt>modelname </dt>
-<dd class="description">Model name (general)</dd>
-<dt>nickname </dt>
-<dd class="description">Nickname (specific)</dd>
-<dt>num_consts </dt>
-<dd class="description">Number of UI/Non-UI constraints</dd>
-<dt>num_emulations </dt>
-<dd class="description">Number of emulations supported</dd>
-<dt>num_filters </dt>
-<dd class="description">Number of filters</dd>
-<dt>num_fonts </dt>
-<dd class="description">Number of pre-loaded fonts</dd>
-<dt>num_groups </dt>
-<dd class="description">Number of UI groups</dd>
-<dt>num_profiles <span class="info">&nbsp;DEPRECATED&nbsp;</span></dt>
-<dd class="description">Number of sRGB color profiles </dd>
-<dt>num_sizes </dt>
-<dd class="description">Number of page sizes</dd>
-<dt>patches </dt>
-<dd class="description">Patch commands to be sent to printer</dd>
-<dt>pcfilename <span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span></dt>
-<dd class="description">PCFileName string </dd>
-<dt>product </dt>
-<dd class="description">Product name (from PS RIP/interpreter)</dd>
-<dt>profiles <span class="info">&nbsp;DEPRECATED&nbsp;</span></dt>
-<dd class="description">sRGB color profiles </dd>
-<dt>protocols <span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span></dt>
-<dd class="description">Protocols (BCP, TBCP) string </dd>
-<dt>shortnickname </dt>
-<dd class="description">Short version of nickname</dd>
-<dt>sizes </dt>
-<dd class="description">Page sizes</dd>
-<dt>throughput </dt>
-<dd class="description">Pages per minute</dd>
-<dt>ttrasterizer </dt>
-<dd class="description">Truetype rasterizer</dd>
-<dt>variable_sizes </dt>
-<dd class="description">1 = supports variable sizes, 0 = doesn't</dd>
-</dl>
-<h3 class="struct"><a name="ppd_group_s">ppd_group_s</a></h3>
-<p class="description">Groups</p>
+<table class="list"><tbody>
+<tr><th>accurate_screens </th>
+ <td class="description">1 = supports accurate screens, 0 = not</td></tr>
+<tr><th>color_device </th>
+ <td class="description">1 = color device, 0 = grayscale</td></tr>
+<tr><th>colorspace </th>
+ <td class="description">Default colorspace</td></tr>
+<tr><th>consts </th>
+ <td class="description">UI/Non-UI constraints</td></tr>
+<tr><th>contone_only </th>
+ <td class="description">1 = continuous tone only, 0 = not</td></tr>
+<tr><th>custom_margins[4] </th>
+ <td class="description">Margins around page</td></tr>
+<tr><th>custom_max[2] </th>
+ <td class="description">Maximum variable page size</td></tr>
+<tr><th>custom_min[2] </th>
+ <td class="description">Minimum variable page size</td></tr>
+<tr><th>emulations </th>
+ <td class="description">Emulations and the code to invoke them</td></tr>
+<tr><th>filters </th>
+ <td class="description">Filter strings...</td></tr>
+<tr><th>flip_duplex <span class="info">&#160;DEPRECATED&#160;</span></th>
+ <td class="description">1 = Flip page for back sides </td></tr>
+<tr><th>fonts </th>
+ <td class="description">Pre-loaded fonts</td></tr>
+<tr><th>groups </th>
+ <td class="description">UI groups</td></tr>
+<tr><th>jcl_begin </th>
+ <td class="description">Start JCL commands</td></tr>
+<tr><th>jcl_end </th>
+ <td class="description">End JCL commands</td></tr>
+<tr><th>jcl_ps </th>
+ <td class="description">Enter PostScript interpreter</td></tr>
+<tr><th>landscape </th>
+ <td class="description">-90 or 90</td></tr>
+<tr><th>lang_encoding </th>
+ <td class="description">Language encoding</td></tr>
+<tr><th>lang_version </th>
+ <td class="description">Language version (English, Spanish, etc.)</td></tr>
+<tr><th>language_level </th>
+ <td class="description">Language level of device</td></tr>
+<tr><th>manual_copies </th>
+ <td class="description">1 = Copies done manually, 0 = hardware</td></tr>
+<tr><th>manufacturer </th>
+ <td class="description">Manufacturer name</td></tr>
+<tr><th>model_number </th>
+ <td class="description">Device-specific model number</td></tr>
+<tr><th>modelname </th>
+ <td class="description">Model name (general)</td></tr>
+<tr><th>nickname </th>
+ <td class="description">Nickname (specific)</td></tr>
+<tr><th>num_consts </th>
+ <td class="description">Number of UI/Non-UI constraints</td></tr>
+<tr><th>num_emulations </th>
+ <td class="description">Number of emulations supported</td></tr>
+<tr><th>num_filters </th>
+ <td class="description">Number of filters</td></tr>
+<tr><th>num_fonts </th>
+ <td class="description">Number of pre-loaded fonts</td></tr>
+<tr><th>num_groups </th>
+ <td class="description">Number of UI groups</td></tr>
+<tr><th>num_profiles <span class="info">&#160;DEPRECATED&#160;</span></th>
+ <td class="description">Number of sRGB color profiles </td></tr>
+<tr><th>num_sizes </th>
+ <td class="description">Number of page sizes</td></tr>
+<tr><th>patches </th>
+ <td class="description">Patch commands to be sent to printer</td></tr>
+<tr><th>pcfilename <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>
+ <td class="description">PCFileName string </td></tr>
+<tr><th>product </th>
+ <td class="description">Product name (from PS RIP/interpreter)</td></tr>
+<tr><th>profiles <span class="info">&#160;DEPRECATED&#160;</span></th>
+ <td class="description">sRGB color profiles </td></tr>
+<tr><th>protocols <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>
+ <td class="description">Protocols (BCP, TBCP) string </td></tr>
+<tr><th>shortnickname </th>
+ <td class="description">Short version of nickname</td></tr>
+<tr><th>sizes </th>
+ <td class="description">Page sizes</td></tr>
+<tr><th>throughput </th>
+ <td class="description">Pages per minute</td></tr>
+<tr><th>ttrasterizer </th>
+ <td class="description">Truetype rasterizer</td></tr>
+<tr><th>variable_sizes </th>
+ <td class="description">1 = supports variable sizes, 0 = doesn't</td></tr>
+</tbody></table>
+<h3 class="struct"><a id="ppd_group_s">ppd_group_s</a></h3>
+ <p class="description">Groups</p>
<p class="code">struct ppd_group_s {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char text[PPD_MAX_TEXT - PPD_MAX_NAME];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char name[PPD_MAX_NAME];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_options;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_subgroups;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_option_t">ppd_option_t</a> *options;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;struct <a href="#ppd_group_s">ppd_group_s</a> *subgroups;<br>
+&#160;&#160;&#160;&#160;char text[PPD_MAX_TEXT - PPD_MAX_NAME];<br>
+&#160;&#160;&#160;&#160;char name[PPD_MAX_NAME];<br>
+&#160;&#160;&#160;&#160;int num_options;<br>
+&#160;&#160;&#160;&#160;int num_subgroups;<br>
+&#160;&#160;&#160;&#160;<a href="#ppd_option_t">ppd_option_t</a> *options;<br>
+&#160;&#160;&#160;&#160;struct <a href="#ppd_group_s">ppd_group_s</a> *subgroups;<br>
};</p>
<h4 class="members">Members</h4>
-<dl>
-<dt>PPD_MAX_NAME] </dt>
-<dd class="description">Human-readable group name</dd>
-<dt>name[PPD_MAX_NAME] <span class="info">&nbsp;CUPS 1.1.18/macOS 10.3&nbsp;</span></dt>
-<dd class="description">Group name </dd>
-<dt>num_options </dt>
-<dd class="description">Number of options</dd>
-<dt>num_subgroups </dt>
-<dd class="description">Number of sub-groups</dd>
-<dt>options </dt>
-<dd class="description">Options</dd>
-<dt>subgroups </dt>
-<dd class="description">Sub-groups (max depth = 1)</dd>
-</dl>
-<h3 class="struct"><a name="ppd_option_s">ppd_option_s</a></h3>
-<p class="description">Options</p>
+<table class="list"><tbody>
+<tr><th>PPD_MAX_NAME] </th>
+ <td class="description">Human-readable group name</td></tr>
+<tr><th>name[PPD_MAX_NAME] <span class="info">&#160;CUPS 1.1.18/macOS 10.3&#160;</span></th>
+ <td class="description">Group name </td></tr>
+<tr><th>num_options </th>
+ <td class="description">Number of options</td></tr>
+<tr><th>num_subgroups </th>
+ <td class="description">Number of sub-groups</td></tr>
+<tr><th>options </th>
+ <td class="description">Options</td></tr>
+<tr><th>subgroups </th>
+ <td class="description">Sub-groups (max depth = 1)</td></tr>
+</tbody></table>
+<h3 class="struct"><a id="ppd_option_s">ppd_option_s</a></h3>
+ <p class="description">Options</p>
<p class="code">struct ppd_option_s {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_choice_t">ppd_choice_t</a> *choices;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char conflicted;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char defchoice[PPD_MAX_NAME];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char keyword[PPD_MAX_NAME];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_choices;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;float order;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_section_t">ppd_section_t</a> section;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char text[PPD_MAX_TEXT];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppd_ui_t">ppd_ui_t</a> ui;<br>
+&#160;&#160;&#160;&#160;<a href="#ppd_choice_t">ppd_choice_t</a> *choices;<br>
+&#160;&#160;&#160;&#160;char conflicted;<br>
+&#160;&#160;&#160;&#160;char defchoice[PPD_MAX_NAME];<br>
+&#160;&#160;&#160;&#160;char keyword[PPD_MAX_NAME];<br>
+&#160;&#160;&#160;&#160;int num_choices;<br>
+&#160;&#160;&#160;&#160;float order;<br>
+&#160;&#160;&#160;&#160;<a href="#ppd_section_t">ppd_section_t</a> section;<br>
+&#160;&#160;&#160;&#160;char text[PPD_MAX_TEXT];<br>
+&#160;&#160;&#160;&#160;<a href="#ppd_ui_t">ppd_ui_t</a> ui;<br>
};</p>
<h4 class="members">Members</h4>
-<dl>
-<dt>choices </dt>
-<dd class="description">Option choices</dd>
-<dt>conflicted </dt>
-<dd class="description">0 if no conflicts exist, 1 otherwise</dd>
-<dt>defchoice[PPD_MAX_NAME] </dt>
-<dd class="description">Default option choice</dd>
-<dt>keyword[PPD_MAX_NAME] </dt>
-<dd class="description">Option keyword name (&quot;PageSize&quot;, etc.)</dd>
-<dt>num_choices </dt>
-<dd class="description">Number of option choices</dd>
-<dt>order </dt>
-<dd class="description">Order number</dd>
-<dt>section </dt>
-<dd class="description">Section for command</dd>
-<dt>text[PPD_MAX_TEXT] </dt>
-<dd class="description">Human-readable text</dd>
-<dt>ui </dt>
-<dd class="description">Type of UI option</dd>
-</dl>
-<h3 class="struct"><a name="ppd_profile_s">ppd_profile_s</a></h3>
-<p class="description">sRGB Color Profiles</p>
+<table class="list"><tbody>
+<tr><th>choices </th>
+ <td class="description">Option choices</td></tr>
+<tr><th>conflicted </th>
+ <td class="description">0 if no conflicts exist, 1 otherwise</td></tr>
+<tr><th>defchoice[PPD_MAX_NAME] </th>
+ <td class="description">Default option choice</td></tr>
+<tr><th>keyword[PPD_MAX_NAME] </th>
+ <td class="description">Option keyword name (&quot;PageSize&quot;, etc.)</td></tr>
+<tr><th>num_choices </th>
+ <td class="description">Number of option choices</td></tr>
+<tr><th>order </th>
+ <td class="description">Order number</td></tr>
+<tr><th>section </th>
+ <td class="description">Section for command</td></tr>
+<tr><th>text[PPD_MAX_TEXT] </th>
+ <td class="description">Human-readable text</td></tr>
+<tr><th>ui </th>
+ <td class="description">Type of UI option</td></tr>
+</tbody></table>
+<h3 class="struct"><a id="ppd_profile_s">ppd_profile_s</a></h3>
+ <p class="description">sRGB Color Profiles</p>
<p class="code">struct ppd_profile_s {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;float density;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;float gamma;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;float matrix[3][3];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char media_type[PPD_MAX_NAME];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char resolution[PPD_MAX_NAME];<br>
+&#160;&#160;&#160;&#160;float density;<br>
+&#160;&#160;&#160;&#160;float gamma;<br>
+&#160;&#160;&#160;&#160;float matrix[3][3];<br>
+&#160;&#160;&#160;&#160;char media_type[PPD_MAX_NAME];<br>
+&#160;&#160;&#160;&#160;char resolution[PPD_MAX_NAME];<br>
};</p>
<h4 class="members">Members</h4>
-<dl>
-<dt>density </dt>
-<dd class="description">Ink density to use</dd>
-<dt>gamma </dt>
-<dd class="description">Gamma correction to use</dd>
-<dt>matrix[3][3] </dt>
-<dd class="description">Transform matrix</dd>
-<dt>media_type[PPD_MAX_NAME] </dt>
-<dd class="description">Media type or &quot;-&quot;</dd>
-<dt>resolution[PPD_MAX_NAME] </dt>
-<dd class="description">Resolution or &quot;-&quot;</dd>
-</dl>
-<h3 class="struct"><a name="ppd_size_s">ppd_size_s</a></h3>
-<p class="description">Page Sizes</p>
+<table class="list"><tbody>
+<tr><th>density </th>
+ <td class="description">Ink density to use</td></tr>
+<tr><th>gamma </th>
+ <td class="description">Gamma correction to use</td></tr>
+<tr><th>matrix[3][3] </th>
+ <td class="description">Transform matrix</td></tr>
+<tr><th>media_type[PPD_MAX_NAME] </th>
+ <td class="description">Media type or &quot;-&quot;</td></tr>
+<tr><th>resolution[PPD_MAX_NAME] </th>
+ <td class="description">Resolution or &quot;-&quot;</td></tr>
+</tbody></table>
+<h3 class="struct"><a id="ppd_size_s">ppd_size_s</a></h3>
+ <p class="description">Page Sizes</p>
<p class="code">struct ppd_size_s {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;float bottom;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;float left;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;float length;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int marked;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char name[PPD_MAX_NAME];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;float right;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;float top;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;float width;<br>
+&#160;&#160;&#160;&#160;float bottom;<br>
+&#160;&#160;&#160;&#160;float left;<br>
+&#160;&#160;&#160;&#160;float length;<br>
+&#160;&#160;&#160;&#160;int marked;<br>
+&#160;&#160;&#160;&#160;char name[PPD_MAX_NAME];<br>
+&#160;&#160;&#160;&#160;float right;<br>
+&#160;&#160;&#160;&#160;float top;<br>
+&#160;&#160;&#160;&#160;float width;<br>
};</p>
<h4 class="members">Members</h4>
-<dl>
-<dt>bottom </dt>
-<dd class="description">Bottom printable margin in points</dd>
-<dt>left </dt>
-<dd class="description">Left printable margin in points</dd>
-<dt>length </dt>
-<dd class="description">Length of media in points</dd>
-<dt>marked </dt>
-<dd class="description">Page size selected?</dd>
-<dt>name[PPD_MAX_NAME] </dt>
-<dd class="description">Media size option</dd>
-<dt>right </dt>
-<dd class="description">Right printable margin in points</dd>
-<dt>top </dt>
-<dd class="description">Top printable margin in points</dd>
-<dt>width </dt>
-<dd class="description">Width of media in points</dd>
-</dl>
-<h2 class="title"><a name="UNIONS">Unions</a></h2>
-<h3 class="union"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="ppd_cplimit_u">ppd_cplimit_u</a></h3>
-<p class="description">Custom Parameter Limit </p>
+<table class="list"><tbody>
+<tr><th>bottom </th>
+ <td class="description">Bottom printable margin in points</td></tr>
+<tr><th>left </th>
+ <td class="description">Left printable margin in points</td></tr>
+<tr><th>length </th>
+ <td class="description">Length of media in points</td></tr>
+<tr><th>marked </th>
+ <td class="description">Page size selected?</td></tr>
+<tr><th>name[PPD_MAX_NAME] </th>
+ <td class="description">Media size option</td></tr>
+<tr><th>right </th>
+ <td class="description">Right printable margin in points</td></tr>
+<tr><th>top </th>
+ <td class="description">Top printable margin in points</td></tr>
+<tr><th>width </th>
+ <td class="description">Width of media in points</td></tr>
+</tbody></table>
+ <h2 class="title"><a id="UNIONS">Unions</a></h2>
+<h3 class="union"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ppd_cplimit_u">ppd_cplimit_u</a></h3>
+ <p class="description">Custom Parameter Limit </p>
<p class="code">union ppd_cplimit_u {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;float custom_curve;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int custom_int;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;float custom_invcurve;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int custom_passcode;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int custom_password;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;float custom_points;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;float custom_real;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int custom_string;<br>
+&#160;&#160;&#160;&#160;float custom_curve;<br>
+&#160;&#160;&#160;&#160;int custom_int;<br>
+&#160;&#160;&#160;&#160;float custom_invcurve;<br>
+&#160;&#160;&#160;&#160;int custom_passcode;<br>
+&#160;&#160;&#160;&#160;int custom_password;<br>
+&#160;&#160;&#160;&#160;float custom_points;<br>
+&#160;&#160;&#160;&#160;float custom_real;<br>
+&#160;&#160;&#160;&#160;int custom_string;<br>
};</p>
<h4 class="members">Members</h4>
-<dl>
-<dt>custom_curve </dt>
-<dd class="description">Gamma value</dd>
-<dt>custom_int </dt>
-<dd class="description">Integer value</dd>
-<dt>custom_invcurve </dt>
-<dd class="description">Gamma value</dd>
-<dt>custom_passcode </dt>
-<dd class="description">Passcode length</dd>
-<dt>custom_password </dt>
-<dd class="description">Password length</dd>
-<dt>custom_points </dt>
-<dd class="description">Measurement value</dd>
-<dt>custom_real </dt>
-<dd class="description">Real value</dd>
-<dt>custom_string </dt>
-<dd class="description">String length</dd>
-</dl>
-<h3 class="union"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="ppd_cpvalue_u">ppd_cpvalue_u</a></h3>
-<p class="description">Custom Parameter Value </p>
+<table class="list"><tbody>
+<tr><th>custom_curve </th>
+ <td class="description">Gamma value</td></tr>
+<tr><th>custom_int </th>
+ <td class="description">Integer value</td></tr>
+<tr><th>custom_invcurve </th>
+ <td class="description">Gamma value</td></tr>
+<tr><th>custom_passcode </th>
+ <td class="description">Passcode length</td></tr>
+<tr><th>custom_password </th>
+ <td class="description">Password length</td></tr>
+<tr><th>custom_points </th>
+ <td class="description">Measurement value</td></tr>
+<tr><th>custom_real </th>
+ <td class="description">Real value</td></tr>
+<tr><th>custom_string </th>
+ <td class="description">String length</td></tr>
+</tbody></table>
+<h3 class="union"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ppd_cpvalue_u">ppd_cpvalue_u</a></h3>
+ <p class="description">Custom Parameter Value </p>
<p class="code">union ppd_cpvalue_u {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;float custom_curve;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int custom_int;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;float custom_invcurve;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *custom_passcode;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *custom_password;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;float custom_points;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;float custom_real;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char *custom_string;<br>
+&#160;&#160;&#160;&#160;float custom_curve;<br>
+&#160;&#160;&#160;&#160;int custom_int;<br>
+&#160;&#160;&#160;&#160;float custom_invcurve;<br>
+&#160;&#160;&#160;&#160;char *custom_passcode;<br>
+&#160;&#160;&#160;&#160;char *custom_password;<br>
+&#160;&#160;&#160;&#160;float custom_points;<br>
+&#160;&#160;&#160;&#160;float custom_real;<br>
+&#160;&#160;&#160;&#160;char *custom_string;<br>
};</p>
<h4 class="members">Members</h4>
-<dl>
-<dt>custom_curve </dt>
-<dd class="description">Gamma value</dd>
-<dt>custom_int </dt>
-<dd class="description">Integer value</dd>
-<dt>custom_invcurve </dt>
-<dd class="description">Gamma value</dd>
-<dt>custom_passcode </dt>
-<dd class="description">Passcode value</dd>
-<dt>custom_password </dt>
-<dd class="description">Password value</dd>
-<dt>custom_points </dt>
-<dd class="description">Measurement value</dd>
-<dt>custom_real </dt>
-<dd class="description">Real value</dd>
-<dt>custom_string </dt>
-<dd class="description">String value</dd>
-</dl>
-<h2 class="title"><a name="ENUMERATIONS">Constants</a></h2>
-<h3 class="enumeration"><span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span><a name="ppd_conform_e">ppd_conform_e</a></h3>
-<p class="description">Conformance Levels </p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>PPD_CONFORM_RELAXED </dt>
-<dd class="description">Relax whitespace and control char</dd>
-<dt>PPD_CONFORM_STRICT </dt>
-<dd class="description">Require strict conformance</dd>
-</dl>
-<h3 class="enumeration"><a name="ppd_cs_e">ppd_cs_e</a></h3>
-<p class="description">Colorspaces</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>PPD_CS_CMY </dt>
-<dd class="description">CMY colorspace</dd>
-<dt>PPD_CS_CMYK </dt>
-<dd class="description">CMYK colorspace</dd>
-<dt>PPD_CS_GRAY </dt>
-<dd class="description">Grayscale colorspace</dd>
-<dt>PPD_CS_N </dt>
-<dd class="description">DeviceN colorspace</dd>
-<dt>PPD_CS_RGB </dt>
-<dd class="description">RGB colorspace</dd>
-<dt>PPD_CS_RGBK </dt>
-<dd class="description">RGBK (K = gray) colorspace</dd>
-</dl>
-<h3 class="enumeration"><a name="ppd_section_e">ppd_section_e</a></h3>
-<p class="description">Order dependency sections</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>PPD_ORDER_ANY </dt>
-<dd class="description">Option code can be anywhere in the file</dd>
-<dt>PPD_ORDER_DOCUMENT </dt>
-<dd class="description">... must be in the DocumentSetup section</dd>
-<dt>PPD_ORDER_EXIT </dt>
-<dd class="description">... must be sent prior to the document</dd>
-<dt>PPD_ORDER_JCL </dt>
-<dd class="description">... must be sent as a JCL command</dd>
-<dt>PPD_ORDER_PAGE </dt>
-<dd class="description">... must be in the PageSetup section</dd>
-<dt>PPD_ORDER_PROLOG </dt>
-<dd class="description">... must be in the Prolog section</dd>
-</dl>
-<h3 class="enumeration"><span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span><a name="ppd_status_e">ppd_status_e</a></h3>
-<p class="description">Status Codes </p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>PPD_ALLOC_ERROR </dt>
-<dd class="description">Memory allocation error</dd>
-<dt>PPD_BAD_CUSTOM_PARAM </dt>
-<dd class="description">Bad custom parameter</dd>
-<dt>PPD_BAD_OPEN_GROUP </dt>
-<dd class="description">Bad OpenGroup</dd>
-<dt>PPD_BAD_OPEN_UI </dt>
-<dd class="description">Bad OpenUI/JCLOpenUI</dd>
-<dt>PPD_BAD_ORDER_DEPENDENCY </dt>
-<dd class="description">Bad OrderDependency</dd>
-<dt>PPD_BAD_UI_CONSTRAINTS </dt>
-<dd class="description">Bad UIConstraints</dd>
-<dt>PPD_BAD_VALUE </dt>
-<dd class="description">Bad value string</dd>
-<dt>PPD_FILE_OPEN_ERROR </dt>
-<dd class="description">Unable to open PPD file</dd>
-<dt>PPD_ILLEGAL_CHARACTER </dt>
-<dd class="description">Illegal control character</dd>
-<dt>PPD_ILLEGAL_MAIN_KEYWORD </dt>
-<dd class="description">Illegal main keyword string</dd>
-<dt>PPD_ILLEGAL_OPTION_KEYWORD </dt>
-<dd class="description">Illegal option keyword string</dd>
-<dt>PPD_ILLEGAL_TRANSLATION </dt>
-<dd class="description">Illegal translation string</dd>
-<dt>PPD_ILLEGAL_WHITESPACE </dt>
-<dd class="description">Illegal whitespace character</dd>
-<dt>PPD_INTERNAL_ERROR </dt>
-<dd class="description">Internal error</dd>
-<dt>PPD_LINE_TOO_LONG </dt>
-<dd class="description">Line longer than 255 chars</dd>
-<dt>PPD_MISSING_ASTERISK </dt>
-<dd class="description">Missing asterisk in column 0</dd>
-<dt>PPD_MISSING_CLOSE_GROUP </dt>
-<dd class="description">Missing CloseGroup</dd>
-<dt>PPD_MISSING_OPTION_KEYWORD </dt>
-<dd class="description">Missing option keyword</dd>
-<dt>PPD_MISSING_PPDADOBE4 </dt>
-<dd class="description">Missing PPD-Adobe-4.x header</dd>
-<dt>PPD_MISSING_VALUE </dt>
-<dd class="description">Missing value string</dd>
-<dt>PPD_NESTED_OPEN_GROUP </dt>
-<dd class="description">OpenGroup without a CloseGroup first</dd>
-<dt>PPD_NESTED_OPEN_UI </dt>
-<dd class="description">OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first</dd>
-<dt>PPD_NULL_FILE </dt>
-<dd class="description">NULL PPD file pointer</dd>
-<dt>PPD_OK </dt>
-<dd class="description">OK</dd>
-</dl>
-<h3 class="enumeration"><a name="ppd_ui_e">ppd_ui_e</a></h3>
-<p class="description">UI Types</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>PPD_UI_BOOLEAN </dt>
-<dd class="description">True or False option</dd>
-<dt>PPD_UI_PICKMANY </dt>
-<dd class="description">Pick zero or more from a list</dd>
-<dt>PPD_UI_PICKONE </dt>
-<dd class="description">Pick one from a list</dd>
-</dl>
-</div>
-</body>
+<table class="list"><tbody>
+<tr><th>custom_curve </th>
+ <td class="description">Gamma value</td></tr>
+<tr><th>custom_int </th>
+ <td class="description">Integer value</td></tr>
+<tr><th>custom_invcurve </th>
+ <td class="description">Gamma value</td></tr>
+<tr><th>custom_passcode </th>
+ <td class="description">Passcode value</td></tr>
+<tr><th>custom_password </th>
+ <td class="description">Password value</td></tr>
+<tr><th>custom_points </th>
+ <td class="description">Measurement value</td></tr>
+<tr><th>custom_real </th>
+ <td class="description">Real value</td></tr>
+<tr><th>custom_string </th>
+ <td class="description">String value</td></tr>
+</tbody></table>
+ <h2 class="title"><a id="ENUMERATIONS">Constants</a></h2>
+ <h3 class="enumeration"><a id="ppd_conform_e"><span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span>ppd_conform_e</a></h3>
+ <p class="description">Conformance Levels </p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>PPD_CONFORM_RELAXED </th> <td class="description">Relax whitespace and control char</td></tr>
+ <tr><th>PPD_CONFORM_STRICT </th> <td class="description">Require strict conformance</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="ppd_cs_e">ppd_cs_e</a></h3>
+ <p class="description">Colorspaces</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>PPD_CS_CMY </th> <td class="description">CMY colorspace</td></tr>
+ <tr><th>PPD_CS_CMYK </th> <td class="description">CMYK colorspace</td></tr>
+ <tr><th>PPD_CS_GRAY </th> <td class="description">Grayscale colorspace</td></tr>
+ <tr><th>PPD_CS_N </th> <td class="description">DeviceN colorspace</td></tr>
+ <tr><th>PPD_CS_RGB </th> <td class="description">RGB colorspace</td></tr>
+ <tr><th>PPD_CS_RGBK </th> <td class="description">RGBK (K = gray) colorspace</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="ppd_section_e">ppd_section_e</a></h3>
+ <p class="description">Order dependency sections</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>PPD_ORDER_ANY </th> <td class="description">Option code can be anywhere in the file</td></tr>
+ <tr><th>PPD_ORDER_DOCUMENT </th> <td class="description">... must be in the DocumentSetup section</td></tr>
+ <tr><th>PPD_ORDER_EXIT </th> <td class="description">... must be sent prior to the document</td></tr>
+ <tr><th>PPD_ORDER_JCL </th> <td class="description">... must be sent as a JCL command</td></tr>
+ <tr><th>PPD_ORDER_PAGE </th> <td class="description">... must be in the PageSetup section</td></tr>
+ <tr><th>PPD_ORDER_PROLOG </th> <td class="description">... must be in the Prolog section</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="ppd_status_e"><span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span>ppd_status_e</a></h3>
+ <p class="description">Status Codes </p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>PPD_ALLOC_ERROR </th> <td class="description">Memory allocation error</td></tr>
+ <tr><th>PPD_BAD_CUSTOM_PARAM </th> <td class="description">Bad custom parameter</td></tr>
+ <tr><th>PPD_BAD_OPEN_GROUP </th> <td class="description">Bad OpenGroup</td></tr>
+ <tr><th>PPD_BAD_OPEN_UI </th> <td class="description">Bad OpenUI/JCLOpenUI</td></tr>
+ <tr><th>PPD_BAD_ORDER_DEPENDENCY </th> <td class="description">Bad OrderDependency</td></tr>
+ <tr><th>PPD_BAD_UI_CONSTRAINTS </th> <td class="description">Bad UIConstraints</td></tr>
+ <tr><th>PPD_BAD_VALUE </th> <td class="description">Bad value string</td></tr>
+ <tr><th>PPD_FILE_OPEN_ERROR </th> <td class="description">Unable to open PPD file</td></tr>
+ <tr><th>PPD_ILLEGAL_CHARACTER </th> <td class="description">Illegal control character</td></tr>
+ <tr><th>PPD_ILLEGAL_MAIN_KEYWORD </th> <td class="description">Illegal main keyword string</td></tr>
+ <tr><th>PPD_ILLEGAL_OPTION_KEYWORD </th> <td class="description">Illegal option keyword string</td></tr>
+ <tr><th>PPD_ILLEGAL_TRANSLATION </th> <td class="description">Illegal translation string</td></tr>
+ <tr><th>PPD_ILLEGAL_WHITESPACE </th> <td class="description">Illegal whitespace character</td></tr>
+ <tr><th>PPD_INTERNAL_ERROR </th> <td class="description">Internal error</td></tr>
+ <tr><th>PPD_LINE_TOO_LONG </th> <td class="description">Line longer than 255 chars</td></tr>
+ <tr><th>PPD_MISSING_ASTERISK </th> <td class="description">Missing asterisk in column 0</td></tr>
+ <tr><th>PPD_MISSING_CLOSE_GROUP </th> <td class="description">Missing CloseGroup</td></tr>
+ <tr><th>PPD_MISSING_OPTION_KEYWORD </th> <td class="description">Missing option keyword</td></tr>
+ <tr><th>PPD_MISSING_PPDADOBE4 </th> <td class="description">Missing PPD-Adobe-4.x header</td></tr>
+ <tr><th>PPD_MISSING_VALUE </th> <td class="description">Missing value string</td></tr>
+ <tr><th>PPD_NESTED_OPEN_GROUP </th> <td class="description">OpenGroup without a CloseGroup first</td></tr>
+ <tr><th>PPD_NESTED_OPEN_UI </th> <td class="description">OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first</td></tr>
+ <tr><th>PPD_NULL_FILE </th> <td class="description">NULL PPD file pointer</td></tr>
+ <tr><th>PPD_OK </th> <td class="description">OK</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="ppd_ui_e">ppd_ui_e</a></h3>
+ <p class="description">UI Types</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>PPD_UI_BOOLEAN </th> <td class="description">True or False option</td></tr>
+ <tr><th>PPD_UI_PICKMANY </th> <td class="description">Pick zero or more from a list</td></tr>
+ <tr><th>PPD_UI_PICKONE </th> <td class="description">Pick one from a list</td></tr>
+</tbody></table>
+ </div>
+ </body>
</html>
diff --git a/doc/help/api-raster.html b/doc/help/api-raster.html
index 00617be..39b91da 100644
--- a/doc/help/api-raster.html
+++ b/doc/help/api-raster.html
@@ -1,12 +1,15 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!doctype html>
<html>
<!-- SECTION: Programming -->
-<head>
- <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">
-<style type="text/css"><!--
+ <head>
+ <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.11">
+ <meta name="author" content="Unknown">
+ <meta name="copyright" content="Unknown">
+ <meta name="version" content="0.0">
+ <style type="text/css"><!--
BODY {
font-family: lucida grande, geneva, helvetica, arial, sans-serif;
}
@@ -349,9 +352,8 @@ div.contents ul.subcontents li {
text-indent: -1em;
}
--></style>
-</head>
-<body>
-<div class='body'>
+ </head>
+ <body>
<!--
Raster API documentation for CUPS.
@@ -387,63 +389,62 @@ div.contents ul.subcontents li {
</tr>
</tbody>
</table></div>
-<h2 class="title">Contents</h2>
-<ul class="contents">
-<li><a href="#OVERVIEW">Overview</a></li>
-<li><a href="#TASKS">Functions by Task</a><ul class="subcontents">
- <li><a href="#OPENCLOSE">Opening and Closing Raster Streams</a></li>
- <li><a href="#READING">Reading Raster Streams</a></li>
- <li><a href="#WRITING">Writing Raster Streams</a></li>
-</ul></li>
-<li><a href="#FUNCTIONS">Functions</a><ul class="code">
- <li><a href="#cupsRasterClose" title="Close a raster stream.">cupsRasterClose</a></li>
- <li><a href="#cupsRasterInitPWGHeader" title="Initialize a page header for PWG Raster output.">cupsRasterInitPWGHeader</a></li>
- <li><a href="#cupsRasterInterpretPPD" title="Interpret PPD commands to create a page header.">cupsRasterInterpretPPD</a></li>
- <li><a href="#cupsRasterOpen" title="Open a raster stream using a file descriptor.">cupsRasterOpen</a></li>
- <li><a href="#cupsRasterOpenIO" title="Open a raster stream using a callback function.">cupsRasterOpenIO</a></li>
- <li><a href="#cupsRasterReadHeader" title="Read a raster page header and store it in a
-version 1 page header structure.">cupsRasterReadHeader</a></li>
- <li><a href="#cupsRasterReadHeader2" title="Read a raster page header and store it in a
-version 2 page header structure.">cupsRasterReadHeader2</a></li>
- <li><a href="#cupsRasterReadPixels" title="Read raster pixels.">cupsRasterReadPixels</a></li>
- <li><a href="#cupsRasterWriteHeader" title="Write a raster page header from a version 1 page
-header structure.">cupsRasterWriteHeader</a></li>
- <li><a href="#cupsRasterWriteHeader2" title="Write a raster page header from a version 2
-page header structure.">cupsRasterWriteHeader2</a></li>
- <li><a href="#cupsRasterWritePixels" title="Write raster pixels.">cupsRasterWritePixels</a></li>
-</ul></li>
-<li><a href="#TYPES">Data Types</a><ul class="code">
- <li><a href="#cups_adv_t" title="AdvanceMedia attribute values">cups_adv_t</a></li>
- <li><a href="#cups_bool_t" title="Boolean type">cups_bool_t</a></li>
- <li><a href="#cups_cspace_t" title="cupsColorSpace attribute values">cups_cspace_t</a></li>
- <li><a href="#cups_cut_t" title="CutMedia attribute values">cups_cut_t</a></li>
- <li><a href="#cups_edge_t" title="LeadingEdge attribute values">cups_edge_t</a></li>
- <li><a href="#cups_interpret_cb_t" title="cupsRasterInterpretPPD callback function">cups_interpret_cb_t</a></li>
- <li><a href="#cups_jog_t" title="Jog attribute values">cups_jog_t</a></li>
- <li><a href="#cups_mode_t" title="cupsRasterOpen modes">cups_mode_t</a></li>
- <li><a href="#cups_order_t" title="cupsColorOrder attribute values">cups_order_t</a></li>
- <li><a href="#cups_orient_t" title="Orientation attribute values">cups_orient_t</a></li>
- <li><a href="#cups_page_header2_t" title="Version 2 page header ">cups_page_header2_t</a></li>
- <li><a href="#cups_page_header_t" title="Version 1 page header ">cups_page_header_t</a></li>
- <li><a href="#cups_raster_iocb_t" title="cupsRasterOpenIO callback function">cups_raster_iocb_t</a></li>
- <li><a href="#cups_raster_t" title="Raster stream data">cups_raster_t</a></li>
-</ul></li>
-<li><a href="#STRUCTURES">Structures</a><ul class="code">
- <li><a href="#cups_page_header2_s" title="Version 2 page header ">cups_page_header2_s</a></li>
- <li><a href="#cups_page_header_s" title="Version 1 page header ">cups_page_header_s</a></li>
-</ul></li>
-<li><a href="#ENUMERATIONS">Constants</a><ul class="code">
- <li><a href="#cups_adv_e" title="AdvanceMedia attribute values">cups_adv_e</a></li>
- <li><a href="#cups_bool_e" title="Boolean type">cups_bool_e</a></li>
- <li><a href="#cups_cspace_e" title="cupsColorSpace attribute values">cups_cspace_e</a></li>
- <li><a href="#cups_cut_e" title="CutMedia attribute values">cups_cut_e</a></li>
- <li><a href="#cups_edge_e" title="LeadingEdge attribute values">cups_edge_e</a></li>
- <li><a href="#cups_jog_e" title="Jog attribute values">cups_jog_e</a></li>
- <li><a href="#cups_mode_e" title="cupsRasterOpen modes">cups_mode_e</a></li>
- <li><a href="#cups_order_e" title="cupsColorOrder attribute values">cups_order_e</a></li>
- <li><a href="#cups_orient_e" title="Orientation attribute values">cups_orient_e</a></li>
-</ul></li>
-</ul>
+ <div class="contents">
+ <h2 class="title">Contents</h2>
+ <ul class="contents">
+ <li><a href="#OVERVIEW">Overview</a></li>
+ <li><a href="#TASKS">Functions by Task</a><ul class="subcontents">
+ <li><a href="#OPENCLOSE">Opening and Closing Raster Streams</a></li>
+ <li><a href="#READING">Reading Raster Streams</a></li>
+ <li><a href="#WRITING">Writing Raster Streams</a></li>
+ </ul></li>
+ <li><a href="#FUNCTIONS">Functions</a><ul class="subcontents">
+ <li><a href="#cupsRasterClose">cupsRasterClose</a></li>
+ <li><a href="#cupsRasterInitPWGHeader">cupsRasterInitPWGHeader</a></li>
+ <li><a href="#cupsRasterInterpretPPD">cupsRasterInterpretPPD</a></li>
+ <li><a href="#cupsRasterOpen">cupsRasterOpen</a></li>
+ <li><a href="#cupsRasterOpenIO">cupsRasterOpenIO</a></li>
+ <li><a href="#cupsRasterReadHeader">cupsRasterReadHeader</a></li>
+ <li><a href="#cupsRasterReadHeader2">cupsRasterReadHeader2</a></li>
+ <li><a href="#cupsRasterReadPixels">cupsRasterReadPixels</a></li>
+ <li><a href="#cupsRasterWriteHeader">cupsRasterWriteHeader</a></li>
+ <li><a href="#cupsRasterWriteHeader2">cupsRasterWriteHeader2</a></li>
+ <li><a href="#cupsRasterWritePixels">cupsRasterWritePixels</a></li>
+ </ul></li>
+ <li><a href="#TYPES">Data Types</a><ul class="subcontents">
+ <li><a href="#cups_adv_t">cups_adv_t</a></li>
+ <li><a href="#cups_bool_t">cups_bool_t</a></li>
+ <li><a href="#cups_cspace_t">cups_cspace_t</a></li>
+ <li><a href="#cups_cut_t">cups_cut_t</a></li>
+ <li><a href="#cups_edge_t">cups_edge_t</a></li>
+ <li><a href="#cups_interpret_cb_t">cups_interpret_cb_t</a></li>
+ <li><a href="#cups_jog_t">cups_jog_t</a></li>
+ <li><a href="#cups_mode_t">cups_mode_t</a></li>
+ <li><a href="#cups_order_t">cups_order_t</a></li>
+ <li><a href="#cups_orient_t">cups_orient_t</a></li>
+ <li><a href="#cups_page_header2_t">cups_page_header2_t</a></li>
+ <li><a href="#cups_page_header_t">cups_page_header_t</a></li>
+ <li><a href="#cups_raster_iocb_t">cups_raster_iocb_t</a></li>
+ <li><a href="#cups_raster_t">cups_raster_t</a></li>
+ </ul></li>
+ <li><a href="#STRUCTURES">Structures</a><ul class="subcontents">
+ <li><a href="#cups_page_header2_s">cups_page_header2_s</a></li>
+ <li><a href="#cups_page_header_s">cups_page_header_s</a></li>
+ </ul></li>
+ <li><a href="#ENUMERATIONS">Enumerations</a><ul class="subcontents">
+ <li><a href="#cups_adv_e">cups_adv_e</a></li>
+ <li><a href="#cups_bool_e">cups_bool_e</a></li>
+ <li><a href="#cups_cspace_e">cups_cspace_e</a></li>
+ <li><a href="#cups_cut_e">cups_cut_e</a></li>
+ <li><a href="#cups_edge_e">cups_edge_e</a></li>
+ <li><a href="#cups_jog_e">cups_jog_e</a></li>
+ <li><a href="#cups_mode_e">cups_mode_e</a></li>
+ <li><a href="#cups_order_e">cups_order_e</a></li>
+ <li><a href="#cups_orient_e">cups_orient_e</a></li>
+ </ul></li>
+ </ul>
+ </div>
+ <div class="body">
<!--
Raster API introduction for CUPS.
@@ -602,54 +603,44 @@ the memory used to read the raster file:</p>
<li><a href="#cupsRasterWritePixels" title="Write raster pixels.">cupsRasterWritePixels</a></li>
</ul>
-<h2 class="title"><a name="FUNCTIONS">Functions</a></h2>
-<h3 class="function"><a name="cupsRasterClose">cupsRasterClose</a></h3>
-<p class="description">Close a raster stream.</p>
+ <h2 class="title"><a id="FUNCTIONS">Functions</a></h2>
+<h3 class="function"><a id="cupsRasterClose">cupsRasterClose</a></h3>
+ <p class="description">Close a raster stream.</p>
<p class="code">
-void cupsRasterClose (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_raster_t">cups_raster_t</a> *r<br>
-);</p>
+void cupsRasterClose(<a href="#cups_raster_t">cups_raster_t</a> *r);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>r</dt>
-<dd class="description">Stream to close</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>r</th>
+ <td class="description">Stream to close</td></tr>
+</tbody></table>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">The file descriptor associated with the raster stream must be closed
+ <p class="discussion">The file descriptor associated with the raster stream must be closed
separately as needed.</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 2.2/macOS 10.12&nbsp;</span><a name="cupsRasterInitPWGHeader">cupsRasterInitPWGHeader</a></h3>
-<p class="description">Initialize a page header for PWG Raster output.</p>
+<h3 class="function"><span class="info">&#160;CUPS 2.2/macOS 10.12&#160;</span><a id="cupsRasterInitPWGHeader">cupsRasterInitPWGHeader</a></h3>
+ <p class="description">Initialize a page header for PWG Raster output.</p>
<p class="code">
-int cupsRasterInitPWGHeader (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_page_header2_t">cups_page_header2_t</a> *h,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;pwg_media_t *media,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *type,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int xdpi,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int ydpi,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *sides,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;const char *sheet_back<br>
-);</p>
+int cupsRasterInitPWGHeader(<a href="#cups_page_header2_t">cups_page_header2_t</a> *h, pwg_media_t *media, const char *type, int xdpi, int ydpi, const char *sides, const char *sheet_back);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>h</dt>
-<dd class="description">Page header</dd>
-<dt>media</dt>
-<dd class="description">PWG media information</dd>
-<dt>type</dt>
-<dd class="description">PWG raster type string</dd>
-<dt>xdpi</dt>
-<dd class="description">Cross-feed direction (horizontal) resolution</dd>
-<dt>ydpi</dt>
-<dd class="description">Feed direction (vertical) resolution</dd>
-<dt>sides</dt>
-<dd class="description">IPP &quot;sides&quot; option value</dd>
-<dt>sheet_back</dt>
-<dd class="description">Transform for back side or <code>NULL</code> for none</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>h</th>
+ <td class="description">Page header</td></tr>
+<tr><th>media</th>
+ <td class="description">PWG media information</td></tr>
+<tr><th>type</th>
+ <td class="description">PWG raster type string</td></tr>
+<tr><th>xdpi</th>
+ <td class="description">Cross-feed direction (horizontal) resolution</td></tr>
+<tr><th>ydpi</th>
+ <td class="description">Feed direction (vertical) resolution</td></tr>
+<tr><th>sides</th>
+ <td class="description">IPP &quot;sides&quot; option value</td></tr>
+<tr><th>sheet_back</th>
+ <td class="description">Transform for back side or <code>NULL</code> for none</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
+ <p class="description">1 on success, 0 on failure</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">The &quot;media&quot; argument specifies the media to use.<br>
+ <p class="discussion">The &quot;media&quot; argument specifies the media to use.<br>
<br>
The &quot;type&quot; argument specifies a &quot;pwg-raster-document-type-supported&quot; value
that controls the color space and bit depth of the raster data.<br>
@@ -661,33 +652,27 @@ The &quot;sheet_back&quot; argument specifies a &quot;pwg-raster-document-sheet-
to apply for the back side of a page. Pass <code>NULL</code> for the front side.
</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsRasterInterpretPPD">cupsRasterInterpretPPD</a></h3>
-<p class="description">Interpret PPD commands to create a page header.</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="cupsRasterInterpretPPD">cupsRasterInterpretPPD</a></h3>
+ <p class="description">Interpret PPD commands to create a page header.</p>
<p class="code">
-int cupsRasterInterpretPPD (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_page_header2_t">cups_page_header2_t</a> *h,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;ppd_file_t *ppd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int num_options,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;cups_option_t *options,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_interpret_cb_t">cups_interpret_cb_t</a> func<br>
-);</p>
+int cupsRasterInterpretPPD(<a href="#cups_page_header2_t">cups_page_header2_t</a> *h, ppd_file_t *ppd, int num_options, cups_option_t *options, <a href="#cups_interpret_cb_t">cups_interpret_cb_t</a> func);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>h</dt>
-<dd class="description">Page header to create</dd>
-<dt>ppd</dt>
-<dd class="description">PPD file</dd>
-<dt>num_options</dt>
-<dd class="description">Number of options</dd>
-<dt>options</dt>
-<dd class="description">Options</dd>
-<dt>func</dt>
-<dd class="description">Optional page header callback (<code>NULL</code> for none)</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>h</th>
+ <td class="description">Page header to create</td></tr>
+<tr><th>ppd</th>
+ <td class="description">PPD file</td></tr>
+<tr><th>num_options</th>
+ <td class="description">Number of options</td></tr>
+<tr><th>options</th>
+ <td class="description">Options</td></tr>
+<tr><th>func</th>
+ <td class="description">Optional page header callback (<code>NULL</code> for none)</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">0 on success, -1 on failure</p>
+ <p class="description">0 on success, -1 on failure</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function is used by raster image processing (RIP) filters like
+ <p class="discussion">This function is used by raster image processing (RIP) filters like
cgpdftoraster and imagetoraster when writing CUPS raster data for a page.
It is not used by raster printer driver filters which only read CUPS
raster data.<br>
@@ -712,27 +697,24 @@ Currently only the <code>[</code>, <code>]</code>, <code>&lt;&lt;</code>, <code>
are supported.
</p>
-<h3 class="function"><a name="cupsRasterOpen">cupsRasterOpen</a></h3>
-<p class="description">Open a raster stream using a file descriptor.</p>
+<h3 class="function"><a id="cupsRasterOpen">cupsRasterOpen</a></h3>
+ <p class="description">Open a raster stream using a file descriptor.</p>
<p class="code">
-<a href="#cups_raster_t">cups_raster_t</a> *cupsRasterOpen (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;int fd,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_mode_t">cups_mode_t</a> mode<br>
-);</p>
+<a href="#cups_raster_t">cups_raster_t</a> *cupsRasterOpen(int fd, <a href="#cups_mode_t">cups_mode_t</a> mode);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>fd</dt>
-<dd class="description">File descriptor</dd>
-<dt>mode</dt>
-<dd class="description">Mode - <code>CUPS_RASTER_READ</code>,
+<table class="list"><tbody>
+<tr><th>fd</th>
+ <td class="description">File descriptor</td></tr>
+<tr><th>mode</th>
+ <td class="description">Mode - <code>CUPS_RASTER_READ</code>,
<code>CUPS_RASTER_WRITE</code>,
<code>CUPS_RASTER_WRITE_COMPRESSED</code>,
-or <code>CUPS_RASTER_WRITE_PWG</code></dd>
-</dl>
+or <code>CUPS_RASTER_WRITE_PWG</code></td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">New stream</p>
+ <p class="description">New stream</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function associates a raster stream with the given file descriptor.
+ <p class="discussion">This function associates a raster stream with the given file descriptor.
For most printer driver filters, &quot;fd&quot; will be 0 (stdin). For most raster
image processor (RIP) filters that generate raster data, &quot;fd&quot; will be 1
(stdout).<br>
@@ -741,729 +723,623 @@ When writing raster data, the <code>CUPS_RASTER_WRITE</code>,
<code>CUPS_RASTER_WRITE_COMPRESS</code>, or <code>CUPS_RASTER_WRITE_PWG</code> mode can
be used - compressed and PWG output is generally 25-50% smaller but adds a
100-300% execution time overhead.</p>
-<h3 class="function"><a name="cupsRasterOpenIO">cupsRasterOpenIO</a></h3>
-<p class="description">Open a raster stream using a callback function.</p>
+<h3 class="function"><a id="cupsRasterOpenIO">cupsRasterOpenIO</a></h3>
+ <p class="description">Open a raster stream using a callback function.</p>
<p class="code">
-<a href="#cups_raster_t">cups_raster_t</a> *cupsRasterOpenIO (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_raster_iocb_t">cups_raster_iocb_t</a> iocb,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;void *ctx,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_mode_t">cups_mode_t</a> mode<br>
-);</p>
+<a href="#cups_raster_t">cups_raster_t</a> *cupsRasterOpenIO(<a href="#cups_raster_iocb_t">cups_raster_iocb_t</a> iocb, void *ctx, <a href="#cups_mode_t">cups_mode_t</a> mode);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>iocb</dt>
-<dd class="description">Read/write callback</dd>
-<dt>ctx</dt>
-<dd class="description">Context pointer for callback</dd>
-<dt>mode</dt>
-<dd class="description">Mode - <code>CUPS_RASTER_READ</code>,
+<table class="list"><tbody>
+<tr><th>iocb</th>
+ <td class="description">Read/write callback</td></tr>
+<tr><th>ctx</th>
+ <td class="description">Context pointer for callback</td></tr>
+<tr><th>mode</th>
+ <td class="description">Mode - <code>CUPS_RASTER_READ</code>,
<code>CUPS_RASTER_WRITE</code>,
<code>CUPS_RASTER_WRITE_COMPRESSED</code>,
-or <code>CUPS_RASTER_WRITE_PWG</code></dd>
-</dl>
+or <code>CUPS_RASTER_WRITE_PWG</code></td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">New stream</p>
+ <p class="description">New stream</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function associates a raster stream with the given callback function and
+ <p class="discussion">This function associates a raster stream with the given callback function and
context pointer.<br>
<br>
When writing raster data, the <code>CUPS_RASTER_WRITE</code>,
<code>CUPS_RASTER_WRITE_COMPRESS</code>, or <code>CUPS_RASTER_WRITE_PWG</code> mode can
be used - compressed and PWG output is generally 25-50% smaller but adds a
100-300% execution time overhead.</p>
-<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="cupsRasterReadHeader">cupsRasterReadHeader</a></h3>
-<p class="description">Read a raster page header and store it in a
+<h3 class="function"><span class="info">&#160;DEPRECATED&#160;</span><a id="cupsRasterReadHeader">cupsRasterReadHeader</a></h3>
+ <p class="description">Read a raster page header and store it in a
version 1 page header structure.</p>
<p class="code">
-unsigned cupsRasterReadHeader (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_raster_t">cups_raster_t</a> *r,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_page_header_t">cups_page_header_t</a> *h<br>
-);</p>
+unsigned cupsRasterReadHeader(<a href="#cups_raster_t">cups_raster_t</a> *r, <a href="#cups_page_header_t">cups_page_header_t</a> *h);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>r</dt>
-<dd class="description">Raster stream</dd>
-<dt>h</dt>
-<dd class="description">Pointer to header data</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>r</th>
+ <td class="description">Raster stream</td></tr>
+<tr><th>h</th>
+ <td class="description">Pointer to header data</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure/end-of-file</p>
+ <p class="description">1 on success, 0 on failure/end-of-file</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function is deprecated. Use <a href="#cupsRasterReadHeader2"><code>cupsRasterReadHeader2</code></a> instead.<br>
+ <p class="discussion">This function is deprecated. Use <a href="#cupsRasterReadHeader2"><code>cupsRasterReadHeader2</code></a> instead.<br>
<br>
Version 1 page headers were used in CUPS 1.0 and 1.1 and contain a subset
of the version 2 page header data. This function handles reading version 2
page headers and copying only the version 1 data into the provided buffer.
</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsRasterReadHeader2">cupsRasterReadHeader2</a></h3>
-<p class="description">Read a raster page header and store it in a
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="cupsRasterReadHeader2">cupsRasterReadHeader2</a></h3>
+ <p class="description">Read a raster page header and store it in a
version 2 page header structure.</p>
<p class="code">
-unsigned cupsRasterReadHeader2 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_raster_t">cups_raster_t</a> *r,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_page_header2_t">cups_page_header2_t</a> *h<br>
-);</p>
+unsigned cupsRasterReadHeader2(<a href="#cups_raster_t">cups_raster_t</a> *r, <a href="#cups_page_header2_t">cups_page_header2_t</a> *h);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>r</dt>
-<dd class="description">Raster stream</dd>
-<dt>h</dt>
-<dd class="description">Pointer to header data</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>r</th>
+ <td class="description">Raster stream</td></tr>
+<tr><th>h</th>
+ <td class="description">Pointer to header data</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure/end-of-file</p>
-<h3 class="function"><a name="cupsRasterReadPixels">cupsRasterReadPixels</a></h3>
-<p class="description">Read raster pixels.</p>
+ <p class="description">1 on success, 0 on failure/end-of-file</p>
+<h3 class="function"><a id="cupsRasterReadPixels">cupsRasterReadPixels</a></h3>
+ <p class="description">Read raster pixels.</p>
<p class="code">
-unsigned cupsRasterReadPixels (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_raster_t">cups_raster_t</a> *r,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned char *p,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned len<br>
-);</p>
+unsigned cupsRasterReadPixels(<a href="#cups_raster_t">cups_raster_t</a> *r, unsigned char *p, unsigned len);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>r</dt>
-<dd class="description">Raster stream</dd>
-<dt>p</dt>
-<dd class="description">Pointer to pixel buffer</dd>
-<dt>len</dt>
-<dd class="description">Number of bytes to read</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>r</th>
+ <td class="description">Raster stream</td></tr>
+<tr><th>p</th>
+ <td class="description">Pointer to pixel buffer</td></tr>
+<tr><th>len</th>
+ <td class="description">Number of bytes to read</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of bytes read</p>
+ <p class="description">Number of bytes read</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">For best performance, filters should read one or more whole lines.
+ <p class="discussion">For best performance, filters should read one or more whole lines.
The &quot;cupsBytesPerLine&quot; value from the page header can be used to allocate
the line buffer and as the number of bytes to read.</p>
-<h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="cupsRasterWriteHeader">cupsRasterWriteHeader</a></h3>
-<p class="description">Write a raster page header from a version 1 page
+<h3 class="function"><span class="info">&#160;DEPRECATED&#160;</span><a id="cupsRasterWriteHeader">cupsRasterWriteHeader</a></h3>
+ <p class="description">Write a raster page header from a version 1 page
header structure.</p>
<p class="code">
-unsigned cupsRasterWriteHeader (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_raster_t">cups_raster_t</a> *r,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_page_header_t">cups_page_header_t</a> *h<br>
-);</p>
+unsigned cupsRasterWriteHeader(<a href="#cups_raster_t">cups_raster_t</a> *r, <a href="#cups_page_header_t">cups_page_header_t</a> *h);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>r</dt>
-<dd class="description">Raster stream</dd>
-<dt>h</dt>
-<dd class="description">Raster page header</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>r</th>
+ <td class="description">Raster stream</td></tr>
+<tr><th>h</th>
+ <td class="description">Raster page header</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
+ <p class="description">1 on success, 0 on failure</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">This function is deprecated. Use <a href="#cupsRasterWriteHeader2"><code>cupsRasterWriteHeader2</code></a> instead.
+ <p class="discussion">This function is deprecated. Use <a href="#cupsRasterWriteHeader2"><code>cupsRasterWriteHeader2</code></a> instead.
</p>
-<h3 class="function"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cupsRasterWriteHeader2">cupsRasterWriteHeader2</a></h3>
-<p class="description">Write a raster page header from a version 2
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="cupsRasterWriteHeader2">cupsRasterWriteHeader2</a></h3>
+ <p class="description">Write a raster page header from a version 2
page header structure.</p>
<p class="code">
-unsigned cupsRasterWriteHeader2 (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_raster_t">cups_raster_t</a> *r,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_page_header2_t">cups_page_header2_t</a> *h<br>
-);</p>
+unsigned cupsRasterWriteHeader2(<a href="#cups_raster_t">cups_raster_t</a> *r, <a href="#cups_page_header2_t">cups_page_header2_t</a> *h);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>r</dt>
-<dd class="description">Raster stream</dd>
-<dt>h</dt>
-<dd class="description">Raster page header</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>r</th>
+ <td class="description">Raster stream</td></tr>
+<tr><th>h</th>
+ <td class="description">Raster page header</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">1 on success, 0 on failure</p>
+ <p class="description">1 on success, 0 on failure</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">The page header can be initialized using <a href="#cupsRasterInitPWGHeader"><code>cupsRasterInitPWGHeader</code></a>.
+ <p class="discussion">The page header can be initialized using <a href="#cupsRasterInitPWGHeader"><code>cupsRasterInitPWGHeader</code></a>.
</p>
-<h3 class="function"><a name="cupsRasterWritePixels">cupsRasterWritePixels</a></h3>
-<p class="description">Write raster pixels.</p>
+<h3 class="function"><a id="cupsRasterWritePixels">cupsRasterWritePixels</a></h3>
+ <p class="description">Write raster pixels.</p>
<p class="code">
-unsigned cupsRasterWritePixels (<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_raster_t">cups_raster_t</a> *r,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned char *p,<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned len<br>
-);</p>
+unsigned cupsRasterWritePixels(<a href="#cups_raster_t">cups_raster_t</a> *r, unsigned char *p, unsigned len);</p>
<h4 class="parameters">Parameters</h4>
-<dl>
-<dt>r</dt>
-<dd class="description">Raster stream</dd>
-<dt>p</dt>
-<dd class="description">Bytes to write</dd>
-<dt>len</dt>
-<dd class="description">Number of bytes to write</dd>
-</dl>
+<table class="list"><tbody>
+<tr><th>r</th>
+ <td class="description">Raster stream</td></tr>
+<tr><th>p</th>
+ <td class="description">Bytes to write</td></tr>
+<tr><th>len</th>
+ <td class="description">Number of bytes to write</td></tr>
+</tbody></table>
<h4 class="returnvalue">Return Value</h4>
-<p class="description">Number of bytes written</p>
+ <p class="description">Number of bytes written</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">For best performance, filters should write one or more whole lines.
+ <p class="discussion">For best performance, filters should write one or more whole lines.
The &quot;cupsBytesPerLine&quot; value from the page header can be used to allocate
the line buffer and as the number of bytes to write.</p>
-<h2 class="title"><a name="TYPES">Data Types</a></h2>
-<h3 class="typedef"><a name="cups_adv_t">cups_adv_t</a></h3>
-<p class="description">AdvanceMedia attribute values</p>
-<p class="code">
+ <h2 class="title"><a id="TYPES">Data Types</a></h2>
+ <h3 class="typedef"><a id="cups_adv_t">cups_adv_t</a></h3>
+ <p class="description">AdvanceMedia attribute values</p>
+ <p class="code">
typedef enum <a href="#cups_adv_e">cups_adv_e</a> cups_adv_t;
</p>
-<h3 class="typedef"><a name="cups_bool_t">cups_bool_t</a></h3>
-<p class="description">Boolean type</p>
-<p class="code">
+ <h3 class="typedef"><a id="cups_bool_t">cups_bool_t</a></h3>
+ <p class="description">Boolean type</p>
+ <p class="code">
typedef enum <a href="#cups_bool_e">cups_bool_e</a> cups_bool_t;
</p>
-<h3 class="typedef"><a name="cups_cspace_t">cups_cspace_t</a></h3>
-<p class="description">cupsColorSpace attribute values</p>
-<p class="code">
+ <h3 class="typedef"><a id="cups_cspace_t">cups_cspace_t</a></h3>
+ <p class="description">cupsColorSpace attribute values</p>
+ <p class="code">
typedef enum <a href="#cups_cspace_e">cups_cspace_e</a> cups_cspace_t;
</p>
-<h3 class="typedef"><a name="cups_cut_t">cups_cut_t</a></h3>
-<p class="description">CutMedia attribute values</p>
-<p class="code">
+ <h3 class="typedef"><a id="cups_cut_t">cups_cut_t</a></h3>
+ <p class="description">CutMedia attribute values</p>
+ <p class="code">
typedef enum <a href="#cups_cut_e">cups_cut_e</a> cups_cut_t;
</p>
-<h3 class="typedef"><a name="cups_edge_t">cups_edge_t</a></h3>
-<p class="description">LeadingEdge attribute values</p>
-<p class="code">
+ <h3 class="typedef"><a id="cups_edge_t">cups_edge_t</a></h3>
+ <p class="description">LeadingEdge attribute values</p>
+ <p class="code">
typedef enum <a href="#cups_edge_e">cups_edge_e</a> cups_edge_t;
</p>
-<h3 class="typedef"><a name="cups_interpret_cb_t">cups_interpret_cb_t</a></h3>
-<p class="description">cupsRasterInterpretPPD callback function</p>
-<p class="code">
+ <h3 class="typedef"><a id="cups_interpret_cb_t">cups_interpret_cb_t</a></h3>
+ <p class="description">cupsRasterInterpretPPD callback function</p>
+ <p class="code">
typedef int (*cups_interpret_cb_t)(<a href="#cups_page_header2_t">cups_page_header2_t</a> *header, int preferred_bits);
</p>
-<h3 class="typedef"><a name="cups_jog_t">cups_jog_t</a></h3>
-<p class="description">Jog attribute values</p>
-<p class="code">
+ <h3 class="typedef"><a id="cups_jog_t">cups_jog_t</a></h3>
+ <p class="description">Jog attribute values</p>
+ <p class="code">
typedef enum <a href="#cups_jog_e">cups_jog_e</a> cups_jog_t;
</p>
-<h3 class="typedef"><a name="cups_mode_t">cups_mode_t</a></h3>
-<p class="description">cupsRasterOpen modes</p>
-<p class="code">
+ <h3 class="typedef"><a id="cups_mode_t">cups_mode_t</a></h3>
+ <p class="description">cupsRasterOpen modes</p>
+ <p class="code">
typedef enum <a href="#cups_mode_e">cups_mode_e</a> cups_mode_t;
</p>
-<h3 class="typedef"><a name="cups_order_t">cups_order_t</a></h3>
-<p class="description">cupsColorOrder attribute values</p>
-<p class="code">
+ <h3 class="typedef"><a id="cups_order_t">cups_order_t</a></h3>
+ <p class="description">cupsColorOrder attribute values</p>
+ <p class="code">
typedef enum <a href="#cups_order_e">cups_order_e</a> cups_order_t;
</p>
-<h3 class="typedef"><a name="cups_orient_t">cups_orient_t</a></h3>
-<p class="description">Orientation attribute values</p>
-<p class="code">
+ <h3 class="typedef"><a id="cups_orient_t">cups_orient_t</a></h3>
+ <p class="description">Orientation attribute values</p>
+ <p class="code">
typedef enum <a href="#cups_orient_e">cups_orient_e</a> cups_orient_t;
</p>
-<h3 class="typedef"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cups_page_header2_t">cups_page_header2_t</a></h3>
-<p class="description">Version 2 page header </p>
-<p class="code">
+ <h3 class="typedef"><a id="cups_page_header2_t"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span>cups_page_header2_t</a></h3>
+ <p class="description">Version 2 page header </p>
+ <p class="code">
typedef struct <a href="#cups_page_header2_s">cups_page_header2_s</a> cups_page_header2_t;
</p>
-<h3 class="typedef"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="cups_page_header_t">cups_page_header_t</a></h3>
-<p class="description">Version 1 page header </p>
-<p class="code">
+ <h3 class="typedef"><a id="cups_page_header_t"><span class="info">&#160;DEPRECATED&#160;</span>cups_page_header_t</a></h3>
+ <p class="description">Version 1 page header </p>
+ <p class="code">
typedef struct <a href="#cups_page_header_s">cups_page_header_s</a> cups_page_header_t;
</p>
-<h3 class="typedef"><a name="cups_raster_iocb_t">cups_raster_iocb_t</a></h3>
-<p class="description">cupsRasterOpenIO callback function</p>
-<p class="code">
+ <h3 class="typedef"><a id="cups_raster_iocb_t">cups_raster_iocb_t</a></h3>
+ <p class="description">cupsRasterOpenIO callback function</p>
+ <p class="code">
typedef ssize_t (*cups_raster_iocb_t)(void *ctx, unsigned char *buffer, size_t length);
</p>
-<h3 class="typedef"><a name="cups_raster_t">cups_raster_t</a></h3>
-<p class="description">Raster stream data</p>
-<p class="code">
+ <h3 class="typedef"><a id="cups_raster_t">cups_raster_t</a></h3>
+ <p class="description">Raster stream data</p>
+ <p class="code">
typedef struct _cups_raster_s cups_raster_t;
</p>
-<h2 class="title"><a name="STRUCTURES">Structures</a></h2>
-<h3 class="struct"><span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span><a name="cups_page_header2_s">cups_page_header2_s</a></h3>
-<p class="description">Version 2 page header </p>
+ <h2 class="title"><a id="STRUCTURES">Structures</a></h2>
+<h3 class="struct"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="cups_page_header2_s">cups_page_header2_s</a></h3>
+ <p class="description">Version 2 page header </p>
<p class="code">struct cups_page_header2_s {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned AdvanceDistance;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_adv_t">cups_adv_t</a> AdvanceMedia;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_bool_t">cups_bool_t</a> Collate;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_cut_t">cups_cut_t</a> CutMedia;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_bool_t">cups_bool_t</a> Duplex;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned HWResolution[2];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned ImagingBoundingBox[4];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_bool_t">cups_bool_t</a> InsertSheet;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_jog_t">cups_jog_t</a> Jog;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_edge_t">cups_edge_t</a> LeadingEdge;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_bool_t">cups_bool_t</a> ManualFeed;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned Margins[2];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char MediaClass[64];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char MediaColor[64];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned MediaPosition;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char MediaType[64];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned MediaWeight;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_bool_t">cups_bool_t</a> MirrorPrint;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_bool_t">cups_bool_t</a> NegativePrint;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned NumCopies;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_orient_t">cups_orient_t</a> Orientation;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_bool_t">cups_bool_t</a> OutputFaceUp;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char OutputType[64];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned PageSize[2];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_bool_t">cups_bool_t</a> Separations;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_bool_t">cups_bool_t</a> TraySwitch;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_bool_t">cups_bool_t</a> Tumble;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned cupsBitsPerColor;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned cupsBitsPerPixel;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;float cupsBorderlessScalingFactor;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned cupsBytesPerLine;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_order_t">cups_order_t</a> cupsColorOrder;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_cspace_t">cups_cspace_t</a> cupsColorSpace;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned cupsCompression;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned cupsHeight;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;float cupsImagingBBox[4];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned cupsInteger[16];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char cupsMarkerType[64];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned cupsMediaType;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned cupsNumColors;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char cupsPageSizeName[64];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;float cupsPageSize[2];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;float cupsReal[16];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char cupsRenderingIntent[64];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned cupsRowCount;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned cupsRowFeed;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned cupsRowStep;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char cupsString[16][64];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned cupsWidth;<br>
+&#160;&#160;&#160;&#160;unsigned AdvanceDistance;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_adv_t">cups_adv_t</a> AdvanceMedia;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> Collate;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_cut_t">cups_cut_t</a> CutMedia;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> Duplex;<br>
+&#160;&#160;&#160;&#160;unsigned HWResolution[2];<br>
+&#160;&#160;&#160;&#160;unsigned ImagingBoundingBox[4];<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> InsertSheet;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_jog_t">cups_jog_t</a> Jog;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_edge_t">cups_edge_t</a> LeadingEdge;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> ManualFeed;<br>
+&#160;&#160;&#160;&#160;unsigned Margins[2];<br>
+&#160;&#160;&#160;&#160;char MediaClass[64];<br>
+&#160;&#160;&#160;&#160;char MediaColor[64];<br>
+&#160;&#160;&#160;&#160;unsigned MediaPosition;<br>
+&#160;&#160;&#160;&#160;char MediaType[64];<br>
+&#160;&#160;&#160;&#160;unsigned MediaWeight;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> MirrorPrint;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> NegativePrint;<br>
+&#160;&#160;&#160;&#160;unsigned NumCopies;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_orient_t">cups_orient_t</a> Orientation;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> OutputFaceUp;<br>
+&#160;&#160;&#160;&#160;char OutputType[64];<br>
+&#160;&#160;&#160;&#160;unsigned PageSize[2];<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> Separations;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> TraySwitch;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> Tumble;<br>
+&#160;&#160;&#160;&#160;unsigned cupsBitsPerColor;<br>
+&#160;&#160;&#160;&#160;unsigned cupsBitsPerPixel;<br>
+&#160;&#160;&#160;&#160;float cupsBorderlessScalingFactor;<br>
+&#160;&#160;&#160;&#160;unsigned cupsBytesPerLine;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_order_t">cups_order_t</a> cupsColorOrder;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_cspace_t">cups_cspace_t</a> cupsColorSpace;<br>
+&#160;&#160;&#160;&#160;unsigned cupsCompression;<br>
+&#160;&#160;&#160;&#160;unsigned cupsHeight;<br>
+&#160;&#160;&#160;&#160;float cupsImagingBBox[4];<br>
+&#160;&#160;&#160;&#160;unsigned cupsInteger[16];<br>
+&#160;&#160;&#160;&#160;char cupsMarkerType[64];<br>
+&#160;&#160;&#160;&#160;unsigned cupsMediaType;<br>
+&#160;&#160;&#160;&#160;unsigned cupsNumColors;<br>
+&#160;&#160;&#160;&#160;char cupsPageSizeName[64];<br>
+&#160;&#160;&#160;&#160;float cupsPageSize[2];<br>
+&#160;&#160;&#160;&#160;float cupsReal[16];<br>
+&#160;&#160;&#160;&#160;char cupsRenderingIntent[64];<br>
+&#160;&#160;&#160;&#160;unsigned cupsRowCount;<br>
+&#160;&#160;&#160;&#160;unsigned cupsRowFeed;<br>
+&#160;&#160;&#160;&#160;unsigned cupsRowStep;<br>
+&#160;&#160;&#160;&#160;char cupsString[16][64];<br>
+&#160;&#160;&#160;&#160;unsigned cupsWidth;<br>
};</p>
<h4 class="members">Members</h4>
-<dl>
-<dt>AdvanceDistance </dt>
-<dd class="description">AdvanceDistance value in points</dd>
-<dt>AdvanceMedia </dt>
-<dd class="description">AdvanceMedia value (<a href="#cups_adv_t"><code>cups_adv_t</code></a>)</dd>
-<dt>Collate </dt>
-<dd class="description">Collated copies value</dd>
-<dt>CutMedia </dt>
-<dd class="description">CutMedia value (<a href="#cups_cut_t"><code>cups_cut_t</code></a>)</dd>
-<dt>Duplex </dt>
-<dd class="description">Duplexed (double-sided) value</dd>
-<dt>HWResolution[2] </dt>
-<dd class="description">Resolution in dots-per-inch</dd>
-<dt>ImagingBoundingBox[4] </dt>
-<dd class="description">Pixel region that is painted (points, left, bottom, right, top)</dd>
-<dt>InsertSheet </dt>
-<dd class="description">InsertSheet value</dd>
-<dt>Jog </dt>
-<dd class="description">Jog value (<a href="#cups_jog_t"><code>cups_jog_t</code></a>)</dd>
-<dt>LeadingEdge </dt>
-<dd class="description">LeadingEdge value (<a href="#cups_edge_t"><code>cups_edge_t</code></a>)</dd>
-<dt>ManualFeed </dt>
-<dd class="description">ManualFeed value</dd>
-<dt>Margins[2] </dt>
-<dd class="description">Lower-lefthand margins in points</dd>
-<dt>MediaClass[64] </dt>
-<dd class="description">MediaClass string</dd>
-<dt>MediaColor[64] </dt>
-<dd class="description">MediaColor string</dd>
-<dt>MediaPosition </dt>
-<dd class="description">MediaPosition value</dd>
-<dt>MediaType[64] </dt>
-<dd class="description">MediaType string</dd>
-<dt>MediaWeight </dt>
-<dd class="description">MediaWeight value in grams/m^2</dd>
-<dt>MirrorPrint </dt>
-<dd class="description">MirrorPrint value</dd>
-<dt>NegativePrint </dt>
-<dd class="description">NegativePrint value</dd>
-<dt>NumCopies </dt>
-<dd class="description">Number of copies to produce</dd>
-<dt>Orientation </dt>
-<dd class="description">Orientation value (<a href="#cups_orient_t"><code>cups_orient_t</code></a>)</dd>
-<dt>OutputFaceUp </dt>
-<dd class="description">OutputFaceUp value</dd>
-<dt>OutputType[64] </dt>
-<dd class="description">OutputType string</dd>
-<dt>PageSize[2] </dt>
-<dd class="description">Width and length of page in points</dd>
-<dt>Separations </dt>
-<dd class="description">Separations value</dd>
-<dt>TraySwitch </dt>
-<dd class="description">TraySwitch value</dd>
-<dt>Tumble </dt>
-<dd class="description">Tumble value</dd>
-<dt>cupsBitsPerColor </dt>
-<dd class="description">Number of bits for each color</dd>
-<dt>cupsBitsPerPixel </dt>
-<dd class="description">Number of bits for each pixel</dd>
-<dt>cupsBorderlessScalingFactor <span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span></dt>
-<dd class="description">Scaling that was applied to page data </dd>
-<dt>cupsBytesPerLine </dt>
-<dd class="description">Number of bytes per line</dd>
-<dt>cupsColorOrder </dt>
-<dd class="description">Order of colors</dd>
-<dt>cupsColorSpace </dt>
-<dd class="description">True colorspace</dd>
-<dt>cupsCompression </dt>
-<dd class="description">Device compression to use</dd>
-<dt>cupsHeight </dt>
-<dd class="description">Height of page image in pixels</dd>
-<dt>cupsImagingBBox[4] <span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span></dt>
-<dd class="description">Floating point ImagingBoundingBox
+<table class="list"><tbody>
+<tr><th>AdvanceDistance </th>
+ <td class="description">AdvanceDistance value in points</td></tr>
+<tr><th>AdvanceMedia </th>
+ <td class="description">AdvanceMedia value (<a href="#cups_adv_t"><code>cups_adv_t</code></a>)</td></tr>
+<tr><th>Collate </th>
+ <td class="description">Collated copies value</td></tr>
+<tr><th>CutMedia </th>
+ <td class="description">CutMedia value (<a href="#cups_cut_t"><code>cups_cut_t</code></a>)</td></tr>
+<tr><th>Duplex </th>
+ <td class="description">Duplexed (double-sided) value</td></tr>
+<tr><th>HWResolution[2] </th>
+ <td class="description">Resolution in dots-per-inch</td></tr>
+<tr><th>ImagingBoundingBox[4] </th>
+ <td class="description">Pixel region that is painted (points, left, bottom, right, top)</td></tr>
+<tr><th>InsertSheet </th>
+ <td class="description">InsertSheet value</td></tr>
+<tr><th>Jog </th>
+ <td class="description">Jog value (<a href="#cups_jog_t"><code>cups_jog_t</code></a>)</td></tr>
+<tr><th>LeadingEdge </th>
+ <td class="description">LeadingEdge value (<a href="#cups_edge_t"><code>cups_edge_t</code></a>)</td></tr>
+<tr><th>ManualFeed </th>
+ <td class="description">ManualFeed value</td></tr>
+<tr><th>Margins[2] </th>
+ <td class="description">Lower-lefthand margins in points</td></tr>
+<tr><th>MediaClass[64] </th>
+ <td class="description">MediaClass string</td></tr>
+<tr><th>MediaColor[64] </th>
+ <td class="description">MediaColor string</td></tr>
+<tr><th>MediaPosition </th>
+ <td class="description">MediaPosition value</td></tr>
+<tr><th>MediaType[64] </th>
+ <td class="description">MediaType string</td></tr>
+<tr><th>MediaWeight </th>
+ <td class="description">MediaWeight value in grams/m^2</td></tr>
+<tr><th>MirrorPrint </th>
+ <td class="description">MirrorPrint value</td></tr>
+<tr><th>NegativePrint </th>
+ <td class="description">NegativePrint value</td></tr>
+<tr><th>NumCopies </th>
+ <td class="description">Number of copies to produce</td></tr>
+<tr><th>Orientation </th>
+ <td class="description">Orientation value (<a href="#cups_orient_t"><code>cups_orient_t</code></a>)</td></tr>
+<tr><th>OutputFaceUp </th>
+ <td class="description">OutputFaceUp value</td></tr>
+<tr><th>OutputType[64] </th>
+ <td class="description">OutputType string</td></tr>
+<tr><th>PageSize[2] </th>
+ <td class="description">Width and length of page in points</td></tr>
+<tr><th>Separations </th>
+ <td class="description">Separations value</td></tr>
+<tr><th>TraySwitch </th>
+ <td class="description">TraySwitch value</td></tr>
+<tr><th>Tumble </th>
+ <td class="description">Tumble value</td></tr>
+<tr><th>cupsBitsPerColor </th>
+ <td class="description">Number of bits for each color</td></tr>
+<tr><th>cupsBitsPerPixel </th>
+ <td class="description">Number of bits for each pixel</td></tr>
+<tr><th>cupsBorderlessScalingFactor <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
+ <td class="description">Scaling that was applied to page data </td></tr>
+<tr><th>cupsBytesPerLine </th>
+ <td class="description">Number of bytes per line</td></tr>
+<tr><th>cupsColorOrder </th>
+ <td class="description">Order of colors</td></tr>
+<tr><th>cupsColorSpace </th>
+ <td class="description">True colorspace</td></tr>
+<tr><th>cupsCompression </th>
+ <td class="description">Device compression to use</td></tr>
+<tr><th>cupsHeight </th>
+ <td class="description">Height of page image in pixels</td></tr>
+<tr><th>cupsImagingBBox[4] <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
+ <td class="description">Floating point ImagingBoundingBox
(scaling factor not applied, left,
-bottom, right, top) </dd>
-<dt>cupsInteger[16] <span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span></dt>
-<dd class="description">User-defined integer values </dd>
-<dt>cupsMarkerType[64] <span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span></dt>
-<dd class="description">Ink/toner type </dd>
-<dt>cupsMediaType </dt>
-<dd class="description">Media type code</dd>
-<dt>cupsNumColors <span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span></dt>
-<dd class="description">Number of color compoents </dd>
-<dt>cupsPageSizeName[64] <span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span></dt>
-<dd class="description">PageSize name </dd>
-<dt>cupsPageSize[2] <span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span></dt>
-<dd class="description">Floating point PageSize (scaling *
-factor not applied) </dd>
-<dt>cupsReal[16] <span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span></dt>
-<dd class="description">User-defined floating-point values </dd>
-<dt>cupsRenderingIntent[64] <span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span></dt>
-<dd class="description">Color rendering intent </dd>
-<dt>cupsRowCount </dt>
-<dd class="description">Rows per band</dd>
-<dt>cupsRowFeed </dt>
-<dd class="description">Feed between bands</dd>
-<dt>cupsRowStep </dt>
-<dd class="description">Spacing between lines</dd>
-<dt>cupsString[16][64] <span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span></dt>
-<dd class="description">User-defined string values </dd>
-<dt>cupsWidth </dt>
-<dd class="description">Width of page image in pixels</dd>
-</dl>
-<h3 class="struct"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="cups_page_header_s">cups_page_header_s</a></h3>
-<p class="description">Version 1 page header </p>
+bottom, right, top) </td></tr>
+<tr><th>cupsInteger[16] <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
+ <td class="description">User-defined integer values </td></tr>
+<tr><th>cupsMarkerType[64] <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
+ <td class="description">Ink/toner type </td></tr>
+<tr><th>cupsMediaType </th>
+ <td class="description">Media type code</td></tr>
+<tr><th>cupsNumColors <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
+ <td class="description">Number of color compoents </td></tr>
+<tr><th>cupsPageSizeName[64] <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
+ <td class="description">PageSize name </td></tr>
+<tr><th>cupsPageSize[2] <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
+ <td class="description">Floating point PageSize (scaling *
+factor not applied) </td></tr>
+<tr><th>cupsReal[16] <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
+ <td class="description">User-defined floating-point values </td></tr>
+<tr><th>cupsRenderingIntent[64] <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
+ <td class="description">Color rendering intent </td></tr>
+<tr><th>cupsRowCount </th>
+ <td class="description">Rows per band</td></tr>
+<tr><th>cupsRowFeed </th>
+ <td class="description">Feed between bands</td></tr>
+<tr><th>cupsRowStep </th>
+ <td class="description">Spacing between lines</td></tr>
+<tr><th>cupsString[16][64] <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
+ <td class="description">User-defined string values </td></tr>
+<tr><th>cupsWidth </th>
+ <td class="description">Width of page image in pixels</td></tr>
+</tbody></table>
+<h3 class="struct"><span class="info">&#160;DEPRECATED&#160;</span><a id="cups_page_header_s">cups_page_header_s</a></h3>
+ <p class="description">Version 1 page header </p>
<p class="code">struct cups_page_header_s {<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned AdvanceDistance;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_adv_t">cups_adv_t</a> AdvanceMedia;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_bool_t">cups_bool_t</a> Collate;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_cut_t">cups_cut_t</a> CutMedia;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_bool_t">cups_bool_t</a> Duplex;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned HWResolution[2];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned ImagingBoundingBox[4];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_bool_t">cups_bool_t</a> InsertSheet;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_jog_t">cups_jog_t</a> Jog;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_edge_t">cups_edge_t</a> LeadingEdge;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_bool_t">cups_bool_t</a> ManualFeed;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned Margins[2];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char MediaClass[64];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char MediaColor[64];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned MediaPosition;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char MediaType[64];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned MediaWeight;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_bool_t">cups_bool_t</a> MirrorPrint;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_bool_t">cups_bool_t</a> NegativePrint;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned NumCopies;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_orient_t">cups_orient_t</a> Orientation;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_bool_t">cups_bool_t</a> OutputFaceUp;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;char OutputType[64];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned PageSize[2];<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_bool_t">cups_bool_t</a> Separations;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_bool_t">cups_bool_t</a> TraySwitch;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_bool_t">cups_bool_t</a> Tumble;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned cupsBitsPerColor;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned cupsBitsPerPixel;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned cupsBytesPerLine;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_order_t">cups_order_t</a> cupsColorOrder;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_cspace_t">cups_cspace_t</a> cupsColorSpace;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned cupsCompression;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned cupsHeight;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned cupsMediaType;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned cupsRowCount;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned cupsRowFeed;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned cupsRowStep;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unsigned cupsWidth;<br>
+&#160;&#160;&#160;&#160;unsigned AdvanceDistance;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_adv_t">cups_adv_t</a> AdvanceMedia;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> Collate;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_cut_t">cups_cut_t</a> CutMedia;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> Duplex;<br>
+&#160;&#160;&#160;&#160;unsigned HWResolution[2];<br>
+&#160;&#160;&#160;&#160;unsigned ImagingBoundingBox[4];<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> InsertSheet;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_jog_t">cups_jog_t</a> Jog;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_edge_t">cups_edge_t</a> LeadingEdge;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> ManualFeed;<br>
+&#160;&#160;&#160;&#160;unsigned Margins[2];<br>
+&#160;&#160;&#160;&#160;char MediaClass[64];<br>
+&#160;&#160;&#160;&#160;char MediaColor[64];<br>
+&#160;&#160;&#160;&#160;unsigned MediaPosition;<br>
+&#160;&#160;&#160;&#160;char MediaType[64];<br>
+&#160;&#160;&#160;&#160;unsigned MediaWeight;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> MirrorPrint;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> NegativePrint;<br>
+&#160;&#160;&#160;&#160;unsigned NumCopies;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_orient_t">cups_orient_t</a> Orientation;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> OutputFaceUp;<br>
+&#160;&#160;&#160;&#160;char OutputType[64];<br>
+&#160;&#160;&#160;&#160;unsigned PageSize[2];<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> Separations;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> TraySwitch;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> Tumble;<br>
+&#160;&#160;&#160;&#160;unsigned cupsBitsPerColor;<br>
+&#160;&#160;&#160;&#160;unsigned cupsBitsPerPixel;<br>
+&#160;&#160;&#160;&#160;unsigned cupsBytesPerLine;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_order_t">cups_order_t</a> cupsColorOrder;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_cspace_t">cups_cspace_t</a> cupsColorSpace;<br>
+&#160;&#160;&#160;&#160;unsigned cupsCompression;<br>
+&#160;&#160;&#160;&#160;unsigned cupsHeight;<br>
+&#160;&#160;&#160;&#160;unsigned cupsMediaType;<br>
+&#160;&#160;&#160;&#160;unsigned cupsRowCount;<br>
+&#160;&#160;&#160;&#160;unsigned cupsRowFeed;<br>
+&#160;&#160;&#160;&#160;unsigned cupsRowStep;<br>
+&#160;&#160;&#160;&#160;unsigned cupsWidth;<br>
};</p>
<h4 class="members">Members</h4>
-<dl>
-<dt>AdvanceDistance </dt>
-<dd class="description">AdvanceDistance value in points</dd>
-<dt>AdvanceMedia </dt>
-<dd class="description">AdvanceMedia value (<a href="#cups_adv_t"><code>cups_adv_t</code></a>)</dd>
-<dt>Collate </dt>
-<dd class="description">Collated copies value</dd>
-<dt>CutMedia </dt>
-<dd class="description">CutMedia value (<a href="#cups_cut_t"><code>cups_cut_t</code></a>)</dd>
-<dt>Duplex </dt>
-<dd class="description">Duplexed (double-sided) value</dd>
-<dt>HWResolution[2] </dt>
-<dd class="description">Resolution in dots-per-inch</dd>
-<dt>ImagingBoundingBox[4] </dt>
-<dd class="description">Pixel region that is painted (points, left, bottom, right, top)</dd>
-<dt>InsertSheet </dt>
-<dd class="description">InsertSheet value</dd>
-<dt>Jog </dt>
-<dd class="description">Jog value (<a href="#cups_jog_t"><code>cups_jog_t</code></a>)</dd>
-<dt>LeadingEdge </dt>
-<dd class="description">LeadingEdge value (<a href="#cups_edge_t"><code>cups_edge_t</code></a>)</dd>
-<dt>ManualFeed </dt>
-<dd class="description">ManualFeed value</dd>
-<dt>Margins[2] </dt>
-<dd class="description">Lower-lefthand margins in points</dd>
-<dt>MediaClass[64] </dt>
-<dd class="description">MediaClass string</dd>
-<dt>MediaColor[64] </dt>
-<dd class="description">MediaColor string</dd>
-<dt>MediaPosition </dt>
-<dd class="description">MediaPosition value</dd>
-<dt>MediaType[64] </dt>
-<dd class="description">MediaType string</dd>
-<dt>MediaWeight </dt>
-<dd class="description">MediaWeight value in grams/m^2</dd>
-<dt>MirrorPrint </dt>
-<dd class="description">MirrorPrint value</dd>
-<dt>NegativePrint </dt>
-<dd class="description">NegativePrint value</dd>
-<dt>NumCopies </dt>
-<dd class="description">Number of copies to produce</dd>
-<dt>Orientation </dt>
-<dd class="description">Orientation value (<a href="#cups_orient_t"><code>cups_orient_t</code></a>)</dd>
-<dt>OutputFaceUp </dt>
-<dd class="description">OutputFaceUp value</dd>
-<dt>OutputType[64] </dt>
-<dd class="description">OutputType string</dd>
-<dt>PageSize[2] </dt>
-<dd class="description">Width and length of page in points</dd>
-<dt>Separations </dt>
-<dd class="description">Separations value</dd>
-<dt>TraySwitch </dt>
-<dd class="description">TraySwitch value</dd>
-<dt>Tumble </dt>
-<dd class="description">Tumble value</dd>
-<dt>cupsBitsPerColor </dt>
-<dd class="description">Number of bits for each color</dd>
-<dt>cupsBitsPerPixel </dt>
-<dd class="description">Number of bits for each pixel</dd>
-<dt>cupsBytesPerLine </dt>
-<dd class="description">Number of bytes per line</dd>
-<dt>cupsColorOrder </dt>
-<dd class="description">Order of colors</dd>
-<dt>cupsColorSpace </dt>
-<dd class="description">True colorspace</dd>
-<dt>cupsCompression </dt>
-<dd class="description">Device compression to use</dd>
-<dt>cupsHeight </dt>
-<dd class="description">Height of page image in pixels</dd>
-<dt>cupsMediaType </dt>
-<dd class="description">Media type code</dd>
-<dt>cupsRowCount </dt>
-<dd class="description">Rows per band</dd>
-<dt>cupsRowFeed </dt>
-<dd class="description">Feed between bands</dd>
-<dt>cupsRowStep </dt>
-<dd class="description">Spacing between lines</dd>
-<dt>cupsWidth </dt>
-<dd class="description">Width of page image in pixels</dd>
-</dl>
-<h2 class="title"><a name="ENUMERATIONS">Constants</a></h2>
-<h3 class="enumeration"><a name="cups_adv_e">cups_adv_e</a></h3>
-<p class="description">AdvanceMedia attribute values</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>CUPS_ADVANCE_FILE </dt>
-<dd class="description">Advance the roll after this file</dd>
-<dt>CUPS_ADVANCE_JOB </dt>
-<dd class="description">Advance the roll after this job</dd>
-<dt>CUPS_ADVANCE_NONE </dt>
-<dd class="description">Never advance the roll</dd>
-<dt>CUPS_ADVANCE_PAGE </dt>
-<dd class="description">Advance the roll after this page</dd>
-<dt>CUPS_ADVANCE_SET </dt>
-<dd class="description">Advance the roll after this set</dd>
-</dl>
-<h3 class="enumeration"><a name="cups_bool_e">cups_bool_e</a></h3>
-<p class="description">Boolean type</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>CUPS_FALSE </dt>
-<dd class="description">Logical false</dd>
-<dt>CUPS_TRUE </dt>
-<dd class="description">Logical true</dd>
-</dl>
-<h3 class="enumeration"><a name="cups_cspace_e">cups_cspace_e</a></h3>
-<p class="description">cupsColorSpace attribute values</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>CUPS_CSPACE_ADOBERGB <span class="info">&nbsp;CUPS 1.4.5&nbsp;</span></dt>
-<dd class="description">Red, green, blue (Adobe RGB) </dd>
-<dt>CUPS_CSPACE_CIELab <span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span></dt>
-<dd class="description">CIE Lab </dd>
-<dt>CUPS_CSPACE_CIEXYZ <span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span></dt>
-<dd class="description">CIE XYZ </dd>
-<dt>CUPS_CSPACE_CMY </dt>
-<dd class="description">Cyan, magenta, yellow (DeviceCMY)</dd>
-<dt>CUPS_CSPACE_CMYK </dt>
-<dd class="description">Cyan, magenta, yellow, black (DeviceCMYK)</dd>
-<dt>CUPS_CSPACE_DEVICE1 <span class="info">&nbsp;CUPS 1.4.5&nbsp;</span></dt>
-<dd class="description">DeviceN, 1 color </dd>
-<dt>CUPS_CSPACE_DEVICE2 <span class="info">&nbsp;CUPS 1.4.5&nbsp;</span></dt>
-<dd class="description">DeviceN, 2 colors </dd>
-<dt>CUPS_CSPACE_DEVICE3 <span class="info">&nbsp;CUPS 1.4.5&nbsp;</span></dt>
-<dd class="description">DeviceN, 3 colors </dd>
-<dt>CUPS_CSPACE_DEVICE4 <span class="info">&nbsp;CUPS 1.4.5&nbsp;</span></dt>
-<dd class="description">DeviceN, 4 colors </dd>
-<dt>CUPS_CSPACE_DEVICE5 <span class="info">&nbsp;CUPS 1.4.5&nbsp;</span></dt>
-<dd class="description">DeviceN, 5 colors </dd>
-<dt>CUPS_CSPACE_DEVICE6 <span class="info">&nbsp;CUPS 1.4.5&nbsp;</span></dt>
-<dd class="description">DeviceN, 6 colors </dd>
-<dt>CUPS_CSPACE_DEVICE7 <span class="info">&nbsp;CUPS 1.4.5&nbsp;</span></dt>
-<dd class="description">DeviceN, 7 colors </dd>
-<dt>CUPS_CSPACE_DEVICE8 <span class="info">&nbsp;CUPS 1.4.5&nbsp;</span></dt>
-<dd class="description">DeviceN, 8 colors </dd>
-<dt>CUPS_CSPACE_DEVICE9 <span class="info">&nbsp;CUPS 1.4.5&nbsp;</span></dt>
-<dd class="description">DeviceN, 9 colors </dd>
-<dt>CUPS_CSPACE_DEVICEA <span class="info">&nbsp;CUPS 1.4.5&nbsp;</span></dt>
-<dd class="description">DeviceN, 10 colors </dd>
-<dt>CUPS_CSPACE_DEVICEB <span class="info">&nbsp;CUPS 1.4.5&nbsp;</span></dt>
-<dd class="description">DeviceN, 11 colors </dd>
-<dt>CUPS_CSPACE_DEVICEC <span class="info">&nbsp;CUPS 1.4.5&nbsp;</span></dt>
-<dd class="description">DeviceN, 12 colors </dd>
-<dt>CUPS_CSPACE_DEVICED <span class="info">&nbsp;CUPS 1.4.5&nbsp;</span></dt>
-<dd class="description">DeviceN, 13 colors </dd>
-<dt>CUPS_CSPACE_DEVICEE <span class="info">&nbsp;CUPS 1.4.5&nbsp;</span></dt>
-<dd class="description">DeviceN, 14 colors </dd>
-<dt>CUPS_CSPACE_DEVICEF <span class="info">&nbsp;CUPS 1.4.5&nbsp;</span></dt>
-<dd class="description">DeviceN, 15 colors </dd>
-<dt>CUPS_CSPACE_GMCK <span class="info">&nbsp;DEPRECATED&nbsp;</span></dt>
-<dd class="description">Gold, magenta, yellow, black </dd>
-<dt>CUPS_CSPACE_GMCS <span class="info">&nbsp;DEPRECATED&nbsp;</span></dt>
-<dd class="description">Gold, magenta, yellow, silver </dd>
-<dt>CUPS_CSPACE_GOLD <span class="info">&nbsp;DEPRECATED&nbsp;</span></dt>
-<dd class="description">Gold foil </dd>
-<dt>CUPS_CSPACE_ICC1 <span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span></dt>
-<dd class="description">ICC-based, 1 color </dd>
-<dt>CUPS_CSPACE_ICC2 <span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span></dt>
-<dd class="description">ICC-based, 2 colors </dd>
-<dt>CUPS_CSPACE_ICC3 <span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span></dt>
-<dd class="description">ICC-based, 3 colors </dd>
-<dt>CUPS_CSPACE_ICC4 <span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span></dt>
-<dd class="description">ICC-based, 4 colors </dd>
-<dt>CUPS_CSPACE_ICC5 <span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span></dt>
-<dd class="description">ICC-based, 5 colors </dd>
-<dt>CUPS_CSPACE_ICC6 <span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span></dt>
-<dd class="description">ICC-based, 6 colors </dd>
-<dt>CUPS_CSPACE_ICC7 <span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span></dt>
-<dd class="description">ICC-based, 7 colors </dd>
-<dt>CUPS_CSPACE_ICC8 <span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span></dt>
-<dd class="description">ICC-based, 8 colors </dd>
-<dt>CUPS_CSPACE_ICC9 <span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span></dt>
-<dd class="description">ICC-based, 9 colors </dd>
-<dt>CUPS_CSPACE_ICCA <span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span></dt>
-<dd class="description">ICC-based, 10 colors </dd>
-<dt>CUPS_CSPACE_ICCB <span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span></dt>
-<dd class="description">ICC-based, 11 colors </dd>
-<dt>CUPS_CSPACE_ICCC <span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span></dt>
-<dd class="description">ICC-based, 12 colors </dd>
-<dt>CUPS_CSPACE_ICCD <span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span></dt>
-<dd class="description">ICC-based, 13 colors </dd>
-<dt>CUPS_CSPACE_ICCE <span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span></dt>
-<dd class="description">ICC-based, 14 colors </dd>
-<dt>CUPS_CSPACE_ICCF <span class="info">&nbsp;CUPS 1.1.19/macOS 10.3&nbsp;</span></dt>
-<dd class="description">ICC-based, 15 colors </dd>
-<dt>CUPS_CSPACE_K </dt>
-<dd class="description">Black (DeviceK)</dd>
-<dt>CUPS_CSPACE_KCMY <span class="info">&nbsp;DEPRECATED&nbsp;</span></dt>
-<dd class="description">Black, cyan, magenta, yellow </dd>
-<dt>CUPS_CSPACE_KCMYcm <span class="info">&nbsp;DEPRECATED&nbsp;</span></dt>
-<dd class="description">Black, cyan, magenta, yellow, light-cyan, light-magenta </dd>
-<dt>CUPS_CSPACE_RGB </dt>
-<dd class="description">Red, green, blue (DeviceRGB, sRGB by default)</dd>
-<dt>CUPS_CSPACE_RGBA </dt>
-<dd class="description">Red, green, blue, alpha (DeviceRGB, sRGB by default)</dd>
-<dt>CUPS_CSPACE_RGBW <span class="info">&nbsp;CUPS 1.2/macOS 10.5&nbsp;</span></dt>
-<dd class="description">Red, green, blue, white (DeviceRGB, sRGB by default) </dd>
-<dt>CUPS_CSPACE_SILVER <span class="info">&nbsp;DEPRECATED&nbsp;</span></dt>
-<dd class="description">Silver foil </dd>
-<dt>CUPS_CSPACE_SRGB <span class="info">&nbsp;CUPS 1.4.5&nbsp;</span></dt>
-<dd class="description">Red, green, blue (sRGB) </dd>
-<dt>CUPS_CSPACE_SW <span class="info">&nbsp;CUPS 1.4.5&nbsp;</span></dt>
-<dd class="description">Luminance (gamma 2.2) </dd>
-<dt>CUPS_CSPACE_W </dt>
-<dd class="description">Luminance (DeviceGray, gamma 2.2 by default)</dd>
-<dt>CUPS_CSPACE_WHITE <span class="info">&nbsp;DEPRECATED&nbsp;</span></dt>
-<dd class="description">White ink (as black) </dd>
-<dt>CUPS_CSPACE_YMC <span class="info">&nbsp;DEPRECATED&nbsp;</span></dt>
-<dd class="description">Yellow, magenta, cyan </dd>
-<dt>CUPS_CSPACE_YMCK <span class="info">&nbsp;DEPRECATED&nbsp;</span></dt>
-<dd class="description">Yellow, magenta, cyan, black </dd>
-</dl>
-<h3 class="enumeration"><a name="cups_cut_e">cups_cut_e</a></h3>
-<p class="description">CutMedia attribute values</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>CUPS_CUT_FILE </dt>
-<dd class="description">Cut the roll after this file</dd>
-<dt>CUPS_CUT_JOB </dt>
-<dd class="description">Cut the roll after this job</dd>
-<dt>CUPS_CUT_NONE </dt>
-<dd class="description">Never cut the roll</dd>
-<dt>CUPS_CUT_PAGE </dt>
-<dd class="description">Cut the roll after this page</dd>
-<dt>CUPS_CUT_SET </dt>
-<dd class="description">Cut the roll after this set</dd>
-</dl>
-<h3 class="enumeration"><a name="cups_edge_e">cups_edge_e</a></h3>
-<p class="description">LeadingEdge attribute values</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>CUPS_EDGE_BOTTOM </dt>
-<dd class="description">Leading edge is the bottom of the page</dd>
-<dt>CUPS_EDGE_LEFT </dt>
-<dd class="description">Leading edge is the left of the page</dd>
-<dt>CUPS_EDGE_RIGHT </dt>
-<dd class="description">Leading edge is the right of the page</dd>
-<dt>CUPS_EDGE_TOP </dt>
-<dd class="description">Leading edge is the top of the page</dd>
-</dl>
-<h3 class="enumeration"><a name="cups_jog_e">cups_jog_e</a></h3>
-<p class="description">Jog attribute values</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>CUPS_JOG_FILE </dt>
-<dd class="description">Move pages after this file</dd>
-<dt>CUPS_JOG_JOB </dt>
-<dd class="description">Move pages after this job</dd>
-<dt>CUPS_JOG_NONE </dt>
-<dd class="description">Never move pages</dd>
-<dt>CUPS_JOG_SET </dt>
-<dd class="description">Move pages after this set</dd>
-</dl>
-<h3 class="enumeration"><a name="cups_mode_e">cups_mode_e</a></h3>
-<p class="description">cupsRasterOpen modes</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>CUPS_RASTER_READ </dt>
-<dd class="description">Open stream for reading</dd>
-<dt>CUPS_RASTER_WRITE </dt>
-<dd class="description">Open stream for writing</dd>
-<dt>CUPS_RASTER_WRITE_COMPRESSED <span class="info">&nbsp;CUPS 1.3/macOS 10.5&nbsp;</span></dt>
-<dd class="description">Open stream for compressed writing </dd>
-<dt>CUPS_RASTER_WRITE_PWG <span class="info">&nbsp;CUPS 1.5/macOS 10.7&nbsp;</span></dt>
-<dd class="description">Open stream for compressed writing in PWG Raster mode </dd>
-</dl>
-<h3 class="enumeration"><a name="cups_order_e">cups_order_e</a></h3>
-<p class="description">cupsColorOrder attribute values</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>CUPS_ORDER_BANDED </dt>
-<dd class="description">CCC MMM YYY KKK ...</dd>
-<dt>CUPS_ORDER_CHUNKED </dt>
-<dd class="description">CMYK CMYK CMYK ...</dd>
-<dt>CUPS_ORDER_PLANAR </dt>
-<dd class="description">CCC ... MMM ... YYY ... KKK ...</dd>
-</dl>
-<h3 class="enumeration"><a name="cups_orient_e">cups_orient_e</a></h3>
-<p class="description">Orientation attribute values</p>
-<h4 class="constants">Constants</h4>
-<dl>
-<dt>CUPS_ORIENT_0 </dt>
-<dd class="description">Don't rotate the page</dd>
-<dt>CUPS_ORIENT_180 </dt>
-<dd class="description">Turn the page upside down</dd>
-<dt>CUPS_ORIENT_270 </dt>
-<dd class="description">Rotate the page clockwise</dd>
-<dt>CUPS_ORIENT_90 </dt>
-<dd class="description">Rotate the page counter-clockwise</dd>
-</dl>
-</div>
-</body>
+<table class="list"><tbody>
+<tr><th>AdvanceDistance </th>
+ <td class="description">AdvanceDistance value in points</td></tr>
+<tr><th>AdvanceMedia </th>
+ <td class="description">AdvanceMedia value (<a href="#cups_adv_t"><code>cups_adv_t</code></a>)</td></tr>
+<tr><th>Collate </th>
+ <td class="description">Collated copies value</td></tr>
+<tr><th>CutMedia </th>
+ <td class="description">CutMedia value (<a href="#cups_cut_t"><code>cups_cut_t</code></a>)</td></tr>
+<tr><th>Duplex </th>
+ <td class="description">Duplexed (double-sided) value</td></tr>
+<tr><th>HWResolution[2] </th>
+ <td class="description">Resolution in dots-per-inch</td></tr>
+<tr><th>ImagingBoundingBox[4] </th>
+ <td class="description">Pixel region that is painted (points, left, bottom, right, top)</td></tr>
+<tr><th>InsertSheet </th>
+ <td class="description">InsertSheet value</td></tr>
+<tr><th>Jog </th>
+ <td class="description">Jog value (<a href="#cups_jog_t"><code>cups_jog_t</code></a>)</td></tr>
+<tr><th>LeadingEdge </th>
+ <td class="description">LeadingEdge value (<a href="#cups_edge_t"><code>cups_edge_t</code></a>)</td></tr>
+<tr><th>ManualFeed </th>
+ <td class="description">ManualFeed value</td></tr>
+<tr><th>Margins[2] </th>
+ <td class="description">Lower-lefthand margins in points</td></tr>
+<tr><th>MediaClass[64] </th>
+ <td class="description">MediaClass string</td></tr>
+<tr><th>MediaColor[64] </th>
+ <td class="description">MediaColor string</td></tr>
+<tr><th>MediaPosition </th>
+ <td class="description">MediaPosition value</td></tr>
+<tr><th>MediaType[64] </th>
+ <td class="description">MediaType string</td></tr>
+<tr><th>MediaWeight </th>
+ <td class="description">MediaWeight value in grams/m^2</td></tr>
+<tr><th>MirrorPrint </th>
+ <td class="description">MirrorPrint value</td></tr>
+<tr><th>NegativePrint </th>
+ <td class="description">NegativePrint value</td></tr>
+<tr><th>NumCopies </th>
+ <td class="description">Number of copies to produce</td></tr>
+<tr><th>Orientation </th>
+ <td class="description">Orientation value (<a href="#cups_orient_t"><code>cups_orient_t</code></a>)</td></tr>
+<tr><th>OutputFaceUp </th>
+ <td class="description">OutputFaceUp value</td></tr>
+<tr><th>OutputType[64] </th>
+ <td class="description">OutputType string</td></tr>
+<tr><th>PageSize[2] </th>
+ <td class="description">Width and length of page in points</td></tr>
+<tr><th>Separations </th>
+ <td class="description">Separations value</td></tr>
+<tr><th>TraySwitch </th>
+ <td class="description">TraySwitch value</td></tr>
+<tr><th>Tumble </th>
+ <td class="description">Tumble value</td></tr>
+<tr><th>cupsBitsPerColor </th>
+ <td class="description">Number of bits for each color</td></tr>
+<tr><th>cupsBitsPerPixel </th>
+ <td class="description">Number of bits for each pixel</td></tr>
+<tr><th>cupsBytesPerLine </th>
+ <td class="description">Number of bytes per line</td></tr>
+<tr><th>cupsColorOrder </th>
+ <td class="description">Order of colors</td></tr>
+<tr><th>cupsColorSpace </th>
+ <td class="description">True colorspace</td></tr>
+<tr><th>cupsCompression </th>
+ <td class="description">Device compression to use</td></tr>
+<tr><th>cupsHeight </th>
+ <td class="description">Height of page image in pixels</td></tr>
+<tr><th>cupsMediaType </th>
+ <td class="description">Media type code</td></tr>
+<tr><th>cupsRowCount </th>
+ <td class="description">Rows per band</td></tr>
+<tr><th>cupsRowFeed </th>
+ <td class="description">Feed between bands</td></tr>
+<tr><th>cupsRowStep </th>
+ <td class="description">Spacing between lines</td></tr>
+<tr><th>cupsWidth </th>
+ <td class="description">Width of page image in pixels</td></tr>
+</tbody></table>
+ <h2 class="title"><a id="ENUMERATIONS">Constants</a></h2>
+ <h3 class="enumeration"><a id="cups_adv_e">cups_adv_e</a></h3>
+ <p class="description">AdvanceMedia attribute values</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>CUPS_ADVANCE_FILE </th> <td class="description">Advance the roll after this file</td></tr>
+ <tr><th>CUPS_ADVANCE_JOB </th> <td class="description">Advance the roll after this job</td></tr>
+ <tr><th>CUPS_ADVANCE_NONE </th> <td class="description">Never advance the roll</td></tr>
+ <tr><th>CUPS_ADVANCE_PAGE </th> <td class="description">Advance the roll after this page</td></tr>
+ <tr><th>CUPS_ADVANCE_SET </th> <td class="description">Advance the roll after this set</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="cups_bool_e">cups_bool_e</a></h3>
+ <p class="description">Boolean type</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>CUPS_FALSE </th> <td class="description">Logical false</td></tr>
+ <tr><th>CUPS_TRUE </th> <td class="description">Logical true</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="cups_cspace_e">cups_cspace_e</a></h3>
+ <p class="description">cupsColorSpace attribute values</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>CUPS_CSPACE_ADOBERGB <span class="info">&#160;CUPS 1.4.5&#160;</span></th> <td class="description">Red, green, blue (Adobe RGB) </td></tr>
+ <tr><th>CUPS_CSPACE_CIELab <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th> <td class="description">CIE Lab </td></tr>
+ <tr><th>CUPS_CSPACE_CIEXYZ <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th> <td class="description">CIE XYZ </td></tr>
+ <tr><th>CUPS_CSPACE_CMY </th> <td class="description">Cyan, magenta, yellow (DeviceCMY)</td></tr>
+ <tr><th>CUPS_CSPACE_CMYK </th> <td class="description">Cyan, magenta, yellow, black (DeviceCMYK)</td></tr>
+ <tr><th>CUPS_CSPACE_DEVICE1 <span class="info">&#160;CUPS 1.4.5&#160;</span></th> <td class="description">DeviceN, 1 color </td></tr>
+ <tr><th>CUPS_CSPACE_DEVICE2 <span class="info">&#160;CUPS 1.4.5&#160;</span></th> <td class="description">DeviceN, 2 colors </td></tr>
+ <tr><th>CUPS_CSPACE_DEVICE3 <span class="info">&#160;CUPS 1.4.5&#160;</span></th> <td class="description">DeviceN, 3 colors </td></tr>
+ <tr><th>CUPS_CSPACE_DEVICE4 <span class="info">&#160;CUPS 1.4.5&#160;</span></th> <td class="description">DeviceN, 4 colors </td></tr>
+ <tr><th>CUPS_CSPACE_DEVICE5 <span class="info">&#160;CUPS 1.4.5&#160;</span></th> <td class="description">DeviceN, 5 colors </td></tr>
+ <tr><th>CUPS_CSPACE_DEVICE6 <span class="info">&#160;CUPS 1.4.5&#160;</span></th> <td class="description">DeviceN, 6 colors </td></tr>
+ <tr><th>CUPS_CSPACE_DEVICE7 <span class="info">&#160;CUPS 1.4.5&#160;</span></th> <td class="description">DeviceN, 7 colors </td></tr>
+ <tr><th>CUPS_CSPACE_DEVICE8 <span class="info">&#160;CUPS 1.4.5&#160;</span></th> <td class="description">DeviceN, 8 colors </td></tr>
+ <tr><th>CUPS_CSPACE_DEVICE9 <span class="info">&#160;CUPS 1.4.5&#160;</span></th> <td class="description">DeviceN, 9 colors </td></tr>
+ <tr><th>CUPS_CSPACE_DEVICEA <span class="info">&#160;CUPS 1.4.5&#160;</span></th> <td class="description">DeviceN, 10 colors </td></tr>
+ <tr><th>CUPS_CSPACE_DEVICEB <span class="info">&#160;CUPS 1.4.5&#160;</span></th> <td class="description">DeviceN, 11 colors </td></tr>
+ <tr><th>CUPS_CSPACE_DEVICEC <span class="info">&#160;CUPS 1.4.5&#160;</span></th> <td class="description">DeviceN, 12 colors </td></tr>
+ <tr><th>CUPS_CSPACE_DEVICED <span class="info">&#160;CUPS 1.4.5&#160;</span></th> <td class="description">DeviceN, 13 colors </td></tr>
+ <tr><th>CUPS_CSPACE_DEVICEE <span class="info">&#160;CUPS 1.4.5&#160;</span></th> <td class="description">DeviceN, 14 colors </td></tr>
+ <tr><th>CUPS_CSPACE_DEVICEF <span class="info">&#160;CUPS 1.4.5&#160;</span></th> <td class="description">DeviceN, 15 colors </td></tr>
+ <tr><th>CUPS_CSPACE_GMCK <span class="info">&#160;DEPRECATED&#160;</span></th> <td class="description">Gold, magenta, yellow, black </td></tr>
+ <tr><th>CUPS_CSPACE_GMCS <span class="info">&#160;DEPRECATED&#160;</span></th> <td class="description">Gold, magenta, yellow, silver </td></tr>
+ <tr><th>CUPS_CSPACE_GOLD <span class="info">&#160;DEPRECATED&#160;</span></th> <td class="description">Gold foil </td></tr>
+ <tr><th>CUPS_CSPACE_ICC1 <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th> <td class="description">ICC-based, 1 color </td></tr>
+ <tr><th>CUPS_CSPACE_ICC2 <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th> <td class="description">ICC-based, 2 colors </td></tr>
+ <tr><th>CUPS_CSPACE_ICC3 <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th> <td class="description">ICC-based, 3 colors </td></tr>
+ <tr><th>CUPS_CSPACE_ICC4 <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th> <td class="description">ICC-based, 4 colors </td></tr>
+ <tr><th>CUPS_CSPACE_ICC5 <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th> <td class="description">ICC-based, 5 colors </td></tr>
+ <tr><th>CUPS_CSPACE_ICC6 <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th> <td class="description">ICC-based, 6 colors </td></tr>
+ <tr><th>CUPS_CSPACE_ICC7 <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th> <td class="description">ICC-based, 7 colors </td></tr>
+ <tr><th>CUPS_CSPACE_ICC8 <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th> <td class="description">ICC-based, 8 colors </td></tr>
+ <tr><th>CUPS_CSPACE_ICC9 <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th> <td class="description">ICC-based, 9 colors </td></tr>
+ <tr><th>CUPS_CSPACE_ICCA <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th> <td class="description">ICC-based, 10 colors </td></tr>
+ <tr><th>CUPS_CSPACE_ICCB <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th> <td class="description">ICC-based, 11 colors </td></tr>
+ <tr><th>CUPS_CSPACE_ICCC <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th> <td class="description">ICC-based, 12 colors </td></tr>
+ <tr><th>CUPS_CSPACE_ICCD <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th> <td class="description">ICC-based, 13 colors </td></tr>
+ <tr><th>CUPS_CSPACE_ICCE <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th> <td class="description">ICC-based, 14 colors </td></tr>
+ <tr><th>CUPS_CSPACE_ICCF <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th> <td class="description">ICC-based, 15 colors </td></tr>
+ <tr><th>CUPS_CSPACE_K </th> <td class="description">Black (DeviceK)</td></tr>
+ <tr><th>CUPS_CSPACE_KCMY <span class="info">&#160;DEPRECATED&#160;</span></th> <td class="description">Black, cyan, magenta, yellow </td></tr>
+ <tr><th>CUPS_CSPACE_KCMYcm <span class="info">&#160;DEPRECATED&#160;</span></th> <td class="description">Black, cyan, magenta, yellow, light-cyan, light-magenta </td></tr>
+ <tr><th>CUPS_CSPACE_RGB </th> <td class="description">Red, green, blue (DeviceRGB, sRGB by default)</td></tr>
+ <tr><th>CUPS_CSPACE_RGBA </th> <td class="description">Red, green, blue, alpha (DeviceRGB, sRGB by default)</td></tr>
+ <tr><th>CUPS_CSPACE_RGBW <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th> <td class="description">Red, green, blue, white (DeviceRGB, sRGB by default) </td></tr>
+ <tr><th>CUPS_CSPACE_SILVER <span class="info">&#160;DEPRECATED&#160;</span></th> <td class="description">Silver foil </td></tr>
+ <tr><th>CUPS_CSPACE_SRGB <span class="info">&#160;CUPS 1.4.5&#160;</span></th> <td class="description">Red, green, blue (sRGB) </td></tr>
+ <tr><th>CUPS_CSPACE_SW <span class="info">&#160;CUPS 1.4.5&#160;</span></th> <td class="description">Luminance (gamma 2.2) </td></tr>
+ <tr><th>CUPS_CSPACE_W </th> <td class="description">Luminance (DeviceGray, gamma 2.2 by default)</td></tr>
+ <tr><th>CUPS_CSPACE_WHITE <span class="info">&#160;DEPRECATED&#160;</span></th> <td class="description">White ink (as black) </td></tr>
+ <tr><th>CUPS_CSPACE_YMC <span class="info">&#160;DEPRECATED&#160;</span></th> <td class="description">Yellow, magenta, cyan </td></tr>
+ <tr><th>CUPS_CSPACE_YMCK <span class="info">&#160;DEPRECATED&#160;</span></th> <td class="description">Yellow, magenta, cyan, black </td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="cups_cut_e">cups_cut_e</a></h3>
+ <p class="description">CutMedia attribute values</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>CUPS_CUT_FILE </th> <td class="description">Cut the roll after this file</td></tr>
+ <tr><th>CUPS_CUT_JOB </th> <td class="description">Cut the roll after this job</td></tr>
+ <tr><th>CUPS_CUT_NONE </th> <td class="description">Never cut the roll</td></tr>
+ <tr><th>CUPS_CUT_PAGE </th> <td class="description">Cut the roll after this page</td></tr>
+ <tr><th>CUPS_CUT_SET </th> <td class="description">Cut the roll after this set</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="cups_edge_e">cups_edge_e</a></h3>
+ <p class="description">LeadingEdge attribute values</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>CUPS_EDGE_BOTTOM </th> <td class="description">Leading edge is the bottom of the page</td></tr>
+ <tr><th>CUPS_EDGE_LEFT </th> <td class="description">Leading edge is the left of the page</td></tr>
+ <tr><th>CUPS_EDGE_RIGHT </th> <td class="description">Leading edge is the right of the page</td></tr>
+ <tr><th>CUPS_EDGE_TOP </th> <td class="description">Leading edge is the top of the page</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="cups_jog_e">cups_jog_e</a></h3>
+ <p class="description">Jog attribute values</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>CUPS_JOG_FILE </th> <td class="description">Move pages after this file</td></tr>
+ <tr><th>CUPS_JOG_JOB </th> <td class="description">Move pages after this job</td></tr>
+ <tr><th>CUPS_JOG_NONE </th> <td class="description">Never move pages</td></tr>
+ <tr><th>CUPS_JOG_SET </th> <td class="description">Move pages after this set</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="cups_mode_e">cups_mode_e</a></h3>
+ <p class="description">cupsRasterOpen modes</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>CUPS_RASTER_READ </th> <td class="description">Open stream for reading</td></tr>
+ <tr><th>CUPS_RASTER_WRITE </th> <td class="description">Open stream for writing</td></tr>
+ <tr><th>CUPS_RASTER_WRITE_COMPRESSED <span class="info">&#160;CUPS 1.3/macOS 10.5&#160;</span></th> <td class="description">Open stream for compressed writing </td></tr>
+ <tr><th>CUPS_RASTER_WRITE_PWG <span class="info">&#160;CUPS 1.5/macOS 10.7&#160;</span></th> <td class="description">Open stream for compressed writing in PWG Raster mode </td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="cups_order_e">cups_order_e</a></h3>
+ <p class="description">cupsColorOrder attribute values</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>CUPS_ORDER_BANDED </th> <td class="description">CCC MMM YYY KKK ...</td></tr>
+ <tr><th>CUPS_ORDER_CHUNKED </th> <td class="description">CMYK CMYK CMYK ...</td></tr>
+ <tr><th>CUPS_ORDER_PLANAR </th> <td class="description">CCC ... MMM ... YYY ... KKK ...</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="cups_orient_e">cups_orient_e</a></h3>
+ <p class="description">Orientation attribute values</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>CUPS_ORIENT_0 </th> <td class="description">Don't rotate the page</td></tr>
+ <tr><th>CUPS_ORIENT_180 </th> <td class="description">Turn the page upside down</td></tr>
+ <tr><th>CUPS_ORIENT_270 </th> <td class="description">Rotate the page clockwise</td></tr>
+ <tr><th>CUPS_ORIENT_90 </th> <td class="description">Rotate the page counter-clockwise</td></tr>
+</tbody></table>
+ </div>
+ </body>
</html>
diff --git a/doc/help/cupspm.epub b/doc/help/cupspm.epub
new file mode 100644
index 0000000..91b73d9
--- /dev/null
+++ b/doc/help/cupspm.epub
Binary files differ
diff --git a/doc/help/cupspm.html b/doc/help/cupspm.html
new file mode 100644
index 0000000..d0d6600
--- /dev/null
+++ b/doc/help/cupspm.html
@@ -0,0 +1,6493 @@
+<!doctype html>
+<html>
+<!-- SECTION: Programming -->
+ <head>
+ <title>CUPS Programming Manual</title>
+ <meta name="keywords" content="Programming">
+ <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+ <meta name="creator" content="Mini-XML v2.11">
+ <meta name="author" content="Michael R Sweet">
+ <meta name="copyright" content="Copyright &#xa9; 2007-2017 by Apple Inc. All Rights Reserved.">
+ <meta name="version" content="2.2.4">
+ <style type="text/css"><!--
+body, p, h1, h2, h3, h4 {
+ font-family: sans-serif;
+}
+div.body h1 {
+ font-size: 250%;
+ font-weight: bold;
+ margin: 0;
+}
+div.body h2 {
+ font-size: 250%;
+ margin-top: 1.5em;
+}
+div.body h3 {
+ font-size: 150%;
+ margin-bottom: 0.5em;
+ margin-top: 1.5em;
+}
+div.body h4 {
+ font-size: 110%;
+ margin-bottom: 0.5em;
+ margin-top: 1.5em;
+}
+div.body h5 {
+ font-size: 100%;
+ margin-bottom: 0.5em;
+ margin-top: 1.5em;
+}
+div.contents {
+ background: #e8e8e8;
+ border: solid thin black;
+ padding: 10px;
+}
+div.contents h1 {
+ font-size: 110%;
+}
+div.contents h2 {
+ font-size: 100%;
+}
+div.contents ul.contents {
+ font-size: 80%;
+}
+.class {
+ border-bottom: solid 2px gray;
+}
+.constants {
+}
+.description {
+ margin-top: 0.5em;
+}
+.discussion {
+}
+.enumeration {
+ border-bottom: solid 2px gray;
+}
+.function {
+ border-bottom: solid 2px gray;
+ margin-bottom: 0;
+}
+.members {
+}
+.method {
+}
+.parameters {
+}
+.returnvalue {
+}
+.struct {
+ border-bottom: solid 2px gray;
+}
+.typedef {
+ border-bottom: solid 2px gray;
+}
+.union {
+ border-bottom: solid 2px gray;
+}
+.variable {
+}
+h1, h2, h3, h4, h5, h6 {
+ page-break-inside: avoid;
+}
+blockquote {
+ border: solid thin gray;
+ box-shadow: 3px 3px 5px rgba(0,0,0,0.5);
+ padding: 0px 10px;
+ page-break-inside: avoid;
+}
+p code, li code, p.code, pre, ul.code li {
+ background: rgba(127,127,127,0.1);
+ border: thin dotted gray;
+ font-family: monospace;
+ font-size: 90%;
+ hyphens: manual;
+ -webkit-hyphens: manual;
+ page-break-inside: avoid;
+}
+p.code, pre, ul.code li {
+ padding: 10px;
+}
+p code, li code {
+ padding: 2px 5px;
+}
+a:link, a:visited {
+ text-decoration: none;
+}
+span.info {
+ background: black;
+ border: solid thin black;
+ color: white;
+ font-size: 80%;
+ font-style: italic;
+ font-weight: bold;
+ white-space: nowrap;
+}
+h3 span.info, h4 span.info {
+ border-top-left-radius: 10px;
+ border-top-right-radius: 10px;
+ float: right;
+ padding: 3px 6px;
+}
+ul.code, ul.contents, ul.subcontents {
+ list-style-type: none;
+ margin: 0;
+ padding-left: 0;
+}
+ul.code li {
+ margin: 0;
+}
+ul.contents > li {
+ margin-top: 1em;
+}
+ul.contents li ul.code, ul.contents li ul.subcontents {
+ padding-left: 2em;
+}
+table.list {
+ border-collapse: collapse;
+ width: 100%;
+}
+table.list tr:nth-child(even) {
+ background: rgba(127,127,127,0.1);]n}
+table.list th {
+ border-right: 2px solid gray;
+ font-family: monospace;
+ padding: 5px 10px 5px 2px;
+ text-align: right;
+ vertical-align: top;
+}
+table.list td {
+ padding: 5px 2px 5px 10px;
+ text-align: left;
+ vertical-align: top;
+}
+h1.title {
+}
+h2.title {
+ border-bottom: solid 2px black;
+}
+h3.title {
+ border-bottom: solid 2px black;
+}
+--></style>
+ </head>
+ <body>
+ <h1 class="title">CUPS Programming Manual</h1>
+ <p>Michael R Sweet</p>
+ <p>Copyright &#xa9; 2007-2017 by Apple Inc. All Rights Reserved.</p>
+ <div class="contents">
+ <h2 class="title">Contents</h2>
+ <ul class="contents">
+ <li><a href="#introduction">Introduction</a><ul class="subcontents">
+ <li><a href="#guidelines">Guidelines</a></li>
+ <li><a href="#terms-used-in-this-document">Terms Used in This Document</a></li>
+ <li><a href="#compiling-programs-that-use-the-cups-api">Compiling Programs That Use the CUPS API</a></li>
+ </ul></li>
+ <li><a href="#working-with-destinations">Working with Destinations</a><ul class="subcontents">
+ <li><a href="#finding-available-destinations">Finding Available Destinations</a></li>
+ <li><a href="#basic-destination-information">Basic Destination Information</a></li>
+ <li><a href="#detailed-destination-information">Detailed Destination Information</a></li>
+ <li><a href="#submitting-a-print-job">Submitting a Print Job</a></li>
+ </ul></li>
+ <li><a href="#sending-ipp-requests">Sending IPP Requests</a><ul class="subcontents">
+ <li><a href="#connecting-to-the-scheduler-or-printer">Connecting to the Scheduler or Printer</a></li>
+ <li><a href="#creating-an-ipp-request">Creating an IPP Request</a></li>
+ <li><a href="#sending-the-ipp-request">Sending the IPP Request</a></li>
+ <li><a href="#processing-the-ipp-response">Processing the IPP Response</a></li>
+ <li><a href="#authentication">Authentication</a></li>
+ </ul></li>
+ <li><a href="#FUNCTIONS">Functions</a><ul class="subcontents">
+ <li><a href="#cupsAddDest">cupsAddDest</a></li>
+ <li><a href="#cupsAddIntegerOption">cupsAddIntegerOption</a></li>
+ <li><a href="#cupsAddOption">cupsAddOption</a></li>
+ <li><a href="#cupsCancelDestJob">cupsCancelDestJob</a></li>
+ <li><a href="#cupsCheckDestSupported">cupsCheckDestSupported</a></li>
+ <li><a href="#cupsCloseDestJob">cupsCloseDestJob</a></li>
+ <li><a href="#cupsConnectDest">cupsConnectDest</a></li>
+ <li><a href="#cupsCopyDest">cupsCopyDest</a></li>
+ <li><a href="#cupsCopyDestConflicts">cupsCopyDestConflicts</a></li>
+ <li><a href="#cupsCopyDestInfo">cupsCopyDestInfo</a></li>
+ <li><a href="#cupsCreateDestJob">cupsCreateDestJob</a></li>
+ <li><a href="#cupsDoAuthentication">cupsDoAuthentication</a></li>
+ <li><a href="#cupsEncodeOptions">cupsEncodeOptions</a></li>
+ <li><a href="#cupsEncodeOptions2">cupsEncodeOptions2</a></li>
+ <li><a href="#cupsEncryption">cupsEncryption</a></li>
+ <li><a href="#cupsEnumDests">cupsEnumDests</a></li>
+ <li><a href="#cupsFindDestDefault">cupsFindDestDefault</a></li>
+ <li><a href="#cupsFindDestReady">cupsFindDestReady</a></li>
+ <li><a href="#cupsFindDestSupported">cupsFindDestSupported</a></li>
+ <li><a href="#cupsFinishDestDocument">cupsFinishDestDocument</a></li>
+ <li><a href="#cupsFreeDestInfo">cupsFreeDestInfo</a></li>
+ <li><a href="#cupsFreeDests">cupsFreeDests</a></li>
+ <li><a href="#cupsFreeJobs">cupsFreeJobs</a></li>
+ <li><a href="#cupsFreeOptions">cupsFreeOptions</a></li>
+ <li><a href="#cupsGetDest">cupsGetDest</a></li>
+ <li><a href="#cupsGetDestMediaByIndex">cupsGetDestMediaByIndex</a></li>
+ <li><a href="#cupsGetDestMediaByName">cupsGetDestMediaByName</a></li>
+ <li><a href="#cupsGetDestMediaBySize">cupsGetDestMediaBySize</a></li>
+ <li><a href="#cupsGetDestMediaCount">cupsGetDestMediaCount</a></li>
+ <li><a href="#cupsGetDestMediaDefault">cupsGetDestMediaDefault</a></li>
+ <li><a href="#cupsGetDestWithURI">cupsGetDestWithURI</a></li>
+ <li><a href="#cupsGetDests2">cupsGetDests2</a></li>
+ <li><a href="#cupsGetIntegerOption">cupsGetIntegerOption</a></li>
+ <li><a href="#cupsGetJobs2">cupsGetJobs2</a></li>
+ <li><a href="#cupsGetNamedDest">cupsGetNamedDest</a></li>
+ <li><a href="#cupsGetOption">cupsGetOption</a></li>
+ <li><a href="#cupsGetPassword2">cupsGetPassword2</a></li>
+ <li><a href="#cupsLocalizeDestMedia">cupsLocalizeDestMedia</a></li>
+ <li><a href="#cupsLocalizeDestOption">cupsLocalizeDestOption</a></li>
+ <li><a href="#cupsLocalizeDestValue">cupsLocalizeDestValue</a></li>
+ <li><a href="#cupsMakeServerCredentials">cupsMakeServerCredentials</a></li>
+ <li><a href="#cupsParseOptions">cupsParseOptions</a></li>
+ <li><a href="#cupsRemoveDest">cupsRemoveDest</a></li>
+ <li><a href="#cupsRemoveOption">cupsRemoveOption</a></li>
+ <li><a href="#cupsServer">cupsServer</a></li>
+ <li><a href="#cupsSetClientCertCB">cupsSetClientCertCB</a></li>
+ <li><a href="#cupsSetCredentials">cupsSetCredentials</a></li>
+ <li><a href="#cupsSetDefaultDest">cupsSetDefaultDest</a></li>
+ <li><a href="#cupsSetDests2">cupsSetDests2</a></li>
+ <li><a href="#cupsSetEncryption">cupsSetEncryption</a></li>
+ <li><a href="#cupsSetPasswordCB2">cupsSetPasswordCB2</a></li>
+ <li><a href="#cupsSetServer">cupsSetServer</a></li>
+ <li><a href="#cupsSetServerCertCB">cupsSetServerCertCB</a></li>
+ <li><a href="#cupsSetServerCredentials">cupsSetServerCredentials</a></li>
+ <li><a href="#cupsSetUser">cupsSetUser</a></li>
+ <li><a href="#cupsSetUserAgent">cupsSetUserAgent</a></li>
+ <li><a href="#cupsStartDestDocument">cupsStartDestDocument</a></li>
+ <li><a href="#cupsUser">cupsUser</a></li>
+ <li><a href="#cupsUserAgent">cupsUserAgent</a></li>
+ <li><a href="#httpAcceptConnection">httpAcceptConnection</a></li>
+ <li><a href="#httpAddCredential">httpAddCredential</a></li>
+ <li><a href="#httpAddrAny">httpAddrAny</a></li>
+ <li><a href="#httpAddrClose">httpAddrClose</a></li>
+ <li><a href="#httpAddrConnect2">httpAddrConnect2</a></li>
+ <li><a href="#httpAddrCopyList">httpAddrCopyList</a></li>
+ <li><a href="#httpAddrEqual">httpAddrEqual</a></li>
+ <li><a href="#httpAddrFamily">httpAddrFamily</a></li>
+ <li><a href="#httpAddrFreeList">httpAddrFreeList</a></li>
+ <li><a href="#httpAddrGetList">httpAddrGetList</a></li>
+ <li><a href="#httpAddrLength">httpAddrLength</a></li>
+ <li><a href="#httpAddrListen">httpAddrListen</a></li>
+ <li><a href="#httpAddrLocalhost">httpAddrLocalhost</a></li>
+ <li><a href="#httpAddrLookup">httpAddrLookup</a></li>
+ <li><a href="#httpAddrPort">httpAddrPort</a></li>
+ <li><a href="#httpAddrString">httpAddrString</a></li>
+ <li><a href="#httpAssembleURI">httpAssembleURI</a></li>
+ <li><a href="#httpAssembleURIf">httpAssembleURIf</a></li>
+ <li><a href="#httpAssembleUUID">httpAssembleUUID</a></li>
+ <li><a href="#httpBlocking">httpBlocking</a></li>
+ <li><a href="#httpCheck">httpCheck</a></li>
+ <li><a href="#httpClearCookie">httpClearCookie</a></li>
+ <li><a href="#httpClearFields">httpClearFields</a></li>
+ <li><a href="#httpClose">httpClose</a></li>
+ <li><a href="#httpCompareCredentials">httpCompareCredentials</a></li>
+ <li><a href="#httpConnect2">httpConnect2</a></li>
+ <li><a href="#httpCopyCredentials">httpCopyCredentials</a></li>
+ <li><a href="#httpCredentialsAreValidForName">httpCredentialsAreValidForName</a></li>
+ <li><a href="#httpCredentialsGetExpiration">httpCredentialsGetExpiration</a></li>
+ <li><a href="#httpCredentialsGetTrust">httpCredentialsGetTrust</a></li>
+ <li><a href="#httpCredentialsString">httpCredentialsString</a></li>
+ <li><a href="#httpDecode64_2">httpDecode64_2</a></li>
+ <li><a href="#httpDelete">httpDelete</a></li>
+ <li><a href="#httpEncode64_2">httpEncode64_2</a></li>
+ <li><a href="#httpEncryption">httpEncryption</a></li>
+ <li><a href="#httpError">httpError</a></li>
+ <li><a href="#httpFieldValue">httpFieldValue</a></li>
+ <li><a href="#httpFlush">httpFlush</a></li>
+ <li><a href="#httpFlushWrite">httpFlushWrite</a></li>
+ <li><a href="#httpFreeCredentials">httpFreeCredentials</a></li>
+ <li><a href="#httpGet">httpGet</a></li>
+ <li><a href="#httpGetActivity">httpGetActivity</a></li>
+ <li><a href="#httpGetAddress">httpGetAddress</a></li>
+ <li><a href="#httpGetAuthString">httpGetAuthString</a></li>
+ <li><a href="#httpGetBlocking">httpGetBlocking</a></li>
+ <li><a href="#httpGetContentEncoding">httpGetContentEncoding</a></li>
+ <li><a href="#httpGetCookie">httpGetCookie</a></li>
+ <li><a href="#httpGetDateString2">httpGetDateString2</a></li>
+ <li><a href="#httpGetDateTime">httpGetDateTime</a></li>
+ <li><a href="#httpGetEncryption">httpGetEncryption</a></li>
+ <li><a href="#httpGetExpect">httpGetExpect</a></li>
+ <li><a href="#httpGetFd">httpGetFd</a></li>
+ <li><a href="#httpGetField">httpGetField</a></li>
+ <li><a href="#httpGetHostname">httpGetHostname</a></li>
+ <li><a href="#httpGetKeepAlive">httpGetKeepAlive</a></li>
+ <li><a href="#httpGetLength2">httpGetLength2</a></li>
+ <li><a href="#httpGetPending">httpGetPending</a></li>
+ <li><a href="#httpGetReady">httpGetReady</a></li>
+ <li><a href="#httpGetRemaining">httpGetRemaining</a></li>
+ <li><a href="#httpGetState">httpGetState</a></li>
+ <li><a href="#httpGetStatus">httpGetStatus</a></li>
+ <li><a href="#httpGetSubField2">httpGetSubField2</a></li>
+ <li><a href="#httpGetVersion">httpGetVersion</a></li>
+ <li><a href="#httpGets">httpGets</a></li>
+ <li><a href="#httpHead">httpHead</a></li>
+ <li><a href="#httpInitialize">httpInitialize</a></li>
+ <li><a href="#httpIsChunked">httpIsChunked</a></li>
+ <li><a href="#httpIsEncrypted">httpIsEncrypted</a></li>
+ <li><a href="#httpLoadCredentials">httpLoadCredentials</a></li>
+ <li><a href="#httpOptions">httpOptions</a></li>
+ <li><a href="#httpPeek">httpPeek</a></li>
+ <li><a href="#httpPost">httpPost</a></li>
+ <li><a href="#httpPut">httpPut</a></li>
+ <li><a href="#httpRead2">httpRead2</a></li>
+ <li><a href="#httpReadRequest">httpReadRequest</a></li>
+ <li><a href="#httpReconnect2">httpReconnect2</a></li>
+ <li><a href="#httpResolveHostname">httpResolveHostname</a></li>
+ <li><a href="#httpSaveCredentials">httpSaveCredentials</a></li>
+ <li><a href="#httpSeparateURI">httpSeparateURI</a></li>
+ <li><a href="#httpSetAuthString">httpSetAuthString</a></li>
+ <li><a href="#httpSetCookie">httpSetCookie</a></li>
+ <li><a href="#httpSetCredentials">httpSetCredentials</a></li>
+ <li><a href="#httpSetDefaultField">httpSetDefaultField</a></li>
+ <li><a href="#httpSetExpect">httpSetExpect</a></li>
+ <li><a href="#httpSetField">httpSetField</a></li>
+ <li><a href="#httpSetKeepAlive">httpSetKeepAlive</a></li>
+ <li><a href="#httpSetLength">httpSetLength</a></li>
+ <li><a href="#httpSetTimeout">httpSetTimeout</a></li>
+ <li><a href="#httpShutdown">httpShutdown</a></li>
+ <li><a href="#httpStateString">httpStateString</a></li>
+ <li><a href="#httpStatus">httpStatus</a></li>
+ <li><a href="#httpURIStatusString">httpURIStatusString</a></li>
+ <li><a href="#httpUpdate">httpUpdate</a></li>
+ <li><a href="#httpWait">httpWait</a></li>
+ <li><a href="#httpWrite2">httpWrite2</a></li>
+ <li><a href="#httpWriteResponse">httpWriteResponse</a></li>
+ <li><a href="#ippAddBoolean">ippAddBoolean</a></li>
+ <li><a href="#ippAddBooleans">ippAddBooleans</a></li>
+ <li><a href="#ippAddCollection">ippAddCollection</a></li>
+ <li><a href="#ippAddCollections">ippAddCollections</a></li>
+ <li><a href="#ippAddDate">ippAddDate</a></li>
+ <li><a href="#ippAddInteger">ippAddInteger</a></li>
+ <li><a href="#ippAddIntegers">ippAddIntegers</a></li>
+ <li><a href="#ippAddOctetString">ippAddOctetString</a></li>
+ <li><a href="#ippAddOutOfBand">ippAddOutOfBand</a></li>
+ <li><a href="#ippAddRange">ippAddRange</a></li>
+ <li><a href="#ippAddRanges">ippAddRanges</a></li>
+ <li><a href="#ippAddResolution">ippAddResolution</a></li>
+ <li><a href="#ippAddResolutions">ippAddResolutions</a></li>
+ <li><a href="#ippAddSeparator">ippAddSeparator</a></li>
+ <li><a href="#ippAddString">ippAddString</a></li>
+ <li><a href="#ippAddStringf">ippAddStringf</a></li>
+ <li><a href="#ippAddStringfv">ippAddStringfv</a></li>
+ <li><a href="#ippAddStrings">ippAddStrings</a></li>
+ <li><a href="#ippAttributeString">ippAttributeString</a></li>
+ <li><a href="#ippContainsInteger">ippContainsInteger</a></li>
+ <li><a href="#ippContainsString">ippContainsString</a></li>
+ <li><a href="#ippCopyAttribute">ippCopyAttribute</a></li>
+ <li><a href="#ippCopyAttributes">ippCopyAttributes</a></li>
+ <li><a href="#ippCreateRequestedArray">ippCreateRequestedArray</a></li>
+ <li><a href="#ippDateToTime">ippDateToTime</a></li>
+ <li><a href="#ippDelete">ippDelete</a></li>
+ <li><a href="#ippDeleteAttribute">ippDeleteAttribute</a></li>
+ <li><a href="#ippDeleteValues">ippDeleteValues</a></li>
+ <li><a href="#ippEnumString">ippEnumString</a></li>
+ <li><a href="#ippEnumValue">ippEnumValue</a></li>
+ <li><a href="#ippErrorString">ippErrorString</a></li>
+ <li><a href="#ippErrorValue">ippErrorValue</a></li>
+ <li><a href="#ippFindAttribute">ippFindAttribute</a></li>
+ <li><a href="#ippFindNextAttribute">ippFindNextAttribute</a></li>
+ <li><a href="#ippFirstAttribute">ippFirstAttribute</a></li>
+ <li><a href="#ippGetBoolean">ippGetBoolean</a></li>
+ <li><a href="#ippGetCollection">ippGetCollection</a></li>
+ <li><a href="#ippGetCount">ippGetCount</a></li>
+ <li><a href="#ippGetDate">ippGetDate</a></li>
+ <li><a href="#ippGetGroupTag">ippGetGroupTag</a></li>
+ <li><a href="#ippGetInteger">ippGetInteger</a></li>
+ <li><a href="#ippGetName">ippGetName</a></li>
+ <li><a href="#ippGetOctetString">ippGetOctetString</a></li>
+ <li><a href="#ippGetOperation">ippGetOperation</a></li>
+ <li><a href="#ippGetRange">ippGetRange</a></li>
+ <li><a href="#ippGetRequestId">ippGetRequestId</a></li>
+ <li><a href="#ippGetResolution">ippGetResolution</a></li>
+ <li><a href="#ippGetState">ippGetState</a></li>
+ <li><a href="#ippGetStatusCode">ippGetStatusCode</a></li>
+ <li><a href="#ippGetString">ippGetString</a></li>
+ <li><a href="#ippGetValueTag">ippGetValueTag</a></li>
+ <li><a href="#ippGetVersion">ippGetVersion</a></li>
+ <li><a href="#ippLength">ippLength</a></li>
+ <li><a href="#ippNew">ippNew</a></li>
+ <li><a href="#ippNewRequest">ippNewRequest</a></li>
+ <li><a href="#ippNewResponse">ippNewResponse</a></li>
+ <li><a href="#ippNextAttribute">ippNextAttribute</a></li>
+ <li><a href="#ippOpString">ippOpString</a></li>
+ <li><a href="#ippOpValue">ippOpValue</a></li>
+ <li><a href="#ippPort">ippPort</a></li>
+ <li><a href="#ippRead">ippRead</a></li>
+ <li><a href="#ippReadFile">ippReadFile</a></li>
+ <li><a href="#ippReadIO">ippReadIO</a></li>
+ <li><a href="#ippSetBoolean">ippSetBoolean</a></li>
+ <li><a href="#ippSetCollection">ippSetCollection</a></li>
+ <li><a href="#ippSetDate">ippSetDate</a></li>
+ <li><a href="#ippSetGroupTag">ippSetGroupTag</a></li>
+ <li><a href="#ippSetInteger">ippSetInteger</a></li>
+ <li><a href="#ippSetName">ippSetName</a></li>
+ <li><a href="#ippSetOctetString">ippSetOctetString</a></li>
+ <li><a href="#ippSetOperation">ippSetOperation</a></li>
+ <li><a href="#ippSetPort">ippSetPort</a></li>
+ <li><a href="#ippSetRange">ippSetRange</a></li>
+ <li><a href="#ippSetRequestId">ippSetRequestId</a></li>
+ <li><a href="#ippSetResolution">ippSetResolution</a></li>
+ <li><a href="#ippSetState">ippSetState</a></li>
+ <li><a href="#ippSetStatusCode">ippSetStatusCode</a></li>
+ <li><a href="#ippSetString">ippSetString</a></li>
+ <li><a href="#ippSetStringf">ippSetStringf</a></li>
+ <li><a href="#ippSetStringfv">ippSetStringfv</a></li>
+ <li><a href="#ippSetValueTag">ippSetValueTag</a></li>
+ <li><a href="#ippSetVersion">ippSetVersion</a></li>
+ <li><a href="#ippStateString">ippStateString</a></li>
+ <li><a href="#ippTagString">ippTagString</a></li>
+ <li><a href="#ippTagValue">ippTagValue</a></li>
+ <li><a href="#ippTimeToDate">ippTimeToDate</a></li>
+ <li><a href="#ippValidateAttribute">ippValidateAttribute</a></li>
+ <li><a href="#ippValidateAttributes">ippValidateAttributes</a></li>
+ <li><a href="#ippWrite">ippWrite</a></li>
+ <li><a href="#ippWriteFile">ippWriteFile</a></li>
+ <li><a href="#ippWriteIO">ippWriteIO</a></li>
+ </ul></li>
+ <li><a href="#TYPES">Data Types</a><ul class="subcontents">
+ <li><a href="#cups_client_cert_cb_t">cups_client_cert_cb_t</a></li>
+ <li><a href="#cups_dest_cb_t">cups_dest_cb_t</a></li>
+ <li><a href="#cups_dest_t">cups_dest_t</a></li>
+ <li><a href="#cups_dinfo_t">cups_dinfo_t</a></li>
+ <li><a href="#cups_job_t">cups_job_t</a></li>
+ <li><a href="#cups_option_t">cups_option_t</a></li>
+ <li><a href="#cups_password_cb2_t">cups_password_cb2_t</a></li>
+ <li><a href="#cups_ptype_t">cups_ptype_t</a></li>
+ <li><a href="#cups_server_cert_cb_t">cups_server_cert_cb_t</a></li>
+ <li><a href="#cups_size_t">cups_size_t</a></li>
+ <li><a href="#http_addr_t">http_addr_t</a></li>
+ <li><a href="#http_encoding_t">http_encoding_t</a></li>
+ <li><a href="#http_encryption_t">http_encryption_t</a></li>
+ <li><a href="#http_field_t">http_field_t</a></li>
+ <li><a href="#http_keepalive_t">http_keepalive_t</a></li>
+ <li><a href="#http_state_t">http_state_t</a></li>
+ <li><a href="#http_t">http_t</a></li>
+ <li><a href="#http_timeout_cb_t">http_timeout_cb_t</a></li>
+ <li><a href="#http_trust_t">http_trust_t</a></li>
+ <li><a href="#http_uri_coding_t">http_uri_coding_t</a></li>
+ <li><a href="#http_uri_status_t">http_uri_status_t</a></li>
+ <li><a href="#ipp_attribute_t">ipp_attribute_t</a></li>
+ <li><a href="#ipp_copycb_t">ipp_copycb_t</a></li>
+ <li><a href="#ipp_iocb_t">ipp_iocb_t</a></li>
+ <li><a href="#ipp_orient_t">ipp_orient_t</a></li>
+ <li><a href="#ipp_pstate_t">ipp_pstate_t</a></li>
+ <li><a href="#ipp_quality_t">ipp_quality_t</a></li>
+ <li><a href="#ipp_res_t">ipp_res_t</a></li>
+ <li><a href="#ipp_state_t">ipp_state_t</a></li>
+ <li><a href="#ipp_t">ipp_t</a></li>
+ </ul></li>
+ <li><a href="#STRUCTURES">Structures</a><ul class="subcontents">
+ <li><a href="#cups_dest_s">cups_dest_s</a></li>
+ <li><a href="#cups_job_s">cups_job_s</a></li>
+ <li><a href="#cups_option_s">cups_option_s</a></li>
+ <li><a href="#cups_size_s">cups_size_s</a></li>
+ </ul></li>
+ <li><a href="#ENUMERATIONS">Enumerations</a><ul class="subcontents">
+ <li><a href="#cups_ptype_e">cups_ptype_e</a></li>
+ <li><a href="#http_encoding_e">http_encoding_e</a></li>
+ <li><a href="#http_encryption_e">http_encryption_e</a></li>
+ <li><a href="#http_field_e">http_field_e</a></li>
+ <li><a href="#http_keepalive_e">http_keepalive_e</a></li>
+ <li><a href="#http_state_e">http_state_e</a></li>
+ <li><a href="#http_status_e">http_status_e</a></li>
+ <li><a href="#http_trust_e">http_trust_e</a></li>
+ <li><a href="#http_uri_coding_e">http_uri_coding_e</a></li>
+ <li><a href="#http_uri_status_e">http_uri_status_e</a></li>
+ <li><a href="#ipp_finishings_e">ipp_finishings_e</a></li>
+ <li><a href="#ipp_jstate_e">ipp_jstate_e</a></li>
+ <li><a href="#ipp_op_e">ipp_op_e</a></li>
+ <li><a href="#ipp_orient_e">ipp_orient_e</a></li>
+ <li><a href="#ipp_pstate_e">ipp_pstate_e</a></li>
+ <li><a href="#ipp_quality_e">ipp_quality_e</a></li>
+ <li><a href="#ipp_res_e">ipp_res_e</a></li>
+ <li><a href="#ipp_state_e">ipp_state_e</a></li>
+ <li><a href="#ipp_status_e">ipp_status_e</a></li>
+ <li><a href="#ipp_tag_e">ipp_tag_e</a></li>
+ </ul></li>
+ </ul>
+ </div>
+ <div class="body">
+ <blockquote>
+ <p>Please <a href="https://github.com/apple/cups/issues">file issues on Github</a> to provide feedback on this document.</p>
+</blockquote>
+ <h2><a id="introduction">Introduction</a></h2>
+ <p>CUPS provides the &quot;cups&quot; library to talk to the different parts of CUPS and with Internet Printing Protocol (IPP) printers. The &quot;cups&quot; library functions are accessed by including the <code>&lt;cups/cups.h&gt;</code> header.</p>
+ <p>CUPS is based on the Internet Printing Protocol (&quot;IPP&quot;), which allows clients (applications) to communicate with a server (the scheduler, printers, etc.) to get a list of destinations, send print jobs, and so forth. You identify which server you want to communicate with using a pointer to the opaque structure <code>http_t</code>. The <code>CUPS_HTTP_DEFAULT</code> constant can be used when you want to talk to the CUPS scheduler.</p>
+ <h3><a id="guidelines">Guidelines</a></h3>
+ <p>When writing software that uses the &quot;cups&quot; library:</p>
+ <ul>
+ <li>Do not use undocumented or deprecated APIs,</li>
+ <li>Do not rely on pre-configured printers,</li>
+ <li>Do not assume that printers support specific features or formats, and</li>
+ <li>Do not rely on implementation details (PPDs, etc.)</li>
+</ul>
+ <p>CUPS is designed to insulate users and developers from the implementation details of printers and file formats. The goal is to allow an application to supply a print file in a standard format with the user intent (&quot;print four copies, two-sided on A4 media, and staple each copy&quot;) and have the printing system manage the printer communication and format conversion needed.</p>
+ <p>Similarly, printer and job management applications can use standard query operations to obtain the status information in a common, generic form and use standard management operations to control the state of those printers and jobs.</p>
+ <h3><a id="terms-used-in-this-document">Terms Used in This Document</a></h3>
+ <p>A <em>Destination</em> is a printer or print queue that accepts print jobs. A <em>Print</em> <em>Job</em> is one or more documents that are processed by a destination using options supplied when creating the job. A <em>Document</em> is a file (JPEG image, PDF file, etc.) suitable for printing. An <em>Option</em> controls some aspect of printing, such as the media used. <em>Media</em> is the sheets or roll that is printed on. An <em>Attribute</em> is an option encoded for an Internet Printing Protocol (IPP) request.</p>
+ <h3><a id="compiling-programs-that-use-the-cups-api">Compiling Programs That Use the CUPS API</a></h3>
+ <p>The CUPS libraries can be used from any C, C++, or Objective C program. The method of compiling against the libraries varies depending on the operating system and installation of CUPS. The following sections show how to compile a simple program (shown below) in two common environments.</p>
+ <p>The following simple program lists the available destinations:</p>
+ <pre><code>#include &lt;stdio.h&gt;
+#include &lt;cups/cups.h&gt;
+
+int print_dest(void *user_data, unsigned flags, cups_dest_t *dest)
+{
+ if (dest-&gt;instance)
+ printf(&quot;%s/%s\n&quot;, dest-&gt;name, dest-&gt;instance);
+ else
+ puts(dest-&gt;name);
+
+ return (1);
+}
+
+int main(void)
+{
+ cupsEnumDests(CUPS_DEST_FLAGS_NONE, 1000, NULL, 0, 0, print_dest, NULL);
+
+ return (0);
+}
+</code></pre>
+ <h4><a id="compiling-with-xcode">Compiling with Xcode</a></h4>
+ <p>In Xcode, choose <em>New</em> <em>Project...</em> from the <em>File</em> menu (or press SHIFT+CMD+N), then select the <em>Command</em> <em>Line</em> <em>Tool</em> under the macOS Application project type. Click <em>Next</em> and enter a name for the project, for example &quot;firstcups&quot;. Click <em>Next</em> and choose a project directory. The click <em>Next</em> to create the project.</p>
+ <p>In the project window, click on the <em>Build</em> <em>Phases</em> group and expand the <em>Link</em> <em>Binary</em> <em>with</em> <em>Libraries</em> section. Click <em>+</em>, type &quot;libcups&quot; to show the library, and then double-click on <code>libcups.tbd</code>.</p>
+ <p>Finally, click on the <code>main.c</code> file in the sidebar and copy the example program to the file. Build and run (CMD+R) to see the list of destinations.</p>
+ <h4><a id="compiling-with-gcc">Compiling with GCC</a></h4>
+ <p>From the command-line, create a file called <code>sample.c</code> using your favorite editor, copy the example to this file, and save. Then run the following command to compile it with GCC and run it:</p>
+ <pre><code>gcc -o simple `cups-config --cflags` simple.c `cups-config --libs`
+./simple
+</code></pre>
+ <p>The <code>cups-config</code> command provides the compiler flags (<code>cups-config --cflags</code>) and libraries (<code>cups-config --libs</code>) needed for the local system.</p>
+ <h2><a id="working-with-destinations">Working with Destinations</a></h2>
+ <p>Destinations, which in CUPS represent individual printers or classes (collections or pools) of printers, are represented by the <code>cups_dest_t</code> structure which includes the name (<code>name</code>), instance (<code>instance</code>, saved options/settings), whether the destination is the default for the user (<code>is_default</code>), and the options and basic information associated with that destination (<code>num_options</code> and <code>options</code>).</p>
+ <p>Historically destinations have been manually maintained by the administrator of a system or network, but CUPS also supports dynamic discovery of destinations on the current network.</p>
+ <h3><a id="finding-available-destinations">Finding Available Destinations</a></h3>
+ <p>The <code>cupsEnumDests</code> function finds all of the available destinations:</p>
+ <pre><code> int
+ cupsEnumDests(unsigned flags, int msec, int *cancel,
+ cups_ptype_t type, cups_ptype_t mask,
+ cups_dest_cb_t cb, void *user_data)
+</code></pre>
+ <p>The <code>flags</code> argument specifies enumeration options, which at present must be <code>CUPS_DEST_FLAGS_NONE</code>.</p>
+ <p>The <code>msec</code> argument specifies the maximum amount of time that should be used for enumeration in milliseconds - interactive applications should keep this value to 5000 or less when run on the main thread.</p>
+ <p>The <code>cancel</code> argument points to an integer variable that, when set to a non-zero value, will cause enumeration to stop as soon as possible. It can be <code>NULL</code> if not needed.</p>
+ <p>The <code>type</code> and <code>mask</code> arguments are bitfields that allow the caller to filter the destinations based on categories and/or capabilities. The destination's &quot;printer-type&quot; value is masked by the <code>mask</code> value and compared to the <code>type</code> value when filtering. For example, to only enumerate destinations that are hosted on the local system, pass <code>CUPS_PRINTER_LOCAL</code> for the <code>type</code> argument and <code>CUPS_PRINTER_DISCOVERED</code> for the <code>mask</code> argument. The following constants can be used for filtering:</p>
+ <ul>
+ <li><code>CUPS_PRINTER_CLASS</code>: A collection of destinations.</li>
+ <li><code>CUPS_PRINTER_FAX</code>: A facsimile device.</li>
+ <li><code>CUPS_PRINTER_LOCAL</code>: A local printer or class. This constant has the value 0 (no bits set) and is only used for the <code>type</code> argument and is paired with the <code>CUPS_PRINTER_REMOTE</code> or <code>CUPS_PRINTER_DISCOVERED</code> constant passed in the <code>mask</code> argument.</li>
+ <li><code>CUPS_PRINTER_REMOTE</code>: A remote (shared) printer or class.</li>
+ <li><code>CUPS_PRINTER_DISCOVERED</code>: An available network printer or class.</li>
+ <li><code>CUPS_PRINTER_BW</code>: Can do B&amp;W printing.</li>
+ <li><code>CUPS_PRINTER_COLOR</code>: Can do color printing.</li>
+ <li><code>CUPS_PRINTER_DUPLEX</code>: Can do two-sided printing.</li>
+ <li><code>CUPS_PRINTER_STAPLE</code>: Can staple output.</li>
+ <li><code>CUPS_PRINTER_COLLATE</code>: Can quickly collate copies.</li>
+ <li><code>CUPS_PRINTER_PUNCH</code>: Can punch output.</li>
+ <li><code>CUPS_PRINTER_COVER</code>: Can cover output.</li>
+ <li><code>CUPS_PRINTER_BIND</code>: Can bind output.</li>
+ <li><code>CUPS_PRINTER_SORT</code>: Can sort output (mailboxes, etc.)</li>
+ <li><code>CUPS_PRINTER_SMALL</code>: Can print on Letter/Legal/A4-size media.</li>
+ <li><code>CUPS_PRINTER_MEDIUM</code>: Can print on Tabloid/B/C/A3/A2-size media.</li>
+ <li><code>CUPS_PRINTER_LARGE</code>: Can print on D/E/A1/A0-size media.</li>
+ <li><code>CUPS_PRINTER_VARIABLE</code>: Can print on rolls and custom-size media.</li>
+</ul>
+ <p>The <code>cb</code> argument specifies a function to call for every destination that is found:</p>
+ <pre><code>typedef int (*cups_dest_cb_t)(void *user_data,
+ unsigned flags,
+ cups_dest_t *dest);
+</code></pre>
+ <p>The callback function receives a copy of the <code>user_data</code> argument along with a bitfield (<code>flags</code>) and the destination that was found. The <code>flags</code> argument can have any of the following constant (bit) values set:</p>
+ <ul>
+ <li><code>CUPS_DEST_FLAGS_MORE</code>: There are more destinations coming.</li>
+ <li><code>CUPS_DEST_FLAGS_REMOVED</code>: The destination has gone away and should be removed from the list of destinations a user can select.</li>
+ <li><code>CUPS_DEST_FLAGS_ERROR</code>: An error occurred. The reason for the error can be found by calling the <code>cupsLastError</code> and/or <code>cupsLastErrorString</code> functions.</li>
+</ul>
+ <p>The callback function returns 0 to stop enumeration or 1 to continue.</p>
+ <blockquote>
+ <p>Note that the callback function will likely be called multiple times for the same destination, so it is up to the caller to suppress any duplicate destinations.</p>
+</blockquote>
+ <p>The following example shows how to use <code>cupsEnumDests</code> to get a filtered array of destinations:</p>
+ <pre><code>typedef struct
+{
+ int num_dests;
+ cups_dest_t *dests;
+} my_user_data_t;
+
+int
+my_dest_cb(my_user_data_t *user_data, unsigned flags,
+ cups_dest_t *dest)
+{
+ if (flags &amp; CUPS_DEST_FLAGS_REMOVED)
+ {
+ /*
+ * Remove destination from array...
+ */
+
+ user_data-&gt;num_dests =
+ cupsRemoveDest(dest-&gt;name, dest-&gt;instance,
+ user_data-&gt;num_dests,
+ &amp;(user_data-&gt;dests));
+ }
+ else
+ {
+ /*
+ * Add destination to array...
+ */
+
+ user_data-&gt;num_dests =
+ cupsCopyDest(dest, user_data-&gt;num_dests,
+ &amp;(user_data-&gt;dests));
+ }
+
+ return (1);
+}
+
+int
+my_get_dests(cups_ptype_t type, cups_ptype_t mask,
+ cups_dest_t **dests)
+{
+ my_user_data_t user_data = { 0, NULL };
+
+ if (!cupsEnumDests(CUPS_DEST_FLAGS_NONE, 1000, NULL, type,
+ mask, (cups_dest_cb_t)my_dest_cb,
+ &amp;user_data))
+ {
+ /*
+ * An error occurred, free all of the destinations and
+ * return...
+ */
+
+ cupsFreeDests(user_data.num_dests, user_dasta.dests);
+
+ *dests = NULL;
+
+ return (0);
+ }
+
+ /*
+ * Return the destination array...
+ */
+
+ *dests = user_data.dests;
+
+ return (user_data.num_dests);
+}
+</code></pre>
+ <h3><a id="basic-destination-information">Basic Destination Information</a></h3>
+ <p>The <code>num_options</code> and <code>options</code> members of the <code>cups_dest_t</code> structure provide basic attributes about the destination in addition to the user default options and values for that destination. The following names are predefined for various destination attributes:</p>
+ <ul>
+ <li>&quot;auth-info-required&quot;: The type of authentication required for printing to this destination: &quot;none&quot;, &quot;username,password&quot;, &quot;domain,username,password&quot;, or &quot;negotiate&quot; (Kerberos).</li>
+ <li>&quot;printer-info&quot;: The human-readable description of the destination such as &quot;My Laser Printer&quot;.</li>
+ <li>&quot;printer-is-accepting-jobs&quot;: &quot;true&quot; if the destination is accepting new jobs, &quot;false&quot; otherwise.</li>
+ <li>&quot;printer-is-shared&quot;: &quot;true&quot; if the destination is being shared with other computers, &quot;false&quot; otherwise.</li>
+ <li>&quot;printer-location&quot;: The human-readable location of the destination such as &quot;Lab 4&quot;.</li>
+ <li>&quot;printer-make-and-model&quot;: The human-readable make and model of the destination such as &quot;ExampleCorp LaserPrinter 4000 Series&quot;.</li>
+ <li>&quot;printer-state&quot;: &quot;3&quot; if the destination is idle, &quot;4&quot; if the destination is printing a job, and &quot;5&quot; if the destination is stopped.</li>
+ <li>&quot;printer-state-change-time&quot;: The UNIX time when the destination entered the current state.</li>
+ <li>&quot;printer-state-reasons&quot;: Additional comma-delimited state keywords for the destination such as &quot;media-tray-empty-error&quot; and &quot;toner-low-warning&quot;.</li>
+ <li>&quot;printer-type&quot;: The <code>cups_ptype_t</code> value associated with the destination.</li>
+ <li>&quot;printer-uri-supported&quot;: The URI associated with the destination; if not set, this destination was discovered but is not yet setup as a local printer.</li>
+</ul>
+ <p>Use the <code>cupsGetOption</code> function to retrieve the value. For example, the following code gets the make and model of a destination:</p>
+ <pre><code>const char *model = cupsGetOption(&quot;printer-make-and-model&quot;,
+ dest-&gt;num_options,
+ dest-&gt;options);
+</code></pre>
+ <h3><a id="detailed-destination-information">Detailed Destination Information</a></h3>
+ <p>Once a destination has been chosen, the <code>cupsCopyDestInfo</code> function can be used to gather detailed information about the destination:</p>
+ <pre><code>cups_dinfo_t *
+cupsCopyDestInfo(http_t *http, cups_dest_t *dest);
+</code></pre>
+ <p>The <code>http</code> argument specifies a connection to the CUPS scheduler and is typically the constant <code>CUPS_HTTP_DEFAULT</code>. The <code>dest</code> argument specifies the destination to query.</p>
+ <p>The <code>cups_dinfo_t</code> structure that is returned contains a snapshot of the supported options and their supported, ready, and default values. It also can report constraints between different options and values, and recommend changes to resolve those constraints.</p>
+ <h4><a id="getting-supported-options-and-values">Getting Supported Options and Values</a></h4>
+ <p>The <code>cupsCheckDestSupported</code> function can be used to test whether a particular option or option and value is supported:</p>
+ <pre><code>int
+cupsCheckDestSupported(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *info,
+ const char *option,
+ const char *value);
+</code></pre>
+ <p>The <code>option</code> argument specifies the name of the option to check. The following constants can be used to check the various standard options:</p>
+ <ul>
+ <li><code>CUPS_COPIES</code>: Controls the number of copies that are produced.</li>
+ <li><code>CUPS_FINISHINGS</code>: A comma-delimited list of integer constants that control the finishing processes that are applied to the job, including stapling, punching, and folding.</li>
+ <li><code>CUPS_MEDIA</code>: Controls the media size that is used, typically one of the following: <code>CUPS_MEDIA_3X5</code>, <code>CUPS_MEDIA_4X6</code>, <code>CUPS_MEDIA_5X7</code>, <code>CUPS_MEDIA_8X10</code>, <code>CUPS_MEDIA_A3</code>, <code>CUPS_MEDIA_A4</code>, <code>CUPS_MEDIA_A5</code>, <code>CUPS_MEDIA_A6</code>, <code>CUPS_MEDIA_ENV10</code>, <code>CUPS_MEDIA_ENVDL</code>, <code>CUPS_MEDIA_LEGAL</code>, <code>CUPS_MEDIA_LETTER</code>, <code>CUPS_MEDIA_PHOTO_L</code>, <code>CUPS_MEDIA_SUPERBA3</code>, or <code>CUPS_MEDIA_TABLOID</code>.</li>
+ <li><code>CUPS_MEDIA_SOURCE</code>: Controls where the media is pulled from, typically either <code>CUPS_MEDIA_SOURCE_AUTO</code> or <code>CUPS_MEDIA_SOURCE_MANUAL</code>.</li>
+ <li><code>CUPS_MEDIA_TYPE</code>: Controls the type of media that is used, typically one of the following: <code>CUPS_MEDIA_TYPE_AUTO</code>, <code>CUPS_MEDIA_TYPE_ENVELOPE</code>, <code>CUPS_MEDIA_TYPE_LABELS</code>, <code>CUPS_MEDIA_TYPE_LETTERHEAD</code>, <code>CUPS_MEDIA_TYPE_PHOTO</code>, <code>CUPS_MEDIA_TYPE_PHOTO_GLOSSY</code>, <code>CUPS_MEDIA_TYPE_PHOTO_MATTE</code>, <code>CUPS_MEDIA_TYPE_PLAIN</code>, or <code>CUPS_MEDIA_TYPE_TRANSPARENCY</code>.</li>
+ <li><code>CUPS_NUMBER_UP</code>: Controls the number of document pages that are placed on each media side.</li>
+ <li><code>CUPS_ORIENTATION</code>: Controls the orientation of document pages placed on the media: <code>CUPS_ORIENTATION_PORTRAIT</code> or <code>CUPS_ORIENTATION_LANDSCAPE</code>.</li>
+ <li><code>CUPS_PRINT_COLOR_MODE</code>: Controls whether the output is in color (<code>CUPS_PRINT_COLOR_MODE_COLOR</code>), grayscale (<code>CUPS_PRINT_COLOR_MODE_MONOCHROME</code>), or either (<code>CUPS_PRINT_COLOR_MODE_AUTO</code>).</li>
+ <li><code>CUPS_PRINT_QUALITY</code>: Controls the generate quality of the output: <code>CUPS_PRINT_QUALITY_DRAFT</code>, <code>CUPS_PRINT_QUALITY_NORMAL</code>, or <code>CUPS_PRINT_QUALITY_HIGH</code>.</li>
+ <li><code>CUPS_SIDES</code>: Controls whether prints are placed on one or both sides of the media: <code>CUPS_SIDES_ONE_SIDED</code>, <code>CUPS_SIDES_TWO_SIDED_PORTRAIT</code>, or <code>CUPS_SIDES_TWO_SIDED_LANDSCAPE</code>.</li>
+</ul>
+ <p>If the <code>value</code> argument is <code>NULL</code>, the <code>cupsCheckDestSupported</code> function returns whether the option is supported by the destination. Otherwise, the function returns whether the specified value of the option is supported.</p>
+ <p>The <code>cupsFindDestSupported</code> function returns the IPP attribute containing the supported values for a given option:</p>
+ <pre><code> ipp_attribute_t *
+ cupsFindDestSupported(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *dinfo,
+ const char *option);
+</code></pre>
+ <p>For example, the following code prints the supported finishing processes for a destination, if any, to the standard output:</p>
+ <pre><code>cups_dinfo_t *info = cupsCopyDestInfo(CUPS_HTTP_DEFAULT,
+ dest);
+
+if (cupsCheckDestSupported(CUPS_HTTP_DEFAULT, dest, info,
+ CUPS_FINISHINGS, NULL))
+{
+ ipp_attribute_t *finishings =
+ cupsFindDestSupported(CUPS_HTTP_DEFAULT, dest, info,
+ CUPS_FINISHINGS);
+ int i, count = ippGetCount(finishings);
+
+ puts(&quot;finishings supported:&quot;);
+ for (i = 0; i &lt; count; i ++)
+ printf(&quot; %d\n&quot;, ippGetInteger(finishings, i));
+}
+else
+ puts(&quot;finishings not supported.&quot;);
+</code></pre>
+ <p>The &quot;job-creation-attributes&quot; option can be queried to get a list of supported options. For example, the following code prints the list of supported options to the standard output:</p>
+ <pre><code>ipp_attribute_t *attrs =
+ cupsFindDestSupported(CUPS_HTTP_DEFAULT, dest, info,
+ &quot;job-creation-attributes&quot;);
+int i, count = ippGetCount(attrs);
+
+for (i = 0; i &lt; count; i ++)
+ puts(ippGetString(attrs, i, NULL));
+</code></pre>
+ <h4><a id="getting-default-values">Getting Default Values</a></h4>
+ <p>There are two sets of default values - user defaults that are available via the <code>num_options</code> and <code>options</code> members of the <code>cups_dest_t</code> structure, and destination defaults that available via the <code>cups_dinfo_t</code> structure and the <code>cupsFindDestDefault</code> function which returns the IPP attribute containing the default value(s) for a given option:</p>
+ <pre><code>ipp_attribute_t *
+cupsFindDestDefault(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *dinfo,
+ const char *option);
+</code></pre>
+ <p>The user defaults from <code>cupsGetOption</code> should always take preference over the destination defaults. For example, the following code prints the default finishings value(s) to the standard output:</p>
+ <pre><code>const char *def_value =
+ cupsGetOption(CUPS_FINISHINGS, dest-&gt;num_options,
+ dest-&gt;options);
+ipp_attribute_t *def_attr =
+ cupsFindDestDefault(CUPS_HTTP_DEFAULT, dest, info,
+ CUPS_FINISHINGS);
+
+if (def_value != NULL)
+{
+ printf(&quot;Default finishings: %s\n&quot;, def_value);
+}
+else
+{
+ int i, count = ippGetCount(def_attr);
+
+ printf(&quot;Default finishings: %d&quot;,
+ ippGetInteger(def_attr, 0));
+ for (i = 1; i &lt; count; i ++)
+ printf(&quot;,%d&quot;, ippGetInteger(def_attr, i));
+ putchar('\n');
+}
+</code></pre>
+ <h4><a id="getting-ready-loaded-values">Getting Ready (Loaded) Values</a></h4>
+ <p>The finishings and media options also support queries for the ready, or loaded, values. For example, a printer may have punch and staple finishers installed but be out of staples - the supported values will list both punch and staple finishing processes but the ready values will only list the punch processes. Similarly, a printer may support hundreds of different sizes of media but only have a single size loaded at any given time - the ready values are limited to the media that is actually in the printer.</p>
+ <p>The <code>cupsFindDestReady</code> function finds the IPP attribute containing the ready values for a given option:</p>
+ <pre><code>ipp_attribute_t *
+cupsFindDestReady(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *dinfo, const char *option);
+</code></pre>
+ <p>For example, the following code lists the ready finishing processes:</p>
+ <pre><code>ipp_attribute_t *ready_finishings =
+ cupsFindDestReady(CUPS_HTTP_DEFAULT, dest, info,
+ CUPS_FINISHINGS);
+
+if (ready_finishings != NULL)
+{
+ int i, count = ippGetCount(ready_finishings);
+
+ puts(&quot;finishings ready:&quot;);
+ for (i = 0; i &lt; count; i ++)
+ printf(&quot; %d\n&quot;, ippGetInteger(ready_finishings, i));
+}
+else
+ puts(&quot;no finishings are ready.&quot;);
+</code></pre>
+ <h4><a id="media-size-options">Media Size Options</a></h4>
+ <p>CUPS provides functions for querying the dimensions and margins for each of the supported media size options. The <code>cups_size_t</code> structure is used to describe a media size:</p>
+ <pre><code>typedef struct cups_size_s
+{
+ char media[128];
+ int width, length;
+ int bottom, left, right, top;
+} cups_size_t;
+</code></pre>
+ <p>The <code>width</code> and <code>length</code> members specify the dimensions of the media in hundredths of millimeters (1/2540th of an inch). The <code>bottom</code>, <code>left</code>, <code>right</code>, and <code>top</code> members specify the margins of the printable area, also in hundredths of millimeters.</p>
+ <p>The <code>cupsGetDestMediaByName</code> and <code>cupsGetDestMediaBySize</code> functions lookup the media size information using a standard media size name or dimensions in hundredths of millimeters:</p>
+ <pre><code>int
+cupsGetDestMediaByName(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *dinfo,
+ const char *media,
+ unsigned flags, cups_size_t *size);
+
+int
+cupsGetDestMediaBySize(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *dinfo,
+ int width, int length,
+ unsigned flags, cups_size_t *size);
+</code></pre>
+ <p>The <code>media</code>, <code>width</code>, and <code>length</code> arguments specify the size to lookup. The <code>flags</code> argument specifies a bitfield controlling various lookup options:</p>
+ <ul>
+ <li><code>CUPS_MEDIA_FLAGS_DEFAULT</code>: Find the closest size supported by the printer.</li>
+ <li><code>CUPS_MEDIA_FLAGS_BORDERLESS</code>: Find a borderless size.</li>
+ <li><code>CUPS_MEDIA_FLAGS_DUPLEX</code>: Find a size compatible with two-sided printing.</li>
+ <li><code>CUPS_MEDIA_FLAGS_EXACT</code>: Find an exact match for the size.</li>
+ <li><code>CUPS_MEDIA_FLAGS_READY</code>: If the printer supports media sensing or configuration of the media in each tray/source, find the size amongst the &quot;ready&quot; media.</li>
+</ul>
+ <p>If a matching size is found for the destination, the size information is stored in the structure pointed to by the <code>size</code> argument and 1 is returned. Otherwise 0 is returned.</p>
+ <p>For example, the following code prints the margins for two-sided printing on US Letter media:</p>
+ <pre><code>cups_size_t size;
+
+if (cupsGetDestMediaByName(CUPS_HTTP_DEFAULT, dest, info,
+ CUPS_MEDIA_LETTER,
+ CUPS_MEDIA_FLAGS_DUPLEX, &amp;size))
+{
+ puts(&quot;Margins for duplex US Letter:&quot;);
+ printf(&quot; Bottom: %.2fin\n&quot;, size.bottom / 2540.0);
+ printf(&quot; Left: %.2fin\n&quot;, size.left / 2540.0);
+ printf(&quot; Right: %.2fin\n&quot;, size.right / 2540.0);
+ printf(&quot; Top: %.2fin\n&quot;, size.top / 2540.0);
+}
+else
+ puts(&quot;Margins for duplex US Letter are not available.&quot;);
+</code></pre>
+ <p>You can also enumerate all of the sizes that match a given <code>flags</code> value using the <code>cupsGetDestMediaByIndex</code> and <code>cupsGetDestMediaCount</code> functions:</p>
+ <pre><code>int
+cupsGetDestMediaByIndex(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *dinfo, int n,
+ unsigned flags, cups_size_t *size);
+
+int
+cupsGetDestMediaCount(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *dinfo, unsigned flags);
+</code></pre>
+ <p>For example, the following code prints the list of ready media and corresponding margins:</p>
+ <pre><code>cups_size_t size;
+int i;
+int count = cupsGetDestMediaCount(CUPS_HTTP_DEFAULT,
+ dest, info,
+ CUPS_MEDIA_FLAGS_READY);
+
+for (i = 0; i &lt; count; i ++)
+{
+ if (cupsGetDestMediaByIndex(CUPS_HTTP_DEFAULT, dest, info,
+ i, CUPS_MEDIA_FLAGS_READY,
+ &amp;size))
+ {
+ printf(&quot;%s:\n&quot;, size.name);
+ printf(&quot; Width: %.2fin\n&quot;, size.width / 2540.0);
+ printf(&quot; Length: %.2fin\n&quot;, size.length / 2540.0);
+ printf(&quot; Bottom: %.2fin\n&quot;, size.bottom / 2540.0);
+ printf(&quot; Left: %.2fin\n&quot;, size.left / 2540.0);
+ printf(&quot; Right: %.2fin\n&quot;, size.right / 2540.0);
+ printf(&quot; Top: %.2fin\n&quot;, size.top / 2540.0);
+ }
+}
+</code></pre>
+ <p>Finally, the <code>cupsGetDestMediaDefault</code> function returns the default media size:</p>
+ <pre><code>int
+cupsGetDestMediaDefault(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *dinfo, unsigned flags,
+ cups_size_t *size);
+</code></pre>
+ <h4><a id="localizing-options-and-values">Localizing Options and Values</a></h4>
+ <p>CUPS provides three functions to get localized, human-readable strings in the user's current locale for options and values: <code>cupsLocalizeDestMedia</code>, <code>cupsLocalizeDestOption</code>, and <code>cupsLocalizeDestValue</code>:</p>
+ <pre><code>const char *
+cupsLocalizeDestMedia(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *info, unsigned flags,
+ cups_size_t *size);
+
+const char *
+cupsLocalizeDestOption(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *info,
+ const char *option);
+
+const char *
+cupsLocalizeDestValue(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *info,
+ const char *option, const char *value);
+</code></pre>
+ <h3><a id="submitting-a-print-job">Submitting a Print Job</a></h3>
+ <p>Once you are ready to submit a print job, you create a job using the <code>cupsCreateDestJob</code> function:</p>
+ <pre><code>ipp_status_t
+cupsCreateDestJob(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *info, int *job_id,
+ const char *title, int num_options,
+ cups_option_t *options);
+</code></pre>
+ <p>The <code>title</code> argument specifies a name for the print job such as &quot;My Document&quot;. The <code>num_options</code> and <code>options</code> arguments specify the options for the print job which are allocated using the <code>cupsAddOption</code> function.</p>
+ <p>When successful, the job's numeric identifier is stored in the integer pointed to by the <code>job_id</code> argument and <code>IPP_STATUS_OK</code> is returned. Otherwise, an IPP error status is returned.</p>
+ <p>For example, the following code creates a new job that will print 42 copies of a two-sided US Letter document:</p>
+ <pre><code>int job_id = 0;
+int num_options = 0;
+cups_option_t *options = NULL;
+
+num_options = cupsAddOption(CUPS_COPIES, &quot;42&quot;,
+ num_options, &amp;options);
+num_options = cupsAddOption(CUPS_MEDIA, CUPS_MEDIA_LETTER,
+ num_options, &amp;options);
+num_options = cupsAddOption(CUPS_SIDES,
+ CUPS_SIDES_TWO_SIDED_PORTRAIT,
+ num_options, &amp;options);
+
+if (cupsCreateDestJob(CUPS_HTTP_DEFAULT, dest, info,
+ &amp;job_id, &quot;My Document&quot;, num_options,
+ options) == IPP_STATUS_OK)
+ printf(&quot;Created job: %d\n&quot;, job_id);
+else
+ printf(&quot;Unable to create job: %s\n&quot;,
+ cupsLastErrorString());
+</code></pre>
+ <p>Once the job is created, you submit documents for the job using the <code>cupsStartDestDocument</code>, <code>cupsWriteRequestData</code>, and <code>cupsFinishDestDocument</code> functions:</p>
+ <pre><code>http_status_t
+cupsStartDestDocument(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *info, int job_id,
+ const char *docname,
+ const char *format,
+ int num_options,
+ cups_option_t *options,
+ int last_document);
+
+http_status_t
+cupsWriteRequestData(http_t *http, const char *buffer,
+ size_t length);
+
+ipp_status_t
+cupsFinishDestDocument(http_t *http, cups_dest_t *dest,
+ cups_dinfo_t *info);
+</code></pre>
+ <p>The <code>docname</code> argument specifies the name of the document, typically the original filename. The <code>format</code> argument specifies the MIME media type of the document, including the following constants:</p>
+ <ul>
+ <li><code>CUPS_FORMAT_JPEG</code>: &quot;image/jpeg&quot;</li>
+ <li><code>CUPS_FORMAT_PDF</code>: &quot;application/pdf&quot;</li>
+ <li><code>CUPS_FORMAT_POSTSCRIPT</code>: &quot;application/postscript&quot;</li>
+ <li><code>CUPS_FORMAT_TEXT</code>: &quot;text/plain&quot;</li>
+</ul>
+ <p>The <code>num_options</code> and <code>options</code> arguments specify per-document print options, which at present must be 0 and <code>NULL</code>. The <code>last_document</code> argument specifies whether this is the last document in the job.</p>
+ <p>For example, the following code submits a PDF file to the job that was just created:</p>
+ <pre><code>FILE *fp = fopen(&quot;filename.pdf&quot;, &quot;rb&quot;);
+size_t bytes;
+char buffer[65536];
+
+if (cupsStartDestDocument(CUPS_HTTP_DEFAULT, dest, info,
+ job_id, &quot;filename.pdf&quot;, 0, NULL,
+ 1) == HTTP_STATUS_CONTINUE)
+{
+ while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) &gt; 0)
+ if (cupsWriteRequestData(CUPS_HTTP_DEFAULT, buffer,
+ bytes) != HTTP_STATUS_CONTINUE)
+ break;
+
+ if (cupsFinishDestDocument(CUPS_HTTP_DEFAULT, dest,
+ info) == IPP_STATUS_OK)
+ puts(&quot;Document send succeeded.&quot;);
+ else
+ printf(&quot;Document send failed: %s\n&quot;,
+ cupsLastErrorString());
+}
+
+fclose(fp);
+</code></pre>
+ <h2><a id="sending-ipp-requests">Sending IPP Requests</a></h2>
+ <p>CUPS provides a rich API for sending IPP requests to the scheduler or printers, typically from management or utility applications whose primary purpose is not to send print jobs.</p>
+ <h3><a id="connecting-to-the-scheduler-or-printer">Connecting to the Scheduler or Printer</a></h3>
+ <p>The connection to the scheduler or printer is represented by the HTTP connection type <code>http_t</code>. The <code>cupsConnectDest</code> function connects to the scheduler or printer associated with the destination:</p>
+ <pre><code>http_t *
+cupsConnectDest(cups_dest_t *dest, unsigned flags, int msec,
+ int *cancel, char *resource,
+ size_t resourcesize, cups_dest_cb_t cb,
+ void *user_data);
+</code></pre>
+ <p>The <code>dest</code> argument specifies the destination to connect to.</p>
+ <p>The <code>flags</code> argument specifies whether you want to connect to the scheduler (<code>CUPS_DEST_FLAGS_NONE</code>) or device/printer (<code>CUPS_DEST_FLAGS_DEVICE</code>) associated with the destination.</p>
+ <p>The <code>msec</code> argument specifies how long you are willing to wait for the connection to be established in milliseconds. Specify a value of <code>-1</code> to wait indefinitely.</p>
+ <p>The <code>cancel</code> argument specifies the address of an integer variable that can be set to a non-zero value to cancel the connection. Specify a value of <code>NULL</code> to not provide a cancel variable.</p>
+ <p>The <code>resource</code> and <code>resourcesize</code> arguments specify the address and size of a character string array to hold the path to use when sending an IPP request.</p>
+ <p>The <code>cb</code> and <code>user_data</code> arguments specify a destination callback function that returns 1 to continue connecting or 0 to stop. The destination callback work the same way as the one used for the <code>cupsEnumDests</code> function.</p>
+ <p>On success, a HTTP connection is returned that can be used to send IPP requests and get IPP responses.</p>
+ <p>For example, the following code connects to the printer associated with a destination with a 30 second timeout:</p>
+ <pre><code>char resource[256];
+http_t *http = cupsConnectDest(dest, CUPS_DEST_FLAGS_DEVICE,
+ 30000, NULL, resource,
+ sizeof(resource), NULL, NULL);
+</code></pre>
+ <h3><a id="creating-an-ipp-request">Creating an IPP Request</a></h3>
+ <p>IPP requests are represented by the IPP message type <code>ipp_t</code> and each IPP attribute in the request is representing using the type <code>ipp_attribute_t</code>. Each IPP request includes an operation code (<code>IPP_OP_CREATE_JOB</code>, <code>IPP_OP_GET_PRINTER_ATTRIBUTES</code>, etc.) and a 32-bit integer identifier.</p>
+ <p>The <code>ippNewRequest</code> function creates a new IPP request:</p>
+ <pre><code>ipp_t *
+ippNewRequest(ipp_op_t op);
+</code></pre>
+ <p>The <code>op</code> argument specifies the IPP operation code for the request. For example, the following code creates an IPP Get-Printer-Attributes request:</p>
+ <pre><code>ipp_t *request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
+</code></pre>
+ <p>The request identifier is automatically set to a unique value for the current process.</p>
+ <p>Each IPP request starts with two IPP attributes, &quot;attributes-charset&quot; and &quot;attributes-natural-language&quot;, followed by IPP attribute(s) that specify the target of the operation. The <code>ippNewRequest</code> automatically adds the correct &quot;attributes-charset&quot; and &quot;attributes-natural-language&quot; attributes, but you must add the target attribute(s). For example, the following code adds the &quot;printer-uri&quot; attribute to the IPP Get-Printer-Attributes request to specify which printer is being queried:</p>
+ <pre><code>const char *printer_uri = cupsGetOption(&quot;device-uri&quot;,
+ dest-&gt;num_options,
+ dest-&gt;options);
+
+ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
+ &quot;printer-uri&quot;, NULL, printer_uri);
+</code></pre>
+ <blockquote>
+ <p>Note: If we wanted to query the scheduler instead of the device, we would look up the &quot;printer-uri-supported&quot; option instead of the &quot;device-uri&quot; value.</p>
+</blockquote>
+ <p>The <code>ippAddString</code> function adds the &quot;printer-uri&quot; attribute the the IPP request. The <code>IPP_TAG_OPERATION</code> argument specifies that the attribute is part of the operation. The <code>IPP_TAG_URI</code> argument specifies that the value is a Universal Resource Identifier (URI) string. The <code>NULL</code> argument specifies there is no language (English, French, Japanese, etc.) associated with the string, and the <code>printer_uri</code> argument specifies the string value.</p>
+ <p>The IPP Get-Printer-Attributes request also supports an IPP attribute called &quot;requested-attributes&quot; that lists the attributes and values you are interested in. For example, the following code requests the printer state attributes:</p>
+ <pre><code>static const char * const requested_attributes[] =
+{
+ &quot;printer-state&quot;,
+ &quot;printer-state-message&quot;,
+ &quot;printer-state-reasons&quot;
+};
+
+ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
+ &quot;requested-attributes&quot;, 3, NULL,
+ requested_attributes);
+</code></pre>
+ <p>The <code>ippAddStrings</code> function adds an attribute with one or more strings, in this case three. The <code>IPP_TAG_KEYWORD</code> argument specifies that the strings are keyword values, which are used for attribute names. All strings use the same language (<code>NULL</code>), and the attribute will contain the three strings in the array <code>requested_attributes</code>.</p>
+ <p>CUPS provides many functions to adding attributes of different types:</p>
+ <ul>
+ <li><code>ippAddBoolean</code> adds a boolean (<code>IPP_TAG_BOOLEAN</code>) attribute with one value.</li>
+ <li><code>ippAddInteger</code> adds an enum (<code>IPP_TAG_ENUM</code>) or integer (<code>IPP_TAG_INTEGER</code>) attribute with one value.</li>
+ <li><code>ippAddIntegers</code> adds an enum or integer attribute with one or more values.</li>
+ <li><code>ippAddOctetString</code> adds an octetString attribute with one value.</li>
+ <li><code>ippAddOutOfBand</code> adds a admin-defined (<code>IPP_TAG_ADMINDEFINE</code>), default (<code>IPP_TAG_DEFAULT</code>), delete-attribute (<code>IPP_TAG_DELETEATTR</code>), no-value (<code>IPP_TAG_NOVALUE</code>), not-settable (<code>IPP_TAG_NOTSETTABLE</code>), unknown (<code>IPP_TAG_UNKNOWN</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_VALUE</code>) out-of-band attribute.</li>
+ <li><code>ippAddRange</code> adds a rangeOfInteger attribute with one range.</li>
+ <li><code>ippAddRanges</code> adds a rangeOfInteger attribute with one or more ranges.</li>
+ <li><code>ippAddResolution</code> adds a resolution attribute with one resolution.</li>
+ <li><code>ippAddResolutions</code> adds a resolution attribute with one or more resolutions.</li>
+ <li><code>ippAddString</code> adds a charset (<code>IPP_TAG_CHARSET</code>), keyword (<code>IPP_TAG_KEYWORD</code>), mimeMediaType (<code>IPP_TAG_MIMETYPE</code>), name (<code>IPP_TAG_NAME</code> and <code>IPP_TAG_NAMELANG</code>), naturalLanguage (<code>IPP_TAG_NATURAL_LANGUAGE</code>), text (<code>IPP_TAG_TEXT</code> and <code>IPP_TAG_TEXTLANG</code>), uri (<code>IPP_TAG_URI</code>), or uriScheme (<code>IPP_TAG_URISCHEME</code>) attribute with one value.</li>
+ <li><code>ippAddStrings</code> adds a charset, keyword, mimeMediaType, name, naturalLanguage, text, uri, or uriScheme attribute with one or more values.</li>
+</ul>
+ <h3><a id="sending-the-ipp-request">Sending the IPP Request</a></h3>
+ <p>Once you have created the IPP request, you can send it using the <code>cupsDoRequest</code> function. For example, the following code sends the IPP Get-Printer-Attributes request to the destination and saves the response:</p>
+ <pre><code>ipp_t *response = cupsDoRequest(http, request, resource);
+</code></pre>
+ <p>For requests like Send-Document that include a file, the <code>cupsDoFileRequest</code> function should be used:</p>
+ <pre><code>ipp_t *response = cupsDoFileRequest(http, request, resource,
+ filename);
+</code></pre>
+ <p>Both <code>cupsDoRequest</code> and <code>cupsDoFileRequest</code> free the IPP request. If a valid IPP response is received, it is stored in a new IPP message (<code>ipp_t</code>) and returned to the caller. Otherwise <code>NULL</code> is returned.</p>
+ <p>The status from the most recent request can be queried using the <code>cupsLastError</code> function, for example:</p>
+ <pre><code>if (cupsLastError() &gt;= IPP_STATUS_ERROR_BAD_REQUEST)
+{
+ /* request failed */
+}
+</code></pre>
+ <p>A human-readable error message is also available using the <code>cupsLastErrorString</code> function:</p>
+ <pre><code>if (cupsLastError() &gt;= IPP_STATUS_ERROR_BAD_REQUEST)
+{
+ /* request failed */
+ printf(&quot;Request failed: %s\n&quot;, cupsLastErrorString());
+}
+</code></pre>
+ <h3><a id="processing-the-ipp-response">Processing the IPP Response</a></h3>
+ <p>Each response to an IPP request is also an IPP message (<code>ipp_t</code>) with its own IPP attributes (<code>ipp_attribute_t</code>) that includes a status code (<code>IPP_STATUS_OK</code>, <code>IPP_STATUS_ERROR_BAD_REQUEST</code>, etc.) and the corresponding 32-bit integer identifier from the request.</p>
+ <p>For example, the following code finds the printer state attributes and prints their values:</p>
+ <pre><code>ipp_attribute_t *attr;
+
+if ((attr = ippFindAttribute(response, &quot;printer-state&quot;,
+ IPP_TAG_ENUM)) != NULL)
+{
+ printf(&quot;printer-state=%s\n&quot;,
+ ippTagString(&quot;printer-state&quot;, ippGetInteger(attr, 0)));
+}
+else
+ puts(&quot;printer-state=unknown&quot;);
+
+if ((attr = ippFindAttribute(response, &quot;printer-state-message&quot;,
+ IPP_TAG_TEXT)) != NULL)
+{
+ printf(&quot;printer-state-message=\&quot;%s\&quot;\n&quot;,
+ ippGetString(attr, 0, NULL)));
+}
+
+if ((attr = ippFindAttribute(response, &quot;printer-state-reasons&quot;,
+ IPP_TAG_KEYWORD)) != NULL)
+{
+ int i, count = ippGetCount(attr);
+
+ puts(&quot;printer-state-reasons=&quot;);
+ for (i = 0; i &lt; count; i ++)
+ printf(&quot; %s\n&quot;, ippGetString(attr, i, NULL)));
+}
+</code></pre>
+ <p>The <code>ippGetCount</code> function returns the number of values in an attribute.</p>
+ <p>The <code>ippGetInteger</code> and <code>ippGetString</code> functions return a single integer or string value from an attribute.</p>
+ <p>The <code>ippTagString</code> function converts a enum value to its keyword (string) equivalent.</p>
+ <p>Once you are done using the IPP response message, free it using the <code>ippDelete</code> function:</p>
+ <pre><code>ippDelete(response);
+</code></pre>
+ <h3><a id="authentication">Authentication</a></h3>
+ <p>CUPS normally handles authentication through the console. GUI applications should set a password callback using the <code>cupsSetPasswordCB2</code> function:</p>
+ <pre><code>void
+cupsSetPasswordCB2(cups_password_cb2_t cb, void *user_data);
+</code></pre>
+ <p>The password callback will be called when needed and is responsible for setting the current user name using <code>cupsSetUser</code> and returning a string:</p>
+ <pre><code>const char *
+cups_password_cb2(const char *prompt, http_t *http,
+ const char *method, const char *resource,
+ void *user_data);
+</code></pre>
+ <p>The <code>prompt</code> argument is a string from CUPS that should be displayed to the user.</p>
+ <p>The <code>http</code> argument is the connection hosting the request that is being authenticated. The password callback can call the <code>httpGetField</code> and <code>httpGetSubField</code> functions to look for additional details concerning the authentication challenge.</p>
+ <p>The <code>method</code> argument specifies the HTTP method used for the request and is typically &quot;POST&quot;.</p>
+ <p>The <code>resource</code> argument specifies the path used for the request.</p>
+ <p>The <code>user_data</code> argument provides the user data pointer from the <code>cupsSetPasswordCB2</code> call.</p>
+ <h2 class="title"><a id="FUNCTIONS">Functions</a></h2>
+<h3 class="function"><a id="cupsAddDest">cupsAddDest</a></h3>
+ <p class="description">Add a destination to the list of destinations.</p>
+<p class="code">
+int cupsAddDest(const char *name, const char *instance, int num_dests, <a href="#cups_dest_t">cups_dest_t</a> **dests);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>name</th>
+ <td class="description">Destination name</td></tr>
+<tr><th>instance</th>
+ <td class="description">Instance name or <code>NULL</code> for none/primary</td></tr>
+<tr><th>num_dests</th>
+ <td class="description">Number of destinations</td></tr>
+<tr><th>dests</th>
+ <td class="description">Destinations</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">New number of destinations</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">This function cannot be used to add a new class or printer queue,
+it only adds a new container of saved options for the named
+destination or instance.<br>
+<br>
+If the named destination already exists, the destination list is
+returned unchanged. Adding a new instance of a destination creates
+a copy of that destination's options.<br>
+<br>
+Use the <a href="#cupsSaveDests"><code>cupsSaveDests</code></a> function to save the updated list of
+destinations to the user's lpoptions file.</p>
+<h3 class="function"><span class="info">&#160;CUPS 2.2.4/macOS 10.13&#160;</span><a id="cupsAddIntegerOption">cupsAddIntegerOption</a></h3>
+ <p class="description">Add an integer option to an option array.</p>
+<p class="code">
+int cupsAddIntegerOption(const char *name, int value, int num_options, <a href="#cups_option_t">cups_option_t</a> **options);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>name</th>
+ <td class="description">Name of option</td></tr>
+<tr><th>value</th>
+ <td class="description">Value of option</td></tr>
+<tr><th>num_options</th>
+ <td class="description">Number of options</td></tr>
+<tr><th>options</th>
+ <td class="description">Pointer to options</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Number of options</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">New option arrays can be initialized simply by passing 0 for the
+&quot;num_options&quot; parameter.
+
+</p>
+<h3 class="function"><a id="cupsAddOption">cupsAddOption</a></h3>
+ <p class="description">Add an option to an option array.</p>
+<p class="code">
+int cupsAddOption(const char *name, const char *value, int num_options, <a href="#cups_option_t">cups_option_t</a> **options);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>name</th>
+ <td class="description">Name of option</td></tr>
+<tr><th>value</th>
+ <td class="description">Value of option</td></tr>
+<tr><th>num_options</th>
+ <td class="description">Number of options</td></tr>
+<tr><th>options</th>
+ <td class="description">Pointer to options</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Number of options</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">New option arrays can be initialized simply by passing 0 for the
+&quot;num_options&quot; parameter.</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="cupsCancelDestJob">cupsCancelDestJob</a></h3>
+ <p class="description">Cancel a job on a destination.</p>
+<p class="code">
+ipp_status_t cupsCancelDestJob(<a href="#http_t">http_t</a> *http, <a href="#cups_dest_t">cups_dest_t</a> *dest, int job_id);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to destination</td></tr>
+<tr><th>dest</th>
+ <td class="description">Destination</td></tr>
+<tr><th>job_id</th>
+ <td class="description">Job ID</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Status of cancel operation</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The &quot;job_id&quot; is the number returned by cupsCreateDestJob.<br>
+<br>
+Returns <code>IPP_STATUS_OK</code> on success and
+<code>IPP_STATUS_ERROR_NOT_AUTHORIZED</code> or
+<code>IPP_STATUS_ERROR_FORBIDDEN</code> on failure.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="cupsCheckDestSupported">cupsCheckDestSupported</a></h3>
+ <p class="description">Check that the option and value are supported
+by the destination.</p>
+<p class="code">
+int cupsCheckDestSupported(<a href="#http_t">http_t</a> *http, <a href="#cups_dest_t">cups_dest_t</a> *dest, <a href="#cups_dinfo_t">cups_dinfo_t</a> *dinfo, const char *option, const char *value);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to destination</td></tr>
+<tr><th>dest</th>
+ <td class="description">Destination</td></tr>
+<tr><th>dinfo</th>
+ <td class="description">Destination information</td></tr>
+<tr><th>option</th>
+ <td class="description">Option</td></tr>
+<tr><th>value</th>
+ <td class="description">Value or <code>NULL</code></td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 if supported, 0 otherwise</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Returns 1 if supported, 0 otherwise.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="cupsCloseDestJob">cupsCloseDestJob</a></h3>
+ <p class="description">Close a job and start printing.</p>
+<p class="code">
+ipp_status_t cupsCloseDestJob(<a href="#http_t">http_t</a> *http, <a href="#cups_dest_t">cups_dest_t</a> *dest, <a href="#cups_dinfo_t">cups_dinfo_t</a> *info, int job_id);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to destination</td></tr>
+<tr><th>dest</th>
+ <td class="description">Destination</td></tr>
+<tr><th>info</th>
+ <td class="description">Destination information</td></tr>
+<tr><th>job_id</th>
+ <td class="description">Job ID</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">IPP status code</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Use when the last call to cupsStartDocument passed 0 for &quot;last_document&quot;.
+&quot;job_id&quot; is the job ID returned by cupsCreateDestJob. Returns <code>IPP_STATUS_OK</code>
+on success.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="cupsConnectDest">cupsConnectDest</a></h3>
+ <p class="description">Open a conection to the destination.</p>
+<p class="code">
+<a href="#http_t">http_t</a> *cupsConnectDest(<a href="#cups_dest_t">cups_dest_t</a> *dest, unsigned flags, int msec, int *cancel, char *resource, size_t resourcesize, <a href="#cups_dest_cb_t">cups_dest_cb_t</a> cb, void *user_data);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>dest</th>
+ <td class="description">Destination</td></tr>
+<tr><th>flags</th>
+ <td class="description">Connection flags</td></tr>
+<tr><th>msec</th>
+ <td class="description">Timeout in milliseconds</td></tr>
+<tr><th>cancel</th>
+ <td class="description">Pointer to &quot;cancel&quot; variable</td></tr>
+<tr><th>resource</th>
+ <td class="description">Resource buffer</td></tr>
+<tr><th>resourcesize</th>
+ <td class="description">Size of resource buffer</td></tr>
+<tr><th>cb</th>
+ <td class="description">Callback function</td></tr>
+<tr><th>user_data</th>
+ <td class="description">User data pointer</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Connection to destination or <code>NULL</code></p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Connect to the destination, returning a new <code>http_t</code> connection object
+and optionally the resource path to use for the destination. These calls
+will block until a connection is made, the timeout expires, the integer
+pointed to by &quot;cancel&quot; is non-zero, or the callback function (or block)
+returns 0. The caller is responsible for calling <a href="#httpClose"><code>httpClose</code></a> on the
+returned connection.<br>
+<br>
+Starting with CUPS 2.2.4, the caller can pass <code>CUPS_DEST_FLAGS_DEVICE</code>
+for the &quot;flags&quot; argument to connect directly to the device associated with
+the destination. Otherwise, the connection is made to the CUPS scheduler
+associated with the destination.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="cupsCopyDest">cupsCopyDest</a></h3>
+ <p class="description">Copy a destination.</p>
+<p class="code">
+int cupsCopyDest(<a href="#cups_dest_t">cups_dest_t</a> *dest, int num_dests, <a href="#cups_dest_t">cups_dest_t</a> **dests);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>dest</th>
+ <td class="description">Destination to copy</td></tr>
+<tr><th>num_dests</th>
+ <td class="description">Number of destinations</td></tr>
+<tr><th>dests</th>
+ <td class="description">Destination array</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">New number of destinations</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Make a copy of the destination to an array of destinations (or just a single
+copy) - for use with the cupsEnumDests* functions. The caller is responsible
+for calling cupsFreeDests() on the returned object(s).
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="cupsCopyDestConflicts">cupsCopyDestConflicts</a></h3>
+ <p class="description">Get conflicts and resolutions for a new
+option/value pair.</p>
+<p class="code">
+int cupsCopyDestConflicts(<a href="#http_t">http_t</a> *http, <a href="#cups_dest_t">cups_dest_t</a> *dest, <a href="#cups_dinfo_t">cups_dinfo_t</a> *dinfo, int num_options, <a href="#cups_option_t">cups_option_t</a> *options, const char *new_option, const char *new_value, int *num_conflicts, <a href="#cups_option_t">cups_option_t</a> **conflicts, int *num_resolved, <a href="#cups_option_t">cups_option_t</a> **resolved);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to destination</td></tr>
+<tr><th>dest</th>
+ <td class="description">Destination</td></tr>
+<tr><th>dinfo</th>
+ <td class="description">Destination information</td></tr>
+<tr><th>num_options</th>
+ <td class="description">Number of current options</td></tr>
+<tr><th>options</th>
+ <td class="description">Current options</td></tr>
+<tr><th>new_option</th>
+ <td class="description">New option</td></tr>
+<tr><th>new_value</th>
+ <td class="description">New value</td></tr>
+<tr><th>num_conflicts</th>
+ <td class="description">Number of conflicting options</td></tr>
+<tr><th>conflicts</th>
+ <td class="description">Conflicting options</td></tr>
+<tr><th>num_resolved</th>
+ <td class="description">Number of options to resolve</td></tr>
+<tr><th>resolved</th>
+ <td class="description">Resolved options</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 if there is a conflict, 0 if none, -1 on error</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">&quot;num_options&quot; and &quot;options&quot; represent the currently selected options by the
+user. &quot;new_option&quot; and &quot;new_value&quot; are the setting the user has just
+changed.<br>
+<br>
+Returns 1 if there is a conflict, 0 if there are no conflicts, and -1 if
+there was an unrecoverable error such as a resolver loop.<br>
+<br>
+If &quot;num_conflicts&quot; and &quot;conflicts&quot; are not <code>NULL</code>, they are set to
+contain the list of conflicting option/value pairs. Similarly, if
+&quot;num_resolved&quot; and &quot;resolved&quot; are not <code>NULL</code> they will be set to the
+list of changes needed to resolve the conflict.<br>
+<br>
+If cupsCopyDestConflicts returns 1 but &quot;num_resolved&quot; and &quot;resolved&quot; are set
+to 0 and <code>NULL</code>, respectively, then the conflict cannot be resolved.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="cupsCopyDestInfo">cupsCopyDestInfo</a></h3>
+ <p class="description">Get the supported values/capabilities for the
+destination.</p>
+<p class="code">
+<a href="#cups_dinfo_t">cups_dinfo_t</a> *cupsCopyDestInfo(<a href="#http_t">http_t</a> *http, <a href="#cups_dest_t">cups_dest_t</a> *dest);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to destination</td></tr>
+<tr><th>dest</th>
+ <td class="description">Destination</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Destination information</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The caller is responsible for calling <a href="#cupsFreeDestInfo"><code>cupsFreeDestInfo</code></a> on the return
+value. <code>NULL</code> is returned on error.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="cupsCreateDestJob">cupsCreateDestJob</a></h3>
+ <p class="description">Create a job on a destination.</p>
+<p class="code">
+ipp_status_t cupsCreateDestJob(<a href="#http_t">http_t</a> *http, <a href="#cups_dest_t">cups_dest_t</a> *dest, <a href="#cups_dinfo_t">cups_dinfo_t</a> *info, int *job_id, const char *title, int num_options, <a href="#cups_option_t">cups_option_t</a> *options);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to destination</td></tr>
+<tr><th>dest</th>
+ <td class="description">Destination</td></tr>
+<tr><th>info</th>
+ <td class="description">Destination information</td></tr>
+<tr><th>job_id</th>
+ <td class="description">Job ID or 0 on error</td></tr>
+<tr><th>title</th>
+ <td class="description">Job name</td></tr>
+<tr><th>num_options</th>
+ <td class="description">Number of job options</td></tr>
+<tr><th>options</th>
+ <td class="description">Job options</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">IPP status code</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Returns <code>IPP_STATUS_OK</code> or <code>IPP_STATUS_OK_SUBST</code> on success, saving the job ID
+in the variable pointed to by &quot;job_id&quot;.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.1.20/macOS 10.4&#160;</span><a id="cupsDoAuthentication">cupsDoAuthentication</a></h3>
+ <p class="description">Authenticate a request.</p>
+<p class="code">
+int cupsDoAuthentication(<a href="#http_t">http_t</a> *http, const char *method, const char *resource);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></td></tr>
+<tr><th>method</th>
+ <td class="description">Request method (&quot;GET&quot;, &quot;POST&quot;, &quot;PUT&quot;)</td></tr>
+<tr><th>resource</th>
+ <td class="description">Resource path</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">0 on success, -1 on error</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">This function should be called in response to a <code>HTTP_STATUS_UNAUTHORIZED</code>
+status, prior to resubmitting your request.
+
+</p>
+<h3 class="function"><a id="cupsEncodeOptions">cupsEncodeOptions</a></h3>
+ <p class="description">Encode printer options into IPP attributes.</p>
+<p class="code">
+void cupsEncodeOptions(<a href="#ipp_t">ipp_t</a> *ipp, int num_options, <a href="#cups_option_t">cups_option_t</a> *options);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">Request to add to</td></tr>
+<tr><th>num_options</th>
+ <td class="description">Number of options</td></tr>
+<tr><th>options</th>
+ <td class="description">Options</td></tr>
+</tbody></table>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">This function adds operation, job, and then subscription attributes,
+in that order. Use the <a href="#cupsEncodeOptions2"><code>cupsEncodeOptions2</code></a> function to add attributes
+for a single group.</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="cupsEncodeOptions2">cupsEncodeOptions2</a></h3>
+ <p class="description">Encode printer options into IPP attributes for a group.</p>
+<p class="code">
+void cupsEncodeOptions2(<a href="#ipp_t">ipp_t</a> *ipp, int num_options, <a href="#cups_option_t">cups_option_t</a> *options, ipp_tag_t group_tag);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">Request to add to</td></tr>
+<tr><th>num_options</th>
+ <td class="description">Number of options</td></tr>
+<tr><th>options</th>
+ <td class="description">Options</td></tr>
+<tr><th>group_tag</th>
+ <td class="description">Group to encode</td></tr>
+</tbody></table>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">This function only adds attributes for a single group. Call this
+function multiple times for each group, or use <a href="#cupsEncodeOptions"><code>cupsEncodeOptions</code></a>
+to add the standard groups.
+
+</p>
+<h3 class="function"><a id="cupsEncryption">cupsEncryption</a></h3>
+ <p class="description">Get the current encryption settings.</p>
+<p class="code">
+<a href="#http_encryption_t">http_encryption_t</a> cupsEncryption(void);</p>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Encryption settings</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The default encryption setting comes from the CUPS_ENCRYPTION
+environment variable, then the ~/.cups/client.conf file, and finally the
+/etc/cups/client.conf file. If not set, the default is
+<code>HTTP_ENCRYPTION_IF_REQUESTED</code>.<br>
+<br>
+Note: The current encryption setting is tracked separately for each thread
+in a program. Multi-threaded programs that override the setting via the
+<a href="#cupsSetEncryption"><code>cupsSetEncryption</code></a> function need to do so in each thread for the same
+setting to be used.</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="cupsEnumDests">cupsEnumDests</a></h3>
+ <p class="description">Enumerate available destinations with a callback function.</p>
+<p class="code">
+int cupsEnumDests(unsigned flags, int msec, int *cancel, <a href="#cups_ptype_t">cups_ptype_t</a> type, <a href="#cups_ptype_t">cups_ptype_t</a> mask, <a href="#cups_dest_cb_t">cups_dest_cb_t</a> cb, void *user_data);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>flags</th>
+ <td class="description">Enumeration flags</td></tr>
+<tr><th>msec</th>
+ <td class="description">Timeout in milliseconds, -1 for indefinite</td></tr>
+<tr><th>cancel</th>
+ <td class="description">Pointer to &quot;cancel&quot; variable</td></tr>
+<tr><th>type</th>
+ <td class="description">Printer type bits</td></tr>
+<tr><th>mask</th>
+ <td class="description">Mask for printer type bits</td></tr>
+<tr><th>cb</th>
+ <td class="description">Callback function</td></tr>
+<tr><th>user_data</th>
+ <td class="description">User data</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Destinations are enumerated from one or more sources. The callback function
+receives the <code>user_data</code> pointer and the destination pointer which can
+be used as input to the <a href="#cupsCopyDest"><code>cupsCopyDest</code></a> function. The function must
+return 1 to continue enumeration or 0 to stop.<br>
+<br>
+The <code>type</code> and <code>mask</code> arguments allow the caller to filter the
+destinations that are enumerated. Passing 0 for both will enumerate all
+printers. The constant <code>CUPS_PRINTER_DISCOVERED</code> is used to filter on
+destinations that are available but have not yet been added locally.<br>
+<br>
+Enumeration happens on the current thread and does not return until all
+destinations have been enumerated or the callback function returns 0.<br>
+<br>
+Note: The callback function will likely receive multiple updates for the same
+destinations - it is up to the caller to suppress any duplicate destinations.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="cupsFindDestDefault">cupsFindDestDefault</a></h3>
+ <p class="description">Find the default value(s) for the given option.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *cupsFindDestDefault(<a href="#http_t">http_t</a> *http, <a href="#cups_dest_t">cups_dest_t</a> *dest, <a href="#cups_dinfo_t">cups_dinfo_t</a> *dinfo, const char *option);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to destination</td></tr>
+<tr><th>dest</th>
+ <td class="description">Destination</td></tr>
+<tr><th>dinfo</th>
+ <td class="description">Destination information</td></tr>
+<tr><th>option</th>
+ <td class="description">Option/attribute name</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Default attribute or <code>NULL</code> for none</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The returned value is an IPP attribute. Use the <code>ippGetBoolean</code>,
+<code>ippGetCollection</code>, <code>ippGetCount</code>, <code>ippGetDate</code>,
+<code>ippGetInteger</code>, <code>ippGetOctetString</code>, <code>ippGetRange</code>,
+<code>ippGetResolution</code>, <code>ippGetString</code>, and <code>ippGetValueTag</code>
+functions to inspect the default value(s) as needed.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="cupsFindDestReady">cupsFindDestReady</a></h3>
+ <p class="description">Find the default value(s) for the given option.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *cupsFindDestReady(<a href="#http_t">http_t</a> *http, <a href="#cups_dest_t">cups_dest_t</a> *dest, <a href="#cups_dinfo_t">cups_dinfo_t</a> *dinfo, const char *option);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to destination</td></tr>
+<tr><th>dest</th>
+ <td class="description">Destination</td></tr>
+<tr><th>dinfo</th>
+ <td class="description">Destination information</td></tr>
+<tr><th>option</th>
+ <td class="description">Option/attribute name</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Default attribute or <code>NULL</code> for none</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The returned value is an IPP attribute. Use the <code>ippGetBoolean</code>,
+<code>ippGetCollection</code>, <code>ippGetCount</code>, <code>ippGetDate</code>,
+<code>ippGetInteger</code>, <code>ippGetOctetString</code>, <code>ippGetRange</code>,
+<code>ippGetResolution</code>, <code>ippGetString</code>, and <code>ippGetValueTag</code>
+functions to inspect the default value(s) as needed.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="cupsFindDestSupported">cupsFindDestSupported</a></h3>
+ <p class="description">Find the default value(s) for the given option.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *cupsFindDestSupported(<a href="#http_t">http_t</a> *http, <a href="#cups_dest_t">cups_dest_t</a> *dest, <a href="#cups_dinfo_t">cups_dinfo_t</a> *dinfo, const char *option);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to destination</td></tr>
+<tr><th>dest</th>
+ <td class="description">Destination</td></tr>
+<tr><th>dinfo</th>
+ <td class="description">Destination information</td></tr>
+<tr><th>option</th>
+ <td class="description">Option/attribute name</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Default attribute or <code>NULL</code> for none</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The returned value is an IPP attribute. Use the <code>ippGetBoolean</code>,
+<code>ippGetCollection</code>, <code>ippGetCount</code>, <code>ippGetDate</code>,
+<code>ippGetInteger</code>, <code>ippGetOctetString</code>, <code>ippGetRange</code>,
+<code>ippGetResolution</code>, <code>ippGetString</code>, and <code>ippGetValueTag</code>
+functions to inspect the default value(s) as needed.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="cupsFinishDestDocument">cupsFinishDestDocument</a></h3>
+ <p class="description">Finish the current document.</p>
+<p class="code">
+ipp_status_t cupsFinishDestDocument(<a href="#http_t">http_t</a> *http, <a href="#cups_dest_t">cups_dest_t</a> *dest, <a href="#cups_dinfo_t">cups_dinfo_t</a> *info);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to destination</td></tr>
+<tr><th>dest</th>
+ <td class="description">Destination</td></tr>
+<tr><th>info</th>
+ <td class="description">Destination information</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Status of document submission</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Returns <code>IPP_STATUS_OK</code> or <code>IPP_STATUS_OK_SUBST</code> on success.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="cupsFreeDestInfo">cupsFreeDestInfo</a></h3>
+ <p class="description">Free destination information obtained using
+<a href="#cupsCopyDestInfo"><code>cupsCopyDestInfo</code></a>.</p>
+<p class="code">
+void cupsFreeDestInfo(<a href="#cups_dinfo_t">cups_dinfo_t</a> *dinfo);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>dinfo</th>
+ <td class="description">Destination information</td></tr>
+</tbody></table>
+<h3 class="function"><a id="cupsFreeDests">cupsFreeDests</a></h3>
+ <p class="description">Free the memory used by the list of destinations.</p>
+<p class="code">
+void cupsFreeDests(int num_dests, <a href="#cups_dest_t">cups_dest_t</a> *dests);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>num_dests</th>
+ <td class="description">Number of destinations</td></tr>
+<tr><th>dests</th>
+ <td class="description">Destinations</td></tr>
+</tbody></table>
+<h3 class="function"><a id="cupsFreeJobs">cupsFreeJobs</a></h3>
+ <p class="description">Free memory used by job data.</p>
+<p class="code">
+void cupsFreeJobs(int num_jobs, <a href="#cups_job_t">cups_job_t</a> *jobs);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>num_jobs</th>
+ <td class="description">Number of jobs</td></tr>
+<tr><th>jobs</th>
+ <td class="description">Jobs</td></tr>
+</tbody></table>
+<h3 class="function"><a id="cupsFreeOptions">cupsFreeOptions</a></h3>
+ <p class="description">Free all memory used by options.</p>
+<p class="code">
+void cupsFreeOptions(int num_options, <a href="#cups_option_t">cups_option_t</a> *options);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>num_options</th>
+ <td class="description">Number of options</td></tr>
+<tr><th>options</th>
+ <td class="description">Pointer to options</td></tr>
+</tbody></table>
+<h3 class="function"><a id="cupsGetDest">cupsGetDest</a></h3>
+ <p class="description">Get the named destination from the list.</p>
+<p class="code">
+<a href="#cups_dest_t">cups_dest_t</a> *cupsGetDest(const char *name, const char *instance, int num_dests, <a href="#cups_dest_t">cups_dest_t</a> *dests);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>name</th>
+ <td class="description">Destination name or <code>NULL</code> for the default destination</td></tr>
+<tr><th>instance</th>
+ <td class="description">Instance name or <code>NULL</code></td></tr>
+<tr><th>num_dests</th>
+ <td class="description">Number of destinations</td></tr>
+<tr><th>dests</th>
+ <td class="description">Destinations</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Destination pointer or <code>NULL</code></p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Use the <a href="#cupsEnumDests"><code>cupsEnumDests</code></a> or <a href="#cupsGetDests2"><code>cupsGetDests2</code></a> functions to get a
+list of supported destinations for the current user.</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="cupsGetDestMediaByIndex">cupsGetDestMediaByIndex</a></h3>
+ <p class="description">Get a media name, dimension, and margins for a
+specific size.</p>
+<p class="code">
+int cupsGetDestMediaByIndex(<a href="#http_t">http_t</a> *http, <a href="#cups_dest_t">cups_dest_t</a> *dest, <a href="#cups_dinfo_t">cups_dinfo_t</a> *dinfo, int n, unsigned flags, <a href="#cups_size_t">cups_size_t</a> *size);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to destination</td></tr>
+<tr><th>dest</th>
+ <td class="description">Destination</td></tr>
+<tr><th>dinfo</th>
+ <td class="description">Destination information</td></tr>
+<tr><th>n</th>
+ <td class="description">Media size number (0-based)</td></tr>
+<tr><th>flags</th>
+ <td class="description">Media flags</td></tr>
+<tr><th>size</th>
+ <td class="description">Media size information</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>flags</code> parameter determines which set of media are indexed. For
+example, passing <code>CUPS_MEDIA_FLAGS_BORDERLESS</code> will get the Nth
+borderless size supported by the printer.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="cupsGetDestMediaByName">cupsGetDestMediaByName</a></h3>
+ <p class="description">Get media names, dimensions, and margins.</p>
+<p class="code">
+int cupsGetDestMediaByName(<a href="#http_t">http_t</a> *http, <a href="#cups_dest_t">cups_dest_t</a> *dest, <a href="#cups_dinfo_t">cups_dinfo_t</a> *dinfo, const char *media, unsigned flags, <a href="#cups_size_t">cups_size_t</a> *size);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to destination</td></tr>
+<tr><th>dest</th>
+ <td class="description">Destination</td></tr>
+<tr><th>dinfo</th>
+ <td class="description">Destination information</td></tr>
+<tr><th>media</th>
+ <td class="description">Media name</td></tr>
+<tr><th>flags</th>
+ <td class="description">Media matching flags</td></tr>
+<tr><th>size</th>
+ <td class="description">Media size information</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 on match, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The &quot;media&quot; string is a PWG media name. &quot;Flags&quot; provides some matching
+guidance (multiple flags can be combined):<br>
+<br>
+CUPS_MEDIA_FLAGS_DEFAULT = find the closest size supported by the printer,
+CUPS_MEDIA_FLAGS_BORDERLESS = find a borderless size,
+CUPS_MEDIA_FLAGS_DUPLEX = find a size compatible with 2-sided printing,
+CUPS_MEDIA_FLAGS_EXACT = find an exact match for the size, and
+CUPS_MEDIA_FLAGS_READY = if the printer supports media sensing, find the
+size amongst the &quot;ready&quot; media.<br>
+<br>
+The matching result (if any) is returned in the &quot;cups_size_t&quot; structure.<br>
+<br>
+Returns 1 when there is a match and 0 if there is not a match.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="cupsGetDestMediaBySize">cupsGetDestMediaBySize</a></h3>
+ <p class="description">Get media names, dimensions, and margins.</p>
+<p class="code">
+int cupsGetDestMediaBySize(<a href="#http_t">http_t</a> *http, <a href="#cups_dest_t">cups_dest_t</a> *dest, <a href="#cups_dinfo_t">cups_dinfo_t</a> *dinfo, int width, int length, unsigned flags, <a href="#cups_size_t">cups_size_t</a> *size);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to destination</td></tr>
+<tr><th>dest</th>
+ <td class="description">Destination</td></tr>
+<tr><th>dinfo</th>
+ <td class="description">Destination information</td></tr>
+<tr><th>width</th>
+ <td class="description">Media width in hundredths of
+of millimeters</td></tr>
+<tr><th>length</th>
+ <td class="description">Media length in hundredths of
+of millimeters</td></tr>
+<tr><th>flags</th>
+ <td class="description">Media matching flags</td></tr>
+<tr><th>size</th>
+ <td class="description">Media size information</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 on match, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">&quot;Width&quot; and &quot;length&quot; are the dimensions in hundredths of millimeters.
+&quot;Flags&quot; provides some matching guidance (multiple flags can be combined):<br>
+<br>
+CUPS_MEDIA_FLAGS_DEFAULT = find the closest size supported by the printer,
+CUPS_MEDIA_FLAGS_BORDERLESS = find a borderless size,
+CUPS_MEDIA_FLAGS_DUPLEX = find a size compatible with 2-sided printing,
+CUPS_MEDIA_FLAGS_EXACT = find an exact match for the size, and
+CUPS_MEDIA_FLAGS_READY = if the printer supports media sensing, find the
+size amongst the &quot;ready&quot; media.<br>
+<br>
+The matching result (if any) is returned in the &quot;cups_size_t&quot; structure.<br>
+<br>
+Returns 1 when there is a match and 0 if there is not a match.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="cupsGetDestMediaCount">cupsGetDestMediaCount</a></h3>
+ <p class="description">Get the number of sizes supported by a
+destination.</p>
+<p class="code">
+int cupsGetDestMediaCount(<a href="#http_t">http_t</a> *http, <a href="#cups_dest_t">cups_dest_t</a> *dest, <a href="#cups_dinfo_t">cups_dinfo_t</a> *dinfo, unsigned flags);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to destination</td></tr>
+<tr><th>dest</th>
+ <td class="description">Destination</td></tr>
+<tr><th>dinfo</th>
+ <td class="description">Destination information</td></tr>
+<tr><th>flags</th>
+ <td class="description">Media flags</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Number of sizes</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>flags</code> parameter determines the set of media sizes that are
+counted. For example, passing <code>CUPS_MEDIA_FLAGS_BORDERLESS</code> will return
+the number of borderless sizes.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="cupsGetDestMediaDefault">cupsGetDestMediaDefault</a></h3>
+ <p class="description">Get the default size for a destination.</p>
+<p class="code">
+int cupsGetDestMediaDefault(<a href="#http_t">http_t</a> *http, <a href="#cups_dest_t">cups_dest_t</a> *dest, <a href="#cups_dinfo_t">cups_dinfo_t</a> *dinfo, unsigned flags, <a href="#cups_size_t">cups_size_t</a> *size);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to destination</td></tr>
+<tr><th>dest</th>
+ <td class="description">Destination</td></tr>
+<tr><th>dinfo</th>
+ <td class="description">Destination information</td></tr>
+<tr><th>flags</th>
+ <td class="description">Media flags</td></tr>
+<tr><th>size</th>
+ <td class="description">Media size information</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>flags</code> parameter determines which default size is returned. For
+example, passing <code>CUPS_MEDIA_FLAGS_BORDERLESS</code> will return the default
+borderless size, typically US Letter or A4, but sometimes 4x6 photo media.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 2.0/macOS 10.10&#160;</span><a id="cupsGetDestWithURI">cupsGetDestWithURI</a></h3>
+ <p class="description">Get a destination associated with a URI.</p>
+<p class="code">
+<a href="#cups_dest_t">cups_dest_t</a> *cupsGetDestWithURI(const char *name, const char *uri);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>name</th>
+ <td class="description">Desired printer name or <code>NULL</code></td></tr>
+<tr><th>uri</th>
+ <td class="description">URI for the printer</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Destination or <code>NULL</code></p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">&quot;name&quot; is the desired name for the printer. If <code>NULL</code>, a name will be
+created using the URI.<br>
+<br>
+&quot;uri&quot; is the &quot;ipp&quot; or &quot;ipps&quot; URI for the printer.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.1.21/macOS 10.4&#160;</span><a id="cupsGetDests2">cupsGetDests2</a></h3>
+ <p class="description">Get the list of destinations from the specified server.</p>
+<p class="code">
+int cupsGetDests2(<a href="#http_t">http_t</a> *http, <a href="#cups_dest_t">cups_dest_t</a> **dests);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></td></tr>
+<tr><th>dests</th>
+ <td class="description">Destinations</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Number of destinations</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Starting with CUPS 1.2, the returned list of destinations include the
+&quot;printer-info&quot;, &quot;printer-is-accepting-jobs&quot;, &quot;printer-is-shared&quot;,
+&quot;printer-make-and-model&quot;, &quot;printer-state&quot;, &quot;printer-state-change-time&quot;,
+&quot;printer-state-reasons&quot;, &quot;printer-type&quot;, and &quot;printer-uri-supported&quot;
+attributes as options.<br>
+<br>
+CUPS 1.4 adds the &quot;marker-change-time&quot;, &quot;marker-colors&quot;,
+&quot;marker-high-levels&quot;, &quot;marker-levels&quot;, &quot;marker-low-levels&quot;, &quot;marker-message&quot;,
+&quot;marker-names&quot;, &quot;marker-types&quot;, and &quot;printer-commands&quot; attributes as options.<br>
+<br>
+CUPS 2.2 adds accessible IPP printers to the list of destinations that can
+be used. The &quot;printer-uri-supported&quot; option will be present for those IPP
+printers that have been recently used.<br>
+<br>
+Use the <a href="#cupsFreeDests"><code>cupsFreeDests</code></a> function to free the destination list and
+the <a href="#cupsGetDest"><code>cupsGetDest</code></a> function to find a particular destination.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 2.2.4/macOS 10.13&#160;</span><a id="cupsGetIntegerOption">cupsGetIntegerOption</a></h3>
+ <p class="description">Get an integer option value.</p>
+<p class="code">
+int cupsGetIntegerOption(const char *name, int num_options, <a href="#cups_option_t">cups_option_t</a> *options);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>name</th>
+ <td class="description">Name of option</td></tr>
+<tr><th>num_options</th>
+ <td class="description">Number of options</td></tr>
+<tr><th>options</th>
+ <td class="description">Options</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Option value or <code>INT_MIN</code></p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">INT_MIN is returned when the option does not exist, is not an integer, or
+exceeds the range of values for the &quot;int&quot; type.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.1.21/macOS 10.4&#160;</span><a id="cupsGetJobs2">cupsGetJobs2</a></h3>
+ <p class="description">Get the jobs from the specified server.</p>
+<p class="code">
+int cupsGetJobs2(<a href="#http_t">http_t</a> *http, <a href="#cups_job_t">cups_job_t</a> **jobs, const char *name, int myjobs, int whichjobs);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></td></tr>
+<tr><th>jobs</th>
+ <td class="description">Job data</td></tr>
+<tr><th>name</th>
+ <td class="description"><code>NULL</code> = all destinations, otherwise show jobs for named destination</td></tr>
+<tr><th>myjobs</th>
+ <td class="description">0 = all users, 1 = mine</td></tr>
+<tr><th>whichjobs</th>
+ <td class="description"><code>CUPS_WHICHJOBS_ALL</code>, <code>CUPS_WHICHJOBS_ACTIVE</code>, or <code>CUPS_WHICHJOBS_COMPLETED</code></td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Number of jobs</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">A &quot;whichjobs&quot; value of <code>CUPS_WHICHJOBS_ALL</code> returns all jobs regardless
+of state, while <code>CUPS_WHICHJOBS_ACTIVE</code> returns jobs that are
+pending, processing, or held and <code>CUPS_WHICHJOBS_COMPLETED</code> returns
+jobs that are stopped, canceled, aborted, or completed.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.4/macOS 10.6&#160;</span><a id="cupsGetNamedDest">cupsGetNamedDest</a></h3>
+ <p class="description">Get options for the named destination.</p>
+<p class="code">
+<a href="#cups_dest_t">cups_dest_t</a> *cupsGetNamedDest(<a href="#http_t">http_t</a> *http, const char *name, const char *instance);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></td></tr>
+<tr><th>name</th>
+ <td class="description">Destination name or <code>NULL</code> for the default destination</td></tr>
+<tr><th>instance</th>
+ <td class="description">Instance name or <code>NULL</code></td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Destination or <code>NULL</code></p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">This function is optimized for retrieving a single destination and should
+be used instead of <a href="#cupsGetDests2"><code>cupsGetDests2</code></a> and <a href="#cupsGetDest"><code>cupsGetDest</code></a> when you
+either know the name of the destination or want to print to the default
+destination. If <code>NULL</code> is returned, the destination does not exist or
+there is no default destination.<br>
+<br>
+If &quot;http&quot; is <code>CUPS_HTTP_DEFAULT</code>, the connection to the default print
+server will be used.<br>
+<br>
+If &quot;name&quot; is <code>NULL</code>, the default printer for the current user will be
+returned.<br>
+<br>
+The returned destination must be freed using <a href="#cupsFreeDests"><code>cupsFreeDests</code></a> with a
+&quot;num_dests&quot; value of 1.
+
+</p>
+<h3 class="function"><a id="cupsGetOption">cupsGetOption</a></h3>
+ <p class="description">Get an option value.</p>
+<p class="code">
+const char *cupsGetOption(const char *name, int num_options, <a href="#cups_option_t">cups_option_t</a> *options);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>name</th>
+ <td class="description">Name of option</td></tr>
+<tr><th>num_options</th>
+ <td class="description">Number of options</td></tr>
+<tr><th>options</th>
+ <td class="description">Options</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Option value or <code>NULL</code></p>
+<h3 class="function"><span class="info">&#160;CUPS 1.4/macOS 10.6&#160;</span><a id="cupsGetPassword2">cupsGetPassword2</a></h3>
+ <p class="description">Get a password from the user using the current
+password callback.</p>
+<p class="code">
+const char *cupsGetPassword2(const char *prompt, <a href="#http_t">http_t</a> *http, const char *method, const char *resource);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>prompt</th>
+ <td class="description">Prompt string</td></tr>
+<tr><th>http</th>
+ <td class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></td></tr>
+<tr><th>method</th>
+ <td class="description">Request method (&quot;GET&quot;, &quot;POST&quot;, &quot;PUT&quot;)</td></tr>
+<tr><th>resource</th>
+ <td class="description">Resource path</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Password</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Uses the current password callback function. Returns <code>NULL</code> if the
+user does not provide a password.<br>
+<br>
+Note: The current password callback function is tracked separately for each
+thread in a program. Multi-threaded programs that override the setting via
+the <a href="#cupsSetPasswordCB2"><code>cupsSetPasswordCB2</code></a> function need to do so in each thread for the
+same function to be used.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 2.0/macOS 10.10&#160;</span><a id="cupsLocalizeDestMedia">cupsLocalizeDestMedia</a></h3>
+ <p class="description">Get the localized string for a destination media
+size.</p>
+<p class="code">
+const char *cupsLocalizeDestMedia(<a href="#http_t">http_t</a> *http, <a href="#cups_dest_t">cups_dest_t</a> *dest, <a href="#cups_dinfo_t">cups_dinfo_t</a> *dinfo, unsigned flags, <a href="#cups_size_t">cups_size_t</a> *size);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to destination</td></tr>
+<tr><th>dest</th>
+ <td class="description">Destination</td></tr>
+<tr><th>dinfo</th>
+ <td class="description">Destination information</td></tr>
+<tr><th>flags</th>
+ <td class="description">Media flags</td></tr>
+<tr><th>size</th>
+ <td class="description">Media size</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Localized string</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The returned string is stored in the destination information and will become
+invalid if the destination information is deleted.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="cupsLocalizeDestOption">cupsLocalizeDestOption</a></h3>
+ <p class="description">Get the localized string for a destination
+option.</p>
+<p class="code">
+const char *cupsLocalizeDestOption(<a href="#http_t">http_t</a> *http, <a href="#cups_dest_t">cups_dest_t</a> *dest, <a href="#cups_dinfo_t">cups_dinfo_t</a> *dinfo, const char *option);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to destination</td></tr>
+<tr><th>dest</th>
+ <td class="description">Destination</td></tr>
+<tr><th>dinfo</th>
+ <td class="description">Destination information</td></tr>
+<tr><th>option</th>
+ <td class="description">Option to localize</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Localized string</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The returned string is stored in the destination information and will become
+invalid if the destination information is deleted.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="cupsLocalizeDestValue">cupsLocalizeDestValue</a></h3>
+ <p class="description">Get the localized string for a destination
+option+value pair.</p>
+<p class="code">
+const char *cupsLocalizeDestValue(<a href="#http_t">http_t</a> *http, <a href="#cups_dest_t">cups_dest_t</a> *dest, <a href="#cups_dinfo_t">cups_dinfo_t</a> *dinfo, const char *option, const char *value);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to destination</td></tr>
+<tr><th>dest</th>
+ <td class="description">Destination</td></tr>
+<tr><th>dinfo</th>
+ <td class="description">Destination information</td></tr>
+<tr><th>option</th>
+ <td class="description">Option to localize</td></tr>
+<tr><th>value</th>
+ <td class="description">Value to localize</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Localized string</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The returned string is stored in the destination information and will become
+invalid if the destination information is deleted.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 2.0/OS 10.10&#160;</span><a id="cupsMakeServerCredentials">cupsMakeServerCredentials</a></h3>
+ <p class="description">Make a self-signed certificate and private key pair.</p>
+<p class="code">
+int cupsMakeServerCredentials(const char *path, const char *common_name, int num_alt_names, const char **alt_names, time_t expiration_date);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>path</th>
+ <td class="description">Keychain path or <code>NULL</code> for default</td></tr>
+<tr><th>common_name</th>
+ <td class="description">Common name</td></tr>
+<tr><th>num_alt_names</th>
+ <td class="description">Number of subject alternate names</td></tr>
+<tr><th>alt_names</th>
+ <td class="description">Subject Alternate Names</td></tr>
+<tr><th>expiration_date</th>
+ <td class="description">Expiration date</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 on success, 0 on failure</p>
+<h3 class="function"><a id="cupsParseOptions">cupsParseOptions</a></h3>
+ <p class="description">Parse options from a command-line argument.</p>
+<p class="code">
+int cupsParseOptions(const char *arg, int num_options, <a href="#cups_option_t">cups_option_t</a> **options);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>arg</th>
+ <td class="description">Argument to parse</td></tr>
+<tr><th>num_options</th>
+ <td class="description">Number of options</td></tr>
+<tr><th>options</th>
+ <td class="description">Options found</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Number of options found</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">This function converts space-delimited name/value pairs according
+to the PAPI text option ABNF specification. Collection values
+(&quot;name={a=... b=... c=...}&quot;) are stored with the curley brackets
+intact - use <code>cupsParseOptions</code> on the value to extract the
+collection attributes.</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.3/macOS 10.5&#160;</span><a id="cupsRemoveDest">cupsRemoveDest</a></h3>
+ <p class="description">Remove a destination from the destination list.</p>
+<p class="code">
+int cupsRemoveDest(const char *name, const char *instance, int num_dests, <a href="#cups_dest_t">cups_dest_t</a> **dests);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>name</th>
+ <td class="description">Destination name</td></tr>
+<tr><th>instance</th>
+ <td class="description">Instance name or <code>NULL</code></td></tr>
+<tr><th>num_dests</th>
+ <td class="description">Number of destinations</td></tr>
+<tr><th>dests</th>
+ <td class="description">Destinations</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">New number of destinations</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Removing a destination/instance does not delete the class or printer
+queue, merely the lpoptions for that destination/instance. Use the
+<a href="#cupsSetDests"><code>cupsSetDests</code></a> or <a href="#cupsSetDests2"><code>cupsSetDests2</code></a> functions to save the new
+options for the user.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="cupsRemoveOption">cupsRemoveOption</a></h3>
+ <p class="description">Remove an option from an option array.</p>
+<p class="code">
+int cupsRemoveOption(const char *name, int num_options, <a href="#cups_option_t">cups_option_t</a> **options);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>name</th>
+ <td class="description">Option name</td></tr>
+<tr><th>num_options</th>
+ <td class="description">Current number of options</td></tr>
+<tr><th>options</th>
+ <td class="description">Options</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">New number of options</p>
+<h3 class="function"><a id="cupsServer">cupsServer</a></h3>
+ <p class="description">Return the hostname/address of the current server.</p>
+<p class="code">
+const char *cupsServer(void);</p>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Server name</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The default server comes from the CUPS_SERVER environment variable, then the
+~/.cups/client.conf file, and finally the /etc/cups/client.conf file. If not
+set, the default is the local system - either &quot;localhost&quot; or a domain socket
+path.<br>
+<br>
+The returned value can be a fully-qualified hostname, a numeric IPv4 or IPv6
+address, or a domain socket pathname.<br>
+<br>
+Note: The current server is tracked separately for each thread in a program.
+Multi-threaded programs that override the server via the
+<a href="#cupsSetServer"><code>cupsSetServer</code></a> function need to do so in each thread for the same
+server to be used.</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.5/macOS 10.7&#160;</span><a id="cupsSetClientCertCB">cupsSetClientCertCB</a></h3>
+ <p class="description">Set the client certificate callback.</p>
+<p class="code">
+void cupsSetClientCertCB(<a href="#cups_client_cert_cb_t">cups_client_cert_cb_t</a> cb, void *user_data);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>cb</th>
+ <td class="description">Callback function</td></tr>
+<tr><th>user_data</th>
+ <td class="description">User data pointer</td></tr>
+</tbody></table>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Pass <code>NULL</code> to restore the default callback.<br>
+<br>
+Note: The current certificate callback is tracked separately for each thread
+in a program. Multi-threaded programs that override the callback need to do
+so in each thread for the same callback to be used.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.5/macOS 10.7&#160;</span><a id="cupsSetCredentials">cupsSetCredentials</a></h3>
+ <p class="description">Set the default credentials to be used for SSL/TLS
+connections.</p>
+<p class="code">
+int cupsSetCredentials(cups_array_t *credentials);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>credentials</th>
+ <td class="description">Array of credentials</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Status of call (0 = success)</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Note: The default credentials are tracked separately for each thread in a
+program. Multi-threaded programs that override the setting need to do so in
+each thread for the same setting to be used.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.3/macOS 10.5&#160;</span><a id="cupsSetDefaultDest">cupsSetDefaultDest</a></h3>
+ <p class="description">Set the default destination.</p>
+<p class="code">
+void cupsSetDefaultDest(const char *name, const char *instance, int num_dests, <a href="#cups_dest_t">cups_dest_t</a> *dests);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>name</th>
+ <td class="description">Destination name</td></tr>
+<tr><th>instance</th>
+ <td class="description">Instance name or <code>NULL</code></td></tr>
+<tr><th>num_dests</th>
+ <td class="description">Number of destinations</td></tr>
+<tr><th>dests</th>
+ <td class="description">Destinations</td></tr>
+</tbody></table>
+<h3 class="function"><span class="info">&#160;CUPS 1.1.21/macOS 10.4&#160;</span><a id="cupsSetDests2">cupsSetDests2</a></h3>
+ <p class="description">Save the list of destinations for the specified server.</p>
+<p class="code">
+int cupsSetDests2(<a href="#http_t">http_t</a> *http, int num_dests, <a href="#cups_dest_t">cups_dest_t</a> *dests);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></td></tr>
+<tr><th>num_dests</th>
+ <td class="description">Number of destinations</td></tr>
+<tr><th>dests</th>
+ <td class="description">Destinations</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">0 on success, -1 on error</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">This function saves the destinations to /etc/cups/lpoptions when run
+as root and ~/.cups/lpoptions when run as a normal user.
+
+</p>
+<h3 class="function"><a id="cupsSetEncryption">cupsSetEncryption</a></h3>
+ <p class="description">Set the encryption preference.</p>
+<p class="code">
+void cupsSetEncryption(<a href="#http_encryption_t">http_encryption_t</a> e);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>e</th>
+ <td class="description">New encryption preference</td></tr>
+</tbody></table>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The default encryption setting comes from the CUPS_ENCRYPTION
+environment variable, then the ~/.cups/client.conf file, and finally the
+/etc/cups/client.conf file. If not set, the default is
+<code>HTTP_ENCRYPTION_IF_REQUESTED</code>.<br>
+<br>
+Note: The current encryption setting is tracked separately for each thread
+in a program. Multi-threaded programs that override the setting need to do
+so in each thread for the same setting to be used.</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.4/macOS 10.6&#160;</span><a id="cupsSetPasswordCB2">cupsSetPasswordCB2</a></h3>
+ <p class="description">Set the advanced password callback for CUPS.</p>
+<p class="code">
+void cupsSetPasswordCB2(<a href="#cups_password_cb2_t">cups_password_cb2_t</a> cb, void *user_data);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>cb</th>
+ <td class="description">Callback function</td></tr>
+<tr><th>user_data</th>
+ <td class="description">User data pointer</td></tr>
+</tbody></table>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Pass <code>NULL</code> to restore the default (console) password callback, which
+reads the password from the console. Programs should call either this
+function or <a href="#cupsSetPasswordCB2"><code>cupsSetPasswordCB2</code></a>, as only one callback can be registered
+by a program per thread.<br>
+<br>
+Note: The current password callback is tracked separately for each thread
+in a program. Multi-threaded programs that override the callback need to do
+so in each thread for the same callback to be used.
+
+</p>
+<h3 class="function"><a id="cupsSetServer">cupsSetServer</a></h3>
+ <p class="description">Set the default server name and port.</p>
+<p class="code">
+void cupsSetServer(const char *server);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>server</th>
+ <td class="description">Server name</td></tr>
+</tbody></table>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The &quot;server&quot; string can be a fully-qualified hostname, a numeric
+IPv4 or IPv6 address, or a domain socket pathname. Hostnames and numeric IP
+addresses can be optionally followed by a colon and port number to override
+the default port 631, e.g. &quot;hostname:8631&quot;. Pass <code>NULL</code> to restore the
+default server name and port.<br>
+<br>
+Note: The current server is tracked separately for each thread in a program.
+Multi-threaded programs that override the server need to do so in each
+thread for the same server to be used.</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.5/macOS 10.7&#160;</span><a id="cupsSetServerCertCB">cupsSetServerCertCB</a></h3>
+ <p class="description">Set the server certificate callback.</p>
+<p class="code">
+void cupsSetServerCertCB(<a href="#cups_server_cert_cb_t">cups_server_cert_cb_t</a> cb, void *user_data);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>cb</th>
+ <td class="description">Callback function</td></tr>
+<tr><th>user_data</th>
+ <td class="description">User data pointer</td></tr>
+</tbody></table>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Pass <code>NULL</code> to restore the default callback.<br>
+<br>
+Note: The current credentials callback is tracked separately for each thread
+in a program. Multi-threaded programs that override the callback need to do
+so in each thread for the same callback to be used.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 2.0/macOS 10.10&#160;</span><a id="cupsSetServerCredentials">cupsSetServerCredentials</a></h3>
+ <p class="description">Set the default server credentials.</p>
+<p class="code">
+int cupsSetServerCredentials(const char *path, const char *common_name, int auto_create);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>path</th>
+ <td class="description">Keychain path or <code>NULL</code> for default</td></tr>
+<tr><th>common_name</th>
+ <td class="description">Default common name for server</td></tr>
+<tr><th>auto_create</th>
+ <td class="description">1 = automatically create self-signed certificates</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Note: The server credentials are used by all threads in the running process.
+This function is threadsafe.
+
+</p>
+<h3 class="function"><a id="cupsSetUser">cupsSetUser</a></h3>
+ <p class="description">Set the default user name.</p>
+<p class="code">
+void cupsSetUser(const char *user);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>user</th>
+ <td class="description">User name</td></tr>
+</tbody></table>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Pass <code>NULL</code> to restore the default user name.<br>
+<br>
+Note: The current user name is tracked separately for each thread in a
+program. Multi-threaded programs that override the user name need to do so
+in each thread for the same user name to be used.</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="cupsSetUserAgent">cupsSetUserAgent</a></h3>
+ <p class="description">Set the default HTTP User-Agent string.</p>
+<p class="code">
+void cupsSetUserAgent(const char *user_agent);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>user_agent</th>
+ <td class="description">User-Agent string or <code>NULL</code></td></tr>
+</tbody></table>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Setting the string to NULL forces the default value containing the CUPS
+version, IPP version, and operating system version and architecture.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="cupsStartDestDocument">cupsStartDestDocument</a></h3>
+ <p class="description">Start a new document.</p>
+<p class="code">
+http_status_t cupsStartDestDocument(<a href="#http_t">http_t</a> *http, <a href="#cups_dest_t">cups_dest_t</a> *dest, <a href="#cups_dinfo_t">cups_dinfo_t</a> *info, int job_id, const char *docname, const char *format, int num_options, <a href="#cups_option_t">cups_option_t</a> *options, int last_document);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to destination</td></tr>
+<tr><th>dest</th>
+ <td class="description">Destination</td></tr>
+<tr><th>info</th>
+ <td class="description">Destination information</td></tr>
+<tr><th>job_id</th>
+ <td class="description">Job ID</td></tr>
+<tr><th>docname</th>
+ <td class="description">Document name</td></tr>
+<tr><th>format</th>
+ <td class="description">Document format</td></tr>
+<tr><th>num_options</th>
+ <td class="description">Number of document options</td></tr>
+<tr><th>options</th>
+ <td class="description">Document options</td></tr>
+<tr><th>last_document</th>
+ <td class="description">1 if this is the last document</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Status of document creation</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">&quot;job_id&quot; is the job ID returned by cupsCreateDestJob. &quot;docname&quot; is the name
+of the document/file being printed, &quot;format&quot; is the MIME media type for the
+document (see CUPS_FORMAT_xxx constants), and &quot;num_options&quot; and &quot;options&quot;
+are the options do be applied to the document. &quot;last_document&quot; should be 1
+if this is the last document to be submitted in the job. Returns
+<code>HTTP_CONTINUE</code> on success.
+
+</p>
+<h3 class="function"><a id="cupsUser">cupsUser</a></h3>
+ <p class="description">Return the current user's name.</p>
+<p class="code">
+const char *cupsUser(void);</p>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">User name</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Note: The current user name is tracked separately for each thread in a
+program. Multi-threaded programs that override the user name with the
+<a href="#cupsSetUser"><code>cupsSetUser</code></a> function need to do so in each thread for the same user
+name to be used.</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="cupsUserAgent">cupsUserAgent</a></h3>
+ <p class="description">Return the default HTTP User-Agent string.</p>
+<p class="code">
+const char *cupsUserAgent(void);</p>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">User-Agent string</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="httpAcceptConnection">httpAcceptConnection</a></h3>
+ <p class="description">Accept a new HTTP client connection from the
+specified listening socket.</p>
+<p class="code">
+<a href="#http_t">http_t</a> *httpAcceptConnection(int fd, int blocking);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>fd</th>
+ <td class="description">Listen socket file descriptor</td></tr>
+<tr><th>blocking</th>
+ <td class="description">1 if the connection should be
+blocking, 0 otherwise</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">HTTP connection or <code>NULL</code></p>
+<h3 class="function"><span class="info">&#160;CUPS 1.5/macOS 10.7&#160;</span><a id="httpAddCredential">httpAddCredential</a></h3>
+ <p class="description">Allocates and adds a single credential to an array.</p>
+<p class="code">
+int httpAddCredential(cups_array_t *credentials, const void *data, size_t datalen);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>credentials</th>
+ <td class="description">Credentials array</td></tr>
+<tr><th>data</th>
+ <td class="description">PEM-encoded X.509 data</td></tr>
+<tr><th>datalen</th>
+ <td class="description">Length of data</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">0 on success, -1 on error</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Use <code>cupsArrayNew(NULL, NULL)</code> to create a credentials array.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="httpAddrAny">httpAddrAny</a></h3>
+ <p class="description">Check for the &quot;any&quot; address.</p>
+<p class="code">
+int httpAddrAny(const <a href="#http_addr_t">http_addr_t</a> *addr);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>addr</th>
+ <td class="description">Address to check</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 if &quot;any&quot;, 0 otherwise</p>
+<h3 class="function"><span class="info">&#160;CUPS 2.0/OS 10.10&#160;</span><a id="httpAddrClose">httpAddrClose</a></h3>
+ <p class="description">Close a socket created by <a href="#httpAddrConnect"><code>httpAddrConnect</code></a> or
+<a href="#httpAddrListen"><code>httpAddrListen</code></a>.</p>
+<p class="code">
+int httpAddrClose(<a href="#http_addr_t">http_addr_t</a> *addr, int fd);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>addr</th>
+ <td class="description">Listen address or <code>NULL</code></td></tr>
+<tr><th>fd</th>
+ <td class="description">Socket file descriptor</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">0 on success, -1 on failure</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Pass <code>NULL</code> for sockets created with <a href="#httpAddrConnect2"><code>httpAddrConnect2</code></a> and the
+listen address for sockets created with <a href="#httpAddrListen"><code>httpAddrListen</code></a>. This function
+ensures that domain sockets are removed when closed.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="httpAddrConnect2">httpAddrConnect2</a></h3>
+ <p class="description">Connect to any of the addresses in the list with a
+timeout and optional cancel.</p>
+<p class="code">
+<a href="#http_addrlist_t">http_addrlist_t</a> *httpAddrConnect2(<a href="#http_addrlist_t">http_addrlist_t</a> *addrlist, int *sock, int msec, int *cancel);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>addrlist</th>
+ <td class="description">List of potential addresses</td></tr>
+<tr><th>sock</th>
+ <td class="description">Socket</td></tr>
+<tr><th>msec</th>
+ <td class="description">Timeout in milliseconds</td></tr>
+<tr><th>cancel</th>
+ <td class="description">Pointer to &quot;cancel&quot; variable</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Connected address or NULL on failure</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="httpAddrCopyList">httpAddrCopyList</a></h3>
+ <p class="description">Copy an address list.</p>
+<p class="code">
+<a href="#http_addrlist_t">http_addrlist_t</a> *httpAddrCopyList(<a href="#http_addrlist_t">http_addrlist_t</a> *src);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>src</th>
+ <td class="description">Source address list</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">New address list or <code>NULL</code> on error</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="httpAddrEqual">httpAddrEqual</a></h3>
+ <p class="description">Compare two addresses.</p>
+<p class="code">
+int httpAddrEqual(const <a href="#http_addr_t">http_addr_t</a> *addr1, const <a href="#http_addr_t">http_addr_t</a> *addr2);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>addr1</th>
+ <td class="description">First address</td></tr>
+<tr><th>addr2</th>
+ <td class="description">Second address</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 if equal, 0 if not</p>
+<h3 class="function"><a id="httpAddrFamily">httpAddrFamily</a></h3>
+ <p class="description">Get the address family of an address.</p>
+<p class="code">
+int httpAddrFamily(<a href="#http_addr_t">http_addr_t</a> *addr);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>addr</th>
+ <td class="description">Address</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Address family</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="httpAddrFreeList">httpAddrFreeList</a></h3>
+ <p class="description">Free an address list.</p>
+<p class="code">
+void httpAddrFreeList(<a href="#http_addrlist_t">http_addrlist_t</a> *addrlist);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>addrlist</th>
+ <td class="description">Address list to free</td></tr>
+</tbody></table>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="httpAddrGetList">httpAddrGetList</a></h3>
+ <p class="description">Get a list of addresses for a hostname.</p>
+<p class="code">
+<a href="#http_addrlist_t">http_addrlist_t</a> *httpAddrGetList(const char *hostname, int family, const char *service);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>hostname</th>
+ <td class="description">Hostname, IP address, or NULL for passive listen address</td></tr>
+<tr><th>family</th>
+ <td class="description">Address family or AF_UNSPEC</td></tr>
+<tr><th>service</th>
+ <td class="description">Service name or port number</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">List of addresses or NULL</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="httpAddrLength">httpAddrLength</a></h3>
+ <p class="description">Return the length of the address in bytes.</p>
+<p class="code">
+int httpAddrLength(const <a href="#http_addr_t">http_addr_t</a> *addr);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>addr</th>
+ <td class="description">Address</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Length in bytes</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="httpAddrListen">httpAddrListen</a></h3>
+ <p class="description">Create a listening socket bound to the specified
+address and port.</p>
+<p class="code">
+int httpAddrListen(<a href="#http_addr_t">http_addr_t</a> *addr, int port);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>addr</th>
+ <td class="description">Address to bind to</td></tr>
+<tr><th>port</th>
+ <td class="description">Port number to bind to</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Socket or -1 on error</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="httpAddrLocalhost">httpAddrLocalhost</a></h3>
+ <p class="description">Check for the local loopback address.</p>
+<p class="code">
+int httpAddrLocalhost(const <a href="#http_addr_t">http_addr_t</a> *addr);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>addr</th>
+ <td class="description">Address to check</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 if local host, 0 otherwise</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="httpAddrLookup">httpAddrLookup</a></h3>
+ <p class="description">Lookup the hostname associated with the address.</p>
+<p class="code">
+char *httpAddrLookup(const <a href="#http_addr_t">http_addr_t</a> *addr, char *name, int namelen);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>addr</th>
+ <td class="description">Address to lookup</td></tr>
+<tr><th>name</th>
+ <td class="description">Host name buffer</td></tr>
+<tr><th>namelen</th>
+ <td class="description">Size of name buffer</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Host name</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="httpAddrPort">httpAddrPort</a></h3>
+ <p class="description">Get the port number associated with an address.</p>
+<p class="code">
+int httpAddrPort(<a href="#http_addr_t">http_addr_t</a> *addr);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>addr</th>
+ <td class="description">Address</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Port number</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="httpAddrString">httpAddrString</a></h3>
+ <p class="description">Convert an address to a numeric string.</p>
+<p class="code">
+char *httpAddrString(const <a href="#http_addr_t">http_addr_t</a> *addr, char *s, int slen);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>addr</th>
+ <td class="description">Address to convert</td></tr>
+<tr><th>s</th>
+ <td class="description">String buffer</td></tr>
+<tr><th>slen</th>
+ <td class="description">Length of string</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Numeric address string</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="httpAssembleURI">httpAssembleURI</a></h3>
+ <p class="description">Assemble a uniform resource identifier from its
+components.</p>
+<p class="code">
+<a href="#http_uri_status_t">http_uri_status_t</a> httpAssembleURI(<a href="#http_uri_coding_t">http_uri_coding_t</a> encoding, char *uri, int urilen, const char *scheme, const char *username, const char *host, int port, const char *resource);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>encoding</th>
+ <td class="description">Encoding flags</td></tr>
+<tr><th>uri</th>
+ <td class="description">URI buffer</td></tr>
+<tr><th>urilen</th>
+ <td class="description">Size of URI buffer</td></tr>
+<tr><th>scheme</th>
+ <td class="description">Scheme name</td></tr>
+<tr><th>username</th>
+ <td class="description">Username</td></tr>
+<tr><th>host</th>
+ <td class="description">Hostname or address</td></tr>
+<tr><th>port</th>
+ <td class="description">Port number</td></tr>
+<tr><th>resource</th>
+ <td class="description">Resource</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">URI status</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">This function escapes reserved characters in the URI depending on the
+value of the &quot;encoding&quot; argument. You should use this function in
+place of traditional string functions whenever you need to create a
+URI string.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="httpAssembleURIf">httpAssembleURIf</a></h3>
+ <p class="description">Assemble a uniform resource identifier from its
+components with a formatted resource.</p>
+<p class="code">
+<a href="#http_uri_status_t">http_uri_status_t</a> httpAssembleURIf(<a href="#http_uri_coding_t">http_uri_coding_t</a> encoding, char *uri, int urilen, const char *scheme, const char *username, const char *host, int port, const char *resourcef, ...);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>encoding</th>
+ <td class="description">Encoding flags</td></tr>
+<tr><th>uri</th>
+ <td class="description">URI buffer</td></tr>
+<tr><th>urilen</th>
+ <td class="description">Size of URI buffer</td></tr>
+<tr><th>scheme</th>
+ <td class="description">Scheme name</td></tr>
+<tr><th>username</th>
+ <td class="description">Username</td></tr>
+<tr><th>host</th>
+ <td class="description">Hostname or address</td></tr>
+<tr><th>port</th>
+ <td class="description">Port number</td></tr>
+<tr><th>resourcef</th>
+ <td class="description">Printf-style resource</td></tr>
+<tr><th>...</th>
+ <td class="description">Additional arguments as needed</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">URI status</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">This function creates a formatted version of the resource string
+argument &quot;resourcef&quot; and escapes reserved characters in the URI
+depending on the value of the &quot;encoding&quot; argument. You should use
+this function in place of traditional string functions whenever
+you need to create a URI string.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="httpAssembleUUID">httpAssembleUUID</a></h3>
+ <p class="description">Assemble a name-based UUID URN conforming to RFC 4122.</p>
+<p class="code">
+char *httpAssembleUUID(const char *server, int port, const char *name, int number, char *buffer, size_t bufsize);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>server</th>
+ <td class="description">Server name</td></tr>
+<tr><th>port</th>
+ <td class="description">Port number</td></tr>
+<tr><th>name</th>
+ <td class="description">Object name or NULL</td></tr>
+<tr><th>number</th>
+ <td class="description">Object number or 0</td></tr>
+<tr><th>buffer</th>
+ <td class="description">String buffer</td></tr>
+<tr><th>bufsize</th>
+ <td class="description">Size of buffer</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">UUID string</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">This function creates a unique 128-bit identifying number using the server
+name, port number, random data, and optionally an object name and/or object
+number. The result is formatted as a UUID URN as defined in RFC 4122.<br>
+<br>
+The buffer needs to be at least 46 bytes in size.
+
+</p>
+<h3 class="function"><a id="httpBlocking">httpBlocking</a></h3>
+ <p class="description">Set blocking/non-blocking behavior on a connection.</p>
+<p class="code">
+void httpBlocking(<a href="#http_t">http_t</a> *http, int b);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+<tr><th>b</th>
+ <td class="description">1 = blocking, 0 = non-blocking</td></tr>
+</tbody></table>
+<h3 class="function"><a id="httpCheck">httpCheck</a></h3>
+ <p class="description">Check to see if there is a pending response from the server.</p>
+<p class="code">
+int httpCheck(<a href="#http_t">http_t</a> *http);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">0 = no data, 1 = data available</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span><a id="httpClearCookie">httpClearCookie</a></h3>
+ <p class="description">Clear the cookie value(s).</p>
+<p class="code">
+void httpClearCookie(<a href="#http_t">http_t</a> *http);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+</tbody></table>
+<h3 class="function"><a id="httpClearFields">httpClearFields</a></h3>
+ <p class="description">Clear HTTP request fields.</p>
+<p class="code">
+void httpClearFields(<a href="#http_t">http_t</a> *http);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+</tbody></table>
+<h3 class="function"><a id="httpClose">httpClose</a></h3>
+ <p class="description">Close an HTTP connection.</p>
+<p class="code">
+void httpClose(<a href="#http_t">http_t</a> *http);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+</tbody></table>
+<h3 class="function"><span class="info">&#160;CUPS 2.0/OS 10.10&#160;</span><a id="httpCompareCredentials">httpCompareCredentials</a></h3>
+ <p class="description">Compare two sets of X.509 credentials.</p>
+<p class="code">
+int httpCompareCredentials(cups_array_t *cred1, cups_array_t *cred2);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>cred1</th>
+ <td class="description">First set of X.509 credentials</td></tr>
+<tr><th>cred2</th>
+ <td class="description">Second set of X.509 credentials</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 if they match, 0 if they do not</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="httpConnect2">httpConnect2</a></h3>
+ <p class="description">Connect to a HTTP server.</p>
+<p class="code">
+<a href="#http_t">http_t</a> *httpConnect2(const char *host, int port, <a href="#http_addrlist_t">http_addrlist_t</a> *addrlist, int family, <a href="#http_encryption_t">http_encryption_t</a> encryption, int blocking, int msec, int *cancel);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>host</th>
+ <td class="description">Host to connect to</td></tr>
+<tr><th>port</th>
+ <td class="description">Port number</td></tr>
+<tr><th>addrlist</th>
+ <td class="description">List of addresses or <code>NULL</code> to lookup</td></tr>
+<tr><th>family</th>
+ <td class="description">Address family to use or <code>AF_UNSPEC</code> for any</td></tr>
+<tr><th>encryption</th>
+ <td class="description">Type of encryption to use</td></tr>
+<tr><th>blocking</th>
+ <td class="description">1 for blocking connection, 0 for non-blocking</td></tr>
+<tr><th>msec</th>
+ <td class="description">Connection timeout in milliseconds, 0 means don't connect</td></tr>
+<tr><th>cancel</th>
+ <td class="description">Pointer to &quot;cancel&quot; variable</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">New HTTP connection</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.5/macOS 10.7&#160;</span><a id="httpCopyCredentials">httpCopyCredentials</a></h3>
+ <p class="description">Copy the credentials associated with the peer in
+an encrypted connection.</p>
+<p class="code">
+int httpCopyCredentials(<a href="#http_t">http_t</a> *http, cups_array_t **credentials);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection to server</td></tr>
+<tr><th>credentials</th>
+ <td class="description">Array of credentials</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Status of call (0 = success)</p>
+<h3 class="function"><span class="info">&#160;CUPS 2.0/macOS 10.10&#160;</span><a id="httpCredentialsAreValidForName">httpCredentialsAreValidForName</a></h3>
+ <p class="description">Return whether the credentials are valid for the given name.</p>
+<p class="code">
+int httpCredentialsAreValidForName(cups_array_t *credentials, const char *common_name);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>credentials</th>
+ <td class="description">Credentials</td></tr>
+<tr><th>common_name</th>
+ <td class="description">Name to check</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 if valid, 0 otherwise</p>
+<h3 class="function"><span class="info">&#160;CUPS 2.0/macOS 10.10&#160;</span><a id="httpCredentialsGetExpiration">httpCredentialsGetExpiration</a></h3>
+ <p class="description">Return the expiration date of the credentials.</p>
+<p class="code">
+time_t httpCredentialsGetExpiration(cups_array_t *credentials);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>credentials</th>
+ <td class="description">Credentials</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Expiration date of credentials</p>
+<h3 class="function"><span class="info">&#160;CUPS 2.0/macOS 10.10&#160;</span><a id="httpCredentialsGetTrust">httpCredentialsGetTrust</a></h3>
+ <p class="description">Return the trust of credentials.</p>
+<p class="code">
+<a href="#http_trust_t">http_trust_t</a> httpCredentialsGetTrust(cups_array_t *credentials, const char *common_name);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>credentials</th>
+ <td class="description">Credentials</td></tr>
+<tr><th>common_name</th>
+ <td class="description">Common name for trust lookup</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Level of trust</p>
+<h3 class="function"><span class="info">&#160;CUPS 2.0/macOS 10.10&#160;</span><a id="httpCredentialsString">httpCredentialsString</a></h3>
+ <p class="description">Return a string representing the credentials.</p>
+<p class="code">
+size_t httpCredentialsString(cups_array_t *credentials, char *buffer, size_t bufsize);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>credentials</th>
+ <td class="description">Credentials</td></tr>
+<tr><th>buffer</th>
+ <td class="description">Buffer or <code>NULL</code></td></tr>
+<tr><th>bufsize</th>
+ <td class="description">Size of buffer</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Total size of credentials string</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.1.21/macOS 10.4&#160;</span><a id="httpDecode64_2">httpDecode64_2</a></h3>
+ <p class="description">Base64-decode a string.</p>
+<p class="code">
+char *httpDecode64_2(char *out, int *outlen, const char *in);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>out</th>
+ <td class="description">String to write to</td></tr>
+<tr><th>outlen</th>
+ <td class="description">Size of output string</td></tr>
+<tr><th>in</th>
+ <td class="description">String to read from</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Decoded string</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The caller must initialize &quot;outlen&quot; to the maximum size of the decoded
+string before calling <code>httpDecode64_2</code>. On return &quot;outlen&quot; contains the
+decoded length of the string.
+
+</p>
+<h3 class="function"><a id="httpDelete">httpDelete</a></h3>
+ <p class="description">Send a DELETE request to the server.</p>
+<p class="code">
+int httpDelete(<a href="#http_t">http_t</a> *http, const char *uri);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+<tr><th>uri</th>
+ <td class="description">URI to delete</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Status of call (0 = success)</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.1.21/macOS 10.4&#160;</span><a id="httpEncode64_2">httpEncode64_2</a></h3>
+ <p class="description">Base64-encode a string.</p>
+<p class="code">
+char *httpEncode64_2(char *out, int outlen, const char *in, int inlen);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>out</th>
+ <td class="description">String to write to</td></tr>
+<tr><th>outlen</th>
+ <td class="description">Maximum size of output string</td></tr>
+<tr><th>in</th>
+ <td class="description">String to read from</td></tr>
+<tr><th>inlen</th>
+ <td class="description">Size of input string</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Encoded string</p>
+<h3 class="function"><a id="httpEncryption">httpEncryption</a></h3>
+ <p class="description">Set the required encryption on the link.</p>
+<p class="code">
+int httpEncryption(<a href="#http_t">http_t</a> *http, <a href="#http_encryption_t">http_encryption_t</a> e);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+<tr><th>e</th>
+ <td class="description">New encryption preference</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">-1 on error, 0 on success</p>
+<h3 class="function"><a id="httpError">httpError</a></h3>
+ <p class="description">Get the last error on a connection.</p>
+<p class="code">
+int httpError(<a href="#http_t">http_t</a> *http);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Error code (errno) value</p>
+<h3 class="function"><a id="httpFieldValue">httpFieldValue</a></h3>
+ <p class="description">Return the HTTP field enumeration value for a field
+name.</p>
+<p class="code">
+<a href="#http_field_t">http_field_t</a> httpFieldValue(const char *name);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>name</th>
+ <td class="description">String name</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Field index</p>
+<h3 class="function"><a id="httpFlush">httpFlush</a></h3>
+ <p class="description">Flush data read from a HTTP connection.</p>
+<p class="code">
+void httpFlush(<a href="#http_t">http_t</a> *http);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+</tbody></table>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="httpFlushWrite">httpFlushWrite</a></h3>
+ <p class="description">Flush data written to a HTTP connection.</p>
+<p class="code">
+int httpFlushWrite(<a href="#http_t">http_t</a> *http);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Bytes written or -1 on error</p>
+<h3 class="function"><a id="httpFreeCredentials">httpFreeCredentials</a></h3>
+ <p class="description">Free an array of credentials.</p>
+<p class="code">
+void httpFreeCredentials(cups_array_t *credentials);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>credentials</th>
+ <td class="description">Array of credentials</td></tr>
+</tbody></table>
+<h3 class="function"><a id="httpGet">httpGet</a></h3>
+ <p class="description">Send a GET request to the server.</p>
+<p class="code">
+int httpGet(<a href="#http_t">http_t</a> *http, const char *uri);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+<tr><th>uri</th>
+ <td class="description">URI to get</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Status of call (0 = success)</p>
+<h3 class="function"><span class="info">&#160;CUPS 2.0/OS 10.10&#160;</span><a id="httpGetActivity">httpGetActivity</a></h3>
+ <p class="description">Get the most recent activity for a connection.</p>
+<p class="code">
+time_t httpGetActivity(<a href="#http_t">http_t</a> *http);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Time of last read or write</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The return value is the time in seconds of the last read or write.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 2.0/OS 10.10&#160;</span><a id="httpGetAddress">httpGetAddress</a></h3>
+ <p class="description">Get the address of the connected peer of a connection.</p>
+<p class="code">
+<a href="#http_addr_t">http_addr_t</a> *httpGetAddress(<a href="#http_t">http_t</a> *http);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Connected address or <code>NULL</code></p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">For connections created with <a href="#httpConnect2"><code>httpConnect2</code></a>, the address is for the
+server. For connections created with <a href="#httpAccept"><code>httpAccept</code></a>, the address is for
+the client.<br>
+<br>
+Returns <code>NULL</code> if the socket is currently unconnected.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.3/macOS 10.5&#160;</span><a id="httpGetAuthString">httpGetAuthString</a></h3>
+ <p class="description">Get the current authorization string.</p>
+<p class="code">
+char *httpGetAuthString(<a href="#http_t">http_t</a> *http);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Authorization string</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The authorization string is set by <a href="#cupsDoAuthentication"><code>cupsDoAuthentication</code></a> and
+<a href="#httpSetAuthString"><code>httpSetAuthString</code></a>. Use <a href="#httpGetAuthString"><code>httpGetAuthString</code></a> to retrieve the
+string to use with <a href="#httpSetField"><code>httpSetField</code></a> for the
+<code>HTTP_FIELD_AUTHORIZATION</code> value.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="httpGetBlocking">httpGetBlocking</a></h3>
+ <p class="description">Get the blocking/non-block state of a connection.</p>
+<p class="code">
+int httpGetBlocking(<a href="#http_t">http_t</a> *http);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 if blocking, 0 if non-blocking</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="httpGetContentEncoding">httpGetContentEncoding</a></h3>
+ <p class="description">Get a common content encoding, if any, between
+the client and server.</p>
+<p class="code">
+const char *httpGetContentEncoding(<a href="#http_t">http_t</a> *http);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Content-Coding value or
+<code>NULL</code> for the identity
+coding.</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">This function uses the value of the Accepts-Encoding HTTP header and must be
+called after receiving a response from the server or a request from the
+client. The value returned can be use in subsequent requests (for clients)
+or in the response (for servers) in order to compress the content stream.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span><a id="httpGetCookie">httpGetCookie</a></h3>
+ <p class="description">Get any cookie data from the response.</p>
+<p class="code">
+const char *httpGetCookie(<a href="#http_t">http_t</a> *http);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Cookie data or <code>NULL</code></p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="httpGetDateString2">httpGetDateString2</a></h3>
+ <p class="description">Get a formatted date/time string from a time value.</p>
+<p class="code">
+const char *httpGetDateString2(time_t t, char *s, int slen);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>t</th>
+ <td class="description">Time in seconds</td></tr>
+<tr><th>s</th>
+ <td class="description">String buffer</td></tr>
+<tr><th>slen</th>
+ <td class="description">Size of string buffer</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Date/time string</p>
+<h3 class="function"><a id="httpGetDateTime">httpGetDateTime</a></h3>
+ <p class="description">Get a time value from a formatted date/time string.</p>
+<p class="code">
+time_t httpGetDateTime(const char *s);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>s</th>
+ <td class="description">Date/time string</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Time in seconds</p>
+<h3 class="function"><span class="info">&#160;CUPS 2.0/OS 10.10&#160;</span><a id="httpGetEncryption">httpGetEncryption</a></h3>
+ <p class="description">Get the current encryption mode of a connection.</p>
+<p class="code">
+<a href="#http_encryption_t">http_encryption_t</a> httpGetEncryption(<a href="#http_t">http_t</a> *http);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Current encryption mode</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">This function returns the encryption mode for the connection. Use the
+<a href="#httpIsEncrypted"><code>httpIsEncrypted</code></a> function to determine whether a TLS session has
+been established.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="httpGetExpect">httpGetExpect</a></h3>
+ <p class="description">Get the value of the Expect header, if any.</p>
+<p class="code">
+http_status_t httpGetExpect(<a href="#http_t">http_t</a> *http);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Expect: status, if any</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Returns <code>HTTP_STATUS_NONE</code> if there is no Expect header, otherwise
+returns the expected HTTP status code, typically <code>HTTP_STATUS_CONTINUE</code>.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="httpGetFd">httpGetFd</a></h3>
+ <p class="description">Get the file descriptor associated with a connection.</p>
+<p class="code">
+int httpGetFd(<a href="#http_t">http_t</a> *http);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">File descriptor or -1 if none</p>
+<h3 class="function"><a id="httpGetField">httpGetField</a></h3>
+ <p class="description">Get a field value from a request/response.</p>
+<p class="code">
+const char *httpGetField(<a href="#http_t">http_t</a> *http, <a href="#http_field_t">http_field_t</a> field);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+<tr><th>field</th>
+ <td class="description">Field to get</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Field value</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="httpGetHostname">httpGetHostname</a></h3>
+ <p class="description">Get the FQDN for the connection or local system.</p>
+<p class="code">
+const char *httpGetHostname(<a href="#http_t">http_t</a> *http, char *s, int slen);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection or NULL</td></tr>
+<tr><th>s</th>
+ <td class="description">String buffer for name</td></tr>
+<tr><th>slen</th>
+ <td class="description">Size of buffer</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">FQDN for connection or system</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">When &quot;http&quot; points to a connected socket, return the hostname or
+address that was used in the call to httpConnect() or httpConnectEncrypt(),
+or the address of the client for the connection from httpAcceptConnection().
+Otherwise, return the FQDN for the local system using both gethostname()
+and gethostbyname() to get the local hostname with domain.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 2.0/OS 10.10&#160;</span><a id="httpGetKeepAlive">httpGetKeepAlive</a></h3>
+ <p class="description">Get the current Keep-Alive state of the connection.</p>
+<p class="code">
+<a href="#http_keepalive_t">http_keepalive_t</a> httpGetKeepAlive(<a href="#http_t">http_t</a> *http);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Keep-Alive state</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="httpGetLength2">httpGetLength2</a></h3>
+ <p class="description">Get the amount of data remaining from the
+content-length or transfer-encoding fields.</p>
+<p class="code">
+off_t httpGetLength2(<a href="#http_t">http_t</a> *http);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Content length</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">This function returns the complete content length, even for
+content larger than 2^31 - 1.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 2.0/OS 10.10&#160;</span><a id="httpGetPending">httpGetPending</a></h3>
+ <p class="description">Get the number of bytes that are buffered for writing.</p>
+<p class="code">
+size_t httpGetPending(<a href="#http_t">http_t</a> *http);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Number of bytes buffered</p>
+<h3 class="function"><span class="info">&#160;CUPS 2.0/OS 10.10&#160;</span><a id="httpGetReady">httpGetReady</a></h3>
+ <p class="description">Get the number of bytes that can be read without blocking.</p>
+<p class="code">
+size_t httpGetReady(<a href="#http_t">http_t</a> *http);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Number of bytes available</p>
+<h3 class="function"><span class="info">&#160;CUPS 2.0/OS 10.10&#160;</span><a id="httpGetRemaining">httpGetRemaining</a></h3>
+ <p class="description">Get the number of remaining bytes in the message
+body or current chunk.</p>
+<p class="code">
+size_t httpGetRemaining(<a href="#http_t">http_t</a> *http);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Remaining bytes</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <a href="#httpIsChunked"><code>httpIsChunked</code></a> function can be used to determine whether the
+message body is chunked or fixed-length.
+
+</p>
+<h3 class="function"><a id="httpGetState">httpGetState</a></h3>
+ <p class="description">Get the current state of the HTTP request.</p>
+<p class="code">
+<a href="#http_state_t">http_state_t</a> httpGetState(<a href="#http_t">http_t</a> *http);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">HTTP state</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="httpGetStatus">httpGetStatus</a></h3>
+ <p class="description">Get the status of the last HTTP request.</p>
+<p class="code">
+http_status_t httpGetStatus(<a href="#http_t">http_t</a> *http);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">HTTP status</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="httpGetSubField2">httpGetSubField2</a></h3>
+ <p class="description">Get a sub-field value.</p>
+<p class="code">
+char *httpGetSubField2(<a href="#http_t">http_t</a> *http, <a href="#http_field_t">http_field_t</a> field, const char *name, char *value, int valuelen);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+<tr><th>field</th>
+ <td class="description">Field index</td></tr>
+<tr><th>name</th>
+ <td class="description">Name of sub-field</td></tr>
+<tr><th>value</th>
+ <td class="description">Value string</td></tr>
+<tr><th>valuelen</th>
+ <td class="description">Size of value buffer</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Value or <code>NULL</code></p>
+<h3 class="function"><a id="httpGetVersion">httpGetVersion</a></h3>
+ <p class="description">Get the HTTP version at the other end.</p>
+<p class="code">
+<a href="#http_version_t">http_version_t</a> httpGetVersion(<a href="#http_t">http_t</a> *http);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Version number</p>
+<h3 class="function"><a id="httpGets">httpGets</a></h3>
+ <p class="description">Get a line of text from a HTTP connection.</p>
+<p class="code">
+char *httpGets(char *line, int length, <a href="#http_t">http_t</a> *http);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>line</th>
+ <td class="description">Line to read into</td></tr>
+<tr><th>length</th>
+ <td class="description">Max length of buffer</td></tr>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Line or <code>NULL</code></p>
+<h3 class="function"><a id="httpHead">httpHead</a></h3>
+ <p class="description">Send a HEAD request to the server.</p>
+<p class="code">
+int httpHead(<a href="#http_t">http_t</a> *http, const char *uri);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+<tr><th>uri</th>
+ <td class="description">URI for head</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Status of call (0 = success)</p>
+<h3 class="function"><a id="httpInitialize">httpInitialize</a></h3>
+ <p class="description">Initialize the HTTP interface library and set the
+default HTTP proxy (if any).</p>
+<p class="code">
+void httpInitialize(void);</p>
+<h3 class="function"><span class="info">&#160;CUPS 2.0/OS 10.10&#160;</span><a id="httpIsChunked">httpIsChunked</a></h3>
+ <p class="description">Report whether a message body is chunked.</p>
+<p class="code">
+int httpIsChunked(<a href="#http_t">http_t</a> *http);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 if chunked, 0 if not</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">This function returns non-zero if the message body is composed of
+variable-length chunks.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 2.0/OS 10.10&#160;</span><a id="httpIsEncrypted">httpIsEncrypted</a></h3>
+ <p class="description">Report whether a connection is encrypted.</p>
+<p class="code">
+int httpIsEncrypted(<a href="#http_t">http_t</a> *http);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 if encrypted, 0 if not</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">This function returns non-zero if the connection is currently encrypted.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 2.0/OS 10.10&#160;</span><a id="httpLoadCredentials">httpLoadCredentials</a></h3>
+ <p class="description">Load X.509 credentials from a keychain file.</p>
+<p class="code">
+int httpLoadCredentials(const char *path, cups_array_t **credentials, const char *common_name);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>path</th>
+ <td class="description">Keychain path or <code>NULL</code> for default</td></tr>
+<tr><th>credentials</th>
+ <td class="description">Credentials</td></tr>
+<tr><th>common_name</th>
+ <td class="description">Common name for credentials</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">0 on success, -1 on error</p>
+<h3 class="function"><a id="httpOptions">httpOptions</a></h3>
+ <p class="description">Send an OPTIONS request to the server.</p>
+<p class="code">
+int httpOptions(<a href="#http_t">http_t</a> *http, const char *uri);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+<tr><th>uri</th>
+ <td class="description">URI for options</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Status of call (0 = success)</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="httpPeek">httpPeek</a></h3>
+ <p class="description">Peek at data from a HTTP connection.</p>
+<p class="code">
+ssize_t httpPeek(<a href="#http_t">http_t</a> *http, char *buffer, size_t length);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+<tr><th>buffer</th>
+ <td class="description">Buffer for data</td></tr>
+<tr><th>length</th>
+ <td class="description">Maximum number of bytes</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Number of bytes copied</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">This function copies available data from the given HTTP connection, reading
+a buffer as needed. The data is still available for reading using
+<a href="#httpRead2"><code>httpRead2</code></a>.<br>
+<br>
+For non-blocking connections the usual timeouts apply.
+
+</p>
+<h3 class="function"><a id="httpPost">httpPost</a></h3>
+ <p class="description">Send a POST request to the server.</p>
+<p class="code">
+int httpPost(<a href="#http_t">http_t</a> *http, const char *uri);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+<tr><th>uri</th>
+ <td class="description">URI for post</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Status of call (0 = success)</p>
+<h3 class="function"><a id="httpPut">httpPut</a></h3>
+ <p class="description">Send a PUT request to the server.</p>
+<p class="code">
+int httpPut(<a href="#http_t">http_t</a> *http, const char *uri);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+<tr><th>uri</th>
+ <td class="description">URI to put</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Status of call (0 = success)</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="httpRead2">httpRead2</a></h3>
+ <p class="description">Read data from a HTTP connection.</p>
+<p class="code">
+ssize_t httpRead2(<a href="#http_t">http_t</a> *http, char *buffer, size_t length);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+<tr><th>buffer</th>
+ <td class="description">Buffer for data</td></tr>
+<tr><th>length</th>
+ <td class="description">Maximum number of bytes</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Number of bytes read</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="httpReadRequest">httpReadRequest</a></h3>
+ <p class="description">Read a HTTP request from a connection.</p>
+<p class="code">
+<a href="#http_state_t">http_state_t</a> httpReadRequest(<a href="#http_t">http_t</a> *http, char *uri, size_t urilen);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+<tr><th>uri</th>
+ <td class="description">URI buffer</td></tr>
+<tr><th>urilen</th>
+ <td class="description">Size of URI buffer</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">New state of connection</p>
+<h3 class="function"><a id="httpReconnect2">httpReconnect2</a></h3>
+ <p class="description">Reconnect to a HTTP server with timeout and optional
+cancel.</p>
+<p class="code">
+int httpReconnect2(<a href="#http_t">http_t</a> *http, int msec, int *cancel);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+<tr><th>msec</th>
+ <td class="description">Timeout in milliseconds</td></tr>
+<tr><th>cancel</th>
+ <td class="description">Pointer to &quot;cancel&quot; variable</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">0 on success, non-zero on failure</p>
+<h3 class="function"><span class="info">&#160;CUPS 2.0/OS 10.10&#160;</span><a id="httpResolveHostname">httpResolveHostname</a></h3>
+ <p class="description">Resolve the hostname of the HTTP connection
+address.</p>
+<p class="code">
+const char *httpResolveHostname(<a href="#http_t">http_t</a> *http, char *buffer, size_t bufsize);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+<tr><th>buffer</th>
+ <td class="description">Hostname buffer</td></tr>
+<tr><th>bufsize</th>
+ <td class="description">Size of buffer</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Resolved hostname or <code>NULL</code></p>
+<h3 class="function"><span class="info">&#160;CUPS 2.0/OS 10.10&#160;</span><a id="httpSaveCredentials">httpSaveCredentials</a></h3>
+ <p class="description">Save X.509 credentials to a keychain file.</p>
+<p class="code">
+int httpSaveCredentials(const char *path, cups_array_t *credentials, const char *common_name);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>path</th>
+ <td class="description">Keychain path or <code>NULL</code> for default</td></tr>
+<tr><th>credentials</th>
+ <td class="description">Credentials</td></tr>
+<tr><th>common_name</th>
+ <td class="description">Common name for credentials</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">-1 on error, 0 on success</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="httpSeparateURI">httpSeparateURI</a></h3>
+ <p class="description">Separate a Universal Resource Identifier into its
+components.</p>
+<p class="code">
+<a href="#http_uri_status_t">http_uri_status_t</a> httpSeparateURI(<a href="#http_uri_coding_t">http_uri_coding_t</a> decoding, const char *uri, char *scheme, int schemelen, char *username, int usernamelen, char *host, int hostlen, int *port, char *resource, int resourcelen);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>decoding</th>
+ <td class="description">Decoding flags</td></tr>
+<tr><th>uri</th>
+ <td class="description">Universal Resource Identifier</td></tr>
+<tr><th>scheme</th>
+ <td class="description">Scheme (http, https, etc.)</td></tr>
+<tr><th>schemelen</th>
+ <td class="description">Size of scheme buffer</td></tr>
+<tr><th>username</th>
+ <td class="description">Username</td></tr>
+<tr><th>usernamelen</th>
+ <td class="description">Size of username buffer</td></tr>
+<tr><th>host</th>
+ <td class="description">Hostname</td></tr>
+<tr><th>hostlen</th>
+ <td class="description">Size of hostname buffer</td></tr>
+<tr><th>port</th>
+ <td class="description">Port number to use</td></tr>
+<tr><th>resource</th>
+ <td class="description">Resource/filename</td></tr>
+<tr><th>resourcelen</th>
+ <td class="description">Size of resource buffer</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Result of separation</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.3/macOS 10.5&#160;</span><a id="httpSetAuthString">httpSetAuthString</a></h3>
+ <p class="description">Set the current authorization string.</p>
+<p class="code">
+void httpSetAuthString(<a href="#http_t">http_t</a> *http, const char *scheme, const char *data);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+<tr><th>scheme</th>
+ <td class="description">Auth scheme (NULL to clear it)</td></tr>
+<tr><th>data</th>
+ <td class="description">Auth data (NULL for none)</td></tr>
+</tbody></table>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">This function just stores a copy of the current authorization string in
+the HTTP connection object. You must still call <a href="#httpSetField"><code>httpSetField</code></a> to set
+<code>HTTP_FIELD_AUTHORIZATION</code> prior to issuing a HTTP request using
+<a href="#httpGet"><code>httpGet</code></a>, <a href="#httpHead"><code>httpHead</code></a>, <a href="#httpOptions"><code>httpOptions</code></a>, <a href="#httpPost"><code>httpPost</code></a>, or
+<a href="#httpPut"><code>httpPut</code></a>.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span><a id="httpSetCookie">httpSetCookie</a></h3>
+ <p class="description">Set the cookie value(s).</p>
+<p class="code">
+void httpSetCookie(<a href="#http_t">http_t</a> *http, const char *cookie);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">Connection</td></tr>
+<tr><th>cookie</th>
+ <td class="description">Cookie string</td></tr>
+</tbody></table>
+<h3 class="function"><span class="info">&#160;CUPS 1.5/macOS 10.7&#160;</span><a id="httpSetCredentials">httpSetCredentials</a></h3>
+ <p class="description">Set the credentials associated with an encrypted
+connection.</p>
+<p class="code">
+int httpSetCredentials(<a href="#http_t">http_t</a> *http, cups_array_t *credentials);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+<tr><th>credentials</th>
+ <td class="description">Array of credentials</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Status of call (0 = success)</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="httpSetDefaultField">httpSetDefaultField</a></h3>
+ <p class="description">Set the default value of an HTTP header.</p>
+<p class="code">
+void httpSetDefaultField(<a href="#http_t">http_t</a> *http, <a href="#http_field_t">http_field_t</a> field, const char *value);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+<tr><th>field</th>
+ <td class="description">Field index</td></tr>
+<tr><th>value</th>
+ <td class="description">Value</td></tr>
+</tbody></table>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Currently only <code>HTTP_FIELD_ACCEPT_ENCODING</code>, <code>HTTP_FIELD_SERVER</code>,
+and <code>HTTP_FIELD_USER_AGENT</code> can be set.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="httpSetExpect">httpSetExpect</a></h3>
+ <p class="description">Set the Expect: header in a request.</p>
+<p class="code">
+void httpSetExpect(<a href="#http_t">http_t</a> *http, http_status_t expect);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+<tr><th>expect</th>
+ <td class="description">HTTP status to expect
+(<code>HTTP_STATUS_CONTINUE</code>)</td></tr>
+</tbody></table>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Currently only <code>HTTP_STATUS_CONTINUE</code> is supported for the &quot;expect&quot;
+argument.
+
+</p>
+<h3 class="function"><a id="httpSetField">httpSetField</a></h3>
+ <p class="description">Set the value of an HTTP header.</p>
+<p class="code">
+void httpSetField(<a href="#http_t">http_t</a> *http, <a href="#http_field_t">http_field_t</a> field, const char *value);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+<tr><th>field</th>
+ <td class="description">Field index</td></tr>
+<tr><th>value</th>
+ <td class="description">Value</td></tr>
+</tbody></table>
+<h3 class="function"><span class="info">&#160;CUPS 2.0/OS 10.10&#160;</span><a id="httpSetKeepAlive">httpSetKeepAlive</a></h3>
+ <p class="description">Set the current Keep-Alive state of a connection.</p>
+<p class="code">
+void httpSetKeepAlive(<a href="#http_t">http_t</a> *http, <a href="#http_keepalive_t">http_keepalive_t</a> keep_alive);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+<tr><th>keep_alive</th>
+ <td class="description">New Keep-Alive value</td></tr>
+</tbody></table>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="httpSetLength">httpSetLength</a></h3>
+ <p class="description">Set the content-length and content-encoding.</p>
+<p class="code">
+void httpSetLength(<a href="#http_t">http_t</a> *http, size_t length);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+<tr><th>length</th>
+ <td class="description">Length (0 for chunked)</td></tr>
+</tbody></table>
+<h3 class="function"><span class="info">&#160;CUPS 1.5/macOS 10.7&#160;</span><a id="httpSetTimeout">httpSetTimeout</a></h3>
+ <p class="description">Set read/write timeouts and an optional callback.</p>
+<p class="code">
+void httpSetTimeout(<a href="#http_t">http_t</a> *http, double timeout, <a href="#http_timeout_cb_t">http_timeout_cb_t</a> cb, void *user_data);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+<tr><th>timeout</th>
+ <td class="description">Number of seconds for timeout,
+must be greater than 0</td></tr>
+<tr><th>cb</th>
+ <td class="description">Callback function or <code>NULL</code></td></tr>
+<tr><th>user_data</th>
+ <td class="description">User data pointer</td></tr>
+</tbody></table>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The optional timeout callback receives both the HTTP connection and a user
+data pointer and must return 1 to continue or 0 to error (time) out.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 2.0/OS 10.10&#160;</span><a id="httpShutdown">httpShutdown</a></h3>
+ <p class="description">Shutdown one side of an HTTP connection.</p>
+<p class="code">
+void httpShutdown(<a href="#http_t">http_t</a> *http);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+</tbody></table>
+<h3 class="function"><span class="info">&#160;CUPS 2.0/OS 10.10&#160;</span><a id="httpStateString">httpStateString</a></h3>
+ <p class="description">Return the string describing a HTTP state value.</p>
+<p class="code">
+const char *httpStateString(<a href="#http_state_t">http_state_t</a> state);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>state</th>
+ <td class="description">HTTP state value</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">State string</p>
+<h3 class="function"><a id="httpStatus">httpStatus</a></h3>
+ <p class="description">Return a short string describing a HTTP status code.</p>
+<p class="code">
+const char *httpStatus(http_status_t status);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>status</th>
+ <td class="description">HTTP status code</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Localized status string</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The returned string is localized to the current POSIX locale and is based
+on the status strings defined in RFC 7231.</p>
+<h3 class="function"><span class="info">&#160;CUPS 2.0/OS 10.10&#160;</span><a id="httpURIStatusString">httpURIStatusString</a></h3>
+ <p class="description">Return a string describing a URI status code.</p>
+<p class="code">
+const char *httpURIStatusString(<a href="#http_uri_status_t">http_uri_status_t</a> status);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>status</th>
+ <td class="description">URI status code</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Localized status string</p>
+<h3 class="function"><a id="httpUpdate">httpUpdate</a></h3>
+ <p class="description">Update the current HTTP state for incoming data.</p>
+<p class="code">
+http_status_t httpUpdate(<a href="#http_t">http_t</a> *http);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">HTTP status</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span><a id="httpWait">httpWait</a></h3>
+ <p class="description">Wait for data available on a connection.</p>
+<p class="code">
+int httpWait(<a href="#http_t">http_t</a> *http, int msec);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+<tr><th>msec</th>
+ <td class="description">Milliseconds to wait</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 if data is available, 0 otherwise</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="httpWrite2">httpWrite2</a></h3>
+ <p class="description">Write data to a HTTP connection.</p>
+<p class="code">
+ssize_t httpWrite2(<a href="#http_t">http_t</a> *http, const char *buffer, size_t length);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+<tr><th>buffer</th>
+ <td class="description">Buffer for data</td></tr>
+<tr><th>length</th>
+ <td class="description">Number of bytes to write</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Number of bytes written</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="httpWriteResponse">httpWriteResponse</a></h3>
+ <p class="description">Write a HTTP response to a client connection.</p>
+<p class="code">
+int httpWriteResponse(<a href="#http_t">http_t</a> *http, http_status_t status);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+<tr><th>status</th>
+ <td class="description">Status code</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">0 on success, -1 on error</p>
+<h3 class="function"><a id="ippAddBoolean">ippAddBoolean</a></h3>
+ <p class="description">Add a boolean attribute to an IPP message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddBoolean(<a href="#ipp_t">ipp_t</a> *ipp, ipp_tag_t group, const char *name, char value);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>group</th>
+ <td class="description">IPP group</td></tr>
+<tr><th>name</th>
+ <td class="description">Name of attribute</td></tr>
+<tr><th>value</th>
+ <td class="description">Value of attribute</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).</p>
+<h3 class="function"><a id="ippAddBooleans">ippAddBooleans</a></h3>
+ <p class="description">Add an array of boolean values.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddBooleans(<a href="#ipp_t">ipp_t</a> *ipp, ipp_tag_t group, const char *name, int num_values, const char *values);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>group</th>
+ <td class="description">IPP group</td></tr>
+<tr><th>name</th>
+ <td class="description">Name of attribute</td></tr>
+<tr><th>num_values</th>
+ <td class="description">Number of values</td></tr>
+<tr><th>values</th>
+ <td class="description">Values</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span><a id="ippAddCollection">ippAddCollection</a></h3>
+ <p class="description">Add a collection value.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddCollection(<a href="#ipp_t">ipp_t</a> *ipp, ipp_tag_t group, const char *name, <a href="#ipp_t">ipp_t</a> *value);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>group</th>
+ <td class="description">IPP group</td></tr>
+<tr><th>name</th>
+ <td class="description">Name of attribute</td></tr>
+<tr><th>value</th>
+ <td class="description">Value</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span><a id="ippAddCollections">ippAddCollections</a></h3>
+ <p class="description">Add an array of collection values.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddCollections(<a href="#ipp_t">ipp_t</a> *ipp, ipp_tag_t group, const char *name, int num_values, const <a href="#ipp_t">ipp_t</a> **values);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>group</th>
+ <td class="description">IPP group</td></tr>
+<tr><th>name</th>
+ <td class="description">Name of attribute</td></tr>
+<tr><th>num_values</th>
+ <td class="description">Number of values</td></tr>
+<tr><th>values</th>
+ <td class="description">Values</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).
+
+</p>
+<h3 class="function"><a id="ippAddDate">ippAddDate</a></h3>
+ <p class="description">Add a dateTime attribute to an IPP message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddDate(<a href="#ipp_t">ipp_t</a> *ipp, ipp_tag_t group, const char *name, const <a href="#ipp_uchar_t">ipp_uchar_t</a> *value);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>group</th>
+ <td class="description">IPP group</td></tr>
+<tr><th>name</th>
+ <td class="description">Name of attribute</td></tr>
+<tr><th>value</th>
+ <td class="description">Value</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).</p>
+<h3 class="function"><a id="ippAddInteger">ippAddInteger</a></h3>
+ <p class="description">Add a integer attribute to an IPP message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddInteger(<a href="#ipp_t">ipp_t</a> *ipp, ipp_tag_t group, ipp_tag_t value_tag, const char *name, int value);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>group</th>
+ <td class="description">IPP group</td></tr>
+<tr><th>value_tag</th>
+ <td class="description">Type of attribute</td></tr>
+<tr><th>name</th>
+ <td class="description">Name of attribute</td></tr>
+<tr><th>value</th>
+ <td class="description">Value of attribute</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).<br>
+<br>
+Supported values include enum (<code>IPP_TAG_ENUM</code>) and integer
+(<code>IPP_TAG_INTEGER</code>).</p>
+<h3 class="function"><a id="ippAddIntegers">ippAddIntegers</a></h3>
+ <p class="description">Add an array of integer values.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddIntegers(<a href="#ipp_t">ipp_t</a> *ipp, ipp_tag_t group, ipp_tag_t value_tag, const char *name, int num_values, const int *values);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>group</th>
+ <td class="description">IPP group</td></tr>
+<tr><th>value_tag</th>
+ <td class="description">Type of attribute</td></tr>
+<tr><th>name</th>
+ <td class="description">Name of attribute</td></tr>
+<tr><th>num_values</th>
+ <td class="description">Number of values</td></tr>
+<tr><th>values</th>
+ <td class="description">Values</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).<br>
+<br>
+Supported values include enum (<code>IPP_TAG_ENUM</code>) and integer
+(<code>IPP_TAG_INTEGER</code>).</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ippAddOctetString">ippAddOctetString</a></h3>
+ <p class="description">Add an octetString value to an IPP message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddOctetString(<a href="#ipp_t">ipp_t</a> *ipp, ipp_tag_t group, const char *name, const void *data, int datalen);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>group</th>
+ <td class="description">IPP group</td></tr>
+<tr><th>name</th>
+ <td class="description">Name of attribute</td></tr>
+<tr><th>data</th>
+ <td class="description">octetString data</td></tr>
+<tr><th>datalen</th>
+ <td class="description">Length of data in bytes</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippAddOutOfBand">ippAddOutOfBand</a></h3>
+ <p class="description">Add an out-of-band value to an IPP message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddOutOfBand(<a href="#ipp_t">ipp_t</a> *ipp, ipp_tag_t group, ipp_tag_t value_tag, const char *name);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>group</th>
+ <td class="description">IPP group</td></tr>
+<tr><th>value_tag</th>
+ <td class="description">Type of attribute</td></tr>
+<tr><th>name</th>
+ <td class="description">Name of attribute</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).<br>
+<br>
+Supported out-of-band values include unsupported-value
+(<code>IPP_TAG_UNSUPPORTED_VALUE</code>), default (<code>IPP_TAG_DEFAULT</code>), unknown
+(<code>IPP_TAG_UNKNOWN</code>), no-value (<code>IPP_TAG_NOVALUE</code>), not-settable
+(<code>IPP_TAG_NOTSETTABLE</code>), delete-attribute (<code>IPP_TAG_DELETEATTR</code>), and
+admin-define (<code>IPP_TAG_ADMINDEFINE</code>).
+
+</p>
+<h3 class="function"><a id="ippAddRange">ippAddRange</a></h3>
+ <p class="description">Add a range of values to an IPP message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddRange(<a href="#ipp_t">ipp_t</a> *ipp, ipp_tag_t group, const char *name, int lower, int upper);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>group</th>
+ <td class="description">IPP group</td></tr>
+<tr><th>name</th>
+ <td class="description">Name of attribute</td></tr>
+<tr><th>lower</th>
+ <td class="description">Lower value</td></tr>
+<tr><th>upper</th>
+ <td class="description">Upper value</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).<br>
+<br>
+The <code>lower</code> parameter must be less than or equal to the <code>upper</code> parameter.</p>
+<h3 class="function"><a id="ippAddRanges">ippAddRanges</a></h3>
+ <p class="description">Add ranges of values to an IPP message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddRanges(<a href="#ipp_t">ipp_t</a> *ipp, ipp_tag_t group, const char *name, int num_values, const int *lower, const int *upper);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>group</th>
+ <td class="description">IPP group</td></tr>
+<tr><th>name</th>
+ <td class="description">Name of attribute</td></tr>
+<tr><th>num_values</th>
+ <td class="description">Number of values</td></tr>
+<tr><th>lower</th>
+ <td class="description">Lower values</td></tr>
+<tr><th>upper</th>
+ <td class="description">Upper values</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).</p>
+<h3 class="function"><a id="ippAddResolution">ippAddResolution</a></h3>
+ <p class="description">Add a resolution value to an IPP message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddResolution(<a href="#ipp_t">ipp_t</a> *ipp, ipp_tag_t group, const char *name, <a href="#ipp_res_t">ipp_res_t</a> units, int xres, int yres);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>group</th>
+ <td class="description">IPP group</td></tr>
+<tr><th>name</th>
+ <td class="description">Name of attribute</td></tr>
+<tr><th>units</th>
+ <td class="description">Units for resolution</td></tr>
+<tr><th>xres</th>
+ <td class="description">X resolution</td></tr>
+<tr><th>yres</th>
+ <td class="description">Y resolution</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).</p>
+<h3 class="function"><a id="ippAddResolutions">ippAddResolutions</a></h3>
+ <p class="description">Add resolution values to an IPP message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddResolutions(<a href="#ipp_t">ipp_t</a> *ipp, ipp_tag_t group, const char *name, int num_values, <a href="#ipp_res_t">ipp_res_t</a> units, const int *xres, const int *yres);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>group</th>
+ <td class="description">IPP group</td></tr>
+<tr><th>name</th>
+ <td class="description">Name of attribute</td></tr>
+<tr><th>num_values</th>
+ <td class="description">Number of values</td></tr>
+<tr><th>units</th>
+ <td class="description">Units for resolution</td></tr>
+<tr><th>xres</th>
+ <td class="description">X resolutions</td></tr>
+<tr><th>yres</th>
+ <td class="description">Y resolutions</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).</p>
+<h3 class="function"><a id="ippAddSeparator">ippAddSeparator</a></h3>
+ <p class="description">Add a group separator to an IPP message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddSeparator(<a href="#ipp_t">ipp_t</a> *ipp);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.</p>
+<h3 class="function"><a id="ippAddString">ippAddString</a></h3>
+ <p class="description">Add a language-encoded string to an IPP message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddString(<a href="#ipp_t">ipp_t</a> *ipp, ipp_tag_t group, ipp_tag_t value_tag, const char *name, const char *language, const char *value);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>group</th>
+ <td class="description">IPP group</td></tr>
+<tr><th>value_tag</th>
+ <td class="description">Type of attribute</td></tr>
+<tr><th>name</th>
+ <td class="description">Name of attribute</td></tr>
+<tr><th>language</th>
+ <td class="description">Language code</td></tr>
+<tr><th>value</th>
+ <td class="description">Value</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).<br>
+<br>
+Supported string values include charset (<code>IPP_TAG_CHARSET</code>), keyword
+(<code>IPP_TAG_KEYWORD</code>), language (<code>IPP_TAG_LANGUAGE</code>), mimeMediaType
+(<code>IPP_TAG_MIMETYPE</code>), name (<code>IPP_TAG_NAME</code>), nameWithLanguage
+(<code>IPP_TAG_NAMELANG), text (</code>code IPP_TAG_TEXT@), textWithLanguage
+(<code>IPP_TAG_TEXTLANG</code>), uri (<code>IPP_TAG_URI</code>), and uriScheme
+(<code>IPP_TAG_URISCHEME</code>).<br>
+<br>
+The <code>language</code> parameter must be non-<code>NULL</code> for nameWithLanguage and
+textWithLanguage string values and must be <code>NULL</code> for all other string values.</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="ippAddStringf">ippAddStringf</a></h3>
+ <p class="description">Add a formatted string to an IPP message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddStringf(<a href="#ipp_t">ipp_t</a> *ipp, ipp_tag_t group, ipp_tag_t value_tag, const char *name, const char *language, const char *format, ...);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>group</th>
+ <td class="description">IPP group</td></tr>
+<tr><th>value_tag</th>
+ <td class="description">Type of attribute</td></tr>
+<tr><th>name</th>
+ <td class="description">Name of attribute</td></tr>
+<tr><th>language</th>
+ <td class="description">Language code (<code>NULL</code> for default)</td></tr>
+<tr><th>format</th>
+ <td class="description">Printf-style format string</td></tr>
+<tr><th>...</th>
+ <td class="description">Additional arguments as needed</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document
+(<code>IPP_TAG_DOCUMENT</code>), event notification
+(<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation (<code>IPP_TAG_OPERATION</code>),
+printer (<code>IPP_TAG_PRINTER</code>), subscription (<code>IPP_TAG_SUBSCRIPTION</code>),
+or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).<br>
+<br>
+Supported string values include charset (<code>IPP_TAG_CHARSET</code>), keyword
+(<code>IPP_TAG_KEYWORD</code>), language (<code>IPP_TAG_LANGUAGE</code>), mimeMediaType
+(<code>IPP_TAG_MIMETYPE</code>), name (<code>IPP_TAG_NAME</code>), nameWithLanguage
+(<code>IPP_TAG_NAMELANG), text (</code>code IPP_TAG_TEXT@), textWithLanguage
+(<code>IPP_TAG_TEXTLANG</code>), uri (<code>IPP_TAG_URI</code>), and uriScheme
+(<code>IPP_TAG_URISCHEME</code>).<br>
+<br>
+The <code>language</code> parameter must be non-<code>NULL</code> for nameWithLanguage
+and textWithLanguage string values and must be <code>NULL</code> for all other
+string values.<br>
+<br>
+The <code>format</code> parameter uses formatting characters compatible with the
+printf family of standard functions. Additional arguments follow it as
+needed. The formatted string is truncated as needed to the maximum length of
+the corresponding value type.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="ippAddStringfv">ippAddStringfv</a></h3>
+ <p class="description">Add a formatted string to an IPP message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddStringfv(<a href="#ipp_t">ipp_t</a> *ipp, ipp_tag_t group, ipp_tag_t value_tag, const char *name, const char *language, const char *format, va_list ap);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>group</th>
+ <td class="description">IPP group</td></tr>
+<tr><th>value_tag</th>
+ <td class="description">Type of attribute</td></tr>
+<tr><th>name</th>
+ <td class="description">Name of attribute</td></tr>
+<tr><th>language</th>
+ <td class="description">Language code (<code>NULL</code> for default)</td></tr>
+<tr><th>format</th>
+ <td class="description">Printf-style format string</td></tr>
+<tr><th>ap</th>
+ <td class="description">Additional arguments</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document
+(<code>IPP_TAG_DOCUMENT</code>), event notification
+(<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation (<code>IPP_TAG_OPERATION</code>),
+printer (<code>IPP_TAG_PRINTER</code>), subscription (<code>IPP_TAG_SUBSCRIPTION</code>),
+or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).<br>
+<br>
+Supported string values include charset (<code>IPP_TAG_CHARSET</code>), keyword
+(<code>IPP_TAG_KEYWORD</code>), language (<code>IPP_TAG_LANGUAGE</code>), mimeMediaType
+(<code>IPP_TAG_MIMETYPE</code>), name (<code>IPP_TAG_NAME</code>), nameWithLanguage
+(<code>IPP_TAG_NAMELANG), text (</code>code IPP_TAG_TEXT@), textWithLanguage
+(<code>IPP_TAG_TEXTLANG</code>), uri (<code>IPP_TAG_URI</code>), and uriScheme
+(<code>IPP_TAG_URISCHEME</code>).<br>
+<br>
+The <code>language</code> parameter must be non-<code>NULL</code> for nameWithLanguage
+and textWithLanguage string values and must be <code>NULL</code> for all other
+string values.<br>
+<br>
+The <code>format</code> parameter uses formatting characters compatible with the
+printf family of standard functions. Additional arguments are passed in the
+stdarg pointer <code>ap</code>. The formatted string is truncated as needed to the
+maximum length of the corresponding value type.
+
+</p>
+<h3 class="function"><a id="ippAddStrings">ippAddStrings</a></h3>
+ <p class="description">Add language-encoded strings to an IPP message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippAddStrings(<a href="#ipp_t">ipp_t</a> *ipp, ipp_tag_t group, ipp_tag_t value_tag, const char *name, int num_values, const char *language, const char *const *values);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>group</th>
+ <td class="description">IPP group</td></tr>
+<tr><th>value_tag</th>
+ <td class="description">Type of attribute</td></tr>
+<tr><th>name</th>
+ <td class="description">Name of attribute</td></tr>
+<tr><th>num_values</th>
+ <td class="description">Number of values</td></tr>
+<tr><th>language</th>
+ <td class="description">Language code (<code>NULL</code> for default)</td></tr>
+<tr><th>values</th>
+ <td class="description">Values</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).<br>
+<br>
+Supported string values include charset (<code>IPP_TAG_CHARSET</code>), keyword
+(<code>IPP_TAG_KEYWORD</code>), language (<code>IPP_TAG_LANGUAGE</code>), mimeMediaType
+(<code>IPP_TAG_MIMETYPE</code>), name (<code>IPP_TAG_NAME</code>), nameWithLanguage
+(<code>IPP_TAG_NAMELANG), text (</code>code IPP_TAG_TEXT@), textWithLanguage
+(<code>IPP_TAG_TEXTLANG</code>), uri (<code>IPP_TAG_URI</code>), and uriScheme
+(<code>IPP_TAG_URISCHEME</code>).<br>
+<br>
+The <code>language</code> parameter must be non-<code>NULL</code> for nameWithLanguage and
+textWithLanguage string values and must be <code>NULL</code> for all other string values.</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippAttributeString">ippAttributeString</a></h3>
+ <p class="description">Convert the attribute's value to a string.</p>
+<p class="code">
+size_t ippAttributeString(<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr, char *buffer, size_t bufsize);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>attr</th>
+ <td class="description">Attribute</td></tr>
+<tr><th>buffer</th>
+ <td class="description">String buffer or NULL</td></tr>
+<tr><th>bufsize</th>
+ <td class="description">Size of string buffer</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Number of bytes less nul</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Returns the number of bytes that would be written, not including the
+trailing nul. The buffer pointer can be NULL to get the required length,
+just like (v)snprintf.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="ippContainsInteger">ippContainsInteger</a></h3>
+ <p class="description">Determine whether an attribute contains the
+specified value or is within the list of ranges.</p>
+<p class="code">
+int ippContainsInteger(<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr, int value);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>attr</th>
+ <td class="description">Attribute</td></tr>
+<tr><th>value</th>
+ <td class="description">Integer/enum value</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 on a match, 0 on no match</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Returns non-zero when the attribute contains either a matching integer or
+enum value, or the value falls within one of the rangeOfInteger values for
+the attribute.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="ippContainsString">ippContainsString</a></h3>
+ <p class="description">Determine whether an attribute contains the
+specified string value.</p>
+<p class="code">
+int ippContainsString(<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr, const char *value);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>attr</th>
+ <td class="description">Attribute</td></tr>
+<tr><th>value</th>
+ <td class="description">String value</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 on a match, 0 on no match</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Returns non-zero when the attribute contains a matching charset, keyword,
+naturalLanguage, mimeMediaType, name, text, uri, or uriScheme value.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippCopyAttribute">ippCopyAttribute</a></h3>
+ <p class="description">Copy an attribute.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippCopyAttribute(<a href="#ipp_t">ipp_t</a> *dst, <a href="#ipp_attribute_t">ipp_attribute_t</a> *srcattr, int quickcopy);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>dst</th>
+ <td class="description">Destination IPP message</td></tr>
+<tr><th>srcattr</th>
+ <td class="description">Attribute to copy</td></tr>
+<tr><th>quickcopy</th>
+ <td class="description">1 for a referenced copy, 0 for normal</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">New attribute</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The specified attribute, <code>attr</code>, is copied to the destination IPP message.
+When <code>quickcopy</code> is non-zero, a &quot;shallow&quot; reference copy of the attribute is
+created - this should only be done as long as the original source IPP message will
+not be freed for the life of the destination.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippCopyAttributes">ippCopyAttributes</a></h3>
+ <p class="description">Copy attributes from one IPP message to another.</p>
+<p class="code">
+int ippCopyAttributes(<a href="#ipp_t">ipp_t</a> *dst, <a href="#ipp_t">ipp_t</a> *src, int quickcopy, <a href="#ipp_copycb_t">ipp_copycb_t</a> cb, void *context);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>dst</th>
+ <td class="description">Destination IPP message</td></tr>
+<tr><th>src</th>
+ <td class="description">Source IPP message</td></tr>
+<tr><th>quickcopy</th>
+ <td class="description">1 for a referenced copy, 0 for normal</td></tr>
+<tr><th>cb</th>
+ <td class="description">Copy callback or <code>NULL</code> for none</td></tr>
+<tr><th>context</th>
+ <td class="description">Context pointer</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 on success, 0 on error</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Zero or more attributes are copied from the source IPP message, <code>src</code>, to the
+destination IPP message, <code>dst</code>. When <code>quickcopy</code> is non-zero, a &quot;shallow&quot;
+reference copy of the attribute is created - this should only be done as long as the
+original source IPP message will not be freed for the life of the destination.<br>
+<br>
+The <code>cb</code> and <code>context</code> parameters provide a generic way to &quot;filter&quot; the
+attributes that are copied - the function must return 1 to copy the attribute or
+0 to skip it. The function may also choose to do a partial copy of the source attribute
+itself.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="ippCreateRequestedArray">ippCreateRequestedArray</a></h3>
+ <p class="description">Create a CUPS array of attribute names from the
+given requested-attributes attribute.</p>
+<p class="code">
+cups_array_t *ippCreateRequestedArray(<a href="#ipp_t">ipp_t</a> *request);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>request</th>
+ <td class="description">IPP request</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">CUPS array or <code>NULL</code> if all</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">This function creates a (sorted) CUPS array of attribute names matching the
+list of &quot;requested-attribute&quot; values supplied in an IPP request. All IANA-
+registered values are supported in addition to the CUPS IPP extension
+attributes.<br>
+<br>
+The <code>request</code> parameter specifies the request message that was read from
+the client.
+
+<code>NULL</code> is returned if all attributes should be returned. Otherwise, the
+result is a sorted array of attribute names, where <code>cupsArrayFind(array,
+"attribute-name")</code> will return a non-NULL pointer. The array must be freed
+using the <code>cupsArrayDelete</code> function.
+
+</p>
+<h3 class="function"><a id="ippDateToTime">ippDateToTime</a></h3>
+ <p class="description">Convert from RFC 2579 Date/Time format to time in
+seconds.</p>
+<p class="code">
+time_t ippDateToTime(const <a href="#ipp_uchar_t">ipp_uchar_t</a> *date);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>date</th>
+ <td class="description">RFC 2579 date info</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">UNIX time value</p>
+<h3 class="function"><a id="ippDelete">ippDelete</a></h3>
+ <p class="description">Delete an IPP message.</p>
+<p class="code">
+void ippDelete(<a href="#ipp_t">ipp_t</a> *ipp);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+</tbody></table>
+<h3 class="function"><span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span><a id="ippDeleteAttribute">ippDeleteAttribute</a></h3>
+ <p class="description">Delete a single attribute in an IPP message.</p>
+<p class="code">
+void ippDeleteAttribute(<a href="#ipp_t">ipp_t</a> *ipp, <a href="#ipp_attribute_t">ipp_attribute_t</a> *attr);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>attr</th>
+ <td class="description">Attribute to delete</td></tr>
+</tbody></table>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippDeleteValues">ippDeleteValues</a></h3>
+ <p class="description">Delete values in an attribute.</p>
+<p class="code">
+int ippDeleteValues(<a href="#ipp_t">ipp_t</a> *ipp, <a href="#ipp_attribute_t">ipp_attribute_t</a> **attr, int element, int count);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>attr</th>
+ <td class="description">Attribute</td></tr>
+<tr><th>element</th>
+ <td class="description">Index of first value to delete (0-based)</td></tr>
+<tr><th>count</th>
+ <td class="description">Number of values to delete</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>element</code> parameter specifies the first value to delete, starting at
+0. It must be less than the number of values returned by <a href="#ippGetCount"><code>ippGetCount</code></a>.<br>
+<br>
+The <code>attr</code> parameter may be modified as a result of setting the value.<br>
+<br>
+Deleting all values in an attribute deletes the attribute.
+
+</p>
+<h3 class="function"><a id="ippEnumString">ippEnumString</a></h3>
+ <p class="description">Return a string corresponding to the enum value.</p>
+<p class="code">
+const char *ippEnumString(const char *attrname, int enumvalue);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>attrname</th>
+ <td class="description">Attribute name</td></tr>
+<tr><th>enumvalue</th>
+ <td class="description">Enum value</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Enum string</p>
+<h3 class="function"><a id="ippEnumValue">ippEnumValue</a></h3>
+ <p class="description">Return the value associated with a given enum string.</p>
+<p class="code">
+int ippEnumValue(const char *attrname, const char *enumstring);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>attrname</th>
+ <td class="description">Attribute name</td></tr>
+<tr><th>enumstring</th>
+ <td class="description">Enum string</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Enum value or -1 if unknown</p>
+<h3 class="function"><a id="ippErrorString">ippErrorString</a></h3>
+ <p class="description">Return a name for the given status code.</p>
+<p class="code">
+const char *ippErrorString(ipp_status_t error);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>error</th>
+ <td class="description">Error status</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Text string</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ippErrorValue">ippErrorValue</a></h3>
+ <p class="description">Return a status code for the given name.</p>
+<p class="code">
+ipp_status_t ippErrorValue(const char *name);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>name</th>
+ <td class="description">Name</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">IPP status code</p>
+<h3 class="function"><a id="ippFindAttribute">ippFindAttribute</a></h3>
+ <p class="description">Find a named attribute in a request.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippFindAttribute(<a href="#ipp_t">ipp_t</a> *ipp, const char *name, ipp_tag_t type);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>name</th>
+ <td class="description">Name of attribute</td></tr>
+<tr><th>type</th>
+ <td class="description">Type of attribute</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Matching attribute</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Starting with CUPS 2.0, the attribute name can contain a hierarchical list
+of attribute and member names separated by slashes, for example
+&quot;media-col/media-size&quot;.</p>
+<h3 class="function"><a id="ippFindNextAttribute">ippFindNextAttribute</a></h3>
+ <p class="description">Find the next named attribute in a request.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippFindNextAttribute(<a href="#ipp_t">ipp_t</a> *ipp, const char *name, ipp_tag_t type);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>name</th>
+ <td class="description">Name of attribute</td></tr>
+<tr><th>type</th>
+ <td class="description">Type of attribute</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Matching attribute</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">Starting with CUPS 2.0, the attribute name can contain a hierarchical list
+of attribute and member names separated by slashes, for example
+&quot;media-col/media-size&quot;.</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippFirstAttribute">ippFirstAttribute</a></h3>
+ <p class="description">Return the first attribute in the message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippFirstAttribute(<a href="#ipp_t">ipp_t</a> *ipp);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">First attribute or <code>NULL</code> if none</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippGetBoolean">ippGetBoolean</a></h3>
+ <p class="description">Get a boolean value for an attribute.</p>
+<p class="code">
+int ippGetBoolean(<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr, int element);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>attr</th>
+ <td class="description">IPP attribute</td></tr>
+<tr><th>element</th>
+ <td class="description">Value number (0-based)</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Boolean value or 0 on error</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>element</code> parameter specifies which value to get from 0 to
+<code>ippGetCount(attr)</code> - 1.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippGetCollection">ippGetCollection</a></h3>
+ <p class="description">Get a collection value for an attribute.</p>
+<p class="code">
+<a href="#ipp_t">ipp_t</a> *ippGetCollection(<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr, int element);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>attr</th>
+ <td class="description">IPP attribute</td></tr>
+<tr><th>element</th>
+ <td class="description">Value number (0-based)</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Collection value or <code>NULL</code> on error</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>element</code> parameter specifies which value to get from 0 to
+<code>ippGetCount(attr)</code> - 1.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippGetCount">ippGetCount</a></h3>
+ <p class="description">Get the number of values in an attribute.</p>
+<p class="code">
+int ippGetCount(<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>attr</th>
+ <td class="description">IPP attribute</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Number of values or 0 on error</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippGetDate">ippGetDate</a></h3>
+ <p class="description">Get a dateTime value for an attribute.</p>
+<p class="code">
+const <a href="#ipp_uchar_t">ipp_uchar_t</a> *ippGetDate(<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr, int element);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>attr</th>
+ <td class="description">IPP attribute</td></tr>
+<tr><th>element</th>
+ <td class="description">Value number (0-based)</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">dateTime value or <code>NULL</code></p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>element</code> parameter specifies which value to get from 0 to
+<code>ippGetCount(attr)</code> - 1.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippGetGroupTag">ippGetGroupTag</a></h3>
+ <p class="description">Get the group associated with an attribute.</p>
+<p class="code">
+ipp_tag_t ippGetGroupTag(<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>attr</th>
+ <td class="description">IPP attribute</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Group tag or <code>IPP_TAG_ZERO</code> on error</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippGetInteger">ippGetInteger</a></h3>
+ <p class="description">Get the integer/enum value for an attribute.</p>
+<p class="code">
+int ippGetInteger(<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr, int element);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>attr</th>
+ <td class="description">IPP attribute</td></tr>
+<tr><th>element</th>
+ <td class="description">Value number (0-based)</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Value or 0 on error</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>element</code> parameter specifies which value to get from 0 to
+<code>ippGetCount(attr)</code> - 1.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippGetName">ippGetName</a></h3>
+ <p class="description">Get the attribute name.</p>
+<p class="code">
+const char *ippGetName(<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>attr</th>
+ <td class="description">IPP attribute</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Attribute name or <code>NULL</code> for separators</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="ippGetOctetString">ippGetOctetString</a></h3>
+ <p class="description">Get an octetString value from an IPP attribute.</p>
+<p class="code">
+void *ippGetOctetString(<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr, int element, int *datalen);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>attr</th>
+ <td class="description">IPP attribute</td></tr>
+<tr><th>element</th>
+ <td class="description">Value number (0-based)</td></tr>
+<tr><th>datalen</th>
+ <td class="description">Length of octetString data</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Pointer to octetString data</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>element</code> parameter specifies which value to get from 0 to
+<code>ippGetCount(attr)</code> - 1.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippGetOperation">ippGetOperation</a></h3>
+ <p class="description">Get the operation ID in an IPP message.</p>
+<p class="code">
+ipp_op_t ippGetOperation(<a href="#ipp_t">ipp_t</a> *ipp);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP request message</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Operation ID or 0 on error</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippGetRange">ippGetRange</a></h3>
+ <p class="description">Get a rangeOfInteger value from an attribute.</p>
+<p class="code">
+int ippGetRange(<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr, int element, int *uppervalue);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>attr</th>
+ <td class="description">IPP attribute</td></tr>
+<tr><th>element</th>
+ <td class="description">Value number (0-based)</td></tr>
+<tr><th>uppervalue</th>
+ <td class="description">Upper value of range</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Lower value of range or 0</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>element</code> parameter specifies which value to get from 0 to
+<code>ippGetCount(attr)</code> - 1.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippGetRequestId">ippGetRequestId</a></h3>
+ <p class="description">Get the request ID from an IPP message.</p>
+<p class="code">
+int ippGetRequestId(<a href="#ipp_t">ipp_t</a> *ipp);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Request ID or 0 on error</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippGetResolution">ippGetResolution</a></h3>
+ <p class="description">Get a resolution value for an attribute.</p>
+<p class="code">
+int ippGetResolution(<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr, int element, int *yres, <a href="#ipp_res_t">ipp_res_t</a> *units);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>attr</th>
+ <td class="description">IPP attribute</td></tr>
+<tr><th>element</th>
+ <td class="description">Value number (0-based)</td></tr>
+<tr><th>yres</th>
+ <td class="description">Vertical/feed resolution</td></tr>
+<tr><th>units</th>
+ <td class="description">Units for resolution</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Horizontal/cross feed resolution or 0</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>element</code> parameter specifies which value to get from 0 to
+<code>ippGetCount(attr)</code> - 1.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippGetState">ippGetState</a></h3>
+ <p class="description">Get the IPP message state.</p>
+<p class="code">
+<a href="#ipp_state_t">ipp_state_t</a> ippGetState(<a href="#ipp_t">ipp_t</a> *ipp);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">IPP message state value</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippGetStatusCode">ippGetStatusCode</a></h3>
+ <p class="description">Get the status code from an IPP response or event message.</p>
+<p class="code">
+ipp_status_t ippGetStatusCode(<a href="#ipp_t">ipp_t</a> *ipp);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP response or event message</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Status code in IPP message</p>
+<h3 class="function"><a id="ippGetString">ippGetString</a></h3>
+ <p class="description"></p>
+<p class="code">
+const char *ippGetString(<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr, int element, const char **language);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>attr</th>
+ <td class="description">IPP attribute</td></tr>
+<tr><th>element</th>
+ <td class="description">Value number (0-based)</td></tr>
+<tr><th>language</th>
+ <td class="description">Language code (<code>NULL</code> for don't care)</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Get the string and optionally the language code for an attribute.</p>
+ <p class="discussion">The <code>element</code> parameter specifies which value to get from 0 to
+<code>ippGetCount(attr)</code> - 1.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippGetValueTag">ippGetValueTag</a></h3>
+ <p class="description">Get the value tag for an attribute.</p>
+<p class="code">
+ipp_tag_t ippGetValueTag(<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>attr</th>
+ <td class="description">IPP attribute</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Value tag or <code>IPP_TAG_ZERO</code> on error</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippGetVersion">ippGetVersion</a></h3>
+ <p class="description">Get the major and minor version number from an IPP message.</p>
+<p class="code">
+int ippGetVersion(<a href="#ipp_t">ipp_t</a> *ipp, int *minor);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>minor</th>
+ <td class="description">Minor version number or <code>NULL</code> for don't care</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Major version number or 0 on error</p>
+<h3 class="function"><a id="ippLength">ippLength</a></h3>
+ <p class="description">Compute the length of an IPP message.</p>
+<p class="code">
+size_t ippLength(<a href="#ipp_t">ipp_t</a> *ipp);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Size of IPP message</p>
+<h3 class="function"><a id="ippNew">ippNew</a></h3>
+ <p class="description">Allocate a new IPP message.</p>
+<p class="code">
+<a href="#ipp_t">ipp_t</a> *ippNew(void);</p>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">New IPP message</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ippNewRequest">ippNewRequest</a></h3>
+ <p class="description">Allocate a new IPP request message.</p>
+<p class="code">
+<a href="#ipp_t">ipp_t</a> *ippNewRequest(ipp_op_t op);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>op</th>
+ <td class="description">Operation code</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">IPP request message</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The new request message is initialized with the &quot;attributes-charset&quot; and
+&quot;attributes-natural-language&quot; attributes added. The
+&quot;attributes-natural-language&quot; value is derived from the current locale.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="ippNewResponse">ippNewResponse</a></h3>
+ <p class="description">Allocate a new IPP response message.</p>
+<p class="code">
+<a href="#ipp_t">ipp_t</a> *ippNewResponse(<a href="#ipp_t">ipp_t</a> *request);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>request</th>
+ <td class="description">IPP request message</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">IPP response message</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The new response message is initialized with the same &quot;version-number&quot;,
+&quot;request-id&quot;, &quot;attributes-charset&quot;, and &quot;attributes-natural-language&quot; as the
+provided request message. If the &quot;attributes-charset&quot; or
+&quot;attributes-natural-language&quot; attributes are missing from the request,
+'utf-8' and a value derived from the current locale are substituted,
+respectively.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippNextAttribute">ippNextAttribute</a></h3>
+ <p class="description">Return the next attribute in the message.</p>
+<p class="code">
+<a href="#ipp_attribute_t">ipp_attribute_t</a> *ippNextAttribute(<a href="#ipp_t">ipp_t</a> *ipp);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Next attribute or <code>NULL</code> if none</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ippOpString">ippOpString</a></h3>
+ <p class="description">Return a name for the given operation id.</p>
+<p class="code">
+const char *ippOpString(ipp_op_t op);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>op</th>
+ <td class="description">Operation ID</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Name</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ippOpValue">ippOpValue</a></h3>
+ <p class="description">Return an operation id for the given name.</p>
+<p class="code">
+ipp_op_t ippOpValue(const char *name);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>name</th>
+ <td class="description">Textual name</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Operation ID</p>
+<h3 class="function"><a id="ippPort">ippPort</a></h3>
+ <p class="description">Return the default IPP port number.</p>
+<p class="code">
+int ippPort(void);</p>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Port number</p>
+<h3 class="function"><a id="ippRead">ippRead</a></h3>
+ <p class="description">Read data for an IPP message from a HTTP connection.</p>
+<p class="code">
+<a href="#ipp_state_t">ipp_state_t</a> ippRead(<a href="#http_t">http_t</a> *http, <a href="#ipp_t">ipp_t</a> *ipp);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+<tr><th>ipp</th>
+ <td class="description">IPP data</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Current state</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span><a id="ippReadFile">ippReadFile</a></h3>
+ <p class="description">Read data for an IPP message from a file.</p>
+<p class="code">
+<a href="#ipp_state_t">ipp_state_t</a> ippReadFile(int fd, <a href="#ipp_t">ipp_t</a> *ipp);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>fd</th>
+ <td class="description">HTTP data</td></tr>
+<tr><th>ipp</th>
+ <td class="description">IPP data</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Current state</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ippReadIO">ippReadIO</a></h3>
+ <p class="description">Read data for an IPP message.</p>
+<p class="code">
+<a href="#ipp_state_t">ipp_state_t</a> ippReadIO(void *src, <a href="#ipp_iocb_t">ipp_iocb_t</a> cb, int blocking, <a href="#ipp_t">ipp_t</a> *parent, <a href="#ipp_t">ipp_t</a> *ipp);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>src</th>
+ <td class="description">Data source</td></tr>
+<tr><th>cb</th>
+ <td class="description">Read callback function</td></tr>
+<tr><th>blocking</th>
+ <td class="description">Use blocking IO?</td></tr>
+<tr><th>parent</th>
+ <td class="description">Parent request, if any</td></tr>
+<tr><th>ipp</th>
+ <td class="description">IPP data</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Current state</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippSetBoolean">ippSetBoolean</a></h3>
+ <p class="description">Set a boolean value in an attribute.</p>
+<p class="code">
+int ippSetBoolean(<a href="#ipp_t">ipp_t</a> *ipp, <a href="#ipp_attribute_t">ipp_attribute_t</a> **attr, int element, int boolvalue);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>attr</th>
+ <td class="description">IPP attribute</td></tr>
+<tr><th>element</th>
+ <td class="description">Value number (0-based)</td></tr>
+<tr><th>boolvalue</th>
+ <td class="description">Boolean value</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>attr</code> parameter may be modified as a result of setting the value.<br>
+<br>
+The <code>element</code> parameter specifies which value to set from 0 to
+<code>ippGetCount(attr)</code>.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippSetCollection">ippSetCollection</a></h3>
+ <p class="description">Set a collection value in an attribute.</p>
+<p class="code">
+int ippSetCollection(<a href="#ipp_t">ipp_t</a> *ipp, <a href="#ipp_attribute_t">ipp_attribute_t</a> **attr, int element, <a href="#ipp_t">ipp_t</a> *colvalue);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>attr</th>
+ <td class="description">IPP attribute</td></tr>
+<tr><th>element</th>
+ <td class="description">Value number (0-based)</td></tr>
+<tr><th>colvalue</th>
+ <td class="description">Collection value</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>attr</code> parameter may be modified as a result of setting the value.<br>
+<br>
+The <code>element</code> parameter specifies which value to set from 0 to
+<code>ippGetCount(attr)</code>.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippSetDate">ippSetDate</a></h3>
+ <p class="description">Set a dateTime value in an attribute.</p>
+<p class="code">
+int ippSetDate(<a href="#ipp_t">ipp_t</a> *ipp, <a href="#ipp_attribute_t">ipp_attribute_t</a> **attr, int element, const <a href="#ipp_uchar_t">ipp_uchar_t</a> *datevalue);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>attr</th>
+ <td class="description">IPP attribute</td></tr>
+<tr><th>element</th>
+ <td class="description">Value number (0-based)</td></tr>
+<tr><th>datevalue</th>
+ <td class="description">dateTime value</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>attr</code> parameter may be modified as a result of setting the value.<br>
+<br>
+The <code>element</code> parameter specifies which value to set from 0 to
+<code>ippGetCount(attr)</code>.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippSetGroupTag">ippSetGroupTag</a></h3>
+ <p class="description">Set the group tag of an attribute.</p>
+<p class="code">
+int ippSetGroupTag(<a href="#ipp_t">ipp_t</a> *ipp, <a href="#ipp_attribute_t">ipp_attribute_t</a> **attr, ipp_tag_t group_tag);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>attr</th>
+ <td class="description">Attribute</td></tr>
+<tr><th>group_tag</th>
+ <td class="description">Group tag</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>attr</code> parameter may be modified as a result of setting the value.<br>
+<br>
+The <code>group</code> parameter specifies the IPP attribute group tag: none
+(<code>IPP_TAG_ZERO</code>, for member attributes), document (<code>IPP_TAG_DOCUMENT</code>),
+event notification (<code>IPP_TAG_EVENT_NOTIFICATION</code>), operation
+(<code>IPP_TAG_OPERATION</code>), printer (<code>IPP_TAG_PRINTER</code>), subscription
+(<code>IPP_TAG_SUBSCRIPTION</code>), or unsupported (<code>IPP_TAG_UNSUPPORTED_GROUP</code>).
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippSetInteger">ippSetInteger</a></h3>
+ <p class="description">Set an integer or enum value in an attribute.</p>
+<p class="code">
+int ippSetInteger(<a href="#ipp_t">ipp_t</a> *ipp, <a href="#ipp_attribute_t">ipp_attribute_t</a> **attr, int element, int intvalue);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>attr</th>
+ <td class="description">IPP attribute</td></tr>
+<tr><th>element</th>
+ <td class="description">Value number (0-based)</td></tr>
+<tr><th>intvalue</th>
+ <td class="description">Integer/enum value</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>attr</code> parameter may be modified as a result of setting the value.<br>
+<br>
+The <code>element</code> parameter specifies which value to set from 0 to
+<code>ippGetCount(attr)</code>.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippSetName">ippSetName</a></h3>
+ <p class="description">Set the name of an attribute.</p>
+<p class="code">
+int ippSetName(<a href="#ipp_t">ipp_t</a> *ipp, <a href="#ipp_attribute_t">ipp_attribute_t</a> **attr, const char *name);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>attr</th>
+ <td class="description">IPP attribute</td></tr>
+<tr><th>name</th>
+ <td class="description">Attribute name</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>attr</code> parameter may be modified as a result of setting the value.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="ippSetOctetString">ippSetOctetString</a></h3>
+ <p class="description">Set an octetString value in an IPP attribute.</p>
+<p class="code">
+int ippSetOctetString(<a href="#ipp_t">ipp_t</a> *ipp, <a href="#ipp_attribute_t">ipp_attribute_t</a> **attr, int element, const void *data, int datalen);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>attr</th>
+ <td class="description">IPP attribute</td></tr>
+<tr><th>element</th>
+ <td class="description">Value number (0-based)</td></tr>
+<tr><th>data</th>
+ <td class="description">Pointer to octetString data</td></tr>
+<tr><th>datalen</th>
+ <td class="description">Length of octetString data</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>attr</code> parameter may be modified as a result of setting the value.<br>
+<br>
+The <code>element</code> parameter specifies which value to set from 0 to
+<code>ippGetCount(attr)</code>.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippSetOperation">ippSetOperation</a></h3>
+ <p class="description">Set the operation ID in an IPP request message.</p>
+<p class="code">
+int ippSetOperation(<a href="#ipp_t">ipp_t</a> *ipp, ipp_op_t op);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP request message</td></tr>
+<tr><th>op</th>
+ <td class="description">Operation ID</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.
+
+</p>
+<h3 class="function"><a id="ippSetPort">ippSetPort</a></h3>
+ <p class="description">Set the default port number.</p>
+<p class="code">
+void ippSetPort(int p);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>p</th>
+ <td class="description">Port number to use</td></tr>
+</tbody></table>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippSetRange">ippSetRange</a></h3>
+ <p class="description">Set a rangeOfInteger value in an attribute.</p>
+<p class="code">
+int ippSetRange(<a href="#ipp_t">ipp_t</a> *ipp, <a href="#ipp_attribute_t">ipp_attribute_t</a> **attr, int element, int lowervalue, int uppervalue);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>attr</th>
+ <td class="description">IPP attribute</td></tr>
+<tr><th>element</th>
+ <td class="description">Value number (0-based)</td></tr>
+<tr><th>lowervalue</th>
+ <td class="description">Lower bound for range</td></tr>
+<tr><th>uppervalue</th>
+ <td class="description">Upper bound for range</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>attr</code> parameter may be modified as a result of setting the value.<br>
+<br>
+The <code>element</code> parameter specifies which value to set from 0 to
+<code>ippGetCount(attr)</code>.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippSetRequestId">ippSetRequestId</a></h3>
+ <p class="description">Set the request ID in an IPP message.</p>
+<p class="code">
+int ippSetRequestId(<a href="#ipp_t">ipp_t</a> *ipp, int request_id);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>request_id</th>
+ <td class="description">Request ID</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>request_id</code> parameter must be greater than 0.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippSetResolution">ippSetResolution</a></h3>
+ <p class="description">Set a resolution value in an attribute.</p>
+<p class="code">
+int ippSetResolution(<a href="#ipp_t">ipp_t</a> *ipp, <a href="#ipp_attribute_t">ipp_attribute_t</a> **attr, int element, <a href="#ipp_res_t">ipp_res_t</a> unitsvalue, int xresvalue, int yresvalue);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>attr</th>
+ <td class="description">IPP attribute</td></tr>
+<tr><th>element</th>
+ <td class="description">Value number (0-based)</td></tr>
+<tr><th>unitsvalue</th>
+ <td class="description">Resolution units</td></tr>
+<tr><th>xresvalue</th>
+ <td class="description">Horizontal/cross feed resolution</td></tr>
+<tr><th>yresvalue</th>
+ <td class="description">Vertical/feed resolution</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>attr</code> parameter may be modified as a result of setting the value.<br>
+<br>
+The <code>element</code> parameter specifies which value to set from 0 to
+<code>ippGetCount(attr)</code>.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippSetState">ippSetState</a></h3>
+ <p class="description">Set the current state of the IPP message.</p>
+<p class="code">
+int ippSetState(<a href="#ipp_t">ipp_t</a> *ipp, <a href="#ipp_state_t">ipp_state_t</a> state);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>state</th>
+ <td class="description">IPP state value</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 on success, 0 on failure</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippSetStatusCode">ippSetStatusCode</a></h3>
+ <p class="description">Set the status code in an IPP response or event message.</p>
+<p class="code">
+int ippSetStatusCode(<a href="#ipp_t">ipp_t</a> *ipp, ipp_status_t status);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP response or event message</td></tr>
+<tr><th>status</th>
+ <td class="description">Status code</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippSetString">ippSetString</a></h3>
+ <p class="description">Set a string value in an attribute.</p>
+<p class="code">
+int ippSetString(<a href="#ipp_t">ipp_t</a> *ipp, <a href="#ipp_attribute_t">ipp_attribute_t</a> **attr, int element, const char *strvalue);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>attr</th>
+ <td class="description">IPP attribute</td></tr>
+<tr><th>element</th>
+ <td class="description">Value number (0-based)</td></tr>
+<tr><th>strvalue</th>
+ <td class="description">String value</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>attr</code> parameter may be modified as a result of setting the value.<br>
+<br>
+The <code>element</code> parameter specifies which value to set from 0 to
+<code>ippGetCount(attr)</code>.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="ippSetStringf">ippSetStringf</a></h3>
+ <p class="description">Set a formatted string value of an attribute.</p>
+<p class="code">
+int ippSetStringf(<a href="#ipp_t">ipp_t</a> *ipp, <a href="#ipp_attribute_t">ipp_attribute_t</a> **attr, int element, const char *format, ...);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>attr</th>
+ <td class="description">IPP attribute</td></tr>
+<tr><th>element</th>
+ <td class="description">Value number (0-based)</td></tr>
+<tr><th>format</th>
+ <td class="description">Printf-style format string</td></tr>
+<tr><th>...</th>
+ <td class="description">Additional arguments as needed</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>attr</code> parameter may be modified as a result of setting the value.<br>
+<br>
+The <code>element</code> parameter specifies which value to set from 0 to
+<code>ippGetCount(attr)</code>.<br>
+<br>
+The <code>format</code> parameter uses formatting characters compatible with the
+printf family of standard functions. Additional arguments follow it as
+needed. The formatted string is truncated as needed to the maximum length of
+the corresponding value type.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="ippSetStringfv">ippSetStringfv</a></h3>
+ <p class="description">Set a formatted string value of an attribute.</p>
+<p class="code">
+int ippSetStringfv(<a href="#ipp_t">ipp_t</a> *ipp, <a href="#ipp_attribute_t">ipp_attribute_t</a> **attr, int element, const char *format, va_list ap);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>attr</th>
+ <td class="description">IPP attribute</td></tr>
+<tr><th>element</th>
+ <td class="description">Value number (0-based)</td></tr>
+<tr><th>format</th>
+ <td class="description">Printf-style format string</td></tr>
+<tr><th>ap</th>
+ <td class="description">Pointer to additional arguments</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>attr</code> parameter may be modified as a result of setting the value.<br>
+<br>
+The <code>element</code> parameter specifies which value to set from 0 to
+<code>ippGetCount(attr)</code>.<br>
+<br>
+The <code>format</code> parameter uses formatting characters compatible with the
+printf family of standard functions. Additional arguments follow it as
+needed. The formatted string is truncated as needed to the maximum length of
+the corresponding value type.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippSetValueTag">ippSetValueTag</a></h3>
+ <p class="description">Set the value tag of an attribute.</p>
+<p class="code">
+int ippSetValueTag(<a href="#ipp_t">ipp_t</a> *ipp, <a href="#ipp_attribute_t">ipp_attribute_t</a> **attr, ipp_tag_t value_tag);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>attr</th>
+ <td class="description">IPP attribute</td></tr>
+<tr><th>value_tag</th>
+ <td class="description">Value tag</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The <code>attr</code> parameter may be modified as a result of setting the value.<br>
+<br>
+Integer (<code>IPP_TAG_INTEGER</code>) values can be promoted to rangeOfInteger
+(<code>IPP_TAG_RANGE</code>) values, the various string tags can be promoted to name
+(<code>IPP_TAG_NAME</code>) or nameWithLanguage (<code>IPP_TAG_NAMELANG</code>) values, text
+(<code>IPP_TAG_TEXT</code>) values can be promoted to textWithLanguage
+(<code>IPP_TAG_TEXTLANG</code>) values, and all values can be demoted to the various
+out-of-band value tags such as no-value (<code>IPP_TAG_NOVALUE</code>). All other changes
+will be rejected.<br>
+<br>
+Promoting a string attribute to nameWithLanguage or textWithLanguage adds the language
+code in the &quot;attributes-natural-language&quot; attribute or, if not present, the language
+code for the current locale.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="ippSetVersion">ippSetVersion</a></h3>
+ <p class="description">Set the version number in an IPP message.</p>
+<p class="code">
+int ippSetVersion(<a href="#ipp_t">ipp_t</a> *ipp, int major, int minor);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+<tr><th>major</th>
+ <td class="description">Major version number (major.minor)</td></tr>
+<tr><th>minor</th>
+ <td class="description">Minor version number (major.minor)</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The <code>ipp</code> parameter refers to an IPP message previously created using
+the <a href="#ippNew"><code>ippNew</code></a>, <a href="#ippNewRequest"><code>ippNewRequest</code></a>, or <a href="#ippNewResponse"><code>ippNewResponse</code></a> functions.<br>
+<br>
+The valid version numbers are currently 1.0, 1.1, 2.0, 2.1, and 2.2.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 2.0/OS 10.10&#160;</span><a id="ippStateString">ippStateString</a></h3>
+ <p class="description">Return the name corresponding to a state value.</p>
+<p class="code">
+const char *ippStateString(<a href="#ipp_state_t">ipp_state_t</a> state);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>state</th>
+ <td class="description">State value</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">State name</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.4/macOS 10.6&#160;</span><a id="ippTagString">ippTagString</a></h3>
+ <p class="description">Return the tag name corresponding to a tag value.</p>
+<p class="code">
+const char *ippTagString(ipp_tag_t tag);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>tag</th>
+ <td class="description">Tag value</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Tag name</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The returned names are defined in RFC 8011 and the IANA IPP Registry.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.4/macOS 10.6&#160;</span><a id="ippTagValue">ippTagValue</a></h3>
+ <p class="description">Return the tag value corresponding to a tag name.</p>
+<p class="code">
+ipp_tag_t ippTagValue(const char *name);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>name</th>
+ <td class="description">Tag name</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Tag value</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">The tag names are defined in RFC 8011 and the IANA IPP Registry.
+
+</p>
+<h3 class="function"><a id="ippTimeToDate">ippTimeToDate</a></h3>
+ <p class="description">Convert from time in seconds to RFC 2579 format.</p>
+<p class="code">
+const <a href="#ipp_uchar_t">ipp_uchar_t</a> *ippTimeToDate(time_t t);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>t</th>
+ <td class="description">Time in seconds</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">RFC-2579 date/time data</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="ippValidateAttribute">ippValidateAttribute</a></h3>
+ <p class="description">Validate the contents of an attribute.</p>
+<p class="code">
+int ippValidateAttribute(<a href="#ipp_attribute_t">ipp_attribute_t</a> *attr);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>attr</th>
+ <td class="description">Attribute</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 if valid, 0 otherwise</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">This function validates the contents of an attribute based on the name and
+value tag. 1 is returned if the attribute is valid, 0 otherwise. On
+failure, <a href="#cupsLastErrorString"><code>cupsLastErrorString</code></a> is set to a human-readable message.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span><a id="ippValidateAttributes">ippValidateAttributes</a></h3>
+ <p class="description">Validate all attributes in an IPP message.</p>
+<p class="code">
+int ippValidateAttributes(<a href="#ipp_t">ipp_t</a> *ipp);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>ipp</th>
+ <td class="description">IPP message</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">1 if valid, 0 otherwise</p>
+<h4 class="discussion">Discussion</h4>
+ <p class="discussion">This function validates the contents of the IPP message, including each
+attribute. Like <a href="#ippValidateAttribute"><code>ippValidateAttribute</code></a>, <a href="#cupsLastErrorString"><code>cupsLastErrorString</code></a> is
+set to a human-readable message on failure.
+
+</p>
+<h3 class="function"><a id="ippWrite">ippWrite</a></h3>
+ <p class="description">Write data for an IPP message to a HTTP connection.</p>
+<p class="code">
+<a href="#ipp_state_t">ipp_state_t</a> ippWrite(<a href="#http_t">http_t</a> *http, <a href="#ipp_t">ipp_t</a> *ipp);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>http</th>
+ <td class="description">HTTP connection</td></tr>
+<tr><th>ipp</th>
+ <td class="description">IPP data</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Current state</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span><a id="ippWriteFile">ippWriteFile</a></h3>
+ <p class="description">Write data for an IPP message to a file.</p>
+<p class="code">
+<a href="#ipp_state_t">ipp_state_t</a> ippWriteFile(int fd, <a href="#ipp_t">ipp_t</a> *ipp);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>fd</th>
+ <td class="description">HTTP data</td></tr>
+<tr><th>ipp</th>
+ <td class="description">IPP data</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Current state</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ippWriteIO">ippWriteIO</a></h3>
+ <p class="description">Write data for an IPP message.</p>
+<p class="code">
+<a href="#ipp_state_t">ipp_state_t</a> ippWriteIO(void *dst, <a href="#ipp_iocb_t">ipp_iocb_t</a> cb, int blocking, <a href="#ipp_t">ipp_t</a> *parent, <a href="#ipp_t">ipp_t</a> *ipp);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>dst</th>
+ <td class="description">Destination</td></tr>
+<tr><th>cb</th>
+ <td class="description">Write callback function</td></tr>
+<tr><th>blocking</th>
+ <td class="description">Use blocking IO?</td></tr>
+<tr><th>parent</th>
+ <td class="description">Parent IPP message</td></tr>
+<tr><th>ipp</th>
+ <td class="description">IPP data</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+ <p class="description">Current state</p>
+ <h2 class="title"><a id="TYPES">Data Types</a></h2>
+ <h3 class="typedef"><a id="cups_client_cert_cb_t"><span class="info">&#160;CUPS 1.5/macOS 10.7&#160;</span>cups_client_cert_cb_t</a></h3>
+ <p class="description">Client credentials callback
+</p>
+ <p class="code">
+typedef int(*)(http_t *http, void *tls, cups_array_t *distinguished_names, void *user_data)cups_client_cert_cb_t;
+</p>
+ <h3 class="typedef"><a id="cups_dest_cb_t"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span>cups_dest_cb_t</a></h3>
+ <p class="description">Destination enumeration callback
+</p>
+ <p class="code">
+typedef int(*)(void *user_data, unsigned flags, <a href="#cups_dest_t">cups_dest_t</a> *dest)cups_dest_cb_t;
+</p>
+ <h3 class="typedef"><a id="cups_dest_t">cups_dest_t</a></h3>
+ <p class="description">Destination</p>
+ <p class="code">
+typedef struct <a href="#cups_dest_s">cups_dest_s</a> cups_dest_t;
+</p>
+ <h3 class="typedef"><a id="cups_dinfo_t"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span>cups_dinfo_t</a></h3>
+ <p class="description">Destination capability and status
+information </p>
+ <p class="code">
+typedef struct _cups_dinfo_s cups_dinfo_t;
+</p>
+ <h3 class="typedef"><a id="cups_job_t">cups_job_t</a></h3>
+ <p class="description">Job</p>
+ <p class="code">
+typedef struct <a href="#cups_job_s">cups_job_s</a> cups_job_t;
+</p>
+ <h3 class="typedef"><a id="cups_option_t">cups_option_t</a></h3>
+ <p class="description">Printer Options</p>
+ <p class="code">
+typedef struct <a href="#cups_option_s">cups_option_s</a> cups_option_t;
+</p>
+ <h3 class="typedef"><a id="cups_password_cb2_t"><span class="info">&#160;CUPS 1.4/macOS 10.6&#160;</span>cups_password_cb2_t</a></h3>
+ <p class="description">New password callback
+</p>
+ <p class="code">
+typedef const char *(*)(const char *prompt, <a href="#http_t">http_t</a> *http, const char *method, const char *resource, void *user_data)cups_password_cb2_t;
+</p>
+ <h3 class="typedef"><a id="cups_ptype_t">cups_ptype_t</a></h3>
+ <p class="description">Printer type/capability bits</p>
+ <p class="code">
+typedef unsigned cups_ptype_t;
+</p>
+ <h3 class="typedef"><a id="cups_server_cert_cb_t"><span class="info">&#160;CUPS 1.5/macOS 10.7&#160;</span>cups_server_cert_cb_t</a></h3>
+ <p class="description">Server credentials callback
+</p>
+ <p class="code">
+typedef int(*)(http_t *http, void *tls, cups_array_t *certs, void *user_data)cups_server_cert_cb_t;
+</p>
+ <h3 class="typedef"><a id="cups_size_t"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span>cups_size_t</a></h3>
+ <p class="description">Media Size </p>
+ <p class="code">
+typedef struct <a href="#cups_size_s">cups_size_s</a> cups_size_t;
+</p>
+ <h3 class="typedef"><a id="http_addr_t"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span>http_addr_t</a></h3>
+ <p class="description">Socket address union, which
+makes using IPv6 and other
+address types easier and
+more portable. </p>
+ <p class="code">
+typedef union _http_addr_u / http_addr_t;
+</p>
+ <h3 class="typedef"><a id="http_encoding_t">http_encoding_t</a></h3>
+ <p class="description">HTTP transfer encoding values</p>
+ <p class="code">
+typedef enum <a href="#http_encoding_e">http_encoding_e</a> http_encoding_t;
+</p>
+ <h3 class="typedef"><a id="http_encryption_t">http_encryption_t</a></h3>
+ <p class="description">HTTP encryption values</p>
+ <p class="code">
+typedef enum <a href="#http_encryption_e">http_encryption_e</a> http_encryption_t;
+</p>
+ <h3 class="typedef"><a id="http_field_t">http_field_t</a></h3>
+ <p class="description">HTTP field names</p>
+ <p class="code">
+typedef enum <a href="#http_field_e">http_field_e</a> http_field_t;
+</p>
+ <h3 class="typedef"><a id="http_keepalive_t">http_keepalive_t</a></h3>
+ <p class="description">HTTP keep-alive values</p>
+ <p class="code">
+typedef enum <a href="#http_keepalive_e">http_keepalive_e</a> http_keepalive_t;
+</p>
+ <h3 class="typedef"><a id="http_state_t">http_state_t</a></h3>
+ <p class="description">HTTP state values; states
+are server-oriented...</p>
+ <p class="code">
+typedef enum <a href="#http_state_e">http_state_e</a> http_state_t;
+</p>
+ <h3 class="typedef"><a id="http_t">http_t</a></h3>
+ <p class="description">HTTP connection type</p>
+ <p class="code">
+typedef struct _http_s http_t;
+</p>
+ <h3 class="typedef"><a id="http_timeout_cb_t"><span class="info">&#160;CUPS 1.5/macOS 10.7&#160;</span>http_timeout_cb_t</a></h3>
+ <p class="description">HTTP timeout callback </p>
+ <p class="code">
+typedef int(*)(http_t *http, void *user_data)http_timeout_cb_t;
+</p>
+ <h3 class="typedef"><a id="http_trust_t"><span class="info">&#160;CUPS 2.0/OS 10.10&#160;</span>http_trust_t</a></h3>
+ <p class="description">Level of trust for credentials </p>
+ <p class="code">
+typedef enum <a href="#http_trust_e">http_trust_e</a> http_trust_t;
+</p>
+ <h3 class="typedef"><a id="http_uri_coding_t">http_uri_coding_t</a></h3>
+ <p class="description">URI en/decode flags</p>
+ <p class="code">
+typedef enum <a href="#http_uri_coding_e">http_uri_coding_e</a> http_uri_coding_t;
+</p>
+ <h3 class="typedef"><a id="http_uri_status_t"><span class="info">&#160;CUPS 1.2&#160;</span>http_uri_status_t</a></h3>
+ <p class="description">URI separation status </p>
+ <p class="code">
+typedef enum <a href="#http_uri_status_e">http_uri_status_e</a> http_uri_status_t;
+</p>
+ <h3 class="typedef"><a id="ipp_attribute_t">ipp_attribute_t</a></h3>
+ <p class="description">IPP attribute</p>
+ <p class="code">
+typedef struct _ipp_attribute_s ipp_attribute_t;
+</p>
+ <h3 class="typedef"><a id="ipp_copycb_t"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span>ipp_copycb_t</a></h3>
+ <p class="description">ippCopyAttributes callback function </p>
+ <p class="code">
+typedef int(*)(void *context, <a href="#ipp_t">ipp_t</a> *dst, <a href="#ipp_attribute_t">ipp_attribute_t</a> *attr)ipp_copycb_t;
+</p>
+ <h3 class="typedef"><a id="ipp_iocb_t"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span>ipp_iocb_t</a></h3>
+ <p class="description">ippReadIO/ippWriteIO callback function </p>
+ <p class="code">
+typedef ssize_t(*)(void *context, ipp_uchar_t *buffer, size_t bytes) ipp_iocb_t;
+</p>
+ <h3 class="typedef"><a id="ipp_orient_t">ipp_orient_t</a></h3>
+ <p class="description">Orientation values</p>
+ <p class="code">
+typedef enum <a href="#ipp_orient_e">ipp_orient_e</a> ipp_orient_t;
+</p>
+ <h3 class="typedef"><a id="ipp_pstate_t">ipp_pstate_t</a></h3>
+ <p class="description">Printer state values</p>
+ <p class="code">
+typedef enum <a href="#ipp_pstate_e">ipp_pstate_e</a> ipp_pstate_t;
+</p>
+ <h3 class="typedef"><a id="ipp_quality_t">ipp_quality_t</a></h3>
+ <p class="description">Print quality values</p>
+ <p class="code">
+typedef enum <a href="#ipp_quality_e">ipp_quality_e</a> ipp_quality_t;
+</p>
+ <h3 class="typedef"><a id="ipp_res_t">ipp_res_t</a></h3>
+ <p class="description">Resolution units</p>
+ <p class="code">
+typedef enum <a href="#ipp_res_e">ipp_res_e</a> ipp_res_t;
+</p>
+ <h3 class="typedef"><a id="ipp_state_t">ipp_state_t</a></h3>
+ <p class="description">ipp_t state values</p>
+ <p class="code">
+typedef enum <a href="#ipp_state_e">ipp_state_e</a> ipp_state_t;
+</p>
+ <h3 class="typedef"><a id="ipp_t">ipp_t</a></h3>
+ <p class="description">IPP request/response data</p>
+ <p class="code">
+typedef struct _ipp_s ipp_t;
+</p>
+ <h2 class="title"><a id="STRUCTURES">Structures</a></h2>
+<h3 class="struct"><a id="cups_dest_s">cups_dest_s</a></h3>
+ <p class="description">Destination</p>
+<p class="code">struct cups_dest_s {<br>
+&#160;&#160;&#160;&#160;char *name, *instance;<br>
+&#160;&#160;&#160;&#160;int is_default;<br>
+&#160;&#160;&#160;&#160;int num_options;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_option_t">cups_option_t</a> *options;<br>
+};</p>
+<h4 class="members">Members</h4>
+<table class="list"><tbody>
+<tr><th>instance </th>
+ <td class="description">Local instance name or NULL</td></tr>
+<tr><th>is_default </th>
+ <td class="description">Is this printer the default?</td></tr>
+<tr><th>num_options </th>
+ <td class="description">Number of options</td></tr>
+<tr><th>options </th>
+ <td class="description">Options</td></tr>
+</tbody></table>
+<h3 class="struct"><a id="cups_job_s">cups_job_s</a></h3>
+ <p class="description">Job</p>
+<p class="code">struct cups_job_s {<br>
+&#160;&#160;&#160;&#160;time_t completed_time;<br>
+&#160;&#160;&#160;&#160;time_t creation_time;<br>
+&#160;&#160;&#160;&#160;char *dest;<br>
+&#160;&#160;&#160;&#160;char *format;<br>
+&#160;&#160;&#160;&#160;int id;<br>
+&#160;&#160;&#160;&#160;int priority;<br>
+&#160;&#160;&#160;&#160;time_t processing_time;<br>
+&#160;&#160;&#160;&#160;int size;<br>
+&#160;&#160;&#160;&#160;ipp_jstate_t state;<br>
+&#160;&#160;&#160;&#160;char *title;<br>
+&#160;&#160;&#160;&#160;char *user;<br>
+};</p>
+<h4 class="members">Members</h4>
+<table class="list"><tbody>
+<tr><th>completed_time </th>
+ <td class="description">Time the job was completed</td></tr>
+<tr><th>creation_time </th>
+ <td class="description">Time the job was created</td></tr>
+<tr><th>dest </th>
+ <td class="description">Printer or class name</td></tr>
+<tr><th>format </th>
+ <td class="description">Document format</td></tr>
+<tr><th>id </th>
+ <td class="description">The job ID</td></tr>
+<tr><th>priority </th>
+ <td class="description">Priority (1-100)</td></tr>
+<tr><th>processing_time </th>
+ <td class="description">Time the job was processed</td></tr>
+<tr><th>size </th>
+ <td class="description">Size in kilobytes</td></tr>
+<tr><th>state </th>
+ <td class="description">Job state</td></tr>
+<tr><th>title </th>
+ <td class="description">Title/job name</td></tr>
+<tr><th>user </th>
+ <td class="description">User that submitted the job</td></tr>
+</tbody></table>
+<h3 class="struct"><a id="cups_option_s">cups_option_s</a></h3>
+ <p class="description">Printer Options</p>
+<p class="code">struct cups_option_s {<br>
+&#160;&#160;&#160;&#160;char *name;<br>
+&#160;&#160;&#160;&#160;char *value;<br>
+};</p>
+<h4 class="members">Members</h4>
+<table class="list"><tbody>
+<tr><th>name </th>
+ <td class="description">Name of option</td></tr>
+<tr><th>value </th>
+ <td class="description">Value of option</td></tr>
+</tbody></table>
+<h3 class="struct"><span class="info">&#160;CUPS 1.6/macOS 10.8&#160;</span><a id="cups_size_s">cups_size_s</a></h3>
+ <p class="description">Media Size </p>
+<p class="code">struct cups_size_s {<br>
+&#160;&#160;&#160;&#160;char media[128];<br>
+&#160;&#160;&#160;&#160;int width, length, bottom, left, right, top;<br>
+};</p>
+<h4 class="members">Members</h4>
+<table class="list"><tbody>
+<tr><th>media[128] </th>
+ <td class="description">Media name to use</td></tr>
+<tr><th>top </th>
+ <td class="description">Top margin in hundredths of
+millimeters</td></tr>
+</tbody></table>
+ <h2 class="title"><a id="ENUMERATIONS">Constants</a></h2>
+ <h3 class="enumeration"><a id="cups_ptype_e">cups_ptype_e</a></h3>
+ <p class="description">Printer type/capability bit
+constants</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>CUPS_PRINTER_AUTHENTICATED <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th> <td class="description">Printer requires authentication
+</td></tr>
+ <tr><th>CUPS_PRINTER_BIND </th> <td class="description">Can bind output</td></tr>
+ <tr><th>CUPS_PRINTER_BW </th> <td class="description">Can do B&amp;W printing</td></tr>
+ <tr><th>CUPS_PRINTER_CLASS </th> <td class="description">Printer class</td></tr>
+ <tr><th>CUPS_PRINTER_COLLATE </th> <td class="description">Can quickly collate copies</td></tr>
+ <tr><th>CUPS_PRINTER_COLOR </th> <td class="description">Can do color printing</td></tr>
+ <tr><th>CUPS_PRINTER_COMMANDS <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th> <td class="description">Printer supports maintenance commands
+</td></tr>
+ <tr><th>CUPS_PRINTER_COPIES </th> <td class="description">Can do copies in hardware</td></tr>
+ <tr><th>CUPS_PRINTER_COVER </th> <td class="description">Can cover output</td></tr>
+ <tr><th>CUPS_PRINTER_DEFAULT </th> <td class="description">Default printer on network</td></tr>
+ <tr><th>CUPS_PRINTER_DISCOVERED <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th> <td class="description">Printer was discovered </td></tr>
+ <tr><th>CUPS_PRINTER_DUPLEX </th> <td class="description">Can do two-sided printing</td></tr>
+ <tr><th>CUPS_PRINTER_FAX </th> <td class="description">Fax queue</td></tr>
+ <tr><th>CUPS_PRINTER_LARGE </th> <td class="description">Can print on D/E/A1/A0-size media</td></tr>
+ <tr><th>CUPS_PRINTER_LOCAL </th> <td class="description">Local printer or class</td></tr>
+ <tr><th>CUPS_PRINTER_MEDIUM </th> <td class="description">Can print on Tabloid/B/C/A3/A2-size media</td></tr>
+ <tr><th>CUPS_PRINTER_NOT_SHARED <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th> <td class="description">Printer is not shared
+</td></tr>
+ <tr><th>CUPS_PRINTER_PUNCH </th> <td class="description">Can punch output</td></tr>
+ <tr><th>CUPS_PRINTER_REJECTING </th> <td class="description">Printer is rejecting jobs</td></tr>
+ <tr><th>CUPS_PRINTER_REMOTE </th> <td class="description">Remote printer or class</td></tr>
+ <tr><th>CUPS_PRINTER_SMALL </th> <td class="description">Can print on Letter/Legal/A4-size media</td></tr>
+ <tr><th>CUPS_PRINTER_SORT </th> <td class="description">Can sort output</td></tr>
+ <tr><th>CUPS_PRINTER_STAPLE </th> <td class="description">Can staple output</td></tr>
+ <tr><th>CUPS_PRINTER_VARIABLE </th> <td class="description">Can print on rolls and custom-size media</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="http_encoding_e">http_encoding_e</a></h3>
+ <p class="description">HTTP transfer encoding values</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>HTTP_ENCODING_CHUNKED </th> <td class="description">Data is chunked</td></tr>
+ <tr><th>HTTP_ENCODING_FIELDS </th> <td class="description">Sending HTTP fields</td></tr>
+ <tr><th>HTTP_ENCODING_LENGTH </th> <td class="description">Data is sent with Content-Length</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="http_encryption_e">http_encryption_e</a></h3>
+ <p class="description">HTTP encryption values</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>HTTP_ENCRYPTION_ALWAYS </th> <td class="description">Always encrypt (SSL)</td></tr>
+ <tr><th>HTTP_ENCRYPTION_IF_REQUESTED </th> <td class="description">Encrypt if requested (TLS upgrade)</td></tr>
+ <tr><th>HTTP_ENCRYPTION_NEVER </th> <td class="description">Never encrypt</td></tr>
+ <tr><th>HTTP_ENCRYPTION_REQUIRED </th> <td class="description">Encryption is required (TLS upgrade)</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="http_field_e">http_field_e</a></h3>
+ <p class="description">HTTP field names</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>HTTP_FIELD_ACCEPT_ENCODING <span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span></th> <td class="description">Accepting-Encoding field </td></tr>
+ <tr><th>HTTP_FIELD_ACCEPT_LANGUAGE </th> <td class="description">Accept-Language field</td></tr>
+ <tr><th>HTTP_FIELD_ACCEPT_RANGES </th> <td class="description">Accept-Ranges field</td></tr>
+ <tr><th>HTTP_FIELD_ALLOW <span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span></th> <td class="description">Allow field </td></tr>
+ <tr><th>HTTP_FIELD_AUTHORIZATION </th> <td class="description">Authorization field</td></tr>
+ <tr><th>HTTP_FIELD_CONNECTION </th> <td class="description">Connection field</td></tr>
+ <tr><th>HTTP_FIELD_CONTENT_ENCODING </th> <td class="description">Content-Encoding field</td></tr>
+ <tr><th>HTTP_FIELD_CONTENT_LANGUAGE </th> <td class="description">Content-Language field</td></tr>
+ <tr><th>HTTP_FIELD_CONTENT_LENGTH </th> <td class="description">Content-Length field</td></tr>
+ <tr><th>HTTP_FIELD_CONTENT_LOCATION </th> <td class="description">Content-Location field</td></tr>
+ <tr><th>HTTP_FIELD_CONTENT_MD5 </th> <td class="description">Content-MD5 field</td></tr>
+ <tr><th>HTTP_FIELD_CONTENT_RANGE </th> <td class="description">Content-Range field</td></tr>
+ <tr><th>HTTP_FIELD_CONTENT_TYPE </th> <td class="description">Content-Type field</td></tr>
+ <tr><th>HTTP_FIELD_CONTENT_VERSION </th> <td class="description">Content-Version field</td></tr>
+ <tr><th>HTTP_FIELD_DATE </th> <td class="description">Date field</td></tr>
+ <tr><th>HTTP_FIELD_HOST </th> <td class="description">Host field</td></tr>
+ <tr><th>HTTP_FIELD_IF_MODIFIED_SINCE </th> <td class="description">If-Modified-Since field</td></tr>
+ <tr><th>HTTP_FIELD_IF_UNMODIFIED_SINCE </th> <td class="description">If-Unmodified-Since field</td></tr>
+ <tr><th>HTTP_FIELD_KEEP_ALIVE </th> <td class="description">Keep-Alive field</td></tr>
+ <tr><th>HTTP_FIELD_LAST_MODIFIED </th> <td class="description">Last-Modified field</td></tr>
+ <tr><th>HTTP_FIELD_LINK </th> <td class="description">Link field</td></tr>
+ <tr><th>HTTP_FIELD_LOCATION </th> <td class="description">Location field</td></tr>
+ <tr><th>HTTP_FIELD_MAX </th> <td class="description">Maximum field index</td></tr>
+ <tr><th>HTTP_FIELD_RANGE </th> <td class="description">Range field</td></tr>
+ <tr><th>HTTP_FIELD_REFERER </th> <td class="description">Referer field</td></tr>
+ <tr><th>HTTP_FIELD_RETRY_AFTER </th> <td class="description">Retry-After field</td></tr>
+ <tr><th>HTTP_FIELD_SERVER <span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span></th> <td class="description">Server field </td></tr>
+ <tr><th>HTTP_FIELD_TRANSFER_ENCODING </th> <td class="description">Transfer-Encoding field</td></tr>
+ <tr><th>HTTP_FIELD_UNKNOWN </th> <td class="description">Unknown field</td></tr>
+ <tr><th>HTTP_FIELD_UPGRADE </th> <td class="description">Upgrade field</td></tr>
+ <tr><th>HTTP_FIELD_USER_AGENT </th> <td class="description">User-Agent field</td></tr>
+ <tr><th>HTTP_FIELD_WWW_AUTHENTICATE </th> <td class="description">WWW-Authenticate field</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="http_keepalive_e">http_keepalive_e</a></h3>
+ <p class="description">HTTP keep-alive values</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>HTTP_KEEPALIVE_OFF </th> <td class="description">No keep alive support</td></tr>
+ <tr><th>HTTP_KEEPALIVE_ON </th> <td class="description">Use keep alive</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="http_state_e">http_state_e</a></h3>
+ <p class="description">HTTP state values; states
+are server-oriented...</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>HTTP_STATE_CONNECT </th> <td class="description">CONNECT command, waiting for blank line</td></tr>
+ <tr><th>HTTP_STATE_DELETE </th> <td class="description">DELETE command, waiting for blank line</td></tr>
+ <tr><th>HTTP_STATE_ERROR </th> <td class="description">Error on socket</td></tr>
+ <tr><th>HTTP_STATE_GET </th> <td class="description">GET command, waiting for blank line</td></tr>
+ <tr><th>HTTP_STATE_GET_SEND </th> <td class="description">GET command, sending data</td></tr>
+ <tr><th>HTTP_STATE_HEAD </th> <td class="description">HEAD command, waiting for blank line</td></tr>
+ <tr><th>HTTP_STATE_OPTIONS </th> <td class="description">OPTIONS command, waiting for blank line</td></tr>
+ <tr><th>HTTP_STATE_POST </th> <td class="description">POST command, waiting for blank line</td></tr>
+ <tr><th>HTTP_STATE_POST_RECV </th> <td class="description">POST command, receiving data</td></tr>
+ <tr><th>HTTP_STATE_POST_SEND </th> <td class="description">POST command, sending data</td></tr>
+ <tr><th>HTTP_STATE_PUT </th> <td class="description">PUT command, waiting for blank line</td></tr>
+ <tr><th>HTTP_STATE_PUT_RECV </th> <td class="description">PUT command, receiving data</td></tr>
+ <tr><th>HTTP_STATE_STATUS </th> <td class="description">Command complete, sending status</td></tr>
+ <tr><th>HTTP_STATE_TRACE </th> <td class="description">TRACE command, waiting for blank line</td></tr>
+ <tr><th>HTTP_STATE_UNKNOWN_METHOD <span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span></th> <td class="description">Unknown request method, waiting for blank line </td></tr>
+ <tr><th>HTTP_STATE_UNKNOWN_VERSION <span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span></th> <td class="description">Unknown request method, waiting for blank line </td></tr>
+ <tr><th>HTTP_STATE_WAITING </th> <td class="description">Waiting for command</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="http_status_e">http_status_e</a></h3>
+ <p class="description">HTTP status codes</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>HTTP_STATUS_ACCEPTED </th> <td class="description">DELETE command was successful</td></tr>
+ <tr><th>HTTP_STATUS_BAD_GATEWAY </th> <td class="description">Bad gateway</td></tr>
+ <tr><th>HTTP_STATUS_BAD_REQUEST </th> <td class="description">Bad request</td></tr>
+ <tr><th>HTTP_STATUS_CONFLICT </th> <td class="description">Request is self-conflicting</td></tr>
+ <tr><th>HTTP_STATUS_CONTINUE </th> <td class="description">Everything OK, keep going...</td></tr>
+ <tr><th>HTTP_STATUS_CREATED </th> <td class="description">PUT command was successful</td></tr>
+ <tr><th>HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED <span class="info">&#160;CUPS 1.4&#160;</span></th> <td class="description">User canceled authorization </td></tr>
+ <tr><th>HTTP_STATUS_CUPS_PKI_ERROR <span class="info">&#160;CUPS 1.5/macOS 10.7&#160;</span></th> <td class="description">Error negotiating a secure connection </td></tr>
+ <tr><th>HTTP_STATUS_ERROR </th> <td class="description">An error response from httpXxxx()</td></tr>
+ <tr><th>HTTP_STATUS_EXPECTATION_FAILED </th> <td class="description">The expectation given in an Expect header field was not met</td></tr>
+ <tr><th>HTTP_STATUS_FORBIDDEN </th> <td class="description">Forbidden to access this URI</td></tr>
+ <tr><th>HTTP_STATUS_GATEWAY_TIMEOUT </th> <td class="description">Gateway connection timed out</td></tr>
+ <tr><th>HTTP_STATUS_GONE </th> <td class="description">Server has gone away</td></tr>
+ <tr><th>HTTP_STATUS_LENGTH_REQUIRED </th> <td class="description">A content length or encoding is required</td></tr>
+ <tr><th>HTTP_STATUS_METHOD_NOT_ALLOWED </th> <td class="description">Method is not allowed</td></tr>
+ <tr><th>HTTP_STATUS_MOVED_PERMANENTLY </th> <td class="description">Document has moved permanently</td></tr>
+ <tr><th>HTTP_STATUS_MOVED_TEMPORARILY </th> <td class="description">Document has moved temporarily</td></tr>
+ <tr><th>HTTP_STATUS_MULTIPLE_CHOICES </th> <td class="description">Multiple files match request</td></tr>
+ <tr><th>HTTP_STATUS_NONE <span class="info">&#160;CUPS 1.7/macOS 10.9&#160;</span></th> <td class="description">No Expect value </td></tr>
+ <tr><th>HTTP_STATUS_NOT_ACCEPTABLE </th> <td class="description">Not Acceptable</td></tr>
+ <tr><th>HTTP_STATUS_NOT_AUTHORITATIVE </th> <td class="description">Information isn't authoritative</td></tr>
+ <tr><th>HTTP_STATUS_NOT_FOUND </th> <td class="description">URI was not found</td></tr>
+ <tr><th>HTTP_STATUS_NOT_IMPLEMENTED </th> <td class="description">Feature not implemented</td></tr>
+ <tr><th>HTTP_STATUS_NOT_MODIFIED </th> <td class="description">File not modified</td></tr>
+ <tr><th>HTTP_STATUS_NOT_SUPPORTED </th> <td class="description">HTTP version not supported</td></tr>
+ <tr><th>HTTP_STATUS_NO_CONTENT </th> <td class="description">Successful command, no new data</td></tr>
+ <tr><th>HTTP_STATUS_OK </th> <td class="description">OPTIONS/GET/HEAD/POST/TRACE command was successful</td></tr>
+ <tr><th>HTTP_STATUS_PARTIAL_CONTENT </th> <td class="description">Only a partial file was received/sent</td></tr>
+ <tr><th>HTTP_STATUS_PAYMENT_REQUIRED </th> <td class="description">Payment required</td></tr>
+ <tr><th>HTTP_STATUS_PRECONDITION </th> <td class="description">Precondition failed</td></tr>
+ <tr><th>HTTP_STATUS_PROXY_AUTHENTICATION </th> <td class="description">Proxy Authentication is Required</td></tr>
+ <tr><th>HTTP_STATUS_REQUESTED_RANGE </th> <td class="description">The requested range is not satisfiable</td></tr>
+ <tr><th>HTTP_STATUS_REQUEST_TIMEOUT </th> <td class="description">Request timed out</td></tr>
+ <tr><th>HTTP_STATUS_REQUEST_TOO_LARGE </th> <td class="description">Request entity too large</td></tr>
+ <tr><th>HTTP_STATUS_RESET_CONTENT </th> <td class="description">Content was reset/recreated</td></tr>
+ <tr><th>HTTP_STATUS_SEE_OTHER </th> <td class="description">See this other link...</td></tr>
+ <tr><th>HTTP_STATUS_SERVER_ERROR </th> <td class="description">Internal server error</td></tr>
+ <tr><th>HTTP_STATUS_SERVICE_UNAVAILABLE </th> <td class="description">Service is unavailable</td></tr>
+ <tr><th>HTTP_STATUS_SWITCHING_PROTOCOLS </th> <td class="description">HTTP upgrade to TLS/SSL</td></tr>
+ <tr><th>HTTP_STATUS_UNAUTHORIZED </th> <td class="description">Unauthorized to access host</td></tr>
+ <tr><th>HTTP_STATUS_UNSUPPORTED_MEDIATYPE </th> <td class="description">The requested media type is unsupported</td></tr>
+ <tr><th>HTTP_STATUS_UPGRADE_REQUIRED </th> <td class="description">Upgrade to SSL/TLS required</td></tr>
+ <tr><th>HTTP_STATUS_URI_TOO_LONG </th> <td class="description">URI too long</td></tr>
+ <tr><th>HTTP_STATUS_USE_PROXY </th> <td class="description">Must use a proxy to access this URI</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="http_trust_e"><span class="info">&#160;CUPS 2.0/OS 10.10&#160;</span>http_trust_e</a></h3>
+ <p class="description">Level of trust for credentials </p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>HTTP_TRUST_CHANGED </th> <td class="description">Credentials have changed</td></tr>
+ <tr><th>HTTP_TRUST_EXPIRED </th> <td class="description">Credentials are expired</td></tr>
+ <tr><th>HTTP_TRUST_INVALID </th> <td class="description">Credentials are invalid</td></tr>
+ <tr><th>HTTP_TRUST_OK </th> <td class="description">Credentials are OK/trusted</td></tr>
+ <tr><th>HTTP_TRUST_RENEWED </th> <td class="description">Credentials have been renewed</td></tr>
+ <tr><th>HTTP_TRUST_UNKNOWN </th> <td class="description">Credentials are unknown/new</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="http_uri_coding_e">http_uri_coding_e</a></h3>
+ <p class="description">URI en/decode flags</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>HTTP_URI_CODING_ALL </th> <td class="description">En/decode everything</td></tr>
+ <tr><th>HTTP_URI_CODING_HOSTNAME </th> <td class="description">En/decode the hostname portion</td></tr>
+ <tr><th>HTTP_URI_CODING_MOST </th> <td class="description">En/decode all but the query</td></tr>
+ <tr><th>HTTP_URI_CODING_NONE </th> <td class="description">Don't en/decode anything</td></tr>
+ <tr><th>HTTP_URI_CODING_QUERY </th> <td class="description">En/decode the query portion</td></tr>
+ <tr><th>HTTP_URI_CODING_RESOURCE </th> <td class="description">En/decode the resource portion</td></tr>
+ <tr><th>HTTP_URI_CODING_RFC6874 </th> <td class="description">Use RFC 6874 address format</td></tr>
+ <tr><th>HTTP_URI_CODING_USERNAME </th> <td class="description">En/decode the username portion</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="http_uri_status_e"><span class="info">&#160;CUPS 1.2&#160;</span>http_uri_status_e</a></h3>
+ <p class="description">URI separation status </p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>HTTP_URI_STATUS_BAD_ARGUMENTS </th> <td class="description">Bad arguments to function (error)</td></tr>
+ <tr><th>HTTP_URI_STATUS_BAD_HOSTNAME </th> <td class="description">Bad hostname in URI (error)</td></tr>
+ <tr><th>HTTP_URI_STATUS_BAD_PORT </th> <td class="description">Bad port number in URI (error)</td></tr>
+ <tr><th>HTTP_URI_STATUS_BAD_RESOURCE </th> <td class="description">Bad resource in URI (error)</td></tr>
+ <tr><th>HTTP_URI_STATUS_BAD_SCHEME </th> <td class="description">Bad scheme in URI (error)</td></tr>
+ <tr><th>HTTP_URI_STATUS_BAD_URI </th> <td class="description">Bad/empty URI (error)</td></tr>
+ <tr><th>HTTP_URI_STATUS_BAD_USERNAME </th> <td class="description">Bad username in URI (error)</td></tr>
+ <tr><th>HTTP_URI_STATUS_MISSING_RESOURCE </th> <td class="description">Missing resource in URI (warning)</td></tr>
+ <tr><th>HTTP_URI_STATUS_MISSING_SCHEME </th> <td class="description">Missing scheme in URI (warning)</td></tr>
+ <tr><th>HTTP_URI_STATUS_OK </th> <td class="description">URI decoded OK</td></tr>
+ <tr><th>HTTP_URI_STATUS_OVERFLOW </th> <td class="description">URI buffer for httpAssembleURI is too small</td></tr>
+ <tr><th>HTTP_URI_STATUS_UNKNOWN_SCHEME </th> <td class="description">Unknown scheme in URI (warning)</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="ipp_finishings_e">ipp_finishings_e</a></h3>
+ <p class="description">Finishings values</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>IPP_FINISHINGS_BALE </th> <td class="description">Bale (any type)</td></tr>
+ <tr><th>IPP_FINISHINGS_BIND </th> <td class="description">Bind</td></tr>
+ <tr><th>IPP_FINISHINGS_BIND_BOTTOM </th> <td class="description">Bind on bottom</td></tr>
+ <tr><th>IPP_FINISHINGS_BIND_LEFT </th> <td class="description">Bind on left</td></tr>
+ <tr><th>IPP_FINISHINGS_BIND_RIGHT </th> <td class="description">Bind on right</td></tr>
+ <tr><th>IPP_FINISHINGS_BIND_TOP </th> <td class="description">Bind on top</td></tr>
+ <tr><th>IPP_FINISHINGS_BOOKLET_MAKER </th> <td class="description">Fold to make booklet</td></tr>
+ <tr><th>IPP_FINISHINGS_COAT </th> <td class="description">Apply protective liquid or powder coating</td></tr>
+ <tr><th>IPP_FINISHINGS_COVER </th> <td class="description">Add cover</td></tr>
+ <tr><th>IPP_FINISHINGS_EDGE_STITCH </th> <td class="description">Stitch along any side</td></tr>
+ <tr><th>IPP_FINISHINGS_EDGE_STITCH_BOTTOM </th> <td class="description">Stitch along bottom edge</td></tr>
+ <tr><th>IPP_FINISHINGS_EDGE_STITCH_LEFT </th> <td class="description">Stitch along left side</td></tr>
+ <tr><th>IPP_FINISHINGS_EDGE_STITCH_RIGHT </th> <td class="description">Stitch along right side</td></tr>
+ <tr><th>IPP_FINISHINGS_EDGE_STITCH_TOP </th> <td class="description">Stitch along top edge</td></tr>
+ <tr><th>IPP_FINISHINGS_FOLD </th> <td class="description">Fold (any type)</td></tr>
+ <tr><th>IPP_FINISHINGS_FOLD_ACCORDIAN </th> <td class="description">Accordian-fold the paper vertically into four sections</td></tr>
+ <tr><th>IPP_FINISHINGS_FOLD_DOUBLE_GATE </th> <td class="description">Fold the top and bottom quarters of the paper towards the midline, then fold in half vertically</td></tr>
+ <tr><th>IPP_FINISHINGS_FOLD_ENGINEERING_Z </th> <td class="description">Fold the paper vertically into two small sections and one larger, forming an elongated Z</td></tr>
+ <tr><th>IPP_FINISHINGS_FOLD_GATE </th> <td class="description">Fold the top and bottom quarters of the paper towards the midline</td></tr>
+ <tr><th>IPP_FINISHINGS_FOLD_HALF </th> <td class="description">Fold the paper in half vertically</td></tr>
+ <tr><th>IPP_FINISHINGS_FOLD_HALF_Z </th> <td class="description">Fold the paper in half horizontally, then Z-fold the paper vertically</td></tr>
+ <tr><th>IPP_FINISHINGS_FOLD_LEFT_GATE </th> <td class="description">Fold the top quarter of the paper towards the midline</td></tr>
+ <tr><th>IPP_FINISHINGS_FOLD_LETTER </th> <td class="description">Fold the paper into three sections vertically; sometimes also known as a C fold</td></tr>
+ <tr><th>IPP_FINISHINGS_FOLD_PARALLEL </th> <td class="description">Fold the paper in half vertically two times, yielding four sections</td></tr>
+ <tr><th>IPP_FINISHINGS_FOLD_POSTER </th> <td class="description">Fold the paper in half horizontally and vertically; sometimes also called a cross fold</td></tr>
+ <tr><th>IPP_FINISHINGS_FOLD_RIGHT_GATE </th> <td class="description">Fold the bottom quarter of the paper towards the midline</td></tr>
+ <tr><th>IPP_FINISHINGS_FOLD_Z </th> <td class="description">Fold the paper vertically into three sections, forming a Z</td></tr>
+ <tr><th>IPP_FINISHINGS_JOG_OFFSET </th> <td class="description">Offset for binding (any type)</td></tr>
+ <tr><th>IPP_FINISHINGS_LAMINATE </th> <td class="description">Apply protective (solid) material</td></tr>
+ <tr><th>IPP_FINISHINGS_NONE </th> <td class="description">No finishing</td></tr>
+ <tr><th>IPP_FINISHINGS_PUNCH </th> <td class="description">Punch (any location/count)</td></tr>
+ <tr><th>IPP_FINISHINGS_PUNCH_BOTTOM_LEFT </th> <td class="description">Punch 1 hole bottom left</td></tr>
+ <tr><th>IPP_FINISHINGS_PUNCH_BOTTOM_RIGHT </th> <td class="description">Punch 1 hole bottom right</td></tr>
+ <tr><th>IPP_FINISHINGS_PUNCH_DUAL_BOTTOM </th> <td class="description">Punch 2 holes bottom edge</td></tr>
+ <tr><th>IPP_FINISHINGS_PUNCH_DUAL_LEFT </th> <td class="description">Punch 2 holes left side</td></tr>
+ <tr><th>IPP_FINISHINGS_PUNCH_DUAL_RIGHT </th> <td class="description">Punch 2 holes right side</td></tr>
+ <tr><th>IPP_FINISHINGS_PUNCH_DUAL_TOP </th> <td class="description">Punch 2 holes top edge</td></tr>
+ <tr><th>IPP_FINISHINGS_PUNCH_MULTIPLE_BOTTOM </th> <td class="description">Pucnh multiple holes bottom edge</td></tr>
+ <tr><th>IPP_FINISHINGS_PUNCH_MULTIPLE_LEFT </th> <td class="description">Pucnh multiple holes left side</td></tr>
+ <tr><th>IPP_FINISHINGS_PUNCH_MULTIPLE_RIGHT </th> <td class="description">Pucnh multiple holes right side</td></tr>
+ <tr><th>IPP_FINISHINGS_PUNCH_MULTIPLE_TOP </th> <td class="description">Pucnh multiple holes top edge</td></tr>
+ <tr><th>IPP_FINISHINGS_PUNCH_QUAD_BOTTOM </th> <td class="description">Punch 4 holes bottom edge</td></tr>
+ <tr><th>IPP_FINISHINGS_PUNCH_QUAD_LEFT </th> <td class="description">Punch 4 holes left side</td></tr>
+ <tr><th>IPP_FINISHINGS_PUNCH_QUAD_RIGHT </th> <td class="description">Punch 4 holes right side</td></tr>
+ <tr><th>IPP_FINISHINGS_PUNCH_QUAD_TOP </th> <td class="description">Punch 4 holes top edge</td></tr>
+ <tr><th>IPP_FINISHINGS_PUNCH_TOP_LEFT </th> <td class="description">Punch 1 hole top left</td></tr>
+ <tr><th>IPP_FINISHINGS_PUNCH_TOP_RIGHT </th> <td class="description">Punch 1 hole top right</td></tr>
+ <tr><th>IPP_FINISHINGS_PUNCH_TRIPLE_BOTTOM </th> <td class="description">Punch 3 holes bottom edge</td></tr>
+ <tr><th>IPP_FINISHINGS_PUNCH_TRIPLE_LEFT </th> <td class="description">Punch 3 holes left side</td></tr>
+ <tr><th>IPP_FINISHINGS_PUNCH_TRIPLE_RIGHT </th> <td class="description">Punch 3 holes right side</td></tr>
+ <tr><th>IPP_FINISHINGS_PUNCH_TRIPLE_TOP </th> <td class="description">Punch 3 holes top edge</td></tr>
+ <tr><th>IPP_FINISHINGS_SADDLE_STITCH </th> <td class="description">Staple interior</td></tr>
+ <tr><th>IPP_FINISHINGS_STAPLE </th> <td class="description">Staple (any location/method)</td></tr>
+ <tr><th>IPP_FINISHINGS_STAPLE_BOTTOM_LEFT </th> <td class="description">Staple bottom left corner</td></tr>
+ <tr><th>IPP_FINISHINGS_STAPLE_BOTTOM_RIGHT </th> <td class="description">Staple bottom right corner</td></tr>
+ <tr><th>IPP_FINISHINGS_STAPLE_DUAL_BOTTOM </th> <td class="description">Two staples on bottom</td></tr>
+ <tr><th>IPP_FINISHINGS_STAPLE_DUAL_LEFT </th> <td class="description">Two staples on left</td></tr>
+ <tr><th>IPP_FINISHINGS_STAPLE_DUAL_RIGHT </th> <td class="description">Two staples on right</td></tr>
+ <tr><th>IPP_FINISHINGS_STAPLE_DUAL_TOP </th> <td class="description">Two staples on top</td></tr>
+ <tr><th>IPP_FINISHINGS_STAPLE_TOP_LEFT </th> <td class="description">Staple top left corner</td></tr>
+ <tr><th>IPP_FINISHINGS_STAPLE_TOP_RIGHT </th> <td class="description">Staple top right corner</td></tr>
+ <tr><th>IPP_FINISHINGS_STAPLE_TRIPLE_BOTTOM </th> <td class="description">Three staples on bottom</td></tr>
+ <tr><th>IPP_FINISHINGS_STAPLE_TRIPLE_LEFT </th> <td class="description">Three staples on left</td></tr>
+ <tr><th>IPP_FINISHINGS_STAPLE_TRIPLE_RIGHT </th> <td class="description">Three staples on right</td></tr>
+ <tr><th>IPP_FINISHINGS_STAPLE_TRIPLE_TOP </th> <td class="description">Three staples on top</td></tr>
+ <tr><th>IPP_FINISHINGS_TRIM </th> <td class="description">Trim (any type)</td></tr>
+ <tr><th>IPP_FINISHINGS_TRIM_AFTER_COPIES </th> <td class="description">Trim output after each copy</td></tr>
+ <tr><th>IPP_FINISHINGS_TRIM_AFTER_DOCUMENTS </th> <td class="description">Trim output after each document</td></tr>
+ <tr><th>IPP_FINISHINGS_TRIM_AFTER_JOB </th> <td class="description">Trim output after job</td></tr>
+ <tr><th>IPP_FINISHINGS_TRIM_AFTER_PAGES </th> <td class="description">Trim output after each page</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="ipp_jstate_e">ipp_jstate_e</a></h3>
+ <p class="description">Job states</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>IPP_JSTATE_ABORTED </th> <td class="description">Job has aborted due to error</td></tr>
+ <tr><th>IPP_JSTATE_CANCELED </th> <td class="description">Job has been canceled</td></tr>
+ <tr><th>IPP_JSTATE_COMPLETED </th> <td class="description">Job has completed successfully</td></tr>
+ <tr><th>IPP_JSTATE_HELD </th> <td class="description">Job is held for printing</td></tr>
+ <tr><th>IPP_JSTATE_PENDING </th> <td class="description">Job is waiting to be printed</td></tr>
+ <tr><th>IPP_JSTATE_PROCESSING </th> <td class="description">Job is currently printing</td></tr>
+ <tr><th>IPP_JSTATE_STOPPED </th> <td class="description">Job has been stopped</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="ipp_op_e">ipp_op_e</a></h3>
+ <p class="description">IPP operations</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>IPP_OP_CANCEL_CURRENT_JOB </th> <td class="description">Cancel-Current-Job: Cancel the current job</td></tr>
+ <tr><th>IPP_OP_CANCEL_JOB </th> <td class="description">Cancel-Job: Cancel a job</td></tr>
+ <tr><th>IPP_OP_CANCEL_JOBS </th> <td class="description">Cancel-Jobs: Cancel all jobs (administrative)</td></tr>
+ <tr><th>IPP_OP_CANCEL_MY_JOBS </th> <td class="description">Cancel-My-Jobs: Cancel a user's jobs</td></tr>
+ <tr><th>IPP_OP_CANCEL_SUBSCRIPTION <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th> <td class="description">Cancel-Subscription: Cancel a subscription </td></tr>
+ <tr><th>IPP_OP_CLOSE_JOB </th> <td class="description">Close-Job: Close a job and start printing</td></tr>
+ <tr><th>IPP_OP_CREATE_JOB </th> <td class="description">Create-Job: Create an empty print job</td></tr>
+ <tr><th>IPP_OP_CREATE_JOB_SUBSCRIPTIONS <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th> <td class="description">Create-Job-Subscriptions: Create one of more job subscriptions </td></tr>
+ <tr><th>IPP_OP_CREATE_PRINTER_SUBSCRIPTIONS <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th> <td class="description">Create-Printer-Subscriptions: Create one or more printer subscriptions </td></tr>
+ <tr><th>IPP_OP_CUPS_ADD_MODIFY_CLASS </th> <td class="description">CUPS-Add-Modify-Class: Add or modify a class</td></tr>
+ <tr><th>IPP_OP_CUPS_ADD_MODIFY_PRINTER </th> <td class="description">CUPS-Add-Modify-Printer: Add or modify a printer</td></tr>
+ <tr><th>IPP_OP_CUPS_AUTHENTICATE_JOB <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th> <td class="description">CUPS-Authenticate-Job: Authenticate a job </td></tr>
+ <tr><th>IPP_OP_CUPS_CREATE_LOCAL_PRINTER <span class="info">&#160;CUPS 2.2&#160;</span></th> <td class="description">CUPS-Create-Local-Printer: Create a local (temporary) printer </td></tr>
+ <tr><th>IPP_OP_CUPS_DELETE_CLASS </th> <td class="description">CUPS-Delete-Class: Delete a class</td></tr>
+ <tr><th>IPP_OP_CUPS_DELETE_PRINTER </th> <td class="description">CUPS-Delete-Printer: Delete a printer</td></tr>
+ <tr><th>IPP_OP_CUPS_GET_DEFAULT </th> <td class="description">CUPS-Get-Default: Get the default printer</td></tr>
+ <tr><th>IPP_OP_CUPS_GET_DEVICES <span class="info">&#160;DEPRECATED&#160;</span></th> <td class="description">CUPS-Get-Devices: Get a list of supported devices </td></tr>
+ <tr><th>IPP_OP_CUPS_GET_DOCUMENT <span class="info">&#160;CUPS 1.4/macOS 10.6&#160;</span></th> <td class="description">CUPS-Get-Document: Get a document file </td></tr>
+ <tr><th>IPP_OP_CUPS_GET_PPD <span class="info">&#160;DEPRECATED&#160;</span></th> <td class="description">CUPS-Get-PPD: Get a PPD file </td></tr>
+ <tr><th>IPP_OP_CUPS_GET_PPDS <span class="info">&#160;DEPRECATED&#160;</span></th> <td class="description">CUPS-Get-PPDs: Get a list of supported drivers </td></tr>
+ <tr><th>IPP_OP_CUPS_GET_PRINTERS </th> <td class="description">CUPS-Get-Printers: Get a list of printers and/or classes</td></tr>
+ <tr><th>IPP_OP_CUPS_INVALID </th> <td class="description">Invalid operation name for <a href="#ippOpValue"><code>ippOpValue</code></a></td></tr>
+ <tr><th>IPP_OP_CUPS_MOVE_JOB </th> <td class="description">CUPS-Move-Job: Move a job to a different printer</td></tr>
+ <tr><th>IPP_OP_CUPS_SET_DEFAULT </th> <td class="description">CUPS-Set-Default: Set the default printer</td></tr>
+ <tr><th>IPP_OP_DISABLE_PRINTER </th> <td class="description">Disable-Printer: Reject new jobs for a printer</td></tr>
+ <tr><th>IPP_OP_ENABLE_PRINTER </th> <td class="description">Enable-Printer: Accept new jobs for a printer</td></tr>
+ <tr><th>IPP_OP_GET_JOBS </th> <td class="description">Get-Jobs: Get a list of jobs</td></tr>
+ <tr><th>IPP_OP_GET_JOB_ATTRIBUTES </th> <td class="description">Get-Job-Attribute: Get information about a job</td></tr>
+ <tr><th>IPP_OP_GET_NOTIFICATIONS <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th> <td class="description">Get-Notifications: Get notification events </td></tr>
+ <tr><th>IPP_OP_GET_PRINTER_ATTRIBUTES </th> <td class="description">Get-Printer-Attributes: Get information about a printer</td></tr>
+ <tr><th>IPP_OP_GET_PRINTER_SUPPORTED_VALUES </th> <td class="description">Get-Printer-Supported-Values: Get supported values</td></tr>
+ <tr><th>IPP_OP_GET_SUBSCRIPTIONS <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th> <td class="description">Get-Subscriptions: Get list of subscriptions </td></tr>
+ <tr><th>IPP_OP_GET_SUBSCRIPTION_ATTRIBUTES <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th> <td class="description">Get-Subscription-Attributes: Get subscription information </td></tr>
+ <tr><th>IPP_OP_HOLD_JOB </th> <td class="description">Hold-Job: Hold a job for printing</td></tr>
+ <tr><th>IPP_OP_HOLD_NEW_JOBS </th> <td class="description">Hold-New-Jobs: Hold new jobs</td></tr>
+ <tr><th>IPP_OP_IDENTIFY_PRINTER </th> <td class="description">Identify-Printer: Make the printer beep, flash, or display a message for identification</td></tr>
+ <tr><th>IPP_OP_PAUSE_PRINTER </th> <td class="description">Pause-Printer: Stop a printer</td></tr>
+ <tr><th>IPP_OP_PAUSE_PRINTER_AFTER_CURRENT_JOB </th> <td class="description">Pause-Printer-After-Current-Job: Stop printer after the current job</td></tr>
+ <tr><th>IPP_OP_PRINT_JOB </th> <td class="description">Print-Job: Print a single file</td></tr>
+ <tr><th>IPP_OP_PROMOTE_JOB </th> <td class="description">Promote-Job: Promote a job to print sooner</td></tr>
+ <tr><th>IPP_OP_RELEASE_HELD_NEW_JOBS </th> <td class="description">Release-Held-New-Jobs: Release new jobs that were previously held</td></tr>
+ <tr><th>IPP_OP_RELEASE_JOB </th> <td class="description">Release-Job: Release a job for printing</td></tr>
+ <tr><th>IPP_OP_RENEW_SUBSCRIPTION <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th> <td class="description">Renew-Subscription: Renew a printer subscription </td></tr>
+ <tr><th>IPP_OP_RESTART_JOB <span class="info">&#160;DEPRECATED&#160;</span></th> <td class="description">Restart-Job: Reprint a job </td></tr>
+ <tr><th>IPP_OP_RESUME_JOB </th> <td class="description">Resume-Job: Resume the current job</td></tr>
+ <tr><th>IPP_OP_RESUME_PRINTER </th> <td class="description">Resume-Printer: Start a printer</td></tr>
+ <tr><th>IPP_OP_SCHEDULE_JOB_AFTER </th> <td class="description">Schedule-Job-After: Schedule a job to print after another</td></tr>
+ <tr><th>IPP_OP_SEND_DOCUMENT </th> <td class="description">Send-Document: Add a file to a job</td></tr>
+ <tr><th>IPP_OP_SET_JOB_ATTRIBUTES </th> <td class="description">Set-Job-Attributes: Set job values</td></tr>
+ <tr><th>IPP_OP_SET_PRINTER_ATTRIBUTES </th> <td class="description">Set-Printer-Attributes: Set printer values</td></tr>
+ <tr><th>IPP_OP_SUSPEND_CURRENT_JOB </th> <td class="description">Suspend-Current-Job: Suspend the current job</td></tr>
+ <tr><th>IPP_OP_VALIDATE_JOB </th> <td class="description">Validate-Job: Validate job values prior to submission</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="ipp_orient_e">ipp_orient_e</a></h3>
+ <p class="description">Orientation values</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>IPP_ORIENT_LANDSCAPE </th> <td class="description">90 degrees counter-clockwise</td></tr>
+ <tr><th>IPP_ORIENT_NONE </th> <td class="description">No rotation</td></tr>
+ <tr><th>IPP_ORIENT_PORTRAIT </th> <td class="description">No rotation</td></tr>
+ <tr><th>IPP_ORIENT_REVERSE_LANDSCAPE </th> <td class="description">90 degrees clockwise</td></tr>
+ <tr><th>IPP_ORIENT_REVERSE_PORTRAIT </th> <td class="description">180 degrees</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="ipp_pstate_e">ipp_pstate_e</a></h3>
+ <p class="description">Printer state values</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>IPP_PSTATE_IDLE </th> <td class="description">Printer is idle</td></tr>
+ <tr><th>IPP_PSTATE_PROCESSING </th> <td class="description">Printer is working</td></tr>
+ <tr><th>IPP_PSTATE_STOPPED </th> <td class="description">Printer is stopped</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="ipp_quality_e">ipp_quality_e</a></h3>
+ <p class="description">Print quality values</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>IPP_QUALITY_DRAFT </th> <td class="description">Draft quality</td></tr>
+ <tr><th>IPP_QUALITY_HIGH </th> <td class="description">High quality</td></tr>
+ <tr><th>IPP_QUALITY_NORMAL </th> <td class="description">Normal quality</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="ipp_res_e">ipp_res_e</a></h3>
+ <p class="description">Resolution units</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>IPP_RES_PER_CM </th> <td class="description">Pixels per centimeter</td></tr>
+ <tr><th>IPP_RES_PER_INCH </th> <td class="description">Pixels per inch</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="ipp_state_e">ipp_state_e</a></h3>
+ <p class="description">ipp_t state values</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>IPP_STATE_ATTRIBUTE </th> <td class="description">One or more attributes need to be sent/received</td></tr>
+ <tr><th>IPP_STATE_DATA </th> <td class="description">IPP request data needs to be sent/received</td></tr>
+ <tr><th>IPP_STATE_ERROR </th> <td class="description">An error occurred</td></tr>
+ <tr><th>IPP_STATE_HEADER </th> <td class="description">The request header needs to be sent/received</td></tr>
+ <tr><th>IPP_STATE_IDLE </th> <td class="description">Nothing is happening/request completed</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="ipp_status_e">ipp_status_e</a></h3>
+ <p class="description">IPP status code values</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>IPP_STATUS_CUPS_INVALID </th> <td class="description">Invalid status name for <a href="#ippErrorValue"><code>ippErrorValue</code></a></td></tr>
+ <tr><th>IPP_STATUS_ERROR_ACCOUNT_AUTHORIZATION_FAILED </th> <td class="description">client-error-account-authorization-failed</td></tr>
+ <tr><th>IPP_STATUS_ERROR_ACCOUNT_CLOSED </th> <td class="description">client-error-account-closed</td></tr>
+ <tr><th>IPP_STATUS_ERROR_ACCOUNT_INFO_NEEDED </th> <td class="description">client-error-account-info-needed</td></tr>
+ <tr><th>IPP_STATUS_ERROR_ACCOUNT_LIMIT_REACHED </th> <td class="description">client-error-account-limit-reached</td></tr>
+ <tr><th>IPP_STATUS_ERROR_ATTRIBUTES_NOT_SETTABLE </th> <td class="description">client-error-attributes-not-settable</td></tr>
+ <tr><th>IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES </th> <td class="description">client-error-attributes-or-values-not-supported</td></tr>
+ <tr><th>IPP_STATUS_ERROR_BAD_REQUEST </th> <td class="description">client-error-bad-request</td></tr>
+ <tr><th>IPP_STATUS_ERROR_BUSY </th> <td class="description">server-error-busy</td></tr>
+ <tr><th>IPP_STATUS_ERROR_CHARSET </th> <td class="description">client-error-charset-not-supported</td></tr>
+ <tr><th>IPP_STATUS_ERROR_COMPRESSION_ERROR </th> <td class="description">client-error-compression-error</td></tr>
+ <tr><th>IPP_STATUS_ERROR_COMPRESSION_NOT_SUPPORTED </th> <td class="description">client-error-compression-not-supported</td></tr>
+ <tr><th>IPP_STATUS_ERROR_CONFLICTING </th> <td class="description">client-error-conflicting-attributes</td></tr>
+ <tr><th>IPP_STATUS_ERROR_CUPS_ACCOUNT_AUTHORIZATION_FAILED <span class="info">&#160;DEPRECATED&#160;</span></th> <td class="description">cups-error-account-authorization-failed </td></tr>
+ <tr><th>IPP_STATUS_ERROR_CUPS_ACCOUNT_CLOSED </th> <td class="description">cups-error-account-closed @deprecate@</td></tr>
+ <tr><th>IPP_STATUS_ERROR_CUPS_ACCOUNT_INFO_NEEDED <span class="info">&#160;DEPRECATED&#160;</span></th> <td class="description">cups-error-account-info-needed </td></tr>
+ <tr><th>IPP_STATUS_ERROR_CUPS_ACCOUNT_LIMIT_REACHED <span class="info">&#160;DEPRECATED&#160;</span></th> <td class="description">cups-error-account-limit-reached </td></tr>
+ <tr><th>IPP_STATUS_ERROR_CUPS_AUTHENTICATION_CANCELED <span class="info">&#160;CUPS 1.5/macOS 10.7&#160;</span></th> <td class="description">cups-authentication-canceled - Authentication canceled by user </td></tr>
+ <tr><th>IPP_STATUS_ERROR_CUPS_PKI <span class="info">&#160;CUPS 1.5/macOS 10.7&#160;</span></th> <td class="description">cups-pki-error - Error negotiating a secure connection </td></tr>
+ <tr><th>IPP_STATUS_ERROR_CUPS_UPGRADE_REQUIRED <span class="info">&#160;CUPS 1.5/macOS 10.7&#160;</span></th> <td class="description">cups-upgrade-required - TLS upgrade required </td></tr>
+ <tr><th>IPP_STATUS_ERROR_DEVICE </th> <td class="description">server-error-device-error</td></tr>
+ <tr><th>IPP_STATUS_ERROR_DOCUMENT_ACCESS </th> <td class="description">client-error-document-access-error</td></tr>
+ <tr><th>IPP_STATUS_ERROR_DOCUMENT_FORMAT_ERROR </th> <td class="description">client-error-document-format-error</td></tr>
+ <tr><th>IPP_STATUS_ERROR_DOCUMENT_FORMAT_NOT_SUPPORTED </th> <td class="description">client-error-document-format-not-supported</td></tr>
+ <tr><th>IPP_STATUS_ERROR_DOCUMENT_PASSWORD </th> <td class="description">client-error-document-password-error</td></tr>
+ <tr><th>IPP_STATUS_ERROR_DOCUMENT_PERMISSION </th> <td class="description">client-error-document-permission-error</td></tr>
+ <tr><th>IPP_STATUS_ERROR_DOCUMENT_SECURITY </th> <td class="description">client-error-document-security-error</td></tr>
+ <tr><th>IPP_STATUS_ERROR_DOCUMENT_UNPRINTABLE </th> <td class="description">client-error-document-unprintable-error</td></tr>
+ <tr><th>IPP_STATUS_ERROR_FORBIDDEN </th> <td class="description">client-error-forbidden</td></tr>
+ <tr><th>IPP_STATUS_ERROR_GONE </th> <td class="description">client-error-gone</td></tr>
+ <tr><th>IPP_STATUS_ERROR_IGNORED_ALL_SUBSCRIPTIONS </th> <td class="description">client-error-ignored-all-subscriptions</td></tr>
+ <tr><th>IPP_STATUS_ERROR_INTERNAL </th> <td class="description">server-error-internal-error</td></tr>
+ <tr><th>IPP_STATUS_ERROR_JOB_CANCELED </th> <td class="description">server-error-job-canceled</td></tr>
+ <tr><th>IPP_STATUS_ERROR_MULTIPLE_JOBS_NOT_SUPPORTED </th> <td class="description">server-error-multiple-document-jobs-not-supported</td></tr>
+ <tr><th>IPP_STATUS_ERROR_NOT_ACCEPTING_JOBS </th> <td class="description">server-error-not-accepting-jobs</td></tr>
+ <tr><th>IPP_STATUS_ERROR_NOT_AUTHENTICATED </th> <td class="description">client-error-not-authenticated</td></tr>
+ <tr><th>IPP_STATUS_ERROR_NOT_AUTHORIZED </th> <td class="description">client-error-not-authorized</td></tr>
+ <tr><th>IPP_STATUS_ERROR_NOT_FETCHABLE </th> <td class="description">client-error-not-fetchable</td></tr>
+ <tr><th>IPP_STATUS_ERROR_NOT_FOUND </th> <td class="description">client-error-not-found</td></tr>
+ <tr><th>IPP_STATUS_ERROR_NOT_POSSIBLE </th> <td class="description">client-error-not-possible</td></tr>
+ <tr><th>IPP_STATUS_ERROR_OPERATION_NOT_SUPPORTED </th> <td class="description">server-error-operation-not-supported</td></tr>
+ <tr><th>IPP_STATUS_ERROR_PRINTER_IS_DEACTIVATED </th> <td class="description">server-error-printer-is-deactivated</td></tr>
+ <tr><th>IPP_STATUS_ERROR_REQUEST_ENTITY </th> <td class="description">client-error-request-entity-too-large</td></tr>
+ <tr><th>IPP_STATUS_ERROR_REQUEST_VALUE </th> <td class="description">client-error-request-value-too-long</td></tr>
+ <tr><th>IPP_STATUS_ERROR_SERVICE_UNAVAILABLE </th> <td class="description">server-error-service-unavailable</td></tr>
+ <tr><th>IPP_STATUS_ERROR_TEMPORARY </th> <td class="description">server-error-temporary-error</td></tr>
+ <tr><th>IPP_STATUS_ERROR_TIMEOUT </th> <td class="description">client-error-timeout</td></tr>
+ <tr><th>IPP_STATUS_ERROR_TOO_MANY_DOCUMENTS </th> <td class="description">server-error-too-many-documents</td></tr>
+ <tr><th>IPP_STATUS_ERROR_TOO_MANY_JOBS </th> <td class="description">server-error-too-many-jobs</td></tr>
+ <tr><th>IPP_STATUS_ERROR_TOO_MANY_SUBSCRIPTIONS </th> <td class="description">client-error-too-many-subscriptions</td></tr>
+ <tr><th>IPP_STATUS_ERROR_URI_SCHEME </th> <td class="description">client-error-uri-scheme-not-supported</td></tr>
+ <tr><th>IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED </th> <td class="description">server-error-version-not-supported</td></tr>
+ <tr><th>IPP_STATUS_OK </th> <td class="description">successful-ok</td></tr>
+ <tr><th>IPP_STATUS_OK_CONFLICTING </th> <td class="description">successful-ok-conflicting-attributes</td></tr>
+ <tr><th>IPP_STATUS_OK_EVENTS_COMPLETE </th> <td class="description">successful-ok-events-complete</td></tr>
+ <tr><th>IPP_STATUS_OK_IGNORED_OR_SUBSTITUTED </th> <td class="description">successful-ok-ignored-or-substituted-attributes</td></tr>
+ <tr><th>IPP_STATUS_OK_IGNORED_SUBSCRIPTIONS </th> <td class="description">successful-ok-ignored-subscriptions</td></tr>
+ <tr><th>IPP_STATUS_OK_TOO_MANY_EVENTS </th> <td class="description">successful-ok-too-many-events</td></tr>
+</tbody></table>
+ <h3 class="enumeration"><a id="ipp_tag_e">ipp_tag_e</a></h3>
+ <p class="description">Value and group tag values for attributes</p>
+ <h4 class="constants">Constants</h4>
+ <table class="list"><tbody>
+ <tr><th>IPP_TAG_ADMINDEFINE </th> <td class="description">Admin-defined value</td></tr>
+ <tr><th>IPP_TAG_BOOLEAN </th> <td class="description">Boolean value</td></tr>
+ <tr><th>IPP_TAG_CHARSET </th> <td class="description">Character set value</td></tr>
+ <tr><th>IPP_TAG_CUPS_INVALID </th> <td class="description">Invalid tag name for <a href="#ippTagValue"><code>ippTagValue</code></a></td></tr>
+ <tr><th>IPP_TAG_DATE </th> <td class="description">Date/time value</td></tr>
+ <tr><th>IPP_TAG_DEFAULT </th> <td class="description">Default value</td></tr>
+ <tr><th>IPP_TAG_DELETEATTR </th> <td class="description">Delete-attribute value</td></tr>
+ <tr><th>IPP_TAG_END </th> <td class="description">End-of-attributes</td></tr>
+ <tr><th>IPP_TAG_ENUM </th> <td class="description">Enumeration value</td></tr>
+ <tr><th>IPP_TAG_EVENT_NOTIFICATION </th> <td class="description">Event group</td></tr>
+ <tr><th>IPP_TAG_INTEGER </th> <td class="description">Integer value</td></tr>
+ <tr><th>IPP_TAG_JOB </th> <td class="description">Job group</td></tr>
+ <tr><th>IPP_TAG_KEYWORD </th> <td class="description">Keyword value</td></tr>
+ <tr><th>IPP_TAG_LANGUAGE </th> <td class="description">Language value</td></tr>
+ <tr><th>IPP_TAG_MIMETYPE </th> <td class="description">MIME media type value</td></tr>
+ <tr><th>IPP_TAG_NAME </th> <td class="description">Name value</td></tr>
+ <tr><th>IPP_TAG_NAMELANG </th> <td class="description">Name-with-language value</td></tr>
+ <tr><th>IPP_TAG_NOTSETTABLE </th> <td class="description">Not-settable value</td></tr>
+ <tr><th>IPP_TAG_NOVALUE </th> <td class="description">No-value value</td></tr>
+ <tr><th>IPP_TAG_OPERATION </th> <td class="description">Operation group</td></tr>
+ <tr><th>IPP_TAG_PRINTER </th> <td class="description">Printer group</td></tr>
+ <tr><th>IPP_TAG_RANGE </th> <td class="description">Range value</td></tr>
+ <tr><th>IPP_TAG_RESOLUTION </th> <td class="description">Resolution value</td></tr>
+ <tr><th>IPP_TAG_STRING </th> <td class="description">Octet string value</td></tr>
+ <tr><th>IPP_TAG_SUBSCRIPTION </th> <td class="description">Subscription group</td></tr>
+ <tr><th>IPP_TAG_TEXT </th> <td class="description">Text value</td></tr>
+ <tr><th>IPP_TAG_TEXTLANG </th> <td class="description">Text-with-language value</td></tr>
+ <tr><th>IPP_TAG_UNKNOWN </th> <td class="description">Unknown value</td></tr>
+ <tr><th>IPP_TAG_UNSUPPORTED_GROUP </th> <td class="description">Unsupported attributes group</td></tr>
+ <tr><th>IPP_TAG_UNSUPPORTED_VALUE </th> <td class="description">Unsupported value</td></tr>
+ <tr><th>IPP_TAG_URI </th> <td class="description">URI value</td></tr>
+ <tr><th>IPP_TAG_URISCHEME </th> <td class="description">URI scheme value</td></tr>
+ <tr><th>IPP_TAG_ZERO </th> <td class="description">Zero tag - used for separators</td></tr>
+</tbody></table>
+ </div>
+ </body>
+</html>
diff --git a/doc/help/man-ipptool.html b/doc/help/man-ipptool.html
index c1034f3..ef95bfe 100644
--- a/doc/help/man-ipptool.html
+++ b/doc/help/man-ipptool.html
@@ -210,10 +210,9 @@ Get a list of completed jobs for "myprinter":
</pre>
<h2 class="title"><a name="SEE_ALSO">See Also</a></h2>
<a href="man-ipptoolfile.html?TOPIC=Man+Pages"><b>ipptoolfile</b>(5),</a>
-CUPS Online Help (<a href="http://localhost:631/help)">http://localhost:631/help)</a>,
IANA IPP Registry (<a href="http://www.iana.org/assignments/ipp\-registrations)">http://www.iana.org/assignments/ipp\-registrations)</a>,
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>,
+RFC 8011 (<a href="http://tools.ietf.org/html/rfc8011)">http://tools.ietf.org/html/rfc8011)</a>,
<h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
Copyright &copy; 2007-2017 by Apple Inc.
diff --git a/doc/help/man-ipptoolfile.html b/doc/help/man-ipptoolfile.html
index 2ddd22e..2921bea 100644
--- a/doc/help/man-ipptoolfile.html
+++ b/doc/help/man-ipptoolfile.html
@@ -12,22 +12,42 @@ ipptoolfile - ipptool file format
<h2 class="title"><a name="DESCRIPTION">Description</a></h2>
The
<a href="man-ipptool.html?TOPIC=Man+Pages"><b>ipptool</b>(1)</a>
-program accepts free-form plain text files that describe one or more IPP requests. Comments start with the "#" character and continue to the end of the line. Each request is enclosed by curly braces, for example:
+program accepts free-form plain text files that describe one or more IPP requests.
+Comments start with the "#" character and continue to the end of the line.
+Each request is enclosed by curly braces, for example:
<pre class="man">
# This is a comment
{
# The name of the test
- NAME "Print PostScript File"
+ NAME "Print PDF File"
# The request to send
OPERATION Print-Job
+
GROUP operation-attributes-tag
ATTR charset attributes-charset utf-8
ATTR language attributes-natural-language en
ATTR uri printer-uri $uri
ATTR name requesting-user-name $user
- FILE testfile.ps
+ ATTR mimeMediaType document-format application/pdf
+
+ GROUP job-attributes-tag
+ ATTR collection media-col {
+ # US Letter plain paper from the "main" tray
+ MEMBER collection media-size {
+ MEMBER integer x-dimension 21590
+ MEMBER integer y-dimension 27940
+ }
+ MEMBER integer media-top-margin 423
+ MEMBER integer media-bottom-margin 423
+ MEMBER integer media-left-margin 423
+ MEMBER integer media-right-margin 423
+ MEMBER keyword media-source "main"
+ MEMBER keyword media-type "stationery"
+ }
+
+ FILE testfile.pdf
# The response to expect
STATUS successful-ok
@@ -36,10 +56,11 @@ program accepts free-form plain text files that describe one or more IPP request
}
{
# The name of the test
- NAME "Get Attributes of PostScript Job"
+ NAME "Wait for Job to Complete"
# The request to send
OPERATION Get-Job-Attributes
+
GROUP operation-attributes-tag
ATTR charset attributes-charset utf-8
ATTR language attributes-natural-language en
@@ -51,8 +72,12 @@ program accepts free-form plain text files that describe one or more IPP request
STATUS successful-ok
EXPECT job-id OF-TYPE integer WITH-VALUE $job-id
EXPECT job-uri OF-TYPE uri
- EXPECT job-state OF-TYPE enum WITH-VALUE 3,4,5,6,7,8,9
+ EXPECT job-state OF-TYPE enum WITH-VALUE >5 REPEAT-NO-MATCH
EXPECT job-originating-user-name OF-TYPE name WITH-VALUE "$user"
+
+ # Show the job state until completed...
+ DISPLAY job-state
+ DISPLAY job-state-reasons
}
</pre>
<h3><a name="TOP_LEVEL_DIRECTIVES">Top-level Directives</a></h3>
@@ -115,15 +140,20 @@ command-line. Support for content length requests is required for conformance wi
The following directives are understood within a <i>test</i>:
<dl class="man">
<dt><b>ATTR </b><i>tag attribute-name value(s)</i>
-<dd style="margin-left: 5.0em">Adds an attribute to the test request. Values are separated by the comma (",") character - escape commas using the "" character. Common attributes and values are listed in the IANA IPP registry - see references below.
+<dd style="margin-left: 5.0em">Adds an attribute to the test request.
+Values are separated by the comma (",") character - escape commas using the "" character.
+Common attributes and values are listed in the IANA IPP registry - see references below.
<dt><b>ATTR collection </b><i>attribute-name </i><b>{ MEMBER </b><i>tag member-name value(s) ... </i><b>}</b> [ <i>... </i><b>,{ </b><i>... </i><b>} </b>]
-<dd style="margin-left: 5.0em">Adds a collection attribute to the test request. Member attributes follow the same syntax as regular attributes and can themselves be nested collections. Multiple collection values can be supplied as needed, separated by commas.
+<dd style="margin-left: 5.0em">Adds a collection attribute to the test request.
+Member attributes follow the same syntax as regular attributes and can themselves be nested collections.
+Multiple collection values can be supplied as needed, separated by commas.
<dt><b>COMPRESSION deflate</b>
<dd style="margin-left: 5.0em"><dt><b>COMPRESSION gzip</b>
<dd style="margin-left: 5.0em"><dt><b>COMPRESSION none</b>
<dd style="margin-left: 5.0em">Uses the specified compression on the document data following the attributes in a Print-Job or Send-Document request.
-<dt><b>DELAY </b><i>seconds</i>
-<dd style="margin-left: 5.0em">Specifies a delay before this test will be run.
+<dt><b>DELAY </b><i>seconds</i>[<i>,repeat-seconds</i>]
+<dd style="margin-left: 5.0em">Specifies a delay in seconds before this test will be run.
+If two values are specified, the second value is used as the delay between repeated tests.
<dt><b>DISPLAY </b><i>attribute-name</i>
<dd style="margin-left: 5.0em">Specifies that value of the named attribute should be output as part of the
test report.
@@ -496,10 +526,9 @@ if any.
</dl>
<h2 class="title"><a name="SEE_ALSO">See Also</a></h2>
<a href="man-ipptool.html?TOPIC=Man+Pages"><b>ipptool</b>(1),</a>
-CUPS Online Help (<a href="http://localhost:631/help)">http://localhost:631/help)</a>,
IANA IPP Registry (<a href="http://www.iana.org/assignments/ipp-registrations)">http://www.iana.org/assignments/ipp-registrations)</a>,
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>)
+RFC 8011 (<a href="http://tools.ietf.org/html/rfc8011">http://tools.ietf.org/html/rfc8011</a>)
<h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
Copyright &copy; 2007-2017 by Apple Inc.
diff --git a/doc/help/man-lpstat.html b/doc/help/man-lpstat.html
index 391ce44..106b9f5 100644
--- a/doc/help/man-lpstat.html
+++ b/doc/help/man-lpstat.html
@@ -36,6 +36,8 @@ lpstat - print cups status information
] ] [
<b>-d</b>
] [
+<b>-e</b>
+] [
<b>-o</b>
[
<i>destination(s)</i>
@@ -85,6 +87,8 @@ If no printers are specified then all printers are listed.
If no classes are specified then all classes are listed.
<dt><b>-d</b>
<dd style="margin-left: 5.0em">Shows the current default destination.
+<dt><b>-e</b>
+<dd style="margin-left: 5.0em">Shows all available destinations on the local network.
<dt><b>-h </b><i>server</i>[<b>:</b><i>port</i>]
<dd style="margin-left: 5.0em">Specifies an alternate server.
<dt><b>-l</b>
@@ -113,7 +117,7 @@ If no printers are specified then all printers are listed.
<h2 class="title"><a name="CONFORMING_TO">Conforming To</a></h2>
Unlike the System V printing system, CUPS allows printer names to contain any printable character except SPACE, TAB, "/", and "#".
Also, printer and class names are <i>not</i> case-sensitive.
-<p>The <i>-h</i>, <i>-E</i>, <i>-U</i>, and <i>-W</i> options are unique to CUPS.
+<p>The <i>-h</i>, <i>-e</i>, <i>-E</i>, <i>-U</i>, and <i>-W</i> options are unique to CUPS.
<p>The Solaris <i>-f</i>, <i>-P</i>, and <i>-S</i> options are silently ignored.
<h2 class="title"><a name="SEE_ALSO">See Also</a></h2>
<a href="man-cancel.html?TOPIC=Man+Pages"><b>cancel</b>(1),</a>
diff --git a/doc/help/postscript-driver.html b/doc/help/postscript-driver.html
index a996bac..5d0239c 100644
--- a/doc/help/postscript-driver.html
+++ b/doc/help/postscript-driver.html
@@ -1,12 +1,15 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!doctype html>
<html>
<!-- SECTION: Programming -->
-<head>
- <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">
-<style type="text/css"><!--
+ <head>
+ <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.11">
+ <meta name="author" content="Unknown">
+ <meta name="copyright" content="Unknown">
+ <meta name="version" content="0.0">
+ <style type="text/css"><!--
BODY {
font-family: lucida grande, geneva, helvetica, arial, sans-serif;
}
@@ -349,9 +352,8 @@ div.contents ul.subcontents li {
text-indent: -1em;
}
--></style>
-</head>
-<body>
-<div class='body'>
+ </head>
+ <body>
<!--
PostScript printer driver documentation for CUPS.
@@ -382,16 +384,19 @@ div.contents ul.subcontents li {
</tr>
</tbody>
</table></div>
-<h2 class="title">Contents</h2>
-<ul class="contents">
-<li><a href="#BASICS">Printer Driver Basics</a></li>
-<li><a href="#CREATING">Creating New PPD Files</a><ul class="subcontents">
- <li><a href="#IMPORT">Importing Existing PPD Files</a></li>
-</ul></li>
-<li><a href="#FILTERS">Using Custom Filters</a></li>
-<li><a href="#COLOR">Implementing Color Management</a></li>
-<li><a href="#MACOSX">Adding macOS Features</a></li>
-</ul>
+ <div class="contents">
+ <h2 class="title">Contents</h2>
+ <ul class="contents">
+ <li><a href="#BASICS">Printer Driver Basics</a></li>
+ <li><a href="#CREATING">Creating New PPD Files</a><ul class="subcontents">
+ <li><a href="#IMPORT">Importing Existing PPD Files</a></li>
+ </ul></li>
+ <li><a href="#FILTERS">Using Custom Filters</a></li>
+ <li><a href="#COLOR">Implementing Color Management</a></li>
+ <li><a href="#MACOSX">Adding macOS Features</a></li>
+ </ul>
+ </div>
+ <div class="body">
<h2 class='title'><a name='BASICS'>Printer Driver Basics</a></h2>
<p>A CUPS PostScript printer driver consists of a PostScript Printer Description (PPD) file that describes the features and capabilities of the device, zero or more <em>filter</em> programs that prepare print data for the device, and zero or more support files for color management, online help, and so forth. The PPD file includes references to all of the filters and support files used by the driver.</p>
@@ -668,6 +673,6 @@ information file.</P>
<a href='ref-ppdcfile.html#Attribute'>Attribute</a> APPrinterIconPath "" /Library/Printers/Vendor/filename.icns
<a href='ref-ppdcfile.html#Attribute'>Attribute</a> APPrinterPreset "name/text" "*option choice ..."
</pre>
-</div>
-</body>
+ </div>
+ </body>
</html>
diff --git a/doc/help/ppd-compiler.html b/doc/help/ppd-compiler.html
index d6a457f..2807e85 100644
--- a/doc/help/ppd-compiler.html
+++ b/doc/help/ppd-compiler.html
@@ -1,12 +1,15 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!doctype html>
<html>
<!-- SECTION: Programming -->
-<head>
- <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">
-<style type="text/css"><!--
+ <head>
+ <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.11">
+ <meta name="author" content="Unknown">
+ <meta name="copyright" content="Unknown">
+ <meta name="version" content="0.0">
+ <style type="text/css"><!--
BODY {
font-family: lucida grande, geneva, helvetica, arial, sans-serif;
}
@@ -349,9 +352,8 @@ div.contents ul.subcontents li {
text-indent: -1em;
}
--></style>
-</head>
-<body>
-<div class='body'>
+ </head>
+ <body>
<!--
PPD compiler documentation for CUPS.
@@ -390,23 +392,26 @@ that describe the features and capabilities of one or more printers.</P>
</tr>
</tbody>
</table></div>
-<h2 class="title">Contents</h2>
-<ul class="contents">
-<li><a href="#BASICS">The Basics</a></li>
-<li><a href="#DRV">Driver Information Files</a><ul class="subcontents">
- <li><a href="#SIMPLE">A Simple Example</a></li>
- <li><a href="#GROUPING">Grouping and Inheritance</a></li>
- <li><a href="#COLOR">Color Support</a></li>
- <li><a href="#OPTIONS">Defining Custom Options and Option Groups</a></li>
- <li><a href="#DEFINE">Defining Constants</a></li>
- <li><a href="#CONDITIONAL">Conditional Statements</a></li>
- <li><a href="#CONSTRAINTS">Defining Constraints</a></li>
-</ul></li>
-<li><a href="#LOCALIZATION">Localization</a><ul class="subcontents">
- <li><a href="#PPDPO">The ppdpo Utility</a></li>
- <li><a href="#PPDC_CATALOG">Using Message Catalogs with the PPD Compiler</a></li>
-</ul></li>
-</ul>
+ <div class="contents">
+ <h2 class="title">Contents</h2>
+ <ul class="contents">
+ <li><a href="#BASICS">The Basics</a></li>
+ <li><a href="#DRV">Driver Information Files</a><ul class="subcontents">
+ <li><a href="#SIMPLE">A Simple Example</a></li>
+ <li><a href="#GROUPING">Grouping and Inheritance</a></li>
+ <li><a href="#COLOR">Color Support</a></li>
+ <li><a href="#OPTIONS">Defining Custom Options and Option Groups</a></li>
+ <li><a href="#DEFINE">Defining Constants</a></li>
+ <li><a href="#CONDITIONAL">Conditional Statements</a></li>
+ <li><a href="#CONSTRAINTS">Defining Constraints</a></li>
+ </ul></li>
+ <li><a href="#LOCALIZATION">Localization</a><ul class="subcontents">
+ <li><a href="#PPDPO">The ppdpo Utility</a></li>
+ <li><a href="#PPDC_CATALOG">Using Message Catalogs with the PPD Compiler</a></li>
+ </ul></li>
+ </ul>
+ </div>
+ <div class="body">
<h2 class='title'><a name='BASICS'>The Basics</a></h2>
<P>The PPD compiler, <a href='man-ppdc.html'><code>ppdc(1)</code></a>, is a
@@ -1290,6 +1295,6 @@ ppdc -l de -d ppd/de mydrivers.drv
</pre>
<p>to generate German PPD files.</p>
-</div>
-</body>
+ </div>
+ </body>
</html>
diff --git a/doc/help/raster-driver.html b/doc/help/raster-driver.html
index d44e45c..3a6f5d8 100644
--- a/doc/help/raster-driver.html
+++ b/doc/help/raster-driver.html
@@ -1,12 +1,15 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!doctype html>
<html>
<!-- SECTION: Programming -->
-<head>
- <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">
-<style type="text/css"><!--
+ <head>
+ <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.11">
+ <meta name="author" content="Unknown">
+ <meta name="copyright" content="Unknown">
+ <meta name="version" content="0.0">
+ <style type="text/css"><!--
BODY {
font-family: lucida grande, geneva, helvetica, arial, sans-serif;
}
@@ -349,9 +352,8 @@ div.contents ul.subcontents li {
text-indent: -1em;
}
--></style>
-</head>
-<body>
-<div class='body'>
+ </head>
+ <body>
<!--
Raster printer driver documentation for CUPS.
@@ -382,14 +384,17 @@ div.contents ul.subcontents li {
</tr>
</tbody>
</table></div>
-<h2 class="title">Contents</h2>
-<ul class="contents">
-<li><a href="#BASICS">Printer Driver Basics</a></li>
-<li><a href="#CREATING">Creating New PPD Files</a></li>
-<li><a href="#FILTERS">Using Filters</a></li>
-<li><a href="#COLOR">Implementing Color Management</a></li>
-<li><a href="#MACOSX">Adding macOS Features</a></li>
-</ul>
+ <div class="contents">
+ <h2 class="title">Contents</h2>
+ <ul class="contents">
+ <li><a href="#BASICS">Printer Driver Basics</a></li>
+ <li><a href="#CREATING">Creating New PPD Files</a></li>
+ <li><a href="#FILTERS">Using Filters</a></li>
+ <li><a href="#COLOR">Implementing Color Management</a></li>
+ <li><a href="#MACOSX">Adding macOS Features</a></li>
+ </ul>
+ </div>
+ <div class="body">
<h2 class='title'><a name='BASICS'>Printer Driver Basics</a></h2>
<p>A CUPS raster printer driver consists of a PostScript Printer Description (PPD) file that describes the features and capabilities of the device, one or more <em>filter</em> programs that prepare print data for the device, and zero or more support files for color management, online help, and so forth. The PPD file includes references to all of the filters and support files used by the driver.</p>
@@ -584,6 +589,6 @@ div.contents ul.subcontents li {
<a href='ref-ppdcfile.html#Attribute'>Attribute</a> APPrinterIconPath "" /Library/Printers/Vendor/filename.icns
<a href='ref-ppdcfile.html#Attribute'>Attribute</a> APPrinterPreset "name/text" "*option choice ..."
</pre>
-</div>
-</body>
+ </div>
+ </body>
</html>
diff --git a/doc/help/spec-ppd.html b/doc/help/spec-ppd.html
index 16f4cf3..06f5769 100644
--- a/doc/help/spec-ppd.html
+++ b/doc/help/spec-ppd.html
@@ -1,12 +1,15 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!doctype html>
<html>
<!-- SECTION: Specifications -->
-<head>
- <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">
-<style type="text/css"><!--
+ <head>
+ <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.11">
+ <meta name="author" content="Unknown">
+ <meta name="copyright" content="Unknown">
+ <meta name="version" content="0.0">
+ <style type="text/css"><!--
BODY {
font-family: lucida grande, geneva, helvetica, arial, sans-serif;
}
@@ -349,9 +352,8 @@ div.contents ul.subcontents li {
text-indent: -1em;
}
--></style>
-</head>
-<body>
-<div class='body'>
+ </head>
+ <body>
<!--
PPD extension documentation for CUPS.
@@ -382,78 +384,81 @@ div.contents ul.subcontents li {
</tr>
</tbody>
</table></div>
-<h2 class="title">Contents</h2>
-<ul class="contents">
-<li><a href="#SYNTAX">PPD File Syntax</a></li>
-<li><a href="#AUTOCONFIG">Auto-Configuration</a><ul class="subcontents">
- <li><a href="#APAutoSetupTool">APAutoSetupTool</a></li>
- <li><a href="#QUERYKEYWORD">?MainKeyword</a></li>
- <li><a href="#OID">OIDMainKeyword</a></li>
-</ul></li>
-<li><a href="#PROFILES">Color Profiles</a><ul class="subcontents">
- <li><a href="#cupsColorProfile">cupsColorProfile</a></li>
- <li><a href="#cupsICCProfile">cupsICCProfile</a></li>
- <li><a href="#APCustom">Custom Color Matching Support</a></li>
-</ul></li>
-<li><a href="#CONSTRAINTS">Constraints</a><ul class="subcontents">
- <li><a href="#cupsUIConstraints">cupsUIConstraints</a></li>
- <li><a href="#cupsUIResolver">cupsUIResolver</a></li>
-</ul></li>
-<li><a href="#I18N">Globalized PPD Support</a></li>
-<li><a href="#OPTIONS">CUPS 1.3/macOS 10.6Custom Options</a></li>
-<li><a href="#RASTERPS">Writing PostScript Option Commands for Raster Drivers</a></li>
-<li><a href="#MEDIA">Media Keywords</a><ul class="subcontents">
- <li><a href="#cupsMediaQualifier2">cupsMediaQualifier2</a></li>
- <li><a href="#cupsMediaQualifier3">cupsMediaQualifier3</a></li>
- <li><a href="#cupsMinSize">cupsMinSize</a></li>
- <li><a href="#cupsMaxSize">cupsMaxSize</a></li>
- <li><a href="#cupsPageSizeCategory">cupsPageSizeCategory</a></li>
-</ul></li>
-<li><a href="#ATTRIBUTES">General Attributes</a><ul class="subcontents">
- <li><a href="#cupsBackSide">cupsBackSide</a></li>
- <li><a href="#cupsCommands">cupsCommands</a></li>
- <li><a href="#cupsEvenDuplex">cupsEvenDuplex</a></li>
- <li><a href="#cupsFax">cupsFax</a></li>
- <li><a href="#cupsFilter">cupsFilter</a></li>
- <li><a href="#cupsFilter2">cupsFilter2</a></li>
- <li><a href="#cupsFlipDuplex">cupsFlipDuplex</a></li>
- <li><a href="#cupsIPPFinishings">cupsIPPFinishings</a></li>
- <li><a href="#cupsIPPReason">cupsIPPReason</a></li>
- <li><a href="#cupsIPPSupplies">cupsIPPSupplies</a></li>
- <li><a href="#cupsJobAccountId">cupsJobAccountId</a></li>
- <li><a href="#cupsJobAccountingUserId">cupsJobAccountingUserId</a></li>
- <li><a href="#cupsJobPassword">cupsJobPassword</a></li>
- <li><a href="#cupsLanguages">cupsLanguages</a></li>
- <li><a href="#cupsMandatory">cupsMandatory</a></li>
- <li><a href="#cupsManualCopies">cupsManualCopies</a></li>
- <li><a href="#cupsMarkerName">cupsMarkerName</a></li>
- <li><a href="#cupsMarkerNotice">cupsMarkerNotice</a></li>
- <li><a href="#cupsMaxCopies">cupsMaxCopies</a></li>
- <li><a href="#cupsModelNumber">cupsModelNumber</a></li>
- <li><a href="#cupsPJLCharset">cupsPJLCharset</a></li>
- <li><a href="#cupsPJLDisplay">cupsPJLDisplay</a></li>
- <li><a href="#cupsPortMonitor">cupsPortMonitor</a></li>
- <li><a href="#cupsPreFilter">cupsPreFilter</a></li>
- <li><a href="#cupsPrintQuality">cupsPrintQuality</a></li>
- <li><a href="#cupsSingleFile">cupsSingleFile</a></li>
- <li><a href="#cupsSNMPSupplies">cupsSNMPSupplies</a></li>
- <li><a href="#cupsVersion">cupsVersion</a></li>
- <li><a href="#JCLToPDFInterpreter">JCLToPDFInterpreter</a></li>
-</ul></li>
-<li><a href="#MACOSX">macOS Attributes</a><ul class="subcontents">
- <li><a href="#APDialogExtension">APDialogExtension</a></li>
- <li><a href="#APDuplexRequiresFlippedMargin">APDuplexRequiresFlippedMargin</a></li>
- <li><a href="#APHelpBook">APHelpBook</a></li>
- <li><a href="#APICADriver">APICADriver</a></li>
- <li><a href="#APPrinterIconPath">APPrinterIconPath</a></li>
- <li><a href="#APPrinterLowInkTool">APPrinterLowInkTool</a></li>
- <li><a href="#APPrinterPreset">APPrinterPreset</a></li>
- <li><a href="#APPrinterUtilityPath">APPrinterUtilityPath</a></li>
- <li><a href="#APScannerOnly">APScannerOnly</a></li>
- <li><a href="#APScanAppBundleID">APScanAppBundleID</a></li>
-</ul></li>
-<li><a href="#HISTORY">Change History</a></li>
-</ul>
+ <div class="contents">
+ <h2 class="title">Contents</h2>
+ <ul class="contents">
+ <li><a href="#SYNTAX">PPD File Syntax</a></li>
+ <li><a href="#AUTOCONFIG">Auto-Configuration</a><ul class="subcontents">
+ <li><a href="#APAutoSetupTool">APAutoSetupTool</a></li>
+ <li><a href="#QUERYKEYWORD">?MainKeyword</a></li>
+ <li><a href="#OID">OIDMainKeyword</a></li>
+ </ul></li>
+ <li><a href="#PROFILES">Color Profiles</a><ul class="subcontents">
+ <li><a href="#cupsColorProfile">cupsColorProfile</a></li>
+ <li><a href="#cupsICCProfile">cupsICCProfile</a></li>
+ <li><a href="#APCustom">Custom Color Matching Support</a></li>
+ </ul></li>
+ <li><a href="#CONSTRAINTS">Constraints</a><ul class="subcontents">
+ <li><a href="#cupsUIConstraints">cupsUIConstraints</a></li>
+ <li><a href="#cupsUIResolver">cupsUIResolver</a></li>
+ </ul></li>
+ <li><a href="#I18N">Globalized PPD Support</a></li>
+ <li><a href="#OPTIONS">&lt;span class=&quot;info&quot;&gt;CUPS 1.3/macOS 10.6&lt;/span&gt;Custom Options</a></li>
+ <li><a href="#RASTERPS">Writing PostScript Option Commands for Raster Drivers</a></li>
+ <li><a href="#MEDIA">Media Keywords</a><ul class="subcontents">
+ <li><a href="#cupsMediaQualifier2">cupsMediaQualifier2</a></li>
+ <li><a href="#cupsMediaQualifier3">cupsMediaQualifier3</a></li>
+ <li><a href="#cupsMinSize">cupsMinSize</a></li>
+ <li><a href="#cupsMaxSize">cupsMaxSize</a></li>
+ <li><a href="#cupsPageSizeCategory">cupsPageSizeCategory</a></li>
+ </ul></li>
+ <li><a href="#ATTRIBUTES">General Attributes</a><ul class="subcontents">
+ <li><a href="#cupsBackSide">cupsBackSide</a></li>
+ <li><a href="#cupsCommands">cupsCommands</a></li>
+ <li><a href="#cupsEvenDuplex">cupsEvenDuplex</a></li>
+ <li><a href="#cupsFax">cupsFax</a></li>
+ <li><a href="#cupsFilter">cupsFilter</a></li>
+ <li><a href="#cupsFilter2">cupsFilter2</a></li>
+ <li><a href="#cupsFlipDuplex">cupsFlipDuplex</a></li>
+ <li><a href="#cupsIPPFinishings">cupsIPPFinishings</a></li>
+ <li><a href="#cupsIPPReason">cupsIPPReason</a></li>
+ <li><a href="#cupsIPPSupplies">cupsIPPSupplies</a></li>
+ <li><a href="#cupsJobAccountId">cupsJobAccountId</a></li>
+ <li><a href="#cupsJobAccountingUserId">cupsJobAccountingUserId</a></li>
+ <li><a href="#cupsJobPassword">cupsJobPassword</a></li>
+ <li><a href="#cupsLanguages">cupsLanguages</a></li>
+ <li><a href="#cupsMandatory">cupsMandatory</a></li>
+ <li><a href="#cupsManualCopies">cupsManualCopies</a></li>
+ <li><a href="#cupsMarkerName">cupsMarkerName</a></li>
+ <li><a href="#cupsMarkerNotice">cupsMarkerNotice</a></li>
+ <li><a href="#cupsMaxCopies">cupsMaxCopies</a></li>
+ <li><a href="#cupsModelNumber">cupsModelNumber</a></li>
+ <li><a href="#cupsPJLCharset">cupsPJLCharset</a></li>
+ <li><a href="#cupsPJLDisplay">cupsPJLDisplay</a></li>
+ <li><a href="#cupsPortMonitor">cupsPortMonitor</a></li>
+ <li><a href="#cupsPreFilter">cupsPreFilter</a></li>
+ <li><a href="#cupsPrintQuality">cupsPrintQuality</a></li>
+ <li><a href="#cupsSingleFile">cupsSingleFile</a></li>
+ <li><a href="#cupsSNMPSupplies">cupsSNMPSupplies</a></li>
+ <li><a href="#cupsVersion">cupsVersion</a></li>
+ <li><a href="#JCLToPDFInterpreter">JCLToPDFInterpreter</a></li>
+ </ul></li>
+ <li><a href="#MACOSX">macOS Attributes</a><ul class="subcontents">
+ <li><a href="#APDialogExtension">APDialogExtension</a></li>
+ <li><a href="#APDuplexRequiresFlippedMargin">APDuplexRequiresFlippedMargin</a></li>
+ <li><a href="#APHelpBook">APHelpBook</a></li>
+ <li><a href="#APICADriver">APICADriver</a></li>
+ <li><a href="#APPrinterIconPath">APPrinterIconPath</a></li>
+ <li><a href="#APPrinterLowInkTool">APPrinterLowInkTool</a></li>
+ <li><a href="#APPrinterPreset">APPrinterPreset</a></li>
+ <li><a href="#APPrinterUtilityPath">APPrinterUtilityPath</a></li>
+ <li><a href="#APScannerOnly">APScannerOnly</a></li>
+ <li><a href="#APScanAppBundleID">APScanAppBundleID</a></li>
+ </ul></li>
+ <li><a href="#HISTORY">Change History</a></li>
+ </ul>
+ </div>
+ <div class="body">
<h2 class='title'><a name='SYNTAX'>PPD File Syntax</a></h2>
<p>The PPD format is text-based and uses lines of up to 255 characters terminated by a carriage return, linefeed, or combination of carriage return and line feed. The following ABNF definition [<a href="http://tools.ietf.org/html/rfc5234" target="_blank">RFC5234</a>] defines the general format of lines in a PPD file:</p>
@@ -2480,6 +2485,6 @@ the device.</p>
<li>Added <tt>cupsProtocol</tt> keyword</li>
</ul>
-</div>
-</body>
+ </div>
+ </body>
</html>
diff --git a/locale/cups.pot b/locale/cups.pot
index 8096e48..d3444d5 100644
--- a/locale/cups.pot
+++ b/locale/cups.pot
@@ -28,7 +28,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 1.6\n"
"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2017-03-11 10:02-0500\n"
+"POT-Creation-Date: 2017-06-19 09:12-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"
@@ -37,12 +37,12 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: systemv/lpstat.c:1861 systemv/lpstat.c:1980
+#: systemv/lpstat.c:1896 systemv/lpstat.c:2015
msgid "\t\t(all)"
msgstr ""
-#: systemv/lpstat.c:1864 systemv/lpstat.c:1867 systemv/lpstat.c:1983
-#: systemv/lpstat.c:1986
+#: systemv/lpstat.c:1899 systemv/lpstat.c:1902 systemv/lpstat.c:2018
+#: systemv/lpstat.c:2021
msgid "\t\t(none)"
msgstr ""
@@ -51,99 +51,99 @@ msgstr ""
msgid "\t%d entries"
msgstr ""
-#: systemv/lpstat.c:781 systemv/lpstat.c:797
+#: systemv/lpstat.c:816 systemv/lpstat.c:832
#, c-format
msgid "\t%s"
msgstr ""
-#: systemv/lpstat.c:1842 systemv/lpstat.c:1961
+#: systemv/lpstat.c:1877 systemv/lpstat.c:1996
msgid "\tAfter fault: continue"
msgstr ""
-#: systemv/lpstat.c:1469 systemv/lpstat.c:1815 systemv/lpstat.c:1935
+#: systemv/lpstat.c:1504 systemv/lpstat.c:1850 systemv/lpstat.c:1970
#, c-format
msgid "\tAlerts: %s"
msgstr ""
-#: systemv/lpstat.c:1865 systemv/lpstat.c:1984
+#: systemv/lpstat.c:1900 systemv/lpstat.c:2019
msgid "\tBanner required"
msgstr ""
-#: systemv/lpstat.c:1866 systemv/lpstat.c:1985
+#: systemv/lpstat.c:1901 systemv/lpstat.c:2020
msgid "\tCharset sets:"
msgstr ""
-#: systemv/lpstat.c:1834 systemv/lpstat.c:1953
+#: systemv/lpstat.c:1869 systemv/lpstat.c:1988
msgid "\tConnection: direct"
msgstr ""
-#: systemv/lpstat.c:1825 systemv/lpstat.c:1945
+#: systemv/lpstat.c:1860 systemv/lpstat.c:1980
msgid "\tConnection: remote"
msgstr ""
-#: systemv/lpstat.c:1791 systemv/lpstat.c:1911
+#: systemv/lpstat.c:1826 systemv/lpstat.c:1946
msgid "\tContent types: any"
msgstr ""
-#: systemv/lpstat.c:1869 systemv/lpstat.c:1988
+#: systemv/lpstat.c:1904 systemv/lpstat.c:2023
msgid "\tDefault page size:"
msgstr ""
-#: systemv/lpstat.c:1868 systemv/lpstat.c:1987
+#: systemv/lpstat.c:1903 systemv/lpstat.c:2022
msgid "\tDefault pitch:"
msgstr ""
-#: systemv/lpstat.c:1870 systemv/lpstat.c:1989
+#: systemv/lpstat.c:1905 systemv/lpstat.c:2024
msgid "\tDefault port settings:"
msgstr ""
-#: systemv/lpstat.c:1797 systemv/lpstat.c:1917
+#: systemv/lpstat.c:1832 systemv/lpstat.c:1952
#, c-format
msgid "\tDescription: %s"
msgstr ""
-#: systemv/lpstat.c:1790 systemv/lpstat.c:1910
+#: systemv/lpstat.c:1825 systemv/lpstat.c:1945
msgid "\tForm mounted:"
msgstr ""
-#: systemv/lpstat.c:1863 systemv/lpstat.c:1982
+#: systemv/lpstat.c:1898 systemv/lpstat.c:2017
msgid "\tForms allowed:"
msgstr ""
-#: systemv/lpstat.c:1829 systemv/lpstat.c:1949
+#: systemv/lpstat.c:1864 systemv/lpstat.c:1984
#, c-format
msgid "\tInterface: %s.ppd"
msgstr ""
-#: systemv/lpstat.c:1838 systemv/lpstat.c:1957
+#: systemv/lpstat.c:1873 systemv/lpstat.c:1992
#, c-format
msgid "\tInterface: %s/ppd/%s.ppd"
msgstr ""
-#: systemv/lpstat.c:1820 systemv/lpstat.c:1940
+#: systemv/lpstat.c:1855 systemv/lpstat.c:1975
#, c-format
msgid "\tLocation: %s"
msgstr ""
-#: systemv/lpstat.c:1841 systemv/lpstat.c:1960
+#: systemv/lpstat.c:1876 systemv/lpstat.c:1995
msgid "\tOn fault: no alert"
msgstr ""
-#: systemv/lpstat.c:1792 systemv/lpstat.c:1912
+#: systemv/lpstat.c:1827 systemv/lpstat.c:1947
msgid "\tPrinter types: unknown"
msgstr ""
-#: systemv/lpstat.c:1452
+#: systemv/lpstat.c:1487
#, c-format
msgid "\tStatus: %s"
msgstr ""
-#: systemv/lpstat.c:1846 systemv/lpstat.c:1860 systemv/lpstat.c:1965
-#: systemv/lpstat.c:1979
+#: systemv/lpstat.c:1881 systemv/lpstat.c:1895 systemv/lpstat.c:2000
+#: systemv/lpstat.c:2014
msgid "\tUsers allowed:"
msgstr ""
-#: systemv/lpstat.c:1853 systemv/lpstat.c:1972
+#: systemv/lpstat.c:1888 systemv/lpstat.c:2007
msgid "\tUsers denied:"
msgstr ""
@@ -168,7 +168,7 @@ msgstr ""
msgid "\tprinting is enabled"
msgstr ""
-#: systemv/lpstat.c:1472
+#: systemv/lpstat.c:1507
#, c-format
msgid "\tqueued for %s"
msgstr ""
@@ -181,7 +181,7 @@ msgstr ""
msgid "\tqueuing is enabled"
msgstr ""
-#: systemv/lpstat.c:1783 systemv/lpstat.c:1903
+#: systemv/lpstat.c:1818 systemv/lpstat.c:1938
msgid "\treason unknown"
msgstr ""
@@ -1018,7 +1018,7 @@ msgstr ""
msgid " --false Always false."
msgstr ""
-#: test/ipptool.c:4931
+#: test/ipptool.c:5054
msgid " --help Show help."
msgstr ""
@@ -1078,7 +1078,7 @@ msgstr ""
msgid " --remote True if service is remote."
msgstr ""
-#: test/ipptool.c:4932
+#: test/ipptool.c:5055
msgid ""
" --stop-after-include-error\n"
" Stop tests after a failed INCLUDE."
@@ -1104,19 +1104,19 @@ msgstr ""
msgid " --version Show program version."
msgstr ""
-#: test/ipptool.c:4934
+#: test/ipptool.c:5057
msgid " --version Show version."
msgstr ""
-#: test/ippfind.c:2752 test/ipptool.c:4935
+#: test/ippfind.c:2752 test/ipptool.c:5058
msgid " -4 Connect using IPv4."
msgstr ""
-#: test/ippfind.c:2753 test/ipptool.c:4936
+#: test/ippfind.c:2753 test/ipptool.c:5059
msgid " -6 Connect using IPv6."
msgstr ""
-#: test/ipptool.c:4937
+#: test/ipptool.c:5060
msgid " -C Send requests using chunking (default)."
msgstr ""
@@ -1132,11 +1132,11 @@ msgstr ""
msgid " -E Encrypt the connection."
msgstr ""
-#: test/ipptool.c:4939
-msgid " -E Test with HTTP Upgrade to TLS."
+#: test/ipptool.c:5062
+msgid " -E Test with encryption using HTTP Upgrade to TLS."
msgstr ""
-#: scheduler/main.c:2051
+#: scheduler/main.c:2084
msgid " -F Run in the foreground but detach from console."
msgstr ""
@@ -1144,7 +1144,7 @@ msgstr ""
msgid " -H samba-server Use the named SAMBA server."
msgstr ""
-#: test/ipptool.c:4941
+#: test/ipptool.c:5063
msgid " -I Ignore errors."
msgstr ""
@@ -1156,11 +1156,11 @@ msgstr ""
msgid " -I {filename,filters,none,profiles}"
msgstr ""
-#: test/ipptool.c:4942
+#: test/ipptool.c:5064
msgid " -L Send requests using content-length."
msgstr ""
-#: test/ipptool.c:4944
+#: test/ipptool.c:5065
msgid " -P filename.plist Produce XML plist to a file and test report to standard output."
msgstr ""
@@ -1176,15 +1176,15 @@ msgstr ""
msgid " -R root-directory Set alternate root."
msgstr ""
-#: test/ipptool.c:4945
-msgid " -S Test with SSL encryption."
+#: test/ipptool.c:5066
+msgid " -S Test with encryption using HTTPS."
msgstr ""
#: test/ippfind.c:2754
msgid " -T seconds Set the browse timeout in seconds."
msgstr ""
-#: test/ipptool.c:4947
+#: test/ipptool.c:5067
msgid " -T seconds Set the receive/send timeout in seconds."
msgstr ""
@@ -1192,7 +1192,7 @@ msgstr ""
msgid " -U username Specify username."
msgstr ""
-#: test/ippfind.c:2756 test/ipptool.c:4949
+#: test/ippfind.c:2756 test/ipptool.c:5068
msgid " -V version Set default IPP version."
msgstr ""
@@ -1200,7 +1200,7 @@ msgstr ""
msgid " -W {all,none,constraints,defaults,duplex,filters,profiles,sizes,translations}"
msgstr ""
-#: test/ipptool.c:4951
+#: test/ipptool.c:5069
msgid " -X Produce XML plist instead of plain text."
msgstr ""
@@ -1208,7 +1208,7 @@ msgstr ""
msgid " -a Export all printers."
msgstr ""
-#: test/ipptool.c:4953
+#: test/ipptool.c:5070
msgid " -c Produce CSV output."
msgstr ""
@@ -1220,11 +1220,11 @@ msgstr ""
msgid " -c cups-files.conf Set cups-files.conf file to use."
msgstr ""
-#: scheduler/main.c:2049
+#: scheduler/main.c:2082
msgid " -c cupsd.conf Set cupsd.conf file to use."
msgstr ""
-#: test/ipptool.c:4954
+#: test/ipptool.c:5071
msgid " -d name=value Set named variable to value."
msgstr ""
@@ -1244,15 +1244,15 @@ msgstr ""
msgid " -e Use every filter from the PPD file."
msgstr ""
-#: scheduler/main.c:2050
+#: scheduler/main.c:2083
msgid " -f Run in the foreground."
msgstr ""
-#: test/ipptool.c:4956
+#: test/ipptool.c:5072
msgid " -f filename Set default request filename."
msgstr ""
-#: scheduler/main.c:2052
+#: scheduler/main.c:2085
msgid " -h Show this usage message."
msgstr ""
@@ -1268,7 +1268,7 @@ msgstr ""
msgid " -i mime/type Set input MIME type (otherwise auto-typed)."
msgstr ""
-#: test/ipptool.c:4958
+#: test/ipptool.c:5073
msgid " -i seconds Repeat the last file with the given time interval."
msgstr ""
@@ -1280,11 +1280,11 @@ msgstr ""
msgid " -l List attributes."
msgstr ""
-#: test/ipptool.c:4960
+#: test/ipptool.c:5074
msgid " -l Produce plain text output."
msgstr ""
-#: scheduler/main.c:2054
+#: scheduler/main.c:2087
msgid " -l Run cupsd on demand."
msgstr ""
@@ -1304,7 +1304,7 @@ msgstr ""
msgid " -n copies Set number of copies."
msgstr ""
-#: test/ipptool.c:4961
+#: test/ipptool.c:5075
msgid " -n count Repeat the last file the given number of times."
msgstr ""
@@ -1336,7 +1336,7 @@ msgstr ""
msgid " -q Quietly report match via exit code."
msgstr ""
-#: systemv/cupstestppd.c:3868 test/ipptool.c:4963
+#: systemv/cupstestppd.c:3868 test/ipptool.c:5076
msgid " -q Run silently."
msgstr ""
@@ -1352,11 +1352,11 @@ msgstr ""
msgid " -s Print service name if true."
msgstr ""
-#: scheduler/main.c:2056
+#: scheduler/main.c:2089
msgid " -s cups-files.conf Set cups-files.conf file to use."
msgstr ""
-#: test/ipptool.c:4964
+#: test/ipptool.c:5077
msgid " -t Produce a test report."
msgstr ""
@@ -1364,7 +1364,7 @@ msgstr ""
msgid " -t Test PPDs instead of generating them."
msgstr ""
-#: scheduler/main.c:2057
+#: scheduler/main.c:2090
msgid " -t Test the configuration file."
msgstr ""
@@ -1384,7 +1384,7 @@ msgstr ""
msgid " -u regex Match URI to regular expression."
msgstr ""
-#: systemv/cupsaddsmb.c:283 systemv/cupstestppd.c:3870 test/ipptool.c:4965
+#: systemv/cupsaddsmb.c:283 systemv/cupstestppd.c:3870 test/ipptool.c:5078
#: ppdc/ppdc.cxx:445 ppdc/ppdpo.cxx:252
msgid " -v Be verbose."
msgstr ""
@@ -1553,172 +1553,172 @@ msgstr ""
#: cups/ipp.c:5202
#, c-format
-msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 2911 section 4.1.5)."
+msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 8011 section 5.1.6)."
msgstr ""
#: cups/ipp.c:5213
#, c-format
-msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 2911 section 4.1.5)."
+msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 8011 section 5.1.6)."
msgstr ""
#: cups/ipp.c:4833
#, c-format
-msgid "\"%s\": Bad attribute name - bad length %d (RFC 2911 section 4.1.3)."
+msgid "\"%s\": Bad attribute name - bad length %d (RFC 8011 section 5.1.4)."
msgstr ""
#: cups/ipp.c:4825
#, c-format
-msgid "\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)."
+msgid "\"%s\": Bad attribute name - invalid character (RFC 8011 section 5.1.4)."
msgstr ""
#: cups/ipp.c:4851
#, c-format
-msgid "\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11)."
+msgid "\"%s\": Bad boolen value %d (RFC 8011 section 5.1.21)."
msgstr ""
#: cups/ipp.c:5265
#, c-format
-msgid "\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section 4.1.7)."
+msgid "\"%s\": Bad charset value \"%s\" - bad characters (RFC 8011 section 5.1.8)."
msgstr ""
#: cups/ipp.c:5274
#, c-format
-msgid "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)."
+msgid "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 8011 section 5.1.8)."
msgstr ""
#: cups/ipp.c:4951
#, c-format
-msgid "\"%s\": Bad dateTime UTC hours %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime UTC hours %u (RFC 8011 section 5.1.15)."
msgstr ""
#: cups/ipp.c:4959
#, c-format
-msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 8011 section 5.1.15)."
msgstr ""
#: cups/ipp.c:4943
#, c-format
-msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 8011 section 5.1.15)."
msgstr ""
#: cups/ipp.c:4903
#, c-format
-msgid "\"%s\": Bad dateTime day %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime day %u (RFC 8011 section 5.1.15)."
msgstr ""
#: cups/ipp.c:4935
#, c-format
-msgid "\"%s\": Bad dateTime deciseconds %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime deciseconds %u (RFC 8011 section 5.1.15)."
msgstr ""
#: cups/ipp.c:4911
#, c-format
-msgid "\"%s\": Bad dateTime hours %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime hours %u (RFC 8011 section 5.1.15)."
msgstr ""
#: cups/ipp.c:4919
#, c-format
-msgid "\"%s\": Bad dateTime minutes %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime minutes %u (RFC 8011 section 5.1.15)."
msgstr ""
#: cups/ipp.c:4895
#, c-format
-msgid "\"%s\": Bad dateTime month %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime month %u (RFC 8011 section 5.1.15)."
msgstr ""
#: cups/ipp.c:4927
#, c-format
-msgid "\"%s\": Bad dateTime seconds %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime seconds %u (RFC 8011 section 5.1.15)."
msgstr ""
#: cups/ipp.c:4865
#, c-format
-msgid "\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4)."
+msgid "\"%s\": Bad enum value %d - out of range (RFC 8011 section 5.1.5)."
msgstr ""
#: cups/ipp.c:5180
#, c-format
-msgid "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3)."
+msgid "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 8011 section 5.1.4)."
msgstr ""
#: cups/ipp.c:5171
#, c-format
-msgid "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section 4.1.3)."
+msgid "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 8011 section 5.1.4)."
msgstr ""
#: cups/ipp.c:5374
#, c-format
-msgid "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section 4.1.9)."
+msgid "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section 5.1.10)."
msgstr ""
#: cups/ipp.c:5384
#, c-format
-msgid "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section 4.1.9)."
+msgid "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section 5.1.10)."
msgstr ""
#: cups/ipp.c:5142
#, c-format
-msgid "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.2)."
+msgid "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
msgstr ""
#: cups/ipp.c:5151
#, c-format
-msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2)."
+msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
msgstr ""
#: cups/ipp.c:5320
#, c-format
-msgid "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 section 4.1.8)."
+msgid "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section 5.1.9)."
msgstr ""
#: cups/ipp.c:5330
#, c-format
-msgid "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 2911 section 4.1.8)."
+msgid "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section 5.1.9)."
msgstr ""
#: cups/ipp.c:4879
#, c-format
-msgid "\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10)."
+msgid "\"%s\": Bad octetString value - bad length %d (RFC 8011 section 5.1.20)."
msgstr ""
#: cups/ipp.c:5022
#, c-format
-msgid "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 2911 section 4.1.13)."
+msgid "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 8011 section 5.1.14)."
msgstr ""
#: cups/ipp.c:5003
#, c-format
-msgid "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section 4.1.15)."
+msgid "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 8011 section 5.1.16)."
msgstr ""
#: cups/ipp.c:4972
#, c-format
-msgid "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be positive (RFC 2911 section 4.1.15)."
+msgid "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be positive (RFC 8011 section 5.1.16)."
msgstr ""
#: cups/ipp.c:4987
#, c-format
-msgid "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC 2911 section 4.1.15)."
+msgid "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC 8011 section 5.1.16)."
msgstr ""
#: cups/ipp.c:5084
#, c-format
-msgid "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.1)."
+msgid "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
msgstr ""
#: cups/ipp.c:5093
#, c-format
-msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 2911 section 4.1.1)."
+msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
msgstr ""
#: cups/ipp.c:5236
#, c-format
-msgid "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section 4.1.6)."
+msgid "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)."
msgstr ""
#: cups/ipp.c:5245
#, c-format
-msgid "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 2911 section 4.1.6)."
+msgid "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
msgstr ""
#: berkeley/lpq.c:542
@@ -1761,12 +1761,12 @@ msgstr ""
msgid "%s (Borderless, %s, %s)"
msgstr ""
-#: systemv/lpstat.c:775
+#: systemv/lpstat.c:810
#, c-format
msgid "%s accepting requests since %s"
msgstr ""
-#: scheduler/ipp.c:10294
+#: scheduler/ipp.c:10297
#, c-format
msgid "%s cannot be changed."
msgstr ""
@@ -1797,7 +1797,7 @@ msgstr ""
msgid "%s job-id user title copies options [file]"
msgstr ""
-#: systemv/lpstat.c:779
+#: systemv/lpstat.c:814
#, c-format
msgid "%s not accepting requests since %s -"
msgstr ""
@@ -1807,12 +1807,12 @@ msgstr ""
msgid "%s not supported."
msgstr ""
-#: systemv/lpstat.c:790
+#: systemv/lpstat.c:825
#, c-format
msgid "%s/%s accepting requests since %s"
msgstr ""
-#: systemv/lpstat.c:795
+#: systemv/lpstat.c:830
#, c-format
msgid "%s/%s not accepting requests since %s -"
msgstr ""
@@ -1841,7 +1841,7 @@ msgstr ""
msgid "%s: Bad printer URI \"%s\"."
msgstr ""
-#: test/ippfind.c:775 test/ipptool.c:369
+#: test/ippfind.c:775 test/ipptool.c:370
#, c-format
msgid "%s: Bad version %s for \"-V\"."
msgstr ""
@@ -1858,11 +1858,11 @@ msgstr ""
#: berkeley/lpq.c:139 berkeley/lpq.c:212 berkeley/lpr.c:229 berkeley/lpr.c:340
#: systemv/lp.c:161 systemv/lp.c:581 systemv/lp.c:701 systemv/lp.c:750
-#: systemv/lpstat.c:190 systemv/lpstat.c:235 systemv/lpstat.c:333
-#: systemv/lpstat.c:360 systemv/lpstat.c:382 systemv/lpstat.c:442
-#: systemv/lpstat.c:508 systemv/lpstat.c:569 systemv/lpstat.c:694
-#: systemv/lpstat.c:878 systemv/lpstat.c:1139 systemv/lpstat.c:1337
-#: systemv/lpstat.c:1577
+#: systemv/lpstat.c:190 systemv/lpstat.c:235 systemv/lpstat.c:368
+#: systemv/lpstat.c:395 systemv/lpstat.c:417 systemv/lpstat.c:477
+#: systemv/lpstat.c:543 systemv/lpstat.c:604 systemv/lpstat.c:729
+#: systemv/lpstat.c:913 systemv/lpstat.c:1174 systemv/lpstat.c:1372
+#: systemv/lpstat.c:1612
#, c-format
msgid "%s: Error - add '/version=1.1' to server name."
msgstr ""
@@ -1933,7 +1933,7 @@ msgid "%s: Error - expected hostname after \"-H\" option."
msgstr ""
#: berkeley/lpq.c:173 berkeley/lprm.c:124 systemv/cancel.c:124
-#: systemv/cupsaccept.c:127 systemv/lp.c:198 systemv/lpstat.c:269
+#: systemv/cupsaccept.c:127 systemv/lp.c:198 systemv/lpstat.c:304
#, c-format
msgid "%s: Error - expected hostname after \"-h\" option."
msgstr ""
@@ -2036,7 +2036,7 @@ msgid "%s: Error - unknown destination \"%s/%s\"."
msgstr ""
#: berkeley/lpr.c:284 berkeley/lprm.c:139 systemv/cancel.c:162
-#: systemv/cupsaccept.c:155 systemv/lp.c:508 systemv/lpstat.c:452
+#: systemv/cupsaccept.c:155 systemv/lp.c:508 systemv/lpstat.c:487
#, c-format
msgid "%s: Error - unknown option \"%c\"."
msgstr ""
@@ -2051,7 +2051,7 @@ msgstr ""
msgid "%s: Expected job ID after \"-i\" option."
msgstr ""
-#: systemv/lpstat.c:512 systemv/lpstat.c:552
+#: systemv/lpstat.c:547 systemv/lpstat.c:587
#, c-format
msgid "%s: Invalid destination name in list \"%s\"."
msgstr ""
@@ -2061,17 +2061,17 @@ msgstr ""
msgid "%s: Invalid filter string \"%s\"."
msgstr ""
-#: test/ipptool.c:300
+#: test/ipptool.c:301
#, c-format
msgid "%s: Missing filename for \"-P\"."
msgstr ""
-#: test/ippfind.c:747 test/ipptool.c:337
+#: test/ippfind.c:747 test/ipptool.c:338
#, c-format
msgid "%s: Missing timeout for \"-T\"."
msgstr ""
-#: test/ippfind.c:760 test/ipptool.c:351
+#: test/ippfind.c:760 test/ipptool.c:352
#, c-format
msgid "%s: Missing version for \"-V\"."
msgstr ""
@@ -2094,7 +2094,7 @@ msgstr ""
#: berkeley/lpq.c:87 berkeley/lpr.c:69 berkeley/lprm.c:65 systemv/cancel.c:79
#: systemv/cupsaccept.c:89 systemv/cupsaddsmb.c:78 systemv/lp.c:99
#: systemv/lpadmin.c:232 systemv/lpinfo.c:192 systemv/lpmove.c:70
-#: systemv/lpstat.c:91 test/ipptool.c:282 test/ipptool.c:326
+#: systemv/lpstat.c:91 test/ipptool.c:283 test/ipptool.c:327
#, c-format
msgid "%s: Sorry, no encryption support."
msgstr ""
@@ -2125,7 +2125,7 @@ msgstr ""
msgid "%s: Unable to determine MIME type of \"%s\"."
msgstr ""
-#: test/ipptool.c:309
+#: test/ipptool.c:310
#, c-format
msgid "%s: Unable to open \"%s\": %s"
msgstr ""
@@ -2155,7 +2155,7 @@ msgstr ""
msgid "%s: Unknown argument \"%s\"."
msgstr ""
-#: berkeley/lpq.c:143 systemv/lpstat.c:573
+#: berkeley/lpq.c:143 systemv/lpstat.c:608
#, c-format
msgid "%s: Unknown destination \"%s\"."
msgstr ""
@@ -2530,23 +2530,23 @@ msgstr ""
msgid "2 inches/sec."
msgstr ""
-#: cups/ppd-cache.c:3108
+#: cups/ppd-cache.c:2992
msgid "2-Hole Punch (Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3109
+#: cups/ppd-cache.c:2993
msgid "2-Hole Punch (Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3107
+#: cups/ppd-cache.c:2991
msgid "2-Hole Punch (Reverse Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3106
+#: cups/ppd-cache.c:2990
msgid "2-Hole Punch (Reverse Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3778 ppdc/sample.c:262
+#: cups/ppd-cache.c:3662 ppdc/sample.c:262
msgid "2-Sided Printing"
msgstr ""
@@ -2698,19 +2698,19 @@ msgstr ""
msgid "3 x 5"
msgstr ""
-#: cups/ppd-cache.c:3119
+#: cups/ppd-cache.c:3003
msgid "3-Hole Punch (Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3117
+#: cups/ppd-cache.c:3001
msgid "3-Hole Punch (Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3116
+#: cups/ppd-cache.c:3000
msgid "3-Hole Punch (Reverse Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3118
+#: cups/ppd-cache.c:3002
msgid "3-Hole Punch (Reverse Portrait)"
msgstr ""
@@ -2802,19 +2802,19 @@ msgstr ""
msgid "4 inches/sec."
msgstr ""
-#: cups/ppd-cache.c:3113
+#: cups/ppd-cache.c:2997
msgid "4-Hole Punch (Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3111
+#: cups/ppd-cache.c:2995
msgid "4-Hole Punch (Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3110
+#: cups/ppd-cache.c:2994
msgid "4-Hole Punch (Reverse Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3112
+#: cups/ppd-cache.c:2996
msgid "4-Hole Punch (Reverse Portrait)"
msgstr ""
@@ -3208,11 +3208,11 @@ msgstr ""
msgid "Accept Jobs"
msgstr ""
-#: cups/http-support.c:1351
+#: cups/http-support.c:1355
msgid "Accepted"
msgstr ""
-#: cups/ppd-cache.c:3089
+#: cups/ppd-cache.c:2973
msgid "Accordian Fold"
msgstr ""
@@ -3237,19 +3237,19 @@ msgstr ""
msgid "Administration"
msgstr ""
-#: cups/ppd-cache.c:3539
+#: cups/ppd-cache.c:3423
msgid "Advanced Photo Paper"
msgstr ""
-#: cups/ppd-cache.c:3453
+#: cups/ppd-cache.c:3337
msgid "Alternate"
msgstr ""
-#: cups/ppd-cache.c:3461
+#: cups/ppd-cache.c:3345
msgid "Alternate Roll"
msgstr ""
-#: cups/ppd-cache.c:3533
+#: cups/ppd-cache.c:3417
msgid "Aluminum"
msgstr ""
@@ -3265,19 +3265,19 @@ msgstr ""
msgid "Applicator"
msgstr ""
-#: cups/ppd-cache.c:3567
+#: cups/ppd-cache.c:3451
msgid "Archival Envelope"
msgstr ""
-#: cups/ppd-cache.c:3579
+#: cups/ppd-cache.c:3463
msgid "Archival Fabric"
msgstr ""
-#: cups/ppd-cache.c:3656
+#: cups/ppd-cache.c:3540
msgid "Archival Paper"
msgstr ""
-#: cups/ppd-cache.c:3628
+#: cups/ppd-cache.c:3512
msgid "Archival Photo Paper"
msgstr ""
@@ -3301,7 +3301,7 @@ msgstr ""
msgid "Attribute groups are out of order (%x < %x)."
msgstr ""
-#: cups/ppd-cache.c:3451 cups/ppd-cache.c:3534 cups/ppd-cache.c:3838
+#: cups/ppd-cache.c:3335 cups/ppd-cache.c:3418 cups/ppd-cache.c:3722
msgid "Automatic"
msgstr ""
@@ -3353,16 +3353,16 @@ msgstr ""
msgid "B9"
msgstr ""
-#: cups/ppd-cache.c:3535
+#: cups/ppd-cache.c:3419
msgid "Back Print Film"
msgstr ""
-#: scheduler/ipp.c:11241
+#: scheduler/ipp.c:11244
#, c-format
msgid "Bad 'document-format' value \"%s\"."
msgstr ""
-#: cups/dest.c:1846
+#: cups/dest.c:2035
msgid "Bad NULL dests pointer"
msgstr ""
@@ -3378,16 +3378,16 @@ msgstr ""
msgid "Bad OrderDependency"
msgstr ""
-#: cups/ppd-cache.c:457 cups/ppd-cache.c:504 cups/ppd-cache.c:589
-#: cups/ppd-cache.c:595 cups/ppd-cache.c:611 cups/ppd-cache.c:627
-#: cups/ppd-cache.c:636 cups/ppd-cache.c:644 cups/ppd-cache.c:661
-#: cups/ppd-cache.c:669 cups/ppd-cache.c:684 cups/ppd-cache.c:692
-#: cups/ppd-cache.c:713 cups/ppd-cache.c:725 cups/ppd-cache.c:740
-#: cups/ppd-cache.c:752 cups/ppd-cache.c:774 cups/ppd-cache.c:782
-#: cups/ppd-cache.c:800 cups/ppd-cache.c:808 cups/ppd-cache.c:823
-#: cups/ppd-cache.c:831 cups/ppd-cache.c:849 cups/ppd-cache.c:857
-#: cups/ppd-cache.c:884 cups/ppd-cache.c:954 cups/ppd-cache.c:962
-#: cups/ppd-cache.c:970
+#: cups/ppd-cache.c:456 cups/ppd-cache.c:503 cups/ppd-cache.c:541
+#: cups/ppd-cache.c:547 cups/ppd-cache.c:563 cups/ppd-cache.c:579
+#: cups/ppd-cache.c:588 cups/ppd-cache.c:596 cups/ppd-cache.c:613
+#: cups/ppd-cache.c:621 cups/ppd-cache.c:636 cups/ppd-cache.c:644
+#: cups/ppd-cache.c:665 cups/ppd-cache.c:677 cups/ppd-cache.c:692
+#: cups/ppd-cache.c:704 cups/ppd-cache.c:726 cups/ppd-cache.c:734
+#: cups/ppd-cache.c:752 cups/ppd-cache.c:760 cups/ppd-cache.c:775
+#: cups/ppd-cache.c:783 cups/ppd-cache.c:801 cups/ppd-cache.c:809
+#: cups/ppd-cache.c:836 cups/ppd-cache.c:906 cups/ppd-cache.c:914
+#: cups/ppd-cache.c:922
msgid "Bad PPD cache file."
msgstr ""
@@ -3395,11 +3395,11 @@ msgstr ""
msgid "Bad PPD file."
msgstr ""
-#: cups/http-support.c:1366
+#: cups/http-support.c:1370
msgid "Bad Request"
msgstr ""
-#: cups/snmp.c:952
+#: cups/snmp.c:956
msgid "Bad SNMP version number"
msgstr ""
@@ -3407,7 +3407,7 @@ msgstr ""
msgid "Bad UIConstraints"
msgstr ""
-#: cups/hash.c:51 cups/http-support.c:1460
+#: cups/hash.c:51 cups/http-support.c:1464
msgid "Bad arguments to function"
msgstr ""
@@ -3420,7 +3420,7 @@ msgstr ""
msgid "Bad custom parameter"
msgstr ""
-#: cups/http-support.c:1600 scheduler/ipp.c:2378
+#: cups/http-support.c:1604 scheduler/ipp.c:2378
#, c-format
msgid "Bad device-uri \"%s\"."
msgstr ""
@@ -3430,12 +3430,12 @@ msgstr ""
msgid "Bad device-uri scheme \"%s\"."
msgstr ""
-#: scheduler/ipp.c:8449 scheduler/ipp.c:8467 scheduler/ipp.c:9695
+#: scheduler/ipp.c:8452 scheduler/ipp.c:8470 scheduler/ipp.c:9698
#, c-format
msgid "Bad document-format \"%s\"."
msgstr ""
-#: scheduler/ipp.c:9713
+#: scheduler/ipp.c:9716
#, c-format
msgid "Bad document-format-default \"%s\"."
msgstr ""
@@ -3444,7 +3444,7 @@ msgstr ""
msgid "Bad filename buffer"
msgstr ""
-#: cups/http-support.c:1469
+#: cups/http-support.c:1473
msgid "Bad hostname/address in URI"
msgstr ""
@@ -3457,7 +3457,7 @@ msgstr ""
msgid "Bad job-name value: Wrong type or count."
msgstr ""
-#: scheduler/ipp.c:10309
+#: scheduler/ipp.c:10312
msgid "Bad job-priority value."
msgstr ""
@@ -3470,24 +3470,24 @@ msgstr ""
msgid "Bad job-sheets value type."
msgstr ""
-#: scheduler/ipp.c:10339
+#: scheduler/ipp.c:10342
msgid "Bad job-state value."
msgstr ""
-#: scheduler/ipp.c:3008 scheduler/ipp.c:3470 scheduler/ipp.c:6234
-#: scheduler/ipp.c:6381 scheduler/ipp.c:7878 scheduler/ipp.c:8147
-#: scheduler/ipp.c:9013 scheduler/ipp.c:9237 scheduler/ipp.c:9589
-#: scheduler/ipp.c:10202
+#: scheduler/ipp.c:3008 scheduler/ipp.c:3470 scheduler/ipp.c:6237
+#: scheduler/ipp.c:6384 scheduler/ipp.c:7881 scheduler/ipp.c:8150
+#: scheduler/ipp.c:9016 scheduler/ipp.c:9240 scheduler/ipp.c:9592
+#: scheduler/ipp.c:10205
#, c-format
msgid "Bad job-uri \"%s\"."
msgstr ""
-#: scheduler/ipp.c:2064 scheduler/ipp.c:5773
+#: scheduler/ipp.c:2064 scheduler/ipp.c:5776
#, c-format
msgid "Bad notify-pull-method \"%s\"."
msgstr ""
-#: scheduler/ipp.c:2028 scheduler/ipp.c:5737
+#: scheduler/ipp.c:2028 scheduler/ipp.c:5740
#, c-format
msgid "Bad notify-recipient-uri \"%s\"."
msgstr ""
@@ -3507,7 +3507,7 @@ msgstr ""
msgid "Bad page-ranges values %d-%d."
msgstr ""
-#: cups/http-support.c:1466
+#: cups/http-support.c:1470
msgid "Bad port number in URI"
msgstr ""
@@ -3521,7 +3521,7 @@ msgstr ""
msgid "Bad printer-state value %d."
msgstr ""
-#: cups/dest.c:649 cups/dest.c:1406 cups/dest.c:1453
+#: cups/dest.c:671 cups/dest.c:1564 cups/dest.c:1615
msgid "Bad printer-uri."
msgstr ""
@@ -3535,11 +3535,11 @@ msgstr ""
msgid "Bad request version number %d.%d."
msgstr ""
-#: cups/http-support.c:1463
+#: cups/http-support.c:1467
msgid "Bad resource in URI"
msgstr ""
-#: cups/http-support.c:1475
+#: cups/http-support.c:1479
msgid "Bad scheme in URI"
msgstr ""
@@ -3547,7 +3547,7 @@ msgstr ""
msgid "Bad subscription ID"
msgstr ""
-#: cups/http-support.c:1472
+#: cups/http-support.c:1476
msgid "Bad username in URI"
msgstr ""
@@ -3555,11 +3555,11 @@ msgstr ""
msgid "Bad value string"
msgstr ""
-#: cups/http-support.c:1478
+#: cups/http-support.c:1482
msgid "Bad/empty URI"
msgstr ""
-#: cups/ppd-cache.c:3074
+#: cups/ppd-cache.c:2958
msgid "Bale"
msgstr ""
@@ -3567,27 +3567,27 @@ msgstr ""
msgid "Banners"
msgstr ""
-#: cups/ppd-cache.c:3075
+#: cups/ppd-cache.c:2959
msgid "Bind"
msgstr ""
-#: cups/ppd-cache.c:3079
+#: cups/ppd-cache.c:2963
msgid "Bind (Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3077
+#: cups/ppd-cache.c:2961
msgid "Bind (Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3076
+#: cups/ppd-cache.c:2960
msgid "Bind (Reverse Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3078
+#: cups/ppd-cache.c:2962
msgid "Bind (Reverse Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3568
+#: cups/ppd-cache.c:3452
msgid "Bond Envelope"
msgstr ""
@@ -3595,11 +3595,11 @@ msgstr ""
msgid "Bond Paper"
msgstr ""
-#: cups/ppd-cache.c:4063
+#: cups/ppd-cache.c:3947
msgid "Booklet"
msgstr ""
-#: cups/ppd-cache.c:3080
+#: cups/ppd-cache.c:2964
msgid "Booklet Maker"
msgstr ""
@@ -3608,11 +3608,11 @@ msgstr ""
msgid "Boolean expected for waiteof option \"%s\"."
msgstr ""
-#: cups/ppd-cache.c:3464
+#: cups/ppd-cache.c:3348
msgid "Bottom"
msgstr ""
-#: cups/ppd-cache.c:3839
+#: cups/ppd-cache.c:3723
msgid "Bottom Tray"
msgstr ""
@@ -3620,7 +3620,7 @@ msgstr ""
msgid "Buffer overflow detected, aborting."
msgstr ""
-#: cups/ppd-cache.c:3538
+#: cups/ppd-cache.c:3422
msgid "CD"
msgstr ""
@@ -3652,11 +3652,11 @@ msgstr ""
msgid "Cannot share a remote Kerberized printer."
msgstr ""
-#: cups/ppd-cache.c:3536
+#: cups/ppd-cache.c:3420
msgid "Cardboard"
msgstr ""
-#: cups/ppd-cache.c:3537
+#: cups/ppd-cache.c:3421
msgid "Cardstock"
msgstr ""
@@ -3664,11 +3664,11 @@ msgstr ""
msgid "Cassette"
msgstr ""
-#: cups/ppd-cache.c:3468
+#: cups/ppd-cache.c:3352
msgid "Center"
msgstr ""
-#: cups/ppd-cache.c:3840
+#: cups/ppd-cache.c:3724
msgid "Center Tray"
msgstr ""
@@ -3677,7 +3677,7 @@ msgstr ""
msgid "Change Settings"
msgstr ""
-#: scheduler/ipp.c:2076 scheduler/ipp.c:5785
+#: scheduler/ipp.c:2076 scheduler/ipp.c:5788
#, c-format
msgid "Character set \"%s\" not supported."
msgstr ""
@@ -3694,28 +3694,28 @@ msgstr ""
msgid "Close-Job doesn't support the job-uri attribute."
msgstr ""
-#: cups/ppd-cache.c:3081
+#: cups/ppd-cache.c:2965
msgid "Coat"
msgstr ""
-#: cups/ppd-cache.c:3569
+#: cups/ppd-cache.c:3453
msgid "Coated Envelope"
msgstr ""
-#: cups/ppd-cache.c:3657
+#: cups/ppd-cache.c:3541
msgid "Coated Paper"
msgstr ""
-#: cups/ppd-cache.c:3742 ppdc/sample.c:276
+#: cups/ppd-cache.c:3626 ppdc/sample.c:276
msgid "Color"
msgstr ""
-#: cups/ppd-cache.c:3718 cups/ppd-cache.c:3729 cups/ppd-cache.c:3740
-#: cups/ppd-cache.c:3750 ppdc/sample.c:274
+#: cups/ppd-cache.c:3602 cups/ppd-cache.c:3613 cups/ppd-cache.c:3624
+#: cups/ppd-cache.c:3634 ppdc/sample.c:274
msgid "Color Mode"
msgstr ""
-#: cups/ppd-cache.c:3604
+#: cups/ppd-cache.c:3488
msgid "Colored Labels"
msgstr ""
@@ -3726,7 +3726,7 @@ msgid ""
"exit help quit status ?"
msgstr ""
-#: cups/snmp.c:956
+#: cups/snmp.c:960
msgid "Community name uses indefinite length"
msgstr ""
@@ -3738,19 +3738,19 @@ msgstr ""
msgid "Connecting to printer."
msgstr ""
-#: cups/http-support.c:1339
+#: cups/http-support.c:1343
msgid "Continue"
msgstr ""
-#: cups/ppd-cache.c:3552 ppdc/sample.c:360
+#: cups/ppd-cache.c:3436 ppdc/sample.c:360
msgid "Continuous"
msgstr ""
-#: cups/ppd-cache.c:3553
+#: cups/ppd-cache.c:3437
msgid "Continuous Long"
msgstr ""
-#: cups/ppd-cache.c:3554
+#: cups/ppd-cache.c:3438
msgid "Continuous Short"
msgstr ""
@@ -3762,27 +3762,27 @@ msgstr ""
msgid "Copying print data."
msgstr ""
-#: cups/ppd-cache.c:3570
+#: cups/ppd-cache.c:3454
msgid "Cotton Envelope"
msgstr ""
-#: cups/ppd-cache.c:3658
+#: cups/ppd-cache.c:3542
msgid "Cotton Paper"
msgstr ""
-#: cups/ppd-cache.c:3082
+#: cups/ppd-cache.c:2966
msgid "Cover"
msgstr ""
-#: cups/http-support.c:1348
+#: cups/http-support.c:1352
msgid "Created"
msgstr ""
-#: cups/tls-darwin.c:726 cups/tls-gnutls.c:560
+#: cups/tls-darwin.c:728 cups/tls-gnutls.c:560
msgid "Credentials do not validate against site CA certificate."
msgstr ""
-#: cups/tls-darwin.c:737 cups/tls-gnutls.c:577
+#: cups/tls-darwin.c:739 cups/tls-gnutls.c:577
msgid "Credentials have expired."
msgstr ""
@@ -3802,7 +3802,7 @@ msgstr ""
msgid "Cut"
msgstr ""
-#: cups/ppd-cache.c:3138
+#: cups/ppd-cache.c:3022
msgid "Cut Media"
msgstr ""
@@ -3810,7 +3810,7 @@ msgstr ""
msgid "Cutter"
msgstr ""
-#: cups/ppd-cache.c:3563
+#: cups/ppd-cache.c:3447
msgid "DVD"
msgstr ""
@@ -3826,7 +3826,7 @@ msgstr ""
msgid "Data file sent successfully."
msgstr ""
-#: cups/ppd-cache.c:3752
+#: cups/ppd-cache.c:3636
msgid "Deep Color"
msgstr ""
@@ -3891,45 +3891,45 @@ msgstr ""
msgid "Disabled"
msgstr ""
-#: cups/ppd-cache.c:3457
+#: cups/ppd-cache.c:3341
msgid "Disc"
msgstr ""
-#: scheduler/ipp.c:6283
+#: scheduler/ipp.c:6286
#, c-format
msgid "Document #%d does not exist in job #%d."
msgstr ""
-#: cups/ppd-cache.c:3090
+#: cups/ppd-cache.c:2974
msgid "Double Gate Fold"
msgstr ""
-#: cups/ppd-cache.c:3131
+#: cups/ppd-cache.c:3015
msgid "Double Staple (Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3129
+#: cups/ppd-cache.c:3013
msgid "Double Staple (Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3128
+#: cups/ppd-cache.c:3012
msgid "Double Staple (Reverse Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3130
+#: cups/ppd-cache.c:3014
msgid "Double Staple (Reverse Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3561
+#: cups/ppd-cache.c:3445
msgid "Double Wall Cardboard"
msgstr ""
-#: cups/ppd-cache.c:4094 cups/ppd-cache.c:4149 cups/ppd-cache.c:4151
-#: cups/ppd-cache.c:4178
+#: cups/ppd-cache.c:3978 cups/ppd-cache.c:4033 cups/ppd-cache.c:4035
+#: cups/ppd-cache.c:4062
msgid "Draft"
msgstr ""
-#: cups/ppd-cache.c:3562
+#: cups/ppd-cache.c:3446
msgid "Dry Film"
msgstr ""
@@ -3955,7 +3955,7 @@ msgstr ""
msgid "Edit Configuration File"
msgstr ""
-#: cups/ppd-cache.c:3564
+#: cups/ppd-cache.c:3448
msgid "Embossing Foil"
msgstr ""
@@ -3963,11 +3963,11 @@ msgstr ""
msgid "Empty PPD file."
msgstr ""
-#: cups/http.c:4617
+#: cups/http.c:4620
msgid "Encryption is not supported."
msgstr ""
-#: cups/ppd-cache.c:3565
+#: cups/ppd-cache.c:3449
msgid "End Board"
msgstr ""
@@ -3976,7 +3976,7 @@ msgstr ""
msgid "Ending Banner"
msgstr ""
-#: cups/ppd-cache.c:3091
+#: cups/ppd-cache.c:2975
msgid "Engineering Z Fold"
msgstr ""
@@ -3988,7 +3988,7 @@ msgstr ""
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 ""
-#: cups/ppd-cache.c:3456 cups/ppd-cache.c:3566
+#: cups/ppd-cache.c:3340 cups/ppd-cache.c:3450
msgid "Envelope"
msgstr ""
@@ -4269,11 +4269,11 @@ msgstr ""
msgid "Every Label"
msgstr ""
-#: cups/ppd-cache.c:3544
+#: cups/ppd-cache.c:3428
msgid "Everyday Glossy Photo Paper"
msgstr ""
-#: cups/ppd-cache.c:3545
+#: cups/ppd-cache.c:3429
msgid "Everyday Matte Paper"
msgstr ""
@@ -4281,7 +4281,7 @@ msgstr ""
msgid "Executive"
msgstr ""
-#: cups/http-support.c:1394
+#: cups/http-support.c:1398
msgid "Expectation Failed"
msgstr ""
@@ -4293,7 +4293,7 @@ msgstr ""
msgid "Expressions:"
msgstr ""
-#: cups/ppd-cache.c:3546
+#: cups/ppd-cache.c:3430
msgid "Extra Heavyweight Paper"
msgstr ""
@@ -4307,15 +4307,15 @@ msgstr ""
msgid "FAIL"
msgstr ""
-#: cups/ppd-cache.c:3578
+#: cups/ppd-cache.c:3462
msgid "Fabric"
msgstr ""
-#: cups/ppd-cache.c:3841
+#: cups/ppd-cache.c:3725
msgid "Face Down"
msgstr ""
-#: cups/ppd-cache.c:3842
+#: cups/ppd-cache.c:3726
msgid "Face Up"
msgstr ""
@@ -4331,7 +4331,7 @@ msgstr ""
msgid "Fanfold US"
msgstr ""
-#: cups/ppd-cache.c:3720
+#: cups/ppd-cache.c:3604
msgid "Fast Grayscale"
msgstr ""
@@ -4369,11 +4369,11 @@ msgstr ""
msgid "File device URIs have been disabled. To enable, see the FileDevice directive in \"%s/cups-files.conf\"."
msgstr ""
-#: cups/ppd-cache.c:3585
+#: cups/ppd-cache.c:3469
msgid "Film"
msgstr ""
-#: cups/ppd-cache.c:3571
+#: cups/ppd-cache.c:3455
msgid "Fine Envelope"
msgstr ""
@@ -4383,23 +4383,23 @@ msgstr ""
msgid "Finished page %d."
msgstr ""
-#: cups/ppd-cache.c:3586
+#: cups/ppd-cache.c:3470
msgid "Flexo Base"
msgstr ""
-#: cups/ppd-cache.c:3587
+#: cups/ppd-cache.c:3471
msgid "Flexo Photo Polymer"
msgstr ""
-#: cups/ppd-cache.c:3588
+#: cups/ppd-cache.c:3472
msgid "Flute"
msgstr ""
-#: cups/ppd-cache.c:3589
+#: cups/ppd-cache.c:3473
msgid "Foil"
msgstr ""
-#: cups/ppd-cache.c:3088 cups/ppd-cache.c:3978
+#: cups/ppd-cache.c:2972 cups/ppd-cache.c:3862
msgid "Fold"
msgstr ""
@@ -4407,15 +4407,15 @@ msgstr ""
msgid "Folio"
msgstr ""
-#: cups/http-support.c:1373
+#: cups/http-support.c:1377
msgid "Forbidden"
msgstr ""
-#: cups/ppd-cache.c:3590
+#: cups/ppd-cache.c:3474
msgid "Full Cut Tabs"
msgstr ""
-#: cups/ppd-cache.c:3092
+#: cups/ppd-cache.c:2976
msgid "Gate Fold"
msgstr ""
@@ -4427,43 +4427,43 @@ msgstr ""
msgid "Generic"
msgstr ""
-#: cups/snmp.c:966
+#: cups/snmp.c:970
msgid "Get-Response-PDU uses indefinite length"
msgstr ""
-#: cups/ppd-cache.c:3591
+#: cups/ppd-cache.c:3475
msgid "Glass"
msgstr ""
-#: cups/ppd-cache.c:3592
+#: cups/ppd-cache.c:3476
msgid "Glass Colored"
msgstr ""
-#: cups/ppd-cache.c:3593
+#: cups/ppd-cache.c:3477
msgid "Glass Opaque"
msgstr ""
-#: cups/ppd-cache.c:3594
+#: cups/ppd-cache.c:3478
msgid "Glass Surfaced"
msgstr ""
-#: cups/ppd-cache.c:3595
+#: cups/ppd-cache.c:3479
msgid "Glass Textured"
msgstr ""
-#: cups/ppd-cache.c:3540
+#: cups/ppd-cache.c:3424
msgid "Glossy Brochure Paper"
msgstr ""
-#: cups/ppd-cache.c:3580
+#: cups/ppd-cache.c:3464
msgid "Glossy Fabric"
msgstr ""
-#: cups/ppd-cache.c:3605
+#: cups/ppd-cache.c:3489
msgid "Glossy Labels"
msgstr ""
-#: cups/ppd-cache.c:3556
+#: cups/ppd-cache.c:3440
msgid "Glossy Optical Disc"
msgstr ""
@@ -4471,22 +4471,22 @@ msgstr ""
msgid "Glossy Paper"
msgstr ""
-#: cups/ppd-cache.c:3630
+#: cups/ppd-cache.c:3514
msgid "Glossy Photo Paper"
msgstr ""
#: scheduler/ipp.c:2986 scheduler/ipp.c:3396 scheduler/ipp.c:3934
-#: scheduler/ipp.c:6212 scheduler/ipp.c:6359 scheduler/ipp.c:7855
-#: scheduler/ipp.c:8991 scheduler/ipp.c:9215 scheduler/ipp.c:9567
-#: scheduler/ipp.c:10180
+#: scheduler/ipp.c:6215 scheduler/ipp.c:6362 scheduler/ipp.c:7858
+#: scheduler/ipp.c:8994 scheduler/ipp.c:9218 scheduler/ipp.c:9570
+#: scheduler/ipp.c:10183
msgid "Got a printer-uri attribute but no job-id."
msgstr ""
-#: cups/ppd-cache.c:3596
+#: cups/ppd-cache.c:3480
msgid "Gravure Cylinder"
msgstr ""
-#: cups/ppd-cache.c:3731 ppdc/sample.c:275
+#: cups/ppd-cache.c:3615 ppdc/sample.c:275
msgid "Grayscale"
msgstr ""
@@ -4494,15 +4494,15 @@ msgstr ""
msgid "HP"
msgstr ""
-#: cups/ppd-cache.c:3459
+#: cups/ppd-cache.c:3343
msgid "Hagaki"
msgstr ""
-#: cups/ppd-cache.c:3093
+#: cups/ppd-cache.c:2977
msgid "Half Fold"
msgstr ""
-#: cups/ppd-cache.c:3094
+#: cups/ppd-cache.c:2978
msgid "Half Z Fold"
msgstr ""
@@ -4514,15 +4514,15 @@ msgstr ""
msgid "Hash buffer too small."
msgstr ""
-#: cups/ppd-cache.c:3661
+#: cups/ppd-cache.c:3545
msgid "Heavyweight Coated Paper"
msgstr ""
-#: cups/ppd-cache.c:3572
+#: cups/ppd-cache.c:3456
msgid "Heavyweight Envelope"
msgstr ""
-#: cups/ppd-cache.c:3660
+#: cups/ppd-cache.c:3544
msgid "Heavyweight Paper"
msgstr ""
@@ -4530,23 +4530,23 @@ msgstr ""
msgid "Help file not in index."
msgstr ""
-#: cups/ppd-cache.c:4104 cups/ppd-cache.c:4154 cups/ppd-cache.c:4181
+#: cups/ppd-cache.c:3988 cups/ppd-cache.c:4038 cups/ppd-cache.c:4065
msgid "High"
msgstr ""
-#: cups/ppd-cache.c:3581
+#: cups/ppd-cache.c:3465
msgid "High Gloss Fabric"
msgstr ""
-#: cups/ppd-cache.c:3606
+#: cups/ppd-cache.c:3490
msgid "High Gloss Labels"
msgstr ""
-#: cups/ppd-cache.c:3557
+#: cups/ppd-cache.c:3441
msgid "High Gloss Optical Disc"
msgstr ""
-#: cups/ppd-cache.c:3631
+#: cups/ppd-cache.c:3515
msgid "High Gloss Photo Paper"
msgstr ""
@@ -4666,23 +4666,23 @@ msgstr ""
msgid "Illegal whitespace character"
msgstr ""
-#: cups/ppd-cache.c:3597
+#: cups/ppd-cache.c:3481
msgid "Image Setter Paper"
msgstr ""
-#: cups/ppd-cache.c:3598
+#: cups/ppd-cache.c:3482
msgid "Imaging Cylinder"
msgstr ""
-#: cups/ppd-cache.c:3573
+#: cups/ppd-cache.c:3457
msgid "Inkjet Envelope"
msgstr ""
-#: cups/ppd-cache.c:3607
+#: cups/ppd-cache.c:3491
msgid "Inkjet Labels"
msgstr ""
-#: cups/ppd-cache.c:3662
+#: cups/ppd-cache.c:3546
msgid "Inkjet Paper"
msgstr ""
@@ -4702,7 +4702,7 @@ msgstr ""
msgid "Intellitech"
msgstr ""
-#: cups/http-support.c:1400
+#: cups/http-support.c:1404
msgid "Internal Server Error"
msgstr ""
@@ -4726,11 +4726,11 @@ msgstr ""
msgid "Invalid media name arguments."
msgstr ""
-#: cups/dest-options.c:1031
+#: cups/dest-options.c:1099
msgid "Invalid media size."
msgstr ""
-#: scheduler/ipp.c:2719 scheduler/ipp.c:7026
+#: scheduler/ipp.c:2719 scheduler/ipp.c:7029
msgid "Invalid ppd-name value."
msgstr ""
@@ -4799,17 +4799,17 @@ msgstr ""
msgid "JIS B9"
msgstr ""
-#: scheduler/ipp.c:9287
+#: scheduler/ipp.c:9290
#, c-format
msgid "Job #%d cannot be restarted - no files."
msgstr ""
#: scheduler/ipp.c:3026 scheduler/ipp.c:3260 scheduler/ipp.c:3319
-#: scheduler/ipp.c:3498 scheduler/ipp.c:3944 scheduler/ipp.c:5871
-#: scheduler/ipp.c:6252 scheduler/ipp.c:6399 scheduler/ipp.c:6736
-#: scheduler/ipp.c:7696 scheduler/ipp.c:7718 scheduler/ipp.c:7896
-#: scheduler/ipp.c:8121 scheduler/ipp.c:8164 scheduler/ipp.c:9031
-#: scheduler/ipp.c:9255 scheduler/ipp.c:9607 scheduler/ipp.c:10220
+#: scheduler/ipp.c:3498 scheduler/ipp.c:3944 scheduler/ipp.c:5874
+#: scheduler/ipp.c:6255 scheduler/ipp.c:6402 scheduler/ipp.c:6739
+#: scheduler/ipp.c:7699 scheduler/ipp.c:7721 scheduler/ipp.c:7899
+#: scheduler/ipp.c:8124 scheduler/ipp.c:8167 scheduler/ipp.c:9034
+#: scheduler/ipp.c:9258 scheduler/ipp.c:9610 scheduler/ipp.c:10223
#, c-format
msgid "Job #%d does not exist."
msgstr ""
@@ -4829,12 +4829,12 @@ msgstr ""
msgid "Job #%d is already completed - can't cancel."
msgstr ""
-#: scheduler/ipp.c:7922 scheduler/ipp.c:8206 scheduler/ipp.c:10235
+#: scheduler/ipp.c:7925 scheduler/ipp.c:8209 scheduler/ipp.c:10238
#, c-format
msgid "Job #%d is finished and cannot be altered."
msgstr ""
-#: scheduler/ipp.c:9269
+#: scheduler/ipp.c:9272
#, c-format
msgid "Job #%d is not complete."
msgstr ""
@@ -4844,7 +4844,7 @@ msgstr ""
msgid "Job #%d is not held for authentication."
msgstr ""
-#: scheduler/ipp.c:9045
+#: scheduler/ipp.c:9048
#, c-format
msgid "Job #%d is not held."
msgstr ""
@@ -4865,7 +4865,7 @@ msgstr ""
msgid "Job Stopped"
msgstr ""
-#: scheduler/ipp.c:10317
+#: scheduler/ipp.c:10320
msgid "Job is completed and cannot be changed."
msgstr ""
@@ -4873,11 +4873,11 @@ msgstr ""
msgid "Job operation failed"
msgstr ""
-#: scheduler/ipp.c:10353 scheduler/ipp.c:10370 scheduler/ipp.c:10381
+#: scheduler/ipp.c:10356 scheduler/ipp.c:10373 scheduler/ipp.c:10384
msgid "Job state cannot be changed."
msgstr ""
-#: scheduler/ipp.c:9135
+#: scheduler/ipp.c:9138
msgid "Job subscriptions cannot be renewed."
msgstr ""
@@ -4885,7 +4885,7 @@ msgstr ""
msgid "Jobs"
msgstr ""
-#: cups/ppd-cache.c:3101
+#: cups/ppd-cache.c:2985
msgid "Jog"
msgstr ""
@@ -4901,19 +4901,19 @@ msgstr ""
msgid "Label Top"
msgstr ""
-#: cups/ppd-cache.c:3603
+#: cups/ppd-cache.c:3487
msgid "Labels"
msgstr ""
-#: cups/ppd-cache.c:3102
+#: cups/ppd-cache.c:2986
msgid "Laminate"
msgstr ""
-#: cups/ppd-cache.c:3613
+#: cups/ppd-cache.c:3497
msgid "Laminating Foil"
msgstr ""
-#: scheduler/ipp.c:2085 scheduler/ipp.c:5794
+#: scheduler/ipp.c:2085 scheduler/ipp.c:5797
#, c-format
msgid "Language \"%s\" not supported."
msgstr ""
@@ -4922,11 +4922,11 @@ msgstr ""
msgid "Large Address"
msgstr ""
-#: cups/ppd-cache.c:3454
+#: cups/ppd-cache.c:3338
msgid "Large Capacity"
msgstr ""
-#: cups/ppd-cache.c:3843
+#: cups/ppd-cache.c:3727
msgid "Large Capacity Tray"
msgstr ""
@@ -4934,19 +4934,19 @@ msgstr ""
msgid "LaserJet Series PCL 4/5"
msgstr ""
-#: cups/ppd-cache.c:3466
+#: cups/ppd-cache.c:3350
msgid "Left"
msgstr ""
-#: cups/ppd-cache.c:3095
+#: cups/ppd-cache.c:2979
msgid "Left Gate Fold"
msgstr ""
-#: cups/ppd-cache.c:3844
+#: cups/ppd-cache.c:3728
msgid "Left Tray"
msgstr ""
-#: cups/ppd-cache.c:3096
+#: cups/ppd-cache.c:2980
msgid "Letter Fold"
msgstr ""
@@ -4958,7 +4958,7 @@ msgstr ""
msgid "Letter Oversize Long Edge"
msgstr ""
-#: cups/ppd-cache.c:3614 cups/ppd-cache.c:3663
+#: cups/ppd-cache.c:3498 cups/ppd-cache.c:3547
msgid "Letterhead"
msgstr ""
@@ -4966,11 +4966,11 @@ msgstr ""
msgid "Light"
msgstr ""
-#: cups/ppd-cache.c:3574
+#: cups/ppd-cache.c:3458
msgid "Lightweight Envelope"
msgstr ""
-#: cups/ppd-cache.c:3664
+#: cups/ppd-cache.c:3548
msgid "Lightweight Paper"
msgstr ""
@@ -4986,67 +4986,67 @@ msgstr ""
msgid "Load paper."
msgstr ""
-#: scheduler/ipp.c:5503
+#: scheduler/ipp.c:5506
msgid "Local printer created."
msgstr ""
-#: cups/ppd-cache.c:3778 ppdc/sample.c:264
+#: cups/ppd-cache.c:3662 ppdc/sample.c:264
msgid "Long-Edge (Portrait)"
msgstr ""
-#: cups/http-support.c:1727
+#: cups/http-support.c:1731
msgid "Looking for printer."
msgstr ""
-#: cups/ppd-cache.c:3845
+#: cups/ppd-cache.c:3729
msgid "Mailbox 1"
msgstr ""
-#: cups/ppd-cache.c:3854
+#: cups/ppd-cache.c:3738
msgid "Mailbox 10"
msgstr ""
-#: cups/ppd-cache.c:3846
+#: cups/ppd-cache.c:3730
msgid "Mailbox 2"
msgstr ""
-#: cups/ppd-cache.c:3847
+#: cups/ppd-cache.c:3731
msgid "Mailbox 3"
msgstr ""
-#: cups/ppd-cache.c:3848
+#: cups/ppd-cache.c:3732
msgid "Mailbox 4"
msgstr ""
-#: cups/ppd-cache.c:3849
+#: cups/ppd-cache.c:3733
msgid "Mailbox 5"
msgstr ""
-#: cups/ppd-cache.c:3850
+#: cups/ppd-cache.c:3734
msgid "Mailbox 6"
msgstr ""
-#: cups/ppd-cache.c:3851
+#: cups/ppd-cache.c:3735
msgid "Mailbox 7"
msgstr ""
-#: cups/ppd-cache.c:3852
+#: cups/ppd-cache.c:3736
msgid "Mailbox 8"
msgstr ""
-#: cups/ppd-cache.c:3853
+#: cups/ppd-cache.c:3737
msgid "Mailbox 9"
msgstr ""
-#: cups/ppd-cache.c:3452
+#: cups/ppd-cache.c:3336
msgid "Main"
msgstr ""
-#: cups/ppd-cache.c:3460
+#: cups/ppd-cache.c:3344
msgid "Main Roll"
msgstr ""
-#: cups/ppd-cache.c:3455
+#: cups/ppd-cache.c:3339
msgid "Manual"
msgstr ""
@@ -5054,27 +5054,27 @@ msgstr ""
msgid "Manual Feed"
msgstr ""
-#: cups/ppd-cache.c:3541
+#: cups/ppd-cache.c:3425
msgid "Matte Brochure Paper"
msgstr ""
-#: cups/ppd-cache.c:3542
+#: cups/ppd-cache.c:3426
msgid "Matte Cover Paper"
msgstr ""
-#: cups/ppd-cache.c:3582
+#: cups/ppd-cache.c:3466
msgid "Matte Fabric"
msgstr ""
-#: cups/ppd-cache.c:3608
+#: cups/ppd-cache.c:3492
msgid "Matte Labels"
msgstr ""
-#: cups/ppd-cache.c:3558
+#: cups/ppd-cache.c:3442
msgid "Matte Optical Disc"
msgstr ""
-#: cups/ppd-cache.c:3632
+#: cups/ppd-cache.c:3516
msgid "Matte Photo Paper"
msgstr ""
@@ -5102,35 +5102,35 @@ msgstr ""
msgid "Memory allocation error"
msgstr ""
-#: cups/ppd-cache.c:3615
+#: cups/ppd-cache.c:3499
msgid "Metal"
msgstr ""
-#: cups/ppd-cache.c:3616
+#: cups/ppd-cache.c:3500
msgid "Metal Glossy"
msgstr ""
-#: cups/ppd-cache.c:3617
+#: cups/ppd-cache.c:3501
msgid "Metal High Gloss"
msgstr ""
-#: cups/ppd-cache.c:3618
+#: cups/ppd-cache.c:3502
msgid "Metal Matte"
msgstr ""
-#: cups/ppd-cache.c:3619
+#: cups/ppd-cache.c:3503
msgid "Metal Satin"
msgstr ""
-#: cups/ppd-cache.c:3620
+#: cups/ppd-cache.c:3504
msgid "Metal Semi Gloss"
msgstr ""
-#: cups/ppd-cache.c:3548
+#: cups/ppd-cache.c:3432
msgid "Mid-Weight Paper"
msgstr ""
-#: cups/ppd-cache.c:3463 cups/ppd-cache.c:3855
+#: cups/ppd-cache.c:3347 cups/ppd-cache.c:3739
msgid "Middle"
msgstr ""
@@ -5146,7 +5146,7 @@ msgstr ""
msgid "Missing asterisk in column 1"
msgstr ""
-#: scheduler/ipp.c:6275
+#: scheduler/ipp.c:6278
msgid "Missing document-number attribute."
msgstr ""
@@ -5161,7 +5161,7 @@ msgstr ""
msgid "Missing form variable"
msgstr ""
-#: scheduler/ipp.c:9661
+#: scheduler/ipp.c:9664
msgid "Missing last-document attribute in request."
msgstr ""
@@ -5173,7 +5173,7 @@ msgstr ""
msgid "Missing media-size in media-col."
msgstr ""
-#: scheduler/ipp.c:6876
+#: scheduler/ipp.c:6879
msgid "Missing notify-subscription-ids attribute."
msgstr ""
@@ -5194,11 +5194,11 @@ msgstr ""
msgid "Missing required attributes."
msgstr ""
-#: cups/http-support.c:1490
+#: cups/http-support.c:1494
msgid "Missing resource in URI"
msgstr ""
-#: cups/http-support.c:1484
+#: cups/http-support.c:1488
msgid "Missing scheme in URI"
msgstr ""
@@ -5240,7 +5240,7 @@ msgstr ""
msgid "Modify Printer"
msgstr ""
-#: cups/ppd-cache.c:3621
+#: cups/ppd-cache.c:3505
msgid "Mounting Tape"
msgstr ""
@@ -5252,43 +5252,43 @@ msgstr ""
msgid "Move Job"
msgstr ""
-#: cups/http-support.c:1357
+#: cups/http-support.c:1361
msgid "Moved Permanently"
msgstr ""
-#: cups/ppd-cache.c:3622
+#: cups/ppd-cache.c:3506
msgid "Multi Layer"
msgstr ""
-#: cups/ppd-cache.c:3623
+#: cups/ppd-cache.c:3507
msgid "Multi Part Form"
msgstr ""
-#: cups/ppd-cache.c:3123
+#: cups/ppd-cache.c:3007
msgid "Multi-Hole Punch (Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3121
+#: cups/ppd-cache.c:3005
msgid "Multi-Hole Punch (Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3120
+#: cups/ppd-cache.c:3004
msgid "Multi-Hole Punch (Reverse Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3122
+#: cups/ppd-cache.c:3006
msgid "Multi-Hole Punch (Reverse Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3470
+#: cups/ppd-cache.c:3354
msgid "Multipurpose"
msgstr ""
-#: cups/ppd-cache.c:3547
+#: cups/ppd-cache.c:3431
msgid "Multipurpose Paper"
msgstr ""
-#: cups/ppd-cache.c:3856
+#: cups/ppd-cache.c:3740
msgid "My Mailbox"
msgstr ""
@@ -5296,7 +5296,7 @@ msgstr ""
msgid "NULL PPD file pointer"
msgstr ""
-#: cups/snmp.c:1003
+#: cups/snmp.c:1007
msgid "Name OID uses indefinite length"
msgstr ""
@@ -5308,11 +5308,11 @@ msgstr ""
msgid "Never"
msgstr ""
-#: cups/tls-darwin.c:668 cups/tls-gnutls.c:502
+#: cups/tls-darwin.c:670 cups/tls-gnutls.c:502
msgid "New credentials are not valid for name."
msgstr ""
-#: cups/tls-darwin.c:658 cups/tls-gnutls.c:492
+#: cups/tls-darwin.c:660 cups/tls-gnutls.c:492
msgid "New credentials are older than stored credentials."
msgstr ""
@@ -5320,11 +5320,11 @@ msgstr ""
msgid "No"
msgstr ""
-#: cups/http-support.c:1354
+#: cups/http-support.c:1358
msgid "No Content"
msgstr ""
-#: cups/ppd-cache.c:3157
+#: cups/ppd-cache.c:3041
msgid "No IPP attributes."
msgstr ""
@@ -5332,7 +5332,7 @@ msgstr ""
msgid "No PPD name"
msgstr ""
-#: cups/snmp.c:997
+#: cups/snmp.c:1001
msgid "No VarBind SEQUENCE"
msgstr ""
@@ -5361,19 +5361,19 @@ msgstr ""
msgid "No authentication information provided."
msgstr ""
-#: cups/tls-darwin.c:608 cups/tls-gnutls.c:439
+#: cups/tls-darwin.c:610 cups/tls-gnutls.c:439
msgid "No common name specified."
msgstr ""
-#: cups/snmp.c:954
+#: cups/snmp.c:958
msgid "No community name"
msgstr ""
-#: scheduler/ipp.c:6075
+#: scheduler/ipp.c:6078
msgid "No default printer."
msgstr ""
-#: cgi-bin/ipp-var.c:422 scheduler/ipp.c:7456
+#: cgi-bin/ipp-var.c:422 scheduler/ipp.c:7459
msgid "No destinations added."
msgstr ""
@@ -5381,15 +5381,15 @@ msgstr ""
msgid "No device URI found in argv[0] or in DEVICE_URI environment variable."
msgstr ""
-#: cups/snmp.c:984
+#: cups/snmp.c:988
msgid "No error-index"
msgstr ""
-#: cups/snmp.c:976
+#: cups/snmp.c:980
msgid "No error-status"
msgstr ""
-#: scheduler/ipp.c:8411 scheduler/ipp.c:9675
+#: scheduler/ipp.c:8414 scheduler/ipp.c:9678
msgid "No file in print request."
msgstr ""
@@ -5397,7 +5397,7 @@ msgstr ""
msgid "No modification time"
msgstr ""
-#: cups/snmp.c:1001
+#: cups/snmp.c:1005
msgid "No name OID"
msgstr ""
@@ -5418,7 +5418,7 @@ msgstr ""
msgid "No printer-uri found for class"
msgstr ""
-#: scheduler/ipp.c:6482
+#: scheduler/ipp.c:6485
msgid "No printer-uri in request."
msgstr ""
@@ -5434,27 +5434,27 @@ msgstr ""
msgid "No request sent."
msgstr ""
-#: cups/snmp.c:968
+#: cups/snmp.c:972
msgid "No request-id"
msgstr ""
-#: cups/tls-darwin.c:688 cups/tls-gnutls.c:522
+#: cups/tls-darwin.c:690 cups/tls-gnutls.c:522
msgid "No stored credentials, not valid for name."
msgstr ""
-#: scheduler/ipp.c:5679
+#: scheduler/ipp.c:5682
msgid "No subscription attributes in request."
msgstr ""
-#: scheduler/ipp.c:7795
+#: scheduler/ipp.c:7798
msgid "No subscriptions found."
msgstr ""
-#: cups/snmp.c:992
+#: cups/snmp.c:996
msgid "No variable-bindings SEQUENCE"
msgstr ""
-#: cups/snmp.c:947
+#: cups/snmp.c:951
msgid "No version number"
msgstr ""
@@ -5466,20 +5466,20 @@ msgstr ""
msgid "Non-continuous (Web sensing)"
msgstr ""
-#: cups/ppd-cache.c:3934 cups/ppd-cache.c:3981 cups/ppd-cache.c:4028
+#: cups/ppd-cache.c:3818 cups/ppd-cache.c:3865 cups/ppd-cache.c:3912
msgid "None"
msgstr ""
-#: cups/ppd-cache.c:4097 cups/ppd-cache.c:4152 cups/ppd-cache.c:4179
+#: cups/ppd-cache.c:3981 cups/ppd-cache.c:4036 cups/ppd-cache.c:4063
#: ppdc/sample.c:238
msgid "Normal"
msgstr ""
-#: cups/http-support.c:1376
+#: cups/http-support.c:1380
msgid "Not Found"
msgstr ""
-#: cups/http-support.c:1388
+#: cups/http-support.c:1392
msgid "Not Implemented"
msgstr ""
@@ -5487,15 +5487,15 @@ msgstr ""
msgid "Not Installed"
msgstr ""
-#: cups/http-support.c:1363
+#: cups/http-support.c:1367
msgid "Not Modified"
msgstr ""
-#: cups/http-support.c:1391
+#: cups/http-support.c:1395
msgid "Not Supported"
msgstr ""
-#: scheduler/ipp.c:1535 scheduler/ipp.c:10936
+#: scheduler/ipp.c:1535 scheduler/ipp.c:10939
msgid "Not allowed to print."
msgstr ""
@@ -5507,15 +5507,15 @@ msgstr ""
msgid "Note: this program only validates the DSC comments, not the PostScript itself."
msgstr ""
-#: cups/http-support.c:1345 cups/http-support.c:1481 cups/ppd.c:313
+#: cups/http-support.c:1349 cups/http-support.c:1485 cups/ppd.c:313
msgid "OK"
msgstr ""
-#: cups/ppd-cache.c:3778 ppdc/sample.c:263
+#: cups/ppd-cache.c:3662 ppdc/sample.c:263
msgid "Off (1-Sided)"
msgstr ""
-#: cups/ppd-cache.c:3543
+#: cups/ppd-cache.c:3427
msgid "Office Recycled Paper"
msgstr ""
@@ -5548,7 +5548,7 @@ msgstr ""
msgid "Operation Policy"
msgstr ""
-#: cups/ppd-cache.c:3555
+#: cups/ppd-cache.c:3439
msgid "Optical Disc"
msgstr ""
@@ -5561,23 +5561,23 @@ msgstr ""
msgid "Options Installed"
msgstr ""
-#: scheduler/cupsfilter.c:1480 scheduler/main.c:2048 systemv/cupsaddsmb.c:276
+#: scheduler/cupsfilter.c:1480 scheduler/main.c:2081 systemv/cupsaddsmb.c:276
#: systemv/cupsctl.c:196 systemv/cupstestdsc.c:421 systemv/cupstestppd.c:3859
-#: test/ippfind.c:2751 test/ipptool.c:4930 ppdc/ppdc.cxx:430
+#: test/ippfind.c:2751 test/ipptool.c:5053 ppdc/ppdc.cxx:430
#: ppdc/ppdhtml.cxx:177 ppdc/ppdi.cxx:123 ppdc/ppdmerge.cxx:361
#: ppdc/ppdpo.cxx:247
msgid "Options:"
msgstr ""
-#: cups/ppd-cache.c:3624
+#: cups/ppd-cache.c:3508
msgid "Other"
msgstr ""
-#: cups/ppd-cache.c:465
+#: cups/ppd-cache.c:464
msgid "Out of date PPD cache file."
msgstr ""
-#: cups/ppd-cache.c:1945
+#: cups/ppd-cache.c:1861
msgid "Out of memory."
msgstr ""
@@ -5629,15 +5629,15 @@ msgstr ""
msgid "PRC32K Oversize Long Edge"
msgstr ""
-#: cups/snmp.c:964
+#: cups/snmp.c:968
msgid "Packet does not contain a Get-Response-PDU"
msgstr ""
-#: cups/snmp.c:943
+#: cups/snmp.c:947
msgid "Packet does not start with SEQUENCE"
msgstr ""
-#: cups/ppd-cache.c:3625
+#: cups/ppd-cache.c:3509
msgid "Paper"
msgstr ""
@@ -5657,7 +5657,7 @@ msgstr ""
msgid "Paper tray is missing."
msgstr ""
-#: cups/ppd-cache.c:3097
+#: cups/ppd-cache.c:2981
msgid "Parallel Fold"
msgstr ""
@@ -5691,15 +5691,15 @@ msgstr ""
msgid "Peel-Off"
msgstr ""
-#: cups/ppd-cache.c:3609
+#: cups/ppd-cache.c:3493
msgid "Permanent Labels"
msgstr ""
-#: cups/ppd-cache.c:3458 ppdc/sample.c:160
+#: cups/ppd-cache.c:3342 ppdc/sample.c:160
msgid "Photo"
msgstr ""
-#: cups/ppd-cache.c:3629
+#: cups/ppd-cache.c:3513
msgid "Photo Film"
msgstr ""
@@ -5707,59 +5707,59 @@ msgstr ""
msgid "Photo Labels"
msgstr ""
-#: cups/ppd-cache.c:3626 cups/ppd-cache.c:3627
+#: cups/ppd-cache.c:3510 cups/ppd-cache.c:3511
msgid "Photo Paper"
msgstr ""
-#: cups/ppd-cache.c:3599 cups/ppd-cache.c:3601
+#: cups/ppd-cache.c:3483 cups/ppd-cache.c:3485
msgid "Photo Paper Plus Glossy II"
msgstr ""
-#: cups/ppd-cache.c:3600 cups/ppd-cache.c:3602
+#: cups/ppd-cache.c:3484 cups/ppd-cache.c:3486
msgid "Photo Paper Pro Platinum"
msgstr ""
-#: cups/ppd-cache.c:3575
+#: cups/ppd-cache.c:3459
msgid "Plain Envelope"
msgstr ""
-#: cups/ppd-cache.c:3655 ppdc/sample.c:281
+#: cups/ppd-cache.c:3539 ppdc/sample.c:281
msgid "Plain Paper"
msgstr ""
-#: cups/ppd-cache.c:3635
+#: cups/ppd-cache.c:3519
msgid "Plastic"
msgstr ""
-#: cups/ppd-cache.c:3636
+#: cups/ppd-cache.c:3520
msgid "Plastic Archival"
msgstr ""
-#: cups/ppd-cache.c:3637
+#: cups/ppd-cache.c:3521
msgid "Plastic Colored"
msgstr ""
-#: cups/ppd-cache.c:3638
+#: cups/ppd-cache.c:3522
msgid "Plastic Glossy"
msgstr ""
-#: cups/ppd-cache.c:3639
+#: cups/ppd-cache.c:3523
msgid "Plastic High Gloss"
msgstr ""
-#: cups/ppd-cache.c:3640
+#: cups/ppd-cache.c:3524
msgid "Plastic Matte"
msgstr ""
-#: cups/ppd-cache.c:3641
+#: cups/ppd-cache.c:3525
msgid "Plastic Satin"
msgstr ""
-#: cups/ppd-cache.c:3642
+#: cups/ppd-cache.c:3526
msgid "Plastic Semi Gloss"
msgstr ""
-#: cups/ppd-cache.c:3643
+#: cups/ppd-cache.c:3527
msgid "Plate"
msgstr ""
@@ -5767,7 +5767,7 @@ msgstr ""
msgid "Policies"
msgstr ""
-#: cups/ppd-cache.c:3644
+#: cups/ppd-cache.c:3528
msgid "Polyester"
msgstr ""
@@ -5795,23 +5795,23 @@ msgstr ""
msgid "Postcard Long Edge"
msgstr ""
-#: cups/ppd-cache.c:3098
+#: cups/ppd-cache.c:2982
msgid "Poster Fold"
msgstr ""
-#: cups/ppd-cache.c:3645
+#: cups/ppd-cache.c:3529
msgid "Pre Cut Tabs"
msgstr ""
-#: cups/ppd-cache.c:3549
+#: cups/ppd-cache.c:3433
msgid "Premium Inkjet Paper"
msgstr ""
-#: cups/ppd-cache.c:3550
+#: cups/ppd-cache.c:3434
msgid "Premium Photo Glossy Paper"
msgstr ""
-#: cups/ppd-cache.c:3551
+#: cups/ppd-cache.c:3435
msgid "Premium Presentation Matte Paper"
msgstr ""
@@ -5819,11 +5819,11 @@ msgstr ""
msgid "Preparing to print."
msgstr ""
-#: cups/ppd-cache.c:3576
+#: cups/ppd-cache.c:3460
msgid "Preprinted Envelope"
msgstr ""
-#: cups/ppd-cache.c:3665
+#: cups/ppd-cache.c:3549
msgid "Preprinted Paper"
msgstr ""
@@ -5839,7 +5839,7 @@ msgstr ""
msgid "Print Mode"
msgstr ""
-#: cups/ppd-cache.c:4090 cups/ppd-cache.c:4147 cups/ppd-cache.c:4176
+#: cups/ppd-cache.c:3974 cups/ppd-cache.c:4031 cups/ppd-cache.c:4060
msgid "Print Quality"
msgstr ""
@@ -5920,7 +5920,7 @@ msgstr ""
msgid "Printer cannot print with supplied options."
msgstr ""
-#: cups/ppd-cache.c:4203
+#: cups/ppd-cache.c:4087
msgid "Printer does not support required IPP attributes or document formats."
msgstr ""
@@ -5938,11 +5938,11 @@ msgstr ""
msgid "Printing page %d, %u%% complete."
msgstr ""
-#: cups/ppd-cache.c:3103 cups/ppd-cache.c:4025
+#: cups/ppd-cache.c:2987 cups/ppd-cache.c:3909
msgid "Punch"
msgstr ""
-#: cups/ppd-cache.c:3666
+#: cups/ppd-cache.c:3550
msgid "Punched Paper"
msgstr ""
@@ -5950,7 +5950,7 @@ msgstr ""
msgid "Quarto"
msgstr ""
-#: scheduler/ipp.c:1530 scheduler/ipp.c:10931
+#: scheduler/ipp.c:1530 scheduler/ipp.c:10934
msgid "Quota limit reached."
msgstr ""
@@ -5958,11 +5958,11 @@ msgstr ""
msgid "Rank Owner Job File(s) Total Size"
msgstr ""
-#: cups/ppd-cache.c:3469
+#: cups/ppd-cache.c:3353
msgid "Rear"
msgstr ""
-#: cups/ppd-cache.c:3857
+#: cups/ppd-cache.c:3741
msgid "Rear Tray"
msgstr ""
@@ -5984,7 +5984,7 @@ msgstr ""
msgid "Reprint After Error"
msgstr ""
-#: cups/http-support.c:1379
+#: cups/http-support.c:1383
msgid "Request Entity Too Large"
msgstr ""
@@ -6008,59 +6008,59 @@ msgstr ""
msgid "Rewind"
msgstr ""
-#: cups/ppd-cache.c:3467
+#: cups/ppd-cache.c:3351
msgid "Right"
msgstr ""
-#: cups/ppd-cache.c:3099
+#: cups/ppd-cache.c:2983
msgid "Right Gate Fold"
msgstr ""
-#: cups/ppd-cache.c:3858
+#: cups/ppd-cache.c:3742
msgid "Right Tray"
msgstr ""
-#: cups/ppd-cache.c:3646
+#: cups/ppd-cache.c:3530
msgid "Roll"
msgstr ""
-#: cups/ppd-cache.c:3491
+#: cups/ppd-cache.c:3375
msgid "Roll 1"
msgstr ""
-#: cups/ppd-cache.c:3500
+#: cups/ppd-cache.c:3384
msgid "Roll 10"
msgstr ""
-#: cups/ppd-cache.c:3492
+#: cups/ppd-cache.c:3376
msgid "Roll 2"
msgstr ""
-#: cups/ppd-cache.c:3493
+#: cups/ppd-cache.c:3377
msgid "Roll 3"
msgstr ""
-#: cups/ppd-cache.c:3494
+#: cups/ppd-cache.c:3378
msgid "Roll 4"
msgstr ""
-#: cups/ppd-cache.c:3495
+#: cups/ppd-cache.c:3379
msgid "Roll 5"
msgstr ""
-#: cups/ppd-cache.c:3496
+#: cups/ppd-cache.c:3380
msgid "Roll 6"
msgstr ""
-#: cups/ppd-cache.c:3497
+#: cups/ppd-cache.c:3381
msgid "Roll 7"
msgstr ""
-#: cups/ppd-cache.c:3498
+#: cups/ppd-cache.c:3382
msgid "Roll 8"
msgstr ""
-#: cups/ppd-cache.c:3499
+#: cups/ppd-cache.c:3383
msgid "Roll 9"
msgstr ""
@@ -6069,75 +6069,75 @@ msgstr ""
msgid "Running command: %s %s -N -A %s -c '%s'"
msgstr ""
-#: cups/snmp.c:945
+#: cups/snmp.c:949
msgid "SEQUENCE uses indefinite length"
msgstr ""
-#: cups/http-support.c:1403
+#: cups/http-support.c:1407
msgid "SSL/TLS Negotiation Error"
msgstr ""
-#: cups/ppd-cache.c:3124
+#: cups/ppd-cache.c:3008
msgid "Saddle Stitch"
msgstr ""
-#: cups/ppd-cache.c:3610
+#: cups/ppd-cache.c:3494
msgid "Satin Labels"
msgstr ""
-#: cups/ppd-cache.c:3559
+#: cups/ppd-cache.c:3443
msgid "Satin Optical Disc"
msgstr ""
-#: cups/ppd-cache.c:3633
+#: cups/ppd-cache.c:3517
msgid "Satin Photo Paper"
msgstr ""
-#: cups/ppd-cache.c:3647
+#: cups/ppd-cache.c:3531
msgid "Screen"
msgstr ""
-#: cups/ppd-cache.c:3648
+#: cups/ppd-cache.c:3532
msgid "Screen Paged"
msgstr ""
-#: cups/ppd-cache.c:3611
+#: cups/ppd-cache.c:3495
msgid "Security Labels"
msgstr ""
-#: cups/http-support.c:1360
+#: cups/http-support.c:1364
msgid "See Other"
msgstr ""
-#: scheduler/ipp.c:7080 scheduler/ipp.c:7099
+#: scheduler/ipp.c:7083 scheduler/ipp.c:7102
msgid "See remote printer."
msgstr ""
-#: cups/ppd-cache.c:3649
+#: cups/ppd-cache.c:3533
msgid "Self Adhesive"
msgstr ""
-#: cups/ppd-cache.c:3650
+#: cups/ppd-cache.c:3534
msgid "Self Adhesive Film"
msgstr ""
-#: cups/tls-darwin.c:743 cups/tls-gnutls.c:584
+#: cups/tls-darwin.c:745 cups/tls-gnutls.c:584
msgid "Self-signed credentials are blocked."
msgstr ""
-#: cups/ppd-cache.c:3583
+#: cups/ppd-cache.c:3467
msgid "Semi-Gloss Fabric"
msgstr ""
-#: cups/ppd-cache.c:3612
+#: cups/ppd-cache.c:3496
msgid "Semi-Gloss Labels"
msgstr ""
-#: cups/ppd-cache.c:3560
+#: cups/ppd-cache.c:3444
msgid "Semi-Gloss Optical Disc"
msgstr ""
-#: cups/ppd-cache.c:3634
+#: cups/ppd-cache.c:3518
msgid "Semi-Gloss Photo Paper"
msgstr ""
@@ -6161,11 +6161,11 @@ msgstr ""
msgid "Server Stopped"
msgstr ""
-#: cups/tls-darwin.c:1183 cups/tls-gnutls.c:1263
+#: cups/tls-darwin.c:1185 cups/tls-gnutls.c:1263
msgid "Server credentials not set."
msgstr ""
-#: cups/http-support.c:1397
+#: cups/http-support.c:1401
msgid "Service Unavailable"
msgstr ""
@@ -6194,63 +6194,63 @@ msgstr ""
msgid "Shipping Address"
msgstr ""
-#: cups/ppd-cache.c:3778 ppdc/sample.c:265
+#: cups/ppd-cache.c:3662 ppdc/sample.c:265
msgid "Short-Edge (Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3651
+#: cups/ppd-cache.c:3535
msgid "Shrink Foil"
msgstr ""
-#: cups/ppd-cache.c:3465
+#: cups/ppd-cache.c:3349
msgid "Side"
msgstr ""
-#: cups/ppd-cache.c:3859
+#: cups/ppd-cache.c:3743
msgid "Side Tray"
msgstr ""
-#: cups/ppd-cache.c:3652
+#: cups/ppd-cache.c:3536
msgid "Single Face"
msgstr ""
-#: cups/ppd-cache.c:3115
+#: cups/ppd-cache.c:2999
msgid "Single Punch (Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3114
+#: cups/ppd-cache.c:2998
msgid "Single Punch (Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3104
+#: cups/ppd-cache.c:2988
msgid "Single Punch (Reverse Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3105
+#: cups/ppd-cache.c:2989
msgid "Single Punch (Reverse Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3133
+#: cups/ppd-cache.c:3017
msgid "Single Staple (Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3132
+#: cups/ppd-cache.c:3016
msgid "Single Staple (Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3126
+#: cups/ppd-cache.c:3010
msgid "Single Staple (Reverse Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3127
+#: cups/ppd-cache.c:3011
msgid "Single Staple (Reverse Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3653
+#: cups/ppd-cache.c:3537
msgid "Single Wall Cardboard"
msgstr ""
-#: cups/ppd-cache.c:3654
+#: cups/ppd-cache.c:3538
msgid "Sleeve"
msgstr ""
@@ -6263,43 +6263,43 @@ msgstr ""
msgid "Spooling job, %.0f%% complete."
msgstr ""
-#: cups/ppd-cache.c:3860
+#: cups/ppd-cache.c:3744
msgid "Stacker 1"
msgstr ""
-#: cups/ppd-cache.c:3869
+#: cups/ppd-cache.c:3753
msgid "Stacker 10"
msgstr ""
-#: cups/ppd-cache.c:3861
+#: cups/ppd-cache.c:3745
msgid "Stacker 2"
msgstr ""
-#: cups/ppd-cache.c:3862
+#: cups/ppd-cache.c:3746
msgid "Stacker 3"
msgstr ""
-#: cups/ppd-cache.c:3863
+#: cups/ppd-cache.c:3747
msgid "Stacker 4"
msgstr ""
-#: cups/ppd-cache.c:3864
+#: cups/ppd-cache.c:3748
msgid "Stacker 5"
msgstr ""
-#: cups/ppd-cache.c:3865
+#: cups/ppd-cache.c:3749
msgid "Stacker 6"
msgstr ""
-#: cups/ppd-cache.c:3866
+#: cups/ppd-cache.c:3750
msgid "Stacker 7"
msgstr ""
-#: cups/ppd-cache.c:3867
+#: cups/ppd-cache.c:3751
msgid "Stacker 8"
msgstr ""
-#: cups/ppd-cache.c:3868
+#: cups/ppd-cache.c:3752
msgid "Stacker 9"
msgstr ""
@@ -6307,27 +6307,27 @@ msgstr ""
msgid "Standard"
msgstr ""
-#: cups/ppd-cache.c:3125 cups/ppd-cache.c:3931
+#: cups/ppd-cache.c:3009 cups/ppd-cache.c:3815
msgid "Staple"
msgstr ""
-#: cups/ppd-cache.c:3083
+#: cups/ppd-cache.c:2967
msgid "Staple Edge"
msgstr ""
-#: cups/ppd-cache.c:3087
+#: cups/ppd-cache.c:2971
msgid "Staple Edge (Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3085
+#: cups/ppd-cache.c:2969
msgid "Staple Edge (Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3084
+#: cups/ppd-cache.c:2968
msgid "Staple Edge (Reverse Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3086
+#: cups/ppd-cache.c:2970
msgid "Staple Edge (Reverse Portrait)"
msgstr ""
@@ -6346,8 +6346,8 @@ msgstr ""
msgid "Statement"
msgstr ""
-#: scheduler/ipp.c:3593 scheduler/ipp.c:6892 scheduler/ipp.c:7602
-#: scheduler/ipp.c:9123
+#: scheduler/ipp.c:3593 scheduler/ipp.c:6895 scheduler/ipp.c:7605
+#: scheduler/ipp.c:9126
#, c-format
msgid "Subscription #%d does not exist."
msgstr ""
@@ -6368,11 +6368,11 @@ msgstr ""
msgid "Super B/A3"
msgstr ""
-#: cups/http-support.c:1342
+#: cups/http-support.c:1346
msgid "Switching Protocols"
msgstr ""
-#: cups/ppd-cache.c:3667
+#: cups/ppd-cache.c:3551
msgid "Tab Stock"
msgstr ""
@@ -6405,8 +6405,8 @@ msgstr ""
msgid "The \"%s\" attribute is required for print jobs."
msgstr ""
-#: scheduler/ipp.c:6553 scheduler/ipp.c:6633 scheduler/ipp.c:6646
-#: scheduler/ipp.c:6658 scheduler/ipp.c:6673
+#: scheduler/ipp.c:6556 scheduler/ipp.c:6636 scheduler/ipp.c:6649
+#: scheduler/ipp.c:6661 scheduler/ipp.c:6676
#, c-format
msgid "The %s attribute cannot be provided with job-ids."
msgstr ""
@@ -6421,12 +6421,12 @@ msgstr ""
msgid "The '%s' operation attribute cannot be supplied in a Create-Job request."
msgstr ""
-#: scheduler/ipp.c:7122
+#: scheduler/ipp.c:7125
#, c-format
msgid "The PPD file \"%s\" could not be found."
msgstr ""
-#: scheduler/ipp.c:7111
+#: scheduler/ipp.c:7114
#, c-format
msgid "The PPD file \"%s\" could not be opened: %s"
msgstr ""
@@ -6460,7 +6460,7 @@ msgstr ""
msgid "The notify-lease-duration attribute cannot be used with job subscriptions."
msgstr ""
-#: scheduler/ipp.c:2095 scheduler/ipp.c:5804
+#: scheduler/ipp.c:2095 scheduler/ipp.c:5807
#, c-format
msgid "The notify-user-data value is too large (%d > 63 octets)."
msgstr ""
@@ -6537,13 +6537,13 @@ msgid "The printer name may only contain up to 127 printable characters and may
msgstr ""
#: scheduler/ipp.c:789 scheduler/ipp.c:1072 scheduler/ipp.c:3232
-#: scheduler/ipp.c:3413 scheduler/ipp.c:5213 scheduler/ipp.c:5638
-#: scheduler/ipp.c:5953 scheduler/ipp.c:6519 scheduler/ipp.c:7326
-#: scheduler/ipp.c:7382 scheduler/ipp.c:7708 scheduler/ipp.c:7980
-#: scheduler/ipp.c:8069 scheduler/ipp.c:8102 scheduler/ipp.c:8426
-#: scheduler/ipp.c:8833 scheduler/ipp.c:8915 scheduler/ipp.c:10089
-#: scheduler/ipp.c:10541 scheduler/ipp.c:10894 scheduler/ipp.c:10976
-#: scheduler/ipp.c:11351
+#: scheduler/ipp.c:3413 scheduler/ipp.c:5213 scheduler/ipp.c:5641
+#: scheduler/ipp.c:5956 scheduler/ipp.c:6522 scheduler/ipp.c:7329
+#: scheduler/ipp.c:7385 scheduler/ipp.c:7711 scheduler/ipp.c:7983
+#: scheduler/ipp.c:8072 scheduler/ipp.c:8105 scheduler/ipp.c:8429
+#: scheduler/ipp.c:8836 scheduler/ipp.c:8918 scheduler/ipp.c:10092
+#: scheduler/ipp.c:10544 scheduler/ipp.c:10897 scheduler/ipp.c:10979
+#: scheduler/ipp.c:11354
msgid "The printer or class does not exist."
msgstr ""
@@ -6596,12 +6596,12 @@ msgstr ""
msgid "The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to enable it."
msgstr ""
-#: scheduler/ipp.c:6617
+#: scheduler/ipp.c:6620
#, c-format
msgid "The which-jobs value \"%s\" is not supported."
msgstr ""
-#: scheduler/ipp.c:5882
+#: scheduler/ipp.c:5885
msgid "There are too many subscriptions."
msgstr ""
@@ -6628,23 +6628,23 @@ msgstr ""
msgid "Too many printer-state-reasons values (%d > %d)."
msgstr ""
-#: cups/ppd-cache.c:3462
+#: cups/ppd-cache.c:3346
msgid "Top"
msgstr ""
-#: cups/ppd-cache.c:3870
+#: cups/ppd-cache.c:3754
msgid "Top Tray"
msgstr ""
-#: cups/ppd-cache.c:3668
+#: cups/ppd-cache.c:3552
msgid "Tractor"
msgstr ""
-#: cups/ppd-cache.c:3669
+#: cups/ppd-cache.c:3553
msgid "Transfer"
msgstr ""
-#: cups/ppd-cache.c:3670 ppdc/sample.c:284
+#: cups/ppd-cache.c:3554 ppdc/sample.c:284
msgid "Transparency"
msgstr ""
@@ -6652,116 +6652,116 @@ msgstr ""
msgid "Tray"
msgstr ""
-#: cups/ppd-cache.c:3471 cups/ppd-cache.c:3871 ppdc/sample.c:256
+#: cups/ppd-cache.c:3355 cups/ppd-cache.c:3755 ppdc/sample.c:256
msgid "Tray 1"
msgstr ""
-#: cups/ppd-cache.c:3480 cups/ppd-cache.c:3880
+#: cups/ppd-cache.c:3364 cups/ppd-cache.c:3764
msgid "Tray 10"
msgstr ""
-#: cups/ppd-cache.c:3481
+#: cups/ppd-cache.c:3365
msgid "Tray 11"
msgstr ""
-#: cups/ppd-cache.c:3482
+#: cups/ppd-cache.c:3366
msgid "Tray 12"
msgstr ""
-#: cups/ppd-cache.c:3483
+#: cups/ppd-cache.c:3367
msgid "Tray 13"
msgstr ""
-#: cups/ppd-cache.c:3484
+#: cups/ppd-cache.c:3368
msgid "Tray 14"
msgstr ""
-#: cups/ppd-cache.c:3485
+#: cups/ppd-cache.c:3369
msgid "Tray 15"
msgstr ""
-#: cups/ppd-cache.c:3486
+#: cups/ppd-cache.c:3370
msgid "Tray 16"
msgstr ""
-#: cups/ppd-cache.c:3487
+#: cups/ppd-cache.c:3371
msgid "Tray 17"
msgstr ""
-#: cups/ppd-cache.c:3488
+#: cups/ppd-cache.c:3372
msgid "Tray 18"
msgstr ""
-#: cups/ppd-cache.c:3489
+#: cups/ppd-cache.c:3373
msgid "Tray 19"
msgstr ""
-#: cups/ppd-cache.c:3472 cups/ppd-cache.c:3872 ppdc/sample.c:257
+#: cups/ppd-cache.c:3356 cups/ppd-cache.c:3756 ppdc/sample.c:257
msgid "Tray 2"
msgstr ""
-#: cups/ppd-cache.c:3490
+#: cups/ppd-cache.c:3374
msgid "Tray 20"
msgstr ""
-#: cups/ppd-cache.c:3473 cups/ppd-cache.c:3873 ppdc/sample.c:258
+#: cups/ppd-cache.c:3357 cups/ppd-cache.c:3757 ppdc/sample.c:258
msgid "Tray 3"
msgstr ""
-#: cups/ppd-cache.c:3474 cups/ppd-cache.c:3874 ppdc/sample.c:259
+#: cups/ppd-cache.c:3358 cups/ppd-cache.c:3758 ppdc/sample.c:259
msgid "Tray 4"
msgstr ""
-#: cups/ppd-cache.c:3475 cups/ppd-cache.c:3875
+#: cups/ppd-cache.c:3359 cups/ppd-cache.c:3759
msgid "Tray 5"
msgstr ""
-#: cups/ppd-cache.c:3476 cups/ppd-cache.c:3876
+#: cups/ppd-cache.c:3360 cups/ppd-cache.c:3760
msgid "Tray 6"
msgstr ""
-#: cups/ppd-cache.c:3477 cups/ppd-cache.c:3877
+#: cups/ppd-cache.c:3361 cups/ppd-cache.c:3761
msgid "Tray 7"
msgstr ""
-#: cups/ppd-cache.c:3478 cups/ppd-cache.c:3878
+#: cups/ppd-cache.c:3362 cups/ppd-cache.c:3762
msgid "Tray 8"
msgstr ""
-#: cups/ppd-cache.c:3479 cups/ppd-cache.c:3879
+#: cups/ppd-cache.c:3363 cups/ppd-cache.c:3763
msgid "Tray 9"
msgstr ""
-#: cups/ppd-cache.c:3137
+#: cups/ppd-cache.c:3021
msgid "Triple Staple (Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3135
+#: cups/ppd-cache.c:3019
msgid "Triple Staple (Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3134
+#: cups/ppd-cache.c:3018
msgid "Triple Staple (Reverse Landscape)"
msgstr ""
-#: cups/ppd-cache.c:3136
+#: cups/ppd-cache.c:3020
msgid "Triple Staple (Reverse Portrait)"
msgstr ""
-#: cups/ppd-cache.c:3671
+#: cups/ppd-cache.c:3555
msgid "Triple Wall Cardboard"
msgstr ""
-#: cups/tls-darwin.c:648 cups/tls-darwin.c:730 cups/tls-gnutls.c:482
+#: cups/tls-darwin.c:650 cups/tls-darwin.c:732 cups/tls-gnutls.c:482
#: cups/tls-gnutls.c:564
msgid "Trust on first use is disabled."
msgstr ""
-#: cups/http-support.c:1382
+#: cups/http-support.c:1386
msgid "URI Too Long"
msgstr ""
-#: cups/http-support.c:1457
+#: cups/http-support.c:1461
msgid "URI too large"
msgstr ""
@@ -6915,11 +6915,11 @@ msgstr ""
msgid "Unable to copy Windows 9x printer driver files (%d)."
msgstr ""
-#: cups/tls-darwin.c:614 cups/tls-gnutls.c:445
+#: cups/tls-darwin.c:616 cups/tls-gnutls.c:445
msgid "Unable to create credentials from array."
msgstr ""
-#: cups/ppd-util.c:542 cups/util.c:482
+#: cups/ppd-util.c:542 cups/util.c:500
msgid "Unable to create printer-uri"
msgstr ""
@@ -6927,7 +6927,7 @@ msgstr ""
msgid "Unable to create printer."
msgstr ""
-#: cups/tls-darwin.c:1444 cups/tls-gnutls.c:1475
+#: cups/tls-darwin.c:1446 cups/tls-gnutls.c:1475
msgid "Unable to create server credentials."
msgstr ""
@@ -6951,35 +6951,35 @@ msgstr ""
msgid "Unable to edit cupsd.conf files larger than 1MB"
msgstr ""
-#: cups/tls-darwin.c:1611
+#: cups/tls-darwin.c:1613
msgid "Unable to establish a secure connection to host (certificate chain invalid)."
msgstr ""
-#: cups/tls-darwin.c:1601
+#: cups/tls-darwin.c:1603
msgid "Unable to establish a secure connection to host (certificate not yet valid)."
msgstr ""
-#: cups/tls-darwin.c:1596
+#: cups/tls-darwin.c:1598
msgid "Unable to establish a secure connection to host (expired certificate)."
msgstr ""
-#: cups/tls-darwin.c:1606
+#: cups/tls-darwin.c:1608
msgid "Unable to establish a secure connection to host (host name mismatch)."
msgstr ""
-#: cups/tls-darwin.c:1616
+#: cups/tls-darwin.c:1618
msgid "Unable to establish a secure connection to host (peer dropped connection before responding)."
msgstr ""
-#: cups/tls-darwin.c:1591
+#: cups/tls-darwin.c:1593
msgid "Unable to establish a secure connection to host (self-signed certificate)."
msgstr ""
-#: cups/tls-darwin.c:1586
+#: cups/tls-darwin.c:1588
msgid "Unable to establish a secure connection to host (untrusted certificate)."
msgstr ""
-#: cups/tls-darwin.c:1643 cups/tls-sspi.c:1277 cups/tls-sspi.c:1294
+#: cups/tls-darwin.c:1645 cups/tls-sspi.c:1277 cups/tls-sspi.c:1294
msgid "Unable to establish a secure connection to host."
msgstr ""
@@ -6987,11 +6987,11 @@ msgstr ""
msgid "Unable to find destination for job"
msgstr ""
-#: cups/http-support.c:1951
+#: cups/http-support.c:1955
msgid "Unable to find printer."
msgstr ""
-#: cups/tls-darwin.c:1457
+#: cups/tls-darwin.c:1459
msgid "Unable to find server credentials."
msgstr ""
@@ -7079,7 +7079,7 @@ msgstr ""
msgid "Unable to open device file"
msgstr ""
-#: scheduler/ipp.c:6296
+#: scheduler/ipp.c:6299
#, c-format
msgid "Unable to open document #%d in job #%d."
msgstr ""
@@ -7108,11 +7108,11 @@ msgstr ""
msgid "Unable to read print data."
msgstr ""
-#: scheduler/ipp.c:8585 scheduler/ipp.c:9828
+#: scheduler/ipp.c:8588 scheduler/ipp.c:9831
msgid "Unable to rename job document file."
msgstr ""
-#: cups/dest.c:3534
+#: cups/dest.c:3773
msgid "Unable to resolve printer-uri."
msgstr ""
@@ -7167,7 +7167,7 @@ msgstr ""
msgid "Unable to write uncompressed print data: %s"
msgstr ""
-#: cups/http-support.c:1370
+#: cups/http-support.c:1374
msgid "Unauthorized"
msgstr ""
@@ -7175,7 +7175,7 @@ msgstr ""
msgid "Units"
msgstr ""
-#: cups/http-support.c:1410 cups/http-support.c:1494 cups/ppd.c:341
+#: cups/http-support.c:1414 cups/http-support.c:1498 cups/ppd.c:341
msgid "Unknown"
msgstr ""
@@ -7203,7 +7203,7 @@ msgstr ""
msgid "Unknown hash algorithm."
msgstr ""
-#: cups/dest-options.c:963
+#: cups/dest-options.c:1024
msgid "Unknown media size name."
msgstr ""
@@ -7222,12 +7222,12 @@ msgstr ""
msgid "Unknown print mode: \"%s\"."
msgstr ""
-#: scheduler/ipp.c:10763
+#: scheduler/ipp.c:10766
#, c-format
msgid "Unknown printer-error-policy \"%s\"."
msgstr ""
-#: scheduler/ipp.c:10746
+#: scheduler/ipp.c:10749
#, c-format
msgid "Unknown printer-op-policy \"%s\"."
msgstr ""
@@ -7240,7 +7240,7 @@ msgstr ""
msgid "Unknown request version."
msgstr ""
-#: cups/http-support.c:1487
+#: cups/http-support.c:1491
msgid "Unknown scheme in URI"
msgstr ""
@@ -7253,17 +7253,17 @@ msgstr ""
msgid "Unknown version option value: \"%s\"."
msgstr ""
-#: scheduler/ipp.c:11222
+#: scheduler/ipp.c:11225
#, c-format
msgid "Unsupported 'compression' value \"%s\"."
msgstr ""
-#: scheduler/ipp.c:11252
+#: scheduler/ipp.c:11255
#, c-format
msgid "Unsupported 'document-format' value \"%s\"."
msgstr ""
-#: scheduler/ipp.c:11327
+#: scheduler/ipp.c:11330
msgid "Unsupported 'job-name' value."
msgstr ""
@@ -7272,17 +7272,17 @@ msgstr ""
msgid "Unsupported character set \"%s\"."
msgstr ""
-#: scheduler/ipp.c:8392 scheduler/ipp.c:9640
+#: scheduler/ipp.c:8395 scheduler/ipp.c:9643
#, c-format
msgid "Unsupported compression \"%s\"."
msgstr ""
-#: scheduler/ipp.c:8528 scheduler/ipp.c:9793
+#: scheduler/ipp.c:8531 scheduler/ipp.c:9796
#, c-format
msgid "Unsupported document-format \"%s\"."
msgstr ""
-#: scheduler/ipp.c:9776
+#: scheduler/ipp.c:9779
#, c-format
msgid "Unsupported document-format \"%s/%s\"."
msgstr ""
@@ -7320,11 +7320,11 @@ msgstr ""
msgid "Unsupported raster data."
msgstr ""
-#: cups/snmp.c:1062
+#: cups/snmp.c:1066
msgid "Unsupported value type"
msgstr ""
-#: cups/http-support.c:1385
+#: cups/http-support.c:1389
msgid "Upgrade Required"
msgstr ""
@@ -7356,7 +7356,7 @@ msgstr ""
msgid "Usage: cupsctl [options] [param=value ... paramN=valueN]"
msgstr ""
-#: scheduler/main.c:2047
+#: scheduler/main.c:2080
msgid "Usage: cupsd [options]"
msgstr ""
@@ -7380,7 +7380,7 @@ msgid ""
" ippfind --version"
msgstr ""
-#: test/ipptool.c:4928
+#: test/ipptool.c:5052
msgid "Usage: ipptool [options] URI filename [ ... filenameN ]"
msgstr ""
@@ -7424,19 +7424,19 @@ msgstr ""
msgid "Usage: snmp [host-or-ip-address]"
msgstr ""
-#: cups/snmp.c:1014
+#: cups/snmp.c:1018
msgid "Value uses indefinite length"
msgstr ""
-#: cups/snmp.c:999
+#: cups/snmp.c:1003
msgid "VarBind uses indefinite length"
msgstr ""
-#: cups/ppd-cache.c:3659
+#: cups/ppd-cache.c:3543
msgid "Vellum Paper"
msgstr ""
-#: cups/snmp.c:949
+#: cups/snmp.c:953
msgid "Version uses indefinite length"
msgstr ""
@@ -7456,19 +7456,19 @@ msgstr ""
msgid "Warning, no Windows 2000 printer drivers are installed."
msgstr ""
-#: cups/ppd-cache.c:3584
+#: cups/ppd-cache.c:3468
msgid "Waterproof Fabric"
msgstr ""
-#: cups/http-support.c:1406
+#: cups/http-support.c:1410
msgid "Web Interface is Disabled"
msgstr ""
-#: cups/ppd-cache.c:3672
+#: cups/ppd-cache.c:3556
msgid "Wet Film"
msgstr ""
-#: cups/ppd-cache.c:3577
+#: cups/ppd-cache.c:3461
msgid "Windowed Envelope"
msgstr ""
@@ -7481,7 +7481,7 @@ msgstr ""
msgid "You must access this page using the URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A>."
msgstr ""
-#: cups/ppd-cache.c:3100
+#: cups/ppd-cache.c:2984
msgid "Z Fold"
msgstr ""
@@ -7505,11 +7505,11 @@ msgstr ""
msgid "completed"
msgstr ""
-#: scheduler/ipp.c:6168
+#: scheduler/ipp.c:6171
msgid "cups-deviced failed to execute."
msgstr ""
-#: scheduler/ipp.c:7054 scheduler/ipp.c:7293
+#: scheduler/ipp.c:7057 scheduler/ipp.c:7296
msgid "cups-driverd failed to execute."
msgstr ""
@@ -7537,36 +7537,36 @@ msgstr ""
msgid "cupsctl: Unknown option \"-%c\""
msgstr ""
-#: scheduler/main.c:178
+#: scheduler/main.c:180
msgid "cupsd: Expected config filename after \"-c\" option."
msgstr ""
-#: scheduler/main.c:274
+#: scheduler/main.c:276
msgid "cupsd: Expected cups-files.conf filename after \"-s\" option."
msgstr ""
-#: scheduler/main.c:248
+#: scheduler/main.c:250
msgid "cupsd: On-demand support not compiled in, running in normal mode."
msgstr ""
-#: scheduler/main.c:285
+#: scheduler/main.c:287
msgid "cupsd: Relative cups-files.conf filename not allowed."
msgstr ""
-#: scheduler/main.c:209 scheduler/main.c:216
+#: scheduler/main.c:211 scheduler/main.c:218
msgid "cupsd: Unable to get current directory."
msgstr ""
-#: scheduler/main.c:341 scheduler/main.c:350
+#: scheduler/main.c:343 scheduler/main.c:352
msgid "cupsd: Unable to get path to cups-files.conf file."
msgstr ""
-#: scheduler/main.c:323
+#: scheduler/main.c:325
#, c-format
msgid "cupsd: Unknown argument \"%s\" - aborting."
msgstr ""
-#: scheduler/main.c:316
+#: scheduler/main.c:318
#, c-format
msgid "cupsd: Unknown option \"%c\" - aborting."
msgstr ""
@@ -7598,21 +7598,21 @@ msgstr ""
msgid "cupstestppd: The -v option is incompatible with the -q option."
msgstr ""
-#: systemv/lpstat.c:1230 systemv/lpstat.c:1233 systemv/lpstat.c:1236
+#: systemv/lpstat.c:1265 systemv/lpstat.c:1268 systemv/lpstat.c:1271
#, c-format
msgid "device for %s/%s: %s"
msgstr ""
-#: systemv/lpstat.c:1216 systemv/lpstat.c:1219 systemv/lpstat.c:1222
+#: systemv/lpstat.c:1251 systemv/lpstat.c:1254 systemv/lpstat.c:1257
#, c-format
msgid "device for %s: %s"
msgstr ""
-#: cups/snmp.c:986
+#: cups/snmp.c:990
msgid "error-index uses indefinite length"
msgstr ""
-#: cups/snmp.c:978
+#: cups/snmp.c:982
msgid "error-status uses indefinite length"
msgstr ""
@@ -7727,49 +7727,49 @@ msgstr ""
msgid "ippfind: Unknown variable \"{%s}\"."
msgstr ""
-#: test/ipptool.c:317 test/ipptool.c:380 test/ipptool.c:535 test/ipptool.c:558
+#: test/ipptool.c:318 test/ipptool.c:381 test/ipptool.c:536 test/ipptool.c:559
msgid "ipptool: \"-i\" and \"-n\" are incompatible with \"-P\" and \"-X\"."
msgstr ""
-#: test/ipptool.c:614
+#: test/ipptool.c:615
#, c-format
msgid "ipptool: Bad URI - %s."
msgstr ""
-#: test/ipptool.c:528
+#: test/ipptool.c:529
msgid "ipptool: Invalid seconds for \"-i\"."
msgstr ""
-#: test/ipptool.c:595
+#: test/ipptool.c:596
msgid "ipptool: May only specify a single URI."
msgstr ""
-#: test/ipptool.c:550
+#: test/ipptool.c:551
msgid "ipptool: Missing count for \"-n\"."
msgstr ""
-#: test/ipptool.c:414
+#: test/ipptool.c:415
msgid "ipptool: Missing filename for \"-f\"."
msgstr ""
-#: test/ipptool.c:395
+#: test/ipptool.c:396
msgid "ipptool: Missing name=value for \"-d\"."
msgstr ""
-#: test/ipptool.c:518
+#: test/ipptool.c:519
msgid "ipptool: Missing seconds for \"-i\"."
msgstr ""
-#: test/ipptool.c:640
+#: test/ipptool.c:641
msgid "ipptool: URI required before test file."
msgstr ""
-#: test/ipptool.c:576
+#: test/ipptool.c:577
#, c-format
msgid "ipptool: Unknown option \"-%c\"."
msgstr ""
-#: scheduler/ipp.c:8058
+#: scheduler/ipp.c:8061
msgid "job-printer-uri attribute missing."
msgstr ""
@@ -7985,12 +7985,12 @@ msgstr ""
msgid "lpoptions: Unknown printer or class."
msgstr ""
-#: systemv/lpstat.c:1072
+#: systemv/lpstat.c:1107
#, c-format
msgid "lpstat: error - %s environment variable names non-existent destination \"%s\"."
msgstr ""
-#: systemv/lpstat.c:1008
+#: systemv/lpstat.c:1043
#, c-format
msgid "members of class %s:"
msgstr ""
@@ -7999,20 +7999,20 @@ msgstr ""
msgid "no entries"
msgstr ""
-#: systemv/lpstat.c:1076
+#: systemv/lpstat.c:1111
msgid "no system default destination"
msgstr ""
-#: scheduler/ipp.c:5853
+#: scheduler/ipp.c:5856
msgid "notify-events not specified."
msgstr ""
-#: scheduler/ipp.c:2049 scheduler/ipp.c:5758
+#: scheduler/ipp.c:2049 scheduler/ipp.c:5761
#, c-format
msgid "notify-recipient-uri URI \"%s\" is already used."
msgstr ""
-#: scheduler/ipp.c:2039 scheduler/ipp.c:5748
+#: scheduler/ipp.c:2039 scheduler/ipp.c:5751
#, c-format
msgid "notify-recipient-uri URI \"%s\" uses unknown scheme."
msgstr ""
@@ -8494,32 +8494,32 @@ msgstr ""
msgid "ppdmerge: Unable to backup %s to %s - %s"
msgstr ""
-#: systemv/lpstat.c:1775
+#: systemv/lpstat.c:1810
#, c-format
msgid "printer %s disabled since %s -"
msgstr ""
-#: systemv/lpstat.c:1764
+#: systemv/lpstat.c:1799
#, c-format
msgid "printer %s is idle. enabled since %s"
msgstr ""
-#: systemv/lpstat.c:1769
+#: systemv/lpstat.c:1804
#, c-format
msgid "printer %s now printing %s-%d. enabled since %s"
msgstr ""
-#: systemv/lpstat.c:1894
+#: systemv/lpstat.c:1929
#, c-format
msgid "printer %s/%s disabled since %s -"
msgstr ""
-#: systemv/lpstat.c:1880
+#: systemv/lpstat.c:1915
#, c-format
msgid "printer %s/%s is idle. enabled since %s"
msgstr ""
-#: systemv/lpstat.c:1887
+#: systemv/lpstat.c:1922
#, c-format
msgid "printer %s/%s now printing %s-%d. enabled since %s"
msgstr ""
@@ -8533,15 +8533,15 @@ msgstr ""
msgid "request id is %s-%d (%d file(s))"
msgstr ""
-#: cups/snmp.c:970
+#: cups/snmp.c:974
msgid "request-id uses indefinite length"
msgstr ""
-#: systemv/lpstat.c:2022
+#: systemv/lpstat.c:2057
msgid "scheduler is not running"
msgstr ""
-#: systemv/lpstat.c:2018
+#: systemv/lpstat.c:2053
msgid "scheduler is running"
msgstr ""
@@ -8558,12 +8558,12 @@ msgstr ""
msgid "stopped"
msgstr ""
-#: systemv/lpstat.c:1050
+#: systemv/lpstat.c:1085
#, c-format
msgid "system default destination: %s"
msgstr ""
-#: systemv/lpstat.c:1047
+#: systemv/lpstat.c:1082
#, c-format
msgid "system default destination: %s/%s"
msgstr ""
@@ -8576,7 +8576,7 @@ msgstr ""
msgid "untitled"
msgstr ""
-#: cups/snmp.c:995
+#: cups/snmp.c:999
msgid "variable-bindings uses indefinite length"
msgstr ""
diff --git a/locale/cups.strings b/locale/cups.strings
index 0f267cb..8f82709 100644
--- a/locale/cups.strings
+++ b/locale/cups.strings
@@ -25,7 +25,7 @@
"\tUsers denied:" = "\tUsers denied:";
"\tdaemon present" = "\tdaemon present";
"\tno entries" = "\tno entries";
-"\tprinter is on device '%s' speed -1" = "\tprinter is on device '%s' speed -1";
+"\tprinter is on device '%s' speed -1" = "\tprinter is on device ‘s’speed -1";
"\tprinting is disabled" = "\tprinting is disabled";
"\tprinting is enabled" = "\tprinting is enabled";
"\tqueued for %s" = "\tqueued for %s";
@@ -216,7 +216,7 @@
" -D Remove the input file when finished." = " -D Remove the input file when finished.";
" -D name=value Set named variable to value." = " -D name=value Set named variable to value.";
" -E Encrypt the connection." = " -E Encrypt the connection.";
-" -E Test with HTTP Upgrade to TLS." = " -E Test with HTTP Upgrade to TLS.";
+" -E Test with encryption using HTTP Upgrade to TLS." = " -E Test with encryption using HTTP Upgrade to TLS.";
" -F Run in the foreground but detach from console." = " -F Run in the foreground but detach from console.";
" -H samba-server Use the named SAMBA server." = " -H samba-server Use the named SAMBA server.";
" -I Ignore errors." = " -I Ignore errors.";
@@ -227,7 +227,7 @@
" -P filename.ppd Set PPD file." = " -P filename.ppd Set PPD file.";
" -P number[-number] Match port to number or range." = " -P number[-number] Match port to number or range.";
" -R root-directory Set alternate root." = " -R root-directory Set alternate root.";
-" -S Test with SSL encryption." = " -S Test with SSL encryption.";
+" -S Test with encryption using HTTPS." = " -S Test with encryption using HTTPS.";
" -T seconds Set the browse timeout in seconds." = " -T seconds Set the browse timeout in seconds.";
" -T seconds Set the receive/send timeout in seconds." = " -T seconds Set the receive/send timeout in seconds.";
" -U username Specify username." = " -U username Specify username.";
@@ -269,7 +269,7 @@
" -q Quietly report match via exit code." = " -q Quietly report match via exit code.";
" -q Run silently." = " -q Run silently.";
" -r True if service is remote." = " -r True if service is remote.";
-" -r Use 'relaxed' open mode." = " -r Use 'relaxed' open mode.";
+" -r Use 'relaxed' open mode." = " -r Use ‘elaxed’open mode.";
" -s Print service name if true." = " -s Print service name if true.";
" -s cups-files.conf Set cups-files.conf file to use." = " -s cups-files.conf Set cups-files.conf file to use.";
" -t Produce a test report." = " -t Produce a test report.";
@@ -305,40 +305,40 @@
" {} URI" = " {} URI";
" FAIL" = " FAIL";
" PASS" = " PASS";
-"\"%s\": Bad URI value \"%s\" - %s (RFC 2911 section 4.1.5)." = "“%s”: Bad URI value “%s” - %s (RFC 2911 section 4.1.5).";
-"\"%s\": Bad URI value \"%s\" - bad length %d (RFC 2911 section 4.1.5)." = "“%s”: Bad URI value “%s” - bad length %d (RFC 2911 section 4.1.5).";
-"\"%s\": Bad attribute name - bad length %d (RFC 2911 section 4.1.3)." = "“%s”: Bad attribute name - bad length %d (RFC 2911 section 4.1.3).";
-"\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)." = "“%s”: Bad attribute name - invalid character (RFC 2911 section 4.1.3).";
-"\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11)." = "“%s”: Bad boolen value %d (RFC 2911 section 4.1.11).";
-"\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section 4.1.7)." = "“%s”: Bad charset value “%s” - bad characters (RFC 2911 section 4.1.7).";
-"\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)." = "“%s”: Bad charset value “%s” - bad length %d (RFC 2911 section 4.1.7).";
-"\"%s\": Bad dateTime UTC hours %u (RFC 2911 section 4.1.14)." = "“%s”: Bad dateTime UTC hours %u (RFC 2911 section 4.1.14).";
-"\"%s\": Bad dateTime UTC minutes %u (RFC 2911 section 4.1.14)." = "“%s”: Bad dateTime UTC minutes %u (RFC 2911 section 4.1.14).";
-"\"%s\": Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14)." = "“%s”: Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14).";
-"\"%s\": Bad dateTime day %u (RFC 2911 section 4.1.14)." = "“%s”: Bad dateTime day %u (RFC 2911 section 4.1.14).";
-"\"%s\": Bad dateTime deciseconds %u (RFC 2911 section 4.1.14)." = "“%s”: Bad dateTime deciseconds %u (RFC 2911 section 4.1.14).";
-"\"%s\": Bad dateTime hours %u (RFC 2911 section 4.1.14)." = "“%s”: Bad dateTime hours %u (RFC 2911 section 4.1.14).";
-"\"%s\": Bad dateTime minutes %u (RFC 2911 section 4.1.14)." = "“%s”: Bad dateTime minutes %u (RFC 2911 section 4.1.14).";
-"\"%s\": Bad dateTime month %u (RFC 2911 section 4.1.14)." = "“%s”: Bad dateTime month %u (RFC 2911 section 4.1.14).";
-"\"%s\": Bad dateTime seconds %u (RFC 2911 section 4.1.14)." = "“%s”: Bad dateTime seconds %u (RFC 2911 section 4.1.14).";
-"\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4)." = "“%s”: Bad enum value %d - out of range (RFC 2911 section 4.1.4).";
-"\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3)." = "“%s”: Bad keyword value “%s” - bad length %d (RFC 2911 section 4.1.3).";
-"\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section 4.1.3)." = "“%s”: Bad keyword value “%s” - invalid character (RFC 2911 section 4.1.3).";
-"\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section 4.1.9)." = "“%s”: Bad mimeMediaType value “%s” - bad characters (RFC 2911 section 4.1.9).";
-"\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section 4.1.9)." = "“%s”: Bad mimeMediaType value “%s” - bad length %d (RFC 2911 section 4.1.9).";
-"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.2)." = "“%s”: Bad name value “%s” - bad UTF-8 sequence (RFC 2911 section 4.1.2).";
-"\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2)." = "“%s”: Bad name value “%s” - bad length %d (RFC 2911 section 4.1.2).";
-"\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 section 4.1.8)." = "“%s”: Bad naturalLanguage value “%s” - bad characters (RFC 2911 section 4.1.8).";
-"\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 2911 section 4.1.8)." = "“%s”: Bad naturalLanguage value “%s” - bad length %d (RFC 2911 section 4.1.8).";
-"\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10)." = "“%s”: Bad octetString value - bad length %d (RFC 2911 section 4.1.10).";
-"\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 2911 section 4.1.13)." = "“%s”: Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 2911 section 4.1.13).";
-"\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section 4.1.15)." = "“%s”: Bad resolution value %dx%d%s - bad units value (RFC 2911 section 4.1.15).";
-"\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be positive (RFC 2911 section 4.1.15)." = "“%s”: Bad resolution value %dx%d%s - cross feed resolution must be positive (RFC 2911 section 4.1.15).";
-"\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC 2911 section 4.1.15)." = "“%s”: Bad resolution value %dx%d%s - feed resolution must be positive (RFC 2911 section 4.1.15).";
-"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.1)." = "“%s”: Bad text value “%s” - bad UTF-8 sequence (RFC 2911 section 4.1.1).";
-"\"%s\": Bad text value \"%s\" - bad length %d (RFC 2911 section 4.1.1)." = "“%s”: Bad text value “%s” - bad length %d (RFC 2911 section 4.1.1).";
-"\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section 4.1.6)." = "“%s”: Bad uriScheme value “%s” - bad characters (RFC 2911 section 4.1.6).";
-"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 2911 section 4.1.6)." = "“%s”: Bad uriScheme value “%s” - bad length %d (RFC 2911 section 4.1.6).";
+"\"%s\": Bad URI value \"%s\" - %s (RFC 8011 section 5.1.6)." = "“%s”: Bad URI value “%s” - %s (RFC 8011 section 5.1.6).";
+"\"%s\": Bad URI value \"%s\" - bad length %d (RFC 8011 section 5.1.6)." = "“%s”: Bad URI value “%s” - bad length %d (RFC 8011 section 5.1.6).";
+"\"%s\": Bad attribute name - bad length %d (RFC 8011 section 5.1.4)." = "“%s”: Bad attribute name - bad length %d (RFC 8011 section 5.1.4).";
+"\"%s\": Bad attribute name - invalid character (RFC 8011 section 5.1.4)." = "“%s”: Bad attribute name - invalid character (RFC 8011 section 5.1.4).";
+"\"%s\": Bad boolen value %d (RFC 8011 section 5.1.21)." = "“%s”: Bad boolen value %d (RFC 8011 section 5.1.21).";
+"\"%s\": Bad charset value \"%s\" - bad characters (RFC 8011 section 5.1.8)." = "“%s”: Bad charset value “%s” - bad characters (RFC 8011 section 5.1.8).";
+"\"%s\": Bad charset value \"%s\" - bad length %d (RFC 8011 section 5.1.8)." = "“%s”: Bad charset value “%s” - bad length %d (RFC 8011 section 5.1.8).";
+"\"%s\": Bad dateTime UTC hours %u (RFC 8011 section 5.1.15)." = "“%s”: Bad dateTime UTC hours %u (RFC 8011 section 5.1.15).";
+"\"%s\": Bad dateTime UTC minutes %u (RFC 8011 section 5.1.15)." = "“%s”: Bad dateTime UTC minutes %u (RFC 8011 section 5.1.15).";
+"\"%s\": Bad dateTime UTC sign '%c' (RFC 8011 section 5.1.15)." = "“%s”: Bad dateTime UTC sign ‘c’(RFC 8011 section 5.1.15).";
+"\"%s\": Bad dateTime day %u (RFC 8011 section 5.1.15)." = "“%s”: Bad dateTime day %u (RFC 8011 section 5.1.15).";
+"\"%s\": Bad dateTime deciseconds %u (RFC 8011 section 5.1.15)." = "“%s”: Bad dateTime deciseconds %u (RFC 8011 section 5.1.15).";
+"\"%s\": Bad dateTime hours %u (RFC 8011 section 5.1.15)." = "“%s”: Bad dateTime hours %u (RFC 8011 section 5.1.15).";
+"\"%s\": Bad dateTime minutes %u (RFC 8011 section 5.1.15)." = "“%s”: Bad dateTime minutes %u (RFC 8011 section 5.1.15).";
+"\"%s\": Bad dateTime month %u (RFC 8011 section 5.1.15)." = "“%s”: Bad dateTime month %u (RFC 8011 section 5.1.15).";
+"\"%s\": Bad dateTime seconds %u (RFC 8011 section 5.1.15)." = "“%s”: Bad dateTime seconds %u (RFC 8011 section 5.1.15).";
+"\"%s\": Bad enum value %d - out of range (RFC 8011 section 5.1.5)." = "“%s”: Bad enum value %d - out of range (RFC 8011 section 5.1.5).";
+"\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 8011 section 5.1.4)." = "“%s”: Bad keyword value “%s” - bad length %d (RFC 8011 section 5.1.4).";
+"\"%s\": Bad keyword value \"%s\" - invalid character (RFC 8011 section 5.1.4)." = "“%s”: Bad keyword value “%s” - invalid character (RFC 8011 section 5.1.4).";
+"\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section 5.1.10)." = "“%s”: Bad mimeMediaType value “%s” - bad characters (RFC 8011 section 5.1.10).";
+"\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section 5.1.10)." = "“%s”: Bad mimeMediaType value “%s” - bad length %d (RFC 8011 section 5.1.10).";
+"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)." = "“%s”: Bad name value “%s” - bad UTF-8 sequence (RFC 8011 section 5.1.3).";
+"\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)." = "“%s”: Bad name value “%s” - bad length %d (RFC 8011 section 5.1.3).";
+"\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section 5.1.9)." = "“%s”: Bad naturalLanguage value “%s” - bad characters (RFC 8011 section 5.1.9).";
+"\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section 5.1.9)." = "“%s”: Bad naturalLanguage value “%s” - bad length %d (RFC 8011 section 5.1.9).";
+"\"%s\": Bad octetString value - bad length %d (RFC 8011 section 5.1.20)." = "“%s”: Bad octetString value - bad length %d (RFC 8011 section 5.1.20).";
+"\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 8011 section 5.1.14)." = "“%s”: Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 8011 section 5.1.14).";
+"\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 8011 section 5.1.16)." = "“%s”: Bad resolution value %dx%d%s - bad units value (RFC 8011 section 5.1.16).";
+"\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be positive (RFC 8011 section 5.1.16)." = "“%s”: Bad resolution value %dx%d%s - cross feed resolution must be positive (RFC 8011 section 5.1.16).";
+"\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC 8011 section 5.1.16)." = "“%s”: Bad resolution value %dx%d%s - feed resolution must be positive (RFC 8011 section 5.1.16).";
+"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)." = "“%s”: Bad text value “%s” - bad UTF-8 sequence (RFC 8011 section 5.1.2).";
+"\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)." = "“%s”: Bad text value “%s” - bad length %d (RFC 8011 section 5.1.2).";
+"\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)." = "“%s”: Bad uriScheme value “%s” - bad characters (RFC 8011 section 5.1.7).";
+"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)." = "“%s”: Bad uriScheme value “%s” - bad length %d (RFC 8011 section 5.1.7).";
"%-7s %-7.7s %-7d %-31.31s %.0f bytes" = "%-7s %-7.7s %-7d %-31.31s %.0f bytes";
"%d x %d mm" = "%d x %d mm";
"%g x %g" = "%g x %g";
@@ -364,9 +364,9 @@
"%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: Don't know what to do." = "%s: Don’ 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: Error - add '/version=1.1' to server name." = "%s: Error - add '/version=1.1' to server name.";
+"%s: Error - add '/version=1.1' to server name." = "%s: Error - add ‘version=1.1’to server name.";
"%s: Error - bad job ID." = "%s: Error - bad job ID.";
"%s: Error - cannot print files and alter jobs simultaneously." = "%s: Error - cannot print files and alter jobs simultaneously.";
"%s: Error - cannot print from stdin if files or a job ID are provided." = "%s: Error - cannot print from stdin if files or a job ID are provided.";
@@ -719,7 +719,7 @@
"B8" = "B8";
"B9" = "B9";
"Back Print Film" = "Back Print Film";
-"Bad 'document-format' value \"%s\"." = "Bad 'document-format' value “%s”.";
+"Bad 'document-format' value \"%s\"." = "Bad ‘ocument-format’value “%s”.";
"Bad NULL dests pointer" = "Bad NULL dests pointer";
"Bad OpenGroup" = "Bad OpenGroup";
"Bad OpenUI/JCLOpenUI" = "Bad OpenUI/JCLOpenUI";
@@ -794,7 +794,7 @@
"Character set \"%s\" not supported." = "Character set “%s” not supported.";
"Classes" = "Classes";
"Clean Print Heads" = "Clean Print Heads";
-"Close-Job doesn't support the job-uri attribute." = "Close-Job doesn't support the job-uri attribute.";
+"Close-Job doesn't support the job-uri attribute." = "Close-Job doesn’ support the job-uri attribute.";
"Coat" = "Coat";
"Coated Envelope" = "Coated Envelope";
"Coated Paper" = "Coated Paper";
@@ -1064,9 +1064,9 @@
"JIS B9" = "JIS B9";
"Job #%d cannot be restarted - no files." = "Job #%d cannot be restarted - no files.";
"Job #%d does not exist." = "Job #%d does not exist.";
-"Job #%d is already aborted - can't cancel." = "Job #%d is already aborted - can't cancel.";
-"Job #%d is already canceled - can't cancel." = "Job #%d is already canceled - can't cancel.";
-"Job #%d is already completed - can't cancel." = "Job #%d is already completed - can't cancel.";
+"Job #%d is already aborted - can't cancel." = "Job #%d is already aborted - can’ cancel.";
+"Job #%d is already canceled - can't cancel." = "Job #%d is already canceled - can’ cancel.";
+"Job #%d is already completed - can't cancel." = "Job #%d is already completed - can’ cancel.";
"Job #%d is finished and cannot be altered." = "Job #%d is finished and cannot be altered.";
"Job #%d is not complete." = "Job #%d is not complete.";
"Job #%d is not held for authentication." = "Job #%d is not held for authentication.";
@@ -1368,7 +1368,7 @@
"Roll 7" = "Roll 7";
"Roll 8" = "Roll 8";
"Roll 9" = "Roll 9";
-"Running command: %s %s -N -A %s -c '%s'" = "Running command: %s %s -N -A %s -c '%s'";
+"Running command: %s %s -N -A %s -c '%s'" = "Running command: %s %s -N -A %s -c ‘s’";
"SEQUENCE uses indefinite length" = "SEQUENCE uses indefinite length";
"SSL/TLS Negotiation Error" = "SSL/TLS Negotiation Error";
"Saddle Stitch" = "Saddle Stitch";
@@ -1453,16 +1453,16 @@
"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 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 '%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";
"The PPD file could not be opened." = "The PPD file could not be opened.";
"The class name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)." = "The class name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#).";
"The developer unit needs to be replaced." = "The developer unit needs to be replaced.";
"The developer unit will need to be replaced soon." = "The developer unit will need to be replaced soon.";
-"The fuser's temperature is high." = "The fuser's temperature is high.";
-"The fuser's temperature is low." = "The fuser's temperature is low.";
+"The fuser's temperature is high." = "The fuser’ temperature is high.";
+"The fuser's temperature is low." = "The fuser’ temperature is low.";
"The notify-lease-duration attribute cannot be used with job subscriptions." = "The notify-lease-duration attribute cannot be used with job subscriptions.";
"The notify-user-data value is too large (%d > 63 octets)." = "The notify-user-data value is too large (%d > 63 octets).";
"The optical photoconductor needs to be replaced." = "The optical photoconductor needs to be replaced.";
@@ -1484,11 +1484,11 @@
"The printer name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)." = "The printer name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#).";
"The printer or class does not exist." = "The printer or class does not exist.";
"The printer or class is not shared." = "The printer or class is not shared.";
-"The printer's cover is open." = "The printer's cover is open.";
-"The printer's door is open." = "The printer's door is open.";
-"The printer's interlock is open." = "The printer's interlock is open.";
-"The printer's waste bin is almost full." = "The printer's waste bin is almost full.";
-"The printer's waste bin is full." = "The printer's waste bin is full.";
+"The printer's cover is open." = "The printer’ cover is open.";
+"The printer's door is open." = "The printer’ door is open.";
+"The printer's interlock is open." = "The printer’ interlock is open.";
+"The printer's waste bin is almost full." = "The printer’ waste bin is almost full.";
+"The printer's waste bin is full." = "The printer’ waste bin is full.";
"The printer-uri \"%s\" contains invalid characters." = "The printer-uri “%s” contains invalid characters.";
"The printer-uri attribute is required." = "The printer-uri attribute is required.";
"The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"." = "The printer-uri must be of the form “ipp://HOSTNAME/classes/CLASSNAME”.";
@@ -1650,9 +1650,9 @@
"Unknown scheme in URI" = "Unknown scheme in URI";
"Unknown service name." = "Unknown service name.";
"Unknown version option value: \"%s\"." = "Unknown version option value: “%s”.";
-"Unsupported 'compression' value \"%s\"." = "Unsupported 'compression' value “%s”.";
-"Unsupported 'document-format' value \"%s\"." = "Unsupported 'document-format' value “%s”.";
-"Unsupported 'job-name' value." = "Unsupported 'job-name' value.";
+"Unsupported 'compression' value \"%s\"." = "Unsupported ‘ompression’value “%s”.";
+"Unsupported 'document-format' value \"%s\"." = "Unsupported ‘ocument-format’value “%s”.";
+"Unsupported 'job-name' value." = "Unsupported ‘ob-name’value.";
"Unsupported character set \"%s\"." = "Unsupported character set “%s”.";
"Unsupported compression \"%s\"." = "Unsupported compression “%s”.";
"Unsupported document-format \"%s\"." = "Unsupported document-format “%s”.";
@@ -1889,7 +1889,7 @@
"ppdc: Option %s defined in two different groups on line %d of %s." = "ppdc: Option %s defined in two different groups on line %d of %s.";
"ppdc: Option %s redefined with a different type on line %d of %s." = "ppdc: Option %s redefined with a different type on line %d of %s.";
"ppdc: Option constraint must *name on line %d of %s." = "ppdc: Option constraint must *name on line %d of %s.";
-"ppdc: Too many nested #if's on line %d of %s." = "ppdc: Too many nested #if's on line %d of %s.";
+"ppdc: Too many nested #if's on line %d of %s." = "ppdc: Too many nested #if’ on line %d of %s.";
"ppdc: Unable to create PPD file \"%s\" - %s." = "ppdc: Unable to create PPD file “%s” - %s.";
"ppdc: Unable to create output directory %s: %s" = "ppdc: Unable to create output directory %s: %s";
"ppdc: Unable to create output pipes: %s" = "ppdc: Unable to create output pipes: %s";
diff --git a/locale/cups_ca.po b/locale/cups_ca.po
index 66c7699..2ae601c 100644
--- a/locale/cups_ca.po
+++ b/locale/cups_ca.po
@@ -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: 2017-03-11 10:02-0500\n"
+"POT-Creation-Date: 2017-06-19 09:12-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"
@@ -1057,9 +1057,9 @@ msgstr " -D nom=valor Estableix la variable indicada al valor."
msgid " -E Encrypt the connection."
msgstr " -E Xifra la connexió."
-msgid " -E Test with HTTP Upgrade to TLS."
+msgid ""
+" -E Test with encryption using HTTP Upgrade to TLS."
msgstr ""
-" -E Fa una prova amb l'actualització d'HTTP a TLS."
msgid ""
" -F Run in the foreground but detach from console."
@@ -1096,8 +1096,8 @@ msgstr ""
msgid " -R root-directory Set alternate root."
msgstr " -R directori-arrel Estableix una arrel alternativa."
-msgid " -S Test with SSL encryption."
-msgstr " -S Fa una prova amb xifrat SSL."
+msgid " -S Test with encryption using HTTPS."
+msgstr ""
msgid " -T seconds Set the browse timeout in seconds."
msgstr ""
@@ -1373,166 +1373,166 @@ msgid " PASS"
msgstr " VÀLID"
#, c-format
-msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 2911 section 4.1.5)."
+msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 8011 section 5.1.6)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 2911 section 4.1.5)."
+msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 8011 section 5.1.6)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad attribute name - bad length %d (RFC 2911 section 4.1.3)."
+msgid "\"%s\": Bad attribute name - bad length %d (RFC 8011 section 5.1.4)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)."
+"\"%s\": Bad attribute name - invalid character (RFC 8011 section 5.1.4)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11)."
+msgid "\"%s\": Bad boolen value %d (RFC 8011 section 5.1.21)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section 4.1.7)."
+"\"%s\": Bad charset value \"%s\" - bad characters (RFC 8011 section 5.1.8)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)."
+"\"%s\": Bad charset value \"%s\" - bad length %d (RFC 8011 section 5.1.8)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime UTC hours %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime UTC hours %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime day %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime day %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime deciseconds %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime deciseconds %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime hours %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime hours %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime minutes %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime minutes %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime month %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime month %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime seconds %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime seconds %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4)."
+msgid "\"%s\": Bad enum value %d - out of range (RFC 8011 section 5.1.5)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3)."
+"\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 8011 section 5.1.4)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section "
-"4.1.3)."
+"\"%s\": Bad keyword value \"%s\" - invalid character (RFC 8011 section "
+"5.1.4)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section "
-"4.1.9)."
+"\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section "
+"5.1.10)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section "
-"4.1.9)."
+"\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section "
+"5.1.10)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.2)."
+"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2)."
+msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 section "
-"4.1.8)."
+"\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section "
+"5.1.9)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 2911 section "
-"4.1.8)."
+"\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section "
+"5.1.9)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10)."
+"\"%s\": Bad octetString value - bad length %d (RFC 8011 section 5.1.20)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 2911 "
-"section 4.1.13)."
+"\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 8011 "
+"section 5.1.14)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section "
-"4.1.15)."
+"\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 8011 section "
+"5.1.16)."
msgstr ""
#, c-format
msgid ""
"\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be "
-"positive (RFC 2911 section 4.1.15)."
+"positive (RFC 8011 section 5.1.16)."
msgstr ""
#, c-format
msgid ""
"\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC "
-"2911 section 4.1.15)."
+"8011 section 5.1.16)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.1)."
+"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 2911 section 4.1.1)."
+msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section 4.1.6)."
+"\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 2911 section 4.1.6)."
+"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
msgstr ""
#, c-format
@@ -6922,9 +6922,16 @@ msgstr "La variable-bindings fa servir una longitud indefinida"
#~ msgid " -E Enable encryption."
#~ msgstr " -E Habilita el xifrat."
+#~ msgid " -E Test with HTTP Upgrade to TLS."
+#~ msgstr ""
+#~ " -E Fa una prova amb l'actualització d'HTTP a TLS."
+
#~ msgid " -J title Set title."
#~ msgstr " -J títol Estableix el títol."
+#~ msgid " -S Test with SSL encryption."
+#~ msgstr " -S Fa una prova amb xifrat SSL."
+
#~ msgid " -T Set the receive/send timeout in seconds."
#~ msgstr ""
#~ " -T Estableix el temps d'espera màxim per enviar i "
diff --git a/locale/cups_cs.po b/locale/cups_cs.po
index a32a93b..d0f6645 100644
--- a/locale/cups_cs.po
+++ b/locale/cups_cs.po
@@ -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: 2017-03-11 10:02-0500\n"
+"POT-Creation-Date: 2017-06-19 09:12-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"
@@ -908,7 +908,8 @@ msgstr ""
msgid " -E Encrypt the connection."
msgstr ""
-msgid " -E Test with HTTP Upgrade to TLS."
+msgid ""
+" -E Test with encryption using HTTP Upgrade to TLS."
msgstr ""
msgid ""
@@ -944,7 +945,7 @@ msgstr ""
msgid " -R root-directory Set alternate root."
msgstr ""
-msgid " -S Test with SSL encryption."
+msgid " -S Test with encryption using HTTPS."
msgstr ""
msgid " -T seconds Set the browse timeout in seconds."
@@ -1195,166 +1196,166 @@ msgid " PASS"
msgstr ""
#, c-format
-msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 2911 section 4.1.5)."
+msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 8011 section 5.1.6)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 2911 section 4.1.5)."
+msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 8011 section 5.1.6)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad attribute name - bad length %d (RFC 2911 section 4.1.3)."
+msgid "\"%s\": Bad attribute name - bad length %d (RFC 8011 section 5.1.4)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)."
+"\"%s\": Bad attribute name - invalid character (RFC 8011 section 5.1.4)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11)."
+msgid "\"%s\": Bad boolen value %d (RFC 8011 section 5.1.21)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section 4.1.7)."
+"\"%s\": Bad charset value \"%s\" - bad characters (RFC 8011 section 5.1.8)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)."
+"\"%s\": Bad charset value \"%s\" - bad length %d (RFC 8011 section 5.1.8)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime UTC hours %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime UTC hours %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime day %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime day %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime deciseconds %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime deciseconds %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime hours %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime hours %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime minutes %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime minutes %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime month %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime month %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime seconds %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime seconds %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4)."
+msgid "\"%s\": Bad enum value %d - out of range (RFC 8011 section 5.1.5)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3)."
+"\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 8011 section 5.1.4)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section "
-"4.1.3)."
+"\"%s\": Bad keyword value \"%s\" - invalid character (RFC 8011 section "
+"5.1.4)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section "
-"4.1.9)."
+"\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section "
+"5.1.10)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section "
-"4.1.9)."
+"\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section "
+"5.1.10)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.2)."
+"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2)."
+msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 section "
-"4.1.8)."
+"\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section "
+"5.1.9)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 2911 section "
-"4.1.8)."
+"\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section "
+"5.1.9)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10)."
+"\"%s\": Bad octetString value - bad length %d (RFC 8011 section 5.1.20)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 2911 "
-"section 4.1.13)."
+"\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 8011 "
+"section 5.1.14)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section "
-"4.1.15)."
+"\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 8011 section "
+"5.1.16)."
msgstr ""
#, c-format
msgid ""
"\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be "
-"positive (RFC 2911 section 4.1.15)."
+"positive (RFC 8011 section 5.1.16)."
msgstr ""
#, c-format
msgid ""
"\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC "
-"2911 section 4.1.15)."
+"8011 section 5.1.16)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.1)."
+"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 2911 section 4.1.1)."
+msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section 4.1.6)."
+"\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 2911 section 4.1.6)."
+"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
msgstr ""
#, c-format
diff --git a/locale/cups_de.po b/locale/cups_de.po
index 378b406..3d3f99d 100644
--- a/locale/cups_de.po
+++ b/locale/cups_de.po
@@ -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: 2017-03-11 10:02-0500\n"
+"POT-Creation-Date: 2017-06-19 09:12-0400\n"
"PO-Revision-Date: 2016-09-17 18:45+0200\n"
"Last-Translator: Joachim Schwender <joachim.schwender@web.de>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -939,8 +939,9 @@ msgstr " -D Name=Wert Variable »Name« den »Wert« zuordnen."
msgid " -E Encrypt the connection."
msgstr " -E Verschlüssele die Verbindung."
-msgid " -E Test with HTTP Upgrade to TLS."
-msgstr " -E Teste mit HTTP Upgrade auf TLS."
+msgid ""
+" -E Test with encryption using HTTP Upgrade to TLS."
+msgstr ""
msgid ""
" -F Run in the foreground but detach from console."
@@ -983,8 +984,8 @@ msgid " -R root-directory Set alternate root."
msgstr ""
" -R Wurzelverz. Legt ein alternatives Wurzelverzeichnis fest."
-msgid " -S Test with SSL encryption."
-msgstr " -S Teste mit SSL Verschlüsselung."
+msgid " -S Test with encryption using HTTPS."
+msgstr ""
msgid " -T seconds Set the browse timeout in seconds."
msgstr ""
@@ -1259,166 +1260,166 @@ msgid " PASS"
msgstr ""
#, c-format
-msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 2911 section 4.1.5)."
+msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 8011 section 5.1.6)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 2911 section 4.1.5)."
+msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 8011 section 5.1.6)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad attribute name - bad length %d (RFC 2911 section 4.1.3)."
+msgid "\"%s\": Bad attribute name - bad length %d (RFC 8011 section 5.1.4)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)."
+"\"%s\": Bad attribute name - invalid character (RFC 8011 section 5.1.4)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11)."
+msgid "\"%s\": Bad boolen value %d (RFC 8011 section 5.1.21)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section 4.1.7)."
+"\"%s\": Bad charset value \"%s\" - bad characters (RFC 8011 section 5.1.8)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)."
+"\"%s\": Bad charset value \"%s\" - bad length %d (RFC 8011 section 5.1.8)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime UTC hours %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime UTC hours %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime day %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime day %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime deciseconds %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime deciseconds %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime hours %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime hours %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime minutes %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime minutes %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime month %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime month %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime seconds %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime seconds %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4)."
+msgid "\"%s\": Bad enum value %d - out of range (RFC 8011 section 5.1.5)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3)."
+"\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 8011 section 5.1.4)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section "
-"4.1.3)."
+"\"%s\": Bad keyword value \"%s\" - invalid character (RFC 8011 section "
+"5.1.4)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section "
-"4.1.9)."
+"\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section "
+"5.1.10)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section "
-"4.1.9)."
+"\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section "
+"5.1.10)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.2)."
+"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2)."
+msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 section "
-"4.1.8)."
+"\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section "
+"5.1.9)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 2911 section "
-"4.1.8)."
+"\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section "
+"5.1.9)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10)."
+"\"%s\": Bad octetString value - bad length %d (RFC 8011 section 5.1.20)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 2911 "
-"section 4.1.13)."
+"\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 8011 "
+"section 5.1.14)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section "
-"4.1.15)."
+"\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 8011 section "
+"5.1.16)."
msgstr ""
#, c-format
msgid ""
"\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be "
-"positive (RFC 2911 section 4.1.15)."
+"positive (RFC 8011 section 5.1.16)."
msgstr ""
#, c-format
msgid ""
"\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC "
-"2911 section 4.1.15)."
+"8011 section 5.1.16)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.1)."
+"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 2911 section 4.1.1)."
+msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section 4.1.6)."
+"\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 2911 section 4.1.6)."
+"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
msgstr ""
#, c-format
@@ -5691,7 +5692,7 @@ msgstr "Nicht unterstützter number-up Wert %d, verwende number-up=1."
#, c-format
msgid "Unsupported number-up-layout value %s, using number-up-layout=lrtb."
msgstr ""
-"Nicht unterstützter number-up-layout Wert %d, verwende number-up-layout=lrtb."
+"Nicht unterstützter number-up-layout Wert %s, verwende number-up-layout=lrtb."
#, c-format
msgid "Unsupported page-border value %s, using page-border=none."
@@ -5918,7 +5919,7 @@ msgstr "cupsd: Unbekanntes Argument \"%s\" - Abbruch."
#, c-format
msgid "cupsd: Unknown option \"%c\" - aborting."
-msgstr "cupsd: Unbekannte Option \"%s\" - Abbruch."
+msgstr "cupsd: Unbekannte Option \"%c\" - Abbruch."
#, c-format
msgid "cupsfilter: Invalid document number %d."
@@ -6730,6 +6731,12 @@ msgstr "variable-bindings hat unbestimmte Länge"
#~ msgid " --lf End lines with LF (UNIX/Linux/OS X)."
#~ msgstr " --lf Zeilenenden mit LF (UNIX/Linux/OS X)"
+#~ msgid " -E Test with HTTP Upgrade to TLS."
+#~ msgstr " -E Teste mit HTTP Upgrade auf TLS."
+
+#~ msgid " -S Test with SSL encryption."
+#~ msgstr " -S Teste mit SSL Verschlüsselung."
+
#~ msgid " -a Browse for all services."
#~ msgstr " -a Browse für alle Dienste."
diff --git a/locale/cups_es.po b/locale/cups_es.po
index e991776..69d443e 100644
--- a/locale/cups_es.po
+++ b/locale/cups_es.po
@@ -16,7 +16,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 2.2\n"
"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2017-03-11 10:02-0500\n"
+"POT-Creation-Date: 2017-06-19 09:12-0400\n"
"PO-Revision-Date: 2016-06-26 21:17+0100\n"
"Last-Translator: Juan Pablo González Riopedre <jpgriopedre@yahoo.es>\n"
"Language-Team: Spanish\n"
@@ -1069,8 +1069,9 @@ msgstr " -D nombre=valor Establece la variable nombre al valor."
msgid " -E Encrypt the connection."
msgstr " -E Cifra la conexión."
-msgid " -E Test with HTTP Upgrade to TLS."
-msgstr " -E Prueba con actualización HTTP a TLS."
+msgid ""
+" -E Test with encryption using HTTP Upgrade to TLS."
+msgstr ""
msgid ""
" -F Run in the foreground but detach from console."
@@ -1112,8 +1113,8 @@ msgstr ""
msgid " -R root-directory Set alternate root."
msgstr " -R directorio-raíz Establece directorio raíz alternativo."
-msgid " -S Test with SSL encryption."
-msgstr " -S Prueba con cifrado SSL."
+msgid " -S Test with encryption using HTTPS."
+msgstr ""
msgid " -T seconds Set the browse timeout in seconds."
msgstr ""
@@ -1402,214 +1403,167 @@ msgid " PASS"
msgstr " PASA"
#, 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)."
+msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 8011 section 5.1.6)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 2911 section 4.1.5)."
+msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 8011 section 5.1.6)."
msgstr ""
-"\"%s\": Valor URI \"%s\" incorrecto - longitud %d incorrecta (RFC 2911 "
-"sección 4.1.5)."
#, c-format
-msgid "\"%s\": Bad attribute name - bad length %d (RFC 2911 section 4.1.3)."
+msgid "\"%s\": Bad attribute name - bad length %d (RFC 8011 section 5.1.4)."
msgstr ""
-"\"%s\": Nombre de atributo incorrecto - longitud %d incorrecta (RFC 2911 "
-"sección 4.1.3)."
#, c-format
msgid ""
-"\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)."
+"\"%s\": Bad attribute name - invalid character (RFC 8011 section 5.1.4)."
msgstr ""
-"\"%s\": Nombre de atributo incorrecto - carácter inválido (RFC 2911 sección "
-"4.1.3)."
#, 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)."
+msgid "\"%s\": Bad boolen value %d (RFC 8011 section 5.1.21)."
+msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section 4.1.7)."
+"\"%s\": Bad charset value \"%s\" - bad characters (RFC 8011 section 5.1.8)."
msgstr ""
-"\"%s\": Valor del juego de caracteres \"%s\" incorrecto - caracteres "
-"incorrectos (RFC 2911 sección 4.1.7)."
#, c-format
msgid ""
-"\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)."
+"\"%s\": Bad charset value \"%s\" - bad length %d (RFC 8011 section 5.1.8)."
msgstr ""
-"\"%s\": Valor del juego de caracteres \"%s\" incorrecto - longitud %d "
-"incorrecta (RFC 2911 sección 4.1.7)."
#, 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)."
+msgid "\"%s\": Bad dateTime UTC hours %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, 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)."
+msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, 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)."
+msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 8011 section 5.1.15)."
+msgstr ""
#, 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)."
+msgid "\"%s\": Bad dateTime day %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime deciseconds %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime deciseconds %u (RFC 8011 section 5.1.15)."
msgstr ""
-"\"%s\": Décimas de segundo dateTime %u incorrectas (RFC 2911 sección 4.1.14)."
#, 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)."
+msgid "\"%s\": Bad dateTime hours %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, 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)."
+msgid "\"%s\": Bad dateTime minutes %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, 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)."
+msgid "\"%s\": Bad dateTime month %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, 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)."
+msgid "\"%s\": Bad dateTime seconds %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4)."
+msgid "\"%s\": Bad enum value %d - out of range (RFC 8011 section 5.1.5)."
msgstr ""
-"\"%s\": Valor enumerado %d incorrecto - fuera de intervalo (RFC 2911 sección "
-"4.1.4)."
#, c-format
msgid ""
-"\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3)."
+"\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 8011 section 5.1.4)."
msgstr ""
-"\"%s\": Valor clave \"%s\" incorrecto - longitud %d incorrecta (RFC 2911 "
-"sección 4.1.3)."
#, c-format
msgid ""
-"\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section "
-"4.1.3)."
+"\"%s\": Bad keyword value \"%s\" - invalid character (RFC 8011 section "
+"5.1.4)."
msgstr ""
-"\"%s\": Valor clave \"%s\" incorrecto - carácter inválido (RFC 2911 sección "
-"4.1.3)."
#, c-format
msgid ""
-"\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section "
-"4.1.9)."
+"\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section "
+"5.1.10)."
msgstr ""
-"\"%s\": Valor mimeMediaType \"%s\" incorrecto - caracteres incorrectos (RFC "
-"2911 sección 4.1.9)."
#, c-format
msgid ""
-"\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section "
-"4.1.9)."
+"\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section "
+"5.1.10)."
msgstr ""
-"\"%s\": Valor mimeMediaType \"%s\" incorrecto - longitud %d incorrecta (RFC "
-"2911 sección 4.1.9)."
#, c-format
msgid ""
-"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.2)."
+"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
msgstr ""
-"\"%s\": Valor del nombre \"%s\" incorrecto - secuencia UTF-8 incorrecta (RFC "
-"2911 sección 4.1.2)."
#, c-format
-msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2)."
+msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
msgstr ""
-"\"%s\": Valor del nombre \"%s\" incorrecto - longitud %d incorrecta (RFC "
-"2911 sección 4.1.2)."
#, c-format
msgid ""
-"\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 section "
-"4.1.8)."
+"\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section "
+"5.1.9)."
msgstr ""
-"\"%s\": Valor naturalLanguage \"%s\" incorrecto - caracteres incorrectos "
-"(RFC 2911 sección 4.1.8)."
#, c-format
msgid ""
-"\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 2911 section "
-"4.1.8)."
+"\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section "
+"5.1.9)."
msgstr ""
-"\"%s\": Valor naturalLanguage \"%s\" incorrecto - longitud %d incorrecta "
-"(RFC 2911 sección 4.1.8)."
#, c-format
msgid ""
-"\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10)."
+"\"%s\": Bad octetString value - bad length %d (RFC 8011 section 5.1.20)."
msgstr ""
-"\"%s\": Valor octetString incorrecto - longitud %d incorrecta (RFC 2911 "
-"sección 4.1.10)."
#, c-format
msgid ""
-"\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 2911 "
-"section 4.1.13)."
+"\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 8011 "
+"section 5.1.14)."
msgstr ""
-"\"%s\": Valor rangeOfInteger %d-%d incorrecto - el más bajo es mayor que el "
-"más alto (RFC 2911 section 4.1.13)."
#, c-format
msgid ""
-"\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section "
-"4.1.15)."
+"\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 8011 section "
+"5.1.16)."
msgstr ""
-"\"%s\": Valor de resolución %dx%d%s incorrecto - valores de unidades "
-"incorrectas (RFC 2911 section 4.1.15)."
#, c-format
msgid ""
"\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be "
-"positive (RFC 2911 section 4.1.15)."
+"positive (RFC 8011 section 5.1.16)."
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)."
#, c-format
msgid ""
"\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC "
-"2911 section 4.1.15)."
+"8011 section 5.1.16)."
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)."
#, c-format
msgid ""
-"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.1)."
+"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
msgstr ""
-"\"%s\": Valor del texto \"%s\" incorrecto - secuencia UTF-8 incorrecta (RFC "
-"2911 sección 4.1.1)."
#, c-format
-msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 2911 section 4.1.1)."
+msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
msgstr ""
-"\"%s\": Valor del texto \"%s\" incorrecto - longitud %d incorrecta (RFC 2911 "
-"sección 4.1.1)."
#, c-format
msgid ""
-"\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section 4.1.6)."
+"\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)."
msgstr ""
-"\"%s\": Valor uriScheme \"%s\" incorrecto - caracteres incorrectos (RFC 2911 "
-"sección 4.1.6)."
#, c-format
msgid ""
-"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 2911 section 4.1.6)."
+"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
msgstr ""
-"\"%s\": Valor uriScheme \"%s\" incorrecto - longitud %d incorrecta (RFC 2911 "
-"sección 4.1.6)."
#, c-format
msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
@@ -6992,6 +6946,199 @@ msgstr "sin título"
msgid "variable-bindings uses indefinite length"
msgstr "variable-bindings usa una longitud indefinida"
+#~ msgid " -E Test with HTTP Upgrade to TLS."
+#~ msgstr " -E Prueba con actualización HTTP a TLS."
+
+#~ msgid " -S Test with SSL encryption."
+#~ msgstr " -S Prueba con cifrado SSL."
+
+#~ 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)."
+
+#~ 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)."
+
+#~ 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)."
+
+#~ msgid ""
+#~ "\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)."
+#~ msgstr ""
+#~ "\"%s\": Nombre de atributo incorrecto - carácter inválido (RFC 2911 "
+#~ "sección 4.1.3)."
+
+#~ 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)."
+
+#~ msgid ""
+#~ "\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section "
+#~ "4.1.7)."
+#~ msgstr ""
+#~ "\"%s\": Valor del juego de caracteres \"%s\" incorrecto - caracteres "
+#~ "incorrectos (RFC 2911 sección 4.1.7)."
+
+#~ msgid ""
+#~ "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)."
+#~ msgstr ""
+#~ "\"%s\": Valor del juego de caracteres \"%s\" incorrecto - longitud %d "
+#~ "incorrecta (RFC 2911 sección 4.1.7)."
+
+#~ 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)."
+
+#~ 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)."
+
+#~ 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)."
+
+#~ 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)."
+
+#~ 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)."
+
+#~ 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)."
+
+#~ 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)."
+
+#~ 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)."
+
+#~ 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)."
+
+#~ 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)."
+
+#~ msgid ""
+#~ "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3)."
+#~ msgstr ""
+#~ "\"%s\": Valor clave \"%s\" incorrecto - longitud %d incorrecta (RFC 2911 "
+#~ "sección 4.1.3)."
+
+#~ msgid ""
+#~ "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section "
+#~ "4.1.3)."
+#~ msgstr ""
+#~ "\"%s\": Valor clave \"%s\" incorrecto - carácter inválido (RFC 2911 "
+#~ "sección 4.1.3)."
+
+#~ msgid ""
+#~ "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section "
+#~ "4.1.9)."
+#~ msgstr ""
+#~ "\"%s\": Valor mimeMediaType \"%s\" incorrecto - caracteres incorrectos "
+#~ "(RFC 2911 sección 4.1.9)."
+
+#~ msgid ""
+#~ "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section "
+#~ "4.1.9)."
+#~ msgstr ""
+#~ "\"%s\": Valor mimeMediaType \"%s\" incorrecto - longitud %d incorrecta "
+#~ "(RFC 2911 sección 4.1.9)."
+
+#~ msgid ""
+#~ "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section "
+#~ "4.1.2)."
+#~ msgstr ""
+#~ "\"%s\": Valor del nombre \"%s\" incorrecto - secuencia UTF-8 incorrecta "
+#~ "(RFC 2911 sección 4.1.2)."
+
+#~ 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)."
+
+#~ msgid ""
+#~ "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 "
+#~ "section 4.1.8)."
+#~ msgstr ""
+#~ "\"%s\": Valor naturalLanguage \"%s\" incorrecto - caracteres incorrectos "
+#~ "(RFC 2911 sección 4.1.8)."
+
+#~ msgid ""
+#~ "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 2911 "
+#~ "section 4.1.8)."
+#~ msgstr ""
+#~ "\"%s\": Valor naturalLanguage \"%s\" incorrecto - longitud %d incorrecta "
+#~ "(RFC 2911 sección 4.1.8)."
+
+#~ msgid ""
+#~ "\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10)."
+#~ msgstr ""
+#~ "\"%s\": Valor octetString incorrecto - longitud %d incorrecta (RFC 2911 "
+#~ "sección 4.1.10)."
+
+#~ msgid ""
+#~ "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC "
+#~ "2911 section 4.1.13)."
+#~ msgstr ""
+#~ "\"%s\": Valor rangeOfInteger %d-%d incorrecto - el más bajo es mayor que "
+#~ "el más alto (RFC 2911 section 4.1.13)."
+
+#~ msgid ""
+#~ "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section "
+#~ "4.1.15)."
+#~ msgstr ""
+#~ "\"%s\": Valor de resolución %dx%d%s incorrecto - valores de unidades "
+#~ "incorrectas (RFC 2911 section 4.1.15)."
+
+#~ msgid ""
+#~ "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be "
+#~ "positive (RFC 2911 section 4.1.15)."
+#~ 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)."
+
+#~ msgid ""
+#~ "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive "
+#~ "(RFC 2911 section 4.1.15)."
+#~ 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)."
+
+#~ msgid ""
+#~ "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 2911 section "
+#~ "4.1.1)."
+#~ msgstr ""
+#~ "\"%s\": Valor del texto \"%s\" incorrecto - secuencia UTF-8 incorrecta "
+#~ "(RFC 2911 sección 4.1.1)."
+
+#~ 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)."
+
+#~ msgid ""
+#~ "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section "
+#~ "4.1.6)."
+#~ msgstr ""
+#~ "\"%s\": Valor uriScheme \"%s\" incorrecto - caracteres incorrectos (RFC "
+#~ "2911 sección 4.1.6)."
+
+#~ msgid ""
+#~ "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 2911 section "
+#~ "4.1.6)."
+#~ msgstr ""
+#~ "\"%s\": Valor uriScheme \"%s\" incorrecto - longitud %d incorrecta (RFC "
+#~ "2911 sección 4.1.6)."
+
#~ msgid "CD/DVD/Bluray"
#~ msgstr "CD/DVD/Bluray"
diff --git a/locale/cups_fr.po b/locale/cups_fr.po
index fd4a9e3..8fa27c6 100644
--- a/locale/cups_fr.po
+++ b/locale/cups_fr.po
@@ -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: 2017-03-11 10:02-0500\n"
+"POT-Creation-Date: 2017-06-19 09:12-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"
@@ -908,7 +908,8 @@ msgstr ""
msgid " -E Encrypt the connection."
msgstr ""
-msgid " -E Test with HTTP Upgrade to TLS."
+msgid ""
+" -E Test with encryption using HTTP Upgrade to TLS."
msgstr ""
msgid ""
@@ -944,7 +945,7 @@ msgstr ""
msgid " -R root-directory Set alternate root."
msgstr ""
-msgid " -S Test with SSL encryption."
+msgid " -S Test with encryption using HTTPS."
msgstr ""
msgid " -T seconds Set the browse timeout in seconds."
@@ -1195,166 +1196,166 @@ msgid " PASS"
msgstr ""
#, c-format
-msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 2911 section 4.1.5)."
+msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 8011 section 5.1.6)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 2911 section 4.1.5)."
+msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 8011 section 5.1.6)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad attribute name - bad length %d (RFC 2911 section 4.1.3)."
+msgid "\"%s\": Bad attribute name - bad length %d (RFC 8011 section 5.1.4)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)."
+"\"%s\": Bad attribute name - invalid character (RFC 8011 section 5.1.4)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11)."
+msgid "\"%s\": Bad boolen value %d (RFC 8011 section 5.1.21)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section 4.1.7)."
+"\"%s\": Bad charset value \"%s\" - bad characters (RFC 8011 section 5.1.8)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)."
+"\"%s\": Bad charset value \"%s\" - bad length %d (RFC 8011 section 5.1.8)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime UTC hours %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime UTC hours %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime day %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime day %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime deciseconds %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime deciseconds %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime hours %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime hours %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime minutes %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime minutes %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime month %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime month %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime seconds %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime seconds %u (RFC 8011 section 5.1.15)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4)."
+msgid "\"%s\": Bad enum value %d - out of range (RFC 8011 section 5.1.5)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3)."
+"\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 8011 section 5.1.4)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section "
-"4.1.3)."
+"\"%s\": Bad keyword value \"%s\" - invalid character (RFC 8011 section "
+"5.1.4)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section "
-"4.1.9)."
+"\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section "
+"5.1.10)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section "
-"4.1.9)."
+"\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section "
+"5.1.10)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.2)."
+"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2)."
+msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 section "
-"4.1.8)."
+"\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section "
+"5.1.9)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 2911 section "
-"4.1.8)."
+"\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section "
+"5.1.9)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10)."
+"\"%s\": Bad octetString value - bad length %d (RFC 8011 section 5.1.20)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 2911 "
-"section 4.1.13)."
+"\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 8011 "
+"section 5.1.14)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section "
-"4.1.15)."
+"\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 8011 section "
+"5.1.16)."
msgstr ""
#, c-format
msgid ""
"\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be "
-"positive (RFC 2911 section 4.1.15)."
+"positive (RFC 8011 section 5.1.16)."
msgstr ""
#, c-format
msgid ""
"\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC "
-"2911 section 4.1.15)."
+"8011 section 5.1.16)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.1)."
+"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
msgstr ""
#, c-format
-msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 2911 section 4.1.1)."
+msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section 4.1.6)."
+"\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)."
msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 2911 section 4.1.6)."
+"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
msgstr ""
#, c-format
diff --git a/locale/cups_it.po b/locale/cups_it.po
index ea17c54..2715c97 100644
--- a/locale/cups_it.po
+++ b/locale/cups_it.po
@@ -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: 2017-03-11 10:02-0500\n"
+"POT-Creation-Date: 2017-06-19 09:12-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"
@@ -1072,8 +1072,9 @@ msgstr " -D name=value Imposta la variabile chiamata al valore."
msgid " -E Encrypt the connection."
msgstr " -E Crittografa la connessione."
-msgid " -E Test with HTTP Upgrade to TLS."
-msgstr " -E Prova con l'aggiornamento HTTP a TLS."
+msgid ""
+" -E Test with encryption using HTTP Upgrade to TLS."
+msgstr ""
msgid ""
" -F Run in the foreground but detach from console."
@@ -1112,8 +1113,8 @@ msgstr ""
msgid " -R root-directory Set alternate root."
msgstr " -R root-directory Imposta una root alternativa."
-msgid " -S Test with SSL encryption."
-msgstr " -S Prova con crittografia SSL."
+msgid " -S Test with encryption using HTTPS."
+msgstr ""
msgid " -T seconds Set the browse timeout in seconds."
msgstr " -T seconds Imposta il timeout in secondi."
@@ -1397,216 +1398,167 @@ msgid " PASS"
msgstr " OPERAZIONE RIUSCITA CON SUCCESSO"
#, c-format
-msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 2911 section 4.1.5)."
+msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 8011 section 5.1.6)."
msgstr ""
-"\"%s\": il valore dell'URI non è valido \"%s\" - %s (RFC 2911 sezione 4.1.5)."
#, c-format
-msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 2911 section 4.1.5)."
+msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 8011 section 5.1.6)."
msgstr ""
-"\"%s\": il valore dell'URI non è valido \"%s\" - la lunghezza non è valida "
-"%d (RFC 2911 sezione 4.1.5)."
#, c-format
-msgid "\"%s\": Bad attribute name - bad length %d (RFC 2911 section 4.1.3)."
+msgid "\"%s\": Bad attribute name - bad length %d (RFC 8011 section 5.1.4)."
msgstr ""
-"\"%s\": il nome dell'attributo non è valido - la lunghezza non è valida %d "
-"(RFC 2911 sezione 4.1.3)."
#, c-format
msgid ""
-"\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)."
+"\"%s\": Bad attribute name - invalid character (RFC 8011 section 5.1.4)."
msgstr ""
-"\"%s\": il nome dell'attributo non è valido - il carattere non è valido (RFC "
-"2911 sezione 4.1.3)."
#, c-format
-msgid "\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11)."
-msgstr "\"%s\": il valore booleano non è valido %d (RFC 2911 sezione 4.1.11)."
+msgid "\"%s\": Bad boolen value %d (RFC 8011 section 5.1.21)."
+msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section 4.1.7)."
+"\"%s\": Bad charset value \"%s\" - bad characters (RFC 8011 section 5.1.8)."
msgstr ""
-"\"%s\": il valore del set dei caratteri non è valido \"%s\" - i caratteri "
-"non sono validi (RFC 2911 sezione 4.1.7)."
#, c-format
msgid ""
-"\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)."
+"\"%s\": Bad charset value \"%s\" - bad length %d (RFC 8011 section 5.1.8)."
msgstr ""
-"\"%s\": il valore del set dei caratteri non è valido \"%s\" - la lunghezza "
-"non è valida %d (RFC 2911 sezione 4.1.7)."
#, c-format
-msgid "\"%s\": Bad dateTime UTC hours %u (RFC 2911 section 4.1.14)."
-msgstr "\"%s\": dateTime UTC non è valido ore %u (RFC 2911 sezione 4.1.14)."
+msgid "\"%s\": Bad dateTime UTC hours %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 2911 section 4.1.14)."
-msgstr "\"%s\": dateTime UTC non è valido minuti %u (RFC 2911 sezione 4.1.14)."
+msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 8011 section 5.1.15)."
msgstr ""
-"\"%s\": dateTime UTC non è valido segno '%c' (RFC 2911 sezione 4.1.14)."
#, c-format
-msgid "\"%s\": Bad dateTime day %u (RFC 2911 section 4.1.14)."
-msgstr "\"%s\": dateTime non è valido giorno %u (RFC 2911 sezione 4.1.14)."
+msgid "\"%s\": Bad dateTime day %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime deciseconds %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime deciseconds %u (RFC 8011 section 5.1.15)."
msgstr ""
-"\"%s\": dateTime non è valido decimi di secondi %u (RFC 2911 sezione 4.1.14)."
#, c-format
-msgid "\"%s\": Bad dateTime hours %u (RFC 2911 section 4.1.14)."
-msgstr "\"%s\": dateTime non è valido ore %u (RFC 2911 sezione 4.1.14)."
+msgid "\"%s\": Bad dateTime hours %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime minutes %u (RFC 2911 section 4.1.14)."
-msgstr "\"%s\": dateTime non è valido minuti %u (RFC 2911 sezione 4.1.14)."
+msgid "\"%s\": Bad dateTime minutes %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime month %u (RFC 2911 section 4.1.14)."
-msgstr "\"%s\": dateTime non è valido mese %u (RFC 2911 sezione 4.1.14)."
+msgid "\"%s\": Bad dateTime month %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime seconds %u (RFC 2911 section 4.1.14)."
-msgstr "\"%s\": dateTime non è valido secondi %u (RFC 2911 sezione 4.1.14)."
+msgid "\"%s\": Bad dateTime seconds %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4)."
+msgid "\"%s\": Bad enum value %d - out of range (RFC 8011 section 5.1.5)."
msgstr ""
-"\"%s\": il valore enum non è valido %d - fuori intervallo (RFC 2911 sezione "
-"4.1.4)."
#, c-format
msgid ""
-"\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3)."
+"\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 8011 section 5.1.4)."
msgstr ""
-"\"%s\": il valore della parola chiave non è valido \"%s\" - la lunghezza non "
-"è valida %d (RFC 2911 sezione 4.1.3)."
#, c-format
msgid ""
-"\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section "
-"4.1.3)."
+"\"%s\": Bad keyword value \"%s\" - invalid character (RFC 8011 section "
+"5.1.4)."
msgstr ""
-"\"%s\": il valore della parola chiave non è valido \"%s\" - il carattere non "
-"è valido (RFC 2911 sezione 4.1.3)."
#, c-format
msgid ""
-"\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section "
-"4.1.9)."
+"\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section "
+"5.1.10)."
msgstr ""
-"\"%s\": il valore di mimeMediaType non è valido \"%s\" - i caratteri non "
-"sono validi (RFC 2911 sezione 4.1.9)."
#, c-format
msgid ""
-"\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section "
-"4.1.9)."
+"\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section "
+"5.1.10)."
msgstr ""
-"\"%s\": il valore di mimeMediaType non è valido \"%s\" - la lunghezza non è "
-"valida %d (RFC 2911 sezione 4.1.9)."
#, c-format
msgid ""
-"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.2)."
+"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
msgstr ""
-"\"%s\": il valore del nome non è valido \"%s\" - la sequenza UTF-8 non è "
-"valida (RFC 2911 sezione 4.1.2)."
#, c-format
-msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2)."
+msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
msgstr ""
-"\"%s\": il valore del nome non è valido \"%s\" - la lunghezza non è valida "
-"%d (RFC 2911 sezione 4.1.2)."
#, c-format
msgid ""
-"\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 section "
-"4.1.8)."
+"\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section "
+"5.1.9)."
msgstr ""
-"\"%s\": il valore di naturalLanguage non è valido \"%s\" - i caratteri non "
-"sono validi (RFC 2911 sezione 4.1.8)."
#, c-format
msgid ""
-"\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 2911 section "
-"4.1.8)."
+"\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section "
+"5.1.9)."
msgstr ""
-"\"%s\": il valore di naturalLanguage non è valido \"%s\" - la lunghezza non "
-"è valida %d (RFC 2911 sezione 4.1.8)."
#, c-format
msgid ""
-"\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10)."
+"\"%s\": Bad octetString value - bad length %d (RFC 8011 section 5.1.20)."
msgstr ""
-"\"%s\": il valore di octetString non è valido - la lunghezza non è valida %d "
-"(RFC 2911 sezione 4.1.10)."
#, c-format
msgid ""
-"\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 2911 "
-"section 4.1.13)."
+"\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 8011 "
+"section 5.1.14)."
msgstr ""
-"\"%s\": il valore di rangeOfInteger non è valido %d-%d - il più piccolo è "
-"superiore al più grande (RFC 2911 sezione 4.1.13)."
#, c-format
msgid ""
-"\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section "
-"4.1.15)."
+"\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 8011 section "
+"5.1.16)."
msgstr ""
-"\"%s\": il valore di resolution non è valido %dx%d%s - il valore dell'unità "
-"non è valida (RFC 2911 sezione 4.1.15)."
#, c-format
msgid ""
"\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be "
-"positive (RFC 2911 section 4.1.15)."
+"positive (RFC 8011 section 5.1.16)."
msgstr ""
-"\"%s\": il valore della risoluzione non è valido %dx%d%s - la risoluzione "
-"del feed deve essere positiva (RFC 2911 sezione 4.1.15)."
#, c-format
msgid ""
"\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC "
-"2911 section 4.1.15)."
+"8011 section 5.1.16)."
msgstr ""
-"\"%s\": il valore della risoluzione non è valido %dx%d%s - la risoluzione "
-"del feed deve essere positiva (RFC 2911 sezione 4.1.15)."
#, c-format
msgid ""
-"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.1)."
+"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
msgstr ""
-"\"%s\": il valore del testo non è valido \"%s\" - la sequenza UTF-8 non è "
-"valida (RFC 2911 sezione 4.1.1)."
#, c-format
-msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 2911 section 4.1.1)."
+msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
msgstr ""
-"\"%s\": il valore del testo non è valido \"%s\" - la lunghezza non è valida "
-"%d (RFC 2911 sezione 4.1.1)."
#, c-format
msgid ""
-"\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section 4.1.6)."
+"\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)."
msgstr ""
-"\"%s\": il valore di uriScheme non è valido \"%s\" - i caratteri non sono "
-"validi (RFC 2911 sezione 4.1.6)."
#, c-format
msgid ""
-"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 2911 section 4.1.6)."
+"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
msgstr ""
-"\"%s\": il valore di uriScheme non è valido \"%s\" - la lunghezza non è "
-"valida %d (RFC 2911 sezione 4.1.6)."
#, c-format
msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
@@ -6971,6 +6923,12 @@ msgstr "variable-bindings utilizza una lunghezza indefinita"
#~ msgstr ""
#~ " --lf Termina le righe con LF (UNIX/Linux/OS X)."
+#~ msgid " -E Test with HTTP Upgrade to TLS."
+#~ msgstr " -E Prova con l'aggiornamento HTTP a TLS."
+
+#~ msgid " -S Test with SSL encryption."
+#~ msgstr " -S Prova con crittografia SSL."
+
#~ msgid " -a Browse for all services."
#~ msgstr " -a Mostra tutti i servizi."
@@ -6988,6 +6946,196 @@ msgstr "variable-bindings utilizza una lunghezza indefinita"
#~ msgid " -t type Browse/resolve with specified type."
#~ msgstr " -t type Mostra/risolve con il tipo specificato."
+#~ msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 2911 section 4.1.5)."
+#~ msgstr ""
+#~ "\"%s\": il valore dell'URI non è valido \"%s\" - %s (RFC 2911 sezione "
+#~ "4.1.5)."
+
+#~ msgid ""
+#~ "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 2911 section 4.1.5)."
+#~ msgstr ""
+#~ "\"%s\": il valore dell'URI non è valido \"%s\" - la lunghezza non è "
+#~ "valida %d (RFC 2911 sezione 4.1.5)."
+
+#~ msgid "\"%s\": Bad attribute name - bad length %d (RFC 2911 section 4.1.3)."
+#~ msgstr ""
+#~ "\"%s\": il nome dell'attributo non è valido - la lunghezza non è valida "
+#~ "%d (RFC 2911 sezione 4.1.3)."
+
+#~ msgid ""
+#~ "\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)."
+#~ msgstr ""
+#~ "\"%s\": il nome dell'attributo non è valido - il carattere non è valido "
+#~ "(RFC 2911 sezione 4.1.3)."
+
+#~ msgid "\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11)."
+#~ msgstr ""
+#~ "\"%s\": il valore booleano non è valido %d (RFC 2911 sezione 4.1.11)."
+
+#~ msgid ""
+#~ "\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section "
+#~ "4.1.7)."
+#~ msgstr ""
+#~ "\"%s\": il valore del set dei caratteri non è valido \"%s\" - i caratteri "
+#~ "non sono validi (RFC 2911 sezione 4.1.7)."
+
+#~ msgid ""
+#~ "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)."
+#~ msgstr ""
+#~ "\"%s\": il valore del set dei caratteri non è valido \"%s\" - la "
+#~ "lunghezza non è valida %d (RFC 2911 sezione 4.1.7)."
+
+#~ msgid "\"%s\": Bad dateTime UTC hours %u (RFC 2911 section 4.1.14)."
+#~ msgstr "\"%s\": dateTime UTC non è valido ore %u (RFC 2911 sezione 4.1.14)."
+
+#~ msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 2911 section 4.1.14)."
+#~ msgstr ""
+#~ "\"%s\": dateTime UTC non è valido minuti %u (RFC 2911 sezione 4.1.14)."
+
+#~ msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14)."
+#~ msgstr ""
+#~ "\"%s\": dateTime UTC non è valido segno '%c' (RFC 2911 sezione 4.1.14)."
+
+#~ msgid "\"%s\": Bad dateTime day %u (RFC 2911 section 4.1.14)."
+#~ msgstr "\"%s\": dateTime non è valido giorno %u (RFC 2911 sezione 4.1.14)."
+
+#~ msgid "\"%s\": Bad dateTime deciseconds %u (RFC 2911 section 4.1.14)."
+#~ msgstr ""
+#~ "\"%s\": dateTime non è valido decimi di secondi %u (RFC 2911 sezione "
+#~ "4.1.14)."
+
+#~ msgid "\"%s\": Bad dateTime hours %u (RFC 2911 section 4.1.14)."
+#~ msgstr "\"%s\": dateTime non è valido ore %u (RFC 2911 sezione 4.1.14)."
+
+#~ msgid "\"%s\": Bad dateTime minutes %u (RFC 2911 section 4.1.14)."
+#~ msgstr "\"%s\": dateTime non è valido minuti %u (RFC 2911 sezione 4.1.14)."
+
+#~ msgid "\"%s\": Bad dateTime month %u (RFC 2911 section 4.1.14)."
+#~ msgstr "\"%s\": dateTime non è valido mese %u (RFC 2911 sezione 4.1.14)."
+
+#~ msgid "\"%s\": Bad dateTime seconds %u (RFC 2911 section 4.1.14)."
+#~ msgstr "\"%s\": dateTime non è valido secondi %u (RFC 2911 sezione 4.1.14)."
+
+#~ msgid "\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4)."
+#~ msgstr ""
+#~ "\"%s\": il valore enum non è valido %d - fuori intervallo (RFC 2911 "
+#~ "sezione 4.1.4)."
+
+#~ msgid ""
+#~ "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3)."
+#~ msgstr ""
+#~ "\"%s\": il valore della parola chiave non è valido \"%s\" - la lunghezza "
+#~ "non è valida %d (RFC 2911 sezione 4.1.3)."
+
+#~ msgid ""
+#~ "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section "
+#~ "4.1.3)."
+#~ msgstr ""
+#~ "\"%s\": il valore della parola chiave non è valido \"%s\" - il carattere "
+#~ "non è valido (RFC 2911 sezione 4.1.3)."
+
+#~ msgid ""
+#~ "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section "
+#~ "4.1.9)."
+#~ msgstr ""
+#~ "\"%s\": il valore di mimeMediaType non è valido \"%s\" - i caratteri non "
+#~ "sono validi (RFC 2911 sezione 4.1.9)."
+
+#~ msgid ""
+#~ "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section "
+#~ "4.1.9)."
+#~ msgstr ""
+#~ "\"%s\": il valore di mimeMediaType non è valido \"%s\" - la lunghezza non "
+#~ "è valida %d (RFC 2911 sezione 4.1.9)."
+
+#~ msgid ""
+#~ "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section "
+#~ "4.1.2)."
+#~ msgstr ""
+#~ "\"%s\": il valore del nome non è valido \"%s\" - la sequenza UTF-8 non è "
+#~ "valida (RFC 2911 sezione 4.1.2)."
+
+#~ msgid ""
+#~ "\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2)."
+#~ msgstr ""
+#~ "\"%s\": il valore del nome non è valido \"%s\" - la lunghezza non è "
+#~ "valida %d (RFC 2911 sezione 4.1.2)."
+
+#~ msgid ""
+#~ "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 "
+#~ "section 4.1.8)."
+#~ msgstr ""
+#~ "\"%s\": il valore di naturalLanguage non è valido \"%s\" - i caratteri "
+#~ "non sono validi (RFC 2911 sezione 4.1.8)."
+
+#~ msgid ""
+#~ "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 2911 "
+#~ "section 4.1.8)."
+#~ msgstr ""
+#~ "\"%s\": il valore di naturalLanguage non è valido \"%s\" - la lunghezza "
+#~ "non è valida %d (RFC 2911 sezione 4.1.8)."
+
+#~ msgid ""
+#~ "\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10)."
+#~ msgstr ""
+#~ "\"%s\": il valore di octetString non è valido - la lunghezza non è valida "
+#~ "%d (RFC 2911 sezione 4.1.10)."
+
+#~ msgid ""
+#~ "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC "
+#~ "2911 section 4.1.13)."
+#~ msgstr ""
+#~ "\"%s\": il valore di rangeOfInteger non è valido %d-%d - il più piccolo è "
+#~ "superiore al più grande (RFC 2911 sezione 4.1.13)."
+
+#~ msgid ""
+#~ "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section "
+#~ "4.1.15)."
+#~ msgstr ""
+#~ "\"%s\": il valore di resolution non è valido %dx%d%s - il valore "
+#~ "dell'unità non è valida (RFC 2911 sezione 4.1.15)."
+
+#~ msgid ""
+#~ "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be "
+#~ "positive (RFC 2911 section 4.1.15)."
+#~ msgstr ""
+#~ "\"%s\": il valore della risoluzione non è valido %dx%d%s - la risoluzione "
+#~ "del feed deve essere positiva (RFC 2911 sezione 4.1.15)."
+
+#~ msgid ""
+#~ "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive "
+#~ "(RFC 2911 section 4.1.15)."
+#~ msgstr ""
+#~ "\"%s\": il valore della risoluzione non è valido %dx%d%s - la risoluzione "
+#~ "del feed deve essere positiva (RFC 2911 sezione 4.1.15)."
+
+#~ msgid ""
+#~ "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 2911 section "
+#~ "4.1.1)."
+#~ msgstr ""
+#~ "\"%s\": il valore del testo non è valido \"%s\" - la sequenza UTF-8 non è "
+#~ "valida (RFC 2911 sezione 4.1.1)."
+
+#~ msgid ""
+#~ "\"%s\": Bad text value \"%s\" - bad length %d (RFC 2911 section 4.1.1)."
+#~ msgstr ""
+#~ "\"%s\": il valore del testo non è valido \"%s\" - la lunghezza non è "
+#~ "valida %d (RFC 2911 sezione 4.1.1)."
+
+#~ msgid ""
+#~ "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section "
+#~ "4.1.6)."
+#~ msgstr ""
+#~ "\"%s\": il valore di uriScheme non è valido \"%s\" - i caratteri non sono "
+#~ "validi (RFC 2911 sezione 4.1.6)."
+
+#~ msgid ""
+#~ "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 2911 section "
+#~ "4.1.6)."
+#~ msgstr ""
+#~ "\"%s\": il valore di uriScheme non è valido \"%s\" - la lunghezza non è "
+#~ "valida %d (RFC 2911 sezione 4.1.6)."
+
#~ msgid "%-6s %-10.10s %-4d %-10d %-27.27s %.0f bytes"
#~ msgstr "%-6s %-10.10s %-4d %-10d %-27.27s %.0f byte"
diff --git a/locale/cups_ja.po b/locale/cups_ja.po
index 97efa92..20bf687 100644
--- a/locale/cups_ja.po
+++ b/locale/cups_ja.po
@@ -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: 2017-03-11 10:02-0500\n"
+"POT-Creation-Date: 2017-06-19 09:12-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"
@@ -1061,9 +1061,9 @@ msgstr ""
msgid " -E Encrypt the connection."
msgstr " -E 接続を暗号化する。"
-msgid " -E Test with HTTP Upgrade to TLS."
+msgid ""
+" -E Test with encryption using HTTP Upgrade to TLS."
msgstr ""
-" -E HTTP から TLS へのアップグレードでテストする。"
msgid ""
" -F Run in the foreground but detach from console."
@@ -1104,8 +1104,8 @@ msgstr ""
msgid " -R root-directory Set alternate root."
msgstr " -R root-directory 別のルートディレクトリーを指定する。"
-msgid " -S Test with SSL encryption."
-msgstr " -S SSL 暗号化でテストする。"
+msgid " -S Test with encryption using HTTPS."
+msgstr ""
msgid " -T seconds Set the browse timeout in seconds."
msgstr " -T <秒> ブラウズのタイムアウトを秒で指定する。"
@@ -1374,204 +1374,167 @@ msgid " PASS"
msgstr " 合格"
#, 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 節)。"
+msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 8011 section 5.1.6)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 2911 section 4.1.5)."
+msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 8011 section 5.1.6)."
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 節)。"
+msgid "\"%s\": Bad attribute name - bad length %d (RFC 8011 section 5.1.4)."
+msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)."
-msgstr "\"%s\": 属性名が誤っています - 不正な文字 (RFC 2911 4.1.3 節)。"
+"\"%s\": Bad attribute name - invalid character (RFC 8011 section 5.1.4)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11)."
-msgstr "\"%s\": 真偽値 %d が誤っています (RFC 2911 4.1.11 節)。"
+msgid "\"%s\": Bad boolen value %d (RFC 8011 section 5.1.21)."
+msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section 4.1.7)."
+"\"%s\": Bad charset value \"%s\" - bad characters (RFC 8011 section 5.1.8)."
msgstr ""
-"\"%s\": charset の値 \"%s\" が誤っています - 不正な文字 (RFC 2911 4.1.7 節)。"
#, c-format
msgid ""
-"\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)."
+"\"%s\": Bad charset value \"%s\" - bad length %d (RFC 8011 section 5.1.8)."
msgstr ""
-"\"%s\": charset の値 \"%s\" が誤っています - 不正な長さ %d (RFC 2911 section "
-"4.1.7)."
#, c-format
-msgid "\"%s\": Bad dateTime UTC hours %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime UTC hours %u (RFC 8011 section 5.1.15)."
msgstr ""
-"\"%s\": dateTime UTC の時間指定 %u が誤っています (RFC 2911 4.1.14 節)."
#, 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 節)。"
+msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 8011 section 5.1.15)."
msgstr ""
-"\"%s\": dateTime UTC の符号指定 '%c' が誤っています (RFC 2911 4.1.14 節)。"
#, c-format
-msgid "\"%s\": Bad dateTime day %u (RFC 2911 section 4.1.14)."
-msgstr "\"%s\": dateTime の日付指定 %u が誤っています (RFC 2911 4.1.14 節)."
+msgid "\"%s\": Bad dateTime day %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime deciseconds %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime deciseconds %u (RFC 8011 section 5.1.15)."
msgstr ""
-"\"%s\": dateTime の 0.1 秒の指定 %u が誤っています (RFC 2911 4.1.14 節)。"
#, c-format
-msgid "\"%s\": Bad dateTime hours %u (RFC 2911 section 4.1.14)."
-msgstr "\"%s\": dateTime の時間指定 %u が誤っています (RFC 2911 4.1.14 節)。"
+msgid "\"%s\": Bad dateTime hours %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime minutes %u (RFC 2911 section 4.1.14)."
-msgstr "\"%s\": dateTime の分指定が誤っています %u (RFC 2911 4.1.14 節)。"
+msgid "\"%s\": Bad dateTime minutes %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime month %u (RFC 2911 section 4.1.14)."
-msgstr "\"%s\": dateTime の月指定 %u が誤っています (RFC 2911 4.1.14 節)。"
+msgid "\"%s\": Bad dateTime month %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime seconds %u (RFC 2911 section 4.1.14)."
-msgstr "\"%s\": 日時の秒指定 %u が誤っています (RFC 2911 4.1.14 節)。"
+msgid "\"%s\": Bad dateTime seconds %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, 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 節)。"
+msgid "\"%s\": Bad enum value %d - out of range (RFC 8011 section 5.1.5)."
+msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3)."
+"\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 8011 section 5.1.4)."
msgstr ""
-"\"%s\": keyword の値 \"%s\" が誤っています - %d (RFC 2911 section 4.1.3)."
#, c-format
msgid ""
-"\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section "
-"4.1.3)."
+"\"%s\": Bad keyword value \"%s\" - invalid character (RFC 8011 section "
+"5.1.4)."
msgstr ""
-"\"%s\": keyword の値 \"%s\" が誤っています - 不正な文字 (RFC 2911 4.1.3 節)。"
#, c-format
msgid ""
-"\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section "
-"4.1.9)."
+"\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section "
+"5.1.10)."
msgstr ""
-"\"%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)."
+"\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section "
+"5.1.10)."
msgstr ""
-"\"%s\": mimeMediaType の値 \"%s\" が誤っています - 長さの誤り %d (RFC 2911 "
-"4.1.9 節)。"
#, c-format
msgid ""
-"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.2)."
+"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
msgstr ""
-"\"%s\": name の値 \"%s\" が誤っています - UTF-8 として誤った並び (RFC 2911 "
-"4.1.2 節)。"
#, c-format
-msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2)."
+msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
msgstr ""
-"\"%s\": name の値 \"%s\" が誤っています - 誤った長さ %d (RFC 2911 section "
-"4.1.2)。"
#, c-format
msgid ""
-"\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 section "
-"4.1.8)."
+"\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section "
+"5.1.9)."
msgstr ""
-"\"%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)."
+"\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section "
+"5.1.9)."
msgstr ""
-"\"%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)."
+"\"%s\": Bad octetString value - bad length %d (RFC 8011 section 5.1.20)."
msgstr ""
-"\"%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)."
+"\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 8011 "
+"section 5.1.14)."
msgstr ""
-"\"%s\": rangeOfInteger の値 %d-%d が誤っています - 下限が上限よりも大きい "
-"(RFC 2911 4.1.13 節)。"
#, c-format
msgid ""
-"\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section "
-"4.1.15)."
+"\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 8011 section "
+"5.1.16)."
msgstr ""
-"\"%s\": resolution の値 %dx%d%s が誤っています - 単位値の誤り (RFC 2911 "
-"4.1.15 節)。"
#, c-format
msgid ""
"\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be "
-"positive (RFC 2911 section 4.1.15)."
+"positive (RFC 8011 section 5.1.16)."
msgstr ""
-"\"%s\": resolution の値 %dx%d%s が誤っています - 主走査解像度が負 (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)."
+"8011 section 5.1.16)."
msgstr ""
-"\"%s\": resolution の値 %dx%d%s が誤っています - 副走査解像度が負 (RFC 2911 "
-"4.1.15 節)。"
#, c-format
msgid ""
-"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.1)."
+"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
msgstr ""
-"\"%s\": text の値 \"%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)."
+msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
msgstr ""
-"\"%s\": text の値 \"%s\" が誤っています - 不正な長さ %d (RFC 2911 4.1.1 節)。"
#, c-format
msgid ""
-"\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section 4.1.6)."
+"\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)."
msgstr ""
-"\"%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)."
+"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
msgstr ""
-"\"%s\": uriScheme の値 \"%s\" が誤っています - 不正な長さ %d (RFC 2911 4.1.6 "
-"節)."
#, c-format
msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
@@ -6954,6 +6917,13 @@ msgstr "variable-bindings の長さが不定"
#~ msgid " --lf End lines with LF (UNIX/Linux/OS X)."
#~ msgstr " --lf 行末を LF とする (UNIX/Linux/OS X)。"
+#~ msgid " -E Test with HTTP Upgrade to TLS."
+#~ msgstr ""
+#~ " -E HTTP から TLS へのアップグレードでテストする。"
+
+#~ msgid " -S Test with SSL encryption."
+#~ msgstr " -S SSL 暗号化でテストする。"
+
#~ msgid " -a Browse for all services."
#~ msgstr " -a すべてのサービスをブラウズする。"
@@ -6972,12 +6942,194 @@ msgstr "variable-bindings の長さが不定"
#~ msgid " -t type Browse/resolve with specified type."
#~ msgstr " -t タイプ 指定されたタイプでブラウズ/名前解決する。"
+#~ msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 2911 section 4.1.5)."
+#~ msgstr "\"%s\": URI の値 \"%s\" が誤っています - %s (RFC 2911 4.1.5 節)。"
+
+#~ 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 "
+#~ "節)。"
+
+#~ msgid "\"%s\": Bad attribute name - bad length %d (RFC 2911 section 4.1.3)."
+#~ msgstr "\"%s\": 属性名が誤っています - 長さの誤り %d (RFC 2911 4.1.3 節)。"
+
+#~ msgid ""
+#~ "\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)."
+#~ msgstr "\"%s\": 属性名が誤っています - 不正な文字 (RFC 2911 4.1.3 節)。"
+
+#~ msgid "\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11)."
+#~ msgstr "\"%s\": 真偽値 %d が誤っています (RFC 2911 4.1.11 節)。"
+
+#~ msgid ""
+#~ "\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section "
+#~ "4.1.7)."
+#~ msgstr ""
+#~ "\"%s\": charset の値 \"%s\" が誤っています - 不正な文字 (RFC 2911 4.1.7 "
+#~ "節)。"
+
+#~ msgid ""
+#~ "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)."
+#~ msgstr ""
+#~ "\"%s\": charset の値 \"%s\" が誤っています - 不正な長さ %d (RFC 2911 "
+#~ "section 4.1.7)."
+
+#~ msgid "\"%s\": Bad dateTime UTC hours %u (RFC 2911 section 4.1.14)."
+#~ msgstr ""
+#~ "\"%s\": dateTime UTC の時間指定 %u が誤っています (RFC 2911 4.1.14 節)."
+
+#~ msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 2911 section 4.1.14)."
+#~ msgstr ""
+#~ "\"%s\": dateTime UTC の分指定 %u が誤っています (RFC 2911 4.1.14 節)。"
+
+#~ msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14)."
+#~ msgstr ""
+#~ "\"%s\": dateTime UTC の符号指定 '%c' が誤っています (RFC 2911 4.1.14 節)。"
+
+#~ msgid "\"%s\": Bad dateTime day %u (RFC 2911 section 4.1.14)."
+#~ msgstr "\"%s\": dateTime の日付指定 %u が誤っています (RFC 2911 4.1.14 節)."
+
+#~ msgid "\"%s\": Bad dateTime deciseconds %u (RFC 2911 section 4.1.14)."
+#~ msgstr ""
+#~ "\"%s\": dateTime の 0.1 秒の指定 %u が誤っています (RFC 2911 4.1.14 節)。"
+
+#~ msgid "\"%s\": Bad dateTime hours %u (RFC 2911 section 4.1.14)."
+#~ msgstr ""
+#~ "\"%s\": dateTime の時間指定 %u が誤っています (RFC 2911 4.1.14 節)。"
+
+#~ msgid "\"%s\": Bad dateTime minutes %u (RFC 2911 section 4.1.14)."
+#~ msgstr "\"%s\": dateTime の分指定が誤っています %u (RFC 2911 4.1.14 節)。"
+
+#~ msgid "\"%s\": Bad dateTime month %u (RFC 2911 section 4.1.14)."
+#~ msgstr "\"%s\": dateTime の月指定 %u が誤っています (RFC 2911 4.1.14 節)。"
+
+#~ msgid "\"%s\": Bad dateTime seconds %u (RFC 2911 section 4.1.14)."
+#~ msgstr "\"%s\": 日時の秒指定 %u が誤っています (RFC 2911 4.1.14 節)。"
+
+#~ msgid "\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4)."
+#~ msgstr ""
+#~ "\"%s\": enum の値 %d が誤っています - 範囲外の値 (RFC 2911 4.1.4 節)。"
+
+#~ 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)."
+
+#~ msgid ""
+#~ "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section "
+#~ "4.1.3)."
+#~ msgstr ""
+#~ "\"%s\": keyword の値 \"%s\" が誤っています - 不正な文字 (RFC 2911 4.1.3 "
+#~ "節)。"
+
+#~ msgid ""
+#~ "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section "
+#~ "4.1.9)."
+#~ msgstr ""
+#~ "\"%s\": mimeMediaType の値 \"%s\" が誤っています - 誤った文字 (RFC 2911 "
+#~ "4.1.9 節)。"
+
+#~ msgid ""
+#~ "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section "
+#~ "4.1.9)."
+#~ msgstr ""
+#~ "\"%s\": mimeMediaType の値 \"%s\" が誤っています - 長さの誤り %d (RFC "
+#~ "2911 4.1.9 節)。"
+
+#~ msgid ""
+#~ "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section "
+#~ "4.1.2)."
+#~ msgstr ""
+#~ "\"%s\": name の値 \"%s\" が誤っています - UTF-8 として誤った並び (RFC "
+#~ "2911 4.1.2 節)。"
+
+#~ 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)。"
+
+#~ msgid ""
+#~ "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 "
+#~ "section 4.1.8)."
+#~ msgstr ""
+#~ "\"%s\": naturalLanguage の値 \"%s\" が誤っています - 誤った文字 (RFC 2911 "
+#~ "4.1.8 節)。"
+
+#~ 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 節)。"
+
+#~ msgid ""
+#~ "\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10)."
+#~ msgstr ""
+#~ "\"%s\": octetString 値が誤っています - 誤った長さ %d (RFC 2911 4.1.10 "
+#~ "節)。"
+
+#~ 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 節)。"
+
+#~ msgid ""
+#~ "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section "
+#~ "4.1.15)."
+#~ msgstr ""
+#~ "\"%s\": resolution の値 %dx%d%s が誤っています - 単位値の誤り (RFC 2911 "
+#~ "4.1.15 節)。"
+
+#~ 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 節)。"
+
+#~ msgid ""
+#~ "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive "
+#~ "(RFC 2911 section 4.1.15)."
+#~ msgstr ""
+#~ "\"%s\": resolution の値 %dx%d%s が誤っています - 副走査解像度が負 (RFC "
+#~ "2911 4.1.15 節)。"
+
+#~ msgid ""
+#~ "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 2911 section "
+#~ "4.1.1)."
+#~ msgstr ""
+#~ "\"%s\": text の値 \"%s\" が誤っています - UTF-8 として誤った並び (RFC "
+#~ "2911 4.1.1 節)。"
+
+#~ 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 "
+#~ "節)。"
+
+#~ msgid ""
+#~ "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section "
+#~ "4.1.6)."
+#~ msgstr ""
+#~ "\"%s\": uriScheme の値 \"%s\" が誤っています - 誤った文字 (RFC 2911 4.1.6 "
+#~ "節)."
+
#~ msgid ""
#~ "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 2911 4.1.6 節)."
#~ msgstr ""
#~ "\"%s\": uriScheme 値 \"%s\" が誤っています - 誤った長さ %d (RFC 2911 "
#~ "4.1.6 節)."
+#~ 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 節)."
+
#~ msgid "%-6s %-10.10s %-4d %-10d %-27.27s %.0f bytes"
#~ msgstr "%-6s %-10.10s %-4d %-10d %-27.27s %.0f バイト"
diff --git a/locale/cups_pt_BR.po b/locale/cups_pt_BR.po
index da42564..1e7fa7d 100644
--- a/locale/cups_pt_BR.po
+++ b/locale/cups_pt_BR.po
@@ -40,7 +40,7 @@ msgid ""
msgstr ""
"Project-Id-Version: CUPS 2.1.2\n"
"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2017-03-11 10:02-0500\n"
+"POT-Creation-Date: 2017-06-19 09:12-0400\n"
"PO-Revision-Date: 2016-01-31 16:45-0200\n"
"Last-Translator: Rafael Fontenelle <rffontenelle@gmail.com>\n"
"Language-Team: Brazilian Portuguese <traducao-cups-pt-br@googlegroups.com>\n"
@@ -1078,8 +1078,9 @@ msgstr " -D nome=valor Define a variável \"nome\" com \"valor\"."
msgid " -E Encrypt the connection."
msgstr " -E Criptografa a conexão."
-msgid " -E Test with HTTP Upgrade to TLS."
-msgstr " -E Testa com HTTP Upgrade para TLS."
+msgid ""
+" -E Test with encryption using HTTP Upgrade to TLS."
+msgstr ""
msgid ""
" -F Run in the foreground but detach from console."
@@ -1121,8 +1122,8 @@ msgstr " -P número[-número] Corresponde a porta ao número ou faixa."
msgid " -R root-directory Set alternate root."
msgstr " -R diretório-raiz Define diretório-raiz alternativo."
-msgid " -S Test with SSL encryption."
-msgstr " -S Testa com criptografia SSL."
+msgid " -S Test with encryption using HTTPS."
+msgstr ""
msgid " -T seconds Set the browse timeout in seconds."
msgstr ""
@@ -1406,213 +1407,167 @@ msgid " PASS"
msgstr " PASSOU"
#, c-format
-msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 2911 section 4.1.5)."
-msgstr "\"%s\": Valor inválido de URI \"%s\" - %s (RFC 2911 seção 4.1.5)."
+msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 8011 section 5.1.6)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 2911 section 4.1.5)."
+msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 8011 section 5.1.6)."
msgstr ""
-"\"%s\": Valor inválido de URI \"%s\" - comprimento inválido %d (RFC 2911 "
-"seção 4.1.5)."
#, c-format
-msgid "\"%s\": Bad attribute name - bad length %d (RFC 2911 section 4.1.3)."
+msgid "\"%s\": Bad attribute name - bad length %d (RFC 8011 section 5.1.4)."
msgstr ""
-"\"%s\": Nome de atributo inválido - comprimento inválido %d (RFC 2911 seção "
-"4.1.3)."
#, c-format
msgid ""
-"\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)."
+"\"%s\": Bad attribute name - invalid character (RFC 8011 section 5.1.4)."
msgstr ""
-"\"%s\": Nome de atributo inválido - caractere inválido (RFC 2911 seção "
-"4.1.3)."
#, c-format
-msgid "\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11)."
-msgstr "\"%s\": Valor booleano inválido %d (RFC 2911 seção 4.1.11)."
+msgid "\"%s\": Bad boolen value %d (RFC 8011 section 5.1.21)."
+msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section 4.1.7)."
+"\"%s\": Bad charset value \"%s\" - bad characters (RFC 8011 section 5.1.8)."
msgstr ""
-"\"%s\": Valor de conjunto de caracteres inválido \"%s\" - caracteres "
-"inválido (RFC 2911 seção 4.1.7)."
#, c-format
msgid ""
-"\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)."
+"\"%s\": Bad charset value \"%s\" - bad length %d (RFC 8011 section 5.1.8)."
msgstr ""
-"\"%s\": Valor de conjunto de caracteres inválido \"%s\" - comprimento "
-"inválido %d (RFC 2911 seção 4.1.7)."
#, c-format
-msgid "\"%s\": Bad dateTime UTC hours %u (RFC 2911 section 4.1.14)."
-msgstr "\"%s\": Horas de UTC dateTime inválidas %u (RFC 2911 seção 4.1.14)."
+msgid "\"%s\": Bad dateTime UTC hours %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 2911 section 4.1.14)."
-msgstr "\"%s\": Minutos de UTC dateTime inválidos %u (RFC 2911 seção 4.1.14)."
+msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14)."
-msgstr "\"%s\": Sinal de UTC dateTime inválido \"%c\" (RFC 2911 seção 4.1.14)."
+msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime day %u (RFC 2911 section 4.1.14)."
-msgstr "\"%s\": Dia de dateTime inválido %u (RFC 2911 seção 4.1.14)."
+msgid "\"%s\": Bad dateTime day %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime deciseconds %u (RFC 2911 section 4.1.14)."
+msgid "\"%s\": Bad dateTime deciseconds %u (RFC 8011 section 5.1.15)."
msgstr ""
-"\"%s\": Décimos de segundos de dateTime inválidos %u (RFC 2911 seção 4.1.14)."
#, c-format
-msgid "\"%s\": Bad dateTime hours %u (RFC 2911 section 4.1.14)."
-msgstr "\"%s\": Horas de dateTime inválidas %u (RFC 2911 seção 4.1.14)."
+msgid "\"%s\": Bad dateTime hours %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime minutes %u (RFC 2911 section 4.1.14)."
-msgstr "\"%s\": Minutos de dateTime inválidos %u (RFC 2911 seção 4.1.14)."
+msgid "\"%s\": Bad dateTime minutes %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime month %u (RFC 2911 section 4.1.14)."
-msgstr "\"%s\": Mês de dateTime inválido %u (RFC 2911 seção 4.1.14)."
+msgid "\"%s\": Bad dateTime month %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime seconds %u (RFC 2911 section 4.1.14)."
-msgstr "\"%s\": Segundos de dateTime inválidos %u (RFC 2911 seção 4.1.14)."
+msgid "\"%s\": Bad dateTime seconds %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4)."
+msgid "\"%s\": Bad enum value %d - out of range (RFC 8011 section 5.1.5)."
msgstr ""
-"\"%s\": Valor de enum inválido %d - fora da faixa (RFC 2911 seção 4.1.4)."
#, c-format
msgid ""
-"\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3)."
+"\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 8011 section 5.1.4)."
msgstr ""
-"\"%s\": Valor de keyword inválido \"%s\" - comprimento inválido %d (RFC 2911 "
-"seção 4.1.3)."
#, c-format
msgid ""
-"\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section "
-"4.1.3)."
+"\"%s\": Bad keyword value \"%s\" - invalid character (RFC 8011 section "
+"5.1.4)."
msgstr ""
-"\"%s\": Valor de keyword inválido \"%s\" - caractere inválido (RFC 2911 "
-"seção 4.1.3)."
#, c-format
msgid ""
-"\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section "
-"4.1.9)."
+"\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section "
+"5.1.10)."
msgstr ""
-"\"%s\": Valor de mimeMediaType inválido \"%s\" - caracteres inválidos (RFC "
-"2911 seção 4.1.9)."
#, c-format
msgid ""
-"\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section "
-"4.1.9)."
+"\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section "
+"5.1.10)."
msgstr ""
-"\"%s\": Valor de mimeMediaType inválido \"%s\" - comprimento inválido %d "
-"(RFC 2911 seção 4.1.9)."
#, c-format
msgid ""
-"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.2)."
+"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
msgstr ""
-"\"%s\": Valor de name inválido \"%s\" - sequência UTF-8 inválida (RFC 2911 "
-"seção 4.1.2)."
#, c-format
-msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2)."
+msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
msgstr ""
-"\"%s\": Valor de name inválido \"%s\" - comprimento inválido %d (RFC 2911 "
-"seção 4.1.2)."
#, c-format
msgid ""
-"\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 section "
-"4.1.8)."
+"\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section "
+"5.1.9)."
msgstr ""
-"\"%s\": Valor de naturalLanguage inválido \"%s\" - caracteres inválidos (RFC "
-"2911 seção 4.1.8)."
#, c-format
msgid ""
-"\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 2911 section "
-"4.1.8)."
+"\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section "
+"5.1.9)."
msgstr ""
-"\"%s\": Valor de naturalLanguage inválido \"%s\" - comprimento inválido %d "
-"(RFC 2911 seção 4.1.8)."
#, c-format
msgid ""
-"\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10)."
+"\"%s\": Bad octetString value - bad length %d (RFC 8011 section 5.1.20)."
msgstr ""
-"\"%s\": Valor de octetString inválido - comprimento inválido %d (RFC 2911 "
-"seção 4.1.10)."
#, c-format
msgid ""
-"\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 2911 "
-"section 4.1.13)."
+"\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 8011 "
+"section 5.1.14)."
msgstr ""
-"\"%s\": Valor de rangeOfInteger inválido %d-%d - inferior maior do que o "
-"superior (RFC 2911 seção 4.1.13)."
#, c-format
msgid ""
-"\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section "
-"4.1.15)."
+"\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 8011 section "
+"5.1.16)."
msgstr ""
-"\"%s\": Valor de resolução inválido %dx%d%s - valor de unidades inválido "
-"(RFC 2911 seção 4.1.15)."
#, c-format
msgid ""
"\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be "
-"positive (RFC 2911 section 4.1.15)."
+"positive (RFC 8011 section 5.1.16)."
msgstr ""
-"\"%s\": Valor de resolução inválido %dx%d%s - resolução de cross-feed deve "
-"ser positiva (RFC 2911 seção 4.1.15)."
#, c-format
msgid ""
"\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC "
-"2911 section 4.1.15)."
+"8011 section 5.1.16)."
msgstr ""
-"\"%s\": Valor de resolução inválido %dx%d%s - resolução de feed deve ser "
-"positiva (RFC 2911 seção 4.1.15)."
#, c-format
msgid ""
-"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.1)."
+"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
msgstr ""
-"\"%s\": Valor de texto inválido \"%s\" - sequência UTF-8 inválida (RFC 2911 "
-"seção 4.1.1)."
#, c-format
-msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 2911 section 4.1.1)."
+msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
msgstr ""
-"\"%s\": Valor de texto inválido \"%s\" - comprimento inválido %d (RFC 2911 "
-"seção 4.1.1)."
#, c-format
msgid ""
-"\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section 4.1.6)."
+"\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)."
msgstr ""
-"\"%s\": Valor de uriScheme inválido \"%s\" - caracteres inválidos (RFC 2911 "
-"seção 4.1.6)."
#, c-format
msgid ""
-"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 2911 section 4.1.6)."
+"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
msgstr ""
-"\"%s\": Valor de uriScheme inválido \"%s\" - comprimento inválido %d (RFC "
-"2911 seção 4.1.6)."
#, c-format
msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
@@ -6959,6 +6914,12 @@ msgstr "variable-bindings usa comprimento indefinido"
#~ msgid " --lf End lines with LF (UNIX/Linux/OS X)."
#~ msgstr " --lf Fim de linhas com LF (UNIX/Linux/OS X)."
+#~ msgid " -E Test with HTTP Upgrade to TLS."
+#~ msgstr " -E Testa com HTTP Upgrade para TLS."
+
+#~ msgid " -S Test with SSL encryption."
+#~ msgstr " -S Testa com criptografia SSL."
+
#~ msgid " -a Browse for all services."
#~ msgstr " -a Navega por todos os serviços."
@@ -6976,6 +6937,192 @@ msgstr "variable-bindings usa comprimento indefinido"
#~ msgid " -t type Browse/resolve with specified type."
#~ msgstr " -t tipo Navega/resolve com o tipo especificado."
+#~ msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 2911 section 4.1.5)."
+#~ msgstr "\"%s\": Valor inválido de URI \"%s\" - %s (RFC 2911 seção 4.1.5)."
+
+#~ msgid ""
+#~ "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 2911 section 4.1.5)."
+#~ msgstr ""
+#~ "\"%s\": Valor inválido de URI \"%s\" - comprimento inválido %d (RFC 2911 "
+#~ "seção 4.1.5)."
+
+#~ msgid "\"%s\": Bad attribute name - bad length %d (RFC 2911 section 4.1.3)."
+#~ msgstr ""
+#~ "\"%s\": Nome de atributo inválido - comprimento inválido %d (RFC 2911 "
+#~ "seção 4.1.3)."
+
+#~ msgid ""
+#~ "\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)."
+#~ msgstr ""
+#~ "\"%s\": Nome de atributo inválido - caractere inválido (RFC 2911 seção "
+#~ "4.1.3)."
+
+#~ msgid "\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11)."
+#~ msgstr "\"%s\": Valor booleano inválido %d (RFC 2911 seção 4.1.11)."
+
+#~ msgid ""
+#~ "\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section "
+#~ "4.1.7)."
+#~ msgstr ""
+#~ "\"%s\": Valor de conjunto de caracteres inválido \"%s\" - caracteres "
+#~ "inválido (RFC 2911 seção 4.1.7)."
+
+#~ msgid ""
+#~ "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)."
+#~ msgstr ""
+#~ "\"%s\": Valor de conjunto de caracteres inválido \"%s\" - comprimento "
+#~ "inválido %d (RFC 2911 seção 4.1.7)."
+
+#~ msgid "\"%s\": Bad dateTime UTC hours %u (RFC 2911 section 4.1.14)."
+#~ msgstr "\"%s\": Horas de UTC dateTime inválidas %u (RFC 2911 seção 4.1.14)."
+
+#~ msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 2911 section 4.1.14)."
+#~ msgstr ""
+#~ "\"%s\": Minutos de UTC dateTime inválidos %u (RFC 2911 seção 4.1.14)."
+
+#~ msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14)."
+#~ msgstr ""
+#~ "\"%s\": Sinal de UTC dateTime inválido \"%c\" (RFC 2911 seção 4.1.14)."
+
+#~ msgid "\"%s\": Bad dateTime day %u (RFC 2911 section 4.1.14)."
+#~ msgstr "\"%s\": Dia de dateTime inválido %u (RFC 2911 seção 4.1.14)."
+
+#~ msgid "\"%s\": Bad dateTime deciseconds %u (RFC 2911 section 4.1.14)."
+#~ msgstr ""
+#~ "\"%s\": Décimos de segundos de dateTime inválidos %u (RFC 2911 seção "
+#~ "4.1.14)."
+
+#~ msgid "\"%s\": Bad dateTime hours %u (RFC 2911 section 4.1.14)."
+#~ msgstr "\"%s\": Horas de dateTime inválidas %u (RFC 2911 seção 4.1.14)."
+
+#~ msgid "\"%s\": Bad dateTime minutes %u (RFC 2911 section 4.1.14)."
+#~ msgstr "\"%s\": Minutos de dateTime inválidos %u (RFC 2911 seção 4.1.14)."
+
+#~ msgid "\"%s\": Bad dateTime month %u (RFC 2911 section 4.1.14)."
+#~ msgstr "\"%s\": Mês de dateTime inválido %u (RFC 2911 seção 4.1.14)."
+
+#~ msgid "\"%s\": Bad dateTime seconds %u (RFC 2911 section 4.1.14)."
+#~ msgstr "\"%s\": Segundos de dateTime inválidos %u (RFC 2911 seção 4.1.14)."
+
+#~ msgid "\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4)."
+#~ msgstr ""
+#~ "\"%s\": Valor de enum inválido %d - fora da faixa (RFC 2911 seção 4.1.4)."
+
+#~ msgid ""
+#~ "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3)."
+#~ msgstr ""
+#~ "\"%s\": Valor de keyword inválido \"%s\" - comprimento inválido %d (RFC "
+#~ "2911 seção 4.1.3)."
+
+#~ msgid ""
+#~ "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section "
+#~ "4.1.3)."
+#~ msgstr ""
+#~ "\"%s\": Valor de keyword inválido \"%s\" - caractere inválido (RFC 2911 "
+#~ "seção 4.1.3)."
+
+#~ msgid ""
+#~ "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section "
+#~ "4.1.9)."
+#~ msgstr ""
+#~ "\"%s\": Valor de mimeMediaType inválido \"%s\" - caracteres inválidos "
+#~ "(RFC 2911 seção 4.1.9)."
+
+#~ msgid ""
+#~ "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section "
+#~ "4.1.9)."
+#~ msgstr ""
+#~ "\"%s\": Valor de mimeMediaType inválido \"%s\" - comprimento inválido %d "
+#~ "(RFC 2911 seção 4.1.9)."
+
+#~ msgid ""
+#~ "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section "
+#~ "4.1.2)."
+#~ msgstr ""
+#~ "\"%s\": Valor de name inválido \"%s\" - sequência UTF-8 inválida (RFC "
+#~ "2911 seção 4.1.2)."
+
+#~ msgid ""
+#~ "\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2)."
+#~ msgstr ""
+#~ "\"%s\": Valor de name inválido \"%s\" - comprimento inválido %d (RFC 2911 "
+#~ "seção 4.1.2)."
+
+#~ msgid ""
+#~ "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 "
+#~ "section 4.1.8)."
+#~ msgstr ""
+#~ "\"%s\": Valor de naturalLanguage inválido \"%s\" - caracteres inválidos "
+#~ "(RFC 2911 seção 4.1.8)."
+
+#~ msgid ""
+#~ "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 2911 "
+#~ "section 4.1.8)."
+#~ msgstr ""
+#~ "\"%s\": Valor de naturalLanguage inválido \"%s\" - comprimento inválido "
+#~ "%d (RFC 2911 seção 4.1.8)."
+
+#~ msgid ""
+#~ "\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10)."
+#~ msgstr ""
+#~ "\"%s\": Valor de octetString inválido - comprimento inválido %d (RFC 2911 "
+#~ "seção 4.1.10)."
+
+#~ msgid ""
+#~ "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC "
+#~ "2911 section 4.1.13)."
+#~ msgstr ""
+#~ "\"%s\": Valor de rangeOfInteger inválido %d-%d - inferior maior do que o "
+#~ "superior (RFC 2911 seção 4.1.13)."
+
+#~ msgid ""
+#~ "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section "
+#~ "4.1.15)."
+#~ msgstr ""
+#~ "\"%s\": Valor de resolução inválido %dx%d%s - valor de unidades inválido "
+#~ "(RFC 2911 seção 4.1.15)."
+
+#~ msgid ""
+#~ "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be "
+#~ "positive (RFC 2911 section 4.1.15)."
+#~ msgstr ""
+#~ "\"%s\": Valor de resolução inválido %dx%d%s - resolução de cross-feed "
+#~ "deve ser positiva (RFC 2911 seção 4.1.15)."
+
+#~ msgid ""
+#~ "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive "
+#~ "(RFC 2911 section 4.1.15)."
+#~ msgstr ""
+#~ "\"%s\": Valor de resolução inválido %dx%d%s - resolução de feed deve ser "
+#~ "positiva (RFC 2911 seção 4.1.15)."
+
+#~ msgid ""
+#~ "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 2911 section "
+#~ "4.1.1)."
+#~ msgstr ""
+#~ "\"%s\": Valor de texto inválido \"%s\" - sequência UTF-8 inválida (RFC "
+#~ "2911 seção 4.1.1)."
+
+#~ msgid ""
+#~ "\"%s\": Bad text value \"%s\" - bad length %d (RFC 2911 section 4.1.1)."
+#~ msgstr ""
+#~ "\"%s\": Valor de texto inválido \"%s\" - comprimento inválido %d (RFC "
+#~ "2911 seção 4.1.1)."
+
+#~ msgid ""
+#~ "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section "
+#~ "4.1.6)."
+#~ msgstr ""
+#~ "\"%s\": Valor de uriScheme inválido \"%s\" - caracteres inválidos (RFC "
+#~ "2911 seção 4.1.6)."
+
+#~ msgid ""
+#~ "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 2911 section "
+#~ "4.1.6)."
+#~ msgstr ""
+#~ "\"%s\": Valor de uriScheme inválido \"%s\" - comprimento inválido %d (RFC "
+#~ "2911 seção 4.1.6)."
+
#~ msgid "%-6s %-10.10s %-4d %-10d %-27.27s %.0f bytes"
#~ msgstr "%-6s %-10.10s %-4d %-10d %-27.27s %.0f bytes"
diff --git a/locale/cups_ru.po b/locale/cups_ru.po
index 68568e3..4d76107 100644
--- a/locale/cups_ru.po
+++ b/locale/cups_ru.po
@@ -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: 2017-03-11 10:02-0500\n"
+"POT-Creation-Date: 2017-06-19 09:12-0400\n"
"PO-Revision-Date: 2015-01-28 12:00-0800\n"
"Last-Translator: Aleksandr Proklov\n"
"Language-Team: PuppyRus Linux Team\n"
@@ -1018,8 +1018,9 @@ msgstr " -D name=value Определение переменной."
msgid " -E Encrypt the connection."
msgstr " -E Подключение к серверу шифруется."
-msgid " -E Test with HTTP Upgrade to TLS."
-msgstr " -E Проверять что HTTP использует TLS."
+msgid ""
+" -E Test with encryption using HTTP Upgrade to TLS."
+msgstr ""
msgid ""
" -F Run in the foreground but detach from console."
@@ -1060,8 +1061,8 @@ msgstr ""
msgid " -R root-directory Set alternate root."
msgstr " -R root-directory Задать корневой каталог."
-msgid " -S Test with SSL encryption."
-msgstr " -S Проверять шифрование SSL."
+msgid " -S Test with encryption using HTTPS."
+msgstr ""
msgid " -T seconds Set the browse timeout in seconds."
msgstr " -T seconds Задать время ожидания в секундах."
@@ -1334,211 +1335,167 @@ msgid " PASS"
msgstr " PASS"
#, 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)."
+msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 8011 section 5.1.6)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 2911 section 4.1.5)."
+msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 8011 section 5.1.6)."
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)."
+msgid "\"%s\": Bad attribute name - bad length %d (RFC 8011 section 5.1.4)."
msgstr ""
-"\"%s\": Неправильный атрибут имени - ошибка длины %d (RFC 2911 раздел 4.1.3)."
#, c-format
msgid ""
-"\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)."
+"\"%s\": Bad attribute name - invalid character (RFC 8011 section 5.1.4)."
msgstr ""
-"\"%s\": Неправильный атрибут имени - недопустимый символ (RFC 2911 раздел "
-"4.1.3)."
#, c-format
-msgid "\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11)."
-msgstr "\"%s\": Неправильное двоичное значение %d (RFC 2911 раздел 4.1.11)."
+msgid "\"%s\": Bad boolen value %d (RFC 8011 section 5.1.21)."
+msgstr ""
#, c-format
msgid ""
-"\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section 4.1.7)."
+"\"%s\": Bad charset value \"%s\" - bad characters (RFC 8011 section 5.1.8)."
msgstr ""
-"\"%s\": Неправильное символьное значение \"%s\" - недопустимые символы (RFC "
-"2911 раздел 4.1.7)."
#, c-format
msgid ""
-"\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)."
+"\"%s\": Bad charset value \"%s\" - bad length %d (RFC 8011 section 5.1.8)."
msgstr ""
-"\"%s\": Неправильное символьное значение \"%s\" - ошибка длины %d (RFC 2911 "
-"раздел 4.1.7)."
#, 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)."
+msgid "\"%s\": Bad dateTime UTC hours %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, 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)."
+msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14)."
-msgstr "\"%s\": Ошибка в dateTime UTC sign '%c' (RFC 2911 раздел 4.1.14)."
+msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime day %u (RFC 2911 section 4.1.14)."
-msgstr "\"%s\": Ошибка в dateTime дни %u (RFC 2911 раздел 4.1.14)."
+msgid "\"%s\": Bad dateTime day %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime deciseconds %u (RFC 2911 section 4.1.14)."
-msgstr "\"%s\": Ошибка в dateTime миллисекунды %u (RFC 2911 раздел 4.1.14)."
+msgid "\"%s\": Bad dateTime deciseconds %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime hours %u (RFC 2911 section 4.1.14)."
-msgstr "\"%s\": Ошибка в dateTime часы %u (RFC 2911 раздел 4.1.14)."
+msgid "\"%s\": Bad dateTime hours %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime minutes %u (RFC 2911 section 4.1.14)."
-msgstr "\"%s\": Ошибка в dateTime минуты %u (RFC 2911 раздел 4.1.14)."
+msgid "\"%s\": Bad dateTime minutes %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime month %u (RFC 2911 section 4.1.14)."
-msgstr "\"%s\": Ошибка в dateTime месяц %u (RFC 2911 раздел 4.1.14)."
+msgid "\"%s\": Bad dateTime month %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad dateTime seconds %u (RFC 2911 section 4.1.14)."
-msgstr "\"%s\": Ошибка в dateTime секунды %u (RFC 2911 раздел 4.1.14)."
+msgid "\"%s\": Bad dateTime seconds %u (RFC 8011 section 5.1.15)."
+msgstr ""
#, c-format
-msgid "\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4)."
+msgid "\"%s\": Bad enum value %d - out of range (RFC 8011 section 5.1.5)."
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)."
+"\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 8011 section 5.1.4)."
msgstr ""
-"\"%s\": Ошибка в значении \"%s\" - неправильная длина %d (RFC 2911 раздел "
-"4.1.3)."
#, c-format
msgid ""
-"\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section "
-"4.1.3)."
+"\"%s\": Bad keyword value \"%s\" - invalid character (RFC 8011 section "
+"5.1.4)."
msgstr ""
-"\"%s\": Ошибка в значении \"%s\" - недопустимый символ (RFC 2911 раздел "
-"4.1.3)."
#, c-format
msgid ""
-"\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section "
-"4.1.9)."
+"\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section "
+"5.1.10)."
msgstr ""
-"\"%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)."
+"\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section "
+"5.1.10)."
msgstr ""
-"\"%s\": Ошибка mimeMediaType значение \"%s\" - неправильная длина %d (RFC "
-"2911 раздел 4.1.9)."
#, c-format
msgid ""
-"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.2)."
+"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
msgstr ""
-"\"%s\": Неправильное имя \"%s\" - ошибка в UTF-8 (RFC 2911 раздел 4.1.2)."
#, c-format
-msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2)."
+msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
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)."
+"\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section "
+"5.1.9)."
msgstr ""
-"\"%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)."
+"\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section "
+"5.1.9)."
msgstr ""
-"\"%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)."
+"\"%s\": Bad octetString value - bad length %d (RFC 8011 section 5.1.20)."
msgstr ""
-"\"%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)."
+"\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 8011 "
+"section 5.1.14)."
msgstr ""
-"\"%s\": Ошибка rangeOfInteger значение %d-%d - первое больше чем второе (RFC "
-"2911 раздел 4.1.13)."
#, c-format
msgid ""
-"\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section "
-"4.1.15)."
+"\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 8011 section "
+"5.1.16)."
msgstr ""
-"\"%s\": Неправильное значение разрешения %dx%d%s - ошибка в значении units "
-"(RFC 2911 раздел 4.1.15)."
#, c-format
msgid ""
"\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be "
-"positive (RFC 2911 section 4.1.15)."
+"positive (RFC 8011 section 5.1.16)."
msgstr ""
-"\"%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)."
+"8011 section 5.1.16)."
msgstr ""
-"\"%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)."
+"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
msgstr ""
-"\"%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)."
+msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
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)."
+"\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)."
msgstr ""
-"\"%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)."
+"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
msgstr ""
-"\"%s\": Ошибка uriScheme значение \"%s\" - ошибка длины %d (RFC 2911 раздел "
-"4.1.6)."
#, c-format
msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
@@ -6883,6 +6840,12 @@ msgstr "Для variable-bindings длина не установлена"
#~ " --lf Строки заканчиваются на LF (UNIX/Linux/Mac OS "
#~ "X)."
+#~ msgid " -E Test with HTTP Upgrade to TLS."
+#~ msgstr " -E Проверять что HTTP использует TLS."
+
+#~ msgid " -S Test with SSL encryption."
+#~ msgstr " -S Проверять шифрование SSL."
+
#~ msgid " -a Browse for all services."
#~ msgstr " -a Обзор всех сервисов."
@@ -6895,6 +6858,189 @@ msgstr "Для variable-bindings длина не установлена"
#~ msgid " -t type Browse/resolve with specified type."
#~ msgstr " -t type Просмотр/определение по указанному типу."
+#~ msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 2911 section 4.1.5)."
+#~ msgstr ""
+#~ "\"%s\": Неправильное значение URI \"%s\" - %s (RFC 2911 раздел 4.1.5)."
+
+#~ 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)."
+
+#~ msgid "\"%s\": Bad attribute name - bad length %d (RFC 2911 section 4.1.3)."
+#~ msgstr ""
+#~ "\"%s\": Неправильный атрибут имени - ошибка длины %d (RFC 2911 раздел "
+#~ "4.1.3)."
+
+#~ msgid ""
+#~ "\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)."
+#~ msgstr ""
+#~ "\"%s\": Неправильный атрибут имени - недопустимый символ (RFC 2911 раздел "
+#~ "4.1.3)."
+
+#~ msgid "\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11)."
+#~ msgstr "\"%s\": Неправильное двоичное значение %d (RFC 2911 раздел 4.1.11)."
+
+#~ msgid ""
+#~ "\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section "
+#~ "4.1.7)."
+#~ msgstr ""
+#~ "\"%s\": Неправильное символьное значение \"%s\" - недопустимые символы "
+#~ "(RFC 2911 раздел 4.1.7)."
+
+#~ msgid ""
+#~ "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)."
+#~ msgstr ""
+#~ "\"%s\": Неправильное символьное значение \"%s\" - ошибка длины %d (RFC "
+#~ "2911 раздел 4.1.7)."
+
+#~ msgid "\"%s\": Bad dateTime UTC hours %u (RFC 2911 section 4.1.14)."
+#~ msgstr "\"%s\": Ошибка в dateTime UTC часов %u (RFC 2911 раздел 4.1.14)."
+
+#~ msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 2911 section 4.1.14)."
+#~ msgstr "\"%s\": Ошибка в dateTime UTC минут %u (RFC 2911 раздел 4.1.14)."
+
+#~ msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14)."
+#~ msgstr "\"%s\": Ошибка в dateTime UTC sign '%c' (RFC 2911 раздел 4.1.14)."
+
+#~ msgid "\"%s\": Bad dateTime day %u (RFC 2911 section 4.1.14)."
+#~ msgstr "\"%s\": Ошибка в dateTime дни %u (RFC 2911 раздел 4.1.14)."
+
+#~ msgid "\"%s\": Bad dateTime deciseconds %u (RFC 2911 section 4.1.14)."
+#~ msgstr "\"%s\": Ошибка в dateTime миллисекунды %u (RFC 2911 раздел 4.1.14)."
+
+#~ msgid "\"%s\": Bad dateTime hours %u (RFC 2911 section 4.1.14)."
+#~ msgstr "\"%s\": Ошибка в dateTime часы %u (RFC 2911 раздел 4.1.14)."
+
+#~ msgid "\"%s\": Bad dateTime minutes %u (RFC 2911 section 4.1.14)."
+#~ msgstr "\"%s\": Ошибка в dateTime минуты %u (RFC 2911 раздел 4.1.14)."
+
+#~ msgid "\"%s\": Bad dateTime month %u (RFC 2911 section 4.1.14)."
+#~ msgstr "\"%s\": Ошибка в dateTime месяц %u (RFC 2911 раздел 4.1.14)."
+
+#~ msgid "\"%s\": Bad dateTime seconds %u (RFC 2911 section 4.1.14)."
+#~ msgstr "\"%s\": Ошибка в dateTime секунды %u (RFC 2911 раздел 4.1.14)."
+
+#~ msgid "\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4)."
+#~ msgstr ""
+#~ "\"%s\": Ошибка в значении %d - за пределами диапазона (RFC 2911 раздел "
+#~ "4.1.4)."
+
+#~ msgid ""
+#~ "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3)."
+#~ msgstr ""
+#~ "\"%s\": Ошибка в значении \"%s\" - неправильная длина %d (RFC 2911 раздел "
+#~ "4.1.3)."
+
+#~ msgid ""
+#~ "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section "
+#~ "4.1.3)."
+#~ msgstr ""
+#~ "\"%s\": Ошибка в значении \"%s\" - недопустимый символ (RFC 2911 раздел "
+#~ "4.1.3)."
+
+#~ msgid ""
+#~ "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section "
+#~ "4.1.9)."
+#~ msgstr ""
+#~ "\"%s\": Ошибка mimeMediaType значение \"%s\" - недопустимые символы (RFC "
+#~ "2911 раздел 4.1.9)."
+
+#~ msgid ""
+#~ "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section "
+#~ "4.1.9)."
+#~ msgstr ""
+#~ "\"%s\": Ошибка mimeMediaType значение \"%s\" - неправильная длина %d (RFC "
+#~ "2911 раздел 4.1.9)."
+
+#~ msgid ""
+#~ "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section "
+#~ "4.1.2)."
+#~ msgstr ""
+#~ "\"%s\": Неправильное имя \"%s\" - ошибка в UTF-8 (RFC 2911 раздел 4.1.2)."
+
+#~ msgid ""
+#~ "\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2)."
+#~ msgstr ""
+#~ "\"%s\": Неправильное имя \"%s\" - неправильная длина %d (RFC 2911 раздел "
+#~ "4.1.2)."
+
+#~ msgid ""
+#~ "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 "
+#~ "section 4.1.8)."
+#~ msgstr ""
+#~ "\"%s\": Ошибка naturalLanguage значение \"%s\" - недопустимые символы "
+#~ "(RFC 2911 раздел 4.1.8)."
+
+#~ 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)."
+
+#~ msgid ""
+#~ "\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10)."
+#~ msgstr ""
+#~ "\"%s\": Ошибка значения octetString - неправильная длина %d (RFC 2911 "
+#~ "раздел 4.1.10)."
+
+#~ 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)."
+
+#~ msgid ""
+#~ "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section "
+#~ "4.1.15)."
+#~ msgstr ""
+#~ "\"%s\": Неправильное значение разрешения %dx%d%s - ошибка в значении "
+#~ "units (RFC 2911 раздел 4.1.15)."
+
+#~ 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)."
+
+#~ 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)."
+
+#~ 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)."
+
+#~ msgid ""
+#~ "\"%s\": Bad text value \"%s\" - bad length %d (RFC 2911 section 4.1.1)."
+#~ msgstr ""
+#~ "\"%s\": Неправильное текстовое значение \"%s\" - ошибка длины %d (RFC "
+#~ "2911 раздел 4.1.1)."
+
+#~ msgid ""
+#~ "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section "
+#~ "4.1.6)."
+#~ msgstr ""
+#~ "\"%s\": Ошибка uriScheme значение \"%s\" - недопустимые символы (RFC 2911 "
+#~ "раздел 4.1.6)."
+
+#~ 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)."
+
#~ msgid "File Folder "
#~ msgstr "Каталог файла "
diff --git a/locale/cups_zh_CN.po b/locale/cups_zh_CN.po
new file mode 100644
index 0000000..d3429aa
--- /dev/null
+++ b/locale/cups_zh_CN.po
@@ -0,0 +1,6972 @@
+#
+# "$Id$"
+#
+# Message catalog template for CUPS.
+#
+# Copyright 2007-2014 by Apple Inc.
+# Copyright 2005-2007 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/".
+#
+#
+# Notes for Translators:
+#
+# The "checkpo" program located in the "locale" source directory can be used
+# to verify that your translations do not introduce formatting errors or other
+# problems. Run with:
+#
+# cd locale
+# ./checkpo cups_LL.po
+#
+# where "LL" is your locale.
+#
+# Jeff Bai <jeffbai@aosc.xyz>, 2016.
+msgid ""
+msgstr ""
+"Project-Id-Version: CUPS 1.6\n"
+"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
+"POT-Creation-Date: 2017-06-19 09:12-0400\n"
+"PO-Revision-Date: 2017-06-11 12:38+0800\n"
+"Last-Translator: Mingcong Bai <jeffbai@aosc.xyz>\n"
+"Language-Team: \n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.0.2\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgid "\t\t(all)"
+msgstr "\t\t(全部)"
+
+msgid "\t\t(none)"
+msgstr "\t\t(无)"
+
+#, c-format
+msgid "\t%d entries"
+msgstr "\t%d 个条目"
+
+#, c-format
+msgid "\t%s"
+msgstr "\t%s"
+
+msgid "\tAfter fault: continue"
+msgstr "\t发生错误时:继续"
+
+#, c-format
+msgid "\tAlerts: %s"
+msgstr "\t警告:%s"
+
+msgid "\tBanner required"
+msgstr "\t需要横幅"
+
+msgid "\tCharset sets:"
+msgstr "\t字符集:"
+
+msgid "\tConnection: direct"
+msgstr "\t连接:直接"
+
+msgid "\tConnection: remote"
+msgstr "\t连接:远程"
+
+msgid "\tContent types: any"
+msgstr "\t内容类型:任意"
+
+msgid "\tDefault page size:"
+msgstr "\t默认页面尺寸:"
+
+msgid "\tDefault pitch:"
+msgstr "\t默认字间距:"
+
+msgid "\tDefault port settings:"
+msgstr "\t默认端口设置:"
+
+#, c-format
+msgid "\tDescription: %s"
+msgstr "\t描述:%s"
+
+msgid "\tForm mounted:"
+msgstr "\t已挂载表单:"
+
+msgid "\tForms allowed:"
+msgstr "\t已允许表单:"
+
+#, c-format
+msgid "\tInterface: %s.ppd"
+msgstr "\t界面:%s.ppd"
+
+#, c-format
+msgid "\tInterface: %s/ppd/%s.ppd"
+msgstr "\t界面:%s/ppd/%s.ppd"
+
+#, c-format
+msgid "\tLocation: %s"
+msgstr "\t位置:%s"
+
+msgid "\tOn fault: no alert"
+msgstr "\t发生错误时:无警告"
+
+msgid "\tPrinter types: unknown"
+msgstr "\t打印机类型:未知"
+
+#, c-format
+msgid "\tStatus: %s"
+msgstr "\t状态:%s"
+
+msgid "\tUsers allowed:"
+msgstr "\t允许的用户:"
+
+msgid "\tUsers denied:"
+msgstr "\t拒绝的用户:"
+
+msgid "\tdaemon present"
+msgstr "\t守护程序正在运行"
+
+msgid "\tno entries"
+msgstr "\t无条目"
+
+#, c-format
+msgid "\tprinter is on device '%s' speed -1"
+msgstr "\t打印机存在于设备“%s”,速度为 -1"
+
+msgid "\tprinting is disabled"
+msgstr "\t已禁用打印"
+
+msgid "\tprinting is enabled"
+msgstr "\t已启用打印"
+
+#, c-format
+msgid "\tqueued for %s"
+msgstr "\t已为 %s 列队"
+
+msgid "\tqueuing is disabled"
+msgstr "\t已禁用队列"
+
+msgid "\tqueuing is enabled"
+msgstr "\t已启用队列"
+
+msgid "\treason unknown"
+msgstr "\t未知原因"
+
+msgid ""
+"\n"
+" DETAILED CONFORMANCE TEST RESULTS"
+msgstr ""
+"\n"
+" 详细兼容性测试结果"
+
+msgid " Ignore specific warnings."
+msgstr " 忽略特定类型的警告。"
+
+msgid " Issue warnings instead of errors."
+msgstr " 发出警告而不是错误。"
+
+msgid " REF: Page 15, section 3.1."
+msgstr " 引用:第 15 页,章节 3.1。"
+
+msgid " REF: Page 15, section 3.2."
+msgstr " 引用:第 15 页,章节 3.2。"
+
+msgid " REF: Page 19, section 3.3."
+msgstr " 引用:第 19 页,章节 3.3。"
+
+msgid " REF: Page 20, section 3.4."
+msgstr " 引用:第 20 页,章节 3.4。"
+
+msgid " REF: Page 27, section 3.5."
+msgstr " 引用:第 27 页,章节 3.5。"
+
+msgid " REF: Page 42, section 5.2."
+msgstr " 引用:第 42 页,章节 5.2。"
+
+msgid " REF: Pages 16-17, section 3.2."
+msgstr " 引用:第 16-17 页,章节 3.2。"
+
+msgid " REF: Pages 42-45, section 5.2."
+msgstr " 引用:第 42-45 页,章节 5.2。"
+
+msgid " REF: Pages 45-46, section 5.2."
+msgstr " 引用:第 45-46 页,章节 5.2。"
+
+msgid " REF: Pages 48-49, section 5.2."
+msgstr " 引用:第 48-49 页,章节 5.2。"
+
+msgid " REF: Pages 52-54, section 5.2."
+msgstr " 引用:第 52-54 页,章节 5.2。"
+
+#, c-format
+msgid " %-39.39s %.0f bytes"
+msgstr " %-39.39s %.0f 字节"
+
+#, c-format
+msgid " PASS Default%s"
+msgstr " 通过 Default%s"
+
+msgid " PASS DefaultImageableArea"
+msgstr " 通过 DefaultImageableArea"
+
+msgid " PASS DefaultPaperDimension"
+msgstr " 通过 DefaultPaperDimension"
+
+msgid " PASS FileVersion"
+msgstr " 通过 FileVersion"
+
+msgid " PASS FormatVersion"
+msgstr " 通过 FormatVersion"
+
+msgid " PASS LanguageEncoding"
+msgstr " 通过 LanguageEncoding"
+
+msgid " PASS LanguageVersion"
+msgstr " 通过 LanguageVersion"
+
+msgid " PASS Manufacturer"
+msgstr " 通过 Manufacturer"
+
+msgid " PASS ModelName"
+msgstr " 通过 ModelName"
+
+msgid " PASS NickName"
+msgstr " 通过 NickName"
+
+msgid " PASS PCFileName"
+msgstr " 通过 PCFileName"
+
+msgid " PASS PSVersion"
+msgstr " 通过 PSVersion"
+
+msgid " PASS PageRegion"
+msgstr " 通过 PageRegion"
+
+msgid " PASS PageSize"
+msgstr " 通过 PageSize"
+
+msgid " PASS Product"
+msgstr " 通过 Product"
+
+msgid " PASS ShortNickName"
+msgstr " 通过 ShortNickName"
+
+#, c-format
+msgid " WARN %s has no corresponding options."
+msgstr " 警告 %s 没有响应选项。"
+
+#, c-format
+msgid ""
+" WARN %s shares a common prefix with %s\n"
+" REF: Page 15, section 3.2."
+msgstr ""
+" 警告 %s 和 %s 共享前缀\n"
+" 引用:第 15 页,章节 3.2。"
+
+#, 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 ""
+" 警告 Duplex 选项关键词 %s 可能不能正常工作,且应命名为 Duplex。\n"
+" 引用:第 122 页,章节 5.17"
+
+msgid " WARN File contains a mix of CR, LF, and CR LF line endings."
+msgstr " 警告 文件中存在 CR,LF 和 CR LF 行末混用。"
+
+msgid ""
+" WARN LanguageEncoding required by PPD 4.3 spec.\n"
+" REF: Pages 56-57, section 5.3."
+msgstr ""
+" 警告 PPD 4.3 规范需要 LanguageEncoding。\n"
+" 引用:第 56-57 页,章节 5.3。"
+
+#, c-format
+msgid " WARN Line %d only contains whitespace."
+msgstr " 警告 行 %d 仅包含空白。"
+
+msgid ""
+" WARN Manufacturer required by PPD 4.3 spec.\n"
+" REF: Pages 58-59, section 5.3."
+msgstr ""
+" 警告 PPD 4.3 规范需要 Manufacturer。\n"
+" 引用:第 58-59 页,章节 5.3。"
+
+msgid ""
+" WARN Non-Windows PPD files should use lines ending with only LF, "
+"not CR LF."
+msgstr " 警告 非 Windows PPD 文件应该使用 LF 行末而不是 CR LF。"
+
+#, c-format
+msgid ""
+" WARN Obsolete PPD version %.1f.\n"
+" REF: Page 42, section 5.2."
+msgstr ""
+" 警告 过时的 PPD 版本 %.1f。\n"
+" 引用:第 42 页,章节 5.2。"
+
+msgid ""
+" WARN PCFileName longer than 8.3 in violation of PPD spec.\n"
+" REF: Pages 61-62, section 5.3."
+msgstr ""
+" 警告 PCFileName 超过 8.3 长度,不符合 PPD 规范。\n"
+" REF:第 61-62 页,章节 5.3。"
+
+msgid ""
+" WARN PCFileName should contain a unique filename.\n"
+" REF: Pages 61-62, section 5.3."
+msgstr ""
+" 警告 PCFileName 应包含特殊文件名。\n"
+" 引用:第 61-62 页,章节 5.3。"
+
+msgid ""
+" WARN Protocols contains PJL but JCL attributes are not set.\n"
+" REF: Pages 78-79, section 5.7."
+msgstr ""
+" 警告 协议包含 PJL 但未设置 JCL 属性。\n"
+" 引用:第 78-79 页,章节 5.7。"
+
+msgid ""
+" WARN Protocols contains both PJL and BCP; expected TBCP.\n"
+" REF: Pages 78-79, section 5.7."
+msgstr ""
+" 警告 协议包含 PJL 及 BCP;预期 TBCP。\n"
+" 引用:第 78-79 页,章节 5.7。"
+
+msgid ""
+" WARN ShortNickName required by PPD 4.3 spec.\n"
+" REF: Pages 64-65, section 5.3."
+msgstr ""
+" 警告 PPD 4.3 规范需要 ShortNickName。\n"
+" 引用:第 64-65 页,章节 5.3。"
+
+msgid " cupsaddsmb [options] -a"
+msgstr " cupsaddsmb [选项] -a"
+
+msgid " cupstestdsc [options] -"
+msgstr " cupstestdsc [选项] -"
+
+msgid " program | cupstestppd [options] -"
+msgstr " 程序 | cupstestppd [选项] -"
+
+#, c-format
+msgid ""
+" %s \"%s %s\" conflicts with \"%s %s\"\n"
+" (constraint=\"%s %s %s %s\")."
+msgstr ""
+" %s “%s %s”与“%s %s”冲突\n"
+" (限制=“%s %s %s %s”)。"
+
+#, c-format
+msgid " %s %s %s does not exist."
+msgstr " %s %s %s 不存在。"
+
+#, c-format
+msgid " %s %s file \"%s\" has the wrong capitalization."
+msgstr " %s %s 文件“%s”包含错误大小写。"
+
+#, c-format
+msgid ""
+" %s Bad %s choice %s.\n"
+" REF: Page 122, section 5.17"
+msgstr ""
+" %s 无效的 %s 选项 %s。\n"
+" 引用:第 122 页,章节 5.17"
+
+#, c-format
+msgid " %s Bad UTF-8 \"%s\" translation string for option %s, choice %s."
+msgstr " %1$s 无效的选项 %3$s 的 UTF-8“%2$s”字串翻译,选择 %4$s。"
+
+#, c-format
+msgid " %s Bad UTF-8 \"%s\" translation string for option %s."
+msgstr " %1$s 无效的选项 %3$s 的 UTF-8“%2$s”字串翻译。"
+
+#, c-format
+msgid " %s Bad cupsFilter value \"%s\"."
+msgstr " %s 无效的 cupsFilter 值“%s”。"
+
+#, c-format
+msgid " %s Bad cupsFilter2 value \"%s\"."
+msgstr " %s 无效的 cupsFilter2 值“%s”。"
+
+#, c-format
+msgid " %s Bad cupsICCProfile %s."
+msgstr " %s 无效 cupsICCProfile %s。"
+
+#, c-format
+msgid " %s Bad cupsPreFilter value \"%s\"."
+msgstr " %s 无效的 cupsPreFilter 值“%s”。"
+
+#, c-format
+msgid " %s Bad cupsUIConstraints %s: \"%s\""
+msgstr " %s 无效 cupsUIConstraints %s:“%s”"
+
+#, c-format
+msgid " %s Bad language \"%s\"."
+msgstr " %s 无效语言“%s”。"
+
+#, c-format
+msgid " %s Bad permissions on %s file \"%s\"."
+msgstr " %s %s 文件“%s”存在无效权限。"
+
+#, c-format
+msgid " %s Bad spelling of %s - should be %s."
+msgstr " %s %s 拼写错误 — 应为 %s。"
+
+#, c-format
+msgid " %s Cannot provide both APScanAppPath and APScanAppBundleID."
+msgstr " %s 无法同时提供 APScanAppPath 及 APScanAppBundleID。"
+
+#, c-format
+msgid " %s Default choices conflicting."
+msgstr " %s 默认选择相互冲突。"
+
+#, c-format
+msgid " %s Empty cupsUIConstraints %s"
+msgstr " %s 空白 cupsUIConstraints %s"
+
+#, c-format
+msgid " %s Missing \"%s\" translation string for option %s, choice %s."
+msgstr " %1$s 选项 %3$s 缺少“%2$s”翻译字串,选择 %4$s。"
+
+#, c-format
+msgid " %s Missing \"%s\" translation string for option %s."
+msgstr " %1$s 选项 %3$s 缺少“%2$s”翻译字串。"
+
+#, c-format
+msgid " %s Missing %s file \"%s\"."
+msgstr " %s 缺少 %s 文件“%s”。"
+
+#, c-format
+msgid ""
+" %s Missing REQUIRED PageRegion option.\n"
+" REF: Page 100, section 5.14."
+msgstr ""
+" %s 缺少必须的 PageRegion 选项。\n"
+" 引用:第 100 页,章节 5.14。"
+
+#, c-format
+msgid ""
+" %s Missing REQUIRED PageSize option.\n"
+" REF: Page 99, section 5.14."
+msgstr ""
+" %s 缺少必须的 PageSize 选项。\n"
+" 引用:第 99 页,章节 5.14。"
+
+#, c-format
+msgid " %s Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\"."
+msgstr ""
+" %1$s UIConstraints “*%4$s %5$s *%6$s %7$s”中缺少选择 %2$s %3$s。"
+
+#, c-format
+msgid " %s Missing choice *%s %s in cupsUIConstraints %s: \"%s\""
+msgstr " %1$s cupsUIConstraints %4$s:“%5$s” 中缺少选择 *%2$s %3$s"
+
+#, c-format
+msgid " %s Missing cupsUIResolver %s"
+msgstr " %s 缺少 cupsUIResolver %s"
+
+#, c-format
+msgid " %s Missing option %s in UIConstraints \"*%s %s *%s %s\"."
+msgstr " %1$s UIConstraints “*%3$s %4$s *%5$s %6$s” 中缺少选项 %2$s。"
+
+#, c-format
+msgid " %s Missing option %s in cupsUIConstraints %s: \"%s\""
+msgstr " %1$s cupsUIConstraints %3$s:“%4$s” 中缺少选项 %2$s"
+
+#, c-format
+msgid " %s No base translation \"%s\" is included in file."
+msgstr " %s 文件中无基础翻译“%s”。"
+
+#, c-format
+msgid ""
+" %s REQUIRED %s does not define choice None.\n"
+" REF: Page 122, section 5.17"
+msgstr ""
+" %s 必须的 %s 未定义空选项。\n"
+" 引用:第 122 页,章节 5.17"
+
+#, c-format
+msgid " %s Size \"%s\" defined for %s but not for %s."
+msgstr " %1$s 已为 %3$s 定义尺寸“%2$s”,但未为 %4$s 定义。"
+
+#, c-format
+msgid " %s Size \"%s\" has unexpected dimensions (%gx%g)."
+msgstr " %s 大小“%s”包含未预期尺寸 (%gx%g)。"
+
+#, c-format
+msgid " %s Size \"%s\" should be \"%s\"."
+msgstr " %s 大小“%s”应为“%s”。"
+
+#, c-format
+msgid " %s Size \"%s\" should be the Adobe standard name \"%s\"."
+msgstr " %s 大小“%s”应为 Adobe 标准名称“%s”。"
+
+#, c-format
+msgid " %s cupsICCProfile %s hash value collides with %s."
+msgstr " %s cupsICCProfile %s 包含与 %s 冲突的哈希值。"
+
+#, c-format
+msgid " %s cupsUIResolver %s causes a loop."
+msgstr " %s cupsUIResolver %s 导致循环。"
+
+#, c-format
+msgid ""
+" %s cupsUIResolver %s does not list at least two different options."
+msgstr " %s cupsUIResolver %s 未列出至少两个不同的选项。"
+
+#, c-format
+msgid ""
+" **FAIL** %s must be 1284DeviceID\n"
+" REF: Page 72, section 5.5"
+msgstr ""
+" **失败** %s 必须为 1284DeviceID\n"
+" 引用:第 72 页,章节 5.5"
+
+#, c-format
+msgid ""
+" **FAIL** Bad Default%s %s\n"
+" REF: Page 40, section 4.5."
+msgstr ""
+" **失败** 无效的 Default%s 值 %s\n"
+" 引用:第 40 页,章节 4.5。"
+
+#, c-format
+msgid ""
+" **FAIL** Bad DefaultImageableArea %s\n"
+" REF: Page 102, section 5.15."
+msgstr ""
+" **失败** 无效的 DefaultImageableArea 值 %s\n"
+" 引用:第 102 页,章节 5.15。"
+
+#, c-format
+msgid ""
+" **FAIL** Bad DefaultPaperDimension %s\n"
+" REF: Page 103, section 5.15."
+msgstr ""
+" **失败** 无效的 DefaultPaperDimension 值 %s\n"
+" 引用:第 103 页,章节 5.15。"
+
+#, c-format
+msgid ""
+" **FAIL** Bad FileVersion \"%s\"\n"
+" REF: Page 56, section 5.3."
+msgstr ""
+" **失败** 无效的 FileVersion 值“%s”\n"
+" 引用:第 56 页,章节 5.3。"
+
+#, c-format
+msgid ""
+" **FAIL** Bad FormatVersion \"%s\"\n"
+" REF: Page 56, section 5.3."
+msgstr ""
+" **失败** 无效的 FormatVersion 值“%s”\n"
+" 引用:第 56 页,章节 5.3。"
+
+msgid ""
+" **FAIL** Bad JobPatchFile attribute in file\n"
+" REF: Page 24, section 3.4."
+msgstr ""
+" **失败** 文件中包含无效的 JobPatchFile 属性\n"
+" 引用:第 24 页,章节 3.4。"
+
+#, c-format
+msgid " **FAIL** Bad LanguageEncoding %s - must be ISOLatin1."
+msgstr " **失败** 无效的 LanguageEncoding 值 %s — 值必须为 ISOLatin1."
+
+#, c-format
+msgid " **FAIL** Bad LanguageVersion %s - must be English."
+msgstr " **失败** 无效的 LanguageVersion 值 %s — 值必须为 English."
+
+#, c-format
+msgid ""
+" **FAIL** Bad Manufacturer (should be \"%s\")\n"
+" REF: Page 211, table D.1."
+msgstr ""
+" **失败** 无效的 Manufacturer 值(应为“%s”)\n"
+" 引用:第 211 页,表格 D.1。"
+
+#, c-format
+msgid ""
+" **FAIL** Bad ModelName - \"%c\" not allowed in string.\n"
+" REF: Pages 59-60, section 5.3."
+msgstr ""
+" **失败** 无效的 ModelName 值 — 字串不应包含“%c”。\n"
+" 引用:第 59-60 页,章节 5.3。"
+
+msgid ""
+" **FAIL** Bad PSVersion - not \"(string) int\".\n"
+" REF: Pages 62-64, section 5.3."
+msgstr ""
+" **失败** 无效的 PSVersion 值 — 赋值非“(string) int”。\n"
+" 引用:第 62-64 页,章节 5.3。"
+
+msgid ""
+" **FAIL** Bad Product - not \"(string)\".\n"
+" REF: Page 62, section 5.3."
+msgstr ""
+" **失败** 无效的 Product 值 — 赋值非“(string)”。\n"
+" 引用:第 62 页,章节 5.3。"
+
+msgid ""
+" **FAIL** Bad ShortNickName - longer than 31 chars.\n"
+" REF: Pages 64-65, section 5.3."
+msgstr ""
+" **失败** 无效的 ShortNickName 值 — 长度超过 31 个字符。\n"
+" 引用:第 64-65 页,章节 5.3。"
+
+#, c-format
+msgid ""
+" **FAIL** Bad option %s choice %s\n"
+" REF: Page 84, section 5.9"
+msgstr ""
+" **失败** 无效的选项 %s 选择 %s。\n"
+" 引用:第 84 页,章节 5.9"
+
+#, c-format
+msgid " **FAIL** Default option code cannot be interpreted: %s"
+msgstr " **失败** 无法解析默认选项代码:%s"
+
+#, c-format
+msgid ""
+" **FAIL** Default translation string for option %s choice %s contains "
+"8-bit characters."
+msgstr " **失败** 选项 %s 选择 %s 的默认翻译字串包含 8 位字符。"
+
+#, c-format
+msgid ""
+" **FAIL** Default translation string for option %s contains 8-bit "
+"characters."
+msgstr " **失败** 选项 %s 的默认翻译字串包含 8 位字符。"
+
+#, c-format
+msgid " **FAIL** Group names %s and %s differ only by case."
+msgstr " **失败** 组名 %s 及 %s 仅包含大小写区别。"
+
+#, c-format
+msgid " **FAIL** Multiple occurrences of option %s choice name %s."
+msgstr " **失败** 选项 %s 的选择名称 %s 多次出现。"
+
+#, c-format
+msgid " **FAIL** Option %s choice names %s and %s differ only by case."
+msgstr " **失败** 选项 %s 的选择名称 %s 及 %s 仅包含大小写区别。"
+
+#, c-format
+msgid " **FAIL** Option names %s and %s differ only by case."
+msgstr " **失败** 选项名称 %s 及 %s 仅包含大小写区别。"
+
+#, c-format
+msgid ""
+" **FAIL** REQUIRED Default%s\n"
+" REF: Page 40, section 4.5."
+msgstr ""
+" **失败** 需要 Default%s\n"
+" 引用:第 40 页,章节 4.5。"
+
+msgid ""
+" **FAIL** REQUIRED DefaultImageableArea\n"
+" REF: Page 102, section 5.15."
+msgstr ""
+" **失败** 需要 DefaultImageableArea\n"
+" 引用:第 102 页,章节 5.15。"
+
+msgid ""
+" **FAIL** REQUIRED DefaultPaperDimension\n"
+" REF: Page 103, section 5.15."
+msgstr ""
+" **失败** 需要 DefaultPaperDimension\n"
+" 引用:第 103 页,章节 5.15。"
+
+msgid ""
+" **FAIL** REQUIRED FileVersion\n"
+" REF: Page 56, section 5.3."
+msgstr ""
+" **失败** 需要 FileVersion\n"
+" 引用:第 56 页,章节 5.3。"
+
+msgid ""
+" **FAIL** REQUIRED FormatVersion\n"
+" REF: Page 56, section 5.3."
+msgstr ""
+" **失败** 需要 FormatVersion\n"
+" 引用:第 56 页,章节 5.3。"
+
+#, c-format
+msgid ""
+" **FAIL** REQUIRED ImageableArea for PageSize %s\n"
+" REF: Page 41, section 5.\n"
+" REF: Page 102, section 5.15."
+msgstr ""
+" **失败** 需要为 PageSize 值 %s 定义 ImageableArea\n"
+" 引用:第 41 页,章节 5。\n"
+" 引用:第 102 页,章节 5.15。"
+
+msgid ""
+" **FAIL** REQUIRED LanguageEncoding\n"
+" REF: Pages 56-57, section 5.3."
+msgstr ""
+" **失败** 需要 LanguageEncoding\n"
+" 引用:第 56-57 页,章节 5.3。"
+
+msgid ""
+" **FAIL** REQUIRED LanguageVersion\n"
+" REF: Pages 57-58, section 5.3."
+msgstr ""
+" **失败** 需要 LanguageVersion\n"
+" 引用:第 57-58 页,章节 5.3。"
+
+msgid ""
+" **FAIL** REQUIRED Manufacturer\n"
+" REF: Pages 58-59, section 5.3."
+msgstr ""
+" **失败** 需要 Manufacturer\n"
+" 引用:第 58-59 页,章节 5.3。"
+
+msgid ""
+" **FAIL** REQUIRED ModelName\n"
+" REF: Pages 59-60, section 5.3."
+msgstr ""
+" **失败** 需要 ModelName\n"
+" 引用:第 59-60 页,章节 5.3。"
+
+msgid ""
+" **FAIL** REQUIRED NickName\n"
+" REF: Page 60, section 5.3."
+msgstr ""
+" **失败** 需要 NickName\n"
+" 引用:第 60 页,章节 5.3。"
+
+msgid ""
+" **FAIL** REQUIRED PCFileName\n"
+" REF: Pages 61-62, section 5.3."
+msgstr ""
+" **失败** 需要 PCFileName\n"
+" 引用:第 61-62 页,章节 5.3。"
+
+msgid ""
+" **FAIL** REQUIRED PSVersion\n"
+" REF: Pages 62-64, section 5.3."
+msgstr ""
+" **失败** 需要 PSVersion\n"
+" 引用:第 62-64 页,章节 5.3。"
+
+msgid ""
+" **FAIL** REQUIRED PageRegion\n"
+" REF: Page 100, section 5.14."
+msgstr ""
+" **失败** 需要 PageRegion\n"
+" 引用:第 100 页,章节 5.14。"
+
+msgid ""
+" **FAIL** REQUIRED PageSize\n"
+" REF: Page 41, section 5.\n"
+" REF: Page 99, section 5.14."
+msgstr ""
+" **失败** 需要 PageSize\n"
+" 引用:第 41 页,章节 5。\n"
+" 引用:第 99 页,章节 5.14。"
+
+msgid ""
+" **FAIL** REQUIRED PageSize\n"
+" REF: Pages 99-100, section 5.14."
+msgstr ""
+" **失败** 需要 PageSize\n"
+" 引用:第 99-100 页,章节 5.14。"
+
+#, c-format
+msgid ""
+" **FAIL** REQUIRED PaperDimension for PageSize %s\n"
+" REF: Page 41, section 5.\n"
+" REF: Page 103, section 5.15."
+msgstr ""
+" **失败** 需要为 PageSize 值 %s 定义 PaperDimension\n"
+" 引用:第 41 页,章节 5。\n"
+" 引用:第 103 页,章节 5.15。"
+
+msgid ""
+" **FAIL** REQUIRED Product\n"
+" REF: Page 62, section 5.3."
+msgstr ""
+" **失败** 需要 Product\n"
+" 引用:第 62 页,章节 5.3。"
+
+msgid ""
+" **FAIL** REQUIRED ShortNickName\n"
+" REF: Page 64-65, section 5.3."
+msgstr ""
+" **失败** 需要 ShortNickName\n"
+" 引用:第 64-65 页,章节 5.3。"
+
+#, c-format
+msgid " **FAIL** Unable to open PPD file - %s on line %d."
+msgstr " **失败** 无法打开 PPD 文件 — 行 %2$d 上的 %1$s。"
+
+#, c-format
+msgid " %d ERRORS FOUND"
+msgstr " 发现 %d 个错误"
+
+msgid " -h Show program usage"
+msgstr " -h 显示程序使用方法"
+
+#, c-format
+msgid ""
+" Bad %%%%BoundingBox: on line %d.\n"
+" REF: Page 39, %%%%BoundingBox:"
+msgstr ""
+" 无效的 %%%%BoundingBox:位于行 %d。\n"
+" 引用:第 39 页,%%%%BoundingBox:"
+
+#, c-format
+msgid ""
+" Bad %%%%Page: on line %d.\n"
+" REF: Page 53, %%%%Page:"
+msgstr ""
+" 无效的 %%%%Page:位于行 %d。\n"
+" 引用:第 53 页,%%%%Page:"
+
+#, c-format
+msgid ""
+" Bad %%%%Pages: on line %d.\n"
+" REF: Page 43, %%%%Pages:"
+msgstr ""
+" 无效的 %%%%Pages:位于行 %d。\n"
+" 引用:第 43 页,%%%%Pages:"
+
+#, c-format
+msgid ""
+" Line %d is longer than 255 characters (%d).\n"
+" REF: Page 25, Line Length"
+msgstr ""
+" 行 %d 长度超过 255 个字符 (%d)。\n"
+" 引用:第 25 页,行长度"
+
+# Should chapter titles be translated?
+msgid ""
+" Missing %!PS-Adobe-3.0 on first line.\n"
+" REF: Page 17, 3.1 Conforming Documents"
+msgstr ""
+" 首行缺少 %!PS-Adobe-3.0。\n"
+" 引用:第 17 页,3.1 符合规范的文档"
+
+#, c-format
+msgid " Missing %%EndComments comment. REF: Page 41, %%EndComments"
+msgstr " 缺少 %%EndComments 注释。 引用:第 41 页,%%EndComments"
+
+#, c-format
+msgid ""
+" Missing or bad %%BoundingBox: comment.\n"
+" REF: Page 39, %%BoundingBox:"
+msgstr ""
+" %%BoundingBox 缺失或无效:注释。\n"
+" 引用:第 39 页,%%BoundingBox:"
+
+#, c-format
+msgid ""
+" Missing or bad %%Page: comments.\n"
+" REF: Page 53, %%Page:"
+msgstr ""
+" %%Page 缺失或无效:注释。\n"
+" 引用:第 53 页,%%Page:"
+
+#, c-format
+msgid ""
+" Missing or bad %%Pages: comment.\n"
+" REF: Page 43, %%Pages:"
+msgstr ""
+" %%Pages 缺失或无效:注释。\n"
+" 引用:第 43 页,%%Pages:"
+
+msgid " NO ERRORS FOUND"
+msgstr " 未发现错误"
+
+#, c-format
+msgid " Saw %d lines that exceeded 255 characters."
+msgstr " 共发现 %d 个超过 255 字符的行。"
+
+#, c-format
+msgid " Too many %%BeginDocument comments."
+msgstr " %%BeginDocument 注释过多。"
+
+#, c-format
+msgid " Too many %%EndDocument comments."
+msgstr " %%EndDocument 注释过多。"
+
+msgid " Warning: file contains binary data."
+msgstr " 警告:文件包含二进制数据。"
+
+#, c-format
+msgid " Warning: no %%EndComments comment in file."
+msgstr " 警告:文件中无 %%EndComments 注释。"
+
+#, c-format
+msgid " Warning: obsolete DSC version %.1f in file."
+msgstr " 警告:文件中包含已遗弃的 DSC 版本 %.1f。"
+
+msgid " ! expression Unary NOT of expression."
+msgstr " ! 表达式 一元否定表达式。"
+
+msgid " ( expressions ) Group expressions."
+msgstr " ( 表达式 ) 表达式组。"
+
+msgid " --[no-]debug-logging Turn debug logging on/off."
+msgstr " --[no-]debug-logging 打开/关闭查错日志。"
+
+msgid " --[no-]remote-admin Turn remote administration on/off."
+msgstr " --[no-]remote-admin 打开/关闭远程管理。"
+
+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 打开/关闭打印机共享。"
+
+msgid " --[no-]user-cancel-any Allow/prevent users to cancel any job."
+msgstr " --[no-]user-cancel-any 允许/禁止用户取消任意任务。"
+
+msgid " --cr End lines with CR (Mac OS 9)."
+msgstr " --cr 使用 CR 行末 (Mac OS 9)。"
+
+msgid " --crlf End lines with CR + LF (Windows)."
+msgstr " --crlf 使用 CR + LF 行末 (Windows)。"
+
+msgid " --domain regex Match domain to regular expression."
+msgstr " --domain 正则表达式 使用正则表达式匹配域。"
+
+msgid ""
+" --exec utility [argument ...] ;\n"
+" Execute program if true."
+msgstr ""
+" --exec 程序 [参数 ...] ;\n"
+" 如返回 true 则执行程序。"
+
+msgid " --false Always false."
+msgstr " --false 总是返回 false。"
+
+msgid " --help Show help."
+msgstr " --help 显示帮助。"
+
+msgid " --help Show this help."
+msgstr " --help 显示此帮助信息。"
+
+msgid " --host regex Match hostname to regular expression."
+msgstr " --host 正则表达式 使用正则表达式匹配主机名。"
+
+msgid " --lf End lines with LF (UNIX/Linux/macOS)."
+msgstr " --lf 使用 LF 行末(UNIX/Linux/macOS)。"
+
+msgid " --list-filters List filters that will be used."
+msgstr " --list-filters 列出要使用的滤镜。"
+
+msgid " --local True if service is local."
+msgstr " --local 如为本地服务则返回 true。"
+
+msgid " --ls List attributes."
+msgstr " --ls 列出属性。"
+
+msgid " --name regex Match service name to regular expression."
+msgstr " --name 正则表达式 使用正则表达式匹配服务名称。"
+
+msgid " --not expression Unary NOT of expression."
+msgstr " --not 表达式 一元否定表达式。"
+
+msgid " --path regex Match resource path to regular expression."
+msgstr " --path 正则表达式 使用正则表达式匹配资源路径。"
+
+msgid " --port number[-number] Match port to number or range."
+msgstr " --port 数字[-数字] 匹配端口号或返回。"
+
+msgid " --print Print URI if true."
+msgstr " --print 如果为 true 则回显 URI。"
+
+msgid " --print-name Print service name if true."
+msgstr " --print-name 如果为 true 则回显服务名称。"
+
+msgid " --quiet Quietly report match via exit code."
+msgstr " --quiet 静默使用退出代码返回匹配。"
+
+msgid " --remote True if service is remote."
+msgstr " --remote 如为远程服务则返回 true。"
+
+msgid ""
+" --stop-after-include-error\n"
+" Stop tests after a failed INCLUDE."
+msgstr ""
+" --stop-after-include-error\n"
+" 遇到失败的 INCLUDE 时停止测试。"
+
+msgid " --true Always true."
+msgstr " --true 总是返回 true。"
+
+msgid " --txt key True if the TXT record contains the key."
+msgstr " --txt 键值 如 TXT 记录包含键值则返回 true。"
+
+msgid " --txt-* regex Match TXT record key to regular expression."
+msgstr " --txt-* 正则表达式 使用正则表达式匹配 TXT 记录键值。"
+
+msgid " --uri regex Match URI to regular expression."
+msgstr " --uri 正则表达式 使用正则表达式匹配 URI。"
+
+msgid " --version Show program version."
+msgstr " --version 显示程序版本。"
+
+msgid " --version Show version."
+msgstr " --version 显示版本。"
+
+msgid " -4 Connect using IPv4."
+msgstr " -4 使用 IPv4 连接。"
+
+msgid " -6 Connect using IPv6."
+msgstr " -6 使用 IPv6 连接。"
+
+msgid " -C Send requests using chunking (default)."
+msgstr " -C 使用分块请求发送(默认)。"
+
+msgid " -D Remove the input file when finished."
+msgstr " -D 完成后删除输入文件。"
+
+msgid " -D name=value Set named variable to value."
+msgstr " -D 名称=赋值 为指定变量赋值。"
+
+msgid " -E Encrypt the connection."
+msgstr " -E 加密连接。"
+
+msgid ""
+" -E Test with encryption using HTTP Upgrade to TLS."
+msgstr ""
+
+msgid ""
+" -F Run in the foreground but detach from console."
+msgstr " -F 在前台运行但从终端分离。"
+
+msgid " -H samba-server Use the named SAMBA server."
+msgstr " -H samba-server 使用指定的 Samba 服务器。"
+
+msgid " -I Ignore errors."
+msgstr " -I 忽略错误。"
+
+msgid " -I include-dir Add include directory to search path."
+msgstr " -I include-dir 将引用目录加入到搜索路径。"
+
+msgid " -I {filename,filters,none,profiles}"
+msgstr " -I {文件名,滤镜,无,配置档案}"
+
+msgid " -L Send requests using 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 文件并将测试报告发送到标准输出。"
+
+msgid " -P filename.ppd Set PPD file."
+msgstr " -P filename.ppd 设置 PPD 文件。"
+
+msgid " -P number[-number] Match port to number or range."
+msgstr " -P 数字[-数字] 匹配端口号或范围。"
+
+msgid " -R root-directory Set alternate root."
+msgstr " -R root-directory 设置备用根目录。"
+
+msgid " -S Test with encryption using HTTPS."
+msgstr ""
+
+msgid " -T seconds Set the browse timeout in seconds."
+msgstr " -T 秒数 设置浏览超时(按秒计)。"
+
+msgid " -T seconds Set the receive/send timeout in seconds."
+msgstr " -T 秒数 设置发送/接收超时(按秒计)。"
+
+msgid " -U username Specify username."
+msgstr " -U 用户名 指定用户名。"
+
+msgid " -V version Set default IPP version."
+msgstr " -V 版本 设置默认 IPP 版本。"
+
+msgid ""
+" -W {all,none,constraints,defaults,duplex,filters,profiles,sizes,"
+"translations}"
+msgstr " -W {所有,无,限制,默认,复式,滤镜,配置档案,尺寸,翻译}"
+
+msgid " -X Produce XML plist instead of plain text."
+msgstr " -X 生成 XML plist 而不是纯文本。"
+
+msgid " -a Export all printers."
+msgstr " -a 导出所有打印机。"
+
+msgid " -c Produce CSV output."
+msgstr " -c 生成 CSV 输出。"
+
+msgid " -c catalog.po Load the specified message catalog."
+msgstr " -c catalog.po 载入指定的消息索引。"
+
+msgid " -c cups-files.conf Set cups-files.conf file to use."
+msgstr " -c cups-files.conf 设置要使用的 cups-files.conf 文件。"
+
+msgid " -c cupsd.conf Set cupsd.conf file to use."
+msgstr " -c cupsd.conf 设置要使用的 cupsd.conf 文件。"
+
+msgid " -d name=value Set named variable to value."
+msgstr " -d 名称=赋值 为指定变量赋值。"
+
+msgid " -d output-dir Specify the output directory."
+msgstr " -d output-dir 指定输出目录。"
+
+msgid " -d printer Use the named printer."
+msgstr " -d 打印机 使用指定的打印机。"
+
+msgid " -d regex Match domain to regular expression."
+msgstr " -d 正则表达式 使用正则表达式匹配域名。"
+
+msgid " -e Use every filter from the PPD file."
+msgstr " -e 使用来自 PPD 文件的所有滤镜。"
+
+msgid " -f Run in the foreground."
+msgstr " -f 前台运行。"
+
+msgid " -f filename Set default request filename."
+msgstr " -f 文件名 设置默认请求文件名。"
+
+msgid " -h Show this usage message."
+msgstr " -h 显示此使用方法信息。"
+
+msgid " -h regex Match hostname to regular expression."
+msgstr " -h 正则表达式 使用正则表达式匹配主机名。"
+
+msgid " -h server[:port] Specify server address."
+msgstr " -h 服务器[:端口] 指定服务器地址。"
+
+msgid " -i mime/type Set input MIME type (otherwise auto-typed)."
+msgstr " -i mime/type 设置输入的 MIME 类型(否则自动探测类型)。"
+
+msgid ""
+" -i seconds Repeat the last file with the given time interval."
+msgstr " -i 秒数 指定重复上一文件的间隔(按秒计)。"
+
+msgid ""
+" -j job-id[,N] Filter file N from the specified job (default is "
+"file 1)."
+msgstr " -j job-id[,N] 从指定任务中过滤文件 N(默认为文件 1)。"
+
+msgid " -l List attributes."
+msgstr " -l 列出属性。"
+
+msgid " -l Produce plain text output."
+msgstr " -l 生成纯文本输出。"
+
+msgid " -l Run cupsd on demand."
+msgstr " -l 按需启动 cupsd。"
+
+msgid " -l lang[,lang,...] Specify the output language(s) (locale)."
+msgstr " -l lang[,lang,...] 指定输出语言(地域配置)。"
+
+msgid " -m Use the ModelName value as the filename."
+msgstr " -m 将 ModelName 值作为文件名。"
+
+msgid ""
+" -m mime/type Set output MIME type (otherwise application/pdf)."
+msgstr ""
+" -m mime/type 设置输出 MIME 类型(缺省为 application/pdf)。"
+
+msgid " -n copies Set number of copies."
+msgstr " -n 副本数 设置副本数量。"
+
+msgid ""
+" -n count Repeat the last file the given number of times."
+msgstr " -n 数量 按指定数量重复上一文件。"
+
+msgid " -n regex Match service name to regular expression."
+msgstr " -n 正则表达式 使用正则表达式匹配服务名称。"
+
+msgid ""
+" -o filename.drv Set driver information file (otherwise ppdi.drv)."
+msgstr " -o filename.drv 指定驱动信息文件(缺省为 ppdi.drv)。"
+
+msgid " -o filename.ppd[.gz] Set output file (otherwise stdout)."
+msgstr " -o filename.ppd[.gz] 设置输出文件(缺省为标准输出)。"
+
+msgid " -o name=value Set option(s)."
+msgstr " -o 名称=赋值 设置选项。"
+
+msgid " -p Print URI if true."
+msgstr " -p 如果为 true 则回显 URI。"
+
+msgid " -p filename.ppd Set PPD file."
+msgstr " -p filename.ppd 指定 PPD 文件。"
+
+msgid " -q Quietly report match via exit code."
+msgstr " -q 静默使用退出代码报告匹配。"
+
+msgid " -q Run silently."
+msgstr " -q 静默运行。"
+
+msgid " -r True if service is remote."
+msgstr " -r 如为远程服务则返回 true。"
+
+msgid " -r Use 'relaxed' open mode."
+msgstr " -r 使用“relaxed”打开模式。"
+
+msgid " -s Print service name if true."
+msgstr " -s 如果为 true 则回显服务名称。"
+
+msgid " -s cups-files.conf Set cups-files.conf file to use."
+msgstr " -s cups-files.conf 设置要使用的 cups-files.conf 文件。"
+
+msgid " -t Produce a test report."
+msgstr " -t 生成测试报告。"
+
+msgid " -t Test PPDs instead of generating them."
+msgstr " -t 测试而非生成 PPD 文件。"
+
+msgid " -t Test the configuration file."
+msgstr " -t 测试配置文件。"
+
+msgid " -t key True if the TXT record contains the key."
+msgstr " -t 键值 如 TXT 记录包含键值则返回 true。"
+
+msgid " -t title Set title."
+msgstr " -t 标题 设置标题。"
+
+msgid " -u Remove the PPD file when finished."
+msgstr " -u 完成后删除 PPD 文件。"
+
+msgid " -u regex Match URI to regular expression."
+msgstr " -u 正则表达式 使用正则表达式匹配 URI。"
+
+msgid " -v Be verbose."
+msgstr " -v 开启详细输出。"
+
+msgid " -vv Be very verbose."
+msgstr " -vv 进一步提高输出详尽度。"
+
+msgid ""
+" -x utility [argument ...] ;\n"
+" Execute program if true."
+msgstr ""
+" -x 程序 [参数 ...] ;\n"
+" 如果为 true 则执行程序。"
+
+msgid " -z Compress PPD files using GNU zip."
+msgstr " -z 使用 GNU zip 压缩 PPD 文件。"
+
+msgid " IPPFIND_SERVICE_DOMAIN Domain name"
+msgstr " IPPFIND_SERVICE_DOMAIN 域名"
+
+msgid ""
+" IPPFIND_SERVICE_HOSTNAME\n"
+" Fully-qualified domain name"
+msgstr ""
+" IPPFIND_SERVICE_HOSTNAME\n"
+" 完全限定域名"
+
+msgid " IPPFIND_SERVICE_NAME Service instance name"
+msgstr " IPPFIND_SERVICE_NAME 服务实例名称"
+
+msgid " IPPFIND_SERVICE_PORT Port number"
+msgstr " IPPFIND_SERVICE_PORT 端口号"
+
+msgid " IPPFIND_SERVICE_REGTYPE DNS-SD registration type"
+msgstr " IPPFIND_SERVICE_REGTYPE DNS-SD 注册类型"
+
+msgid " IPPFIND_SERVICE_SCHEME URI scheme"
+msgstr " IPPFIND_SERVICE_SCHEME URI 方案"
+
+msgid " IPPFIND_SERVICE_URI URI"
+msgstr " IPPFIND_SERVICE_URI URI"
+
+msgid " IPPFIND_TXT_* Value of TXT record key"
+msgstr " IPPFIND_TXT_* TXT 记录键值"
+
+msgid ""
+" expression --and expression\n"
+" Logical AND."
+msgstr ""
+" 表达式 --and 表达式\n"
+" AND 逻辑。"
+
+msgid ""
+" expression --or expression\n"
+" Logical OR."
+msgstr ""
+" 表达式 --or 表达式\n"
+" OR 逻辑。"
+
+msgid " expression expression Logical AND."
+msgstr " 表达式 表达式 AND 逻辑。"
+
+msgid " {service_domain} Domain name"
+msgstr " {service_domain} 域名"
+
+msgid " {service_hostname} Fully-qualified domain name"
+msgstr " {service_hostname} 完全限定域名"
+
+msgid " {service_name} Service instance name"
+msgstr " {service_name} 服务实例名称"
+
+msgid " {service_port} Port number"
+msgstr " {service_port} 端口号"
+
+msgid " {service_regtype} DNS-SD registration type"
+msgstr " {service_regtype} DNS-SD 注册名称"
+
+msgid " {service_scheme} URI scheme"
+msgstr " {service_scheme} URI 方案"
+
+msgid " {service_uri} URI"
+msgstr " {service_uri} URI"
+
+msgid " {txt_*} Value of TXT record key"
+msgstr " {txt_*} TXT 记录键值"
+
+msgid " {} URI"
+msgstr " {} URI"
+
+msgid " FAIL"
+msgstr " 失败"
+
+msgid " PASS"
+msgstr " 通过"
+
+#, c-format
+msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 8011 section 5.1.6)."
+msgstr ""
+
+#, c-format
+msgid "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 8011 section 5.1.6)."
+msgstr ""
+
+#, c-format
+msgid "\"%s\": Bad attribute name - bad length %d (RFC 8011 section 5.1.4)."
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\": Bad attribute name - invalid character (RFC 8011 section 5.1.4)."
+msgstr ""
+
+#, c-format
+msgid "\"%s\": Bad boolen value %d (RFC 8011 section 5.1.21)."
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\": Bad charset value \"%s\" - bad characters (RFC 8011 section 5.1.8)."
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\": Bad charset value \"%s\" - bad length %d (RFC 8011 section 5.1.8)."
+msgstr ""
+
+#, c-format
+msgid "\"%s\": Bad dateTime UTC hours %u (RFC 8011 section 5.1.15)."
+msgstr ""
+
+#, c-format
+msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 8011 section 5.1.15)."
+msgstr ""
+
+#, c-format
+msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 8011 section 5.1.15)."
+msgstr ""
+
+#, c-format
+msgid "\"%s\": Bad dateTime day %u (RFC 8011 section 5.1.15)."
+msgstr ""
+
+#, c-format
+msgid "\"%s\": Bad dateTime deciseconds %u (RFC 8011 section 5.1.15)."
+msgstr ""
+
+#, c-format
+msgid "\"%s\": Bad dateTime hours %u (RFC 8011 section 5.1.15)."
+msgstr ""
+
+#, c-format
+msgid "\"%s\": Bad dateTime minutes %u (RFC 8011 section 5.1.15)."
+msgstr ""
+
+#, c-format
+msgid "\"%s\": Bad dateTime month %u (RFC 8011 section 5.1.15)."
+msgstr ""
+
+#, c-format
+msgid "\"%s\": Bad dateTime seconds %u (RFC 8011 section 5.1.15)."
+msgstr ""
+
+#, c-format
+msgid "\"%s\": Bad enum value %d - out of range (RFC 8011 section 5.1.5)."
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 8011 section 5.1.4)."
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\": Bad keyword value \"%s\" - invalid character (RFC 8011 section "
+"5.1.4)."
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 8011 section "
+"5.1.10)."
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 8011 section "
+"5.1.10)."
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.3)."
+msgstr ""
+
+#, c-format
+msgid "\"%s\": Bad name value \"%s\" - bad length %d (RFC 8011 section 5.1.3)."
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 8011 section "
+"5.1.9)."
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 8011 section "
+"5.1.9)."
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\": Bad octetString value - bad length %d (RFC 8011 section 5.1.20)."
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 8011 "
+"section 5.1.14)."
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 8011 section "
+"5.1.16)."
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be "
+"positive (RFC 8011 section 5.1.16)."
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC "
+"8011 section 5.1.16)."
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 8011 section 5.1.2)."
+msgstr ""
+
+#, c-format
+msgid "\"%s\": Bad text value \"%s\" - bad length %d (RFC 8011 section 5.1.2)."
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 8011 section 5.1.7)."
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 8011 section 5.1.7)."
+msgstr ""
+
+#, c-format
+msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes"
+msgstr "%-7s %-7.7s %-7d %-31.31s %.0f 字节"
+
+#, c-format
+msgid "%d x %d mm"
+msgstr "%d x %d 毫米"
+
+#, c-format
+msgid "%g x %g"
+msgstr "%g x %g"
+
+#, c-format
+msgid "%s (%s)"
+msgstr "%s (%s)"
+
+#, c-format
+msgid "%s (%s, %s)"
+msgstr "%s (%s, %s)"
+
+#, c-format
+msgid "%s (Borderless)"
+msgstr "%s(无边界)"
+
+#, c-format
+msgid "%s (Borderless, %s)"
+msgstr "%s(无边界,%s)"
+
+#, c-format
+msgid "%s (Borderless, %s, %s)"
+msgstr "%s(无边界,%s,%s)"
+
+#, c-format
+msgid "%s accepting requests since %s"
+msgstr "%s 自从 %s 开始接受请求"
+
+#, c-format
+msgid "%s cannot be changed."
+msgstr "无法更改 %s。"
+
+#, c-format
+msgid "%s is not implemented by the CUPS version of lpc."
+msgstr "%s 未在 CUPS 版本的 lpc 中实现。"
+
+#, c-format
+msgid "%s is not ready"
+msgstr "%s 未就绪"
+
+#, c-format
+msgid "%s is ready"
+msgstr "%s 就绪"
+
+#, c-format
+msgid "%s is ready and printing"
+msgstr "%s 就绪且正在打印"
+
+#, c-format
+msgid "%s job-id user title copies options [file]"
+msgstr "%s job-id 用户标题副本选项 [文件]"
+
+#, c-format
+msgid "%s not accepting requests since %s -"
+msgstr "%s 自从 %s 不再接受请求"
+
+#, c-format
+msgid "%s not supported."
+msgstr "%s 不被支持。"
+
+#, c-format
+msgid "%s/%s accepting requests since %s"
+msgstr "%s/%s 自从 %s 开始接受请求"
+
+#, c-format
+msgid "%s/%s not accepting requests since %s -"
+msgstr "%s/%s 自从 %s 不再接受请求"
+
+#, c-format
+msgid "%s: %-33.33s [job %d localhost]"
+msgstr "%s:%-33.33s [任务 %d localhost]"
+
+#. TRANSLATORS: Message is "subject: error"
+#, c-format
+msgid "%s: %s"
+msgstr "%s:%s"
+
+#, c-format
+msgid "%s: %s failed: %s"
+msgstr "%s:%s 失败:%s"
+
+#, c-format
+msgid "%s: Bad printer URI \"%s\"."
+msgstr "%s:无效的打印机 URI“%s”。"
+
+#, c-format
+msgid "%s: Bad version %s for \"-V\"."
+msgstr "%s:用于“-V”的版本 %s 无效。"
+
+#, c-format
+msgid "%s: Don't know what to do."
+msgstr "%s:不知如何处理。"
+
+#, c-format
+msgid ""
+"%s: Error - %s environment variable names non-existent destination \"%s\"."
+msgstr "%s:错误 — %s 环境变量指定了不存在的目的地“%s”。"
+
+#, c-format
+msgid "%s: Error - add '/version=1.1' to server name."
+msgstr "%s:错误 — 请将“/version=1.1”添加到服务器名称。"
+
+#, c-format
+msgid "%s: Error - bad job ID."
+msgstr "%s:错误 — 无效的任务 ID。"
+
+#, c-format
+msgid "%s: Error - cannot print files and alter jobs simultaneously."
+msgstr "%s:错误 — 无法在打印文件的同时更改任务。"
+
+#, c-format
+msgid "%s: Error - cannot print from stdin if files or a job ID are provided."
+msgstr "%s:错误 — 在指定了文件或任务 ID 的情况下不能从标准输入打印。"
+
+#, c-format
+msgid "%s: Error - copies must be 1 or more."
+msgstr "%s:错误 — 副本数必须为至少 1。"
+
+#, 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”选项后预期内容类型。"
+
+#, c-format
+msgid "%s: Error - expected copies after \"-#\" option."
+msgstr "%s:错误 — 在“-#”选项后预期副本数量。"
+
+#, c-format
+msgid "%s: Error - expected copies after \"-n\" option."
+msgstr "%s:错误 — 在“-n”选项后预期副本数量。"
+
+#, c-format
+msgid "%s: Error - expected destination after \"-P\" option."
+msgstr "%s:错误 — 在“-P”选项后预期目的地。"
+
+#, c-format
+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”选项后预期主机名。"
+
+#, c-format
+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”选项后预期模式列表。"
+
+#, 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”选项后预期选项=赋值。"
+
+#, c-format
+msgid "%s: Error - expected page list after \"-P\" option."
+msgstr "%s:错误 — 在“-P”选项后预期页码列表。"
+
+#, c-format
+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”选项后预期标题。"
+
+#, c-format
+msgid "%s: Error - expected username after \"-U\" option."
+msgstr "%s:错误 — 在“-U”选项后预期用户名。"
+
+#, c-format
+msgid "%s: Error - expected username after \"-u\" option."
+msgstr "%s:错误 — 在“-u”选项后预期用户名。"
+
+#, c-format
+msgid "%s: Error - expected value after \"-%c\" option."
+msgstr "%s:错误 — 在“-%c”选项后预期赋值。"
+
+#, c-format
+msgid ""
+"%s: Error - need \"completed\", \"not-completed\", or \"all\" after \"-W\" "
+"option."
+msgstr "%s:错误 — 在“-W”选项后需要“completed”,“not-completed”或“all”值。"
+
+#, c-format
+msgid "%s: Error - no default destination available."
+msgstr "%s:错误 — 无可用的默认目的地。"
+
+#, c-format
+msgid "%s: Error - priority must be between 1 and 100."
+msgstr "%s:错误 — 优先级必须在 1 至 100 之间。"
+
+#, c-format
+msgid "%s: Error - scheduler not responding."
+msgstr "%s:错误 — 调度器无响应。"
+
+#, c-format
+msgid "%s: Error - too many files - \"%s\"."
+msgstr "%s:错误 — 文件太多 -“%s”。"
+
+#, c-format
+msgid "%s: Error - unable to access \"%s\" - %s"
+msgstr "%s:错误 — 无法访问“%s”- %s"
+
+#, c-format
+msgid "%s: Error - unable to queue from stdin - %s."
+msgstr "%s:错误 — 无法从标准输出列表 — %s。"
+
+#, c-format
+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”。"
+
+#, c-format
+msgid "%s: Expected job ID after \"-i\" option."
+msgstr "%s:在选项“-i”后预期任务 ID。"
+
+#, c-format
+msgid "%s: Invalid destination name in list \"%s\"."
+msgstr "%s:列表“%s”中的目的地名称无效。"
+
+#, c-format
+msgid "%s: Invalid filter string \"%s\"."
+msgstr "%s:无效的滤镜字串“%s”。"
+
+#, c-format
+msgid "%s: Missing filename for \"-P\"."
+msgstr "%s:“-P”选项缺少文件名。"
+
+#, c-format
+msgid "%s: Missing timeout for \"-T\"."
+msgstr "%s:“-T”选项缺少超时。"
+
+#, c-format
+msgid "%s: Missing version for \"-V\"."
+msgstr "%s:“-V”选项缺少版本。"
+
+#, c-format
+msgid "%s: Need job ID (\"-i jobid\") before \"-H restart\"."
+msgstr "%s:在指定“-H restart”之前需要任务 ID (\"-i jobid\")。"
+
+#, c-format
+msgid "%s: No filter to convert from %s/%s to %s/%s."
+msgstr "%s:没有可以将 %s/%s 转换为 %s/%s 的滤镜。"
+
+#, c-format
+msgid "%s: Operation failed: %s"
+msgstr "%s:操作失败:%s"
+
+#, c-format
+msgid "%s: Sorry, no encryption support."
+msgstr "%s:抱歉,无加密支持。"
+
+#, c-format
+msgid "%s: Unable to connect to \"%s:%d\": %s"
+msgstr "%s:无法连接到“%s:%d”:%s"
+
+#, c-format
+msgid "%s: Unable to connect to server."
+msgstr "%s:无法连接到服务器。"
+
+#, c-format
+msgid "%s: Unable to contact server."
+msgstr "%s:无法与服务器通信。"
+
+#, c-format
+msgid "%s: Unable to create PPD file: %s"
+msgstr "%s:无法创建 PPD 文件:%s"
+
+#, c-format
+msgid "%s: Unable to determine MIME type of \"%s\"."
+msgstr "%s:无法确定“%s”的 MIME 类型。"
+
+#, c-format
+msgid "%s: Unable to open \"%s\": %s"
+msgstr "%s:无法打开“%s”:%s"
+
+#, c-format
+msgid "%s: Unable to open %s: %s"
+msgstr "%s:无法打开 %s:%s"
+
+#, c-format
+msgid "%s: Unable to open PPD file: %s on line %d."
+msgstr "%1$s:无法打开 PPD 文件:行 %3$d 上的 %2$s。"
+
+#, c-format
+msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"."
+msgstr "%s:无法从“%s”或“%s”读取 MIME 数据库。"
+
+#, c-format
+msgid "%s: Unable to resolve \"%s\"."
+msgstr "%s:无法解析“%s”。"
+
+#, c-format
+msgid "%s: Unknown argument \"%s\"."
+msgstr "%s:未知参数“%s”。"
+
+#, 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”。"
+
+#, c-format
+msgid "%s: Unknown option \"%s\"."
+msgstr "%s:未知选项“%s”。"
+
+#, c-format
+msgid "%s: Unknown option \"-%c\"."
+msgstr "%s:未知选项“-%c”。"
+
+#, c-format
+msgid "%s: Unknown source MIME type %s/%s."
+msgstr "%s:未知源 MIME 类型 %s/%s。"
+
+#, c-format
+msgid ""
+"%s: Warning - \"%c\" format modifier not supported - output may not be "
+"correct."
+msgstr "%s:警告 — 不支持“%c”格式的修饰符 — 输出可能不正确。"
+
+#, c-format
+msgid "%s: Warning - character set option ignored."
+msgstr "%s:警告 — 字符集选项被忽略。"
+
+#, c-format
+msgid "%s: Warning - content type option ignored."
+msgstr "%s:警告 — 内容类型选项被忽略。"
+
+#, c-format
+msgid "%s: Warning - form option ignored."
+msgstr "%s:警告 — 图标选项被忽略。"
+
+#, c-format
+msgid "%s: Warning - mode option ignored."
+msgstr "%s:警告 — 模式选项被忽略。"
+
+msgid "-1"
+msgstr "-1"
+
+msgid "-10"
+msgstr "-10"
+
+msgid "-100"
+msgstr "-100"
+
+msgid "-105"
+msgstr "-105"
+
+msgid "-11"
+msgstr "-11"
+
+msgid "-110"
+msgstr "-110"
+
+msgid "-115"
+msgstr "-115"
+
+msgid "-12"
+msgstr "-12"
+
+msgid "-120"
+msgstr "-120"
+
+msgid "-13"
+msgstr "-13"
+
+msgid "-14"
+msgstr "-14"
+
+msgid "-15"
+msgstr "-15"
+
+msgid "-2"
+msgstr "-2"
+
+msgid "-20"
+msgstr "-20"
+
+msgid "-25"
+msgstr "-25"
+
+msgid "-3"
+msgstr "-3"
+
+msgid "-30"
+msgstr "-30"
+
+msgid "-35"
+msgstr "-35"
+
+msgid "-4"
+msgstr "-4"
+
+msgid "-40"
+msgstr "-40"
+
+msgid "-45"
+msgstr "-45"
+
+msgid "-5"
+msgstr "-5"
+
+msgid "-50"
+msgstr "-50"
+
+msgid "-55"
+msgstr "-55"
+
+msgid "-6"
+msgstr "-6"
+
+msgid "-60"
+msgstr "-60"
+
+msgid "-65"
+msgstr "-65"
+
+msgid "-7"
+msgstr "-7"
+
+msgid "-70"
+msgstr "-70"
+
+msgid "-75"
+msgstr "-75"
+
+msgid "-8"
+msgstr "-8"
+
+msgid "-80"
+msgstr "-80"
+
+msgid "-85"
+msgstr "-85"
+
+msgid "-9"
+msgstr "-9"
+
+msgid "-90"
+msgstr "-90"
+
+msgid "-95"
+msgstr "-95"
+
+msgid "0"
+msgstr "0"
+
+msgid "1"
+msgstr "1"
+
+msgid "1 inch/sec."
+msgstr "1 英寸/秒"
+
+msgid "1.25x0.25\""
+msgstr "1.25×0.25 英寸"
+
+msgid "1.25x2.25\""
+msgstr "1.25×2.25 英寸"
+
+msgid "1.5 inch/sec."
+msgstr "1.5 英寸/秒"
+
+msgid "1.50x0.25\""
+msgstr "1.50×0.25 英寸"
+
+msgid "1.50x0.50\""
+msgstr "1.50×0.50 英寸"
+
+msgid "1.50x1.00\""
+msgstr "1.50×1.00 英寸"
+
+msgid "1.50x2.00\""
+msgstr "1.50×2.00 英寸"
+
+msgid "10"
+msgstr "10"
+
+msgid "10 inches/sec."
+msgstr "10 英寸/秒"
+
+msgid "10 x 11"
+msgstr "10×11"
+
+msgid "10 x 13"
+msgstr "10×13"
+
+msgid "10 x 14"
+msgstr "10×14"
+
+msgid "100"
+msgstr "100"
+
+msgid "100 mm/sec."
+msgstr "100 毫米/秒"
+
+msgid "105"
+msgstr "105"
+
+msgid "11"
+msgstr "11"
+
+msgid "11 inches/sec."
+msgstr "11 英寸/秒"
+
+msgid "110"
+msgstr "110"
+
+msgid "115"
+msgstr "115"
+
+msgid "12"
+msgstr "12"
+
+msgid "12 inches/sec."
+msgstr "12 英寸/秒"
+
+msgid "12 x 11"
+msgstr "12×11"
+
+msgid "120"
+msgstr "120"
+
+msgid "120 mm/sec."
+msgstr "120 毫米/秒"
+
+msgid "120x60dpi"
+msgstr "120×60 dpi"
+
+msgid "120x72dpi"
+msgstr "120×72 dpi"
+
+msgid "13"
+msgstr "13"
+
+msgid "136dpi"
+msgstr "136 dpi"
+
+msgid "14"
+msgstr "14"
+
+msgid "15"
+msgstr "15"
+
+msgid "15 mm/sec."
+msgstr "15 毫米/秒"
+
+msgid "15 x 11"
+msgstr "15×11"
+
+msgid "150 mm/sec."
+msgstr "150 毫米/秒"
+
+msgid "150dpi"
+msgstr "150 dpi"
+
+msgid "16"
+msgstr "16"
+
+msgid "17"
+msgstr "17"
+
+msgid "18"
+msgstr "18"
+
+msgid "180dpi"
+msgstr "180 dpi"
+
+msgid "19"
+msgstr "19"
+
+msgid "2"
+msgstr "2"
+
+msgid "2 inches/sec."
+msgstr "2 英寸/秒"
+
+msgid "2-Hole Punch (Landscape)"
+msgstr "双孔冲压(水平)"
+
+msgid "2-Hole Punch (Portrait)"
+msgstr "双孔冲压(垂直)"
+
+msgid "2-Hole Punch (Reverse Landscape)"
+msgstr "双孔冲压(反向水平)"
+
+msgid "2-Hole Punch (Reverse Portrait)"
+msgstr "双孔冲压(反向垂直)"
+
+msgid "2-Sided Printing"
+msgstr "双面印刷"
+
+msgid "2.00x0.37\""
+msgstr "2.00×0.37 英寸"
+
+msgid "2.00x0.50\""
+msgstr "2.00×0.50 英寸"
+
+msgid "2.00x1.00\""
+msgstr "2.00×1.00 英寸"
+
+msgid "2.00x1.25\""
+msgstr "2.00×1.25 英寸"
+
+msgid "2.00x2.00\""
+msgstr "2.00×2.00 英寸"
+
+msgid "2.00x3.00\""
+msgstr "2.00×3.00 英寸"
+
+msgid "2.00x4.00\""
+msgstr "2.00×4.00 英寸"
+
+msgid "2.00x5.50\""
+msgstr "2.00×5.50 英寸"
+
+msgid "2.25x0.50\""
+msgstr "2.25×0.50 英寸"
+
+msgid "2.25x1.25\""
+msgstr "2.25×1.25 英寸"
+
+msgid "2.25x4.00\""
+msgstr "2.25×4.00 英寸"
+
+msgid "2.25x5.50\""
+msgstr "2.25×5.50 英寸"
+
+msgid "2.38x5.50\""
+msgstr "2.38×5.50 英寸"
+
+msgid "2.5 inches/sec."
+msgstr "2.5 英寸/秒"
+
+msgid "2.50x1.00\""
+msgstr "2.50×1.00 英寸"
+
+msgid "2.50x2.00\""
+msgstr "2.50×2.00 英寸"
+
+msgid "2.75x1.25\""
+msgstr "2.75×1.25 英寸"
+
+msgid "2.9 x 1\""
+msgstr "2.9×1 英寸"
+
+msgid "20"
+msgstr "20"
+
+msgid "20 mm/sec."
+msgstr "20 毫米/秒"
+
+msgid "200 mm/sec."
+msgstr "200 毫米/秒"
+
+msgid "203dpi"
+msgstr "203 dpi"
+
+msgid "21"
+msgstr "21"
+
+msgid "22"
+msgstr "22"
+
+msgid "23"
+msgstr "23"
+
+msgid "24"
+msgstr "24"
+
+msgid "24-Pin Series"
+msgstr "24 针序列"
+
+msgid "240x72dpi"
+msgstr "240×72 dpi"
+
+msgid "25"
+msgstr "25"
+
+msgid "250 mm/sec."
+msgstr "250 毫米/秒"
+
+msgid "26"
+msgstr "26"
+
+msgid "27"
+msgstr "27"
+
+msgid "28"
+msgstr "28"
+
+msgid "29"
+msgstr "29"
+
+msgid "3"
+msgstr "3"
+
+msgid "3 inches/sec."
+msgstr "3 英寸/秒"
+
+msgid "3 x 5"
+msgstr "3×5"
+
+msgid "3-Hole Punch (Landscape)"
+msgstr "三孔冲压(水平)"
+
+msgid "3-Hole Punch (Portrait)"
+msgstr "三孔冲压(垂直)"
+
+msgid "3-Hole Punch (Reverse Landscape)"
+msgstr "三孔冲压(反向水平)"
+
+msgid "3-Hole Punch (Reverse Portrait)"
+msgstr "三孔冲压(反向垂直)"
+
+msgid "3.00x1.00\""
+msgstr "3.00×1.00 英寸"
+
+msgid "3.00x1.25\""
+msgstr "3.00×1.25 英寸"
+
+msgid "3.00x2.00\""
+msgstr "3.00×2.00 英寸"
+
+msgid "3.00x3.00\""
+msgstr "3.00×3.00 英寸"
+
+msgid "3.00x5.00\""
+msgstr "3.00×5.00 英寸"
+
+msgid "3.25x2.00\""
+msgstr "3.25×2.00 英寸"
+
+msgid "3.25x5.00\""
+msgstr "3.25×5.00 英寸"
+
+msgid "3.25x5.50\""
+msgstr "3.25×5.50 英寸"
+
+msgid "3.25x5.83\""
+msgstr "3.25×5.83 英寸"
+
+msgid "3.25x7.83\""
+msgstr "3.25×7.83 英寸"
+
+msgid "3.5 x 5"
+msgstr "3.5×5"
+
+msgid "3.5\" Disk"
+msgstr "3.5 英寸磁盘"
+
+msgid "3.50x1.00\""
+msgstr "3.50×1.00 英寸"
+
+msgid "30"
+msgstr "30"
+
+msgid "30 mm/sec."
+msgstr "30 毫米/秒"
+
+msgid "300 mm/sec."
+msgstr "300 毫米/秒"
+
+msgid "300dpi"
+msgstr "300 dpi"
+
+msgid "35"
+msgstr "35"
+
+msgid "360dpi"
+msgstr "360 dpi"
+
+msgid "360x180dpi"
+msgstr "360×180 dpi"
+
+msgid "4"
+msgstr "4"
+
+msgid "4 inches/sec."
+msgstr "4 英寸/秒"
+
+msgid "4-Hole Punch (Landscape)"
+msgstr "四孔冲压(水平)"
+
+msgid "4-Hole Punch (Portrait)"
+msgstr "四孔冲压(垂直)"
+
+msgid "4-Hole Punch (Reverse Landscape)"
+msgstr "四孔冲压(反向水平)"
+
+msgid "4-Hole Punch (Reverse Portrait)"
+msgstr "四孔冲压(反向垂直)"
+
+msgid "4.00x1.00\""
+msgstr "4.00×1.00 英寸"
+
+msgid "4.00x13.00\""
+msgstr "4.00×13.00 英寸"
+
+msgid "4.00x2.00\""
+msgstr "4.00×2.00 英寸"
+
+msgid "4.00x2.50\""
+msgstr "4.00×2.50 英寸"
+
+msgid "4.00x3.00\""
+msgstr "4.00×3.00 英寸"
+
+msgid "4.00x4.00\""
+msgstr "4.00×4.00 英寸"
+
+msgid "4.00x5.00\""
+msgstr "4.00×5.00 英寸"
+
+msgid "4.00x6.00\""
+msgstr "4.00×6.00 英寸"
+
+msgid "4.00x6.50\""
+msgstr "4.00×6.50 英寸"
+
+msgid "40"
+msgstr "40"
+
+msgid "40 mm/sec."
+msgstr "40 毫米/秒"
+
+msgid "45"
+msgstr "45"
+
+msgid "5"
+msgstr "5"
+
+msgid "5 inches/sec."
+msgstr "5 英寸/秒"
+
+msgid "5 x 7"
+msgstr "5×7"
+
+msgid "50"
+msgstr "50"
+
+msgid "55"
+msgstr "55"
+
+msgid "6"
+msgstr "6"
+
+msgid "6 inches/sec."
+msgstr "6 英寸/秒"
+
+msgid "6.00x1.00\""
+msgstr "6.00×1.00 英寸"
+
+msgid "6.00x2.00\""
+msgstr "6.00×2.00 英寸"
+
+msgid "6.00x3.00\""
+msgstr "6.00×3.00 英寸"
+
+msgid "6.00x4.00\""
+msgstr "6.00×4.00 英寸"
+
+msgid "6.00x5.00\""
+msgstr "6.00×5.00 英寸"
+
+msgid "6.00x6.00\""
+msgstr "6.00×6.00 英寸"
+
+msgid "6.00x6.50\""
+msgstr "6.00×6.50 英寸"
+
+msgid "60"
+msgstr "60"
+
+msgid "60 mm/sec."
+msgstr "60 毫米/秒"
+
+msgid "600dpi"
+msgstr "600 dpi"
+
+msgid "60dpi"
+msgstr "60 dpi"
+
+msgid "60x72dpi"
+msgstr "60×72 dpi"
+
+msgid "65"
+msgstr "65"
+
+msgid "7"
+msgstr "7"
+
+msgid "7 inches/sec."
+msgstr "7 英寸/秒"
+
+msgid "7 x 9"
+msgstr "7×9"
+
+msgid "70"
+msgstr "70"
+
+msgid "75"
+msgstr "75"
+
+msgid "8"
+msgstr "8"
+
+msgid "8 inches/sec."
+msgstr "8 英寸/秒"
+
+msgid "8 x 10"
+msgstr "8×10"
+
+msgid "8.00x1.00\""
+msgstr "8.00×1.00 英寸"
+
+msgid "8.00x2.00\""
+msgstr "8.00×2.00 英寸"
+
+msgid "8.00x3.00\""
+msgstr "8.00×3.00 英寸"
+
+msgid "8.00x4.00\""
+msgstr "8.00×4.00 英寸"
+
+msgid "8.00x5.00\""
+msgstr "8.00×5.00 英寸"
+
+msgid "8.00x6.00\""
+msgstr "8.00×6.00 英寸"
+
+msgid "8.00x6.50\""
+msgstr "8.00×6.50 英寸"
+
+msgid "80"
+msgstr "80"
+
+msgid "80 mm/sec."
+msgstr "80 毫米/秒"
+
+msgid "85"
+msgstr "85"
+
+msgid "9"
+msgstr "9"
+
+msgid "9 inches/sec."
+msgstr "9 英寸/秒"
+
+msgid "9 x 11"
+msgstr "9×11"
+
+msgid "9 x 12"
+msgstr "9×12"
+
+msgid "9-Pin Series"
+msgstr "9 针序列"
+
+msgid "90"
+msgstr "90"
+
+msgid "95"
+msgstr "95"
+
+msgid "?Invalid help command unknown."
+msgstr "?无效 未知帮助命令。"
+
+msgid "A Samba password is required to export printer drivers"
+msgstr "需要 Samba 密码以导出打印机驱动"
+
+msgid "A Samba username is required to export printer drivers"
+msgstr "需要 Samba 用户名以导出打印机驱动"
+
+#, c-format
+msgid "A class named \"%s\" already exists."
+msgstr "已存在名为“%s”的类。"
+
+#, c-format
+msgid "A printer named \"%s\" already exists."
+msgstr "已存在名为“%s”的打印机。"
+
+msgid "A0"
+msgstr "A0"
+
+msgid "A0 Long Edge"
+msgstr "A0 长边缘"
+
+msgid "A1"
+msgstr "A1"
+
+msgid "A1 Long Edge"
+msgstr "A1 长边缘"
+
+msgid "A10"
+msgstr "A10"
+
+msgid "A2"
+msgstr "A2"
+
+msgid "A2 Long Edge"
+msgstr "A2 长边缘"
+
+msgid "A3"
+msgstr "A3"
+
+msgid "A3 Long Edge"
+msgstr "A3 长边缘"
+
+msgid "A3 Oversize"
+msgstr "A3 超大"
+
+msgid "A3 Oversize Long Edge"
+msgstr "A3 超大长边缘"
+
+msgid "A4"
+msgstr "A4"
+
+msgid "A4 Long Edge"
+msgstr "A4 长边缘"
+
+msgid "A4 Oversize"
+msgstr "A4 超大"
+
+msgid "A4 Small"
+msgstr "A4 小型"
+
+msgid "A5"
+msgstr "A5"
+
+msgid "A5 Long Edge"
+msgstr "A5 长边缘"
+
+msgid "A5 Oversize"
+msgstr "A5 超大"
+
+msgid "A6"
+msgstr "A6"
+
+msgid "A6 Long Edge"
+msgstr "A6 长边缘"
+
+msgid "A7"
+msgstr "A7"
+
+msgid "A8"
+msgstr "A8"
+
+msgid "A9"
+msgstr "A9"
+
+msgid "ANSI A"
+msgstr "ANSI A"
+
+msgid "ANSI B"
+msgstr "ANSI B"
+
+msgid "ANSI C"
+msgstr "ANSI C"
+
+msgid "ANSI D"
+msgstr "ANSI D"
+
+msgid "ANSI E"
+msgstr "ANSI E"
+
+msgid "ARCH C"
+msgstr "ARCH C"
+
+msgid "ARCH C Long Edge"
+msgstr "ARCH C 长边缘"
+
+msgid "ARCH D"
+msgstr "ARCH D"
+
+msgid "ARCH D Long Edge"
+msgstr "ARCH D 长边缘"
+
+msgid "ARCH E"
+msgstr "ARCH E"
+
+msgid "ARCH E Long Edge"
+msgstr "ARCH E 长边缘"
+
+msgid "Accept Jobs"
+msgstr "接受任务"
+
+msgid "Accepted"
+msgstr "已接受"
+
+msgid "Accordian Fold"
+msgstr "手风琴式折纸法"
+
+msgid "Add Class"
+msgstr "添加类"
+
+msgid "Add Printer"
+msgstr "添加打印机"
+
+msgid "Add RSS Subscription"
+msgstr "添加 RSS 订阅"
+
+msgid "Address"
+msgstr "地址"
+
+msgid "Administration"
+msgstr "管理"
+
+msgid "Advanced Photo Paper"
+msgstr "高级照片纸"
+
+msgid "Alternate"
+msgstr "交替"
+
+msgid "Alternate Roll"
+msgstr "交替滚筒"
+
+msgid "Aluminum"
+msgstr "铝"
+
+msgid "Always"
+msgstr "总是"
+
+msgid "AppSocket/HP JetDirect"
+msgstr "AppSocket/HP JetDirect"
+
+msgid "Applicator"
+msgstr "涂药器"
+
+msgid "Archival Envelope"
+msgstr "档案用信封"
+
+msgid "Archival Fabric"
+msgstr "档案用编织物"
+
+msgid "Archival Paper"
+msgstr "档案用纸张"
+
+msgid "Archival Photo Paper"
+msgstr "档案用照片纸"
+
+#, c-format
+msgid "Attempt to set %s printer-state to bad value %d."
+msgstr "尝试设置 %s 打印机状态为无效值 %d。"
+
+#, c-format
+msgid "Attribute \"%s\" is in the wrong group."
+msgstr "属性“%s”位于错误的组。"
+
+#, c-format
+msgid "Attribute \"%s\" is the wrong value type."
+msgstr "属性“%s”不是正确的值类型。"
+
+#, c-format
+msgid "Attribute groups are out of order (%x < %x)."
+msgstr "属性组排序错乱(%x < %x)。"
+
+msgid "Automatic"
+msgstr "自动"
+
+msgid "B0"
+msgstr "B0"
+
+msgid "B1"
+msgstr "B1"
+
+msgid "B10"
+msgstr "B10"
+
+msgid "B2"
+msgstr "B2"
+
+msgid "B3"
+msgstr "B3"
+
+msgid "B4"
+msgstr "B4"
+
+msgid "B5"
+msgstr "B5"
+
+msgid "B5 Oversize"
+msgstr "B5 超大"
+
+msgid "B6"
+msgstr "B6"
+
+msgid "B7"
+msgstr "B7"
+
+msgid "B8"
+msgstr "B8"
+
+msgid "B9"
+msgstr "B9"
+
+msgid "Back Print Film"
+msgstr "印片用胶片"
+
+#, c-format
+msgid "Bad 'document-format' value \"%s\"."
+msgstr "无效的“document-format”值“%s”。"
+
+msgid "Bad NULL dests pointer"
+msgstr "无效的 NULL 目标指针"
+
+msgid "Bad OpenGroup"
+msgstr "无效的 OpenGroup 值"
+
+msgid "Bad OpenUI/JCLOpenUI"
+msgstr "无效的 OpenUI/JCLOpenUI 值"
+
+msgid "Bad OrderDependency"
+msgstr "无效的 OrderDependency 值"
+
+msgid "Bad PPD cache file."
+msgstr "无效的 PPD 缓存文件。"
+
+msgid "Bad PPD file."
+msgstr "无效的 PPD 文件。"
+
+msgid "Bad Request"
+msgstr "无效请求"
+
+msgid "Bad SNMP version number"
+msgstr "无效的 SNMP 版本号"
+
+msgid "Bad UIConstraints"
+msgstr "无锡噢的 UIConstraints 值"
+
+msgid "Bad arguments to function"
+msgstr "函数的参数无效"
+
+#, c-format
+msgid "Bad copies value %d."
+msgstr "无效的副本值 %d。"
+
+msgid "Bad custom parameter"
+msgstr "无效的自定义参数"
+
+#, c-format
+msgid "Bad device-uri \"%s\"."
+msgstr "无效的 device-uri 值“%s”。"
+
+#, c-format
+msgid "Bad device-uri scheme \"%s\"."
+msgstr "无效的 device-uri 方案“%s”。"
+
+#, c-format
+msgid "Bad document-format \"%s\"."
+msgstr "无效的 document-format 值“%s”。"
+
+#, c-format
+msgid "Bad document-format-default \"%s\"."
+msgstr "无效的 document-format-default 值“%s”。"
+
+msgid "Bad filename buffer"
+msgstr "无效的文件名缓存"
+
+msgid "Bad hostname/address in URI"
+msgstr "URI 中的主机名/地址无效"
+
+#, c-format
+msgid "Bad job-name value: %s"
+msgstr "无效的 job-name 值:%s"
+
+msgid "Bad job-name value: Wrong type or count."
+msgstr "无效的 job-name 支持:无效的类型或序号。"
+
+msgid "Bad job-priority value."
+msgstr "无效的 job-priority 值。"
+
+#, c-format
+msgid "Bad job-sheets value \"%s\"."
+msgstr "无效的 job-sheets 值“%s”。"
+
+msgid "Bad job-sheets value type."
+msgstr "无效的 job-sheets 值类型。"
+
+msgid "Bad job-state value."
+msgstr "无效的 job-state 值。"
+
+#, c-format
+msgid "Bad job-uri \"%s\"."
+msgstr "无效的 job-uri 值“%s”。"
+
+#, c-format
+msgid "Bad notify-pull-method \"%s\"."
+msgstr "无效的 notify-pull-method 值“%s”。"
+
+#, c-format
+msgid "Bad notify-recipient-uri \"%s\"."
+msgstr "无效的 notify-recipient-uri 值“%s”。"
+
+#, c-format
+msgid "Bad number-up value %d."
+msgstr "无效的 number-up 值 %d。"
+
+#, c-format
+msgid "Bad option + choice on line %d."
+msgstr "行 %d 中存在无效的选项 + 选择。"
+
+#, c-format
+msgid "Bad page-ranges values %d-%d."
+msgstr "无效的 page-range 值 %d-%d。"
+
+msgid "Bad port number in URI"
+msgstr "URI 中的端口号无效"
+
+#, c-format
+msgid "Bad port-monitor \"%s\"."
+msgstr "无效的 port-monitor 值“%s”。"
+
+#, c-format
+msgid "Bad printer-state value %d."
+msgstr "无效的 printer-state 值 %d。"
+
+msgid "Bad printer-uri."
+msgstr "无效的 printer-uri 值。"
+
+#, c-format
+msgid "Bad request ID %d."
+msgstr "无效的请求 ID %d。"
+
+#, c-format
+msgid "Bad request version number %d.%d."
+msgstr "无效的请求版本号 %d.%d。"
+
+msgid "Bad resource in URI"
+msgstr "URI 中的资源无效"
+
+msgid "Bad scheme in URI"
+msgstr "URI 中的方案无效"
+
+msgid "Bad subscription ID"
+msgstr "无效的订阅 ID"
+
+msgid "Bad username in URI"
+msgstr "URI 中的用户名无效"
+
+msgid "Bad value string"
+msgstr "无效的值字串"
+
+msgid "Bad/empty URI"
+msgstr "无效或空的 URI"
+
+msgid "Bale"
+msgstr "10 令"
+
+msgid "Banners"
+msgstr "条幅"
+
+msgid "Bind"
+msgstr "捆扎"
+
+msgid "Bind (Landscape)"
+msgstr "捆扎(水平)"
+
+msgid "Bind (Portrait)"
+msgstr "捆扎(垂直)"
+
+msgid "Bind (Reverse Landscape)"
+msgstr "捆扎(反向水平)"
+
+msgid "Bind (Reverse Portrait)"
+msgstr "捆扎(反向垂直)"
+
+msgid "Bond Envelope"
+msgstr "证券信封"
+
+msgid "Bond Paper"
+msgstr "证券纸"
+
+msgid "Booklet"
+msgstr "册子"
+
+msgid "Booklet Maker"
+msgstr "册子机"
+
+#, c-format
+msgid "Boolean expected for waiteof option \"%s\"."
+msgstr "waiteof 选项“%s”预期布里值。"
+
+msgid "Bottom"
+msgstr "底部"
+
+msgid "Bottom Tray"
+msgstr "底部纸盘"
+
+msgid "Buffer overflow detected, aborting."
+msgstr "检测到缓冲区溢出,正在中止。"
+
+msgid "CD"
+msgstr "CD"
+
+msgid "CMYK"
+msgstr "CMYK"
+
+msgid "CPCL Label Printer"
+msgstr "CPCL 标签打印机"
+
+msgid "Cancel Jobs"
+msgstr "取消任务"
+
+msgid "Cancel RSS Subscription"
+msgstr "取消 RSS 订阅"
+
+msgid "Canceling print job."
+msgstr "正在取消打印任务"
+
+msgid "Cannot change printer-is-shared for remote queues."
+msgstr "无法为远程队列更改 printer-is-shared 值。"
+
+msgid "Cannot share a remote Kerberized printer."
+msgstr "无法共享远程的通过 Kerberos 授权的打印机。"
+
+msgid "Cardboard"
+msgstr "纸板"
+
+msgid "Cardstock"
+msgstr "重磅纸"
+
+msgid "Cassette"
+msgstr "磁带"
+
+msgid "Center"
+msgstr "中部"
+
+msgid "Center Tray"
+msgstr "中部纸盘"
+
+msgid "Change Settings"
+msgstr "更改选项"
+
+#, c-format
+msgid "Character set \"%s\" not supported."
+msgstr "不受支持的字符集“%s”。"
+
+msgid "Classes"
+msgstr "类"
+
+msgid "Clean Print Heads"
+msgstr "清理打印头"
+
+msgid "Close-Job doesn't support the job-uri attribute."
+msgstr "Close-Job 指令不支持 job-uri 属性。"
+
+msgid "Coat"
+msgstr "涂料"
+
+msgid "Coated Envelope"
+msgstr "涂面信封"
+
+msgid "Coated Paper"
+msgstr "涂面纸"
+
+msgid "Color"
+msgstr "彩色"
+
+msgid "Color Mode"
+msgstr "色彩模式"
+
+msgid "Colored Labels"
+msgstr "彩色标签"
+
+msgid ""
+"Commands may be abbreviated. Commands are:\n"
+"\n"
+"exit help quit status ?"
+msgstr ""
+"命令可能为缩写。可用命令如下:\n"
+"\n"
+"exit help quit status ?"
+
+msgid "Community name uses indefinite length"
+msgstr "社群名称不限长度"
+
+msgid "Connected to printer."
+msgstr "已连接到打印机。"
+
+msgid "Connecting to printer."
+msgstr "正在连接到打印机。"
+
+msgid "Continue"
+msgstr "继续"
+
+msgid "Continuous"
+msgstr "连续"
+
+msgid "Continuous Long"
+msgstr "长连续"
+
+msgid "Continuous Short"
+msgstr "短连续"
+
+msgid "Control file sent successfully."
+msgstr "已成功发送控制文件。"
+
+msgid "Copying print data."
+msgstr "正在复制打印数据。"
+
+msgid "Cotton Envelope"
+msgstr "棉质信封"
+
+msgid "Cotton Paper"
+msgstr "棉质纸张"
+
+msgid "Cover"
+msgstr "封面"
+
+msgid "Created"
+msgstr "创建时间"
+
+msgid "Credentials do not validate against site CA certificate."
+msgstr "无法与站点 CA 证书验证凭据。"
+
+msgid "Credentials have expired."
+msgstr "凭据已过期。"
+
+msgid "Custom"
+msgstr "自定义"
+
+msgid "CustominCutInterval"
+msgstr "CustominCutInterval"
+
+msgid "CustominTearInterval"
+msgstr "CustominTearInterval"
+
+msgid "Cut"
+msgstr "剪切"
+
+msgid "Cut Media"
+msgstr "剪切媒体"
+
+msgid "Cutter"
+msgstr "车床刀具"
+
+msgid "DVD"
+msgstr "DVD"
+
+msgid "Dark"
+msgstr "暗色"
+
+msgid "Darkness"
+msgstr "暗度"
+
+msgid "Data file sent successfully."
+msgstr "已成功发送数据文件。"
+
+msgid "Deep Color"
+msgstr "深色"
+
+msgid "Delete Class"
+msgstr "删除类"
+
+msgid "Delete Printer"
+msgstr "删除打印机"
+
+msgid "DeskJet Series"
+msgstr "DeskJet 系列"
+
+#, c-format
+msgid "Destination \"%s\" is not accepting jobs."
+msgstr "目标“%s”不接受任务。"
+
+#, c-format
+msgid ""
+"Device: uri = %s\n"
+" class = %s\n"
+" info = %s\n"
+" make-and-model = %s\n"
+" device-id = %s\n"
+" location = %s"
+msgstr ""
+"设备:\turi = %s\n"
+"\tclass = %s\n"
+"\tinfo = %s\n"
+"\tmake-and-model = %s\n"
+"\tdevice-id = %s\n"
+"\tlocation = %s"
+
+msgid "Direct Thermal Media"
+msgstr "直接热敏介质"
+
+#, c-format
+msgid "Directory \"%s\" contains a relative path."
+msgstr "目录“%s”包含相对路径。"
+
+#, c-format
+msgid "Directory \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)."
+msgstr "目录“%s”带有不安全的权限许可 (0%o/uid=%d/gid=%d)。"
+
+#, c-format
+msgid "Directory \"%s\" is a file."
+msgstr "目录“%s”是一个文件。"
+
+#, c-format
+msgid "Directory \"%s\" not available: %s"
+msgstr "目录“%s”不可用:%s"
+
+#, c-format
+msgid "Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d)."
+msgstr "目录“%s”的权限许可无问题 (0%o/uid=%d/gid=%d)。"
+
+msgid "Disabled"
+msgstr "已禁用"
+
+msgid "Disc"
+msgstr "光盘"
+
+#, c-format
+msgid "Document #%d does not exist in job #%d."
+msgstr "任务 #%2$d 中不包含文档 #%1$d。"
+
+msgid "Double Gate Fold"
+msgstr "封面拉页"
+
+msgid "Double Staple (Landscape)"
+msgstr "封面拉页(水平)"
+
+msgid "Double Staple (Portrait)"
+msgstr "封面拉页(垂直)"
+
+msgid "Double Staple (Reverse Landscape)"
+msgstr "封面拉页(反向水平)"
+
+msgid "Double Staple (Reverse Portrait)"
+msgstr "封面拉页(反向垂直)"
+
+msgid "Double Wall Cardboard"
+msgstr "双层纸板"
+
+msgid "Draft"
+msgstr "草稿"
+
+msgid "Dry Film"
+msgstr "干膜"
+
+msgid "Duplexer"
+msgstr "双工器"
+
+msgid "Dymo"
+msgstr "Dymo"
+
+msgid "EPL1 Label Printer"
+msgstr "EPL1 标签打印机"
+
+msgid "EPL2 Label Printer"
+msgstr "EPL2 标签打印机"
+
+msgid "Edit Configuration File"
+msgstr "编辑配置文件"
+
+msgid "Embossing Foil"
+msgstr "压花彩箔"
+
+msgid "Empty PPD file."
+msgstr "空 PPD 文件。"
+
+msgid "Encryption is not supported."
+msgstr "不支持加密。"
+
+msgid "End Board"
+msgstr "结尾板"
+
+#. TRANSLATORS: Banner/cover sheet after the print job.
+msgid "Ending Banner"
+msgstr "结尾横幅"
+
+msgid "Engineering Z Fold"
+msgstr "工程用 Z 折纸法"
+
+msgid "English"
+msgstr "英语"
+
+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 ""
+"输入你的用户名和密码或 root 的用户名和密码以访问此页面。如果您正在使用 "
+"Kerberos 认证,请求确定您拥有有效的 Kerberos 凭据。"
+
+msgid "Envelope"
+msgstr "信封"
+
+msgid "Envelope #10"
+msgstr "10 号信封"
+
+msgid "Envelope #11"
+msgstr "11 号信封"
+
+msgid "Envelope #12"
+msgstr "12 号信封"
+
+msgid "Envelope #14"
+msgstr "14 号信封"
+
+msgid "Envelope #9"
+msgstr "9 号信封"
+
+msgid "Envelope B4"
+msgstr "B4 信封"
+
+msgid "Envelope B5"
+msgstr "B5 信封"
+
+msgid "Envelope B6"
+msgstr "B6 信封"
+
+msgid "Envelope C0"
+msgstr "C0 信封"
+
+msgid "Envelope C1"
+msgstr "C1 信封"
+
+msgid "Envelope C2"
+msgstr "C2 信封"
+
+msgid "Envelope C3"
+msgstr "C3 信封"
+
+msgid "Envelope C4"
+msgstr "C4 信封"
+
+msgid "Envelope C5"
+msgstr "C5 信封"
+
+msgid "Envelope C6"
+msgstr "C6 信封"
+
+msgid "Envelope C65"
+msgstr "C65 信封"
+
+msgid "Envelope C7"
+msgstr "C7 信封"
+
+msgid "Envelope Choukei 3"
+msgstr "Choukei 3 信封"
+
+msgid "Envelope Choukei 3 Long Edge"
+msgstr "Choukei 3 长边缘信封"
+
+msgid "Envelope Choukei 4"
+msgstr "Choukei 4 信封"
+
+msgid "Envelope Choukei 4 Long Edge"
+msgstr "Choukei 4 长边缘信封"
+
+msgid "Envelope DL"
+msgstr "DL 信封"
+
+msgid "Envelope Feed"
+msgstr "信封喂纸口"
+
+msgid "Envelope Invite"
+msgstr "请柬信封"
+
+msgid "Envelope Italian"
+msgstr "意大利信封"
+
+msgid "Envelope Kaku2"
+msgstr "Kaku2 信封"
+
+msgid "Envelope Kaku2 Long Edge"
+msgstr "Kaku2 长边缘信封"
+
+msgid "Envelope Kaku3"
+msgstr "Kaku3 信封"
+
+msgid "Envelope Kaku3 Long Edge"
+msgstr "Kaku2 长边缘信封"
+
+msgid "Envelope Monarch"
+msgstr "君主信封"
+
+msgid "Envelope PRC1"
+msgstr "中国一号信封"
+
+msgid "Envelope PRC1 Long Edge"
+msgstr "中国一号长边缘信封"
+
+msgid "Envelope PRC10"
+msgstr "中国十号信封"
+
+msgid "Envelope PRC10 Long Edge"
+msgstr "中国十号长边缘信封"
+
+msgid "Envelope PRC2"
+msgstr "中国二号信封"
+
+msgid "Envelope PRC2 Long Edge"
+msgstr "中国二号长边缘信封"
+
+msgid "Envelope PRC3"
+msgstr "中国三号信封"
+
+msgid "Envelope PRC3 Long Edge"
+msgstr "中国三号长边缘信封"
+
+msgid "Envelope PRC4"
+msgstr "中国四号信封"
+
+msgid "Envelope PRC4 Long Edge"
+msgstr "中国四号长边缘信封"
+
+msgid "Envelope PRC5 Long Edge"
+msgstr "中国五号长边缘信封"
+
+msgid "Envelope PRC5PRC5"
+msgstr "中国五号信封"
+
+msgid "Envelope PRC6"
+msgstr "中国六号信封"
+
+msgid "Envelope PRC6 Long Edge"
+msgstr "中国六号长边缘信封"
+
+msgid "Envelope PRC7"
+msgstr "中国七号信封"
+
+msgid "Envelope PRC7 Long Edge"
+msgstr "中国七号长边缘信封"
+
+msgid "Envelope PRC8"
+msgstr "中国八号信封"
+
+msgid "Envelope PRC8 Long Edge"
+msgstr "中国八号长边缘信封"
+
+msgid "Envelope PRC9"
+msgstr "中国九号信封"
+
+msgid "Envelope PRC9 Long Edge"
+msgstr "中国九号长边缘信封"
+
+msgid "Envelope Personal"
+msgstr "个人信封"
+
+msgid "Envelope You4"
+msgstr "You4 信封"
+
+msgid "Envelope You4 Long Edge"
+msgstr "You4 长边缘信封"
+
+msgid "Environment Variables:"
+msgstr "环境变量:"
+
+msgid "Epson"
+msgstr "Epson"
+
+msgid "Error Policy"
+msgstr "错误策略"
+
+msgid "Error reading raster data."
+msgstr "读取栅格化数据出错。"
+
+msgid "Error sending raster data."
+msgstr "发送栅格化数据出错。"
+
+msgid "Error: need hostname after \"-h\" option."
+msgstr "错误:“-h”选项后需要主机名。"
+
+msgid "Every 10 Labels"
+msgstr "每 10 个标签"
+
+msgid "Every 2 Labels"
+msgstr "每 2 个标签"
+
+msgid "Every 3 Labels"
+msgstr "每 3 个标签"
+
+msgid "Every 4 Labels"
+msgstr "每 4 个标签"
+
+msgid "Every 5 Labels"
+msgstr "每 5 个标签"
+
+msgid "Every 6 Labels"
+msgstr "每 6 个标签"
+
+msgid "Every 7 Labels"
+msgstr "每 7 个标签"
+
+msgid "Every 8 Labels"
+msgstr "每 8 个标签"
+
+msgid "Every 9 Labels"
+msgstr "每 9 个标签"
+
+msgid "Every Label"
+msgstr "每个标签"
+
+msgid "Everyday Glossy Photo Paper"
+msgstr "日常用光面照片纸"
+
+msgid "Everyday Matte Paper"
+msgstr "日常用雾面纸"
+
+msgid "Executive"
+msgstr "执行"
+
+msgid "Expectation Failed"
+msgstr "未满足期望"
+
+msgid "Export Printers to Samba"
+msgstr "将打印机导出到 Samba"
+
+msgid "Expressions:"
+msgstr "表达式:"
+
+msgid "Extra Heavyweight Paper"
+msgstr "超重磅纸"
+
+msgid "FAIL"
+msgstr "失败"
+
+msgid "Fabric"
+msgstr "编织物"
+
+msgid "Face Down"
+msgstr "朝下"
+
+msgid "Face Up"
+msgstr "朝上"
+
+msgid "FanFold German"
+msgstr "德国式扇折"
+
+msgid "FanFold Legal German"
+msgstr "德国式法律扇折"
+
+msgid "Fanfold US"
+msgstr "美国式扇折"
+
+msgid "Fast Grayscale"
+msgstr "快速灰度"
+
+#, c-format
+msgid "File \"%s\" contains a relative path."
+msgstr "文件“%s”包含相对路径。"
+
+#, c-format
+msgid "File \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)."
+msgstr "文件“%s”带有不安全的权限许可 (0%o/uid=%d/gid=%d)。"
+
+#, c-format
+msgid "File \"%s\" is a directory."
+msgstr "文件“%s”是一个目录。"
+
+#, c-format
+msgid "File \"%s\" not available: %s"
+msgstr "文件“%s”不可用:%s"
+
+#, c-format
+msgid "File \"%s\" permissions OK (0%o/uid=%d/gid=%d)."
+msgstr "文件“%s”的权限许可无问题 (0%o/uid=%d/gid=%d)。"
+
+msgid "File Folder"
+msgstr "文件夹"
+
+#, c-format
+msgid ""
+"File device URIs have been disabled. To enable, see the FileDevice directive "
+"in \"%s/cups-files.conf\"."
+msgstr ""
+"已禁用文件设备 URI。要启用此功能,参阅“%s/cups-files.conf”中的 FileDevice 参"
+"数。"
+
+msgid "Film"
+msgstr "胶片"
+
+msgid "Fine Envelope"
+msgstr "精致信封"
+
+#, c-format
+msgid "Finished page %d."
+msgstr "已完成第 %d 页。"
+
+msgid "Flexo Base"
+msgstr "柔性版基"
+
+msgid "Flexo Photo Polymer"
+msgstr "柔性照片聚合物"
+
+msgid "Flute"
+msgstr "瓦楞纸"
+
+msgid "Foil"
+msgstr "烫压"
+
+msgid "Fold"
+msgstr "折纸"
+
+msgid "Folio"
+msgstr "对开本"
+
+msgid "Forbidden"
+msgstr "已禁止"
+
+msgid "Full Cut Tabs"
+msgstr "完整裁剪标签"
+
+msgid "Gate Fold"
+msgstr "对开页"
+
+msgid "General"
+msgstr "常规"
+
+msgid "Generic"
+msgstr "通用"
+
+msgid "Get-Response-PDU uses indefinite length"
+msgstr "Get-Response-PDU 使用无限长度"
+
+msgid "Glass"
+msgstr "玻璃"
+
+msgid "Glass Colored"
+msgstr "彩色玻璃"
+
+msgid "Glass Opaque"
+msgstr "不透明玻璃"
+
+msgid "Glass Surfaced"
+msgstr "涂面玻璃"
+
+msgid "Glass Textured"
+msgstr "材质玻璃"
+
+msgid "Glossy Brochure Paper"
+msgstr "光面海报纸"
+
+msgid "Glossy Fabric"
+msgstr "光面编织物"
+
+msgid "Glossy Labels"
+msgstr "光面标签"
+
+msgid "Glossy Optical Disc"
+msgstr "光面光盘"
+
+msgid "Glossy Paper"
+msgstr "光面纸"
+
+msgid "Glossy Photo Paper"
+msgstr "光面照片纸"
+
+msgid "Got a printer-uri attribute but no job-id."
+msgstr "获取到了 printer-uri 属性却未获取到 job-id。"
+
+msgid "Gravure Cylinder"
+msgstr "凹印滚筒"
+
+msgid "Grayscale"
+msgstr "灰度"
+
+msgid "HP"
+msgstr "HP"
+
+msgid "Hagaki"
+msgstr "叶书"
+
+msgid "Half Fold"
+msgstr "对折"
+
+msgid "Half Z Fold"
+msgstr "半 Z 折"
+
+msgid "Hanging Folder"
+msgstr "倒挂文件夹"
+
+msgid "Hash buffer too small."
+msgstr "哈希值缓冲区太小。"
+
+msgid "Heavyweight Coated Paper"
+msgstr "重磅涂面纸"
+
+msgid "Heavyweight Envelope"
+msgstr "重磅信封"
+
+msgid "Heavyweight Paper"
+msgstr "重磅纸"
+
+msgid "Help file not in index."
+msgstr "帮助文件不在索引中。"
+
+msgid "High"
+msgstr "高"
+
+msgid "High Gloss Fabric"
+msgstr "高光编织物"
+
+msgid "High Gloss Labels"
+msgstr "高光标签"
+
+msgid "High Gloss Optical Disc"
+msgstr "高光光盘"
+
+msgid "High Gloss Photo Paper"
+msgstr "高光照片纸"
+
+msgid "IPP 1setOf attribute with incompatible value tags."
+msgstr "带有不兼容值标签的 IPP 1setOf 属性。"
+
+msgid "IPP attribute has no name."
+msgstr "IPP 属性未命名。"
+
+msgid "IPP attribute is not a member of the message."
+msgstr "IPP 属性不是消息成员。"
+
+msgid "IPP begCollection value not 0 bytes."
+msgstr "IPP begCollection 值大小不是 0 字节。"
+
+msgid "IPP boolean value not 1 byte."
+msgstr "IPP 布里值大小不是 1 字节。"
+
+msgid "IPP date value not 11 bytes."
+msgstr "IPP 日期值大小不是 11 字节。"
+
+msgid "IPP endCollection value not 0 bytes."
+msgstr "IPP endCollection 值大小不是 0 字节。"
+
+msgid "IPP enum value not 4 bytes."
+msgstr "IPP enum 值大小不是 4 字节。"
+
+msgid "IPP extension tag larger than 0x7FFFFFFF."
+msgstr "IPP 扩展标签大于 0x7FFFFFFF。"
+
+msgid "IPP integer value not 4 bytes."
+msgstr "IPP 整数值大小不是 4 字节。"
+
+msgid "IPP language length overflows value."
+msgstr "IPP 语言长度溢出值限制。"
+
+msgid "IPP language length too large."
+msgstr "IPP 语言长度太长。"
+
+msgid "IPP member name is not empty."
+msgstr "IPP 成员名称非空。"
+
+msgid "IPP memberName value is empty."
+msgstr "IPP memberName 值为空。"
+
+msgid "IPP memberName with no attribute."
+msgstr "IPP memberName 无属性。"
+
+msgid "IPP name larger than 32767 bytes."
+msgstr "IPP 名称大小超过 32767 字节。"
+
+msgid "IPP nameWithLanguage value less than minimum 4 bytes."
+msgstr "IPP nameWithLanguage 值大小小于 4 字节的最小限制。"
+
+msgid "IPP octetString length too large."
+msgstr "IPP octetString 长度过长。"
+
+msgid "IPP rangeOfInteger value not 8 bytes."
+msgstr "IPP rangeOfInteger 值大小不是 8 字节。"
+
+msgid "IPP resolution value not 9 bytes."
+msgstr "IPP 分辨率值大小不是 9 字节。"
+
+msgid "IPP string length overflows value."
+msgstr "IPP 字串长度超过溢出值限制。"
+
+msgid "IPP textWithLanguage value less than minimum 4 bytes."
+msgstr "IPP textWithLanguage 值大小小于 4 字节的最小限制。"
+
+msgid "IPP value larger than 32767 bytes."
+msgstr "IPP 值大小超过 32767 字节。"
+
+msgid "ISOLatin1"
+msgstr "ISOLatin1"
+
+msgid "Illegal control character"
+msgstr "非法控制字符"
+
+msgid "Illegal main keyword string"
+msgstr "非法主关键词字串"
+
+msgid "Illegal option keyword string"
+msgstr "非法选项关键词字串"
+
+msgid "Illegal translation string"
+msgstr "非法翻译字串"
+
+msgid "Illegal whitespace character"
+msgstr "非法空白字符"
+
+msgid "Image Setter Paper"
+msgstr "底片输出机纸"
+
+msgid "Imaging Cylinder"
+msgstr "图像滚筒"
+
+msgid "Inkjet Envelope"
+msgstr "喷墨信封"
+
+msgid "Inkjet Labels"
+msgstr "喷墨标签"
+
+msgid "Inkjet Paper"
+msgstr "喷墨纸"
+
+msgid "Installable Options"
+msgstr "可安装选项"
+
+msgid "Installed"
+msgstr "已安装"
+
+msgid "IntelliBar Label Printer"
+msgstr "IntelliBar 标签打印机"
+
+msgid "Intellitech"
+msgstr "Intellitech"
+
+msgid "Internal Server Error"
+msgstr "内部服务器错误"
+
+msgid "Internal error"
+msgstr "内部错误"
+
+msgid "Internet Postage 2-Part"
+msgstr "网邮 2 部"
+
+msgid "Internet Postage 3-Part"
+msgstr "网邮 3 部"
+
+msgid "Internet Printing Protocol"
+msgstr "互联网打印协议"
+
+msgid "Invalid media name arguments."
+msgstr "无效的媒体名称参数。"
+
+msgid "Invalid media size."
+msgstr "无效的媒体大小。"
+
+msgid "Invalid ppd-name value."
+msgstr "无效的 ppd-name 值。"
+
+#, c-format
+msgid "Invalid printer command \"%s\"."
+msgstr "无效的打印机命令“%s”。"
+
+msgid "JCL"
+msgstr "JCL"
+
+msgid "JIS B0"
+msgstr "JIS B0"
+
+msgid "JIS B1"
+msgstr "JIS B1"
+
+msgid "JIS B10"
+msgstr "JIS B10"
+
+msgid "JIS B2"
+msgstr "JIS B2"
+
+msgid "JIS B3"
+msgstr "JIS B3"
+
+msgid "JIS B4"
+msgstr "JIS B4"
+
+msgid "JIS B4 Long Edge"
+msgstr "JIS B4 长边缘"
+
+msgid "JIS B5"
+msgstr "JIS B5"
+
+msgid "JIS B5 Long Edge"
+msgstr "JIS B5 长边缘"
+
+msgid "JIS B6"
+msgstr "JIS B6"
+
+msgid "JIS B6 Long Edge"
+msgstr "JIS B6 长边缘"
+
+msgid "JIS B7"
+msgstr "JIS B7"
+
+msgid "JIS B8"
+msgstr "JIS B8"
+
+msgid "JIS B9"
+msgstr "JIS B9"
+
+#, c-format
+msgid "Job #%d cannot be restarted - no files."
+msgstr "无法重启任务 #%d — 没有文件。"
+
+#, c-format
+msgid "Job #%d does not exist."
+msgstr "任务 #%d 不存在。"
+
+#, c-format
+msgid "Job #%d is already aborted - can't cancel."
+msgstr "任务 #%d 已中止 — 无法取消。"
+
+#, c-format
+msgid "Job #%d is already canceled - can't cancel."
+msgstr "任务 #%d 已取消 — 无法取消。"
+
+#, c-format
+msgid "Job #%d is already completed - can't cancel."
+msgstr "任务 #%d 已完成 — 无法取消。"
+
+#, c-format
+msgid "Job #%d is finished and cannot be altered."
+msgstr "任务 #%d 已完成且不可更动。"
+
+#, c-format
+msgid "Job #%d is not complete."
+msgstr "任务 #%d 未完成。"
+
+#, c-format
+msgid "Job #%d is not held for authentication."
+msgstr "任务 #%d 未被认证扣留。"
+
+#, c-format
+msgid "Job #%d is not held."
+msgstr "任务 #%d 未被扣留。"
+
+msgid "Job Completed"
+msgstr "任务已完成"
+
+msgid "Job Created"
+msgstr "任务已创建"
+
+msgid "Job Options Changed"
+msgstr "任务选项更动"
+
+msgid "Job Stopped"
+msgstr "任务已停止"
+
+msgid "Job is completed and cannot be changed."
+msgstr "任务已完成且不能更改。"
+
+msgid "Job operation failed"
+msgstr "任务操作失败"
+
+msgid "Job state cannot be changed."
+msgstr "无法更改任务状态。"
+
+msgid "Job subscriptions cannot be renewed."
+msgstr "无法为任务订阅续期。"
+
+msgid "Jobs"
+msgstr "任务"
+
+msgid "Jog"
+msgstr "垛齐"
+
+msgid "LPD/LPR Host or Printer"
+msgstr "LPD/LPR 主机或打印机"
+
+msgid "Label Printer"
+msgstr "标签打印机"
+
+msgid "Label Top"
+msgstr "标签顶部"
+
+msgid "Labels"
+msgstr "标签"
+
+msgid "Laminate"
+msgstr "裱"
+
+msgid "Laminating Foil"
+msgstr "裱箔"
+
+#, c-format
+msgid "Language \"%s\" not supported."
+msgstr "不支持的语言“%s”。"
+
+msgid "Large Address"
+msgstr "大地址"
+
+msgid "Large Capacity"
+msgstr "大容量"
+
+msgid "Large Capacity Tray"
+msgstr "大容量纸盘"
+
+msgid "LaserJet Series PCL 4/5"
+msgstr "LaserJet 系列 PCL 4/5"
+
+msgid "Left"
+msgstr "左"
+
+msgid "Left Gate Fold"
+msgstr "左对开页"
+
+msgid "Left Tray"
+msgstr "左纸盘"
+
+msgid "Letter Fold"
+msgstr "信函折法"
+
+msgid "Letter Oversize"
+msgstr "信函超大"
+
+msgid "Letter Oversize Long Edge"
+msgstr "信函超大长边缘"
+
+msgid "Letterhead"
+msgstr "笺头"
+
+msgid "Light"
+msgstr "轻"
+
+msgid "Lightweight Envelope"
+msgstr "轻型信封"
+
+msgid "Lightweight Paper"
+msgstr "轻型纸张"
+
+msgid "Line longer than the maximum allowed (255 characters)"
+msgstr "行长度超过允许的最大值(255 字符)"
+
+msgid "List Available Printers"
+msgstr "列出可用打印机"
+
+msgid "Load paper."
+msgstr "装入纸张。"
+
+msgid "Local printer created."
+msgstr "已创建本地打印机。"
+
+msgid "Long-Edge (Portrait)"
+msgstr "长边缘(竖直)"
+
+msgid "Looking for printer."
+msgstr "正在寻找打印机。"
+
+msgid "Mailbox 1"
+msgstr "1 号信箱"
+
+msgid "Mailbox 10"
+msgstr "10 号信箱"
+
+msgid "Mailbox 2"
+msgstr "2 号信箱"
+
+msgid "Mailbox 3"
+msgstr "3 号信箱"
+
+msgid "Mailbox 4"
+msgstr "4 号信箱"
+
+msgid "Mailbox 5"
+msgstr "5 号信箱"
+
+msgid "Mailbox 6"
+msgstr "6 号信箱"
+
+msgid "Mailbox 7"
+msgstr "7 号信箱"
+
+msgid "Mailbox 8"
+msgstr "8 号信箱"
+
+msgid "Mailbox 9"
+msgstr "9 号信箱"
+
+msgid "Main"
+msgstr "主队列"
+
+msgid "Main Roll"
+msgstr "主滚筒"
+
+msgid "Manual"
+msgstr "手动"
+
+msgid "Manual Feed"
+msgstr "手动喂纸"
+
+msgid "Matte Brochure Paper"
+msgstr "雾面海报纸"
+
+msgid "Matte Cover Paper"
+msgstr "雾面封面纸"
+
+msgid "Matte Fabric"
+msgstr "雾面编织物"
+
+msgid "Matte Labels"
+msgstr "雾面标签"
+
+msgid "Matte Optical Disc"
+msgstr "雾面光盘"
+
+msgid "Matte Photo Paper"
+msgstr "雾面照片纸"
+
+msgid "Media Size"
+msgstr "媒体大小"
+
+msgid "Media Source"
+msgstr "媒体来源"
+
+msgid "Media Tracking"
+msgstr "媒体跟踪"
+
+msgid "Media Type"
+msgstr "媒体类型"
+
+msgid "Medium"
+msgstr "介质"
+
+msgid "Memory allocation error"
+msgstr "内存分配错误"
+
+msgid "Metal"
+msgstr "金属"
+
+msgid "Metal Glossy"
+msgstr "光面金属"
+
+msgid "Metal High Gloss"
+msgstr "高光金属"
+
+msgid "Metal Matte"
+msgstr "雾面金属"
+
+msgid "Metal Satin"
+msgstr "缎面抛光金属"
+
+msgid "Metal Semi Gloss"
+msgstr "半光面金属"
+
+msgid "Mid-Weight Paper"
+msgstr "中重纸张"
+
+msgid "Middle"
+msgstr "中间"
+
+msgid "Missing CloseGroup"
+msgstr "缺少 CloseGroup"
+
+msgid "Missing PPD-Adobe-4.x header"
+msgstr "缺少 PPD-Adobe-4.x 文件头"
+
+msgid "Missing asterisk in column 1"
+msgstr "列 1 中缺少星号"
+
+msgid "Missing document-number attribute."
+msgstr "缺少 document-number 属性。"
+
+#, c-format
+msgid "Missing double quote on line %d."
+msgstr "行 %d 缺少双引号。"
+
+msgid "Missing form variable"
+msgstr "缺少表单变量"
+
+msgid "Missing last-document attribute in request."
+msgstr "请求中缺少 last-document 属性。"
+
+msgid "Missing media or media-col."
+msgstr "缺少 media 或 media-col。"
+
+msgid "Missing media-size in media-col."
+msgstr "media-col 中缺少 media-size。"
+
+msgid "Missing notify-subscription-ids attribute."
+msgstr "缺少 notify-subscription-ids 属性。"
+
+msgid "Missing option keyword"
+msgstr "缺少选项关键词"
+
+msgid "Missing requesting-user-name attribute."
+msgstr "缺少 requesting-user-name 属性。"
+
+#, c-format
+msgid "Missing required attribute \"%s\"."
+msgstr "缺少必要的属性“%s”。"
+
+msgid "Missing required attributes."
+msgstr "缺少必要的属性。"
+
+msgid "Missing resource in URI"
+msgstr "URI 中缺少资源"
+
+msgid "Missing scheme in URI"
+msgstr "URI 中缺少方案"
+
+#, c-format
+msgid "Missing value on line %d."
+msgstr "行 %d 缺少值。"
+
+msgid "Missing value string"
+msgstr "缺少值字串。"
+
+msgid "Missing x-dimension in media-size."
+msgstr "media-size 中缺少 x-dimension。"
+
+msgid "Missing y-dimension in media-size."
+msgstr "media-size 中缺少 y-dimension。"
+
+#, c-format
+msgid ""
+"Model: name = %s\n"
+" natural_language = %s\n"
+" make-and-model = %s\n"
+" device-id = %s"
+msgstr ""
+"型号:\tname = %s\n"
+"\tnatural_language = %s\n"
+"\tmake-and-model = %s\n"
+"\tdevice-id = %s"
+
+msgid "Modifiers:"
+msgstr "修饰符:"
+
+msgid "Modify Class"
+msgstr "修改类"
+
+msgid "Modify Printer"
+msgstr "修改打印机"
+
+msgid "Mounting Tape"
+msgstr "装载带"
+
+msgid "Move All Jobs"
+msgstr "移动所有任务"
+
+msgid "Move Job"
+msgstr "移动任务"
+
+msgid "Moved Permanently"
+msgstr "已永久移动"
+
+msgid "Multi Layer"
+msgstr "多面"
+
+msgid "Multi Part Form"
+msgstr "多部表单"
+
+msgid "Multi-Hole Punch (Landscape)"
+msgstr "多孔冲压(水平)"
+
+msgid "Multi-Hole Punch (Portrait)"
+msgstr "多孔冲压(垂直)"
+
+msgid "Multi-Hole Punch (Reverse Landscape)"
+msgstr "多孔冲压(反向水平)"
+
+msgid "Multi-Hole Punch (Reverse Portrait)"
+msgstr "多孔冲压(反向垂直)"
+
+msgid "Multipurpose"
+msgstr "多用"
+
+msgid "Multipurpose Paper"
+msgstr "多用纸"
+
+msgid "My Mailbox"
+msgstr "我的信箱"
+
+msgid "NULL PPD file pointer"
+msgstr "PPD 文件指针为 NULL"
+
+msgid "Name OID uses indefinite length"
+msgstr "名称 OID 使用不定长度"
+
+msgid "Nested classes are not allowed."
+msgstr "不允许嵌套类。"
+
+msgid "Never"
+msgstr "从不"
+
+msgid "New credentials are not valid for name."
+msgstr "新凭据不可用于名称。"
+
+msgid "New credentials are older than stored credentials."
+msgstr "新凭据老于已存储的凭据。"
+
+msgid "No"
+msgstr "否"
+
+msgid "No Content"
+msgstr "无内容"
+
+msgid "No IPP attributes."
+msgstr "无 IPP 属性。"
+
+msgid "No PPD name"
+msgstr "无 PPD 名称"
+
+msgid "No VarBind SEQUENCE"
+msgstr "无 VarBind SEQUENCE"
+
+msgid "No Windows printer drivers are installed."
+msgstr "未安装 Windows 打印机驱动。"
+
+msgid "No active connection"
+msgstr "无活动连接"
+
+msgid "No active connection."
+msgstr "无活动连接。"
+
+#, c-format
+msgid "No active jobs on %s."
+msgstr "%s 上无活动任务。"
+
+msgid "No attributes in request."
+msgstr "请求中无属性。"
+
+msgid "No authentication information provided."
+msgstr "未提供认证信息。"
+
+msgid "No common name specified."
+msgstr "未指定通用名称。"
+
+msgid "No community name"
+msgstr "无社群名称"
+
+msgid "No default printer."
+msgstr "无默认打印机。"
+
+msgid "No destinations added."
+msgstr "未添加目标。"
+
+msgid "No device URI found in argv[0] or in DEVICE_URI environment variable."
+msgstr "argv[0] 或 DEVICE_URI 环境变量中无设备 URI。"
+
+msgid "No error-index"
+msgstr "无 error-index"
+
+msgid "No error-status"
+msgstr "无 error-status"
+
+msgid "No file in print request."
+msgstr "打印请求中无文件。"
+
+msgid "No modification time"
+msgstr "无修改时间"
+
+msgid "No name OID"
+msgstr "无名称 OID"
+
+msgid "No pages were found."
+msgstr "未找到页面。"
+
+msgid "No printer name"
+msgstr "无打印机名称"
+
+msgid "No printer-uri found"
+msgstr "未找到 printer-uri"
+
+msgid "No printer-uri found for class"
+msgstr "未找到类的 print-uri"
+
+msgid "No printer-uri in request."
+msgstr "请求中无 printer-uri。"
+
+msgid "No request URI."
+msgstr "无请求 URI。"
+
+msgid "No request protocol version."
+msgstr "无请求协议版本。"
+
+msgid "No request sent."
+msgstr "未发送请求。"
+
+msgid "No request-id"
+msgstr "无 request-id"
+
+msgid "No stored credentials, not valid for name."
+msgstr "无已存储的凭据,不可用于名称。"
+
+msgid "No subscription attributes in request."
+msgstr "请求中无订阅属性。"
+
+msgid "No subscriptions found."
+msgstr "未找到订阅。"
+
+msgid "No variable-bindings SEQUENCE"
+msgstr "无 variable-bindings SEQUENCE"
+
+msgid "No version number"
+msgstr "无版本号"
+
+msgid "Non-continuous (Mark sensing)"
+msgstr "非连续(标记嗅探)"
+
+msgid "Non-continuous (Web sensing)"
+msgstr "非连续(Web 嗅探)"
+
+msgid "None"
+msgstr "无"
+
+msgid "Normal"
+msgstr "一般"
+
+msgid "Not Found"
+msgstr "未找到"
+
+msgid "Not Implemented"
+msgstr "未实现"
+
+msgid "Not Installed"
+msgstr "未安装"
+
+msgid "Not Modified"
+msgstr "未修改"
+
+msgid "Not Supported"
+msgstr "未支持"
+
+msgid "Not allowed to print."
+msgstr "不允许打印。"
+
+msgid "Note"
+msgstr "注释"
+
+msgid ""
+"Note: this program only validates the DSC comments, not the PostScript "
+"itself."
+msgstr "注:此程序仅用于检验 DSC 注释,而非 PostScript 本身。"
+
+msgid "OK"
+msgstr "确定"
+
+msgid "Off (1-Sided)"
+msgstr "关(单面)"
+
+msgid "Office Recycled Paper"
+msgstr "办公室用再生纸"
+
+msgid "Oki"
+msgstr "日冲"
+
+msgid "Online Help"
+msgstr "在线帮助"
+
+msgid "Only local users can create a local printer."
+msgstr "本地打印机只能使用本地用户创建。"
+
+#, c-format
+msgid "Open of %s failed: %s"
+msgstr "打开 %s 失败:%s"
+
+msgid "OpenGroup without a CloseGroup first"
+msgstr "OpenGroup 缺少前置 CloseGroup"
+
+msgid "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first"
+msgstr "OpenUI/JCLOpenUI 缺少前置 CloseUI/JCLCloseUI"
+
+msgid "Operation Policy"
+msgstr "操作策略"
+
+msgid "Optical Disc"
+msgstr "光盘"
+
+#, c-format
+msgid "Option \"%s\" cannot be included via %%%%IncludeFeature."
+msgstr "选项“%s”不能通过 %%%%IncludeFeature 引用。"
+
+msgid "Options Installed"
+msgstr "已安装选项"
+
+msgid "Options:"
+msgstr "选项:"
+
+msgid "Other"
+msgstr "其他"
+
+msgid "Out of date PPD cache file."
+msgstr "过时的 PPD 缓存文件。"
+
+msgid "Out of memory."
+msgstr "内存耗尽。"
+
+msgid "Output Mode"
+msgstr "输出模式"
+
+msgid "Output bin is almost full."
+msgstr "出纸盘已几乎用满。"
+
+msgid "Output bin is full."
+msgstr "出纸盘已满。"
+
+msgid "Output bin is missing."
+msgstr "无出纸盘。"
+
+msgid "PASS"
+msgstr "通过"
+
+msgid "PCL Laser Printer"
+msgstr "PCL 激光打印机"
+
+msgid "PRC16K"
+msgstr "16 开"
+
+msgid "PRC16K Long Edge"
+msgstr "长边缘 16 开"
+
+msgid "PRC32K"
+msgstr "32 开"
+
+msgid "PRC32K Long Edge"
+msgstr "长边缘 32 开"
+
+msgid "PRC32K Oversize"
+msgstr "超大 32 开"
+
+msgid "PRC32K Oversize Long Edge"
+msgstr "超大长边缘 32 开"
+
+msgid "Packet does not contain a Get-Response-PDU"
+msgstr "包裹中未包含 Get-Response-PDU"
+
+msgid "Packet does not start with SEQUENCE"
+msgstr "包裹未使用 SEQUENCE 开头"
+
+msgid "Paper"
+msgstr "纸张"
+
+msgid "Paper jam."
+msgstr "卡纸。"
+
+msgid "Paper tray is almost empty."
+msgstr "纸张即将耗尽。"
+
+msgid "Paper tray is empty."
+msgstr "纸槽已空。"
+
+msgid "Paper tray is missing."
+msgstr "纸槽缺失。"
+
+msgid "Parallel Fold"
+msgstr "并行折叠"
+
+msgid "ParamCustominCutInterval"
+msgstr "ParamCustominCutInterval"
+
+msgid "ParamCustominTearInterval"
+msgstr "ParamCustominTearInterval"
+
+#, c-format
+msgid "Password for %s on %s? "
+msgstr "请输入 %2$s 上 %1$s 的密码 "
+
+#, c-format
+msgid "Password for %s required to access %s via SAMBA: "
+msgstr "要通过 SAMBA 访问 %2$s,必须输入 %1$s 的密码:"
+
+msgid "Pause Class"
+msgstr "暂停类"
+
+msgid "Pause Printer"
+msgstr "暂停打印机"
+
+msgid "Peel-Off"
+msgstr "剥片"
+
+msgid "Permanent Labels"
+msgstr "永久标签"
+
+msgid "Photo"
+msgstr "照片"
+
+msgid "Photo Film"
+msgstr "照片胶卷"
+
+msgid "Photo Labels"
+msgstr "照片标签"
+
+msgid "Photo Paper"
+msgstr "照片纸"
+
+msgid "Photo Paper Plus Glossy II"
+msgstr "Photo Paper Plus Glossy II"
+
+msgid "Photo Paper Pro Platinum"
+msgstr "Photo Paper Pro Platinum"
+
+msgid "Plain Envelope"
+msgstr "普通信封"
+
+msgid "Plain Paper"
+msgstr "普通纸"
+
+msgid "Plastic"
+msgstr "塑料"
+
+msgid "Plastic Archival"
+msgstr "档案用塑料"
+
+msgid "Plastic Colored"
+msgstr "彩色塑料"
+
+msgid "Plastic Glossy"
+msgstr "光面塑料"
+
+msgid "Plastic High Gloss"
+msgstr "高光塑料"
+
+msgid "Plastic Matte"
+msgstr "雾面塑料"
+
+msgid "Plastic Satin"
+msgstr "缎面抛光塑料"
+
+msgid "Plastic Semi Gloss"
+msgstr "半光面塑料"
+
+msgid "Plate"
+msgstr "印刷板"
+
+msgid "Policies"
+msgstr "策略"
+
+msgid "Polyester"
+msgstr "聚酯"
+
+msgid "Port Monitor"
+msgstr "端口监视器"
+
+msgid "PostScript Printer"
+msgstr "PostScript 打印机"
+
+msgid "Postcard"
+msgstr "明信片"
+
+msgid "Postcard Double"
+msgstr "双面明信片"
+
+msgid "Postcard Double Long Edge"
+msgstr "超长边缘双面明信片"
+
+msgid "Postcard Long Edge"
+msgstr "超长边缘明信片"
+
+msgid "Poster Fold"
+msgstr "对折明信片"
+
+msgid "Pre Cut Tabs"
+msgstr "已裁剪标签"
+
+msgid "Premium Inkjet Paper"
+msgstr "高级喷墨纸"
+
+msgid "Premium Photo Glossy Paper"
+msgstr "高级光面照片纸"
+
+msgid "Premium Presentation Matte Paper"
+msgstr "高级雾面展示用纸"
+
+msgid "Preparing to print."
+msgstr "正在准备打印。"
+
+msgid "Preprinted Envelope"
+msgstr "预打印信封"
+
+msgid "Preprinted Paper"
+msgstr "预打印纸"
+
+msgid "Print Density"
+msgstr "打印密度"
+
+msgid "Print Job:"
+msgstr "打印任务:"
+
+msgid "Print Mode"
+msgstr "打印模式"
+
+msgid "Print Quality"
+msgstr "打印质量"
+
+msgid "Print Rate"
+msgstr "打印频率"
+
+msgid "Print Self-Test Page"
+msgstr "打印自检页"
+
+msgid "Print Speed"
+msgstr "打印速度"
+
+msgid "Print Test Page"
+msgstr "打印测试页"
+
+msgid "Print and Cut"
+msgstr "打印和裁剪"
+
+msgid "Print and Tear"
+msgstr "打印和撕纸"
+
+msgid "Print file sent."
+msgstr "已发送打印文件。"
+
+msgid "Print job canceled at printer."
+msgstr "打印任务在打印机端被取消。"
+
+msgid "Print job too large."
+msgstr "打印任务太大。"
+
+msgid "Print job was not accepted."
+msgstr "打印任务被拒绝。"
+
+#, c-format
+msgid "Printer \"%s\" already exists."
+msgstr "打印机“%s”已存在。"
+
+msgid "Printer Added"
+msgstr "已添加打印机"
+
+msgid "Printer Default"
+msgstr "打印机默认值"
+
+msgid "Printer Deleted"
+msgstr "已删除打印机"
+
+msgid "Printer Modified"
+msgstr "已编辑打印机"
+
+msgid "Printer Paused"
+msgstr "打印机已暂停"
+
+msgid "Printer Settings"
+msgstr "打印机设置"
+
+msgid "Printer cannot print supplied content."
+msgstr "打印机无法打印所提供的内容。"
+
+msgid "Printer cannot print with supplied options."
+msgstr "打印机无法使用所提供的选项打印。"
+
+msgid "Printer does not support required IPP attributes or document formats."
+msgstr "打印机不支持必要的 IPP 属性或文档格式。"
+
+msgid "Printer:"
+msgstr "打印机:"
+
+msgid "Printers"
+msgstr "打印机"
+
+#, c-format
+msgid "Printing page %d, %u%% complete."
+msgstr "正在打印第 %d 页,已完成 %u%%。"
+
+msgid "Punch"
+msgstr "冲压"
+
+msgid "Punched Paper"
+msgstr "打孔纸"
+
+msgid "Quarto"
+msgstr "四开"
+
+msgid "Quota limit reached."
+msgstr "已达到限额上限。"
+
+# Bug report to be opened at upstream:
+# - Not using Tab for formatting.
+# - Will mess up on CJK and double-width environments.
+msgid "Rank Owner Job File(s) Total Size"
+msgstr "排序 所有者 任务 文件 总大小"
+
+msgid "Rear"
+msgstr "后部"
+
+msgid "Rear Tray"
+msgstr "后部纸盘"
+
+msgid "Reject Jobs"
+msgstr "拒绝任务"
+
+#, c-format
+msgid "Remote host did not accept control file (%d)."
+msgstr "远程主机未接受控制文件(%d)。"
+
+#, c-format
+msgid "Remote host did not accept data file (%d)."
+msgstr "远程主机未接受数据文件(%d)。"
+
+msgid "Reprint After Error"
+msgstr "错误后重新打印"
+
+msgid "Request Entity Too Large"
+msgstr "请求的条目过大"
+
+msgid "Resolution"
+msgstr "分辨率"
+
+msgid "Resume Class"
+msgstr "继续类"
+
+msgid "Resume Printer"
+msgstr "继续打印机"
+
+msgid "Return Address"
+msgstr "返回地址"
+
+msgid "Rewind"
+msgstr "回退"
+
+msgid "Right"
+msgstr "右"
+
+msgid "Right Gate Fold"
+msgstr "右对开页"
+
+msgid "Right Tray"
+msgstr "右部纸盘"
+
+msgid "Roll"
+msgstr "滚筒"
+
+msgid "Roll 1"
+msgstr "滚筒 1"
+
+msgid "Roll 10"
+msgstr "滚筒 10"
+
+msgid "Roll 2"
+msgstr "滚筒 2"
+
+msgid "Roll 3"
+msgstr "滚筒 3"
+
+msgid "Roll 4"
+msgstr "滚筒 4"
+
+msgid "Roll 5"
+msgstr "滚筒 5"
+
+msgid "Roll 6"
+msgstr "滚筒 6"
+
+msgid "Roll 7"
+msgstr "滚筒 7"
+
+msgid "Roll 8"
+msgstr "滚筒 8"
+
+msgid "Roll 9"
+msgstr "滚筒 9"
+
+#, c-format
+msgid "Running command: %s %s -N -A %s -c '%s'"
+msgstr "正在运行命令:%s %s -N -A %s -c '%s'"
+
+msgid "SEQUENCE uses indefinite length"
+msgstr "SEQUENCE 使用不定长度"
+
+msgid "SSL/TLS Negotiation Error"
+msgstr "SSL/TLS 协商错误"
+
+msgid "Saddle Stitch"
+msgstr "骑马订装"
+
+msgid "Satin Labels"
+msgstr "缎面抛光标签"
+
+msgid "Satin Optical Disc"
+msgstr "缎面抛光光盘"
+
+msgid "Satin Photo Paper"
+msgstr "缎面抛光照片纸"
+
+msgid "Screen"
+msgstr "网印"
+
+msgid "Screen Paged"
+msgstr "网印分页"
+
+msgid "Security Labels"
+msgstr "安全标签"
+
+msgid "See Other"
+msgstr "查看其他"
+
+msgid "See remote printer."
+msgstr "查看远程打印机。"
+
+msgid "Self Adhesive"
+msgstr "自粘合"
+
+msgid "Self Adhesive Film"
+msgstr "自粘合胶片"
+
+msgid "Self-signed credentials are blocked."
+msgstr "禁止使用自签发的凭据。"
+
+msgid "Semi-Gloss Fabric"
+msgstr "半光面编织物"
+
+msgid "Semi-Gloss Labels"
+msgstr "半光面标签"
+
+msgid "Semi-Gloss Optical Disc"
+msgstr "半光面光盘"
+
+msgid "Semi-Gloss Photo Paper"
+msgstr "半光面照片纸"
+
+msgid "Sending data to printer."
+msgstr "正在向打印机发送数据。"
+
+msgid "Server Restarted"
+msgstr "服务器已重启"
+
+msgid "Server Security Auditing"
+msgstr "服务器安全审计"
+
+msgid "Server Started"
+msgstr "服务器已启动"
+
+msgid "Server Stopped"
+msgstr "服务器已停止"
+
+msgid "Server credentials not set."
+msgstr "未设置服务器凭据。"
+
+msgid "Service Unavailable"
+msgstr "服务不可用"
+
+msgid "Set Allowed Users"
+msgstr "设置允许的用户"
+
+msgid "Set As Server Default"
+msgstr "设置为服务器默认值"
+
+msgid "Set Class Options"
+msgstr "设置类选项"
+
+msgid "Set Printer Options"
+msgstr "设置打印机选项"
+
+msgid "Set Publishing"
+msgstr "设置出版"
+
+msgid "Shipping Address"
+msgstr "邮寄地址"
+
+msgid "Short-Edge (Landscape)"
+msgstr "短边缘(水平)"
+
+msgid "Shrink Foil"
+msgstr "热缩铝箔"
+
+msgid "Side"
+msgstr "侧面"
+
+msgid "Side Tray"
+msgstr "侧面纸盘"
+
+msgid "Single Face"
+msgstr "单面"
+
+msgid "Single Punch (Landscape)"
+msgstr "单孔冲压(水平)"
+
+msgid "Single Punch (Portrait)"
+msgstr "单孔冲压(垂直)"
+
+msgid "Single Punch (Reverse Landscape)"
+msgstr "单孔冲压(反向水平)"
+
+msgid "Single Punch (Reverse Portrait)"
+msgstr "单孔冲压(反向垂直)"
+
+msgid "Single Staple (Landscape)"
+msgstr "单钉装(水平)"
+
+msgid "Single Staple (Portrait)"
+msgstr "单钉装(垂直)"
+
+msgid "Single Staple (Reverse Landscape)"
+msgstr "单钉装(反向水平)"
+
+msgid "Single Staple (Reverse Portrait)"
+msgstr "单钉装(反向垂直)"
+
+msgid "Single Wall Cardboard"
+msgstr "单层纸板"
+
+msgid "Sleeve"
+msgstr "套筒"
+
+msgid "Special Paper"
+msgstr "特殊纸张"
+
+#, c-format
+msgid "Spooling job, %.0f%% complete."
+msgstr "正在转存任务,已完成 %.0f%%。"
+
+msgid "Stacker 1"
+msgstr "摞纸器 1"
+
+msgid "Stacker 10"
+msgstr "摞纸器 10"
+
+msgid "Stacker 2"
+msgstr "摞纸器 2"
+
+msgid "Stacker 3"
+msgstr "摞纸器 3"
+
+msgid "Stacker 4"
+msgstr "摞纸器 4"
+
+msgid "Stacker 5"
+msgstr "摞纸器 5"
+
+msgid "Stacker 6"
+msgstr "摞纸器 6"
+
+msgid "Stacker 7"
+msgstr "摞纸器 7"
+
+msgid "Stacker 8"
+msgstr "摞纸器 8"
+
+msgid "Stacker 9"
+msgstr "摞纸器 9"
+
+msgid "Standard"
+msgstr "标准"
+
+msgid "Staple"
+msgstr "装订"
+
+msgid "Staple Edge"
+msgstr "装订边缘"
+
+msgid "Staple Edge (Landscape)"
+msgstr "装订边缘(水平)"
+
+msgid "Staple Edge (Portrait)"
+msgstr "装订边缘(垂直)"
+
+msgid "Staple Edge (Reverse Landscape)"
+msgstr "装订边缘(反向水平)"
+
+msgid "Staple Edge (Reverse Portrait)"
+msgstr "装订边缘(反向垂直)"
+
+#. TRANSLATORS: Banner/cover sheet before the print job.
+msgid "Starting Banner"
+msgstr "起始横幅"
+
+#, c-format
+msgid "Starting page %d."
+msgstr "正在开始第 %d 页。"
+
+msgid "Statement"
+msgstr "声明"
+
+#, c-format
+msgid "Subscription #%d does not exist."
+msgstr "订阅 #%d 不存在。"
+
+msgid "Substitutions:"
+msgstr "替代:"
+
+msgid "Super A"
+msgstr "超大 A"
+
+msgid "Super B"
+msgstr "超大 B"
+
+msgid "Super B/A3"
+msgstr "超大 B/A3"
+
+msgid "Switching Protocols"
+msgstr "正在切换协议"
+
+msgid "Tab Stock"
+msgstr "重磅标签"
+
+msgid "Tabloid"
+msgstr "大幅面"
+
+msgid "Tabloid Oversize"
+msgstr "超大幅面"
+
+msgid "Tabloid Oversize Long Edge"
+msgstr "超大幅面长边缘"
+
+msgid "Tear"
+msgstr "撕纸"
+
+msgid "Tear-Off"
+msgstr "撕纸"
+
+msgid "Tear-Off Adjust Position"
+msgstr "调整撕纸位置"
+
+#, c-format
+msgid "The \"%s\" attribute is required for print jobs."
+msgstr "打印任务必须带有“%s”属性。"
+
+#, c-format
+msgid "The %s attribute cannot be provided with job-ids."
+msgstr "属性 %s 不能和 job-id 一同提供。"
+
+#, c-format
+msgid ""
+"The '%s' Job Status attribute cannot be supplied in a job creation request."
+msgstr "任务状态属性“%s”不能与任务创建请求一同提供。"
+
+#, c-format
+msgid ""
+"The '%s' operation attribute cannot be supplied in a Create-Job request."
+msgstr "操作属性“%s”不能与 Create-Job 请求一同提供。"
+
+#, c-format
+msgid "The PPD file \"%s\" could not be found."
+msgstr "找不到 PPD 文件“%s”。"
+
+#, c-format
+msgid "The PPD file \"%s\" could not be opened: %s"
+msgstr "无法打开 PPD 文件“%s”:%s"
+
+msgid "The PPD file could not be opened."
+msgstr "无法打开 PPD 文件。"
+
+msgid ""
+"The class name may only contain up to 127 printable characters and may not "
+"contain spaces, slashes (/), or the pound sign (#)."
+msgstr "类名最多可包含 127 可打印字符,不能包含空格、斜杠(/)或井号(#)。"
+
+msgid "The developer unit needs to be replaced."
+msgstr "显影单元需替换。"
+
+msgid "The developer unit will need to be replaced soon."
+msgstr "显影单元最近需替换。"
+
+msgid "The fuser's temperature is high."
+msgstr "熔凝器温度高。"
+
+msgid "The fuser's temperature is low."
+msgstr "熔凝器温度低。"
+
+msgid ""
+"The notify-lease-duration attribute cannot be used with job subscriptions."
+msgstr "notify-lease-duration 属性不可用于任务订阅。"
+
+#, c-format
+msgid "The notify-user-data value is too large (%d > 63 octets)."
+msgstr "notify-user-data 值过大(%d > 63 八位值)。"
+
+msgid "The optical photoconductor needs to be replaced."
+msgstr "光导元件需替换。"
+
+msgid "The optical photoconductor will need to be replaced soon."
+msgstr "光导元件最近需替换。"
+
+msgid "The printer configuration is incorrect or the printer no longer exists."
+msgstr "打印机配置不正确或打印机已不存在。"
+
+msgid "The printer did not respond."
+msgstr "打印机无响应。"
+
+msgid "The printer is in use."
+msgstr "打印机正在使用中。"
+
+msgid "The printer is low on ink."
+msgstr "打印机墨水即将耗尽。"
+
+msgid "The printer is low on toner."
+msgstr "打印机墨粉即将耗尽。"
+
+msgid "The printer is not connected."
+msgstr "打印机未连接。"
+
+msgid "The printer is not responding."
+msgstr "打印机无响应。"
+
+msgid "The printer is now connected."
+msgstr "打印机已连接。"
+
+msgid "The printer is now online."
+msgstr "打印机在线。"
+
+msgid "The printer is offline."
+msgstr "打印机离线。"
+
+msgid "The printer is unreachable at this time."
+msgstr "打印机暂时无法访问。"
+
+msgid "The printer may be out of ink."
+msgstr "打印机墨水可能已耗尽。"
+
+msgid "The printer may be out of toner."
+msgstr "打印机墨粉可能已耗尽。"
+
+msgid "The printer may not exist or is unavailable at this time."
+msgstr "打印机暂时不存在或不可用。"
+
+msgid ""
+"The printer name may only contain up to 127 printable characters and may not "
+"contain spaces, slashes (/), or the pound sign (#)."
+msgstr ""
+"打印机名称最多可包含 127 可打印字符,不能包含空格、斜杠(/)或井号(#)。"
+
+msgid "The printer or class does not exist."
+msgstr "打印机或类不存在。"
+
+msgid "The printer or class is not shared."
+msgstr "打印机或类未共享。"
+
+msgid "The printer's cover is open."
+msgstr "打印机盖被打开。"
+
+msgid "The printer's door is open."
+msgstr "打印机门被打开。"
+
+msgid "The printer's interlock is open."
+msgstr "打印机联锁被打开。"
+
+msgid "The printer's waste bin is almost full."
+msgstr "打印机的废纸篓即将占满。"
+
+msgid "The printer's waste bin is full."
+msgstr "打印机的废纸篓已满。"
+
+#, c-format
+msgid "The printer-uri \"%s\" contains invalid characters."
+msgstr "printer-uri“%s”包含无效字符。"
+
+msgid "The printer-uri attribute is required."
+msgstr "必须提供 printer-uri 属性。"
+
+msgid ""
+"The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"."
+msgstr "printer-uri 必须使用如下格式:“ipp://HOSTNAME/classes/CLASSNAME”。"
+
+msgid ""
+"The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"."
+msgstr "printer-uri 必须使用如下格式:“ipp://HOSTNAME/printers/PRINTERNAME”。"
+
+msgid ""
+"The subscription name may not contain spaces, slashes (/), question marks "
+"(?), or the pound sign (#)."
+msgstr "订阅名称不得包含空格,斜杠(/),问号(?)或井号(#)。"
+
+msgid ""
+"The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to "
+"enable it."
+msgstr "网页界面当前被禁用。运行“cupsctl WebInterface=yes”来启用。"
+
+#, c-format
+msgid "The which-jobs value \"%s\" is not supported."
+msgstr "不支持的 which-jobs 值“%s”。"
+
+msgid "There are too many subscriptions."
+msgstr "订阅过多。"
+
+msgid "There was an unrecoverable USB error."
+msgstr "遇到了不可恢复的 USB 错误。"
+
+msgid "Thermal Transfer Media"
+msgstr "热敏介质"
+
+msgid "Too many active jobs."
+msgstr "活动任务过多。"
+
+#, c-format
+msgid "Too many job-sheets values (%d > 2)."
+msgstr "job-sheets 值过多(%d > 2)。"
+
+#, c-format
+msgid "Too many printer-state-reasons values (%d > %d)."
+msgstr "printer-state-reasons 值过多(%d > %d)。"
+
+msgid "Top"
+msgstr "顶部"
+
+msgid "Top Tray"
+msgstr "顶部纸盘"
+
+msgid "Tractor"
+msgstr "墨辊"
+
+msgid "Transfer"
+msgstr "传输"
+
+msgid "Transparency"
+msgstr "透明度"
+
+msgid "Tray"
+msgstr "托盘"
+
+msgid "Tray 1"
+msgstr "托盘 1"
+
+msgid "Tray 10"
+msgstr "托盘 10"
+
+msgid "Tray 11"
+msgstr "托盘 11"
+
+msgid "Tray 12"
+msgstr "托盘 12"
+
+msgid "Tray 13"
+msgstr "托盘 13"
+
+msgid "Tray 14"
+msgstr "托盘 14"
+
+msgid "Tray 15"
+msgstr "托盘 15"
+
+msgid "Tray 16"
+msgstr "托盘 16"
+
+msgid "Tray 17"
+msgstr "托盘 17"
+
+msgid "Tray 18"
+msgstr "托盘 18"
+
+msgid "Tray 19"
+msgstr "托盘 19"
+
+msgid "Tray 2"
+msgstr "托盘 2"
+
+msgid "Tray 20"
+msgstr "托盘 20"
+
+msgid "Tray 3"
+msgstr "托盘 3"
+
+msgid "Tray 4"
+msgstr "托盘 4"
+
+msgid "Tray 5"
+msgstr "托盘 5"
+
+msgid "Tray 6"
+msgstr "托盘 6"
+
+msgid "Tray 7"
+msgstr "托盘 7"
+
+msgid "Tray 8"
+msgstr "托盘 8"
+
+msgid "Tray 9"
+msgstr "托盘 9"
+
+msgid "Triple Staple (Landscape)"
+msgstr "三钉装(水平)"
+
+msgid "Triple Staple (Portrait)"
+msgstr "三钉装(垂直)"
+
+msgid "Triple Staple (Reverse Landscape)"
+msgstr "三钉装(反向水平)"
+
+msgid "Triple Staple (Reverse Portrait)"
+msgstr "三钉装(反向垂直)"
+
+msgid "Triple Wall Cardboard"
+msgstr "三层纸板"
+
+msgid "Trust on first use is disabled."
+msgstr "初次使用信任已禁用。"
+
+msgid "URI Too Long"
+msgstr "URI 过长"
+
+msgid "URI too large"
+msgstr "URI 过大"
+
+msgid "US Ledger"
+msgstr "US Ledger"
+
+msgid "US Legal"
+msgstr "US Legal"
+
+msgid "US Legal Oversize"
+msgstr "超大 US Legal"
+
+msgid "US Letter"
+msgstr "US Letter"
+
+msgid "US Letter Long Edge"
+msgstr "长边缘 US Letter"
+
+msgid "US Letter Oversize"
+msgstr "超大 US Letter"
+
+msgid "US Letter Oversize Long Edge"
+msgstr "超大长边缘 US Letter"
+
+msgid "US Letter Small"
+msgstr "小型 US Letter"
+
+msgid "Unable to access cupsd.conf file"
+msgstr "无法访问 cupsd.conf 文件。"
+
+msgid "Unable to access help file."
+msgstr "无法访问帮助文件。"
+
+msgid "Unable to add RSS subscription"
+msgstr "无法添加 RSS 订阅"
+
+msgid "Unable to add class"
+msgstr "无法添加类"
+
+msgid "Unable to add document to print job."
+msgstr "无法向打印任务添加文档。"
+
+#, c-format
+msgid "Unable to add job for destination \"%s\"."
+msgstr "无法向目标“%s”添加任务。"
+
+msgid "Unable to add printer"
+msgstr "无法添加打印机"
+
+msgid "Unable to allocate memory for file types."
+msgstr "无法为文件类型分配内存。"
+
+msgid "Unable to allocate memory for page info"
+msgstr "无法为页面信息分配内存"
+
+msgid "Unable to allocate memory for pages array"
+msgstr "无法为页面组分配内存"
+
+msgid "Unable to cancel RSS subscription"
+msgstr "无法取消 RSS 订阅"
+
+msgid "Unable to cancel print job."
+msgstr "无法取消打印任务。"
+
+msgid "Unable to change printer"
+msgstr "无法更换打印机"
+
+msgid "Unable to change printer-is-shared attribute"
+msgstr "无法更改 printer-is-shared 属性"
+
+msgid "Unable to change server settings"
+msgstr "无法更改服务器选项"
+
+#, c-format
+msgid "Unable to compile mimeMediaType regular expression: %s."
+msgstr "无法编译 mimeMediaType 正则表达式:%s。"
+
+#, c-format
+msgid "Unable to compile naturalLanguage regular expression: %s."
+msgstr "无法编译 naturalLanguage 正则表达式:%s。"
+
+msgid "Unable to configure printer options."
+msgstr "无法配置打印机选项。"
+
+msgid "Unable to connect to host."
+msgstr "无法连接主机。"
+
+msgid "Unable to contact printer, queuing on next printer in class."
+msgstr "无法联系打印机,已列队于类中的下一台打印机。"
+
+#, c-format
+msgid "Unable to copy 64-bit CUPS printer driver files (%d)."
+msgstr "无法复制 64 位 CUPS 打印机驱动文件(%d)。"
+
+#, c-format
+msgid "Unable to copy 64-bit Windows printer driver files (%d)."
+msgstr "无法复制 64 位 Windows 打印机驱动文件(%d)。"
+
+#, c-format
+msgid "Unable to copy CUPS printer driver files (%d)."
+msgstr "无法复制 CUPS 打印机驱动文件(%d)。"
+
+#, c-format
+msgid "Unable to copy PPD file - %s"
+msgstr "无法复制 PPD 文件 — %s"
+
+msgid "Unable to copy PPD file."
+msgstr "无法复制 PPD 文件。"
+
+#, c-format
+msgid "Unable to copy Windows 2000 printer driver files (%d)."
+msgstr "无法复制 Windows 2000 打印机驱动文件(%d)。"
+
+#, c-format
+msgid "Unable to copy Windows 9x printer driver files (%d)."
+msgstr "无法复制 Windows 9x 打印机驱动文件(%d)。"
+
+msgid "Unable to create credentials from array."
+msgstr "无法从打印组创建服务器凭据。"
+
+msgid "Unable to create printer-uri"
+msgstr "无法创建 printer-uri。"
+
+msgid "Unable to create printer."
+msgstr "无法创建打印机。"
+
+msgid "Unable to create server credentials."
+msgstr "无法创建服务器凭据。"
+
+msgid "Unable to create temporary file"
+msgstr "无法创建临时文件"
+
+msgid "Unable to delete class"
+msgstr "无法删除类"
+
+msgid "Unable to delete printer"
+msgstr "无法删除打印机"
+
+msgid "Unable to do maintenance command"
+msgstr "无法执行维护命令"
+
+msgid "Unable to edit cupsd.conf files larger than 1MB"
+msgstr "无法编辑大小超过 1MB 的 cupsd.conf 文件"
+
+msgid ""
+"Unable to establish a secure connection to host (certificate chain invalid)."
+msgstr "无法建立到主机的安全连接(无效证书链)。"
+
+msgid ""
+"Unable to establish a secure connection to host (certificate not yet valid)."
+msgstr "无法建立到主机的安全连接(证书尚未生效)。"
+
+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 "无法建立到主机的安全连接(主机名不匹配)。"
+
+msgid ""
+"Unable to establish a secure connection to host (peer dropped connection "
+"before responding)."
+msgstr "无法建立到主机的安全连接(对方在回复前断开连接)。"
+
+msgid ""
+"Unable to establish a secure connection to host (self-signed certificate)."
+msgstr "无法建立到主机的安全连接(自签发证书)。"
+
+msgid ""
+"Unable to establish a secure connection to host (untrusted certificate)."
+msgstr "无法建立到主机的安全连接(未信任的证书)。"
+
+msgid "Unable to establish a secure connection to host."
+msgstr "无法建立到主机的安全连接。"
+
+msgid "Unable to find destination for job"
+msgstr "找不到任务目的地"
+
+msgid "Unable to find printer."
+msgstr "找不到打印机。"
+
+msgid "Unable to find server credentials."
+msgstr "找不到服务器凭据。"
+
+msgid "Unable to get backend exit status."
+msgstr "无法获取后端退出状态。"
+
+msgid "Unable to get class list"
+msgstr "无法获取类列表"
+
+msgid "Unable to get class status"
+msgstr "无法获取类状态"
+
+msgid "Unable to get list of printer drivers"
+msgstr "无法获取打印机驱动列表"
+
+msgid "Unable to get printer attributes"
+msgstr "无法获取打印机属性"
+
+msgid "Unable to get printer list"
+msgstr "无法获取打印机列表"
+
+msgid "Unable to get printer status"
+msgstr "无法获取打印机状态"
+
+msgid "Unable to get printer status."
+msgstr "无法获取打印机状态。"
+
+#, c-format
+msgid "Unable to install Windows 2000 printer driver files (%d)."
+msgstr "无法安装 Windows 2000 打印机驱动文件(%d)。"
+
+#, c-format
+msgid "Unable to install Windows 9x printer driver files (%d)."
+msgstr "无法安装 Windows 9x 打印机驱动文件(%d)。"
+
+msgid "Unable to load help index."
+msgstr "无法载入帮助索引。"
+
+#, c-format
+msgid "Unable to locate printer \"%s\"."
+msgstr "无法定位打印机“%s”。"
+
+msgid "Unable to locate printer."
+msgstr "无法定位打印机。"
+
+msgid "Unable to modify class"
+msgstr "无法编辑类"
+
+msgid "Unable to modify printer"
+msgstr "无法编辑打印机"
+
+msgid "Unable to move job"
+msgstr "无法移动任务"
+
+msgid "Unable to move jobs"
+msgstr "无法移动任务"
+
+msgid "Unable to open PPD file"
+msgstr "无法打开 PPD 文件"
+
+msgid "Unable to open cupsd.conf file:"
+msgstr "无法打开 cupsd.conf 文件:"
+
+msgid "Unable to open device file"
+msgstr "无法打开设备文件"
+
+#, c-format
+msgid "Unable to open document #%d in job #%d."
+msgstr "无法打开任务 #%2$d 中的文档 #%1$d。"
+
+msgid "Unable to open help file."
+msgstr "无法打开帮助文件。"
+
+msgid "Unable to open print file"
+msgstr "无法打开打印文件"
+
+msgid "Unable to open raster file"
+msgstr "无法打开栅格文件"
+
+msgid "Unable to print test page"
+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。"
+
+#, c-format
+msgid "Unable to run \"%s\": %s"
+msgstr "无法运行“%s”:%s"
+
+# "Unable to read file" perhaps?
+msgid "Unable to see in file"
+msgstr "无法读取文件"
+
+msgid "Unable to send command to printer driver"
+msgstr "无法向打印机驱动发送命令"
+
+msgid "Unable to send data to printer."
+msgstr "无法向打印机发送数据。"
+
+#, c-format
+msgid "Unable to set Windows printer driver (%d)."
+msgstr "无法设置 Windows 打印机驱动(%d)。"
+
+msgid "Unable to set options"
+msgstr "无法设置选项"
+
+msgid "Unable to set server default"
+msgstr "无法设置服务器默认值"
+
+msgid "Unable to start backend process."
+msgstr "无法启动后端进程。"
+
+msgid "Unable to upload cupsd.conf file"
+msgstr "无法上传 cupsd.conf 文件"
+
+msgid "Unable to use legacy USB class driver."
+msgstr "无法使用老式 USB 类驱动。"
+
+msgid "Unable to write print data"
+msgstr "无法写入打印数据"
+
+#, c-format
+msgid "Unable to write uncompressed print data: %s"
+msgstr "无法写入已解包的打印数据:%s"
+
+msgid "Unauthorized"
+msgstr "未认证"
+
+msgid "Units"
+msgstr "单元"
+
+msgid "Unknown"
+msgstr "未知"
+
+#, c-format
+msgid "Unknown choice \"%s\" for option \"%s\"."
+msgstr "选项“%2$s”带有未知选择“%1$s”。"
+
+#, c-format
+msgid "Unknown encryption option value: \"%s\"."
+msgstr "未知加密选项值:“%s”。"
+
+#, c-format
+msgid "Unknown file order: \"%s\"."
+msgstr "未知文件排序:“%s”。"
+
+#, c-format
+msgid "Unknown format character: \"%c\"."
+msgstr "未知格式字符:“%c”。"
+
+msgid "Unknown hash algorithm."
+msgstr "未知哈希值算法。"
+
+msgid "Unknown media size name."
+msgstr "未知介质尺寸名。"
+
+#, c-format
+msgid "Unknown option \"%s\" with value \"%s\"."
+msgstr "带有值“%2$s”的未知选项“%1$s”。"
+
+#, c-format
+msgid "Unknown option \"%s\"."
+msgstr "未知选项“%s”。"
+
+#, c-format
+msgid "Unknown print mode: \"%s\"."
+msgstr "未知打印模式:“%s”。"
+
+#, c-format
+msgid "Unknown printer-error-policy \"%s\"."
+msgstr "未知 printer-error-policy“%s”。"
+
+#, c-format
+msgid "Unknown printer-op-policy \"%s\"."
+msgstr "未知 printer-op-policy“%s”。"
+
+msgid "Unknown request method."
+msgstr "未知请求方式。"
+
+msgid "Unknown request version."
+msgstr "未知请求版本。"
+
+msgid "Unknown scheme in URI"
+msgstr "URI 中含有未知方案"
+
+msgid "Unknown service name."
+msgstr "未知服务名称。"
+
+#, c-format
+msgid "Unknown version option value: \"%s\"."
+msgstr "未知版本选项值:“%s”。"
+
+#, c-format
+msgid "Unsupported 'compression' value \"%s\"."
+msgstr "不支持的“compression”值“%s”。"
+
+#, c-format
+msgid "Unsupported 'document-format' value \"%s\"."
+msgstr "不支持的“document-format”值“%s”。"
+
+msgid "Unsupported 'job-name' value."
+msgstr "不支持的“job-name”值。"
+
+#, c-format
+msgid "Unsupported character set \"%s\"."
+msgstr "不支持的字符集“%s”。"
+
+#, c-format
+msgid "Unsupported compression \"%s\"."
+msgstr "不支持的压缩算法“%s”。"
+
+#, c-format
+msgid "Unsupported document-format \"%s\"."
+msgstr "不支持的 document-format“%s”。"
+
+#, c-format
+msgid "Unsupported document-format \"%s/%s\"."
+msgstr "不支持的 document-format“%s/%s”。"
+
+#, c-format
+msgid "Unsupported format \"%s\"."
+msgstr "不支持的格式“%s”。"
+
+msgid "Unsupported margins."
+msgstr "不支持的边界。"
+
+msgid "Unsupported media value."
+msgstr "不支持的介质值。"
+
+#, c-format
+msgid "Unsupported number-up value %d, using 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。"
+
+#, c-format
+msgid "Unsupported page-border value %s, using page-border=none."
+msgstr "不支持的 page-border 值 %s,将使用 page-border=none。"
+
+msgid "Unsupported raster data."
+msgstr "不支持的栅格化数据。"
+
+msgid "Unsupported value type"
+msgstr "不支持的值类型"
+
+msgid "Upgrade Required"
+msgstr "需要升级"
+
+msgid ""
+"Usage:\n"
+"\n"
+" lpadmin [-h server] -d destination\n"
+" lpadmin [-h server] -x destination\n"
+" lpadmin [-h server] -p printer [-c add-class] [-i interface] [-m model]\n"
+" [-r remove-class] [-v device] [-D description]\n"
+" [-P ppd-file] [-o name=value]\n"
+" [-u allow:user,user] [-u deny:user,user]"
+msgstr ""
+"用法:\n"
+"\n"
+" lpadmin [-h 服务器] -d 目标\n"
+" lpadmin [-h 服务器] -x 目标\n"
+" lpadmin [-h 服务器] -p 打印机 [-c add-class] [-i interface] [-m model]\n"
+" [-r remove-class] [-v device] [-D description]\n"
+" [-P ppd-file] [-o name=value]\n"
+" [-u allow:user,user] [-u deny:user,user]"
+
+#, c-format
+msgid "Usage: %s job-id user title copies options [file]"
+msgstr "用法:%s job-id user title copies options [file]"
+
+msgid "Usage: cupsaddsmb [options] printer1 ... printerN"
+msgstr "用法:cupsaddsmb [options] printer1 ... printerN"
+
+msgid "Usage: cupsctl [options] [param=value ... paramN=valueN]"
+msgstr "用法:cupsctl [options] [param=value ... paramN=valueN]"
+
+msgid "Usage: cupsd [options]"
+msgstr "用法:cupsd [options]"
+
+msgid "Usage: cupsfilter [ options ] [ -- ] filename"
+msgstr "用法:cupsfilter [ options ] [ -- ] filename"
+
+msgid "Usage: cupstestdsc [options] filename.ps [... filename.ps]"
+msgstr "用法:cupstestdsc [options] filename.ps [... filename.ps]"
+
+msgid ""
+"Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]"
+msgstr ""
+"用法:cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]"
+
+msgid ""
+"Usage: ippfind [options] regtype[,subtype][.domain.] ... [expression]\n"
+" ippfind [options] name[.regtype[.domain.]] ... [expression]\n"
+" ippfind --help\n"
+" ippfind --version"
+msgstr ""
+"用法:\tippfind [options] regtype[,subtype][.domain.] ... [expression]\n"
+" \tippfind [options] name[.regtype[.domain.]] ... [expression]\n"
+" \tippfind --help\n"
+" \tippfind --version"
+
+msgid "Usage: ipptool [options] URI filename [ ... filenameN ]"
+msgstr "用法:ipptool [options] URI filename [ ... filenameN ]"
+
+msgid "Usage: lpmove job/src dest"
+msgstr "用法:lpmove job/src dest"
+
+msgid ""
+"Usage: lpoptions [-h server] [-E] -d printer\n"
+" lpoptions [-h server] [-E] [-p printer] -l\n"
+" lpoptions [-h server] [-E] -p printer -o option[=value] ...\n"
+" lpoptions [-h server] [-E] -x printer"
+msgstr ""
+"用法:\tlpoptions [-h server] [-E] -d printer\n"
+" \tlpoptions [-h server] [-E] [-p printer] -l\n"
+" \tlpoptions [-h server] [-E] -p printer -o option[=value] ...\n"
+" \tlpoptions [-h server] [-E] -x printer"
+
+msgid ""
+"Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]"
+msgstr ""
+"用法:lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]"
+
+msgid "Usage: ppdc [options] filename.drv [ ... filenameN.drv ]"
+msgstr "用法:ppdc [options] filename.drv [ ... filenameN.drv ]"
+
+msgid "Usage: ppdhtml [options] filename.drv >filename.html"
+msgstr "用法:ppdhtml [options] filename.drv >filename.html"
+
+msgid "Usage: ppdi [options] filename.ppd [ ... filenameN.ppd ]"
+msgstr "用法:ppdi [options] filename.ppd [ ... filenameN.ppd ]"
+
+msgid "Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]"
+msgstr "用法:ppdmerge [options] filename.ppd [ ... filenameN.ppd ]"
+
+msgid ""
+"Usage: ppdpo [options] -o filename.po filename.drv [ ... filenameN.drv ]"
+msgstr ""
+"用法:ppdpo [options] -o filename.po filename.drv [ ... filenameN.drv ]"
+
+msgid "Usage: snmp [host-or-ip-address]"
+msgstr "用法:snmp [host-or-ip-address]"
+
+msgid "Value uses indefinite length"
+msgstr "Value 使用不定长度"
+
+msgid "VarBind uses indefinite length"
+msgstr "VarBind 使用不定长度"
+
+msgid "Vellum Paper"
+msgstr "羊皮纸"
+
+msgid "Version uses indefinite length"
+msgstr "Version 使用不定长度"
+
+msgid "Waiting for job to complete."
+msgstr "正在等待任务完成。"
+
+msgid "Waiting for printer to become available."
+msgstr "正在等待打印机变得可用。"
+
+msgid "Waiting for printer to finish."
+msgstr "正在等待打印机完成任务。"
+
+msgid "Warning, no Windows 2000 printer drivers are installed."
+msgstr "警告,未安装 Windows 2000 打印机驱动。"
+
+msgid "Waterproof Fabric"
+msgstr "防水编织物"
+
+msgid "Web Interface is Disabled"
+msgstr "网页界面被禁用"
+
+msgid "Wet Film"
+msgstr "湿膜"
+
+msgid "Windowed Envelope"
+msgstr "透明信封"
+
+msgid "Yes"
+msgstr "是"
+
+#, c-format
+msgid ""
+"You must access this page using the URL <A HREF=\"https://%s:%d%s\">https://"
+"%s:%d%s</A>."
+msgstr ""
+"你必须通过此 URL 访问此页面:<A HREF=\"https://%s:%d%s\">https://%s:%d%s</A>."
+
+msgid "Z Fold"
+msgstr "Z 折"
+
+msgid "ZPL Label Printer"
+msgstr "ZPL 标签打印机"
+
+msgid "Zebra"
+msgstr "Zebra"
+
+msgid "aborted"
+msgstr "已中止"
+
+msgid "canceled"
+msgstr "已取消"
+
+msgid "completed"
+msgstr "已完成"
+
+msgid "cups-deviced failed to execute."
+msgstr "无法执行 cups-deviced。"
+
+msgid "cups-driverd failed to execute."
+msgstr "无法执行 cups-driverd。"
+
+#, c-format
+msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s"
+msgstr "cupsaddsmb:打印机“%s”无 PPD 文件 — %s"
+
+msgid "cupsctl: Cannot set Listen or Port directly."
+msgstr "cupsctl:无法直接设置 Listen 或 Port 值。"
+
+#, c-format
+msgid "cupsctl: Unable to connect to server: %s"
+msgstr "cupsctl:无法连接服务器:%s"
+
+#, c-format
+msgid "cupsctl: Unknown option \"%s\""
+msgstr "cupsctl:未知选项“%s”"
+
+#, c-format
+msgid "cupsctl: Unknown option \"-%c\""
+msgstr "cupsctl:未知选项“-%c”"
+
+msgid "cupsd: Expected config filename after \"-c\" option."
+msgstr "cupsd:“-c”选项后预期配置文件名。"
+
+msgid "cupsd: Expected cups-files.conf filename after \"-s\" option."
+msgstr "cupsd:“-s”选项后预期 cups-files.conf 文件名。"
+
+msgid "cupsd: On-demand support not compiled in, running in normal mode."
+msgstr "cupsd:未编译按需 (on-demand) 支持,使用一般模式运行。"
+
+msgid "cupsd: Relative cups-files.conf filename not allowed."
+msgstr "cupsd:不允许相对 cups-files.conf 文件名。"
+
+msgid "cupsd: Unable to get current directory."
+msgstr "cupsd:无法获取当前目录。"
+
+msgid "cupsd: Unable to get path to cups-files.conf file."
+msgstr "cupsd:无法获取 cups-files.conf 文件的路径。"
+
+#, c-format
+msgid "cupsd: Unknown argument \"%s\" - aborting."
+msgstr "cupsd:未知参数“%s”- 已中止。"
+
+#, c-format
+msgid "cupsd: Unknown option \"%c\" - aborting."
+msgstr "cupsd:未知选项“%c”- 已中止。"
+
+#, c-format
+msgid "cupsfilter: Invalid document number %d."
+msgstr "cupsfilter:无效文档数 %d。"
+
+#, c-format
+msgid "cupsfilter: Invalid job ID %d."
+msgstr "cupsfilter:无效任务 ID %d。"
+
+msgid "cupsfilter: Only one filename can be specified."
+msgstr "cupsfilter:只能指定一个文件名。"
+
+#, c-format
+msgid "cupsfilter: Unable to get job file - %s"
+msgstr "cupsfilter:无法获取任务文件 — %s"
+
+msgid "cupstestppd: The -q option is incompatible with the -v option."
+msgstr "cupstestppd:不能同时使用 -q 和 -v 选项。"
+
+msgid "cupstestppd: The -v option is incompatible with the -q option."
+msgstr "cupstestppd:不能同时使用 -v 和 -q 选项。"
+
+#, c-format
+msgid "device for %s/%s: %s"
+msgstr "用于 %s/%s 的设备:%s"
+
+#, c-format
+msgid "device for %s: %s"
+msgstr "用于 %s 的设备:%s"
+
+msgid "error-index uses indefinite length"
+msgstr "error-index 使用不定长度"
+
+msgid "error-status uses indefinite length"
+msgstr "error-status 使用不定长度"
+
+msgid "held"
+msgstr "保持"
+
+msgid "help\t\tGet help on commands."
+msgstr "帮助\t\t获取关于命令的帮助。"
+
+msgid "idle"
+msgstr "空闲"
+
+#, c-format
+msgid "ippfind: Bad regular expression: %s"
+msgstr "ippfind:无效的正则表达式:%s"
+
+msgid "ippfind: Cannot use --and after --or."
+msgstr "ippfind:不能在 --or 后使用 --and。"
+
+#, c-format
+msgid "ippfind: Expected key name after %s."
+msgstr "ippfind:在 %s 后预期键名。"
+
+#, c-format
+msgid "ippfind: Expected port range after %s."
+msgstr "ippfind:在 %s 后预期端口范围。"
+
+#, c-format
+msgid "ippfind: Expected program after %s."
+msgstr "ippfind:在 %s 后预期程序。"
+
+#, c-format
+msgid "ippfind: Expected semi-colon after %s."
+msgstr "ippfind:在 %s 后预期分号。"
+
+msgid "ippfind: Missing close brace in substitution."
+msgstr "ippfind:替换操作后缺少右花括号。"
+
+msgid "ippfind: Missing close parenthesis."
+msgstr "ippfind:缺少右括号。"
+
+msgid "ippfind: Missing expression before \"--and\"."
+msgstr "ippfind:“--and”前缺少表达式。"
+
+msgid "ippfind: Missing expression before \"--or\"."
+msgstr "ippfind:“--or”前缺少表达式。"
+
+#, c-format
+msgid "ippfind: Missing key name after %s."
+msgstr "ippfind:在 %s 后缺少键名。"
+
+msgid "ippfind: Missing open parenthesis."
+msgstr "ippfind:缺少左括号。"
+
+#, c-format
+msgid "ippfind: Missing program after %s."
+msgstr "ippfind:在 %s 后缺少程序。"
+
+#, c-format
+msgid "ippfind: Missing regular expression after %s."
+msgstr "ippfind:在 %s 后缺少正则表达式。"
+
+#, c-format
+msgid "ippfind: Missing semi-colon after %s."
+msgstr "ippfind:在 %s 后缺少分号。"
+
+msgid "ippfind: Out of memory."
+msgstr "ippfind:内存不足。"
+
+msgid "ippfind: Too many parenthesis."
+msgstr "ippfind:括号过多。"
+
+#, c-format
+msgid "ippfind: Unable to browse or resolve: %s"
+msgstr "ippfind:无法浏览或解析:%s"
+
+#, c-format
+msgid "ippfind: Unable to execute \"%s\": %s"
+msgstr "ippfind:无法执行“%s”:%s"
+
+#, c-format
+msgid "ippfind: Unable to use Bonjour: %s"
+msgstr "ippfind:无法使用 Bonjour:%s"
+
+#, c-format
+msgid "ippfind: Unknown variable \"{%s}\"."
+msgstr "ippfind:未知变量“{%s}”。"
+
+msgid "ipptool: \"-i\" and \"-n\" are incompatible with \"-P\" and \"-X\"."
+msgstr "ipptool:“-i”和“-n”不能与“-P”和“-X”混用。"
+
+#, c-format
+msgid "ipptool: Bad URI - %s."
+msgstr "ipptool:无效 URI — %s。"
+
+msgid "ipptool: Invalid seconds for \"-i\"."
+msgstr "ipptool:“-i”选项后指定的秒数无效。"
+
+msgid "ipptool: May only specify a single URI."
+msgstr "ipptool:只能指定一个 URI。"
+
+msgid "ipptool: Missing count for \"-n\"."
+msgstr "ipptool:“-n”选项后缺少数量。"
+
+msgid "ipptool: Missing filename for \"-f\"."
+msgstr "ipptool:“-f”选项后缺少文件名。"
+
+msgid "ipptool: Missing name=value for \"-d\"."
+msgstr "ipptool:“-d”选项后缺少 name=value 声明。"
+
+msgid "ipptool: Missing seconds for \"-i\"."
+msgstr "ipptool:“-i”选项后缺少秒数。"
+
+msgid "ipptool: URI required before test file."
+msgstr "ipptool:测试文件前需要 URI。"
+
+#, c-format
+msgid "ipptool: Unknown option \"-%c\"."
+msgstr "ipptool:未知选项“-%c”。"
+
+msgid "job-printer-uri attribute missing."
+msgstr "缺少 job-printer-uri 属性。"
+
+msgid "lpadmin: Class name can only contain printable characters."
+msgstr "lpadmin:类名中只能包含可打印字符。"
+
+#, c-format
+msgid "lpadmin: Expected PPD after \"-%c\" option."
+msgstr "lpadmin:“-%c”选项后预期 PPD。"
+
+msgid "lpadmin: Expected allow/deny:userlist after \"-u\" option."
+msgstr "lpadmin:“-u”选项后预期 allow/deny:userlist 表达式。"
+
+msgid "lpadmin: Expected class after \"-r\" option."
+msgstr "lpadmin:“-r”选项后预期类。"
+
+msgid "lpadmin: Expected class name after \"-c\" option."
+msgstr "lpadmin:“-c”选项后预期类名称。"
+
+msgid "lpadmin: Expected description after \"-D\" option."
+msgstr "lpadmin:“-D”选项后预期描述。"
+
+msgid "lpadmin: Expected device URI after \"-v\" option."
+msgstr "lpadmin:“-v”选项后预期设备 URI。"
+
+msgid "lpadmin: Expected file type(s) after \"-I\" option."
+msgstr "lpadmin:“-I”选项后预期文件类型。"
+
+msgid "lpadmin: Expected hostname after \"-h\" option."
+msgstr "lpadmin:“-h”选项后预期主机名。"
+
+msgid "lpadmin: Expected location after \"-L\" option."
+msgstr "lpadmin:“-L”选项后预期位置。"
+
+msgid "lpadmin: Expected model after \"-m\" option."
+msgstr "lpadmin:“-m”选项后预期型号。"
+
+msgid "lpadmin: Expected name after \"-R\" option."
+msgstr "lpadmin:“-R”选项后预期名称。"
+
+msgid "lpadmin: Expected name=value after \"-o\" option."
+msgstr "lpadmin:“-o”选项后预期 name=value 表达式。"
+
+msgid "lpadmin: Expected printer after \"-p\" option."
+msgstr "lpadmin:“-p”选项后预期打印机。"
+
+msgid "lpadmin: Expected printer name after \"-d\" option."
+msgstr "lpadmin:“-d”选项后预期打印机名称。"
+
+msgid "lpadmin: Expected printer or class after \"-x\" option."
+msgstr "lpadmin:“-x”选项后预期打印机或类。"
+
+msgid "lpadmin: No member names were seen."
+msgstr "lpadmin:未找到成员名称。"
+
+#, c-format
+msgid "lpadmin: Printer %s is already a member of class %s."
+msgstr "lpadmin:打印机 %s 已经是类 %s 中的成员。"
+
+#, c-format
+msgid "lpadmin: Printer %s is not a member of class %s."
+msgstr "lpadmin:打印机 %s 不是类 %s 中的成员。"
+
+msgid "lpadmin: Printer name can only contain printable characters."
+msgstr "lpadmin:打印机名称中只能包含可打印字符。"
+
+msgid ""
+"lpadmin: Unable to add a printer to the class:\n"
+" You must specify a printer name first."
+msgstr ""
+"lpadmin:无法将打印机添加到类:\n"
+" 你必须先指定打印机名称。"
+
+#, c-format
+msgid "lpadmin: Unable to connect to server: %s"
+msgstr "lpadmin:无法连接到服务器:%s"
+
+msgid "lpadmin: Unable to create temporary file"
+msgstr "lpadmin:无法创建临时文件"
+
+msgid ""
+"lpadmin: Unable to delete option:\n"
+" You must specify a printer name first."
+msgstr ""
+"lpadmin:无法删除选项:\n"
+" 你必须先指定打印机名称。"
+
+#, c-format
+msgid "lpadmin: Unable to open PPD \"%s\": %s on line %d."
+msgstr "lpadmin:无法打开 PPD“%1$s”:在行 %3$d 中的 %2$s。"
+
+#, c-format
+msgid "lpadmin: Unable to open PPD file \"%s\" - %s"
+msgstr "lpadmin:无法打开 PPD 文件“%s”- %s"
+
+msgid ""
+"lpadmin: Unable to remove a printer from the class:\n"
+" You must specify a printer name first."
+msgstr ""
+"lpadmin:无法从类删除打印机:\n"
+" 你必须先指定打印机名称。"
+
+msgid ""
+"lpadmin: Unable to set the printer options:\n"
+" You must specify a printer name first."
+msgstr ""
+"lpadmin:无法设置打印机选项:\n"
+" 你必须先指定打印机名称。"
+
+#, c-format
+msgid "lpadmin: Unknown allow/deny option \"%s\"."
+msgstr "lpadmin:未知允许/拒绝选项“%s”。"
+
+#, c-format
+msgid "lpadmin: Unknown argument \"%s\"."
+msgstr "lpadmin:未知参数“%s”。"
+
+#, c-format
+msgid "lpadmin: Unknown option \"%c\"."
+msgstr "lpadmin:未知选项“%c”。"
+
+msgid "lpadmin: Warning - content type list ignored."
+msgstr "lpadmin:警告 — 内容类型列表已被忽略。"
+
+msgid "lpc> "
+msgstr "lpc> "
+
+msgid "lpinfo: Expected 1284 device ID string after \"--device-id\"."
+msgstr "lpinfo:“--device-id”选项后预期 1284 设备 ID 字串。"
+
+msgid "lpinfo: Expected language after \"--language\"."
+msgstr "lpinfo:“--language”选项后预期语言。"
+
+msgid "lpinfo: Expected make and model after \"--make-and-model\"."
+msgstr "lpinfo:“--make-and-model”选项后预期生产商和型号。"
+
+msgid "lpinfo: Expected product string after \"--product\"."
+msgstr "lpinfo:“--product”选项后预期产品。"
+
+msgid "lpinfo: Expected scheme list after \"--exclude-schemes\"."
+msgstr "lpinfo:“--exclude-schemes”选项后预期方案列表。"
+
+msgid "lpinfo: Expected scheme list after \"--include-schemes\"."
+msgstr "lpinfo:“--include-schemes”选项后预期方案列表。"
+
+msgid "lpinfo: Expected timeout after \"--timeout\"."
+msgstr "lpinfo:“--timeout”选项后预期超时。"
+
+#, c-format
+msgid "lpmove: Unable to connect to server: %s"
+msgstr "lpmove:无法连接到服务器:%s"
+
+#, c-format
+msgid "lpmove: Unknown argument \"%s\"."
+msgstr "lpmove:未知参数“%s”。"
+
+msgid "lpoptions: No printers."
+msgstr "lpoptions:没有打印机。"
+
+#, c-format
+msgid "lpoptions: Unable to add printer or instance: %s"
+msgstr "lpoptions:无法添加打印机或实例:%s"
+
+#, c-format
+msgid "lpoptions: Unable to get PPD file for %s: %s"
+msgstr "lpoptions:无法为 %s 获取 PPD 文件:%s"
+
+#, c-format
+msgid "lpoptions: Unable to open PPD file for %s."
+msgstr "lpoptions:无法为 %s 打开 PPD 文件。"
+
+msgid "lpoptions: Unknown printer or class."
+msgstr "lpoptions:未知打印机或类。"
+
+#, c-format
+msgid ""
+"lpstat: error - %s environment variable names non-existent destination \"%s"
+"\"."
+msgstr "lpstat:错误 — %s 环境变量指定了不存在的目的地“%s”。"
+
+#, c-format
+msgid "members of class %s:"
+msgstr "类 %s 的成员:"
+
+msgid "no entries"
+msgstr "无条目"
+
+msgid "no system default destination"
+msgstr "无系统默认目标"
+
+msgid "notify-events not specified."
+msgstr "未指定 notify-events。"
+
+#, c-format
+msgid "notify-recipient-uri URI \"%s\" is already used."
+msgstr "notify-recipient-uri URI“%s”已被占用。"
+
+#, c-format
+msgid "notify-recipient-uri URI \"%s\" uses unknown scheme."
+msgstr "notify-recipient-uri URI“%s”使用了未知方案。"
+
+msgid "pending"
+msgstr "正在等待"
+
+#, c-format
+msgid "ppdc: Adding include directory \"%s\"."
+msgstr "ppdc:正在添加包含目录“%s”。"
+
+#, c-format
+msgid "ppdc: Adding/updating UI text from %s."
+msgstr "ppdc:正在从 %s 添加/更新 UI 文本。"
+
+#, c-format
+msgid "ppdc: Bad boolean value (%s) on line %d of %s."
+msgstr "ppdc:共 %3$s 行中的第 %2$d 行中包含无效布里值(%1$s)。"
+
+#, c-format
+msgid "ppdc: Bad font attribute: %s"
+msgstr "ppdc:无效的字体属性:%s"
+
+#, c-format
+msgid "ppdc: Bad resolution name \"%s\" on line %d of %s."
+msgstr "ppdc:共 %3$s 行中的第 %2$d 行中包含无效分辨率名称“%1$s”。"
+
+#, c-format
+msgid "ppdc: Bad status keyword %s on line %d of %s."
+msgstr "ppdc:共 %3$s 行中的第 %2$d 行中包含无效状态关键词 %1$s。"
+
+#, c-format
+msgid "ppdc: Bad variable substitution ($%c) on line %d of %s."
+msgstr "ppdc:共 %3$s 行中的第 %2$d 行中包含无效变量替代 %1$c。"
+
+#, c-format
+msgid "ppdc: Choice found on line %d of %s with no Option."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中找到不带有 Option 的 Choice。"
+
+#, c-format
+msgid "ppdc: Duplicate #po for locale %s on line %d of %s."
+msgstr "ppdc:共 %3$s 行中的第 %2$d 行中包含重复的为地域 %1$s 提供的 #po。"
+
+#, c-format
+msgid "ppdc: Expected a filter definition on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期滤镜定义。"
+
+#, c-format
+msgid "ppdc: Expected a program name on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期程序名。"
+
+#, c-format
+msgid "ppdc: Expected boolean value on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期布里值。"
+
+#, c-format
+msgid "ppdc: Expected charset after Font on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中在 Font 声明后预期字符集。"
+
+#, c-format
+msgid "ppdc: Expected choice code on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期选择代码。"
+
+#, c-format
+msgid "ppdc: Expected choice name/text on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期选择名称/文本。"
+
+#, c-format
+msgid "ppdc: Expected color order for ColorModel on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期 ColorModel 的颜色顺序。"
+
+#, c-format
+msgid "ppdc: Expected colorspace for ColorModel on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期 ColorMode 的色彩空间。"
+
+#, c-format
+msgid "ppdc: Expected compression for ColorModel on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期 ColorMode 的压缩模式。"
+
+#, c-format
+msgid "ppdc: Expected constraints string for UIConstraints on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期 UIConstraints 的限制字符串。"
+
+#, c-format
+msgid ""
+"ppdc: Expected driver type keyword following DriverType on line %d of %s."
+msgstr ""
+"ppdc:共 %2$s 行中的第 %1$d 行中在 DriverType 声明后预期驱动类型关键词。"
+
+#, c-format
+msgid "ppdc: Expected duplex type after Duplex on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中在 Duplex 声明后预期双工类型。"
+
+#, c-format
+msgid "ppdc: Expected encoding after Font on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中在 Font 声明后预期编码类型。"
+
+#, c-format
+msgid "ppdc: Expected filename after #po %s on line %d of %s."
+msgstr "ppdc:共 %3$s 行中的第 %2$d 行中在 #po %1$s 声明后预期文件名。"
+
+#, c-format
+msgid "ppdc: Expected group name/text on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期组名称/文本。"
+
+#, c-format
+msgid "ppdc: Expected include filename on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期引用文件名。"
+
+#, c-format
+msgid "ppdc: Expected integer on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期整数。"
+
+#, c-format
+msgid "ppdc: Expected locale after #po on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中在 #po 声明后预期地域值。"
+
+#, c-format
+msgid "ppdc: Expected name after %s on line %d of %s."
+msgstr "ppdc:共 %3$s 行中的第 %2$d 行中在 %1$s 后预期名称。"
+
+#, c-format
+msgid "ppdc: Expected name after FileName on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中在 FileName 声明后预期名称。"
+
+#, c-format
+msgid "ppdc: Expected name after Font on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中在 Font 声明后预期名称。"
+
+#, c-format
+msgid "ppdc: Expected name after Manufacturer on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中在 Manufacturer 声明后预期名称。"
+
+#, c-format
+msgid "ppdc: Expected name after MediaSize on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中在 MediaSize 声明后预期名称。"
+
+#, c-format
+msgid "ppdc: Expected name after ModelName on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中在 ModelName 声明后预期名称。"
+
+#, c-format
+msgid "ppdc: Expected name after PCFileName on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中在 PCFileName 声明后预期名称。"
+
+#, c-format
+msgid "ppdc: Expected name/text after %s on line %d of %s."
+msgstr "ppdc:共 %3$s 行中的第 %2$d 行中在 %1$s 声明后预期名称/文本。"
+
+#, c-format
+msgid "ppdc: Expected name/text after Installable on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中在 Installable 声明后预期名称/文本。"
+
+#, c-format
+msgid "ppdc: Expected name/text after Resolution on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中在 Resolution 声明后预期名称/文本。"
+
+#, c-format
+msgid "ppdc: Expected name/text combination for ColorModel on line %d of %s."
+msgstr ""
+"ppdc:共 %2$s 行中的第 %1$d 行中在 ColorModel 声明后预期名称/文本组合。"
+
+#, c-format
+msgid "ppdc: Expected option name/text on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期选项名称/文本。"
+
+#, c-format
+msgid "ppdc: Expected option section on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期选项节。"
+
+#, c-format
+msgid "ppdc: Expected option type on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期选项类型。"
+
+#, c-format
+msgid "ppdc: Expected override field after Resolution on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中在 Resolution 声明后预期覆盖项。"
+
+#, c-format
+msgid "ppdc: Expected quoted string on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期引号中的字符串。"
+
+#, c-format
+msgid "ppdc: Expected real number on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期实数。"
+
+#, c-format
+msgid ""
+"ppdc: Expected resolution/mediatype following ColorProfile on line %d of %s."
+msgstr ""
+"ppdc:共 %2$s 行中的第 %1$d 行中在 ColorProfile 声明后预期分辨率/介质类型。"
+
+#, c-format
+msgid ""
+"ppdc: Expected resolution/mediatype following SimpleColorProfile on line %d "
+"of %s."
+msgstr ""
+"ppdc:共 %2$s 行中的第 %1$d 行中在 SimpleColorProfile 声明后预期分辨率/介质类"
+"型。"
+
+#, c-format
+msgid "ppdc: Expected selector after %s on line %d of %s."
+msgstr "ppdc:共 %3$s 行中的第 %2$d 行中在 %1$s 声明后预期选择器。"
+
+#, c-format
+msgid "ppdc: Expected status after Font on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中在 Font 声明后预期状态。"
+
+#, c-format
+msgid "ppdc: Expected string after Copyright on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期 Copyright 声明后的字符串。"
+
+#, c-format
+msgid "ppdc: Expected string after Version on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期 Version 声明后的字符串。"
+
+#, c-format
+msgid "ppdc: Expected two option names on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期两个选项名。"
+
+#, c-format
+msgid "ppdc: Expected value after %s on line %d of %s."
+msgstr "ppdc:共 %3$s 行中的第 %2$d 行中 %1$s 后预期值。"
+
+#, c-format
+msgid "ppdc: Expected version after Font on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中预期 Font 声明后的版本号。"
+
+#, c-format
+msgid "ppdc: Invalid #include/#po filename \"%s\"."
+msgstr "ppdc:无效的 #include/#po 文件名“%s”。"
+
+#, c-format
+msgid "ppdc: Invalid cost for filter on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中滤镜值无效。"
+
+#, c-format
+msgid "ppdc: Invalid empty MIME type for filter on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中滤镜 MIME 类型无效且为空。"
+
+#, c-format
+msgid "ppdc: Invalid empty program name for filter on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中滤镜程序名无效且为空。"
+
+#, c-format
+msgid "ppdc: Invalid option section \"%s\" on line %d of %s."
+msgstr "ppdc:共 %3$s 行中的第 %2$d 行中含有无效选项节“%1$s”。"
+
+#, c-format
+msgid "ppdc: Invalid option type \"%s\" on line %d of %s."
+msgstr "ppdc:共 %3$s 行中的第 %2$d 行中含有无效选项类型“%1$s”。"
+
+#, c-format
+msgid "ppdc: Loading driver information file \"%s\"."
+msgstr "ppdc:正在载入驱动信息文件“%s”。"
+
+#, c-format
+msgid "ppdc: Loading messages for locale \"%s\"."
+msgstr "ppdc:正在载入地域“%s”的消息文本。"
+
+#, c-format
+msgid "ppdc: Loading messages from \"%s\"."
+msgstr "ppdc:正在从“%s”载入消息文本。"
+
+#, c-format
+msgid "ppdc: Missing #endif at end of \"%s\"."
+msgstr "ppdc:在“%s”结尾缺少 #endif。"
+
+#, c-format
+msgid "ppdc: Missing #if on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中缺少 #if。"
+
+#, c-format
+msgid ""
+"ppdc: Need a msgid line before any translation strings on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中,在任何翻译字串前需要 msgid 行。"
+
+#, c-format
+msgid "ppdc: No message catalog provided for locale %s."
+msgstr "ppdc:未给地域 %s 提供消息文本目录。"
+
+#, c-format
+msgid "ppdc: Option %s defined in two different groups on line %d of %s."
+msgstr "ppdc:共 %3$s 行中的第 %2$d 行中选项 %1$s 在两个不同的组中被定义。"
+
+#, c-format
+msgid "ppdc: Option %s redefined with a different type on line %d of %s."
+msgstr "ppdc:共 %3$s 行中的第 %2$d 行中选项 %1$s 被重定义为另一个类型。"
+
+#, c-format
+msgid "ppdc: Option constraint must *name on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中选项制约必须包含 *name 声明。"
+
+#, c-format
+msgid "ppdc: Too many nested #if's on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中包含太多嵌套的 #if。"
+
+#, c-format
+msgid "ppdc: Unable to create PPD file \"%s\" - %s."
+msgstr "ppdc:无法创建 PPD 文件“%s” — %s。"
+
+#, c-format
+msgid "ppdc: Unable to create output directory %s: %s"
+msgstr "ppdc:无法创建输出目录 %s:%s"
+
+#, c-format
+msgid "ppdc: Unable to create output pipes: %s"
+msgstr "ppdc:无法创建输出管道:%s"
+
+#, c-format
+msgid "ppdc: Unable to execute cupstestppd: %s"
+msgstr "ppdc:无法执行 cupstestppd:%s"
+
+#, c-format
+msgid "ppdc: Unable to find #po file %s on line %d of %s."
+msgstr "ppdc:共 %3$s 行中的第 %2$d 行中找不到 #po 文件 %1$s。"
+
+#, c-format
+msgid "ppdc: Unable to find include file \"%s\" on line %d of %s."
+msgstr "ppdc:共 %3$s 行中的第 %2$d 行中找不到引用的文件“%1$s”。"
+
+#, c-format
+msgid "ppdc: Unable to find localization for \"%s\" - %s"
+msgstr "ppdc:无法为“%s”找到本地化文件 — %s"
+
+#, c-format
+msgid "ppdc: Unable to load localization file \"%s\" - %s"
+msgstr "ppdc:无法载入本地化文件“%s” — %s"
+
+#, c-format
+msgid "ppdc: Unable to open %s: %s"
+msgstr "ppdc:无法打开 %s:%s"
+
+#, c-format
+msgid "ppdc: Undefined variable (%s) on line %d of %s."
+msgstr "ppdc:共 %3$s 行中的第 %2$d 行中含有未定义的变量(%1$s)。"
+
+#, c-format
+msgid "ppdc: Unexpected text on line %d of %s."
+msgstr "ppdc:共 %2$s 行中的第 %1$d 行中含有未预期的文本。"
+
+#, c-format
+msgid "ppdc: Unknown driver type %s on line %d of %s."
+msgstr "ppdc:共 %3$s 行中的第 %2$d 行中包含未知驱动类型 %1$s。"
+
+#, c-format
+msgid "ppdc: Unknown duplex type \"%s\" on line %d of %s."
+msgstr "ppdc:共 %3$s 行中的第 %2$d 行中含有未知双工类型“%1$s”。"
+
+#, c-format
+msgid "ppdc: Unknown media size \"%s\" on line %d of %s."
+msgstr "ppdc:共 %3$s 行中的第 %2$d 行中包含未知媒体大小“%1$s”。"
+
+#, c-format
+msgid "ppdc: Unknown message catalog format for \"%s\"."
+msgstr "ppdc:用于“%s”的消息文本目录格式未知。"
+
+#, c-format
+msgid "ppdc: Unknown token \"%s\" seen on line %d of %s."
+msgstr "ppdc:共 %3$s 行中的第 %2$d 行中找到未知令牌“%1$s”。"
+
+#, c-format
+msgid ""
+"ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s."
+msgstr "ppdc:共 %3$s 行中的第 %2$d 行中实数“%1$s”后找到未知尾随字符。"
+
+#, c-format
+msgid "ppdc: Unterminated string starting with %c on line %d of %s."
+msgstr "ppdc:共 %3$s 行中的第 %2$d 行中包含未终止的字符串,开头为 %1$c。"
+
+#, c-format
+msgid "ppdc: Warning - overlapping filename \"%s\"."
+msgstr "ppdc:警告 — 重复的文件名“%s”。"
+
+#, c-format
+msgid "ppdc: Writing %s."
+msgstr "ppdc:正在写入 %s。"
+
+#, c-format
+msgid "ppdc: Writing PPD files to directory \"%s\"."
+msgstr "ppdc:正在将 PPD 文件写入到路径“%s”。"
+
+#, c-format
+msgid "ppdmerge: Bad LanguageVersion \"%s\" in %s."
+msgstr "ppdmerge:在 %2$s 中包含无效的 LanguageVersion“%1$s”。"
+
+#, c-format
+msgid "ppdmerge: Ignoring PPD file %s."
+msgstr "ppdmerge:正在忽略 PPD 文件 %s。"
+
+#, c-format
+msgid "ppdmerge: Unable to backup %s to %s - %s"
+msgstr "ppdmerge:无法将 %s 备份至 %s — %s"
+
+#, c-format
+msgid "printer %s disabled since %s -"
+msgstr "打印机 %s 从 %s 开始被禁用 -"
+
+#, c-format
+msgid "printer %s is idle. enabled since %s"
+msgstr "打印机 %s 目前空闲。从 %s 开始启用"
+
+#, c-format
+msgid "printer %s now printing %s-%d. enabled since %s"
+msgstr "打印机 %s 正在打印 %s-%d。从 %s 开始启用"
+
+#, c-format
+msgid "printer %s/%s disabled since %s -"
+msgstr "打印机 %s/%s 从 %s 开始被禁用 -"
+
+#, c-format
+msgid "printer %s/%s is idle. enabled since %s"
+msgstr "打印机 %s/%s 目前空闲。从 %s 开始启用"
+
+#, c-format
+msgid "printer %s/%s now printing %s-%d. enabled since %s"
+msgstr "打印机 %s/%s 正在打印 %s-%d。从 %s 开始启用"
+
+msgid "processing"
+msgstr "正在处理"
+
+#, c-format
+msgid "request id is %s-%d (%d file(s))"
+msgstr "请求 ID 为 %s-%d(%d 个文件)"
+
+msgid "request-id uses indefinite length"
+msgstr "request-id 使用不定长度"
+
+msgid "scheduler is not running"
+msgstr "调度器未运行"
+
+msgid "scheduler is running"
+msgstr "调度器正在运行"
+
+#, c-format
+msgid "stat of %s failed: %s"
+msgstr "为 %s 运行 stat 失败:%s"
+
+msgid "status\t\tShow status of daemon and queue."
+msgstr "状态\t\t显示守护程序和队列的状态。"
+
+msgid "stopped"
+msgstr "已停止"
+
+#, c-format
+msgid "system default destination: %s"
+msgstr "系统默认目标:%s"
+
+#, c-format
+msgid "system default destination: %s/%s"
+msgstr "系统默认目标:%s/%s"
+
+msgid "unknown"
+msgstr "未知"
+
+msgid "untitled"
+msgstr "无标题"
+
+msgid "variable-bindings uses indefinite length"
+msgstr "variable-bindings 使用不定长度"
+
+#~ msgid " --lf End lines with LF (UNIX/Linux/OS X)."
+#~ msgstr " --lf 使用 LF 行末 (UNIX/Linux/OS X)。"
+
+#~ msgid " -E Test with HTTP Upgrade to TLS."
+#~ msgstr " -E 使用升级为 TLS 的 HTTP 测试。"
+
+#~ msgid " -S Test with SSL encryption."
+#~ msgstr " -S 使用 SSL 加密测试。"
+
+#~ msgid " -a Browse for all services."
+#~ msgstr " -a 浏览所有服务。"
+
+#~ msgid " -d domain Browse/resolve in specified domain."
+#~ msgstr " -d 域名 浏览/解析指定域名。"
+
+#~ msgid " -p program Run specified program for each service."
+#~ msgstr " -p 程序 为每个服务运行指定程序。"
+
+#~ msgid " -t type Browse/resolve with specified type."
+#~ msgstr " -t 类型 使用指定类型浏览/解析。"
+
+#~ msgid "\"%s\": Bad URI value \"%s\" - %s (RFC 2911 section 4.1.5)."
+#~ msgstr "“%s”:无效的 URI 值“%s” — %s(RFC 2911 章节 4.1.5)。"
+
+#~ 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)。"
+
+#~ msgid "\"%s\": Bad attribute name - bad length %d (RFC 2911 section 4.1.3)."
+#~ msgstr "“%s”:无效的属性名称 — 无效的长度 %d(RFC 2911 章节 4.1.3)。"
+
+#~ msgid ""
+#~ "\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)."
+#~ msgstr "“%s”:无效的属性名称 — 无效字符(RFC 2911 章节 4.1.3)。"
+
+#~ msgid "\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11)."
+#~ msgstr "“%s”:无效布里值 %d(RFC 2911 章节 4.1.11)。"
+
+#~ msgid ""
+#~ "\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section "
+#~ "4.1.7)."
+#~ msgstr "“%s”:无效的字符集值“%s”- 无效字符(RFC 2911 章节 4.1.7)。"
+
+#~ msgid ""
+#~ "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)."
+#~ msgstr "“%s”:无效的字符集值“%s”- 无效长度 %d(RFC 2911 章节 4.1.7)。"
+
+#~ msgid "\"%s\": Bad dateTime UTC hours %u (RFC 2911 section 4.1.14)."
+#~ msgstr "“%s”:无效的 dateTime UTC 小时 %u(RFC 2911 章节 4.1.14)。"
+
+#~ msgid "\"%s\": Bad dateTime UTC minutes %u (RFC 2911 section 4.1.14)."
+#~ msgstr "“%s”:无效的 dateTime UTC 分钟 %u(RFC 2911 章节 4.1.14)。"
+
+#~ msgid "\"%s\": Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14)."
+#~ msgstr "“%s”:无效的 dateTime UTC 符号“%c”(RFC 2911 章节 4.1.14)。"
+
+#~ msgid "\"%s\": Bad dateTime day %u (RFC 2911 section 4.1.14)."
+#~ msgstr "“%s”:无效的 dateTime 日期 %u(RFC 2911 章节 4.1.14)。"
+
+#~ msgid "\"%s\": Bad dateTime deciseconds %u (RFC 2911 section 4.1.14)."
+#~ msgstr "“%s”:无效的 dateTime 毫秒 %u(RFC 2911 章节 4.1.14)。"
+
+#~ msgid "\"%s\": Bad dateTime hours %u (RFC 2911 section 4.1.14)."
+#~ msgstr "“%s”:无效的 dateTime 小时 %u(RFC 2911 章节 4.1.14)。"
+
+#~ msgid "\"%s\": Bad dateTime minutes %u (RFC 2911 section 4.1.14)."
+#~ msgstr "“%s”:无效的 dateTime 分钟 %u(RFC 2911 章节 4.1.14)。"
+
+#~ msgid "\"%s\": Bad dateTime month %u (RFC 2911 section 4.1.14)."
+#~ msgstr "“%s”:无效的 dateTime 月份 %u(RFC 2911 章节 4.1.14)。"
+
+#~ msgid "\"%s\": Bad dateTime seconds %u (RFC 2911 section 4.1.14)."
+#~ msgstr "“%s”:无效的 dateTime 秒 %u(RFC 2911 章节 4.1.14)。"
+
+#~ msgid "\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4)."
+#~ msgstr "“%s”:无效的 enum 值 %d — 数值越界(RFC 2911 章节 4.1.4)。"
+
+#~ msgid ""
+#~ "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3)."
+#~ msgstr "“%s”:无效的关键词赋值“%s”- 无效长度 %d(RFC 2911 章节 4.1.3)。"
+
+#~ msgid ""
+#~ "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section "
+#~ "4.1.3)."
+#~ msgstr "“%s”:无效的关键词赋值“%s”- 无效字符(RFC 2911 章节 4.1.3)。"
+
+#~ msgid ""
+#~ "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section "
+#~ "4.1.9)."
+#~ msgstr ""
+#~ "“%s”:无效的 mimeMediaType 赋值“%s”- 无效字符(RFC 2911 章节 4.1.9)。"
+
+#~ msgid ""
+#~ "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section "
+#~ "4.1.9)."
+#~ msgstr ""
+#~ "“%s”:无效的 mimeMediaType 赋值“%s”- 无效长度 %d(RFC 2911 章节 4.1.9)。"
+
+#~ msgid ""
+#~ "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section "
+#~ "4.1.2)."
+#~ msgstr ""
+#~ "“%s”:无效的名称赋值“%s”- 无效的 UTF-8 序列(RFC 2911 章节 4.1.2)。"
+
+#~ msgid ""
+#~ "\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2)."
+#~ msgstr "“%s”:无效的名称赋值“%s”- 无效长度 %d(RFC 2911 章节 4.1.2)。"
+
+#~ msgid ""
+#~ "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 "
+#~ "section 4.1.8)."
+#~ msgstr ""
+#~ "“%s”:无效的 naturalLanguage 赋值“%s”- 无效字符(RFC 2911 章节 4.1.8)。"
+
+#~ 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)。"
+
+#~ msgid ""
+#~ "\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10)."
+#~ msgstr "“%s”:无效的 octetString 值 — 无效长度 %d(RFC 2911 章节 4.1.10)。"
+
+#~ 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)。"
+
+#~ msgid ""
+#~ "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section "
+#~ "4.1.15)."
+#~ msgstr "“%s”:无效的分辨率值 %dx%d%s — 无效单位值(RFC 2911 章节 4.1.15)。"
+
+#~ msgid ""
+#~ "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be "
+#~ "positive (RFC 2911 section 4.1.15)."
+#~ msgstr ""
+#~ "“%s”:无效的分辨率值 %d×%d%s — 横向喂入分辨率必须为正值(RFC 2911 章节 "
+#~ "4.1.15)。"
+
+#~ msgid ""
+#~ "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive "
+#~ "(RFC 2911 section 4.1.15)."
+#~ msgstr ""
+#~ "“%s”:无效的分辨率值 %d×%d%s — 喂入分辨率必须为正值(RFC 2911 章节 "
+#~ "4.1.15)。"
+
+#~ 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)。"
+
+#~ msgid ""
+#~ "\"%s\": Bad text value \"%s\" - bad length %d (RFC 2911 section 4.1.1)."
+#~ msgstr "“%s”:无效的文本赋值“%s”- 无效长度 %d(RFC 2911 章节 4.1.1)。"
+
+#~ msgid ""
+#~ "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section "
+#~ "4.1.6)."
+#~ msgstr "“%s”:无效的 uriScheme 赋值“%s”- 无效字符(RFC 2911 章节 4.1.6)。"
+
+#~ 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)。"
+
+#~ msgid "Envelope #10 "
+#~ msgstr "10 号信封 "
+
+#~ msgid "Envelope PRC1 "
+#~ msgstr "中国一号信封 "
+
+#, fuzzy
+#~ msgid "File Folder "
+#~ msgstr "文件夹 "
+
+#~ msgid "Postcard Double "
+#~ msgstr "双面明信片 "
+
+#~ msgid ""
+#~ "Usage: ippdiscover [options] -a\n"
+#~ " ippdiscover [options] \"service name\"\n"
+#~ "\n"
+#~ "Options:"
+#~ msgstr ""
+#~ "用法:\tippdiscover [options] -a\n"
+#~ " \tippdiscover [options] \"service name\"\n"
+#~ "\n"
+#~ "选项:"
+
+#~ msgid "lpinfo: Unknown argument \"%s\"."
+#~ msgstr "lpinfo:未知参数“%s”。"
+
+#~ msgid "lpinfo: Unknown option \"%c\"."
+#~ msgstr "lpinfo:未知选项“%c”。"
+
+#~ msgid "lpinfo: Unknown option \"%s\"."
+#~ msgstr "lpinfo:未知选项“%s”。"
+
+#~ msgid "lpmove: Unknown option \"%c\"."
+#~ msgstr "lpmove:未知选项“%c”。"
diff --git a/locale/po2strings.c b/locale/po2strings.c
index 4638275..d674057 100644
--- a/locale/po2strings.c
+++ b/locale/po2strings.c
@@ -360,6 +360,34 @@ normalize_string(const char *idstr, /* I - msgid string */
idstr ++;
}
+ else if (*idstr == '\'')
+ {
+ if (strchr(idstr + 1, '\'') == NULL || quote)
+ {
+ /*
+ * Convert second ' (or ' used for a contraction) to Unicode right
+ * (curley) single quote.
+ */
+
+ *bufptr++ = (char)0xE2;
+ *bufptr++ = (char)0x80;
+ *bufptr++ = (char)0x99;
+ quote = 0;
+ }
+ else
+ {
+ /*
+ * Convert first ' to Unicode left (curley) single quote.
+ */
+
+ *bufptr++ = (char)0xE2;
+ *bufptr++ = (char)0x80;
+ *bufptr++ = (char)0x98;
+ quote = 1;
+ }
+
+ idstr ++;
+ }
else
*bufptr++ = *idstr;
diff --git a/man/Makefile b/man/Makefile
index 60f76c8..8f74768 100644
--- a/man/Makefile
+++ b/man/Makefile
@@ -1,7 +1,7 @@
#
# Man page makefile for CUPS.
#
-# Copyright 2007-2015 by Apple Inc.
+# Copyright 2007-2017 by Apple Inc.
# Copyright 1993-2006 by Easy Software Products.
#
# These coded instructions, statements, and computer programs are the
@@ -71,7 +71,7 @@ MAN8 = cupsaccept.$(MAN8EXT) \
# Make everything...
#
-all: $(MAN1) $(MAN5) $(MAN7) $(MAN8) html
+all: $(MAN1) $(MAN5) $(MAN7) $(MAN8)
#
@@ -197,6 +197,13 @@ uninstall:
#
+# Local programs (not built when cross-compiling...)
+#
+
+local: html
+
+
+#
# Make html versions of man pages...
#
diff --git a/man/client.conf.man.in b/man/client.conf.man.in
index 15b2a80..fba9fe9 100644
--- a/man/client.conf.man.in
+++ b/man/client.conf.man.in
@@ -1,7 +1,7 @@
.\"
.\" client.conf man page for CUPS.
.\"
-.\" Copyright 2007-2016 by Apple Inc.
+.\" Copyright 2007-2017 by Apple Inc.
.\" Copyright 2006 by Easy Software Products.
.\"
.\" These coded instructions, statements, and computer programs are the
@@ -10,7 +10,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 client.conf 5 "CUPS" "20 June 2016" "Apple Inc."
+.TH client.conf 5 "CUPS" "26 June 2017" "Apple Inc."
.SH NAME
client.conf \- client configuration file for cups
.SH DESCRIPTION
@@ -56,7 +56,7 @@ 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[\fIAllowDH\fR] [\fIAllowRC4\fR] [\fIAllowSSL3\fR] [\fIDenyTLS1.0\fR]
+\fBSSLOptions \fR[\fIAllowDH\fR] [\fIAllowRC4\fR] [\fIAllowSSL3\fR] [\fIDenyCBC\fR] [\fIDenyTLS1.0\fR]
.TP 5
\fBSSLOptions None\fR
Sets encryption options (only in /etc/cups/client.conf).
@@ -64,6 +64,7 @@ By default, CUPS only supports encryption using TLS v1.0 or higher using known s
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 \fIDenyCBC\fR option disables all CBC cipher suites.
The \fIDenyTLS1.0\fR option disables TLS v1.0 support - this sets the minimum protocol version to TLS v1.1.
.TP 5
\fBTrustOnFirstUse Yes\fR
diff --git a/man/cupsd.conf.man.in b/man/cupsd.conf.man.in
index 9ef7c93..7843360 100644
--- a/man/cupsd.conf.man.in
+++ b/man/cupsd.conf.man.in
@@ -10,7 +10,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" "21 June 2016" "Apple Inc."
+.TH cupsd.conf 5 "CUPS" "26 June 2017" "Apple Inc."
.SH NAME
cupsd.conf \- server configuration file for cups
.SH DESCRIPTION
@@ -480,13 +480,16 @@ Set the specified environment variable to be passed to child processes.
Listens on the specified address and port for encrypted connections.
.\"#SSLOptions
.TP 5
-\fBSSLOptions \fR[\fIAllowRC4\fR] [\fIAllowSSL3\fR]
+\fBSSLOptions \fR[\fIAllowDH\fR] [\fIAllowRC4\fR] [\fIAllowSSL3\fR] [\fIDenyCBC\fR] [\fIDenyTLS1.0\fR]
.TP 5
\fBSSLOptions None\fR
Sets encryption options.
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 \fIDenyCBC\fR option disables all CBC cipher suites.
+The \fIDenyTLS1.0\fR option disables TLS v1.0 support - this sets the minimum protocol version to TLS v1.1.
.\"#SSLPort
.TP 5
\fBSSLPort \fIport\fR
diff --git a/man/ipptool.man b/man/ipptool.man
index d84fa94..ecc9575 100644
--- a/man/ipptool.man
+++ b/man/ipptool.man
@@ -1,7 +1,7 @@
.\"
-.\" ipptool man page for CUPS.
+.\" ipptool man page.
.\"
-.\" Copyright 2010-2015 by Apple Inc.
+.\" Copyright 2010-2017 by Apple Inc.
.\"
.\" These coded instructions, statements, and computer programs are the
.\" property of Apple Inc. and are protected by Federal copyright
@@ -9,7 +9,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" "26 August 2015" "Apple Inc."
+.TH ipptool 1 "CUPS" "13 June 2017" "Apple Inc."
.SH NAME
ipptool \- perform internet printing protocol requests
.SH SYNOPSIS
@@ -235,9 +235,8 @@ Send email notifications to "user@example.com" when "myprinter" changes:
.fi
.SH SEE ALSO
.BR ipptoolfile (5),
-CUPS Online Help (http://localhost:631/help),
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),
+RFC 8011 (http://tools.ietf.org/html/rfc8011),
.SH COPYRIGHT
Copyright \[co] 2007-2017 by Apple Inc.
diff --git a/man/ipptoolfile.man b/man/ipptoolfile.man
index 1f649e5..35b0504 100644
--- a/man/ipptoolfile.man
+++ b/man/ipptoolfile.man
@@ -1,7 +1,7 @@
.\"
-.\" ipptoolfile man page for CUPS.
+.\" ipptoolfile man page.
.\"
-.\" Copyright 2010-2014 by Apple Inc.
+.\" Copyright 2010-2017 by Apple Inc.
.\"
.\" These coded instructions, statements, and computer programs are the
.\" property of Apple Inc. and are protected by Federal copyright
@@ -9,28 +9,48 @@
.\" 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" "4 February 2015" "Apple Inc."
+.TH ipptoolfile 5 "CUPS" "15 June 2017" "Apple Inc."
.SH NAME
ipptoolfile \- ipptool file format
.SH DESCRIPTION
The
.BR ipptool (1)
-program accepts free-form plain text files that describe one or more IPP requests. Comments start with the "#" character and continue to the end of the line. Each request is enclosed by curly braces, for example:
+program accepts free-form plain text files that describe one or more IPP requests.
+Comments start with the "#" character and continue to the end of the line.
+Each request is enclosed by curly braces, for example:
.nf
# This is a comment
{
# The name of the test
- NAME "Print PostScript File"
+ NAME "Print PDF File"
# The request to send
OPERATION Print\-Job
+
GROUP operation\-attributes\-tag
ATTR charset attributes\-charset utf\-8
ATTR language attributes\-natural\-language en
ATTR uri printer\-uri $uri
ATTR name requesting\-user\-name $user
- FILE testfile.ps
+ ATTR mimeMediaType document\-format application/pdf
+
+ GROUP job\-attributes\-tag
+ ATTR collection media\-col {
+ # US Letter plain paper from the "main" tray
+ MEMBER collection media\-size {
+ MEMBER integer x\-dimension 21590
+ MEMBER integer y\-dimension 27940
+ }
+ MEMBER integer media\-top\-margin 423
+ MEMBER integer media\-bottom\-margin 423
+ MEMBER integer media\-left\-margin 423
+ MEMBER integer media\-right\-margin 423
+ MEMBER keyword media\-source "main"
+ MEMBER keyword media\-type "stationery"
+ }
+
+ FILE testfile.pdf
# The response to expect
STATUS successful\-ok
@@ -39,10 +59,11 @@ program accepts free-form plain text files that describe one or more IPP request
}
{
# The name of the test
- NAME "Get Attributes of PostScript Job"
+ NAME "Wait for Job to Complete"
# The request to send
OPERATION Get\-Job\-Attributes
+
GROUP operation\-attributes\-tag
ATTR charset attributes\-charset utf\-8
ATTR language attributes\-natural\-language en
@@ -54,8 +75,12 @@ program accepts free-form plain text files that describe one or more IPP request
STATUS successful\-ok
EXPECT job\-id OF\-TYPE integer WITH\-VALUE $job\-id
EXPECT job\-uri OF\-TYPE uri
- EXPECT job\-state OF\-TYPE enum WITH\-VALUE 3,4,5,6,7,8,9
+ EXPECT job\-state OF\-TYPE enum WITH\-VALUE >5 REPEAT\-NO\-MATCH
EXPECT job\-originating\-user\-name OF\-TYPE name WITH\-VALUE "$user"
+
+ # Show the job state until completed...
+ DISPLAY job-state
+ DISPLAY job-state-reasons
}
.fi
.SS TOP-LEVEL DIRECTIVES
@@ -139,11 +164,18 @@ Specifies the default IPP version number to use for the tests that follow.
.SS TEST DIRECTIVES
The following directives are understood within a \fItest\fR:
.TP 5
+\fBATTR \fIout-of-band-tag attribute-name\fR
+.TP 5
\fBATTR \fItag attribute-name value(s)\fR
-Adds an attribute to the test request. Values are separated by the comma (",") character - escape commas using the "\" character. Common attributes and values are listed in the IANA IPP registry - see references below.
+Adds an attribute to the test request.
+Out-of-band tags (admin-define, delete-attribute, no-value, not-settable, unknown, unsupported) have no value.
+Values for other tags are separated by the comma (",") character - escape commas using the "\" character.
+Common attributes and values are listed in the IANA IPP registry - see references below.
.TP 5
\fBATTR collection \fIattribute-name \fB{ MEMBER \fItag member-name value(s) ... \fB}\fR [ \fI... \fB,{ \fI... \fB} \fR]
-Adds a collection attribute to the test request. Member attributes follow the same syntax as regular attributes and can themselves be nested collections. Multiple collection values can be supplied as needed, separated by commas.
+Adds a collection attribute to the test request.
+Member attributes follow the same syntax as regular attributes and can themselves be nested collections.
+Multiple collection values can be supplied as needed, separated by commas.
.TP 5
\fBCOMPRESSION deflate\fR
.TP 5
@@ -152,8 +184,9 @@ Adds a collection attribute to the test request. Member attributes follow the sa
\fBCOMPRESSION none\fR
Uses the specified compression on the document data following the attributes in a Print-Job or Send-Document request.
.TP 5
-\fBDELAY \fIseconds\fR
-Specifies a delay before this test will be run.
+\fBDELAY \fIseconds\fR[\fI,repeat-seconds\fR]
+Specifies a delay in seconds before this test will be run.
+If two values are specified, the second value is used as the delay between repeated tests.
.TP 5
\fBDISPLAY \fIattribute-name\fR
Specifies that value of the named attribute should be output as part of the
@@ -376,7 +409,7 @@ Specifies the maximum number of times to repeat. The default value is 1000.
\fBREPEAT\-NO\-MATCH\fR
Specifies that the current test should be repeated when the response status-code matches or does not match the value specified by the STATUS directive.
.SS OPERATION CODES
-Operation codes correspond to the hexadecimal numbers (0xHHHH) and names from RFC 2911 and other IPP extension specifications. Here is a complete list of names supported by
+Operation codes correspond to the hexadecimal numbers (0xHHHH) and names from RFC 8011 and other IPP extension specifications. Here is a complete list of names supported by
.BR ipptool (8):
.nf
@@ -449,7 +482,7 @@ Operation codes correspond to the hexadecimal numbers (0xHHHH) and names from RF
Validate\-Job
.fi
.SS STATUS CODES
-Status codes correspond to the hexadecimal numbers (0xHHHH) and names from RFC 2911 and other IPP extension specifications. Here is a complete list of the names supported by
+Status codes correspond to the hexadecimal numbers (0xHHHH) and names from RFC 8011 and other IPP extension specifications. Here is a complete list of the names supported by
.BR ipptool (8):
.nf
@@ -512,7 +545,7 @@ Status codes correspond to the hexadecimal numbers (0xHHHH) and names from RFC 2
successful\-ok\-too\-many\-events
.fi
.SS TAGS
-Value and group tags correspond to the names from RFC 2911 and other IPP extension specifications. Here are the group tags:
+Value and group tags correspond to the names from RFC 8011 and other IPP extension specifications. Here are the group tags:
.nf
document\-attributes\-tag
@@ -612,9 +645,8 @@ if any.
Inserts the current user's login name.
.SH SEE ALSO
.BR ipptool (1),
-CUPS Online Help (http://localhost:631/help),
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)
+RFC 8011 (http://tools.ietf.org/html/rfc8011)
.SH COPYRIGHT
Copyright \[co] 2007-2017 by Apple Inc.
diff --git a/man/lpstat.man b/man/lpstat.man
index 64ed768..5adb08d 100644
--- a/man/lpstat.man
+++ b/man/lpstat.man
@@ -1,7 +1,7 @@
.\"
.\" lpstat man page for CUPS.
.\"
-.\" Copyright 2007-2014 by Apple Inc.
+.\" Copyright 2007-2017 by Apple Inc.
.\" Copyright 1997-2006 by Easy Software Products.
.\"
.\" These coded instructions, statements, and computer programs are the
@@ -10,7 +10,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 lpstat 1 "CUPS" "12 June 2014" "Apple Inc."
+.TH lpstat 1 "CUPS" "26 May 2017" "Apple Inc."
.SH NAME
lpstat \- print cups status information
.SH SYNOPSIS
@@ -40,6 +40,8 @@ lpstat \- print cups status information
] ] [
.B \-d
] [
+.B \-e
+] [
.B \-o
[
.I destination(s)
@@ -97,6 +99,9 @@ If no classes are specified then all classes are listed.
.B \-d
Shows the current default destination.
.TP 5
+.B \-e
+Shows all available destinations on the local network.
+.TP 5
\fB\-h \fIserver\fR[\fB:\fIport\fR]
Specifies an alternate server.
.TP 5
@@ -133,7 +138,7 @@ If no printers are specified then all printers are listed.
Unlike the System V printing system, CUPS allows printer names to contain any printable character except SPACE, TAB, "/", and "#".
Also, printer and class names are \fInot\fR case-sensitive.
.LP
-The \fI\-h\fR, \fI\-E\fR, \fI\-U\fR, and \fI\-W\fR options are unique to CUPS.
+The \fI\-h\fR, \fI-e\fR, \fI\-E\fR, \fI\-U\fR, and \fI\-W\fR options are unique to CUPS.
.LP
The Solaris \fI\-f\fR, \fI\-P\fR, and \fI\-S\fR options are silently ignored.
.SH SEE ALSO
diff --git a/packaging/cups.list.in b/packaging/cups.list.in
index 132d2b5..27cea18 100644
--- a/packaging/cups.list.in
+++ b/packaging/cups.list.in
@@ -13,7 +13,7 @@
# Product information
%product CUPS
-%copyright 2007-2016 by Apple Inc.
+%copyright 2007-2017` by Apple Inc.
%vendor Apple Inc.
#%license LICENSE.txt
%readme LICENSE.txt
@@ -557,6 +557,7 @@ f 0444 root sys $LIBDIR/libcupsimage.a filter/libcupsimage.a
d 0755 root sys $DOCDIR/help -
f 0444 root sys $DOCDIR/help doc/help/api*.html
+f 0444 root sys $DOCDIR/help/cupspm.html doc/help/cupspm.html
f 0444 root sys $DOCDIR/help/postscript-driver.html doc/help/postscript-driver.html
f 0444 root sys $DOCDIR/help/ppd-compiler.html doc/help/ppd-compiler.html
f 0444 root sys $DOCDIR/help/raster-driver.html doc/help/raster-driver.html
diff --git a/packaging/cups.spec b/packaging/cups.spec
index 76fd06b..9545e0b 100644
--- a/packaging/cups.spec
+++ b/packaging/cups.spec
@@ -26,8 +26,8 @@
%{!?_with_dbus: %define _dbus --disable-dbus}
%{!?_with_dnssd: %{!?_without_dnssd: %define _with_dnssd --with-dnssd}}
-%{?_with_dnssd: %define _dnssd --enable-dnssd}
-%{!?_with_dnssd: %define _dnssd --disable-dnssd}
+%{?_with_dnssd: %define _dnssd --enable-avahi}
+%{!?_with_dnssd: %define _dnssd --disable-avahi}
%{!?_with_libusb1: %{!?_without_libusb1: %define _with_libusb1 --with-libusb1}}
%{?_with_libusb1: %define _libusb1 --enable-libusb}
@@ -43,12 +43,12 @@
Summary: CUPS
Name: cups
-Version: 2.2.3
+Version: 2.2.4
Release: 0
Epoch: 1
License: GPL
Group: System Environment/Daemons
-Source: https://github.com/apple/cups/releases/download/v2.2.3/cups-2.2.3-source.tar.gz
+Source: https://github.com/apple/cups/releases/download/v2.2.4/cups-2.2.4-source.tar.gz
Url: http://www.cups.org
Packager: Anonymous <anonymous@example.com>
Vendor: Example Corp
@@ -116,7 +116,7 @@ This package provides LPD client support.
%build
CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" LDFLAGS="$RPM_OPT_FLAGS" \
- ./configure %{_dbus} %{_dnssd} %{_libusb1} %{_static}
+ ./configure %{_dbus} %{_dnssd} %{_libusb1} %{_static} %{_systemd}
# If we got this far, all prerequisite libraries must be here.
make
@@ -128,6 +128,15 @@ make BUILDROOT=$RPM_BUILD_ROOT install
rm -rf $RPM_BUILD_ROOT/usr/share/cups/banners $RPM_BUILD_ROOT/usr/share/cups/data
%post
+%if %{?_with_systemd:1}%{!?_with_systemd:0}
+/bin/systemctl enable org.cups.cupsd.service
+
+if test $1 -ge 1; then
+ /bin/systemctl stop org.cups.cupsd.service
+ /bin/systemctl start org.cups.cupsd.service
+fi
+
+%else
/sbin/chkconfig --add cups
/sbin/chkconfig cups on
@@ -136,21 +145,38 @@ if test $1 -gt 1; then
/sbin/service cups stop
/sbin/service cups start
fi
+%endif
%post libs
/sbin/ldconfig
%preun
+%if %{?_with_systemd:1}%{!?_with_systemd:0}
+if test $1 -ge 1; then
+ /bin/systemctl stop org.cups.cupsd.service
+ /bin/systemctl disable org.cups.cupsd.service
+fi
+
+%else
if test $1 = 0; then
/sbin/service cups stop
/sbin/chkconfig --del cups
fi
+%endif
%postun
+%if %{?_with_systemd:1}%{!?_with_systemd:0}
+if test $1 -ge 1; then
+ /bin/systemctl stop org.cups.cupsd.service
+ /bin/systemctl start org.cups.cupsd.service
+fi
+
+%else
if test $1 -ge 1; then
/sbin/service cups stop
/sbin/service cups start
fi
+%endif
%postun libs
/sbin/ldconfig
@@ -194,13 +220,13 @@ rm -rf $RPM_BUILD_ROOT
/usr/bin/cancel
/usr/bin/cupstestdsc
/usr/bin/cupstestppd
-/usr/bin/ippfind
/usr/bin/ipptool
/usr/bin/lp*
%dir /usr/lib/cups
%dir /usr/lib/cups/backend
%if %{?_with_dnssd:1}%{!?_with_dnssd:0}
# DNS-SD
+/usr/bin/ippfind
/usr/lib/cups/backend/dnssd
%endif
/usr/lib/cups/backend/http
@@ -306,7 +332,10 @@ rm -rf $RPM_BUILD_ROOT
/usr/share/man/man1/cups.1.gz
/usr/share/man/man1/cupstestdsc.1.gz
/usr/share/man/man1/cupstestppd.1.gz
+%if %{?_with_dnssd:1}%{!?_with_dnssd:0}
+# DNS-SD
/usr/share/man/man1/ippfind.1.gz
+%endif
/usr/share/man/man1/ipptool.1.gz
/usr/share/man/man1/lp.1.gz
/usr/share/man/man1/lpoptions.1.gz
@@ -377,6 +406,7 @@ rm -rf $RPM_BUILD_ROOT
%dir /usr/share/doc/cups/help
/usr/share/doc/cups/help/api*.html
+/usr/share/doc/cups/help/cupspm.html
/usr/share/doc/cups/help/postscript-driver.html
/usr/share/doc/cups/help/ppd-compiler.html
/usr/share/doc/cups/help/raster-driver.html
diff --git a/packaging/cups.spec.in b/packaging/cups.spec.in
index 45c40ed..b1afb96 100644
--- a/packaging/cups.spec.in
+++ b/packaging/cups.spec.in
@@ -26,8 +26,8 @@
%{!?_with_dbus: %define _dbus --disable-dbus}
%{!?_with_dnssd: %{!?_without_dnssd: %define _with_dnssd --with-dnssd}}
-%{?_with_dnssd: %define _dnssd --enable-dnssd}
-%{!?_with_dnssd: %define _dnssd --disable-dnssd}
+%{?_with_dnssd: %define _dnssd --enable-avahi}
+%{!?_with_dnssd: %define _dnssd --disable-avahi}
%{!?_with_libusb1: %{!?_without_libusb1: %define _with_libusb1 --with-libusb1}}
%{?_with_libusb1: %define _libusb1 --enable-libusb}
@@ -116,7 +116,7 @@ This package provides LPD client support.
%build
CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" LDFLAGS="$RPM_OPT_FLAGS" \
- ./configure %{_dbus} %{_dnssd} %{_libusb1} %{_static}
+ ./configure %{_dbus} %{_dnssd} %{_libusb1} %{_static} %{_systemd}
# If we got this far, all prerequisite libraries must be here.
make
@@ -128,6 +128,15 @@ make BUILDROOT=$RPM_BUILD_ROOT install
rm -rf $RPM_BUILD_ROOT/usr/share/cups/banners $RPM_BUILD_ROOT/usr/share/cups/data
%post
+%if %{?_with_systemd:1}%{!?_with_systemd:0}
+/bin/systemctl enable org.cups.cupsd.service
+
+if test $1 -ge 1; then
+ /bin/systemctl stop org.cups.cupsd.service
+ /bin/systemctl start org.cups.cupsd.service
+fi
+
+%else
/sbin/chkconfig --add cups
/sbin/chkconfig cups on
@@ -136,21 +145,38 @@ if test $1 -gt 1; then
/sbin/service cups stop
/sbin/service cups start
fi
+%endif
%post libs
/sbin/ldconfig
%preun
+%if %{?_with_systemd:1}%{!?_with_systemd:0}
+if test $1 -ge 1; then
+ /bin/systemctl stop org.cups.cupsd.service
+ /bin/systemctl disable org.cups.cupsd.service
+fi
+
+%else
if test $1 = 0; then
/sbin/service cups stop
/sbin/chkconfig --del cups
fi
+%endif
%postun
+%if %{?_with_systemd:1}%{!?_with_systemd:0}
+if test $1 -ge 1; then
+ /bin/systemctl stop org.cups.cupsd.service
+ /bin/systemctl start org.cups.cupsd.service
+fi
+
+%else
if test $1 -ge 1; then
/sbin/service cups stop
/sbin/service cups start
fi
+%endif
%postun libs
/sbin/ldconfig
@@ -194,13 +220,13 @@ rm -rf $RPM_BUILD_ROOT
/usr/bin/cancel
/usr/bin/cupstestdsc
/usr/bin/cupstestppd
-/usr/bin/ippfind
/usr/bin/ipptool
/usr/bin/lp*
%dir /usr/lib/cups
%dir /usr/lib/cups/backend
%if %{?_with_dnssd:1}%{!?_with_dnssd:0}
# DNS-SD
+/usr/bin/ippfind
/usr/lib/cups/backend/dnssd
%endif
/usr/lib/cups/backend/http
@@ -306,7 +332,10 @@ rm -rf $RPM_BUILD_ROOT
/usr/share/man/man1/cups.1.gz
/usr/share/man/man1/cupstestdsc.1.gz
/usr/share/man/man1/cupstestppd.1.gz
+%if %{?_with_dnssd:1}%{!?_with_dnssd:0}
+# DNS-SD
/usr/share/man/man1/ippfind.1.gz
+%endif
/usr/share/man/man1/ipptool.1.gz
/usr/share/man/man1/lp.1.gz
/usr/share/man/man1/lpoptions.1.gz
@@ -377,6 +406,7 @@ rm -rf $RPM_BUILD_ROOT
%dir /usr/share/doc/cups/help
/usr/share/doc/cups/help/api*.html
+/usr/share/doc/cups/help/cupspm.html
/usr/share/doc/cups/help/postscript-driver.html
/usr/share/doc/cups/help/ppd-compiler.html
/usr/share/doc/cups/help/raster-driver.html
diff --git a/ppdc/Makefile b/ppdc/Makefile
index 4024244..fb35c7f 100644
--- a/ppdc/Makefile
+++ b/ppdc/Makefile
@@ -1,7 +1,7 @@
#
# Makefile for the CUPS PPD Compiler.
#
-# Copyright 2007-2016 by Apple Inc.
+# Copyright 2007-2017 by Apple Inc.
# Copyright 2002-2006 by Easy Software Products.
#
# These coded instructions, statements, and computer programs are the
@@ -68,7 +68,7 @@ EXECTARGETS = \
TARGETS = \
$(LIBTARGETS) \
$(EXECTARGETS) \
- genstrings
+ $(LOCALTARGET)
#
@@ -99,7 +99,7 @@ unittests: $(UNITTARGETS)
clean:
$(RM) $(OBJS) core
$(RM) *.bak *.bck core.*
- $(RM) $(TARGETS) $(UNITTARGETS)
+ $(RM) $(TARGETS) $(UNITTARGETS) genstrings
$(RM) -r ppd ppd2
$(RM) sample-import.drv sample.c test.drv
$(RM) libcupsppdc.so libcupsppdc.dylib
@@ -212,6 +212,13 @@ uninstall:
#
+# Local programs (not built when cross-compiling...)
+#
+
+local: genstrings
+
+
+#
# genstrings - generate GNU gettext strings.
#
diff --git a/scheduler/conf.c b/scheduler/conf.c
index 36f043f..3897073 100644
--- a/scheduler/conf.c
+++ b/scheduler/conf.c
@@ -2987,7 +2987,7 @@ read_cupsd_conf(cups_file_t *fp) /* I - File to read from */
else if (!_cups_strcasecmp(line, "SSLOptions"))
{
/*
- * SSLOptions [AllowRC4] [AllowSSL3] [None]
+ * SSLOptions [AllowRC4] [AllowSSL3] [AllowDH] [DenyCBC] [DenyTLS1.0] [None]
*/
int options = 0; /* SSL/TLS options */
@@ -3018,6 +3018,12 @@ read_cupsd_conf(cups_file_t *fp) /* I - File to read from */
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, "DenyCBC"))
+ options |= _HTTP_TLS_DENY_CBC;
+ else if (!_cups_strcasecmp(start, "DenyTLS1.0"))
+ options |= _HTTP_TLS_DENY_TLS10;
else if (!_cups_strcasecmp(start, "None"))
options = 0;
else if (_cups_strcasecmp(start, "NoEmptyFragments"))
diff --git a/scheduler/cups-lpd.c b/scheduler/cups-lpd.c
index 8d2ea49..5d5e6f8 100644
--- a/scheduler/cups-lpd.c
+++ b/scheduler/cups-lpd.c
@@ -29,7 +29,7 @@
# include <inttypes.h>
#endif /* HAVE_INTTYPES_H */
#ifdef __APPLE__
-# include <vproc.h>
+# include <xpc/xpc.h>
#endif /* __APPLE__ */
@@ -97,8 +97,10 @@ 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);
+ xpc_transaction_begin();
#endif /* __APPLE__ */
@@ -217,7 +219,7 @@ main(int argc, /* I - Number of command-line arguments */
putchar(1);
#ifdef __APPLE__
- vproc_transaction_end(NULL, vtran);
+ xpc_transaction_end();
#endif /* __APPLE__ */
return (1);
@@ -313,7 +315,7 @@ main(int argc, /* I - Number of command-line arguments */
closelog();
#ifdef __APPLE__
- vproc_transaction_end(NULL, vtran);
+ xpc_transaction_end();
#endif /* __APPLE__ */
return (status);
diff --git a/scheduler/ipp.c b/scheduler/ipp.c
index 2525e58..49a05a4 100644
--- a/scheduler/ipp.c
+++ b/scheduler/ipp.c
@@ -5366,7 +5366,7 @@ create_local_bg_thread(
}
}
else
- cupsdLogMessage(CUPSD_LOG_ERROR, "%s: PPD creation failed.", printer->name);
+ cupsdLogMessage(CUPSD_LOG_ERROR, "%s: PPD creation failed: %s", printer->name, cupsLastErrorString());
return (NULL);
}
@@ -5479,6 +5479,9 @@ create_local_printer(
return;
}
+ printer->shared = 0;
+ printer->temporary = 1;
+
cupsdSetDeviceURI(printer, ippGetString(device_uri, 0, NULL));
if (printer_geo_location)
diff --git a/scheduler/job.c b/scheduler/job.c
index 7824015..a8ba54c 100644
--- a/scheduler/job.c
+++ b/scheduler/job.c
@@ -2745,7 +2745,7 @@ cupsdSetJobState(
job->dirty = 1;
cupsdMarkDirty(CUPSD_DIRTY_JOBS);
}
- else if (!JobHistory && !job->printer)
+ else if (!job->printer)
{
/*
* Delete the job immediately if not actively printing...
diff --git a/scheduler/main.c b/scheduler/main.c
index bdb27a6..4a66cbc 100644
--- a/scheduler/main.c
+++ b/scheduler/main.c
@@ -88,6 +88,8 @@ static int dead_children = 0;
/* Dead children? */
static int stop_scheduler = 0;
/* Should the scheduler stop? */
+static time_t local_timeout = 0;
+ /* Next local printer timeout */
/*
@@ -701,6 +703,7 @@ main(int argc, /* I - Number of command-line args */
current_time = time(NULL);
event_time = current_time;
expire_time = current_time;
+ local_timeout = current_time + 60;
fds = 1;
report_time = 0;
senddoc_time = current_time;
@@ -957,6 +960,13 @@ main(int argc, /* I - Number of command-line args */
expire_time = current_time;
}
+ /*
+ * Delete stale local printers...
+ */
+
+ if (current_time >= local_timeout)
+ cupsdDeleteTemporaryPrinters(0);
+
#ifndef HAVE_AUTHORIZATION_H
/*
* Update the root certificate once every 5 minutes if we have client
@@ -1152,6 +1162,12 @@ main(int argc, /* I - Number of command-line args */
cupsdFreeAllJobs();
+ /*
+ * Delete all temporary printers...
+ */
+
+ cupsdDeleteTemporaryPrinters(1);
+
#ifdef __APPLE__
/*
* Stop monitoring system event monitoring...
@@ -1595,6 +1611,7 @@ select_timeout(int fds) /* I - Number of descriptors returned */
time_t now; /* Current time */
cupsd_client_t *con; /* Client information */
cupsd_job_t *job; /* Job information */
+ cupsd_printer_t *printer; /* Printer information */
const char *why; /* Debugging aid */
@@ -1631,13 +1648,13 @@ select_timeout(int fds) /* I - Number of descriptors returned */
#ifdef __APPLE__
/*
- * When going to sleep, wake up to cancel jobs that don't complete in time.
+ * When going to sleep, wake up to abort jobs that don't complete in time.
*/
if (SleepJobs > 0 && SleepJobs < timeout)
{
timeout = SleepJobs;
- why = "cancel jobs before sleeping";
+ why = "abort jobs before sleeping";
}
#endif /* __APPLE__ */
@@ -1719,6 +1736,22 @@ select_timeout(int fds) /* I - Number of descriptors returned */
}
}
+ /*
+ * Check for temporary printers that need to be deleted...
+ */
+
+ for (printer = (cupsd_printer_t *)cupsArrayFirst(Printers); printer; printer = (cupsd_printer_t *)cupsArrayNext(Printers))
+ {
+ if (printer->temporary && !printer->job && local_timeout > (printer->state_time + 60))
+ local_timeout = printer->state_time + 60;
+ }
+
+ if (timeout > local_timeout)
+ {
+ timeout = local_timeout;
+ why = "delete stale local printers";
+ }
+
#ifdef HAVE_MALLINFO
/*
* Log memory usage every minute...
diff --git a/scheduler/printers.c b/scheduler/printers.c
index e17d331..dca0962 100644
--- a/scheduler/printers.c
+++ b/scheduler/printers.c
@@ -756,11 +756,6 @@ cupsdDeletePrinter(
* Remove any old PPD or script files...
*/
- snprintf(filename, sizeof(filename), "%s/interfaces/%s", ServerRoot, p->name);
- unlink(filename);
- snprintf(filename, sizeof(filename), "%s/interfaces/%s.O", ServerRoot, p->name);
- unlink(filename);
-
snprintf(filename, sizeof(filename), "%s/ppd/%s.ppd", ServerRoot, p->name);
unlink(filename);
snprintf(filename, sizeof(filename), "%s/ppd/%s.ppd.O", ServerRoot, p->name);
@@ -840,6 +835,32 @@ cupsdDeletePrinter(
/*
+ * 'cupsdDeleteTemporaryPrinters()' - Delete unneeded temporary printers.
+ */
+
+void
+cupsdDeleteTemporaryPrinters(int force) /* I - Force deletion instead of auto? */
+{
+ cupsd_printer_t *p; /* Current printer */
+ time_t unused_time; /* Last time for printer state change */
+
+
+ /*
+ * Allow temporary printers to stick around for 60 seconds after the last job
+ * completes.
+ */
+
+ unused_time = time(NULL) - 60;
+
+ for (p = (cupsd_printer_t *)cupsArrayFirst(Printers); p; p = (cupsd_printer_t *)cupsArrayNext(Printers))
+ {
+ if (p->temporary && (force || p->state_time < unused_time))
+ cupsdDeletePrinter(p, 0);
+ }
+}
+
+
+/*
* 'cupsdFindDest()' - Find a destination in the list.
*/
@@ -4979,31 +5000,6 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */
p->type |= CUPS_PRINTER_REMOTE;
/*
- * Point the printer-uri-supported attribute to the
- * remote printer...
- */
-
- if (strchr(p->device_uri, '?'))
- {
- /*
- * Strip trailing "?options" from URI...
- */
-
- char resource[HTTP_MAX_URI], /* New URI */
- *ptr; /* Pointer into URI */
-
- strlcpy(resource, p->device_uri, sizeof(resource));
- if ((ptr = strchr(resource, '?')) != NULL)
- *ptr = '\0';
-
- ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_URI,
- "printer-uri-supported", NULL, resource);
- }
- else
- ippAddString(p->attrs, IPP_TAG_PRINTER, IPP_TAG_URI,
- "printer-uri-supported", NULL, p->device_uri);
-
- /*
* Then set the make-and-model accordingly...
*/
diff --git a/scheduler/printers.h b/scheduler/printers.h
index c63b471..e1d9910 100644
--- a/scheduler/printers.h
+++ b/scheduler/printers.h
@@ -1,7 +1,7 @@
/*
* Printer definitions for the CUPS scheduler.
*
- * Copyright 2007-2016 by Apple Inc.
+ * Copyright 2007-2017 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
*
* These coded instructions, statements, and computer programs are the
@@ -156,6 +156,7 @@ extern cupsd_printer_t *cupsdAddPrinter(const char *name);
extern void cupsdCreateCommonData(void);
extern void cupsdDeleteAllPrinters(void);
extern int cupsdDeletePrinter(cupsd_printer_t *p, int update);
+extern void cupsdDeleteTemporaryPrinters(int force);
extern cupsd_printer_t *cupsdFindDest(const char *name);
extern cupsd_printer_t *cupsdFindPrinter(const char *name);
extern cupsd_quota_t *cupsdFindQuota(cupsd_printer_t *p,
diff --git a/scheduler/process.c b/scheduler/process.c
index 27e8010..584b82e 100644
--- a/scheduler/process.c
+++ b/scheduler/process.c
@@ -125,6 +125,7 @@ cupsdCreateProfile(int job_id, /* I - Job ID or 0 for none */
if (LogLevel >= CUPSD_LOG_DEBUG)
cupsFilePuts(fp, "(debug deny)\n");
cupsFilePuts(fp, "(import \"system.sb\")\n");
+ cupsFilePuts(fp, "(import \"com.apple.corefoundation.sb\")\n");
cupsFilePuts(fp, "(system-network)\n");
cupsFilePuts(fp, "(allow mach-per-user-lookup)\n");
cupsFilePuts(fp, "(allow ipc-posix-sem)\n");
diff --git a/scheduler/sysman.c b/scheduler/sysman.c
index 1a46c30..8b43975 100644
--- a/scheduler/sysman.c
+++ b/scheduler/sysman.c
@@ -18,7 +18,7 @@
#include "cupsd.h"
#ifdef __APPLE__
-# include <vproc.h>
+# include <xpc/xpc.h>
# include <IOKit/pwr_mgt/IOPMLib.h>
#endif /* __APPLE__ */
@@ -129,7 +129,7 @@ cupsdSetBusyState(void)
"Active clients, printing jobs, and dirty files"
};
#ifdef __APPLE__
- static vproc_transaction_t vtran = 0; /* Current busy transaction */
+ static int tran = 0; /* Current busy transaction */
static IOPMAssertionID keep_awake = 0;/* Keep the system awake while printing */
#endif /* __APPLE__ */
@@ -172,12 +172,15 @@ cupsdSetBusyState(void)
busy = newbusy;
#ifdef __APPLE__
- if (busy && !vtran)
- vtran = vproc_transaction_begin(NULL);
- else if (!busy && vtran)
+ if (busy && !tran)
{
- vproc_transaction_end(NULL, vtran);
- vtran = 0;
+ xpc_transaction_begin();
+ tran = 1;
+ }
+ else if (!busy && tran)
+ {
+ xpc_transaction_end();
+ tran = 0;
}
#endif /* __APPLE__ */
}
@@ -350,7 +353,7 @@ cupsdStartSystemMonitor(void)
pthread_mutex_init(&SysEventThreadMutex, NULL);
pthread_cond_init(&SysEventThreadCond, NULL);
- pthread_create(&SysEventThread, NULL, (void *(*)())sysEventThreadEntry, NULL);
+ pthread_create(&SysEventThread, NULL, (void *(*)(void *))sysEventThreadEntry, NULL);
/*
* Monitor for power source changes via dispatch queue...
diff --git a/systemv/cupstestppd.c b/systemv/cupstestppd.c
index dbce718..9344c51 100644
--- a/systemv/cupstestppd.c
+++ b/systemv/cupstestppd.c
@@ -923,7 +923,7 @@ main(int argc, /* I - Number of command-line args */
int junkint; /* Temp integer */
- if (sscanf(attr->value, "(%[^)])%d", junkstr, &junkint) != 2)
+ if (sscanf(attr->value, "(%254[^)\n])%d", junkstr, &junkint) != 2)
{
if (verbose >= 0)
{
diff --git a/systemv/lpstat.c b/systemv/lpstat.c
index 6feb00e..cda4571 100644
--- a/systemv/lpstat.c
+++ b/systemv/lpstat.c
@@ -1,7 +1,7 @@
/*
* "lpstat" command for CUPS.
*
- * Copyright 2007-2016 by Apple Inc.
+ * Copyright 2007-2017 by Apple Inc.
* Copyright 1997-2006 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -77,7 +77,7 @@ main(int argc, /* I - Number of command-line arguments */
{
for (opt = argv[i] + 1; *opt; opt ++)
{
- switch (argv[i][1])
+ switch (*opt)
{
case 'D' : /* Show description */
long_status = 1;
@@ -240,6 +240,41 @@ main(int argc, /* I - Number of command-line arguments */
show_default(dests);
break;
+ case 'e' : /* List destinations */
+ {
+ cups_dest_t *temp = NULL, *dest;
+ int j, num_temp = cupsGetDests(&temp);
+
+ op = 'e';
+
+ for (j = num_temp, dest = temp; j > 0; j --, dest ++)
+ {
+ if (dest->instance)
+ printf("%s/%s", dest->name, dest->instance);
+ else
+ fputs(dest->name, stdout);
+
+ if (long_status)
+ {
+ const char *printer_uri_supported = cupsGetOption("printer-uri-supported", dest->num_options, dest->options);
+ const char *printer_is_temporary = cupsGetOption("printer-is-temporary", dest->num_options, dest->options);
+ const char *type = "network";
+
+ if (printer_is_temporary && !strcmp(printer_is_temporary, "true"))
+ type = "temporary";
+ else if (printer_uri_supported)
+ type = "permanent";
+
+ printf(" %s %s %s\n", type, printer_uri_supported ? printer_uri_supported : "none", cupsGetOption("device-uri", dest->num_options, dest->options));
+ }
+ else
+ putchar('\n');
+ }
+
+ cupsFreeDests(num_temp, temp);
+ }
+ break;
+
case 'f' : /* Show forms */
op = 'f';
if (opt[1] != '\0')
diff --git a/templates/de/printer.tmpl b/templates/de/printer.tmpl
index 454627f..89206ac 100644
--- a/templates/de/printer.tmpl
+++ b/templates/de/printer.tmpl
@@ -13,7 +13,7 @@
{printer_state=5?<OPTION VALUE="start-printer">Drucker starten</OPTION>:<OPTION VALUE="stop-printer">Drucker anhalten</OPTION>}
{printer_is_accepting_jobs=0?<OPTION VALUE="accept-jobs">Aufträge annehmen</OPTION>:<OPTION VALUE="reject-jobs">Aufträge ablehnen</OPTION>}
<OPTION VALUE="move-jobs">Alle Aufträge verschieben</OPTION>
-<OPTION VALUE="purge-jobs">Alle Aufträge abbrechen</OPTION>
+<OPTION VALUE="cancel-jobs">Alle Aufträge abbrechen</OPTION>
</SELECT>
<NOSCRIPT><INPUT TYPE="SUBMIT" VALUE="Go"></NOSCRIPT>
</FORM>
diff --git a/templates/es/jobs.tmpl b/templates/es/jobs.tmpl
index ac21a42..aba2c51 100644
--- a/templates/es/jobs.tmpl
+++ b/templates/es/jobs.tmpl
@@ -18,6 +18,7 @@
<TD>
{job_preserved>0?{job_state>5?
<FORM ACTION="/jobs/" METHOD="POST"><INPUT TYPE="HIDDEN" NAME="org.cups.sid" VALUE="{$org.cups.sid}"><INPUT TYPE="HIDDEN" NAME="OP" VALUE="restart-job"><INPUT TYPE="HIDDEN" NAME="job_id" VALUE="{job_id}"><INPUT TYPE="HIDDEN" NAME="job_printer_uri" VALUE="{job_printer_uri}">
+<INPUT TYPE="SUBMIT" VALUE="Reimprimir trabajo"></FORM>:}:}
{job_state=4?
<FORM ACTION="/jobs/" METHOD="POST"><INPUT TYPE="HIDDEN" NAME="org.cups.sid" VALUE="{$org.cups.sid}"><INPUT TYPE="HIDDEN" NAME="OP" VALUE="release-job"><INPUT TYPE="HIDDEN" NAME="job_id" VALUE="{job_id}"><INPUT TYPE="HIDDEN" NAME="job_printer_uri" VALUE="{job_printer_uri}">
<INPUT TYPE="SUBMIT" VALUE="Liberar trabajo"></FORM>:}
diff --git a/templates/ja/printer.tmpl b/templates/ja/printer.tmpl
index 2b82c61..184bba2 100644
--- a/templates/ja/printer.tmpl
+++ b/templates/ja/printer.tmpl
@@ -13,7 +13,7 @@
{printer_state=5?<OPTION VALUE="start-printer">プリンターを開始</OPTION>:<OPTION VALUE="stop-printer">プリンターの停止</OPTION>}
{printer_is_accepting_jobs=0?<OPTION VALUE="accept-jobs">ジョブを受け付け</OPTION>:<OPTION VALUE="reject-jobs">ジョブを拒否</OPTION>}
<OPTION VALUE="move-jobs">すべてのジョブの移動</OPTION>
-<OPTION VALUE="purge-jobs">すべてのジョブをキャンセル</OPTION>
+<OPTION VALUE="cancel-jobs">すべてのジョブをキャンセル</OPTION>
</SELECT>
<NOSCRIPT><INPUT TYPE="SUBMIT" VALUE="進む"></NOSCRIPT>
</FORM>
diff --git a/templates/pt_BR/printer.tmpl b/templates/pt_BR/printer.tmpl
index 922d4b4..996b4a4 100644
--- a/templates/pt_BR/printer.tmpl
+++ b/templates/pt_BR/printer.tmpl
@@ -13,7 +13,7 @@
{printer_state=5?<OPTION VALUE="start-printer">Pausar impressora</OPTION>:<OPTION VALUE="stop-printer">Pausar impressora</OPTION>}
{printer_is_accepting_jobs=0?<OPTION VALUE="accept-jobs">Aceitar trabalhos</OPTION>:<OPTION VALUE="reject-jobs">Rejeitar trabalhos</OPTION>}
<OPTION VALUE="move-jobs">Mover todos trabalhos</OPTION>
-<OPTION VALUE="purge-jobs">Cancelar todos trabalhos</OPTION>
+<OPTION VALUE="cancel-jobs">Cancelar todos trabalhos</OPTION>
</SELECT>
<NOSCRIPT><INPUT TYPE="SUBMIT" VALUE="Ir"></NOSCRIPT>
</FORM>
diff --git a/templates/ru/printer.tmpl b/templates/ru/printer.tmpl
index a2e9b40..105e643 100644
--- a/templates/ru/printer.tmpl
+++ b/templates/ru/printer.tmpl
@@ -13,7 +13,7 @@
{printer_state=5?<OPTION VALUE="start-printer">Восстановить печать</OPTION>:<OPTION VALUE="stop-printer">Приостановить принтер</OPTION>}
{printer_is_accepting_jobs=0?<OPTION VALUE="accept-jobs">Принимать задания</OPTION>:<OPTION VALUE="reject-jobs">Не принимать задания</OPTION>}
<OPTION VALUE="move-jobs">Переместить все задания</OPTION>
-<OPTION VALUE="purge-jobs">Отменить все задания</OPTION>
+<OPTION VALUE="cancel-jobs">Отменить все задания</OPTION>
</SELECT>
<NOSCRIPT><INPUT TYPE="SUBMIT" VALUE="Go"></NOSCRIPT>
</FORM>
diff --git a/test/5.4-lpstat.sh b/test/5.4-lpstat.sh
index 5092dbe..6dbd44a 100644
--- a/test/5.4-lpstat.sh
+++ b/test/5.4-lpstat.sh
@@ -2,7 +2,7 @@
#
# Test the lpstat command.
#
-# Copyright 2007-2011 by Apple Inc.
+# Copyright 2007-2017 by Apple Inc.
# Copyright 1997-2005 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
@@ -12,7 +12,7 @@
# file is missing or damaged, see the license at "http://www.cups.org/".
#
-echo "LPSTAT Test"
+echo "LPSTAT Basic Test"
echo ""
echo " lpstat -t"
$VALGRIND ../systemv/lpstat -t 2>&1
@@ -24,7 +24,22 @@ else
fi
echo ""
-echo "LPSTAT Test"
+echo "LPSTAT Enumeration Test"
+echo ""
+echo " lpstat -e"
+printers="`$VALGRIND ../systemv/lpstat -e 2>&1`"
+if test $? != 0 -o "x$printers" = x; then
+ echo " FAILED"
+ exit 1
+else
+ for printer in $printers; do
+ echo $printer
+ done
+ echo " PASSED"
+fi
+echo ""
+
+echo "LPSTAT Get Host Test"
echo ""
echo " lpstat -H"
server="`$VALGRIND ../systemv/lpstat -H 2>&1`"
diff --git a/test/Makefile b/test/Makefile
index 481783d..611397e 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -1,7 +1,7 @@
#
# IPP test makefile for CUPS.
#
-# Copyright 2007-2016 by Apple Inc.
+# Copyright 2007-2017 by Apple Inc.
# Copyright 1997-2006 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
@@ -58,7 +58,7 @@ TARGETS = \
$(IPPFIND_BIN) \
ippserver \
ipptool \
- ipptool-static
+ $(LOCALTARGET)
#
@@ -87,7 +87,8 @@ unittests:
#
clean:
- $(RM) $(TARGETS) $(OBJS) ippfind-static ippserver-shared
+ $(RM) $(TARGETS) $(OBJS)
+ $(RM) ippserver ippserver-shared ipptool-static
#
@@ -170,6 +171,13 @@ uninstall:
#
+# Local programs (not built when cross-compiling...)
+#
+
+local: ippserver ippserver-shared ipptool-static
+
+
+#
# ippfind
#
diff --git a/test/ipp-1.1.test b/test/ipp-1.1.test
index ffb4ae9..f7d8b82 100644
--- a/test/ipp-1.1.test
+++ b/test/ipp-1.1.test
@@ -1,16 +1,14 @@
#
-# "$Id$"
+# IPP/1.1 test suite.
#
-# IPP/1.1 test suite.
+# Copyright 2007-2017 by Apple Inc.
+# Copyright 2001-2006 by Easy Software Products. All rights reserved.
#
-# Copyright 2007-2015 by Apple Inc.
-# Copyright 2001-2006 by Easy Software Products. All rights reserved.
-#
-# 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/".
+# 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/".
#
# Usage:
#
@@ -30,9 +28,9 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
# Test that a request-id value of 0 is not accepted.
#
-# Required by: RFC 2911 section 3.1.1
+# Required by: RFC 8011 section 4.1.1
{
- NAME "RFC 2911 section 3.1.1: Bad request-id value 0"
+ NAME "RFC 8011 section 4.1.1: Bad request-id value 0"
REQUEST-ID 0
OPERATION Get-Printer-Attributes
GROUP operation-attributes-tag
@@ -48,9 +46,9 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
# Test that the first two attributes must be attributes-charset and
# attributes-natural-language.
#
-# Required by: RFC 2911 section 3.1.4
+# Required by: RFC 8011 section 4.1.4
{
- NAME "RFC 2911 section 3.1.4: No Operation Attributes"
+ NAME "RFC 8011 section 4.1.4: No Operation Attributes"
REQUEST-ID random
OPERATION Get-Printer-Attributes
GROUP operation-attributes-tag
@@ -59,7 +57,7 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
EXPECT !printer-uri-supported
}
{
- NAME "RFC 2911 section 3.1.4: attributes-charset"
+ NAME "RFC 8011 section 4.1.4: attributes-charset"
OPERATION Get-Printer-Attributes
GROUP operation-attributes-tag
ATTR charset attributes-charset utf-8
@@ -69,7 +67,7 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
EXPECT !printer-uri-supported
}
{
- NAME "RFC 2911 section 3.1.4: attributes-natural-language"
+ NAME "RFC 8011 section 4.1.4: attributes-natural-language"
OPERATION Get-Printer-Attributes
GROUP operation-attributes-tag
ATTR naturalLanguage attributes-natural-language en
@@ -79,7 +77,7 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
EXPECT !printer-uri-supported
}
{
- NAME "RFC 2911 section 3.1.4: attributes-natural-language + attributes-charset"
+ NAME "RFC 8011 section 4.1.4: attributes-natural-language + attributes-charset"
OPERATION Get-Printer-Attributes
GROUP operation-attributes-tag
ATTR naturalLanguage attributes-natural-language en
@@ -90,7 +88,7 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
EXPECT !printer-uri-supported
}
{
- NAME "RFC 2911 section 3.1.4: attributes-charset + attributes-natural-language"
+ NAME "RFC 8011 section 4.1.4: attributes-charset + attributes-natural-language"
OPERATION Get-Printer-Attributes
GROUP operation-attributes-tag
ATTR charset attributes-charset utf-8
@@ -104,10 +102,10 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
# Test that bad IPP versions are not supported.
#
-# Required by: RFC 2911 section 3.1.8
+# Required by: RFC 8011 section 4.1.8
{
# The name of the test...
- NAME "RFC 2911 section 3.1.8: Unsupported IPP version 0.0"
+ NAME "RFC 8011 section 4.1.8: Unsupported IPP version 0.0"
VERSION 0.0
OPERATION Get-Printer-Attributes
GROUP operation-attributes-tag
@@ -122,9 +120,9 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
# Test that printer operations require the printer-uri operation attribute.
#
-# Required by: RFC 2911 section 3.2
+# Required by: RFC 8011 section 4.2
{
- NAME "RFC 2911 section 3.2: No printer-uri operation attribute"
+ NAME "RFC 8011 section 4.2: No printer-uri operation attribute"
OPERATION Get-Printer-Attributes
GROUP operation-attributes-tag
ATTR charset attributes-charset utf-8
@@ -137,9 +135,9 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
# Test Print-Job operation
#
-# Required by: RFC 2911 section 3.2.1
+# Required by: RFC 8011 section 4.2.1
{
- NAME "RFC 2911 section 3.2.1: Print-Job Operation"
+ NAME "RFC 8011 section 4.2.1: Print-Job Operation"
OPERATION Print-Job
GROUP operation-attributes-tag
ATTR charset attributes-charset utf-8
@@ -172,9 +170,9 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
# Test Validate-Job operation
#
-# Required by: RFC 2911 section 3.2.3
+# Required by: RFC 8011 section 4.2.3
{
- NAME "RFC 2911 section 3.2.3: Validate-Job Operation"
+ NAME "RFC 8011 section 4.2.3: Validate-Job Operation"
OPERATION Validate-Job
GROUP operation-attributes-tag
ATTR charset attributes-charset utf-8
@@ -193,9 +191,9 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
# Test Get-Printer-Attributes operation
#
-# Required by: RFC 2911 section 3.2.5
+# Required by: RFC 8011 section 4.2.5
{
- NAME "RFC 2911 section 3.2.5: Get-Printer-Attributes Operation (default)"
+ NAME "RFC 8011 section 4.2.5: Get-Printer-Attributes Operation (default)"
OPERATION Get-Printer-Attributes
GROUP operation-attributes-tag
ATTR charset attributes-charset utf-8
@@ -337,9 +335,9 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
# Test Get-Printer-Attributes operation with requested-attributes
#
-# Required by: RFC 2911 section 3.2.5
+# Required by: RFC 8011 section 4.2.5
{
- NAME "RFC 2911 section 3.2.5: Get-Printer-Attributes Operation (requested-attributes)"
+ NAME "RFC 8011 section 4.2.5: Get-Printer-Attributes Operation (requested-attributes)"
OPERATION Get-Printer-Attributes
GROUP operation-attributes-tag
ATTR charset attributes-charset utf-8
@@ -358,9 +356,9 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
# Test Get-Jobs operation
#
-# Required by: RFC 2911 section 3.2.6
+# Required by: RFC 8011 section 4.2.6
{
- NAME "RFC 2911 section 3.2.6: Get-Jobs Operation (default)"
+ NAME "RFC 8011 section 4.2.6: Get-Jobs Operation (default)"
OPERATION Get-Jobs
GROUP operation-attributes-tag
ATTR charset attributes-charset utf-8
@@ -415,11 +413,11 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
# Test Get-Jobs operation
#
-# Required by: RFC 2911 section 3.2.6
+# Required by: RFC 8011 section 4.2.6
{
SKIP-IF-DEFINED PRINT_JOB_COMPLETED
- NAME "RFC 2911 section 3.2.6: Get-Jobs Operation (requested-attributes)"
+ NAME "RFC 8011 section 4.2.6: Get-Jobs Operation (requested-attributes)"
OPERATION Get-Jobs
GROUP operation-attributes-tag
ATTR charset attributes-charset utf-8
@@ -450,12 +448,12 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
EXPECT ?date-time-at-completed OF-TYPE no-value|dateTime IN-GROUP job-attributes-tag COUNT 1
EXPECT ?number-of-intervening-jobs OF-TYPE integer IN-GROUP job-attributes-tag COUNT 1
EXPECT ?job-message-from-operator OF-TYPE text IN-GROUP job-attributes-tag COUNT 1
- EXPECT ?job-k-octets OF-TYPE integer IN-GROUP job-attributes-tag COUNT 1
- EXPECT ?job-impressions OF-TYPE integer IN-GROUP job-attributes-tag COUNT 1
- EXPECT ?job-media-sheets OF-TYPE integer IN-GROUP job-attributes-tag COUNT 1
- EXPECT ?job-k-octets-processed OF-TYPE integer IN-GROUP job-attributes-tag COUNT 1
- EXPECT ?job-impressions-completed OF-TYPE integer IN-GROUP job-attributes-tag COUNT 1
- EXPECT ?job-media-sheets-completed OF-TYPE integer IN-GROUP job-attributes-tag COUNT 1
+ EXPECT ?job-k-octets OF-TYPE integer|no-value IN-GROUP job-attributes-tag COUNT 1
+ EXPECT ?job-impressions OF-TYPE integer|no-value IN-GROUP job-attributes-tag COUNT 1
+ EXPECT ?job-media-sheets OF-TYPE integer|no-value IN-GROUP job-attributes-tag COUNT 1
+ EXPECT ?job-k-octets-processed OF-TYPE integer|no-value IN-GROUP job-attributes-tag COUNT 1
+ EXPECT ?job-impressions-completed OF-TYPE integer|no-value IN-GROUP job-attributes-tag COUNT 1
+ EXPECT ?job-media-sheets-completed OF-TYPE integer|no-value IN-GROUP job-attributes-tag COUNT 1
EXPECT ?copies OF-TYPE integer IN-GROUP job-attributes-tag COUNT 1 WITH-VALUE >0
EXPECT ?finishings OF-TYPE enum IN-GROUP job-attributes-tag
@@ -475,11 +473,11 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
# Test Get-Jobs operation
#
-# Required by: RFC 2911 section 3.2.6
+# Required by: RFC 8011 section 4.2.6
{
SKIP-IF-DEFINED PRINT_JOB_COMPLETED
- NAME "RFC 2911 section 3.2.6: Get-Jobs Operation (my-jobs)"
+ NAME "RFC 8011 section 4.2.6: Get-Jobs Operation (my-jobs)"
OPERATION Get-Jobs
GROUP operation-attributes-tag
ATTR charset attributes-charset utf-8
@@ -535,7 +533,7 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
# Test Get-Jobs operation
#
-# Required by: RFC 2911 section 3.2.6
+# Required by: RFC 8011 section 4.2.6
{
SKIP-IF-DEFINED PRINT_JOB_COMPLETED
@@ -543,7 +541,7 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
# use the authenticated username over the requesting-user-name value.
SKIP-IF-DEFINED uriuser
- NAME "RFC 2911 section 3.2.6: Get-Jobs Operation (my-jobs different user)"
+ NAME "RFC 8011 section 4.2.6: Get-Jobs Operation (my-jobs different user)"
OPERATION Get-Jobs
GROUP operation-attributes-tag
ATTR charset attributes-charset utf-8
@@ -599,11 +597,11 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
# Test Get-Jobs operation
#
-# Required by: RFC 2911 section 3.2.6
+# Required by: RFC 8011 section 4.2.6
{
SKIP-IF-DEFINED PRINT_JOB_COMPLETED
- NAME "RFC 2911 section 3.2.6: Get-Jobs Operation (which-jobs=not-completed)"
+ NAME "RFC 8011 section 4.2.6: Get-Jobs Operation (which-jobs=not-completed)"
OPERATION Get-Jobs
GROUP operation-attributes-tag
ATTR charset attributes-charset utf-8
@@ -678,9 +676,9 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
# Test Get-Jobs operation
#
-# Required by: RFC 2911 section 3.2.6
+# Required by: RFC 8011 section 4.2.6
{
- NAME "RFC 2911 section 3.2.6: Get-Jobs Operation (which-jobs=completed)"
+ NAME "RFC 8011 section 4.2.6: Get-Jobs Operation (which-jobs=completed)"
OPERATION Get-Jobs
GROUP operation-attributes-tag
ATTR charset attributes-charset utf-8
@@ -736,11 +734,11 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
# Test Get-Jobs operation
#
-# Required by: RFC 2911 section 3.2.6
+# Required by: RFC 8011 section 4.2.6
{
SKIP-IF-DEFINED PRINT_JOB_COMPLETED
- NAME "RFC 2911 section 3.2.6: Get-Jobs Operation (which-jobs, requested-attributes)"
+ NAME "RFC 8011 section 4.2.6: Get-Jobs Operation (which-jobs, requested-attributes)"
OPERATION Get-Jobs
GROUP operation-attributes-tag
ATTR charset attributes-charset utf-8
@@ -772,12 +770,12 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
EXPECT ?date-time-at-completed OF-TYPE no-value|dateTime IN-GROUP job-attributes-tag COUNT 1
EXPECT ?number-of-intervening-jobs OF-TYPE integer IN-GROUP job-attributes-tag COUNT 1
EXPECT ?job-message-from-operator OF-TYPE text IN-GROUP job-attributes-tag COUNT 1
- EXPECT ?job-k-octets OF-TYPE integer IN-GROUP job-attributes-tag COUNT 1
- EXPECT ?job-impressions OF-TYPE integer IN-GROUP job-attributes-tag COUNT 1
- EXPECT ?job-media-sheets OF-TYPE integer IN-GROUP job-attributes-tag COUNT 1
- EXPECT ?job-k-octets-processed OF-TYPE integer IN-GROUP job-attributes-tag COUNT 1
- EXPECT ?job-impressions-completed OF-TYPE integer IN-GROUP job-attributes-tag COUNT 1
- EXPECT ?job-media-sheets-completed OF-TYPE integer IN-GROUP job-attributes-tag COUNT 1
+ EXPECT ?job-k-octets OF-TYPE integer|no-value IN-GROUP job-attributes-tag COUNT 1
+ EXPECT ?job-impressions OF-TYPE integer|no-value IN-GROUP job-attributes-tag COUNT 1
+ EXPECT ?job-media-sheets OF-TYPE integer|no-value IN-GROUP job-attributes-tag COUNT 1
+ EXPECT ?job-k-octets-processed OF-TYPE integer|no-value IN-GROUP job-attributes-tag COUNT 1
+ EXPECT ?job-impressions-completed OF-TYPE integer|no-value IN-GROUP job-attributes-tag COUNT 1
+ EXPECT ?job-media-sheets-completed OF-TYPE integer|no-value IN-GROUP job-attributes-tag COUNT 1
EXPECT ?copies OF-TYPE integer IN-GROUP job-attributes-tag COUNT 1 WITH-VALUE >0
EXPECT ?finishings OF-TYPE enum IN-GROUP job-attributes-tag
@@ -797,9 +795,9 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
# Test Cancel-Job operation
#
-# Required by: RFC 2911 section 3.3.3
+# Required by: RFC 8011 section 4.3.3
{
- NAME "RFC 2911 section 3.3.3: Cancel-Job Operation (completed job)"
+ NAME "RFC 8011 section 4.3.3: Cancel-Job Operation (completed job)"
OPERATION Cancel-Job
GROUP operation-attributes-tag
ATTR charset attributes-charset utf-8
@@ -814,9 +812,9 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
# Test Print-Job operation
#
-# Required by: RFC 2911 section 3.2.1
+# Required by: RFC 8011 section 4.2.1
{
- NAME "RFC 2911 section 3.2.1: Print-Job Operation"
+ NAME "RFC 8011 section 4.2.1: Print-Job Operation"
OPERATION Print-Job
GROUP operation-attributes-tag
ATTR charset attributes-charset utf-8
@@ -849,9 +847,9 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
# Test Cancel-Job operation
#
-# Required by: RFC 2911 section 3.3.3
+# Required by: RFC 8011 section 4.3.3
{
- NAME "RFC 2911 section 3.3.3: Cancel-Job Operation (pending/processing job)"
+ NAME "RFC 8011 section 4.3.3: Cancel-Job Operation (pending/processing job)"
OPERATION Cancel-Job
GROUP operation-attributes-tag
ATTR charset attributes-charset utf-8
@@ -867,9 +865,9 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
# Test Get-Job-Attributes operation
#
-# Required by: RFC 2911 section 3.3.4
+# Required by: RFC 8011 section 4.3.4
{
- NAME "RFC 2911 section 3.3.4: Get-Job-Attributes Operation"
+ NAME "RFC 8011 section 4.3.4: Get-Job-Attributes Operation"
OPERATION Get-Job-Attributes
GROUP operation-attributes-tag
ATTR charset attributes-charset utf-8
@@ -900,12 +898,12 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
EXPECT ?date-time-at-completed OF-TYPE no-value|dateTime IN-GROUP job-attributes-tag COUNT 1
EXPECT ?number-of-intervening-jobs OF-TYPE integer IN-GROUP job-attributes-tag COUNT 1
EXPECT ?job-message-from-operator OF-TYPE text IN-GROUP job-attributes-tag COUNT 1
- EXPECT ?job-k-octets OF-TYPE integer IN-GROUP job-attributes-tag COUNT 1
- EXPECT ?job-impressions OF-TYPE integer IN-GROUP job-attributes-tag COUNT 1
- EXPECT ?job-media-sheets OF-TYPE integer IN-GROUP job-attributes-tag COUNT 1
- EXPECT ?job-k-octets-processed OF-TYPE integer IN-GROUP job-attributes-tag COUNT 1
- EXPECT ?job-impressions-completed OF-TYPE integer IN-GROUP job-attributes-tag COUNT 1
- EXPECT ?job-media-sheets-completed OF-TYPE integer IN-GROUP job-attributes-tag COUNT 1
+ EXPECT ?job-k-octets OF-TYPE integer|no-value IN-GROUP job-attributes-tag COUNT 1
+ EXPECT ?job-impressions OF-TYPE integer|no-value IN-GROUP job-attributes-tag COUNT 1
+ EXPECT ?job-media-sheets OF-TYPE integer|no-value IN-GROUP job-attributes-tag COUNT 1
+ EXPECT ?job-k-octets-processed OF-TYPE integer|no-value IN-GROUP job-attributes-tag COUNT 1
+ EXPECT ?job-impressions-completed OF-TYPE integer|no-value IN-GROUP job-attributes-tag COUNT 1
+ EXPECT ?job-media-sheets-completed OF-TYPE integer|no-value IN-GROUP job-attributes-tag COUNT 1
EXPECT ?copies OF-TYPE integer IN-GROUP job-attributes-tag COUNT 1 WITH-VALUE >0
EXPECT ?finishings OF-TYPE enum IN-GROUP job-attributes-tag
@@ -925,12 +923,12 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
# Test Print-URI operation
#
-# Defined by: RFC 2911 section 3.2.2
+# Defined by: RFC 8011 section 4.2.2
{
SKIP-IF-NOT-DEFINED OPTIONAL_PRINT_URI
SKIP-IF-NOT-DEFINED document-uri
- NAME "RFC 2911 section 3.2.2: Print-URI Operation"
+ NAME "RFC 8011 section 4.2.2: Print-URI Operation"
OPERATION Print-URI
GROUP operation-attributes-tag
ATTR charset attributes-charset utf-8
@@ -961,7 +959,7 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
# Test Print-URI operation with bad document-uri
#
-# Defined by: RFC 2911 section 3.2.2
+# Defined by: RFC 8011 section 4.2.2
{
SKIP-IF-NOT-DEFINED OPTIONAL_PRINT_URI
SKIP-IF-NOT-DEFINED document-uri
@@ -991,12 +989,12 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
# Test Create-Job and Send-Document operations
#
-# Defined by: RFC 2911 section 3.2.4 and 3.3.1
+# Defined by: RFC 8011 section 4.2.4 and 4.3.1
{
SKIP-IF-NOT-DEFINED OPTIONAL_CREATE_JOB
SKIP-IF-NOT-DEFINED OPTIONAL_SEND_DOCUMENT
- NAME "RFC 2911 section 3.2.4: Create-Job Operation"
+ NAME "RFC 8011 section 4.2.4: Create-Job Operation"
OPERATION Create-Job
GROUP operation-attributes-tag
ATTR charset attributes-charset utf-8
@@ -1024,7 +1022,7 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
SKIP-IF-NOT-DEFINED OPTIONAL_SEND_DOCUMENT
SKIP-PREVIOUS-ERROR yes
- NAME "RFC 2911 section 3.3.1: Send-Document Operation"
+ NAME "RFC 8011 section 4.3.1: Send-Document Operation"
OPERATION Send-Document
GROUP operation-attributes-tag
ATTR charset attributes-charset utf-8
@@ -1045,7 +1043,7 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
# Test Create-Job and Send-Document operations (no last-document)
#
-# Defined by: RFC 2911 section 3.2.4 and 3.3.1
+# Defined by: RFC 8011 section 4.2.4 and 4.3.1
{
SKIP-IF-NOT-DEFINED OPTIONAL_CREATE_JOB
SKIP-IF-NOT-DEFINED OPTIONAL_SEND_DOCUMENT
@@ -1099,7 +1097,7 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
SKIP-IF-NOT-DEFINED OPTIONAL_SEND_DOCUMENT
SKIP-PREVIOUS-ERROR yes
- NAME "RFC 2911 section 3.3.3: Cancel-Job Operation"
+ NAME "RFC 8011 section 4.3.3: Cancel-Job Operation"
OPERATION Cancel-Job
GROUP operation-attributes-tag
ATTR charset attributes-charset utf-8
@@ -1114,13 +1112,13 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
# Test Create-Job and Send-URI operations
#
-# Defined by: RFC 2911 section 3.2.4 and 3.3.2
+# Defined by: RFC 8011 section 4.2.4 and 4.3.2
{
SKIP-IF-NOT-DEFINED OPTIONAL_CREATE_JOB
SKIP-IF-NOT-DEFINED OPTIONAL_SEND_URI
SKIP-IF-NOT-DEFINED document-uri
- NAME "RFC 2911 section 3.2.4: Create-Job Operation"
+ NAME "RFC 8011 section 4.2.4: Create-Job Operation"
OPERATION Create-Job
GROUP operation-attributes-tag
ATTR charset attributes-charset utf-8
@@ -1149,7 +1147,7 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
SKIP-IF-NOT-DEFINED document-uri
SKIP-PREVIOUS-ERROR yes
- NAME "RFC 2911 section 3.3.2: Send-URI Operation"
+ NAME "RFC 8011 section 4.3.2: Send-URI Operation"
OPERATION Send-URI
GROUP operation-attributes-tag
ATTR charset attributes-charset utf-8
@@ -1169,7 +1167,7 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
# Test Create-Job and Send-URI operations (bad URI)
#
-# Defined by: RFC 2911 section 3.2.4 and 3.3.2
+# Defined by: RFC 8011 section 4.2.4 and 4.3.2
{
SKIP-IF-NOT-DEFINED OPTIONAL_CREATE_JOB
SKIP-IF-NOT-DEFINED OPTIONAL_SEND_URI
@@ -2343,8 +2341,3 @@ DEFINE IPP_URI_SCHEME "/^ipps?://.+$$/"
STATUS successful-ok
STATUS client-error-not-possible
}
-
-
-#
-# End of "$Id$".
-#
diff --git a/test/ipp-2.0.test b/test/ipp-2.0.test
index 0ee0e94..28ab4be 100644
--- a/test/ipp-2.0.test
+++ b/test/ipp-2.0.test
@@ -1,16 +1,14 @@
#
-# "$Id$"
+# IPP/2.0 test suite.
#
-# IPP/2.0 test suite.
+# Copyright 2007-2017 by Apple Inc.
+# Copyright 2001-2006 by Easy Software Products. All rights reserved.
#
-# Copyright 2007-2012 by Apple Inc.
-# Copyright 2001-2006 by Easy Software Products. All rights reserved.
-#
-# 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/".
+# 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/".
#
# Usage:
#
@@ -19,7 +17,7 @@
# Do all of the IPP/1.1 tests as an IPP/2.0 client
#
-# Required by: PWG 5100.12 section 4.3
+# Required by: PWG 5100.12 section 4.1
INCLUDE "ipp-1.1.test"
@@ -108,8 +106,3 @@ DEFINE MEDIA_REGEX "/^(choice(_((custom|na|asme|roc|oe|roll)_[a-z0-9][-a-z0-9]*_
EXPECT printer-make-and-model OF-TYPE text IN-GROUP printer-attributes-tag COUNT 1 WITH-VALUE "/^.{0,127}$$/"
EXPECT printer-more-info OF-TYPE uri IN-GROUP printer-attributes-tag COUNT 1
}
-
-
-#
-# End of "$Id$".
-#
diff --git a/test/ipp-2.1.test b/test/ipp-2.1.test
index e8ddae4..5265556 100644
--- a/test/ipp-2.1.test
+++ b/test/ipp-2.1.test
@@ -1,16 +1,14 @@
#
-# "$Id$"
+# IPP/2.1 test suite.
#
-# IPP/2.1 test suite.
+# Copyright 2007-2017 by Apple Inc.
+# Copyright 2001-2006 by Easy Software Products. All rights reserved.
#
-# Copyright 2007-2011 by Apple Inc.
-# Copyright 2001-2006 by Easy Software Products. All rights reserved.
-#
-# 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/".
+# 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/".
#
# Usage:
#
@@ -89,8 +87,3 @@ INCLUDE "ipp-2.0.test"
EXPECT printer-state-change-time OF-TYPE integer IN-GROUP printer-attributes-tag COUNT 1
EXPECT printer-state-reasons OF-TYPE keyword IN-GROUP printer-attributes-tag
}
-
-
-#
-# End of "$Id$".
-#
diff --git a/test/ipp-2.2.test b/test/ipp-2.2.test
index 3042ec2..a8cbc19 100644
--- a/test/ipp-2.2.test
+++ b/test/ipp-2.2.test
@@ -1,16 +1,14 @@
#
-# "$Id$"
+# IPP/2.2 test suite.
#
-# IPP/2.2 test suite.
+# Copyright 2007-2017 by Apple Inc.
+# Copyright 2001-2006 by Easy Software Products. All rights reserved.
#
-# Copyright 2007-2011 by Apple Inc.
-# Copyright 2001-2006 by Easy Software Products. All rights reserved.
-#
-# 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/".
+# 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/".
#
# Usage:
#
@@ -79,8 +77,3 @@ INCLUDE "ipp-2.1.test"
EXPECT operations-supported WITH-VALUE 0x003A # Resubmit-Job
EXPECT operations-supported WITH-VALUE 0x003B # Close-Job
}
-
-
-#
-# End of "$Id$".
-#
diff --git a/test/ipp-everywhere.test b/test/ipp-everywhere.test
index d1e5b2c..a1c8f00 100644
--- a/test/ipp-everywhere.test
+++ b/test/ipp-everywhere.test
@@ -1,16 +1,14 @@
#
-# "$Id$"
+# IPP Everywhere test suite.
#
-# IPP Everywhere test suite.
+# Copyright 2007-2013 by Apple Inc.
+# Copyright 2001-2006 by Easy Software Products. All rights reserved.
#
-# Copyright 2007-2013 by Apple Inc.
-# Copyright 2001-2006 by Easy Software Products. All rights reserved.
-#
-# 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/".
+# 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/".
#
# Usage:
#
@@ -9682,8 +9680,3 @@ INCLUDE "ipp-2.0.test"
STATUS successful-ok
STATUS server-error-busy REPEAT-MATCH
}
-
-
-#
-# End of "$Id$".
-#
diff --git a/test/ippserver.c b/test/ippserver.c
index 0cca65a..e93763d 100644
--- a/test/ippserver.c
+++ b/test/ippserver.c
@@ -5007,7 +5007,6 @@ load_attributes(const char *filename, /* I - File to load */
break;
ippSetCollection(attrs, &attrptr, ippGetCount(attrptr), col);
- lastcol = attrptr;
}
while (!strcmp(token, "{"));
break;
@@ -7015,7 +7014,7 @@ valid_doc_attributes(
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))
+ if (format && !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...
diff --git a/test/ipptool.c b/test/ipptool.c
index 1699366..55b9b97 100644
--- a/test/ipptool.c
+++ b/test/ipptool.c
@@ -1,7 +1,7 @@
/*
* ipptool command for CUPS.
*
- * Copyright 2007-2016 by Apple Inc.
+ * Copyright 2007-2017 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -152,33 +152,34 @@ static int PasswordTries = 0; /* Number of tries with password */
*/
static void add_stringf(cups_array_t *a, const char *s, ...) __attribute__ ((__format__ (__printf__, 2, 3)));
+static int compare_uris(const char *a, const char *b);
static int compare_vars(_cups_var_t *a, _cups_var_t *b);
-static int do_tests(FILE *outfile, _cups_vars_t *vars, const char *testfile);
+static int do_tests(cups_file_t *outfile, _cups_vars_t *vars, const char *testfile);
static void expand_variables(_cups_vars_t *vars, char *dst, const char *src, size_t dstsize) __attribute__((nonnull(1,2,3)));
static int expect_matches(_cups_expect_t *expect, ipp_tag_t value_tag);
-static ipp_t *get_collection(FILE *outfile, _cups_vars_t *vars, FILE *fp, int *linenum);
+static ipp_t *get_collection(cups_file_t *outfile, _cups_vars_t *vars, cups_file_t *fp, int *linenum);
static char *get_filename(const char *testfile, char *dst, const char *src, size_t dstsize);
static const char *get_string(ipp_attribute_t *attr, int element, int flags, char *buffer, size_t bufsize);
-static char *get_token(FILE *fp, char *buf, int buflen, int *linenum);
+static char *get_token(cups_file_t *fp, char *buf, int buflen, int *linenum);
static char *get_variable(_cups_vars_t *vars, const char *name);
static char *iso_date(ipp_uchar_t *date);
static const char *password_cb(const char *prompt);
static void pause_message(const char *message);
-static void print_attr(FILE *outfile, int format, ipp_attribute_t *attr, ipp_tag_t *group);
-static void print_csv(FILE *outfile, ipp_attribute_t *attr, int num_displayed, char **displayed, size_t *widths);
-static void print_fatal_error(FILE *outfile, const char *s, ...) __attribute__ ((__format__ (__printf__, 2, 3)));
-static void print_line(FILE *outfile, ipp_attribute_t *attr, int num_displayed, char **displayed, size_t *widths);
-static void print_xml_header(FILE *outfile);
-static void print_xml_string(FILE *outfile, const char *element, const char *s);
-static void print_xml_trailer(FILE *outfile, int success, const char *message);
-static void set_variable(FILE *outfile, _cups_vars_t *vars, const char *name, const char *value);
+static void print_attr(cups_file_t *outfile, int format, ipp_attribute_t *attr, ipp_tag_t *group);
+static void print_csv(cups_file_t *outfile, ipp_attribute_t *attr, int num_displayed, char **displayed, size_t *widths);
+static void print_fatal_error(cups_file_t *outfile, const char *s, ...) __attribute__ ((__format__ (__printf__, 2, 3)));
+static void print_line(cups_file_t *outfile, ipp_attribute_t *attr, int num_displayed, char **displayed, size_t *widths);
+static void print_xml_header(cups_file_t *outfile);
+static void print_xml_string(cups_file_t *outfile, const char *element, const char *s);
+static void print_xml_trailer(cups_file_t *outfile, int success, const char *message);
+static void set_variable(cups_file_t *outfile, _cups_vars_t *vars, const char *name, const char *value);
#ifndef WIN32
static void sigterm_handler(int sig);
#endif /* WIN32 */
static int timeout_cb(http_t *http, void *user_data);
static void usage(void) __attribute__((noreturn));
-static int validate_attr(FILE *outfile, cups_array_t *errors, ipp_attribute_t *attr);
-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 validate_attr(cups_file_t *outfile, cups_array_t *errors, ipp_attribute_t *attr);
+static int with_value(cups_file_t *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);
@@ -192,8 +193,8 @@ main(int argc, /* I - Number of command-line args */
{
int i; /* Looping var */
int status; /* Status of tests... */
- FILE *outfile = stdout;
- /* Output file */
+ cups_file_t *outfile = cupsFileStdout();
+ /* Output file */
char *opt, /* Current option */
name[1024], /* Name/value buffer */
*value, /* Pointer to value */
@@ -301,10 +302,10 @@ main(int argc, /* I - Number of command-line args */
usage();
}
- if (outfile != stdout)
+ if (outfile != cupsFileStdout())
usage();
- if ((outfile = fopen(argv[i], "w")) == NULL)
+ if ((outfile = cupsFileOpen(argv[i], "w")) == NULL)
{
_cupsLangPrintf(stderr, _("%s: Unable to open \"%s\": %s"), "ipptool", argv[i], strerror(errno));
exit(1);
@@ -696,12 +697,12 @@ main(int argc, /* I - Number of command-line args */
* Show a summary report if there were multiple tests...
*/
- printf("\nSummary: %d tests, %d passed, %d failed, %d skipped\n"
- "Score: %d%%\n", TestCount, PassCount, FailCount, SkipCount,
- 100 * (PassCount + SkipCount) / TestCount);
+ cupsFilePrintf(cupsFileStdout(), "\nSummary: %d tests, %d passed, %d failed, %d skipped\nScore: %d%%\n", TestCount, PassCount, FailCount, SkipCount, 100 * (PassCount + SkipCount) / TestCount);
}
- /*
+ cupsFileClose(outfile);
+
+/*
* Exit...
*/
@@ -746,6 +747,71 @@ add_stringf(cups_array_t *a, /* I - Array */
/*
+ * 'compare_uris()' - Compare two URIs...
+ */
+
+static int /* O - Result of comparison */
+compare_uris(const char *a, /* I - First URI */
+ const char *b) /* I - Second URI */
+{
+ char ascheme[32], /* Components of first URI */
+ auserpass[256],
+ ahost[256],
+ aresource[256];
+ int aport;
+ char bscheme[32], /* Components of second URI */
+ buserpass[256],
+ bhost[256],
+ bresource[256];
+ int bport;
+ char *ptr; /* Pointer into string */
+ int result; /* Result of comparison */
+
+
+ /*
+ * Separate the URIs into their components...
+ */
+
+ if (httpSeparateURI(HTTP_URI_CODING_ALL, a, ascheme, sizeof(ascheme), auserpass, sizeof(auserpass), ahost, sizeof(ahost), &aport, aresource, sizeof(aresource)) < HTTP_URI_STATUS_OK)
+ return (-1);
+
+ if (httpSeparateURI(HTTP_URI_CODING_ALL, b, bscheme, sizeof(bscheme), buserpass, sizeof(buserpass), bhost, sizeof(bhost), &bport, bresource, sizeof(bresource)) < HTTP_URI_STATUS_OK)
+ return (-1);
+
+ /*
+ * Strip trailing dots from the host components, if present...
+ */
+
+ if ((ptr = ahost + strlen(ahost) - 1) > ahost && *ptr == '.')
+ *ptr = '\0';
+
+ if ((ptr = bhost + strlen(bhost) - 1) > bhost && *ptr == '.')
+ *ptr = '\0';
+
+ /*
+ * Compare each component...
+ */
+
+ if ((result = _cups_strcasecmp(ascheme, bscheme)) != 0)
+ return (result);
+
+ if ((result = strcmp(auserpass, buserpass)) != 0)
+ return (result);
+
+ if ((result = _cups_strcasecmp(ahost, bhost)) != 0)
+ return (result);
+
+ if (aport != bport)
+ return (aport - bport);
+
+ if (!_cups_strcasecmp(ascheme, "mailto") || !_cups_strcasecmp(ascheme, "urn"))
+ return (_cups_strcasecmp(aresource, bresource));
+ else
+ return (strcmp(aresource, bresource));
+}
+
+
+/*
* 'compare_vars()' - Compare two variables.
*/
@@ -762,7 +828,7 @@ compare_vars(_cups_var_t *a, /* I - First variable */
*/
static int /* 1 = success, 0 = failure */
-do_tests(FILE *outfile, /* I - Output file */
+do_tests(cups_file_t *outfile, /* I - Output file */
_cups_vars_t *vars, /* I - Variables */
const char *testfile) /* I - Test file to use */
{
@@ -775,11 +841,11 @@ do_tests(FILE *outfile, /* I - Output file */
ignore_errors, /* Ignore test failures? */
skip_previous = 0, /* Skip on previous test failure? */
repeat_count, /* Repeat count */
- repeat_interval, /* Repeat interval */
- repeat_prev, /* Previous repeat interval */
repeat_test; /* Repeat a test? */
+ useconds_t delay, /* Initial delay */
+ repeat_interval; /* Repeat interval (delay) */
http_t *http = NULL; /* HTTP connection to server */
- FILE *fp = NULL; /* Test file */
+ cups_file_t *fp = NULL; /* Test file */
char resource[512], /* Resource for request */
token[1024], /* Token from file */
*tokenptr, /* Pointer into token */
@@ -809,7 +875,8 @@ do_tests(FILE *outfile, /* I - Output file */
int num_statuses = 0; /* Number of valid status codes */
_cups_status_t statuses[100], /* Valid status codes */
*last_status; /* Last STATUS (for predicates) */
- int num_expects = 0; /* Number of expected attributes */
+ int status_ok, /* Did we get a matching status? */
+ num_expects = 0; /* Number of expected attributes */
_cups_expect_t expects[200], /* Expected attributes */
*expect, /* Current expected attribute */
*last_expect; /* Last EXPECT (for predicates) */
@@ -825,7 +892,7 @@ do_tests(FILE *outfile, /* I - Output file */
* Open the test file...
*/
- if ((fp = fopen(testfile, "r")) == NULL)
+ if ((fp = cupsFileOpen(testfile, "r")) == NULL)
{
print_fatal_error(outfile, "Unable to open test file %s - %s", testfile,
strerror(errno));
@@ -860,7 +927,7 @@ do_tests(FILE *outfile, /* I - Output file */
* Loop on tests...
*/
- CUPS_SRAND(time(NULL));
+ CUPS_SRAND((unsigned)time(NULL));
errors = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup,
(cups_afree_func_t)free);
@@ -1197,8 +1264,8 @@ do_tests(FILE *outfile, /* I - Output file */
{
if (Output == _CUPS_OUTPUT_PLIST)
print_xml_header(outfile);
- if (Output == _CUPS_OUTPUT_TEST || (Output == _CUPS_OUTPUT_PLIST && outfile != stdout))
- printf("\"%s\":\n", testfile);
+ if (Output == _CUPS_OUTPUT_TEST || (Output == _CUPS_OUTPUT_PLIST && outfile != cupsFileStdout()))
+ cupsFilePrintf(cupsFileStdout(), "\"%s\":\n", testfile);
show_header = 0;
}
@@ -1206,19 +1273,22 @@ do_tests(FILE *outfile, /* I - Output file */
strlcpy(resource, vars->resource, sizeof(resource));
request_id ++;
- request = ippNew();
- op = (ipp_op_t)0;
- group = IPP_TAG_ZERO;
- ignore_errors = IgnoreErrors;
- last_expect = NULL;
- last_status = NULL;
- filename[0] = '\0';
- skip_previous = 0;
- skip_test = 0;
- test_id[0] = '\0';
- version = Version;
- transfer = Transfer;
- compression[0] = '\0';
+ request = ippNew();
+ op = (ipp_op_t)0;
+ group = IPP_TAG_ZERO;
+ ignore_errors = IgnoreErrors;
+ last_expect = NULL;
+ last_status = NULL;
+ filename[0] = '\0';
+ skip_previous = 0;
+ skip_test = 0;
+ test_id[0] = '\0';
+ version = Version;
+ transfer = Transfer;
+ compression[0] = '\0';
+ delay = 0;
+ repeat_count = 0;
+ repeat_interval = 5000000;
strlcpy(name, testfile, sizeof(name));
if (strrchr(name, '.') != NULL)
@@ -1615,7 +1685,7 @@ do_tests(FILE *outfile, /* I - Output file */
goto test_exit;
}
- if ((value = ippTagValue(token)) < 0)
+ if ((value = ippTagValue(token)) == IPP_TAG_ZERO || value >= IPP_TAG_UNSUPPORTED_VALUE)
{
print_fatal_error(outfile, "Bad GROUP tag \"%s\" on line %d.", token, linenum);
pass = 0;
@@ -1633,7 +1703,7 @@ do_tests(FILE *outfile, /* I - Output file */
* Delay before operation...
*/
- double delay;
+ double dval; /* Delay value */
if (!get_token(fp, temp, sizeof(temp), &linenum))
{
@@ -1644,20 +1714,30 @@ do_tests(FILE *outfile, /* I - Output file */
expand_variables(vars, token, temp, sizeof(token));
- if ((delay = _cupsStrScand(token, NULL, localeconv())) <= 0.0)
+ if ((dval = _cupsStrScand(token, &tokenptr, localeconv())) <= 0.0 || (*tokenptr && *tokenptr != ','))
{
print_fatal_error(outfile, "Bad DELAY value \"%s\" on line %d.", token,
linenum);
pass = 0;
goto test_exit;
}
- else
- {
- if (Output == _CUPS_OUTPUT_TEST)
- printf(" [%g second delay]\n", delay);
- usleep((useconds_t)(1000000.0 * delay));
- }
+ delay = (useconds_t)(1000000.0 * dval);
+
+ if (*tokenptr == ',')
+ {
+ if ((dval = _cupsStrScand(tokenptr + 1, &tokenptr, localeconv())) <= 0.0 || *tokenptr)
+ {
+ print_fatal_error(outfile, "Bad DELAY value \"%s\" on line %d.", token,
+ linenum);
+ pass = 0;
+ goto test_exit;
+ }
+
+ repeat_interval = (useconds_t)(1000000.0 * dval);
+ }
+ else
+ repeat_interval = delay;
}
else if (!_cups_strcasecmp(token, "ATTR"))
{
@@ -1672,7 +1752,7 @@ do_tests(FILE *outfile, /* I - Output file */
goto test_exit;
}
- if ((value = ippTagValue(token)) == IPP_TAG_ZERO)
+ if ((value = ippTagValue(token)) < IPP_TAG_UNSUPPORTED_VALUE)
{
print_fatal_error(outfile, "Bad ATTR value tag \"%s\" on line %d.", token,
linenum);
@@ -1687,18 +1767,46 @@ do_tests(FILE *outfile, /* I - Output file */
goto test_exit;
}
- if (!get_token(fp, temp, sizeof(temp), &linenum))
+ if (value < IPP_TAG_INTEGER)
+ {
+ /*
+ * Add out-of-band value - no value string needed...
+ */
+
+ token[0] = '\0';
+ }
+ else if (!get_token(fp, temp, sizeof(temp), &linenum))
{
print_fatal_error(outfile, "Missing ATTR value on line %d.", linenum);
pass = 0;
goto test_exit;
}
+ else
+ {
+ expand_variables(vars, token, temp, sizeof(token));
+ }
- expand_variables(vars, token, temp, sizeof(token));
attrptr = NULL;
switch (value)
{
+ default :
+ if (value < IPP_TAG_INTEGER)
+ {
+ /*
+ * Add out-of-band value...
+ */
+
+ attrptr = ippAddOutOfBand(request, group, value, attr);
+ }
+ else
+ {
+ print_fatal_error(outfile, "Unsupported ATTR value tag %s for \"%s\" on line %d.", ippTagString(value), attr, linenum);
+ pass = 0;
+ goto test_exit;
+ }
+ break;
+
case IPP_TAG_BOOLEAN :
if (!_cups_strcasecmp(token, "true"))
attrptr = ippAddBoolean(request, group, attr, 1);
@@ -1880,16 +1988,16 @@ do_tests(FILE *outfile, /* I - Output file */
do
{
- ipp_t *col; /* Collection value */
- long savepos = ftell(fp); /* Save position of file */
- int savelinenum = linenum; /* Save line number */
+ ipp_t *col; /* Collection value */
+ off_t savepos = cupsFileTell(fp); /* Save position of file */
+ int savelinenum = linenum; /* Save line number */
if (!get_token(fp, token, sizeof(token), &linenum))
break;
if (strcmp(token, ","))
{
- fseek(fp, savepos, SEEK_SET);
+ cupsFileSeek(fp, savepos);
linenum = savelinenum;
break;
}
@@ -1915,11 +2023,6 @@ do_tests(FILE *outfile, /* I - Output file */
attrptr = ippAddOctetString(request, group, attr, token, (int)strlen(token));
break;
- default :
- print_fatal_error(outfile, "Unsupported ATTR value tag %s for \"%s\" on line %d.", ippTagString(value), attr, linenum);
- pass = 0;
- goto test_exit;
-
case IPP_TAG_TEXTLANG :
case IPP_TAG_NAMELANG :
case IPP_TAG_TEXT :
@@ -2201,15 +2304,17 @@ do_tests(FILE *outfile, /* I - Output file */
goto test_exit;
}
- if ((in_group = ippTagValue(token)) == (ipp_tag_t)-1)
+ if ((in_group = ippTagValue(token)) == IPP_TAG_ZERO || in_group >= IPP_TAG_UNSUPPORTED_VALUE)
{
+ print_fatal_error(outfile, "Bad IN-GROUP group tag \"%s\" on line %d.", token, linenum);
+ pass = 0;
+ goto test_exit;
}
else if (last_expect)
last_expect->in_group = in_group;
else
{
- print_fatal_error(outfile, "IN-GROUP without a preceding EXPECT on line %d.",
- linenum);
+ print_fatal_error(outfile, "IN-GROUP without a preceding EXPECT on line %d.", linenum);
pass = 0;
goto test_exit;
}
@@ -2235,8 +2340,7 @@ do_tests(FILE *outfile, /* I - Output file */
last_expect->repeat_limit = atoi(token);
else
{
- print_fatal_error(outfile, "REPEAT-LIMIT without a preceding EXPECT or STATUS "
- "on line %d.", linenum);
+ print_fatal_error(outfile, "REPEAT-LIMIT without a preceding EXPECT or STATUS on line %d.", linenum);
pass = 0;
goto test_exit;
}
@@ -2249,8 +2353,7 @@ do_tests(FILE *outfile, /* I - Output file */
last_expect->repeat_match = 1;
else
{
- print_fatal_error(outfile, "REPEAT-MATCH without a preceding EXPECT or STATUS "
- "on line %d.", linenum);
+ print_fatal_error(outfile, "REPEAT-MATCH without a preceding EXPECT or STATUS on line %d.", linenum);
pass = 0;
goto test_exit;
}
@@ -2263,8 +2366,7 @@ do_tests(FILE *outfile, /* I - Output file */
last_expect->repeat_no_match = 1;
else
{
- print_fatal_error(outfile, "REPEAT-NO-MATCH without a preceding EXPECT or "
- "STATUS on ine %d.", linenum);
+ print_fatal_error(outfile, "REPEAT-NO-MATCH without a preceding EXPECT or STATUS on ine %d.", linenum);
pass = 0;
goto test_exit;
}
@@ -2303,8 +2405,7 @@ do_tests(FILE *outfile, /* I - Output file */
last_status->if_defined = strdup(token);
else
{
- print_fatal_error(outfile, "IF-DEFINED without a preceding EXPECT or STATUS "
- "on line %d.", linenum);
+ print_fatal_error(outfile, "IF-DEFINED without a preceding EXPECT or STATUS on line %d.", linenum);
pass = 0;
goto test_exit;
}
@@ -2324,8 +2425,7 @@ do_tests(FILE *outfile, /* I - Output file */
last_status->if_not_defined = strdup(token);
else
{
- print_fatal_error(outfile, "IF-NOT-DEFINED without a preceding EXPECT or STATUS "
- "on line %d.", linenum);
+ print_fatal_error(outfile, "IF-NOT-DEFINED without a preceding EXPECT or STATUS on line %d.", linenum);
pass = 0;
goto test_exit;
}
@@ -2410,8 +2510,7 @@ do_tests(FILE *outfile, /* I - Output file */
}
else
{
- print_fatal_error(outfile, "%s without a preceding EXPECT on line %d.", token,
- linenum);
+ print_fatal_error(outfile, "%s without a preceding EXPECT on line %d.", token, linenum);
pass = 0;
goto test_exit;
}
@@ -2438,8 +2537,7 @@ do_tests(FILE *outfile, /* I - Output file */
}
else
{
- print_fatal_error(outfile, "%s without a preceding EXPECT on line %d.", token,
- linenum);
+ print_fatal_error(outfile, "%s without a preceding EXPECT on line %d.", token, linenum);
pass = 0;
goto test_exit;
}
@@ -2469,8 +2567,7 @@ do_tests(FILE *outfile, /* I - Output file */
}
else
{
- print_fatal_error(outfile, "Unexpected token %s seen on line %d.", token,
- linenum);
+ print_fatal_error(outfile, "Unexpected token %s seen on line %d.", token, linenum);
pass = 0;
goto test_exit;
}
@@ -2488,52 +2585,51 @@ do_tests(FILE *outfile, /* I - Output file */
if (Output == _CUPS_OUTPUT_PLIST)
{
- fputs("<dict>\n", outfile);
- fputs("<key>Name</key>\n", outfile);
+ cupsFilePuts(outfile, "<dict>\n");
+ cupsFilePuts(outfile, "<key>Name</key>\n");
print_xml_string(outfile, "string", name);
if (file_id[0])
{
- fputs("<key>FileId</key>\n", outfile);
+ cupsFilePuts(outfile, "<key>FileId</key>\n");
print_xml_string(outfile, "string", file_id);
}
if (test_id[0])
{
- fputs("<key>TestId</key>\n", outfile);
+ cupsFilePuts(outfile, "<key>TestId</key>\n");
print_xml_string(outfile, "string", test_id);
}
- fputs("<key>Version</key>\n", outfile);
- fprintf(outfile, "<string>%d.%d</string>\n", version / 10, version % 10);
- fputs("<key>Operation</key>\n", outfile);
+ cupsFilePuts(outfile, "<key>Version</key>\n");
+ cupsFilePrintf(outfile, "<string>%d.%d</string>\n", version / 10, version % 10);
+ cupsFilePuts(outfile, "<key>Operation</key>\n");
print_xml_string(outfile, "string", ippOpString(op));
- fputs("<key>RequestId</key>\n", outfile);
- fprintf(outfile, "<integer>%d</integer>\n", request_id);
- fputs("<key>RequestAttributes</key>\n", outfile);
- fputs("<array>\n", outfile);
+ cupsFilePuts(outfile, "<key>RequestId</key>\n");
+ cupsFilePrintf(outfile, "<integer>%d</integer>\n", request_id);
+ cupsFilePuts(outfile, "<key>RequestAttributes</key>\n");
+ cupsFilePuts(outfile, "<array>\n");
if (request->attrs)
{
- fputs("<dict>\n", outfile);
+ cupsFilePuts(outfile, "<dict>\n");
for (attrptr = request->attrs,
group = attrptr ? attrptr->group_tag : IPP_TAG_ZERO;
attrptr;
attrptr = attrptr->next)
print_attr(outfile, Output, attrptr, &group);
- fputs("</dict>\n", outfile);
+ cupsFilePuts(outfile, "</dict>\n");
}
- fputs("</array>\n", outfile);
+ cupsFilePuts(outfile, "</array>\n");
}
- if (Output == _CUPS_OUTPUT_TEST || (Output == _CUPS_OUTPUT_PLIST && outfile != stdout))
+ if (Output == _CUPS_OUTPUT_TEST || (Output == _CUPS_OUTPUT_PLIST && outfile != cupsFileStdout()))
{
if (Verbosity)
{
- printf(" %s:\n", ippOpString(op));
+ cupsFilePrintf(cupsFileStdout(), " %s:\n", ippOpString(op));
for (attrptr = request->attrs; attrptr; attrptr = attrptr->next)
- print_attr(stdout, _CUPS_OUTPUT_TEST, attrptr, NULL);
+ print_attr(cupsFileStdout(), _CUPS_OUTPUT_TEST, attrptr, NULL);
}
- printf(" %-68.68s [", name);
- fflush(stdout);
+ cupsFilePrintf(cupsFileStdout(), " %-68.68s [", name);
}
if ((skip_previous && !prev_pass) || skip_test)
@@ -2545,29 +2641,30 @@ do_tests(FILE *outfile, /* I - Output file */
if (Output == _CUPS_OUTPUT_PLIST)
{
- fputs("<key>Successful</key>\n", outfile);
- fputs("<true />\n", outfile);
- fputs("<key>Skipped</key>\n", outfile);
- fputs("<true />\n", outfile);
- fputs("<key>StatusCode</key>\n", outfile);
+ cupsFilePuts(outfile, "<key>Successful</key>\n");
+ cupsFilePuts(outfile, "<true />\n");
+ cupsFilePuts(outfile, "<key>Skipped</key>\n");
+ cupsFilePuts(outfile, "<true />\n");
+ cupsFilePuts(outfile, "<key>StatusCode</key>\n");
print_xml_string(outfile, "string", "skip");
- fputs("<key>ResponseAttributes</key>\n", outfile);
- fputs("<dict />\n", outfile);
+ cupsFilePuts(outfile, "<key>ResponseAttributes</key>\n");
+ cupsFilePuts(outfile, "<dict />\n");
}
- if (Output == _CUPS_OUTPUT_TEST || (Output == _CUPS_OUTPUT_PLIST && outfile != stdout))
- puts("SKIP]");
+ if (Output == _CUPS_OUTPUT_TEST || (Output == _CUPS_OUTPUT_PLIST && outfile != cupsFileStdout()))
+ cupsFilePuts(cupsFileStdout(), "SKIP]\n");
goto skip_error;
}
PasswordTries = 0;
- repeat_count = 0;
- repeat_interval = 1;
- repeat_prev = 1;
do
{
+ if (delay > 0)
+ usleep(delay);
+
+ delay = repeat_interval;
repeat_count ++;
status = HTTP_STATUS_OK;
@@ -2945,7 +3042,7 @@ do_tests(FILE *outfile, /* I - Output file */
* values...
*/
- for (i = 0; i < num_statuses; i ++)
+ for (i = 0, status_ok = 0; i < num_statuses; i ++)
{
if (statuses[i].if_defined &&
!get_variable(vars, statuses[i].if_defined))
@@ -2955,32 +3052,30 @@ do_tests(FILE *outfile, /* I - Output file */
get_variable(vars, statuses[i].if_not_defined))
continue;
- if (response->request.status.status_code == statuses[i].status)
+ if (ippGetStatusCode(response) == statuses[i].status)
{
- if (statuses[i].repeat_match &&
- repeat_count < statuses[i].repeat_limit)
- repeat_test = 1;
+ status_ok = 1;
+
+ if (statuses[i].repeat_match && repeat_count < statuses[i].repeat_limit)
+ repeat_test = 1;
if (statuses[i].define_match)
set_variable(outfile, vars, statuses[i].define_match, "1");
-
- break;
}
else
{
- if (statuses[i].repeat_no_match &&
- repeat_count < statuses[i].repeat_limit)
- repeat_test = 1;
+ if (statuses[i].repeat_no_match && repeat_count < statuses[i].repeat_limit)
+ repeat_test = 1;
if (statuses[i].define_no_match)
{
set_variable(outfile, vars, statuses[i].define_no_match, "1");
- break;
+ status_ok = 1;
}
}
}
- if (i == num_statuses && num_statuses > 0)
+ if (!status_ok && num_statuses > 0)
{
for (i = 0; i < num_statuses; i ++)
{
@@ -2992,7 +3087,7 @@ do_tests(FILE *outfile, /* I - Output file */
get_variable(vars, statuses[i].if_not_defined))
continue;
- if (!statuses[i].repeat_match)
+ if (!statuses[i].repeat_match || repeat_count >= statuses[i].repeat_limit)
add_stringf(errors, "EXPECTED: STATUS %s (got %s)",
ippErrorString(statuses[i].status),
ippErrorString(cupsLastError()));
@@ -3045,9 +3140,8 @@ do_tests(FILE *outfile, /* I - Output file */
}
}
- 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;
break;
}
@@ -3059,7 +3153,7 @@ do_tests(FILE *outfile, /* I - Output file */
{
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)
+ else if (!expect->define_match && !expect->define_value && ((!expect->repeat_match && !expect->repeat_no_match) || repeat_count >= expect->repeat_limit))
{
add_stringf(errors, "EXPECTED: %s WITH-VALUES-FROM %s", expect->name, expect->with_value_from);
@@ -3076,7 +3170,7 @@ do_tests(FILE *outfile, /* I - Output file */
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)
+ !expect->repeat_match && (!expect->repeat_no_match || repeat_count >= expect->repeat_limit))
{
if (expect->with_flags & _CUPS_WITH_REGEX)
add_stringf(errors, "EXPECTED: %s %s /%s/",
@@ -3227,11 +3321,10 @@ do_tests(FILE *outfile, /* I - Output file */
if (repeat_test)
{
- if (Output == _CUPS_OUTPUT_TEST || (Output == _CUPS_OUTPUT_PLIST && outfile != stdout))
+ if (Output == _CUPS_OUTPUT_TEST || (Output == _CUPS_OUTPUT_PLIST && outfile != cupsFileStdout()))
{
- printf("%04d]\n", repeat_count);
- fflush(stdout);
-
+ cupsFilePrintf(cupsFileStdout(), "%04d]\n", repeat_count);
+\
if (num_displayed > 0)
{
for (attrptr = ippFirstAttribute(response); attrptr; attrptr = ippNextAttribute(response))
@@ -3243,7 +3336,7 @@ do_tests(FILE *outfile, /* I - Output file */
{
if (!strcmp(displayed[i], attrname))
{
- print_attr(stdout, _CUPS_OUTPUT_TEST, attrptr, NULL);
+ print_attr(cupsFileStdout(), _CUPS_OUTPUT_TEST, attrptr, NULL);
break;
}
}
@@ -3252,13 +3345,9 @@ do_tests(FILE *outfile, /* I - Output file */
}
}
- sleep((unsigned)repeat_interval);
- repeat_interval = _cupsNextDelay(repeat_interval, &repeat_prev);
-
- if (Output == _CUPS_OUTPUT_TEST || (Output == _CUPS_OUTPUT_PLIST && outfile != stdout))
+ if (Output == _CUPS_OUTPUT_TEST || (Output == _CUPS_OUTPUT_PLIST && outfile != cupsFileStdout()))
{
- printf(" %-68.68s [", name);
- fflush(stdout);
+ cupsFilePrintf(cupsFileStdout(), " %-68.68s [", name);
}
}
}
@@ -3278,39 +3367,37 @@ do_tests(FILE *outfile, /* I - Output file */
if (Output == _CUPS_OUTPUT_PLIST)
{
- fputs("<key>Successful</key>\n", outfile);
- fputs(prev_pass ? "<true />\n" : "<false />\n", outfile);
- fputs("<key>StatusCode</key>\n", outfile);
+ cupsFilePuts(outfile, "<key>Successful</key>\n");
+ cupsFilePuts(outfile, prev_pass ? "<true />\n" : "<false />\n");
+ cupsFilePuts(outfile, "<key>StatusCode</key>\n");
print_xml_string(outfile, "string", ippErrorString(cupsLastError()));
- fputs("<key>ResponseAttributes</key>\n", outfile);
- fputs("<array>\n", outfile);
- fputs("<dict>\n", outfile);
+ cupsFilePuts(outfile, "<key>ResponseAttributes</key>\n");
+ cupsFilePuts(outfile, "<array>\n");
+ cupsFilePuts(outfile, "<dict>\n");
for (attrptr = response ? response->attrs : NULL,
group = attrptr ? attrptr->group_tag : IPP_TAG_ZERO;
attrptr;
attrptr = attrptr->next)
print_attr(outfile, Output, attrptr, &group);
- fputs("</dict>\n", outfile);
- fputs("</array>\n", outfile);
+ cupsFilePuts(outfile, "</dict>\n");
+ cupsFilePuts(outfile, "</array>\n");
}
- if (Output == _CUPS_OUTPUT_TEST || (Output == _CUPS_OUTPUT_PLIST && outfile != stdout))
+ if (Output == _CUPS_OUTPUT_TEST || (Output == _CUPS_OUTPUT_PLIST && outfile != cupsFileStdout()))
{
- puts(prev_pass ? "PASS]" : "FAIL]");
+ cupsFilePuts(cupsFileStdout(), prev_pass ? "PASS]\n" : "FAIL]\n");
if (!prev_pass || (Verbosity && response))
{
- printf(" RECEIVED: %lu bytes in response\n",
- (unsigned long)ippLength(response));
- printf(" status-code = %s (%s)\n", ippErrorString(cupsLastError()),
- cupsLastErrorString());
+ cupsFilePrintf(cupsFileStdout(), " RECEIVED: %lu bytes in response\n", (unsigned long)ippLength(response));
+ cupsFilePrintf(cupsFileStdout(), " status-code = %s (%s)\n", ippErrorString(cupsLastError()), cupsLastErrorString());
if (Verbosity && response)
{
for (attrptr = response->attrs;
attrptr != NULL;
attrptr = attrptr->next)
- print_attr(stdout, _CUPS_OUTPUT_TEST, attrptr, NULL);
+ print_attr(cupsFileStdout(), _CUPS_OUTPUT_TEST, attrptr, NULL);
}
}
}
@@ -3365,27 +3452,27 @@ do_tests(FILE *outfile, /* I - Output file */
{
if (Output == _CUPS_OUTPUT_PLIST)
{
- fputs("<key>Errors</key>\n", outfile);
- fputs("<array>\n", outfile);
+ cupsFilePuts(outfile, "<key>Errors</key>\n");
+ cupsFilePuts(outfile, "<array>\n");
for (error = (char *)cupsArrayFirst(errors);
error;
error = (char *)cupsArrayNext(errors))
print_xml_string(outfile, "string", error);
- fputs("</array>\n", outfile);
+ cupsFilePuts(outfile, "</array>\n");
}
- if (Output == _CUPS_OUTPUT_TEST || (Output == _CUPS_OUTPUT_PLIST && outfile != stdout))
+ if (Output == _CUPS_OUTPUT_TEST || (Output == _CUPS_OUTPUT_PLIST && outfile != cupsFileStdout()))
{
for (error = (char *)cupsArrayFirst(errors);
error;
error = (char *)cupsArrayNext(errors))
- printf(" %s\n", error);
+ cupsFilePrintf(cupsFileStdout(), " %s\n", error);
}
}
- if (num_displayed > 0 && !Verbosity && response && (Output == _CUPS_OUTPUT_TEST || (Output == _CUPS_OUTPUT_PLIST && outfile != stdout)))
+ if (num_displayed > 0 && !Verbosity && response && (Output == _CUPS_OUTPUT_TEST || (Output == _CUPS_OUTPUT_PLIST && outfile != cupsFileStdout())))
{
for (attrptr = response->attrs;
attrptr != NULL;
@@ -3408,9 +3495,7 @@ do_tests(FILE *outfile, /* I - Output file */
skip_error:
if (Output == _CUPS_OUTPUT_PLIST)
- fputs("</dict>\n", outfile);
-
- fflush(stdout);
+ cupsFilePuts(outfile, "</dict>\n");
ippDelete(response);
response = NULL;
@@ -3463,7 +3548,7 @@ do_tests(FILE *outfile, /* I - Output file */
cupsArrayDelete(errors);
if (fp)
- fclose(fp);
+ cupsFileClose(fp);
httpClose(http);
ippDelete(request);
@@ -3475,10 +3560,10 @@ do_tests(FILE *outfile, /* I - Output file */
free(statuses[i].if_defined);
if (statuses[i].if_not_defined)
free(statuses[i].if_not_defined);
- if (statuses[i].define_match)
- free(statuses[i].define_match);
- if (statuses[i].define_no_match)
- free(statuses[i].define_no_match);
+ if (statuses[i].define_match)
+ free(statuses[i].define_match);
+ if (statuses[i].define_no_match)
+ free(statuses[i].define_no_match);
}
for (i = num_expects, expect = expects; i > 0; i --, expect ++)
@@ -3686,9 +3771,9 @@ expect_matches(
*/
static ipp_t * /* O - Collection value */
-get_collection(FILE *outfile, /* I - Output file */
+get_collection(cups_file_t *outfile, /* I - Output file */
_cups_vars_t *vars, /* I - Variables */
- FILE *fp, /* I - File to read from */
+ cups_file_t *fp, /* I - File to read from */
int *linenum) /* IO - Line number */
{
char token[1024], /* Token from file */
@@ -3731,7 +3816,7 @@ get_collection(FILE *outfile, /* I - Output file */
goto col_error;
}
- if ((value = ippTagValue(token)) == IPP_TAG_ZERO)
+ if ((value = ippTagValue(token)) < IPP_TAG_UNSUPPORTED_VALUE)
{
print_fatal_error(outfile, "Bad MEMBER value tag \"%s\" on line %d.", token,
*linenum);
@@ -3744,17 +3829,43 @@ get_collection(FILE *outfile, /* I - Output file */
goto col_error;
}
- if (!get_token(fp, temp, sizeof(temp), linenum))
+ if (value < IPP_TAG_INTEGER)
+ {
+ /*
+ * Out-of-band member attributes have no value...
+ */
+
+ token[0] = '\0';
+ }
+ else if (!get_token(fp, temp, sizeof(temp), linenum))
{
print_fatal_error(outfile, "Missing MEMBER value on line %d.", *linenum);
goto col_error;
}
-
- expand_variables(vars, token, temp, sizeof(token));
+ else
+ {
+ expand_variables(vars, token, temp, sizeof(token));
+ }
switch (value)
{
- case IPP_TAG_BOOLEAN :
+ default :
+ if (value < IPP_TAG_INTEGER)
+ {
+ /*
+ * Add out-of-band value...
+ */
+
+ ippAddOutOfBand(col, IPP_TAG_ZERO, value, attr);
+ }
+ else
+ {
+ print_fatal_error(outfile, "Unsupported MEMBER value tag %s for \"%s\" on line %d.", ippTagString(value), attr, *linenum);
+ goto col_error;
+ }
+ break;
+
+ case IPP_TAG_BOOLEAN :
if (!_cups_strcasecmp(token, "true"))
ippAddBoolean(col, IPP_TAG_ZERO, attr, 1);
else
@@ -3838,11 +3949,21 @@ get_collection(FILE *outfile, /* I - Output file */
goto col_error;
}
break;
- case IPP_TAG_STRING :
+
+ case IPP_TAG_STRING :
ippAddOctetString(col, IPP_TAG_ZERO, attr, token, (int)strlen(token));
break;
- default :
+ case IPP_TAG_TEXTLANG :
+ case IPP_TAG_NAMELANG :
+ case IPP_TAG_TEXT :
+ case IPP_TAG_NAME :
+ case IPP_TAG_KEYWORD :
+ case IPP_TAG_URI :
+ case IPP_TAG_URISCHEME :
+ case IPP_TAG_CHARSET :
+ case IPP_TAG_LANGUAGE :
+ case IPP_TAG_MIMETYPE :
if (!strchr(token, ','))
ippAddString(col, IPP_TAG_ZERO, value, attr, NULL, token);
else
@@ -3861,9 +3982,14 @@ get_collection(FILE *outfile, /* I - Output file */
for (ptr = strchr(token, ','); ptr; ptr = strchr(ptr, ','))
{
- *ptr++ = '\0';
- values[num_values] = ptr;
- num_values ++;
+ if (ptr > token && ptr[-1] == '\\')
+ _cups_strcpy(ptr - 1, ptr);
+ else
+ {
+ *ptr++ = '\0';
+ values[num_values] = ptr;
+ num_values ++;
+ }
}
ippAddStrings(col, IPP_TAG_ZERO, value, attr, num_values,
@@ -4033,10 +4159,10 @@ get_string(ipp_attribute_t *attr, /* I - IPP attribute */
*/
static char * /* O - Token from file or NULL on EOF */
-get_token(FILE *fp, /* I - File to read from */
- char *buf, /* I - Buffer to read into */
- int buflen, /* I - Length of buffer */
- int *linenum) /* IO - Current line number */
+get_token(cups_file_t *fp, /* I - File to read from */
+ char *buf, /* I - Buffer to read into */
+ int buflen, /* I - Length of buffer */
+ int *linenum) /* IO - Current line number */
{
int ch, /* Character from file */
quote; /* Quoting character */
@@ -4050,7 +4176,7 @@ get_token(FILE *fp, /* I - File to read from */
* Skip whitespace...
*/
- while (isspace(ch = getc(fp)))
+ while (isspace(ch = cupsFileGetChar(fp)))
{
if (ch == '\n')
(*linenum) ++;
@@ -4072,7 +4198,7 @@ get_token(FILE *fp, /* I - File to read from */
bufptr = buf;
bufend = buf + buflen - 1;
- while ((ch = getc(fp)) != EOF)
+ while ((ch = cupsFileGetChar(fp)) != EOF)
{
if (ch == '\\')
{
@@ -4083,7 +4209,7 @@ get_token(FILE *fp, /* I - File to read from */
if (bufptr < bufend)
*bufptr++ = (char)ch;
- if ((ch = getc(fp)) != EOF && bufptr < bufend)
+ if ((ch = cupsFileGetChar(fp)) != EOF && bufptr < bufend)
*bufptr++ = (char)ch;
}
else if (ch == quote)
@@ -4102,7 +4228,7 @@ get_token(FILE *fp, /* I - File to read from */
* Comment...
*/
- while ((ch = getc(fp)) != EOF)
+ while ((ch = cupsFileGetChar(fp)) != EOF)
if (ch == '\n')
break;
@@ -4121,19 +4247,19 @@ get_token(FILE *fp, /* I - File to read from */
* Whitespace delimited text...
*/
- ungetc(ch, fp);
+ cupsFileSeek(fp, cupsFileTell(fp) - 1);
bufptr = buf;
bufend = buf + buflen - 1;
- while ((ch = getc(fp)) != EOF)
+ while ((ch = cupsFileGetChar(fp)) != EOF)
if (isspace(ch) || ch == '#')
break;
else if (bufptr < bufend)
*bufptr++ = (char)ch;
if (ch == '#')
- ungetc(ch, fp);
+ cupsFileSeek(fp, cupsFileTell(fp) - 1);
else if (ch == '\n')
(*linenum) ++;
@@ -4271,8 +4397,7 @@ pause_message(const char *message) /* I - Message */
* Display the prompt...
*/
- printf("%s\n---- PRESS ANY KEY ----", message);
- fflush(stdout);
+ cupsFilePrintf(cupsFileStdout(), "%s\n---- PRESS ANY KEY ----", message);
#ifdef WIN32
/*
@@ -4306,8 +4431,7 @@ pause_message(const char *message) /* I - Message */
* Erase the "press any key" prompt...
*/
- fputs("\r \r", stdout);
- fflush(stdout);
+ cupsFilePuts(cupsFileStdout(), "\r \r");
}
@@ -4316,7 +4440,7 @@ pause_message(const char *message) /* I - Message */
*/
static void
-print_attr(FILE *outfile, /* I - Output file */
+print_attr(cups_file_t *outfile, /* I - Output file */
int format, /* I - Output format */
ipp_attribute_t *attr, /* I - Attribute to print */
ipp_tag_t *group) /* IO - Current group */
@@ -4331,8 +4455,8 @@ print_attr(FILE *outfile, /* I - Output file */
{
if (attr->group_tag != IPP_TAG_ZERO)
{
- fputs("</dict>\n", outfile);
- fputs("<dict>\n", outfile);
+ cupsFilePuts(outfile, "</dict>\n");
+ cupsFilePuts(outfile, "<dict>\n");
}
if (group)
@@ -4344,31 +4468,31 @@ print_attr(FILE *outfile, /* I - Output file */
print_xml_string(outfile, "key", attr->name);
if (attr->num_values > 1)
- fputs("<array>\n", outfile);
+ cupsFilePuts(outfile, "<array>\n");
switch (attr->value_tag)
{
case IPP_TAG_INTEGER :
case IPP_TAG_ENUM :
for (i = 0; i < attr->num_values; i ++)
- fprintf(outfile, "<integer>%d</integer>\n", attr->values[i].integer);
+ cupsFilePrintf(outfile, "<integer>%d</integer>\n", attr->values[i].integer);
break;
case IPP_TAG_BOOLEAN :
for (i = 0; i < attr->num_values; i ++)
- fputs(attr->values[i].boolean ? "<true />\n" : "<false />\n", outfile);
+ cupsFilePuts(outfile, attr->values[i].boolean ? "<true />\n" : "<false />\n");
break;
case IPP_TAG_RANGE :
for (i = 0; i < attr->num_values; i ++)
- fprintf(outfile, "<dict><key>lower</key><integer>%d</integer>"
+ cupsFilePrintf(outfile, "<dict><key>lower</key><integer>%d</integer>"
"<key>upper</key><integer>%d</integer></dict>\n",
attr->values[i].range.lower, attr->values[i].range.upper);
break;
case IPP_TAG_RESOLUTION :
for (i = 0; i < attr->num_values; i ++)
- fprintf(outfile, "<dict><key>xres</key><integer>%d</integer>"
+ cupsFilePrintf(outfile, "<dict><key>xres</key><integer>%d</integer>"
"<key>yres</key><integer>%d</integer>"
"<key>units</key><string>%s</string></dict>\n",
attr->values[i].resolution.xres,
@@ -4379,7 +4503,7 @@ print_attr(FILE *outfile, /* I - Output file */
case IPP_TAG_DATE :
for (i = 0; i < attr->num_values; i ++)
- fprintf(outfile, "<date>%s</date>\n", iso_date(attr->values[i].date));
+ cupsFilePrintf(outfile, "<date>%s</date>\n", iso_date(attr->values[i].date));
break;
case IPP_TAG_STRING :
@@ -4388,7 +4512,7 @@ print_attr(FILE *outfile, /* I - Output file */
char buffer[IPP_MAX_LENGTH * 5 / 4 + 1];
/* Output buffer */
- fprintf(outfile, "<data>%s</data>\n",
+ cupsFilePrintf(outfile, "<data>%s</data>\n",
httpEncode64_2(buffer, sizeof(buffer),
attr->values[i].unknown.data,
attr->values[i].unknown.length));
@@ -4411,33 +4535,33 @@ print_attr(FILE *outfile, /* I - Output file */
case IPP_TAG_NAMELANG :
for (i = 0; i < attr->num_values; i ++)
{
- fputs("<dict><key>language</key><string>", outfile);
+ cupsFilePuts(outfile, "<dict><key>language</key><string>");
print_xml_string(outfile, NULL, attr->values[i].string.language);
- fputs("</string><key>string</key><string>", outfile);
+ cupsFilePuts(outfile, "</string><key>string</key><string>");
print_xml_string(outfile, NULL, attr->values[i].string.text);
- fputs("</string></dict>\n", outfile);
+ cupsFilePuts(outfile, "</string></dict>\n");
}
break;
case IPP_TAG_BEGIN_COLLECTION :
for (i = 0; i < attr->num_values; i ++)
{
- fputs("<dict>\n", outfile);
+ cupsFilePuts(outfile, "<dict>\n");
for (colattr = attr->values[i].collection->attrs;
colattr;
colattr = colattr->next)
print_attr(outfile, format, colattr, NULL);
- fputs("</dict>\n", outfile);
+ cupsFilePuts(outfile, "</dict>\n");
}
break;
default :
- fprintf(outfile, "<string>&lt;&lt;%s&gt;&gt;</string>\n", ippTagString(attr->value_tag));
+ cupsFilePrintf(outfile, "<string>&lt;&lt;%s&gt;&gt;</string>\n", ippTagString(attr->value_tag));
break;
}
if (attr->num_values > 1)
- fputs("</array>\n", outfile);
+ cupsFilePuts(outfile, "</array>\n");
}
else
{
@@ -4447,15 +4571,15 @@ print_attr(FILE *outfile, /* I - Output file */
{
if (!attr->name)
{
- fputs(" -- separator --\n", outfile);
+ cupsFilePuts(outfile, " -- separator --\n");
return;
}
- fprintf(outfile, " %s (%s%s) = ", attr->name, attr->num_values > 1 ? "1setOf " : "", ippTagString(attr->value_tag));
+ cupsFilePrintf(outfile, " %s (%s%s) = ", attr->name, attr->num_values > 1 ? "1setOf " : "", ippTagString(attr->value_tag));
}
ippAttributeString(attr, buffer, sizeof(buffer));
- fprintf(outfile, "%s\n", buffer);
+ cupsFilePrintf(outfile, "%s\n", buffer);
}
}
@@ -4466,7 +4590,7 @@ print_attr(FILE *outfile, /* I - Output file */
static void
print_csv(
- FILE *outfile, /* I - Output file */
+ cups_file_t *outfile, /* I - Output file */
ipp_attribute_t *attr, /* I - First attribute for line */
int num_displayed, /* I - Number of attributes to display */
char **displayed, /* I - Attributes to display */
@@ -4501,7 +4625,7 @@ print_csv(
for (i = 0; i < num_displayed; i ++)
{
if (i)
- fputc(',', outfile);
+ cupsFilePutChar(outfile, ',');
buffer[0] = '\0';
@@ -4519,30 +4643,30 @@ print_csv(
if (strchr(buffer, ',') != NULL || strchr(buffer, '\"') != NULL ||
strchr(buffer, '\\') != NULL)
{
- putc('\"', outfile);
+ cupsFilePutChar(cupsFileStdout(), '\"');
for (bufptr = buffer; *bufptr; bufptr ++)
{
if (*bufptr == '\\' || *bufptr == '\"')
- putc('\\', outfile);
- putc(*bufptr, outfile);
+ cupsFilePutChar(cupsFileStdout(), '\\');
+ cupsFilePutChar(cupsFileStdout(), *bufptr);
}
- putc('\"', outfile);
+ cupsFilePutChar(cupsFileStdout(), '\"');
}
else
- fputs(buffer, outfile);
+ cupsFilePuts(outfile, buffer);
}
- putc('\n', outfile);
+ cupsFilePutChar(cupsFileStdout(), '\n');
}
else
{
for (i = 0; i < num_displayed; i ++)
{
if (i)
- putc(',', outfile);
+ cupsFilePutChar(cupsFileStdout(), ',');
- fputs(displayed[i], outfile);
+ cupsFilePuts(outfile, displayed[i]);
}
- putc('\n', outfile);
+ cupsFilePutChar(cupsFileStdout(), '\n');
}
free(buffer);
@@ -4554,8 +4678,8 @@ print_csv(
*/
static void
-print_fatal_error(FILE *outfile, /* I - Output file */
- const char *s, /* I - Printf-style format string */
+print_fatal_error(cups_file_t *outfile, /* I - Output file */
+ const char *s, /* I - Printf-style format string */
...) /* I - Additional arguments as needed */
{
char buffer[10240]; /* Format buffer */
@@ -4590,7 +4714,7 @@ print_fatal_error(FILE *outfile, /* I - Output file */
static void
print_line(
- FILE *outfile, /* I - Output file */
+ cups_file_t *outfile, /* I - Output file */
ipp_attribute_t *attr, /* I - First attribute for line */
int num_displayed, /* I - Number of attributes to display */
char **displayed, /* I - Attributes to display */
@@ -4624,7 +4748,7 @@ print_line(
for (i = 0; i < num_displayed; i ++)
{
if (i)
- putc(' ', outfile);
+ cupsFilePutChar(cupsFileStdout(), ' ');
buffer[0] = '\0';
@@ -4639,31 +4763,31 @@ print_line(
}
}
- fprintf(outfile, "%*s", (int)-widths[i], buffer);
+ cupsFilePrintf(outfile, "%*s", (int)-widths[i], buffer);
}
- putc('\n', outfile);
+ cupsFilePutChar(cupsFileStdout(), '\n');
}
else
{
for (i = 0; i < num_displayed; i ++)
{
if (i)
- putc(' ', outfile);
+ cupsFilePutChar(cupsFileStdout(), ' ');
- fprintf(outfile, "%*s", (int)-widths[i], displayed[i]);
+ cupsFilePrintf(outfile, "%*s", (int)-widths[i], displayed[i]);
}
- putc('\n', outfile);
+ cupsFilePutChar(cupsFileStdout(), '\n');
for (i = 0; i < num_displayed; i ++)
{
if (i)
- putc(' ', outfile);
+ cupsFilePutChar(cupsFileStdout(), ' ');
memset(buffer, '-', widths[i]);
buffer[widths[i]] = '\0';
- fputs(buffer, outfile);
+ cupsFilePuts(outfile, buffer);
}
- putc('\n', outfile);
+ cupsFilePutChar(cupsFileStdout(), '\n');
}
free(buffer);
@@ -4675,23 +4799,23 @@ print_line(
*/
static void
-print_xml_header(FILE *outfile) /* I - Output file */
+print_xml_header(cups_file_t *outfile) /* I - Output file */
{
if (!XMLHeader)
{
- fputs("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n", outfile);
- fputs("<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" "
- "\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n", outfile);
- fputs("<plist version=\"1.0\">\n", outfile);
- fputs("<dict>\n", outfile);
- fputs("<key>ipptoolVersion</key>\n", outfile);
- fputs("<string>" CUPS_SVERSION "</string>\n", outfile);
- fputs("<key>Transfer</key>\n", outfile);
- fprintf(outfile, "<string>%s</string>\n",
+ cupsFilePuts(outfile, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
+ cupsFilePuts(outfile, "<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" "
+ "\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n");
+ cupsFilePuts(outfile, "<plist version=\"1.0\">\n");
+ cupsFilePuts(outfile, "<dict>\n");
+ cupsFilePuts(outfile, "<key>ipptoolVersion</key>\n");
+ cupsFilePuts(outfile, "<string>" CUPS_SVERSION "</string>\n");
+ cupsFilePuts(outfile, "<key>Transfer</key>\n");
+ cupsFilePrintf(outfile, "<string>%s</string>\n",
Transfer == _CUPS_TRANSFER_AUTO ? "auto" :
Transfer == _CUPS_TRANSFER_CHUNKED ? "chunked" : "length");
- fputs("<key>Tests</key>\n", outfile);
- fputs("<array>\n", outfile);
+ cupsFilePuts(outfile, "<key>Tests</key>\n");
+ cupsFilePuts(outfile, "<array>\n");
XMLHeader = 1;
}
@@ -4703,21 +4827,21 @@ print_xml_header(FILE *outfile) /* I - Output file */
*/
static void
-print_xml_string(FILE *outfile, /* I - Output file */
- const char *element, /* I - Element name or NULL */
- const char *s) /* I - String to print */
+print_xml_string(cups_file_t *outfile, /* I - Output file */
+ const char *element, /* I - Element name or NULL */
+ const char *s) /* I - String to print */
{
if (element)
- fprintf(outfile, "<%s>", element);
+ cupsFilePrintf(outfile, "<%s>", element);
while (*s)
{
if (*s == '&')
- fputs("&amp;", outfile);
+ cupsFilePuts(outfile, "&amp;");
else if (*s == '<')
- fputs("&lt;", outfile);
+ cupsFilePuts(outfile, "&lt;");
else if (*s == '>')
- fputs("&gt;", outfile);
+ cupsFilePuts(outfile, "&gt;");
else if ((*s & 0xe0) == 0xc0)
{
/*
@@ -4726,13 +4850,13 @@ print_xml_string(FILE *outfile, /* I - Output file */
if ((s[1] & 0xc0) != 0x80)
{
- putc('?', outfile);
+ cupsFilePutChar(cupsFileStdout(), '?');
s ++;
}
else
{
- putc(*s++, outfile);
- putc(*s, outfile);
+ cupsFilePutChar(cupsFileStdout(), *s++);
+ cupsFilePutChar(cupsFileStdout(), *s);
}
}
else if ((*s & 0xf0) == 0xe0)
@@ -4743,14 +4867,14 @@ print_xml_string(FILE *outfile, /* I - Output file */
if ((s[1] & 0xc0) != 0x80 || (s[2] & 0xc0) != 0x80)
{
- putc('?', outfile);
+ cupsFilePutChar(cupsFileStdout(), '?');
s += 2;
}
else
{
- putc(*s++, outfile);
- putc(*s++, outfile);
- putc(*s, outfile);
+ cupsFilePutChar(cupsFileStdout(), *s++);
+ cupsFilePutChar(cupsFileStdout(), *s++);
+ cupsFilePutChar(cupsFileStdout(), *s);
}
}
else if ((*s & 0xf8) == 0xf0)
@@ -4762,15 +4886,15 @@ print_xml_string(FILE *outfile, /* I - Output file */
if ((s[1] & 0xc0) != 0x80 || (s[2] & 0xc0) != 0x80 ||
(s[3] & 0xc0) != 0x80)
{
- putc('?', outfile);
+ cupsFilePutChar(cupsFileStdout(), '?');
s += 3;
}
else
{
- putc(*s++, outfile);
- putc(*s++, outfile);
- putc(*s++, outfile);
- putc(*s, outfile);
+ cupsFilePutChar(cupsFileStdout(), *s++);
+ cupsFilePutChar(cupsFileStdout(), *s++);
+ cupsFilePutChar(cupsFileStdout(), *s++);
+ cupsFilePutChar(cupsFileStdout(), *s);
}
}
else if ((*s & 0x80) || (*s < ' ' && !isspace(*s & 255)))
@@ -4779,16 +4903,16 @@ print_xml_string(FILE *outfile, /* I - Output file */
* Invalid control character...
*/
- putc('?', outfile);
+ cupsFilePutChar(cupsFileStdout(), '?');
}
else
- putc(*s, outfile);
+ cupsFilePutChar(cupsFileStdout(), *s);
s ++;
}
if (element)
- fprintf(outfile, "</%s>\n", element);
+ cupsFilePrintf(outfile, "</%s>\n", element);
}
@@ -4797,22 +4921,22 @@ print_xml_string(FILE *outfile, /* I - Output file */
*/
static void
-print_xml_trailer(FILE *outfile, /* I - Output file */
- int success, /* I - 1 on success, 0 on failure */
- const char *message) /* I - Error message or NULL */
+print_xml_trailer(cups_file_t *outfile, /* I - Output file */
+ int success, /* I - 1 on success, 0 on failure */
+ const char *message) /* I - Error message or NULL */
{
if (XMLHeader)
{
- fputs("</array>\n", outfile);
- fputs("<key>Successful</key>\n", outfile);
- fputs(success ? "<true />\n" : "<false />\n", outfile);
+ cupsFilePuts(outfile, "</array>\n");
+ cupsFilePuts(outfile, "<key>Successful</key>\n");
+ cupsFilePuts(outfile, success ? "<true />\n" : "<false />\n");
if (message)
{
- fputs("<key>ErrorMessage</key>\n", outfile);
+ cupsFilePuts(outfile, "<key>ErrorMessage</key>\n");
print_xml_string(outfile, "string", message);
}
- fputs("</dict>\n", outfile);
- fputs("</plist>\n", outfile);
+ cupsFilePuts(outfile, "</dict>\n");
+ cupsFilePuts(outfile, "</plist>\n");
XMLHeader = 0;
}
@@ -4824,7 +4948,7 @@ print_xml_trailer(FILE *outfile, /* I - Output file */
*/
static void
-set_variable(FILE *outfile, /* I - Output file */
+set_variable(cups_file_t *outfile, /* I - Output file */
_cups_vars_t *vars, /* I - Variables */
const char *name, /* I - Variable name */
const char *value) /* I - Value string */
@@ -4925,8 +5049,7 @@ timeout_cb(http_t *http, /* I - Connection to server */
static void
usage(void)
{
- _cupsLangPuts(stderr, _("Usage: ipptool [options] URI filename [ ... "
- "filenameN ]"));
+ _cupsLangPuts(stderr, _("Usage: ipptool [options] URI filename [ ... filenameN ]"));
_cupsLangPuts(stderr, _("Options:"));
_cupsLangPuts(stderr, _(" --help Show help."));
_cupsLangPuts(stderr, _(" --stop-after-include-error\n"
@@ -4936,30 +5059,20 @@ usage(void)
_cupsLangPuts(stderr, _(" -6 Connect using IPv6."));
_cupsLangPuts(stderr, _(" -C Send requests using "
"chunking (default)."));
- _cupsLangPuts(stdout, _(" -E Test with HTTP Upgrade to "
- "TLS."));
+ _cupsLangPuts(stderr, _(" -E Test with encryption using HTTP Upgrade to TLS."));
_cupsLangPuts(stderr, _(" -I Ignore errors."));
- _cupsLangPuts(stderr, _(" -L Send requests using "
- "content-length."));
+ _cupsLangPuts(stderr, _(" -L Send requests using content-length."));
_cupsLangPuts(stderr, _(" -P filename.plist Produce XML plist to a file and test report to standard output."));
- _cupsLangPuts(stderr, _(" -S Test with SSL "
- "encryption."));
- _cupsLangPuts(stderr, _(" -T seconds Set the receive/send "
- "timeout in seconds."));
- _cupsLangPuts(stderr, _(" -V version Set default IPP "
- "version."));
- _cupsLangPuts(stderr, _(" -X Produce XML plist instead "
- "of plain text."));
+ _cupsLangPuts(stderr, _(" -S Test with encryption using HTTPS."));
+ _cupsLangPuts(stderr, _(" -T seconds Set the receive/send timeout in seconds."));
+ _cupsLangPuts(stderr, _(" -V version Set default IPP version."));
+ _cupsLangPuts(stderr, _(" -X Produce XML plist instead of plain text."));
_cupsLangPuts(stderr, _(" -c Produce CSV output."));
- _cupsLangPuts(stderr, _(" -d name=value Set named variable to "
- "value."));
- _cupsLangPuts(stderr, _(" -f filename Set default request "
- "filename."));
- _cupsLangPuts(stderr, _(" -i seconds Repeat the last file with "
- "the given time interval."));
+ _cupsLangPuts(stderr, _(" -d name=value Set named variable to value."));
+ _cupsLangPuts(stderr, _(" -f filename Set default request filename."));
+ _cupsLangPuts(stderr, _(" -i seconds Repeat the last file with the given time interval."));
_cupsLangPuts(stderr, _(" -l Produce plain text output."));
- _cupsLangPuts(stderr, _(" -n count Repeat the last file the "
- "given number of times."));
+ _cupsLangPuts(stderr, _(" -n count Repeat the last file the given number of times."));
_cupsLangPuts(stderr, _(" -q Run silently."));
_cupsLangPuts(stderr, _(" -t Produce a test report."));
_cupsLangPuts(stderr, _(" -v Be verbose."));
@@ -4973,7 +5086,7 @@ usage(void)
*/
static int /* O - 1 if valid, 0 otherwise */
-validate_attr(FILE *outfile, /* I - Output file */
+validate_attr(cups_file_t *outfile, /* I - Output file */
cups_array_t *errors, /* I - Errors array */
ipp_attribute_t *attr) /* I - Attribute to validate */
{
@@ -5634,7 +5747,7 @@ validate_attr(FILE *outfile, /* I - Output file */
*/
static int /* O - 1 on match, 0 on non-match */
-with_value(FILE *outfile, /* I - Output file */
+with_value(cups_file_t *outfile, /* I - Output file */
cups_array_t *errors, /* I - Errors array */
char *value, /* I - Value string */
int flags, /* I - Flags for match */
@@ -5947,34 +6060,13 @@ with_value(FILE *outfile, /* I - Output file */
}
else if (ippGetValueTag(attr) == IPP_TAG_URI)
{
- if (!strncmp(value, "ipp://", 6) || !strncmp(value, "http://", 7) || !strncmp(value, "ipps://", 7) || !strncmp(value, "https://", 8))
- {
- char scheme[256], /* URI scheme */
- userpass[256], /* username:password, if any */
- hostname[256], /* hostname */
- *hostptr, /* Pointer into hostname */
- resource[1024]; /* Resource path */
- int port; /* Port number */
-
- if (httpSeparateURI(HTTP_URI_CODING_ALL, value, scheme, sizeof(scheme), userpass, sizeof(userpass), hostname, sizeof(hostname), &port, resource, sizeof(resource)) >= HTTP_URI_STATUS_OK && (hostptr = hostname + strlen(hostname) - 1) > hostname && *hostptr == '.')
- {
- /*
- * Strip trailing "." in hostname of URI...
- */
-
- *hostptr = '\0';
- httpAssembleURI(HTTP_URI_CODING_ALL, temp, sizeof(temp), scheme, userpass, hostname, port, resource);
- value = temp;
- }
- }
-
/*
* Value is a literal URI string, see if the value(s) match...
*/
for (i = 0; i < attr->num_values; i ++)
{
- if (!strcmp(value, get_string(attr, i, flags, temp, sizeof(temp))))
+ if (!compare_uris(value, get_string(attr, i, flags, temp, sizeof(temp))))
{
if (!matchbuf[0])
strlcpy(matchbuf,
diff --git a/test/print-job-manual.test b/test/print-job-manual.test
new file mode 100644
index 0000000..1578228
--- /dev/null
+++ b/test/print-job-manual.test
@@ -0,0 +1,37 @@
+# Print a test page using print-job
+{
+ # The name of the test...
+ NAME "Print file using Print-Job"
+
+ # The operation to use
+ OPERATION Print-Job
+
+ # Attributes, starting in the operation group...
+ GROUP operation-attributes-tag
+ ATTR charset attributes-charset utf-8
+ ATTR language attributes-natural-language en
+ ATTR uri printer-uri $uri
+ ATTR name requesting-user-name $user
+ ATTR mimeMediaType document-format $filetype
+
+ GROUP job-attributes-tag
+ ATTR integer copies 1
+ ATTR collection media-col {
+ MEMBER keyword media-source manual
+ MEMBER collection media-size {
+ MEMBER integer x-dimension 21590
+ MEMBER integer y-dimension 27940
+ }
+ }
+ ATTR keyword print-scaling none
+
+ FILE $filename
+
+ # What statuses are OK?
+ STATUS successful-ok
+ STATUS successful-ok-ignored-or-substituted-attributes
+
+ # What attributes do we expect?
+ EXPECT job-id
+ EXPECT job-uri
+}
diff --git a/test/run-stp-tests.sh b/test/run-stp-tests.sh
index ee5a2cb..37604a9 100755
--- a/test/run-stp-tests.sh
+++ b/test/run-stp-tests.sh
@@ -3,7 +3,7 @@
# Perform the complete set of IPP compliance tests specified in the
# CUPS Software Test Plan.
#
-# Copyright 2007-2016 by Apple Inc.
+# Copyright 2007-2017 by Apple Inc.
# Copyright 1997-2007 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
@@ -464,6 +464,7 @@ else
instfilter pdftopdf pdftopdf passthru
instfilter pdftops pdftops ps
instfilter pdftoraster pdftoraster raster
+ instfilter pdftoraster pdftourf raster
instfilter pstoraster pstoraster raster
instfilter texttopdf texttopdf pdf
@@ -602,6 +603,16 @@ if test `uname` = SunOS -a -r /usr/lib/libCrun.so.1; then
fi
export LD_PRELOAD
+if test -f $root/cups/libcups.2.dylib; then
+ if test "x$DYLD_INSERT_LIBRARIES" = x; then
+ DYLD_INSERT_LIBRARIES="$root/cups/libcups.2.dylib:$root/filter/libcupsimage.2.dylib:$root/cgi-bin/libcupscgi.1.dylib:$root/scheduler/libcupsmime.1.dylib:$root/ppdc/libcupsppdc.1.dylib"
+ else
+ DYLD_INSERT_LIBRARIES="$root/cups/libcups.2.dylib:$root/filter/libcupsimage.2.dylib:$root/cgi-bin/libcupscgi.1.dylib:$root/scheduler/libcupsmime.1.dylib:$root/ppdc/libcupsppdc.1.dylib:$DYLD_INSERT_LIBRARIES"
+ fi
+
+ export DYLD_INSERT_LIBRARIES
+fi
+
if test "x$DYLD_LIBRARY_PATH" = x; then
DYLD_LIBRARY_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc"
else
@@ -651,7 +662,13 @@ echo " $VALGRIND ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_l
echo ""
if test `uname` = Darwin -a "x$VALGRIND" = x; then
- DYLD_INSERT_LIBRARIES="/usr/lib/libgmalloc.dylib" MallocStackLogging=1 ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &
+ if test "x$DYLD_INSERT_LIBRARIES" = x; then
+ insert="/usr/lib/libgmalloc.dylib"
+ else
+ insert="/usr/lib/libgmalloc.dylib:$DYLD_INSERT_LIBRARIES"
+ fi
+
+ DYLD_INSERT_LIBRARIES="$insert" MallocStackLogging=1 ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &
else
$VALGRIND ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &
fi
@@ -723,12 +740,7 @@ done
date=`date "+%Y-%m-%d"`
-if test -d $root/.svn; then
- rev=`svn info . | grep Revision: | awk '{print $2}'`
- strfile=$BASE/cups-str-2.2-r$rev-$user.html
-else
- strfile=$BASE/cups-str-2.2-$date-$user.html
-fi
+strfile=$BASE/cups-str-$date-$user.html
rm -f $strfile
cat str-header.html >$strfile
@@ -740,11 +752,11 @@ cat str-header.html >$strfile
echo ""
echo "Running IPP compliance tests..."
-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
-echo "<PRE>" >>$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 by $user on `hostname`." >>$strfile
+echo " <pre>" >>$strfile
fail=0
for file in 4*.test ipp-2.1.test; do
@@ -769,7 +781,7 @@ for file in 4*.test ipp-2.1.test; do
fi
done
-echo "</PRE>" >>$strfile
+echo " </pre>" >>$strfile
#
# Run the command tests...
@@ -778,11 +790,11 @@ echo "</PRE>" >>$strfile
echo ""
echo "Running command tests..."
-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
-echo "<PRE>" >>$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
+echo " <pre>" >>$strfile
for file in 5*.sh; do
echo $ac_n "Performing $file: $ac_c"
@@ -803,6 +815,7 @@ done
#
# Log all allocations made by the scheduler...
#
+
if test `uname` = Darwin -a "x$VALGRIND" = x; then
malloc_history $cupsd -callTree -showContent >$BASE/log/malloc_log 2>&1
fi
@@ -836,7 +849,7 @@ else
echo PASS
fi
-echo "</PRE>" >>$strfile
+echo " </pre>" >>$strfile
#
# Stop the server...
@@ -852,15 +865,15 @@ cupsdstatus=$?
echo "Test Summary"
echo ""
-echo "<H1><A NAME='SUMMARY'>3 - Test Summary</A></H1>" >>$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
+ 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
+ echo " <p>PASS: cupsd exited with no errors.</p>" >>$strfile
fi
# Job control files
@@ -868,11 +881,11 @@ count=`ls -1 $BASE/spool | wc -l`
count=`expr $count - 1`
if test $count != 0; then
echo "FAIL: $count job control files were not purged."
- echo "<P>FAIL: $count job control files were not purged.</P>" >>$strfile
+ echo " <p>FAIL: $count job control files were not purged.</p>" >>$strfile
fail=`expr $fail + 1`
else
echo "PASS: All job control files purged."
- echo "<P>PASS: All job control files purged.</P>" >>$strfile
+ echo " <p>PASS: All job control files purged.</p>" >>$strfile
fi
# Pages printed on Test1 (within 1 page for timing-dependent cancel issues)
@@ -881,11 +894,11 @@ expected=`expr $pjobs \* 2 + 34`
expected2=`expr $expected + 2`
if test $count -lt $expected -a $count -gt $expected2; then
echo "FAIL: Printer 'Test1' produced $count page(s), expected $expected."
- echo "<P>FAIL: Printer 'Test1' produced $count page(s), expected $expected.</P>" >>$strfile
+ echo " <p>FAIL: Printer 'Test1' produced $count page(s), expected $expected.</p>" >>$strfile
fail=`expr $fail + 1`
else
echo "PASS: Printer 'Test1' correctly produced $count page(s)."
- echo "<P>PASS: Printer 'Test1' correctly produced $count page(s).</P>" >>$strfile
+ echo " <p>PASS: Printer 'Test1' correctly produced $count page(s).</p>" >>$strfile
fi
# Paged printed on Test2
@@ -893,11 +906,11 @@ count=`$GREP '^Test2 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}E
expected=`expr $pjobs \* 2 + 3`
if test $count != $expected; then
echo "FAIL: Printer 'Test2' produced $count page(s), expected $expected."
- echo "<P>FAIL: Printer 'Test2' produced $count page(s), expected $expected.</P>" >>$strfile
+ echo " <p>FAIL: Printer 'Test2' produced $count page(s), expected $expected.</p>" >>$strfile
fail=`expr $fail + 1`
else
echo "PASS: Printer 'Test2' correctly produced $count page(s)."
- echo "<P>PASS: Printer 'Test2' correctly produced $count page(s).</P>" >>$strfile
+ echo " <p>PASS: Printer 'Test2' correctly produced $count page(s).</p>" >>$strfile
fi
# Paged printed on Test3
@@ -905,11 +918,11 @@ count=`$GREP '^Test3 ' $BASE/log/page_log | grep -v total | awk 'BEGIN{count=0}{
expected=2
if test $count != $expected; then
echo "FAIL: Printer 'Test3' produced $count page(s), expected $expected."
- echo "<P>FAIL: Printer 'Test3' produced $count page(s), expected $expected.</P>" >>$strfile
+ echo " <p>FAIL: Printer 'Test3' produced $count page(s), expected $expected.</p>" >>$strfile
fail=`expr $fail + 1`
else
echo "PASS: Printer 'Test3' correctly produced $count page(s)."
- echo "<P>PASS: Printer 'Test3' correctly produced $count page(s).</P>" >>$strfile
+ echo " <p>PASS: Printer 'Test3' correctly produced $count page(s).</p>" >>$strfile
fi
# Requests logged
@@ -917,24 +930,24 @@ count=`wc -l $BASE/log/access_log | awk '{print $1}'`
expected=`expr 37 + 18 + 30 + $pjobs \* 8 + $pprinters \* $pjobs \* 4`
if test $count != $expected; then
echo "FAIL: $count requests logged, expected $expected."
- echo "<P>FAIL: $count requests logged, expected $expected.</P>" >>$strfile
+ echo " <p>FAIL: $count requests logged, expected $expected.</p>" >>$strfile
fail=`expr $fail + 1`
else
echo "PASS: $count requests logged."
- echo "<P>PASS: $count requests logged.</P>" >>$strfile
+ echo " <p>PASS: $count requests logged.</p>" >>$strfile
fi
# Did CUPS-Get-Default get logged?
if $GREP -q CUPS-Get-Default $BASE/log/access_log; then
echo "FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'"
- echo "<P>FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'</P>" >>$strfile
- echo "<PRE>" >>$strfile
+ echo " <p>FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'</p>" >>$strfile
+ echo " <pre>" >>$strfile
$GREP CUPS-Get-Default $BASE/log/access_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
- echo "</PRE>" >>$strfile
+ echo " </pre>" >>$strfile
fail=`expr $fail + 1`
else
echo "PASS: CUPS-Get-Default not logged."
- echo "<P>PASS: CUPS-Get-Default not logged.</P>" >>$strfile
+ echo " <p>PASS: CUPS-Get-Default not logged.</p>" >>$strfile
fi
# Emergency log messages
@@ -942,14 +955,14 @@ count=`$GREP '^X ' $BASE/log/error_log | wc -l | awk '{print $1}'`
if test $count != 0; then
echo "FAIL: $count emergency messages, expected 0."
$GREP '^X ' $BASE/log/error_log
- echo "<P>FAIL: $count emergency messages, expected 0.</P>" >>$strfile
- echo "<PRE>" >>$strfile
+ echo " <p>FAIL: $count emergency messages, expected 0.</p>" >>$strfile
+ echo " <pre>" >>$strfile
$GREP '^X ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
- echo "</PRE>" >>$strfile
+ echo " </pre>" >>$strfile
fail=`expr $fail + 1`
else
echo "PASS: $count emergency messages."
- echo "<P>PASS: $count emergency messages.</P>" >>$strfile
+ echo " <p>PASS: $count emergency messages.</p>" >>$strfile
fi
# Alert log messages
@@ -957,14 +970,14 @@ count=`$GREP '^A ' $BASE/log/error_log | wc -l | awk '{print $1}'`
if test $count != 0; then
echo "FAIL: $count alert messages, expected 0."
$GREP '^A ' $BASE/log/error_log
- echo "<P>FAIL: $count alert messages, expected 0.</P>" >>$strfile
- echo "<PRE>" >>$strfile
+ echo " <p>FAIL: $count alert messages, expected 0.</p>" >>$strfile
+ echo " <pre>" >>$strfile
$GREP '^A ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
- echo "</PRE>" >>$strfile
+ echo " </pre>" >>$strfile
fail=`expr $fail + 1`
else
echo "PASS: $count alert messages."
- echo "<P>PASS: $count alert messages.</P>" >>$strfile
+ echo " <p>PASS: $count alert messages.</p>" >>$strfile
fi
# Critical log messages
@@ -972,14 +985,14 @@ count=`$GREP '^C ' $BASE/log/error_log | wc -l | awk '{print $1}'`
if test $count != 0; then
echo "FAIL: $count critical messages, expected 0."
$GREP '^C ' $BASE/log/error_log
- echo "<P>FAIL: $count critical messages, expected 0.</P>" >>$strfile
- echo "<PRE>" >>$strfile
+ echo " <p>FAIL: $count critical messages, expected 0.</p>" >>$strfile
+ echo " <pre>" >>$strfile
$GREP '^C ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
- echo "</PRE>" >>$strfile
+ echo " </pre>" >>$strfile
fail=`expr $fail + 1`
else
echo "PASS: $count critical messages."
- echo "<P>PASS: $count critical messages.</P>" >>$strfile
+ echo " <p>PASS: $count critical messages.</p>" >>$strfile
fi
# Error log messages
@@ -987,14 +1000,14 @@ count=`$GREP '^E ' $BASE/log/error_log | wc -l | awk '{print $1}'`
if test $count != 33; then
echo "FAIL: $count error messages, expected 33."
$GREP '^E ' $BASE/log/error_log
- echo "<P>FAIL: $count error messages, expected 33.</P>" >>$strfile
- echo "<PRE>" >>$strfile
+ echo " <p>FAIL: $count error messages, expected 33.</p>" >>$strfile
+ echo " <pre>" >>$strfile
$GREP '^E ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
- echo "</PRE>" >>$strfile
+ echo " </pre>" >>$strfile
fail=`expr $fail + 1`
else
echo "PASS: $count error messages."
- echo "<P>PASS: $count error messages.</P>" >>$strfile
+ echo " <p>PASS: $count error messages.</p>" >>$strfile
fi
# Warning log messages
@@ -1002,14 +1015,14 @@ count=`$GREP '^W ' $BASE/log/error_log | $GREP -v CreateProfile | wc -l | awk '{
if test $count != 8; then
echo "FAIL: $count warning messages, expected 8."
$GREP '^W ' $BASE/log/error_log
- echo "<P>FAIL: $count warning messages, expected 8.</P>" >>$strfile
- echo "<PRE>" >>$strfile
+ echo " <p>FAIL: $count warning messages, expected 8.</p>" >>$strfile
+ echo " <pre>" >>$strfile
$GREP '^W ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
- echo "</PRE>" >>$strfile
+ echo " </pre>" >>$strfile
fail=`expr $fail + 1`
else
echo "PASS: $count warning messages."
- echo "<P>PASS: $count warning messages.</P>" >>$strfile
+ echo " <p>PASS: $count warning messages.</p>" >>$strfile
fi
# Notice log messages
@@ -1017,69 +1030,74 @@ count=`$GREP '^N ' $BASE/log/error_log | wc -l | awk '{print $1}'`
if test $count != 0; then
echo "FAIL: $count notice messages, expected 0."
$GREP '^N ' $BASE/log/error_log
- echo "<P>FAIL: $count notice messages, expected 0.</P>" >>$strfile
- echo "<PRE>" >>$strfile
+ echo " <p>FAIL: $count notice messages, expected 0.</p>" >>$strfile
+ echo " <pre>" >>$strfile
$GREP '^N ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
- echo "</PRE>" >>$strfile
+ echo " </pre>" >>$strfile
fail=`expr $fail + 1`
else
echo "PASS: $count notice messages."
- echo "<P>PASS: $count notice messages.</P>" >>$strfile
+ echo " <p>PASS: $count notice messages.</p>" >>$strfile
fi
# Info log messages
count=`$GREP '^I ' $BASE/log/error_log | wc -l | awk '{print $1}'`
if test $count = 0; then
echo "FAIL: $count info messages, expected more than 0."
- echo "<P>FAIL: $count info messages, expected more than 0.</P>" >>$strfile
+ echo " <p>FAIL: $count info messages, expected more than 0.</p>" >>$strfile
fail=`expr $fail + 1`
else
echo "PASS: $count info messages."
- echo "<P>PASS: $count info messages.</P>" >>$strfile
+ echo " <p>PASS: $count info messages.</p>" >>$strfile
fi
# Debug log messages
count=`$GREP '^D ' $BASE/log/error_log | wc -l | awk '{print $1}'`
if test $count = 0; then
echo "FAIL: $count debug messages, expected more than 0."
- echo "<P>FAIL: $count debug messages, expected more than 0.</P>" >>$strfile
+ echo " <p>FAIL: $count debug messages, expected more than 0.</p>" >>$strfile
fail=`expr $fail + 1`
else
echo "PASS: $count debug messages."
- echo "<P>PASS: $count debug messages.</P>" >>$strfile
+ echo " <p>PASS: $count debug messages.</p>" >>$strfile
fi
# Debug2 log messages
count=`$GREP '^d ' $BASE/log/error_log | wc -l | awk '{print $1}'`
if test $count = 0; then
echo "FAIL: $count debug2 messages, expected more than 0."
- echo "<P>FAIL: $count debug2 messages, expected more than 0.</P>" >>$strfile
+ echo " <p>FAIL: $count debug2 messages, expected more than 0.</p>" >>$strfile
fail=`expr $fail + 1`
else
echo "PASS: $count debug2 messages."
- echo "<P>PASS: $count debug2 messages.</P>" >>$strfile
+ echo " <p>PASS: $count debug2 messages.</p>" >>$strfile
fi
#
# Log files...
#
-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><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><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
+echo " <h1><a name='LOGS'>4 - Log Files</a></h1>" >>$strfile
+
+for file in $BASE/log/*_log; do
+ baselog=`basename $file`
+
+ echo " <h2><a name=\"$baselog\">$baselog</a></h2>" >>$strfile
+ case $baselog in
+ error_log)
+ echo " <blockquote>Note: debug2 messages have been filtered out of the HTML report.</blockquote>" >>$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 " <pre>" >>$strfile
+ sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' $file >>$strfile
+ echo " </pre>" >>$strfile
+ ;;
+ esac
+done
#
# Format the reports and tell the user where to find them...
@@ -1088,29 +1106,23 @@ echo "</PRE>" >>$strfile
cat str-trailer.html >>$strfile
echo ""
+for file in $BASE/log/*_log; do
+ baselog=`basename $file`
+ cp $file $baselog-$date-$user
+ echo "Copied log file \"$baselog-$date-$user\" to test directory."
+done
+cp $strfile .
+echo "Copied report file \"cups-str-$date-$user.html\" to test directory."
-if test $fail != 0; then
- echo "$fail tests failed."
-
- if test -d $root/.svn; then
- cp $BASE/log/error_log error_log-r$rev-$user
- else
- cp $BASE/log/error_log error_log-$date-$user
- fi
+# Clean out old failure log files after 1 week...
+find . -name \*_log-\*-$user -a -mtime +7 -print -exec rm -f '{}' \; | awk '{print "Removed old log file \"" substr($1,3) "\" from test directory."}'
+find . -name cups-str-\*-$user.html -a -mtime +7 -print -exec rm -f '{}' \; | awk '{print "Removed old report file \"" $1 "\" from test directory."}'
- cp $strfile .
-else
- echo "All tests were successful."
-fi
-
-echo "Log files can be found in $BASE/log."
-echo "A HTML report was created in $strfile."
echo ""
if test $fail != 0; then
- echo "Copies of the error_log and `basename $strfile` files are in"
- echo "`pwd`."
- echo ""
-
+ echo "$fail tests failed."
exit 1
+else
+ echo "All tests were successful."
fi
diff --git a/test/str-header.html b/test/str-header.html
index ff53eaf..35f622a 100644
--- a/test/str-header.html
+++ b/test/str-header.html
@@ -1,35 +1,43 @@
-<HTML>
-<HEAD>
- <META NAME="Description" CONTENT="CUPS Test Report">
- <META NAME="COPYRIGHT" CONTENT="Copyright 2007-2016, All Rights Reserved">
- <META NAME="DOCNUMBER" CONTENT="CUPS-STR-2.2">
- <META NAME="Author" CONTENT="Apple Inc.">
- <TITLE>CUPS 2.2 Software Test Report</TITLE>
- <STYLE TYPE="text/css"><!--
- PRE {
- font-size: 80%;
- margin-left: 2em;
- }
- --></STYLE>
-</HEAD>
-<BODY>
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta name="Description" content="CUPS Test Report">
+ <meta name="Copyright" content="Copyright &copy; 2007-2017, All Rights Reserved">
+ <meta name="Author" content="Apple Inc.">
+ <title>CUPS Software Test Report</title>
+ <style type="text/css"><!--
+blockquote {
+ background: #eee;
+ border: 1px solid #ccc;
+ padding: 5px;
+}
+pre {
+ background: #eee;
+ border-left: 2px solid #ccc;
+ font-size: 80%;
+ margin-left: 2em;
+ padding: 5px;
+ white-space: pre-wrap;
+}
+--></style>
+ </head>
+ <body>
+ <h1>CUPS Software Test Report</h1>
-<H1>CUPS 2.2 Software Test Report</H1>
+ <p>This software test report provides detailed test results that are used to evaluate the stability and standards compliance of the CUPS software.</p>
-<P>This software test report provides detailed test results that
-are used to evaluate the stability and compliance of CUPS Version 2.2.
+ <h2>Document Overview</h2>
-<H2>Document Overview</H2>
+ <p>This software test plan is organized into the following sections:</p>
-<P>This software test plan is organized into the following sections:
-
-<UL>
- <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>
+ <ul>
+ <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="#debug_log">debug_log</a></li>
+ <li><a href="#error_log">error_log</a></li>
+ <li><a href="#page_log">page_log</a></li>
+ </ul></li>
+ </ul>
diff --git a/test/str-trailer.html b/test/str-trailer.html
index e04310f..b605728 100644
--- a/test/str-trailer.html
+++ b/test/str-trailer.html
@@ -1,2 +1,2 @@
-</BODY>
-</HTML>
+ </body>
+</html>
diff --git a/vcnet/config.h b/vcnet/config.h
index 05fe9b2..ef42585 100644
--- a/vcnet/config.h
+++ b/vcnet/config.h
@@ -94,8 +94,8 @@ typedef unsigned long useconds_t;
* Version of software...
*/
-#define CUPS_SVERSION "CUPS v2.2.3"
-#define CUPS_MINIMAL "CUPS/2.2.3"
+#define CUPS_SVERSION "CUPS v2.2.4"
+#define CUPS_MINIMAL "CUPS/2.2.4"
/*
diff --git a/xcode/CUPS.xcodeproj/project.pbxproj b/xcode/CUPS.xcodeproj/project.pbxproj
index 3a673f2..2edef83 100644
--- a/xcode/CUPS.xcodeproj/project.pbxproj
+++ b/xcode/CUPS.xcodeproj/project.pbxproj
@@ -3576,11 +3576,11 @@
72E65BD918DC850A00097E89 /* Makefile */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.make; name = Makefile; path = ../Makefile; sourceTree = "<group>"; };
72E65BDC18DC852700097E89 /* Makefile */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.make; name = Makefile; path = ../scheduler/Makefile; sourceTree = SOURCE_ROOT; };
72E65BDD18DCA35700097E89 /* CHANGES-1.7.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = "CHANGES-1.7.txt"; path = "../CHANGES-1.7.txt"; sourceTree = "<group>"; };
- 72E65BDE18DCA35700097E89 /* CHANGES.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = CHANGES.txt; path = ../CHANGES.txt; sourceTree = "<group>"; };
- 72E65BDF18DCA35700097E89 /* CREDITS.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = CREDITS.txt; path = ../CREDITS.txt; sourceTree = "<group>"; };
- 72E65BE018DCA35700097E89 /* INSTALL.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = INSTALL.txt; path = ../INSTALL.txt; sourceTree = "<group>"; };
+ 72E65BDE18DCA35700097E89 /* CHANGES.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = CHANGES.md; path = ../CHANGES.md; sourceTree = "<group>"; };
+ 72E65BDF18DCA35700097E89 /* CREDITS.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = CREDITS.md; path = ../CREDITS.md; sourceTree = "<group>"; };
+ 72E65BE018DCA35700097E89 /* INSTALL.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = INSTALL.md; path = ../INSTALL.md; sourceTree = "<group>"; };
72E65BE218DCA35700097E89 /* LICENSE.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = LICENSE.txt; path = ../LICENSE.txt; sourceTree = "<group>"; };
- 72E65BE318DCA35700097E89 /* README.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = README.txt; path = ../README.txt; sourceTree = "<group>"; };
+ 72E65BE318DCA35700097E89 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = "<group>"; };
72F75A521336F950004BB496 /* cupstestppd */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = cupstestppd; sourceTree = BUILT_PRODUCTS_DIR; };
72F75A5B1336F988004BB496 /* cupstestppd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cupstestppd.c; path = ../systemv/cupstestppd.c; sourceTree = "<group>"; };
72F75A611336F9A3004BB496 /* libcupsimage.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libcupsimage.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -4880,10 +4880,10 @@
72220EBC1333056300FCA411 /* backchannel.c */,
72220EBD1333056300FCA411 /* backend.c */,
72220ED1133305BB00FCA411 /* debug.c */,
+ 72220ED2133305BB00FCA411 /* dest.c */,
72CF95E018A13543000FCAE4 /* dest-job.c */,
72CF95E118A13543000FCAE4 /* dest-localization.c */,
72CF95E218A13543000FCAE4 /* dest-options.c */,
- 72220ED2133305BB00FCA411 /* dest.c */,
72220ED3133305BB00FCA411 /* dir.c */,
72220ED4133305BB00FCA411 /* dir.h */,
72220ED6133305BB00FCA411 /* encode.c */,
@@ -4893,12 +4893,12 @@
72220EDC133305BB00FCA411 /* getputfile.c */,
72220EDD133305BB00FCA411 /* globals.c */,
7284F9EF1BFCCD940026F886 /* hash.c */,
+ 72220EE2133305BB00FCA411 /* http.c */,
72220EDE133305BB00FCA411 /* http-addr.c */,
72220EDF133305BB00FCA411 /* http-addrlist.c */,
72220EE1133305BB00FCA411 /* http-support.c */,
- 72220EE2133305BB00FCA411 /* http.c */,
- 72220EE5133305BB00FCA411 /* ipp-support.c */,
72220EE6133305BB00FCA411 /* ipp.c */,
+ 72220EE5133305BB00FCA411 /* ipp-support.c */,
72220EE8133305BB00FCA411 /* langprintf.c */,
72220EEA133305BB00FCA411 /* language.c */,
72220EEF133305BB00FCA411 /* md5.c */,
@@ -5234,10 +5234,10 @@
72E65BCC18DC7A9800097E89 /* api-raster.shtml */,
72E65BDD18DCA35700097E89 /* CHANGES-1.7.txt */,
729D4B561A2CB48700692B21 /* CHANGES-2.0.txt */,
- 72E65BDE18DCA35700097E89 /* CHANGES.txt */,
- 72E65BDF18DCA35700097E89 /* CREDITS.txt */,
+ 72E65BDE18DCA35700097E89 /* CHANGES.md */,
+ 72E65BDF18DCA35700097E89 /* CREDITS.md */,
72E65BB918DC7A3600097E89 /* doc */,
- 72E65BE018DCA35700097E89 /* INSTALL.txt */,
+ 72E65BE018DCA35700097E89 /* INSTALL.md */,
72E65BE218DCA35700097E89 /* LICENSE.txt */,
72E65BBA18DC7A3600097E89 /* man */,
72E65BCD18DC7A9800097E89 /* postscript-driver.header */,
@@ -5246,7 +5246,7 @@
72E65BD018DC7A9800097E89 /* ppd-compiler.shtml */,
72E65BD118DC7A9800097E89 /* raster-driver.header */,
72E65BD218DC7A9800097E89 /* raster-driver.shtml */,
- 72E65BE318DCA35700097E89 /* README.txt */,
+ 72E65BE318DCA35700097E89 /* README.md */,
72E65BD318DC7A9800097E89 /* spec-ppd.header */,
72E65BD418DC7A9800097E89 /* spec-ppd.shtml */,
);
@@ -7225,7 +7225,7 @@
72BF96371333042100B1EAD7 /* Project object */ = {
isa = PBXProject;
attributes = {
- LastUpgradeCheck = 0800;
+ LastUpgradeCheck = 0900;
ORGANIZATIONNAME = "Apple Inc.";
TargetAttributes = {
270695FD1CADF3E200FFE5FB = {
@@ -11049,10 +11049,14 @@
buildSettings = {
ASSETCATALOG_COMPRESSION = lossless;
CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_COMMA = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = NO;
@@ -11092,10 +11096,14 @@
buildSettings = {
ASSETCATALOG_COMPRESSION = "respect-asset-catalog";
CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_COMMA = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = NO;
diff --git a/xcode/config.h b/xcode/config.h
index 26b12a7..61593a9 100644
--- a/xcode/config.h
+++ b/xcode/config.h
@@ -22,8 +22,8 @@
* Version of software...
*/
-#define CUPS_SVERSION "CUPS v2.2.3"
-#define CUPS_MINIMAL "CUPS/2.2.3"
+#define CUPS_SVERSION "CUPS v2.2.4"
+#define CUPS_MINIMAL "CUPS/2.2.4"
/*