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