| <!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="codedoc v3.1"> | |
| <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; | |
| } | |
| H1, H2, H3, H4, H5, H6, P, TD, TH { | |
| font-family: lucida grande, geneva, helvetica, arial, sans-serif; | |
| } | |
| H1 { font-size: 2em; } | |
| H2 { font-size: 1.75em; } | |
| H3 { font-size: 1.5em; } | |
| H4 { font-size: 1.25em; } | |
| KBD { | |
| font-family: monaco, courier, monospace; | |
| font-weight: bold; | |
| } | |
| PRE { | |
| font-family: monaco, courier, monospace; | |
| } | |
| BLOCKQUOTE { | |
| border-left: solid 2px #777; | |
| margin: 1em 0; | |
| padding: 10px; | |
| } | |
| BLOCKQUOTE OL LI { | |
| margin-left: -1em; | |
| } | |
| PRE.command, PRE.example { | |
| background: #eee; | |
| margin: 0 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.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; | |
| } | |
| 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: 5pt 10pt 0; | |
| } | |
| 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 { | |
| 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: 10px 10px 0px; | |
| 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; | |
| 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; | |
| } | |
| h2 span.info, h3 span.info, h4 span.info { | |
| border-radius: 10px; | |
| float: right; | |
| font-size: 80%; | |
| padding: 3px 6px; | |
| } | |
| h2.title span.info, h3.title span.info, h4.title span.info { | |
| border-bottom-left-radius: 0px; | |
| border-bottom-right-radius: 0px; | |
| } | |
| h2.title span.info { | |
| padding: 4px 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> | |
| <!-- | |
| PPD API header for CUPS. | |
| Copyright © 2008-2019 by Apple Inc. | |
| Licensed under Apache License v2.0. See the file "LICENSE" for more | |
| information. | |
| --> | |
| <h1 class='title'>PPD API (DEPRECATED)</h1> | |
| <blockquote><b>Note:</b> | |
| <p>The PPD API was deprecated in CUPS 1.6/macOS 10.8. Please use the new Job Ticket APIs in the <a href="cupspm.html">CUPS Programming Manual</a> documentation. These functions will be removed in a future release of CUPS.</p> | |
| </blockquote> | |
| <div class='summary'><table summary='General Information'> | |
| <thead> | |
| <tr> | |
| <th>Header</th> | |
| <th>cups/ppd.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='cupspm.html' target='_top'>CUPS Programming Manual</a><br> | |
| Specifications: <a href='spec-ppd.html' target='_top'>CUPS PPD Extensions</a></td> | |
| </tr> | |
| </tbody> | |
| </table></div> | |
| <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="#cupsRasterInterpretPPD">cupsRasterInterpretPPD</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="#cups_interpret_cb_t">cups_interpret_cb_t</a></li> | |
| <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_cptype_e">ppd_cptype_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. | |
| Copyright © 2007-2019 by Apple Inc. | |
| Copyright © 1997-2006 by Easy Software Products, all rights reserved. | |
| Licensed under Apache License v2.0. See the file "LICENSE" for more | |
| information. | |
| --> | |
| <h2 class='title'><a name='OVERVIEW'>Overview</a></h2> | |
| <blockquote><b>Note:</b> | |
| <p>The PPD API was deprecated in CUPS 1.6/macOS 10.8. Please use the new Job Ticket APIs in the <a href="cupspm.html">CUPS Programming Manual</a> documentation. These functions will be removed in a future release of CUPS.</p> | |
| </blockquote> | |
| <p>The CUPS PPD API provides read-only access the data in PostScript Printer | |
| Description ("PPD") files which are used for all printers with a driver. With | |
| it you can obtain the data necessary to display printer options to users, mark | |
| option choices and check for conflicting choices, and output marked choices in | |
| PostScript output. The <a href="#ppd_file_t"><code>ppd_file_t</code></a> | |
| structure contains all of the information in a PPD file.</p> | |
| <blockquote><b>Note:</b> | |
| <p>The CUPS PPD API uses the terms "option" and "choice" instead of the Adobe | |
| terms "MainKeyword" and "OptionKeyword" to refer to specific printer options and | |
| features. CUPS also treats option ("MainKeyword") and choice ("OptionKeyword") | |
| values as case-insensitive strings, so option "InputSlot" and choice "Upper" | |
| are equivalent to "inputslot" and "upper", respectively.</p> | |
| </blockquote> | |
| <h3><a name="LOADING">Loading a PPD File</a></h3> | |
| <p>The <a href="#ppdOpenFile"><code>ppdOpenFile</code></a> function "opens" a | |
| PPD file and loads it into memory. For example, the following code opens the | |
| current printer's PPD file in a CUPS filter:</p> | |
| <pre class="example"> | |
| #include <cups/ppd.h> | |
| <a href="#ppd_file_t">ppd_file_t</a> *ppd = <a href="#ppdOpenFile">ppdOpenFile</a>(getenv("PPD")); | |
| </pre> | |
| <p>The return value is a pointer to a new | |
| <a href="#ppd_file_t"><code>ppd_file_t</code></a> structure or <code>NULL</code> | |
| if the PPD file does not exist or cannot be loaded. The | |
| <a href="#ppdClose"><code>ppdClose</code></a> function frees the memory used | |
| by the structure:</p> | |
| <pre class="example"> | |
| #include <cups/ppd.h> | |
| <a href="#ppd_file_t">ppd_file_t</a> *ppd; | |
| <a href="#ppdClose">ppdClose</a>(ppd); | |
| </pre> | |
| <p>Once closed, pointers to the <a href="#ppd_file_t"><code>ppd_file_t</code></a> | |
| structure and any data in it will no longer be valid.</p> | |
| <h3><a name="OPTIONS_AND_GROUPS">Options and Groups</a></h3> | |
| <p>PPD files support multiple options, which are stored in arrays of | |
| <a href="#ppd_option_t"><code>ppd_option_t</code></a> and | |
| <a href="#ppd_choice_t"><code>ppd_choice_t</code></a> structures.</p> | |
| <p>Each option in turn is associated with a group stored in a | |
| <a href="#ppd_group_t"><code>ppd_group_t</code></a> structure. Groups can be | |
| specified in the PPD file; if an option is not associated with a group | |
| then it is put in an automatically-generated "General" group. Groups can also | |
| have sub-groups, however CUPS currently ignores sub-groups because of past | |
| abuses of this functionality.</p> | |
| <p>Option choices are selected by marking them using one of three functions. The | |
| first is <a href="#ppdMarkDefaults"><code>ppdMarkDefaults</code></a> which | |
| selects all of the default options in the PPD file:</p> | |
| <pre class="example"> | |
| #include <cups/ppd.h> | |
| <a href="#ppd_file_t">ppd_file_t</a> *ppd; | |
| <a href="#ppdMarkDefaults">ppdMarkDefaults</a>(ppd); | |
| </pre> | |
| <p>The second is <a href="#ppdMarkOption"><code>ppdMarkOption</code></a> | |
| which selects a single option choice in the PPD file. For example, the following | |
| code selects the upper paper tray:</p> | |
| <pre class="example"> | |
| #include <cups/ppd.h> | |
| <a href="#ppd_file_t">ppd_file_t</a> *ppd; | |
| <a href="#ppdMarkOption">ppdMarkOption</a>(ppd, "InputSlot", "Upper"); | |
| </pre> | |
| <p>The last function is | |
| <a href="#cupsMarkOptions"><code>cupsMarkOptions</code></a> which selects | |
| multiple option choices in the PPD file from an array of CUPS options, mapping | |
| IPP attributes like "media" and "sides" to their corresponding PPD options. You | |
| typically use this function in a print filter with | |
| <code>cupsParseOptions</code> and | |
| <a href="#ppdMarkDefaults"><code>ppdMarkDefaults</code></a> to select all of | |
| the option choices needed for the job, for example:</p> | |
| <pre class="example"> | |
| #include <cups/ppd.h> | |
| <a href="#ppd_file_t">ppd_file_t</a> *ppd = <a href="#ppdOpenFile">ppdOpenFile</a>(getenv("PPD")); | |
| cups_option_t *options = NULL; | |
| int num_options = cupsParseOptions(argv[5], 0, &options); | |
| <a href="#ppdMarkDefaults">ppdMarkDefaults</a>(ppd); | |
| <a href="#cupsMarkOptions">cupsMarkOptions</a>(ppd, num_options, options); | |
| cupsFreeOptions(num_options, options); | |
| </pre> | |
| <h3><a name="CONSTRAINTS">Constraints</a></h3> | |
| <p>PPD files support specification of conflict conditions, called | |
| constraints, between different options. Constraints are stored in an array of | |
| <a href="#ppd_const_t"><code>ppd_const_t</code></a> structures which specify | |
| the options and choices that conflict with each other. The | |
| <a href="#ppdConflicts"><code>ppdConflicts</code></a> function tells you | |
| how many of the selected options are incompatible. Since constraints are | |
| normally specified in pairs, the returned value is typically an even number.</p> | |
| <h3><a name="PAGE_SIZES">Page Sizes</a></h3> | |
| <p>Page sizes are special options which have physical dimensions and margins | |
| associated with them. The size information is stored in | |
| <a href="#ppd_size_t"><code>ppd_size_t</code></a> structures and is available | |
| by looking up the named size with the | |
| <a href="#ppdPageSize"><code>ppdPageSize</code></a> function. The page size and | |
| margins are returned in units called points; there are 72 points per inch. If | |
| you pass <code>NULL</code> for the size, the currently selected size is | |
| returned:</p> | |
| <pre class="example"> | |
| #include <cups/ppd.h> | |
| <a href="#ppd_file_t">ppd_file_t</a> *ppd; | |
| <a href="#ppd_size_t">ppd_size_t</a> *size = <a href="#ppdPageSize">ppdPageSize</a>(ppd, NULL); | |
| </pre> | |
| <p>Besides the standard page sizes listed in a PPD file, some printers | |
| support variable or custom page sizes. Custom page sizes are supported if the | |
| <code>variables_sizes</code> member of the | |
| <a href="#ppd_file_t"><code>ppd_file_t</code></a> structure is non-zero. | |
| The <code>custom_min</code>, <code>custom_max</code>, and | |
| <code>custom_margins</code> members of the | |
| <a href="#ppd_file_t"><code>ppd_file_t</code></a> structure define the limits | |
| of the printable area. To get the resulting media size, use a page size string | |
| of the form "Custom.<I>width</I>x<I>length</I>", where "width" and "length" are | |
| in points. Custom page size names can also be specified in inches | |
| ("Custom.<i>width</i>x<i>height</i>in"), centimeters | |
| ("Custom.<i>width</i>x<i>height</i>cm"), or millimeters | |
| ("Custom.<i>width</i>x<i>height</i>mm"):</p> | |
| <pre class="example"> | |
| #include <cups/ppd.h> | |
| <a href="#ppd_file_t">ppd_file_t</a> *ppd; | |
| /* Get an 576x720 point custom page size */ | |
| <a href="#ppd_size_t">ppd_size_t</a> *size = <a href="#ppdPageSize">ppdPageSize</a>(ppd, "Custom.576x720"); | |
| /* Get an 8x10 inch custom page size */ | |
| <a href="#ppd_size_t">ppd_size_t</a> *size = <a href="#ppdPageSize">ppdPageSize</a>(ppd, "Custom.8x10in"); | |
| /* Get a 100x200 millimeter custom page size */ | |
| <a href="#ppd_size_t">ppd_size_t</a> *size = <a href="#ppdPageSize">ppdPageSize</a>(ppd, "Custom.100x200mm"); | |
| /* Get a 12.7x34.5 centimeter custom page size */ | |
| <a href="#ppd_size_t">ppd_size_t</a> *size = <a href="#ppdPageSize">ppdPageSize</a>(ppd, "Custom.12.7x34.5cm"); | |
| </pre> | |
| <p>If the PPD does not support variable page sizes, the | |
| <a href="#ppdPageSize"><code>ppdPageSize</code></a> function will return | |
| <code>NULL</code>.</p> | |
| <h3><a name="ATTRIBUTES">Attributes</a></h3> | |
| <p>Every PPD file is composed of one or more attributes. Most of these | |
| attributes are used to define groups, options, choices, and page sizes, | |
| however several informational attributes may be present which you can access | |
| in your program or filter. Attributes normally look like one of the following | |
| examples in a PPD file:</p> | |
| <pre class="example"> | |
| *name: "value" | |
| *name spec: "value" | |
| *name spec/text: "value" | |
| </pre> | |
| <p>The <a href="#ppdFindAttr"><code>ppdFindAttr</code></a> and | |
| <a href="#ppdFindNextAttr"><code>ppdFindNextAttr</code></a> functions find the | |
| first and next instances, respectively, of the named attribute with the given | |
| "spec" string and return a <a href="#ppd_attr_t"><code>ppd_attr_t</code></a> | |
| structure. If you provide a NULL specifier string, all attributes with the | |
| given name will be returned. For example, the following code lists all of the | |
| <code>Product</code> attributes in a PPD file:</p> | |
| <pre class="example"> | |
| #include <cups/ppd.h> | |
| <a href="#ppd_file_t">ppd_file_t</a> *ppd; | |
| <a href="#ppd_attr_t">ppd_attr_t</a> *attr; | |
| for (attr = <a href="#ppdFindAttr">ppdFindAttr</a>(ppd, "Product", NULL); | |
| attr != NULL; | |
| attr = <a href="#ppdFindNextAttr">ppdFindNextAttr</a>(ppd, "Product", NULL)) | |
| puts(attr->value); | |
| </pre> | |
| <h2 class="title"><a id="FUNCTIONS">Functions</a></h2> | |
| <h3 class="function"><span class="info"> CUPS 1.4/macOS 10.6 </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(<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> | |
| <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> | |
| <h4 class="discussion">Discussion</h4> | |
| <p class="discussion">This function gets a list of options that would conflict if "option" and | |
| "choice" were marked in the PPD. You would typically call this function | |
| after marking the currently selected options in the PPD in order to | |
| determine whether a new option selection would cause a conflict.<br> | |
| <br> | |
| The number of conflicting options are returned with "options" pointing to | |
| the conflicting options. The returned option array must be freed using | |
| <a href="#cupsFreeOptions"><code>cupsFreeOptions</code></a>. | |
| </p> | |
| <h3 class="function"><a 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(const char *name);</p> | |
| <h4 class="parameters">Parameters</h4> | |
| <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> | |
| <h4 class="discussion">Discussion</h4> | |
| <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 "owns" the | |
| file that is created and must <code>unlink</code> the returned filename.</p> | |
| <h3 class="function"><span class="info"> CUPS 1.1.21/macOS 10.4 </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(http_t *http, const char *name);</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</td></tr> | |
| </tbody></table> | |
| <h4 class="returnvalue">Return Value</h4> | |
| <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 | |
| in the class.<br> | |
| <br> | |
| The returned filename is stored in a static buffer and is overwritten with | |
| each call to <a href="#cupsGetPPD"><code>cupsGetPPD</code></a> or <code>cupsGetPPD2</code>. The caller "owns" the | |
| file that is created and must <code>unlink</code> the returned filename. | |
| </p> | |
| <h3 class="function"><span class="info"> CUPS 1.4/macOS 10.6 </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(http_t *http, const char *name, time_t *modtime, char *buffer, size_t bufsize);</p> | |
| <h4 class="parameters">Parameters</h4> | |
| <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> | |
| <h4 class="discussion">Discussion</h4> | |
| <p class="discussion">The "modtime" 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> | |
| The "buffer" parameter contains the local PPD filename. If it contains | |
| the empty string, a new temporary file is created, otherwise the existing | |
| file will be overwritten as needed. The caller "owns" the file that is | |
| created and must <code>unlink</code> the returned filename.<br> | |
| <br> | |
| On success, <code>HTTP_STATUS_OK</code> is returned for a new PPD file and | |
| <code>HTTP_STATUS_NOT_MODIFIED</code> if the existing PPD file is up-to-date. Any other | |
| status is an error.<br> | |
| <br> | |
| For classes, <code>cupsGetPPD3</code> returns the PPD file for the first printer | |
| in the class. | |
| </p> | |
| <h3 class="function"><span class="info"> CUPS 1.3/macOS 10.5 </span><a id="cupsGetServerPPD">cupsGetServerPPD</a></h3> | |
| <p class="description">Get an available PPD file from the server.</p> | |
| <p class="code"> | |
| char *cupsGetServerPPD(http_t *http, const char *name);</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">Name of PPD file ("ppd-name")</td></tr> | |
| </tbody></table> | |
| <h4 class="returnvalue">Return Value</h4> | |
| <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 | |
| list of available PPDs is provided by the IPP <code>CUPS_GET_PPDS</code> | |
| operation.<br> | |
| <br> | |
| You must remove (unlink) the PPD file when you are finished with | |
| it. The PPD filename is stored in a static location that will be | |
| overwritten on the next call to <a href="#cupsGetPPD"><code>cupsGetPPD</code></a>, <a href="#cupsGetPPD2"><code>cupsGetPPD2</code></a>, | |
| or <a href="#cupsGetServerPPD"><code>cupsGetServerPPD</code></a>. | |
| </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(<a href="#ppd_file_t">ppd_file_t</a> *ppd, int num_options, cups_option_t *options);</p> | |
| <h4 class="parameters">Parameters</h4> | |
| <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> | |
| <h4 class="discussion">Discussion</h4> | |
| <p class="discussion">This function maps the IPP "finishings", "media", "mirror", | |
| "multiple-document-handling", "output-bin", "print-color-mode", | |
| "print-quality", "printer-resolution", and "sides" attributes to their | |
| corresponding PPD options and choices.</p> | |
| <h3 class="function"><span class="info"> CUPS 1.2/macOS 10.5 </span><a id="cupsRasterInterpretPPD">cupsRasterInterpretPPD</a></h3> | |
| <p class="description">Interpret PPD commands to create a page header.</p> | |
| <p class="code"> | |
| int cupsRasterInterpretPPD(cups_page_header2_t *h, <a href="#ppd_file_t">ppd_file_t</a> *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> | |
| <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> | |
| <h4 class="discussion">Discussion</h4> | |
| <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> | |
| <br> | |
| <code>cupsRasterInterpretPPD</code> does not mark the options in the PPD using | |
| the "num_options" and "options" arguments. Instead, mark the options with | |
| <code>cupsMarkOptions</code> and <code>ppdMarkOption</code> prior to calling it - | |
| this allows for per-page options without manipulating the options array.<br> | |
| <br> | |
| The "func" argument specifies an optional callback function that is | |
| called prior to the computation of the final raster data. The function | |
| can make changes to the <a href="#cups_page_header2_t"><code>cups_page_header2_t</code></a> data as needed to use a | |
| supported raster format and then returns 0 on success and -1 if the | |
| requested attributes cannot be supported.<br> | |
| <br> | |
| <code>cupsRasterInterpretPPD</code> supports a subset of the PostScript language. | |
| Currently only the <code>[</code>, <code>]</code>, <code><<</code>, <code>>></code>, <code>{</code>, | |
| <code>}</code>, <code>cleartomark</code>, <code>copy</code>, <code>dup</code>, <code>index</code>, | |
| <code>pop</code>, <code>roll</code>, <code>setpagedevice</code>, and <code>stopped</code> operators | |
| are supported. | |
| </p> | |
| <h3 class="function"><span class="info"> CUPS 1.4/macOS 10.6 </span><a id="cupsResolveConflicts">cupsResolveConflicts</a></h3> | |
| <p class="description">Resolve conflicts in a marked PPD.</p> | |
| <p class="code"> | |
| 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> | |
| <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> | |
| <h4 class="discussion">Discussion</h4> | |
| <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, | |
| "num_options" and "options" contain any pending option changes that have | |
| not yet been marked, while "option" and "choice" contain the most recent | |
| selection which may or may not be in "num_options" or "options".<br> | |
| <br> | |
| On successful return, "num_options" and "options" are updated to contain | |
| "option" and "choice" along with any changes required to resolve conflicts | |
| specified in the PPD file and 1 is returned.<br> | |
| <br> | |
| If option conflicts cannot be resolved, "num_options" and "options" are not | |
| changed and 0 is returned.<br> | |
| <br> | |
| When resolving conflicts, <code>cupsResolveConflicts</code> does not consider | |
| changes to the current page size (<code>media</code>, <code>PageSize</code>, and | |
| <code>PageRegion</code>) or to the most recent option specified in "option". | |
| Thus, if the only way to resolve a conflict is to change the page size | |
| or the option the user most recently changed, <code>cupsResolveConflicts</code> | |
| will return 0 to indicate it was unable to resolve the conflicts.<br> | |
| <br> | |
| The <code>cupsResolveConflicts</code> function uses one of two sources of option | |
| constraint information. The preferred constraint information is defined by | |
| <code>cupsUIConstraints</code> and <code>cupsUIResolver</code> attributes - in this | |
| case, the PPD file provides constraint resolution actions.<br> | |
| <br> | |
| The backup constraint information is defined by the | |
| <code>UIConstraints</code> and <code>NonUIConstraints</code> attributes. These | |
| constraints are resolved algorithmically by first selecting the default | |
| choice for the conflicting option, then iterating over all possible choices | |
| until a non-conflicting option choice is found. | |
| </p> | |
| <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(<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> | |
| <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> | |
| <h4 class="discussion">Discussion</h4> | |
| <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"> CUPS 1.2/macOS 10.5 </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(<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> | |
| <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> | |
| <h4 class="discussion">Discussion</h4> | |
| <p class="discussion">The choices array should be freed using <code>free</code> when you are | |
| finished with it. | |
| </p> | |
| <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(<a href="#ppd_file_t">ppd_file_t</a> *ppd);</p> | |
| <h4 class="parameters">Parameters</h4> | |
| <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> | |
| <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 id="ppdEmit">ppdEmit</a></h3> | |
| <p class="description">Emit code for marked options to a file.</p> | |
| <p class="code"> | |
| 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> | |
| <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"> CUPS 1.2/macOS 10.5 </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(<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> | |
| <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> | |
| <h4 class="discussion">Discussion</h4> | |
| <p class="discussion">When "limit" is non-zero, this function only emits options whose | |
| OrderDependency value is greater than or equal to "min_order".<br> | |
| <br> | |
| When "limit" is zero, this function is identical to ppdEmit(). | |
| </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(<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> | |
| <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 id="ppdEmitJCL">ppdEmitJCL</a></h3> | |
| <p class="description">Emit code for JCL options to a file.</p> | |
| <p class="code"> | |
| 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> | |
| <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"> CUPS 1.2/macOS 10.5 </span><a id="ppdEmitJCLEnd">ppdEmitJCLEnd</a></h3> | |
| <p class="description">Emit JCLEnd code to a file.</p> | |
| <p class="code"> | |
| int ppdEmitJCLEnd(<a href="#ppd_file_t">ppd_file_t</a> *ppd, FILE *fp);</p> | |
| <h4 class="parameters">Parameters</h4> | |
| <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"> CUPS 1.2/macOS 10.5 </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(<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> | |
| <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> | |
| <h4 class="discussion">Discussion</h4> | |
| <p class="discussion">When "min_order" is greater than zero, this function only includes options | |
| whose OrderDependency value is greater than or equal to "min_order". | |
| Otherwise, all options in the specified section are included in the | |
| returned string.<br> | |
| <br> | |
| 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"> CUPS 1.1.19/macOS 10.3 </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(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *name, const char *spec);</p> | |
| <h4 class="parameters">Parameters</h4> | |
| <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 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(<a href="#ppd_option_t">ppd_option_t</a> *o, const char *choice);</p> | |
| <h4 class="parameters">Parameters</h4> | |
| <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"> CUPS 1.2/macOS 10.5 </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(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *keyword);</p> | |
| <h4 class="parameters">Parameters</h4> | |
| <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"> CUPS 1.2/macOS 10.5 </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(<a href="#ppd_coption_t">ppd_coption_t</a> *opt, const char *name);</p> | |
| <h4 class="parameters">Parameters</h4> | |
| <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 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(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *option);</p> | |
| <h4 class="parameters">Parameters</h4> | |
| <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"> CUPS 1.1.19/macOS 10.3 </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(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *name, const char *spec);</p> | |
| <h4 class="parameters">Parameters</h4> | |
| <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 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(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *option);</p> | |
| <h4 class="parameters">Parameters</h4> | |
| <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"> CUPS 1.2/macOS 10.5 </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(<a href="#ppd_coption_t">ppd_coption_t</a> *opt);</p> | |
| <h4 class="parameters">Parameters</h4> | |
| <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"> CUPS 1.2/macOS 10.5 </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(<a href="#ppd_file_t">ppd_file_t</a> *ppd);</p> | |
| <h4 class="parameters">Parameters</h4> | |
| <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> | |
| <h4 class="discussion">Discussion</h4> | |
| <p class="discussion">Options are returned from all groups in ascending alphanumeric order. | |
| </p> | |
| <h3 class="function"><span class="info"> CUPS 1.4/macOS 10.6 </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(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *option, const char *choice);</p> | |
| <h4 class="parameters">Parameters</h4> | |
| <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> | |
| <h4 class="discussion">Discussion</h4> | |
| <p class="discussion">This function tests whether a particular option choice is available based | |
| on constraints against options in the "InstallableOptions" group. | |
| </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(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *option, const char *choice);</p> | |
| <h4 class="parameters">Parameters</h4> | |
| <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"> CUPS 1.2/macOS 10.5 </span><a id="ppdLocalize">ppdLocalize</a></h3> | |
| <p class="description">Localize the PPD file to the current locale.</p> | |
| <p class="code"> | |
| int ppdLocalize(<a href="#ppd_file_t">ppd_file_t</a> *ppd);</p> | |
| <h4 class="parameters">Parameters</h4> | |
| <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> | |
| <h4 class="discussion">Discussion</h4> | |
| <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 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(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *keyword, const char *spec);</p> | |
| <h4 class="parameters">Parameters</h4> | |
| <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> | |
| <h4 class="discussion">Discussion</h4> | |
| <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"> CUPS 1.3/macOS 10.5 </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(<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> | |
| <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> | |
| <h4 class="discussion">Discussion</h4> | |
| <p class="discussion">This function uses the current locale to find the corresponding reason | |
| text or URI from the attribute value. If "scheme" is NULL or "text", | |
| the returned value contains human-readable (UTF-8) text from the translation | |
| string or attribute value. Otherwise the corresponding URI is returned.<br> | |
| <br> | |
| If no value of the requested scheme can be found, NULL is returned. | |
| </p> | |
| <h3 class="function"><span class="info"> CUPS 1.4/macOS 10.6 </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(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *name);</p> | |
| <h4 class="parameters">Parameters</h4> | |
| <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> | |
| <h4 class="discussion">Discussion</h4> | |
| <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 id="ppdMarkDefaults">ppdMarkDefaults</a></h3> | |
| <p class="description">Mark all default options in the PPD file.</p> | |
| <p class="code"> | |
| void ppdMarkDefaults(<a href="#ppd_file_t">ppd_file_t</a> *ppd);</p> | |
| <h4 class="parameters">Parameters</h4> | |
| <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(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *option, const char *choice);</p> | |
| <h4 class="parameters">Parameters</h4> | |
| <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"> CUPS 1.2/macOS 10.5 </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(<a href="#ppd_coption_t">ppd_coption_t</a> *opt);</p> | |
| <h4 class="parameters">Parameters</h4> | |
| <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"> CUPS 1.2/macOS 10.5 </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(<a href="#ppd_file_t">ppd_file_t</a> *ppd);</p> | |
| <h4 class="parameters">Parameters</h4> | |
| <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> | |
| <h4 class="discussion">Discussion</h4> | |
| <p class="discussion">Options are returned from all groups in ascending alphanumeric order. | |
| </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(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *name);</p> | |
| <h4 class="parameters">Parameters</h4> | |
| <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 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(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *name);</p> | |
| <h4 class="parameters">Parameters</h4> | |
| <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"> CUPS 1.4/macOS 10.6 </span><a id="ppdPageSizeLimits">ppdPageSizeLimits</a></h3> | |
| <p class="description">Return the custom page size limits.</p> | |
| <p class="code"> | |
| 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> | |
| <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> | |
| <h4 class="discussion">Discussion</h4> | |
| <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 | |
| "minimum" and "maximum" are filled with zeroes. | |
| </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(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *name);</p> | |
| <h4 class="parameters">Parameters</h4> | |
| <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 id="TYPES">Data Types</a></h2> | |
| <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)(cups_page_header2_t *header, int preferred_bits); | |
| </p> | |
| <h3 class="typedef"><a id="ppd_attr_t"><span class="info"> DEPRECATED </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 id="ppd_choice_t"><span class="info"> DEPRECATED </span>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"><a id="ppd_conform_t"><span class="info"> DEPRECATED </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 id="ppd_const_t"><span class="info"> DEPRECATED </span>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"><a id="ppd_coption_t"><span class="info"> DEPRECATED </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"><a id="ppd_cparam_t"><span class="info"> DEPRECATED </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"><a id="ppd_cplimit_t"><span class="info"> DEPRECATED </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"><a id="ppd_cptype_t"><span class="info"> DEPRECATED </span>ppd_cptype_t</a></h3> | |
| <p class="description">Custom Parameter Type </p> | |
| <p class="code"> | |
| typedef enum <a href="#ppd_cptype_e">ppd_cptype_e</a> ppd_cptype_t; | |
| </p> | |
| <h3 class="typedef"><a id="ppd_cpvalue_t"><span class="info"> DEPRECATED </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 id="ppd_cs_t"><span class="info"> DEPRECATED </span>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 id="ppd_emul_t"><span class="info"> DEPRECATED </span>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 id="ppd_file_t"><span class="info"> DEPRECATED </span>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 id="ppd_group_t"><span class="info"> DEPRECATED </span>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 id="ppd_option_t"><span class="info"> DEPRECATED </span>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 id="ppd_profile_t"><span class="info"> DEPRECATED </span>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 id="ppd_section_t"><span class="info"> DEPRECATED </span>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 id="ppd_size_t"><span class="info"> DEPRECATED </span>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"><a id="ppd_status_t"><span class="info"> DEPRECATED </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 id="ppd_ui_t"><span class="info"> DEPRECATED </span>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 id="STRUCTURES">Structures</a></h2> | |
| <h3 class="struct"><span class="info"> DEPRECATED </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> | |
|     char name[PPD_MAX_NAME];<br> | |
|     char spec[PPD_MAX_NAME];<br> | |
|     char text[PPD_MAX_TEXT];<br> | |
|     char *value;<br> | |
| };</p> | |
| <h4 class="members">Members</h4> | |
| <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"><span class="info"> DEPRECATED </span><a id="ppd_choice_s">ppd_choice_s</a></h3> | |
| <p class="description">Option choices </p> | |
| <p class="code">struct ppd_choice_s {<br> | |
|     char choice[PPD_MAX_NAME];<br> | |
|     char *code;<br> | |
|     char marked;<br> | |
|     <a href="#ppd_option_t">ppd_option_t</a> *option;<br> | |
|     char text[PPD_MAX_TEXT];<br> | |
| };</p> | |
| <h4 class="members">Members</h4> | |
| <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"><span class="info"> DEPRECATED </span><a id="ppd_const_s">ppd_const_s</a></h3> | |
| <p class="description">Constraints </p> | |
| <p class="code">struct ppd_const_s {<br> | |
|     char choice1[PPD_MAX_NAME];<br> | |
|     char choice2[PPD_MAX_NAME];<br> | |
|     char option1[PPD_MAX_NAME];<br> | |
|     char option2[PPD_MAX_NAME];<br> | |
| };</p> | |
| <h4 class="members">Members</h4> | |
| <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"> DEPRECATED </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> | |
|     char keyword[PPD_MAX_NAME];<br> | |
|     int marked;<br> | |
|     <a href="#ppd_option_t">ppd_option_t</a> *option;<br> | |
|     cups_array_t *params;<br> | |
| };</p> | |
| <h4 class="members">Members</h4> | |
| <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"> DEPRECATED </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> | |
|     <a href="#ppd_cpvalue_t">ppd_cpvalue_t</a> current;<br> | |
|     <a href="#ppd_cplimit_t">ppd_cplimit_t</a> minimum, maximum;<br> | |
|     char name[PPD_MAX_NAME];<br> | |
|     int order;<br> | |
|     char text[PPD_MAX_TEXT];<br> | |
|     <a href="#ppd_cptype_t">ppd_cptype_t</a> type;<br> | |
| };</p> | |
| <h4 class="members">Members</h4> | |
| <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"><span class="info"> DEPRECATED </span><a id="ppd_emul_s">ppd_emul_s</a></h3> | |
| <p class="description">Emulators </p> | |
| <p class="code">struct ppd_emul_s {<br> | |
|     char name[PPD_MAX_NAME];<br> | |
|     char *start;<br> | |
|     char *stop;<br> | |
| };</p> | |
| <h4 class="members">Members</h4> | |
| <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"><span class="info"> DEPRECATED </span><a id="ppd_file_s">ppd_file_s</a></h3> | |
| <p class="description">PPD File </p> | |
| <p class="code">struct ppd_file_s {<br> | |
|     int accurate_screens;<br> | |
|     int color_device;<br> | |
|     <a href="#ppd_cs_t">ppd_cs_t</a> colorspace;<br> | |
|     <a href="#ppd_const_t">ppd_const_t</a> *consts;<br> | |
|     int contone_only;<br> | |
|     float custom_margins[4];<br> | |
|     float custom_max[2];<br> | |
|     float custom_min[2];<br> | |
|     char **filters;<br> | |
|     int flip_duplex;<br> | |
|     char **fonts;<br> | |
|     <a href="#ppd_group_t">ppd_group_t</a> *groups;<br> | |
|     char *jcl_begin;<br> | |
|     char *jcl_end;<br> | |
|     char *jcl_ps;<br> | |
|     int landscape;<br> | |
|     char *lang_encoding;<br> | |
|     char *lang_version;<br> | |
|     int language_level;<br> | |
|     int manual_copies;<br> | |
|     char *manufacturer;<br> | |
|     int model_number;<br> | |
|     char *modelname;<br> | |
|     char *nickname;<br> | |
|     int num_consts;<br> | |
|     int num_filters;<br> | |
|     int num_fonts;<br> | |
|     int num_groups;<br> | |
|     int num_profiles;<br> | |
|     int num_sizes;<br> | |
|     char *patches;<br> | |
|     char *pcfilename;<br> | |
|     char *product;<br> | |
|     <a href="#ppd_profile_t">ppd_profile_t</a> *profiles;<br> | |
|     char *protocols;<br> | |
|     char *shortnickname;<br> | |
|     <a href="#ppd_size_t">ppd_size_t</a> *sizes;<br> | |
|     int throughput;<br> | |
|     char *ttrasterizer;<br> | |
|     int variable_sizes;<br> | |
| };</p> | |
| <h4 class="members">Members</h4> | |
| <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>filters </th> | |
| <td class="description">Filter strings...</td></tr> | |
| <tr><th>flip_duplex <span class="info"> DEPRECATED </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_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"> DEPRECATED </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"> CUPS 1.1.19/macOS 10.3 </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"> DEPRECATED </span></th> | |
| <td class="description">sRGB color profiles </td></tr> | |
| <tr><th>protocols <span class="info"> CUPS 1.1.19/macOS 10.3 </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"><span class="info"> DEPRECATED </span><a id="ppd_group_s">ppd_group_s</a></h3> | |
| <p class="description">Groups </p> | |
| <p class="code">struct ppd_group_s {<br> | |
|     char text[PPD_MAX_TEXT - PPD_MAX_NAME];<br> | |
|     char name[PPD_MAX_NAME];<br> | |
|     int num_options;<br> | |
|     int num_subgroups;<br> | |
|     <a href="#ppd_option_t">ppd_option_t</a> *options;<br> | |
|     struct <a href="#ppd_group_s">ppd_group_s</a> *subgroups;<br> | |
| };</p> | |
| <h4 class="members">Members</h4> | |
| <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"> CUPS 1.1.18/macOS 10.3 </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"><span class="info"> DEPRECATED </span><a id="ppd_option_s">ppd_option_s</a></h3> | |
| <p class="description">Options </p> | |
| <p class="code">struct ppd_option_s {<br> | |
|     <a href="#ppd_choice_t">ppd_choice_t</a> *choices;<br> | |
|     char conflicted;<br> | |
|     char defchoice[PPD_MAX_NAME];<br> | |
|     char keyword[PPD_MAX_NAME];<br> | |
|     int num_choices;<br> | |
|     float order;<br> | |
|     <a href="#ppd_section_t">ppd_section_t</a> section;<br> | |
|     char text[PPD_MAX_TEXT];<br> | |
|     <a href="#ppd_ui_t">ppd_ui_t</a> ui;<br> | |
| };</p> | |
| <h4 class="members">Members</h4> | |
| <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 ("PageSize", 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"><span class="info"> DEPRECATED </span><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> | |
|     float density;<br> | |
|     float gamma;<br> | |
|     float matrix[3][3];<br> | |
|     char media_type[PPD_MAX_NAME];<br> | |
|     char resolution[PPD_MAX_NAME];<br> | |
| };</p> | |
| <h4 class="members">Members</h4> | |
| <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 "-"</td></tr> | |
| <tr><th>resolution[PPD_MAX_NAME] </th> | |
| <td class="description">Resolution or "-"</td></tr> | |
| </tbody></table> | |
| <h3 class="struct"><span class="info"> DEPRECATED </span><a id="ppd_size_s">ppd_size_s</a></h3> | |
| <p class="description">Page Sizes </p> | |
| <p class="code">struct ppd_size_s {<br> | |
|     float bottom;<br> | |
|     float left;<br> | |
|     float length;<br> | |
|     int marked;<br> | |
|     char name[PPD_MAX_NAME];<br> | |
|     float right;<br> | |
|     float top;<br> | |
|     float width;<br> | |
| };</p> | |
| <h4 class="members">Members</h4> | |
| <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"> DEPRECATED </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> | |
|     float custom_curve;<br> | |
|     int custom_int;<br> | |
|     float custom_invcurve;<br> | |
|     int custom_passcode;<br> | |
|     int custom_password;<br> | |
|     float custom_points;<br> | |
|     float custom_real;<br> | |
|     int custom_string;<br> | |
| };</p> | |
| <h4 class="members">Members</h4> | |
| <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"> DEPRECATED </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> | |
|     float custom_curve;<br> | |
|     int custom_int;<br> | |
|     float custom_invcurve;<br> | |
|     char *custom_passcode;<br> | |
|     char *custom_password;<br> | |
|     float custom_points;<br> | |
|     float custom_real;<br> | |
|     char *custom_string;<br> | |
| };</p> | |
| <h4 class="members">Members</h4> | |
| <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"> DEPRECATED </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_cptype_e"><span class="info"> DEPRECATED </span>ppd_cptype_e</a></h3> | |
| <p class="description">Custom Parameter Type </p> | |
| <h4 class="constants">Constants</h4> | |
| <table class="list"><tbody> | |
| <tr><th>PPD_CUSTOM_CURVE </th> <td class="description">Curve value for f(x) = x^value</td></tr> | |
| <tr><th>PPD_CUSTOM_INT </th> <td class="description">Integer number value</td></tr> | |
| <tr><th>PPD_CUSTOM_INVCURVE </th> <td class="description">Curve value for f(x) = x^(1/value)</td></tr> | |
| <tr><th>PPD_CUSTOM_PASSCODE </th> <td class="description">String of (hidden) numbers</td></tr> | |
| <tr><th>PPD_CUSTOM_PASSWORD </th> <td class="description">String of (hidden) characters</td></tr> | |
| <tr><th>PPD_CUSTOM_POINTS </th> <td class="description">Measurement value in points</td></tr> | |
| <tr><th>PPD_CUSTOM_REAL </th> <td class="description">Real number value</td></tr> | |
| <tr><th>PPD_CUSTOM_STRING </th> <td class="description">String of characters</td></tr> | |
| <tr><th>PPD_CUSTOM_UNKNOWN </th> <td class="description">Unknown type (error)</td></tr> | |
| </tbody></table> | |
| <h3 class="enumeration"><a id="ppd_cs_e"><span class="info"> DEPRECATED </span>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"><span class="info"> DEPRECATED </span>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"> DEPRECATED </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_CLOSE_UI </th> <td class="description">Bad CloseUI/JCLCloseUI</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_CLOSE_UI </th> <td class="description">Missing CloseUI/JCLCloseUI</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"><span class="info"> DEPRECATED </span>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> |