]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - doc/help/api-ppd.html
Update default PAM service (cups instead of other)
[thirdparty/cups.git] / doc / help / api-ppd.html
index c287479e55469443e38c609e1a08fa74c027cd0e..fce4da3f7d107258f2aedd46f7dfd847118c4663 100644 (file)
@@ -1,11 +1,11 @@
-<!doctype 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="Mini-XML v2.11">
+    <meta name="creator" content="codedoc v3.1">
     <meta name="author" content="Unknown">
     <meta name="copyright" content="Unknown">
     <meta name="version" content="0.0">
@@ -18,6 +18,11 @@ 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;
@@ -360,14 +365,13 @@ h1, h2, h3, h4, h5, h6 {
 blockquote {
   border: solid thin gray;
   box-shadow: 3px 3px 5px rgba(0,0,0,0.5);
-  padding: 0px 10px;
+  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;
-  font-size: 90%;
   hyphens: manual;
   -webkit-hyphens: manual;
   page-break-inside: avoid;
@@ -390,12 +394,19 @@ span.info {
   font-weight: bold;
   white-space: nowrap;
 }
-h3 span.info, h4 span.info {
-  border-top-left-radius: 10px;
-  border-top-right-radius: 10px;
+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;
@@ -442,7 +453,7 @@ h3.title {
 <!--
   PPD API header for CUPS.
 
-  Copyright © 2008-2012 by Apple Inc.
+  Copyright © 2008-2019 by Apple Inc.
 
   Licensed under Apache License v2.0.  See the file "LICENSE" for more
   information.
@@ -450,7 +461,10 @@ h3.title {
 
 <h1 class='title'>PPD API (DEPRECATED)</h1>
 
-<blockquote>The PPD API is deprecated starting in CUPS 1.6/macOS 10.8. Please use the new Job Ticket APIs in the <a href="api-cups.html">CUPS API</a> documentation. These functions will be removed in a future release of CUPS.</blockquote>
+<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>
@@ -467,7 +481,7 @@ h3.title {
 <tr>
        <th>See Also</th>
        <td>Programming: <a href='api-overview.html' target='_top'>Introduction to CUPS Programming</a><br>
-       Programming: <a href='api-cups.html' target='_top'>CUPS API</a><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>
@@ -489,6 +503,7 @@ h3.title {
           <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>
@@ -524,6 +539,7 @@ h3.title {
           <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>
@@ -563,6 +579,7 @@ h3.title {
         </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>
@@ -574,7 +591,7 @@ h3.title {
 <!--
   PPD API introduction for CUPS.
 
-  Copyright © 2007-2012 by Apple Inc.
+  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
@@ -583,7 +600,10 @@ h3.title {
 
 <h2 class='title'><a name='OVERVIEW'>Overview</a></h2>
 
-<blockquote>The PPD API is deprecated starting in CUPS 1.6/macOS 10.8. Please use the new Job Ticket APIs in the <a href="api-cups.html">CUPS API</a> documentation. These functions will be removed in a future release of CUPS.</blockquote>
+<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
@@ -601,6 +621,7 @@ 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
@@ -688,6 +709,7 @@ int num_options = cupsParseOptions(argv[5], 0, &amp;options);
 cupsFreeOptions(num_options, options);
 </pre>
 
+
 <h3><a name="CONSTRAINTS">Constraints</a></h3>
 
 <p>PPD files support specification of conflict conditions, called
@@ -698,6 +720,7 @@ the options and choices that conflict with each other. The
 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
@@ -752,6 +775,7 @@ in points. Custom page size names can also be specified in inches
 <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
@@ -936,6 +960,51 @@ int cupsMarkOptions(<a href="#ppd_file_t">ppd_file_t</a> *ppd, int num_options,
 &quot;multiple-document-handling&quot;, &quot;output-bin&quot;, &quot;print-color-mode&quot;,
 &quot;print-quality&quot;, &quot;printer-resolution&quot;, and &quot;sides&quot; attributes to their
 corresponding PPD options and choices.</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="cupsRasterInterpretPPD">cupsRasterInterpretPPD</a></h3>
+        <p class="description">Interpret PPD commands to create a page header.</p>
+<p class="code">
+int cupsRasterInterpretPPD(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 &quot;num_options&quot; and &quot;options&quot; 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 &quot;func&quot; 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>&lt;&lt;</code>, <code>&gt;&gt;</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">&#160;CUPS 1.4/macOS 10.6&#160;</span><a id="cupsResolveConflicts">cupsResolveConflicts</a></h3>
         <p class="description">Resolve conflicts in a marked PPD.</p>
 <p class="code">
@@ -1513,103 +1582,108 @@ float ppdPageWidth(<a href="#ppd_file_t">ppd_file_t</a> *ppd, const char *name);
 <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="ppd_attr_t"><span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span>ppd_attr_t</a></h3>
+      <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">&#160;DEPRECATED&#160;</span>ppd_attr_t</a></h3>
         <p class="description">PPD Attribute Structure </p>
       <p class="code">
 typedef struct <a href="#ppd_attr_s">ppd_attr_s</a> ppd_attr_t;
 </p>
-      <h3 class="typedef"><a id="ppd_choice_t">ppd_choice_t</a></h3>
-        <p class="description">Option choices</p>
+      <h3 class="typedef"><a id="ppd_choice_t"><span class="info">&#160;DEPRECATED&#160;</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">&#160;CUPS 1.1.19/macOS 10.3&#160;</span>ppd_conform_t</a></h3>
+      <h3 class="typedef"><a id="ppd_conform_t"><span class="info">&#160;DEPRECATED&#160;</span>ppd_conform_t</a></h3>
         <p class="description">Conformance Levels </p>
       <p class="code">
 typedef enum <a href="#ppd_conform_e">ppd_conform_e</a> ppd_conform_t;
 </p>
-      <h3 class="typedef"><a id="ppd_const_t">ppd_const_t</a></h3>
-        <p class="description">Constraints</p>
+      <h3 class="typedef"><a id="ppd_const_t"><span class="info">&#160;DEPRECATED&#160;</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">&#160;CUPS 1.2/macOS 10.5&#160;</span>ppd_coption_t</a></h3>
+      <h3 class="typedef"><a id="ppd_coption_t"><span class="info">&#160;DEPRECATED&#160;</span>ppd_coption_t</a></h3>
         <p class="description">Custom Option </p>
       <p class="code">
 typedef struct <a href="#ppd_coption_s">ppd_coption_s</a> ppd_coption_t;
 </p>
-      <h3 class="typedef"><a id="ppd_cparam_t"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span>ppd_cparam_t</a></h3>
+      <h3 class="typedef"><a id="ppd_cparam_t"><span class="info">&#160;DEPRECATED&#160;</span>ppd_cparam_t</a></h3>
         <p class="description">Custom Parameter </p>
       <p class="code">
 typedef struct <a href="#ppd_cparam_s">ppd_cparam_s</a> ppd_cparam_t;
 </p>
-      <h3 class="typedef"><a id="ppd_cplimit_t"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span>ppd_cplimit_t</a></h3>
+      <h3 class="typedef"><a id="ppd_cplimit_t"><span class="info">&#160;DEPRECATED&#160;</span>ppd_cplimit_t</a></h3>
         <p class="description">Custom Parameter Limit </p>
       <p class="code">
 typedef union <a href="#ppd_cplimit_u">ppd_cplimit_u</a> ppd_cplimit_t;
 </p>
-      <h3 class="typedef"><a id="ppd_cptype_t"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span>ppd_cptype_t</a></h3>
+      <h3 class="typedef"><a id="ppd_cptype_t"><span class="info">&#160;DEPRECATED&#160;</span>ppd_cptype_t</a></h3>
         <p class="description">Custom Parameter Type </p>
       <p class="code">
-typedef enum ppd_cptype_e ppd_cptype_t;
+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">&#160;CUPS 1.2/macOS 10.5&#160;</span>ppd_cpvalue_t</a></h3>
+      <h3 class="typedef"><a id="ppd_cpvalue_t"><span class="info">&#160;DEPRECATED&#160;</span>ppd_cpvalue_t</a></h3>
         <p class="description">Custom Parameter Value </p>
       <p class="code">
 typedef union <a href="#ppd_cpvalue_u">ppd_cpvalue_u</a> ppd_cpvalue_t;
 </p>
-      <h3 class="typedef"><a id="ppd_cs_t">ppd_cs_t</a></h3>
-        <p class="description">Colorspaces</p>
+      <h3 class="typedef"><a id="ppd_cs_t"><span class="info">&#160;DEPRECATED&#160;</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">ppd_emul_t</a></h3>
-        <p class="description">Emulators</p>
+      <h3 class="typedef"><a id="ppd_emul_t"><span class="info">&#160;DEPRECATED&#160;</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">ppd_file_t</a></h3>
-        <p class="description">PPD File</p>
+      <h3 class="typedef"><a id="ppd_file_t"><span class="info">&#160;DEPRECATED&#160;</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">ppd_group_t</a></h3>
-        <p class="description">Groups</p>
+      <h3 class="typedef"><a id="ppd_group_t"><span class="info">&#160;DEPRECATED&#160;</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">ppd_option_t</a></h3>
-        <p class="description">Options</p>
+      <h3 class="typedef"><a id="ppd_option_t"><span class="info">&#160;DEPRECATED&#160;</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">ppd_profile_t</a></h3>
-        <p class="description">sRGB Color Profiles</p>
+      <h3 class="typedef"><a id="ppd_profile_t"><span class="info">&#160;DEPRECATED&#160;</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">ppd_section_t</a></h3>
-        <p class="description">Order dependency sections</p>
+      <h3 class="typedef"><a id="ppd_section_t"><span class="info">&#160;DEPRECATED&#160;</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">ppd_size_t</a></h3>
-        <p class="description">Page Sizes</p>
+      <h3 class="typedef"><a id="ppd_size_t"><span class="info">&#160;DEPRECATED&#160;</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">&#160;CUPS 1.1.19/macOS 10.3&#160;</span>ppd_status_t</a></h3>
+      <h3 class="typedef"><a id="ppd_status_t"><span class="info">&#160;DEPRECATED&#160;</span>ppd_status_t</a></h3>
         <p class="description">Status Codes </p>
       <p class="code">
 typedef enum <a href="#ppd_status_e">ppd_status_e</a> ppd_status_t;
 </p>
-      <h3 class="typedef"><a id="ppd_ui_t">ppd_ui_t</a></h3>
-        <p class="description">UI Types</p>
+      <h3 class="typedef"><a id="ppd_ui_t"><span class="info">&#160;DEPRECATED&#160;</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">&#160;CUPS 1.1.19/macOS 10.3&#160;</span><a id="ppd_attr_s">ppd_attr_s</a></h3>
+<h3 class="struct"><span class="info">&#160;DEPRECATED&#160;</span><a id="ppd_attr_s">ppd_attr_s</a></h3>
         <p class="description">PPD Attribute Structure </p>
 <p class="code">struct ppd_attr_s {<br>
 &#160;&#160;&#160;&#160;char name[PPD_MAX_NAME];<br>
@@ -1628,8 +1702,8 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
 <tr><th>value </th>
         <td class="description">Value string</td></tr>
 </tbody></table>
-<h3 class="struct"><a id="ppd_choice_s">ppd_choice_s</a></h3>
-        <p class="description">Option choices</p>
+<h3 class="struct"><span class="info">&#160;DEPRECATED&#160;</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>
 &#160;&#160;&#160;&#160;char choice[PPD_MAX_NAME];<br>
 &#160;&#160;&#160;&#160;char *code;<br>
@@ -1650,8 +1724,8 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
 <tr><th>text[PPD_MAX_TEXT] </th>
         <td class="description">Human-readable option name</td></tr>
 </tbody></table>
-<h3 class="struct"><a id="ppd_const_s">ppd_const_s</a></h3>
-        <p class="description">Constraints</p>
+<h3 class="struct"><span class="info">&#160;DEPRECATED&#160;</span><a id="ppd_const_s">ppd_const_s</a></h3>
+        <p class="description">Constraints </p>
 <p class="code">struct ppd_const_s {<br>
 &#160;&#160;&#160;&#160;char choice1[PPD_MAX_NAME];<br>
 &#160;&#160;&#160;&#160;char choice2[PPD_MAX_NAME];<br>
@@ -1669,7 +1743,7 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
 <tr><th>option2[PPD_MAX_NAME] </th>
         <td class="description">Second keyword</td></tr>
 </tbody></table>
-<h3 class="struct"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ppd_coption_s">ppd_coption_s</a></h3>
+<h3 class="struct"><span class="info">&#160;DEPRECATED&#160;</span><a id="ppd_coption_s">ppd_coption_s</a></h3>
         <p class="description">Custom Option </p>
 <p class="code">struct ppd_coption_s {<br>
 &#160;&#160;&#160;&#160;char keyword[PPD_MAX_NAME];<br>
@@ -1688,7 +1762,7 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
 <tr><th>params </th>
         <td class="description">Parameters</td></tr>
 </tbody></table>
-<h3 class="struct"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ppd_cparam_s">ppd_cparam_s</a></h3>
+<h3 class="struct"><span class="info">&#160;DEPRECATED&#160;</span><a id="ppd_cparam_s">ppd_cparam_s</a></h3>
         <p class="description">Custom Parameter </p>
 <p class="code">struct ppd_cparam_s {<br>
 &#160;&#160;&#160;&#160;<a href="#ppd_cpvalue_t">ppd_cpvalue_t</a> current;<br>
@@ -1713,8 +1787,8 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
 <tr><th>type </th>
         <td class="description">Parameter type</td></tr>
 </tbody></table>
-<h3 class="struct"><a id="ppd_emul_s">ppd_emul_s</a></h3>
-        <p class="description">Emulators</p>
+<h3 class="struct"><span class="info">&#160;DEPRECATED&#160;</span><a id="ppd_emul_s">ppd_emul_s</a></h3>
+        <p class="description">Emulators </p>
 <p class="code">struct ppd_emul_s {<br>
 &#160;&#160;&#160;&#160;char name[PPD_MAX_NAME];<br>
 &#160;&#160;&#160;&#160;char *start;<br>
@@ -1729,8 +1803,8 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
 <tr><th>stop </th>
         <td class="description">Code to stop this emulation</td></tr>
 </tbody></table>
-<h3 class="struct"><a id="ppd_file_s">ppd_file_s</a></h3>
-        <p class="description">PPD File</p>
+<h3 class="struct"><span class="info">&#160;DEPRECATED&#160;</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>
 &#160;&#160;&#160;&#160;int accurate_screens;<br>
 &#160;&#160;&#160;&#160;int color_device;<br>
@@ -1740,7 +1814,6 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
 &#160;&#160;&#160;&#160;float custom_margins[4];<br>
 &#160;&#160;&#160;&#160;float custom_max[2];<br>
 &#160;&#160;&#160;&#160;float custom_min[2];<br>
-&#160;&#160;&#160;&#160;<a href="#ppd_emul_t">ppd_emul_t</a> *emulations;<br>
 &#160;&#160;&#160;&#160;char **filters;<br>
 &#160;&#160;&#160;&#160;int flip_duplex;<br>
 &#160;&#160;&#160;&#160;char **fonts;<br>
@@ -1758,7 +1831,6 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
 &#160;&#160;&#160;&#160;char *modelname;<br>
 &#160;&#160;&#160;&#160;char *nickname;<br>
 &#160;&#160;&#160;&#160;int num_consts;<br>
-&#160;&#160;&#160;&#160;int num_emulations;<br>
 &#160;&#160;&#160;&#160;int num_filters;<br>
 &#160;&#160;&#160;&#160;int num_fonts;<br>
 &#160;&#160;&#160;&#160;int num_groups;<br>
@@ -1793,8 +1865,6 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
         <td class="description">Maximum variable page size</td></tr>
 <tr><th>custom_min[2] </th>
         <td class="description">Minimum variable page size</td></tr>
-<tr><th>emulations </th>
-        <td class="description">Emulations and the code to invoke them</td></tr>
 <tr><th>filters </th>
         <td class="description">Filter strings...</td></tr>
 <tr><th>flip_duplex <span class="info">&#160;DEPRECATED&#160;</span></th>
@@ -1829,8 +1899,6 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
         <td class="description">Nickname (specific)</td></tr>
 <tr><th>num_consts </th>
         <td class="description">Number of UI/Non-UI constraints</td></tr>
-<tr><th>num_emulations </th>
-        <td class="description">Number of emulations supported</td></tr>
 <tr><th>num_filters </th>
         <td class="description">Number of filters</td></tr>
 <tr><th>num_fonts </th>
@@ -1862,8 +1930,8 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
 <tr><th>variable_sizes </th>
         <td class="description">1 = supports variable sizes, 0 = doesn't</td></tr>
 </tbody></table>
-<h3 class="struct"><a id="ppd_group_s">ppd_group_s</a></h3>
-        <p class="description">Groups</p>
+<h3 class="struct"><span class="info">&#160;DEPRECATED&#160;</span><a id="ppd_group_s">ppd_group_s</a></h3>
+        <p class="description">Groups </p>
 <p class="code">struct ppd_group_s {<br>
 &#160;&#160;&#160;&#160;char text[PPD_MAX_TEXT - PPD_MAX_NAME];<br>
 &#160;&#160;&#160;&#160;char name[PPD_MAX_NAME];<br>
@@ -1887,8 +1955,8 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
 <tr><th>subgroups </th>
         <td class="description">Sub-groups (max depth = 1)</td></tr>
 </tbody></table>
-<h3 class="struct"><a id="ppd_option_s">ppd_option_s</a></h3>
-        <p class="description">Options</p>
+<h3 class="struct"><span class="info">&#160;DEPRECATED&#160;</span><a id="ppd_option_s">ppd_option_s</a></h3>
+        <p class="description">Options </p>
 <p class="code">struct ppd_option_s {<br>
 &#160;&#160;&#160;&#160;<a href="#ppd_choice_t">ppd_choice_t</a> *choices;<br>
 &#160;&#160;&#160;&#160;char conflicted;<br>
@@ -1921,8 +1989,8 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
 <tr><th>ui </th>
         <td class="description">Type of UI option</td></tr>
 </tbody></table>
-<h3 class="struct"><a id="ppd_profile_s">ppd_profile_s</a></h3>
-        <p class="description">sRGB Color Profiles</p>
+<h3 class="struct"><span class="info">&#160;DEPRECATED&#160;</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>
 &#160;&#160;&#160;&#160;float density;<br>
 &#160;&#160;&#160;&#160;float gamma;<br>
@@ -1943,8 +2011,8 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
 <tr><th>resolution[PPD_MAX_NAME] </th>
         <td class="description">Resolution or &quot;-&quot;</td></tr>
 </tbody></table>
-<h3 class="struct"><a id="ppd_size_s">ppd_size_s</a></h3>
-        <p class="description">Page Sizes</p>
+<h3 class="struct"><span class="info">&#160;DEPRECATED&#160;</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>
 &#160;&#160;&#160;&#160;float bottom;<br>
 &#160;&#160;&#160;&#160;float left;<br>
@@ -1975,7 +2043,7 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
         <td class="description">Width of media in points</td></tr>
 </tbody></table>
       <h2 class="title"><a id="UNIONS">Unions</a></h2>
-<h3 class="union"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ppd_cplimit_u">ppd_cplimit_u</a></h3>
+<h3 class="union"><span class="info">&#160;DEPRECATED&#160;</span><a id="ppd_cplimit_u">ppd_cplimit_u</a></h3>
         <p class="description">Custom Parameter Limit </p>
 <p class="code">union ppd_cplimit_u {<br>
 &#160;&#160;&#160;&#160;float custom_curve;<br>
@@ -2006,7 +2074,7 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
 <tr><th>custom_string </th>
         <td class="description">String length</td></tr>
 </tbody></table>
-<h3 class="union"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="ppd_cpvalue_u">ppd_cpvalue_u</a></h3>
+<h3 class="union"><span class="info">&#160;DEPRECATED&#160;</span><a id="ppd_cpvalue_u">ppd_cpvalue_u</a></h3>
         <p class="description">Custom Parameter Value </p>
 <p class="code">union ppd_cpvalue_u {<br>
 &#160;&#160;&#160;&#160;float custom_curve;<br>
@@ -2038,15 +2106,29 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
         <td class="description">String value</td></tr>
 </tbody></table>
       <h2 class="title"><a id="ENUMERATIONS">Constants</a></h2>
-      <h3 class="enumeration"><a id="ppd_conform_e"><span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span>ppd_conform_e</a></h3>
+      <h3 class="enumeration"><a id="ppd_conform_e"><span class="info">&#160;DEPRECATED&#160;</span>ppd_conform_e</a></h3>
         <p class="description">Conformance Levels </p>
       <h4 class="constants">Constants</h4>
       <table class="list"><tbody>
         <tr><th>PPD_CONFORM_RELAXED </th>        <td class="description">Relax whitespace and control char</td></tr>
         <tr><th>PPD_CONFORM_STRICT </th>        <td class="description">Require strict conformance</td></tr>
 </tbody></table>
-      <h3 class="enumeration"><a id="ppd_cs_e">ppd_cs_e</a></h3>
-        <p class="description">Colorspaces</p>
+      <h3 class="enumeration"><a id="ppd_cptype_e"><span class="info">&#160;DEPRECATED&#160;</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">&#160;DEPRECATED&#160;</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>
@@ -2056,8 +2138,8 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
         <tr><th>PPD_CS_RGB </th>        <td class="description">RGB colorspace</td></tr>
         <tr><th>PPD_CS_RGBK </th>        <td class="description">RGBK (K = gray) colorspace</td></tr>
 </tbody></table>
-      <h3 class="enumeration"><a id="ppd_section_e">ppd_section_e</a></h3>
-        <p class="description">Order dependency sections</p>
+      <h3 class="enumeration"><a id="ppd_section_e"><span class="info">&#160;DEPRECATED&#160;</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>
@@ -2067,11 +2149,12 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
         <tr><th>PPD_ORDER_PAGE </th>        <td class="description">... must be in the PageSetup section</td></tr>
         <tr><th>PPD_ORDER_PROLOG </th>        <td class="description">... must be in the Prolog section</td></tr>
 </tbody></table>
-      <h3 class="enumeration"><a id="ppd_status_e"><span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span>ppd_status_e</a></h3>
+      <h3 class="enumeration"><a id="ppd_status_e"><span class="info">&#160;DEPRECATED&#160;</span>ppd_status_e</a></h3>
         <p class="description">Status Codes </p>
       <h4 class="constants">Constants</h4>
       <table class="list"><tbody>
         <tr><th>PPD_ALLOC_ERROR </th>        <td class="description">Memory allocation error</td></tr>
+        <tr><th>PPD_BAD_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>
@@ -2088,6 +2171,7 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
         <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>
@@ -2096,8 +2180,8 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
         <tr><th>PPD_NULL_FILE </th>        <td class="description">NULL PPD file pointer</td></tr>
         <tr><th>PPD_OK </th>        <td class="description">OK</td></tr>
 </tbody></table>
-      <h3 class="enumeration"><a id="ppd_ui_e">ppd_ui_e</a></h3>
-        <p class="description">UI Types</p>
+      <h3 class="enumeration"><a id="ppd_ui_e"><span class="info">&#160;DEPRECATED&#160;</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>