2194 lines
		
	
	
		
			92 KiB
		
	
	
	
		
			HTML
		
	
	
	
			
		
		
	
	
			2194 lines
		
	
	
		
			92 KiB
		
	
	
	
		
			HTML
		
	
	
	
| <!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>
 |