1 <!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
3 <!-- SECTION: Programming -->
5 <title>Introduction to CUPS Programming
</title>
6 <meta name=
"keywords" content=
"Programming">
7 <meta name=
"creator" content=
"Mini-XML v2.6">
8 <style type=
"text/css"><!--
10 font-family: lucida grande, geneva, helvetica, arial, sans-serif;
13 H1, H2, H3, H4, H5, H6, P, TD, TH {
14 font-family: lucida grande, geneva, helvetica, arial, sans-serif;
18 font-family: monaco, courier, monospace;
23 font-family: monaco, courier, monospace;
41 border: dotted thin #999999;
46 PRE.command EM, PRE.example EM {
47 font-family: lucida grande, geneva, helvetica, arial, sans-serif;
51 font-family: monaco, courier, monospace;
62 border: solid thin #999999;
73 -moz-border-radius: 10px;
78 text-decoration: none;
81 A:link:hover, A:visited:hover, A:active {
82 text-decoration: underline;
89 TR.data, TD.data, TR.data TD {
92 border-bottom: solid 1pt #999999;
96 border-bottom: solid 1pt #999999;
103 border: solid thin #999999;
104 border-collapse: collapse;
120 border: solid thin #cccccc;
127 border-bottom: solid thin #999999;
136 caption-side: bottom;
160 border: thin solid black;
168 H2 SPAN.info, H3 SPAN.info, H4 SPAN.info {
174 border-bottom: solid 2pt #000000;
177 DIV.indent, TABLE.indent {
185 border-collapse: collapse;
188 TABLE.indent TD, TABLE.indent TH {
193 border-collapse: collapse;
201 border-bottom: solid thin #cccccc;
206 vertical-align: bottom;
215 border-bottom: solid thin #eeeeee;
220 TABLE.list TR:nth-child(even) {
224 TABLE.list TR:nth-child(odd) {
243 font-family: monaco, courier, monospace;
247 border: solid thin #999999;
248 border-collapse: collapse;
253 DIV.summary TABLE TD, DIV.summary TABLE TH {
254 border: solid thin #999999;
260 DIV.summary TABLE THEAD TH {
264 /* API documentation styles... */
271 div.body h3, div.body h4, div.body h5 {
272 margin-bottom: 0.5em;
275 .class, .enumeration, .function, .struct, .typedef, .union {
276 border-bottom: solid thin #999999;
283 code, p.code, pre, ul.code li {
284 font-family: monaco, courier, monospace;
287 ul.code, ul.contents, ul.subcontents {
288 list-style-type: none;
298 ul.contents li ul.code, ul.contents li ul.subcontents {
311 margin-bottom: 0.5em;
314 /* This is just for the HTML files generated with the framedhelp target */
317 border: solid thin black;
326 div.contents ul.contents {
329 div.contents ul.subcontents li {
338 "$Id: api-cups.header 7279 2008-01-31 01:50:44Z mike $"
340 Introduction to CUPS programming header for the Common UNIX Printing System
343 Copyright 2008 by Apple Inc.
345 These coded instructions, statements, and computer programs are the
346 property of Apple Inc. and are protected by Federal copyright
347 law. Distribution and use rights are outlined in the file "LICENSE.txt"
348 which should have been included with this file. If this file is
349 file is missing or damaged, see the license at "http://www.cups.org/".
352 <div class='summary'
><table summary='General Information'
>
363 cups/sidechannel.h
</th>
374 <td>Programming:
<a href='raster-driver.html' target='_top'
>Developing Raster Printer Drivers
</a><br>
375 Programming:
<a href='postscript-driver.html' target='_top'
>Developing PostScript Printer Drivers
</a><br>
376 Programming:
<a href='api-filter.html' target='_top'
>Filter and Backend Programming
</a><br>
377 Programming:
<a href='ppd-compiler.html' target='_top'
>Introduction to the PPD Compiler
</a><br>
378 Programming:
<a href='api-array.html' target='_top'
>Array API
</a><br>
379 Programming:
<a href='api-cups.html' target='_top'
>CUPS API
</a><br>
380 Programming:
<a href='api-filedir.html' target='_top'
>File and Directory APIs
</a><br>
381 Programming:
<a href='api-httpipp.html' target='_top'
>HTTP and IPP APIs
</a><br>
382 Programming:
<a href='api-ppd.html' target='_top'
>PPD API
</a><br>
383 Programming:
<a href='api-raster.html' target='_top'
>Raster API
</a><br>
384 References:
<a href='ref-ppdcfile.html' target='_top'
>PPD Compiler Driver Information File Reference
</a><br>
385 Specifications:
<a href='spec-ppd.html' target='_top'
>CUPS PPD Extensions
</a></td>
389 <h2 class=
"title">Contents
</h2>
390 <ul class=
"contents">
391 <ul class=
"subcontents">
392 <li><a href=
"#OVERVIEW">Overview
</a></li>
393 <li><a href=
"#COMPILING">Compiling Programs
</a><ul class=
"subcontents">
394 <li><a href=
"#XCODE">Compiling with Xcode
</a></li>
395 <li><a href=
"#COMMANDLINE">Compiling with GCC
</a></li>
397 <li><a href=
"#WHERETOGO">Where to Go Next
</a></li>
399 "$Id: api-cups.header 7279 2008-01-31 01:50:44Z mike $"
401 Introduction to CUPS programming content for the Common UNIX Printing System
404 Copyright 2008 by Apple Inc.
406 These coded instructions, statements, and computer programs are the
407 property of Apple Inc. and are protected by Federal copyright
408 law. Distribution and use rights are outlined in the file "LICENSE.txt"
409 which should have been included with this file. If this file is
410 file is missing or damaged, see the license at "http://www.cups.org/".
413 <h2 class=
"title"><a name=
"OVERVIEW">Overview
</a></h2>
415 <p>CUPS provides two libraries that interface with the different parts of the
416 printing system. The
"cups" library provides all of the common application and
417 filter functions while the
"cupsimage" library provides all of the imaging
418 functions used in raster printer drivers. The
"cups" library functions are
419 accessed by including the
<var><cups/cups.h
></var> header, while
420 "cupsimage" functions are found in the
<var><cups/raster.h
></var>
423 <h2 class=
"title"><a name=
"COMPILING">Compiling Programs
</a></h2>
425 <p>The CUPS libraries can be used from any C, C++, or Objective C program.
426 The method of compiling against the libraries varies depending on the
427 operating system and installation of CUPS. The following sections show how
428 to compile a simple program (shown below) in two common environments.
</p>
430 <p>The following simple program lists the available printers on the system:
</p>
432 <pre class=
"example">
433 #include
<stdio.h
>
434 #include
<cups/cups.h
>
439 cups_dest_t *dests, *dest;
440 int num_dests = cupsGetDests(
&dests);
442 for (i = num_dests, dest = dests; i
> 0; i --, dest ++)
445 printf(
"%s/%s\n", dest-
>name, dest-
>instance);
454 <h3><a name=
"XCODE">Compiling with Xcode
</a></h3>
456 <p>In Xcode, choose
<var>New Project...
</var> from the
<var>File
</var> menu,
457 then select the
<var>Standard Tool
</var> project type under
<var>Command Line
458 Utility
</var>. Click
<var>Next
</var> and choose a project directory. Click
459 <var>Next
</var> to create the project.
</p>
461 <p>In the project window, double-click on the
<var>Targets
</var> group and
462 control-click on the simple target to show the context menu. Choose
463 <var>Existing Framework...
</var> from the
<var>Add
</var> submenu. When the file
464 chooser sheet appears, press the
<kbd>/
</kbd> key and enter
"/usr/lib". Scroll
465 down the file list and select the
<var>libcups.dylib
</var> file. Click the
466 <var>Add
</var> button in the file chooser and attributes sheets.
</p>
468 <p>In the project window, double-click on the
<var>main.c
</var> source file.
469 Replace the template source code with the listing above and save it. Click the
470 <var>Build and Go
</var> button to build the sample program and run it.
</p>
472 <h3><a name=
"COMMANDLINE">Compiling with GCC
</a></h3>
474 <p>From the command-line, create a file called
<var>sample.c
</var> using your
475 favorite editor and then run the following command to compile it with GCC and
478 <pre class=
"command">
479 gcc -o simple `cups-config --cflags` simple.c `cups-config --libs`
483 <p>The
<code>cups-config
</code> command provides the compiler flags
484 (
"cups-config --cflags") and libraries (
"cups-config --libs") needed for the
487 <h2 class=
"title"><a name=
"WHERETOGO">Where to Go Next
</a></h2>
489 <p>If you are developing a print filter, driver, or backend, see the
490 <a href=
"api-filter.html" target=
"_top">Filter and Backend Programming
</a>
491 guide. Raster printer driver developers should also read the
492 <a href=
"api-raster.html" target=
"_top">Raster API
</a> reference.
</p>