| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
| <html> |
| <!-- SECTION: Programming --> |
| <head> |
| <title>Introduction to CUPS Programming </title> |
| <meta name="keywords" content="Programming"> |
| <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> |
| <meta name="creator" content="Mini-XML v2.7"> |
| <style type="text/css"><!-- |
| BODY { |
| font-family: lucida grande, geneva, helvetica, arial, sans-serif; |
| } |
| |
| H1, H2, H3, H4, H5, H6, P, TD, TH { |
| font-family: lucida grande, geneva, helvetica, arial, sans-serif; |
| } |
| |
| KBD { |
| font-family: monaco, courier, monospace; |
| font-weight: bold; |
| } |
| |
| PRE { |
| font-family: monaco, courier, monospace; |
| } |
| |
| PRE.command { |
| border: dotted thin #7f7f7f; |
| margin-left: 36pt; |
| padding: 10px; |
| } |
| |
| P.compact { |
| margin: 0; |
| } |
| |
| P.example { |
| font-style: italic; |
| margin-left: 36pt; |
| } |
| |
| PRE.example { |
| background: #eeeeee; |
| border: dotted thin #999999; |
| margin-left: 36pt; |
| padding: 10pt; |
| } |
| |
| PRE.command EM, PRE.example EM { |
| font-family: lucida grande, geneva, helvetica, arial, sans-serif; |
| } |
| |
| P.command { |
| font-family: monaco, courier, monospace; |
| margin-left: 36pt; |
| } |
| |
| P.formula { |
| font-style: italic; |
| margin-left: 36pt; |
| } |
| |
| BLOCKQUOTE { |
| background: #eeeeee; |
| border: solid thin #999999; |
| padding: 10pt; |
| } |
| |
| A IMG { |
| border: none; |
| } |
| |
| A:link:hover IMG { |
| background: #f0f0f0; |
| border-radius: 10px; |
| -moz-border-radius: 10px; |
| } |
| |
| A:link, A:visited { |
| font-weight: normal; |
| text-decoration: none; |
| } |
| |
| A:link:hover, A:visited:hover, A:active { |
| text-decoration: underline; |
| } |
| |
| SUB, SUP { |
| font-size: 50%; |
| } |
| |
| TR.data, TD.data, TR.data TD { |
| margin-top: 10pt; |
| padding: 5pt; |
| border-bottom: solid 1pt #999999; |
| } |
| |
| TR.data TH { |
| border-bottom: solid 1pt #999999; |
| padding-top: 10pt; |
| padding-left: 5pt; |
| text-align: left; |
| } |
| |
| DIV.table TABLE { |
| border: solid thin #999999; |
| border-collapse: collapse; |
| border-spacing: 0; |
| margin-left: auto; |
| margin-right: auto; |
| } |
| |
| DIV.table CAPTION { |
| caption-side: top; |
| font-size: 120%; |
| font-style: italic; |
| font-weight: bold; |
| margin-left: auto; |
| margin-right: auto; |
| } |
| |
| DIV.table TABLE TD { |
| border: solid thin #cccccc; |
| padding-top: 5pt; |
| } |
| |
| DIV.table TABLE TH { |
| background: #cccccc; |
| border: none; |
| border-bottom: solid thin #999999; |
| } |
| |
| DIV.figure TABLE { |
| margin-left: auto; |
| margin-right: auto; |
| } |
| |
| DIV.figure CAPTION { |
| caption-side: bottom; |
| font-size: 120%; |
| font-style: italic; |
| font-weight: bold; |
| margin-left: auto; |
| margin-right: auto; |
| } |
| |
| TH.label { |
| text-align: right; |
| vertical-align: top; |
| } |
| |
| TH.sublabel { |
| text-align: right; |
| font-weight: normal; |
| } |
| |
| HR { |
| border: solid thin; |
| } |
| |
| SPAN.info { |
| background: black; |
| border: thin solid black; |
| color: white; |
| font-size: 80%; |
| font-style: italic; |
| font-weight: bold; |
| white-space: nowrap; |
| } |
| |
| H2 SPAN.info, H3 SPAN.info, H4 SPAN.info { |
| float: right; |
| font-size: 100%; |
| } |
| |
| H1.title { |
| } |
| |
| H2.title, H3.title { |
| border-bottom: solid 2pt #000000; |
| } |
| |
| DIV.indent, TABLE.indent { |
| margin-top: 2em; |
| margin-left: auto; |
| margin-right: auto; |
| width: 90%; |
| } |
| |
| TABLE.indent { |
| border-collapse: collapse; |
| } |
| |
| TABLE.indent TD, TABLE.indent TH { |
| padding: 0; |
| } |
| |
| TABLE.list { |
| border-collapse: collapse; |
| margin-left: auto; |
| margin-right: auto; |
| width: 90%; |
| } |
| |
| TABLE.list TH { |
| background: white; |
| border-bottom: solid thin #cccccc; |
| color: #444444; |
| padding-top: 10pt; |
| padding-left: 5pt; |
| text-align: left; |
| vertical-align: bottom; |
| white-space: nowrap; |
| } |
| |
| TABLE.list TH A { |
| color: #4444cc; |
| } |
| |
| TABLE.list TD { |
| border-bottom: solid thin #eeeeee; |
| padding-top: 5pt; |
| padding-left: 5pt; |
| } |
| |
| TABLE.list TR:nth-child(even) { |
| background: #f8f8f8; |
| } |
| |
| TABLE.list TR:nth-child(odd) { |
| background: #f4f4f4; |
| } |
| |
| DT { |
| margin-left: 36pt; |
| margin-top: 12pt; |
| } |
| |
| DD { |
| margin-left: 54pt; |
| } |
| |
| DL.category DT { |
| font-weight: bold; |
| } |
| |
| P.summary { |
| margin-left: 36pt; |
| font-family: monaco, courier, monospace; |
| } |
| |
| DIV.summary TABLE { |
| border: solid thin #999999; |
| border-collapse: collapse; |
| border-spacing: 0; |
| margin: 10px; |
| } |
| |
| DIV.summary TABLE TD, DIV.summary TABLE TH { |
| border: solid thin #999999; |
| padding: 5px; |
| text-align: left; |
| vertical-align: top; |
| } |
| |
| DIV.summary TABLE THEAD TH { |
| background: #eeeeee; |
| } |
| |
| /* API documentation styles... */ |
| div.body h1 { |
| margin: 0; |
| } |
| div.body h2 { |
| margin-top: 1.5em; |
| } |
| div.body h3, div.body h4, div.body h5 { |
| margin-bottom: 0.5em; |
| margin-top: 1.5em; |
| } |
| .class, .enumeration, .function, .struct, .typedef, .union { |
| border-bottom: solid thin #999999; |
| margin-bottom: 0; |
| margin-top: 2em; |
| } |
| .description { |
| margin-top: 0.5em; |
| } |
| code, p.code, pre, ul.code li { |
| font-family: monaco, courier, monospace; |
| font-size: 90%; |
| } |
| ul.code, ul.contents, ul.subcontents { |
| list-style-type: none; |
| margin: 0; |
| padding-left: 0; |
| } |
| ul.code li { |
| margin: 0; |
| } |
| ul.contents > li { |
| margin-top: 1em; |
| } |
| ul.contents li ul.code, ul.contents li ul.subcontents { |
| padding-left: 2em; |
| } |
| div.body dl { |
| margin-left: 0; |
| margin-top: 0; |
| } |
| div.body dt { |
| font-style: italic; |
| margin-left: 0; |
| margin-top: 0; |
| } |
| div.body dd { |
| margin-bottom: 0.5em; |
| } |
| |
| /* This is just for the HTML files generated with the framedhelp target */ |
| div.contents { |
| background: #e8e8e8; |
| border: solid thin black; |
| padding: 10px; |
| } |
| div.contents h1 { |
| font-size: 110%; |
| } |
| div.contents h2 { |
| font-size: 100%; |
| } |
| div.contents ul.contents { |
| font-size: 80%; |
| } |
| div.contents ul.subcontents li { |
| margin-left: 1em; |
| text-indent: -1em; |
| } |
| --></style> |
| </head> |
| <body> |
| <div class='body'> |
| <!-- |
| "$Id$" |
| |
| Introduction to CUPS programming header for CUPS. |
| |
| Copyright 2008-2011 by Apple Inc. |
| |
| These coded instructions, statements, and computer programs are the |
| property of Apple Inc. and are protected by Federal copyright |
| law. Distribution and use rights are outlined in the file "LICENSE.txt" |
| which should have been included with this file. If this file is |
| file is missing or damaged, see the license at "http://www.cups.org/". |
| --> |
| |
| <h1 class='title'>Introduction to CUPS Programming</h1> |
| |
| <div class='summary'><table summary='General Information'> |
| <thead> |
| <tr> |
| <th>Headers</th> |
| <th>cups/cups.h<br> |
| cups/array.h<br> |
| cups/backend.h<br> |
| cups/dir.h<br> |
| cups/file.h<br> |
| cups/ppd.h<br> |
| cups/raster.h<br> |
| cups/sidechannel.h</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <th>Libraries</th> |
| <td>-lcups<br> |
| -lcupsimage</td> |
| </tr> |
| <tr> |
| <th>See Also</th> |
| <td>Programming: <a href='raster-driver.html' target='_top'>Developing Raster Printer Drivers</a><br> |
| Programming: <a href='postscript-driver.html' target='_top'>Developing PostScript Printer Drivers</a><br> |
| Programming: <a href='api-filter.html' target='_top'>Filter and Backend Programming</a><br> |
| Programming: <a href='ppd-compiler.html' target='_top'>Introduction to the PPD Compiler</a><br> |
| Programming: <a href='api-array.html' target='_top'>Array API</a><br> |
| Programming: <a href='api-cups.html' target='_top'>CUPS API</a><br> |
| Programming: <a href='api-filedir.html' target='_top'>File and Directory APIs</a><br> |
| Programming: <a href='api-httpipp.html' target='_top'>HTTP and IPP APIs</a><br> |
| Programming: <a href='api-ppd.html' target='_top'>PPD API</a><br> |
| Programming: <a href='api-raster.html' target='_top'>Raster API</a><br> |
| References: <a href='ref-ppdcfile.html' target='_top'>PPD Compiler Driver Information File Reference</a><br> |
| Specifications: <a href='spec-ppd.html' target='_top'>CUPS PPD Extensions</a></td> |
| </tr> |
| </tbody> |
| </table></div> |
| <h2 class="title">Contents</h2> |
| <ul class="contents"> |
| <li><a href="#OVERVIEW">Overview</a></li> |
| <li><a href="#COMPILING">Compiling Programs</a><ul class="subcontents"> |
| <li><a href="#XCODE">Compiling with Xcode</a></li> |
| <li><a href="#COMMANDLINE">Compiling with GCC</a></li> |
| </ul></li> |
| <li><a href="#WHERETOGO">Where to Go Next</a></li> |
| </ul> |
| <!-- |
| "$Id$" |
| |
| Introduction to CUPS programming content for CUPS. |
| |
| Copyright 2008-2011 by Apple Inc. |
| |
| These coded instructions, statements, and computer programs are the |
| property of Apple Inc. and are protected by Federal copyright |
| law. Distribution and use rights are outlined in the file "LICENSE.txt" |
| which should have been included with this file. If this file is |
| file is missing or damaged, see the license at "http://www.cups.org/". |
| --> |
| |
| <h2 class="title"><a name="OVERVIEW">Overview</a></h2> |
| |
| <p>CUPS provides two libraries that interface with the different parts of the |
| printing system. The "cups" library provides all of the common application and |
| filter functions while the "cupsimage" library provides all of the imaging |
| functions used in raster printer drivers. The "cups" library functions are |
| accessed by including the <var><cups/cups.h></var> header, while |
| "cupsimage" functions are found in the <var><cups/raster.h></var> |
| header.</p> |
| |
| <h2 class="title"><a name="COMPILING">Compiling Programs</a></h2> |
| |
| <p>The CUPS libraries can be used from any C, C++, or Objective C program. |
| The method of compiling against the libraries varies depending on the |
| operating system and installation of CUPS. The following sections show how |
| to compile a simple program (shown below) in two common environments.</p> |
| |
| <p>The following simple program lists the available printers on the system:</p> |
| |
| <pre class="example"> |
| #include <stdio.h> |
| #include <cups/cups.h> |
| |
| int main(void) |
| { |
| int i; |
| cups_dest_t *dests, *dest; |
| int num_dests = cupsGetDests(&dests); |
| |
| for (i = num_dests, dest = dests; i > 0; i --, dest ++) |
| { |
| if (dest->instance) |
| printf("%s/%s\n", dest->name, dest->instance); |
| else |
| puts(dest->name); |
| } |
| |
| return (0); |
| } |
| </pre> |
| |
| <h3><a name="XCODE">Compiling with Xcode</a></h3> |
| |
| <p>In Xcode, choose <var>New Project...</var> from the <var>File</var> menu, |
| then select the <var>Standard Tool</var> project type under <var>Command Line |
| Utility</var>. Click <var>Next</var> and choose a project directory. Click |
| <var>Next</var> to create the project.</p> |
| |
| <p>In the project window, double-click on the <var>Targets</var> group and |
| control-click on the simple target to show the context menu. Choose |
| <var>Existing Framework...</var> from the <var>Add</var> submenu. When the file |
| chooser sheet appears, press the <kbd>/</kbd> key and enter "/usr/lib". Scroll |
| down the file list and select the <var>libcups.dylib</var> file. Click the |
| <var>Add</var> button in the file chooser and attributes sheets.</p> |
| |
| <p>In the project window, double-click on the <var>main.c</var> source file. |
| Replace the template source code with the listing above and save it. Click the |
| <var>Build and Go</var> button to build the sample program and run it.</p> |
| |
| <h3><a name="COMMANDLINE">Compiling with GCC</a></h3> |
| |
| <p>From the command-line, create a file called <var>sample.c</var> using your |
| favorite editor and then run the following command to compile it with GCC and |
| run it:</p> |
| |
| <pre class="command"> |
| gcc -o simple `cups-config --cflags` simple.c `cups-config --libs` |
| ./simple |
| </pre> |
| |
| <p>The <code>cups-config</code> command provides the compiler flags |
| ("cups-config --cflags") and libraries ("cups-config --libs") needed for the |
| local system.</p> |
| |
| <h2 class="title"><a name="WHERETOGO">Where to Go Next</a></h2> |
| |
| <p>If you are developing a print filter, driver, or backend, see the |
| <a href="api-filter.html" target="_top">Filter and Backend Programming</a> |
| guide. Raster printer driver developers should also read the |
| <a href="api-raster.html" target="_top">Raster API</a> reference.</p> |
| </div> |
| </body> |
| </html> |