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