]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - doc/help/api-raster.html
Update copyrights and license text on files that were missed.
[thirdparty/cups.git] / doc / help / api-raster.html
index 4ffde1100d0d538311b43117750d681536fd80d2..706cbd56cac38ddf0734d1e6219907b893e607a9 100644 (file)
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<!doctype html>
 <html>
 <!-- SECTION: Programming -->
-<head>
-       <title>Raster API</title>
-       <meta name='keywords' content='Programming'>
-       <meta name='creator' content='Mini-XML v2.3'>
-       <style type='text/css'><!--
-       h1, h2, h3, p { font-family: sans-serif; text-align: justify; }
-       tt, pre a:link, pre a:visited, tt a:link, tt a:visited { font-weight: bold; color: #7f0000; }
-       pre { font-weight: bold; color: #7f0000; margin-left: 2em; }
-       span.info { background: #000000; border: solid thin #000000; color: #ffffff; font-size: 80%; font-style: italic; font-weight: bold; white-space: nowrap; }
-       h3 span.info { float: right; font-size: 100%; }
-       h1.title, h2.title, h3.title { border-bottom: solid 2px #000000; }
-       --></style>
-</head>
-<body>
+  <head>
+    <title>Raster API</title>
+    <meta name="keywords" content="Programming">
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+    <meta name="creator" content="Mini-XML v2.11">
+    <meta name="author" content="Unknown">
+    <meta name="copyright" content="Unknown">
+    <meta name="version" content="0.0">
+    <style type="text/css"><!--
+BODY {
+  font-family: lucida grande, geneva, helvetica, arial, sans-serif;
+}
+
+H1, H2, H3, H4, H5, H6, P, TD, TH {
+  font-family: lucida grande, geneva, helvetica, arial, sans-serif;
+}
+
+KBD {
+  font-family: monaco, courier, monospace;
+  font-weight: bold;
+}
+
+PRE {
+  font-family: monaco, courier, monospace;
+}
+
+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: 0px 10px;
+  page-break-inside: avoid;
+}
+p code, li code, p.code, pre, ul.code li {
+  background: rgba(127,127,127,0.1);
+  border: thin dotted gray;
+  font-family: monospace;
+  font-size: 90%;
+  hyphens: manual;
+  -webkit-hyphens: manual;
+  page-break-inside: avoid;
+}
+p.code, pre, ul.code li {
+  padding: 10px;
+}
+p code, li code {
+  padding: 2px 5px;
+}
+a:link, a:visited {
+  text-decoration: none;
+}
+span.info {
+  background: black;
+  border: solid thin black;
+  color: white;
+  font-size: 80%;
+  font-style: italic;
+  font-weight: bold;
+  white-space: nowrap;
+}
+h3 span.info, h4 span.info {
+  border-top-left-radius: 10px;
+  border-top-right-radius: 10px;
+  float: right;
+  padding: 3px 6px;
+}
+ul.code, ul.contents, ul.subcontents {
+  list-style-type: none;
+  margin: 0;
+  padding-left: 0;
+}
+ul.code li {
+  margin: 0;
+}
+ul.contents > li {
+  margin-top: 1em;
+}
+ul.contents li ul.code, ul.contents li ul.subcontents {
+  padding-left: 2em;
+}
+table.list {
+  border-collapse: collapse;
+  width: 100%;
+}
+table.list tr:nth-child(even) {
+  background: rgba(127,127,127,0.1);]n}
+table.list th {
+  border-right: 2px solid gray;
+  font-family: monospace;
+  padding: 5px 10px 5px 2px;
+  text-align: right;
+  vertical-align: top;
+}
+table.list td {
+  padding: 5px 2px 5px 10px;
+  text-align: left;
+  vertical-align: top;
+}
+h1.title {
+}
+h2.title {
+  border-bottom: solid 2px black;
+}
+h3.title {
+  border-bottom: solid 2px black;
+}
+--></style>
+  </head>
+  <body>
 <!--
-  "$Id$"
+  Raster API documentation for CUPS.
+
+  Copyright © 2008-2010 by Apple Inc.
 
-  Raster API introduction for the Common UNIX Printing System (CUPS).
+  Licensed under Apache License v2.0.  See the file "LICENSE" for more
+  information.
+-->
 
-  Copyright 1997-2006 by Easy Software Products.
+<h1 class='title'>Raster API</h1>
 
-  These coded instructions, statements, and computer programs are the
-  property of Easy Software Products and are protected by Federal
-  copyright law.  Distribution and use rights are outlined in the file
-  "LICENSE.txt" which should have been included with this file.  If this
-  file is missing or damaged please contact Easy Software Products
-  at:
+<div class='summary'><table summary='General Information'>
+<thead>
+<tr>
+       <th>Header</th>
+       <th>cups/raster.h</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+       <th>Library</th>
+       <td>-lcupsimage</td>
+</tr>
+<tr>
+       <th>See Also</th>
+       <td>Programming: <a href='api-overview.html'>Introduction to CUPS Programming</a><br>
+       Programming: <a href='api-cups.html'>CUPS API</a><br>
+       Programming: <a href='api-cups.html'>PPD API</a><br>
+       References: <a href='spec-ppd.html'>CUPS PPD Specification</a></td>
+</tr>
+</tbody>
+</table></div>
+    <div class="contents">
+      <h2 class="title">Contents</h2>
+      <ul class="contents">
+        <li><a href="#OVERVIEW">Overview</a></li>
+        <li><a href="#TASKS">Functions by Task</a><ul class="subcontents">
+          <li><a href="#OPENCLOSE">Opening and Closing Raster Streams</a></li>
+          <li><a href="#READING">Reading Raster Streams</a></li>
+          <li><a href="#WRITING">Writing Raster Streams</a></li>
+        </ul></li>
+        <li><a href="#FUNCTIONS">Functions</a><ul class="subcontents">
+          <li><a href="#cupsRasterClose">cupsRasterClose</a></li>
+          <li><a href="#cupsRasterInitPWGHeader">cupsRasterInitPWGHeader</a></li>
+          <li><a href="#cupsRasterInterpretPPD">cupsRasterInterpretPPD</a></li>
+          <li><a href="#cupsRasterOpen">cupsRasterOpen</a></li>
+          <li><a href="#cupsRasterOpenIO">cupsRasterOpenIO</a></li>
+          <li><a href="#cupsRasterReadHeader">cupsRasterReadHeader</a></li>
+          <li><a href="#cupsRasterReadHeader2">cupsRasterReadHeader2</a></li>
+          <li><a href="#cupsRasterReadPixels">cupsRasterReadPixels</a></li>
+          <li><a href="#cupsRasterWriteHeader">cupsRasterWriteHeader</a></li>
+          <li><a href="#cupsRasterWriteHeader2">cupsRasterWriteHeader2</a></li>
+          <li><a href="#cupsRasterWritePixels">cupsRasterWritePixels</a></li>
+        </ul></li>
+        <li><a href="#TYPES">Data Types</a><ul class="subcontents">
+          <li><a href="#cups_adv_t">cups_adv_t</a></li>
+          <li><a href="#cups_bool_t">cups_bool_t</a></li>
+          <li><a href="#cups_cspace_t">cups_cspace_t</a></li>
+          <li><a href="#cups_cut_t">cups_cut_t</a></li>
+          <li><a href="#cups_edge_t">cups_edge_t</a></li>
+          <li><a href="#cups_interpret_cb_t">cups_interpret_cb_t</a></li>
+          <li><a href="#cups_jog_t">cups_jog_t</a></li>
+          <li><a href="#cups_mode_t">cups_mode_t</a></li>
+          <li><a href="#cups_order_t">cups_order_t</a></li>
+          <li><a href="#cups_orient_t">cups_orient_t</a></li>
+          <li><a href="#cups_page_header2_t">cups_page_header2_t</a></li>
+          <li><a href="#cups_page_header_t">cups_page_header_t</a></li>
+          <li><a href="#cups_raster_iocb_t">cups_raster_iocb_t</a></li>
+          <li><a href="#cups_raster_t">cups_raster_t</a></li>
+        </ul></li>
+        <li><a href="#STRUCTURES">Structures</a><ul class="subcontents">
+          <li><a href="#cups_page_header2_s">cups_page_header2_s</a></li>
+          <li><a href="#cups_page_header_s">cups_page_header_s</a></li>
+        </ul></li>
+        <li><a href="#ENUMERATIONS">Enumerations</a><ul class="subcontents">
+          <li><a href="#cups_adv_e">cups_adv_e</a></li>
+          <li><a href="#cups_bool_e">cups_bool_e</a></li>
+          <li><a href="#cups_cspace_e">cups_cspace_e</a></li>
+          <li><a href="#cups_cut_e">cups_cut_e</a></li>
+          <li><a href="#cups_edge_e">cups_edge_e</a></li>
+          <li><a href="#cups_jog_e">cups_jog_e</a></li>
+          <li><a href="#cups_mode_e">cups_mode_e</a></li>
+          <li><a href="#cups_order_e">cups_order_e</a></li>
+          <li><a href="#cups_orient_e">cups_orient_e</a></li>
+        </ul></li>
+      </ul>
+    </div>
+    <div class="body">
+<!--
+  Raster API introduction for CUPS.
 
-      Attn: CUPS Licensing Information
-      Easy Software Products
-      44141 Airport View Drive, Suite 204
-      Hollywood, Maryland 20636 USA
+  Copyright © 2007-2013 by Apple Inc.
+  Copyright © 1997-2006 by Easy Software Products, all rights reserved.
 
-      Voice: (301) 373-9600
-      EMail: cups-info@cups.org
-       WWW: http://www.cups.org
+  Licensed under Apache License v2.0.  See the file "LICENSE" for more
+  information.
 -->
 
-<h2 class='title'>Introduction</h2>
+<h2 class='title'><a name="OVERVIEW">Overview</a></h2>
+
+<p>The CUPS raster API provides a standard interface for reading and writing
+CUPS raster streams which are used for printing to raster printers. Because the
+raster format is updated from time to time, it is important to use this API to
+avoid incompatibilities with newer versions of CUPS.</p>
+
+<p>Two kinds of CUPS filters use the CUPS raster API - raster image processor
+(RIP) filters such as <code>pstoraster</code> and <code>cgpdftoraster</code>
+(macOS) that produce CUPS raster files and printer driver filters that
+convert CUPS raster files into a format usable by the printer. Printer
+driver filters are by far the most common.</p>
+
+<p>CUPS raster files (<code>application/vnd.cups-raster</code>) consists of
+a stream of raster page descriptions produced by one of the RIP filters such as
+<var>pstoraster</var>, <var>imagetoraster</var>, or
+<var>cgpdftoraster</var>. CUPS raster files are referred to using the
+<a href='#cups_raster_t'><code>cups_raster_t</code></a> type and are
+opened using the <a href='#cupsRasterOpen'><code>cupsRasterOpen</code></a>
+function. For example, to read raster data from the standard input, open
+file descriptor 0:</p>
+
+<pre class="example">
+#include &lt;cups/raster.h&gt;
 
-<p>The CUPS raster API provides a standard interface for reading
-and writing CUPS raster streams which are used for printing to
-raster printers. Because the raster format is updated from time
-to time, it is important to use this API to avoid
-incompatibilities with newer versions of CUPS.</p>
+<a href="#cups_raster_t">cups_raster_t</a> *ras = <a href="#cupsRasterOpen">cupsRasterOpen</a>(0, CUPS_RASTER_READ);
+</pre>
+
+<p>Each page of data begins with a page dictionary structure called
+<a href="#cups_page_header2_t"><code>cups_page_header2_t</code></a>. This
+structure contains the colorspace, bits per color, media size, media type,
+hardware resolution, and so forth used for the page.</p>
+
+<blockquote><b>Note:</b>
+
+  <p>Do not confuse the colorspace in the page header with the PPD
+  <tt>ColorModel</tt> keyword. <tt>ColorModel</tt> refers to the general type of
+  color used for a device (Gray, RGB, CMYK, DeviceN) and is often used to
+  select a particular colorspace for the page header along with the associate
+  color profile. The page header colorspace (<tt>cupsColorSpace</tt>) describes
+  both the type and organization of the color data, for example KCMY (black
+  first) instead of CMYK and RGBA (RGB + alpha) instead of RGB.</p>
+
+</blockquote>
+
+<p>You read the page header using the
+<a href="#cupsRasterReadHeader2"><code>cupsRasterReadHeader2</code></a>
+function:</p>
+
+<pre class="example">
+#include &lt;cups/raster.h&gt;
+
+<a href="#cups_raster_t">cups_raster_t</a> *ras = <a href="#cupsRasterOpen">cupsRasterOpen</a>(0, CUPS_RASTER_READ);
+<a href="#cups_page_header2_t">cups_page_header2_t</a> header;
+
+while (<a href="#cupsRasterReadHeader2">cupsRasterReadHeader2</a>(ras, &amp;header))
+{
+  /* setup this page */
+
+  /* read raster data */
+
+  /* finish this page */
+}
+</pre>
+
+<p>After the page dictionary comes the page data which is a full-resolution,
+possibly compressed bitmap representing the page in the printer's output
+colorspace. You read uncompressed raster data using the
+<a href="#cupsRasterReadPixels"><code>cupsRasterReadPixels</code></a>
+function. A <code>for</code> loop is normally used to read the page one line
+at a time:</p>
+
+<pre class="example">
+#include &lt;cups/raster.h&gt;
+
+<a href="#cups_raster_t">cups_raster_t</a> *ras = <a href="#cupsRasterOpen">cupsRasterOpen</a>(0, CUPS_RASTER_READ);
+<a href="#cups_page_header2_t">cups_page_header2_t</a> header;
+int page = 0;
+int y;
+char *buffer;
 
-<h2 class='title'>General Usage</h2>
+while (<a href="#cupsRasterReadHeader2">cupsRasterReadHeader2</a>(ras, &amp;header))
+{
+  /* setup this page */
+  page ++;
+  fprintf(stderr, "PAGE: %d %d\n", page, header.NumCopies);
 
-<p>The <var>&lt;cups/raster.h&gt;</var> header file must be
-included to use the <tt>cupsRaster</tt> functions.</p>
+  /* allocate memory for 1 line */
+  buffer = malloc(header.cupsBytesPerLine);
 
-<p>Programs using these functions must be linked to the CUPS
-imaging library: <var>libcupsimage.a</var>,
-<var>libcupsimage.so.2</var>, <var>libcupsimage.2.dylib</var>,
-<var>libcupsimage_s.a</var>, or <var>libcupsimage2.lib</var>
-depending on the platform. The following command compiles
-<var>myprogram.c</var> using GCC and the CUPS imaging
-library:</p>
+  /* read raster data */
+  for (y = 0; y &lt; header.cupsHeight; y ++)
+  {
+    if (<a href="#cupsRasterReadPixels">cupsRasterReadPixels</a>(ras, buffer, header.cupsBytesPerLine) == 0)
+      break;
 
-<pre class='command'>
-<kbd>gcc -o myprogram myprogram.c -lcupsimage</kbd>
+    /* write raster data to printer on stdout */
+  }
+
+  /* finish this page */
+}
+</pre>
+
+<p>When you are done reading the raster data, call the
+<a href="#cupsRasterClose"><code>cupsRasterClose</code></a> function to free
+the memory used to read the raster file:</p>
+
+<pre class="example">
+<a href="#cups_raster_t">cups_raster_t</a> *ras;
+
+<a href="#cupsRasterClose">cupsRasterClose</a>(ras);
 </pre>
 
-<h2 class='title'>Compatibility</h2>
 
-<p>Unless otherwise specified, the raster API functions require
-CUPS 1.1 or higher.</p>
+<h2 class='title'><a name="TASKS">Functions by Task</a></h2>
+
+<h3><a name="OPENCLOSE">Opening and Closing Raster Streams</a></h3>
 
-<h2 class='title'>Licensing</h2>
+<ul class="code">
+
+       <li><a href="#cupsRasterClose" title="Close a raster stream.">cupsRasterClose</a></li>
+       <li><a href="#cupsRasterOpen" title="Open a raster stream.">cupsRasterOpen</a></li>
 
-<p>The CUPS raster API is provided under the terms of the GNU
-Library General Public License, with exceptions for MacOS X-based
-programs. Please see the CUPS license agreement for more
-information.</p>
-<h2 class='title'>Contents</h2>
-<ul>
-       <li><a href='#ENUMERATIONS'>Enumerations</a></li>
-       <li><a href='#FUNCTIONS'>Functions</a></li>
-       <li><a href='#STRUCTURES'>Structures</a></li>
-       <li><a href='#TYPES'>Types</a></li>
 </ul>
-<!-- NEW PAGE -->
-<h2 class='title'><a name='ENUMERATIONS'>Enumerations</a></h2>
-<ul>
-       <li><a href='#cups_adv_e'><tt>cups_adv_e</tt></a> </li>
-       <li><a href='#cups_bool_e'><tt>cups_bool_e</tt></a> </li>
-       <li><a href='#cups_cspace_e'><tt>cups_cspace_e</tt></a> </li>
-       <li><a href='#cups_cut_e'><tt>cups_cut_e</tt></a> </li>
-       <li><a href='#cups_edge_e'><tt>cups_edge_e</tt></a> </li>
-       <li><a href='#cups_jog_e'><tt>cups_jog_e</tt></a> </li>
-       <li><a href='#cups_mode_e'><tt>cups_mode_e</tt></a> </li>
-       <li><a href='#cups_order_e'><tt>cups_order_e</tt></a> </li>
-       <li><a href='#cups_orient_e'><tt>cups_orient_e</tt></a> </li>
+
+<h3><a name="READING">Reading Raster Streams</a></h3>
+
+<ul class="code">
+
+       <li><a href="#cupsRasterReadHeader" title="Read a raster page header and store it in a version 1 page header structure.">cupsRasterReadHeader</a> <span class="info">Deprecated in CUPS 1.2/macOS 10.5</span></li>
+       <li><a href="#cupsRasterReadHeader2" title="Read a raster page header and store it in a version 2 page header structure.">cupsRasterReadHeader2</a></li>
+       <li><a href="#cupsRasterReadPixels" title="Read raster pixels.">cupsRasterReadPixels</a></li>
+
 </ul>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='cups_adv_e'>cups_adv_e</a></h3>
-<h4>Description</h4>
-<p>AdvanceMedia attribute values
-<h4>Values</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Values'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>CUPS_ADVANCE_FILE</tt> </td><td>Advance the roll after this file
-</td></tr>
-<tr><td><tt>CUPS_ADVANCE_JOB</tt> </td><td>Advance the roll after this job
-</td></tr>
-<tr><td><tt>CUPS_ADVANCE_NONE</tt> </td><td>Never advance the roll
-</td></tr>
-<tr><td><tt>CUPS_ADVANCE_PAGE</tt> </td><td>Advance the roll after this page
-</td></tr>
-<tr><td><tt>CUPS_ADVANCE_SET</tt> </td><td>Advance the roll after this set
-</td></tr>
-</tbody></table></div>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='cups_bool_e'>cups_bool_e</a></h3>
-<h4>Description</h4>
-<p>Types...
-<h4>Values</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Values'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>CUPS_FALSE</tt> </td><td>Logical false
-</td></tr>
-<tr><td><tt>CUPS_TRUE</tt> </td><td>Logical true
-</td></tr>
-</tbody></table></div>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='cups_cspace_e'>cups_cspace_e</a></h3>
-<h4>Description</h4>
-<p>
-<h4>Values</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Values'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>CUPS_CSPACE_CIELab</tt> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></td><td>CIE Lab 
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_CIEXYZ</tt> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></td><td>CIE XYZ 
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_CMY</tt> </td><td>Cyan, magenta, yellow
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_CMYK</tt> </td><td>Cyan, magenta, yellow, black
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_GMCK</tt> </td><td>Gold, magenta, yellow, black
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_GMCS</tt> </td><td>Gold, magenta, yellow, silver
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_GOLD</tt> </td><td>Gold foil
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_ICC1</tt> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></td><td>ICC-based, 1 color 
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_ICC2</tt> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></td><td>ICC-based, 2 colors 
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_ICC3</tt> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></td><td>ICC-based, 3 colors 
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_ICC4</tt> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></td><td>ICC-based, 4 colors 
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_ICC5</tt> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></td><td>ICC-based, 5 colors 
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_ICC6</tt> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></td><td>ICC-based, 6 colors 
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_ICC7</tt> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></td><td>ICC-based, 7 colors 
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_ICC8</tt> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></td><td>ICC-based, 8 colors 
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_ICC9</tt> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></td><td>ICC-based, 9 colors 
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_ICCA</tt> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></td><td>ICC-based, 10 colors 
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_ICCB</tt> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></td><td>ICC-based, 11 colors 
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_ICCC</tt> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></td><td>ICC-based, 12 colors 
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_ICCD</tt> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></td><td>ICC-based, 13 colors 
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_ICCE</tt> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></td><td>ICC-based, 14 colors 
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_ICCF</tt> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></td><td>ICC-based, 15 colors 
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_K</tt> </td><td>Black
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_KCMY</tt> </td><td>Black, cyan, magenta, yellow
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_KCMYcm</tt> </td><td>Black, cyan, magenta, yellow, *
-light-cyan, light-magenta
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_RGB</tt> </td><td>Red, green, blue
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_RGBA</tt> </td><td>Red, green, blue, alpha
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_RGBW</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Red, green, blue, white 
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_SILVER</tt> </td><td>Silver foil
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_W</tt> </td><td>Luminance
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_WHITE</tt> </td><td>White ink (as black)
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_YMC</tt> </td><td>Yellow, magenta, cyan
-</td></tr>
-<tr><td><tt>CUPS_CSPACE_YMCK</tt> </td><td>Yellow, magenta, cyan, black
-</td></tr>
-</tbody></table></div>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='cups_cut_e'>cups_cut_e</a></h3>
-<h4>Description</h4>
-<p>
-<h4>Values</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Values'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>CUPS_CUT_FILE</tt> </td><td>Cut the roll after this file
-</td></tr>
-<tr><td><tt>CUPS_CUT_JOB</tt> </td><td>Cut the roll after this job
-</td></tr>
-<tr><td><tt>CUPS_CUT_NONE</tt> </td><td>Never cut the roll
-</td></tr>
-<tr><td><tt>CUPS_CUT_PAGE</tt> </td><td>Cut the roll after this page
-</td></tr>
-<tr><td><tt>CUPS_CUT_SET</tt> </td><td>Cut the roll after this set
-</td></tr>
-</tbody></table></div>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='cups_edge_e'>cups_edge_e</a></h3>
-<h4>Description</h4>
-<p>
-<h4>Values</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Values'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>CUPS_EDGE_BOTTOM</tt> </td><td>Leading edge is the bottom of the page
-</td></tr>
-<tr><td><tt>CUPS_EDGE_LEFT</tt> </td><td>Leading edge is the left of the page
-</td></tr>
-<tr><td><tt>CUPS_EDGE_RIGHT</tt> </td><td>Leading edge is the right of the page
-</td></tr>
-<tr><td><tt>CUPS_EDGE_TOP</tt> </td><td>Leading edge is the top of the page
-</td></tr>
-</tbody></table></div>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='cups_jog_e'>cups_jog_e</a></h3>
-<h4>Description</h4>
-<p>
-<h4>Values</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Values'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>CUPS_JOG_FILE</tt> </td><td>Move pages after this file
-</td></tr>
-<tr><td><tt>CUPS_JOG_JOB</tt> </td><td>Move pages after this job
-</td></tr>
-<tr><td><tt>CUPS_JOG_NONE</tt> </td><td>Never move pages
-</td></tr>
-<tr><td><tt>CUPS_JOG_SET</tt> </td><td>Move pages after this set
-</td></tr>
-</tbody></table></div>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='cups_mode_e'>cups_mode_e</a></h3>
-<h4>Description</h4>
-<p>
-<h4>Values</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Values'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>CUPS_RASTER_READ</tt> </td><td>Open stream for reading
-</td></tr>
-<tr><td><tt>CUPS_RASTER_WRITE</tt> </td><td>Open stream for writing
-</td></tr>
-<tr><td><tt>CUPS_RASTER_WRITE_COMPRESSED</tt> <span class='info'>&nbsp;CUPS 1.3&nbsp;</span></td><td>Open stream for compressed writing 
-</td></tr>
-</tbody></table></div>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='cups_order_e'>cups_order_e</a></h3>
-<h4>Description</h4>
-<p>
-<h4>Values</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Values'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>CUPS_ORDER_BANDED</tt> </td><td>CCC MMM YYY KKK ...
-</td></tr>
-<tr><td><tt>CUPS_ORDER_CHUNKED</tt> </td><td>CMYK CMYK CMYK ...
-</td></tr>
-<tr><td><tt>CUPS_ORDER_PLANAR</tt> </td><td>CCC ... MMM ... YYY ... KKK ...
-</td></tr>
-</tbody></table></div>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='cups_orient_e'>cups_orient_e</a></h3>
-<h4>Description</h4>
-<p>
-<h4>Values</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Values'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>CUPS_ORIENT_0</tt> </td><td>Don't rotate the page
-</td></tr>
-<tr><td><tt>CUPS_ORIENT_180</tt> </td><td>Turn the page upside down
-</td></tr>
-<tr><td><tt>CUPS_ORIENT_270</tt> </td><td>Rotate the page clockwise
-</td></tr>
-<tr><td><tt>CUPS_ORIENT_90</tt> </td><td>Rotate the page counter-clockwise
-</td></tr>
-</tbody></table></div>
-<!-- NEW PAGE -->
-<h2 class='title'><a name='FUNCTIONS'>Functions</a></h2>
-<ul>
-       <li><a href='#cupsRasterClose'><tt>cupsRasterClose()</tt></a> </li>
-       <li><a href='#cupsRasterInterpretPPD'><tt>cupsRasterInterpretPPD()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
-       <li><a href='#cupsRasterOpen'><tt>cupsRasterOpen()</tt></a> </li>
-       <li><a href='#cupsRasterReadHeader'><tt>cupsRasterReadHeader()</tt></a> </li>
-       <li><a href='#cupsRasterReadHeader2'><tt>cupsRasterReadHeader2()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
-       <li><a href='#cupsRasterReadPixels'><tt>cupsRasterReadPixels()</tt></a> </li>
-       <li><a href='#cupsRasterWriteHeader'><tt>cupsRasterWriteHeader()</tt></a> </li>
-       <li><a href='#cupsRasterWriteHeader2'><tt>cupsRasterWriteHeader2()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
-       <li><a href='#cupsRasterWritePixels'><tt>cupsRasterWritePixels()</tt></a> </li>
+
+<h3><a name="WRITING">Writing Raster Streams</a></h3>
+
+<ul class="code">
+
+       <li><a href="#cupsRasterInterpretPPD" title="Interpret PPD commands to create a page header.">cupsRasterInterpretPPD</a></li>
+       <li><a href="#cupsRasterWriteHeader" title="Write a raster page header from a version 1 page header structure.">cupsRasterWriteHeader</a> <span class="info">Deprecated in CUPS 1.2/macOS 10.5</span></li>
+       <li><a href="#cupsRasterWriteHeader2" title="Write a raster page header from a version 2 page header structure.">cupsRasterWriteHeader2</a></li>
+       <li><a href="#cupsRasterWritePixels" title="Write raster pixels.">cupsRasterWritePixels</a></li>
+
 </ul>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='cupsRasterClose'>cupsRasterClose()</a></h3>
-<h4>Description</h4>
-<p>Close a raster stream.
-<h4>Syntax</h4>
-<p><tt>
-void<br>
-cupsRasterClose(
-    <a href='#cups_raster_t'>cups_raster_t</a> * r);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>r</tt></td><td>Stream to close</td></tr>
-</tbody></table></div>
-<h4>Returns</h4>
-<p>Nothing.</p>
-<!-- NEW PAGE -->
-<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='cupsRasterInterpretPPD'>cupsRasterInterpretPPD()</a></h3>
-<h4>Description</h4>
-<p>Interpret PPD commands to create a page header.
-<p>This function does not mark the options in the PPD using the &quot;num_options&quot;
-and &quot;options&quot; arguments.  Instead, mark the options prior to calling
-cupsRasterInterpretPPD() - this allows you to do per-page options
-without manipulating the options array.
-<p>The &quot;func&quot; argument specifies an optional callback function that is
+      <h2 class="title"><a id="FUNCTIONS">Functions</a></h2>
+<h3 class="function"><a id="cupsRasterClose">cupsRasterClose</a></h3>
+        <p class="description">Close a raster stream.</p>
+<p class="code">
+void cupsRasterClose(<a href="#cups_raster_t">cups_raster_t</a> *r);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>r</th>
+        <td class="description">Stream to close</td></tr>
+</tbody></table>
+<h4 class="discussion">Discussion</h4>
+        <p class="discussion">The file descriptor associated with the raster stream must be closed
+separately as needed.</p>
+<h3 class="function"><span class="info">&#160;CUPS 2.2/macOS 10.12&#160;</span><a id="cupsRasterInitPWGHeader">cupsRasterInitPWGHeader</a></h3>
+        <p class="description">Initialize a page header for PWG Raster output.</p>
+<p class="code">
+int cupsRasterInitPWGHeader(<a href="#cups_page_header2_t">cups_page_header2_t</a> *h, pwg_media_t *media, const char *type, int xdpi, int ydpi, const char *sides, const char *sheet_back);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>h</th>
+        <td class="description">Page header</td></tr>
+<tr><th>media</th>
+        <td class="description">PWG media information</td></tr>
+<tr><th>type</th>
+        <td class="description">PWG raster type string</td></tr>
+<tr><th>xdpi</th>
+        <td class="description">Cross-feed direction (horizontal) resolution</td></tr>
+<tr><th>ydpi</th>
+        <td class="description">Feed direction (vertical) resolution</td></tr>
+<tr><th>sides</th>
+        <td class="description">IPP &quot;sides&quot; option value</td></tr>
+<tr><th>sheet_back</th>
+        <td class="description">Transform for back side or <code>NULL</code> for none</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+        <p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+        <p class="discussion">The &quot;media&quot; argument specifies the media to use.<br>
+<br>
+The &quot;type&quot; argument specifies a &quot;pwg-raster-document-type-supported&quot; value
+that controls the color space and bit depth of the raster data.<br>
+<br>
+The &quot;xres&quot; and &quot;yres&quot; arguments specify the raster resolution in dots per
+inch.<br>
+<br>
+The &quot;sheet_back&quot; argument specifies a &quot;pwg-raster-document-sheet-back&quot; value
+to apply for the back side of a page.  Pass <code>NULL</code> for the front side.
+
+</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(<a href="#cups_page_header2_t">cups_page_header2_t</a> *h, ppd_file_t *ppd, int num_options, cups_option_t *options, <a href="#cups_interpret_cb_t">cups_interpret_cb_t</a> func);</p>
+<h4 class="parameters">Parameters</h4>
+<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 cups_page_header2_t data as needed to use a
+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.
-<p>cupsRasterInterpretPPD() supports a subset of the PostScript language.
-Currently only the [, ], &lt;&lt;, &gt;&gt;, {, }, cleartomark, copy, dup, index,
-pop, roll, setpagedevice, and stopped operators are supported.
-
-
-<h4>Syntax</h4>
-<p><tt>
-int<br>
-cupsRasterInterpretPPD(
-    <a href='#cups_page_header2_t'>cups_page_header2_t</a> * h,
-    ppd_file_t * ppd,
-    int num_options,
-    cups_option_t * options,
-    <a href='#cups_interpret_cb_t'>cups_interpret_cb_t</a> func);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>h</tt></td><td>Page header</td></tr>
-<tr><td><tt>ppd</tt></td><td>PPD file</td></tr>
-<tr><td><tt>num_options</tt></td><td>Number of options</td></tr>
-<tr><td><tt>options</tt></td><td>Options</td></tr>
-<tr><td><tt>func</tt></td><td>Optional page header callback</td></tr>
-</tbody></table></div>
-<h4>Returns</h4>
-<p>0 on success, -1 on failure</p>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='cupsRasterOpen'>cupsRasterOpen()</a></h3>
-<h4>Description</h4>
-<p>Open a raster stream.
-<h4>Syntax</h4>
-<p><tt>
-<a href='#cups_raster_t'>cups_raster_t</a> *<br>
-cupsRasterOpen(
-    int fd,
-    cups_mode_t mode);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>fd</tt></td><td>File descriptor</td></tr>
-<tr><td><tt>mode</tt></td><td>Mode</td></tr>
-</tbody></table></div>
-<h4>Returns</h4>
-<p>New stream</p>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='cupsRasterReadHeader'>cupsRasterReadHeader()</a></h3>
-<h4>Description</h4>
-<p>Read a raster page header and store it in a
-V1 page header structure.
-<h4>Syntax</h4>
-<p><tt>
-unsigned<br>
-cupsRasterReadHeader(
-    <a href='#cups_raster_t'>cups_raster_t</a> * r,
-    <a href='#cups_page_header_t'>cups_page_header_t</a> * h);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>r</tt></td><td>Raster stream</td></tr>
-<tr><td><tt>h</tt></td><td>Pointer to header data</td></tr>
-</tbody></table></div>
-<h4>Returns</h4>
-<p>1 on success, 0 on fail</p>
-<!-- NEW PAGE -->
-<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='cupsRasterReadHeader2'>cupsRasterReadHeader2()</a></h3>
-<h4>Description</h4>
-<p>Read a raster page header and store it in a
-V2 page header structure.
-
-
-<h4>Syntax</h4>
-<p><tt>
-unsigned<br>
-cupsRasterReadHeader2(
-    <a href='#cups_raster_t'>cups_raster_t</a> * r,
-    <a href='#cups_page_header2_t'>cups_page_header2_t</a> * h);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>r</tt></td><td>Raster stream</td></tr>
-<tr><td><tt>h</tt></td><td>Pointer to header data</td></tr>
-</tbody></table></div>
-<h4>Returns</h4>
-<p>1 on success, 0 on fail</p>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='cupsRasterReadPixels'>cupsRasterReadPixels()</a></h3>
-<h4>Description</h4>
-<p>Read raster pixels.
-<h4>Syntax</h4>
-<p><tt>
-unsigned<br>
-cupsRasterReadPixels(
-    <a href='#cups_raster_t'>cups_raster_t</a> * r,
-    unsigned char * p,
-    unsigned len);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>r</tt></td><td>Raster stream</td></tr>
-<tr><td><tt>p</tt></td><td>Pointer to pixel buffer</td></tr>
-<tr><td><tt>len</tt></td><td>Number of bytes to read</td></tr>
-</tbody></table></div>
-<h4>Returns</h4>
-<p>Number of bytes read</p>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='cupsRasterWriteHeader'>cupsRasterWriteHeader()</a></h3>
-<h4>Description</h4>
-<p>Write a raster page header from a V1 page
-header structure.
-<h4>Syntax</h4>
-<p><tt>
-unsigned<br>
-cupsRasterWriteHeader(
-    <a href='#cups_raster_t'>cups_raster_t</a> * r,
-    <a href='#cups_page_header_t'>cups_page_header_t</a> * h);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>r</tt></td><td>Raster stream</td></tr>
-<tr><td><tt>h</tt></td><td>Raster page header</td></tr>
-</tbody></table></div>
-<h4>Returns</h4>
-<p>1 on success, 0 on failure</p>
-<!-- NEW PAGE -->
-<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='cupsRasterWriteHeader2'>cupsRasterWriteHeader2()</a></h3>
-<h4>Description</h4>
-<p>Write a raster page header from a V2 page
-header structure.
-
-
-<h4>Syntax</h4>
-<p><tt>
-unsigned<br>
-cupsRasterWriteHeader2(
-    <a href='#cups_raster_t'>cups_raster_t</a> * r,
-    <a href='#cups_page_header2_t'>cups_page_header2_t</a> * h);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>r</tt></td><td>Raster stream</td></tr>
-<tr><td><tt>h</tt></td><td>Raster page header</td></tr>
-</tbody></table></div>
-<h4>Returns</h4>
-<p>1 on success, 0 on failure</p>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='cupsRasterWritePixels'>cupsRasterWritePixels()</a></h3>
-<h4>Description</h4>
-<p>Write raster pixels.
-<h4>Syntax</h4>
-<p><tt>
-unsigned<br>
-cupsRasterWritePixels(
-    <a href='#cups_raster_t'>cups_raster_t</a> * r,
-    unsigned char * p,
-    unsigned len);
-</tt></p>
-<h4>Arguments</h4>
-<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>r</tt></td><td>Raster stream</td></tr>
-<tr><td><tt>p</tt></td><td>Bytes to write</td></tr>
-<tr><td><tt>len</tt></td><td>Number of bytes to write</td></tr>
-</tbody></table></div>
-<h4>Returns</h4>
-<p>Number of bytes written</p>
-<!-- NEW PAGE -->
-<h2 class='title'><a name='STRUCTURES'>Structures</a></h2>
-<ul>
-       <li><a href='#cups_page_header2_s'><tt>cups_page_header2_s</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
-       <li><a href='#cups_page_header_s'><tt>cups_page_header_s</tt></a> </li>
-</ul>
-<!-- NEW PAGE -->
-<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='cups_page_header2_s'>cups_page_header2_s</a></h3>
-<h4>Description</h4>
-<p>Version 2 Page Header 
-<h4>Definition</h4>
-<p><tt>
-struct cups_page_header2_s<br>
-{<br>
-&nbsp;&nbsp;unsigned AdvanceDistance;<br>
-&nbsp;&nbsp;cups_adv_t AdvanceMedia;<br>
-&nbsp;&nbsp;cups_bool_t Collate;<br>
-&nbsp;&nbsp;cups_cut_t CutMedia;<br>
-&nbsp;&nbsp;cups_bool_t Duplex;<br>
-&nbsp;&nbsp;unsigned HWResolution[2];<br>
-&nbsp;&nbsp;unsigned ImagingBoundingBox[4];<br>
-&nbsp;&nbsp;cups_bool_t InsertSheet;<br>
-&nbsp;&nbsp;cups_jog_t Jog;<br>
-&nbsp;&nbsp;cups_edge_t LeadingEdge;<br>
-&nbsp;&nbsp;cups_bool_t ManualFeed;<br>
-&nbsp;&nbsp;unsigned Margins[2];<br>
-&nbsp;&nbsp;char MediaClass[64];<br>
-&nbsp;&nbsp;char MediaColor[64];<br>
-&nbsp;&nbsp;unsigned MediaPosition;<br>
-&nbsp;&nbsp;char MediaType[64];<br>
-&nbsp;&nbsp;unsigned MediaWeight;<br>
-&nbsp;&nbsp;cups_bool_t MirrorPrint;<br>
-&nbsp;&nbsp;cups_bool_t NegativePrint;<br>
-&nbsp;&nbsp;unsigned NumCopies;<br>
-&nbsp;&nbsp;cups_orient_t Orientation;<br>
-&nbsp;&nbsp;cups_bool_t OutputFaceUp;<br>
-&nbsp;&nbsp;char OutputType[64];<br>
-&nbsp;&nbsp;unsigned PageSize[2];<br>
-&nbsp;&nbsp;cups_bool_t Separations;<br>
-&nbsp;&nbsp;cups_bool_t TraySwitch;<br>
-&nbsp;&nbsp;cups_bool_t Tumble;<br>
-&nbsp;&nbsp;unsigned cupsBitsPerColor;<br>
-&nbsp;&nbsp;unsigned cupsBitsPerPixel;<br>
-&nbsp;&nbsp;float cupsBorderlessScalingFactor;<br>
-&nbsp;&nbsp;unsigned cupsBytesPerLine;<br>
-&nbsp;&nbsp;cups_order_t cupsColorOrder;<br>
-&nbsp;&nbsp;cups_cspace_t cupsColorSpace;<br>
-&nbsp;&nbsp;unsigned cupsCompression;<br>
-&nbsp;&nbsp;unsigned cupsHeight;<br>
-&nbsp;&nbsp;float cupsImagingBBox[4];<br>
-&nbsp;&nbsp;unsigned cupsInteger[16];<br>
-&nbsp;&nbsp;char cupsMarkerType[64];<br>
-&nbsp;&nbsp;unsigned cupsMediaType;<br>
-&nbsp;&nbsp;unsigned cupsNumColors;<br>
-&nbsp;&nbsp;char cupsPageSizeName[64];<br>
-&nbsp;&nbsp;float cupsPageSize[2];<br>
-&nbsp;&nbsp;float cupsReal[16];<br>
-&nbsp;&nbsp;char cupsRenderingIntent[64];<br>
-&nbsp;&nbsp;unsigned cupsRowCount;<br>
-&nbsp;&nbsp;unsigned cupsRowFeed;<br>
-&nbsp;&nbsp;unsigned cupsRowStep;<br>
-&nbsp;&nbsp;char cupsString[16][64];<br>
-&nbsp;&nbsp;unsigned cupsWidth;<br>
-};</tt></p>
-<h4>Members</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Members'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>AdvanceDistance</tt> </td><td>AdvanceDistance value in points
-</td></tr>
-<tr><td><tt>AdvanceMedia</tt> </td><td>AdvanceMedia value (see above)
-</td></tr>
-<tr><td><tt>Collate</tt> </td><td>Collated copies value
-</td></tr>
-<tr><td><tt>CutMedia</tt> </td><td>CutMedia value (see above)
-</td></tr>
-<tr><td><tt>Duplex</tt> </td><td>Duplexed (double-sided) value
-</td></tr>
-<tr><td><tt>HWResolution[2]</tt> </td><td>Resolution in dots-per-inch
-</td></tr>
-<tr><td><tt>ImagingBoundingBox[4]</tt> </td><td>Pixel region that is painted (points)
-</td></tr>
-<tr><td><tt>InsertSheet</tt> </td><td>InsertSheet value
-</td></tr>
-<tr><td><tt>Jog</tt> </td><td>Jog value (see above)
-</td></tr>
-<tr><td><tt>LeadingEdge</tt> </td><td>LeadingEdge value (see above)
-</td></tr>
-<tr><td><tt>ManualFeed</tt> </td><td>ManualFeed value
-</td></tr>
-<tr><td><tt>Margins[2]</tt> </td><td>Lower-lefthand margins in points
-</td></tr>
-<tr><td><tt>MediaClass[64]</tt> </td><td>MediaClass string
-</td></tr>
-<tr><td><tt>MediaColor[64]</tt> </td><td>MediaColor string
-</td></tr>
-<tr><td><tt>MediaPosition</tt> </td><td>MediaPosition value
-</td></tr>
-<tr><td><tt>MediaType[64]</tt> </td><td>MediaType string
-</td></tr>
-<tr><td><tt>MediaWeight</tt> </td><td>MediaWeight value in grams/m^2
-</td></tr>
-<tr><td><tt>MirrorPrint</tt> </td><td>MirrorPrint value
-</td></tr>
-<tr><td><tt>NegativePrint</tt> </td><td>NegativePrint value
-</td></tr>
-<tr><td><tt>NumCopies</tt> </td><td>Number of copies to produce
-</td></tr>
-<tr><td><tt>Orientation</tt> </td><td>Orientation value (see above)
-</td></tr>
-<tr><td><tt>OutputFaceUp</tt> </td><td>OutputFaceUp value
-</td></tr>
-<tr><td><tt>OutputType[64]</tt> </td><td>OutputType string
-</td></tr>
-<tr><td><tt>PageSize[2]</tt> </td><td>Width and length of page in points
-</td></tr>
-<tr><td><tt>Separations</tt> </td><td>Separations value
-</td></tr>
-<tr><td><tt>TraySwitch</tt> </td><td>TraySwitch value
-</td></tr>
-<tr><td><tt>Tumble</tt> </td><td>Tumble value
-</td></tr>
-<tr><td><tt>cupsBitsPerColor</tt> </td><td>Number of bits for each color
-</td></tr>
-<tr><td><tt>cupsBitsPerPixel</tt> </td><td>Number of bits for each pixel
-</td></tr>
-<tr><td><tt>cupsBorderlessScalingFactor</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Scaling that was applied to page data 
-</td></tr>
-<tr><td><tt>cupsBytesPerLine</tt> </td><td>Number of bytes per line
-</td></tr>
-<tr><td><tt>cupsColorOrder</tt> </td><td>Order of colors
-</td></tr>
-<tr><td><tt>cupsColorSpace</tt> </td><td>True colorspace
-</td></tr>
-<tr><td><tt>cupsCompression</tt> </td><td>Device compression to use
-</td></tr>
-<tr><td><tt>cupsHeight</tt> </td><td>Height of page image in pixels
-</td></tr>
-<tr><td><tt>cupsImagingBBox[4]</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Floating point ImagingBoundingBox *
-(scaling factor not applied) 
-</td></tr>
-<tr><td><tt>cupsInteger[16]</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>User-defined integer values 
-</td></tr>
-<tr><td><tt>cupsMarkerType[64]</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Ink/toner type 
-</td></tr>
-<tr><td><tt>cupsMediaType</tt> </td><td>Media type code
-</td></tr>
-<tr><td><tt>cupsNumColors</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Number of colors 
-</td></tr>
-<tr><td><tt>cupsPageSizeName[64]</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>PageSize name 
-</td></tr>
-<tr><td><tt>cupsPageSize[2]</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Floating point PageSize (scaling *
-factor not applied) 
-</td></tr>
-<tr><td><tt>cupsReal[16]</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>User-defined floating-point values 
-</td></tr>
-<tr><td><tt>cupsRenderingIntent[64]</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Color rendering intent 
-</td></tr>
-<tr><td><tt>cupsRowCount</tt> </td><td>Rows per band
-</td></tr>
-<tr><td><tt>cupsRowFeed</tt> </td><td>Feed between bands
-</td></tr>
-<tr><td><tt>cupsRowStep</tt> </td><td>Spacing between lines
-</td></tr>
-<tr><td><tt>cupsString[16][64]</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>User-defined string values 
-</td></tr>
-<tr><td><tt>cupsWidth</tt> </td><td>Width of page image in pixels
-</td></tr>
-</tbody></table></div>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='cups_page_header_s'>cups_page_header_s</a></h3>
-<h4>Description</h4>
-<p>Version 1 Page Header
-<h4>Definition</h4>
-<p><tt>
-struct cups_page_header_s<br>
-{<br>
-&nbsp;&nbsp;unsigned AdvanceDistance;<br>
-&nbsp;&nbsp;cups_adv_t AdvanceMedia;<br>
-&nbsp;&nbsp;cups_bool_t Collate;<br>
-&nbsp;&nbsp;cups_cut_t CutMedia;<br>
-&nbsp;&nbsp;cups_bool_t Duplex;<br>
-&nbsp;&nbsp;unsigned HWResolution[2];<br>
-&nbsp;&nbsp;unsigned ImagingBoundingBox[4];<br>
-&nbsp;&nbsp;cups_bool_t InsertSheet;<br>
-&nbsp;&nbsp;cups_jog_t Jog;<br>
-&nbsp;&nbsp;cups_edge_t LeadingEdge;<br>
-&nbsp;&nbsp;cups_bool_t ManualFeed;<br>
-&nbsp;&nbsp;unsigned Margins[2];<br>
-&nbsp;&nbsp;char MediaClass[64];<br>
-&nbsp;&nbsp;char MediaColor[64];<br>
-&nbsp;&nbsp;unsigned MediaPosition;<br>
-&nbsp;&nbsp;char MediaType[64];<br>
-&nbsp;&nbsp;unsigned MediaWeight;<br>
-&nbsp;&nbsp;cups_bool_t MirrorPrint;<br>
-&nbsp;&nbsp;cups_bool_t NegativePrint;<br>
-&nbsp;&nbsp;unsigned NumCopies;<br>
-&nbsp;&nbsp;cups_orient_t Orientation;<br>
-&nbsp;&nbsp;cups_bool_t OutputFaceUp;<br>
-&nbsp;&nbsp;char OutputType[64];<br>
-&nbsp;&nbsp;unsigned PageSize[2];<br>
-&nbsp;&nbsp;cups_bool_t Separations;<br>
-&nbsp;&nbsp;cups_bool_t TraySwitch;<br>
-&nbsp;&nbsp;cups_bool_t Tumble;<br>
-&nbsp;&nbsp;unsigned cupsBitsPerColor;<br>
-&nbsp;&nbsp;unsigned cupsBitsPerPixel;<br>
-&nbsp;&nbsp;unsigned cupsBytesPerLine;<br>
-&nbsp;&nbsp;cups_order_t cupsColorOrder;<br>
-&nbsp;&nbsp;cups_cspace_t cupsColorSpace;<br>
-&nbsp;&nbsp;unsigned cupsCompression;<br>
-&nbsp;&nbsp;unsigned cupsHeight;<br>
-&nbsp;&nbsp;unsigned cupsMediaType;<br>
-&nbsp;&nbsp;unsigned cupsRowCount;<br>
-&nbsp;&nbsp;unsigned cupsRowFeed;<br>
-&nbsp;&nbsp;unsigned cupsRowStep;<br>
-&nbsp;&nbsp;unsigned cupsWidth;<br>
-};</tt></p>
-<h4>Members</h4>
-<div class='table'><table align='center' border='1' width='80%' summary='Members'>
-<thead><tr><th>Name</th><th>Description</th></tr></thead>
-<tbody>
-<tr><td><tt>AdvanceDistance</tt> </td><td>AdvanceDistance value in points
-</td></tr>
-<tr><td><tt>AdvanceMedia</tt> </td><td>AdvanceMedia value (see above)
-</td></tr>
-<tr><td><tt>Collate</tt> </td><td>Collated copies value
-</td></tr>
-<tr><td><tt>CutMedia</tt> </td><td>CutMedia value (see above)
-</td></tr>
-<tr><td><tt>Duplex</tt> </td><td>Duplexed (double-sided) value
-</td></tr>
-<tr><td><tt>HWResolution[2]</tt> </td><td>Resolution in dots-per-inch
-</td></tr>
-<tr><td><tt>ImagingBoundingBox[4]</tt> </td><td>Pixel region that is painted (points)
-</td></tr>
-<tr><td><tt>InsertSheet</tt> </td><td>InsertSheet value
-</td></tr>
-<tr><td><tt>Jog</tt> </td><td>Jog value (see above)
-</td></tr>
-<tr><td><tt>LeadingEdge</tt> </td><td>LeadingEdge value (see above)
-</td></tr>
-<tr><td><tt>ManualFeed</tt> </td><td>ManualFeed value
-</td></tr>
-<tr><td><tt>Margins[2]</tt> </td><td>Lower-lefthand margins in points
-</td></tr>
-<tr><td><tt>MediaClass[64]</tt> </td><td>MediaClass string
-</td></tr>
-<tr><td><tt>MediaColor[64]</tt> </td><td>MediaColor string
-</td></tr>
-<tr><td><tt>MediaPosition</tt> </td><td>MediaPosition value
-</td></tr>
-<tr><td><tt>MediaType[64]</tt> </td><td>MediaType string
-</td></tr>
-<tr><td><tt>MediaWeight</tt> </td><td>MediaWeight value in grams/m^2
-</td></tr>
-<tr><td><tt>MirrorPrint</tt> </td><td>MirrorPrint value
-</td></tr>
-<tr><td><tt>NegativePrint</tt> </td><td>NegativePrint value
-</td></tr>
-<tr><td><tt>NumCopies</tt> </td><td>Number of copies to produce
-</td></tr>
-<tr><td><tt>Orientation</tt> </td><td>Orientation value (see above)
-</td></tr>
-<tr><td><tt>OutputFaceUp</tt> </td><td>OutputFaceUp value
-</td></tr>
-<tr><td><tt>OutputType[64]</tt> </td><td>OutputType string
-</td></tr>
-<tr><td><tt>PageSize[2]</tt> </td><td>Width and length of page in points
-</td></tr>
-<tr><td><tt>Separations</tt> </td><td>Separations value
-</td></tr>
-<tr><td><tt>TraySwitch</tt> </td><td>TraySwitch value
-</td></tr>
-<tr><td><tt>Tumble</tt> </td><td>Tumble value
-</td></tr>
-<tr><td><tt>cupsBitsPerColor</tt> </td><td>Number of bits for each color
-</td></tr>
-<tr><td><tt>cupsBitsPerPixel</tt> </td><td>Number of bits for each pixel
-</td></tr>
-<tr><td><tt>cupsBytesPerLine</tt> </td><td>Number of bytes per line
-</td></tr>
-<tr><td><tt>cupsColorOrder</tt> </td><td>Order of colors
-</td></tr>
-<tr><td><tt>cupsColorSpace</tt> </td><td>True colorspace
-</td></tr>
-<tr><td><tt>cupsCompression</tt> </td><td>Device compression to use
-</td></tr>
-<tr><td><tt>cupsHeight</tt> </td><td>Height of page image in pixels
-</td></tr>
-<tr><td><tt>cupsMediaType</tt> </td><td>Media type code
-</td></tr>
-<tr><td><tt>cupsRowCount</tt> </td><td>Rows per band
-</td></tr>
-<tr><td><tt>cupsRowFeed</tt> </td><td>Feed between bands
-</td></tr>
-<tr><td><tt>cupsRowStep</tt> </td><td>Spacing between lines
-</td></tr>
-<tr><td><tt>cupsWidth</tt> </td><td>Width of page image in pixels
-</td></tr>
-</tbody></table></div>
-<!-- NEW PAGE -->
-<h2 class='title'><a name='TYPES'>Types</a></h2>
-<ul>
-       <li><a href='#cups_interpret_cb_t'><tt>cups_interpret_cb_t</tt></a> </li>
-       <li><a href='#cups_page_header2_t'><tt>cups_page_header2_t</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
-       <li><a href='#cups_page_header_t'><tt>cups_page_header_t</tt></a> </li>
-       <li><a href='#cups_raster_t'><tt>cups_raster_t</tt></a> </li>
-</ul>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='cups_interpret_cb_t'>cups_interpret_cb_t</a></h3>
-<h4>Description</h4>
-<p>Prototypes...
-<h4>Definition</h4>
-<p><tt>
-typedef int (*cups_interpret_cb_t)(<a href='#cups_page_header2_t'>cups_page_header2_t</a> *header, int preferred_bits);
-</tt></p>
-<!-- NEW PAGE -->
-<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='cups_page_header2_t'>cups_page_header2_t</a></h3>
-<h4>Description</h4>
-<p>Version 2 Page Header 
-<h4>Definition</h4>
-<p><tt>
-typedef struct <a href='#cups_page_header2_s'>cups_page_header2_s</a> cups_page_header2_t;
-</tt></p>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='cups_page_header_t'>cups_page_header_t</a></h3>
-<h4>Description</h4>
-<p>Version 1 Page Header
-<h4>Definition</h4>
-<p><tt>
-typedef struct <a href='#cups_page_header_s'>cups_page_header_s</a> cups_page_header_t;
-</tt></p>
-<!-- NEW PAGE -->
-<h3 class='title'><a name='cups_raster_t'>cups_raster_t</a></h3>
-<h4>Description</h4>
-<p>Raster stream data
-<h4>Definition</h4>
-<p><tt>
+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"><a id="cupsRasterOpen">cupsRasterOpen</a></h3>
+        <p class="description">Open a raster stream using a file descriptor.</p>
+<p class="code">
+<a href="#cups_raster_t">cups_raster_t</a> *cupsRasterOpen(int fd, <a href="#cups_mode_t">cups_mode_t</a> mode);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>fd</th>
+        <td class="description">File descriptor</td></tr>
+<tr><th>mode</th>
+        <td class="description">Mode - <code>CUPS_RASTER_READ</code>,
+<code>CUPS_RASTER_WRITE</code>,
+<code>CUPS_RASTER_WRITE_COMPRESSED</code>,
+or <code>CUPS_RASTER_WRITE_PWG</code></td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+        <p class="description">New stream</p>
+<h4 class="discussion">Discussion</h4>
+        <p class="discussion">This function associates a raster stream with the given file descriptor.
+For most printer driver filters, &quot;fd&quot; will be 0 (stdin).  For most raster
+image processor (RIP) filters that generate raster data, &quot;fd&quot; will be 1
+(stdout).<br>
+<br>
+When writing raster data, the <code>CUPS_RASTER_WRITE</code>,
+<code>CUPS_RASTER_WRITE_COMPRESS</code>, or <code>CUPS_RASTER_WRITE_PWG</code> mode can
+be used - compressed and PWG output is generally 25-50% smaller but adds a
+100-300% execution time overhead.</p>
+<h3 class="function"><a id="cupsRasterOpenIO">cupsRasterOpenIO</a></h3>
+        <p class="description">Open a raster stream using a callback function.</p>
+<p class="code">
+<a href="#cups_raster_t">cups_raster_t</a> *cupsRasterOpenIO(<a href="#cups_raster_iocb_t">cups_raster_iocb_t</a> iocb, void *ctx, <a href="#cups_mode_t">cups_mode_t</a> mode);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>iocb</th>
+        <td class="description">Read/write callback</td></tr>
+<tr><th>ctx</th>
+        <td class="description">Context pointer for callback</td></tr>
+<tr><th>mode</th>
+        <td class="description">Mode - <code>CUPS_RASTER_READ</code>,
+<code>CUPS_RASTER_WRITE</code>,
+<code>CUPS_RASTER_WRITE_COMPRESSED</code>,
+or <code>CUPS_RASTER_WRITE_PWG</code></td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+        <p class="description">New stream</p>
+<h4 class="discussion">Discussion</h4>
+        <p class="discussion">This function associates a raster stream with the given callback function and
+context pointer.<br>
+<br>
+When writing raster data, the <code>CUPS_RASTER_WRITE</code>,
+<code>CUPS_RASTER_WRITE_COMPRESS</code>, or <code>CUPS_RASTER_WRITE_PWG</code> mode can
+be used - compressed and PWG output is generally 25-50% smaller but adds a
+100-300% execution time overhead.</p>
+<h3 class="function"><span class="info">&#160;DEPRECATED&#160;</span><a id="cupsRasterReadHeader">cupsRasterReadHeader</a></h3>
+        <p class="description">Read a raster page header and store it in a
+version 1 page header structure.</p>
+<p class="code">
+unsigned cupsRasterReadHeader(<a href="#cups_raster_t">cups_raster_t</a> *r, <a href="#cups_page_header_t">cups_page_header_t</a> *h);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>r</th>
+        <td class="description">Raster stream</td></tr>
+<tr><th>h</th>
+        <td class="description">Pointer to header data</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+        <p class="description">1 on success, 0 on failure/end-of-file</p>
+<h4 class="discussion">Discussion</h4>
+        <p class="discussion">This function is deprecated. Use <a href="#cupsRasterReadHeader2"><code>cupsRasterReadHeader2</code></a> instead.<br>
+<br>
+Version 1 page headers were used in CUPS 1.0 and 1.1 and contain a subset
+of the version 2 page header data. This function handles reading version 2
+page headers and copying only the version 1 data into the provided buffer.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="cupsRasterReadHeader2">cupsRasterReadHeader2</a></h3>
+        <p class="description">Read a raster page header and store it in a
+version 2 page header structure.</p>
+<p class="code">
+unsigned cupsRasterReadHeader2(<a href="#cups_raster_t">cups_raster_t</a> *r, <a href="#cups_page_header2_t">cups_page_header2_t</a> *h);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>r</th>
+        <td class="description">Raster stream</td></tr>
+<tr><th>h</th>
+        <td class="description">Pointer to header data</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+        <p class="description">1 on success, 0 on failure/end-of-file</p>
+<h3 class="function"><a id="cupsRasterReadPixels">cupsRasterReadPixels</a></h3>
+        <p class="description">Read raster pixels.</p>
+<p class="code">
+unsigned cupsRasterReadPixels(<a href="#cups_raster_t">cups_raster_t</a> *r, unsigned char *p, unsigned len);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>r</th>
+        <td class="description">Raster stream</td></tr>
+<tr><th>p</th>
+        <td class="description">Pointer to pixel buffer</td></tr>
+<tr><th>len</th>
+        <td class="description">Number of bytes to read</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+        <p class="description">Number of bytes read</p>
+<h4 class="discussion">Discussion</h4>
+        <p class="discussion">For best performance, filters should read one or more whole lines.
+The &quot;cupsBytesPerLine&quot; value from the page header can be used to allocate
+the line buffer and as the number of bytes to read.</p>
+<h3 class="function"><span class="info">&#160;DEPRECATED&#160;</span><a id="cupsRasterWriteHeader">cupsRasterWriteHeader</a></h3>
+        <p class="description">Write a raster page header from a version 1 page
+header structure.</p>
+<p class="code">
+unsigned cupsRasterWriteHeader(<a href="#cups_raster_t">cups_raster_t</a> *r, <a href="#cups_page_header_t">cups_page_header_t</a> *h);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>r</th>
+        <td class="description">Raster stream</td></tr>
+<tr><th>h</th>
+        <td class="description">Raster page header</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+        <p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+        <p class="discussion">This function is deprecated. Use <a href="#cupsRasterWriteHeader2"><code>cupsRasterWriteHeader2</code></a> instead.
+
+</p>
+<h3 class="function"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="cupsRasterWriteHeader2">cupsRasterWriteHeader2</a></h3>
+        <p class="description">Write a raster page header from a version 2
+page header structure.</p>
+<p class="code">
+unsigned cupsRasterWriteHeader2(<a href="#cups_raster_t">cups_raster_t</a> *r, <a href="#cups_page_header2_t">cups_page_header2_t</a> *h);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>r</th>
+        <td class="description">Raster stream</td></tr>
+<tr><th>h</th>
+        <td class="description">Raster page header</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+        <p class="description">1 on success, 0 on failure</p>
+<h4 class="discussion">Discussion</h4>
+        <p class="discussion">The page header can be initialized using <a href="#cupsRasterInitPWGHeader"><code>cupsRasterInitPWGHeader</code></a>.
+
+</p>
+<h3 class="function"><a id="cupsRasterWritePixels">cupsRasterWritePixels</a></h3>
+        <p class="description">Write raster pixels.</p>
+<p class="code">
+unsigned cupsRasterWritePixels(<a href="#cups_raster_t">cups_raster_t</a> *r, unsigned char *p, unsigned len);</p>
+<h4 class="parameters">Parameters</h4>
+<table class="list"><tbody>
+<tr><th>r</th>
+        <td class="description">Raster stream</td></tr>
+<tr><th>p</th>
+        <td class="description">Bytes to write</td></tr>
+<tr><th>len</th>
+        <td class="description">Number of bytes to write</td></tr>
+</tbody></table>
+<h4 class="returnvalue">Return Value</h4>
+        <p class="description">Number of bytes written</p>
+<h4 class="discussion">Discussion</h4>
+        <p class="discussion">For best performance, filters should write one or more whole lines.
+The &quot;cupsBytesPerLine&quot; value from the page header can be used to allocate
+the line buffer and as the number of bytes to write.</p>
+      <h2 class="title"><a id="TYPES">Data Types</a></h2>
+      <h3 class="typedef"><a id="cups_adv_t">cups_adv_t</a></h3>
+        <p class="description">AdvanceMedia attribute values</p>
+      <p class="code">
+typedef enum <a href="#cups_adv_e">cups_adv_e</a> cups_adv_t;
+</p>
+      <h3 class="typedef"><a id="cups_bool_t">cups_bool_t</a></h3>
+        <p class="description">Boolean type</p>
+      <p class="code">
+typedef enum <a href="#cups_bool_e">cups_bool_e</a> cups_bool_t;
+</p>
+      <h3 class="typedef"><a id="cups_cspace_t">cups_cspace_t</a></h3>
+        <p class="description">cupsColorSpace attribute values</p>
+      <p class="code">
+typedef enum <a href="#cups_cspace_e">cups_cspace_e</a> cups_cspace_t;
+</p>
+      <h3 class="typedef"><a id="cups_cut_t">cups_cut_t</a></h3>
+        <p class="description">CutMedia attribute values</p>
+      <p class="code">
+typedef enum <a href="#cups_cut_e">cups_cut_e</a> cups_cut_t;
+</p>
+      <h3 class="typedef"><a id="cups_edge_t">cups_edge_t</a></h3>
+        <p class="description">LeadingEdge attribute values</p>
+      <p class="code">
+typedef enum <a href="#cups_edge_e">cups_edge_e</a> cups_edge_t;
+</p>
+      <h3 class="typedef"><a id="cups_interpret_cb_t">cups_interpret_cb_t</a></h3>
+        <p class="description">cupsRasterInterpretPPD callback function</p>
+      <p class="code">
+typedef int (*cups_interpret_cb_t)(<a href="#cups_page_header2_t">cups_page_header2_t</a> *header, int preferred_bits);
+</p>
+      <h3 class="typedef"><a id="cups_jog_t">cups_jog_t</a></h3>
+        <p class="description">Jog attribute values</p>
+      <p class="code">
+typedef enum <a href="#cups_jog_e">cups_jog_e</a> cups_jog_t;
+</p>
+      <h3 class="typedef"><a id="cups_mode_t">cups_mode_t</a></h3>
+        <p class="description">cupsRasterOpen modes</p>
+      <p class="code">
+typedef enum <a href="#cups_mode_e">cups_mode_e</a> cups_mode_t;
+</p>
+      <h3 class="typedef"><a id="cups_order_t">cups_order_t</a></h3>
+        <p class="description">cupsColorOrder attribute values</p>
+      <p class="code">
+typedef enum <a href="#cups_order_e">cups_order_e</a> cups_order_t;
+</p>
+      <h3 class="typedef"><a id="cups_orient_t">cups_orient_t</a></h3>
+        <p class="description">Orientation attribute values</p>
+      <p class="code">
+typedef enum <a href="#cups_orient_e">cups_orient_e</a> cups_orient_t;
+</p>
+      <h3 class="typedef"><a id="cups_page_header2_t"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span>cups_page_header2_t</a></h3>
+        <p class="description">Version 2 page header </p>
+      <p class="code">
+typedef struct <a href="#cups_page_header2_s">cups_page_header2_s</a> cups_page_header2_t;
+</p>
+      <h3 class="typedef"><a id="cups_page_header_t"><span class="info">&#160;DEPRECATED&#160;</span>cups_page_header_t</a></h3>
+        <p class="description">Version 1 page header </p>
+      <p class="code">
+typedef struct <a href="#cups_page_header_s">cups_page_header_s</a> cups_page_header_t;
+</p>
+      <h3 class="typedef"><a id="cups_raster_iocb_t">cups_raster_iocb_t</a></h3>
+        <p class="description">cupsRasterOpenIO callback function</p>
+      <p class="code">
+typedef ssize_t (*cups_raster_iocb_t)(void *ctx, unsigned char *buffer, size_t length);
+</p>
+      <h3 class="typedef"><a id="cups_raster_t">cups_raster_t</a></h3>
+        <p class="description">Raster stream data</p>
+      <p class="code">
 typedef struct _cups_raster_s cups_raster_t;
-</tt></p>
-</body>
+</p>
+      <h2 class="title"><a id="STRUCTURES">Structures</a></h2>
+<h3 class="struct"><span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span><a id="cups_page_header2_s">cups_page_header2_s</a></h3>
+        <p class="description">Version 2 page header </p>
+<p class="code">struct cups_page_header2_s {<br>
+&#160;&#160;&#160;&#160;unsigned AdvanceDistance;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_adv_t">cups_adv_t</a> AdvanceMedia;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> Collate;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_cut_t">cups_cut_t</a> CutMedia;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> Duplex;<br>
+&#160;&#160;&#160;&#160;unsigned HWResolution[2];<br>
+&#160;&#160;&#160;&#160;unsigned ImagingBoundingBox[4];<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> InsertSheet;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_jog_t">cups_jog_t</a> Jog;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_edge_t">cups_edge_t</a> LeadingEdge;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> ManualFeed;<br>
+&#160;&#160;&#160;&#160;unsigned Margins[2];<br>
+&#160;&#160;&#160;&#160;char MediaClass[64];<br>
+&#160;&#160;&#160;&#160;char MediaColor[64];<br>
+&#160;&#160;&#160;&#160;unsigned MediaPosition;<br>
+&#160;&#160;&#160;&#160;char MediaType[64];<br>
+&#160;&#160;&#160;&#160;unsigned MediaWeight;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> MirrorPrint;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> NegativePrint;<br>
+&#160;&#160;&#160;&#160;unsigned NumCopies;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_orient_t">cups_orient_t</a> Orientation;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> OutputFaceUp;<br>
+&#160;&#160;&#160;&#160;char OutputType[64];<br>
+&#160;&#160;&#160;&#160;unsigned PageSize[2];<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> Separations;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> TraySwitch;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> Tumble;<br>
+&#160;&#160;&#160;&#160;unsigned cupsBitsPerColor;<br>
+&#160;&#160;&#160;&#160;unsigned cupsBitsPerPixel;<br>
+&#160;&#160;&#160;&#160;float cupsBorderlessScalingFactor;<br>
+&#160;&#160;&#160;&#160;unsigned cupsBytesPerLine;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_order_t">cups_order_t</a> cupsColorOrder;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_cspace_t">cups_cspace_t</a> cupsColorSpace;<br>
+&#160;&#160;&#160;&#160;unsigned cupsCompression;<br>
+&#160;&#160;&#160;&#160;unsigned cupsHeight;<br>
+&#160;&#160;&#160;&#160;float cupsImagingBBox[4];<br>
+&#160;&#160;&#160;&#160;unsigned cupsInteger[16];<br>
+&#160;&#160;&#160;&#160;char cupsMarkerType[64];<br>
+&#160;&#160;&#160;&#160;unsigned cupsMediaType;<br>
+&#160;&#160;&#160;&#160;unsigned cupsNumColors;<br>
+&#160;&#160;&#160;&#160;char cupsPageSizeName[64];<br>
+&#160;&#160;&#160;&#160;float cupsPageSize[2];<br>
+&#160;&#160;&#160;&#160;float cupsReal[16];<br>
+&#160;&#160;&#160;&#160;char cupsRenderingIntent[64];<br>
+&#160;&#160;&#160;&#160;unsigned cupsRowCount;<br>
+&#160;&#160;&#160;&#160;unsigned cupsRowFeed;<br>
+&#160;&#160;&#160;&#160;unsigned cupsRowStep;<br>
+&#160;&#160;&#160;&#160;char cupsString[16][64];<br>
+&#160;&#160;&#160;&#160;unsigned cupsWidth;<br>
+};</p>
+<h4 class="members">Members</h4>
+<table class="list"><tbody>
+<tr><th>AdvanceDistance </th>
+        <td class="description">AdvanceDistance value in points</td></tr>
+<tr><th>AdvanceMedia </th>
+        <td class="description">AdvanceMedia value (<a href="#cups_adv_t"><code>cups_adv_t</code></a>)</td></tr>
+<tr><th>Collate </th>
+        <td class="description">Collated copies value</td></tr>
+<tr><th>CutMedia </th>
+        <td class="description">CutMedia value (<a href="#cups_cut_t"><code>cups_cut_t</code></a>)</td></tr>
+<tr><th>Duplex </th>
+        <td class="description">Duplexed (double-sided) value</td></tr>
+<tr><th>HWResolution[2] </th>
+        <td class="description">Resolution in dots-per-inch</td></tr>
+<tr><th>ImagingBoundingBox[4] </th>
+        <td class="description">Pixel region that is painted (points, left, bottom, right, top)</td></tr>
+<tr><th>InsertSheet </th>
+        <td class="description">InsertSheet value</td></tr>
+<tr><th>Jog </th>
+        <td class="description">Jog value (<a href="#cups_jog_t"><code>cups_jog_t</code></a>)</td></tr>
+<tr><th>LeadingEdge </th>
+        <td class="description">LeadingEdge value (<a href="#cups_edge_t"><code>cups_edge_t</code></a>)</td></tr>
+<tr><th>ManualFeed </th>
+        <td class="description">ManualFeed value</td></tr>
+<tr><th>Margins[2] </th>
+        <td class="description">Lower-lefthand margins in points</td></tr>
+<tr><th>MediaClass[64] </th>
+        <td class="description">MediaClass string</td></tr>
+<tr><th>MediaColor[64] </th>
+        <td class="description">MediaColor string</td></tr>
+<tr><th>MediaPosition </th>
+        <td class="description">MediaPosition value</td></tr>
+<tr><th>MediaType[64] </th>
+        <td class="description">MediaType string</td></tr>
+<tr><th>MediaWeight </th>
+        <td class="description">MediaWeight value in grams/m^2</td></tr>
+<tr><th>MirrorPrint </th>
+        <td class="description">MirrorPrint value</td></tr>
+<tr><th>NegativePrint </th>
+        <td class="description">NegativePrint value</td></tr>
+<tr><th>NumCopies </th>
+        <td class="description">Number of copies to produce</td></tr>
+<tr><th>Orientation </th>
+        <td class="description">Orientation value (<a href="#cups_orient_t"><code>cups_orient_t</code></a>)</td></tr>
+<tr><th>OutputFaceUp </th>
+        <td class="description">OutputFaceUp value</td></tr>
+<tr><th>OutputType[64] </th>
+        <td class="description">OutputType string</td></tr>
+<tr><th>PageSize[2] </th>
+        <td class="description">Width and length of page in points</td></tr>
+<tr><th>Separations </th>
+        <td class="description">Separations value</td></tr>
+<tr><th>TraySwitch </th>
+        <td class="description">TraySwitch value</td></tr>
+<tr><th>Tumble </th>
+        <td class="description">Tumble value</td></tr>
+<tr><th>cupsBitsPerColor </th>
+        <td class="description">Number of bits for each color</td></tr>
+<tr><th>cupsBitsPerPixel </th>
+        <td class="description">Number of bits for each pixel</td></tr>
+<tr><th>cupsBorderlessScalingFactor <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
+        <td class="description">Scaling that was applied to page data </td></tr>
+<tr><th>cupsBytesPerLine </th>
+        <td class="description">Number of bytes per line</td></tr>
+<tr><th>cupsColorOrder </th>
+        <td class="description">Order of colors</td></tr>
+<tr><th>cupsColorSpace </th>
+        <td class="description">True colorspace</td></tr>
+<tr><th>cupsCompression </th>
+        <td class="description">Device compression to use</td></tr>
+<tr><th>cupsHeight </th>
+        <td class="description">Height of page image in pixels</td></tr>
+<tr><th>cupsImagingBBox[4] <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
+        <td class="description">Floating point ImagingBoundingBox
+(scaling factor not applied, left,
+bottom, right, top) </td></tr>
+<tr><th>cupsInteger[16] <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
+        <td class="description">User-defined integer values </td></tr>
+<tr><th>cupsMarkerType[64] <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
+        <td class="description">Ink/toner type </td></tr>
+<tr><th>cupsMediaType </th>
+        <td class="description">Media type code</td></tr>
+<tr><th>cupsNumColors <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
+        <td class="description">Number of color compoents </td></tr>
+<tr><th>cupsPageSizeName[64] <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
+        <td class="description">PageSize name </td></tr>
+<tr><th>cupsPageSize[2] <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
+        <td class="description">Floating point PageSize (scaling *
+factor not applied) </td></tr>
+<tr><th>cupsReal[16] <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
+        <td class="description">User-defined floating-point values </td></tr>
+<tr><th>cupsRenderingIntent[64] <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
+        <td class="description">Color rendering intent </td></tr>
+<tr><th>cupsRowCount </th>
+        <td class="description">Rows per band</td></tr>
+<tr><th>cupsRowFeed </th>
+        <td class="description">Feed between bands</td></tr>
+<tr><th>cupsRowStep </th>
+        <td class="description">Spacing between lines</td></tr>
+<tr><th>cupsString[16][64] <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>
+        <td class="description">User-defined string values </td></tr>
+<tr><th>cupsWidth </th>
+        <td class="description">Width of page image in pixels</td></tr>
+</tbody></table>
+<h3 class="struct"><span class="info">&#160;DEPRECATED&#160;</span><a id="cups_page_header_s">cups_page_header_s</a></h3>
+        <p class="description">Version 1 page header </p>
+<p class="code">struct cups_page_header_s {<br>
+&#160;&#160;&#160;&#160;unsigned AdvanceDistance;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_adv_t">cups_adv_t</a> AdvanceMedia;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> Collate;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_cut_t">cups_cut_t</a> CutMedia;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> Duplex;<br>
+&#160;&#160;&#160;&#160;unsigned HWResolution[2];<br>
+&#160;&#160;&#160;&#160;unsigned ImagingBoundingBox[4];<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> InsertSheet;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_jog_t">cups_jog_t</a> Jog;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_edge_t">cups_edge_t</a> LeadingEdge;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> ManualFeed;<br>
+&#160;&#160;&#160;&#160;unsigned Margins[2];<br>
+&#160;&#160;&#160;&#160;char MediaClass[64];<br>
+&#160;&#160;&#160;&#160;char MediaColor[64];<br>
+&#160;&#160;&#160;&#160;unsigned MediaPosition;<br>
+&#160;&#160;&#160;&#160;char MediaType[64];<br>
+&#160;&#160;&#160;&#160;unsigned MediaWeight;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> MirrorPrint;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> NegativePrint;<br>
+&#160;&#160;&#160;&#160;unsigned NumCopies;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_orient_t">cups_orient_t</a> Orientation;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> OutputFaceUp;<br>
+&#160;&#160;&#160;&#160;char OutputType[64];<br>
+&#160;&#160;&#160;&#160;unsigned PageSize[2];<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> Separations;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> TraySwitch;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_bool_t">cups_bool_t</a> Tumble;<br>
+&#160;&#160;&#160;&#160;unsigned cupsBitsPerColor;<br>
+&#160;&#160;&#160;&#160;unsigned cupsBitsPerPixel;<br>
+&#160;&#160;&#160;&#160;unsigned cupsBytesPerLine;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_order_t">cups_order_t</a> cupsColorOrder;<br>
+&#160;&#160;&#160;&#160;<a href="#cups_cspace_t">cups_cspace_t</a> cupsColorSpace;<br>
+&#160;&#160;&#160;&#160;unsigned cupsCompression;<br>
+&#160;&#160;&#160;&#160;unsigned cupsHeight;<br>
+&#160;&#160;&#160;&#160;unsigned cupsMediaType;<br>
+&#160;&#160;&#160;&#160;unsigned cupsRowCount;<br>
+&#160;&#160;&#160;&#160;unsigned cupsRowFeed;<br>
+&#160;&#160;&#160;&#160;unsigned cupsRowStep;<br>
+&#160;&#160;&#160;&#160;unsigned cupsWidth;<br>
+};</p>
+<h4 class="members">Members</h4>
+<table class="list"><tbody>
+<tr><th>AdvanceDistance </th>
+        <td class="description">AdvanceDistance value in points</td></tr>
+<tr><th>AdvanceMedia </th>
+        <td class="description">AdvanceMedia value (<a href="#cups_adv_t"><code>cups_adv_t</code></a>)</td></tr>
+<tr><th>Collate </th>
+        <td class="description">Collated copies value</td></tr>
+<tr><th>CutMedia </th>
+        <td class="description">CutMedia value (<a href="#cups_cut_t"><code>cups_cut_t</code></a>)</td></tr>
+<tr><th>Duplex </th>
+        <td class="description">Duplexed (double-sided) value</td></tr>
+<tr><th>HWResolution[2] </th>
+        <td class="description">Resolution in dots-per-inch</td></tr>
+<tr><th>ImagingBoundingBox[4] </th>
+        <td class="description">Pixel region that is painted (points, left, bottom, right, top)</td></tr>
+<tr><th>InsertSheet </th>
+        <td class="description">InsertSheet value</td></tr>
+<tr><th>Jog </th>
+        <td class="description">Jog value (<a href="#cups_jog_t"><code>cups_jog_t</code></a>)</td></tr>
+<tr><th>LeadingEdge </th>
+        <td class="description">LeadingEdge value (<a href="#cups_edge_t"><code>cups_edge_t</code></a>)</td></tr>
+<tr><th>ManualFeed </th>
+        <td class="description">ManualFeed value</td></tr>
+<tr><th>Margins[2] </th>
+        <td class="description">Lower-lefthand margins in points</td></tr>
+<tr><th>MediaClass[64] </th>
+        <td class="description">MediaClass string</td></tr>
+<tr><th>MediaColor[64] </th>
+        <td class="description">MediaColor string</td></tr>
+<tr><th>MediaPosition </th>
+        <td class="description">MediaPosition value</td></tr>
+<tr><th>MediaType[64] </th>
+        <td class="description">MediaType string</td></tr>
+<tr><th>MediaWeight </th>
+        <td class="description">MediaWeight value in grams/m^2</td></tr>
+<tr><th>MirrorPrint </th>
+        <td class="description">MirrorPrint value</td></tr>
+<tr><th>NegativePrint </th>
+        <td class="description">NegativePrint value</td></tr>
+<tr><th>NumCopies </th>
+        <td class="description">Number of copies to produce</td></tr>
+<tr><th>Orientation </th>
+        <td class="description">Orientation value (<a href="#cups_orient_t"><code>cups_orient_t</code></a>)</td></tr>
+<tr><th>OutputFaceUp </th>
+        <td class="description">OutputFaceUp value</td></tr>
+<tr><th>OutputType[64] </th>
+        <td class="description">OutputType string</td></tr>
+<tr><th>PageSize[2] </th>
+        <td class="description">Width and length of page in points</td></tr>
+<tr><th>Separations </th>
+        <td class="description">Separations value</td></tr>
+<tr><th>TraySwitch </th>
+        <td class="description">TraySwitch value</td></tr>
+<tr><th>Tumble </th>
+        <td class="description">Tumble value</td></tr>
+<tr><th>cupsBitsPerColor </th>
+        <td class="description">Number of bits for each color</td></tr>
+<tr><th>cupsBitsPerPixel </th>
+        <td class="description">Number of bits for each pixel</td></tr>
+<tr><th>cupsBytesPerLine </th>
+        <td class="description">Number of bytes per line</td></tr>
+<tr><th>cupsColorOrder </th>
+        <td class="description">Order of colors</td></tr>
+<tr><th>cupsColorSpace </th>
+        <td class="description">True colorspace</td></tr>
+<tr><th>cupsCompression </th>
+        <td class="description">Device compression to use</td></tr>
+<tr><th>cupsHeight </th>
+        <td class="description">Height of page image in pixels</td></tr>
+<tr><th>cupsMediaType </th>
+        <td class="description">Media type code</td></tr>
+<tr><th>cupsRowCount </th>
+        <td class="description">Rows per band</td></tr>
+<tr><th>cupsRowFeed </th>
+        <td class="description">Feed between bands</td></tr>
+<tr><th>cupsRowStep </th>
+        <td class="description">Spacing between lines</td></tr>
+<tr><th>cupsWidth </th>
+        <td class="description">Width of page image in pixels</td></tr>
+</tbody></table>
+      <h2 class="title"><a id="ENUMERATIONS">Constants</a></h2>
+      <h3 class="enumeration"><a id="cups_adv_e">cups_adv_e</a></h3>
+        <p class="description">AdvanceMedia attribute values</p>
+      <h4 class="constants">Constants</h4>
+      <table class="list"><tbody>
+        <tr><th>CUPS_ADVANCE_FILE </th>        <td class="description">Advance the roll after this file</td></tr>
+        <tr><th>CUPS_ADVANCE_JOB </th>        <td class="description">Advance the roll after this job</td></tr>
+        <tr><th>CUPS_ADVANCE_NONE </th>        <td class="description">Never advance the roll</td></tr>
+        <tr><th>CUPS_ADVANCE_PAGE </th>        <td class="description">Advance the roll after this page</td></tr>
+        <tr><th>CUPS_ADVANCE_SET </th>        <td class="description">Advance the roll after this set</td></tr>
+</tbody></table>
+      <h3 class="enumeration"><a id="cups_bool_e">cups_bool_e</a></h3>
+        <p class="description">Boolean type</p>
+      <h4 class="constants">Constants</h4>
+      <table class="list"><tbody>
+        <tr><th>CUPS_FALSE </th>        <td class="description">Logical false</td></tr>
+        <tr><th>CUPS_TRUE </th>        <td class="description">Logical true</td></tr>
+</tbody></table>
+      <h3 class="enumeration"><a id="cups_cspace_e">cups_cspace_e</a></h3>
+        <p class="description">cupsColorSpace attribute values</p>
+      <h4 class="constants">Constants</h4>
+      <table class="list"><tbody>
+        <tr><th>CUPS_CSPACE_ADOBERGB <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">Red, green, blue (Adobe RGB) </td></tr>
+        <tr><th>CUPS_CSPACE_CIELab <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">CIE Lab </td></tr>
+        <tr><th>CUPS_CSPACE_CIEXYZ <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">CIE XYZ </td></tr>
+        <tr><th>CUPS_CSPACE_CMY </th>        <td class="description">Cyan, magenta, yellow (DeviceCMY)</td></tr>
+        <tr><th>CUPS_CSPACE_CMYK </th>        <td class="description">Cyan, magenta, yellow, black (DeviceCMYK)</td></tr>
+        <tr><th>CUPS_CSPACE_DEVICE1 <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 1 color </td></tr>
+        <tr><th>CUPS_CSPACE_DEVICE2 <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 2 colors </td></tr>
+        <tr><th>CUPS_CSPACE_DEVICE3 <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 3 colors </td></tr>
+        <tr><th>CUPS_CSPACE_DEVICE4 <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 4 colors </td></tr>
+        <tr><th>CUPS_CSPACE_DEVICE5 <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 5 colors </td></tr>
+        <tr><th>CUPS_CSPACE_DEVICE6 <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 6 colors </td></tr>
+        <tr><th>CUPS_CSPACE_DEVICE7 <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 7 colors </td></tr>
+        <tr><th>CUPS_CSPACE_DEVICE8 <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 8 colors </td></tr>
+        <tr><th>CUPS_CSPACE_DEVICE9 <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 9 colors </td></tr>
+        <tr><th>CUPS_CSPACE_DEVICEA <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 10 colors </td></tr>
+        <tr><th>CUPS_CSPACE_DEVICEB <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 11 colors </td></tr>
+        <tr><th>CUPS_CSPACE_DEVICEC <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 12 colors </td></tr>
+        <tr><th>CUPS_CSPACE_DEVICED <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 13 colors </td></tr>
+        <tr><th>CUPS_CSPACE_DEVICEE <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 14 colors </td></tr>
+        <tr><th>CUPS_CSPACE_DEVICEF <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">DeviceN, 15 colors </td></tr>
+        <tr><th>CUPS_CSPACE_GMCK <span class="info">&#160;DEPRECATED&#160;</span></th>        <td class="description">Gold, magenta, yellow, black </td></tr>
+        <tr><th>CUPS_CSPACE_GMCS <span class="info">&#160;DEPRECATED&#160;</span></th>        <td class="description">Gold, magenta, yellow, silver </td></tr>
+        <tr><th>CUPS_CSPACE_GOLD <span class="info">&#160;DEPRECATED&#160;</span></th>        <td class="description">Gold foil </td></tr>
+        <tr><th>CUPS_CSPACE_ICC1 <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 1 color </td></tr>
+        <tr><th>CUPS_CSPACE_ICC2 <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 2 colors </td></tr>
+        <tr><th>CUPS_CSPACE_ICC3 <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 3 colors </td></tr>
+        <tr><th>CUPS_CSPACE_ICC4 <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 4 colors </td></tr>
+        <tr><th>CUPS_CSPACE_ICC5 <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 5 colors </td></tr>
+        <tr><th>CUPS_CSPACE_ICC6 <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 6 colors </td></tr>
+        <tr><th>CUPS_CSPACE_ICC7 <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 7 colors </td></tr>
+        <tr><th>CUPS_CSPACE_ICC8 <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 8 colors </td></tr>
+        <tr><th>CUPS_CSPACE_ICC9 <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 9 colors </td></tr>
+        <tr><th>CUPS_CSPACE_ICCA <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 10 colors </td></tr>
+        <tr><th>CUPS_CSPACE_ICCB <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 11 colors </td></tr>
+        <tr><th>CUPS_CSPACE_ICCC <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 12 colors </td></tr>
+        <tr><th>CUPS_CSPACE_ICCD <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 13 colors </td></tr>
+        <tr><th>CUPS_CSPACE_ICCE <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 14 colors </td></tr>
+        <tr><th>CUPS_CSPACE_ICCF <span class="info">&#160;CUPS 1.1.19/macOS 10.3&#160;</span></th>        <td class="description">ICC-based, 15 colors </td></tr>
+        <tr><th>CUPS_CSPACE_K </th>        <td class="description">Black (DeviceK)</td></tr>
+        <tr><th>CUPS_CSPACE_KCMY <span class="info">&#160;DEPRECATED&#160;</span></th>        <td class="description">Black, cyan, magenta, yellow </td></tr>
+        <tr><th>CUPS_CSPACE_KCMYcm <span class="info">&#160;DEPRECATED&#160;</span></th>        <td class="description">Black, cyan, magenta, yellow, light-cyan, light-magenta </td></tr>
+        <tr><th>CUPS_CSPACE_RGB </th>        <td class="description">Red, green, blue (DeviceRGB, sRGB by default)</td></tr>
+        <tr><th>CUPS_CSPACE_RGBA </th>        <td class="description">Red, green, blue, alpha (DeviceRGB, sRGB by default)</td></tr>
+        <tr><th>CUPS_CSPACE_RGBW <span class="info">&#160;CUPS 1.2/macOS 10.5&#160;</span></th>        <td class="description">Red, green, blue, white (DeviceRGB, sRGB by default) </td></tr>
+        <tr><th>CUPS_CSPACE_SILVER <span class="info">&#160;DEPRECATED&#160;</span></th>        <td class="description">Silver foil </td></tr>
+        <tr><th>CUPS_CSPACE_SRGB <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">Red, green, blue (sRGB) </td></tr>
+        <tr><th>CUPS_CSPACE_SW <span class="info">&#160;CUPS 1.4.5&#160;</span></th>        <td class="description">Luminance (gamma 2.2) </td></tr>
+        <tr><th>CUPS_CSPACE_W </th>        <td class="description">Luminance (DeviceGray, gamma 2.2 by default)</td></tr>
+        <tr><th>CUPS_CSPACE_WHITE <span class="info">&#160;DEPRECATED&#160;</span></th>        <td class="description">White ink (as black) </td></tr>
+        <tr><th>CUPS_CSPACE_YMC <span class="info">&#160;DEPRECATED&#160;</span></th>        <td class="description">Yellow, magenta, cyan </td></tr>
+        <tr><th>CUPS_CSPACE_YMCK <span class="info">&#160;DEPRECATED&#160;</span></th>        <td class="description">Yellow, magenta, cyan, black </td></tr>
+</tbody></table>
+      <h3 class="enumeration"><a id="cups_cut_e">cups_cut_e</a></h3>
+        <p class="description">CutMedia attribute values</p>
+      <h4 class="constants">Constants</h4>
+      <table class="list"><tbody>
+        <tr><th>CUPS_CUT_FILE </th>        <td class="description">Cut the roll after this file</td></tr>
+        <tr><th>CUPS_CUT_JOB </th>        <td class="description">Cut the roll after this job</td></tr>
+        <tr><th>CUPS_CUT_NONE </th>        <td class="description">Never cut the roll</td></tr>
+        <tr><th>CUPS_CUT_PAGE </th>        <td class="description">Cut the roll after this page</td></tr>
+        <tr><th>CUPS_CUT_SET </th>        <td class="description">Cut the roll after this set</td></tr>
+</tbody></table>
+      <h3 class="enumeration"><a id="cups_edge_e">cups_edge_e</a></h3>
+        <p class="description">LeadingEdge attribute values</p>
+      <h4 class="constants">Constants</h4>
+      <table class="list"><tbody>
+        <tr><th>CUPS_EDGE_BOTTOM </th>        <td class="description">Leading edge is the bottom of the page</td></tr>
+        <tr><th>CUPS_EDGE_LEFT </th>        <td class="description">Leading edge is the left of the page</td></tr>
+        <tr><th>CUPS_EDGE_RIGHT </th>        <td class="description">Leading edge is the right of the page</td></tr>
+        <tr><th>CUPS_EDGE_TOP </th>        <td class="description">Leading edge is the top of the page</td></tr>
+</tbody></table>
+      <h3 class="enumeration"><a id="cups_jog_e">cups_jog_e</a></h3>
+        <p class="description">Jog attribute values</p>
+      <h4 class="constants">Constants</h4>
+      <table class="list"><tbody>
+        <tr><th>CUPS_JOG_FILE </th>        <td class="description">Move pages after this file</td></tr>
+        <tr><th>CUPS_JOG_JOB </th>        <td class="description">Move pages after this job</td></tr>
+        <tr><th>CUPS_JOG_NONE </th>        <td class="description">Never move pages</td></tr>
+        <tr><th>CUPS_JOG_SET </th>        <td class="description">Move pages after this set</td></tr>
+</tbody></table>
+      <h3 class="enumeration"><a id="cups_mode_e">cups_mode_e</a></h3>
+        <p class="description">cupsRasterOpen modes</p>
+      <h4 class="constants">Constants</h4>
+      <table class="list"><tbody>
+        <tr><th>CUPS_RASTER_READ </th>        <td class="description">Open stream for reading</td></tr>
+        <tr><th>CUPS_RASTER_WRITE </th>        <td class="description">Open stream for writing</td></tr>
+        <tr><th>CUPS_RASTER_WRITE_COMPRESSED <span class="info">&#160;CUPS 1.3/macOS 10.5&#160;</span></th>        <td class="description">Open stream for compressed writing </td></tr>
+        <tr><th>CUPS_RASTER_WRITE_PWG <span class="info">&#160;CUPS 1.5/macOS 10.7&#160;</span></th>        <td class="description">Open stream for compressed writing in PWG Raster mode </td></tr>
+</tbody></table>
+      <h3 class="enumeration"><a id="cups_order_e">cups_order_e</a></h3>
+        <p class="description">cupsColorOrder attribute values</p>
+      <h4 class="constants">Constants</h4>
+      <table class="list"><tbody>
+        <tr><th>CUPS_ORDER_BANDED </th>        <td class="description">CCC MMM YYY KKK ...</td></tr>
+        <tr><th>CUPS_ORDER_CHUNKED </th>        <td class="description">CMYK CMYK CMYK ...</td></tr>
+        <tr><th>CUPS_ORDER_PLANAR </th>        <td class="description">CCC ... MMM ... YYY ... KKK ...</td></tr>
+</tbody></table>
+      <h3 class="enumeration"><a id="cups_orient_e">cups_orient_e</a></h3>
+        <p class="description">Orientation attribute values</p>
+      <h4 class="constants">Constants</h4>
+      <table class="list"><tbody>
+        <tr><th>CUPS_ORIENT_0 </th>        <td class="description">Don't rotate the page</td></tr>
+        <tr><th>CUPS_ORIENT_180 </th>        <td class="description">Turn the page upside down</td></tr>
+        <tr><th>CUPS_ORIENT_270 </th>        <td class="description">Rotate the page clockwise</td></tr>
+        <tr><th>CUPS_ORIENT_90 </th>        <td class="description">Rotate the page counter-clockwise</td></tr>
+</tbody></table>
+    </div>
+  </body>
 </html>