]> git.ipfire.org Git - thirdparty/cups.git/blame - doc/help/api-ppd.html
Load cups into easysw/current.
[thirdparty/cups.git] / doc / help / api-ppd.html
CommitLineData
ef416fc2 1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
2<html>
3<!-- SECTION: Programming -->
4<head>
5 <title>PPD API</title>
6 <meta name='keywords' content='Programming'>
7 <meta name='creator' content='Mini-XML v2.3'>
8 <style type='text/css'><!--
9 h1, h2, h3, p { font-family: sans-serif; text-align: justify; }
10 tt, pre a:link, pre a:visited, tt a:link, tt a:visited { font-weight: bold; color: #7f0000; }
11 pre { font-weight: bold; color: #7f0000; margin-left: 2em; }
12 span.info { background: #000000; border: solid thin #000000; color: #ffffff; font-size: 80%; font-style: italic; font-weight: bold; white-space: nowrap; }
13 h3 span.info { float: right; font-size: 100%; }
14 h1.title, h2.title, h3.title { border-bottom: solid 2px #000000; }
15 --></style>
16</head>
17<body>
18<!--
f7faf1f5 19 "$Id: api-ppd.shtml 5138 2006-02-21 10:49:06Z mike $"
ef416fc2 20
21 PPD API introduction for the Common UNIX Printing System (CUPS).
22
b423cd4c 23 Copyright 1997-2006 by Easy Software Products.
ef416fc2 24
25 These coded instructions, statements, and computer programs are the
26 property of Easy Software Products and are protected by Federal
27 copyright law. Distribution and use rights are outlined in the file
28 "LICENSE.txt" which should have been included with this file. If this
29 file is missing or damaged please contact Easy Software Products
30 at:
31
32 Attn: CUPS Licensing Information
33 Easy Software Products
34 44141 Airport View Drive, Suite 204
35 Hollywood, Maryland 20636 USA
36
37 Voice: (301) 373-9600
38 EMail: cups-info@cups.org
39 WWW: http://www.cups.org
40-->
41
42<h2 class='title'>Introduction</h2>
43
b423cd4c 44<p>The CUPS PPD API provides read-only access the data in
45PostScript Printer Description ("PPD") files. With it you can
46display printer options to users, mark option choices and check
47for conflicting choices, and output marked choices in PostScript
48output.</p>
ef416fc2 49
50<h2 class='title'>General Usage</h2>
51
52<p>The <var>&lt;cups/ppd.h&gt;</var> header file must be included
53to use the <tt>ppd</tt> functions.</p>
54
55<p>Programs using these functions must be linked to the CUPS
56library: <var>libcups.a</var>, <var>libcups.so.2</var>,
57<var>libcups.2.dylib</var>, <var>libcups_s.a</var>, or
58<var>libcups2.lib</var> depending on the platform. The following
59command compiles <var>myprogram.c</var> using GCC and the CUPS
60library:</p>
61
62<pre class='command'>
63<kbd>gcc -o myprogram myprogram.c -lcups</kbd>
64</pre>
65
66<h2 class='title'>Compatibility</h2>
67
68<p>Unless otherwise specified, the PPD API functions require CUPS
691.1 or higher.</p>
70<h2 class='title'>Contents</h2>
71<ul>
72 <li><a href='#ENUMERATIONS'>Enumerations</a></li>
73 <li><a href='#FUNCTIONS'>Functions</a></li>
74 <li><a href='#STRUCTURES'>Structures</a></li>
75 <li><a href='#TYPES'>Types</a></li>
76 <li><a href='#UNIONS'>Unions</a></li>
77</ul>
78<!-- NEW PAGE -->
79<h2 class='title'><a name='ENUMERATIONS'>Enumerations</a></h2>
80<ul>
ecdc0628 81 <li><a href='#ppd_cptype_e'><tt>ppd_cptype_e</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
ef416fc2 82 <li><a href='#ppd_cs_e'><tt>ppd_cs_e</tt></a> </li>
ef416fc2 83 <li><a href='#ppd_section_e'><tt>ppd_section_e</tt></a> </li>
84 <li><a href='#ppd_status_e'><tt>ppd_status_e</tt></a> </li>
85 <li><a href='#ppd_ui_e'><tt>ppd_ui_e</tt></a> </li>
86</ul>
87<!-- NEW PAGE -->
ecdc0628 88<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ppd_cptype_e'>ppd_cptype_e</a></h3>
89<h4>Description</h4>
90<p>Custom Parameter Type </p>
91<h4>Values</h4>
92<div class='table'><table align='center' border='1' width='80%'>
93<thead><tr><th>Name</th><th>Description</th></tr></thead>
94<tbody>
95<tr><td><tt>PPD_CUSTOM_CURVE</tt> </td><td>Curve value for f(x) = x^value</td></tr>
96<tr><td><tt>PPD_CUSTOM_INT</tt> </td><td>Integer number value</td></tr>
97<tr><td><tt>PPD_CUSTOM_INVCURVE</tt> </td><td>Curve value for f(x) = x^(1/value)</td></tr>
98<tr><td><tt>PPD_CUSTOM_PASSCODE</tt> </td><td>String of (hidden) numbers</td></tr>
99<tr><td><tt>PPD_CUSTOM_PASSWORD</tt> </td><td>String of (hidden) characters</td></tr>
100<tr><td><tt>PPD_CUSTOM_POINTS</tt> </td><td>Measurement value in points</td></tr>
101<tr><td><tt>PPD_CUSTOM_REAL</tt> </td><td>Real number value</td></tr>
102<tr><td><tt>PPD_CUSTOM_STRING</tt> </td><td>String of characters</td></tr>
103</tbody></table></div>
104<!-- NEW PAGE -->
ef416fc2 105<h3 class='title'><a name='ppd_cs_e'>ppd_cs_e</a></h3>
106<h4>Description</h4>
107<p>Colorspaces</p>
108<h4>Values</h4>
109<div class='table'><table align='center' border='1' width='80%'>
110<thead><tr><th>Name</th><th>Description</th></tr></thead>
111<tbody>
112<tr><td><tt>PPD_CS_CMY</tt> </td><td>CMY colorspace</td></tr>
113<tr><td><tt>PPD_CS_CMYK</tt> </td><td>CMYK colorspace</td></tr>
114<tr><td><tt>PPD_CS_GRAY</tt> </td><td>Grayscale colorspace</td></tr>
115<tr><td><tt>PPD_CS_N</tt> </td><td>DeviceN colorspace</td></tr>
116<tr><td><tt>PPD_CS_RGB</tt> </td><td>RGB colorspace</td></tr>
117<tr><td><tt>PPD_CS_RGBK</tt> </td><td>RGBK (K = gray) colorspace</td></tr>
118</tbody></table></div>
119<!-- NEW PAGE -->
ef416fc2 120<h3 class='title'><a name='ppd_section_e'>ppd_section_e</a></h3>
121<h4>Description</h4>
122<p>Order dependency sections</p>
123<h4>Values</h4>
124<div class='table'><table align='center' border='1' width='80%'>
125<thead><tr><th>Name</th><th>Description</th></tr></thead>
126<tbody>
127<tr><td><tt>PPD_ORDER_ANY</tt> </td><td>Option code can be anywhere in the file</td></tr>
128<tr><td><tt>PPD_ORDER_DOCUMENT</tt> </td><td>... must be in the DocumentSetup section</td></tr>
129<tr><td><tt>PPD_ORDER_EXIT</tt> </td><td>... must be sent prior to the document</td></tr>
130<tr><td><tt>PPD_ORDER_JCL</tt> </td><td>... must be sent as a JCL command</td></tr>
131<tr><td><tt>PPD_ORDER_PAGE</tt> </td><td>... must be in the PageSetup section</td></tr>
132<tr><td><tt>PPD_ORDER_PROLOG</tt> </td><td>... must be in the Prolog section</td></tr>
133</tbody></table></div>
134<!-- NEW PAGE -->
135<h3 class='title'><a name='ppd_status_e'>ppd_status_e</a></h3>
136<h4>Description</h4>
137<p>Types and structures...</p>
138<h4>Values</h4>
139<div class='table'><table align='center' border='1' width='80%'>
140<thead><tr><th>Name</th><th>Description</th></tr></thead>
141<tbody>
142<tr><td><tt>PPD_ALLOC_ERROR</tt> </td><td>Memory allocation error</td></tr>
ecdc0628 143<tr><td><tt>PPD_BAD_CUSTOM_PARAM</tt> </td><td>Bad custom parameter</td></tr>
ef416fc2 144<tr><td><tt>PPD_BAD_OPEN_GROUP</tt> </td><td>Bad OpenGroup</td></tr>
145<tr><td><tt>PPD_BAD_OPEN_UI</tt> </td><td>Bad OpenUI/JCLOpenUI</td></tr>
146<tr><td><tt>PPD_BAD_ORDER_DEPENDENCY</tt> </td><td>Bad OrderDependency</td></tr>
147<tr><td><tt>PPD_BAD_UI_CONSTRAINTS</tt> </td><td>Bad UIConstraints</td></tr>
148<tr><td><tt>PPD_FILE_OPEN_ERROR</tt> </td><td>Unable to open PPD file</td></tr>
149<tr><td><tt>PPD_ILLEGAL_CHARACTER</tt> </td><td>Illegal control character</td></tr>
150<tr><td><tt>PPD_ILLEGAL_MAIN_KEYWORD</tt> </td><td>Illegal main keyword string</td></tr>
151<tr><td><tt>PPD_ILLEGAL_OPTION_KEYWORD</tt> </td><td>Illegal option keyword string</td></tr>
152<tr><td><tt>PPD_ILLEGAL_TRANSLATION</tt> </td><td>Illegal translation string</td></tr>
153<tr><td><tt>PPD_ILLEGAL_WHITESPACE</tt> </td><td>Illegal whitespace character</td></tr>
154<tr><td><tt>PPD_INTERNAL_ERROR</tt> </td><td>Internal error</td></tr>
155<tr><td><tt>PPD_LINE_TOO_LONG</tt> </td><td>Line longer than 255 chars</td></tr>
156<tr><td><tt>PPD_MISSING_ASTERISK</tt> </td><td>Missing asterisk in column 0</td></tr>
157<tr><td><tt>PPD_MISSING_PPDADOBE4</tt> </td><td>Missing PPD-Adobe-4.x header</td></tr>
158<tr><td><tt>PPD_MISSING_VALUE</tt> </td><td>Missing value string</td></tr>
159<tr><td><tt>PPD_NESTED_OPEN_GROUP</tt> </td><td>OpenGroup without a CloseGroup first</td></tr>
160<tr><td><tt>PPD_NESTED_OPEN_UI</tt> </td><td>OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first</td></tr>
161<tr><td><tt>PPD_NULL_FILE</tt> </td><td>NULL PPD file pointer</td></tr>
162<tr><td><tt>PPD_OK</tt> </td><td>OK</td></tr>
163</tbody></table></div>
164<!-- NEW PAGE -->
165<h3 class='title'><a name='ppd_ui_e'>ppd_ui_e</a></h3>
166<h4>Description</h4>
167<p>UI Types</p>
168<h4>Values</h4>
169<div class='table'><table align='center' border='1' width='80%'>
170<thead><tr><th>Name</th><th>Description</th></tr></thead>
171<tbody>
172<tr><td><tt>PPD_UI_BOOLEAN</tt> </td><td>True or False option</td></tr>
173<tr><td><tt>PPD_UI_PICKMANY</tt> </td><td>Pick zero or more from a list</td></tr>
174<tr><td><tt>PPD_UI_PICKONE</tt> </td><td>Pick one from a list</td></tr>
175</tbody></table></div>
176<!-- NEW PAGE -->
177<h2 class='title'><a name='FUNCTIONS'>Functions</a></h2>
178<ul>
179 <li><a href='#ppdClose'><tt>ppdClose()</tt></a> </li>
180 <li><a href='#ppdCollect'><tt>ppdCollect()</tt></a> </li>
ecdc0628 181 <li><a href='#ppdCollect2'><tt>ppdCollect2()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
ef416fc2 182 <li><a href='#ppdConflicts'><tt>ppdConflicts()</tt></a> </li>
183 <li><a href='#ppdEmit'><tt>ppdEmit()</tt></a> </li>
ecdc0628 184 <li><a href='#ppdEmitAfterOrder'><tt>ppdEmitAfterOrder()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
ef416fc2 185 <li><a href='#ppdEmitFd'><tt>ppdEmitFd()</tt></a> </li>
186 <li><a href='#ppdEmitJCL'><tt>ppdEmitJCL()</tt></a> </li>
187 <li><a href='#ppdEmitJCLEnd'><tt>ppdEmitJCLEnd()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
80ca4592 188 <li><a href='#ppdEmitString'><tt>ppdEmitString()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
ef416fc2 189 <li><a href='#ppdErrorString'><tt>ppdErrorString()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
190 <li><a href='#ppdFindAttr'><tt>ppdFindAttr()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
191 <li><a href='#ppdFindChoice'><tt>ppdFindChoice()</tt></a> </li>
89d46774 192 <li><a href='#ppdFindCustomOption'><tt>ppdFindCustomOption()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
193 <li><a href='#ppdFindCustomParam'><tt>ppdFindCustomParam()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
ef416fc2 194 <li><a href='#ppdFindMarkedChoice'><tt>ppdFindMarkedChoice()</tt></a> </li>
195 <li><a href='#ppdFindNextAttr'><tt>ppdFindNextAttr()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
196 <li><a href='#ppdFindOption'><tt>ppdFindOption()</tt></a> </li>
89d46774 197 <li><a href='#ppdFirstCustomParam'><tt>ppdFirstCustomParam()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
ecdc0628 198 <li><a href='#ppdFirstOption'><tt>ppdFirstOption()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
ef416fc2 199 <li><a href='#ppdIsMarked'><tt>ppdIsMarked()</tt></a> </li>
200 <li><a href='#ppdLastError'><tt>ppdLastError()</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
89d46774 201 <li><a href='#ppdLocalize'><tt>ppdLocalize()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
ef416fc2 202 <li><a href='#ppdMarkDefaults'><tt>ppdMarkDefaults()</tt></a> </li>
203 <li><a href='#ppdMarkOption'><tt>ppdMarkOption()</tt></a> </li>
89d46774 204 <li><a href='#ppdNextCustomParam'><tt>ppdNextCustomParam()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
ecdc0628 205 <li><a href='#ppdNextOption'><tt>ppdNextOption()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
ef416fc2 206 <li><a href='#ppdOpen'><tt>ppdOpen()</tt></a> </li>
207 <li><a href='#ppdOpen2'><tt>ppdOpen2()</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
208 <li><a href='#ppdOpenFd'><tt>ppdOpenFd()</tt></a> </li>
209 <li><a href='#ppdOpenFile'><tt>ppdOpenFile()</tt></a> </li>
210 <li><a href='#ppdPageLength'><tt>ppdPageLength()</tt></a> </li>
211 <li><a href='#ppdPageSize'><tt>ppdPageSize()</tt></a> </li>
212 <li><a href='#ppdPageWidth'><tt>ppdPageWidth()</tt></a> </li>
213 <li><a href='#ppdSetConformance'><tt>ppdSetConformance()</tt></a> <span class='info'>&nbsp;CUPS 1.1.20&nbsp;</span></li>
214</ul>
215<!-- NEW PAGE -->
216<h3 class='title'><a name='ppdClose'>ppdClose()</a></h3>
217<h4>Description</h4>
218<p>Free all memory used by the PPD file.</p>
219<h4>Syntax</h4>
220<pre>
221void
222ppdClose(
223 <a href='#ppd_file_t'>ppd_file_t</a> * ppd);
224</pre>
225<h4>Arguments</h4>
226<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
227<thead><tr><th>Name</th><th>Description</th></tr></thead>
228<tbody>
229<tr><td><tt>ppd</tt></td><td>PPD file record</td></tr>
230</tbody></table></div>
231<h4>Returns</h4>
232<p>Nothing.</p>
233<!-- NEW PAGE -->
234<h3 class='title'><a name='ppdCollect'>ppdCollect()</a></h3>
235<h4>Description</h4>
236<p>Collect all marked options that reside in the specified
237section.</p>
238<h4>Syntax</h4>
239<pre>
240int
241ppdCollect(
242 <a href='#ppd_file_t'>ppd_file_t</a> * ppd,
243 <a href='#ppd_section_t'>ppd_section_t</a> section,
244 <a href='#ppd_choice_t'>ppd_choice_t</a> *** choices);
245</pre>
246<h4>Arguments</h4>
247<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
248<thead><tr><th>Name</th><th>Description</th></tr></thead>
249<tbody>
250<tr><td><tt>ppd</tt></td><td>PPD file data</td></tr>
251<tr><td><tt>section</tt></td><td>Section to collect</td></tr>
252<tr><td><tt>choices</tt></td><td>Pointers to choices</td></tr>
253</tbody></table></div>
254<h4>Returns</h4>
255<p>Number of options marked</p>
256<!-- NEW PAGE -->
ecdc0628 257<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ppdCollect2'>ppdCollect2()</a></h3>
258<h4>Description</h4>
259<p>Collect all marked options that reside in the
260specified section and minimum order.
261
262</p>
263<h4>Syntax</h4>
264<pre>
265int
266ppdCollect2(
267 <a href='#ppd_file_t'>ppd_file_t</a> * ppd,
268 <a href='#ppd_section_t'>ppd_section_t</a> section,
269 float min_order,
270 <a href='#ppd_choice_t'>ppd_choice_t</a> *** choices);
271</pre>
272<h4>Arguments</h4>
273<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
274<thead><tr><th>Name</th><th>Description</th></tr></thead>
275<tbody>
276<tr><td><tt>ppd</tt></td><td>PPD file data</td></tr>
277<tr><td><tt>section</tt></td><td>Section to collect</td></tr>
278<tr><td><tt>min_order</tt></td><td>Minimum OrderDependency value</td></tr>
279<tr><td><tt>choices</tt></td><td>Pointers to choices</td></tr>
280</tbody></table></div>
281<h4>Returns</h4>
282<p>Number of options marked</p>
283<!-- NEW PAGE -->
ef416fc2 284<h3 class='title'><a name='ppdConflicts'>ppdConflicts()</a></h3>
285<h4>Description</h4>
286<p>Check to see if there are any conflicts.</p>
287<h4>Syntax</h4>
288<pre>
289int
290ppdConflicts(
291 <a href='#ppd_file_t'>ppd_file_t</a> * ppd);
292</pre>
293<h4>Arguments</h4>
294<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
295<thead><tr><th>Name</th><th>Description</th></tr></thead>
296<tbody>
297<tr><td><tt>ppd</tt></td><td>PPD to check</td></tr>
298</tbody></table></div>
299<h4>Returns</h4>
300<p>Number of conflicts found</p>
301<!-- NEW PAGE -->
302<h3 class='title'><a name='ppdEmit'>ppdEmit()</a></h3>
303<h4>Description</h4>
304<p>Emit code for marked options to a file.</p>
305<h4>Syntax</h4>
306<pre>
307int
308ppdEmit(
309 <a href='#ppd_file_t'>ppd_file_t</a> * ppd,
310 FILE * fp,
311 <a href='#ppd_section_t'>ppd_section_t</a> section);
312</pre>
313<h4>Arguments</h4>
314<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
315<thead><tr><th>Name</th><th>Description</th></tr></thead>
316<tbody>
317<tr><td><tt>ppd</tt></td><td>PPD file record</td></tr>
318<tr><td><tt>fp</tt></td><td>File to write to</td></tr>
319<tr><td><tt>section</tt></td><td>Section to write</td></tr>
320</tbody></table></div>
321<h4>Returns</h4>
322<p>0 on success, -1 on failure</p>
323<!-- NEW PAGE -->
ecdc0628 324<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ppdEmitAfterOrder'>ppdEmitAfterOrder()</a></h3>
325<h4>Description</h4>
326<p>Emit a subset of the code for marked options to a file.
327
328When &quot;limit&quot; is non-zero, this function only emits options whose
329OrderDependency value is greater than or equal to &quot;min_order&quot;.
330
331When &quot;limit&quot; is zero, this function is identical to ppdEmit().
332
333</p>
334<h4>Syntax</h4>
335<pre>
336int
337ppdEmitAfterOrder(
338 <a href='#ppd_file_t'>ppd_file_t</a> * ppd,
339 FILE * fp,
340 <a href='#ppd_section_t'>ppd_section_t</a> section,
341 int limit,
342 float min_order);
343</pre>
344<h4>Arguments</h4>
345<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
346<thead><tr><th>Name</th><th>Description</th></tr></thead>
347<tbody>
348<tr><td><tt>ppd</tt></td><td>PPD file record</td></tr>
349<tr><td><tt>fp</tt></td><td>File to write to</td></tr>
350<tr><td><tt>section</tt></td><td>Section to write</td></tr>
80ca4592 351<tr><td><tt>limit</tt></td><td>Non-zero to use min_order</td></tr>
352<tr><td><tt>min_order</tt></td><td>Lowest OrderDependency</td></tr>
ecdc0628 353</tbody></table></div>
354<h4>Returns</h4>
355<p>0 on success, -1 on failure</p>
356<!-- NEW PAGE -->
ef416fc2 357<h3 class='title'><a name='ppdEmitFd'>ppdEmitFd()</a></h3>
358<h4>Description</h4>
359<p>Emit code for marked options to a file.</p>
360<h4>Syntax</h4>
361<pre>
362int
363ppdEmitFd(
364 <a href='#ppd_file_t'>ppd_file_t</a> * ppd,
365 int fd,
366 <a href='#ppd_section_t'>ppd_section_t</a> section);
367</pre>
368<h4>Arguments</h4>
369<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
370<thead><tr><th>Name</th><th>Description</th></tr></thead>
371<tbody>
372<tr><td><tt>ppd</tt></td><td>PPD file record</td></tr>
373<tr><td><tt>fd</tt></td><td>File to write to</td></tr>
374<tr><td><tt>section</tt></td><td>Section to write</td></tr>
375</tbody></table></div>
376<h4>Returns</h4>
377<p>0 on success, -1 on failure</p>
378<!-- NEW PAGE -->
379<h3 class='title'><a name='ppdEmitJCL'>ppdEmitJCL()</a></h3>
380<h4>Description</h4>
381<p>Emit code for JCL options to a file.</p>
382<h4>Syntax</h4>
383<pre>
384int
385ppdEmitJCL(
386 <a href='#ppd_file_t'>ppd_file_t</a> * ppd,
387 FILE * fp,
388 int job_id,
389 const char * user,
390 const char * title);
391</pre>
392<h4>Arguments</h4>
393<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
394<thead><tr><th>Name</th><th>Description</th></tr></thead>
395<tbody>
396<tr><td><tt>ppd</tt></td><td>PPD file record</td></tr>
397<tr><td><tt>fp</tt></td><td>File to write to</td></tr>
398<tr><td><tt>job_id</tt></td><td>Job ID</td></tr>
399<tr><td><tt>user</tt></td><td>Username</td></tr>
400<tr><td><tt>title</tt></td><td>Title</td></tr>
401</tbody></table></div>
402<h4>Returns</h4>
403<p>0 on success, -1 on failure</p>
404<!-- NEW PAGE -->
405<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ppdEmitJCLEnd'>ppdEmitJCLEnd()</a></h3>
406<h4>Description</h4>
407<p>Emit JCLEnd code to a file.
408
409</p>
410<h4>Syntax</h4>
411<pre>
412int
413ppdEmitJCLEnd(
414 <a href='#ppd_file_t'>ppd_file_t</a> * ppd,
415 FILE * fp);
416</pre>
417<h4>Arguments</h4>
418<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
419<thead><tr><th>Name</th><th>Description</th></tr></thead>
420<tbody>
421<tr><td><tt>ppd</tt></td><td>PPD file record</td></tr>
422<tr><td><tt>fp</tt></td><td>File to write to</td></tr>
423</tbody></table></div>
424<h4>Returns</h4>
425<p>0 on success, -1 on failure</p>
426<!-- NEW PAGE -->
80ca4592 427<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ppdEmitString'>ppdEmitString()</a></h3>
428<h4>Description</h4>
429<p>Get a string containing the code for marked options.
430
431When &quot;min_order&quot; is greater than zero, this function only includes options
432whose OrderDependency value is greater than or equal to &quot;min_order&quot;.
433Otherwise, all options in the specified section are included in the
434returned string.
435
436The return string is allocated on the heap and should be freed using
437free() when you are done with it.
438
439</p>
440<h4>Syntax</h4>
441<pre>
442char *
443ppdEmitString(
444 <a href='#ppd_file_t'>ppd_file_t</a> * ppd,
445 <a href='#ppd_section_t'>ppd_section_t</a> section,
446 float min_order);
447</pre>
448<h4>Arguments</h4>
449<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
450<thead><tr><th>Name</th><th>Description</th></tr></thead>
451<tbody>
452<tr><td><tt>ppd</tt></td><td>PPD file record</td></tr>
453<tr><td><tt>section</tt></td><td>Section to write</td></tr>
454<tr><td><tt>min_order</tt></td><td>Lowest OrderDependency</td></tr>
455</tbody></table></div>
456<h4>Returns</h4>
457<p>String containing option code</p>
458<!-- NEW PAGE -->
ef416fc2 459<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='ppdErrorString'>ppdErrorString()</a></h3>
460<h4>Description</h4>
461<p>Returns the text assocated with a status.
462
463</p>
464<h4>Syntax</h4>
465<pre>
466const char *
467ppdErrorString(
468 ppd_status_t status);
469</pre>
470<h4>Arguments</h4>
471<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
472<thead><tr><th>Name</th><th>Description</th></tr></thead>
473<tbody>
474<tr><td><tt>status</tt></td><td>PPD status</td></tr>
475</tbody></table></div>
476<h4>Returns</h4>
477<p>Status string</p>
478<!-- NEW PAGE -->
479<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='ppdFindAttr'>ppdFindAttr()</a></h3>
480<h4>Description</h4>
481<p>Find the first matching attribute...
482
483</p>
484<h4>Syntax</h4>
485<pre>
486<a href='#ppd_attr_t'>ppd_attr_t</a> *
487ppdFindAttr(
488 <a href='#ppd_file_t'>ppd_file_t</a> * ppd,
489 const char * name,
490 const char * spec);
491</pre>
492<h4>Arguments</h4>
493<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
494<thead><tr><th>Name</th><th>Description</th></tr></thead>
495<tbody>
496<tr><td><tt>ppd</tt></td><td>PPD file data</td></tr>
497<tr><td><tt>name</tt></td><td>Attribute name</td></tr>
498<tr><td><tt>spec</tt></td><td>Specifier string or NULL</td></tr>
499</tbody></table></div>
500<h4>Returns</h4>
501<p>Attribute or NULL if not found</p>
502<!-- NEW PAGE -->
503<h3 class='title'><a name='ppdFindChoice'>ppdFindChoice()</a></h3>
504<h4>Description</h4>
505<p>Return a pointer to an option choice.</p>
506<h4>Syntax</h4>
507<pre>
508<a href='#ppd_choice_t'>ppd_choice_t</a> *
509ppdFindChoice(
510 <a href='#ppd_option_t'>ppd_option_t</a> * o,
511 const char * choice);
512</pre>
513<h4>Arguments</h4>
514<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
515<thead><tr><th>Name</th><th>Description</th></tr></thead>
516<tbody>
517<tr><td><tt>o</tt></td><td>Pointer to option</td></tr>
518<tr><td><tt>choice</tt></td><td>Name of choice</td></tr>
519</tbody></table></div>
520<h4>Returns</h4>
521<p>Choice pointer or NULL</p>
522<!-- NEW PAGE -->
89d46774 523<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ppdFindCustomOption'>ppdFindCustomOption()</a></h3>
524<h4>Description</h4>
525<p>Find a custom option.
526
527</p>
528<h4>Syntax</h4>
529<pre>
530<a href='#ppd_coption_t'>ppd_coption_t</a> *
531ppdFindCustomOption(
532 <a href='#ppd_file_t'>ppd_file_t</a> * ppd,
533 const char * keyword);
534</pre>
535<h4>Arguments</h4>
536<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
537<thead><tr><th>Name</th><th>Description</th></tr></thead>
538<tbody>
539<tr><td><tt>ppd</tt></td><td>PPD file</td></tr>
540<tr><td><tt>keyword</tt></td><td>Custom option name</td></tr>
541</tbody></table></div>
542<h4>Returns</h4>
543<p>Custom option or NULL</p>
544<!-- NEW PAGE -->
545<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ppdFindCustomParam'>ppdFindCustomParam()</a></h3>
546<h4>Description</h4>
547<p>Find a parameter for a custom option.
548
549</p>
550<h4>Syntax</h4>
551<pre>
552<a href='#ppd_cparam_t'>ppd_cparam_t</a> *
553ppdFindCustomParam(
554 <a href='#ppd_coption_t'>ppd_coption_t</a> * opt,
555 const char * name);
556</pre>
557<h4>Arguments</h4>
558<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
559<thead><tr><th>Name</th><th>Description</th></tr></thead>
560<tbody>
561<tr><td><tt>opt</tt></td><td>Custom option</td></tr>
562<tr><td><tt>name</tt></td><td>Parameter name</td></tr>
563</tbody></table></div>
564<h4>Returns</h4>
565<p>Custom parameter or NULL</p>
566<!-- NEW PAGE -->
ef416fc2 567<h3 class='title'><a name='ppdFindMarkedChoice'>ppdFindMarkedChoice()</a></h3>
568<h4>Description</h4>
569<p>Return the marked choice for the specified option.</p>
570<h4>Syntax</h4>
571<pre>
572<a href='#ppd_choice_t'>ppd_choice_t</a> *
573ppdFindMarkedChoice(
574 <a href='#ppd_file_t'>ppd_file_t</a> * ppd,
575 const char * option);
576</pre>
577<h4>Arguments</h4>
578<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
579<thead><tr><th>Name</th><th>Description</th></tr></thead>
580<tbody>
581<tr><td><tt>ppd</tt></td><td>PPD file</td></tr>
582<tr><td><tt>option</tt></td><td>Keyword/option name</td></tr>
583</tbody></table></div>
584<h4>Returns</h4>
585<p>Pointer to choice or NULL</p>
586<!-- NEW PAGE -->
587<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='ppdFindNextAttr'>ppdFindNextAttr()</a></h3>
588<h4>Description</h4>
589<p>Find the next matching attribute...
590
591</p>
592<h4>Syntax</h4>
593<pre>
594<a href='#ppd_attr_t'>ppd_attr_t</a> *
595ppdFindNextAttr(
596 <a href='#ppd_file_t'>ppd_file_t</a> * ppd,
597 const char * name,
598 const char * spec);
599</pre>
600<h4>Arguments</h4>
601<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
602<thead><tr><th>Name</th><th>Description</th></tr></thead>
603<tbody>
604<tr><td><tt>ppd</tt></td><td>PPD file data</td></tr>
605<tr><td><tt>name</tt></td><td>Attribute name</td></tr>
606<tr><td><tt>spec</tt></td><td>Specifier string or NULL</td></tr>
607</tbody></table></div>
608<h4>Returns</h4>
609<p>Attribute or NULL if not found</p>
610<!-- NEW PAGE -->
611<h3 class='title'><a name='ppdFindOption'>ppdFindOption()</a></h3>
612<h4>Description</h4>
613<p>Return a pointer to the specified option.</p>
614<h4>Syntax</h4>
615<pre>
616<a href='#ppd_option_t'>ppd_option_t</a> *
617ppdFindOption(
618 <a href='#ppd_file_t'>ppd_file_t</a> * ppd,
619 const char * option);
620</pre>
621<h4>Arguments</h4>
622<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
623<thead><tr><th>Name</th><th>Description</th></tr></thead>
624<tbody>
625<tr><td><tt>ppd</tt></td><td>PPD file data</td></tr>
626<tr><td><tt>option</tt></td><td>Option/Keyword name</td></tr>
627</tbody></table></div>
628<h4>Returns</h4>
629<p>Pointer to option or NULL</p>
630<!-- NEW PAGE -->
89d46774 631<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ppdFirstCustomParam'>ppdFirstCustomParam()</a></h3>
632<h4>Description</h4>
633<p>Return the first parameter for a custom option.
634
635</p>
636<h4>Syntax</h4>
637<pre>
638<a href='#ppd_cparam_t'>ppd_cparam_t</a> *
639ppdFirstCustomParam(
640 <a href='#ppd_coption_t'>ppd_coption_t</a> * opt);
641</pre>
642<h4>Arguments</h4>
643<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
644<thead><tr><th>Name</th><th>Description</th></tr></thead>
645<tbody>
646<tr><td><tt>opt</tt></td><td>Custom option</td></tr>
647</tbody></table></div>
648<h4>Returns</h4>
649<p>Custom parameter or NULL</p>
650<!-- NEW PAGE -->
ecdc0628 651<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ppdFirstOption'>ppdFirstOption()</a></h3>
652<h4>Description</h4>
653<p>Return the first option in the PPD file.
654
655Options are returned from all groups in sorted order.
656
657</p>
658<h4>Syntax</h4>
659<pre>
660<a href='#ppd_option_t'>ppd_option_t</a> *
661ppdFirstOption(
662 <a href='#ppd_file_t'>ppd_file_t</a> * ppd);
663</pre>
664<h4>Arguments</h4>
665<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
666<thead><tr><th>Name</th><th>Description</th></tr></thead>
667<tbody>
668<tr><td><tt>ppd</tt></td><td>PPD file</td></tr>
669</tbody></table></div>
670<h4>Returns</h4>
671<p>First option or NULL</p>
672<!-- NEW PAGE -->
ef416fc2 673<h3 class='title'><a name='ppdIsMarked'>ppdIsMarked()</a></h3>
674<h4>Description</h4>
675<p>Check to see if an option is marked...</p>
676<h4>Syntax</h4>
677<pre>
678int
679ppdIsMarked(
680 <a href='#ppd_file_t'>ppd_file_t</a> * ppd,
681 const char * option,
682 const char * choice);
683</pre>
684<h4>Arguments</h4>
685<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
686<thead><tr><th>Name</th><th>Description</th></tr></thead>
687<tbody>
688<tr><td><tt>ppd</tt></td><td>PPD file data</td></tr>
689<tr><td><tt>option</tt></td><td>Option/Keyword name</td></tr>
690<tr><td><tt>choice</tt></td><td>Choice name</td></tr>
691</tbody></table></div>
692<h4>Returns</h4>
693<p>Non-zero if option is marked</p>
694<!-- NEW PAGE -->
695<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='ppdLastError'>ppdLastError()</a></h3>
696<h4>Description</h4>
697<p>Return the status from the last ppdOpen*().
698
699</p>
700<h4>Syntax</h4>
701<pre>
702ppd_status_t
703ppdLastError(
704 int * line);
705</pre>
706<h4>Arguments</h4>
707<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
708<thead><tr><th>Name</th><th>Description</th></tr></thead>
709<tbody>
710<tr><td><tt>line</tt></td><td>Line number</td></tr>
711</tbody></table></div>
712<h4>Returns</h4>
713<p>Status code</p>
714<!-- NEW PAGE -->
89d46774 715<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ppdLocalize'>ppdLocalize()</a></h3>
716<h4>Description</h4>
717<p>Localize the PPD file to the current locale.
718
719</p>
720<h4>Syntax</h4>
721<pre>
722int
723ppdLocalize(
724 <a href='#ppd_file_t'>ppd_file_t</a> * ppd);
725</pre>
726<h4>Arguments</h4>
727<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
728<thead><tr><th>Name</th><th>Description</th></tr></thead>
729<tbody>
730<tr><td><tt>ppd</tt></td><td>PPD file</td></tr>
731</tbody></table></div>
732<h4>Returns</h4>
733<p>0 on success, -1 on error</p>
734<!-- NEW PAGE -->
ef416fc2 735<h3 class='title'><a name='ppdMarkDefaults'>ppdMarkDefaults()</a></h3>
736<h4>Description</h4>
737<p>Mark all default options in the PPD file.</p>
738<h4>Syntax</h4>
739<pre>
740void
741ppdMarkDefaults(
742 <a href='#ppd_file_t'>ppd_file_t</a> * ppd);
743</pre>
744<h4>Arguments</h4>
745<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
746<thead><tr><th>Name</th><th>Description</th></tr></thead>
747<tbody>
748<tr><td><tt>ppd</tt></td><td>PPD file record</td></tr>
749</tbody></table></div>
750<h4>Returns</h4>
751<p>Nothing.</p>
752<!-- NEW PAGE -->
753<h3 class='title'><a name='ppdMarkOption'>ppdMarkOption()</a></h3>
754<h4>Description</h4>
755<p>Mark an option in a PPD file.
756
757Notes:
758
759-1 is returned if the given option would conflict with any currently
760selected option.</p>
761<h4>Syntax</h4>
762<pre>
763int
764ppdMarkOption(
765 <a href='#ppd_file_t'>ppd_file_t</a> * ppd,
766 const char * option,
767 const char * choice);
768</pre>
769<h4>Arguments</h4>
770<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
771<thead><tr><th>Name</th><th>Description</th></tr></thead>
772<tbody>
773<tr><td><tt>ppd</tt></td><td>PPD file record</td></tr>
774<tr><td><tt>option</tt></td><td>Keyword</td></tr>
775<tr><td><tt>choice</tt></td><td>Option name</td></tr>
776</tbody></table></div>
777<h4>Returns</h4>
778<p>Number of conflicts</p>
779<!-- NEW PAGE -->
89d46774 780<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ppdNextCustomParam'>ppdNextCustomParam()</a></h3>
781<h4>Description</h4>
782<p>Return the next parameter for a custom option.
783
784</p>
785<h4>Syntax</h4>
786<pre>
787<a href='#ppd_cparam_t'>ppd_cparam_t</a> *
788ppdNextCustomParam(
789 <a href='#ppd_coption_t'>ppd_coption_t</a> * opt);
790</pre>
791<h4>Arguments</h4>
792<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
793<thead><tr><th>Name</th><th>Description</th></tr></thead>
794<tbody>
795<tr><td><tt>opt</tt></td><td>Custom option</td></tr>
796</tbody></table></div>
797<h4>Returns</h4>
798<p>Custom parameter or NULL</p>
799<!-- NEW PAGE -->
ecdc0628 800<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ppdNextOption'>ppdNextOption()</a></h3>
801<h4>Description</h4>
802<p>Return the next option in the PPD file.
803
804Options are returned from all groups in sorted order.
805
806</p>
807<h4>Syntax</h4>
808<pre>
809<a href='#ppd_option_t'>ppd_option_t</a> *
810ppdNextOption(
811 <a href='#ppd_file_t'>ppd_file_t</a> * ppd);
812</pre>
813<h4>Arguments</h4>
814<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
815<thead><tr><th>Name</th><th>Description</th></tr></thead>
816<tbody>
817<tr><td><tt>ppd</tt></td><td>PPD file</td></tr>
818</tbody></table></div>
819<h4>Returns</h4>
820<p>Next option or NULL</p>
821<!-- NEW PAGE -->
ef416fc2 822<h3 class='title'><a name='ppdOpen'>ppdOpen()</a></h3>
823<h4>Description</h4>
824<p>Read a PPD file into memory.</p>
825<h4>Syntax</h4>
826<pre>
827<a href='#ppd_file_t'>ppd_file_t</a> *
828ppdOpen(
829 FILE * fp);
830</pre>
831<h4>Arguments</h4>
832<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
833<thead><tr><th>Name</th><th>Description</th></tr></thead>
834<tbody>
835<tr><td><tt>fp</tt></td><td>File to read from</td></tr>
836</tbody></table></div>
837<h4>Returns</h4>
838<p>PPD file record</p>
839<!-- NEW PAGE -->
840<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ppdOpen2'>ppdOpen2()</a></h3>
841<h4>Description</h4>
842<p>Read a PPD file into memory.
843
844</p>
845<h4>Syntax</h4>
846<pre>
847<a href='#ppd_file_t'>ppd_file_t</a> *
848ppdOpen2(
849 cups_file_t * fp);
850</pre>
851<h4>Arguments</h4>
852<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
853<thead><tr><th>Name</th><th>Description</th></tr></thead>
854<tbody>
855<tr><td><tt>fp</tt></td><td>File to read from</td></tr>
856</tbody></table></div>
857<h4>Returns</h4>
858<p>PPD file record</p>
859<!-- NEW PAGE -->
860<h3 class='title'><a name='ppdOpenFd'>ppdOpenFd()</a></h3>
861<h4>Description</h4>
862<p>Read a PPD file into memory.</p>
863<h4>Syntax</h4>
864<pre>
865<a href='#ppd_file_t'>ppd_file_t</a> *
866ppdOpenFd(
867 int fd);
868</pre>
869<h4>Arguments</h4>
870<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
871<thead><tr><th>Name</th><th>Description</th></tr></thead>
872<tbody>
873<tr><td><tt>fd</tt></td><td>File to read from</td></tr>
874</tbody></table></div>
875<h4>Returns</h4>
876<p>PPD file record</p>
877<!-- NEW PAGE -->
878<h3 class='title'><a name='ppdOpenFile'>ppdOpenFile()</a></h3>
879<h4>Description</h4>
880<p>Read a PPD file into memory.</p>
881<h4>Syntax</h4>
882<pre>
883<a href='#ppd_file_t'>ppd_file_t</a> *
884ppdOpenFile(
885 const char * filename);
886</pre>
887<h4>Arguments</h4>
888<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
889<thead><tr><th>Name</th><th>Description</th></tr></thead>
890<tbody>
891<tr><td><tt>filename</tt></td><td>File to read from</td></tr>
892</tbody></table></div>
893<h4>Returns</h4>
894<p>PPD file record</p>
895<!-- NEW PAGE -->
896<h3 class='title'><a name='ppdPageLength'>ppdPageLength()</a></h3>
897<h4>Description</h4>
898<p>Get the page length for the given size.</p>
899<h4>Syntax</h4>
900<pre>
901float
902ppdPageLength(
903 <a href='#ppd_file_t'>ppd_file_t</a> * ppd,
904 const char * name);
905</pre>
906<h4>Arguments</h4>
907<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
908<thead><tr><th>Name</th><th>Description</th></tr></thead>
909<tbody>
910<tr><td><tt>ppd</tt></td><td>PPD file</td></tr>
911<tr><td><tt>name</tt></td><td>Size name</td></tr>
912</tbody></table></div>
913<h4>Returns</h4>
914<p>Length of page in points or 0.0</p>
915<!-- NEW PAGE -->
916<h3 class='title'><a name='ppdPageSize'>ppdPageSize()</a></h3>
917<h4>Description</h4>
918<p>Get the page size record for the given size.</p>
919<h4>Syntax</h4>
920<pre>
921<a href='#ppd_size_t'>ppd_size_t</a> *
922ppdPageSize(
923 <a href='#ppd_file_t'>ppd_file_t</a> * ppd,
924 const char * name);
925</pre>
926<h4>Arguments</h4>
927<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
928<thead><tr><th>Name</th><th>Description</th></tr></thead>
929<tbody>
930<tr><td><tt>ppd</tt></td><td>PPD file record</td></tr>
931<tr><td><tt>name</tt></td><td>Size name</td></tr>
932</tbody></table></div>
933<h4>Returns</h4>
934<p>Size record for page or NULL</p>
935<!-- NEW PAGE -->
936<h3 class='title'><a name='ppdPageWidth'>ppdPageWidth()</a></h3>
937<h4>Description</h4>
938<p>Get the page width for the given size.</p>
939<h4>Syntax</h4>
940<pre>
941float
942ppdPageWidth(
943 <a href='#ppd_file_t'>ppd_file_t</a> * ppd,
944 const char * name);
945</pre>
946<h4>Arguments</h4>
947<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
948<thead><tr><th>Name</th><th>Description</th></tr></thead>
949<tbody>
950<tr><td><tt>ppd</tt></td><td>PPD file record</td></tr>
951<tr><td><tt>name</tt></td><td>Size name</td></tr>
952</tbody></table></div>
953<h4>Returns</h4>
954<p>Width of page in points or 0.0</p>
955<!-- NEW PAGE -->
956<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.20&nbsp;</span><a name='ppdSetConformance'>ppdSetConformance()</a></h3>
957<h4>Description</h4>
958<p>Set the conformance level for PPD files.
959
960</p>
961<h4>Syntax</h4>
962<pre>
963void
964ppdSetConformance(
965 <a href='#ppd_conform_t'>ppd_conform_t</a> c);
966</pre>
967<h4>Arguments</h4>
968<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
969<thead><tr><th>Name</th><th>Description</th></tr></thead>
970<tbody>
971<tr><td><tt>c</tt></td><td>Conformance level</td></tr>
972</tbody></table></div>
973<h4>Returns</h4>
974<p>Nothing.</p>
975<!-- NEW PAGE -->
976<h2 class='title'><a name='STRUCTURES'>Structures</a></h2>
977<ul>
ecdc0628 978 <li><a href='#ppd_attr_s'><tt>ppd_attr_s</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
979 <li><a href='#ppd_choice_s'><tt>ppd_choice_s</tt></a> </li>
980 <li><a href='#ppd_coption_s'><tt>ppd_coption_s</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
981 <li><a href='#ppd_cparam_s'><tt>ppd_cparam_s</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
982 <li><a href='#ppd_emul_s'><tt>ppd_emul_s</tt></a> </li>
983 <li><a href='#ppd_file_s'><tt>ppd_file_s</tt></a> </li>
984 <li><a href='#ppd_group_s'><tt>ppd_group_s</tt></a> </li>
985 <li><a href='#ppd_option_s'><tt>ppd_option_s</tt></a> </li>
986 <li><a href='#ppd_profile_s'><tt>ppd_profile_s</tt></a> </li>
987 <li><a href='#ppd_size_s'><tt>ppd_size_s</tt></a> </li>
ef416fc2 988</ul>
989<!-- NEW PAGE -->
ecdc0628 990<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='ppd_attr_s'>ppd_attr_s</a></h3>
ef416fc2 991<h4>Description</h4>
992<p>PPD Attribute Structure </p>
993<h4>Definition</h4>
994<pre>
ecdc0628 995struct ppd_attr_s
ef416fc2 996{
997 char name[PPD_MAX_NAME];
998 char spec[PPD_MAX_NAME];
999 char text[PPD_MAX_TEXT];
1000 char * value;
1001};
1002</pre>
1003<h4>Members</h4>
1004<div class='table'><table align='center' border='1' width='80%'>
1005<thead><tr><th>Name</th><th>Description</th></tr></thead>
1006<tbody>
1007<tr><td><tt>name[PPD_MAX_NAME]</tt> </td><td>Name of attribute (cupsXYZ)</td></tr>
1008<tr><td><tt>spec[PPD_MAX_NAME]</tt> </td><td>Specifier string, if any</td></tr>
1009<tr><td><tt>text[PPD_MAX_TEXT]</tt> </td><td>Human-readable text, if any</td></tr>
1010<tr><td><tt>value</tt> </td><td>Value string</td></tr>
1011</tbody></table></div>
1012<!-- NEW PAGE -->
ecdc0628 1013<h3 class='title'><a name='ppd_choice_s'>ppd_choice_s</a></h3>
ef416fc2 1014<h4>Description</h4>
1015<p>Option choices</p>
1016<h4>Definition</h4>
1017<pre>
ecdc0628 1018struct ppd_choice_s
ef416fc2 1019{
1020 char choice[PPD_MAX_NAME];
1021 char * code;
1022 char marked;
1023 <a href='#ppd_option_t'>ppd_option_t</a> * option;
1024 char text[PPD_MAX_TEXT];
1025};
1026</pre>
1027<h4>Members</h4>
1028<div class='table'><table align='center' border='1' width='80%'>
1029<thead><tr><th>Name</th><th>Description</th></tr></thead>
1030<tbody>
1031<tr><td><tt>choice[PPD_MAX_NAME]</tt> </td><td>Computer-readable option name</td></tr>
1032<tr><td><tt>code</tt> </td><td>Code to send for this option</td></tr>
1033<tr><td><tt>marked</tt> </td><td>0 if not selected, 1 otherwise</td></tr>
1034<tr><td><tt>option</tt> </td><td>Pointer to parent option structure</td></tr>
1035<tr><td><tt>text[PPD_MAX_TEXT]</tt> </td><td>Human-readable option name</td></tr>
1036</tbody></table></div>
1037<!-- NEW PAGE -->
ecdc0628 1038<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ppd_coption_s'>ppd_coption_s</a></h3>
ef416fc2 1039<h4>Description</h4>
ecdc0628 1040<p>Custom Option </p>
ef416fc2 1041<h4>Definition</h4>
1042<pre>
ecdc0628 1043struct ppd_coption_s
ef416fc2 1044{
ecdc0628 1045 char keyword[PPD_MAX_NAME];
1046 int marked;
1047 <a href='#ppd_option_t'>ppd_option_t</a> * option;
1048 cups_array_t * params;
ef416fc2 1049};
1050</pre>
1051<h4>Members</h4>
1052<div class='table'><table align='center' border='1' width='80%'>
1053<thead><tr><th>Name</th><th>Description</th></tr></thead>
1054<tbody>
ecdc0628 1055<tr><td><tt>keyword[PPD_MAX_NAME]</tt> </td><td>Name of option that is being extended...</td></tr>
1056<tr><td><tt>marked</tt> </td><td>Extended option is marked</td></tr>
1057<tr><td><tt>option</tt> </td><td>Option that is being extended...</td></tr>
1058<tr><td><tt>params</tt> </td><td>Parameters</td></tr>
ef416fc2 1059</tbody></table></div>
1060<!-- NEW PAGE -->
ecdc0628 1061<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ppd_cparam_s'>ppd_cparam_s</a></h3>
ef416fc2 1062<h4>Description</h4>
ecdc0628 1063<p>Custom Parameter </p>
ef416fc2 1064<h4>Definition</h4>
1065<pre>
ecdc0628 1066struct ppd_cparam_s
ef416fc2 1067{
80ca4592 1068 <a href='#ppd_cpvalue_t'>ppd_cpvalue_t</a> current;
1069 <a href='#ppd_cplimit_t'>ppd_cplimit_t</a> minimum, maximum;
ecdc0628 1070 char name[PPD_MAX_NAME];
1071 int order;
1072 char text[PPD_MAX_TEXT];
1073 <a href='#ppd_cptype_t'>ppd_cptype_t</a> type;
ef416fc2 1074};
1075</pre>
1076<h4>Members</h4>
1077<div class='table'><table align='center' border='1' width='80%'>
1078<thead><tr><th>Name</th><th>Description</th></tr></thead>
1079<tbody>
ecdc0628 1080<tr><td><tt>current</tt> </td><td>Current value</td></tr>
80ca4592 1081<tr><td><tt>maximum</tt> </td><td>Maximum value</td></tr>
ecdc0628 1082<tr><td><tt>name[PPD_MAX_NAME]</tt> </td><td>Parameter name</td></tr>
1083<tr><td><tt>order</tt> </td><td>Order (0 to N)</td></tr>
1084<tr><td><tt>text[PPD_MAX_TEXT]</tt> </td><td>Human-readable text</td></tr>
1085<tr><td><tt>type</tt> </td><td>Parameter type</td></tr>
ef416fc2 1086</tbody></table></div>
1087<!-- NEW PAGE -->
ecdc0628 1088<h3 class='title'><a name='ppd_emul_s'>ppd_emul_s</a></h3>
ef416fc2 1089<h4>Description</h4>
ecdc0628 1090<p>Emulators</p>
ef416fc2 1091<h4>Definition</h4>
1092<pre>
ecdc0628 1093struct ppd_emul_s
ef416fc2 1094{
ecdc0628 1095 char name[PPD_MAX_NAME];
1096 char * start;
1097 char * stop;
ef416fc2 1098};
1099</pre>
1100<h4>Members</h4>
1101<div class='table'><table align='center' border='1' width='80%'>
1102<thead><tr><th>Name</th><th>Description</th></tr></thead>
1103<tbody>
ecdc0628 1104<tr><td><tt>name[PPD_MAX_NAME]</tt> </td><td>Emulator name</td></tr>
1105<tr><td><tt>start</tt> </td><td>Code to switch to this emulation</td></tr>
1106<tr><td><tt>stop</tt> </td><td>Code to stop this emulation</td></tr>
ef416fc2 1107</tbody></table></div>
1108<!-- NEW PAGE -->
ecdc0628 1109<h3 class='title'><a name='ppd_file_s'>ppd_file_s</a></h3>
ef416fc2 1110<h4>Description</h4>
ecdc0628 1111<p>PPD File</p>
ef416fc2 1112<h4>Definition</h4>
1113<pre>
ecdc0628 1114struct ppd_file_s
ef416fc2 1115{
1116 int accurate_screens;
1117 <a href='#ppd_attr_t'>ppd_attr_t</a> ** attrs;
1118 int color_device;
1119 ppd_cs_t colorspace;
1120 <a href='#ppd_const_t'>ppd_const_t</a> * consts;
1121 int contone_only;
ecdc0628 1122 cups_array_t * coptions;
ef416fc2 1123 int cur_attr;
1124 float custom_margins[4];
1125 float custom_max[2];
1126 float custom_min[2];
1127 <a href='#ppd_emul_t'>ppd_emul_t</a> * emulations;
ef416fc2 1128 char ** filters;
1129 int flip_duplex;
1130 char ** fonts;
1131 <a href='#ppd_group_t'>ppd_group_t</a> * groups;
1132 char * jcl_begin;
1133 char * jcl_end;
1134 char * jcl_ps;
1135 int landscape;
1136 char * lang_encoding;
1137 char * lang_version;
1138 int language_level;
1139 int manual_copies;
1140 char * manufacturer;
1141 int model_number;
1142 char * modelname;
1143 char * nickname;
1144 int num_attrs;
1145 int num_consts;
1146 int num_emulations;
ef416fc2 1147 int num_filters;
1148 int num_fonts;
1149 int num_groups;
1150 int num_profiles;
1151 int num_sizes;
ecdc0628 1152 cups_array_t * options;
ef416fc2 1153 char * patches;
1154 char * pcfilename;
1155 char * product;
1156 <a href='#ppd_profile_t'>ppd_profile_t</a> * profiles;
1157 char * protocols;
1158 char * shortnickname;
1159 <a href='#ppd_size_t'>ppd_size_t</a> * sizes;
ecdc0628 1160 cups_array_t * sorted_attrs;
ef416fc2 1161 int throughput;
1162 char * ttrasterizer;
1163 int variable_sizes;
1164};
1165</pre>
1166<h4>Members</h4>
1167<div class='table'><table align='center' border='1' width='80%'>
1168<thead><tr><th>Name</th><th>Description</th></tr></thead>
1169<tbody>
1170<tr><td><tt>accurate_screens</tt> </td><td>1 = supports accurate screens, 0 = not</td></tr>
ecdc0628 1171<tr><td><tt>attrs</tt> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></td><td>Attributes @private@</td></tr>
ef416fc2 1172<tr><td><tt>color_device</tt> </td><td>1 = color device, 0 = grayscale</td></tr>
1173<tr><td><tt>colorspace</tt> </td><td>Default colorspace</td></tr>
1174<tr><td><tt>consts</tt> </td><td>UI/Non-UI constraints</td></tr>
1175<tr><td><tt>contone_only</tt> </td><td>1 = continuous tone only, 0 = not</td></tr>
ecdc0628 1176<tr><td><tt>coptions</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Custom options array @private@</td></tr>
1177<tr><td><tt>cur_attr</tt> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></td><td>Current attribute @private@</td></tr>
ef416fc2 1178<tr><td><tt>custom_margins[4]</tt> </td><td>Margins around page</td></tr>
1179<tr><td><tt>custom_max[2]</tt> </td><td>Maximum variable page size</td></tr>
1180<tr><td><tt>custom_min[2]</tt> </td><td>Minimum variable page size</td></tr>
1181<tr><td><tt>emulations</tt> </td><td>Emulations and the code to invoke them</td></tr>
ef416fc2 1182<tr><td><tt>filters</tt> </td><td>Filter strings...</td></tr>
1183<tr><td><tt>flip_duplex</tt> <span class='info'>&nbsp;CUPS 1.1&nbsp;</span></td><td>1 = Flip page for back sides </td></tr>
1184<tr><td><tt>fonts</tt> </td><td>Pre-loaded fonts</td></tr>
1185<tr><td><tt>groups</tt> </td><td>UI groups</td></tr>
1186<tr><td><tt>jcl_begin</tt> </td><td>Start JCL commands</td></tr>
1187<tr><td><tt>jcl_end</tt> </td><td>End JCL commands</td></tr>
1188<tr><td><tt>jcl_ps</tt> </td><td>Enter PostScript interpreter</td></tr>
1189<tr><td><tt>landscape</tt> </td><td>-90 or 90</td></tr>
1190<tr><td><tt>lang_encoding</tt> </td><td>Language encoding</td></tr>
1191<tr><td><tt>lang_version</tt> </td><td>Language version (English, Spanish, etc.)</td></tr>
1192<tr><td><tt>language_level</tt> </td><td>Language level of device</td></tr>
1193<tr><td><tt>manual_copies</tt> </td><td>1 = Copies done manually, 0 = hardware</td></tr>
1194<tr><td><tt>manufacturer</tt> </td><td>Manufacturer name</td></tr>
1195<tr><td><tt>model_number</tt> </td><td>Device-specific model number</td></tr>
1196<tr><td><tt>modelname</tt> </td><td>Model name (general)</td></tr>
1197<tr><td><tt>nickname</tt> </td><td>Nickname (specific)</td></tr>
ecdc0628 1198<tr><td><tt>num_attrs</tt> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></td><td>Number of attributes @private@</td></tr>
ef416fc2 1199<tr><td><tt>num_consts</tt> </td><td>Number of UI/Non-UI constraints</td></tr>
1200<tr><td><tt>num_emulations</tt> </td><td>Number of emulations supported</td></tr>
ef416fc2 1201<tr><td><tt>num_filters</tt> </td><td>Number of filters</td></tr>
1202<tr><td><tt>num_fonts</tt> </td><td>Number of pre-loaded fonts</td></tr>
1203<tr><td><tt>num_groups</tt> </td><td>Number of UI groups</td></tr>
1204<tr><td><tt>num_profiles</tt> </td><td>Number of sRGB color profiles</td></tr>
1205<tr><td><tt>num_sizes</tt> </td><td>Number of page sizes</td></tr>
ecdc0628 1206<tr><td><tt>options</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Option lookup array @private@</td></tr>
ef416fc2 1207<tr><td><tt>patches</tt> </td><td>Patch commands to be sent to printer</td></tr>
1208<tr><td><tt>pcfilename</tt> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></td><td>PCFileName string </td></tr>
1209<tr><td><tt>product</tt> </td><td>Product name (from PS RIP/interpreter)</td></tr>
1210<tr><td><tt>profiles</tt> </td><td>sRGB color profiles</td></tr>
1211<tr><td><tt>protocols</tt> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></td><td>Protocols (BCP, TBCP) string </td></tr>
1212<tr><td><tt>shortnickname</tt> </td><td>Short version of nickname</td></tr>
1213<tr><td><tt>sizes</tt> </td><td>Page sizes</td></tr>
ecdc0628 1214<tr><td><tt>sorted_attrs</tt> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></td><td>Attribute lookup array @private@</td></tr>
ef416fc2 1215<tr><td><tt>throughput</tt> </td><td>Pages per minute</td></tr>
1216<tr><td><tt>ttrasterizer</tt> </td><td>Truetype rasterizer</td></tr>
1217<tr><td><tt>variable_sizes</tt> </td><td>1 = supports variable sizes, 0 = doesn't</td></tr>
1218</tbody></table></div>
1219<!-- NEW PAGE -->
ecdc0628 1220<h3 class='title'><a name='ppd_group_s'>ppd_group_s</a></h3>
ef416fc2 1221<h4>Description</h4>
1222<p>Groups</p>
1223<h4>Definition</h4>
1224<pre>
ecdc0628 1225struct ppd_group_s
ef416fc2 1226{
1227 char text[PPD_MAX_TEXT - PPD_MAX_NAME];
1228 char name[PPD_MAX_NAME];
1229 int num_options;
1230 int num_subgroups;
1231 <a href='#ppd_option_t'>ppd_option_t</a> * options;
ecdc0628 1232 struct <a href='#ppd_group_s'>ppd_group_s</a> * subgroups;
ef416fc2 1233};
1234</pre>
1235<h4>Members</h4>
1236<div class='table'><table align='center' border='1' width='80%'>
1237<thead><tr><th>Name</th><th>Description</th></tr></thead>
1238<tbody>
1239<tr><td><tt>PPD_MAX_NAME]</tt> </td><td>Human-readable group name</td></tr>
1240<tr><td><tt>name[PPD_MAX_NAME]</tt> <span class='info'>&nbsp;CUPS 1.1.18&nbsp;</span></td><td>Group name </td></tr>
1241<tr><td><tt>num_options</tt> </td><td>Number of options</td></tr>
1242<tr><td><tt>num_subgroups</tt> </td><td>Number of sub-groups</td></tr>
1243<tr><td><tt>options</tt> </td><td>Options</td></tr>
1244<tr><td><tt>subgroups</tt> </td><td>Sub-groups (max depth = 1)</td></tr>
1245</tbody></table></div>
1246<!-- NEW PAGE -->
ecdc0628 1247<h3 class='title'><a name='ppd_option_s'>ppd_option_s</a></h3>
ef416fc2 1248<h4>Description</h4>
1249<p>Options</p>
1250<h4>Definition</h4>
1251<pre>
ecdc0628 1252struct ppd_option_s
ef416fc2 1253{
1254 <a href='#ppd_choice_t'>ppd_choice_t</a> * choices;
1255 char conflicted;
1256 char defchoice[PPD_MAX_NAME];
1257 char keyword[PPD_MAX_NAME];
1258 int num_choices;
1259 float order;
1260 <a href='#ppd_section_t'>ppd_section_t</a> section;
1261 char text[PPD_MAX_TEXT];
1262 <a href='#ppd_ui_t'>ppd_ui_t</a> ui;
1263};
1264</pre>
1265<h4>Members</h4>
1266<div class='table'><table align='center' border='1' width='80%'>
1267<thead><tr><th>Name</th><th>Description</th></tr></thead>
1268<tbody>
1269<tr><td><tt>choices</tt> </td><td>Option choices</td></tr>
1270<tr><td><tt>conflicted</tt> </td><td>0 if no conflicts exist, 1 otherwise</td></tr>
1271<tr><td><tt>defchoice[PPD_MAX_NAME]</tt> </td><td>Default option choice</td></tr>
1272<tr><td><tt>keyword[PPD_MAX_NAME]</tt> </td><td>Option keyword name (&quot;PageSize&quot;, etc.)</td></tr>
1273<tr><td><tt>num_choices</tt> </td><td>Number of option choices</td></tr>
1274<tr><td><tt>order</tt> </td><td>Order number</td></tr>
1275<tr><td><tt>section</tt> </td><td>Section for command</td></tr>
1276<tr><td><tt>text[PPD_MAX_TEXT]</tt> </td><td>Human-readable text</td></tr>
1277<tr><td><tt>ui</tt> </td><td>Type of UI option</td></tr>
1278</tbody></table></div>
1279<!-- NEW PAGE -->
ecdc0628 1280<h3 class='title'><a name='ppd_profile_s'>ppd_profile_s</a></h3>
ef416fc2 1281<h4>Description</h4>
1282<p>sRGB Color Profiles</p>
1283<h4>Definition</h4>
1284<pre>
ecdc0628 1285struct ppd_profile_s
ef416fc2 1286{
1287 float density;
1288 float gamma;
1289 float matrix[3][3];
1290 char media_type[PPD_MAX_NAME];
1291 char resolution[PPD_MAX_NAME];
1292};
1293</pre>
1294<h4>Members</h4>
1295<div class='table'><table align='center' border='1' width='80%'>
1296<thead><tr><th>Name</th><th>Description</th></tr></thead>
1297<tbody>
1298<tr><td><tt>density</tt> </td><td>Ink density to use</td></tr>
1299<tr><td><tt>gamma</tt> </td><td>Gamma correction to use</td></tr>
1300<tr><td><tt>matrix[3][3]</tt> </td><td>Transform matrix</td></tr>
1301<tr><td><tt>media_type[PPD_MAX_NAME]</tt> </td><td>Media type or &quot;-&quot;</td></tr>
1302<tr><td><tt>resolution[PPD_MAX_NAME]</tt> </td><td>Resolution or &quot;-&quot;</td></tr>
1303</tbody></table></div>
1304<!-- NEW PAGE -->
ecdc0628 1305<h3 class='title'><a name='ppd_size_s'>ppd_size_s</a></h3>
ef416fc2 1306<h4>Description</h4>
1307<p>Page Sizes</p>
1308<h4>Definition</h4>
1309<pre>
ecdc0628 1310struct ppd_size_s
ef416fc2 1311{
1312 float bottom;
1313 float left;
1314 float length;
1315 int marked;
1316 char name[PPD_MAX_NAME];
1317 float right;
1318 float top;
1319 float width;
1320};
1321</pre>
1322<h4>Members</h4>
1323<div class='table'><table align='center' border='1' width='80%'>
1324<thead><tr><th>Name</th><th>Description</th></tr></thead>
1325<tbody>
1326<tr><td><tt>bottom</tt> </td><td>Bottom printable margin in points</td></tr>
1327<tr><td><tt>left</tt> </td><td>Left printable margin in points</td></tr>
1328<tr><td><tt>length</tt> </td><td>Length of media in points</td></tr>
1329<tr><td><tt>marked</tt> </td><td>Page size selected?</td></tr>
1330<tr><td><tt>name[PPD_MAX_NAME]</tt> </td><td>Media size option</td></tr>
1331<tr><td><tt>right</tt> </td><td>Right printable margin in points</td></tr>
1332<tr><td><tt>top</tt> </td><td>Top printable margin in points</td></tr>
1333<tr><td><tt>width</tt> </td><td>Width of media in points</td></tr>
1334</tbody></table></div>
1335<!-- NEW PAGE -->
1336<h2 class='title'><a name='TYPES'>Types</a></h2>
1337<ul>
1338 <li><a href='#ppd_attr_t'><tt>ppd_attr_t</tt></a> <span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span></li>
1339 <li><a href='#ppd_choice_t'><tt>ppd_choice_t</tt></a> </li>
1340 <li><a href='#ppd_const_t'><tt>ppd_const_t</tt></a> </li>
ecdc0628 1341 <li><a href='#ppd_coption_t'><tt>ppd_coption_t</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
1342 <li><a href='#ppd_cparam_t'><tt>ppd_cparam_t</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
80ca4592 1343 <li><a href='#ppd_cplimit_t'><tt>ppd_cplimit_t</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
ecdc0628 1344 <li><a href='#ppd_cptype_t'><tt>ppd_cptype_t</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
1345 <li><a href='#ppd_cpvalue_t'><tt>ppd_cpvalue_t</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
ef416fc2 1346 <li><a href='#ppd_emul_t'><tt>ppd_emul_t</tt></a> </li>
ef416fc2 1347 <li><a href='#ppd_file_t'><tt>ppd_file_t</tt></a> </li>
1348 <li><a href='#ppd_group_t'><tt>ppd_group_t</tt></a> </li>
1349 <li><a href='#ppd_option_t'><tt>ppd_option_t</tt></a> </li>
1350 <li><a href='#ppd_profile_t'><tt>ppd_profile_t</tt></a> </li>
1351 <li><a href='#ppd_section_t'><tt>ppd_section_t</tt></a> </li>
1352 <li><a href='#ppd_size_t'><tt>ppd_size_t</tt></a> </li>
1353 <li><a href='#ppd_ui_t'><tt>ppd_ui_t</tt></a> </li>
1354</ul>
1355<!-- NEW PAGE -->
1356<h3 class='title'><span class='info'>&nbsp;CUPS 1.1.19&nbsp;</span><a name='ppd_attr_t'>ppd_attr_t</a></h3>
1357<h4>Description</h4>
1358<p>PPD Attribute Structure </p>
1359<h4>Definition</h4>
1360<pre>
ecdc0628 1361typedef struct <a href='#ppd_attr_s'>ppd_attr_s</a> ppd_attr_t;
ef416fc2 1362</pre>
1363<!-- NEW PAGE -->
1364<h3 class='title'><a name='ppd_choice_t'>ppd_choice_t</a></h3>
1365<h4>Description</h4>
1366<p>Option choices</p>
1367<h4>Definition</h4>
1368<pre>
ecdc0628 1369typedef struct <a href='#ppd_choice_s'>ppd_choice_s</a> ppd_choice_t;
ef416fc2 1370</pre>
1371<!-- NEW PAGE -->
1372<h3 class='title'><a name='ppd_const_t'>ppd_const_t</a></h3>
1373<h4>Description</h4>
1374<p>Constraints</p>
1375<h4>Definition</h4>
1376<pre>
1377typedef struct ppd_const_t;
1378</pre>
1379<!-- NEW PAGE -->
ecdc0628 1380<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ppd_coption_t'>ppd_coption_t</a></h3>
ef416fc2 1381<h4>Description</h4>
ecdc0628 1382<p>Custom Option </p>
ef416fc2 1383<h4>Definition</h4>
1384<pre>
ecdc0628 1385typedef struct <a href='#ppd_coption_s'>ppd_coption_s</a> ppd_coption_t;
ef416fc2 1386</pre>
1387<!-- NEW PAGE -->
ecdc0628 1388<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ppd_cparam_t'>ppd_cparam_t</a></h3>
ef416fc2 1389<h4>Description</h4>
ecdc0628 1390<p>Custom Parameter </p>
ef416fc2 1391<h4>Definition</h4>
1392<pre>
ecdc0628 1393typedef struct <a href='#ppd_cparam_s'>ppd_cparam_s</a> ppd_cparam_t;
ef416fc2 1394</pre>
1395<!-- NEW PAGE -->
80ca4592 1396<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ppd_cplimit_t'>ppd_cplimit_t</a></h3>
1397<h4>Description</h4>
1398<p>Custom Parameter Limit </p>
1399<h4>Definition</h4>
1400<pre>
1401typedef union <a href='#ppd_cplimit_u'>ppd_cplimit_u</a> ppd_cplimit_t;
1402</pre>
1403<!-- NEW PAGE -->
ecdc0628 1404<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ppd_cptype_t'>ppd_cptype_t</a></h3>
ef416fc2 1405<h4>Description</h4>
ecdc0628 1406<p>Custom Parameter Type </p>
ef416fc2 1407<h4>Definition</h4>
1408<pre>
ecdc0628 1409typedef enum <a href='#ppd_cptype_e'>ppd_cptype_e</a> ppd_cptype_t;
ef416fc2 1410</pre>
1411<!-- NEW PAGE -->
ecdc0628 1412<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ppd_cpvalue_t'>ppd_cpvalue_t</a></h3>
ef416fc2 1413<h4>Description</h4>
ecdc0628 1414<p>Custom Parameter Value </p>
ef416fc2 1415<h4>Definition</h4>
1416<pre>
ecdc0628 1417typedef union <a href='#ppd_cpvalue_u'>ppd_cpvalue_u</a> ppd_cpvalue_t;
ef416fc2 1418</pre>
1419<!-- NEW PAGE -->
ecdc0628 1420<h3 class='title'><a name='ppd_emul_t'>ppd_emul_t</a></h3>
ef416fc2 1421<h4>Description</h4>
ecdc0628 1422<p>Emulators</p>
ef416fc2 1423<h4>Definition</h4>
1424<pre>
ecdc0628 1425typedef struct <a href='#ppd_emul_s'>ppd_emul_s</a> ppd_emul_t;
ef416fc2 1426</pre>
1427<!-- NEW PAGE -->
1428<h3 class='title'><a name='ppd_file_t'>ppd_file_t</a></h3>
1429<h4>Description</h4>
ecdc0628 1430<p>PPD File</p>
ef416fc2 1431<h4>Definition</h4>
1432<pre>
ecdc0628 1433typedef struct <a href='#ppd_file_s'>ppd_file_s</a> ppd_file_t;
ef416fc2 1434</pre>
1435<!-- NEW PAGE -->
1436<h3 class='title'><a name='ppd_group_t'>ppd_group_t</a></h3>
1437<h4>Description</h4>
1438<p>Groups</p>
1439<h4>Definition</h4>
1440<pre>
ecdc0628 1441typedef struct <a href='#ppd_group_s'>ppd_group_s</a> ppd_group_t;
ef416fc2 1442</pre>
1443<!-- NEW PAGE -->
1444<h3 class='title'><a name='ppd_option_t'>ppd_option_t</a></h3>
1445<h4>Description</h4>
1446<p>Options</p>
1447<h4>Definition</h4>
1448<pre>
ecdc0628 1449typedef struct <a href='#ppd_option_s'>ppd_option_s</a> ppd_option_t;
ef416fc2 1450</pre>
1451<!-- NEW PAGE -->
1452<h3 class='title'><a name='ppd_profile_t'>ppd_profile_t</a></h3>
1453<h4>Description</h4>
1454<p>sRGB Color Profiles</p>
1455<h4>Definition</h4>
1456<pre>
ecdc0628 1457typedef struct <a href='#ppd_profile_s'>ppd_profile_s</a> ppd_profile_t;
ef416fc2 1458</pre>
1459<!-- NEW PAGE -->
1460<h3 class='title'><a name='ppd_section_t'>ppd_section_t</a></h3>
1461<h4>Description</h4>
1462<p>Order dependency sections</p>
1463<h4>Definition</h4>
1464<pre>
1465typedef enum <a href='#ppd_section_e'>ppd_section_e</a> ppd_section_t;
1466</pre>
1467<!-- NEW PAGE -->
1468<h3 class='title'><a name='ppd_size_t'>ppd_size_t</a></h3>
1469<h4>Description</h4>
1470<p>Page Sizes</p>
1471<h4>Definition</h4>
1472<pre>
ecdc0628 1473typedef struct <a href='#ppd_size_s'>ppd_size_s</a> ppd_size_t;
ef416fc2 1474</pre>
1475<!-- NEW PAGE -->
1476<h3 class='title'><a name='ppd_ui_t'>ppd_ui_t</a></h3>
1477<h4>Description</h4>
1478<p>UI Types</p>
1479<h4>Definition</h4>
1480<pre>
1481typedef enum <a href='#ppd_ui_e'>ppd_ui_e</a> ppd_ui_t;
1482</pre>
1483<!-- NEW PAGE -->
1484<h2 class='title'><a name='UNIONS'>Unions</a></h2>
1485<ul>
80ca4592 1486 <li><a href='#ppd_cplimit_u'><tt>ppd_cplimit_u</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
ecdc0628 1487 <li><a href='#ppd_cpvalue_u'><tt>ppd_cpvalue_u</tt></a> <span class='info'>&nbsp;CUPS 1.2&nbsp;</span></li>
ef416fc2 1488</ul>
1489<!-- NEW PAGE -->
80ca4592 1490<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ppd_cplimit_u'>ppd_cplimit_u</a></h3>
1491<h4>Description</h4>
1492<p>Custom Parameter Limit </p>
1493<h4>Definition</h4>
1494<pre>
1495union ppd_cplimit_u
1496{
1497 float custom_curve;
1498 int custom_int;
1499 float custom_invcurve;
1500 int custom_passcode;
1501 int custom_password;
1502 float custom_points;
1503 float custom_real;
1504 int custom_string;
1505};
1506</pre>
1507<h4>Members</h4>
1508<div class='table'><table align='center' border='1' width='80%'>
1509<thead><tr><th>Name</th><th>Description</th></tr></thead>
1510<tbody>
1511<tr><td><tt>custom_curve</tt> </td><td>Gamma value</td></tr>
1512<tr><td><tt>custom_int</tt> </td><td>Integer value</td></tr>
1513<tr><td><tt>custom_invcurve</tt> </td><td>Gamma value</td></tr>
1514<tr><td><tt>custom_passcode</tt> </td><td>Passcode length</td></tr>
1515<tr><td><tt>custom_password</tt> </td><td>Password length</td></tr>
1516<tr><td><tt>custom_points</tt> </td><td>Measurement value</td></tr>
1517<tr><td><tt>custom_real</tt> </td><td>Real value</td></tr>
1518<tr><td><tt>custom_string</tt> </td><td>String length</td></tr>
1519</tbody></table></div>
1520<!-- NEW PAGE -->
ecdc0628 1521<h3 class='title'><span class='info'>&nbsp;CUPS 1.2&nbsp;</span><a name='ppd_cpvalue_u'>ppd_cpvalue_u</a></h3>
ef416fc2 1522<h4>Description</h4>
ecdc0628 1523<p>Custom Parameter Value </p>
ef416fc2 1524<h4>Definition</h4>
1525<pre>
ecdc0628 1526union ppd_cpvalue_u
ef416fc2 1527{
ecdc0628 1528 float custom_curve;
1529 int custom_int;
1530 float custom_invcurve;
1531 char * custom_passcode;
1532 char * custom_password;
1533 float custom_points;
1534 float custom_real;
1535 char * custom_string;
ef416fc2 1536};
1537</pre>
1538<h4>Members</h4>
1539<div class='table'><table align='center' border='1' width='80%'>
1540<thead><tr><th>Name</th><th>Description</th></tr></thead>
1541<tbody>
ecdc0628 1542<tr><td><tt>custom_curve</tt> </td><td>Gamma value</td></tr>
1543<tr><td><tt>custom_int</tt> </td><td>Integer value</td></tr>
1544<tr><td><tt>custom_invcurve</tt> </td><td>Gamma value</td></tr>
1545<tr><td><tt>custom_passcode</tt> </td><td>Passcode value</td></tr>
1546<tr><td><tt>custom_password</tt> </td><td>Password value</td></tr>
1547<tr><td><tt>custom_points</tt> </td><td>Measurement value</td></tr>
1548<tr><td><tt>custom_real</tt> </td><td>Real value</td></tr>
1549<tr><td><tt>custom_string</tt> </td><td>String value</td></tr>
ef416fc2 1550</tbody></table></div>
1551</body>
1552</html>