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