]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Merge changes from CUPS 1.4svn-r8088, the real official 1.4b1!
authormsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>
Mon, 27 Oct 2008 21:56:38 +0000 (21:56 +0000)
committermsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>
Mon, 27 Oct 2008 21:56:38 +0000 (21:56 +0000)
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current@1035 a1ca3aef-8c08-0410-bb20-df032aa958be

50 files changed:
CHANGES-1.3.txt
backend/usb-libusb.c
cgi-bin/admin.c
config-scripts/cups-common.m4
config-scripts/cups-directories.m4
cups-config.in
cups/api-array.header
cups/api-cups.header
cups/api-filedir.header
cups/api-filter.header
cups/api-httpipp.header
cups/api-overview.header
cups/api-ppd.header
cups/auth.c
cups/testppd.c
doc/Makefile
doc/help/api-array.html
doc/help/api-cups.html
doc/help/api-filedir.html
doc/help/api-filter.html
doc/help/api-httpipp.html
doc/help/api-overview.html
doc/help/api-ppd.html
doc/help/api-raster.html
doc/help/postscript-driver.html
doc/help/raster-driver.html [new file with mode: 0644]
doc/help/spec-ppd.html
filter/api-raster.header
man/cups-config.man
ppdc/ppdc-array.cxx
ppdc/ppdc-catalog.cxx
ppdc/ppdc-driver.cxx
ppdc/ppdc-group.cxx
ppdc/ppdc-message.cxx
ppdc/ppdc-option.cxx
ppdc/ppdc-shared.cxx
ppdc/ppdc-source.cxx
ppdc/ppdc.cxx
ppdc/ppdc.h
ppdc/ppdhtml.cxx
ppdc/ppdi.cxx
ppdc/ppdpo.cxx
ppdc/sample.drv
ppdc/testcatalog.cxx
scheduler/auth.c
scheduler/cups-driverd.cxx
scheduler/ipp.c
scheduler/job.c
scheduler/main.c
templates/edit-config.tmpl

index c9786957306915b50ff3d13bc3716795b392988d..f50af051bfe6413effa5abe2cfbbc8d07f3aad3e 100644 (file)
@@ -6,6 +6,9 @@ CHANGES IN CUPS V1.3.10
        - SECURITY: The PNG image reading code did not validate the
          image size properly, leading to a potential buffer overflow
          (STR #2974)
+       - Fixed some configure script bugs with rc/xinetd directories
+         (STR #2970)
+       - The Epson sample driver PPDs contained errors (STR #2979)
 
 
 CHANGES IN CUPS V1.3.9
index cad8d87ca6be0c232b0d9245f4383a802c01706b..c70940c457444c9342ca7506f2d5cc1b10b7250e 100644 (file)
@@ -380,11 +380,7 @@ get_device_id(usb_printer_t *printer,      /* I - Printer */
 
   if (usb_control_msg(printer->handle,
                       USB_TYPE_CLASS | USB_ENDPOINT_IN | USB_RECIP_INTERFACE,
-                     0, 0,
-                     (printer->iface << 8) |
-                         printer->device->config[printer->conf].
-                             interface[printer->iface].
-                             altsetting[printer->altset].bAlternateSetting,
+                     0, printer->conf, printer->iface,
                      buffer, bufsize, 5000) < 0)
   {
     *buffer = '\0';
@@ -614,14 +610,19 @@ open_device(usb_printer_t *printer,       /* I - Printer */
     fputs("STATE: +connecting-to-device\n", stderr);
 
   number = printer->device->config[printer->conf].bConfigurationValue;
-  while (usb_set_configuration(printer->handle, number) < 0)
+
+  if (usb_set_configuration(printer->handle, number) < 0)
   {
+   /*
+    * If the set fails, chances are that the printer only supports a
+    * single configuration.  Technically these printers don't conform to
+    * the USB printer specification, but otherwise they'll work...
+    */
+
     if (errno != EBUSY)
       fprintf(stderr, "DEBUG: Failed to set configuration %d for %04x:%04x\n",
               number, printer->device->descriptor.idVendor,
              printer->device->descriptor.idProduct);
-
-    goto error;
   }
 
  /*
@@ -633,9 +634,9 @@ open_device(usb_printer_t *printer, /* I - Printer */
   while (usb_claim_interface(printer->handle, number) < 0)
   {
     if (errno != EBUSY)
-      fprintf(stderr, "DEBUG: Failed to claim interface %d for %04x:%04x\n",
+      fprintf(stderr, "DEBUG: Failed to claim interface %d for %04x:%04x: %s\n",
               number, printer->device->descriptor.idVendor,
-             printer->device->descriptor.idProduct);
+             printer->device->descriptor.idProduct, strerror(errno));
 
     goto error;
   }
@@ -644,9 +645,9 @@ open_device(usb_printer_t *printer, /* I - Printer */
     while (usb_claim_interface(printer->handle, 0) < 0)
     {
       if (errno != EBUSY)
-       fprintf(stderr, "DEBUG: Failed to claim interface 0 for %04x:%04x\n",
+       fprintf(stderr, "DEBUG: Failed to claim interface 0 for %04x:%04x: %s\n",
                printer->device->descriptor.idVendor,
-               printer->device->descriptor.idProduct);
+               printer->device->descriptor.idProduct, strerror(errno));
 
       goto error;
     }
@@ -661,9 +662,9 @@ open_device(usb_printer_t *printer, /* I - Printer */
   {
     if (errno != EBUSY)
       fprintf(stderr,
-              "DEBUG: Failed to set alternate interface %d for %04x:%04x\n",
+              "DEBUG: Failed to set alternate interface %d for %04x:%04x: %s\n",
               number, printer->device->descriptor.idVendor,
-             printer->device->descriptor.idProduct);
+             printer->device->descriptor.idProduct, strerror(errno));
 
     goto error;
   }
index a0202037068a69d70aba62225e97b778ec2ed634..bfaf7d3745f1a87774bbfef621558ae51e9d2028 100644 (file)
@@ -267,6 +267,9 @@ choose_device_cb(
     * Update the page...
     */
 
+    if (!last_device_time)
+      cgiStartMultipart();
+
     cgiStartHTML(title);
     cgiCopyTemplateLang("choose-device.tmpl");
     cgiEndHTML();
@@ -906,16 +909,6 @@ do_am_printer(http_t *http,                /* I - HTTP connection */
       cgiSetVariable("CURRENT_DEVICE_SCHEME", uri);
     }
 
-   /*
-    * Prime the page with the current device listed...
-    */
-
-    cgiStartMultipart();
-    cgiStartHTML(title);
-    cgiCopyTemplateLang("choose-device.tmpl");
-    cgiEndHTML();
-    fflush(stdout);
-
    /*
     * Scan for devices for up to 30 seconds, updating the page as we find
     * them...
@@ -923,15 +916,30 @@ do_am_printer(http_t *http,               /* I - HTTP connection */
 
     fputs("DEBUG: Getting list of devices...\n", stderr);
 
-    time(&last_device_time);
-    current_device = 0;
+    last_device_time = 0;
+    current_device   = 0;
     if (cupsGetDevices(http, 30, NULL, (cups_device_cb_t)choose_device_cb,
                        (void *)title) == IPP_OK)
       fputs("DEBUG: Got device list!\n", stderr);
     else
+    {
       fprintf(stderr,
               "ERROR: CUPS-Get-Devices request failed with status %x: %s\n",
              cupsLastError(), cupsLastErrorString());
+      if (cupsLastError() == IPP_NOT_AUTHORIZED)
+      {
+       puts("Status: 401\n");
+       exit(0);
+      }
+      else
+      {
+       cgiStartHTML(title);
+       cgiShowIPPError(modify ? _("Unable to modify printer:") :
+                                _("Unable to add printer:"));
+       cgiEndHTML();
+        return;
+      }
+    }
 
    /*
     * Show the final selection page...
@@ -1115,12 +1123,16 @@ do_am_printer(http_t *http,             /* I - HTTP connection */
       var = cgiGetVariable("PPD_MAKE");
     if (var)
     {
+      const char *make_model;          /* Make and model */
+
+
       ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_TEXT,
                    "ppd-make", NULL, var);
 
-      if ((var = cgiGetVariable("CURRENT_MAKE_AND_MODEL")) != NULL)
+      if ((make_model = cgiGetVariable("CURRENT_MAKE_AND_MODEL")) != NULL &&
+          !cgiGetVariable("SELECT_MAKE"))
        ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_TEXT,
-                    "ppd-make-and-model", NULL, var);
+                    "ppd-make-and-model", NULL, make_model);
     }
     else
       ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
index 9b7ee455bd8172d74b32d2e287c20cbcf44447ba..97431c37177454a306bc3ac0fc1e505b91d46d63 100644 (file)
@@ -25,9 +25,14 @@ CUPS_REVISION=""
 #if test -z "$CUPS_REVISION" -a -d .svn; then
 #      CUPS_REVISION="-r`svnversion . | awk -F: '{print $NF}' | sed -e '1,$s/[[a-zA-Z]]*//g'`"
 #fi
+CUPS_BUILD="cups-$CUPS_VERSION"
+
+AC_ARG_WITH(cups_build, [  --with-cups-build       set "cups-config --build" string ],
+       CUPS_BUILD="$withval")
 
 AC_SUBST(CUPS_VERSION)
 AC_SUBST(CUPS_REVISION)
+AC_SUBST(CUPS_BUILD)
 AC_DEFINE_UNQUOTED(CUPS_SVERSION, "CUPS v$CUPS_VERSION$CUPS_REVISION")
 AC_DEFINE_UNQUOTED(CUPS_MINIMAL, "CUPS/$CUPS_VERSION$CUPS_REVISION")
 
index 82783aa7b85ebdcc7a59cc0148d0eaef76cadeb1..78a4c96d385094c9744269ec3bc6631aba9fcbd9 100644 (file)
@@ -207,7 +207,7 @@ if test x$rcdir = x; then
                        ;;
 
        esac
-else
+elif test "x$rcdir" != xno; then
        if test "x$rclevels" = x; then
                INITDDIR="$rcdir"
        else
@@ -232,6 +232,8 @@ if test "x$XINETD" = x -a ! -x /sbin/launchd; then
                        break
                fi
        done
+elif test "x$XINETD" = xno; then
+       XINETD=""
 fi
 
 AC_SUBST(XINETD)
index 1a68a12c7086fddbbfebeb4de417950fae86e855..8a3db337516a88bda9f6d6d148c4c11676209e03 100755 (executable)
@@ -4,7 +4,7 @@
 # 
 #   CUPS configuration utility.
 #
-#   Copyright 2007 by Apple Inc.
+#   Copyright 2007-2008 by Apple Inc.
 #   Copyright 2001-2006 by Easy Software Products, all rights reserved.
 #
 #   These coded instructions, statements, and computer programs are the
@@ -16,6 +16,7 @@
 
 VERSION="@CUPS_VERSION@"
 APIVERSION="1.4"
+BUILD="@CUPS_BUILD@"
 
 prefix=@prefix@
 exec_prefix=@exec_prefix@
@@ -62,6 +63,7 @@ fi
 usage ()
 {
     echo "Usage: cups-config --api-version"
+    echo "       cups-config --build"
     echo "       cups-config --cflags"
     echo "       cups-config --datadir"
     echo "       cups-config --help"
@@ -88,6 +90,9 @@ while test $# -gt 0; do
        --api-version)
            echo $APIVERSION
            ;;
+       --build)
+           echo $BUILD
+           ;;
        --cflags)
            echo $CFLAGS
            ;;
index c4d28b46470383ccc137b6e7bc381abecac7d525..825b407543ab11cd6764b57c4b26f41f99399352 100644 (file)
@@ -12,8 +12,6 @@
   file is missing or damaged, see the license at "http://www.cups.org/".
 -->
 
-<h1 class="title">Array API</h1>
-
 <div class='summary'><table summary='General Information'>
 <thead>
 <tr>
index c95b611fd0b7d0bed0a8e05cdebe289991e323a1..cc4dd408b88d4b288e1ebaa518b071d82d83ed97 100644 (file)
@@ -12,8 +12,6 @@
   file is missing or damaged, see the license at "http://www.cups.org/".
 -->
 
-<h1 class="title">CUPS API</h1>
-
 <div class='summary'><table summary='General Information'>
 <thead>
 <tr>
index e4c7994f5f6cf30048a7a1b9f5c7d3ffc9761c24..2a46a6771320f6c3ab13b9c28204ef6ebdf3fe6c 100644 (file)
@@ -12,8 +12,6 @@
   file is missing or damaged, see the license at "http://www.cups.org/".
 -->
 
-<h1 class="title">File and Directory APIs</h1>
-
 <div class='summary'><table summary='General Information'>
 <thead>
 <tr>
index bfe1a73aab911691b6e022ab7374cd34d6180931..8f12ebcfade3f28daed89cd864ea19f423863a45 100644 (file)
@@ -13,8 +13,6 @@
   file is missing or damaged, see the license at "http://www.cups.org/".
 -->
 
-<h1 class="title">Filter and Backend Programming</h1>
-
 <div class='summary'><table summary='General Information'>
 <thead>
 <tr>
index 4bb1b3d5793f3c217ac65caff28c00003ad68dda..df069fb5907ce81ad84def982571940623bec38c 100644 (file)
@@ -13,8 +13,6 @@
   file is missing or damaged, see the license at "http://www.cups.org/".
 -->
 
-<h1 class="title">HTTP and IPP APIs</h1>
-
 <div class='summary'><table summary='General Information'>
 <thead>
 <tr>
index 51dbb2776fbbd9e7ced60e34cb989aa6bd7204b9..23cdd4fee5baaa5ea26742c895ec3fce8ddc8c05 100644 (file)
@@ -13,8 +13,6 @@
   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>
 </tr>
 <tr>
        <th>See Also</th>
-       <td>Programming: <a href='api-cups.html' target='_top'>CUPS API</a><br>
+       <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-filter.html' target='_top'>Filter and Backend Programming</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></td>
+       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>
index 8ec2f7593dd576f707c8a7940c11fb936cee76cc..5c74e16d1c182a344d3970a6277d76af29d7f888 100644 (file)
@@ -12,8 +12,6 @@
   file is missing or damaged, see the license at "http://www.cups.org/".
 -->
 
-<h1 class="title">PPD API</h1>
-
 <div class='summary'><table summary='General Information'>
 <thead>
 <tr>
index 36fe0d48aa3ace05ab74de70aed5f7e8d5ec9362..d97029e137030445635506116199e97f737523c3 100644 (file)
@@ -530,7 +530,8 @@ cups_local_auth(http_t *http)               /* I - HTTP connection to server */
     http->auth_ref = NULL;
   }
 
-  if (httpGetSubField2(http, HTTP_FIELD_WWW_AUTHENTICATE, "authkey", 
+  if (!getenv("GATEWAY_INTERFACE") &&
+      httpGetSubField2(http, HTTP_FIELD_WWW_AUTHENTICATE, "authkey", 
                       auth_key, sizeof(auth_key)))
   {
     status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, 
index b16052ece75a576d5ba21be88b5a41794634f863..2583f3fd915867a764f9a5bb4060d510dce8520b 100644 (file)
@@ -724,7 +724,6 @@ main(int  argc,                             /* I - Number of command-line arguments */
     else
     {
       int              j, k;           /* Looping vars */
-      ppd_attr_t       *attr;          /* Current attribute */
       ppd_group_t      *group;         /* Option group */
       ppd_option_t     *option;        /* Option */
       ppd_coption_t    *coption;       /* Custom option */
@@ -750,6 +749,14 @@ main(int  argc,                            /* I - Number of command-line arguments */
 
       ppdLocalize(ppd);
 
+      if (argc > 3)
+      {
+        text = ppdLocalizeIPPReason(ppd, argv[3], NULL, buffer, sizeof(buffer));
+       printf("ppdLocalizeIPPReason(%s)=%s\n", argv[3],
+              text ? text : "(null)");
+       return (text == NULL);
+      }
+
       for (i = ppd->num_groups, group = ppd->groups;
           i > 0;
           i --, group ++)
index 016b1d2012423e6ba2d3c555456c4b64f9c8811b..1373dea6833cf6ff8b237f122459a6ea23d87ee9 100644 (file)
@@ -29,7 +29,10 @@ WEBIMAGES    =       \
                        images/cups.png \
                        images/cups.rgb \
                        images/cups-block-diagram.gif \
+                       images/cups-command-chain.png \
                        images/cups-icon.png \
+                       images/cups-postscript-chain.png \
+                       images/cups-raster-chain.png \
                        images/left.gif \
                        images/raster.png \
                        images/right.gif \
@@ -88,6 +91,7 @@ HELPFILES     =       \
                        help/policies.html \
                        help/postscript-driver.html \
                        help/ppd-compiler.html \
+                       help/raster-driver.html \
                        help/ref-access_log.html \
                        help/ref-classes-conf.html \
                        help/ref-client-conf.html \
index 007d71278b2f4b0dfd64a81e96dad397ba900721..fe4a8c076765250859467acea5e9ae94353a90e0 100644 (file)
@@ -27,6 +27,11 @@ PRE.command {
   margin-left: 36pt;
 }
 
+P.example {
+  font-style: italic;
+  margin-left: 36pt;
+}
+  
 PRE.example {
   background: #eeeeee;
   border: dotted thin #999999;
@@ -54,6 +59,16 @@ BLOCKQUOTE {
   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;
@@ -67,6 +82,19 @@ 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;
@@ -110,19 +138,23 @@ DIV.figure CAPTION {
 }
 
 TH.label {
-  padding-top: 5pt;
   text-align: right;
   vertical-align: top;
 }
 
+TH.sublabel {
+  text-align: right;
+  font-weight: normal;
+}
+
 HR {
   border: solid thin;
 }
 
 SPAN.info {
-  background: #000000;
-  border: thin solid #000000;
-  color: #ffffff;
+  background: black;
+  border: thin solid black;
+  color: white;
   font-size: 80%;
   font-style: italic;
   font-weight: bold;
@@ -138,6 +170,57 @@ 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;
@@ -156,11 +239,6 @@ P.summary {
   font-family: monaco, courier, monospace;
 }
 
-SPAN.message {
-  font-style: italic;
-  font-size: smaller;
-}
-
 DIV.summary TABLE {
   border: solid thin #999999;
   border-collapse: collapse;
@@ -266,8 +344,6 @@ div.contents ul.subcontents li {
   file is missing or damaged, see the license at "http://www.cups.org/".
 -->
 
-<h1 class="title">Array API</h1>
-
 <div class='summary'><table summary='General Information'>
 <thead>
 <tr>
index ec943f04114f17aa4403de3459c4fbbd8839c156..181f66d9638be6233004c153678fe520ee64b91e 100644 (file)
@@ -27,6 +27,11 @@ PRE.command {
   margin-left: 36pt;
 }
 
+P.example {
+  font-style: italic;
+  margin-left: 36pt;
+}
+  
 PRE.example {
   background: #eeeeee;
   border: dotted thin #999999;
@@ -54,6 +59,16 @@ BLOCKQUOTE {
   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;
@@ -67,6 +82,19 @@ 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;
@@ -110,19 +138,23 @@ DIV.figure CAPTION {
 }
 
 TH.label {
-  padding-top: 5pt;
   text-align: right;
   vertical-align: top;
 }
 
+TH.sublabel {
+  text-align: right;
+  font-weight: normal;
+}
+
 HR {
   border: solid thin;
 }
 
 SPAN.info {
-  background: #000000;
-  border: thin solid #000000;
-  color: #ffffff;
+  background: black;
+  border: thin solid black;
+  color: white;
   font-size: 80%;
   font-style: italic;
   font-weight: bold;
@@ -138,6 +170,57 @@ 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;
@@ -156,11 +239,6 @@ P.summary {
   font-family: monaco, courier, monospace;
 }
 
-SPAN.message {
-  font-style: italic;
-  font-size: smaller;
-}
-
 DIV.summary TABLE {
   border: solid thin #999999;
   border-collapse: collapse;
@@ -266,8 +344,6 @@ div.contents ul.subcontents li {
   file is missing or damaged, see the license at "http://www.cups.org/".
 -->
 
-<h1 class="title">CUPS API</h1>
-
 <div class='summary'><table summary='General Information'>
 <thead>
 <tr>
index 5ad93f95f61f08511bee41756a5b22bca8e0eb56..0bb9eea2aed304a24d552cb6b32a743e97d11804 100644 (file)
@@ -27,6 +27,11 @@ PRE.command {
   margin-left: 36pt;
 }
 
+P.example {
+  font-style: italic;
+  margin-left: 36pt;
+}
+  
 PRE.example {
   background: #eeeeee;
   border: dotted thin #999999;
@@ -54,6 +59,16 @@ BLOCKQUOTE {
   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;
@@ -67,6 +82,19 @@ 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;
@@ -110,19 +138,23 @@ DIV.figure CAPTION {
 }
 
 TH.label {
-  padding-top: 5pt;
   text-align: right;
   vertical-align: top;
 }
 
+TH.sublabel {
+  text-align: right;
+  font-weight: normal;
+}
+
 HR {
   border: solid thin;
 }
 
 SPAN.info {
-  background: #000000;
-  border: thin solid #000000;
-  color: #ffffff;
+  background: black;
+  border: thin solid black;
+  color: white;
   font-size: 80%;
   font-style: italic;
   font-weight: bold;
@@ -138,6 +170,57 @@ 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;
@@ -156,11 +239,6 @@ P.summary {
   font-family: monaco, courier, monospace;
 }
 
-SPAN.message {
-  font-style: italic;
-  font-size: smaller;
-}
-
 DIV.summary TABLE {
   border: solid thin #999999;
   border-collapse: collapse;
@@ -266,8 +344,6 @@ div.contents ul.subcontents li {
   file is missing or damaged, see the license at "http://www.cups.org/".
 -->
 
-<h1 class="title">File and Directory APIs</h1>
-
 <div class='summary'><table summary='General Information'>
 <thead>
 <tr>
index ae6f993298e9174b5d20fb020ea56148e784c512..fa1c17a80da5becb6335d124d6fe6ee4389eb9d4 100644 (file)
@@ -27,6 +27,11 @@ PRE.command {
   margin-left: 36pt;
 }
 
+P.example {
+  font-style: italic;
+  margin-left: 36pt;
+}
+  
 PRE.example {
   background: #eeeeee;
   border: dotted thin #999999;
@@ -54,6 +59,16 @@ BLOCKQUOTE {
   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;
@@ -67,6 +82,19 @@ 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;
@@ -110,19 +138,23 @@ DIV.figure CAPTION {
 }
 
 TH.label {
-  padding-top: 5pt;
   text-align: right;
   vertical-align: top;
 }
 
+TH.sublabel {
+  text-align: right;
+  font-weight: normal;
+}
+
 HR {
   border: solid thin;
 }
 
 SPAN.info {
-  background: #000000;
-  border: thin solid #000000;
-  color: #ffffff;
+  background: black;
+  border: thin solid black;
+  color: white;
   font-size: 80%;
   font-style: italic;
   font-weight: bold;
@@ -138,6 +170,57 @@ 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;
@@ -156,11 +239,6 @@ P.summary {
   font-family: monaco, courier, monospace;
 }
 
-SPAN.message {
-  font-style: italic;
-  font-size: smaller;
-}
-
 DIV.summary TABLE {
   border: solid thin #999999;
   border-collapse: collapse;
@@ -267,8 +345,6 @@ div.contents ul.subcontents li {
   file is missing or damaged, see the license at "http://www.cups.org/".
 -->
 
-<h1 class="title">Filter and Backend Programming</h1>
-
 <div class='summary'><table summary='General Information'>
 <thead>
 <tr>
index 74aaaf9ddcea880cf716c6b3818f0d9813840346..cb411fc3aa8f40728eecf480bbecf5e46604fec1 100644 (file)
@@ -27,6 +27,11 @@ PRE.command {
   margin-left: 36pt;
 }
 
+P.example {
+  font-style: italic;
+  margin-left: 36pt;
+}
+  
 PRE.example {
   background: #eeeeee;
   border: dotted thin #999999;
@@ -54,6 +59,16 @@ BLOCKQUOTE {
   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;
@@ -67,6 +82,19 @@ 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;
@@ -110,19 +138,23 @@ DIV.figure CAPTION {
 }
 
 TH.label {
-  padding-top: 5pt;
   text-align: right;
   vertical-align: top;
 }
 
+TH.sublabel {
+  text-align: right;
+  font-weight: normal;
+}
+
 HR {
   border: solid thin;
 }
 
 SPAN.info {
-  background: #000000;
-  border: thin solid #000000;
-  color: #ffffff;
+  background: black;
+  border: thin solid black;
+  color: white;
   font-size: 80%;
   font-style: italic;
   font-weight: bold;
@@ -138,6 +170,57 @@ 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;
@@ -156,11 +239,6 @@ P.summary {
   font-family: monaco, courier, monospace;
 }
 
-SPAN.message {
-  font-style: italic;
-  font-size: smaller;
-}
-
 DIV.summary TABLE {
   border: solid thin #999999;
   border-collapse: collapse;
@@ -267,8 +345,6 @@ div.contents ul.subcontents li {
   file is missing or damaged, see the license at "http://www.cups.org/".
 -->
 
-<h1 class="title">HTTP and IPP APIs</h1>
-
 <div class='summary'><table summary='General Information'>
 <thead>
 <tr>
index d5d3358c81aadd28d68c565d117f16d38b20ca44..998cca91bf778cf4b72748c25df497d640f48771 100644 (file)
@@ -27,6 +27,11 @@ PRE.command {
   margin-left: 36pt;
 }
 
+P.example {
+  font-style: italic;
+  margin-left: 36pt;
+}
+  
 PRE.example {
   background: #eeeeee;
   border: dotted thin #999999;
@@ -54,6 +59,16 @@ BLOCKQUOTE {
   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;
@@ -67,6 +82,19 @@ 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;
@@ -110,19 +138,23 @@ DIV.figure CAPTION {
 }
 
 TH.label {
-  padding-top: 5pt;
   text-align: right;
   vertical-align: top;
 }
 
+TH.sublabel {
+  text-align: right;
+  font-weight: normal;
+}
+
 HR {
   border: solid thin;
 }
 
 SPAN.info {
-  background: #000000;
-  border: thin solid #000000;
-  color: #ffffff;
+  background: black;
+  border: thin solid black;
+  color: white;
   font-size: 80%;
   font-style: italic;
   font-weight: bold;
@@ -138,6 +170,57 @@ 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;
@@ -156,11 +239,6 @@ P.summary {
   font-family: monaco, courier, monospace;
 }
 
-SPAN.message {
-  font-style: italic;
-  font-size: smaller;
-}
-
 DIV.summary TABLE {
   border: solid thin #999999;
   border-collapse: collapse;
@@ -267,8 +345,6 @@ div.contents ul.subcontents li {
   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>
@@ -291,13 +367,18 @@ div.contents ul.subcontents li {
 </tr>
 <tr>
        <th>See Also</th>
-       <td>Programming: <a href='api-cups.html' target='_top'>CUPS API</a><br>
+       <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-filter.html' target='_top'>Filter and Backend Programming</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></td>
+       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>
index 20e51fc4e04e0c197081371138f98197a77a0b70..d44fab422431a01092cef1b6edd8671b6c5ceebe 100644 (file)
@@ -27,6 +27,11 @@ PRE.command {
   margin-left: 36pt;
 }
 
+P.example {
+  font-style: italic;
+  margin-left: 36pt;
+}
+  
 PRE.example {
   background: #eeeeee;
   border: dotted thin #999999;
@@ -54,6 +59,16 @@ BLOCKQUOTE {
   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;
@@ -67,6 +82,19 @@ 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;
@@ -110,19 +138,23 @@ DIV.figure CAPTION {
 }
 
 TH.label {
-  padding-top: 5pt;
   text-align: right;
   vertical-align: top;
 }
 
+TH.sublabel {
+  text-align: right;
+  font-weight: normal;
+}
+
 HR {
   border: solid thin;
 }
 
 SPAN.info {
-  background: #000000;
-  border: thin solid #000000;
-  color: #ffffff;
+  background: black;
+  border: thin solid black;
+  color: white;
   font-size: 80%;
   font-style: italic;
   font-weight: bold;
@@ -138,6 +170,57 @@ 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;
@@ -156,11 +239,6 @@ P.summary {
   font-family: monaco, courier, monospace;
 }
 
-SPAN.message {
-  font-style: italic;
-  font-size: smaller;
-}
-
 DIV.summary TABLE {
   border: solid thin #999999;
   border-collapse: collapse;
@@ -266,8 +344,6 @@ div.contents ul.subcontents li {
   file is missing or damaged, see the license at "http://www.cups.org/".
 -->
 
-<h1 class="title">PPD API</h1>
-
 <div class='summary'><table summary='General Information'>
 <thead>
 <tr>
index 2672ec9db0261ed98b3208d340af542bca3ec76a..db6c3e60643227c6a3daeeaa042b424499bbd90f 100644 (file)
@@ -27,6 +27,11 @@ PRE.command {
   margin-left: 36pt;
 }
 
+P.example {
+  font-style: italic;
+  margin-left: 36pt;
+}
+  
 PRE.example {
   background: #eeeeee;
   border: dotted thin #999999;
@@ -54,6 +59,16 @@ BLOCKQUOTE {
   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;
@@ -67,6 +82,19 @@ 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;
@@ -110,19 +138,23 @@ DIV.figure CAPTION {
 }
 
 TH.label {
-  padding-top: 5pt;
   text-align: right;
   vertical-align: top;
 }
 
+TH.sublabel {
+  text-align: right;
+  font-weight: normal;
+}
+
 HR {
   border: solid thin;
 }
 
 SPAN.info {
-  background: #000000;
-  border: thin solid #000000;
-  color: #ffffff;
+  background: black;
+  border: thin solid black;
+  color: white;
   font-size: 80%;
   font-style: italic;
   font-weight: bold;
@@ -138,6 +170,57 @@ 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;
@@ -156,11 +239,6 @@ P.summary {
   font-family: monaco, courier, monospace;
 }
 
-SPAN.message {
-  font-style: italic;
-  font-size: smaller;
-}
-
 DIV.summary TABLE {
   border: solid thin #999999;
   border-collapse: collapse;
@@ -266,8 +344,6 @@ div.contents ul.subcontents li {
   file is missing or damaged, see the license at "http://www.cups.org/".
 -->
 
-<h1 class="title">Raster API</h1>
-
 <div class='summary'><table summary='General Information'>
 <thead>
 <tr>
index 89f2df99b92639e1797956bebe719aab52d1a58d..dd46cbd20219e57ae9eaa07f4a0e59f113e3bca9 100644 (file)
@@ -235,6 +235,40 @@ information file.</P>
 <a href='ref-ppdcfile.html#Filter'>Filter</a> application/vnd.cups-postscript 0 -
 </pre>
 
+<h3>Custom Command Filters</h3>
+
+<p>The <tt>application/vnd.cups-command</tt> file type is used for CUPS command files. Use the following <tt>Filter</tt> directive to handle CUPS command files:</p>
+
+<pre class='example'>
+<a href='ref-ppdcfile.html#Filter'>Filter</a> application/vnd.cups-command 100 /path/to/command/filter
+</pre>
+
+<p>To use the standard PostScript command filter, specify <var>commandtops</var> as the path to the command filter.</p>
+
+<h3>Custom PDF Filters</h3>
+
+<p>The <tt>application/pdf</tt> file type is used for unfiltered PDF files while the <tt>application/vnd.cups-pdf</tt> file type is used for filtered PDF files. Use the following <tt>Filter</tt> directive to handle filtered PDF files:</p>
+
+<pre class='example'>
+<a href='ref-ppdcfile.html#Filter'>Filter</a> application/vnd.cups-pdf 100 /path/to/pdf/filter
+</pre>
+
+<p>For unfiltered PDF files, use:</p>
+
+<pre class='example'>
+<a href='ref-ppdcfile.html#Filter'>Filter</a> application/pdf 100 /path/to/pdf/filter
+</pre>
+
+<p>Custom PDF filters that accept filtered data do not need to perform number-up processing and other types of page imposition, while those that accept unfiltered data MUST do the number-up processing themselves.</p>
+
+<h3>Custom PostScript Filters</h3>
+
+<p>The <tt>application/vnd.cups-postscript</tt> file type is used for filtered PostScript files. Use the following <tt>Filter</tt> directive to handle PostScript files:</p>
+
+<pre class='example'>
+<a href='ref-ppdcfile.html#Filter'>Filter</a> application/vnd.cups-postscript 100 /path/to/postscript/filter
+</pre>
+
 
 <h2 class='title'><a name='COLOR'>Implementing Color Management</a></h2>
 
diff --git a/doc/help/raster-driver.html b/doc/help/raster-driver.html
new file mode 100644 (file)
index 0000000..c2517e1
--- /dev/null
@@ -0,0 +1,198 @@
+<HTML>
+<!-- SECTION: Programming -->
+<HEAD>
+       <TITLE>Developing Raster Printer Drivers</TITLE>
+</HEAD>
+<BODY>
+
+<p>This document describes how to develop printer drivers for raster printers. Topics include: <a href='#BASICS'>printer driver basics</a>, <a href='#CREATE'>creating new PPD files</a>, <a href='#FILTERS'>using filters</a>, <a href='#COLOR'>implementing color management</a>, <a href='#MACOSX'>adding Mac OS X features</a>, and <a href='#DEPLOY'>deploying your driver</a>.</p>
+
+<div class='summary'><table summary='General Information'>
+<tbody>
+<tr>
+       <th>See Also</th>
+       <td>Programming: <a href='postscript-driver.html'>Developing PostScript Printer Drivers</a><br>
+       Programming: <a href='api-filter.html'>Filter and Backend Programming</a><br>
+       Programming: <a href='ppd-compiler.html'>Introduction to the PPD Compiler</a><br>
+       Programming: <a href='api-raster.html'>Raster API</a><br>
+       References: <a href='ref-ppdcfile.html'>PPD Compiler Driver Information File Reference</a><br>
+       Specifications: <a href='spec-ppd.html'>CUPS PPD Extensions</a></td>
+</tr>
+</tbody>
+</table></div>
+
+
+<h2 class='title'><a name='BASICS'>Printer Driver Basics</a></h2>
+
+<p>A CUPS raster printer driver consists of a PostScript Printer Description (PPD) file that describes the features and capabilities of the device, one or more <em>filter</em> programs that prepare print data for the device, and zero or more support files for color management, online help, and so forth. The PPD file includes references to all of the filters and support files used by the driver.</p>
+
+<p>Every time a user prints something the scheduler program, <a href='man-cupsd.html'>cupsd(8)</a>, determines the format of the print job and the programs required to convert that job into something the printer understands. CUPS includes filter programs for many common formats, for example to convert Portable Document Format (PDF) files into CUPS raster data. <a href='#FIGURE_1'>Figure 1</a> shows the data flow of a typical print job.</p>
+
+<div class='figure'><table summary='Raster Filter Chain'>
+<caption>Figure 1: <a name='FIGURE_1'>Raster Filter Chain</a></caption>
+<tr><td><img src='/images/cups-raster-chain.png' width='700' height='150' alt='Raster Filter Chain'></td></tr>
+</table></div>
+
+<p>The raster filter converts CUPS raster data into a format the printer understands, for example HP-PCL. CUPS includes several sample raster filters supporting standard page description languages (PDLs). <a href='#TABLE_1'>Table 1</a> shows the raster filters that are bundled with CUPS and the languages they support.</p>
+
+<div class='table'><table summary='Standard CUPS Raster Filters'>
+<caption>Table 1: <a name='TABLE_1'>Standard CUPS Raster Filters</a></caption>
+<thead>
+<tr><th>Filter</th><th>PDLs</th><th>ppdc DriverType</th><th>ppdc #include file</th></tr>
+</thead>
+<tbody>
+<tr><td>rastertoepson</td><td>ESC/P, ESC/P2</td><td>epson</td><td>epson.h</td></tr>
+<tr><td>rastertoescpx</td><td>ESC/P, ESC/P2, EPSON Remote Mode</td><td>escp</td><td>escp.h</td></tr>
+<tr><td>rastertohp</td><td>HP-PCL3, HP-PCL5</td><td>hp</td><td>hp.h</td></tr>
+<tr><td>rastertolabel</td><td>CPCL, Dymo, EPL1, EPL2, Intellitech PCL, ZPL</td><td>label</td><td>label.h</td></tr>
+<tr><td>rastertopclx</td><td>HP-RTL, HP-PCL3, HP-PCL3GUI, HP-PCL5, HP-PCL5c, HP-PCL5e</td><td>pcl</td><td>pcl.h</td></tr>
+</tbody>
+</table></div>
+
+<p>The optional port monitor handles interface-specific protocol or encoding issues. For example, some raster printers use the 1284.4 communications protocol.</p>
+
+<p>The backend handles communications with the printer, sending print data from the last filter to the printer and relaying back-channel data from the printer to the upstream filters. CUPS includes backend programs for common direct-connect interfaces and network protocols, and you can provide your own backend to support custom interfaces and protocols.</p>
+
+<p>The scheduler also supports a special "command" file format for sending maintenance commands and status queries to a printer or printer driver. Command print jobs typically use a single command filter program defined in the PPD file to generate the appropriate printer commands and handle any responses from the printer. <a href='#FIGURE_2'>Figure 2</a> shows the data flow of a typical command job.</p>
+
+<div class='figure'><table summary='Command Filter Chain'>
+<caption>Figure 2: <a name='FIGURE_2'>Command Filter Chain</a></caption>
+<tr><td><img src='/images/cups-command-chain.png' width='575' height='150' alt='Command Filter Chain'></td></tr>
+</table></div>
+
+<p>Raster printer drivers must provide their own command filter.</p>
+
+
+<h2 class='title'><a name='CREATING'>Creating New PPD Files</a></h2>
+
+<p>We recommend using the CUPS PPD compiler, <a href='man-ppdc.html'>ppdc(1)</a>, to create new PPD files since it manages many of the tedious (and error-prone!) details of paper sizes and localization for you. It also allows you to easily support multiple devices from a single source file. For more information see the "<a href='ppd-compiler.html'>Introduction to the PPD Compiler</a>" document. <a href='#LISTING_1'>Listing 1</a> shows a driver information file for several similar black-and-white HP-PCL5 laser printers.</p>
+
+<p class='example'>Listing 1: <a name='LISTING_1'>"examples/laserjet-basic.drv"</a></p>
+
+<pre class='example'>
+<I>// Include standard font and media definitions</I>
+<a href='ref-ppdcfile.html#_include'>#include</a> &lt;font.defs&gt;
+<a href='ref-ppdcfile.html#_include'>#include</a> &lt;media.defs&gt;
+
+<I>// Include HP-PCL driver definitions</I>
+<a href='ref-ppdcfile.html#_include'>#include</a> &lt;pcl.h&gt;
+
+<I>// Specify that this driver uses the HP-PCL driver...</I>
+<a href='ref-ppdcfile.html#DriverType'>DriverType</a> pcl
+
+<I>// Specify the driver options via the model number...</I>
+<a href='ref-ppdcfile.html#ModelNumber'>ModelNumber</a> ($PCL_PAPER_SIZE $PCL_PJL $PCL_PJL_RESOLUTION)
+
+<I>// List the fonts that are supported, in this case all standard fonts...</I>
+<a href='ref-ppdcfile.html#Font'>Font</a> *
+
+<I>// Manufacturer and driver version</I>
+<a href='ref-ppdcfile.html#Manufacturer'>Manufacturer</a> "HP"
+<a href='ref-ppdcfile.html#Version'>Version</a> 1.0
+
+<I>// Supported page sizes and their margins</I>
+<a href='ref-ppdcfile.html#HWMargins'>HWMargins</a> 18 12 18 12
+*<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Letter
+<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Legal
+<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Executive
+<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Monarch
+<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Statement
+<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> FanFoldGermanLegal
+
+<a href='ref-ppdcfile.html#HWMargins'>HWMargins</a> 18 12.72 18 12.72
+<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Env10
+
+<a href='ref-ppdcfile.html#HWMargins'>HWMargins</a> 9.72 12 9.72 12
+<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> A4
+<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> A5
+<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> B5
+<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> EnvC5
+<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> EnvDL
+<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> EnvISOB5
+<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> Postcard
+<a href='ref-ppdcfile.html#MediaSize'>MediaSize</a> DoublePostcard
+
+<I>// Only black-and-white output with mode 3 compression...</I>
+<a href='ref-ppdcfile.html#ColorModel'>ColorModel</a> Gray k chunky 3
+
+<I>// Supported resolutions</I>
+<a href='ref-ppdcfile.html#Resolution'>Resolution</a> - 1 0 0 0 "300dpi/300 DPI"
+*<a href='ref-ppdcfile.html#Resolution'>Resolution</a> - 8 0 0 0 "600dpi/600 DPI"
+
+<I>// Supported input slots</I>
+*<a href='ref-ppdcfile.html#InputSlot'>InputSlot</a> 7 "Auto/Automatic Selection"
+<a href='ref-ppdcfile.html#InputSlot'>InputSlot</a> 2 "Manual/Tray 1 - Manual Feed"
+<a href='ref-ppdcfile.html#InputSlot'>InputSlot</a> 4 "Upper/Tray 1"
+<a href='ref-ppdcfile.html#InputSlot'>InputSlot</a> 1 "Lower/Tray 2"
+<a href='ref-ppdcfile.html#InputSlot'>InputSlot</a> 5 "LargeCapacity/Tray 3"
+
+<I>// Tray 3 is an option...</I>
+<a href='ref-ppdcfile.html#Installable'>Installable</a> "OptionLargeCapacity/Tray 3 Installed"
+<a href='ref-ppdcfile.html#UIConstraints'>UIConstraints</a> "*OptionLargeCapacity False *InputSlot LargeCapacity"
+
+{
+  <I>// HP LaserJet 2100 Series</I>
+  <a href='ref-ppdcfile.html#Throughput'>Throughput</a> 10
+  <a href='ref-ppdcfile.html#ModelName'>ModelName</a> "LaserJet 2100 Series"
+  <a href='ref-ppdcfile.html#PCFileName'>PCFileName</a> "hpljt211.ppd"
+}
+
+{
+  <I>// LaserJet 2200 and 2300 series have duplexer option...</I>
+  <a href='ref-ppdcfile.html#Duplex'>Duplex</a> normal
+  <a href='ref-ppdcfile.html#Installable'>Installable</a> "OptionDuplex/Duplexer Installed"
+  <a href='ref-ppdcfile.html#UIConstraints'>UIConstraints</a> "*OptionDuplex False *Duplex"
+
+  {
+    <I>// HP LaserJet 2200 Series</I>
+    <a href='ref-ppdcfile.html#Throughput'>Throughput</a> 19
+    <a href='ref-ppdcfile.html#ModelName'>ModelName</a> "LaserJet 2200 Series"
+    <a href='ref-ppdcfile.html#PCFileName'>PCFileName</a> "hpljt221.ppd"
+  }
+
+  {
+    <I>// HP LaserJet 2300 Series</I>
+    <a href='ref-ppdcfile.html#Throughput'>Throughput</a> 25
+    <a href='ref-ppdcfile.html#ModelName'>ModelName</a> "LaserJet 2300 Series"
+    <a href='ref-ppdcfile.html#PCFileName'>PCFileName</a> "hpljt231.ppd"
+  }
+}
+</pre>
+
+
+<h2 class='title'><a name='FILTERS'>Using Filters</a></h2>
+
+<p>The standard CUPS raster filters can be specified using the
+<a href='ref-ppdcfile.html#DriverType'><tt>DriverType</tt></a> directive, for example:</p>
+
+<pre class='example'>
+<I>// Specify that this driver uses the HP-PCL driver...</I>
+<a href='ref-ppdcfile.html#DriverType'>DriverType</a> pcl
+</pre>
+
+<p><a href='#TABLE_1'>Table 1</a> shows the driver types for each of the standard CUPS raster filters. For drivers that do not use the standard raster filters, the "custom" type is used with <a href='ref-ppdcfile.html#Filter'><tt>Filter</tt></a> directives:</p>
+
+<pre class='example'>
+<a href='ref-ppdcfile.html#DriverType'>DriverType</a> custom
+<a href='ref-ppdcfile.html#Filter'>Filter</a> application/vnd.cups-raster 100 /path/to/raster/filter
+<a href='ref-ppdcfile.html#Filter'>Filter</a> application/vnd.cups-command 100 /path/to/command/filter
+</pre>
+
+
+<h2 class='title'><a name='COLOR'>Implementing Color Management</a></h2>
+
+<p>Talk about ICC color profiles and sRGB as two best options.</p>
+
+
+<h2 class='title'><a name='MACOSX'>Adding Mac OS X Features</a></h2>
+
+<p>Talk about help books, icons, and PDEs.</p>
+
+
+<h2 class='title'><a name='DEPLOY'>Deploying Your Driver</a></h2>
+
+<p>Talk about install locations, etc.</p>
+
+
+</body>
+</html>
index 86ebea316cfaf7c843a3efeb6deeeca09d03784d..27301f5b0205634f432c5f98477e85fa1ef7e5a0 100644 (file)
@@ -1699,25 +1699,16 @@ Architecture (ICA) driver for scanning. The default is <tt>False</tt>.</p>
 
 <h3><span class='info'>Mac OS X 10.3</span><a name='APPrinterIconPath'>APPrinterIconPath</a></h3>
 
-<p class='summary'>*APPrinterIconPath: "/Library/Printers/vendor/filename"</p>
+<p class='summary'>*APPrinterIconPath: "/Library/Printers/vendor/filename.icns"</p>
 
 <p>This attribute defines the location of a printer icon file to use when
-displaying the printer.</p>
+displaying the printer. The file must be in the Apple icon format.</p>
 
 <p>Examples:</p>
 
 <pre class='command'>
 *% Apple icon file
 *APPrinterIconPath: "/Library/Printers/vendor/Icons/filename.icns"
-
-*% TIFF icon file
-*APPrinterIconPath: "/Library/Printers/vendor/Icons/filename.tiff"
-
-*% PNG icon file
-*APPrinterIconPath: "/Library/Printers/vendor/Icons/filename.png"
-
-*% JPEG icon file
-*APPrinterIconPath: "/Library/Printers/vendor/Icons/filename.jpg"
 </pre>
 
 <h3><span class='info'>Mac OS X 10.4</span><a name='APPrinterLowInkTool'>APPrinterLowInkTool</a></h3>
index 8c6aaa0ccfd86899ba12e91724dc21a59d9c2e94..8b54f004fb67153b2fc11a27d7da177ea8276645 100644 (file)
@@ -12,8 +12,6 @@
   file is missing or damaged, see the license at "http://www.cups.org/".
 -->
 
-<h1 class="title">Raster API</h1>
-
 <div class='summary'><table summary='General Information'>
 <thead>
 <tr>
index 761261553f3dbad47580c68e07ca9f6b9c37b70b..c3dfeeff07e1bdba6be9f5cf6488af2dd95cb0bf 100644 (file)
@@ -12,7 +12,7 @@
 .\"   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/".
 .\"
-.TH cups-config 1 "Common UNIX Printing System" "16 June 2008" "Apple Inc."
+.TH cups-config 1 "Common UNIX Printing System" "23 October 2008" "Apple Inc."
 .SH NAME
 cups-config \- get cups api, compiler, directory, and link information.
 .SH SYNOPSIS
@@ -20,6 +20,9 @@ cups-config \- get cups api, compiler, directory, and link information.
 --api-version
 .br
 .B cups-config
+--build
+.br
+.B cups-config
 --cflags
 .br
 .B cups-config
@@ -58,6 +61,10 @@ directories for filters, configuration files, and drivers.
 .br
 Displays the current API version (major.minor).
 .TP 5
+--build
+.br
+Displays a system-specific build number.
+.TP 5
 --cflags
 .br
 Displays the necessary compiler options.
index e23b4e0e140bda994bfb5f7677db4b511445e627..41b0dcb5be720310362800602e6f2c19c24c9825 100644 (file)
@@ -48,7 +48,7 @@ ppdcArray::ppdcArray(ppdcArray *a)
       memcpy(data, a->data, count * sizeof(ppdcShared *));
 
       for (int i = 0; i < count; i ++)
-        data[i]->get();
+        data[i]->retain();
     }
     else
       data = 0;
@@ -99,6 +99,7 @@ ppdcArray::add(ppdcShared *d)
     data = temp;
   }
 
+  d->retain();
   data[count++] = d;
 }
 
index 4961851718759d4d8e5129d26a9b47773fac5532..da06bb36da9bc280072d9c217b17eee14ebe68a7 100644 (file)
@@ -96,9 +96,9 @@ ppdcCatalog::ppdcCatalog(const char *l,       // I - Locale
 
 ppdcCatalog::~ppdcCatalog()
 {
-  delete locale;
-  delete filename;
-  delete messages;
+  locale->release();
+  filename->release();
+  messages->release();
 }
 
 
index 3cd4d4ce9906648ba57a9f5715fa1378e65ca805..c6e0dda53cd8ed112610561015747a5e5f2f44e7 100644 (file)
@@ -49,15 +49,15 @@ ppdcDriver::ppdcDriver(ppdcDriver *d)       // I - Printer driver template
   {
     // Bump the use count of any strings we inherit...
     if (d->manufacturer)
-      d->manufacturer->get();
+      d->manufacturer->retain();
     if (d->version)
-      d->version->get();
+      d->version->retain();
     if (d->default_font)
-      d->default_font->get();
+      d->default_font->retain();
     if (d->default_size)
-      d->default_size->get();
+      d->default_size->retain();
     if (d->custom_size_code)
-      d->custom_size_code->get();
+      d->custom_size_code->retain();
 
     // Copy all of the data from the driver template...
     copyright           = new ppdcArray(d->copyright);
@@ -140,7 +140,7 @@ ppdcDriver::ppdcDriver(ppdcDriver *d)       // I - Printer driver template
 
 ppdcDriver::~ppdcDriver()
 {
-  delete copyright;
+  copyright->release();
 
   if (manufacturer)
     manufacturer->release();
@@ -159,13 +159,13 @@ ppdcDriver::~ppdcDriver()
   if (custom_size_code)
     custom_size_code->release();
 
-  delete attrs;
-  delete constraints;
-  delete filters;
-  delete fonts;
-  delete groups;
-  delete profiles;
-  delete sizes;
+  attrs->release();
+  constraints->release();
+  filters->release();
+  fonts->release();
+  groups->release();
+  profiles->release();
+  sizes->release();
 }
 
 
@@ -256,7 +256,7 @@ ppdcDriver::set_default_font(
 
   if (f)
   {
-    f->name->get();
+    f->name->retain();
     default_font = f->name;
   }
   else
@@ -277,7 +277,7 @@ ppdcDriver::set_default_size(
 
   if (m)
   {
-    m->name->get();
+    m->name->retain();
     default_size = m->name;
   }
   else
@@ -1219,7 +1219,7 @@ ppdcDriver::write_ppd_file(
                 lf);
 
   if (delete_cat)
-    delete catalog;
+    catalog->release();
 
   return (0);
 }
index cf2a66066a5a1b8e3252e53048216591aab825bd..6f63cdffbbe2dc43a21e689d1cf0abe56ecdfe8a 100644 (file)
@@ -49,8 +49,8 @@ ppdcGroup::ppdcGroup(ppdcGroup *g)    // I - Group template
   ppdcOption   *o;                     // Current option
 
 
-  g->name->get();
-  g->text->get();
+  g->name->retain();
+  g->text->retain();
 
   name = g->name;
   text = g->text;
@@ -69,7 +69,7 @@ ppdcGroup::~ppdcGroup()
 {
   name->release();
   text->release();
-  delete options;
+  options->release();
 }
 
 
index 1f258553e66c68c55264aa0839945824299cff27..5f7c2203b5b1c990c7219acd0f95cd178dcb2d48 100644 (file)
@@ -44,8 +44,8 @@ ppdcMessage::ppdcMessage(const char *i,       // I - ID
 
 ppdcMessage::~ppdcMessage()
 {
-  delete id;
-  delete string;
+  id->release();
+  string->release();
 }
 
 
index 734d406962091d34f60eb56079a4adcb18614a7e..5a33a4eb348ddc0ad25661534109f6755e07b55b 100644 (file)
@@ -57,10 +57,10 @@ ppdcOption::ppdcOption(ppdcOptType    ot,   // I - Option type
 
 ppdcOption::ppdcOption(ppdcOption *o)          // I - Template option
 {
-  o->name->get();
-  o->text->get();
+  o->name->retain();
+  o->text->retain();
   if (o->defchoice)
-    o->defchoice->get();
+    o->defchoice->retain();
 
   type      = o->type;
   name      = o->name;
@@ -82,7 +82,7 @@ ppdcOption::~ppdcOption()
   text->release();
   if (defchoice)
     defchoice->release();
-  delete choices;
+  choices->release();
 }
 
 
@@ -115,7 +115,7 @@ ppdcOption::set_defchoice(ppdcChoice *c)    // I - Choice
     defchoice->release();
 
   if (c->name)
-    c->name->get();
+    c->name->retain();
 
   defchoice = c->name;
 }
index 6b7cba1c2c3dc22cf3f1df4550e3ccee1e3a59af..d8697a9297bff93b4224664774856710713c9f73 100644 (file)
@@ -16,8 +16,8 @@
 //
 //   ppdcShared::ppdcShared()  - Create shared data.
 //   ppdcShared::~ppdcShared() - Destroy shared data.
-//   ppdcShared::get()         - Increment the use count for this data.
 //   ppdcShared::release()     - Decrement the use count and delete as needed.
+//   ppdcShared::retain()      - Increment the use count for this data.
 //
 
 //
@@ -47,26 +47,26 @@ ppdcShared::~ppdcShared()
 
 
 //
-// 'ppdcShared::get()' - Increment the use count for this data.
+// 'ppdcShared::release()' - Decrement the use count and delete as needed.
 //
 
 void
-ppdcShared::get(void)
+ppdcShared::release(void)
 {
-  use ++;
+  use --;
+  if (!use)
+    delete this;
 }
 
 
 //
-// 'ppdcShared::release()' - Decrement the use count and delete as needed.
+// 'ppdcShared::retain()' - Increment the use count for this data.
 //
 
 void
-ppdcShared::release(void)
+ppdcShared::retain()
 {
-  use --;
-  if (!use)
-    delete this;
+  use ++;
 }
 
 
index 7450291e3f9dbdd2dac1dc3a127318678baf9be8..d95f2d6ccc7e385ac181ff06467da946171952e3 100644 (file)
@@ -115,12 +115,12 @@ ppdcSource::ppdcSource(const char  *f,    // I - File to read
 
 ppdcSource::~ppdcSource()
 {
-  delete filename;
-  delete base_fonts;
-  delete drivers;
-  delete po_files;
-  delete sizes;
-  delete vars;
+  filename->release();
+  base_fonts->release();
+  drivers->release();
+  po_files->release();
+  sizes->release();
+  vars->release();
 }
 
 
@@ -1672,7 +1672,7 @@ ppdcSource::get_po(ppdcFile *fp)  // I - File to read
     cat = new ppdcCatalog(locale, pofilename);
 
     // Reset the filename to the name supplied by the user...
-    delete cat->filename;
+    cat->filename->release();
     cat->filename = new ppdcString(poname);
 
     // Return the catalog...
index bd0243cd9c261a7dbfead2335ea6d0d1e519fc5b..49d5a6ab5a02a5b7795949e85a5b07ce7b3f0370 100644 (file)
@@ -181,7 +181,7 @@ main(int  argc,                             // I - Number of command-line arguments
                                    "\"%s\"...\n"), argv[i]);
 
                if (catalog)
-                 delete catalog;
+                 catalog->release();
 
                catalog = new ppdcCatalog(argv[i]);
 
@@ -371,11 +371,11 @@ main(int  argc,                           // I - Number of command-line arguments
     usage();
 
   // Delete the printer driver information...
-  delete src;
+  src->release();
 
   // Message catalog...
   if (catalog)
-    delete catalog;
+    catalog->release();
 
   // Return with no errors.
   return (0);
index 31519404f78bd9a103d4b5220a6e4117fa2229ac..e8e6f2b23227a2053eb308642a7d3a1053761b23 100644 (file)
@@ -96,8 +96,8 @@ class ppdcShared                      //// Shared Data Value
   ppdcShared();
   virtual ~ppdcShared();
 
-  void         get(void);
-  void         release(void);
+  void         retain();
+  void         release();
 };
 
 class ppdcArray                                //// Shared Array
index 8d55639383f7c97c820f43005f01f321c0dff1d7..90ed5e62aea2284bd930a10448b4037026f18125 100644 (file)
@@ -150,8 +150,8 @@ main(int  argc,                             // I - Number of command-line arguments
       puts("</body>");
       puts("</html>");
       // Delete the printer driver information...
-      delete composite;
-      delete src;
+      composite->release();
+      src->release();
     }
 
   // If no drivers have been loaded, display the program usage message.
index 314d63108774d703d8df6807b2b774a9fd1d0b51..6abddeb1265fdba9766aaa8a56ba1c6add9d2c1a 100644 (file)
@@ -112,7 +112,7 @@ main(int  argc,                             // I - Number of command-line arguments
   src->write_file(srcfile);
 
   // Delete the printer driver information...
-  delete src;
+  src->release();
 
   // Return with no errors.
   return (0);
index dfec9a4cbda8dbfdf0a42f030331a10d1abe4e8b..fe533ba9fce777221ffa2107e17e1388e9f3c5e3 100644 (file)
@@ -140,7 +140,7 @@ main(int  argc,                             // I - Number of command-line arguments
       }
 
       // Delete the printer driver information...
-      delete src;
+      src->release();
     }
 
   // Write the message catalog...
@@ -149,7 +149,7 @@ main(int  argc,                             // I - Number of command-line arguments
   else
     catalog->save_messages(outfile);
 
-  delete catalog;
+  catalog->release();
 
   // If no drivers have been loaded, display the program usage message.
   if (!src)
index d5698359e6b7202d1a828d392ae10ea6fa0c6803..cb9e3a3a64fdd205d0466f39b4309669f841a7ea 100644 (file)
@@ -171,12 +171,6 @@ Version "1.4"
   ColorDevice No
   Throughput 1
 
-  HWMargins 18 18 18 18
-  *MediaSize Letter
-  MediaSize Legal
-  MediaSize A4
-  MediaSize FanFoldUS
-
   HWMargins 0 0 0 0
   VariablePaperSize Yes
   MinSize 36 36
@@ -188,11 +182,17 @@ Version "1.4"
     PCFileName "epson24.ppd"
     ModelNumber $EPSON_24PIN
 
+    HWMargins 18 18 18 18
+    *MediaSize Letter
+    MediaSize Legal
+    MediaSize A4
+    MediaSize FanFoldUS
+
     Resolution k 1 8 0 0 60dpi
     *Resolution k 1 8 0 0 120x60dpi
     Resolution k 1 24 0 0 180dpi
     Resolution k 1 24 0 0 360x180dpi
-    Resolution k 1 48 0 0 360x180dpi
+    Resolution k 1 48 0 0 360dpi
   }
 
   // Epson 9-Pin Series
@@ -202,6 +202,12 @@ Version "1.4"
     ModelNumber $EPSON_9PIN
     ColorDevice No
 
+    HWMargins 18 18 18 18
+    *MediaSize Letter
+    MediaSize Legal
+    MediaSize A4
+    MediaSize FanFoldUS
+
     Resolution k 1 8 0 0 60x720dpi
     *Resolution k 1 8 0 0 120x72dpi
     Resolution k 1 8 0 0 240x72dpi
index 808738d90830ab25683acff50529183e86fba339..e173877a2352d39f01d0766966ae3049334c0143 100644 (file)
@@ -51,7 +51,7 @@ main(int  argc,                               // I - Number of command-line arguments
        m = (ppdcMessage *)catalog->messages->next())
     printf("%s: %s\n", m->id->value, m->string->value);
 
-  delete catalog;
+  catalog->release();
 
   // Return with no errors.
   return (0);
index 5d839283c72f6ebed34a461e2b454b06590c34af..0654af4b7e2b8934285ef86daf9f469afe26ec84 100644 (file)
@@ -464,15 +464,21 @@ cupsdAuthorize(cupsd_client_t *con)       /* I - Client connection */
       return;
     }
   
-    if (authinfo->count == 1)
-      strlcpy(username, authinfo->items[0].value, sizeof(username));
-
-    cupsdLogMessage(CUPSD_LOG_DEBUG,
-                    "cupsdAuthorize: Authorized as %s using AuthRef",
-                   username);
+    if (authinfo->count == 0 || !authinfo->items[0].value ||
+        authinfo->items[0].valueLength < 2)
+    {
+      AuthorizationFreeItemSet(authinfo);
+      cupsdLogMessage(CUPSD_LOG_ERROR,
+                     "AuthorizationCopyInfo returned empty rights!");
+      return;
+    }
 
+    strlcpy(username, authinfo->items[0].value, sizeof(username));
     AuthorizationFreeItemSet(authinfo);
 
+    cupsdLogMessage(CUPSD_LOG_DEBUG,
+                   "cupsdAuthorize: Authorized as \"%s\" using AuthRef",
+                   username);
     con->type = CUPSD_AUTH_BASIC;
   }
 #endif /* HAVE_AUTHORIZATION_H */
index 3ee2974103ec58e4e8ad751a655ee008587270b2..a7fc29c087c6abfd447e0d22a6249b09476a326b 100644 (file)
@@ -364,7 +364,7 @@ cat_drv(const char *name,           /* I - PPD name */
     d->write_ppd_file(out, NULL, locales, src, PPDC_LFONLY);
     cupsFileClose(out);
 
-    delete locales;
+    locales->release();
   }
   else
   {
@@ -384,7 +384,7 @@ cat_drv(const char *name,           /* I - PPD name */
     }
   }
 
-  delete src;
+  src->release();
 
   return (!d);
 }
@@ -657,8 +657,8 @@ compare_matches(const ppd_info_t *p0,       /* I - First PPD */
   if (p1->matches != p0->matches)
     return (p1->matches - p0->matches);
   else
-    return (cupsdCompareNames(p1->record.make_and_model,
-                             p0->record.make_and_model));
+    return (cupsdCompareNames(p0->record.make_and_model,
+                             p1->record.make_and_model));
 }
 
 
@@ -1828,7 +1828,7 @@ load_drv(const char  *filename,           /* I - Actual filename */
     fprintf(stderr,
             "ERROR: [cups-driverd] Bad driver information file \"%s\"!\n",
            filename);
-    delete src;
+    src->release();
     return (0);
   }
 
@@ -1909,7 +1909,7 @@ load_drv(const char  *filename,           /* I - Actual filename */
              mtime, size, d->model_number, type);
   }
 
-  delete src;
+  src->release();
 
   return (1);
 }
index 048dd959d8a880fd2fbc01c1d7a7531ef6644597..850e3b82deb31d6c9233d17d5d400a91235c2eb6 100644 (file)
@@ -2547,7 +2547,7 @@ add_printer(cupsd_client_t  *con, /* I - Client connection */
 
     need_restart_job = 1;
 
-    supported = ippFindAttribute(printer->attrs, "port-monitor-supported",
+    supported = ippFindAttribute(printer->ppd_attrs, "port-monitor-supported",
                                  IPP_TAG_NAME);
     if (supported)
     {
@@ -6340,8 +6340,7 @@ delete_printer(cupsd_client_t  *con,      /* I - Client connection */
            printer->name);
   unlink(filename);
 
-  snprintf(filename, sizeof(filename), "%s/%s.ipp", ServerRoot,
-           printer->name);
+  snprintf(filename, sizeof(filename), "%s/%s.ipp", CacheDir, printer->name);
   unlink(filename);
 
 #ifdef __APPLE__
index af81c235fd9922d0f8f77b97b5769b156c97dcde..3076a2930507988cbd88d0b135aaee137eea19ea 100644 (file)
@@ -2898,9 +2898,10 @@ start_job(cupsd_job_t     *job,          /* I - Job ID */
        continue;
 
       if (!strncmp(attr->name, "job-", 4) &&
-          strcmp(attr->name, "job-uuid") &&
+          strcmp(attr->name, "job-billing") &&
           strcmp(attr->name, "job-impressions") &&
           strcmp(attr->name, "job-originating-host-name") &&
+          strcmp(attr->name, "job-uuid") &&
           !(printer->type & CUPS_PRINTER_REMOTE))
        continue;
 
index bdc46bc59165d2e07b4ec6461de83e9b458340da..41d6d197752456b6b7677dd2ae90f009b2d9739e 100644 (file)
@@ -514,6 +514,7 @@ main(int  argc,                             /* I - Number of command-line args */
     */
 
     launchd_checkin();
+    launchd_checkout();
   }
 #endif /* HAVE_LAUNCHD */
 
@@ -749,6 +750,7 @@ main(int  argc,                             /* I - Number of command-line args */
          */
 
          launchd_checkin();
+         launchd_checkout();
        }
 #endif /* HAVE_LAUNCHD */
 
index 4aa78f944902a4a3715c2d2607b390c9682a1984..ea45d81f5aeeff365a69e107f2c503dc18daa115 100644 (file)
@@ -5,7 +5,9 @@ function reset_config()
 }
 </SCRIPT>
 
-<H2 CLASS="title">Server Configuration File</H2>
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Edit Configuration File</H2>
 
 <FORM NAME="cups" METHOD="POST" ACTION="/admin/">
 
@@ -18,3 +20,5 @@ function reset_config()
 onClick="reset_config();"></P>
 
 </FORM>
+
+</DIV>