]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Merge changes from CUPS 1.4svn-r8606.
authormsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>
Fri, 8 May 2009 18:38:44 +0000 (18:38 +0000)
committermsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>
Fri, 8 May 2009 18:38:44 +0000 (18:38 +0000)
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current@1480 a1ca3aef-8c08-0410-bb20-df032aa958be

86 files changed:
CHANGES-1.3.txt
CHANGES.txt
INSTALL.txt
Makefile
backend/ipp.c
backend/usb-darwin.c
cgi-bin/Dependencies
cgi-bin/Makefile
cgi-bin/ipp-var.c
cgi-bin/makedocset.c [new file with mode: 0644]
cgi-bin/var.c
config-scripts/cups-ssl.m4
cups/Makefile
cups/adminutil.c
cups/auth.c
cups/cups.h
cups/debug.c
cups/debug.h
cups/emit.c
cups/getdevices.c
cups/getputfile.c
cups/globals.c
cups/globals.h
cups/http-support.c
cups/http.c
cups/http.h
cups/ipp.c
cups/language.c
cups/libcups.exp
cups/localize.c
cups/options.c
cups/page.c
cups/request.c
cups/test.ppd
cups/testppd.c
cups/transcode.c
cups/usersys.c
doc/Makefile
doc/cups-printable.css
doc/favicon.png [deleted file]
doc/help/api-array.html
doc/help/api-cgi.html [new file with mode: 0644]
doc/help/api-cups.html
doc/help/api-driver.html [new file with mode: 0644]
doc/help/api-filedir.html
doc/help/api-filter.html
doc/help/api-httpipp.html
doc/help/api-mime.html [new file with mode: 0644]
doc/help/api-overview.html
doc/help/api-ppd.html
doc/help/api-ppdc.html [new file with mode: 0644]
doc/help/api-raster.html
doc/help/postscript-driver.html
doc/help/ppd-compiler.html
doc/help/raster-driver.html
doc/help/ref-classes-conf.html
driver/Makefile
filter/Makefile
filter/bannertops.c
locale/cups_ja.po
man/classes.conf.man
man/printers.conf.man
packaging/cups.spec.in
ppdc/Makefile
ppdc/ppdc-driver.cxx
ppdc/ppdc-import.cxx
ppdc/sample.drv
scheduler/Makefile
scheduler/auth.c
scheduler/classes.c
scheduler/client.c
scheduler/client.h
scheduler/conf.c
scheduler/conf.h
scheduler/dirsvc.c
scheduler/ipp.c
scheduler/job.c
scheduler/job.h
scheduler/main.c
scheduler/network.c
scheduler/printers.c
scheduler/printers.h
scheduler/type.c
systemv/Makefile
test/run-stp-tests.sh
tools/makedocset

index 644ff8b33d46c333f1f2e212437988542b6d059e..709f815dec429f580471f19af685ca2ae91cb644 100644 (file)
@@ -3,6 +3,16 @@ CHANGES-1.3.txt
 
 CHANGES IN CUPS V1.3.11
 
+       - The web interface could hang on OpenBSD (STR #3176)
+       - The scheduler and cupsfilter utility did not handle rules starting
+         with a negation operator properly (STR #3160)
+       - The scheduler and cupsfilter utility would crash with certain MIME
+         .types rules (STR #3159)
+       - httpSetField wasn't bracketing IPv6 numeric addresses for the Host:
+         field (STR #3164)
+       - The ServerName, if specified, was not treated as a valid alias for the
+         local system (STR #3167)
+       - "make epm" did not work (STR #3166)
        - "lpstat -h server" showed non-shared printers (STR #3147)
        - "make check" did not work on Linux (STR #3161)
 
index 93a428e1fa791a24a8b1d2458c656c0f97c66850..dcf311820208a0b848987521211736af610cf1b4 100644 (file)
@@ -1,4 +1,4 @@
-CHANGES.txt - 2009-04-21
+CHANGES.txt - 2009-05-08
 ------------------------
 
 CHANGES IN CUPS V1.4b3
@@ -8,6 +8,16 @@ CHANGES IN CUPS V1.4b3
          Russian and partial localizations for Chinese, Danish, Finnish,
          French, Italian, Korean, Norwegian, Portuguese, and Swedish
          (STR #3096, STR #3098, STR #3109, STR #3111, STR #3141)
+        - Fixed a number of ppdi issues and added a unit test to validate that
+         ppdc + ppdi can generate and import the same data (STR #3152)
+       - Moving jobs in the web interface now shows an error if you only have
+         one printer or class added (STR #3094)
+       - Since classes have never truly supported the printer-error-policy
+         stuff added in CUPS 1.2, update the code to reflect the current
+         reality and support only the retry-current-job policy for now
+         (STR #3171)
+       - Revised the password callback support (STR #2953)
+       - ppdEmit*() did not choose between PageSize and PageRegion properly.
        - Make some fairly substantial changes to the Kerberos support code so
          that CUPS can work in multi-realm environments and does not require
          delegatable credentials.  Shared printing still requires delegation,
index fbc2b3c393e91878ee9fee04fe81e5999572ecc7..ea7aba67e6466dd13dd896a3c5eb8f291c2a43e3 100644 (file)
@@ -186,8 +186,9 @@ GETTING DEBUG LOGGING FROM CUPS
                           which messages are logged.
        CUPS_DEBUG_LEVEL   Specifies a number from 0 to 9 to control the
                           verbosity of the logging. The default level is 1.
-        CUPS_DEBUG_LOG     Specifies a log file to append to; use the name "-"
-                          to send the messages to stderr.
+        CUPS_DEBUG_LOG     Specifies a log file to use.  Specify the name "-"
+                          to send the messages to stderr.  Prefix a filename
+                          with "+" to append to an existing file.
 
 
 REPORTING PROBLEMS
index fb892d04c84ffe6971abc253d92a2360acd65d12..5a1f8b4a0e62720e9b6372145958f08c62505b9d 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,7 @@
 #
 #   Top-level Makefile for the Common UNIX Printing System (CUPS).
 #
-#   Copyright 2007-2008 by Apple Inc.
+#   Copyright 2007-2009 by Apple Inc.
 #   Copyright 1997-2007 by Easy Software Products, all rights reserved.
 #
 #   These coded instructions, statements, and computer programs are the
@@ -333,16 +333,52 @@ uninstall:
 # Run the test suite...
 #
 
-test:  all
+test:  all unittests
        echo Running CUPS test suite...
        cd test; ./run-stp-tests.sh
 
 
-check: all
+check: all unittests
        echo Running CUPS test suite with defaults...
        cd test; ./run-stp-tests.sh 1 0 n
 
 
+#
+# Create an Xcode docset...
+#
+
+apihelp:
+       for dir in cgi-bin cups filter driver ppdc scheduler; do\
+               echo Generating API help in $$dir... ;\
+               (cd $$dir; $(MAKE) $(MFLAGS) apihelp) || exit 1;\
+       done
+
+framedhelp:
+       for dir in cgi-bin cups filter driver ppdc scheduler; do\
+               echo Generating framed API help in $$dir... ;\
+               (cd $$dir; $(MAKE) $(MFLAGS) framedhelp) || exit 1;\
+       done
+
+docset:        apihelp
+       echo Generating docset directory tree...
+       $(RM) -r org.cups.docset
+       mkdir -p org.cups.docset/Contents/Resources/Documentation/help
+       mkdir -p org.cups.docset/Contents/Resources/Documentation/images
+       cd doc; $(MAKE) $(MFLAGS) docset
+       cd cgi-bin; $(MAKE) $(MFLAGS) makedocset
+       cgi-bin/makedocset org.cups.docset \
+               `svnversion . | sed -e '1,$$s/[a-zA-Z]//g'` \
+               doc/help/api-*.tokens
+       $(RM) doc/help/api-*.tokens
+       echo Indexing docset...
+       /Developer/usr/bin/docsetutil index org.cups.docset
+       echo Generating docset archive and feed...
+       /Developer/usr/bin/docsetutil package --output org.cups.docset.xar \
+               --atom org.cups.docset.atom \
+               --download-url http://www.cups.org/org.cups.docset.xar \
+               org.cups.docset
+
+
 #
 # Make software distributions using EPM (http://www.easysw.com/epm/)...
 #
index f71d6186cd28e2d6d9bf8214961df8bc1e2fac1f..aa7878c64d3614b153604eee0ab99b81c232c36c 100644 (file)
@@ -143,7 +143,9 @@ main(int  argc,                             /* I - Number of command-line args */
                  "copies-supported",
                  "document-format-supported",
                  "marker-colors",
+                 "marker-high-levels",
                  "marker-levels",
+                 "marker-low-levels",
                  "marker-message",
                  "marker-names",
                  "marker-types",
@@ -1629,11 +1631,8 @@ report_printer_state(ipp_t *ipp, /* I - IPP response */
                        *reasons,       /* printer-state-reasons */
                        *marker;        /* marker-* attributes */
   const char           *reason;        /* Current reason */
-  const char           *message;       /* Message to show */
-  char                 unknown[1024];  /* Unknown message string */
   const char           *prefix;        /* Prefix for STATE: line */
   char                 state[1024];    /* State string */
-  cups_lang_t          *language;      /* Current localization */
   int                  saw_caprw;      /* Saw com.apple.print.recoverable-warning state */
 
 
@@ -1648,96 +1647,24 @@ report_printer_state(ipp_t *ipp,        /* I - IPP response */
   saw_caprw = 0;
   state[0]  = '\0';
   prefix    = "STATE: ";
-  language  = cupsLangDefault();
 
   for (i = 0, count = 0; i < reasons->num_values; i ++)
   {
     reason = reasons->values[i].string.text;
 
-    if (strcmp(reason, "paused"))
+    if (!strcmp(reason, "com.apple.print.recoverable-warning"))
+      saw_caprw = 1;
+    else if (strcmp(reason, "paused"))
     {
       strlcat(state, prefix, sizeof(state));
       strlcat(state, reason, sizeof(state));
 
       prefix  = ",";
     }
-
-    message = "";
-
-    if (!strncmp(reason, "media-needed", 12))
-      message = _("Media tray needs to be filled.");
-    else if (!strncmp(reason, "media-jam", 9))
-      message = _("Media jam!");
-    else if (!strncmp(reason, "moving-to-paused", 16) ||
-             !strncmp(reason, "offline", 7) ||
-             !strncmp(reason, "paused", 6) ||
-            !strncmp(reason, "shutdown", 8))
-      message = _("Printer offline.");
-    else if (!strncmp(reason, "toner-low", 9))
-      message = _("Toner low.");
-    else if (!strncmp(reason, "toner-empty", 11))
-      message = _("Out of toner!");
-    else if (!strncmp(reason, "cover-open", 10))
-      message = _("Cover open.");
-    else if (!strncmp(reason, "interlock-open", 14))
-      message = _("Interlock open.");
-    else if (!strncmp(reason, "door-open", 9))
-      message = _("Door open.");
-    else if (!strncmp(reason, "input-tray-missing", 18))
-      message = _("Media tray missing!");
-    else if (!strncmp(reason, "media-low", 9))
-      message = _("Media tray almost empty.");
-    else if (!strncmp(reason, "media-empty", 11))
-      message = _("Media tray empty!");
-    else if (!strncmp(reason, "output-tray-missing", 19))
-      message = _("Output tray missing!");
-    else if (!strncmp(reason, "output-area-almost-full", 23))
-      message = _("Output bin almost full.");
-    else if (!strncmp(reason, "output-area-full", 16))
-      message = _("Output bin full!");
-    else if (!strncmp(reason, "marker-supply-low", 17))
-      message = _("Ink/toner almost empty.");
-    else if (!strncmp(reason, "marker-supply-empty", 19))
-      message = _("Ink/toner empty!");
-    else if (!strncmp(reason, "marker-waste-almost-full", 24))
-      message = _("Ink/toner waste bin almost full.");
-    else if (!strncmp(reason, "marker-waste-full", 17))
-      message = _("Ink/toner waste bin full!");
-    else if (!strncmp(reason, "fuser-over-temp", 15))
-      message = _("Fuser temperature high!");
-    else if (!strncmp(reason, "fuser-under-temp", 16))
-      message = _("Fuser temperature low!");
-    else if (!strncmp(reason, "opc-near-eol", 12))
-      message = _("OPC almost at end-of-life.");
-    else if (!strncmp(reason, "opc-life-over", 13))
-      message = _("OPC at end-of-life!");
-    else if (!strncmp(reason, "developer-low", 13))
-      message = _("Developer almost empty.");
-    else if (!strncmp(reason, "developer-empty", 15))
-      message = _("Developer empty!");
-    else if (!strcmp(reason, "com.apple.print.recoverable-warning"))
-      saw_caprw = 1;
-    else if (strstr(reason, "error") != NULL)
-    {
-      message = unknown;
-
-      snprintf(unknown, sizeof(unknown), _("Unknown printer error (%s)!"),
-               reason);
-    }
-
-    if (message[0])
-    {
-      count ++;
-      if (strstr(reasons->values[i].string.text, "error"))
-        fprintf(stderr, "ERROR: %s\n", _cupsLangString(language, message));
-      else if (strstr(reasons->values[i].string.text, "warning"))
-        fprintf(stderr, "WARNING: %s\n", _cupsLangString(language, message));
-      else
-        fprintf(stderr, "INFO: %s\n", _cupsLangString(language, message));
-    }
   }
 
-  fprintf(stderr, "%s\n", state);
+  if (state[0])
+    fprintf(stderr, "%s\n", state);
 
  /*
   * Relay com.apple.print.recoverable-message...
@@ -1755,9 +1682,15 @@ report_printer_state(ipp_t *ipp, /* I - IPP response */
 
   if ((marker = ippFindAttribute(ipp, "marker-colors", IPP_TAG_NAME)) != NULL)
     report_attr(marker);
+  if ((marker = ippFindAttribute(ipp, "marker-high-levels",
+                                 IPP_TAG_INTEGER)) != NULL)
+    report_attr(marker);
   if ((marker = ippFindAttribute(ipp, "marker-levels",
                                  IPP_TAG_INTEGER)) != NULL)
     report_attr(marker);
+  if ((marker = ippFindAttribute(ipp, "marker-low-levels",
+                                 IPP_TAG_INTEGER)) != NULL)
+    report_attr(marker);
   if ((marker = ippFindAttribute(ipp, "marker-message", IPP_TAG_TEXT)) != NULL)
     report_attr(marker);
   if ((marker = ippFindAttribute(ipp, "marker-names", IPP_TAG_NAME)) != NULL)
index fe2dabdd369c797a34582a2aa46623d5b2fc69fb..8d3fe4f817e50d30d7a770db23a3f19682e3ada9 100644 (file)
@@ -279,10 +279,11 @@ static void soft_reset();
 static void status_timer_cb(CFRunLoopTimerRef timer, void *info);
 
 #if defined(__i386__) || defined(__x86_64__)
-static pid_t   child_pid;                                      /* Child PID */
+static pid_t   child_pid;              /* Child PID */
 static void run_legacy_backend(int argc, char *argv[], int fd);        /* Starts child backend process running as a ppc executable */
-static void sigterm_handler(int sig);                          /* SIGTERM handler */
 #endif /* __i386__ || __x86_64__ */
+static int     job_canceled = 0;       /* Was the job canceled? */
+static void sigterm_handler(int sig);  /* SIGTERM handler */
 
 #ifdef PARSE_PS_ERRORS
 static const char *next_line (const char *buffer);
@@ -448,9 +449,9 @@ print_device(const char *uri,               /* I - Device URI */
   fputs("STATE: -connecting-to-device\n", stderr);
 
   /*
-   * Now that we are "connected" to the port, ignore SIGTERM so that we
+   * Now that we are "connected" to the port, catch SIGTERM so that we
    * can finish out any page data the driver sends (e.g. to eject the
-   * current page...  Only ignore SIGTERM if we are printing data from
+   * current page...  Only catch SIGTERM if we are printing data from
    * stdin (otherwise you can't cancel raw jobs...)
    */
 
@@ -462,7 +463,7 @@ print_device(const char *uri,               /* I - Device URI */
     memset(&action, 0, sizeof(action));
 
     sigemptyset(&action.sa_mask);
-    action.sa_handler = SIG_IGN;
+    action.sa_handler = sigterm_handler;
     sigaction(SIGTERM, &action, NULL);
   }
 
@@ -582,13 +583,13 @@ print_device(const char *uri,             /* I - Device URI */
        {
          fputs("DEBUG: Received an interrupt before any bytes were "
                "written, aborting!\n", stderr);
-          return (0);
+          return (CUPS_BACKEND_OK);
        }
        else if (errno != EAGAIN)
        {
          _cupsLangPuts(stderr, _("ERROR: Unable to read print data!\n"));
          perror("DEBUG: select");
-         return (CUPS_BACKEND_STOP);
+         return (CUPS_BACKEND_FAILED);
        }
       }
 
@@ -621,7 +622,7 @@ print_device(const char *uri,               /* I - Device URI */
          {
            _cupsLangPuts(stderr, _("ERROR: Unable to read print data!\n"));
            perror("DEBUG: read");
-           return CUPS_BACKEND_STOP;
+           return (CUPS_BACKEND_FAILED);
          }
 
          g.print_bytes = 0;
@@ -667,7 +668,7 @@ print_device(const char *uri,               /* I - Device URI */
                  (long)status);
          fprintf(stderr, "DEBUG: USB class driver Abort returned %ld\n",
                  (long)err);
-         status = CUPS_BACKEND_STOP;
+         status = job_canceled ? CUPS_BACKEND_FAILED : CUPS_BACKEND_STOP;
          break;
        }
 
@@ -1910,23 +1911,47 @@ static void run_legacy_backend(int argc,
 
   exit(exitstatus);
 }
+#endif /* __i386__ || __x86_64__ */
+
 
 /*
  * 'sigterm_handler()' - SIGTERM handler.
  */
 
-static void sigterm_handler(int sig)
+static void
+sigterm_handler(int sig)               /* I - Signal */
 {
-  /* If we started a child process pass the signal on to it...
-   */
+#if defined(__i386__) || defined(__x86_64__)
   if (child_pid)
-    kill(child_pid, sig);
+  {
+   /*
+    * If we started a child process pass the signal on to it...
+    */
 
-  exit(1);
-}
+    int        status;
+
+    kill(child_pid, sig);
+    while (waitpid(child_pid, &status, 0) < 0 && errno == EINTR);
 
+    if (WIFEXITED(status))
+      exit(WEXITSTATUS(status));
+    else if (status == SIGTERM || status == SIGKILL)
+      exit(0);
+    else
+    {
+      fprintf(stderr, "DEBUG: Child crashed on signal %d!\n", status);
+      exit(CUPS_BACKEND_STOP);
+    }
+  }
 #endif /* __i386__ || __x86_64__ */
 
+ /*
+  * Otherwise just flag that the job has been canceled...
+  */
+
+  job_canceled = 1;
+}
+
 
 #ifdef PARSE_PS_ERRORS
 /*
index c417e9693bf1c468a59bfb7cd722a4bf40ef8653..f018cd0a0a9536e7b6f9b9311ac879cc4ace4894 100644 (file)
@@ -42,6 +42,9 @@ jobs.o: cgi-private.h cgi.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
 jobs.o: ../cups/versioning.h ../cups/ppd.h ../cups/array.h ../cups/file.h
 jobs.o: ../cups/language.h ../cups/array.h help-index.h ../cups/debug.h
 jobs.o: ../cups/i18n.h ../cups/transcode.h ../cups/string.h ../config.h
+makedocset.o: cgi.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
+makedocset.o: ../cups/versioning.h ../cups/ppd.h ../cups/array.h
+makedocset.o: ../cups/file.h ../cups/language.h ../cups/array.h help-index.h
 printers.o: cgi-private.h cgi.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
 printers.o: ../cups/versioning.h ../cups/ppd.h ../cups/array.h ../cups/file.h
 printers.o: ../cups/language.h ../cups/array.h help-index.h ../cups/debug.h
index 3e1a59aaab9d8e2cc44bae316d272511ec78f10a..b51b4c06c5efb55a90ddd8bc412178735f6208ca 100644 (file)
@@ -28,6 +28,7 @@ OBJS  =       \
                classes.o \
                help.o \
                jobs.o \
+               makedocset.o \
                printers.o \
                testcgi.o \
                testhi.o \
@@ -80,7 +81,7 @@ unittests:    $(UNITTARGETS)
 #
 
 clean:
-       $(RM) $(OBJS) $(TARGETS) $(UNITTARGETS)
+       $(RM) $(OBJS) $(TARGETS) $(UNITTARGETS) makedocset
        $(RM) libcupscgi.so libcupscgi.sl libcupscgi.dylib
 
 
@@ -194,6 +195,8 @@ apihelp:
                --css ../doc/cups-printable.css \
                --header api-cgi.header --intro api-cgi.shtml \
                cgi.h help-index.h $(LIBOBJS:.o=.c) >../doc/help/api-cgi.html
+       mxmldoc --tokens help/api-cgi.html api-cgi.xml >../doc/help/api-cgi.tokens
+       $(RM) api-cgi.xml
 
 framedhelp:
        mxmldoc --framed api-cgi \
@@ -299,6 +302,17 @@ jobs.cgi:  jobs.o ../Makedefs ../cups/$(LIBCUPS) $(LIBCUPSCGI)
        $(CC) $(LDFLAGS) -o $@ jobs.o -lcupscgi $(LIBS)
 
 
+#
+# makedocset
+#
+
+makedocset:    makedocset.o ../Makedefs libcupscgi.a ../cups/libcups.a
+       echo Linking $@...
+       $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ makedocset.o libcupscgi.a \
+               ../cups/libcups.a $(COMMONLIBS) $(SSLLIBS) $(DNSSDLIBS) \
+               $(LIBZ) $(LIBGSSAPI)
+
+
 #
 # printers.cgi
 #
index 4048dd6052f30e608704299fb211eebd5464f305..1b63056fa096be4fbefc1424b8be634f3be80d45 100644 (file)
@@ -288,8 +288,7 @@ cgiMoveJobs(http_t     *http,               /* I - Connection to server */
   * See who is logged in...
   */
 
-  if ((user = getenv("REMOTE_USER")) == NULL)
-    user = "guest";
+  user = getenv("REMOTE_USER");
 
  /*
   * See if the user has already selected a new destination...
@@ -374,8 +373,14 @@ cgiMoveJobs(http_t     *http,              /* I - Connection to server */
     ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
                  "requested-attributes", NULL, "printer-uri-supported");
 
-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
-                 "requesting-user-name", NULL, user);
+    if (user)
+      ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
+                  "requesting-user-name", NULL, user);
+
+    ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_ENUM, "printer-type",
+                  CUPS_PRINTER_LOCAL);
+    ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_ENUM, "printer-type-mask",
+                  CUPS_PRINTER_SCANNER);
 
     if ((response = cupsDoRequest(http, request, "/")) != NULL)
     {
@@ -415,7 +420,18 @@ cgiMoveJobs(http_t     *http,              /* I - Connection to server */
     else
       cgiStartHTML(cgiText(_("Move All Jobs")));
 
-    cgiCopyTemplateLang("job-move.tmpl");
+    if (cgiGetSize("JOB_PRINTER_NAME") > 0)
+      cgiCopyTemplateLang("job-move.tmpl");
+    else
+    {
+      if (job_id)
+       cgiSetVariable("MESSAGE", cgiText(_("Unable to move job")));
+      else
+       cgiSetVariable("MESSAGE", cgiText(_("Unable to move jobs")));
+
+      cgiSetVariable("ERROR", cgiText(_("No destinations added.")));
+      cgiCopyTemplateLang("error.tmpl");
+    }
   }
   else
   {
diff --git a/cgi-bin/makedocset.c b/cgi-bin/makedocset.c
new file mode 100644 (file)
index 0000000..807c1f6
--- /dev/null
@@ -0,0 +1,478 @@
+/*
+ * "$Id$"
+ *
+ *   Xcode documentation set generator.
+ *
+ *   Copyright 2007-2009 by Apple Inc.
+ *   Copyright 1997-2007 by Easy Software Products.
+ *
+ *   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/".
+ *
+ * Usage:
+ *
+ *   makedocset directory *.tokens
+ *
+ * Contents:
+ *
+ *   main()                   - Test the help index code.
+ *   compare_html()           - Compare the titles of two HTML files.
+ *   compare_sections()       - Compare the names of two help sections.
+ *   compare_sections_files() - Compare the number of files and section names.
+ *   write_index()            - Write an index file for the CUPS help.
+ *   write_info()             - Write the Info.plist file.
+ *   write_nodes()            - Write the Nodes.xml file.
+ */
+
+/*
+ * Include necessary headers...
+ */
+
+#include "cgi.h"
+#include <errno.h>
+
+
+/*
+ * Local structures...
+ */
+
+typedef struct _cups_html_s            /**** Help file ****/
+{
+  char         *path;                  /* Path to help file */
+  char         *title;                 /* Title of help file */
+} _cups_html_t;
+
+typedef struct _cups_section_s         /**** Help section ****/
+{
+  char         *name;                  /* Section name */
+  cups_array_t *files;                 /* Files in this section */
+} _cups_section_t;
+
+
+/*
+ * Local functions...
+ */
+
+static int     compare_html(_cups_html_t *a, _cups_html_t *b);
+static int     compare_sections(_cups_section_t *a, _cups_section_t *b);
+static int     compare_sections_files(_cups_section_t *a, _cups_section_t *b);
+static void    write_index(const char *path, help_index_t *hi);
+static void    write_info(const char *path, const char *revision);
+static void    write_nodes(const char *path, help_index_t *hi);
+
+
+/*
+ * 'main()' - Test the help index code.
+ */
+
+int                                    /* O - Exit status */
+main(int  argc,                                /* I - Number of command-line args */
+     char *argv[])                     /* I - Command-line arguments */
+{
+  int          i;                      /* Looping var */
+  char         path[1024],             /* Path to documentation */
+               line[1024];             /* Line from file */
+  help_index_t *hi;                    /* Help index */
+  cups_file_t  *tokens,                /* Tokens.xml file */
+               *fp;                    /* Current file */
+
+
+  if (argc < 4)
+  {
+    puts("Usage: makedocset directory revision *.tokens");
+    return (1);
+  }
+
+ /*
+  * Index the help documents...
+  */
+
+  snprintf(path, sizeof(path), "%s/Contents/Resources/Documentation", argv[1]);
+  if ((hi = helpLoadIndex(NULL, path)) == NULL)
+  {
+    fputs("makedocset: Unable to index help files!\n", stderr);
+    return (1);
+  }
+
+  snprintf(path, sizeof(path), "%s/Contents/Resources/Documentation/index.html",
+           argv[1]);
+  write_index(path, hi);
+
+  snprintf(path, sizeof(path), "%s/Contents/Resources/Nodes.xml", argv[1]);
+  write_nodes(path, hi);
+
+ /*
+  * Write the Info.plist file...
+  */
+
+  snprintf(path, sizeof(path), "%s/Contents/Info.plist", argv[1]);
+  write_info(path, argv[2]);
+
+ /*
+  * Merge the Tokens.xml files...
+  */
+
+  snprintf(path, sizeof(path), "%s/Contents/Resources/Tokens.xml", argv[1]);
+  if ((tokens = cupsFileOpen(path, "w")) == NULL)
+  {
+    fprintf(stderr, "makedocset: Unable to create \"%s\": %s\n", path,
+           strerror(errno));
+    return (1);
+  }
+
+  cupsFilePuts(tokens, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
+  cupsFilePuts(tokens, "<Tokens version=\"1.0\">\n");
+
+  for (i = 3; i < argc; i ++)
+  {
+    if ((fp = cupsFileOpen(argv[i], "r")) == NULL)
+    {
+      fprintf(stderr, "makedocset: Unable to open \"%s\": %s\n", argv[i],
+             strerror(errno));
+      return (1);
+    }
+
+    if (!cupsFileGets(fp, line, sizeof(line)) || strncmp(line, "<?xml ", 6) ||
+        !cupsFileGets(fp, line, sizeof(line)) || strncmp(line, "<Tokens ", 8))
+    {
+      fprintf(stderr, "makedocset: Bad Tokens.xml file \"%s\"!\n", argv[i]);
+      return (1);
+    }
+
+    while (cupsFileGets(fp, line, sizeof(line)))
+    {
+      if (strcmp(line, "</Tokens>"))
+        cupsFilePrintf(tokens, "%s\n", line);
+    }
+
+    cupsFileClose(fp);
+  }
+
+  cupsFilePuts(tokens, "</Tokens>\n");
+
+  cupsFileClose(tokens);
+
+ /*
+  * Return with no errors...
+  */
+
+  return (0);
+}
+
+
+/*
+ * 'compare_html()' - Compare the titles of two HTML files.
+ */
+
+static int                             /* O - Result of comparison */
+compare_html(_cups_html_t *a,          /* I - First file */
+             _cups_html_t *b)          /* I - Second file */
+{
+  return (strcasecmp(a->title, b->title));
+}
+
+
+/*
+ * 'compare_sections()' - Compare the names of two help sections.
+ */
+
+static int                             /* O - Result of comparison */
+compare_sections(_cups_section_t *a,   /* I - First section */
+                 _cups_section_t *b)   /* I - Second section */
+{
+  return (strcasecmp(a->name, b->name));
+}
+
+
+/*
+ * 'compare_sections_files()' - Compare the number of files and section names.
+ */
+
+static int                             /* O - Result of comparison */
+compare_sections_files(
+    _cups_section_t *a,                        /* I - First section */
+    _cups_section_t *b)                        /* I - Second section */
+{
+  int  ret = cupsArrayCount(b->files) - cupsArrayCount(a->files);
+
+  if (ret)
+    return (ret);
+  else
+    return (strcasecmp(a->name, b->name));
+}
+
+
+/*
+ * 'write_index()' - Write an index file for the CUPS help.
+ */
+
+static void
+write_index(const char   *path,                /* I - File to write */
+            help_index_t *hi)          /* I - Index of files */
+{
+  cups_file_t          *fp;            /* Output file */
+  help_node_t          *node;          /* Current help node */
+  _cups_section_t      *section,       /* Current section */
+                       key;            /* Section search key */
+  _cups_html_t         *html;          /* Current HTML file */
+  cups_array_t         *sections,      /* Sections in index */
+                       *sections_files,/* Sections sorted by size */
+                       *columns[3];    /* Columns in final HTML file */
+  int                  column,         /* Current column */
+                       lines[3],       /* Number of lines in each column */
+                       min_column,     /* Smallest column */
+                       min_lines;      /* Smallest number of lines */
+
+
+ /*
+  * Build an array of sections and their files.
+  */
+
+  sections = cupsArrayNew((cups_array_func_t)compare_sections, NULL);
+
+  for (node = (help_node_t *)cupsArrayFirst(hi->nodes);
+       node;
+       node = (help_node_t *)cupsArrayNext(hi->nodes))
+  {
+    if (node->anchor)
+      continue;
+
+    key.name = node->section ? node->section : "Miscellaneous";
+    if ((section = (_cups_section_t *)cupsArrayFind(sections, &key)) == NULL)
+    {
+      section        = (_cups_section_t *)calloc(1, sizeof(_cups_section_t));
+      section->name  = key.name;
+      section->files = cupsArrayNew((cups_array_func_t)compare_html, NULL);
+
+      cupsArrayAdd(sections, section);
+    }
+
+    html = (_cups_html_t *)calloc(1, sizeof(_cups_html_t));
+    html->path  = node->filename;
+    html->title = node->text;
+
+    cupsArrayAdd(section->files, html);
+  }
+
+ /*
+  * Build a sorted list of sections based on the number of files in each section
+  * and the section name...
+  */
+
+  sections_files = cupsArrayNew((cups_array_func_t)compare_sections_files,
+                                NULL);
+  for (section = (_cups_section_t *)cupsArrayFirst(sections);
+       section;
+       section = (_cups_section_t *)cupsArrayNext(sections))
+    cupsArrayAdd(sections_files, section);
+
+ /*
+  * Then build three columns to hold everything, trying to balance the number of
+  * lines in each column...
+  */
+
+  for (column = 0; column < 3; column ++)
+  {
+    columns[column] = cupsArrayNew((cups_array_func_t)compare_sections, NULL);
+    lines[column]   = 0;
+  }
+
+  for (section = (_cups_section_t *)cupsArrayFirst(sections_files);
+       section;
+       section = (_cups_section_t *)cupsArrayNext(sections_files))
+  {
+    for (min_column = 0, min_lines = lines[0], column = 1;
+         column < 3;
+        column ++)
+    {
+      if (lines[column] < min_lines)
+      {
+        min_column = column;
+        min_lines  = lines[column];
+      }
+    }
+
+    cupsArrayAdd(columns[min_column], section);
+    lines[min_column] += cupsArrayCount(section->files) + 2;
+  }
+
+ /*
+  * Write the HTML file...
+  */
+
+  if ((fp = cupsFileOpen(path, "w")) == NULL)
+  {
+    fprintf(stderr, "makedocset: Unable to create %s: %s\n", path,
+            strerror(errno));
+    exit(1);
+  }
+
+  cupsFilePuts(fp, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 "
+                   "Transitional//EN\" "
+                  "\"http://www.w3.org/TR/html4/loose.dtd\">\n"
+                  "<html>\n"
+                  "<head>\n"
+                  "<title>CUPS Documentation</title>\n"
+                  "<link rel='stylesheet' type='text/css' "
+                  "src='cups-printable.css'>\n"
+                  "</head>\n"
+                  "<body>\n"
+                  "<h1>CUPS Documentation</h1>\n"
+                  "<table width='100%' summary=''>\n"
+                  "<tr>\n");
+
+  for (column = 0; column < 3; column ++)
+  {
+    if (column)
+      cupsFilePuts(fp, "<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>\n");
+
+    cupsFilePuts(fp, "<td valign='top' width='33%'>");
+    for (section = (_cups_section_t *)cupsArrayFirst(columns[column]);
+         section;
+        section = (_cups_section_t *)cupsArrayNext(columns[column]))
+    {
+      cupsFilePrintf(fp, "<h2 class='title'>%s</h2>\n", section->name);
+      for (html = (_cups_html_t *)cupsArrayFirst(section->files);
+           html;
+          html = (_cups_html_t *)cupsArrayNext(section->files))
+       cupsFilePrintf(fp, "<p class='compact'><a href='%s'>%s</a></p>\n",
+                      html->path, html->title);
+    }
+    cupsFilePuts(fp, "</td>\n");
+  }
+  cupsFilePuts(fp, "</tr>\n"
+                   "</table>\n"
+                  "</body>\n"
+                  "</html>\n");
+  cupsFileClose(fp);
+}
+
+
+/*
+ * 'write_info()' - Write the Info.plist file.
+ */
+
+static void
+write_info(const char *path,           /* I - File to write */
+           const char *revision)       /* I - Version number */
+{
+  cups_file_t  *fp;                    /* File */
+
+
+  if ((fp = cupsFileOpen(path, "w")) == NULL)
+  {
+    fprintf(stderr, "makedocset: Unable to create %s: %s\n", path,
+            strerror(errno));
+    exit(1);
+  }
+
+  cupsFilePrintf(fp, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+                    "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" "
+                    "\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"
+                    "<plist version=\"1.0\">\n"
+                    "<dict>\n"
+                    "\t<key>CFBundleIdentifier</key>\n"
+                    "\t<string>org.cups.docset</string>\n"
+                    "\t<key>CFBundleName</key>\n"
+                    "\t<string>CUPS Documentation</string>\n"
+                    "\t<key>CFBundleVersion</key>\n"
+                    "\t<string>1.4.%s</string>\n"
+                    "\t<key>DocSetFeedName</key>\n"
+                    "\t<string>cups.org</string>\n"
+                    "\t<key>DocSetFeedURL</key>\n"
+                    "\t<string>http://www.cups.org/org.cups.docset.xar"
+                    "</string>\n"
+                    "</dict>\n"
+                    "</plist>\n", revision);
+
+  cupsFileClose(fp);
+}
+
+
+/*
+ * 'write_nodes()' - Write the Nodes.xml file.
+ */
+
+static void
+write_nodes(const char   *path,                /* I - File to write */
+            help_index_t *hi)          /* I - Index of files */
+{
+  cups_file_t  *fp;                    /* Output file */
+  int          id;                     /* Current node ID */
+  help_node_t  *node;                  /* Current help node */
+  int          subnodes;               /* Currently in Subnodes for file? */
+  int          needclose;              /* Need to close the current node? */
+
+
+  if ((fp = cupsFileOpen(path, "w")) == NULL)
+  {
+    fprintf(stderr, "makedocset: Unable to create %s: %s\n", path,
+            strerror(errno));
+    exit(1);
+  }
+
+  cupsFilePuts(fp, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+                  "<DocSetNodes version=\"1.0\">\n"
+                  "<TOC>\n"
+                  "<Node id=\"0\">\n"
+                  "<Name>CUPS Documentation</Name>\n"
+                  "<Path>Documentation/index.html</Path>\n"
+                  "</Node>\n");
+
+  for (node = (help_node_t *)cupsArrayFirst(hi->nodes), id = 1, subnodes = 0,
+           needclose = 0;
+       node;
+       node = (help_node_t *)cupsArrayNext(hi->nodes), id ++)
+  {
+    if (node->anchor)
+    {
+      if (!subnodes)
+      {
+        cupsFilePuts(fp, "<Subnodes>\n");
+       subnodes = 1;
+      }
+       
+      cupsFilePrintf(fp, "<Node id=\"%d\">\n"
+                         "<Path>Documentation/%s</Path>\n"
+                        "<Anchor>%s</Anchor>\n"
+                        "<Name>%s</Name>\n"
+                        "</Node>\n", id, node->filename, node->anchor,
+                    node->text);
+    }
+    else
+    {
+      if (subnodes)
+      {
+        cupsFilePuts(fp, "</Subnodes>\n");
+       subnodes = 0;
+      }
+
+      if (needclose)
+        cupsFilePuts(fp, "</Node>\n");
+
+      cupsFilePrintf(fp, "<Node id=\"%d\">\n"
+                         "<Path>Documentation/%s</Path>\n"
+                        "<Name>%s</Name>\n", id, node->filename, node->text);
+      needclose = 1;
+    }
+  }
+
+  if (subnodes)
+    cupsFilePuts(fp, "</Subnodes>\n");
+
+  if (needclose)
+    cupsFilePuts(fp, "</Node>\n");
+
+  cupsFilePuts(fp, "</TOC>\n"
+                  "</DocSetNodes>\n");
+
+  cupsFileClose(fp);
+}
+
+
+/*
+ * End of "$Id$".
+ */
index 6470fcbfd351c757acd28f741d86a4a32fac3b8d..628ce8add577b80f624384b14ebfe4e74ad366df 100644 (file)
@@ -806,6 +806,18 @@ cgi_initialize_post(void)
       else
         nbytes = 0;
     }
+    else if (nbytes == 0)
+    {
+     /*
+      * CUPS STR #3176: OpenBSD: Early end-of-file on POST data causes 100% CPU
+      *
+      * This should never happen, but does on OpenBSD.  If we see early end-of-
+      * file, treat this as an error and process no data.
+      */
+
+      free(data);
+      return (0);
+    }
 
   data[length] = '\0';
 
index a3b4ccf9d06740acb79c3c51242244981e7d38f3..7e20ecd90528c7cdd6596b47ef16f37523da2f82 100644 (file)
@@ -58,11 +58,11 @@ if test x$enable_ssl != xno; then
     fi
 
     dnl Then look for GNU TLS...
-    if test "x${SSLLIBS}" = "x" -a "x${enable_gnutls}" != "xno"; then
+    if test "x${SSLLIBS}" = "x" -a "x${enable_gnutls}" != "xno" -a "x$PKGCONFIG" != x; then
        AC_PATH_PROG(LIBGNUTLSCONFIG,libgnutls-config)
-       if test "x$LIBGNUTLSCONFIG" != x; then
-           SSLLIBS=`$LIBGNUTLSCONFIG --libs`
-           SSLFLAGS=`$LIBGNUTLSCONFIG --cflags`
+       if $PKGCONFIG --exists gnutls; then
+           SSLLIBS=`$PKGCONFIG --libs gnutls`
+           SSLFLAGS=`$PKGCONFIG --cflags gnutls`
            AC_DEFINE(HAVE_SSL)
            AC_DEFINE(HAVE_GNUTLS)
        fi
index 31be2be3127f3d501ff5f32315a3ffb025173603..dbdd2b91fcc2e0bf1967e65ea21c204098c22b1f 100644 (file)
@@ -548,34 +548,52 @@ apihelp:
        mxmldoc --section "Programming" --title "Array API" \
                --css ../doc/cups-printable.css \
                --header api-array.header --intro api-array.shtml \
+               api-array.xml \
                array.h array.c >../doc/help/api-array.html
+       mxmldoc --tokens help/api-array.html api-array.xml >../doc/help/api-array.tokens
+       $(RM) api-array.xml
        mxmldoc --section "Programming" --title "CUPS API" \
                --css ../doc/cups-printable.css \
                --header api-cups.header --intro api-cups.shtml \
+               api-cups.xml \
                cups.h adminutil.c dest.c language.c notify.c \
                options.c tempfile.c usersys.c \
                util.c >../doc/help/api-cups.html
+       mxmldoc --tokens help/api-cups.html api-cups.xml >../doc/help/api-cups.tokens
+       $(RM) api-cups.xml
        mxmldoc --section "Programming" --title "File and Directory APIs" \
                --css ../doc/cups-printable.css \
                --header api-filedir.header --intro api-filedir.shtml \
+               api-filedir.xml \
                file.h file.c dir.h dir.c >../doc/help/api-filedir.html
+       mxmldoc --tokens api-filedir.xml >../doc/help/api-filedir.tokens
+       $(RM) api-filedir.xml
        mxmldoc --section "Programming" --title "PPD API" \
                --css ../doc/cups-printable.css \
                --header api-ppd.header --intro api-ppd.shtml \
+               api-ppd.xml \
                ppd.h attr.c conflicts.c custom.c emit.c localize.c mark.c page.c \
                ppd.c >../doc/help/api-ppd.html
+       mxmldoc --tokens help/api-ppd.html api-ppd.xml >../doc/help/api-ppd.tokens
+       $(RM) api-ppd.xml
        mxmldoc --section "Programming" --title "HTTP and IPP APIs" \
                --css ../doc/cups-printable.css \
                --header api-httpipp.header --intro api-httpipp.shtml \
+               api-httpipp.xml \
                http.h ipp.h auth.c getdevices.c getputfile.c encode.c \
                http.c http-addr.c http-support.c ipp.c ipp-support.c \
                md5passwd.c request.c >../doc/help/api-httpipp.html
+       mxmldoc --tokens help/api-httpipp.html api-httpipp.xml >../doc/help/api-httpipp.tokens
+       $(RM) api-httpipp.xml
        mxmldoc --section "Programming" \
                --title "Filter and Backend Programming" \
                --css ../doc/cups-printable.css \
                --header api-filter.header --intro api-filter.shtml \
+               api-filter.xml \
                backchannel.c backend.h backend.c sidechannel.c sidechannel.h \
                >../doc/help/api-filter.html
+       mxmldoc --tokens help/api-filter.html api-filter.xml >../doc/help/api-filter.tokens
+       $(RM) api-filter.xml
 
 framedhelp:
        echo Generating CUPS API help files...
@@ -622,42 +640,6 @@ framedhelp:
                backchannel.c backend.h backend.c sidechannel.c sidechannel.h
 
 
-docsets:
-       echo Generating CUPS API documentation sets...
-       ../tools/makedocset --docset org.cups.overview.docset \
-               --title "Introduction to CUPS Programming" \
-               --header api-overview.header --intro api-overview.shtml
-       ../tools/makedocset --docset org.cups.array.docset \
-               --title "Array API" \
-               --header api-array.header --intro api-array.shtml \
-               array.h array.c
-       ../tools/makedocset --docset org.cups.cups.docset \
-               --title "CUPS API" \
-               --header api-cups.header --intro api-cups.shtml \
-               cups.h adminutil.c dest.c language.c notify.c \
-               options.c tempfile.c usersys.c \
-               util.c
-       ../tools/makedocset --docset org.cups.filedir.docset \
-               --title "File and Directory APIs" \
-               --header api-filedir.header --intro api-filedir.shtml \
-               file.h file.c dir.h dir.c
-       ../tools/makedocset --docset org.cups.ppd.docset \
-               --title "PPD API" \
-               --header api-ppd.header --intro api-ppd.shtml \
-               ppd.h attr.c conflicts.c custom.c emit.c localize.c mark.c \
-               page.c ppd.c
-       ../tools/makedocset --docset org.cups.httpipp.docset \
-               --title "HTTP and IPP APIs" \
-               --header api-httpipp.header --intro api-httpipp.shtml \
-               http.h ipp.h auth.c getdevices.c getputfile.c encode.c \
-               http.c http-addr.c http-support.c ipp.c ipp-support.c \
-               md5passwd.c request.c
-       ../tools/makedocset --docset org.cups.filter.docset \
-               --title "Filter and Backend Programming" \
-               --header api-filter.header --intro api-filter.shtml \
-               backchannel.c backend.h backend.c sidechannel.c sidechannel.h
-
-
 #
 # Dependencies...
 #
index a46d34f691ca906d28c75269b0a9d3271bed6350..e2c5ea827dbe49154805a3e5ea9003c194157386 100644 (file)
@@ -949,6 +949,8 @@ _cupsAdminGetServerSettings(
        return (0);
       }
     }
+
+    http = cg->http;
   }
 
   if (!http || !num_settings || !settings)
index da37c0bfc7247fd669fa0b31b4409b9604f074e6..ca877a398f577a2cec400038c2122816b589aae6 100644 (file)
@@ -83,10 +83,10 @@ static int  cups_local_auth(http_t *http);
  */
 
 int                                    /* O - 0 on success, -1 on error */
-cupsDoAuthentication(http_t     *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */
-                     const char *method,/* I - Request method ("GET", "POST", "PUT") */
-                    const char *resource)
-                                       /* I - Resource path */
+cupsDoAuthentication(
+    http_t     *http,                  /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */
+    const char *method,                        /* I - Request method ("GET", "POST", "PUT") */
+    const char *resource)              /* I - Resource path */
 {
   const char   *password;              /* Password string */
   char         prompt[1024],           /* Prompt for user */
@@ -103,6 +103,12 @@ cupsDoAuthentication(http_t     *http,     /* I - Connection to server or @code CUPS
   DEBUG_printf(("2cupsDoAuthentication: WWW-Authenticate=\"%s\"",
                 httpGetField(http, HTTP_FIELD_WWW_AUTHENTICATE)));
 
+  if (!http)
+    http = _cupsConnect();
+
+  if (!http || !method || !resource)
+    return (-1);
+
  /*
   * Clear the current authentication string...
   */
@@ -126,7 +132,10 @@ cupsDoAuthentication(http_t     *http,     /* I - Connection to server or @code CUPS
       return (0);
     }
     else if (localauth == -1)
+    {
+      http->status = HTTP_AUTHORIZATION_CANCELED;
       return (-1);                     /* Error or canceled */
+    }
   }
 
  /*
@@ -154,11 +163,17 @@ cupsDoAuthentication(http_t     *http,    /* I - Connection to server or @code CUPS
                                       "Digest", 5) != 0;
     http->userpass[0]   = '\0';
 
-    if ((password = cupsGetPassword(prompt)) == NULL)
+    if ((password = cupsGetPassword2(prompt, http, method, resource)) == NULL)
+    {
+      http->status = HTTP_AUTHORIZATION_CANCELED;
       return (-1);
+    }
 
     if (!password[0])
+    {
+      http->status = HTTP_AUTHORIZATION_CANCELED;
       return (-1);
+    }
 
     snprintf(http->userpass, sizeof(http->userpass), "%s:%s", cupsUser(),
              password);
@@ -201,6 +216,8 @@ cupsDoAuthentication(http_t     *http,      /* I - Connection to server or @code CUPS
     {
       DEBUG_puts("1cupsDoAuthentication: Weak-linked GSSAPI/Kerberos framework "
                  "is not present");
+      http->status = HTTP_AUTHORIZATION_CANCELED;
+
       return (-1);
     }
 #  endif /* __APPLE__ */
@@ -209,6 +226,7 @@ cupsDoAuthentication(http_t     *http,      /* I - Connection to server or @code CUPS
     {
       DEBUG_printf(("1cupsDoAuthentication: too many Negotiate tries (%d)",
                     http->digest_tries));
+      http->status = HTTP_AUTHORIZATION_CANCELED;
   
       return (-1);
     }
@@ -295,6 +313,8 @@ cupsDoAuthentication(http_t     *http,      /* I - Connection to server or @code CUPS
       cups_gss_printf(major_status, minor_status,
                      "cupsDoAuthentication: Unable to initialize security "
                      "context");
+      http->status = HTTP_AUTHORIZATION_CANCELED;
+
       return (-1);
     }
 
@@ -331,7 +351,7 @@ cupsDoAuthentication(http_t     *http,      /* I - Connection to server or @code CUPS
     {
       DEBUG_printf(("1cupsDoAuthentication: Kerberos credentials too large - "
                     "%d bytes!", (int)output_token.length));
-
+      http->status = HTTP_AUTHORIZATION_CANCELED;
       gss_release_buffer(&minor_status, &output_token);
 
       return (-1);
@@ -595,6 +615,37 @@ cups_local_auth(http_t *http)              /* I - HTTP connection to server */
   }
 #  endif /* HAVE_AUTHORIZATION_H */
 
+#  if defined(SO_PEERCRED) && defined(AF_LOCAL)
+ /*
+  * See if we can authenticate using the peer credentials provided over a
+  * domain socket; if so, specify "PeerCred username" as the authentication
+  * information...
+  */
+
+  if (http->hostaddr->addr.sa_family == AF_LOCAL &&
+      !getenv("GATEWAY_INTERFACE"))    /* Not via CGI programs... */
+  {
+   /*
+    * Verify that the current cupsUser() matches the current UID...
+    */
+
+    struct passwd      *pwd;           /* Password information */
+    const char         *username;      /* Current username */
+
+    username = cupsUser();
+
+    if ((pwd = getpwnam(username)) != NULL && pwd->pw_uid == getuid())
+    {
+      httpSetAuthString(http, "PeerCred", username);
+
+      DEBUG_printf(("8cups_local_auth: Returning authstring=\"%s\"",
+                   http->authstring));
+
+      return (0);
+    }
+  }
+#  endif /* SO_PEERCRED && AF_LOCAL */
+
  /*
   * Try opening a certificate file for this PID.  If that fails,
   * try the root certificate...
@@ -657,37 +708,6 @@ cups_local_auth(http_t *http)              /* I - HTTP connection to server */
     return (0);
   }
 
-#  if defined(SO_PEERCRED) && defined(AF_LOCAL)
- /*
-  * See if we can authenticate using the peer credentials provided over a
-  * domain socket; if so, specify "PeerCred username" as the authentication
-  * information...
-  */
-
-  if (http->hostaddr->addr.sa_family == AF_LOCAL &&
-      !getenv("GATEWAY_INTERFACE"))    /* Not via CGI programs... */
-  {
-   /*
-    * Verify that the current cupsUser() matches the current UID...
-    */
-
-    struct passwd      *pwd;           /* Password information */
-    const char         *username;      /* Current username */
-
-    username = cupsUser();
-
-    if ((pwd = getpwnam(username)) != NULL && pwd->pw_uid == getuid())
-    {
-      httpSetAuthString(http, "PeerCred", username);
-
-      DEBUG_printf(("8cups_local_auth: Returning authstring=\"%s\"",
-                   http->authstring));
-
-      return (0);
-    }
-  }
-#  endif /* SO_PEERCRED && AF_LOCAL */
-
   return (1);
 #endif /* WIN32 || __EMX__ */
 }
index 8836aab943c54943335817c6f28855e08701491f..a4f92e8772447abfc0de5df477042a64f0c54791 100644 (file)
@@ -125,6 +125,12 @@ enum cups_ptype_e                  /**** Printer type/capability bit constants ****/
 typedef const char *(*cups_password_cb_t)(const char *prompt);
                                        /**** Password callback ****/
 
+typedef const char *(*cups_password_cb2_t)(const char *prompt, http_t *http,
+                                          const char *method,
+                                          const char *resource,
+                                          void *user_data);
+                                       /**** New password callback @since CUPS 1.4@ ****/
+
 typedef void (*cups_device_cb_t)(const char *device_class,
                                  const char *device_id, const char *device_info,
                                  const char *device_make_and_model,
@@ -294,6 +300,9 @@ extern ipp_status_t cupsGetDevices(http_t *http, int timeout,
                                       void *user_data) _CUPS_API_1_4;
 extern cups_dest_t     *cupsGetNamedDest(http_t *http, const char *name,
                                          const char *instance) _CUPS_API_1_4;
+extern const char      *cupsGetPassword2(const char *prompt, http_t *http,
+                                         const char *method,
+                                         const char *resource) _CUPS_API_1_4;
 extern http_status_t   cupsGetPPD3(http_t *http, const char *name,
                                    time_t *modtime, char *buffer,
                                    size_t bufsize) _CUPS_API_1_4;
@@ -309,6 +318,8 @@ extern int          cupsResolveConflicts(ppd_file_t *ppd, const char *option,
 extern http_status_t   cupsSendRequest(http_t *http, ipp_t *request,
                                        const char *resource,
                                        size_t length) _CUPS_API_1_4;
+extern void            cupsSetPasswordCB2(cups_password_cb2_t cb,
+                                          void *user_data) _CUPS_API_1_4;
 extern http_status_t   cupsStartDocument(http_t *http, const char *name,
                                          int job_id, const char *docname,
                                          const char *format,
index cd622c961512471cb9338b186d8e10b7fc3e3899..74f77ffd4915fae2b398b6f23cd502875386b814 100644 (file)
@@ -38,6 +38,8 @@
 
 int                    _cups_debug_fd = -1;
                                        /* Debug log file descriptor */
+int                    _cups_debug_level = 1;
+                                       /* Log level (0 to 9) */
 
 
 #ifdef DEBUG
@@ -47,9 +49,8 @@ int                   _cups_debug_fd = -1;
 
 static regex_t         *debug_filter = NULL;
                                        /* Filter expression for messages */
-static int             debug_init = 1; /* Did we initialize debugging? */
+static int             debug_init = 0; /* Did we initialize debugging? */
 #  ifdef HAVE_PTHREAD_H
-static int             debug_level = 0;/* Log level (0 to 9) */
 static pthread_mutex_t debug_mutex = PTHREAD_MUTEX_INITIALIZER;
                                        /* Mutex to control initialization */
 #  endif /* HAVE_PTHREAD_H */
@@ -420,8 +421,6 @@ _cups_debug_printf(const char *format,      /* I - Printf-style format string */
 
     if (!debug_init)
     {
-      debug_init = 1;
-
       if ((cups_debug_log = getenv("CUPS_DEBUG_LOG")) == NULL)
        _cups_debug_fd = -1;
       else if (!strcmp(cups_debug_log, "-"))
@@ -429,11 +428,15 @@ _cups_debug_printf(const char *format,    /* I - Printf-style format string */
       else
       {
        snprintf(buffer, sizeof(buffer), cups_debug_log, getpid());
-       _cups_debug_fd = open(buffer, O_WRONLY | O_APPEND | O_CREAT, 0644);
+
+       if (buffer[0] == '+')
+         _cups_debug_fd = open(buffer + 1, O_WRONLY | O_APPEND | O_CREAT, 0644);
+       else
+         _cups_debug_fd = open(buffer, O_WRONLY | O_TRUNC | O_CREAT, 0644);
       }
 
       if ((cups_debug_level = getenv("CUPS_DEBUG_LEVEL")) != NULL)
-       debug_level = atoi(cups_debug_level);
+       _cups_debug_level = atoi(cups_debug_level);
 
       if ((cups_debug_filter = getenv("CUPS_DEBUG_FILTER")) != NULL)
       {
@@ -448,6 +451,8 @@ _cups_debug_printf(const char *format,      /* I - Printf-style format string */
          debug_filter = NULL;
        }
       }
+
+      debug_init = 1;
     }
 
     pthread_mutex_unlock(&debug_mutex);
@@ -465,7 +470,7 @@ _cups_debug_printf(const char *format,      /* I - Printf-style format string */
   else
     level = 0;
 
-  if (level > debug_level)
+  if (level > _cups_debug_level)
     return;
 
   if (debug_filter)
index e13335bfce523267748582bfa276511356ce9ee7..e051be4f78f7de4aa84472450d33bfa91f60f308 100644 (file)
@@ -70,6 +70,7 @@ extern "C" {
  */
 
 extern int     _cups_debug_fd;
+extern int     _cups_debug_level;
 extern void    _cups_debug_printf(const char *format, ...)
 #ifdef __GNUC__
 __attribute__ ((__format__ (__printf__, 1, 2)))
index 922c8b917e9eccb4e3ffe15dbc08db554f0668a2..82c07f66e2078605a5028b29251ef99aa474e77d 100644 (file)
@@ -1111,17 +1111,32 @@ static void
 ppd_handle_media(ppd_file_t *ppd)      /* I - PPD file */
 {
   ppd_choice_t *manual_feed,           /* ManualFeed choice, if any */
-               *input_slot,            /* InputSlot choice, if any */
-               *page;                  /* PageSize/PageRegion */
+               *input_slot;            /* InputSlot choice, if any */
   ppd_size_t   *size;                  /* Current media size */
   ppd_attr_t   *rpr;                   /* RequiresPageRegion value */
 
 
  /*
-  * This function determines if the user has selected a media source
-  * via the InputSlot or ManualFeed options; if so, it marks the
-  * PageRegion option corresponding to the current media size.
-  * Otherwise it marks the PageSize option.
+  * This function determines what page size code to use, if any, for the
+  * current media size, InputSlot, and ManualFeed selections.
+  *
+  * We use the PageSize code if:
+  *
+  * 1. A custom media size is selected.
+  * 2. ManualFeed and InputSlot are not selected (or do not exist).
+  * 3. ManualFeed is selected but is False and InputSlot is not selected or
+  *    the selection has no code - the latter check done to support "auto" or
+  *    "printer default" InputSlot options.
+  *
+  * We use the PageRegion code if:
+  *
+  * 4. RequiresPageRegion does not exist and the PPD contains cupsFilter
+  *    keywords, indicating this is a CUPS-based driver.
+  * 5. RequiresPageRegion exists for the selected InputSlot (or "All" for any
+  *    InputSlot or ManualFeed selection) and is True.
+  *
+  * If none of the 5 conditions are true, no page size code is used and we
+  * unmark any existing PageSize or PageRegion choices.
   */
 
   if ((size = ppdPageSize(ppd, NULL)) == NULL)
@@ -1138,46 +1153,52 @@ ppd_handle_media(ppd_file_t *ppd)       /* I - PPD file */
   if (!rpr)
     rpr = ppdFindAttr(ppd, "RequiresPageRegion", "All");
 
-  if (!strcasecmp(size->name, "Custom") || (!manual_feed && !input_slot) ||
-      !((manual_feed && !strcasecmp(manual_feed->choice, "True")) ||
-        (input_slot && input_slot->code && input_slot->code[0])))
+  if (!strcasecmp(size->name, "Custom") ||
+      (!manual_feed && !input_slot) ||
+      (manual_feed && !strcasecmp(manual_feed->choice, "False") &&
+       (!input_slot || (input_slot->code && !input_slot->code[0]))))
   {
    /*
-    * Manual feed was not selected and/or the input slot selection does
-    * not contain any PostScript code.  Use the PageSize option...
+    * Use PageSize code...
     */
 
     ppdMarkOption(ppd, "PageSize", size->name);
   }
-  else
+  else if ((rpr && rpr->value && !strcasecmp(rpr->value, "True")) ||
+           (!rpr && ppd->num_filters > 0))
   {
    /*
-    * Manual feed was selected and/or the input slot selection contains
-    * PostScript code.  Use the PageRegion option...
+    * Use PageRegion code...
     */
 
     ppdMarkOption(ppd, "PageRegion", size->name);
-
+  }
+  else
+  {
    /*
-    * RequiresPageRegion does not apply to manual feed so we need to
-    * check that we are not doing manual feed before unmarking PageRegion.
+    * Do not use PageSize or PageRegion code...
     */
 
-    if (!(manual_feed && !strcasecmp(manual_feed->choice, "True")) &&
-        ((rpr && rpr->value && !strcmp(rpr->value, "False")) ||
-         (!rpr && !ppd->num_filters)))
+    ppd_choice_t       *page;          /* PageSize/Region choice, if any */
+
+    if ((page = ppdFindMarkedChoice(ppd, "PageSize")) != NULL)
     {
      /*
-      * Either the PPD file specifies no PageRegion code or the PPD file
-      * not for a CUPS raster driver and thus defaults to no PageRegion
-      * code...  Unmark the PageRegion choice so that we don't output the
-      * code...
+      * Unmark PageSize...
       */
 
-      page = ppdFindMarkedChoice(ppd, "PageRegion");
+      page->marked = 0;
+      cupsArrayRemove(ppd->marked, page);
+    }
+
+    if ((page = ppdFindMarkedChoice(ppd, "PageRegion")) != NULL)
+    {
+     /*
+      * Unmark PageRegion...
+      */
 
-      if (page)
-        page->marked = 0;
+      page->marked = 0;
+      cupsArrayRemove(ppd->marked, page);
     }
   }
 }
index 44500d3fcbb81f6bb9df621612627abe76ac1131..81f885912d40b4a373ae4064df46e68d54edce87 100644 (file)
@@ -134,7 +134,10 @@ cupsGetDevices(
        if (!cupsDoAuthentication(http, "POST", "/"))
          httpReconnect(http);
        else
+       {
+         status = HTTP_AUTHORIZATION_CANCELED;
          break;
+       }
       }
 
 #ifdef HAVE_SSL
index 43952dc1f647d219f453e5e3842d33d4dcf2ac1f..a8be5aca0bc134c82e984eef26e7e30a3eb61970 100644 (file)
@@ -123,7 +123,10 @@ cupsGetFd(http_t     *http,                /* I - Connection to server or @code CUPS_HTTP_DEFA
       */
 
       if (cupsDoAuthentication(http, "GET", resource))
+      {
+        status = HTTP_AUTHORIZATION_CANCELED;
         break;
+      }
 
       if (httpReconnect(http))
       {
@@ -390,7 +393,10 @@ cupsPutFd(http_t     *http,                /* I - Connection to server or @code CUPS_HTTP_DEFA
       */
 
       if (cupsDoAuthentication(http, "PUT", resource))
+      {
+        status = HTTP_AUTHORIZATION_CANCELED;
         break;
+      }
 
       if (httpReconnect(http))
       {
index fc7d6807b5b11138854143742062ed6320c6959d..e9e863313f00856616d6eb3f084e4dad113c0eed 100644 (file)
@@ -112,7 +112,7 @@ _cupsGlobals(void)
     */
 
     globals->encryption  = (http_encryption_t)-1;
-    globals->password_cb = _cupsGetPassword;
+    globals->password_cb = (cups_password_cb2_t)_cupsGetPassword;
 
     cups_env_init(globals);
   }
index 89139367f903422e0810e5920b107968cab8c7f0..fecbeb3d7021fa0708e9bc962c22f2d9dc6bba1f 100644 (file)
@@ -120,7 +120,8 @@ typedef struct _cups_globals_s              /**** CUPS global state data ****/
   char                 user[65],       /* User name */
                        server[256],    /* Server address */
                        servername[256];/* Server hostname */
-  cups_password_cb_t   password_cb;    /* Password callback */
+  cups_password_cb2_t  password_cb;    /* Password callback */
+  void                 *password_data; /* Password user data */
 
   /* util.c */
   http_t               *http;          /* Current server connection */
index baa45c1220e4a3b4d5920bef397f74505e6da1cc..cd78c628b67277d5bbf996e4449a22823bbe66f9 100644 (file)
@@ -1210,6 +1210,7 @@ httpStatus(http_status_t status)  /* I - HTTP status code */
         s = _("Bad Request");
        break;
     case HTTP_UNAUTHORIZED :
+    case HTTP_AUTHORIZATION_CANCELED :
         s = _("Unauthorized");
        break;
     case HTTP_FORBIDDEN :
@@ -1460,9 +1461,9 @@ _httpResolveURI(
     if (logit)
     {
       if (uri)
-        fputs("DEBUG: Unable to resolve URI!\n", stderr);
-      else
         fprintf(stderr, "DEBUG: Resolved as \"%s\"...\n", uri);
+      else
+        fputs("DEBUG: Unable to resolve URI!\n", stderr);
 
       fputs("STATE: -connecting-to-device\n", stderr);
     }
@@ -1637,7 +1638,7 @@ resolve_callback(
   * Figure out the scheme from the full name...
   */
 
-  if (strstr(fullName, "._ipp"))
+  if (strstr(fullName, "._ipp") || strstr(fullName, "._fax-ipp"))
     scheme = "ipp";
   else if (strstr(fullName, "._printer."))
     scheme = "lpd";
index e5920fa3f965c4459409d8873ec276803f74d2a2..a717f80c0ad6e10a0248ec852d17ddfb681540d9 100644 (file)
@@ -181,6 +181,25 @@ static const char * const http_fields[] =
                          "User-Agent",
                          "WWW-Authenticate"
                        };
+#ifdef DEBUG
+static const char * const http_states[] =
+                       {
+                         "HTTP_WAITING",
+                         "HTTP_OPTIONS",
+                         "HTTP_GET",
+                         "HTTP_GET_SEND",
+                         "HTTP_HEAD",
+                         "HTTP_POST",
+                         "HTTP_POST_RECV",
+                         "HTTP_POST_SEND",
+                         "HTTP_PUT",
+                         "HTTP_PUT_RECV",
+                         "HTTP_DELETE",
+                         "HTTP_TRACE",
+                         "HTTP_CLOSE",
+                         "HTTP_STATUS"
+                       };
+#endif /* DEBUG */
 
 
 #if defined(HAVE_SSL) && defined(HAVE_LIBSSL)
@@ -545,7 +564,8 @@ httpFlush(http_t *http)                     /* I - Connection to server */
   int  blocking;                       /* To block or not to block */
 
 
-  DEBUG_printf(("httpFlush(http=%p), state=%d", http, http->state));
+  DEBUG_printf(("httpFlush(http=%p), state=%s", http,
+                http_states[http->state]));
 
  /*
   * Temporarily set non-blocking mode so we don't get stuck in httpRead()...
@@ -757,7 +777,8 @@ httpGetLength(http_t *http)         /* I - Connection to server */
 off_t                                  /* O - Content length */
 httpGetLength2(http_t *http)           /* I - Connection to server */
 {
-  DEBUG_printf(("2httpGetLength2(http=%p), state=%d", http, http->state));
+  DEBUG_printf(("2httpGetLength2(http=%p), state=%s", http,
+                http_states[http->state]));
 
   if (!http)
     return (-1);
@@ -996,10 +1017,11 @@ httpGets(char   *line,                   /* I - Line to read into */
  /*
   * Read a line from the buffer...
   */
-    
-  lineptr = line;
-  lineend = line + length - 1;
-  eol     = 0;
+
+  http->error = 0;
+  lineptr     = line;
+  lineend     = line + length - 1;
+  eol         = 0;
 
   while (lineptr < lineend)
   {
@@ -1328,6 +1350,7 @@ httpRead2(http_t *http,                   /* I - Connection to server */
     return (-1);
 
   http->activity = time(NULL);
+  http->error    = 0;
 
   if (length <= 0)
     return (0);
@@ -1866,18 +1889,38 @@ httpSetField(http_t       *http,        /* I - Connection to server */
   else if (field == HTTP_FIELD_HOST)
   {
    /*
-    * Special-case for Host: as we don't want a trailing "." on the hostname.
+    * Special-case for Host: as we don't want a trailing "." on the hostname and
+    * need to bracket IPv6 numeric addresses.
     */
 
-    char *ptr = http->fields[HTTP_FIELD_HOST];
-                                       /* Pointer into Host: field */
+    if (strchr(value, ':'))
+    {
+     /*
+      * Bracket IPv6 numeric addresses...
+      *
+      * This is slightly inefficient (basically copying twice), but is an edge
+      * case and not worth optimizing...
+      */
 
-    if (*ptr)
+      snprintf(http->fields[HTTP_FIELD_HOST],
+               sizeof(http->fields[HTTP_FIELD_HOST]), "[%s]", value);
+    }
+    else
     {
-      ptr += strlen(ptr) - 1;
+     /*
+      * Check for a trailing dot on the hostname...
+      */
+
+      char *ptr = http->fields[HTTP_FIELD_HOST];
+                                       /* Pointer into Host: field */
+
+      if (*ptr)
+      {
+       ptr += strlen(ptr) - 1;
 
-      if (*ptr == '.')
-        *ptr = '\0';
+       if (*ptr == '.')
+         *ptr = '\0';
+      }
     }
   }
 }
@@ -1936,7 +1979,8 @@ httpUpdate(http_t *http)          /* I - Connection to server */
                status;                 /* Request status */
 
 
-  DEBUG_printf(("httpUpdate(http=%p), state=%d", http, http->state));
+  DEBUG_printf(("httpUpdate(http=%p), state=%s", http,
+                http_states[http->state]));
 
  /*
   * Flush pending data, if any...
@@ -2604,12 +2648,12 @@ http_debug_hex(const char *prefix,      /* I - Prefix for line */
        *ptr;                           /* Pointer into line */
 
 
-  if (_cups_debug_fd < 0)
+  if (_cups_debug_fd < 0 || _cups_debug_level < 6)
     return;
 
   DEBUG_printf(("6%s: %d bytes:\n", prefix, bytes));
 
-  snprintf(line, sizeof(line), "%s: ", prefix);
+  snprintf(line, sizeof(line), "6%s: ", prefix);
   start = line + strlen(line);
 
   for (i = 0; i < bytes; i += 16)
@@ -3164,14 +3208,15 @@ http_upgrade(http_t *http)              /* I - Connection to server */
  
 static int                             /* O - Number of bytes written */
 http_write(http_t     *http,           /* I - Connection to server */
-          const char *buffer,          /* I - Buffer for data */
-         int        length)            /* I - Number of bytes to write */
+           const char *buffer,         /* I - Buffer for data */
+          int        length)           /* I - Number of bytes to write */
 {
   int  tbytes,                         /* Total bytes sent */
        bytes;                          /* Bytes sent */
 
 
-  tbytes = 0;
+  http->error = 0;
+  tbytes      = 0;
 
   while (length > 0)
   {
@@ -3230,6 +3275,7 @@ http_write_chunk(http_t     *http,        /* I - Connection to server */
   char header[255];                    /* Chunk header */
   int  bytes;                          /* Bytes written */
 
+
   DEBUG_printf(("7http_write_chunk(http=%p, buffer=%p, length=%d)",
                 http, buffer, length));
 
index 0c51578d736e01a18746632365af9e70b3deda5d..70ffe4d3ab00e0148223f70d8726c7695bd556e7 100644 (file)
@@ -248,7 +248,10 @@ typedef enum http_status_e         /**** HTTP status codes ****/
   HTTP_BAD_GATEWAY,                    /* Bad gateway */
   HTTP_SERVICE_UNAVAILABLE,            /* Service is unavailable */
   HTTP_GATEWAY_TIMEOUT,                        /* Gateway connection timed out */
-  HTTP_NOT_SUPPORTED                   /* HTTP version not supported */
+  HTTP_NOT_SUPPORTED,                  /* HTTP version not supported */
+
+  HTTP_AUTHORIZATION_CANCELED = 1000   /* User cancelled authorization */
+
 } http_status_t;
 
 typedef enum http_uri_status_e         /**** URI separation status @since CUPS1.2@ ****/
index 021a56e11bb79f694d133510d566bbd9bc24f5a9..c3e8a8f12432ca4a640df69d3f63d53b28d8f396 100644 (file)
@@ -1148,7 +1148,7 @@ ippReadIO(void       *src,                /* I - Data source */
            return (IPP_ERROR);
          }
 
-         DEBUG_printf(("1ippReadIO: ipp->current=%p, ipp->prev=%p",
+         DEBUG_printf(("2ippReadIO: ipp->current=%p, ipp->prev=%p",
                        ipp->current, ipp->prev));
 
         /*
index 39ef4356952e9591b9e396de02a31ce6d0567f3a..e162bfe13daaecfa039c44c22d5a01db5a9ecad2 100644 (file)
@@ -429,7 +429,7 @@ cupsLangGet(const char *language)   /* I - Language or locale */
                };
 
 
-  DEBUG_printf(("cupsLangGet(language=\"%s\")", language));
+  DEBUG_printf(("2cupsLangGet(language=\"%s\")", language));
 
 #ifdef __APPLE__
  /*
@@ -448,7 +448,7 @@ cupsLangGet(const char *language)   /* I - Language or locale */
     if ((language = getenv("LANG")) == NULL)
       language = appleLangDefault();
 
-    DEBUG_printf(("2cupsLangGet: language=\"%s\"", language));
+    DEBUG_printf(("4cupsLangGet: language=\"%s\"", language));
   }
 
 #else
@@ -477,7 +477,7 @@ cupsLangGet(const char *language)   /* I - Language or locale */
     ptr = setlocale(LC_ALL, NULL);
 #  endif /* LC_MESSAGES */
 
-    DEBUG_printf(("2cupsLangGet: current locale is \"%s\"", ptr));
+    DEBUG_printf(("4cupsLangGet: current locale is \"%s\"", ptr));
 
     if (!ptr || !strcmp(ptr, "C") || !strcmp(ptr, "POSIX"))
     {
@@ -525,7 +525,7 @@ cupsLangGet(const char *language)   /* I - Language or locale */
       if (!strncmp(locale, "nb", 2))
         locale[1] = 'o';
 
-      DEBUG_printf(("2cupsLangGet: new language value is \"%s\"", language));
+      DEBUG_printf(("4cupsLangGet: new language value is \"%s\"", language));
     }
   }
 #endif /* __APPLE__ */
@@ -562,7 +562,7 @@ cupsLangGet(const char *language)   /* I - Language or locale */
 
     *ptr = '\0';
 
-    DEBUG_printf(("2cupsLangGet: charset set to \"%s\" via "
+    DEBUG_printf(("4cupsLangGet: charset set to \"%s\" via "
                   "nl_langinfo(CODESET)...", charset));
   }
 #endif /* CODESET */
@@ -642,7 +642,7 @@ cupsLangGet(const char *language)   /* I - Language or locale */
     }
   }
 
-  DEBUG_printf(("2cupsLangGet: langname=\"%s\", country=\"%s\", charset=\"%s\"",
+  DEBUG_printf(("4cupsLangGet: langname=\"%s\", country=\"%s\", charset=\"%s\"",
                 langname, country, charset));
 
  /*
@@ -680,7 +680,7 @@ cupsLangGet(const char *language)   /* I - Language or locale */
     }
   }
 
-  DEBUG_printf(("2cupsLangGet: encoding=%d(%s)", encoding,
+  DEBUG_printf(("4cupsLangGet: encoding=%d(%s)", encoding,
                 encoding == CUPS_AUTO_ENCODING ? "auto" :
                    lang_encodings[encoding]));
 
@@ -711,7 +711,7 @@ cupsLangGet(const char *language)   /* I - Language or locale */
     pthread_mutex_unlock(&lang_mutex);
 #endif /* HAVE_PTHREAD_H */
 
-    DEBUG_printf(("1cupsLangGet: Using cached copy of \"%s\"...", real));
+    DEBUG_printf(("3cupsLangGet: Using cached copy of \"%s\"...", real));
 
     return (lang);
   }
@@ -731,7 +731,7 @@ cupsLangGet(const char *language)   /* I - Language or locale */
       * No generic localization, so use POSIX...
       */
 
-      DEBUG_printf(("2cupsLangGet: access(\"%s\", 0): %s", filename,
+      DEBUG_printf(("4cupsLangGet: access(\"%s\", 0): %s", filename,
                     strerror(errno)));
 
       snprintf(filename, sizeof(filename), "%s/C/cups_C.po", cg->localedir);
index 4bb5cd67a6f50e8a9f80a5fed6d08beb5de18648..16fa94d1df61940dbd85100ea673b944a97349a1 100644 (file)
@@ -154,6 +154,7 @@ _cupsGetJobs2
 _cupsGetNamedDest
 _cupsGetOption
 _cupsGetPassword
+_cupsGetPassword2
 _cupsGetPPD
 _cupsGetPPD2
 _cupsGetPPD3
@@ -188,6 +189,7 @@ _cupsSetDests
 _cupsSetDests2
 _cupsSetEncryption
 _cupsSetPasswordCB
+_cupsSetPasswordCB2
 _cupsSetServer
 _cupsSetUser
 _cupsSideChannelDoRequest
index 07cfe8a557fa7fa39e63707f2fc36dbc45332b26..8520e931037a65914c514c8f496a7d66aae0ac06 100644 (file)
@@ -52,7 +52,7 @@
  * Local functions...
  */
 
-static void            ppd_ll_CC(char *ll_CC, int ll_CC_size);
+static cups_lang_t     *ppd_ll_CC(char *ll_CC, int ll_CC_size);
 
 
 /*
@@ -258,6 +258,7 @@ ppdLocalizeIPPReason(
     char       *buffer,                        /* I - Value buffer */
     size_t     bufsize)                        /* I - Size of value buffer */
 {
+  cups_lang_t  *lang;                  /* Current language */
   ppd_attr_t   *locattr;               /* Localized attribute */
   char         ll_CC[6],               /* Language + country locale */
                *bufptr,                /* Pointer into buffer */
@@ -282,7 +283,7 @@ ppdLocalizeIPPReason(
   * Get the default language...
   */
 
-  ppd_ll_CC(ll_CC, sizeof(ll_CC));
+  lang = ppd_ll_CC(ll_CC, sizeof(ll_CC));
 
  /*
   * Find the localized attribute...
@@ -293,7 +294,77 @@ ppdLocalizeIPPReason(
     locattr = ppdFindAttr(ppd, "cupsIPPReason", reason);
 
   if (!locattr)
+  {
+    if (lang && (!scheme || !strcmp(scheme, "text")))
+    {
+     /*
+      * Try to localize a standard printer-state-reason keyword...
+      */
+
+      const char *message = NULL;      /* Localized message */
+
+
+      if (!strncmp(reason, "media-needed", 12))
+        message = _("Media tray needs to be filled.");
+      else if (!strncmp(reason, "media-jam", 9))
+        message = _("Media jam!");
+      else if (!strncmp(reason, "moving-to-paused", 16) ||
+              !strncmp(reason, "offline", 7) ||
+              !strncmp(reason, "paused", 6) ||
+              !strncmp(reason, "shutdown", 8))
+        message = _("Printer offline.");
+      else if (!strncmp(reason, "toner-low", 9))
+        message = _("Toner low.");
+      else if (!strncmp(reason, "toner-empty", 11))
+        message = _("Out of toner!");
+      else if (!strncmp(reason, "cover-open", 10))
+        message = _("Cover open.");
+      else if (!strncmp(reason, "interlock-open", 14))
+        message = _("Interlock open.");
+      else if (!strncmp(reason, "door-open", 9))
+        message = _("Door open.");
+      else if (!strncmp(reason, "input-tray-missing", 18))
+        message = _("Media tray missing!");
+      else if (!strncmp(reason, "media-low", 9))
+        message = _("Media tray almost empty.");
+      else if (!strncmp(reason, "media-empty", 11))
+        message = _("Media tray empty!");
+      else if (!strncmp(reason, "output-tray-missing", 19))
+        message = _("Output tray missing!");
+      else if (!strncmp(reason, "output-area-almost-full", 23))
+        message = _("Output bin almost full.");
+      else if (!strncmp(reason, "output-area-full", 16))
+        message = _("Output bin full!");
+      else if (!strncmp(reason, "marker-supply-low", 17))
+        message = _("Ink/toner almost empty.");
+      else if (!strncmp(reason, "marker-supply-empty", 19))
+        message = _("Ink/toner empty!");
+      else if (!strncmp(reason, "marker-waste-almost-full", 24))
+        message = _("Ink/toner waste bin almost full.");
+      else if (!strncmp(reason, "marker-waste-full", 17))
+        message = _("Ink/toner waste bin full!");
+      else if (!strncmp(reason, "fuser-over-temp", 15))
+        message = _("Fuser temperature high!");
+      else if (!strncmp(reason, "fuser-under-temp", 16))
+        message = _("Fuser temperature low!");
+      else if (!strncmp(reason, "opc-near-eol", 12))
+        message = _("OPC almost at end-of-life.");
+      else if (!strncmp(reason, "opc-life-over", 13))
+        message = _("OPC at end-of-life!");
+      else if (!strncmp(reason, "developer-low", 13))
+        message = _("Developer almost empty.");
+      else if (!strncmp(reason, "developer-empty", 15))
+        message = _("Developer empty!");
+
+      if (message)
+      {
+        strlcpy(buffer, _cupsLangString(lang, message), bufsize);
+       return (buffer);
+      }
+    }
+
     return (NULL);
+  }
 
  /*
   * Now find the value we need...
@@ -659,7 +730,7 @@ _ppdLocalizedAttr(ppd_file_t *ppd,  /* I - PPD file */
  * 'ppd_ll_CC()' - Get the current locale names.
  */
 
-static void
+static cups_lang_t *                   /* O - Current language */
 ppd_ll_CC(char *ll_CC,                 /* O - Country-specific locale name */
           int  ll_CC_size)             /* I - Size of country-specific name */
 {
@@ -673,7 +744,7 @@ ppd_ll_CC(char *ll_CC,                      /* O - Country-specific locale name */
   if ((lang = cupsLangDefault()) == NULL)
   {
     strlcpy(ll_CC, "en_US", ll_CC_size);
-    return;
+    return (NULL);
   }
 
  /*
@@ -703,6 +774,7 @@ ppd_ll_CC(char *ll_CC,                      /* O - Country-specific locale name */
 
   DEBUG_printf(("8ppd_ll_CC: lang->language=\"%s\", ll_CC=\"%s\"...",
                 lang->language, ll_CC));
+  return (lang);
 }
 
 
index ecc210e0ba3b0fb12b1ff46ee17f4137a147d1c0..23e4dff1c3e00fa28d44f7436fe3f50e5e2ea94f 100644 (file)
@@ -3,7 +3,7 @@
  *
  *   Option routines for the Common UNIX Printing System (CUPS).
  *
- *   Copyright 2007-2008 by Apple Inc.
+ *   Copyright 2007-2009 by Apple Inc.
  *   Copyright 1997-2007 by Easy Software Products.
  *
  *   These coded instructions, statements, and computer programs are the
@@ -61,12 +61,12 @@ cupsAddOption(const char    *name,  /* I  - Name of option */
                diff;                   /* Result of search */
 
 
-  DEBUG_printf(("cupsAddOption(name=\"%s\", value=\"%s\", num_options=%d, "
+  DEBUG_printf(("2cupsAddOption(name=\"%s\", value=\"%s\", num_options=%d, "
                 "options=%p)", name, value, num_options, options));
  
   if (!name || !name[0] || !value || !options || num_options < 0)
   {
-    DEBUG_printf(("1cupsAddOption: Returning %d", num_options));
+    DEBUG_printf(("3cupsAddOption: Returning %d", num_options));
     return (num_options);
   }
 
@@ -94,7 +94,7 @@ cupsAddOption(const char    *name,    /* I  - Name of option */
     * No matching option name...
     */
 
-    DEBUG_printf(("2cupsAddOption: New option inserted at index %d...",
+    DEBUG_printf(("4cupsAddOption: New option inserted at index %d...",
                   insert));
 
     if (num_options == 0)
@@ -105,7 +105,7 @@ cupsAddOption(const char    *name,  /* I  - Name of option */
 
     if (temp == NULL)
     {
-      DEBUG_puts("1cupsAddOption: Unable to expand option array, returning 0");
+      DEBUG_puts("3cupsAddOption: Unable to expand option array, returning 0");
       return (0);
     }
 
@@ -113,7 +113,7 @@ cupsAddOption(const char    *name,  /* I  - Name of option */
 
     if (insert < num_options)
     {
-      DEBUG_printf(("2cupsAddOption: Shifting %d options...",
+      DEBUG_printf(("4cupsAddOption: Shifting %d options...",
                     (int)(num_options - insert)));
       memmove(temp + insert + 1, temp + insert,
              (num_options - insert) * sizeof(cups_option_t));
@@ -129,7 +129,7 @@ cupsAddOption(const char    *name,  /* I  - Name of option */
     * Match found; free the old value...
     */
 
-    DEBUG_printf(("2cupsAddOption: Option already exists at index %d...",
+    DEBUG_printf(("4cupsAddOption: Option already exists at index %d...",
                   insert));
 
     temp = *options + insert;
@@ -138,7 +138,7 @@ cupsAddOption(const char    *name,  /* I  - Name of option */
 
   temp->value = _cupsStrAlloc(value);
 
-  DEBUG_printf(("1cupsAddOption: Returning %d", num_options));
+  DEBUG_printf(("3cupsAddOption: Returning %d", num_options));
 
   return (num_options);
 }
@@ -452,7 +452,7 @@ cupsRemoveOption(
   cups_option_t        *option;                /* Current option */
 
 
-  DEBUG_printf(("cupsRemoveOption(name=\"%s\", num_options=%d, options=%p)",
+  DEBUG_printf(("2cupsRemoveOption(name=\"%s\", num_options=%d, options=%p)",
                 name, num_options, options));
 
  /*
@@ -461,7 +461,7 @@ cupsRemoveOption(
 
   if (!name || num_options < 1 || !options)
   {
-    DEBUG_printf(("1cupsRemoveOption: Returning %d", num_options));
+    DEBUG_printf(("3cupsRemoveOption: Returning %d", num_options));
     return (num_options);
   }
 
@@ -479,7 +479,7 @@ cupsRemoveOption(
     * Remove this option from the array...
     */
 
-    DEBUG_puts("2cupsRemoveOption: Found option, removing it...");
+    DEBUG_puts("4cupsRemoveOption: Found option, removing it...");
 
     num_options --;
     i --;
@@ -495,7 +495,7 @@ cupsRemoveOption(
   * Return the new number of options...
   */
 
-  DEBUG_printf(("1cupsRemoveOption: Returning %d", num_options));
+  DEBUG_printf(("3cupsRemoveOption: Returning %d", num_options));
   return (num_options);
 }
 
index 21ee3ab250eaece35e01f2d8641cb2de37203720..8616c25e09b188640d41943be0e64738d6a47cfb 100644 (file)
@@ -50,11 +50,11 @@ ppdPageSize(ppd_file_t *ppd,                /* I - PPD file record */
   ppd_cparam_t *cparam;                /* Custom option parameter */
 
 
-  DEBUG_printf(("ppdPageSize(ppd=%p, name=\"%s\")", ppd, name));
+  DEBUG_printf(("2ppdPageSize(ppd=%p, name=\"%s\")", ppd, name));
 
   if (!ppd)
   {
-    DEBUG_puts("1ppdPageSize: Bad PPD pointer, returning NULL...");
+    DEBUG_puts("3ppdPageSize: Bad PPD pointer, returning NULL...");
     return (NULL);
   }
 
@@ -72,7 +72,7 @@ ppdPageSize(ppd_file_t *ppd,          /* I - PPD file record */
 
       if (!i)
       {
-       DEBUG_puts("1ppdPageSize: No custom sizes, returning NULL...");
+       DEBUG_puts("3ppdPageSize: No custom sizes, returning NULL...");
         return (NULL);
       }
 
@@ -144,7 +144,7 @@ ppdPageSize(ppd_file_t *ppd,                /* I - PPD file record */
       * Return the page size...
       */
 
-      DEBUG_printf(("1ppdPageSize: Returning %p (\"%s\", %gx%g)", size,
+      DEBUG_printf(("3ppdPageSize: Returning %p (\"%s\", %gx%g)", size,
                     size->name, size->width, size->length));
 
       return (size);
@@ -158,7 +158,7 @@ ppdPageSize(ppd_file_t *ppd,                /* I - PPD file record */
       for (i = ppd->num_sizes, size = ppd->sizes; i > 0; i --, size ++)
        if (!strcasecmp(name, size->name))
        {
-         DEBUG_printf(("1ppdPageSize: Returning %p (\"%s\", %gx%g)", size,
+         DEBUG_printf(("3ppdPageSize: Returning %p (\"%s\", %gx%g)", size,
                        size->name, size->width, size->length));
 
           return (size);
@@ -174,14 +174,14 @@ ppdPageSize(ppd_file_t *ppd,              /* I - PPD file record */
     for (i = ppd->num_sizes, size = ppd->sizes; i > 0; i --, size ++)
       if (size->marked)
       {
-       DEBUG_printf(("1ppdPageSize: Returning %p (\"%s\", %gx%g)", size,
+       DEBUG_printf(("3ppdPageSize: Returning %p (\"%s\", %gx%g)", size,
                      size->name, size->width, size->length));
 
         return (size);
       }
   }
 
-  DEBUG_puts("1ppdPageSize: Size not found, returning NULL");
+  DEBUG_puts("3ppdPageSize: Size not found, returning NULL");
 
   return (NULL);
 }
index 68b35c645dd52810e971082789d66db3c374216a..615ef22a214b5eadf75f4c610759097eddd4a360 100644 (file)
@@ -264,6 +264,8 @@ cupsDoIORequest(http_t     *http,   /* I - Connection to server or @code CUPS_HTTP
       status   = http->status;
     }
 
+    DEBUG_printf(("2cupsDoIORequest: status=%d", status));
+
     if (status == HTTP_FORBIDDEN || status == HTTP_ERROR ||
        status >= HTTP_SERVER_ERROR)
     {
@@ -434,6 +436,8 @@ cupsGetResponse(http_t     *http,   /* I - Connection to server or @code CUPS_HTTP
 
       if (!cupsDoAuthentication(http, "POST", resource))
        httpReconnect(http);
+      else
+        status = HTTP_AUTHORIZATION_CANCELED;
     }
 
 #ifdef HAVE_SSL
@@ -681,11 +685,15 @@ cupsSendRequest(http_t     *http, /* I - Connection to server or @code CUPS_HTTP
 
       case HTTP_UNAUTHORIZED :
           if (!cupsDoAuthentication(http, "POST", resource))
+         {
            if (httpReconnect(http))
            {
              _cupsSetError(IPP_SERVICE_UNAVAILABLE, NULL, 0);
              return (HTTP_SERVICE_UNAVAILABLE);
            }
+         }
+         else
+           status = HTTP_AUTHORIZATION_CANCELED;
 
           return (status);
 
@@ -782,7 +790,7 @@ cupsWriteRequestData(
   * Finally, check if we have any pending data from the server...
   */
 
-  if (length > HTTP_MAX_BUFFER ||
+  if (length >= HTTP_MAX_BUFFER ||
       http->wused < wused ||
       (wused > 0 && http->wused == length))
   {
@@ -863,6 +871,7 @@ _cupsSetHTTPError(http_status_t status)     /* I - HTTP status code */
        break;
 
     case HTTP_UNAUTHORIZED :
+    case HTTP_AUTHORIZATION_CANCELED :
        _cupsSetError(IPP_NOT_AUTHORIZED, httpStatus(status), 0);
        break;
 
index 45473fdacac7d27ef5b5c18fdda001078ae97ba0..0dab6506a6ff1ae9fad0bedcc0f80c368780babf 100644 (file)
@@ -39,6 +39,8 @@
 *Throughput:   "1"
 *LandscapeOrientation: Plus90
 *TTRasterizer: Type42
+*cupsFilter: "application/vnd.cups-raster - 0"
+*RequiresPageRegion All: True
 
 *% These constraints are used to test ppdConflicts() and cupsResolveConflicts()
 *UIConstraints: *PageSize Letter *InputSlot Envelope
index 3a6bb8517a75833140205de816d4a1606007189d..8b386e376a842210903cd8fcc85b49463e10453b 100644 (file)
@@ -98,6 +98,30 @@ static const char    *custom_code =
                        "%%EndFeature\n"
                        "} stopped cleartomark\n";
 
+static const char      *default2_code =
+                       "[{\n"
+                       "%%BeginFeature: *InstalledDuplexer False\n"
+                       "%%EndFeature\n"
+                       "} stopped cleartomark\n"
+                       "[{\n"
+                       "%%BeginFeature: *InputSlot Tray\n"
+                       "InputSlot=Tray\n"
+                       "%%EndFeature\n"
+                       "} stopped cleartomark\n"
+                       "[{\n"
+                       "%%BeginFeature: *Quality Normal\n"
+                       "Quality=Normal\n"
+                       "%%EndFeature\n"
+                       "} stopped cleartomark\n"
+                       "[{\n"
+                       "%%BeginFeature: *IntOption None\n"
+                       "%%EndFeature\n"
+                       "} stopped cleartomark\n"
+                       "[{\n"
+                       "%%BeginFeature: *StringOption None\n"
+                       "%%EndFeature\n"
+                       "} stopped cleartomark\n";
+
 
 /*
  * 'main()' - Main entry.
@@ -596,6 +620,23 @@ main(int  argc,                            /* I - Number of command-line arguments */
       printf("FAIL (%d conflicts)\n", conflicts);
     }
 
+    fputs("ppdEmitString (defaults): ", stdout);
+    if ((s = ppdEmitString(ppd, PPD_ORDER_ANY, 0.0)) != NULL &&
+       !strcmp(s, default2_code))
+      puts("PASS");
+    else
+    {
+      status ++;
+      printf("FAIL (%d bytes instead of %d)\n", s ? (int)strlen(s) : 0,
+            (int)strlen(default2_code));
+
+      if (s)
+       puts(s);
+    }
+
+    if (s)
+      free(s);
+
     fputs("ppdConflicts(): ", stdout);
     ppdMarkOption(ppd, "PageSize", "Env10");
     ppdMarkOption(ppd, "InputSlot", "Envelope");
index afeb2de4ab0894ef302bd0b47e774661dbbd5967..4e7a794cbe33e735cadbc692bbe02cd791e99c05 100644 (file)
@@ -263,7 +263,7 @@ cupsCharsetToUTF8(
   * Check for valid arguments...
   */
 
-  DEBUG_printf(("cupsCharsetToUTF8(dest=%p, src=\"%s\", maxout=%d, encoding=%d)",
+  DEBUG_printf(("2cupsCharsetToUTF8(dest=%p, src=\"%s\", maxout=%d, encoding=%d)",
                dest, src, maxout, encoding));
 
   if (dest)
@@ -271,7 +271,7 @@ cupsCharsetToUTF8(
 
   if (!dest || !src || maxout < 1 || maxout > CUPS_MAX_USTRING)
   {
-    DEBUG_puts("1cupsCharsetToUTF8: Bad arguments, returning -1");
+    DEBUG_puts("3cupsCharsetToUTF8: Bad arguments, returning -1");
     return (-1);
   }
 
index 1ec589da95a9d30d69c746fb32a8879363fd85b0..be69e265286ebbc630c103811c812642d40b22ec 100644 (file)
@@ -23,6 +23,7 @@
  *                             server.
  *   cupsSetEncryption()     - Set the encryption preference.
  *   cupsSetPasswordCB()     - Set the password callback for CUPS.
+ *   cupsSetPasswordCB2()    - Set the advanced password callback for CUPS.
  *   cupsSetServer()         - Set the default server name.
  *   cupsSetUser()           - Set the default user name.
  *   cupsUser()              - Return the current user's name.
@@ -87,7 +88,36 @@ cupsEncryption(void)
 const char *                           /* O - Password */
 cupsGetPassword(const char *prompt)    /* I - Prompt string */
 {
-  return ((*_cupsGlobals()->password_cb)(prompt));
+  _cups_globals_t *cg = _cupsGlobals();        /* Pointer to library globals */
+
+
+  return ((cg->password_cb)(prompt, NULL, NULL, NULL, cg->password_data));
+}
+
+
+/*
+ * 'cupsGetPassword2()' - Get a password from the user using the advanced
+ *                        callback.
+ *
+ * Uses the current password callback function. Returns @code NULL@ if the
+ * user does not provide a password.
+ *
+ * @since CUPS 1.4@
+ */
+
+const char *                           /* O - Password */
+cupsGetPassword2(const char *prompt,   /* I - Prompt string */
+                http_t     *http,      /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */
+                const char *method,    /* I - Request method ("GET", "POST", "PUT") */
+                const char *resource)  /* I - Resource path */
+{
+  _cups_globals_t *cg = _cupsGlobals();        /* Pointer to library globals */
+
+
+  if (!http)
+    http = _cupsConnect();
+
+  return ((cg->password_cb)(prompt, http, method, resource, cg->password_data));
 }
 
 
@@ -140,10 +170,37 @@ cupsSetPasswordCB(cups_password_cb_t cb)/* I - Callback function */
   _cups_globals_t *cg = _cupsGlobals();        /* Pointer to library globals */
 
 
-  if (cb == (const char *(*)(const char *))0)
-    cg->password_cb = _cupsGetPassword;
+  if (cb == (cups_password_cb_t)0)
+    cg->password_cb = (cups_password_cb2_t)_cupsGetPassword;
+  else
+    cg->password_cb = (cups_password_cb2_t)cb;
+
+  cg->password_data = NULL;
+}
+
+
+/*
+ * 'cupsSetPasswordCB2()' - Set the advanced password callback for CUPS.
+ *
+ * Pass @code NULL@ to restore the default (console) password callback.
+ *
+ * @since CUPS 1.4@
+ */
+
+void
+cupsSetPasswordCB2(
+    cups_password_cb2_t cb,            /* I - Callback function */
+    void                *user_data)    /* I - User data pointer */
+{
+  _cups_globals_t *cg = _cupsGlobals();        /* Pointer to library globals */
+
+
+  if (cb == (cups_password_cb2_t)0)
+    cg->password_cb = (cups_password_cb2_t)_cupsGetPassword;
   else
     cg->password_cb = cb;
+
+  cg->password_data = user_data;
 }
 
 
index 2be1141c9923427c98f4974348b8170afe7e3d89..f86f110707578f5599a28cb09d91f843f9c857a5 100644 (file)
@@ -3,7 +3,7 @@
 #
 #   Documentation makefile for the Common UNIX Printing System (CUPS).
 #
-#   Copyright 2007-2008 by Apple Inc.
+#   Copyright 2007-2009 by Apple Inc.
 #   Copyright 1997-2007 by Easy Software Products.
 #
 #   These coded instructions, statements, and computer programs are the
@@ -22,33 +22,37 @@ include ../Makedefs
 WEBPAGES       =       \
                        cups.css \
                        cups-printable.css \
-                       favicon.png \
                        index.html \
                        robots.txt
 WEBIMAGES      =       \
                        images/color-wheel.png \
                        images/cups.png \
-                       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 \
                        images/sel.gif \
-                       images/smiley.jpg \
                        images/unsel.gif \
                        images/wait.gif
+HELPIMAGES     =       \
+                       images/cups-block-diagram.gif \
+                       images/cups-command-chain.png \
+                       images/cups-postscript-chain.png \
+                       images/cups-raster-chain.png \
+                       images/raster.png \
+                       images/smiley.jpg
 HELPFILES      =       \
                        help/accounting.html \
                        help/api-array.html \
+                       help/api-cgi.html \
                        help/api-cups.html \
+                       help/api-driver.html \
                        help/api-filedir.html \
                        help/api-filter.html \
                        help/api-httpipp.html \
+                       help/api-mime.html \
                        help/api-overview.html \
                        help/api-ppd.html \
+                       help/api-ppdc.html \
                        help/api-raster.html \
                        help/cgi.html \
                        help/glossary.html \
@@ -111,6 +115,7 @@ HELPFILES   =       \
                        help/spec-command.html \
                        help/spec-design.html \
                        help/spec-ipp.html \
+                       help/spec-pdf.html \
                        help/spec-postscript.html \
                        help/spec-ppd.html \
                        help/spec-raster.html \
@@ -176,7 +181,7 @@ install-data: $(INSTALL_LANGUAGES)
                $(INSTALL_MAN) $$file $(DOCDIR)/help; \
        done
        $(INSTALL_DIR) -m 755 $(DOCDIR)/images
-       for file in $(WEBIMAGES); do \
+       for file in $(WEBIMAGES) $(HELPIMAGES); do \
                $(INSTALL_MAN) $$file $(DOCDIR)/images; \
        done
 
@@ -237,6 +242,16 @@ uninstall-languages:
        done
 
 
+#
+# Install the docset bits locally...
+#
+
+docset:
+       cp $(HELPFILES) ../org.cups.docset/Contents/Resources/Documentation/help
+       cp cups-printable.css ../org.cups.docset/Contents/Resources/Documentation
+       cp $(HELPIMAGES) ../org.cups.docset/Contents/Resources/Documentation/images
+
+
 #
 # End of Makefile.
 #
index e4ad1fbff3a3452d4e26e0a11c63a4ec79f6e462..a65dd8355e3c60e3dd40c1dffa562755484e6274 100644 (file)
@@ -19,6 +19,10 @@ PRE.command {
   margin-left: 36pt;
 }
 
+P.compact {
+  margin: 0;
+}
+
 P.example {
   font-style: italic;
   margin-left: 36pt;
diff --git a/doc/favicon.png b/doc/favicon.png
deleted file mode 100644 (file)
index d77f3c8..0000000
Binary files a/doc/favicon.png and /dev/null differ
index d05a656f86c9d587410ca7eb5f48decc6dbeed25..95b308006b34b31de7100c730a70734334c809e3 100644 (file)
@@ -27,6 +27,10 @@ PRE.command {
   margin-left: 36pt;
 }
 
+P.compact {
+  margin: 0;
+}
+
 P.example {
   font-style: italic;
   margin-left: 36pt;
diff --git a/doc/help/api-cgi.html b/doc/help/api-cgi.html
new file mode 100644 (file)
index 0000000..7562948
--- /dev/null
@@ -0,0 +1,1021 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- SECTION: Programming -->
+<head>
+<title>CGI API</title>
+<meta name="keywords" content="Programming">
+<meta name="creator" content="Mini-XML v2.6">
+<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 {
+  margin-left: 36pt;
+}
+
+P.compact {
+  margin: 0;
+}
+
+P.example {
+  font-style: italic;
+  margin-left: 36pt;
+}
+  
+PRE.example {
+  background: #eeeeee;
+  border: dotted thin #999999;
+  margin-left: 36pt;
+  padding: 10px;
+}
+
+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: #cccccc;
+  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%;
+}
+
+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'>
+<h2 class="title">Contents</h2>
+<ul class="contents">
+<li><a href="#FUNCTIONS">Functions</a><ul class="code">
+<li><a href="#cgiCheckVariables" title="Check for the presence of &quot;required&quot; variables.">cgiCheckVariables</a></li>
+<li><a href="#cgiCompileSearch" title="Compile a search string.">cgiCompileSearch</a></li>
+<li><a href="#cgiCopyTemplateFile" title="Copy a template file and replace all the
+'{variable}' strings with the variable value.">cgiCopyTemplateFile</a></li>
+<li><a href="#cgiCopyTemplateLang" title="Copy a template file using a language...">cgiCopyTemplateLang</a></li>
+<li><a href="#cgiDoSearch" title="Do a search of some text.">cgiDoSearch</a></li>
+<li><a href="#cgiEndHTML" title="End a HTML page.">cgiEndHTML</a></li>
+<li><a href="#cgiEndMultipart" title="End the delivery of a multipart web page.">cgiEndMultipart</a></li>
+<li><a href="#cgiFormEncode" title="Encode a string as a form variable.">cgiFormEncode</a></li>
+<li><a href="#cgiFreeSearch" title="Free a compiled search context.">cgiFreeSearch</a></li>
+<li><a href="#cgiGetArray" title="Get an element from a form array...">cgiGetArray</a></li>
+<li><a href="#cgiGetAttributes" title="Get the list of attributes that are needed
+by the template file.">cgiGetAttributes</a></li>
+<li><a href="#cgiGetFile" title="Get the file (if any) that was submitted in the form.">cgiGetFile</a></li>
+<li><a href="#cgiGetIPPObjects" title="Get the objects in an IPP response.">cgiGetIPPObjects</a></li>
+<li><a href="#cgiGetSize" title="Get the size of a form array value.">cgiGetSize</a></li>
+<li><a href="#cgiGetTemplateDir" title="Get the templates directory...">cgiGetTemplateDir</a></li>
+<li><a href="#cgiGetVariable" title="Get a CGI variable from the database...">cgiGetVariable</a></li>
+<li><a href="#cgiInitialize" title="Initialize the CGI variable &quot;database&quot;...">cgiInitialize</a></li>
+<li><a href="#cgiIsPOST" title="Determine whether this page was POSTed.">cgiIsPOST</a></li>
+<li><a href="#cgiMoveJobs" title="Move one or more jobs.">cgiMoveJobs</a></li>
+<li><a href="#cgiPrintCommand" title="Print a CUPS command job.">cgiPrintCommand</a></li>
+<li><a href="#cgiPrintTestPage" title="Print a test page.">cgiPrintTestPage</a></li>
+<li><a href="#cgiRewriteURL" title="Rewrite a printer URI into a web browser URL...">cgiRewriteURL</a></li>
+<li><a href="#cgiSetArray" title="Set array element N to the specified string.">cgiSetArray</a></li>
+<li><a href="#cgiSetIPPObjectVars" title="Set CGI variables from an IPP object.">cgiSetIPPObjectVars</a></li>
+<li><a href="#cgiSetIPPVars" title="Set CGI variables from an IPP response.">cgiSetIPPVars</a></li>
+<li><a href="#cgiSetServerVersion" title="Set the server name and CUPS version...">cgiSetServerVersion</a></li>
+<li><a href="#cgiSetSize" title="Set the array size.">cgiSetSize</a></li>
+<li><a href="#cgiSetVariable" title="Set a CGI variable in the database...">cgiSetVariable</a></li>
+<li><a href="#cgiShowIPPError" title="Show the last IPP error message.">cgiShowIPPError</a></li>
+<li><a href="#cgiShowJobs" title="Show print jobs.">cgiShowJobs</a></li>
+<li><a href="#cgiStartHTML" title="Start a HTML page.">cgiStartHTML</a></li>
+<li><a href="#cgiStartMultipart" title="Start a multipart delivery of a web page.">cgiStartMultipart</a></li>
+<li><a href="#cgiSupportsMultipart" title="Does the browser support multi-part documents?">cgiSupportsMultipart</a></li>
+<li><a href="#cgiText" title="Return localized text.">cgiText</a></li>
+<li><a href="#helpDeleteIndex" title="Delete an index, freeing all memory used.">helpDeleteIndex</a></li>
+<li><a href="#helpFindNode" title="Find a node in an index.">helpFindNode</a></li>
+<li><a href="#helpLoadIndex" title="Load a help index from disk.">helpLoadIndex</a></li>
+<li><a href="#helpSaveIndex" title="Save a help index to disk.">helpSaveIndex</a></li>
+<li><a href="#helpSearchIndex" title="Search an index.">helpSearchIndex</a></li>
+</ul></li>
+<li><a href="#TYPES">Data Types</a><ul class="code">
+       <li><a href="#cgi_file_t" title="Uploaded file data">cgi_file_t</a></li>
+       <li><a href="#help_index_t" title="Help index structure">help_index_t</a></li>
+       <li><a href="#help_node_t" title="Help node structure...">help_node_t</a></li>
+       <li><a href="#help_word_t" title="Help word structure...">help_word_t</a></li>
+</ul></li>
+<li><a href="#STRUCTURES">Structures</a><ul class="code">
+       <li><a href="#cgi_file_s" title="Uploaded file data">cgi_file_s</a></li>
+       <li><a href="#help_index_s" title="Help index structure">help_index_s</a></li>
+       <li><a href="#help_node_s" title="Help node structure...">help_node_s</a></li>
+       <li><a href="#help_word_s" title="Help word structure...">help_word_s</a></li>
+</ul></li>
+<h2 class="title"><a name="FUNCTIONS">Functions</a></h2>
+<h3 class="function"><a name="cgiCheckVariables">cgiCheckVariables</a></h3>
+<p class="description">Check for the presence of &quot;required&quot; variables.</p>
+<p class="code">
+int cgiCheckVariables (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *names<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>names</dt>
+<dd class="description">Variables to look for</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 if all variables present, 0 otherwise</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">Names may be separated by spaces and/or commas.</p>
+<h3 class="function"><a name="cgiCompileSearch">cgiCompileSearch</a></h3>
+<p class="description">Compile a search string.</p>
+<p class="code">
+void *cgiCompileSearch (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *query<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>query</dt>
+<dd class="description">Query string</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Search context</p>
+<h3 class="function"><a name="cgiCopyTemplateFile">cgiCopyTemplateFile</a></h3>
+<p class="description">Copy a template file and replace all the
+'{variable}' strings with the variable value.</p>
+<p class="code">
+void cgiCopyTemplateFile (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;FILE *out,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *tmpl<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>out</dt>
+<dd class="description">Output file</dd>
+<dt>tmpl</dt>
+<dd class="description">Template file to read</dd>
+</dl>
+<h3 class="function"><a name="cgiCopyTemplateLang">cgiCopyTemplateLang</a></h3>
+<p class="description">Copy a template file using a language...</p>
+<p class="code">
+void cgiCopyTemplateLang (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *tmpl<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>tmpl</dt>
+<dd class="description">Base filename</dd>
+</dl>
+<h3 class="function"><a name="cgiDoSearch">cgiDoSearch</a></h3>
+<p class="description">Do a search of some text.</p>
+<p class="code">
+int cgiDoSearch (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;void *search,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *text<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>search</dt>
+<dd class="description">Search context</dd>
+<dt>text</dt>
+<dd class="description">Text to search</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Number of matches</p>
+<h3 class="function"><a name="cgiEndHTML">cgiEndHTML</a></h3>
+<p class="description">End a HTML page.</p>
+<p class="code">
+void cgiEndHTML (void);</p>
+<h3 class="function"><a name="cgiEndMultipart">cgiEndMultipart</a></h3>
+<p class="description">End the delivery of a multipart web page.</p>
+<p class="code">
+void cgiEndMultipart (void);</p>
+<h3 class="function"><a name="cgiFormEncode">cgiFormEncode</a></h3>
+<p class="description">Encode a string as a form variable.</p>
+<p class="code">
+char *cgiFormEncode (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *dst,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *src,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;size_t dstsize<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>dst</dt>
+<dd class="description">Destination string</dd>
+<dt>src</dt>
+<dd class="description">Source string</dd>
+<dt>dstsize</dt>
+<dd class="description">Size of destination string</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Destination string</p>
+<h3 class="function"><a name="cgiFreeSearch">cgiFreeSearch</a></h3>
+<p class="description">Free a compiled search context.</p>
+<p class="code">
+void cgiFreeSearch (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;void *search<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>search</dt>
+<dd class="description">Search context</dd>
+</dl>
+<h3 class="function"><a name="cgiGetArray">cgiGetArray</a></h3>
+<p class="description">Get an element from a form array...</p>
+<p class="code">
+const char *cgiGetArray (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int element<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>name</dt>
+<dd class="description">Name of array variable</dd>
+<dt>element</dt>
+<dd class="description">Element number (0 to N)</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Element value or NULL</p>
+<h3 class="function"><a name="cgiGetAttributes">cgiGetAttributes</a></h3>
+<p class="description">Get the list of attributes that are needed
+by the template file.</p>
+<p class="code">
+void cgiGetAttributes (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_t *request,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *tmpl<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>request</dt>
+<dd class="description">IPP request</dd>
+<dt>tmpl</dt>
+<dd class="description">Base filename</dd>
+</dl>
+<h3 class="function"><a name="cgiGetFile">cgiGetFile</a></h3>
+<p class="description">Get the file (if any) that was submitted in the form.</p>
+<p class="code">
+const <a href="#cgi_file_t">cgi_file_t</a> *cgiGetFile (void);</p>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Attached file or NULL</p>
+<h3 class="function"><a name="cgiGetIPPObjects">cgiGetIPPObjects</a></h3>
+<p class="description">Get the objects in an IPP response.</p>
+<p class="code">
+cups_array_t *cgiGetIPPObjects (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_t *response,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;void *search<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>response</dt>
+<dd class="description">IPP response</dd>
+<dt>search</dt>
+<dd class="description">Search filter</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Array of objects</p>
+<h3 class="function"><a name="cgiGetSize">cgiGetSize</a></h3>
+<p class="description">Get the size of a form array value.</p>
+<p class="code">
+int cgiGetSize (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>name</dt>
+<dd class="description">Name of variable</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Number of elements</p>
+<h3 class="function"><a name="cgiGetTemplateDir">cgiGetTemplateDir</a></h3>
+<p class="description">Get the templates directory...</p>
+<p class="code">
+char *cgiGetTemplateDir (void);</p>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Template directory</p>
+<h3 class="function"><a name="cgiGetVariable">cgiGetVariable</a></h3>
+<p class="description">Get a CGI variable from the database...</p>
+<p class="code">
+const char *cgiGetVariable (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>name</dt>
+<dd class="description">Name of variable</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Value of variable</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">Returns NULL if the variable doesn't exist.  If the variable is an
+array of values, returns the last element...</p>
+<h3 class="function"><a name="cgiInitialize">cgiInitialize</a></h3>
+<p class="description">Initialize the CGI variable &quot;database&quot;...</p>
+<p class="code">
+int cgiInitialize (void);</p>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Non-zero if there was form data</p>
+<h3 class="function"><a name="cgiIsPOST">cgiIsPOST</a></h3>
+<p class="description">Determine whether this page was POSTed.</p>
+<p class="code">
+int cgiIsPOST (void);</p>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 if POST, 0 if GET</p>
+<h3 class="function"><a name="cgiMoveJobs">cgiMoveJobs</a></h3>
+<p class="description">Move one or more jobs.</p>
+<p class="code">
+void cgiMoveJobs (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *dest,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int job_id<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>dest</dt>
+<dd class="description">Destination or NULL</dd>
+<dt>job_id</dt>
+<dd class="description">Job ID or 0 for all</dd>
+</dl>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">At least one of dest or job_id must be non-zero/NULL.</p>
+<h3 class="function"><a name="cgiPrintCommand">cgiPrintCommand</a></h3>
+<p class="description">Print a CUPS command job.</p>
+<p class="code">
+void cgiPrintCommand (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *dest,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *command,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *title<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>dest</dt>
+<dd class="description">Destination printer</dd>
+<dt>command</dt>
+<dd class="description">Command to send</dd>
+<dt>title</dt>
+<dd class="description">Page/job title</dd>
+</dl>
+<h3 class="function"><a name="cgiPrintTestPage">cgiPrintTestPage</a></h3>
+<p class="description">Print a test page.</p>
+<p class="code">
+void cgiPrintTestPage (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *dest<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>dest</dt>
+<dd class="description">Destination printer/class</dd>
+</dl>
+<h3 class="function"><a name="cgiRewriteURL">cgiRewriteURL</a></h3>
+<p class="description">Rewrite a printer URI into a web browser URL...</p>
+<p class="code">
+char *cgiRewriteURL (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *uri,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *url,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int urlsize,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *newresource<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>uri</dt>
+<dd class="description">Current URI</dd>
+<dt>url</dt>
+<dd class="description">New URL</dd>
+<dt>urlsize</dt>
+<dd class="description">Size of URL buffer</dd>
+<dt>newresource</dt>
+<dd class="description">Replacement resource</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New URL</p>
+<h3 class="function"><a name="cgiSetArray">cgiSetArray</a></h3>
+<p class="description">Set array element N to the specified string.</p>
+<p class="code">
+void cgiSetArray (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int element,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *value<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>name</dt>
+<dd class="description">Name of variable</dd>
+<dt>element</dt>
+<dd class="description">Element number (0 to N)</dd>
+<dt>value</dt>
+<dd class="description">Value of variable</dd>
+</dl>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">If the variable array is smaller than (element + 1), the intervening
+elements are set to NULL.</p>
+<h3 class="function"><a name="cgiSetIPPObjectVars">cgiSetIPPObjectVars</a></h3>
+<p class="description">Set CGI variables from an IPP object.</p>
+<p class="code">
+ipp_attribute_t *cgiSetIPPObjectVars (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_attribute_t *obj,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *prefix,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int element<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>obj</dt>
+<dd class="description">Response data to be copied...</dd>
+<dt>prefix</dt>
+<dd class="description">Prefix for name or NULL</dd>
+<dt>element</dt>
+<dd class="description">Parent element number</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Next object</p>
+<h3 class="function"><a name="cgiSetIPPVars">cgiSetIPPVars</a></h3>
+<p class="description">Set CGI variables from an IPP response.</p>
+<p class="code">
+int cgiSetIPPVars (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ipp_t *response,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *filter_name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *filter_value,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *prefix,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int parent_el<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>response</dt>
+<dd class="description">Response data to be copied...</dd>
+<dt>filter_name</dt>
+<dd class="description">Filter name</dd>
+<dt>filter_value</dt>
+<dd class="description">Filter value</dd>
+<dt>prefix</dt>
+<dd class="description">Prefix for name or NULL</dd>
+<dt>parent_el</dt>
+<dd class="description">Parent element number</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Maximum number of elements</p>
+<h3 class="function"><a name="cgiSetServerVersion">cgiSetServerVersion</a></h3>
+<p class="description">Set the server name and CUPS version...</p>
+<p class="code">
+void cgiSetServerVersion (void);</p>
+<h3 class="function"><a name="cgiSetSize">cgiSetSize</a></h3>
+<p class="description">Set the array size.</p>
+<p class="code">
+void cgiSetSize (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int size<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>name</dt>
+<dd class="description">Name of variable</dd>
+<dt>size</dt>
+<dd class="description">Number of elements (0 to N)</dd>
+</dl>
+<h3 class="function"><a name="cgiSetVariable">cgiSetVariable</a></h3>
+<p class="description">Set a CGI variable in the database...</p>
+<p class="code">
+void cgiSetVariable (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *value<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>name</dt>
+<dd class="description">Name of variable</dd>
+<dt>value</dt>
+<dd class="description">Value of variable</dd>
+</dl>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">If the variable is an array, this truncates the array to a single element.</p>
+<h3 class="function"><a name="cgiShowIPPError">cgiShowIPPError</a></h3>
+<p class="description">Show the last IPP error message.</p>
+<p class="code">
+void cgiShowIPPError (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *message<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>message</dt>
+<dd class="description">Contextual message</dd>
+</dl>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">The caller must still call cgiStartHTML() and cgiEndHTML().</p>
+<h3 class="function"><a name="cgiShowJobs">cgiShowJobs</a></h3>
+<p class="description">Show print jobs.</p>
+<p class="code">
+void cgiShowJobs (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *dest<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>http</dt>
+<dd class="description">Connection to server</dd>
+<dt>dest</dt>
+<dd class="description">Destination name or NULL</dd>
+</dl>
+<h3 class="function"><a name="cgiStartHTML">cgiStartHTML</a></h3>
+<p class="description">Start a HTML page.</p>
+<p class="code">
+void cgiStartHTML (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *title<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>title</dt>
+<dd class="description">Title of page</dd>
+</dl>
+<h3 class="function"><a name="cgiStartMultipart">cgiStartMultipart</a></h3>
+<p class="description">Start a multipart delivery of a web page.</p>
+<p class="code">
+void cgiStartMultipart (void);</p>
+<h3 class="function"><a name="cgiSupportsMultipart">cgiSupportsMultipart</a></h3>
+<p class="description">Does the browser support multi-part documents?</p>
+<p class="code">
+int cgiSupportsMultipart (void);</p>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 if multi-part supported, 0 otherwise</p>
+<h3 class="function"><a name="cgiText">cgiText</a></h3>
+<p class="description">Return localized text.</p>
+<p class="code">
+const char *cgiText (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *message<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>message</dt>
+<dd class="description">Message</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Localized message</p>
+<h3 class="function"><a name="helpDeleteIndex">helpDeleteIndex</a></h3>
+<p class="description">Delete an index, freeing all memory used.</p>
+<p class="code">
+void helpDeleteIndex (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#help_index_t">help_index_t</a> *hi<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>hi</dt>
+<dd class="description">Help index</dd>
+</dl>
+<h3 class="function"><a name="helpFindNode">helpFindNode</a></h3>
+<p class="description">Find a node in an index.</p>
+<p class="code">
+<a href="#help_node_t">help_node_t</a> *helpFindNode (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#help_index_t">help_index_t</a> *hi,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *filename,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *anchor<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>hi</dt>
+<dd class="description">Index</dd>
+<dt>filename</dt>
+<dd class="description">Filename</dd>
+<dt>anchor</dt>
+<dd class="description">Anchor</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Node pointer or NULL</p>
+<h3 class="function"><a name="helpLoadIndex">helpLoadIndex</a></h3>
+<p class="description">Load a help index from disk.</p>
+<p class="code">
+<a href="#help_index_t">help_index_t</a> *helpLoadIndex (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *hifile,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *directory<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>hifile</dt>
+<dd class="description">Index filename</dd>
+<dt>directory</dt>
+<dd class="description">Directory that is indexed</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Index pointer or NULL</p>
+<h3 class="function"><a name="helpSaveIndex">helpSaveIndex</a></h3>
+<p class="description">Save a help index to disk.</p>
+<p class="code">
+int helpSaveIndex (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#help_index_t">help_index_t</a> *hi,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *hifile<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>hi</dt>
+<dd class="description">Index</dd>
+<dt>hifile</dt>
+<dd class="description">Index filename</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">0 on success, -1 on error</p>
+<h3 class="function"><a name="helpSearchIndex">helpSearchIndex</a></h3>
+<p class="description">Search an index.</p>
+<p class="code">
+<a href="#help_index_t">help_index_t</a> *helpSearchIndex (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#help_index_t">help_index_t</a> *hi,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *query,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *section,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *filename<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>hi</dt>
+<dd class="description">Index</dd>
+<dt>query</dt>
+<dd class="description">Query string</dd>
+<dt>section</dt>
+<dd class="description">Limit search to this section</dd>
+<dt>filename</dt>
+<dd class="description">Limit search to this file</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Search index</p>
+<h2 class="title"><a name="TYPES">Data Types</a></h2>
+<h3 class="typedef"><a name="cgi_file_t">cgi_file_t</a></h3>
+<p class="description">Uploaded file data</p>
+<p class="code">
+typedef struct <a href="#cgi_file_s">cgi_file_s</a> cgi_file_t;
+</p>
+<h3 class="typedef"><a name="help_index_t">help_index_t</a></h3>
+<p class="description">Help index structure</p>
+<p class="code">
+typedef struct <a href="#help_index_s">help_index_s</a> help_index_t;
+</p>
+<h3 class="typedef"><a name="help_node_t">help_node_t</a></h3>
+<p class="description">Help node structure...</p>
+<p class="code">
+typedef struct <a href="#help_node_s">help_node_s</a> help_node_t;
+</p>
+<h3 class="typedef"><a name="help_word_t">help_word_t</a></h3>
+<p class="description">Help word structure...</p>
+<p class="code">
+typedef struct <a href="#help_word_s">help_word_s</a> help_word_t;
+</p>
+<h2 class="title"><a name="STRUCTURES">Structures</a></h2>
+<h3 class="struct"><a name="cgi_file_s">cgi_file_s</a></h3>
+<p class="description">Uploaded file data</p>
+<p class="code">struct cgi_file_s {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;size_t filesize;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char tempfile[1024], *name, *filename, *mimetype;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>filesize </dt>
+<dd class="description">Size of uploaded file</dd>
+<dt>mimetype </dt>
+<dd class="description">MIME media type</dd>
+</dl>
+<h3 class="struct"><a name="help_index_s">help_index_s</a></h3>
+<p class="description">Help index structure</p>
+<p class="code">struct help_index_s {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;cups_array_t *nodes;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int search;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;cups_array_t *sorted;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>nodes </dt>
+<dd class="description">Nodes sorted by filename</dd>
+<dt>search </dt>
+<dd class="description">1 = search index, 0 = normal</dd>
+<dt>sorted </dt>
+<dd class="description">Nodes sorted by score + text</dd>
+</dl>
+<h3 class="struct"><a name="help_node_s">help_node_s</a></h3>
+<p class="description">Help node structure...</p>
+<p class="code">struct help_node_s {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *anchor;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *filename;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;size_t length;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;time_t mtime;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;off_t offset;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int score;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *section;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *text;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;cups_array_t *words;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>anchor </dt>
+<dd class="description">Anchor name (NULL if none)</dd>
+<dt>filename </dt>
+<dd class="description">Filename, relative to help dir</dd>
+<dt>length </dt>
+<dd class="description">Length in bytes</dd>
+<dt>mtime </dt>
+<dd class="description">Last modification time</dd>
+<dt>offset </dt>
+<dd class="description">Offset in file</dd>
+<dt>score </dt>
+<dd class="description">Search score</dd>
+<dt>section </dt>
+<dd class="description">Section name (NULL if none)</dd>
+<dt>text </dt>
+<dd class="description">Text in anchor</dd>
+<dt>words </dt>
+<dd class="description">Words after this node</dd>
+</dl>
+<h3 class="struct"><a name="help_word_s">help_word_s</a></h3>
+<p class="description">Help word structure...</p>
+<p class="code">struct help_word_s {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int count;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *text;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>count </dt>
+<dd class="description">Number of occurrences</dd>
+<dt>text </dt>
+<dd class="description">Word text</dd>
+</dl>
+</div>
+</body>
+</html>
index 3d4bfb10c835583c4693235d61e4f797e69cf607..dcfa36fa1709b41ebfd4e59b6e989882c50da77f 100644 (file)
@@ -27,6 +27,10 @@ PRE.command {
   margin-left: 36pt;
 }
 
+P.compact {
+  margin: 0;
+}
+
 P.example {
   font-style: italic;
   margin-left: 36pt;
@@ -409,6 +413,8 @@ div.contents ul.subcontents li {
 <li><a href="#cupsGetPPD3" title="Get the PPD file for a printer on the specified
 server if it has changed.">cupsGetPPD3</a></li>
 <li><a href="#cupsGetPassword" title="Get a password from the user.">cupsGetPassword</a></li>
+<li><a href="#cupsGetPassword2" title="Get a password from the user using the advanced
+callback.">cupsGetPassword2</a></li>
 <li><a href="#cupsGetPrinters" title="Get a list of printers from the default server.">cupsGetPrinters</a></li>
 <li><a href="#cupsGetServerPPD" title="Get an available PPD file from the server.">cupsGetServerPPD</a></li>
 <li><a href="#cupsLangDefault" title="Return the default language.">cupsLangDefault</a></li>
@@ -437,6 +443,7 @@ specified server.">cupsPrintFiles2</a></li>
 <li><a href="#cupsSetDests2" title="Save the list of destinations for the specified server.">cupsSetDests2</a></li>
 <li><a href="#cupsSetEncryption" title="Set the encryption preference.">cupsSetEncryption</a></li>
 <li><a href="#cupsSetPasswordCB" title="Set the password callback for CUPS.">cupsSetPasswordCB</a></li>
+<li><a href="#cupsSetPasswordCB2" title="Set the advanced password callback for CUPS.">cupsSetPasswordCB2</a></li>
 <li><a href="#cupsSetServer" title="Set the default server name.">cupsSetServer</a></li>
 <li><a href="#cupsSetUser" title="Set the default user name.">cupsSetUser</a></li>
 <li><a href="#cupsStartDocument" title="Add a document to a job created with cupsCreateJob().">cupsStartDocument</a></li>
@@ -450,6 +457,7 @@ specified server.">cupsPrintFiles2</a></li>
        <li><a href="#cups_device_cb_t" title="Device callback ">cups_device_cb_t</a></li>
        <li><a href="#cups_job_t" title="Job">cups_job_t</a></li>
        <li><a href="#cups_option_t" title="Printer Options">cups_option_t</a></li>
+       <li><a href="#cups_password_cb2_t" title="New password callback ">cups_password_cb2_t</a></li>
        <li><a href="#cups_password_cb_t" title="Password callback">cups_password_cb_t</a></li>
        <li><a href="#cups_ptype_t" title="Printer type/capability bits">cups_ptype_t</a></li>
 </ul></li>
@@ -1562,6 +1570,34 @@ const char *cupsGetPassword (<br>
 <h4 class="discussion">Discussion</h4>
 <p class="discussion">Uses the current password callback function. Returns <code>NULL</code> if the
 user does not provide a password.</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.4&nbsp;</span><a name="cupsGetPassword2">cupsGetPassword2</a></h3>
+<p class="description">Get a password from the user using the advanced
+callback.</p>
+<p class="code">
+const char *cupsGetPassword2 (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *prompt,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;http_t *http,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *method,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *resource<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>prompt</dt>
+<dd class="description">Prompt string</dd>
+<dt>http</dt>
+<dd class="description">Connection to server or <code>CUPS_HTTP_DEFAULT</code></dd>
+<dt>method</dt>
+<dd class="description">Request method (&quot;GET&quot;, &quot;POST&quot;, &quot;PUT&quot;)</dd>
+<dt>resource</dt>
+<dd class="description">Resource path</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Password</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">Uses the current password callback function. Returns <code>NULL</code> if the
+user does not provide a password.
+
+</p>
 <h3 class="function"><span class="info">&nbsp;DEPRECATED&nbsp;</span><a name="cupsGetPrinters">cupsGetPrinters</a></h3>
 <p class="description">Get a list of printers from the default server.</p>
 <p class="code">
@@ -1990,6 +2026,24 @@ void cupsSetPasswordCB (<br>
 </dl>
 <h4 class="discussion">Discussion</h4>
 <p class="discussion">Pass <code>NULL</code> to restore the default (console) password callback.</p>
+<h3 class="function"><span class="info">&nbsp;CUPS 1.4&nbsp;</span><a name="cupsSetPasswordCB2">cupsSetPasswordCB2</a></h3>
+<p class="description">Set the advanced password callback for CUPS.</p>
+<p class="code">
+void cupsSetPasswordCB2 (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_password_cb2_t">cups_password_cb2_t</a> cb,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;void *user_data<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>cb</dt>
+<dd class="description">Callback function</dd>
+<dt>user_data</dt>
+<dd class="description">User data pointer</dd>
+</dl>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">Pass <code>NULL</code> to restore the default (console) password callback.
+
+</p>
 <h3 class="function"><a name="cupsSetServer">cupsSetServer</a></h3>
 <p class="description">Set the default server name.</p>
 <p class="code">
@@ -2145,6 +2199,11 @@ typedef struct <a href="#cups_job_s">cups_job_s</a> cups_job_t;
 <p class="code">
 typedef struct <a href="#cups_option_s">cups_option_s</a> cups_option_t;
 </p>
+<h3 class="typedef"><span class="info">&nbsp;CUPS 1.4&nbsp;</span><a name="cups_password_cb2_t">cups_password_cb2_t</a></h3>
+<p class="description">New password callback </p>
+<p class="code">
+typedef const char *(*cups_password_cb2_t)(const char *prompt, http_t *http, const char *method, const char *resource, void *user_data);
+</p>
 <h3 class="typedef"><a name="cups_password_cb_t">cups_password_cb_t</a></h3>
 <p class="description">Password callback</p>
 <p class="code">
@@ -2269,6 +2328,8 @@ typedef unsigned cups_ptype_t;
 <dd class="description">Local printer or class</dd>
 <dt>CUPS_PRINTER_MEDIUM </dt>
 <dd class="description">Can do Tabloid/B/C/A3/A2</dd>
+<dt>CUPS_PRINTER_MFP <span class="info">&nbsp;CUPS 1.4&nbsp;</span></dt>
+<dd class="description">Printer with scanning capabilities </dd>
 <dt>CUPS_PRINTER_NOT_SHARED <span class="info">&nbsp;CUPS 1.2/Mac OS X 10.5&nbsp;</span></dt>
 <dd class="description">Printer is not shared </dd>
 <dt>CUPS_PRINTER_PUNCH </dt>
@@ -2277,6 +2338,8 @@ typedef unsigned cups_ptype_t;
 <dd class="description">Printer is rejecting jobs</dd>
 <dt>CUPS_PRINTER_REMOTE </dt>
 <dd class="description">Remote printer or class</dd>
+<dt>CUPS_PRINTER_SCANNER <span class="info">&nbsp;CUPS 1.4&nbsp;</span></dt>
+<dd class="description">Scanner-only device </dd>
 <dt>CUPS_PRINTER_SMALL </dt>
 <dd class="description">Can do Letter/Legal/A4</dd>
 <dt>CUPS_PRINTER_SORT </dt>
diff --git a/doc/help/api-driver.html b/doc/help/api-driver.html
new file mode 100644 (file)
index 0000000..7278a80
--- /dev/null
@@ -0,0 +1,1096 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- SECTION: Programming -->
+<head>
+<title>Printer Driver API</title>
+<meta name="keywords" content="Programming">
+<meta name="creator" content="Mini-XML v2.6">
+<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 {
+  margin-left: 36pt;
+}
+
+P.compact {
+  margin: 0;
+}
+
+P.example {
+  font-style: italic;
+  margin-left: 36pt;
+}
+  
+PRE.example {
+  background: #eeeeee;
+  border: dotted thin #999999;
+  margin-left: 36pt;
+  padding: 10px;
+}
+
+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: #cccccc;
+  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%;
+}
+
+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'>
+<h2 class="title">Contents</h2>
+<ul class="contents">
+<li><a href="#FUNCTIONS">Functions</a><ul class="code">
+<li><a href="#cupsCMYKDelete" title="Delete a color separation.">cupsCMYKDelete</a></li>
+<li><a href="#cupsCMYKDoBlack" title="Do a black separation...">cupsCMYKDoBlack</a></li>
+<li><a href="#cupsCMYKDoCMYK" title="Do a CMYK separation...">cupsCMYKDoCMYK</a></li>
+<li><a href="#cupsCMYKDoGray" title="Do a grayscale separation...">cupsCMYKDoGray</a></li>
+<li><a href="#cupsCMYKDoRGB" title="Do an sRGB separation...">cupsCMYKDoRGB</a></li>
+<li><a href="#cupsCMYKLoad" title="Load a CMYK color profile from PPD attributes.">cupsCMYKLoad</a></li>
+<li><a href="#cupsCMYKNew" title="Create a new CMYK color separation.">cupsCMYKNew</a></li>
+<li><a href="#cupsCMYKSetBlack" title="Set the transition range for CMY to black.">cupsCMYKSetBlack</a></li>
+<li><a href="#cupsCMYKSetCurve" title="Set a color transform curve using points.">cupsCMYKSetCurve</a></li>
+<li><a href="#cupsCMYKSetGamma" title="Set a color transform curve using gamma and density.">cupsCMYKSetGamma</a></li>
+<li><a href="#cupsCMYKSetInkLimit" title="Set the limit on the amount of ink.">cupsCMYKSetInkLimit</a></li>
+<li><a href="#cupsCMYKSetLtDk" title="Set light/dark ink transforms.">cupsCMYKSetLtDk</a></li>
+<li><a href="#cupsCheckBytes" title="Check to see if all bytes are zero.">cupsCheckBytes</a></li>
+<li><a href="#cupsCheckValue" title="Check to see if all bytes match the given value.">cupsCheckValue</a></li>
+<li><a href="#cupsDitherDelete" title="Free a dithering buffer.">cupsDitherDelete</a></li>
+<li><a href="#cupsDitherLine" title="Dither a line of pixels...">cupsDitherLine</a></li>
+<li><a href="#cupsDitherNew" title="Create an error-diffusion dithering buffer.">cupsDitherNew</a></li>
+<li><a href="#cupsFindAttr" title="Find a PPD attribute based on the colormodel,
+media, and resolution.">cupsFindAttr</a></li>
+<li><a href="#cupsLutDelete" title="Free the memory used by a lookup table.">cupsLutDelete</a></li>
+<li><a href="#cupsLutLoad" title="Load a LUT from a PPD file.">cupsLutLoad</a></li>
+<li><a href="#cupsLutNew" title="Make a lookup table from a list of pixel values.">cupsLutNew</a></li>
+<li><a href="#cupsPackHorizontal" title="Pack pixels horizontally...">cupsPackHorizontal</a></li>
+<li><a href="#cupsPackHorizontal2" title="Pack 2-bit pixels horizontally...">cupsPackHorizontal2</a></li>
+<li><a href="#cupsPackHorizontalBit" title="Pack pixels horizontally by bit...">cupsPackHorizontalBit</a></li>
+<li><a href="#cupsPackVertical" title="Pack pixels vertically...">cupsPackVertical</a></li>
+<li><a href="#cupsRGBDelete" title="Delete a color separation.">cupsRGBDelete</a></li>
+<li><a href="#cupsRGBDoGray" title="Do a grayscale separation...">cupsRGBDoGray</a></li>
+<li><a href="#cupsRGBDoRGB" title="Do a RGB separation...">cupsRGBDoRGB</a></li>
+<li><a href="#cupsRGBLoad" title="Load a RGB color profile from a PPD file.">cupsRGBLoad</a></li>
+<li><a href="#cupsRGBNew" title="Create a new RGB color separation.">cupsRGBNew</a></li>
+</ul></li>
+<li><a href="#TYPES">Data Types</a><ul class="code">
+       <li><a href="#cups_cmyk_t" title="Simple CMYK lookup table">cups_cmyk_t</a></li>
+       <li><a href="#cups_dither_t" title="Dithering State">cups_dither_t</a></li>
+       <li><a href="#cups_lut_t" title="Lookup Table for Dithering">cups_lut_t</a></li>
+       <li><a href="#cups_rgb_t" title="Color separation lookup table">cups_rgb_t</a></li>
+       <li><a href="#cups_sample_t" title="Color sample point">cups_sample_t</a></li>
+</ul></li>
+<li><a href="#STRUCTURES">Structures</a><ul class="code">
+       <li><a href="#cups_cmyk_s" title="Simple CMYK lookup table">cups_cmyk_s</a></li>
+       <li><a href="#cups_dither_s" title="Dithering State">cups_dither_s</a></li>
+       <li><a href="#cups_lut_s" title="Lookup Table for Dithering">cups_lut_s</a></li>
+       <li><a href="#cups_rgb_s" title="Color separation lookup table">cups_rgb_s</a></li>
+       <li><a href="#cups_sample_s" title="Color sample point">cups_sample_s</a></li>
+</ul></li>
+<li><a href="#VARIABLES">Variables</a><ul class="code">
+       <li><a href="#cups_scmy_lut[256]" title="sRGB gamma lookup table (inverted)">cups_scmy_lut[256]</a></li>
+       <li><a href="#cups_srgb_lut[256]" title="sRGB gamma lookup table">cups_srgb_lut[256]</a></li>
+</ul></li>
+<h2 class="title"><a name="FUNCTIONS">Functions</a></h2>
+<h3 class="function"><a name="cupsCMYKDelete">cupsCMYKDelete</a></h3>
+<p class="description">Delete a color separation.</p>
+<p class="code">
+void cupsCMYKDelete (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_cmyk_t">cups_cmyk_t</a> *cmyk<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>cmyk</dt>
+<dd class="description">Color separation</dd>
+</dl>
+<h3 class="function"><a name="cupsCMYKDoBlack">cupsCMYKDoBlack</a></h3>
+<p class="description">Do a black separation...</p>
+<p class="code">
+void cupsCMYKDoBlack (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#cups_cmyk_t">cups_cmyk_t</a> *cmyk,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *input,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;short *output,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_pixels<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>cmyk</dt>
+<dd class="description">Color separation</dd>
+<dt>input</dt>
+<dd class="description">Input grayscale pixels</dd>
+<dt>output</dt>
+<dd class="description">Output Device-N pixels</dd>
+<dt>num_pixels</dt>
+<dd class="description">Number of pixels</dd>
+</dl>
+<h3 class="function"><a name="cupsCMYKDoCMYK">cupsCMYKDoCMYK</a></h3>
+<p class="description">Do a CMYK separation...</p>
+<p class="code">
+void cupsCMYKDoCMYK (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#cups_cmyk_t">cups_cmyk_t</a> *cmyk,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *input,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;short *output,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_pixels<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>cmyk</dt>
+<dd class="description">Color separation</dd>
+<dt>input</dt>
+<dd class="description">Input grayscale pixels</dd>
+<dt>output</dt>
+<dd class="description">Output Device-N pixels</dd>
+<dt>num_pixels</dt>
+<dd class="description">Number of pixels</dd>
+</dl>
+<h3 class="function"><a name="cupsCMYKDoGray">cupsCMYKDoGray</a></h3>
+<p class="description">Do a grayscale separation...</p>
+<p class="code">
+void cupsCMYKDoGray (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#cups_cmyk_t">cups_cmyk_t</a> *cmyk,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *input,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;short *output,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_pixels<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>cmyk</dt>
+<dd class="description">Color separation</dd>
+<dt>input</dt>
+<dd class="description">Input grayscale pixels</dd>
+<dt>output</dt>
+<dd class="description">Output Device-N pixels</dd>
+<dt>num_pixels</dt>
+<dd class="description">Number of pixels</dd>
+</dl>
+<h3 class="function"><a name="cupsCMYKDoRGB">cupsCMYKDoRGB</a></h3>
+<p class="description">Do an sRGB separation...</p>
+<p class="code">
+void cupsCMYKDoRGB (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#cups_cmyk_t">cups_cmyk_t</a> *cmyk,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *input,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;short *output,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_pixels<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>cmyk</dt>
+<dd class="description">Color separation</dd>
+<dt>input</dt>
+<dd class="description">Input grayscale pixels</dd>
+<dt>output</dt>
+<dd class="description">Output Device-N pixels</dd>
+<dt>num_pixels</dt>
+<dd class="description">Number of pixels</dd>
+</dl>
+<h3 class="function"><a name="cupsCMYKLoad">cupsCMYKLoad</a></h3>
+<p class="description">Load a CMYK color profile from PPD attributes.</p>
+<p class="code">
+<a href="#cups_cmyk_t">cups_cmyk_t</a> *cupsCMYKLoad (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ppd_file_t *ppd,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *colormodel,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *media,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *resolution<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ppd</dt>
+<dd class="description">PPD file</dd>
+<dt>colormodel</dt>
+<dd class="description">ColorModel value</dd>
+<dt>media</dt>
+<dd class="description">MediaType value</dd>
+<dt>resolution</dt>
+<dd class="description">Resolution value</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">CMYK color separation</p>
+<h3 class="function"><a name="cupsCMYKNew">cupsCMYKNew</a></h3>
+<p class="description">Create a new CMYK color separation.</p>
+<p class="code">
+<a href="#cups_cmyk_t">cups_cmyk_t</a> *cupsCMYKNew (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_channels<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>num_channels</dt>
+<dd class="description">Number of color components</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New CMYK separation or NULL</p>
+<h3 class="function"><a name="cupsCMYKSetBlack">cupsCMYKSetBlack</a></h3>
+<p class="description">Set the transition range for CMY to black.</p>
+<p class="code">
+void cupsCMYKSetBlack (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_cmyk_t">cups_cmyk_t</a> *cmyk,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float lower,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float upper<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>cmyk</dt>
+<dd class="description">CMYK color separation</dd>
+<dt>lower</dt>
+<dd class="description">No black ink</dd>
+<dt>upper</dt>
+<dd class="description">Only black ink</dd>
+</dl>
+<h3 class="function"><a name="cupsCMYKSetCurve">cupsCMYKSetCurve</a></h3>
+<p class="description">Set a color transform curve using points.</p>
+<p class="code">
+void cupsCMYKSetCurve (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_cmyk_t">cups_cmyk_t</a> *cmyk,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int channel,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_xypoints,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const float *xypoints<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>cmyk</dt>
+<dd class="description">CMYK color separation</dd>
+<dt>channel</dt>
+<dd class="description">Color channel</dd>
+<dt>num_xypoints</dt>
+<dd class="description">Number of X,Y points</dd>
+<dt>xypoints</dt>
+<dd class="description">X,Y points</dd>
+</dl>
+<h3 class="function"><a name="cupsCMYKSetGamma">cupsCMYKSetGamma</a></h3>
+<p class="description">Set a color transform curve using gamma and density.</p>
+<p class="code">
+void cupsCMYKSetGamma (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_cmyk_t">cups_cmyk_t</a> *cmyk,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int channel,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float gamval,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float density<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>cmyk</dt>
+<dd class="description">CMYK color separation</dd>
+<dt>channel</dt>
+<dd class="description">Ink channel</dd>
+<dt>gamval</dt>
+<dd class="description">Gamma correction</dd>
+<dt>density</dt>
+<dd class="description">Maximum density</dd>
+</dl>
+<h3 class="function"><a name="cupsCMYKSetInkLimit">cupsCMYKSetInkLimit</a></h3>
+<p class="description">Set the limit on the amount of ink.</p>
+<p class="code">
+void cupsCMYKSetInkLimit (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_cmyk_t">cups_cmyk_t</a> *cmyk,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float limit<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>cmyk</dt>
+<dd class="description">CMYK color separation</dd>
+<dt>limit</dt>
+<dd class="description">Limit of ink</dd>
+</dl>
+<h3 class="function"><a name="cupsCMYKSetLtDk">cupsCMYKSetLtDk</a></h3>
+<p class="description">Set light/dark ink transforms.</p>
+<p class="code">
+void cupsCMYKSetLtDk (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_cmyk_t">cups_cmyk_t</a> *cmyk,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int channel,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float light,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float dark<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>cmyk</dt>
+<dd class="description">CMYK color separation</dd>
+<dt>channel</dt>
+<dd class="description">Dark ink channel (+1 for light)</dd>
+<dt>light</dt>
+<dd class="description">Light ink only level</dd>
+<dt>dark</dt>
+<dd class="description">Dark ink only level</dd>
+</dl>
+<h3 class="function"><a name="cupsCheckBytes">cupsCheckBytes</a></h3>
+<p class="description">Check to see if all bytes are zero.</p>
+<p class="code">
+int cupsCheckBytes (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *bytes,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int length<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>bytes</dt>
+<dd class="description">Bytes to check</dd>
+<dt>length</dt>
+<dd class="description">Number of bytes to check</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 if they match</p>
+<h3 class="function"><a name="cupsCheckValue">cupsCheckValue</a></h3>
+<p class="description">Check to see if all bytes match the given value.</p>
+<p class="code">
+int cupsCheckValue (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *bytes,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int length,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char value<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>bytes</dt>
+<dd class="description">Bytes to check</dd>
+<dt>length</dt>
+<dd class="description">Number of bytes to check</dd>
+<dt>value</dt>
+<dd class="description">Value to check</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">1 if they match</p>
+<h3 class="function"><a name="cupsDitherDelete">cupsDitherDelete</a></h3>
+<p class="description">Free a dithering buffer.</p>
+<p class="code">
+void cupsDitherDelete (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dither_t">cups_dither_t</a> *d<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>d</dt>
+<dd class="description">Dithering buffer</dd>
+</dl>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">Returns 0 on success, -1 on failure.</p>
+<h3 class="function"><a name="cupsDitherLine">cupsDitherLine</a></h3>
+<p class="description">Dither a line of pixels...</p>
+<p class="code">
+void cupsDitherLine (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_dither_t">cups_dither_t</a> *d,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const <a href="#cups_lut_t">cups_lut_t</a> *lut,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const short *data,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_channels,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;unsigned char *p<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>d</dt>
+<dd class="description">Dither data</dd>
+<dt>lut</dt>
+<dd class="description">Lookup table</dd>
+<dt>data</dt>
+<dd class="description">Separation data</dd>
+<dt>num_channels</dt>
+<dd class="description">Number of components</dd>
+<dt>p</dt>
+<dd class="description">Pixels</dd>
+</dl>
+<h3 class="function"><a name="cupsDitherNew">cupsDitherNew</a></h3>
+<p class="description">Create an error-diffusion dithering buffer.</p>
+<p class="code">
+<a href="#cups_dither_t">cups_dither_t</a> *cupsDitherNew (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int width<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>width</dt>
+<dd class="description">Width of output in pixels</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New state array</p>
+<h3 class="function"><a name="cupsFindAttr">cupsFindAttr</a></h3>
+<p class="description">Find a PPD attribute based on the colormodel,
+media, and resolution.</p>
+<p class="code">
+ppd_attr_t *cupsFindAttr (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ppd_file_t *ppd,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *colormodel,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *media,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *resolution,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *spec,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int specsize<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ppd</dt>
+<dd class="description">PPD file</dd>
+<dt>name</dt>
+<dd class="description">Attribute name</dd>
+<dt>colormodel</dt>
+<dd class="description">Color model</dd>
+<dt>media</dt>
+<dd class="description">Media type</dd>
+<dt>resolution</dt>
+<dd class="description">Resolution</dd>
+<dt>spec</dt>
+<dd class="description">Final selection string</dd>
+<dt>specsize</dt>
+<dd class="description">Size of string buffer</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Matching attribute or NULL</p>
+<h3 class="function"><a name="cupsLutDelete">cupsLutDelete</a></h3>
+<p class="description">Free the memory used by a lookup table.</p>
+<p class="code">
+void cupsLutDelete (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_lut_t">cups_lut_t</a> *lut<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>lut</dt>
+<dd class="description">Lookup table to free</dd>
+</dl>
+<h3 class="function"><a name="cupsLutLoad">cupsLutLoad</a></h3>
+<p class="description">Load a LUT from a PPD file.</p>
+<p class="code">
+<a href="#cups_lut_t">cups_lut_t</a> *cupsLutLoad (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ppd_file_t *ppd,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *colormodel,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *media,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *resolution,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *ink<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ppd</dt>
+<dd class="description">PPD file</dd>
+<dt>colormodel</dt>
+<dd class="description">Color model</dd>
+<dt>media</dt>
+<dd class="description">Media type</dd>
+<dt>resolution</dt>
+<dd class="description">Resolution</dd>
+<dt>ink</dt>
+<dd class="description">Ink name</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New lookup table</p>
+<h3 class="function"><a name="cupsLutNew">cupsLutNew</a></h3>
+<p class="description">Make a lookup table from a list of pixel values.</p>
+<p class="code">
+<a href="#cups_lut_t">cups_lut_t</a> *cupsLutNew (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_values,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const float *values<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>num_values</dt>
+<dd class="description">Number of values</dd>
+<dt>values</dt>
+<dd class="description">Lookup table values</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New lookup table</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">Returns a pointer to the lookup table on success, NULL on failure.</p>
+<h3 class="function"><a name="cupsPackHorizontal">cupsPackHorizontal</a></h3>
+<p class="description">Pack pixels horizontally...</p>
+<p class="code">
+void cupsPackHorizontal (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *ipixels,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;unsigned char *obytes,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int width,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char clearto,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const int step<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipixels</dt>
+<dd class="description">Input pixels</dd>
+<dt>obytes</dt>
+<dd class="description">Output bytes</dd>
+<dt>width</dt>
+<dd class="description">Number of pixels</dd>
+<dt>clearto</dt>
+<dd class="description">Initial value of bytes</dd>
+<dt>step</dt>
+<dd class="description">Step value between pixels</dd>
+</dl>
+<h3 class="function"><a name="cupsPackHorizontal2">cupsPackHorizontal2</a></h3>
+<p class="description">Pack 2-bit pixels horizontally...</p>
+<p class="code">
+void cupsPackHorizontal2 (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *ipixels,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;unsigned char *obytes,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int width,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const int step<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipixels</dt>
+<dd class="description">Input pixels</dd>
+<dt>obytes</dt>
+<dd class="description">Output bytes</dd>
+<dt>width</dt>
+<dd class="description">Number of pixels</dd>
+<dt>step</dt>
+<dd class="description">Stepping value</dd>
+</dl>
+<h3 class="function"><a name="cupsPackHorizontalBit">cupsPackHorizontalBit</a></h3>
+<p class="description">Pack pixels horizontally by bit...</p>
+<p class="code">
+void cupsPackHorizontalBit (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *ipixels,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;unsigned char *obytes,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int width,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char clearto,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char bit<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipixels</dt>
+<dd class="description">Input pixels</dd>
+<dt>obytes</dt>
+<dd class="description">Output bytes</dd>
+<dt>width</dt>
+<dd class="description">Number of pixels</dd>
+<dt>clearto</dt>
+<dd class="description">Initial value of bytes</dd>
+<dt>bit</dt>
+<dd class="description">Bit to check</dd>
+</dl>
+<h3 class="function"><a name="cupsPackVertical">cupsPackVertical</a></h3>
+<p class="description">Pack pixels vertically...</p>
+<p class="code">
+void cupsPackVertical (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *ipixels,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;unsigned char *obytes,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int width,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char bit,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const int step<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ipixels</dt>
+<dd class="description">Input pixels</dd>
+<dt>obytes</dt>
+<dd class="description">Output bytes</dd>
+<dt>width</dt>
+<dd class="description">Number of input pixels</dd>
+<dt>bit</dt>
+<dd class="description">Output bit</dd>
+<dt>step</dt>
+<dd class="description">Number of bytes between columns</dd>
+</dl>
+<h3 class="function"><a name="cupsRGBDelete">cupsRGBDelete</a></h3>
+<p class="description">Delete a color separation.</p>
+<p class="code">
+void cupsRGBDelete (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_rgb_t">cups_rgb_t</a> *rgbptr<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>rgbptr</dt>
+<dd class="description">Color separation</dd>
+</dl>
+<h3 class="function"><a name="cupsRGBDoGray">cupsRGBDoGray</a></h3>
+<p class="description">Do a grayscale separation...</p>
+<p class="code">
+void cupsRGBDoGray (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_rgb_t">cups_rgb_t</a> *rgbptr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *input,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;unsigned char *output,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_pixels<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>rgbptr</dt>
+<dd class="description">Color separation</dd>
+<dt>input</dt>
+<dd class="description">Input grayscale pixels</dd>
+<dt>output</dt>
+<dd class="description">Output Device-N pixels</dd>
+<dt>num_pixels</dt>
+<dd class="description">Number of pixels</dd>
+</dl>
+<h3 class="function"><a name="cupsRGBDoRGB">cupsRGBDoRGB</a></h3>
+<p class="description">Do a RGB separation...</p>
+<p class="code">
+void cupsRGBDoRGB (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_rgb_t">cups_rgb_t</a> *rgbptr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *input,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;unsigned char *output,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_pixels<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>rgbptr</dt>
+<dd class="description">Color separation</dd>
+<dt>input</dt>
+<dd class="description">Input RGB pixels</dd>
+<dt>output</dt>
+<dd class="description">Output Device-N pixels</dd>
+<dt>num_pixels</dt>
+<dd class="description">Number of pixels</dd>
+</dl>
+<h3 class="function"><a name="cupsRGBLoad">cupsRGBLoad</a></h3>
+<p class="description">Load a RGB color profile from a PPD file.</p>
+<p class="code">
+<a href="#cups_rgb_t">cups_rgb_t</a> *cupsRGBLoad (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;ppd_file_t *ppd,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *colormodel,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *media,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *resolution<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>ppd</dt>
+<dd class="description">PPD file</dd>
+<dt>colormodel</dt>
+<dd class="description">Color model</dd>
+<dt>media</dt>
+<dd class="description">Media type</dd>
+<dt>resolution</dt>
+<dd class="description">Resolution</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New color profile</p>
+<h3 class="function"><a name="cupsRGBNew">cupsRGBNew</a></h3>
+<p class="description">Create a new RGB color separation.</p>
+<p class="code">
+<a href="#cups_rgb_t">cups_rgb_t</a> *cupsRGBNew (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_samples,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#cups_sample_t">cups_sample_t</a> *samples,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int cube_size,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_channels<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>num_samples</dt>
+<dd class="description">Number of samples</dd>
+<dt>samples</dt>
+<dd class="description">Samples</dd>
+<dt>cube_size</dt>
+<dd class="description">Size of LUT cube</dd>
+<dt>num_channels</dt>
+<dd class="description">Number of color components</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New color separation or NULL</p>
+<h2 class="title"><a name="TYPES">Data Types</a></h2>
+<h3 class="typedef"><a name="cups_cmyk_t">cups_cmyk_t</a></h3>
+<p class="description">Simple CMYK lookup table</p>
+<p class="code">
+typedef struct <a href="#cups_cmyk_s">cups_cmyk_s</a> cups_cmyk_t;
+</p>
+<h3 class="typedef"><a name="cups_dither_t">cups_dither_t</a></h3>
+<p class="description">Dithering State</p>
+<p class="code">
+typedef struct <a href="#cups_dither_s">cups_dither_s</a> cups_dither_t;
+</p>
+<h3 class="typedef"><a name="cups_lut_t">cups_lut_t</a></h3>
+<p class="description">Lookup Table for Dithering</p>
+<p class="code">
+typedef struct <a href="#cups_lut_s">cups_lut_s</a> cups_lut_t;
+</p>
+<h3 class="typedef"><a name="cups_rgb_t">cups_rgb_t</a></h3>
+<p class="description">Color separation lookup table</p>
+<p class="code">
+typedef struct <a href="#cups_rgb_s">cups_rgb_s</a> cups_rgb_t;
+</p>
+<h3 class="typedef"><a name="cups_sample_t">cups_sample_t</a></h3>
+<p class="description">Color sample point</p>
+<p class="code">
+typedef struct <a href="#cups_sample_s">cups_sample_s</a> cups_sample_t;
+</p>
+<h2 class="title"><a name="STRUCTURES">Structures</a></h2>
+<h3 class="struct"><a name="cups_cmyk_s">cups_cmyk_s</a></h3>
+<p class="description">Simple CMYK lookup table</p>
+<p class="code">struct cups_cmyk_s {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;unsigned char black_lut[256];<br>
+&nbsp;&nbsp;&nbsp;&nbsp;short *channels[CUPS_MAX_CHAN];<br>
+&nbsp;&nbsp;&nbsp;&nbsp;unsigned char color_lut[256];<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int ink_limit;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_channels;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>black_lut[256] </dt>
+<dd class="description">Black generation LUT</dd>
+<dt>channels[CUPS_MAX_CHAN] </dt>
+<dd class="description">Lookup tables</dd>
+<dt>color_lut[256] </dt>
+<dd class="description">Color removal LUT</dd>
+<dt>ink_limit </dt>
+<dd class="description">Ink limit</dd>
+<dt>num_channels </dt>
+<dd class="description">Number of components</dd>
+</dl>
+<h3 class="struct"><a name="cups_dither_s">cups_dither_s</a></h3>
+<p class="description">Dithering State</p>
+<p class="code">struct cups_dither_s {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int errors[96];<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int row;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int width;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>errors[96] </dt>
+<dd class="description">Error values</dd>
+<dt>row </dt>
+<dd class="description">Current row</dd>
+<dt>width </dt>
+<dd class="description">Width of buffer</dd>
+</dl>
+<h3 class="struct"><a name="cups_lut_s">cups_lut_s</a></h3>
+<p class="description">Lookup Table for Dithering</p>
+<p class="code">struct cups_lut_s {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int error;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;short intensity;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;short pixel;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>error </dt>
+<dd class="description">Error from desired value</dd>
+<dt>intensity </dt>
+<dd class="description">Adjusted intensity</dd>
+<dt>pixel </dt>
+<dd class="description">Output pixel value</dd>
+</dl>
+<h3 class="struct"><a name="cups_rgb_s">cups_rgb_s</a></h3>
+<p class="description">Color separation lookup table</p>
+<p class="code">struct cups_rgb_s {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;unsigned char black[CUPS_MAX_RGB];<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int cache_init;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;unsigned char ****colors;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int cube_index[256];<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int cube_mult[256];<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int cube_size;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int num_channels;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;unsigned char white[CUPS_MAX_RGB];<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>black[CUPS_MAX_RGB] </dt>
+<dd class="description">Cached black (sRGB = 0,0,0)</dd>
+<dt>cache_init </dt>
+<dd class="description">Are cached values initialized?</dd>
+<dt>colors </dt>
+<dd class="description">4-D array of sample values</dd>
+<dt>cube_index[256] </dt>
+<dd class="description">Index into cube for a given sRGB value</dd>
+<dt>cube_mult[256] </dt>
+<dd class="description">Multiplier value for a given sRGB value</dd>
+<dt>cube_size </dt>
+<dd class="description">Size of color cube (2-N) on a side</dd>
+<dt>num_channels </dt>
+<dd class="description">Number of colors per sample</dd>
+<dt>white[CUPS_MAX_RGB] </dt>
+<dd class="description">Cached white (sRGB = 255,255,255)</dd>
+</dl>
+<h3 class="struct"><a name="cups_sample_s">cups_sample_s</a></h3>
+<p class="description">Color sample point</p>
+<p class="code">struct cups_sample_s {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;unsigned char colors[CUPS_MAX_RGB];<br>
+&nbsp;&nbsp;&nbsp;&nbsp;unsigned char rgb[3];<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>colors[CUPS_MAX_RGB] </dt>
+<dd class="description">Color values</dd>
+<dt>rgb[3] </dt>
+<dd class="description">sRGB values</dd>
+</dl>
+<h2 class="title"><a name="VARIABLES">Variables</a></h2>
+<h3 class="variable"><a name="cups_scmy_lut[256]">cups_scmy_lut[256]</a></h3>
+<p class="description">sRGB gamma lookup table (inverted)</p>
+<p class="code">extern const unsigned char cups_scmy_lut[256];</p>
+<h3 class="variable"><a name="cups_srgb_lut[256]">cups_srgb_lut[256]</a></h3>
+<p class="description">sRGB gamma lookup table</p>
+<p class="code">extern const unsigned char cups_srgb_lut[256];</p>
+</div>
+</body>
+</html>
index 13ab31f75a01e8f925bfd5e5b9e8cce749fc0eb9..a91c7d27370db4a61d012fd97f461b49adbe8a10 100644 (file)
@@ -27,6 +27,10 @@ PRE.command {
   margin-left: 36pt;
 }
 
+P.compact {
+  margin: 0;
+}
+
 P.example {
   font-style: italic;
   margin-left: 36pt;
index 54ae977f53d3f89b865b6c494c8d06523c5c387b..29347b08ac21cc5a374c01d1d95a6be7fe4520d5 100644 (file)
@@ -27,6 +27,10 @@ PRE.command {
   margin-left: 36pt;
 }
 
+P.compact {
+  margin: 0;
+}
+
 P.example {
   font-style: italic;
   margin-left: 36pt;
index 899fe8cde094494f1aac341860c817489477f08b..444fe58702aaacfb60929307427ad10a05974e62 100644 (file)
@@ -27,6 +27,10 @@ PRE.command {
   margin-left: 36pt;
 }
 
+P.compact {
+  margin: 0;
+}
+
 P.example {
   font-style: italic;
   margin-left: 36pt;
@@ -507,6 +511,10 @@ in seconds.">ippDateToTime</a></li>
 <li><a href="#ippWriteIO" title="Write data for an IPP message.">ippWriteIO</a></li>
 </ul></li>
 <li><a href="#TYPES">Data Types</a><ul class="code">
+       <li><a href="#http_addr_t" title="Socket address union, which
+makes using IPv6 and other
+address types easier and
+more portable. ">http_addr_t</a></li>
        <li><a href="#http_addrlist_t" title="Socket address list, which is
 used to enumerate all of the
 addresses that are associated
@@ -515,30 +523,29 @@ with a hostname. ">http_addrlist_t</a></li>
        <li><a href="#http_encoding_t" title="HTTP transfer encoding values">http_encoding_t</a></li>
        <li><a href="#http_encryption_t" title="HTTP encryption values">http_encryption_t</a></li>
        <li><a href="#http_field_t" title="HTTP field names">http_field_t</a></li>
-       <li><a href="#http_keepalive_t" title="Types and structures...">http_keepalive_t</a></li>
+       <li><a href="#http_keepalive_t" title="HTTP keep-alive values">http_keepalive_t</a></li>
+       <li><a href="#http_state_t" title="HTTP state values; states
+are server-oriented...">http_state_t</a></li>
        <li><a href="#http_status_t" title="HTTP status codes">http_status_t</a></li>
        <li><a href="#http_t" title="HTTP connection type">http_t</a></li>
-       <li><a href="#http_uri_coding_t" title="HTTP version numbers">http_uri_coding_t</a></li>
-       <li><a href="#http_uri_status_t" title="URI en/decode flags">http_uri_status_t</a></li>
-       <li><a href="#http_version_t" title="Socket address union, which
-makes using IPv6 and other
-address types easier and
-more portable. ">http_version_t</a></li>
+       <li><a href="#http_uri_coding_t" title="URI en/decode flags">http_uri_coding_t</a></li>
+       <li><a href="#http_uri_status_t" title="URI separation status ">http_uri_status_t</a></li>
+       <li><a href="#http_version_t" title="HTTP version numbers">http_version_t</a></li>
        <li><a href="#ipp_attribute_t" title="Attribute">ipp_attribute_t</a></li>
-       <li><a href="#ipp_finish_t" title="Orientation...">ipp_finish_t</a></li>
+       <li><a href="#ipp_finish_t" title="Finishings...">ipp_finish_t</a></li>
        <li><a href="#ipp_iocb_t" title="IPP IO Callback Function ">ipp_iocb_t</a></li>
-       <li><a href="#ipp_jstate_t" title="Printer States....">ipp_jstate_t</a></li>
-       <li><a href="#ipp_op_t" title="Old names for the operations">ipp_op_t</a></li>
-       <li><a href="#ipp_orient_t" title="Qualities...">ipp_orient_t</a></li>
-       <li><a href="#ipp_pstate_t" title="IPP states...">ipp_pstate_t</a></li>
-       <li><a href="#ipp_quality_t" title="Job States....">ipp_quality_t</a></li>
+       <li><a href="#ipp_jstate_t" title="Job States....">ipp_jstate_t</a></li>
+       <li><a href="#ipp_op_t" title="IPP operations...">ipp_op_t</a></li>
+       <li><a href="#ipp_orient_t" title="Orientation...">ipp_orient_t</a></li>
+       <li><a href="#ipp_pstate_t" title="Printer States....">ipp_pstate_t</a></li>
+       <li><a href="#ipp_quality_t" title="Qualities...">ipp_quality_t</a></li>
        <li><a href="#ipp_request_t" title="Request Header">ipp_request_t</a></li>
-       <li><a href="#ipp_res_t" title="Types and structures...">ipp_res_t</a></li>
-       <li><a href="#ipp_state_t" title="IPP operations...">ipp_state_t</a></li>
+       <li><a href="#ipp_res_t" title="Resolution units...">ipp_res_t</a></li>
+       <li><a href="#ipp_state_t" title="IPP states...">ipp_state_t</a></li>
        <li><a href="#ipp_t" title="Attribute Value">ipp_t</a></li>
        <li><a href="#ipp_uchar_t" title="IPP status codes...">ipp_uchar_t</a></li>
        <li><a href="#ipp_tag_t" title="Format tags for attributes...">ipp_tag_t</a></li>
-       <li><a href="#ipp_value_t" title="New in CUPS 1.1.19">ipp_value_t</a></li>
+       <li><a href="#ipp_value_t" title="Attribute Value">ipp_value_t</a></li>
 </ul></li>
 <li><a href="#STRUCTURES">Structures</a><ul class="code">
        <li><a href="#http_addrlist_s" title="Socket address list, which is
@@ -550,27 +557,28 @@ with a hostname. ">http_addrlist_s</a></li>
 </ul></li>
 <li><a href="#UNIONS">Unions</a><ul class="code">
        <li><a href="#ipp_request_u" title="Request Header">ipp_request_u</a></li>
-       <li><a href="#ipp_value_u" title="New in CUPS 1.1.19">ipp_value_u</a></li>
+       <li><a href="#ipp_value_u" title="Attribute Value">ipp_value_u</a></li>
 </ul></li>
 <li><a href="#ENUMERATIONS">Constants</a><ul class="code">
        <li><a href="#http_auth_e" title="HTTP authentication types">http_auth_e</a></li>
        <li><a href="#http_encoding_e" title="HTTP transfer encoding values">http_encoding_e</a></li>
        <li><a href="#http_encryption_e" title="HTTP encryption values">http_encryption_e</a></li>
        <li><a href="#http_field_e" title="HTTP field names">http_field_e</a></li>
-       <li><a href="#http_keepalive_e" title="Types and structures...">http_keepalive_e</a></li>
-       <li><a href="#http_state_e" title="">http_state_e</a></li>
+       <li><a href="#http_keepalive_e" title="HTTP keep-alive values">http_keepalive_e</a></li>
+       <li><a href="#http_state_e" title="HTTP state values; states
+are server-oriented...">http_state_e</a></li>
        <li><a href="#http_status_e" title="HTTP status codes">http_status_e</a></li>
-       <li><a href="#http_uri_coding_e" title="">http_uri_coding_e</a></li>
-       <li><a href="#http_uri_status_e" title="">http_uri_status_e</a></li>
-       <li><a href="#http_version_e" title="">http_version_e</a></li>
-       <li><a href="#ipp_finish_e" title="">ipp_finish_e</a></li>
-       <li><a href="#ipp_jstate_e" title="">ipp_jstate_e</a></li>
-       <li><a href="#ipp_op_e" title="">ipp_op_e</a></li>
-       <li><a href="#ipp_orient_e" title="">ipp_orient_e</a></li>
-       <li><a href="#ipp_pstate_e" title="">ipp_pstate_e</a></li>
-       <li><a href="#ipp_quality_e" title="">ipp_quality_e</a></li>
-       <li><a href="#ipp_res_e" title="Types and structures...">ipp_res_e</a></li>
-       <li><a href="#ipp_state_e" title="">ipp_state_e</a></li>
+       <li><a href="#http_uri_coding_e" title="URI en/decode flags">http_uri_coding_e</a></li>
+       <li><a href="#http_uri_status_e" title="URI separation status ">http_uri_status_e</a></li>
+       <li><a href="#http_version_e" title="HTTP version numbers">http_version_e</a></li>
+       <li><a href="#ipp_finish_e" title="Finishings...">ipp_finish_e</a></li>
+       <li><a href="#ipp_jstate_e" title="Job States....">ipp_jstate_e</a></li>
+       <li><a href="#ipp_op_e" title="IPP operations...">ipp_op_e</a></li>
+       <li><a href="#ipp_orient_e" title="Orientation...">ipp_orient_e</a></li>
+       <li><a href="#ipp_pstate_e" title="Printer States....">ipp_pstate_e</a></li>
+       <li><a href="#ipp_quality_e" title="Qualities...">ipp_quality_e</a></li>
+       <li><a href="#ipp_res_e" title="Resolution units...">ipp_res_e</a></li>
+       <li><a href="#ipp_state_e" title="IPP states...">ipp_state_e</a></li>
        <li><a href="#ipp_status_e" title="IPP status codes...">ipp_status_e</a></li>
        <li><a href="#ipp_tag_e" title="Format tags for attributes...">ipp_tag_e</a></li>
 </ul></li>
@@ -3233,6 +3241,14 @@ const <a href="#ipp_uchar_t">ipp_uchar_t</a> *ippTimeToDate (<br>
 <h4 class="returnvalue">Return Value</h4>
 <p class="description">Current state</p>
 <h2 class="title"><a name="TYPES">Data Types</a></h2>
+<h3 class="typedef"><span class="info">&nbsp;CUPS 1.2/Mac OS X 10.5&nbsp;</span><a name="http_addr_t">http_addr_t</a></h3>
+<p class="description">Socket address union, which
+makes using IPv6 and other
+address types easier and
+more portable. </p>
+<p class="code">
+typedef union _http_addr_u / http_addr_t;
+</p>
 <h3 class="typedef"><span class="info">&nbsp;CUPS 1.2/Mac OS X 10.5&nbsp;</span><a name="http_addrlist_t">http_addrlist_t</a></h3>
 <p class="description">Socket address list, which is
 used to enumerate all of the
@@ -3262,10 +3278,16 @@ typedef enum <a href="#http_encryption_e">http_encryption_e</a> http_encryption_
 typedef enum <a href="#http_field_e">http_field_e</a> http_field_t;
 </p>
 <h3 class="typedef"><a name="http_keepalive_t">http_keepalive_t</a></h3>
-<p class="description">Types and structures...</p>
+<p class="description">HTTP keep-alive values</p>
 <p class="code">
 typedef enum <a href="#http_keepalive_e">http_keepalive_e</a> http_keepalive_t;
 </p>
+<h3 class="typedef"><a name="http_state_t">http_state_t</a></h3>
+<p class="description">HTTP state values; states
+are server-oriented...</p>
+<p class="code">
+typedef enum <a href="#http_state_e">http_state_e</a> / http_state_t;
+</p>
 <h3 class="typedef"><a name="http_status_t">http_status_t</a></h3>
 <p class="description">HTTP status codes</p>
 <p class="code">
@@ -3277,20 +3299,17 @@ typedef enum <a href="#http_status_e">http_status_e</a> http_status_t;
 typedef struct _http_s http_t;
 </p>
 <h3 class="typedef"><a name="http_uri_coding_t">http_uri_coding_t</a></h3>
-<p class="description">HTTP version numbers</p>
+<p class="description">URI en/decode flags</p>
 <p class="code">
 typedef enum <a href="#http_uri_coding_e">http_uri_coding_e</a> http_uri_coding_t;
 </p>
-<h3 class="typedef"><a name="http_uri_status_t">http_uri_status_t</a></h3>
-<p class="description">URI en/decode flags</p>
+<h3 class="typedef"><span class="info">&nbsp;CUPS1.2&nbsp;</span><a name="http_uri_status_t">http_uri_status_t</a></h3>
+<p class="description">URI separation status </p>
 <p class="code">
 typedef enum <a href="#http_uri_status_e">http_uri_status_e</a> http_uri_status_t;
 </p>
-<h3 class="typedef"><span class="info">&nbsp;CUPS 1.2/Mac OS X 10.5&nbsp;</span><a name="http_version_t">http_version_t</a></h3>
-<p class="description">Socket address union, which
-makes using IPv6 and other
-address types easier and
-more portable. </p>
+<h3 class="typedef"><a name="http_version_t">http_version_t</a></h3>
+<p class="description">HTTP version numbers</p>
 <p class="code">
 typedef enum <a href="#http_version_e">http_version_e</a> http_version_t;
 </p>
@@ -3300,7 +3319,7 @@ typedef enum <a href="#http_version_e">http_version_e</a> http_version_t;
 typedef struct <a href="#ipp_attribute_s">ipp_attribute_s</a> ipp_attribute_t;
 </p>
 <h3 class="typedef"><a name="ipp_finish_t">ipp_finish_t</a></h3>
-<p class="description">Orientation...</p>
+<p class="description">Finishings...</p>
 <p class="code">
 typedef enum <a href="#ipp_finish_e">ipp_finish_e</a> ipp_finish_t;
 </p>
@@ -3310,27 +3329,27 @@ typedef enum <a href="#ipp_finish_e">ipp_finish_e</a> ipp_finish_t;
 typedef ssize_t (*ipp_iocb_t)(void *, <a href="#ipp_uchar_t">ipp_uchar_t</a> *, size_t);
 </p>
 <h3 class="typedef"><a name="ipp_jstate_t">ipp_jstate_t</a></h3>
-<p class="description">Printer States....</p>
+<p class="description">Job States....</p>
 <p class="code">
 typedef enum <a href="#ipp_jstate_e">ipp_jstate_e</a> ipp_jstate_t;
 </p>
 <h3 class="typedef"><a name="ipp_op_t">ipp_op_t</a></h3>
-<p class="description">Old names for the operations</p>
+<p class="description">IPP operations...</p>
 <p class="code">
 typedef enum <a href="#ipp_op_e">ipp_op_e</a> ipp_op_t;
 </p>
 <h3 class="typedef"><a name="ipp_orient_t">ipp_orient_t</a></h3>
-<p class="description">Qualities...</p>
+<p class="description">Orientation...</p>
 <p class="code">
 typedef enum <a href="#ipp_orient_e">ipp_orient_e</a> ipp_orient_t;
 </p>
 <h3 class="typedef"><a name="ipp_pstate_t">ipp_pstate_t</a></h3>
-<p class="description">IPP states...</p>
+<p class="description">Printer States....</p>
 <p class="code">
 typedef enum <a href="#ipp_pstate_e">ipp_pstate_e</a> ipp_pstate_t;
 </p>
 <h3 class="typedef"><a name="ipp_quality_t">ipp_quality_t</a></h3>
-<p class="description">Job States....</p>
+<p class="description">Qualities...</p>
 <p class="code">
 typedef enum <a href="#ipp_quality_e">ipp_quality_e</a> ipp_quality_t;
 </p>
@@ -3340,12 +3359,12 @@ typedef enum <a href="#ipp_quality_e">ipp_quality_e</a> ipp_quality_t;
 typedef union <a href="#ipp_request_u">ipp_request_u</a> ipp_request_t;
 </p>
 <h3 class="typedef"><a name="ipp_res_t">ipp_res_t</a></h3>
-<p class="description">Types and structures...</p>
+<p class="description">Resolution units...</p>
 <p class="code">
 typedef enum <a href="#ipp_res_e">ipp_res_e</a> ipp_res_t;
 </p>
 <h3 class="typedef"><a name="ipp_state_t">ipp_state_t</a></h3>
-<p class="description">IPP operations...</p>
+<p class="description">IPP states...</p>
 <p class="code">
 typedef enum <a href="#ipp_state_e">ipp_state_e</a> ipp_state_t;
 </p>
@@ -3365,7 +3384,7 @@ typedef typedef unsigned char ipp_uchar_t;
 typedef enum <a href="#ipp_tag_e">ipp_tag_e</a> ipp_tag_t;
 </p>
 <h3 class="typedef"><a name="ipp_value_t">ipp_value_t</a></h3>
-<p class="description">New in CUPS 1.1.19</p>
+<p class="description">Attribute Value</p>
 <p class="code">
 typedef union <a href="#ipp_value_u">ipp_value_u</a> ipp_value_t;
 </p>
@@ -3445,7 +3464,7 @@ with a hostname. </p>
 <dl>
 </dl>
 <h3 class="union"><a name="ipp_value_u">ipp_value_u</a></h3>
-<p class="description">New in CUPS 1.1.19</p>
+<p class="description">Attribute Value</p>
 <p class="code">union ipp_value_u {<br>
 &nbsp;&nbsp;&nbsp;&nbsp;char boolean;<br>
 &nbsp;&nbsp;&nbsp;&nbsp;<a href="#ipp_t">ipp_t</a> *collection;<br>
@@ -3571,7 +3590,7 @@ with a hostname. </p>
 <dd class="description">WWW-Authenticate field</dd>
 </dl>
 <h3 class="enumeration"><a name="http_keepalive_e">http_keepalive_e</a></h3>
-<p class="description">Types and structures...</p>
+<p class="description">HTTP keep-alive values</p>
 <h4 class="constants">Constants</h4>
 <dl>
 <dt>HTTP_KEEPALIVE_OFF </dt>
@@ -3580,7 +3599,8 @@ with a hostname. </p>
 <dd class="description">Use keep alive</dd>
 </dl>
 <h3 class="enumeration"><a name="http_state_e">http_state_e</a></h3>
-<p class="description"></p>
+<p class="description">HTTP state values; states
+are server-oriented...</p>
 <h4 class="constants">Constants</h4>
 <dl>
 <dt>HTTP_CLOSE </dt>
@@ -3618,6 +3638,8 @@ with a hostname. </p>
 <dl>
 <dt>HTTP_ACCEPTED </dt>
 <dd class="description">DELETE command was successful</dd>
+<dt>HTTP_AUTHORIZATION_CANCELED </dt>
+<dd class="description">User cancelled authorization</dd>
 <dt>HTTP_BAD_GATEWAY </dt>
 <dd class="description">Bad gateway</dd>
 <dt>HTTP_BAD_REQUEST </dt>
@@ -3700,7 +3722,7 @@ with a hostname. </p>
 <dd class="description">Must use a proxy to access this URI</dd>
 </dl>
 <h3 class="enumeration"><a name="http_uri_coding_e">http_uri_coding_e</a></h3>
-<p class="description"></p>
+<p class="description">URI en/decode flags</p>
 <h4 class="constants">Constants</h4>
 <dl>
 <dt>HTTP_URI_CODING_ALL </dt>
@@ -3718,8 +3740,8 @@ with a hostname. </p>
 <dt>HTTP_URI_CODING_USERNAME </dt>
 <dd class="description">En/decode the username portion</dd>
 </dl>
-<h3 class="enumeration"><a name="http_uri_status_e">http_uri_status_e</a></h3>
-<p class="description"></p>
+<h3 class="enumeration"><span class="info">&nbsp;CUPS1.2&nbsp;</span><a name="http_uri_status_e">http_uri_status_e</a></h3>
+<p class="description">URI separation status </p>
 <h4 class="constants">Constants</h4>
 <dl>
 <dt>HTTP_URI_BAD_ARGUMENTS </dt>
@@ -3748,7 +3770,7 @@ with a hostname. </p>
 <dd class="description">Unknown scheme in URI (warning)</dd>
 </dl>
 <h3 class="enumeration"><a name="http_version_e">http_version_e</a></h3>
-<p class="description"></p>
+<p class="description">HTTP version numbers</p>
 <h4 class="constants">Constants</h4>
 <dl>
 <dt>HTTP_0_9 </dt>
@@ -3759,7 +3781,7 @@ with a hostname. </p>
 <dd class="description">HTTP/1.1</dd>
 </dl>
 <h3 class="enumeration"><a name="ipp_finish_e">ipp_finish_e</a></h3>
-<p class="description"></p>
+<p class="description">Finishings...</p>
 <h4 class="constants">Constants</h4>
 <dl>
 <dt>IPP_FINISHINGS_BALE </dt>
@@ -3820,7 +3842,7 @@ with a hostname. </p>
 <dd class="description">Trim (any type)</dd>
 </dl>
 <h3 class="enumeration"><a name="ipp_jstate_e">ipp_jstate_e</a></h3>
-<p class="description"></p>
+<p class="description">Job States....</p>
 <h4 class="constants">Constants</h4>
 <dl>
 <dt>IPP_JOB_ABORTED </dt>
@@ -3839,7 +3861,7 @@ with a hostname. </p>
 <dd class="description">Job has been stopped</dd>
 </dl>
 <h3 class="enumeration"><a name="ipp_op_e">ipp_op_e</a></h3>
-<p class="description"></p>
+<p class="description">IPP operations...</p>
 <h4 class="constants">Constants</h4>
 <dl>
 <dt>CUPS_ACCEPT_JOBS </dt>
@@ -3926,7 +3948,7 @@ with a hostname. </p>
 <dd class="description">Validate job options</dd>
 </dl>
 <h3 class="enumeration"><a name="ipp_orient_e">ipp_orient_e</a></h3>
-<p class="description"></p>
+<p class="description">Orientation...</p>
 <h4 class="constants">Constants</h4>
 <dl>
 <dt>IPP_LANDSCAPE </dt>
@@ -3939,7 +3961,7 @@ with a hostname. </p>
 <dd class="description">180 degrees</dd>
 </dl>
 <h3 class="enumeration"><a name="ipp_pstate_e">ipp_pstate_e</a></h3>
-<p class="description"></p>
+<p class="description">Printer States....</p>
 <h4 class="constants">Constants</h4>
 <dl>
 <dt>IPP_PRINTER_IDLE </dt>
@@ -3950,7 +3972,7 @@ with a hostname. </p>
 <dd class="description">Printer is stopped</dd>
 </dl>
 <h3 class="enumeration"><a name="ipp_quality_e">ipp_quality_e</a></h3>
-<p class="description"></p>
+<p class="description">Qualities...</p>
 <h4 class="constants">Constants</h4>
 <dl>
 <dt>IPP_QUALITY_DRAFT </dt>
@@ -3961,7 +3983,7 @@ with a hostname. </p>
 <dd class="description">Normal quality</dd>
 </dl>
 <h3 class="enumeration"><a name="ipp_res_e">ipp_res_e</a></h3>
-<p class="description">Types and structures...</p>
+<p class="description">Resolution units...</p>
 <h4 class="constants">Constants</h4>
 <dl>
 <dt>IPP_RES_PER_CM </dt>
@@ -3970,7 +3992,7 @@ with a hostname. </p>
 <dd class="description">Pixels per inch</dd>
 </dl>
 <h3 class="enumeration"><a name="ipp_state_e">ipp_state_e</a></h3>
-<p class="description"></p>
+<p class="description">IPP states...</p>
 <h4 class="constants">Constants</h4>
 <dl>
 <dt>IPP_ATTRIBUTE </dt>
diff --git a/doc/help/api-mime.html b/doc/help/api-mime.html
new file mode 100644 (file)
index 0000000..7d75978
--- /dev/null
@@ -0,0 +1,715 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- SECTION: Programming -->
+<head>
+<title>MIME API</title>
+<meta name="keywords" content="Programming">
+<meta name="creator" content="Mini-XML v2.6">
+<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 {
+  margin-left: 36pt;
+}
+
+P.compact {
+  margin: 0;
+}
+
+P.example {
+  font-style: italic;
+  margin-left: 36pt;
+}
+  
+PRE.example {
+  background: #eeeeee;
+  border: dotted thin #999999;
+  margin-left: 36pt;
+  padding: 10px;
+}
+
+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: #cccccc;
+  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%;
+}
+
+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'>
+<h2 class="title">Contents</h2>
+<ul class="contents">
+<li><a href="#FUNCTIONS">Functions</a><ul class="code">
+<li><a href="#mimeAddFilter" title="Add a filter to the current MIME database.">mimeAddFilter</a></li>
+<li><a href="#mimeAddType" title="Add a MIME type to a database.">mimeAddType</a></li>
+<li><a href="#mimeAddTypeRule" title="Add a detection rule for a file type.">mimeAddTypeRule</a></li>
+<li><a href="#mimeDelete" title="Delete (free) a MIME database.">mimeDelete</a></li>
+<li><a href="#mimeDeleteFilter" title="Delete a filter from the MIME database.">mimeDeleteFilter</a></li>
+<li><a href="#mimeDeleteType" title="Delete a type from the MIME database.">mimeDeleteType</a></li>
+<li><a href="#mimeFileType" title="Determine the type of a file.">mimeFileType</a></li>
+<li><a href="#mimeFilter" title="Find the fastest way to convert from one type to another.">mimeFilter</a></li>
+<li><a href="#mimeFilterLookup" title="Lookup a filter...">mimeFilterLookup</a></li>
+<li><a href="#mimeFirstFilter" title="Get the first filter in the MIME database.">mimeFirstFilter</a></li>
+<li><a href="#mimeFirstType" title="Get the first type in the MIME database.">mimeFirstType</a></li>
+<li><a href="#mimeLoad" title="Create a new MIME database from disk.">mimeLoad</a></li>
+<li><a href="#mimeLoadFilters" title="Load filter definitions from disk.">mimeLoadFilters</a></li>
+<li><a href="#mimeLoadTypes" title="Load type definitions from disk.">mimeLoadTypes</a></li>
+<li><a href="#mimeNextFilter" title="Get the next filter in the MIME database.">mimeNextFilter</a></li>
+<li><a href="#mimeNextType" title="Get the next type in the MIME database.">mimeNextType</a></li>
+<li><a href="#mimeNumFilters" title="MIME database">mimeNumFilters</a></li>
+<li><a href="#mimeNumTypes" title="MIME database">mimeNumTypes</a></li>
+<li><a href="#mimeType" title="Lookup a file type.">mimeType</a></li>
+</ul></li>
+<li><a href="#TYPES">Data Types</a><ul class="code">
+       <li><a href="#mime_filter_t" title="MIME Conversion Filter Data">mime_filter_t</a></li>
+       <li><a href="#mime_magic_t" title="MIME Magic Data">mime_magic_t</a></li>
+       <li><a href="#mime_op_t" title="Types/structures...">mime_op_t</a></li>
+       <li><a href="#mime_t" title="MIME Database">mime_t</a></li>
+       <li><a href="#mime_type_t" title="MIME Type Data">mime_type_t</a></li>
+</ul></li>
+<h2 class="title"><a name="FUNCTIONS">Functions</a></h2>
+<h3 class="function"><a name="mimeAddFilter">mimeAddFilter</a></h3>
+<p class="description">Add a filter to the current MIME database.</p>
+<p class="code">
+<a href="#mime_filter_t">mime_filter_t</a> *mimeAddFilter (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_type_t">mime_type_t</a> *src,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_type_t">mime_type_t</a> *dst,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int cost,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *filter<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+<dt>src</dt>
+<dd class="description">Source type</dd>
+<dt>dst</dt>
+<dd class="description">Destination type</dd>
+<dt>cost</dt>
+<dd class="description">Relative time/resource cost</dd>
+<dt>filter</dt>
+<dd class="description">Filter program to run</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New filter</p>
+<h3 class="function"><a name="mimeAddType">mimeAddType</a></h3>
+<p class="description">Add a MIME type to a database.</p>
+<p class="code">
+<a href="#mime_type_t">mime_type_t</a> *mimeAddType (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *super,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *type<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+<dt>super</dt>
+<dd class="description">Super-type name</dd>
+<dt>type</dt>
+<dd class="description">Type name</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New (or existing) MIME type</p>
+<h3 class="function"><a name="mimeAddTypeRule">mimeAddTypeRule</a></h3>
+<p class="description">Add a detection rule for a file type.</p>
+<p class="code">
+int mimeAddTypeRule (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_type_t">mime_type_t</a> *mt,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *rule<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mt</dt>
+<dd class="description">Type to add to</dd>
+<dt>rule</dt>
+<dd class="description">Rule to add</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">0 on success, -1 on failure</p>
+<h3 class="function"><a name="mimeDelete">mimeDelete</a></h3>
+<p class="description">Delete (free) a MIME database.</p>
+<p class="code">
+void mimeDelete (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+</dl>
+<h3 class="function"><a name="mimeDeleteFilter">mimeDeleteFilter</a></h3>
+<p class="description">Delete a filter from the MIME database.</p>
+<p class="code">
+void mimeDeleteFilter (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_filter_t">mime_filter_t</a> *filter<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+<dt>filter</dt>
+<dd class="description">Filter</dd>
+</dl>
+<h3 class="function"><a name="mimeDeleteType">mimeDeleteType</a></h3>
+<p class="description">Delete a type from the MIME database.</p>
+<p class="code">
+void mimeDeleteType (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_type_t">mime_type_t</a> *mt<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+<dt>mt</dt>
+<dd class="description">Type</dd>
+</dl>
+<h3 class="function"><a name="mimeFileType">mimeFileType</a></h3>
+<p class="description">Determine the type of a file.</p>
+<p class="code">
+<a href="#mime_type_t">mime_type_t</a> *mimeFileType (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *pathname,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *filename,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int *compression<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+<dt>pathname</dt>
+<dd class="description">Name of file to check on disk</dd>
+<dt>filename</dt>
+<dd class="description">Original filename or NULL</dd>
+<dt>compression</dt>
+<dd class="description">Is the file compressed?</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Type of file</p>
+<h3 class="function"><a name="mimeFilter">mimeFilter</a></h3>
+<p class="description">Find the fastest way to convert from one type to another.</p>
+<p class="code">
+cups_array_t *mimeFilter (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_type_t">mime_type_t</a> *src,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_type_t">mime_type_t</a> *dst,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int *cost<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+<dt>src</dt>
+<dd class="description">Source file type</dd>
+<dt>dst</dt>
+<dd class="description">Destination file type</dd>
+<dt>cost</dt>
+<dd class="description">Cost of filters</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Array of filters to run</p>
+<h3 class="function"><a name="mimeFilterLookup">mimeFilterLookup</a></h3>
+<p class="description">Lookup a filter...</p>
+<p class="code">
+<a href="#mime_filter_t">mime_filter_t</a> *mimeFilterLookup (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_type_t">mime_type_t</a> *src,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_type_t">mime_type_t</a> *dst<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+<dt>src</dt>
+<dd class="description">Source type</dd>
+<dt>dst</dt>
+<dd class="description">Destination type</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Filter for src-&gt;dst</p>
+<h3 class="function"><a name="mimeFirstFilter">mimeFirstFilter</a></h3>
+<p class="description">Get the first filter in the MIME database.</p>
+<p class="code">
+<a href="#mime_filter_t">mime_filter_t</a> *mimeFirstFilter (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Filter or NULL</p>
+<h3 class="function"><a name="mimeFirstType">mimeFirstType</a></h3>
+<p class="description">Get the first type in the MIME database.</p>
+<p class="code">
+<a href="#mime_type_t">mime_type_t</a> *mimeFirstType (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Type or NULL</p>
+<h3 class="function"><a name="mimeLoad">mimeLoad</a></h3>
+<p class="description">Create a new MIME database from disk.</p>
+<p class="code">
+<a href="#mime_t">mime_t</a> *mimeLoad (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *pathname,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *filterpath<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>pathname</dt>
+<dd class="description">Directory to load</dd>
+<dt>filterpath</dt>
+<dd class="description">Directory to load</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">New MIME database</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function uses <a href="#mimeLoadFilters"><code>mimeLoadFilters</code></a> and <a href="#mimeLoadTypes"><code>mimeLoadTypes</code></a> to
+create a MIME database from a single directory.</p>
+<h3 class="function"><a name="mimeLoadFilters">mimeLoadFilters</a></h3>
+<p class="description">Load filter definitions from disk.</p>
+<p class="code">
+<a href="#mime_t">mime_t</a> *mimeLoadFilters (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *pathname,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *filterpath<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+<dt>pathname</dt>
+<dd class="description">Directory to load from</dd>
+<dt>filterpath</dt>
+<dd class="description">Default filter program directory</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">MIME database</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function loads all of the .convs files from the specified directory.
+Use <a href="#mimeLoadTypes"><code>mimeLoadTypes</code></a> to load all types before you load the filters.</p>
+<h3 class="function"><a name="mimeLoadTypes">mimeLoadTypes</a></h3>
+<p class="description">Load type definitions from disk.</p>
+<p class="code">
+<a href="#mime_t">mime_t</a> *mimeLoadTypes (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *pathname<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database or <code>NULL</code> to create a new one</dd>
+<dt>pathname</dt>
+<dd class="description">Directory to load from</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">MIME database</p>
+<h4 class="discussion">Discussion</h4>
+<p class="discussion">This function loads all of the .types files from the specified directory.
+Use <a href="#mimeLoadFilters"><code>mimeLoadFilters</code></a> to load all filters after you load the types.</p>
+<h3 class="function"><a name="mimeNextFilter">mimeNextFilter</a></h3>
+<p class="description">Get the next filter in the MIME database.</p>
+<p class="code">
+<a href="#mime_filter_t">mime_filter_t</a> *mimeNextFilter (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Filter or NULL</p>
+<h3 class="function"><a name="mimeNextType">mimeNextType</a></h3>
+<p class="description">Get the next type in the MIME database.</p>
+<p class="code">
+<a href="#mime_type_t">mime_type_t</a> *mimeNextType (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Type or NULL</p>
+<h3 class="function"><a name="mimeNumFilters">mimeNumFilters</a></h3>
+<p class="description">MIME database</p>
+<p class="code">
+int mimeNumFilters (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Get the number of filters in a MIME database.</p>
+<h3 class="function"><a name="mimeNumTypes">mimeNumTypes</a></h3>
+<p class="description">MIME database</p>
+<p class="code">
+int mimeNumTypes (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Get the number of types in a MIME database.</p>
+<h3 class="function"><a name="mimeType">mimeType</a></h3>
+<p class="description">Lookup a file type.</p>
+<p class="code">
+<a href="#mime_type_t">mime_type_t</a> *mimeType (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#mime_t">mime_t</a> *mime,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *super,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *type<br>
+);</p>
+<h4 class="parameters">Parameters</h4>
+<dl>
+<dt>mime</dt>
+<dd class="description">MIME database</dd>
+<dt>super</dt>
+<dd class="description">Super-type name</dd>
+<dt>type</dt>
+<dd class="description">Type name</dd>
+</dl>
+<h4 class="returnvalue">Return Value</h4>
+<p class="description">Matching file type definition</p>
+<h2 class="title"><a name="TYPES">Data Types</a></h2>
+<h3 class="typedef"><a name="mime_filter_t">mime_filter_t</a></h3>
+<p class="description">MIME Conversion Filter Data</p>
+<p class="code">
+typedef struct _mime_filter_s mime_filter_t;
+</p>
+<h3 class="typedef"><a name="mime_magic_t">mime_magic_t</a></h3>
+<p class="description">MIME Magic Data</p>
+<p class="code">
+typedef struct _mime_magic_s mime_magic_t;
+</p>
+<h3 class="typedef"><a name="mime_op_t">mime_op_t</a></h3>
+<p class="description">Types/structures...</p>
+<p class="code">
+typedef enum mime_op_t;
+</p>
+<h3 class="typedef"><a name="mime_t">mime_t</a></h3>
+<p class="description">MIME Database</p>
+<p class="code">
+typedef struct _mime_s mime_t;
+</p>
+<h3 class="typedef"><a name="mime_type_t">mime_type_t</a></h3>
+<p class="description">MIME Type Data</p>
+<p class="code">
+typedef struct _mime_type_s mime_type_t;
+</p>
+</div>
+</body>
+</html>
index 4bf8c54668d90713196444e5842f22d182dd6b84..b6e07808c7e53fa6f7243e839e1ee77d9d0dbb0c 100644 (file)
@@ -27,6 +27,10 @@ PRE.command {
   margin-left: 36pt;
 }
 
+P.compact {
+  margin: 0;
+}
+
 P.example {
   font-style: italic;
   margin-left: 36pt;
index 263e91b0d915cc24e4d0274605d52e3f92b5a0c1..56cd2abd0e177eb4d5185e3b01ebeac41688513c 100644 (file)
@@ -27,6 +27,10 @@ PRE.command {
   margin-left: 36pt;
 }
 
+P.compact {
+  margin: 0;
+}
+
 P.example {
   font-style: italic;
   margin-left: 36pt;
@@ -444,7 +448,7 @@ conflicts.">ppdMarkOption</a></li>
        <li><a href="#ppd_profile_t" title="sRGB Color Profiles">ppd_profile_t</a></li>
        <li><a href="#ppd_section_t" title="Order dependency sections">ppd_section_t</a></li>
        <li><a href="#ppd_size_t" title="Page Sizes">ppd_size_t</a></li>
-       <li><a href="#ppd_status_t" title="Types and structures...">ppd_status_t</a></li>
+       <li><a href="#ppd_status_t" title="Status Codes ">ppd_status_t</a></li>
        <li><a href="#ppd_ui_t" title="UI Types">ppd_ui_t</a></li>
 </ul></li>
 <li><a href="#STRUCTURES">Structures</a><ul class="code">
@@ -465,11 +469,11 @@ conflicts.">ppdMarkOption</a></li>
        <li><a href="#ppd_cpvalue_u" title="Custom Parameter Value ">ppd_cpvalue_u</a></li>
 </ul></li>
 <li><a href="#ENUMERATIONS">Constants</a><ul class="code">
-       <li><a href="#ppd_conform_e" title="">ppd_conform_e</a></li>
+       <li><a href="#ppd_conform_e" title="Conformance Levels ">ppd_conform_e</a></li>
        <li><a href="#ppd_cptype_e" title="Custom Parameter Type ">ppd_cptype_e</a></li>
        <li><a href="#ppd_cs_e" title="Colorspaces">ppd_cs_e</a></li>
        <li><a href="#ppd_section_e" title="Order dependency sections">ppd_section_e</a></li>
-       <li><a href="#ppd_status_e" title="Types and structures...">ppd_status_e</a></li>
+       <li><a href="#ppd_status_e" title="Status Codes ">ppd_status_e</a></li>
        <li><a href="#ppd_ui_e" title="UI Types">ppd_ui_e</a></li>
 </ul></li>
 <!--
@@ -1625,8 +1629,8 @@ typedef enum <a href="#ppd_section_e">ppd_section_e</a> ppd_section_t;
 <p class="code">
 typedef struct <a href="#ppd_size_s">ppd_size_s</a> ppd_size_t;
 </p>
-<h3 class="typedef"><a name="ppd_status_t">ppd_status_t</a></h3>
-<p class="description">Types and structures...</p>
+<h3 class="typedef"><span class="info">&nbsp;CUPS 1.1.19/Mac OS X 10.3&nbsp;</span><a name="ppd_status_t">ppd_status_t</a></h3>
+<p class="description">Status Codes </p>
 <p class="code">
 typedef enum <a href="#ppd_status_e">ppd_status_e</a> ppd_status_t;
 </p>
@@ -2065,8 +2069,8 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
 <dd class="description">String value</dd>
 </dl>
 <h2 class="title"><a name="ENUMERATIONS">Constants</a></h2>
-<h3 class="enumeration"><a name="ppd_conform_e">ppd_conform_e</a></h3>
-<p class="description"></p>
+<h3 class="enumeration"><span class="info">&nbsp;CUPS 1.1.19/Mac OS X 10.3&nbsp;</span><a name="ppd_conform_e">ppd_conform_e</a></h3>
+<p class="description">Conformance Levels </p>
 <h4 class="constants">Constants</h4>
 <dl>
 <dt>PPD_CONFORM_RELAXED </dt>
@@ -2129,8 +2133,8 @@ typedef enum <a href="#ppd_ui_e">ppd_ui_e</a> ppd_ui_t;
 <dt>PPD_ORDER_PROLOG </dt>
 <dd class="description">... must be in the Prolog section</dd>
 </dl>
-<h3 class="enumeration"><a name="ppd_status_e">ppd_status_e</a></h3>
-<p class="description">Types and structures...</p>
+<h3 class="enumeration"><span class="info">&nbsp;CUPS 1.1.19/Mac OS X 10.3&nbsp;</span><a name="ppd_status_e">ppd_status_e</a></h3>
+<p class="description">Status Codes </p>
 <h4 class="constants">Constants</h4>
 <dl>
 <dt>PPD_ALLOC_ERROR </dt>
diff --git a/doc/help/api-ppdc.html b/doc/help/api-ppdc.html
new file mode 100644 (file)
index 0000000..3356269
--- /dev/null
@@ -0,0 +1,2121 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!-- SECTION: Programming -->
+<head>
+<title>PPD Compiler API</title>
+<meta name="keywords" content="Programming">
+<meta name="creator" content="Mini-XML v2.6">
+<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 {
+  margin-left: 36pt;
+}
+
+P.compact {
+  margin: 0;
+}
+
+P.example {
+  font-style: italic;
+  margin-left: 36pt;
+}
+  
+PRE.example {
+  background: #eeeeee;
+  border: dotted thin #999999;
+  margin-left: 36pt;
+  padding: 10px;
+}
+
+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: #cccccc;
+  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%;
+}
+
+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'>
+<h2 class="title">Contents</h2>
+<ul class="contents">
+<li><a href="#CLASSES">Classes</a><ul class="code">
+<li><a href="#ppdcArray" title="// Shared Array">ppdcArray</a></li>
+<li><a href="#ppdcAttr" title="// Attribute">ppdcAttr</a></li>
+<li><a href="#ppdcCatalog" title="// Translation catalog">ppdcCatalog</a></li>
+<li><a href="#ppdcChoice" title="// Option Choice">ppdcChoice</a></li>
+<li><a href="#ppdcConstraint" title="// Constraint">ppdcConstraint</a></li>
+<li><a href="#ppdcDriver" title="// Printer Driver Data">ppdcDriver</a></li>
+<li><a href="#ppdcFile" title="// File">ppdcFile</a></li>
+<li><a href="#ppdcFilter" title="// Filter Program">ppdcFilter</a></li>
+<li><a href="#ppdcFont" title="// Shared Font">ppdcFont</a></li>
+<li><a href="#ppdcGroup" title="// Group of Options">ppdcGroup</a></li>
+<li><a href="#ppdcInteger" title="// Shared integer">ppdcInteger</a></li>
+<li><a href="#ppdcMediaSize" title="// Media Size">ppdcMediaSize</a></li>
+<li><a href="#ppdcMessage" title="// Translation message">ppdcMessage</a></li>
+<li><a href="#ppdcOption" title="// Option">ppdcOption</a></li>
+<li><a href="#ppdcProfile" title="// Color Profile">ppdcProfile</a></li>
+<li><a href="#ppdcShared" title="// Shared Data Value">ppdcShared</a></li>
+<li><a href="#ppdcSource" title="// Source File">ppdcSource</a></li>
+<li><a href="#ppdcString" title="// Shared String">ppdcString</a></li>
+<li><a href="#ppdcVariable" title="// Variable Definition">ppdcVariable</a></li>
+</ul></li>
+<li><a href="#TYPES">Data Types</a><ul class="code">
+       <li><a href="#ppdc_cs_t" title="">ppdc_cs_t</a></li>
+</ul></li>
+<li><a href="#VARIABLES">Variables</a><ul class="code">
+       <li><a href="#ppdcSource" title="// Printer Driver Data">ppdcSource</a></li>
+</ul></li>
+<li><a href="#ENUMERATIONS">Constants</a><ul class="code">
+       <li><a href="#ppdcCondFlags" title="// Condition flags">ppdcCondFlags</a></li>
+       <li><a href="#ppdcDrvType" title="// Driver type">ppdcDrvType</a></li>
+       <li><a href="#ppdcFontStatus" title="// Load status of font">ppdcFontStatus</a></li>
+       <li><a href="#ppdcLineEnding" title="// Line endings">ppdcLineEnding</a></li>
+       <li><a href="#ppdcOptSection" title="// Option section">ppdcOptSection</a></li>
+       <li><a href="#ppdcOptType" title="// Option type">ppdcOptType</a></li>
+</ul></li>
+<h2 class="title"><a name="CLASSES">Classes</a></h2>
+<h3 class="class"><a name="ppdcArray">ppdcArray</a></h3>
+<p class="description">// Shared Array</p>
+<p class="code">class ppdcArray : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int count, alloc, current;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcShared">ppdcShared</a> **data;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>current </dt>
+<dd class="description">Current element</dd>
+<dt>data </dt>
+<dd class="description">Elements</dd>
+</dl>
+<h4 class="method"><a name="PPDC_NAME">PPDC_NAME</a></h4>
+<p class="description"></p>
+<p class="code">
+void PPDC_NAME (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;void add(<a href="#ppdcShared">ppdcShared</a> *d<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>d</dt>
+</dl>
+<h4 class="method"><a name="add">add</a></h4>
+<p class="description"></p>
+<p class="code">
+void add (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcShared">ppdcShared</a> *d<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>d</dt>
+</dl>
+<h4 class="method"><a name="first">first</a></h4>
+<p class="description">Return the first element in the array.</p>
+<p class="code">
+<a href="#ppdcShared">ppdcShared</a> *first (void);</p>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description"></p>
+<h4 class="method"><a name="next">next</a></h4>
+<p class="description">Return the next element in the array.</p>
+<p class="code">
+<a href="#ppdcShared">ppdcShared</a> *next (void);</p>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description"></p>
+<h4 class="method"><a name="ppdcArray">ppdcArray</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcArray (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcArray">ppdcArray</a> *a<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>a</dt>
+</dl>
+<h4 class="method"><a name="remove">remove</a></h4>
+<p class="description"></p>
+<p class="code">
+void remove (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcShared">ppdcShared</a> *d<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>d</dt>
+<dd class="description">Data element</dd>
+</dl>
+<h4 class="method"><a name="~ppdcArray">~ppdcArray</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcArray (void);</p>
+<h3 class="class"><a name="ppdcAttr">ppdcAttr</a></h3>
+<p class="description">// Attribute</p>
+<p class="code">class ppdcAttr : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;bool localizable;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *name, *selector, *text, *value;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>localizable </dt>
+<dd class="description">Should this attribute be localized?</dd>
+<dt>value </dt>
+<dd class="description">Value string</dd>
+</dl>
+<h4 class="method"><a name="ppdcAttr">ppdcAttr</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcAttr (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *n,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *s,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *t,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *v,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;bool loc<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>n</dt>
+<dd class="description">Name</dd>
+<dt>s</dt>
+<dd class="description">Spec string</dd>
+<dt>t</dt>
+<dd class="description">Human-readable text</dd>
+<dt>v</dt>
+<dd class="description">Value</dd>
+<dt>loc</dt>
+<dd class="description">Localize this attribute?</dd>
+</dl>
+<h4 class="method"><a name="~ppdcAttr">~ppdcAttr</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcAttr (void);</p>
+<h3 class="class"><a name="ppdcCatalog">ppdcCatalog</a></h3>
+<p class="description">// Translation catalog</p>
+<p class="code">class ppdcCatalog : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *filename;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *locale;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcArray">ppdcArray</a> *messages;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>filename </dt>
+<dd class="description">Name of translation file</dd>
+<dt>locale </dt>
+<dd class="description">Name of locale</dd>
+<dt>messages </dt>
+<dd class="description">Array of translation messages</dd>
+</dl>
+<h4 class="method"><a name="PPDC_NAME">PPDC_NAME</a></h4>
+<p class="description"></p>
+<p class="code">
+void PPDC_NAME (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;void add_message(const char *id,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *string = NULL<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>id</dt>
+<dt>string</dt>
+</dl>
+<h4 class="method"><a name="add_message">add_message</a></h4>
+<p class="description"></p>
+<p class="code">
+void add_message (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *id,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *string<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>id</dt>
+<dd class="description">Message ID to add</dd>
+<dt>string</dt>
+<dd class="description">Translation string</dd>
+</dl>
+<h4 class="method"><a name="find_message">find_message</a></h4>
+<p class="description"></p>
+<p class="code">
+const char *find_message (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *id<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>id</dt>
+<dd class="description">Message ID</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Message text</p>
+<h4 class="method"><a name="load_messages">load_messages</a></h4>
+<p class="description"></p>
+<p class="code">
+int load_messages (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *f<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>f</dt>
+<dd class="description">Message catalog file</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">0 on success, -1 on failure</p>
+<h4 class="method"><a name="ppdcCatalog">ppdcCatalog</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcCatalog (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *l,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *f<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>l</dt>
+<dd class="description">Locale</dd>
+<dt>f</dt>
+<dd class="description">Message catalog file</dd>
+</dl>
+<h4 class="method"><a name="save_messages">save_messages</a></h4>
+<p class="description"></p>
+<p class="code">
+int save_messages (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *f<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>f</dt>
+<dd class="description">File to save to</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">0 on success, -1 on error</p>
+<h4 class="method"><a name="~ppdcCatalog">~ppdcCatalog</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcCatalog (void);</p>
+<h3 class="class"><a name="ppdcChoice">ppdcChoice</a></h3>
+<p class="description">// Option Choice</p>
+<p class="code">class ppdcChoice : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *name, *text, *code;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>code </dt>
+<dd class="description">PS code of choice</dd>
+</dl>
+<h4 class="method"><a name="ppdcChoice">ppdcChoice</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcChoice (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *n,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *t,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *c<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>n</dt>
+<dd class="description">Name of choice</dd>
+<dt>t</dt>
+<dd class="description">Text of choice</dd>
+<dt>c</dt>
+<dd class="description">Code of choice</dd>
+</dl>
+<h4 class="method"><a name="~ppdcChoice">~ppdcChoice</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcChoice (void);</p>
+<h3 class="class"><a name="ppdcConstraint">ppdcConstraint</a></h3>
+<p class="description">// Constraint</p>
+<p class="code">class ppdcConstraint : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *option1, *choice1, *option2, *choice2;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>choice2 </dt>
+<dd class="description">Second choice</dd>
+</dl>
+<h4 class="method"><a name="ppdcConstraint">ppdcConstraint</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcConstraint (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *o1,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *c1,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *o2,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *c2<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>o1</dt>
+<dd class="description">First option</dd>
+<dt>c1</dt>
+<dd class="description">First choice</dd>
+<dt>o2</dt>
+<dd class="description">Second option</dd>
+<dt>c2</dt>
+<dd class="description">Second choice</dd>
+</dl>
+<h4 class="method"><a name="~ppdcConstraint">~ppdcConstraint</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcConstraint (void);</p>
+<h3 class="class"><a name="ppdcDriver">ppdcDriver</a></h3>
+<p class="description">// Printer Driver Data</p>
+<p class="code">class ppdcDriver : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcArray">ppdcArray</a> *copyright;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *custom_size_code;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *default_font, *default_size;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float left_margin, bottom_margin, right_margin, top_margin, max_width, max_length, min_width, min_length;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcArray">ppdcArray</a> *attrs, *constraints, *filters, *fonts, *groups, *profiles, *sizes;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int model_number, manual_copies, color_device, throughput;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcDrvType">ppdcDrvType</a> type;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int variable_paper_size;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *manufacturer, *model_name, *file_name, *pc_file_name, *version;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>copyright </dt>
+<dd class="description">Copyright strings</dd>
+<dt>custom_size_code </dt>
+<dd class="description">Custom page size code, if any</dd>
+<dt>default_size </dt>
+<dd class="description">Default size option</dd>
+<dt>min_length </dt>
+<dd class="description">Minimum length (points)</dd>
+<dt>sizes </dt>
+<dd class="description">Fixed sizes</dd>
+<dt>throughput </dt>
+<dd class="description">Throughput in pages per minute</dd>
+<dt>type </dt>
+<dd class="description">Driver type</dd>
+<dt>variable_paper_size </dt>
+<dd class="description">Support variable sizes?</dd>
+<dt>version </dt>
+<dd class="description">Version number</dd>
+</dl>
+<h4 class="method"><a name="PPDC_NAME">PPDC_NAME</a></h4>
+<p class="description"></p>
+<p class="code">
+void PPDC_NAME (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;void add_attr(<a href="#ppdcAttr">ppdcAttr</a> *a<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>a</dt>
+</dl>
+<h4 class="method"><a name="add_constraint">add_constraint</a></h4>
+<p class="description"></p>
+<p class="code">
+void add_constraint (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcConstraint">ppdcConstraint</a> *c<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>c</dt>
+</dl>
+<h4 class="method"><a name="add_copyright">add_copyright</a></h4>
+<p class="description"></p>
+<p class="code">
+void add_copyright (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *c<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>c</dt>
+</dl>
+<h4 class="method"><a name="add_filter">add_filter</a></h4>
+<p class="description"></p>
+<p class="code">
+void add_filter (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFilter">ppdcFilter</a> *f<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>f</dt>
+</dl>
+<h4 class="method"><a name="add_font">add_font</a></h4>
+<p class="description"></p>
+<p class="code">
+void add_font (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFont">ppdcFont</a> *f<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>f</dt>
+</dl>
+<h4 class="method"><a name="add_group">add_group</a></h4>
+<p class="description"></p>
+<p class="code">
+void add_group (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcGroup">ppdcGroup</a> *g<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>g</dt>
+</dl>
+<h4 class="method"><a name="add_profile">add_profile</a></h4>
+<p class="description"></p>
+<p class="code">
+void add_profile (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcProfile">ppdcProfile</a> *p<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>p</dt>
+</dl>
+<h4 class="method"><a name="add_size">add_size</a></h4>
+<p class="description"></p>
+<p class="code">
+void add_size (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcMediaSize">ppdcMediaSize</a> *m<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>m</dt>
+</dl>
+<h4 class="method"><a name="find_attr">find_attr</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcAttr">ppdcAttr</a> *find_attr (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *k,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *s<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>k</dt>
+<dd class="description">Keyword string</dd>
+<dt>s</dt>
+<dd class="description">Spec string</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Attribute or NULL</p>
+<h4 class="method"><a name="find_group">find_group</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcGroup">ppdcGroup</a> *find_group (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *n<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>n</dt>
+<dd class="description">Group name</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Matching group or NULL</p>
+<h4 class="method"><a name="find_option">find_option</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcOption">ppdcOption</a> *find_option (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *n<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>n</dt>
+<dd class="description">Option name</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Matching option or NULL</p>
+<h4 class="method"><a name="ppdcDriver">ppdcDriver</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcDriver (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcDriver">ppdcDriver</a> *d<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>d</dt>
+<dd class="description">Printer driver template</dd>
+</dl>
+<h4 class="method"><a name="set_custom_size_code">set_custom_size_code</a></h4>
+<p class="description"></p>
+<p class="code">
+void set_custom_size_code (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *c<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>c</dt>
+<dd class="description">CustomPageSize code</dd>
+</dl>
+<h4 class="method"><a name="set_default_font">set_default_font</a></h4>
+<p class="description"></p>
+<p class="code">
+void set_default_font (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFont">ppdcFont</a> *f<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>f</dt>
+<dd class="description">Font</dd>
+</dl>
+<h4 class="method"><a name="set_default_size">set_default_size</a></h4>
+<p class="description"></p>
+<p class="code">
+void set_default_size (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcMediaSize">ppdcMediaSize</a> *m<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>m</dt>
+<dd class="description">Media size</dd>
+</dl>
+<h4 class="method"><a name="set_file_name">set_file_name</a></h4>
+<p class="description"></p>
+<p class="code">
+void set_file_name (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *f<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>f</dt>
+<dd class="description">Filename</dd>
+</dl>
+<h4 class="method"><a name="set_manufacturer">set_manufacturer</a></h4>
+<p class="description"></p>
+<p class="code">
+void set_manufacturer (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *m<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>m</dt>
+<dd class="description">Model name</dd>
+</dl>
+<h4 class="method"><a name="set_model_name">set_model_name</a></h4>
+<p class="description"></p>
+<p class="code">
+void set_model_name (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *m<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>m</dt>
+<dd class="description">Model name</dd>
+</dl>
+<h4 class="method"><a name="set_pc_file_name">set_pc_file_name</a></h4>
+<p class="description"></p>
+<p class="code">
+void set_pc_file_name (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *f<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>f</dt>
+<dd class="description">Filename</dd>
+</dl>
+<h4 class="method"><a name="set_version">set_version</a></h4>
+<p class="description"></p>
+<p class="code">
+void set_version (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *v<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>v</dt>
+<dd class="description">Version</dd>
+</dl>
+<h4 class="method"><a name="write_ppd_file">write_ppd_file</a></h4>
+<p class="description"></p>
+<p class="code">
+int write_ppd_file (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;cups_file_t *fp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcCatalog">ppdcCatalog</a> *catalog,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcArray">ppdcArray</a> *locales,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcSource">ppdcSource</a> *src,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcLineEnding">ppdcLineEnding</a> le<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">PPD file</dd>
+<dt>catalog</dt>
+<dd class="description">Message catalog</dd>
+<dt>locales</dt>
+<dd class="description">Additional languages to add</dd>
+<dt>src</dt>
+<dd class="description">Driver source</dd>
+<dt>le</dt>
+<dd class="description">Line endings to use</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">0 on success, -1 on failure</p>
+<h4 class="method"><a name="~ppdcDriver">~ppdcDriver</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcDriver (void);</p>
+<h3 class="class"><a name="ppdcFile">ppdcFile</a></h3>
+<p class="description">// File</p>
+<p class="code">class ppdcFile {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *filename;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;cups_file_t *fp;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int line;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>filename </dt>
+<dd class="description">Filename</dd>
+<dt>fp </dt>
+<dd class="description">File pointer</dd>
+<dt>line </dt>
+<dd class="description">Line in file</dd>
+</dl>
+<h4 class="method"><a name="get">get</a></h4>
+<p class="description">Get a character from a file.</p>
+<p class="code">
+int get (void);</p>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description"></p>
+<h4 class="method"><a name="peek">peek</a></h4>
+<p class="description"></p>
+<p class="code">
+int peek (void);</p>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Next character in file</p>
+<h4 class="method"><a name="ppdcFile">ppdcFile</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcFile (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *f,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;cups_file_t *ffp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>f</dt>
+<dd class="description">File to open</dd>
+<dt>ffp</dt>
+<dd class="description">File pointer to use</dd>
+</dl>
+<h4 class="method"><a name="~ppdcFile">~ppdcFile</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcFile (void);</p>
+<h3 class="class"><a name="ppdcFilter">ppdcFilter</a></h3>
+<p class="description">// Filter Program</p>
+<p class="code">class ppdcFilter : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int cost;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *mime_type, *program;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>cost </dt>
+<dd class="description">Relative cost of filter</dd>
+<dt>program </dt>
+<dd class="description">Filter program</dd>
+</dl>
+<h4 class="method"><a name="ppdcFilter">ppdcFilter</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcFilter (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *t,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *p,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int c<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>t</dt>
+<dd class="description">MIME type</dd>
+<dt>p</dt>
+<dd class="description">Filter program</dd>
+<dt>c</dt>
+<dd class="description">Relative cost</dd>
+</dl>
+<h4 class="method"><a name="~ppdcFilter">~ppdcFilter</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcFilter (void);</p>
+<h3 class="class"><a name="ppdcFont">ppdcFont</a></h3>
+<p class="description">// Shared Font</p>
+<p class="code">class ppdcFont : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *name, *encoding, *version, *charset;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFontStatus">ppdcFontStatus</a> status;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>charset </dt>
+<dd class="description">Font charset</dd>
+<dt>status </dt>
+<dd class="description">Font status (ROM or Disk)</dd>
+</dl>
+<h4 class="method"><a name="ppdcFont">ppdcFont</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcFont (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *n,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *e,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *v,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *c,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFontStatus">ppdcFontStatus</a> s<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>n</dt>
+<dd class="description">Name of font</dd>
+<dt>e</dt>
+<dd class="description">Font encoding</dd>
+<dt>v</dt>
+<dd class="description">Font version</dd>
+<dt>c</dt>
+<dd class="description">Font charset</dd>
+<dt>s</dt>
+<dd class="description">Font status</dd>
+</dl>
+<h4 class="method"><a name="~ppdcFont">~ppdcFont</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcFont (void);</p>
+<h3 class="class"><a name="ppdcGroup">ppdcGroup</a></h3>
+<p class="description">// Group of Options</p>
+<p class="code">class ppdcGroup : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcArray">ppdcArray</a> *options;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *name, *text;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>options </dt>
+<dd class="description">Options</dd>
+<dt>text </dt>
+<dd class="description">Human-readable text of option</dd>
+</dl>
+<h4 class="method"><a name="PPDC_NAME">PPDC_NAME</a></h4>
+<p class="description"></p>
+<p class="code">
+void PPDC_NAME (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;void add_option(<a href="#ppdcOption">ppdcOption</a> *o<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>o</dt>
+</dl>
+<h4 class="method"><a name="find_option">find_option</a></h4>
+<p class="description">Find an option in a group.</p>
+<p class="code">
+<a href="#ppdcOption">ppdcOption</a> *find_option (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *n<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>n</dt>
+<dd class="description">Name of option</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description"></p>
+<h4 class="method"><a name="ppdcGroup">ppdcGroup</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcGroup (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcGroup">ppdcGroup</a> *g<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>g</dt>
+<dd class="description">Group template</dd>
+</dl>
+<h4 class="method"><a name="~ppdcGroup">~ppdcGroup</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcGroup (void);</p>
+<h3 class="class"><a name="ppdcInteger">ppdcInteger</a></h3>
+<p class="description">// Shared integer</p>
+<p class="code">class ppdcInteger : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int *value;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>value </dt>
+<dd class="description">Integer value</dd>
+</dl>
+<h4 class="method"><a name="ppdcInteger">ppdcInteger</a></h4>
+<p class="description">Integer value</p>
+<p class="code">
+void ppdcInteger (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int *v<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>v</dt>
+</dl>
+<h3 class="class"><a name="ppdcMediaSize">ppdcMediaSize</a></h3>
+<p class="description">// Media Size</p>
+<p class="code">class ppdcMediaSize : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *size_code, *region_code;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *name, *text;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float width, length, left, bottom, right, top;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>region_code </dt>
+<dd class="description">PageRegion code, if any</dd>
+<dt>text </dt>
+<dd class="description">Human-readable text</dd>
+<dt>top </dt>
+<dd class="description">Top limit in points</dd>
+</dl>
+<h4 class="method"><a name="ppdcMediaSize">ppdcMediaSize</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcMediaSize (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *n,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *t,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float w,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float l,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float lm,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float bm,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float rm,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float tm,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *sc,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *rc<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>n</dt>
+<dd class="description">Name of media size</dd>
+<dt>t</dt>
+<dd class="description">Text of media size</dd>
+<dt>w</dt>
+<dd class="description">Width in points</dd>
+<dt>l</dt>
+<dd class="description">Length in points</dd>
+<dt>lm</dt>
+<dd class="description">Left margin in points</dd>
+<dt>bm</dt>
+<dd class="description">Bottom margin in points</dd>
+<dt>rm</dt>
+<dd class="description">Right margin in points</dd>
+<dt>tm</dt>
+<dd class="description">Top margin in points</dd>
+<dt>sc</dt>
+<dd class="description">PageSize code, if any</dd>
+<dt>rc</dt>
+<dd class="description">PageRegion code, if any</dd>
+</dl>
+<h4 class="method"><a name="~ppdcMediaSize">~ppdcMediaSize</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcMediaSize (void);</p>
+<h3 class="class"><a name="ppdcMessage">ppdcMessage</a></h3>
+<p class="description">// Translation message</p>
+<p class="code">class ppdcMessage : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *id, *string;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>string </dt>
+<dd class="description">Translation string</dd>
+</dl>
+<h4 class="method"><a name="ppdcMessage">ppdcMessage</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcMessage (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *i,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *s<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>i</dt>
+<dd class="description">ID</dd>
+<dt>s</dt>
+<dd class="description">Text</dd>
+</dl>
+<h4 class="method"><a name="~ppdcMessage">~ppdcMessage</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcMessage (void);</p>
+<h3 class="class"><a name="ppdcOption">ppdcOption</a></h3>
+<p class="description">// Option</p>
+<p class="code">class ppdcOption : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcArray">ppdcArray</a> *choices;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *defchoice;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float order;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcOptSection">ppdcOptSection</a> section;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *name, *text;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcOptType">ppdcOptType</a> type;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>choices </dt>
+<dd class="description">Choices</dd>
+<dt>defchoice </dt>
+<dd class="description">Default choice</dd>
+<dt>order </dt>
+<dd class="description">Order number</dd>
+<dt>section </dt>
+<dd class="description">Section for option code</dd>
+<dt>text </dt>
+<dd class="description">Human-readable text of option</dd>
+<dt>type </dt>
+<dd class="description">Type of option</dd>
+</dl>
+<h4 class="method"><a name="PPDC_NAME">PPDC_NAME</a></h4>
+<p class="description"></p>
+<p class="code">
+void PPDC_NAME (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;void add_choice(<a href="#ppdcChoice">ppdcChoice</a> *c<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>c</dt>
+</dl>
+<h4 class="method"><a name="find_choice">find_choice</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcChoice">ppdcChoice</a> *find_choice (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *n<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>n</dt>
+<dd class="description">Name of choice</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Choice or NULL</p>
+<h4 class="method"><a name="ppdcOption">ppdcOption</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcOption (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcOption">ppdcOption</a> *o<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>o</dt>
+<dd class="description">Template option</dd>
+</dl>
+<h4 class="method"><a name="set_defchoice">set_defchoice</a></h4>
+<p class="description"></p>
+<p class="code">
+void set_defchoice (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcChoice">ppdcChoice</a> *c<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>c</dt>
+<dd class="description">Choice</dd>
+</dl>
+<h4 class="method"><a name="~ppdcOption">~ppdcOption</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcOption (void);</p>
+<h3 class="class"><a name="ppdcProfile">ppdcProfile</a></h3>
+<p class="description">// Color Profile</p>
+<p class="code">class ppdcProfile : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *resolution, *media_type;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float density, gamma, profile[9];<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>media_type </dt>
+<dd class="description">Media type name</dd>
+<dt>profile[9] </dt>
+<dd class="description">Color profile matrix</dd>
+</dl>
+<h4 class="method"><a name="ppdcProfile">ppdcProfile</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcProfile (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *r,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *m,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float d,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;float g,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const float *p<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>r</dt>
+<dd class="description">Resolution name</dd>
+<dt>m</dt>
+<dd class="description">Media type name</dd>
+<dt>d</dt>
+<dd class="description">Density</dd>
+<dt>g</dt>
+<dd class="description">Gamma</dd>
+<dt>p</dt>
+<dd class="description">3x3 transform matrix</dd>
+</dl>
+<h4 class="method"><a name="~ppdcProfile">~ppdcProfile</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcProfile (void);</p>
+<h3 class="class"><a name="ppdcShared">ppdcShared</a></h3>
+<p class="description">// Shared Data Value</p>
+<p class="code">class ppdcShared {<br>
+&nbsp;&nbsp;private:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int use;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>use </dt>
+<dd class="description">Use count (delete when 0)</dd>
+</dl>
+<h4 class="method"><a name="class_name">class_name</a></h4>
+<p class="description"></p>
+<p class="code">
+virtual const char *class_name (void);</p>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description"></p>
+<h4 class="method"><a name="ppdcShared">ppdcShared</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcShared (void);</p>
+<h4 class="method"><a name="release">release</a></h4>
+<p class="description"></p>
+<p class="code">
+void release (void);</p>
+<h4 class="method"><a name="retain">retain</a></h4>
+<p class="description"></p>
+<p class="code">
+void retain (void);</p>
+<h4 class="method"><a name="~ppdcShared">~ppdcShared</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcShared (void);</p>
+<h3 class="class"><a name="ppdcSource">ppdcSource</a></h3>
+<p class="description">// Source File</p>
+<p class="code">class ppdcSource : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int cond_state, *cond_current, cond_stack[101];<br>
+&nbsp;&nbsp;&nbsp;&nbsp;static const char *driver_types[];<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *filename;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;static <a href="#ppdcArray">ppdcArray</a> *includes;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcArray">ppdcArray</a> *base_fonts, *drivers, *po_files, *sizes, *vars;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>cond_stack[101] </dt>
+<dd class="description">#if state stack</dd>
+<dt>driver_types[] </dt>
+<dd class="description">Driver types</dd>
+<dt>filename </dt>
+<dd class="description">Filename</dd>
+<dt>includes </dt>
+<dd class="description">Include directories</dd>
+<dt>vars </dt>
+<dd class="description">Defined variables</dd>
+</dl>
+<h4 class="method"><a name="PPDC_NAME">PPDC_NAME</a></h4>
+<p class="description"></p>
+<p class="code">
+void PPDC_NAME (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;static void add_include(const char *d<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>d</dt>
+</dl>
+<h4 class="method"><a name="add_include">add_include</a></h4>
+<p class="description"></p>
+<p class="code">
+void add_include (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *d<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>d</dt>
+<dd class="description">Include directory</dd>
+</dl>
+<h4 class="method"><a name="find_driver">find_driver</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcDriver">ppdcDriver</a> *find_driver (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *f<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>f</dt>
+<dd class="description">Driver file name</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Driver</p>
+<h4 class="method"><a name="find_include">find_include</a></h4>
+<p class="description"></p>
+<p class="code">
+char *find_include (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *f,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *base,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *n,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int nlen<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>f</dt>
+<dd class="description">Include filename</dd>
+<dt>base</dt>
+<dd class="description">Current directory</dd>
+<dt>n</dt>
+<dd class="description">Path buffer</dd>
+<dt>nlen</dt>
+<dd class="description">Path buffer length</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Found path or NULL</p>
+<h4 class="method"><a name="find_po">find_po</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcCatalog">ppdcCatalog</a> *find_po (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *l<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>l</dt>
+<dd class="description">Locale name</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Message catalog or NULL</p>
+<h4 class="method"><a name="find_size">find_size</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcMediaSize">ppdcMediaSize</a> *find_size (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *s<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>s</dt>
+<dd class="description">Size name</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Size</p>
+<h4 class="method"><a name="find_variable">find_variable</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcVariable">ppdcVariable</a> *find_variable (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *n<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>n</dt>
+<dd class="description">Variable name</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Variable</p>
+<h4 class="method"><a name="get_attr">get_attr</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcAttr">ppdcAttr</a> *get_attr (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;bool loc<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+<dt>loc</dt>
+<dd class="description">Localize this attribute?</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Attribute</p>
+<h4 class="method"><a name="get_boolean">get_boolean</a></h4>
+<p class="description"></p>
+<p class="code">
+int get_boolean (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Boolean value</p>
+<h4 class="method"><a name="get_choice">get_choice</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcChoice">ppdcChoice</a> *get_choice (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Choice data</p>
+<h4 class="method"><a name="get_color_model">get_color_model</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcChoice">ppdcChoice</a> *get_color_model (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Choice data</p>
+<h4 class="method"><a name="get_color_order">get_color_order</a></h4>
+<p class="description"></p>
+<p class="code">
+int get_color_order (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *co<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>co</dt>
+<dd class="description">Color order string</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Color order value</p>
+<h4 class="method"><a name="get_color_profile">get_color_profile</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcProfile">ppdcProfile</a> *get_color_profile (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Color profile</p>
+<h4 class="method"><a name="get_color_space">get_color_space</a></h4>
+<p class="description"></p>
+<p class="code">
+int get_color_space (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *cs<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>cs</dt>
+<dd class="description">Colorspace string</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Colorspace value</p>
+<h4 class="method"><a name="get_constraint">get_constraint</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcConstraint">ppdcConstraint</a> *get_constraint (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Constraint</p>
+<h4 class="method"><a name="get_custom_size">get_custom_size</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcMediaSize">ppdcMediaSize</a> *get_custom_size (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Media size</p>
+<h4 class="method"><a name="get_duplex">get_duplex</a></h4>
+<p class="description"></p>
+<p class="code">
+void get_duplex (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcDriver">ppdcDriver</a> *d<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read from</dd>
+<dt>d</dt>
+<dd class="description">Current driver</dd>
+</dl>
+<h4 class="method"><a name="get_filter">get_filter</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcFilter">ppdcFilter</a> *get_filter (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Filter</p>
+<h4 class="method"><a name="get_float">get_float</a></h4>
+<p class="description"></p>
+<p class="code">
+float get_float (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Number</p>
+<h4 class="method"><a name="get_font">get_font</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcFont">ppdcFont</a> *get_font (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Font data</p>
+<h4 class="method"><a name="get_generic">get_generic</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcChoice">ppdcChoice</a> *get_generic (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *keyword,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *tattr,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *nattr<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+<dt>keyword</dt>
+<dd class="description">Keyword name</dd>
+<dt>tattr</dt>
+<dd class="description">Text attribute</dd>
+<dt>nattr</dt>
+<dd class="description">Numeric attribute</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Choice data</p>
+<h4 class="method"><a name="get_group">get_group</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcGroup">ppdcGroup</a> *get_group (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcDriver">ppdcDriver</a> *d<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+<dt>d</dt>
+<dd class="description">Printer driver</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Group</p>
+<h4 class="method"><a name="get_installable">get_installable</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcOption">ppdcOption</a> *get_installable (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Option</p>
+<h4 class="method"><a name="get_integer">get_integer</a></h4>
+<p class="description"></p>
+<p class="code">
+int get_integer (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Integer value</p>
+<h4 class="method"><a name="get_measurement">get_measurement</a></h4>
+<p class="description"></p>
+<p class="code">
+float get_measurement (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Measurement value in points</p>
+<h4 class="method"><a name="get_option">get_option</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcOption">ppdcOption</a> *get_option (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcDriver">ppdcDriver</a> *d,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcGroup">ppdcGroup</a> *g<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+<dt>d</dt>
+<dd class="description">Printer driver</dd>
+<dt>g</dt>
+<dd class="description">Current group</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Option</p>
+<h4 class="method"><a name="get_po">get_po</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcCatalog">ppdcCatalog</a> *get_po (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Message catalog</p>
+<h4 class="method"><a name="get_resolution">get_resolution</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcChoice">ppdcChoice</a> *get_resolution (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Choice data</p>
+<h4 class="method"><a name="get_simple_profile">get_simple_profile</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcProfile">ppdcProfile</a> *get_simple_profile (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Color profile</p>
+<h4 class="method"><a name="get_size">get_size</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcMediaSize">ppdcMediaSize</a> *get_size (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Media size</p>
+<h4 class="method"><a name="get_token">get_token</a></h4>
+<p class="description"></p>
+<p class="code">
+char *get_token (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *buffer,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;int buflen<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+<dt>buffer</dt>
+<dd class="description">Buffer</dd>
+<dt>buflen</dt>
+<dd class="description">Length of buffer</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Token string or NULL</p>
+<h4 class="method"><a name="get_variable">get_variable</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcVariable">ppdcVariable</a> *get_variable (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Variable</p>
+<h4 class="method"><a name="import_ppd">import_ppd</a></h4>
+<p class="description"></p>
+<p class="code">
+int import_ppd (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *f<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>f</dt>
+<dd class="description">Filename</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">1 on success, 0 on failure</p>
+<h4 class="method"><a name="ppdcSource">ppdcSource</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcSource (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *f,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;cups_file_t *ffp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>f</dt>
+<dd class="description">File to read</dd>
+<dt>ffp</dt>
+<dd class="description">File pointer to use</dd>
+</dl>
+<h4 class="method"><a name="quotef">quotef</a></h4>
+<p class="description"></p>
+<p class="code">
+int quotef (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;cups_file_t *fp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *format,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;...<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to write to</dd>
+<dt>format</dt>
+<dd class="description">Printf-style format string</dd>
+<dt>...</dt>
+<dd class="description">Additional args as needed</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Number bytes on success, -1 on failure</p>
+<h4 class="method"><a name="read_file">read_file</a></h4>
+<p class="description"></p>
+<p class="code">
+void read_file (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *f,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;cups_file_t *ffp<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>f</dt>
+<dd class="description">File to read</dd>
+<dt>ffp</dt>
+<dd class="description">File pointer to use</dd>
+</dl>
+<h4 class="method"><a name="scan_file">scan_file</a></h4>
+<p class="description"></p>
+<p class="code">
+void scan_file (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcFile">ppdcFile</a> *fp,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcDriver">ppdcDriver</a> *td,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;bool inc<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>fp</dt>
+<dd class="description">File to read</dd>
+<dt>td</dt>
+<dd class="description">Driver template</dd>
+<dt>inc</dt>
+<dd class="description">Including?</dd>
+</dl>
+<h4 class="method"><a name="set_variable">set_variable</a></h4>
+<p class="description"></p>
+<p class="code">
+<a href="#ppdcVariable">ppdcVariable</a> *set_variable (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *name,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *value<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>name</dt>
+<dd class="description">Name</dd>
+<dt>value</dt>
+<dd class="description">Value</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">Variable</p>
+<h4 class="method"><a name="write_file">write_file</a></h4>
+<p class="description"></p>
+<p class="code">
+int write_file (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *f<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>f</dt>
+<dd class="description">File to write</dd>
+</dl>
+<h5 class="returnvalue">Return Value</h5>
+<p class="description">0 on success, -1 on error</p>
+<h4 class="method"><a name="~ppdcSource">~ppdcSource</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcSource (void);</p>
+<h3 class="class"><a name="ppdcString">ppdcString</a></h3>
+<p class="description">// Shared String</p>
+<p class="code">class ppdcString : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;char *value;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>value </dt>
+<dd class="description">String value</dd>
+</dl>
+<h4 class="method"><a name="ppdcString">ppdcString</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcString (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *v<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>v</dt>
+<dd class="description">String</dd>
+</dl>
+<h4 class="method"><a name="~ppdcString">~ppdcString</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcString (void);</p>
+<h3 class="class"><a name="ppdcVariable">ppdcVariable</a></h3>
+<p class="description">// Variable Definition</p>
+<p class="code">class ppdcVariable : public ppdcShared {<br>
+&nbsp;&nbsp;public:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<a href="#ppdcString">ppdcString</a> *name, *value;<br>
+};</p>
+<h4 class="members">Members</h4>
+<dl>
+<dt>value </dt>
+<dd class="description">Value of variable</dd>
+</dl>
+<h4 class="method"><a name="PPDC_NAME">PPDC_NAME</a></h4>
+<p class="description"></p>
+<p class="code">
+void PPDC_NAME (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;void set_value(const char *v<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>v</dt>
+</dl>
+<h4 class="method"><a name="ppdcVariable">ppdcVariable</a></h4>
+<p class="description"></p>
+<p class="code">
+void ppdcVariable (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *n,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *v<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>n</dt>
+<dd class="description">Name of variable</dd>
+<dt>v</dt>
+<dd class="description">Value of variable</dd>
+</dl>
+<h4 class="method"><a name="set_value">set_value</a></h4>
+<p class="description"></p>
+<p class="code">
+void set_value (<br>
+&nbsp;&nbsp;&nbsp;&nbsp;const char *v<br>
+);</p>
+<h5 class="parameters">Parameters</h5>
+<dl>
+<dt>v</dt>
+</dl>
+<h4 class="method"><a name="~ppdcVariable">~ppdcVariable</a></h4>
+<p class="description"></p>
+<p class="code">
+void ~ppdcVariable (void);</p>
+<h2 class="title"><a name="TYPES">Data Types</a></h2>
+<h3 class="typedef"><a name="ppdc_cs_t">ppdc_cs_t</a></h3>
+<p class="description"></p>
+<p class="code">
+typedef enum ppdc_cs_t;
+</p>
+<h2 class="title"><a name="VARIABLES">Variables</a></h2>
+<h3 class="variable"><a name="ppdcSource">ppdcSource</a></h3>
+<p class="description">// Printer Driver Data</p>
+<p class="code">class ppdcSource;</p>
+<h2 class="title"><a name="ENUMERATIONS">Constants</a></h2>
+<h3 class="enumeration"><a name="ppdcCondFlags">ppdcCondFlags</a></h3>
+<p class="description">// Condition flags</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>PPDC_COND_NORMAL </dt>
+<dd class="description">Normal state</dd>
+<dt>PPDC_COND_SATISFIED </dt>
+<dd class="description">At least one condition satisfied</dd>
+<dt>PPDC_COND_SKIP </dt>
+<dd class="description">Skip state</dd>
+</dl>
+<h3 class="enumeration"><a name="ppdcDrvType">ppdcDrvType</a></h3>
+<p class="description">// Driver type</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>PPDC_DRIVER_CUSTOM </dt>
+<dd class="description">Custom driver</dd>
+<dt>PPDC_DRIVER_EPSON </dt>
+<dd class="description">rastertoepson driver</dd>
+<dt>PPDC_DRIVER_ESCP </dt>
+<dd class="description">rastertoescpx driver</dd>
+<dt>PPDC_DRIVER_HP </dt>
+<dd class="description">rastertohp driver</dd>
+<dt>PPDC_DRIVER_LABEL </dt>
+<dd class="description">rastertolabel/rastertodymo driver</dd>
+<dt>PPDC_DRIVER_MAX </dt>
+<dd class="description">Number of driver types defined</dd>
+<dt>PPDC_DRIVER_PCL </dt>
+<dd class="description">rastertopclx driver</dd>
+<dt>PPDC_DRIVER_PS </dt>
+<dd class="description">PostScript driver</dd>
+</dl>
+<h3 class="enumeration"><a name="ppdcFontStatus">ppdcFontStatus</a></h3>
+<p class="description">// Load status of font</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>PPDC_FONT_DISK </dt>
+<dd class="description">Font is on disk</dd>
+<dt>PPDC_FONT_ROM </dt>
+<dd class="description">Font is in ROM</dd>
+</dl>
+<h3 class="enumeration"><a name="ppdcLineEnding">ppdcLineEnding</a></h3>
+<p class="description">// Line endings</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>PPDC_CRLF </dt>
+<dd class="description">CR + LF</dd>
+<dt>PPDC_CRONLY </dt>
+<dd class="description">CR only</dd>
+<dt>PPDC_LFONLY </dt>
+<dd class="description">LF only</dd>
+</dl>
+<h3 class="enumeration"><a name="ppdcOptSection">ppdcOptSection</a></h3>
+<p class="description">// Option section</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>PPDC_SECTION_ANY </dt>
+<dd class="description">AnySetup</dd>
+<dt>PPDC_SECTION_DOCUMENT </dt>
+<dd class="description">DocumentSetup</dd>
+<dt>PPDC_SECTION_EXIT </dt>
+<dd class="description">ExitServer</dd>
+<dt>PPDC_SECTION_JCL </dt>
+<dd class="description">JCLSetup</dd>
+<dt>PPDC_SECTION_PAGE </dt>
+<dd class="description">PageSetup</dd>
+<dt>PPDC_SECTION_PROLOG </dt>
+<dd class="description">Prolog</dd>
+</dl>
+<h3 class="enumeration"><a name="ppdcOptType">ppdcOptType</a></h3>
+<p class="description">// Option type</p>
+<h4 class="constants">Constants</h4>
+<dl>
+<dt>PPDC_BOOLEAN </dt>
+<dd class="description">True/false option</dd>
+<dt>PPDC_PICKMANY </dt>
+<dd class="description">Multiple choices from list</dd>
+<dt>PPDC_PICKONE </dt>
+<dd class="description">Single choice from list</dd>
+</dl>
+</div>
+</body>
+</html>
index 103263a48c81bd52da2029e976521a7dd835b246..67d3920dedf94e6fadeb2d7af6a6f99b2e5418de 100644 (file)
@@ -27,6 +27,10 @@ PRE.command {
   margin-left: 36pt;
 }
 
+P.compact {
+  margin: 0;
+}
+
 P.example {
   font-style: italic;
   margin-left: 36pt;
@@ -391,17 +395,15 @@ page header structure.">cupsRasterWriteHeader2</a></li>
 </ul></li>
 <li><a href="#TYPES">Data Types</a><ul class="code">
        <li><a href="#cups_adv_t" title="AdvanceMedia attribute values">cups_adv_t</a></li>
-       <li><a href="#cups_bool_t" title="Types...">cups_bool_t</a></li>
-       <li><a href="#cups_cspace_t" title="CutMedia attribute values">cups_cspace_t</a></li>
-       <li><a href="#cups_cut_t" title="LeadingEdge attribute values">cups_cut_t</a></li>
-       <li><a href="#cups_edge_t" title="Jog attribute values">cups_edge_t</a></li>
+       <li><a href="#cups_bool_t" title="Boolean type">cups_bool_t</a></li>
+       <li><a href="#cups_cspace_t" title="cupsColorSpace attribute values">cups_cspace_t</a></li>
+       <li><a href="#cups_cut_t" title="CutMedia attribute values">cups_cut_t</a></li>
+       <li><a href="#cups_edge_t" title="LeadingEdge attribute values">cups_edge_t</a></li>
        <li><a href="#cups_interpret_cb_t" title="cupsRasterInterpretPPD callback function">cups_interpret_cb_t</a></li>
-       <li><a href="#cups_jog_t" title="cupsRasterOpen modes">cups_jog_t</a></li>
+       <li><a href="#cups_jog_t" title="Jog attribute values">cups_jog_t</a></li>
        <li><a href="#cups_mode_t" title="cupsRasterOpen modes">cups_mode_t</a></li>
        <li><a href="#cups_order_t" title="cupsColorOrder attribute values">cups_order_t</a></li>
-       <li><a href="#cups_orient_t" title="The page header structure contains the standard PostScript page device
-dictionary, along with some CUPS-specific parameters that are provided
-by the RIPs...">cups_orient_t</a></li>
+       <li><a href="#cups_orient_t" title="Orientation attribute values">cups_orient_t</a></li>
        <li><a href="#cups_page_header2_t" title="Version 2 page header ">cups_page_header2_t</a></li>
        <li><a href="#cups_page_header_t" title="Version 1 page header ">cups_page_header_t</a></li>
        <li><a href="#cups_raster_t" title="Raster stream data">cups_raster_t</a></li>
@@ -412,14 +414,14 @@ by the RIPs...">cups_orient_t</a></li>
 </ul></li>
 <li><a href="#ENUMERATIONS">Constants</a><ul class="code">
        <li><a href="#cups_adv_e" title="AdvanceMedia attribute values">cups_adv_e</a></li>
-       <li><a href="#cups_bool_e" title="Types...">cups_bool_e</a></li>
-       <li><a href="#cups_cspace_e" title="">cups_cspace_e</a></li>
-       <li><a href="#cups_cut_e" title="">cups_cut_e</a></li>
-       <li><a href="#cups_edge_e" title="">cups_edge_e</a></li>
-       <li><a href="#cups_jog_e" title="">cups_jog_e</a></li>
-       <li><a href="#cups_mode_e" title="">cups_mode_e</a></li>
+       <li><a href="#cups_bool_e" title="Boolean type">cups_bool_e</a></li>
+       <li><a href="#cups_cspace_e" title="cupsColorSpace attribute values">cups_cspace_e</a></li>
+       <li><a href="#cups_cut_e" title="CutMedia attribute values">cups_cut_e</a></li>
+       <li><a href="#cups_edge_e" title="LeadingEdge attribute values">cups_edge_e</a></li>
+       <li><a href="#cups_jog_e" title="Jog attribute values">cups_jog_e</a></li>
+       <li><a href="#cups_mode_e" title="cupsRasterOpen modes">cups_mode_e</a></li>
        <li><a href="#cups_order_e" title="cupsColorOrder attribute values">cups_order_e</a></li>
-       <li><a href="#cups_orient_e" title="">cups_orient_e</a></li>
+       <li><a href="#cups_orient_e" title="Orientation attribute values">cups_orient_e</a></li>
 </ul></li>
 <!--
   "$Id$"
@@ -809,22 +811,22 @@ the line buffer and as the number of bytes to write.</p>
 typedef enum <a href="#cups_adv_e">cups_adv_e</a> cups_adv_t;
 </p>
 <h3 class="typedef"><a name="cups_bool_t">cups_bool_t</a></h3>
-<p class="description">Types...</p>
+<p class="description">Boolean type</p>
 <p class="code">
 typedef enum <a href="#cups_bool_e">cups_bool_e</a> cups_bool_t;
 </p>
 <h3 class="typedef"><a name="cups_cspace_t">cups_cspace_t</a></h3>
-<p class="description">CutMedia attribute values</p>
+<p class="description">cupsColorSpace attribute values</p>
 <p class="code">
 typedef enum <a href="#cups_cspace_e">cups_cspace_e</a> cups_cspace_t;
 </p>
 <h3 class="typedef"><a name="cups_cut_t">cups_cut_t</a></h3>
-<p class="description">LeadingEdge attribute values</p>
+<p class="description">CutMedia attribute values</p>
 <p class="code">
 typedef enum <a href="#cups_cut_e">cups_cut_e</a> cups_cut_t;
 </p>
 <h3 class="typedef"><a name="cups_edge_t">cups_edge_t</a></h3>
-<p class="description">Jog attribute values</p>
+<p class="description">LeadingEdge attribute values</p>
 <p class="code">
 typedef enum <a href="#cups_edge_e">cups_edge_e</a> cups_edge_t;
 </p>
@@ -834,7 +836,7 @@ typedef enum <a href="#cups_edge_e">cups_edge_e</a> cups_edge_t;
 typedef int (*cups_interpret_cb_t)(<a href="#cups_page_header2_t">cups_page_header2_t</a> *header, int preferred_bits);
 </p>
 <h3 class="typedef"><a name="cups_jog_t">cups_jog_t</a></h3>
-<p class="description">cupsRasterOpen modes</p>
+<p class="description">Jog attribute values</p>
 <p class="code">
 typedef enum <a href="#cups_jog_e">cups_jog_e</a> cups_jog_t;
 </p>
@@ -849,9 +851,7 @@ typedef enum <a href="#cups_mode_e">cups_mode_e</a> cups_mode_t;
 typedef enum <a href="#cups_order_e">cups_order_e</a> cups_order_t;
 </p>
 <h3 class="typedef"><a name="cups_orient_t">cups_orient_t</a></h3>
-<p class="description">The page header structure contains the standard PostScript page device
-dictionary, along with some CUPS-specific parameters that are provided
-by the RIPs...</p>
+<p class="description">Orientation attribute values</p>
 <p class="code">
 typedef enum <a href="#cups_orient_e">cups_orient_e</a> cups_orient_t;
 </p>
@@ -1169,7 +1169,7 @@ factor not applied) </dd>
 <dd class="description">Advance the roll after this set</dd>
 </dl>
 <h3 class="enumeration"><a name="cups_bool_e">cups_bool_e</a></h3>
-<p class="description">Types...</p>
+<p class="description">Boolean type</p>
 <h4 class="constants">Constants</h4>
 <dl>
 <dt>CUPS_FALSE </dt>
@@ -1178,7 +1178,7 @@ factor not applied) </dd>
 <dd class="description">Logical true</dd>
 </dl>
 <h3 class="enumeration"><a name="cups_cspace_e">cups_cspace_e</a></h3>
-<p class="description"></p>
+<p class="description">cupsColorSpace attribute values</p>
 <h4 class="constants">Constants</h4>
 <dl>
 <dt>CUPS_CSPACE_CIELab <span class="info">&nbsp;CUPS 1.1.19/Mac OS X 10.3&nbsp;</span></dt>
@@ -1250,7 +1250,7 @@ light-cyan, light-magenta</dd>
 <dd class="description">Yellow, magenta, cyan, black</dd>
 </dl>
 <h3 class="enumeration"><a name="cups_cut_e">cups_cut_e</a></h3>
-<p class="description"></p>
+<p class="description">CutMedia attribute values</p>
 <h4 class="constants">Constants</h4>
 <dl>
 <dt>CUPS_CUT_FILE </dt>
@@ -1265,7 +1265,7 @@ light-cyan, light-magenta</dd>
 <dd class="description">Cut the roll after this set</dd>
 </dl>
 <h3 class="enumeration"><a name="cups_edge_e">cups_edge_e</a></h3>
-<p class="description"></p>
+<p class="description">LeadingEdge attribute values</p>
 <h4 class="constants">Constants</h4>
 <dl>
 <dt>CUPS_EDGE_BOTTOM </dt>
@@ -1278,7 +1278,7 @@ light-cyan, light-magenta</dd>
 <dd class="description">Leading edge is the top of the page</dd>
 </dl>
 <h3 class="enumeration"><a name="cups_jog_e">cups_jog_e</a></h3>
-<p class="description"></p>
+<p class="description">Jog attribute values</p>
 <h4 class="constants">Constants</h4>
 <dl>
 <dt>CUPS_JOG_FILE </dt>
@@ -1291,7 +1291,7 @@ light-cyan, light-magenta</dd>
 <dd class="description">Move pages after this set</dd>
 </dl>
 <h3 class="enumeration"><a name="cups_mode_e">cups_mode_e</a></h3>
-<p class="description"></p>
+<p class="description">cupsRasterOpen modes</p>
 <h4 class="constants">Constants</h4>
 <dl>
 <dt>CUPS_RASTER_READ </dt>
@@ -1313,7 +1313,7 @@ light-cyan, light-magenta</dd>
 <dd class="description">CCC ... MMM ... YYY ... KKK ...</dd>
 </dl>
 <h3 class="enumeration"><a name="cups_orient_e">cups_orient_e</a></h3>
-<p class="description"></p>
+<p class="description">Orientation attribute values</p>
 <h4 class="constants">Constants</h4>
 <dl>
 <dt>CUPS_ORIENT_0 </dt>
index 7a4579503782e05f4dd02fa6f063e25e0839576e..adc1828160959e6af4abdd232b61554ad221b5de 100644 (file)
@@ -27,6 +27,10 @@ PRE.command {
   margin-left: 36pt;
 }
 
+P.compact {
+  margin: 0;
+}
+
 P.example {
   font-style: italic;
   margin-left: 36pt;
index 134bbf15a150945607834b78fc53d72af80bb99f..3c29567d84d982815575122c5585a78064588d75 100644 (file)
@@ -27,6 +27,10 @@ PRE.command {
   margin-left: 36pt;
 }
 
+P.compact {
+  margin: 0;
+}
+
 P.example {
   font-style: italic;
   margin-left: 36pt;
index 3accf36d77b870e5bff11e6e3ea61af4ee6edd78..94aab64c4665bf992426edc5d9092083a48ef379 100644 (file)
@@ -27,6 +27,10 @@ PRE.command {
   margin-left: 36pt;
 }
 
+P.compact {
+  margin: 0;
+}
+
 P.example {
   font-style: italic;
   margin-left: 36pt;
index d638b4625c6331ea0f5027cc069158b8de073578..7b1e6cacd846ef4881705082aab5d0d696264fad 100644 (file)
@@ -155,52 +155,6 @@ This directive cannot be used with <A
 HREF="#AllowUser"><CODE>AllowUser</CODE></A></P>
 
 
-<H2 CLASS="title"><SPAN CLASS="info">CUPS 1.2</SPAN><A NAME="ErrorPolicy">ErrorPolicy</A></H2>
-
-<H3>Examples</H3>
-
-<PRE CLASS="command">
-&lt;Class name&gt;
-  ...
-  ErrorPolicy abort-job
-&lt;/Class&gt;
-</PRE>
-
-<H3>Description</H3>
-
-<P>The <CODE>ErrorPolicy</CODE> directive defines the policy that
-is used when a backend is unable to send a print job to the
-printer. The <CODE>lpadmin(8)</CODE> command sets the current
-error policy:</P>
-
-<PRE CLASS="command">
-<KBD>/usr/sbin/lpadmin -p classname -o printer-error-policy=stop-printer</KBD>
-</PRE>
-
-<P>The following values are supported:</P>
-
-<UL>
-
-       <LI><CODE>abort-job</CODE> - Abort the job and proceed
-       with the next job in the queue</LI>
-
-       <LI><CODE>retry-job</CODE> - Retry the job after waiting
-       for N seconds; the <VAR>cupsd.conf</VAR> <A
-       HREF="ref-cupsd-conf.html#JobRetryInterval"><CODE>JobRetryInterval</CODE></A>
-       directive controls the value of N</LI>
-
-       <LI><CODE>stop-printer</CODE> - Stop the printer and keep
-       the job for future printing; this is the default
-       value</LI>
-
-</UL>
-
-<P>This directive must appear inside a <A
-HREF="#Class"><CODE>Class</CODE></A> or <A
-HREF="#DefaultClass"><CODE>DefaultClass</CODE></A>
-section.</P>
-
-
 <H2 CLASS="title"><A NAME="Info">Info</A></H2>
 
 <H3>Examples</H3>
index a8d41967a4af05a1f498ba9cf3ba026b9c3fd58f..a5c178e1901abd0a8720f96eb25d5efc520562e0 100644 (file)
@@ -198,7 +198,10 @@ apihelp:
                --title "Printer Driver API" \
                --css ../doc/cups-printable.css \
                --header api-driver.header --intro api-driver.shtml \
+               api-driver.xml \
                driver.h $(LIBOBJS:.o=.c) >../doc/help/api-driver.html
+       mxmldoc --tokens help/api-driver.html >../doc/help/api-driver.tokens
+       $(RM) api-driver.xml
 
 framedhelp:
        mxmldoc --framed api-driver \
index 0f6d694113fce8308d3882c8af6fbc96001b661e..2bb7a7f5277af1efda57ec4d0b23efe3d2673995 100644 (file)
@@ -221,8 +221,11 @@ apihelp:
        mxmldoc --section "Programming" --title "Raster API" \
                --css ../doc/cups-printable.css \
                --header api-raster.header --intro api-raster.shtml \
+               api-raster.xml \
                ../cups/raster.h interpret.c raster.c \
                >../doc/help/api-raster.html
+       mxmldoc --tokens help/api-raster.html api-raster.xml >../doc/help/api-raster.tokens
+       $(RM) api-raster.xml
        mxmldoc --section "Programming" \
                --title "Developing PostScript Printer Drivers" \
                --css ../doc/cups-printable.css \
@@ -268,25 +271,6 @@ framedhelp:
                --header raster-driver.header \
                --intro raster-driver.shtml
 
-docsets:
-       echo Generating CUPS API documentation sets...
-       ../tools/makedocset --docset org.cups.raster.docset \
-               --title "Raster API" \
-               --header api-raster.header --intro api-raster.shtml \
-               ../cups/raster.h interpret.c raster.c
-       ../tools/makedocset --docset org.cups.postscript-driver.docset \
-               --title "Developing PostScript Printer Drivers" \
-               --header postscript-driver.header \
-               --intro postscript-driver.shtml
-       ../tools/makedocset --docset org.cups.ppd-compiler.docset \
-               --title "Introduction to the PPD Compiler" \
-               --header ppd-compiler.header \
-               --intro ppd-compiler.shtml
-       ../tools/makedocset --docset org.cups.raster-driver.docset \
-               --title "Developing Raster Printer Drivers" \
-               --header raster-driver.header \
-               --intro raster-driver.shtml
-
 
 #
 # bannertops
index 70342b1acaec771198eadeae40ba6af45bb824c9..4bd8ced9dacf76a74d28d3ec02526d757008708f 100644 (file)
@@ -589,7 +589,11 @@ write_banner(banner_file_t *banner,        /* I - Banner file */
 
     printf("%%%%Page: %s %d\n", i == 1 ? "coverpage" : "coverback", i);
     puts("gsave");
-    printf("%.1f %.1f translate\n", PageLeft, PageBottom);
+    if (i == 1)
+      printf("%.1f %.1f translate\n", PageLeft, PageBottom);
+    else
+      printf("%.1f %.1f translate\n", PageWidth - PageRight,
+             PageLength - PageRight);
     puts("0 setgray");
 
     y = info_top;
index 71a529dd88d40a0f1f1c80986605483cb3cfd4d5..09d9041db8a4d3df8de095e0531f45a0001b5fae 100644 (file)
@@ -3,7 +3,7 @@
 #
 #   Message catalog template for the Common UNIX Printing System (CUPS).
 #
-#   Copyright 2007-2008 by Apple Inc.
+#   Copyright 2007-2009 by Apple Inc.
 #   Copyright 2005-2007 by Easy Software Products.
 #
 #   These coded instructions, statements, and computer programs are the
 # where "LL" is your locale.
 #
 msgid ""
-msgstr ""
-"Project-Id-Version: CUPS 1.4\n"
-"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2009-03-23 14:56-0700\n"
-"PO-Revision-Date: 2009-02-20 16:43+0900\n"
-"Last-Translator: OPFC TRANSCUPS <opfc-transcups@sourceforge.jp>\n"
-"Language-Team: OPFC TRANSCUPS <opfc-transcups@sourceforge.jp>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
+msgstr "Project-Id-Version: CUPS 1.4\nReport-Msgid-Bugs-To: http://www.cups.org/str.php\nPOT-Creation-Date: 2009-03-23 14:56-0700\nPO-Revision-Date: 2009-02-20 16:43+0900\nLast-Translator: OPFC TRANSCUPS <opfc-transcups@sourceforge.jp>\nLanguage-Team: OPFC TRANSCUPS <opfc-transcups@sourceforge.jp>\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\n"
 msgid "\t\t(all)\n"
 msgstr "\t\t(すべて)\n"
-
 msgid "\t\t(none)\n"
 msgstr "\t\t(なし)\n"
-
-#, c-format
 msgid "\t%d entries\n"
 msgstr "\t%d エントリー\n"
-
 msgid "\tAfter fault: continue\n"
 msgstr "\t失敗後: 継続\n"
-
 msgid "\tAlerts:"
 msgstr "\t警告:"
-
 msgid "\tBanner required\n"
 msgstr "\tバナーが必要\n"
-
 msgid "\tCharset sets:\n"
 msgstr "\t文字セット:\n"
-
 msgid "\tConnection: direct\n"
 msgstr "\t接続: 直結\n"
-
 msgid "\tConnection: remote\n"
 msgstr "\t接続: リモート\n"
-
 msgid "\tDefault page size:\n"
 msgstr "\tデフォルト用紙サイズ:\n"
-
 msgid "\tDefault pitch:\n"
 msgstr "\tデフォルトピッチ:\n"
-
 msgid "\tDefault port settings:\n"
 msgstr "\tデフォルトポート設定:\n"
-
-#, c-format
 msgid "\tDescription: %s\n"
 msgstr "\t説明: %s\n"
-
-msgid ""
-"\tForm mounted:\n"
-"\tContent types: any\n"
-"\tPrinter types: unknown\n"
-msgstr ""
-"\t設定されたフォーム:\n"
-"\tコンテンツの種類: すべて\n"
-"\tプリンターの種類: 不明\n"
-
+msgid "\tForm mounted:\n\tContent types: any\n\tPrinter types: unknown\n"
+msgstr "\t設定されたフォーム:\n\tコンテンツの種類: すべて\n\tプリンターの種類: 不明\n"
 msgid "\tForms allowed:\n"
 msgstr "\t許可されているフォーム:\n"
-
-#, c-format
 msgid "\tInterface: %s.ppd\n"
 msgstr "\tインターフェイス: %s.ppd\n"
-
-#, c-format
 msgid "\tInterface: %s/interfaces/%s\n"
 msgstr "\tインターフェイス: %s/interfaces/%s\n"
-
-#, c-format
 msgid "\tInterface: %s/ppd/%s.ppd\n"
 msgstr "\tインターフェイス: %s/ppd/%s.ppd\n"
-
-#, c-format
 msgid "\tLocation: %s\n"
 msgstr "\t場所: %s\n"
-
 msgid "\tOn fault: no alert\n"
 msgstr "\t失敗時: 警告なし\n"
-
 msgid "\tUsers allowed:\n"
 msgstr "\t許可されているユーザー:\n"
-
 msgid "\tUsers denied:\n"
 msgstr "\t拒否されているユーザー:\n"
-
 msgid "\tdaemon present\n"
 msgstr "\tデーモンは提供されています\n"
-
 msgid "\tno entries\n"
 msgstr "\tエントリーがありません\n"
-
-#, c-format
 msgid "\tprinter is on device '%s' speed -1\n"
 msgstr "\tデバイス '%s' 上のプリンター 速度 -1\n"
-
 msgid "\tprinting is disabled\n"
 msgstr "\t印刷は無効です\n"
-
 msgid "\tprinting is enabled\n"
 msgstr "\t印刷は有効です\n"
-
-#, c-format
 msgid "\tqueued for %s\n"
 msgstr "\t%s にキューしました\n"
-
 msgid "\tqueuing is disabled\n"
 msgstr "\tキューは無効です\n"
-
 msgid "\tqueuing is enabled\n"
 msgstr "\tキューは有効です\n"
-
 msgid "\treason unknown\n"
 msgstr "\t未知の理由\n"
-
-msgid ""
-"\n"
-"    DETAILED CONFORMANCE TEST RESULTS\n"
-msgstr ""
-"\n"
-"    適合テスト結果詳細\n"
-
+msgid "\n    DETAILED CONFORMANCE TEST RESULTS\n"
+msgstr "\n    適合テスト結果詳細\n"
 msgid "                REF: Page 15, section 3.1.\n"
 msgstr "                参照: 15 ページ、セクション 3.1。\n"
-
 msgid "                REF: Page 15, section 3.2.\n"
 msgstr "                参照: 15 ページ、セクション 3.2。\n"
-
 msgid "                REF: Page 19, section 3.3.\n"
 msgstr "                参照: 19 ページ、セクション 3.3。\n"
-
 msgid "                REF: Page 20, section 3.4.\n"
 msgstr "                参照: 20 ページ、セクション 3.4。\n"
-
 msgid "                REF: Page 27, section 3.5.\n"
 msgstr "                参照: 27 ページ、セクション 3.5。\n"
-
 msgid "                REF: Page 42, section 5.2.\n"
 msgstr "                参照: 42 ページ、セクション 5.2。\n"
-
 msgid "                REF: Pages 16-17, section 3.2.\n"
 msgstr "                参照: 16-17 ページ、セクション 3.2。\n"
-
 msgid "                REF: Pages 42-45, section 5.2.\n"
 msgstr "                参照: 42-45 ページ、セクション 5.2。\n"
-
 msgid "                REF: Pages 45-46, section 5.2.\n"
 msgstr "                参照: 45-46 ページ、セクション 5.2。\n"
-
 msgid "                REF: Pages 48-49, section 5.2.\n"
 msgstr "                参照: 48-49 ページ、セクション 5.2。\n"
-
 msgid "                REF: Pages 52-54, section 5.2.\n"
 msgstr "                参照: 52-54 ページ、セクション 5.2。\n"
-
-#, c-format
 msgid "        %-39.39s %.0f bytes\n"
 msgstr "        %-39.39s %.0f バイト\n"
-
-#, c-format
 msgid "        PASS    Default%s\n"
 msgstr "        合格    Default%s\n"
-
 msgid "        PASS    DefaultImageableArea\n"
 msgstr "        合格    DefaultImageableArea\n"
-
 msgid "        PASS    DefaultPaperDimension\n"
 msgstr "        合格    DefaultPaperDimension\n"
-
 msgid "        PASS    FileVersion\n"
 msgstr "        合格    FileVersion\n"
-
 msgid "        PASS    FormatVersion\n"
 msgstr "        合格    FormatVersion\n"
-
 msgid "        PASS    LanguageEncoding\n"
 msgstr "        合格    LanguageEncoding\n"
-
 msgid "        PASS    LanguageVersion\n"
 msgstr "        合格    LanguageVersion\n"
-
 msgid "        PASS    Manufacturer\n"
 msgstr "        合格    Manufacturer\n"
-
 msgid "        PASS    ModelName\n"
 msgstr "        合格    ModelName\n"
-
 msgid "        PASS    NickName\n"
 msgstr "        合格    NickName\n"
-
 msgid "        PASS    PCFileName\n"
 msgstr "        合格    PCFileName\n"
-
 msgid "        PASS    PSVersion\n"
 msgstr "        合格    PSVersion\n"
-
 msgid "        PASS    PageRegion\n"
 msgstr "        合格    PageRegion\n"
-
 msgid "        PASS    PageSize\n"
 msgstr "        合格    PageSize\n"
-
 msgid "        PASS    Product\n"
 msgstr "        合格    Product\n"
-
 msgid "        PASS    ShortNickName\n"
 msgstr "        合格    ShortNickName\n"
-
-#, c-format
-msgid ""
-"        WARN    \"%s %s\" conflicts with \"%s %s\"\n"
-"                (constraint=\"%s %s %s %s\")\n"
-msgstr ""
-"        警告    \"%s %s\" は \"%s %s\" と競合します\n"
-"                (禁則=\"%s %s %s %s\")\n"
-
-#, c-format
+msgid "        WARN    \"%s %s\" conflicts with \"%s %s\"\n                (constraint=\"%s %s %s %s\")\n"
+msgstr "        警告    \"%s %s\" は \"%s %s\" と競合します\n                (禁則=\"%s %s %s %s\")\n"
 msgid "        WARN    %s has no corresponding options!\n"
 msgstr "        警告    %s は相当するオプションがありません!\n"
-
-#, c-format
-msgid ""
-"        WARN    %s shares a common prefix with %s\n"
-"                REF: Page 15, section 3.2.\n"
-msgstr ""
-"        警告    %s は %s と一般プレフィックスを共有します。\n"
-"                参照: 15 ページ、セクション 3.2。\n"
-
+msgid "        WARN    %s shares a common prefix with %s\n                REF: Page 15, section 3.2.\n"
+msgstr "        警告    %s は %s と一般プレフィックスを共有します。\n                参照: 15 ページ、セクション 3.2。\n"
 msgid "        WARN    Default choices conflicting!\n"
 msgstr "        警告    デフォルトの選択肢が競合しています!\n"
-
-#, c-format
-msgid ""
-"        WARN    Duplex option keyword %s may not work as expected and should "
-"be named Duplex!\n"
-"                REF: Page 122, section 5.17\n"
-msgstr ""
-"        警告    Duplex オプションキーワード %s は期待通りに動作しないかもしれ"
-"ません。また、 Duplex という名前であるべきです!\n"
-"                参照: 122 ページ、セクション 5.17\n"
-
-msgid ""
-"        WARN    File contains a mix of CR, LF, and CR LF line endings!\n"
-msgstr ""
-"        警告    ファイルが CR、LF、CR LF の行末を混在して含んでいます!\n"
-
-msgid ""
-"        WARN    LanguageEncoding required by PPD 4.3 spec.\n"
-"                REF: Pages 56-57, section 5.3.\n"
-msgstr ""
-"        警告    LanguageEncoding は PPD 4.3 仕様で必須です。\n"
-"                参照: 56-57 ページ、セクション 5.3。\n"
-
-#, c-format
+msgid "        WARN    Duplex option keyword %s may not work as expected and should be named Duplex!\n                REF: Page 122, section 5.17\n"
+msgstr "        警告    Duplex オプションキーワード %s は期待通りに動作しないかもしれません。また、 Duplex という名前であるべきです!\n                参照: 122 ページ、セクション 5.17\n"
+msgid "        WARN    File contains a mix of CR, LF, and CR LF line endings!\n"
+msgstr "        警告    ファイルが CR、LF、CR LF の行末を混在して含んでいます!\n"
+msgid "        WARN    LanguageEncoding required by PPD 4.3 spec.\n                REF: Pages 56-57, section 5.3.\n"
+msgstr "        警告    LanguageEncoding は PPD 4.3 仕様で必須です。\n                参照: 56-57 ページ、セクション 5.3。\n"
 msgid "        WARN    Line %d only contains whitespace!\n"
 msgstr "        警告    %d 行が空白だけです!\n"
-
-msgid ""
-"        WARN    Manufacturer required by PPD 4.3 spec.\n"
-"                REF: Pages 58-59, section 5.3.\n"
-msgstr ""
-"        警告    Manufacturer は PPD 4.3 仕様で必須です。\n"
-"                参照: 58-59 ページ、セクション 5.3。\n"
-
-msgid ""
-"        WARN    Non-Windows PPD files should use lines ending with only LF, "
-"not CR LF!\n"
-msgstr ""
-"        警告    非 Windows PPD ファイルは、CR LF でなく LF のみを行末に使うべ"
-"きです!\n"
-
-#, c-format
-msgid ""
-"        WARN    Obsolete PPD version %.1f!\n"
-"                REF: Page 42, section 5.2.\n"
-msgstr ""
-"        警告    PPD バージョン %.1f は現在使われていません!\n"
-"                参照: 42 ページ、セクション 5.2。\n"
-
-msgid ""
-"        WARN    PCFileName longer than 8.3 in violation of PPD spec.\n"
-"                REF: Pages 61-62, section 5.3.\n"
-msgstr ""
-"        警告    8.3 文字より長い PCFileName は PPD 仕様違反です。\n"
-"                参照: 61-62 ページ、セクション 5.3。\n"
-
-msgid ""
-"        WARN    Protocols contains PJL but JCL attributes are not set.\n"
-"                REF: Pages 78-79, section 5.7.\n"
-msgstr ""
-"        警告    プロトコルが PJL を含んでいますが JCL 属性が設定されていませ"
-"ん。\n"
-"                参照: 78-79 ページ、セクション 5.7。\n"
-
-msgid ""
-"        WARN    Protocols contains both PJL and BCP; expected TBCP.\n"
-"                REF: Pages 78-79, section 5.7.\n"
-msgstr ""
-"        警告    プロトコルが PJL と BCP の両方を含んでいます; TBCP を想定しま"
-"す。\n"
-"                参照: 78-79 ページ、セクション 5.7。\n"
-
-msgid ""
-"        WARN    ShortNickName required by PPD 4.3 spec.\n"
-"                REF: Pages 64-65, section 5.3.\n"
-msgstr ""
-"        警告    ShortNickName は PPD 4.3 仕様で必須です。\n"
-"                参照: 64-65 ページ、セクション 5.3。\n"
-
-#, c-format
+msgid "        WARN    Manufacturer required by PPD 4.3 spec.\n                REF: Pages 58-59, section 5.3.\n"
+msgstr "        警告    Manufacturer は PPD 4.3 仕様で必須です。\n                参照: 58-59 ページ、セクション 5.3。\n"
+msgid "        WARN    Non-Windows PPD files should use lines ending with only LF, not CR LF!\n"
+msgstr "        警告    非 Windows PPD ファイルは、CR LF でなく LF のみを行末に使うべきです!\n"
+msgid "        WARN    Obsolete PPD version %.1f!\n                REF: Page 42, section 5.2.\n"
+msgstr "        警告    PPD バージョン %.1f は現在使われていません!\n                参照: 42 ページ、セクション 5.2。\n"
+msgid "        WARN    PCFileName longer than 8.3 in violation of PPD spec.\n                REF: Pages 61-62, section 5.3.\n"
+msgstr "        警告    8.3 文字より長い PCFileName は PPD 仕様違反です。\n                参照: 61-62 ページ、セクション 5.3。\n"
+msgid "        WARN    Protocols contains PJL but JCL attributes are not set.\n                REF: Pages 78-79, section 5.7.\n"
+msgstr "        警告    プロトコルが PJL を含んでいますが JCL 属性が設定されていません。\n                参照: 78-79 ページ、セクション 5.7。\n"
+msgid "        WARN    Protocols contains both PJL and BCP; expected TBCP.\n                REF: Pages 78-79, section 5.7.\n"
+msgstr "        警告    プロトコルが PJL と BCP の両方を含んでいます; TBCP を想定します。\n                参照: 78-79 ページ、セクション 5.7。\n"
+msgid "        WARN    ShortNickName required by PPD 4.3 spec.\n                REF: Pages 64-65, section 5.3.\n"
+msgstr "        警告    ShortNickName は PPD 4.3 仕様で必須です。\n                参照: 64-65 ページ、セクション 5.3。\n"
 msgid "      %s  %s %s does not exist!\n"
 msgstr "      %s  %s %s が存在しません!\n"
-
-#, c-format
 msgid "      %s  %s file \"%s\" has the wrong capitalization!\n"
 msgstr ""
-
-#, c-format
-msgid ""
-"      %s  Bad %s choice %s!\n"
-"                REF: Page 122, section 5.17\n"
-msgstr ""
-"      %s  不正な %s が %s を選んでいます!\n"
-"                参照: 122 ページ、セクション 5.17\n"
-
-#, c-format
+msgid "      %s  Bad %s choice %s!\n                REF: Page 122, section 5.17\n"
+msgstr "      %s  不正な %s が %s を選んでいます!\n                参照: 122 ページ、セクション 5.17\n"
 msgid "      %s  Bad UTF-8 \"%s\" translation string for option %s!\n"
 msgstr "      %s  不正な UTF-8 \"%s\" 翻訳文字列 (オプション %s 用)です!\n"
-
-#, c-format
-msgid ""
-"      %s  Bad UTF-8 \"%s\" translation string for option %s, choice %s!\n"
-msgstr ""
-"      %s  不正な UTF-8 \"%s\" 翻訳文字列 (オプション %s 、選択 %s)です!\n"
-
-#, c-format
+msgid "      %s  Bad UTF-8 \"%s\" translation string for option %s, choice %s!\n"
+msgstr "      %s  不正な UTF-8 \"%s\" 翻訳文字列 (オプション %s 、選択 %s)です!\n"
 msgid "      %s  Bad cupsFilter value \"%s\"!\n"
 msgstr "      %s  不正な値が cupsFilter に設定されています \"%s\"!\n"
-
-#, c-format
 msgid "      %s  Bad cupsICCProfile %s!\n"
 msgstr "      %s  不正な cupsICCProfile %sです!\n"
-
-#, c-format
 msgid "      %s  Bad cupsPreFilter value \"%s\"!\n"
 msgstr "      %s  不正な値が cupsPreFilter に設定されています \"%s\"!\n"
-
-#, c-format
 msgid "      %s  Bad cupsUIConstraints %s: \"%s\"!\n"
 msgstr "      %s  不正な cupsUIConstraints %s: \"%s\"です!\n"
-
-#, c-format
 msgid "      %s  Bad language \"%s\"!\n"
 msgstr "      %s  無効な言語 \"%s\"です!\n"
-
-#, c-format
 msgid "      %s  Bad spelling of %s - should be %s!\n"
 msgstr ""
-
-#, c-format
 msgid "      %s  Cannot provide both APScanAppPath and APScanAppBundleID!\n"
 msgstr ""
-
-#, c-format
 msgid "      %s  Empty cupsUIConstraints %s!\n"
 msgstr "      %s 空の cupsUIConstraints %sです!\n"
-
-#, c-format
 msgid "      %s  Missing \"%s\" translation string for option %s!\n"
 msgstr "      %s  \"%s\" 翻訳文字列 (オプション %s 用) が見つかりません!\n"
-
-#, c-format
 msgid "      %s  Missing \"%s\" translation string for option %s, choice %s!\n"
-msgstr ""
-"      %s  \"%s\" 翻訳文字列 (オプション %s 、選択 %s) が見つかりません!\n"
-
-#, c-format
+msgstr "      %s  \"%s\" 翻訳文字列 (オプション %s 、選択 %s) が見つかりません!\n"
 msgid "      %s  Missing APDialogExtension file \"%s\"\n"
 msgstr "      %s  APDialogExtension ファイル \"%s\" が見つかりません\n"
-
-#, c-format
 msgid "      %s  Missing APPrinterIconPath file \"%s\"\n"
 msgstr "      %s  APPrinterIconPath ファイル \"%s\" が見つかりません\n"
-
-#, c-format
 msgid "      %s  Missing APPrinterLowInkTool file \"%s\"\n"
 msgstr ""
-
-#, c-format
 msgid "      %s  Missing APPrinterUtilityPath file \"%s\"\n"
 msgstr ""
-
-#, c-format
 msgid "      %s  Missing APScanAppPath file \"%s\"\n"
 msgstr ""
-
-#, c-format
-msgid ""
-"      %s  Missing REQUIRED PageRegion option!\n"
-"                REF: Page 100, section 5.14.\n"
+msgid "      %s  Missing REQUIRED PageRegion option!\n                REF: Page 100, section 5.14.\n"
 msgstr ""
-
-#, c-format
-msgid ""
-"      %s  Missing REQUIRED PageSize option!\n"
-"                REF: Page 99, section 5.14.\n"
+msgid "      %s  Missing REQUIRED PageSize option!\n                REF: Page 99, section 5.14.\n"
 msgstr ""
-
-#, c-format
 msgid "      %s  Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\"!\n"
-msgstr ""
-"      %s  選択 *%s %s が UIConstraints \"*%s %s *%s %s\" 内に見つかりませ"
-"ん!\n"
-
-#, c-format
+msgstr "      %s  選択 *%s %s が UIConstraints \"*%s %s *%s %s\" 内に見つかりません!\n"
 msgid "      %s  Missing choice *%s %s in cupsUIConstraints %s: \"%s\"!\n"
-msgstr ""
-"      %s  選択 *%s %s が cupsUIConstraints %s: \"%s\" 内に見つかりません!\n"
-
-#, c-format
+msgstr "      %s  選択 *%s %s が cupsUIConstraints %s: \"%s\" 内に見つかりません!\n"
 msgid "      %s  Missing cupsFilter file \"%s\"\n"
 msgstr "      %s  cupsFilter ファイル \"%s\" が見つかりません!\n"
-
-#, c-format
 msgid "      %s  Missing cupsICCProfile file \"%s\"!\n"
 msgstr "      %s  cupsICCProfile ファイル \"%s\" が見つかりません!\n"
-
-#, c-format
 msgid "      %s  Missing cupsPreFilter file \"%s\"\n"
 msgstr "      %s  cupsPreFilter ファイル \"%s\" が見つかりません!\n"
-
-#, c-format
 msgid "      %s  Missing cupsUIResolver %s!\n"
 msgstr "      %s  cupsUIResolver ファイル %s が見つかりません!\n"
-
-#, c-format
 msgid "      %s  Missing option %s in UIConstraints \"*%s %s *%s %s\"!\n"
-msgstr ""
-"      %s  オプション %s がUIConstraints \"*%s %s *%s %s\" に見つかりません!\n"
-
-#, c-format
+msgstr "      %s  オプション %s がUIConstraints \"*%s %s *%s %s\" に見つかりません!\n"
 msgid "      %s  Missing option %s in cupsUIConstraints %s: \"%s\"!\n"
-msgstr ""
-"      %s  オプション %s がcupsUIConstraints %s に見つかりません!: \"%s\"\n"
-
-#, c-format
+msgstr "      %s  オプション %s がcupsUIConstraints %s に見つかりません!: \"%s\"\n"
 msgid "      %s  No base translation \"%s\" is included in file!\n"
 msgstr "      %s  ファイルにベース翻訳文字列 \"%s\" がありません!\n"
-
-#, c-format
-msgid ""
-"      %s  Non-standard size name \"%s\"!\n"
-"                REF: Page 187, section B.2.\n"
+msgid "      %s  Non-standard size name \"%s\"!\n                REF: Page 187, section B.2.\n"
 msgstr ""
-
-#, c-format
-msgid ""
-"      %s  REQUIRED %s does not define choice None!\n"
-"                REF: Page 122, section 5.17\n"
-msgstr ""
-"      %s  必須の %s が選択肢 None を定義していません!\n"
-"                参照: 122 ページ、セクション 5.17\n"
-
-#, c-format
+msgid "      %s  REQUIRED %s does not define choice None!\n                REF: Page 122, section 5.17\n"
+msgstr "      %s  必須の %s が選択肢 None を定義していません!\n                参照: 122 ページ、セクション 5.17\n"
 msgid "      %s  Size \"%s\" defined for %s but not for %s!\n"
 msgstr ""
-
-#, c-format
 msgid "      %s  Size \"%s\" has unexpected dimensions (%gx%g)!\n"
 msgstr ""
-
-#, c-format
 msgid "      %s  cupsICCProfile %s hash value collides with %s!\n"
 msgstr "      %s  cupsICCProfileのハッシュ値 %s が %s と一致しません!\n"
-
-#, c-format
 msgid "      %s  cupsUIResolver %s causes a loop!\n"
 msgstr "      %s  cupsUIResolverの %s がループしています!\n"
-
-#, c-format
-msgid ""
-"      %s  cupsUIResolver %s does not list at least two different options!\n"
+msgid "      %s  cupsUIResolver %s does not list at least two different options!\n"
 msgstr ""
-
-#, c-format
 msgid "      **FAIL**  %s choice names %s and %s differ only by case!\n"
-msgstr ""
-"      **失敗**  %s が選択した %s と %s は大文字/小文字のみが違うだけです!\n"
-
-#, c-format
-msgid ""
-"      **FAIL**  %s must be 1284DeviceID!\n"
-"                REF: Page 72, section 5.5\n"
-msgstr ""
-"      **失敗**  %s は 1284DeviceID でなければなりません!\n"
-"                参照: 72 ページ、セクション 5.5\n"
-
-#, c-format
-msgid ""
-"      **FAIL**  BAD Default%s %s\n"
-"                REF: Page 40, section 4.5.\n"
-msgstr ""
-"      **失敗**  不正な Default%s %s\n"
-"                参照: 40 ページ、セクション 4.5。\n"
-
-#, c-format
-msgid ""
-"      **FAIL**  BAD DefaultImageableArea %s!\n"
-"                REF: Page 102, section 5.15.\n"
-msgstr ""
-"      **失敗**  %s は不正な DefaultImageableArea です!\n"
-"                参照: 102 ページ、セクション 5.15。\n"
-
-#, c-format
-msgid ""
-"      **FAIL**  BAD DefaultPaperDimension %s!\n"
-"                REF: Page 103, section 5.15.\n"
-msgstr ""
-"      **失敗**  %s は不正な DefaultPaperDimension です!\n"
-"                参照: 103 ページ、セクション 5.15。\n"
-
-msgid ""
-"      **FAIL**  BAD JobPatchFile attribute in file\n"
-"                REF: Page 24, section 3.4.\n"
-msgstr ""
-"      **失敗**  ファイルに不正な JobPatchFile 属性があります\n"
-"                参照: 24 ページ、セクション 3.4。\n"
-
-msgid ""
-"      **FAIL**  BAD Manufacturer (should be \"HP\")\n"
-"                REF: Page 211, table D.1.\n"
-msgstr ""
-"      **失敗**  不正な Manufacturer (\"HP\" でなければなりません)\n"
-"                参照: 211 ページ、表 D.1。\n"
-
-msgid ""
-"      **FAIL**  BAD Manufacturer (should be \"Oki\")\n"
-"                REF: Page 211, table D.1.\n"
-msgstr ""
-"      **失敗**  不正な Manufacturer (\"Oki\" でなければなりません)\n"
-"                参照: 211 ページ、表 D.1。\n"
-
-#, c-format
-msgid ""
-"      **FAIL**  BAD ModelName - \"%c\" not allowed in string.\n"
-"                REF: Pages 59-60, section 5.3.\n"
-msgstr ""
-"      **失敗**  不正な ModelName - 文字列に \"%c\" は許可されていません。\n"
-"                参照: 59-60 ページ、セクション 5.3。\n"
-
-msgid ""
-"      **FAIL**  BAD PSVersion - not \"(string) int\".\n"
-"                REF: Pages 62-64, section 5.3.\n"
-msgstr ""
-"      **失敗**  不正な PSVersion - \"(文字列) 整数\" ではありません。\n"
-"                参照: 62-64 ページ、セクション 5.3。\n"
-
-msgid ""
-"      **FAIL**  BAD Product - not \"(string)\".\n"
-"                REF: Page 62, section 5.3.\n"
-msgstr ""
-"      **失敗**  不正な Product - \"(文字列)\" ではありません。\n"
-"                参照: 62 ページ、セクション 5.3。\n"
-
-msgid ""
-"      **FAIL**  BAD ShortNickName - longer than 31 chars.\n"
-"                REF: Pages 64-65, section 5.3.\n"
-msgstr ""
-"      **失敗**  不正な ShortNickName - 31 文字を超えています。\n"
-"                参照: 64-65 ページ、セクション 5.3。\n"
-
-#, c-format
-msgid ""
-"      **FAIL**  Bad %s choice %s!\n"
-"                REF: Page 84, section 5.9\n"
-msgstr ""
-"      **失敗**  不正な %s が %s を選んでいます!\n"
-"                参照: 84 ページ、セクション 5.9\n"
-
-#, c-format
-msgid ""
-"      **FAIL**  Bad FileVersion \"%s\"\n"
-"                REF: Page 56, section 5.3.\n"
-msgstr ""
-"      **失敗**  不正なFileVersion \"%s\"\n"
-"                参照: 56 ページ、セクション 5.3。\n"
-
-#, c-format
-msgid ""
-"      **FAIL**  Bad FormatVersion \"%s\"\n"
-"                REF: Page 56, section 5.3.\n"
-msgstr ""
-"      **失敗**  FormatVersion が違います \"%s\"\n"
-"                参照: 56 ページ、セクション 5.3。\n"
-
-#, c-format
+msgstr "      **失敗**  %s が選択した %s と %s は大文字/小文字のみが違うだけです!\n"
+msgid "      **FAIL**  %s must be 1284DeviceID!\n                REF: Page 72, section 5.5\n"
+msgstr "      **失敗**  %s は 1284DeviceID でなければなりません!\n                参照: 72 ページ、セクション 5.5\n"
+msgid "      **FAIL**  BAD Default%s %s\n                REF: Page 40, section 4.5.\n"
+msgstr "      **失敗**  不正な Default%s %s\n                参照: 40 ページ、セクション 4.5。\n"
+msgid "      **FAIL**  BAD DefaultImageableArea %s!\n                REF: Page 102, section 5.15.\n"
+msgstr "      **失敗**  %s は不正な DefaultImageableArea です!\n                参照: 102 ページ、セクション 5.15。\n"
+msgid "      **FAIL**  BAD DefaultPaperDimension %s!\n                REF: Page 103, section 5.15.\n"
+msgstr "      **失敗**  %s は不正な DefaultPaperDimension です!\n                参照: 103 ページ、セクション 5.15。\n"
+msgid "      **FAIL**  BAD JobPatchFile attribute in file\n                REF: Page 24, section 3.4.\n"
+msgstr "      **失敗**  ファイルに不正な JobPatchFile 属性があります\n                参照: 24 ページ、セクション 3.4。\n"
+msgid "      **FAIL**  BAD Manufacturer (should be \"HP\")\n                REF: Page 211, table D.1.\n"
+msgstr "      **失敗**  不正な Manufacturer (\"HP\" でなければなりません)\n                参照: 211 ページ、表 D.1。\n"
+msgid "      **FAIL**  BAD Manufacturer (should be \"Oki\")\n                REF: Page 211, table D.1.\n"
+msgstr "      **失敗**  不正な Manufacturer (\"Oki\" でなければなりません)\n                参照: 211 ページ、表 D.1。\n"
+msgid "      **FAIL**  BAD ModelName - \"%c\" not allowed in string.\n                REF: Pages 59-60, section 5.3.\n"
+msgstr "      **失敗**  不正な ModelName - 文字列に \"%c\" は許可されていません。\n                参照: 59-60 ページ、セクション 5.3。\n"
+msgid "      **FAIL**  BAD PSVersion - not \"(string) int\".\n                REF: Pages 62-64, section 5.3.\n"
+msgstr "      **失敗**  不正な PSVersion - \"(文字列) 整数\" ではありません。\n                参照: 62-64 ページ、セクション 5.3。\n"
+msgid "      **FAIL**  BAD Product - not \"(string)\".\n                REF: Page 62, section 5.3.\n"
+msgstr "      **失敗**  不正な Product - \"(文字列)\" ではありません。\n                参照: 62 ページ、セクション 5.3。\n"
+msgid "      **FAIL**  BAD ShortNickName - longer than 31 chars.\n                REF: Pages 64-65, section 5.3.\n"
+msgstr "      **失敗**  不正な ShortNickName - 31 文字を超えています。\n                参照: 64-65 ページ、セクション 5.3。\n"
+msgid "      **FAIL**  Bad %s choice %s!\n                REF: Page 84, section 5.9\n"
+msgstr "      **失敗**  不正な %s が %s を選んでいます!\n                参照: 84 ページ、セクション 5.9\n"
+msgid "      **FAIL**  Bad FileVersion \"%s\"\n                REF: Page 56, section 5.3.\n"
+msgstr "      **失敗**  不正なFileVersion \"%s\"\n                参照: 56 ページ、セクション 5.3。\n"
+msgid "      **FAIL**  Bad FormatVersion \"%s\"\n                REF: Page 56, section 5.3.\n"
+msgstr "      **失敗**  FormatVersion が違います \"%s\"\n                参照: 56 ページ、セクション 5.3。\n"
 msgid "      **FAIL**  Bad LanguageEncoding %s - must be ISOLatin1!\n"
-msgstr ""
-"      **失敗**  無効な LanguageEncoding %s - ISOLatin1 でなければなりませ"
-"ん!\n"
-
-#, c-format
+msgstr "      **失敗**  無効な LanguageEncoding %s - ISOLatin1 でなければなりません!\n"
 msgid "      **FAIL**  Bad LanguageVersion %s - must be English!\n"
-msgstr ""
-"      **失敗**  無効な LanguageVersion %s - English でなければなりません!\n"
-
-#, c-format
+msgstr "      **失敗**  無効な LanguageVersion %s - English でなければなりません!\n"
 msgid "      **FAIL**  Default option code cannot be interpreted: %s\n"
 msgstr "      **失敗**  デフォルトのオプションコードが解釈できません: %s\n"
-
-#, c-format
-msgid ""
-"      **FAIL**  Default translation string for option %s choice %s contains "
-"8-bit characters!\n"
-msgstr ""
-"      **失敗**  オプション %s、選択 %s のデフォルトの翻訳文字列が 8 ビット文"
-"字を含んでいます!\n"
-
-#, c-format
-msgid ""
-"      **FAIL**  Default translation string for option %s contains 8-bit "
-"characters!\n"
-msgstr ""
-"      **失敗**  オプション %s のデフォルトの翻訳文字列が 8 ビット文字を含んで"
-"います!\n"
-
-#, c-format
+msgid "      **FAIL**  Default translation string for option %s choice %s contains 8-bit characters!\n"
+msgstr "      **失敗**  オプション %s、選択 %s のデフォルトの翻訳文字列が 8 ビット文字を含んでいます!\n"
+msgid "      **FAIL**  Default translation string for option %s contains 8-bit characters!\n"
+msgstr "      **失敗**  オプション %s のデフォルトの翻訳文字列が 8 ビット文字を含んでいます!\n"
 msgid "      **FAIL**  Group names %s and %s differ only by case!\n"
 msgstr "      **失敗**  グループ名 %s と %s は大文字/小文字が違うだけです!\n"
-
-#, c-format
 msgid "      **FAIL**  Multiple occurrences of %s choice name %s!\n"
 msgstr "      **失敗**  %s で複数のオプション %s が選択されています!\n"
-
-#, c-format
 msgid "      **FAIL**  Option names %s and %s differ only by case!\n"
 msgstr "      **失敗**  オプション名 %s と %s は大文字/小文字が違うだけです!\n"
-
-#, c-format
-msgid ""
-"      **FAIL**  REQUIRED Default%s\n"
-"                REF: Page 40, section 4.5.\n"
-msgstr ""
-"      **失敗**  Default%s は必須\n"
-"                参照: 40 ページ、セクション 4.5。\n"
-
-msgid ""
-"      **FAIL**  REQUIRED DefaultImageableArea\n"
-"                REF: Page 102, section 5.15.\n"
-msgstr ""
-"      **失敗**  DefaultImageableArea は必須\n"
-"                参照: 102 ページ、セクション 5.15。\n"
-
-msgid ""
-"      **FAIL**  REQUIRED DefaultPaperDimension\n"
-"                REF: Page 103, section 5.15.\n"
-msgstr ""
-"      **失敗**  DefaultPaperDimension は必須\n"
-"                参照: 103 ページ、セクション 5.15。\n"
-
-msgid ""
-"      **FAIL**  REQUIRED FileVersion\n"
-"                REF: Page 56, section 5.3.\n"
-msgstr ""
-"      **失敗**  FileVersion は必須\n"
-"                参照: 56 ページ、セクション 5.3。\n"
-
-msgid ""
-"      **FAIL**  REQUIRED FormatVersion\n"
-"                REF: Page 56, section 5.3.\n"
-msgstr ""
-"      **失敗**  FormatVersion は必須\n"
-"                参照: 56 ページ、セクション 5.3。\n"
-
-#, c-format
-msgid ""
-"      **FAIL**  REQUIRED ImageableArea for PageSize %s\n"
-"                REF: Page 41, section 5.\n"
-"                REF: Page 102, section 5.15.\n"
-msgstr ""
-"      **失敗**  PageSize %s に ImageableArea は必須\n"
-"                参照: 41 ページ、セクション 5。\n"
-"                参照: 102 ページ、セクション 5.15。\n"
-
-msgid ""
-"      **FAIL**  REQUIRED LanguageEncoding\n"
-"                REF: Pages 56-57, section 5.3.\n"
-msgstr ""
-"      **失敗**  LanguageEncoding は必須\n"
-"                参照: 56-57 ページ、セクション 5.3。\n"
-
-msgid ""
-"      **FAIL**  REQUIRED LanguageVersion\n"
-"                REF: Pages 57-58, section 5.3.\n"
-msgstr ""
-"      **失敗**  LanguageVersion は必須\n"
-"                参照: 57-58 ページ、セクション 5.3。\n"
-
-msgid ""
-"      **FAIL**  REQUIRED Manufacturer\n"
-"                REF: Pages 58-59, section 5.3.\n"
-msgstr ""
-"      **失敗**  Manufacturer は必須\n"
-"                参照: 58-59 ページ、セクション 5.3。\n"
-
-msgid ""
-"      **FAIL**  REQUIRED ModelName\n"
-"                REF: Pages 59-60, section 5.3.\n"
-msgstr ""
-"      **失敗**  ModelName は必須\n"
-"                参照: 59-60 ページ、セクション 5.3。\n"
-
-msgid ""
-"      **FAIL**  REQUIRED NickName\n"
-"                REF: Page 60, section 5.3.\n"
-msgstr ""
-"      **失敗**  NickName は必須\n"
-"                参照: 60 ページ、セクション 5.3。\n"
-
-msgid ""
-"      **FAIL**  REQUIRED PCFileName\n"
-"                REF: Pages 61-62, section 5.3.\n"
-msgstr ""
-"      **失敗**  PCFileName は必須\n"
-"                参照: 61-62 ページ、セクション 5.3。\n"
-
-msgid ""
-"      **FAIL**  REQUIRED PSVersion\n"
-"                REF: Pages 62-64, section 5.3.\n"
-msgstr ""
-"      **失敗**  PSVersion は必須\n"
-"                参照: 62-64 ページ、セクション 5.3。\n"
-
-msgid ""
-"      **FAIL**  REQUIRED PageRegion\n"
-"                REF: Page 100, section 5.14.\n"
-msgstr ""
-"      **失敗**  PageRegion は必須\n"
-"                参照: 100 ページ、セクション 5.14。\n"
-
-msgid ""
-"      **FAIL**  REQUIRED PageSize\n"
-"                REF: Page 41, section 5.\n"
-"                REF: Page 99, section 5.14.\n"
-msgstr ""
-"      **失敗**  PageSize は必須\n"
-"                参照: 41 ページ、セクション 5。\n"
-"                参照: 99 ページ、セクション 5.14。\n"
-
-msgid ""
-"      **FAIL**  REQUIRED PageSize\n"
-"                REF: Pages 99-100, section 5.14.\n"
-msgstr ""
-"      **失敗**  PageSize は必須\n"
-"                参照: 99-100 ページ、セクション 5.14。\n"
-
-#, c-format
-msgid ""
-"      **FAIL**  REQUIRED PaperDimension for PageSize %s\n"
-"                REF: Page 41, section 5.\n"
-"                REF: Page 103, section 5.15.\n"
-msgstr ""
-"      **失敗**  PageSize %s に PaperDimension は必須\n"
-"                参照: 41 ページ、セクション 5。\n"
-"                参照: 103 ページ、セクション 5.15。\n"
-
-msgid ""
-"      **FAIL**  REQUIRED Product\n"
-"                REF: Page 62, section 5.3.\n"
-msgstr ""
-"      **失敗**  Product は必須\n"
-"                参照: 62 ページ、セクション 5.3。\n"
-
-msgid ""
-"      **FAIL**  REQUIRED ShortNickName\n"
-"                REF: Page 64-65, section 5.3.\n"
-msgstr ""
-"      **失敗**  ShortNickName は必須\n"
-"                参照: 64-65 ページ、セクション 5.3。\n"
-
-#, c-format
+msgid "      **FAIL**  REQUIRED Default%s\n                REF: Page 40, section 4.5.\n"
+msgstr "      **失敗**  Default%s は必須\n                参照: 40 ページ、セクション 4.5。\n"
+msgid "      **FAIL**  REQUIRED DefaultImageableArea\n                REF: Page 102, section 5.15.\n"
+msgstr "      **失敗**  DefaultImageableArea は必須\n                参照: 102 ページ、セクション 5.15。\n"
+msgid "      **FAIL**  REQUIRED DefaultPaperDimension\n                REF: Page 103, section 5.15.\n"
+msgstr "      **失敗**  DefaultPaperDimension は必須\n                参照: 103 ページ、セクション 5.15。\n"
+msgid "      **FAIL**  REQUIRED FileVersion\n                REF: Page 56, section 5.3.\n"
+msgstr "      **失敗**  FileVersion は必須\n                参照: 56 ページ、セクション 5.3。\n"
+msgid "      **FAIL**  REQUIRED FormatVersion\n                REF: Page 56, section 5.3.\n"
+msgstr "      **失敗**  FormatVersion は必須\n                参照: 56 ページ、セクション 5.3。\n"
+msgid "      **FAIL**  REQUIRED ImageableArea for PageSize %s\n                REF: Page 41, section 5.\n                REF: Page 102, section 5.15.\n"
+msgstr "      **失敗**  PageSize %s に ImageableArea は必須\n                参照: 41 ページ、セクション 5。\n                参照: 102 ページ、セクション 5.15。\n"
+msgid "      **FAIL**  REQUIRED LanguageEncoding\n                REF: Pages 56-57, section 5.3.\n"
+msgstr "      **失敗**  LanguageEncoding は必須\n                参照: 56-57 ページ、セクション 5.3。\n"
+msgid "      **FAIL**  REQUIRED LanguageVersion\n                REF: Pages 57-58, section 5.3.\n"
+msgstr "      **失敗**  LanguageVersion は必須\n                参照: 57-58 ページ、セクション 5.3。\n"
+msgid "      **FAIL**  REQUIRED Manufacturer\n                REF: Pages 58-59, section 5.3.\n"
+msgstr "      **失敗**  Manufacturer は必須\n                参照: 58-59 ページ、セクション 5.3。\n"
+msgid "      **FAIL**  REQUIRED ModelName\n                REF: Pages 59-60, section 5.3.\n"
+msgstr "      **失敗**  ModelName は必須\n                参照: 59-60 ページ、セクション 5.3。\n"
+msgid "      **FAIL**  REQUIRED NickName\n                REF: Page 60, section 5.3.\n"
+msgstr "      **失敗**  NickName は必須\n                参照: 60 ページ、セクション 5.3。\n"
+msgid "      **FAIL**  REQUIRED PCFileName\n                REF: Pages 61-62, section 5.3.\n"
+msgstr "      **失敗**  PCFileName は必須\n                参照: 61-62 ページ、セクション 5.3。\n"
+msgid "      **FAIL**  REQUIRED PSVersion\n                REF: Pages 62-64, section 5.3.\n"
+msgstr "      **失敗**  PSVersion は必須\n                参照: 62-64 ページ、セクション 5.3。\n"
+msgid "      **FAIL**  REQUIRED PageRegion\n                REF: Page 100, section 5.14.\n"
+msgstr "      **失敗**  PageRegion は必須\n                参照: 100 ページ、セクション 5.14。\n"
+msgid "      **FAIL**  REQUIRED PageSize\n                REF: Page 41, section 5.\n                REF: Page 99, section 5.14.\n"
+msgstr "      **失敗**  PageSize は必須\n                参照: 41 ページ、セクション 5。\n                参照: 99 ページ、セクション 5.14。\n"
+msgid "      **FAIL**  REQUIRED PageSize\n                REF: Pages 99-100, section 5.14.\n"
+msgstr "      **失敗**  PageSize は必須\n                参照: 99-100 ページ、セクション 5.14。\n"
+msgid "      **FAIL**  REQUIRED PaperDimension for PageSize %s\n                REF: Page 41, section 5.\n                REF: Page 103, section 5.15.\n"
+msgstr "      **失敗**  PageSize %s に PaperDimension は必須\n                参照: 41 ページ、セクション 5。\n                参照: 103 ページ、セクション 5.15。\n"
+msgid "      **FAIL**  REQUIRED Product\n                REF: Page 62, section 5.3.\n"
+msgstr "      **失敗**  Product は必須\n                参照: 62 ページ、セクション 5.3。\n"
+msgid "      **FAIL**  REQUIRED ShortNickName\n                REF: Page 64-65, section 5.3.\n"
+msgstr "      **失敗**  ShortNickName は必須\n                参照: 64-65 ページ、セクション 5.3。\n"
 msgid "    %d ERRORS FOUND\n"
 msgstr "    %d 個のエラーが見つかりました\n"
-
-#, c-format
-msgid ""
-"    Bad %%%%BoundingBox: on line %d!\n"
-"        REF: Page 39, %%%%BoundingBox:\n"
-msgstr ""
-"    不正な %%%%BoundingBox: (%d 行)!\n"
-"        参照: 39 ページ、%%%%BoundingBox:\n"
-
-#, c-format
-msgid ""
-"    Bad %%%%Page: on line %d!\n"
-"        REF: Page 53, %%%%Page:\n"
-msgstr ""
-"    不正な %%%%Page: (%d 行)!\n"
-"        参照: 53 ページ、%%%%Page:\n"
-
-#, c-format
-msgid ""
-"    Bad %%%%Pages: on line %d!\n"
-"        REF: Page 43, %%%%Pages:\n"
-msgstr ""
-"    不正な %%%%Pages: (%d 行)!\n"
-"        参照: 43 ページ、%%%%Pages:\n"
-
-#, c-format
-msgid ""
-"    Line %d is longer than 255 characters (%d)!\n"
-"        REF: Page 25, Line Length\n"
-msgstr ""
-"    %d 行が 255文字より長くなっています (%d)!\n"
-"        参照: 25 ページ、Line Length\n"
-
-msgid ""
-"    Missing %!PS-Adobe-3.0 on first line!\n"
-"        REF: Page 17, 3.1 Conforming Documents\n"
-msgstr ""
-"    先頭行に %!PS-Adobe-3.0 がありません!\n"
-"        参照: 17 ページ、3.1 Conforming Documents\n"
-
-#, c-format
-msgid ""
-"    Missing %%EndComments comment!\n"
-"        REF: Page 41, %%EndComments\n"
-msgstr ""
-"    %%EndComments コメントが見つかりません!\n"
-"        参照: 41 ページ、%%EndComments\n"
-
-#, c-format
-msgid ""
-"    Missing or bad %%BoundingBox: comment!\n"
-"        REF: Page 39, %%BoundingBox:\n"
-msgstr ""
-"    %%BoundingBox: コメントが見つからないか不正です!\n"
-"        参照: 39 ページ、%%BoundingBox:\n"
-
-#, c-format
-msgid ""
-"    Missing or bad %%Page: comments!\n"
-"        REF: Page 53, %%Page:\n"
-msgstr ""
-"    %%Page: コメントが見つからないか不正です!\n"
-"        参照: 53 ページ、%%Page:\n"
-
-#, c-format
-msgid ""
-"    Missing or bad %%Pages: comment!\n"
-"        REF: Page 43, %%Pages:\n"
-msgstr ""
-"    %%Pages: コメントが見つからないか不正です!\n"
-"        参照: 43 ページ、%%Pages:\n"
-
+msgid "    Bad %%%%BoundingBox: on line %d!\n        REF: Page 39, %%%%BoundingBox:\n"
+msgstr "    不正な %%%%BoundingBox: (%d 行)!\n        参照: 39 ページ、%%%%BoundingBox:\n"
+msgid "    Bad %%%%Page: on line %d!\n        REF: Page 53, %%%%Page:\n"
+msgstr "    不正な %%%%Page: (%d 行)!\n        参照: 53 ページ、%%%%Page:\n"
+msgid "    Bad %%%%Pages: on line %d!\n        REF: Page 43, %%%%Pages:\n"
+msgstr "    不正な %%%%Pages: (%d 行)!\n        参照: 43 ページ、%%%%Pages:\n"
+msgid "    Line %d is longer than 255 characters (%d)!\n        REF: Page 25, Line Length\n"
+msgstr "    %d 行が 255文字より長くなっています (%d)!\n        参照: 25 ページ、Line Length\n"
+msgid "    Missing %!PS-Adobe-3.0 on first line!\n        REF: Page 17, 3.1 Conforming Documents\n"
+msgstr "    先頭行に %!PS-Adobe-3.0 がありません!\n        参照: 17 ページ、3.1 Conforming Documents\n"
+msgid "    Missing %%EndComments comment!\n        REF: Page 41, %%EndComments\n"
+msgstr "    %%EndComments コメントが見つかりません!\n        参照: 41 ページ、%%EndComments\n"
+msgid "    Missing or bad %%BoundingBox: comment!\n        REF: Page 39, %%BoundingBox:\n"
+msgstr "    %%BoundingBox: コメントが見つからないか不正です!\n        参照: 39 ページ、%%BoundingBox:\n"
+msgid "    Missing or bad %%Page: comments!\n        REF: Page 53, %%Page:\n"
+msgstr "    %%Page: コメントが見つからないか不正です!\n        参照: 53 ページ、%%Page:\n"
+msgid "    Missing or bad %%Pages: comment!\n        REF: Page 43, %%Pages:\n"
+msgstr "    %%Pages: コメントが見つからないか不正です!\n        参照: 43 ページ、%%Pages:\n"
 msgid "    NO ERRORS FOUND\n"
 msgstr "    エラーは見つかりませんでした\n"
-
-#, c-format
 msgid "    Saw %d lines that exceeded 255 characters!\n"
 msgstr "    255文字を超える %d 行が見つかりました!\n"
-
-#, c-format
 msgid "    Too many %%BeginDocument comments!\n"
 msgstr "    %%BeginDocument コメントが多すぎます!\n"
-
-#, c-format
 msgid "    Too many %%EndDocument comments!\n"
 msgstr "    %%EndDocument コメントが多すぎます!\n"
-
 msgid "    Warning: file contains binary data!\n"
 msgstr "    警告: ファイルにバイナリデータが含まれています!\n"
-
-#, c-format
 msgid "    Warning: no %%EndComments comment in file!\n"
 msgstr "    警告: ファイルに %%EndComments コメントがありません!\n"
-
-#, c-format
 msgid "    Warning: obsolete DSC version %.1f in file!\n"
 msgstr "    警告: ファイルは時代遅れの DSC バージョン %.1f です!\n"
-
 msgid " FAIL\n"
 msgstr " 失敗\n"
-
-#, c-format
-msgid ""
-" FAIL\n"
-"      **FAIL**  Unable to open PPD file - %s\n"
-msgstr ""
-" 失敗\n"
-"      **失敗**  PPD ファイルを開けません - %s\n"
-
-#, c-format
-msgid ""
-" FAIL\n"
-"      **FAIL**  Unable to open PPD file - %s on line %d.\n"
-msgstr ""
-" 失敗\n"
-"      **失敗**  PPD ファイルを開けません - %s (%d 行)。\n"
-
+msgid " FAIL\n      **FAIL**  Unable to open PPD file - %s\n"
+msgstr " 失敗\n      **失敗**  PPD ファイルを開けません - %s\n"
+msgid " FAIL\n      **FAIL**  Unable to open PPD file - %s on line %d.\n"
+msgstr " 失敗\n      **失敗**  PPD ファイルを開けません - %s (%d 行)。\n"
 msgid " PASS\n"
 msgstr " 合格\n"
-
 msgid "#10 Envelope"
 msgstr "#10 封筒"
-
 msgid "#11 Envelope"
 msgstr "#11 封筒"
-
 msgid "#12 Envelope"
 msgstr "#12 封筒"
-
 msgid "#14 Envelope"
 msgstr "#14 封筒"
-
 msgid "#9 Envelope"
 msgstr "#9 封筒"
-
-#, c-format
 msgid "%-6s %-10.10s %-4d %-10d %-27.27s %.0f bytes\n"
 msgstr "%-6s %-10.10s %-4d %-10d %-27.27s %.0f バイト\n"
-
-#, c-format
 msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes\n"
 msgstr "%-7s %-7.7s %-7d %-31.31s %.0f バイト\n"
-
-#, c-format
 msgid "%.0f x %.0f millimeters"
 msgstr "%.0f x %.0f ミリメートル"
-
-#, c-format
 msgid "%.0f x %.0f to %.0f x %.0f millimeters"
 msgstr "%.0f x %.0f to %.0f x %.0f ミリメートル"
-
-#, c-format
 msgid "%.2f x %.2f inches"
 msgstr "%.2f x %.2f インチ"
-
-#, c-format
 msgid "%.2f x %.2f to %.2f x %.2f inches"
 msgstr "%.2f x %.2f to %.2f x %.2f インチ"
-
-#, c-format
 msgid "%s accepting requests since %s\n"
 msgstr "%s は %s からリクエストを受け付けています\n"
-
-#, c-format
 msgid "%s cannot be changed."
 msgstr "%s は変更できません。"
-
-#, c-format
 msgid "%s is not implemented by the CUPS version of lpc.\n"
 msgstr "%s は lpc の CUPS バージョンでは実装されていません。\n"
-
-#, c-format
 msgid "%s is not ready\n"
 msgstr "%s は準備ができていません\n"
-
-#, c-format
 msgid "%s is ready\n"
 msgstr "%s は準備ができています\n"
-
-#, c-format
 msgid "%s is ready and printing\n"
 msgstr "%s は準備ができており印刷しています\n"
-
-#, c-format
-msgid ""
-"%s not accepting requests since %s -\n"
-"\t%s\n"
-msgstr ""
-"%s は %s からリクエストを受け付けていません\n"
-"\t%s\n"
-
-#, c-format
+msgid "%s not accepting requests since %s -\n\t%s\n"
+msgstr "%s は %s からリクエストを受け付けていません\n\t%s\n"
 msgid "%s not supported!"
 msgstr "%s はサポートされていません!"
-
-#, c-format
 msgid "%s/%s accepting requests since %s\n"
 msgstr "%s/%s は %s からリクエストを受け付けています\n"
-
-#, c-format
-msgid ""
-"%s/%s not accepting requests since %s -\n"
-"\t%s\n"
-msgstr ""
-"%s/%s は %s からリクエストを受け付けていません\n"
-"\t%s\n"
-
-#, c-format
+msgid "%s/%s not accepting requests since %s -\n\t%s\n"
+msgstr "%s/%s は %s からリクエストを受け付けていません\n\t%s\n"
 msgid "%s: %-33.33s [job %d localhost]\n"
 msgstr "%s:%-33.33s [ジョブ %d localhost]\n"
-
-#, c-format
 msgid "%s: %s failed: %s\n"
 msgstr "%s: %s に失敗しました: %s\n"
-
-#, c-format
 msgid "%s: Don't know what to do!\n"
 msgstr "%s: 何が起きているか不明です!\n"
-
-#, c-format
-msgid ""
-"%s: Error - %s environment variable names non-existent destination \"%s\"!\n"
+msgid "%s: Error - %s environment variable names non-existent destination \"%s\"!\n"
 msgstr "%s: エラー - 環境変数 %s が存在しない宛先 \"%s\" を指しています!\n"
-
-#, c-format
 msgid "%s: Error - bad job ID!\n"
 msgstr "%s: エラー - 不正なジョブ ID です!\n"
-
-#, c-format
 msgid "%s: Error - cannot print files and alter jobs simultaneously!\n"
-msgstr ""
-"%s: エラー - ファイルを印刷できず、ジョブを同時に変えることができません!\n"
-
-#, c-format
-msgid ""
-"%s: Error - cannot print from stdin if files or a job ID are provided!\n"
-msgstr ""
-"%s: エラー - ファイルまたはジョブ ID が提供されている場合、標準入力から印刷で"
-"きません。 \n"
-
-#, c-format
+msgstr "%s: エラー - ファイルを印刷できず、ジョブを同時に変えることができません!\n"
+msgid "%s: Error - cannot print from stdin if files or a job ID are provided!\n"
+msgstr "%s: エラー - ファイルまたはジョブ ID が提供されている場合、標準入力から印刷できません。 \n"
 msgid "%s: Error - expected character set after '-S' option!\n"
 msgstr "%s: エラー - '-S' オプションのあとには文字セットが必要です!\n"
-
-#, c-format
 msgid "%s: Error - expected content type after '-T' option!\n"
 msgstr "%s: エラー - '-T' オプションのあとにはコンテンツタイプが必要です!\n"
-
-#, c-format
 msgid "%s: Error - expected copies after '-n' option!\n"
 msgstr "%s: エラー - '-n' オプションのあとにはコピー数が必要です!\n"
-
-#, c-format
 msgid "%s: Error - expected copy count after '-#' option!\n"
 msgstr "%s: エラー - '-#' オプションのあとにはコピー数が必要です!\n"
-
-#, c-format
 msgid "%s: Error - expected destination after '-P' option!\n"
 msgstr "%s: エラー - '-P' オプションのあとには宛先が必要です!\n"
-
-#, c-format
 msgid "%s: Error - expected destination after '-b' option!\n"
 msgstr "%s: エラー - '-b' オプションのあとに宛先が必要です!\n"
-
-#, c-format
 msgid "%s: Error - expected destination after '-d' option!\n"
 msgstr "%s: エラー - '-d' オプションのあとにはプリンター名が必要です!\n"
-
-#, c-format
 msgid "%s: Error - expected form after '-f' option!\n"
 msgstr "%s: エラー - '-f' オプションのあとには用紙名が必要です!\n"
-
-#, c-format
 msgid "%s: Error - expected hold name after '-H' option!\n"
 msgstr "%s: エラー - '-H' オプションのあとにはホールド名が必要です!\n"
-
-#, c-format
 msgid "%s: Error - expected hostname after '-H' option!\n"
 msgstr "%s: エラー - '-H' オプションのあとにはホスト名が必要です!\n"
-
-#, c-format
 msgid "%s: Error - expected hostname after '-h' option!\n"
 msgstr "%s: エラー -  '-h' オプションのあとにはホスト名が必要です!\n"
-
-#, c-format
 msgid "%s: Error - expected mode list after '-y' option!\n"
 msgstr "%s: エラー - '-y' オプションのあとにはモードリストが必要です!\n"
-
-#, c-format
 msgid "%s: Error - expected name after '-%c' option!\n"
 msgstr "%s: エラー - '-%c' オプションのあとには名前が必要です!\n"
-
-#, c-format
 msgid "%s: Error - expected option string after '-o' option!\n"
 msgstr "%s: エラー - '-o' オプションのあとには文字列が必要です!\n"
-
-#, c-format
 msgid "%s: Error - expected page list after '-P' option!\n"
 msgstr "%s: エラー - '-P' オプションのあとにはページリストが必要です!\n"
-
-#, c-format
 msgid "%s: Error - expected priority after '-%c' option!\n"
 msgstr "%s: エラー - '-%c' オプションのあとには優先度が必要です!\n"
-
-#, c-format
 msgid "%s: Error - expected reason text after '-r' option!\n"
 msgstr "%s: エラー - '-r' のあとには理由のテキストが必要です!\n"
-
-#, c-format
 msgid "%s: Error - expected title after '-t' option!\n"
 msgstr "%s: エラー - '-t' オプションのあとにはタイトルが必要です!\n"
-
-#, c-format
 msgid "%s: Error - expected username after '-U' option!\n"
 msgstr "%s: エラー - '-U' オプションのあとにはユーザ名が必要です!\n"
-
-#, c-format
 msgid "%s: Error - expected username after '-u' option!\n"
 msgstr "%s: エラー - '-u' オプションのあとにはユーザ名が必要です!\n"
-
-#, c-format
 msgid "%s: Error - expected value after '-%c' option!\n"
 msgstr "%s: エラー -  '-%c' オプションのあとには値が必要です!\n"
-
-#, c-format
-msgid ""
-"%s: Error - need \"completed\", \"not-completed\", or \"all\" after '-W' "
-"option!\n"
-msgstr ""
-"%s: エラー - '-W' オプションのあとには、\"completed\"、\"not-completed\"、"
-"\"all\" のいずれかが必要です!\n"
-
-#, c-format
+msgid "%s: Error - need \"completed\", \"not-completed\", or \"all\" after '-W' option!\n"
+msgstr "%s: エラー - '-W' オプションのあとには、\"completed\"、\"not-completed\"、\"all\" のいずれかが必要です!\n"
 msgid "%s: Error - no default destination available.\n"
 msgstr "%s: エラー - 利用可能なデフォルトの宛先がありません。\n"
-
-#, c-format
 msgid "%s: Error - priority must be between 1 and 100.\n"
 msgstr "%s: エラー - 優先度は 1 から 100 の間である必要があります。\n"
-
-#, c-format
 msgid "%s: Error - scheduler not responding!\n"
 msgstr "%s: エラー - スケジューラが応答していません!\n"
-
-#, c-format
 msgid "%s: Error - too many files - \"%s\"\n"
 msgstr "%s: エラー - ファイルが多すぎます - \"%s\"\n"
-
-#, c-format
 msgid "%s: Error - unable to access \"%s\" - %s\n"
 msgstr "%s: エラー - \"%s\" にアクセスできません - %s\n"
-
-#, c-format
 msgid "%s: Error - unable to queue from stdin - %s\n"
 msgstr "%s: エラー - 標準入力からキューにデータを入力できません! - %s\n"
-
-#, c-format
 msgid "%s: Error - unknown destination \"%s\"!\n"
 msgstr "%s: エラー - \"%s\" は未知の宛先です!\n"
-
-#, c-format
 msgid "%s: Error - unknown destination \"%s/%s\"!\n"
 msgstr "%s: エラー - \"%s/%s\" は未知の宛先です!\n"
-
-#, c-format
 msgid "%s: Error - unknown option '%c'!\n"
 msgstr "%s: エラー - '%c' は未知のオプションです!\n"
-
-#, c-format
 msgid "%s: Error - unknown option '%s'!\n"
 msgstr "%s: エラー - '%s' は未知のオプションです!\n"
-
-#, c-format
 msgid "%s: Expected job ID after '-i' option!\n"
 msgstr "%s: '-i' オプションのあとにはジョブ ID が必要です!\n"
-
-#, c-format
 msgid "%s: Filter \"%s\" not available: %s\n"
 msgstr "%s: フィルタ \"%s\" は利用できません: %s\n"
-
-#, c-format
 msgid "%s: Invalid destination name in list \"%s\"!\n"
 msgstr "%s: リスト \"%s\" に無効な宛先名があります!\n"
-
-#, c-format
 msgid "%s: Invalid filter string \"%s\"\n"
 msgstr "%s: 無効なフィルタ文字列です \"%s\"\n"
-
-#, c-format
 msgid "%s: Need job ID ('-i jobid') before '-H restart'!\n"
 msgstr "%s: '-H restart' の前にはジョブ ID ('-i ジョブID') が必要です!\n"
-
-#, c-format
 msgid "%s: No filter to convert from %s/%s to %s/%s!\n"
 msgstr "%s: %s/%s から %s/%s に変換するフィルタがありません!\n"
-
-#, c-format
 msgid "%s: Operation failed: %s\n"
 msgstr "%s: 操作に失敗しました: %s\n"
-
-#, c-format
 msgid "%s: Sorry, no encryption support compiled in!\n"
 msgstr "%s: すみません、暗号化サポートはコンパイル時に組み込まれていません!\n"
-
-#, c-format
 msgid "%s: Unable to connect to server\n"
 msgstr "%s: サーバーに接続できません\n"
-
-#, c-format
 msgid "%s: Unable to contact server!\n"
 msgstr "%s: サーバーに連絡できません!\n"
-
-#, c-format
 msgid "%s: Unable to determine MIME type of \"%s\"!\n"
 msgstr "%s: \"%s\" の MIME タイプを判別できません!\n"
-
-#, c-format
 msgid "%s: Unable to open %s: %s\n"
 msgstr "%s: %sを開けません: %s\n"
-
-#, c-format
 msgid "%s: Unable to open PPD file: %s on line %d\n"
 msgstr "%s: PPD ファイルを開けません: %s の %d 行目\n"
-
-#, c-format
 msgid "%s: Unable to open PPD file: %s on line %d.\n"
 msgstr ""
-
-#, c-format
 msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"!\n"
-msgstr ""
-"%s: \"%s\" または \"%s\" から MIME データベースを読み取ることができません!\n"
-
-#, c-format
+msgstr "%s: \"%s\" または \"%s\" から MIME データベースを読み取ることができません!\n"
 msgid "%s: Unknown destination \"%s\"!\n"
 msgstr "%s: \"%s\" は未知の宛先です!\n"
-
-#, c-format
 msgid "%s: Unknown destination MIME type %s/%s!\n"
 msgstr "%s: %s/%s は未知の宛先 MIME タイプです!\n"
-
-#, c-format
 msgid "%s: Unknown option '%c'!\n"
 msgstr "%s: '%c' は未知のオプションです!\n"
-
-#, c-format
 msgid "%s: Unknown source MIME type %s/%s!\n"
 msgstr "%s: %s/%s は未知のソース MIME タイプです!\n"
-
-#, c-format
-msgid ""
-"%s: Warning - '%c' format modifier not supported - output may not be "
-"correct!\n"
-msgstr ""
-"%s: 警告 - '%c' 形式修飾子はサポートされていません - 出力は正しくないものにな"
-"るかもしれません!\n"
-
-#, c-format
+msgid "%s: Warning - '%c' format modifier not supported - output may not be correct!\n"
+msgstr "%s: 警告 - '%c' 形式修飾子はサポートされていません - 出力は正しくないものになるかもしれません!\n"
 msgid "%s: Warning - character set option ignored!\n"
 msgstr "%s: 警告 - 文字セットオプションは無視されます!\n"
-
-#, c-format
 msgid "%s: Warning - content type option ignored!\n"
 msgstr "%s: 警告 - コンテンツタイプオプションは無視されます!\n"
-
-#, c-format
 msgid "%s: Warning - form option ignored!\n"
 msgstr "%s: 警告 - 用紙オプションは無視されます!\n"
-
-#, c-format
 msgid "%s: Warning - mode option ignored!\n"
 msgstr "%s: 警告 - モードオプションは無視されます!\n"
-
-#, c-format
-msgid ""
-"%s: error - %s environment variable names non-existent destination \"%s\"!\n"
+msgid "%s: error - %s environment variable names non-existent destination \"%s\"!\n"
 msgstr "%s: エラー - 環境変数 %s が存在しない宛先 \"%s\" を指しています!\n"
-
-#, c-format
 msgid "%s: error - expected option=value after '-o' option!\n"
 msgstr "%s: エラー - '-o' オプションのあとには オプション=値 が必要です!\n"
-
-#, c-format
 msgid "%s: error - no default destination available.\n"
 msgstr "%s: エラー - 利用可能なデフォルトの宛先がありません。\n"
-
 msgid "-1"
 msgstr "-1"
-
 msgid "-10"
 msgstr "-10"
-
 msgid "-100"
 msgstr "-100"
-
 msgid "-105"
 msgstr "-105"
-
 msgid "-11"
 msgstr "-11"
-
 msgid "-110"
 msgstr "-110"
-
 msgid "-115"
 msgstr "-115"
-
 msgid "-12"
 msgstr "-12"
-
 msgid "-120"
 msgstr "-120"
-
 msgid "-13"
 msgstr "-13"
-
 msgid "-14"
 msgstr "-14"
-
 msgid "-15"
 msgstr "-15"
-
 msgid "-2"
 msgstr "-2"
-
 msgid "-20"
 msgstr "-20"
-
 msgid "-25"
 msgstr "-25"
-
 msgid "-3"
 msgstr "-3"
-
 msgid "-30"
 msgstr "-30"
-
 msgid "-35"
 msgstr "-35"
-
 msgid "-4"
 msgstr "-4"
-
 msgid "-40"
 msgstr "-40"
-
 msgid "-45"
 msgstr "-45"
-
 msgid "-5"
 msgstr "-5"
-
 msgid "-50"
 msgstr "-50"
-
 msgid "-55"
 msgstr "-55"
-
 msgid "-6"
 msgstr "-6"
-
 msgid "-60"
 msgstr "-60"
-
 msgid "-65"
 msgstr "-65"
-
 msgid "-7"
 msgstr "-7"
-
 msgid "-70"
 msgstr "-70"
-
 msgid "-75"
 msgstr "-75"
-
 msgid "-8"
 msgstr "-8"
-
 msgid "-80"
 msgstr "-80"
-
 msgid "-85"
 msgstr "-85"
-
 msgid "-9"
 msgstr "-9"
-
 msgid "-90"
 msgstr "-90"
-
 msgid "-95"
 msgstr "-95"
-
 msgid "0"
 msgstr "0"
-
 msgid "1"
 msgstr "1"
-
 msgid "1 inch/sec."
 msgstr "1 インチ/秒"
-
 msgid "1.25x0.25\""
 msgstr "1.25x0.25インチ"
-
 msgid "1.25x2.25\""
 msgstr "1.25x2.25インチ"
-
 msgid "1.5 inch/sec."
 msgstr "1.5 インチ/秒"
-
 msgid "1.50x0.25\""
 msgstr "1.50x0.25インチ"
-
 msgid "1.50x0.50\""
 msgstr "1.50x0.50インチ"
-
 msgid "1.50x1.00\""
 msgstr "1.50x1.00インチ"
-
 msgid "1.50x2.00\""
 msgstr "1.50x2.00インチ"
-
 msgid "10"
 msgstr "10"
-
 msgid "10 inches/sec."
 msgstr "10 インチ/秒"
-
 msgid "10 x 11\""
 msgstr "10 x 11インチ"
-
 msgid "10 x 13\""
 msgstr "10 x 13インチ"
-
 msgid "10 x 14\""
 msgstr "10 x 14インチ"
-
 msgid "100"
 msgstr "100"
-
 msgid "100 mm/sec."
 msgstr "100 ミリメートル/秒"
-
 msgid "105"
 msgstr "105"
-
 msgid "11"
 msgstr "11"
-
 msgid "11 inches/sec."
 msgstr "11 インチ/秒"
-
 msgid "110"
 msgstr "110"
-
 msgid "115"
 msgstr "115"
-
 msgid "12"
 msgstr "12"
-
 msgid "12 inches/sec."
 msgstr "12 インチ/秒"
-
 msgid "12 x 11\""
 msgstr "12 x 11インチ"
-
 msgid "120"
 msgstr "120"
-
 msgid "120 mm/sec."
 msgstr "120 ミリメートル/秒"
-
 msgid "120x60dpi"
 msgstr "120x60dpi"
-
 msgid "120x72dpi"
 msgstr "120x72dpi"
-
 msgid "13"
 msgstr "13"
-
 msgid "136dpi"
 msgstr "136dpi"
-
 msgid "14"
 msgstr "14"
-
 msgid "15"
 msgstr "15"
-
 msgid "15 mm/sec."
 msgstr "15 ミリメートル/秒"
-
 msgid "15 x 11\""
 msgstr "15 x 11インチ"
-
 msgid "150 mm/sec."
 msgstr "150 ミリメートル/秒"
-
 msgid "150dpi"
 msgstr "150dpi"
-
 msgid "16"
 msgstr "16"
-
 msgid "17"
 msgstr "17"
-
 msgid "18"
 msgstr "18"
-
 msgid "180dpi"
 msgstr "180dpi"
-
 msgid "19"
 msgstr "19"
-
 msgid "2"
 msgstr "2"
-
 msgid "2 inches/sec."
 msgstr "2 インチ/秒"
-
 msgid "2-Sided Printing"
 msgstr "両面印刷"
-
 msgid "2.00x0.37\""
 msgstr "2.00x0.37インチ"
-
 msgid "2.00x0.50\""
 msgstr "2.00x0.50インチ"
-
 msgid "2.00x1.00\""
 msgstr "2.00x1.00インチ"
-
 msgid "2.00x1.25\""
 msgstr "2.00x1.25インチ"
-
 msgid "2.00x2.00\""
 msgstr "2.00x2.00インチ"
-
 msgid "2.00x3.00\""
 msgstr "2.00x3.00インチ"
-
 msgid "2.00x4.00\""
 msgstr "2.00x4.00インチ"
-
 msgid "2.00x5.50\""
 msgstr "2.00x5.50インチ"
-
 msgid "2.25x0.50\""
 msgstr "2.25x0.50インチ"
-
 msgid "2.25x1.25\""
 msgstr "2.25x1.25インチ"
-
 msgid "2.25x4.00\""
 msgstr "2.25x4.00インチ"
-
 msgid "2.25x5.50\""
 msgstr "2.25x5.50インチ"
-
 msgid "2.38x5.50\""
 msgstr "2.38x5.50インチ"
-
 msgid "2.5 inches/sec."
 msgstr "2.5 インチ/秒"
-
 msgid "2.50x1.00\""
 msgstr "2.50x1.00インチ"
-
 msgid "2.50x2.00\""
 msgstr "2.50x2.00インチ"
-
 msgid "2.75x1.25\""
 msgstr "2.75x1.25インチ"
-
 msgid "2.9 x 1\""
 msgstr "2.9 x 1インチ"
-
 msgid "20"
 msgstr "20"
-
 msgid "20 mm/sec."
 msgstr "20 ミリメートル/秒"
-
 msgid "200 mm/sec."
 msgstr "200 ミリメートル/秒"
-
 msgid "203dpi"
 msgstr "203dpi"
-
 msgid "21"
 msgstr "21"
-
 msgid "22"
 msgstr "22"
-
 msgid "23"
 msgstr "23"
-
 msgid "24"
 msgstr "24"
-
 msgid "24-Pin Series"
 msgstr "24ピンシリーズ"
-
 msgid "240x72dpi"
 msgstr "240x72dpi"
-
 msgid "25"
 msgstr "25"
-
 msgid "250 mm/sec."
 msgstr "250 ミリメートル/秒"
-
 msgid "26"
 msgstr "26"
-
 msgid "27"
 msgstr "27"
-
 msgid "28"
 msgstr "28"
-
 msgid "29"
 msgstr "29"
-
 msgid "3"
 msgstr "3"
-
 msgid "3 inches/sec."
 msgstr "3 インチ/秒"
-
 msgid "3.00x1.00\""
 msgstr "3.00x1.00インチ"
-
 msgid "3.00x1.25\""
 msgstr "3.00x1.25インチ"
-
 msgid "3.00x2.00\""
 msgstr "3.00x2.00インチ"
-
 msgid "3.00x3.00\""
 msgstr "3.00x3.00インチ"
-
 msgid "3.00x5.00\""
 msgstr "3.00x5.00インチ"
-
 msgid "3.25x2.00\""
 msgstr "3.25x2.00インチ"
-
 msgid "3.25x5.00\""
 msgstr "3.25x5.00インチ"
-
 msgid "3.25x5.50\""
 msgstr "3.25x5.50インチ"
-
 msgid "3.25x5.83\""
 msgstr "3.25x5.83インチ"
-
 msgid "3.25x7.83\""
 msgstr "3.25x7.83インチ"
-
 msgid "3.5\" Disk"
 msgstr "3.5 インチDisk"
-
 msgid "3.5\" Disk - 2 1/8 x 2 3/4\""
 msgstr "3.5インチ Disk - 2 1/8 x 2 3/4インチ"
-
 msgid "3.50x1.00\""
 msgstr "3.50x1.00インチ"
-
 msgid "30"
 msgstr "30"
-
 msgid "30 mm/sec."
 msgstr "30 ミリメートル/秒"
-
 msgid "300 mm/sec."
 msgstr "300 ミリメートル/秒"
-
 msgid "300dpi"
 msgstr "300dpi"
-
 msgid "35"
 msgstr "35"
-
 msgid "360dpi"
 msgstr "360dpi"
-
 msgid "360x180dpi"
 msgstr "360x180dpi"
-
 msgid "4"
 msgstr "4"
-
 msgid "4 inches/sec."
 msgstr "4 インチ/秒"
-
 msgid "4.00x1.00\""
 msgstr "4.00x1.00インチ"
-
 msgid "4.00x13.00\""
 msgstr "4.00x13.00インチ"
-
 msgid "4.00x2.00\""
 msgstr "4.00x2.00インチ"
-
 msgid "4.00x2.50\""
 msgstr "4.00x2.50インチ"
-
 msgid "4.00x3.00\""
 msgstr "4.00x3.00インチ"
-
 msgid "4.00x4.00\""
 msgstr "4.00x4.00インチ"
-
 msgid "4.00x5.00\""
 msgstr "4.00x5.00インチ"
-
 msgid "4.00x6.00\""
 msgstr "4.00x6.00インチ"
-
 msgid "4.00x6.50\""
 msgstr "4.00x6.50インチ"
-
 msgid "40"
 msgstr "40"
-
 msgid "40 mm/sec."
 msgstr "40 ミリメートル/秒"
-
 msgid "45"
 msgstr "45"
-
 msgid "5"
 msgstr "5"
-
 msgid "5 inches/sec."
 msgstr "5 インチ/秒"
-
 msgid "50"
 msgstr "50"
-
 msgid "55"
 msgstr "55"
-
 msgid "6"
 msgstr "6"
-
 msgid "6 inches/sec."
 msgstr "6 インチ/秒"
-
 msgid "6.00x1.00\""
 msgstr "6.00x1.00\""
-
 msgid "6.00x2.00\""
 msgstr "6.00x2.00\""
-
 msgid "6.00x3.00\""
 msgstr "6.00x3.00\""
-
 msgid "6.00x4.00\""
 msgstr "6.00x4.00\""
-
 msgid "6.00x5.00\""
 msgstr "6.00x5.00\""
-
 msgid "6.00x6.00\""
 msgstr "6.00x6.00\""
-
 msgid "6.00x6.50\""
 msgstr "6.00x6.50\""
-
 msgid "60"
 msgstr "60"
-
 msgid "60 mm/sec."
 msgstr "60 mm/秒"
-
 msgid "600 DPI Grayscale"
 msgstr "600 DPI グレースケール"
-
 msgid "600dpi"
 msgstr "600dpi"
-
 msgid "60dpi"
 msgstr "60dpi"
-
 msgid "60x720dpi"
 msgstr "60x720dpi"
-
 msgid "65"
 msgstr "65"
-
 msgid "7"
 msgstr "7"
-
 msgid "7 inches/sec."
 msgstr "7 インチ/秒"
-
 msgid "7 x 9\""
 msgstr "7 x 9\""
-
 msgid "70"
 msgstr "70"
-
 msgid "720dpi"
 msgstr "720dpi"
-
 msgid "75"
 msgstr "75"
-
 msgid "8"
 msgstr "8"
-
 msgid "8 inches/sec."
 msgstr "8 インチ/秒"
-
 msgid "8 x 10\""
 msgstr "8 x 10\""
-
 msgid "8.00x1.00\""
 msgstr "8.00x1.00\""
-
 msgid "8.00x2.00\""
 msgstr "8.00x2.00\""
-
 msgid "8.00x3.00\""
 msgstr "8.00x3.00\""
-
 msgid "8.00x4.00\""
 msgstr "8.00x4.00\""
-
 msgid "8.00x5.00\""
 msgstr "8.00x5.00\""
-
 msgid "8.00x6.00\""
 msgstr "8.00x6.00\""
-
 msgid "8.00x6.50\""
 msgstr "8.00x6.50\""
-
 msgid "80"
 msgstr "80"
-
 msgid "80 mm/sec."
 msgstr "80 mm/秒"
-
 msgid "85"
 msgstr "85"
-
 msgid "9"
 msgstr "9"
-
 msgid "9 inches/sec."
 msgstr "9 インチ/秒"
-
 msgid "9 x 11\""
 msgstr "9 x 11\""
-
 msgid "9 x 12\""
 msgstr "9 x 12\""
-
 msgid "9-Pin Series"
 msgstr "9-Pin Series"
-
 msgid "90"
 msgstr "90"
-
 msgid "95"
 msgstr "95"
-
 msgid "?Invalid help command unknown\n"
 msgstr "?無効なヘルプコマンドです\n"
-
 msgid "A Samba password is required to export printer drivers!"
-msgstr ""
-"プリンタードライバーをエクスポートするには Samba のパスワードが必要です!"
-
+msgstr "プリンタードライバーをエクスポートするには Samba のパスワードが必要です!"
 msgid "A Samba username is required to export printer drivers!"
-msgstr ""
-"プリンタードライバーをエクスポートするには、Samba のユーザー名が必要です!"
-
-#, c-format
+msgstr "プリンタードライバーをエクスポートするには、Samba のユーザー名が必要です!"
 msgid "A class named \"%s\" already exists!"
 msgstr "\"%s\" という名前のクラスはすでに存在します!"
-
-#, c-format
 msgid "A printer named \"%s\" already exists!"
 msgstr "\"%s\" という名前のプリンターはすでに存在します!"
-
 msgid "A0"
 msgstr "A0"
-
 msgid "A1"
 msgstr "A1"
-
 msgid "A10"
 msgstr "A10"
-
 msgid "A2"
 msgstr "A2"
-
 msgid "A3"
 msgstr "A3"
-
 msgid "A3 (Oversize)"
 msgstr "A3 (特大)"
-
 msgid "A4"
 msgstr "A4"
-
 msgid "A4 (Oversize)"
 msgstr "A4 (特大)"
-
 msgid "A4 (Small)"
 msgstr "A4 (小)"
-
 msgid "A5"
 msgstr "A5"
-
 msgid "A5 (Oversize)"
 msgstr "A5 (特大)"
-
 msgid "A6"
 msgstr "A6"
-
 msgid "A7"
 msgstr "A7"
-
 msgid "A8"
 msgstr "A8"
-
 msgid "A9"
 msgstr "A9"
-
 msgid "ANSI A"
 msgstr "ANSI A"
-
 msgid "ANSI B"
 msgstr "ANSI B"
-
 msgid "ANSI C"
 msgstr "ANSI C"
-
 msgid "ANSI D"
 msgstr "ANSI D"
-
 msgid "ANSI E"
 msgstr "ANSI E"
-
 msgid "ARCH A"
 msgstr "ARCH A"
-
 msgid "ARCH B"
 msgstr "ARCH B"
-
 msgid "ARCH C"
 msgstr "ARCH C"
-
 msgid "ARCH D"
 msgstr "ARCH D"
-
 msgid "ARCH E"
 msgstr "ARCH E"
-
 msgid "Accept Jobs"
 msgstr "ジョブの受け付け"
-
 msgid "Accepted"
 msgstr "受け付けました"
-
 msgid "Add Class"
 msgstr "クラスの追加"
-
 msgid "Add Printer"
 msgstr "プリンターの追加"
-
 msgid "Add RSS Subscription"
 msgstr "RSS 購読を追加"
-
 msgid "Address"
 msgstr "アドレス"
-
 msgid "Address - 1 1/8 x 3 1/2\""
 msgstr "アドレス - 1 1/8 x 3 1/2\""
-
 msgid "Administration"
 msgstr "管理"
-
 msgid "Always"
 msgstr "常に有効"
-
 msgid "AppSocket/HP JetDirect"
 msgstr "AppSocket/HP JetDirect"
-
 msgid "Applicator"
 msgstr "アプリケーター"
-
-#, c-format
 msgid "Attempt to set %s printer-state to bad value %d!"
 msgstr "%s printer-state に 不正な値 %d を設定しようとしています!"
-
-#, c-format
 msgid "Attribute groups are out of order (%x < %x)!"
 msgstr "属性グループは範囲外です (%x < %x)!"
-
 msgid "B0"
 msgstr "B0"
-
 msgid "B1"
 msgstr "B1"
-
 msgid "B10"
 msgstr "B10"
-
 msgid "B2"
 msgstr "B2"
-
 msgid "B3"
 msgstr "B3"
-
 msgid "B4"
 msgstr "B4"
-
 msgid "B5"
 msgstr "B5"
-
 msgid "B6"
 msgstr "B6"
-
 msgid "B7"
 msgstr "B7"
-
 msgid "B8"
 msgstr "B8"
-
 msgid "B9"
 msgstr "B9"
-
 msgid "Bad NULL dests pointer"
 msgstr "不正な NULL 送信先ポインター"
-
 msgid "Bad OpenGroup"
 msgstr "不正な OpenGroup"
-
 msgid "Bad OpenUI/JCLOpenUI"
 msgstr "不正な OpenUI/JCLOpenUI"
-
 msgid "Bad OrderDependency"
 msgstr "不正な OrderDependency"
-
 msgid "Bad Request"
 msgstr "不正なリクエスト"
-
 msgid "Bad SNMP version number"
 msgstr "不正な SNMP バージョン番号"
-
 msgid "Bad UIConstraints"
 msgstr "不正な UIConstraints"
-
-#, c-format
 msgid "Bad copies value %d."
 msgstr "%d は不正なコピー値です。"
-
 msgid "Bad custom parameter"
 msgstr "不正なカスタムパラメーター"
-
-#, c-format
 msgid "Bad device URI \"%s\"!\n"
 msgstr "\"%s\" は無効なデバイス URI です!\n"
-
-#, c-format
 msgid "Bad device-uri \"%s\"!"
 msgstr "\"%s\" は無効な device-uri です!"
-
-#, c-format
 msgid "Bad device-uri scheme \"%s\"!"
 msgstr "\"%s\" は無効な device-uri スキーマです!"
-
-#, c-format
 msgid "Bad document-format \"%s\"!"
 msgstr "\"%s\" は不正な document-format です!"
-
 msgid "Bad filename buffer!"
 msgstr "不正なファイル名バッファーです!"
-
-#, c-format
 msgid "Bad font attribute: %s\n"
 msgstr "不正なフォント属性: %s\n"
-
 msgid "Bad job-priority value!"
 msgstr "不正な job-priority 値です!"
-
-#, c-format
 msgid "Bad job-sheets value \"%s\"!"
 msgstr "\"%s\" は不正な job-sheets 値です!"
-
 msgid "Bad job-sheets value type!"
 msgstr "不正な job-sheets 値タイプ です!"
-
 msgid "Bad job-state value!"
 msgstr "不正な job-state 値です!"
-
-#, c-format
 msgid "Bad job-uri attribute \"%s\"!"
 msgstr "\"%s\" は無効な job-uri 属性です!"
-
-#, c-format
 msgid "Bad notify-pull-method \"%s\"!"
 msgstr "\"%s\" は無効な notify-pull-method です!"
-
-#, c-format
 msgid "Bad notify-recipient-uri URI \"%s\"!"
 msgstr "URI \"%s\" は不正な notify-recipient-uri です!"
-
-#, c-format
 msgid "Bad number-up value %d."
 msgstr "%d は不正な number-up 値です。"
-
-#, c-format
 msgid "Bad option + choice on line %d!"
 msgstr "%d 行に不正なオプションと選択があります!"
-
-#, c-format
 msgid "Bad page-ranges values %d-%d."
 msgstr "%d-%d は不正な page-ranges 値です。"
-
-#, c-format
 msgid "Bad port-monitor \"%s\"!"
 msgstr "\"%s\" は無効な port-monitor です!"
-
-#, c-format
 msgid "Bad printer-state value %d!"
 msgstr "%d は無効な printer-state 値です!"
-
-#, c-format
 msgid "Bad request ID %d!"
 msgstr ""
-
-#, c-format
 msgid "Bad request version number %d.%d!"
 msgstr "バージョン番号 %d.%d は無効なリクエストです!"
-
 msgid "Bad subscription ID!"
 msgstr "不正なサブスクリプション ID です!"
-
 msgid "Banners"
 msgstr "バナー"
-
 msgid "Billing Information: "
 msgstr "課金情報: "
-
 msgid "Bond Paper"
 msgstr "ボンド紙"
-
 msgid "C0 Envelope"
-msgstr "C0 Envelope"
-
+msgstr "C0 封筒"
 msgid "C1 Envelope"
-msgstr "C1 Envelope"
-
+msgstr "C1 封筒"
 msgid "C2 Envelope"
-msgstr "C2 Envelope"
-
+msgstr "C2 封筒"
 msgid "C3 Envelope"
-msgstr "C3 Envelope"
-
+msgstr "C3 封筒"
 msgid "C4"
 msgstr "C4"
-
 msgid "C4 Envelope"
-msgstr "C4 Envelope"
-
+msgstr "C4 封筒"
 msgid "C5"
 msgstr "C5"
-
 msgid "C5 Envelope"
-msgstr "C5 Envelope"
-
+msgstr "C5 封筒"
 msgid "C6"
 msgstr "C6"
-
 msgid "C6 Envelope"
-msgstr "C6 Envelope"
-
+msgstr "C6 封筒"
 msgid "C65 Envelope"
-msgstr "C65 Envelope"
-
+msgstr "C65 封筒"
 msgid "C7 Envelope"
-msgstr "C7 Envelope"
-
+msgstr "C7 封筒"
 msgid "CMYK"
 msgstr "CMYK"
-
 msgid "CPCL Label Printer"
-msgstr "CPCL Label Printer"
-
+msgstr "CPCL ラベルプリンタ"
 msgid "Cancel RSS Subscription"
 msgstr "RSS 購読をキャンセル"
-
 msgid "Change Settings"
 msgstr "設定の変更"
-
-#, c-format
 msgid "Character set \"%s\" not supported!"
 msgstr "文字セット \"%s\" はサポートされていません!"
-
 msgid "Chou3 Envelope"
 msgstr "封筒 長形3号"
-
 msgid "Chou4 Envelope"
 msgstr "封筒 長形4号"
-
 msgid "Classes"
 msgstr "クラス"
-
 msgid "Clean Print Heads"
 msgstr "プリントヘッドクリーニング"
-
 msgid "Color"
 msgstr "カラー"
-
 msgid "Color Mode"
 msgstr "カラーモード"
-
-msgid ""
-"Commands may be abbreviated.  Commands are:\n"
-"\n"
-"exit    help    quit    status  ?\n"
-msgstr ""
-"コマンドは短縮できます。  コマンド:\n"
-"\n"
-"exit    help    quit    status  ?\n"
-
+msgid "Commands may be abbreviated.  Commands are:\n\nexit    help    quit    status  ?\n"
+msgstr "コマンドは短縮できます。  コマンド:\n\nexit    help    quit    status  ?\n"
 msgid "Community name uses indefinite length"
 msgstr "コミュニティ名の長さが不定"
-
 msgid "Continue"
 msgstr "継続"
-
 msgid "Continuous"
 msgstr "連続"
-
-#, c-format
 msgid "Could not scan type \"%s\"!"
 msgstr "タイプ \"%s\" を検査できませんでした!"
-
 msgid "Cover open."
 msgstr "カバーが開いています。"
-
 msgid "Created"
 msgstr "ジョブ作成"
-
 msgid "Created On: "
 msgstr "ジョブ作成日: "
-
 msgid "Custom"
 msgstr "カスタム"
-
 msgid "CustominCutInterval"
 msgstr "CustominCutInterval"
-
 msgid "CustominTearInterval"
 msgstr "CustominTearInterval"
-
 msgid "Cut"
 msgstr "カット"
-
 msgid "Cutter"
 msgstr "カッター"
-
 msgid "DL"
 msgstr "DL"
-
 msgid "DL Envelope"
-msgstr "DL Envelope"
-
+msgstr "DL 封筒"
 msgid "Dark"
 msgstr "濃い"
-
 msgid "Darkness"
 msgstr "濃さ"
-
 msgid "Delete Class"
 msgstr "クラスの削除"
-
 msgid "Delete Printer"
 msgstr "プリンターの削除"
-
 msgid "Description: "
 msgstr "説明: "
-
 msgid "DeskJet Series"
 msgstr "DeskJet Series"
-
-#, c-format
 msgid "Destination \"%s\" is not accepting jobs."
 msgstr "宛先 \"%s\" はジョブを受け付けていません。"
-
 msgid "Developer almost empty."
 msgstr "現像剤が無くなりかけています。"
-
 msgid "Developer empty!"
 msgstr "現像剤が無くなりました!"
-
-#, c-format
-msgid ""
-"Device: uri = %s\n"
-"        class = %s\n"
-"        info = %s\n"
-"        make-and-model = %s\n"
-"        device-id = %s\n"
-"        location = %s\n"
-msgstr ""
-"デバイス: uri = %s\n"
-"          class = %s\n"
-"          info = %s\n"
-"          make-and-model = %s\n"
-"          device-id = %s\n"
-"          location = %s\n"
-
+msgid "Device: uri = %s\n        class = %s\n        info = %s\n        make-and-model = %s\n        device-id = %s\n        location = %s\n"
+msgstr "デバイス: uri = %s\n          class = %s\n          info = %s\n          make-and-model = %s\n          device-id = %s\n          location = %s\n"
 msgid "Direct Thermal Media"
 msgstr "感熱紙"
-
 msgid "Disabled"
 msgstr "無効"
-
-#, c-format
 msgid "Document %d not found in job %d."
 msgstr "ドキュメント %d がジョブ %d に見つかりません。"
-
 msgid "Door open."
 msgstr "ドアが開いています。"
-
 msgid "Double Postcard"
 msgstr "往復はがき"
-
 msgid "Driver Name: "
 msgstr "ドライバー名: "
-
 msgid "Driver Version: "
 msgstr "ドライバーバージョン: "
-
 msgid "Duplexer"
 msgstr "両面オプション"
-
 msgid "Dymo"
 msgstr "Dymo"
-
-#, c-format
 msgid "EMERG: Unable to allocate memory for page info: %s\n"
 msgstr "EMERG: ページ情報のメモリー割り当てができません: %s\n"
-
-#, c-format
 msgid "EMERG: Unable to allocate memory for pages array: %s\n"
 msgstr "EMERG: ページアレイのメモリー割り当てができません: %s\n"
-
 msgid "EPL1 Label Printer"
-msgstr "EPL1 Label Printer"
-
+msgstr "EPL1 ラベルプリンタ"
 msgid "EPL2 Label Printer"
-msgstr "EPL2 Label Printer"
-
-#, c-format
+msgstr "EPL2 ラベルプリンタ"
 msgid "ERROR: %s job-id user title copies options [file]\n"
 msgstr ""
-
-#, c-format
 msgid "ERROR: Bad %%BoundingBox: comment seen!\n"
 msgstr "ERROR: 不正な %%BoundingBox: コメントがあります!\n"
-
-#, c-format
 msgid "ERROR: Bad %%IncludeFeature: comment!\n"
 msgstr "ERROR: 不正な %%IncludeFeature: コメントです!\n"
-
-#, c-format
 msgid "ERROR: Bad %%Page: comment in file!\n"
 msgstr "ERROR: 不正な %%Page: コメントがファイルにあります!\n"
-
-#, c-format
 msgid "ERROR: Bad %%PageBoundingBox: comment in file!\n"
 msgstr "ERROR: 不正な %%PageBoundingBox: コメントがファイルにあります!\n"
-
-#, c-format
 msgid "ERROR: Bad SCSI device file \"%s\"!\n"
 msgstr "ERROR: 不正な SCSI デバイスファイル \"%s\" です!\n"
-
-#, c-format
 msgid "ERROR: Bad charset file %s\n"
 msgstr "ERROR: 不正な charset ファイル %s です\n"
-
-#, c-format
 msgid "ERROR: Bad charset type %s\n"
 msgstr "ERROR: 不正な charset タイプ %s です\n"
-
-#, c-format
 msgid "ERROR: Bad columns value %d!\n"
 msgstr "ERROR: 不正な columns 値 %d です!\n"
-
-#, c-format
 msgid "ERROR: Bad cpi value %f!\n"
 msgstr "ERROR: 不正な cpi 値 %f です!\n"
-
-#, c-format
 msgid "ERROR: Bad font description line: %s\n"
 msgstr "ERROR: 不正なフォント記述行: %s\n"
-
-#, c-format
 msgid "ERROR: Bad lpi value %f!\n"
 msgstr "ERROR: 不正な lpi 値 %f です!\n"
-
 msgid "ERROR: Bad page setup!\n"
 msgstr "ERROR: 不正なページ設定です!\n"
-
-#, c-format
 msgid "ERROR: Bad text direction %s\n"
 msgstr "ERROR: 不正な テキスト方向 %s です\n"
-
-#, c-format
 msgid "ERROR: Bad text width %s\n"
 msgstr "ERROR: 不正な テキスト幅 %s です\n"
-
 msgid "ERROR: Destination printer does not exist!\n"
 msgstr "ERROR: 送信先のプリンターが存在しません!\n"
-
-#, c-format
 msgid "ERROR: Duplicate %%BoundingBox: comment seen!\n"
 msgstr "ERROR: 重複した %%BoundingBox: コメントがあります!\n"
-
-#, c-format
 msgid "ERROR: Duplicate %%Pages: comment seen!\n"
 msgstr "ERROR: 重複した %%Pages: コメントがあります!\n"
-
 msgid "ERROR: Empty print file!\n"
 msgstr "ERROR: 空のプリントファイルです!\n"
-
-#, c-format
 msgid "ERROR: Error %d sending PAPSendData request: %s\n"
 msgstr "ERROR: エラー %d PAPSendData request の送信: %s\n"
-
-#, c-format
 msgid "ERROR: Expected quoted string on line %d of %s!\n"
 msgstr "ERROR: %d 行: %s には引用符で囲まれた文字列が必要です!\n"
-
 msgid "ERROR: Fatal USB error!\n"
 msgstr "ERROR: 致命的な USB エラーです!\n"
-
 msgid "ERROR: Invalid HP-GL/2 command seen, unable to print file!\n"
 msgstr "ERROR: 無効な HP-GL/2 コマンドがあり、ファイルをプリントできません!\n"
-
-#, c-format
 msgid "ERROR: Missing %%EndProlog!\n"
 msgstr "ERROR: %%EndProlog が見つかりません!\n"
-
-#, c-format
 msgid "ERROR: Missing %%EndSetup!\n"
 msgstr "ERROR: %%EndSetup が見つかりません!\n"
-
-msgid ""
-"ERROR: Missing device URI on command-line and no DEVICE_URI environment "
-"variable!\n"
-msgstr ""
-"ERROR: コマンドラインにデバイス URI が見つからず、環境変数 DEVICE_URI も見つ"
-"かりません!\n"
-
-#, c-format
+msgid "ERROR: Missing device URI on command-line and no DEVICE_URI environment variable!\n"
+msgstr "ERROR: コマンドラインにデバイス URI が見つからず、環境変数 DEVICE_URI も見つかりません!\n"
 msgid "ERROR: Missing value on line %d of banner file!\n"
 msgstr "ERROR: バナーファイルの %d 行目に値が見つかりません!\n"
-
-#, c-format
-msgid ""
-"ERROR: Need a msgid line before any translation strings on line %d of %s!\n"
+msgid "ERROR: Need a msgid line before any translation strings on line %d of %s!\n"
 msgstr "ERROR: %d 行: %s の翻訳文字列の前に msgid 行が必要です!\n"
-
-#, c-format
 msgid "ERROR: No %%BoundingBox: comment in header!\n"
 msgstr "ERROR: %%BoundingBox: コメントがありません!\n"
-
-#, c-format
 msgid "ERROR: No %%Pages: comment in header!\n"
 msgstr "ERROR: %%Pages: コメントがヘッダーにありません!\n"
-
-msgid ""
-"ERROR: No device URI found in argv[0] or in DEVICE_URI environment "
-"variable!\n"
-msgstr ""
-"ERROR: argv[0] または 環境変数 DEVICE_URI にデバイス URI が見つかりません!\n"
-
-#, c-format
+msgid "ERROR: No device URI found in argv[0] or in DEVICE_URI environment variable!\n"
+msgstr "ERROR: argv[0] または 環境変数 DEVICE_URI にデバイス URI が見つかりません!\n"
 msgid "ERROR: No fonts in charset file %s\n"
 msgstr "ERROR: charset ファイル %s にフォントが見つかりません\n"
-
 msgid "ERROR: No pages found!\n"
 msgstr "ERROR: ページが見つかりません!\n"
-
 msgid "ERROR: Out of paper!\n"
 msgstr "ERROR: 用紙切れです!\n"
-
 msgid "ERROR: PRINTER environment variable not defined!\n"
 msgstr "ERROR: PRINTER 環境変数が定義されていません!\n"
-
-#, c-format
 msgid "ERROR: Print file was not accepted (%s)!\n"
 msgstr "ERROR: プリントファイルが受け付けられませんでした (%s)!\n"
-
 msgid "ERROR: Printer not responding\n"
 msgstr "ERROR: プリンターが応答していません\n"
-
 msgid "ERROR: Printer not responding!\n"
 msgstr "ERROR: プリンターが応答していません!\n"
-
 msgid "ERROR: Printer sent unexpected EOF\n"
 msgstr "ERROR: プリンターが 想定外の EOF を送信しました\n"
-
-#, c-format
 msgid "ERROR: Remote host did not accept control file (%d)\n"
-msgstr ""
-"ERROR: リモートホストがコントロールファイルを受け付けませんでした (%d)\n"
-
-#, c-format
+msgstr "ERROR: リモートホストがコントロールファイルを受け付けませんでした (%d)\n"
 msgid "ERROR: Remote host did not accept data file (%d)\n"
 msgstr "ERROR: リモートホストがデータファイルを受け付けませんでした (%d)\n"
-
 msgid "ERROR: There was a timeout error while sending data to the printer\n"
 msgstr "ERROR: プリンターへのデータ送信中にタイムアウトエラーが発生しました\n"
-
-#, c-format
 msgid "ERROR: Unable to add file %d to job: %s\n"
 msgstr "ERROR: ファイル %d をジョブに追加できません: %s\n"
-
-#, c-format
 msgid "ERROR: Unable to cancel job %d: %s\n"
 msgstr "ERROR: ジョブ %d をキャンセルできません: %s\n"
-
 msgid "ERROR: Unable to copy PDF file"
 msgstr "ERROR: PDF ファイルをコピーできません"
-
 msgid "ERROR: Unable to create socket"
 msgstr "ERROR: ソケットを作成できません"
-
-#, c-format
 msgid "ERROR: Unable to create temporary compressed print file: %s\n"
 msgstr "ERROR: テンポラリーの圧縮プリントファイルを作成できません: %s\n"
-
 msgid "ERROR: Unable to create temporary file"
 msgstr "ERROR: テンポラリーファイルを作成できません"
-
-#, c-format
 msgid "ERROR: Unable to exec pictwpstops: %s\n"
 msgstr "ERROR: pictwpstops を実行できません: %s\n"
-
 msgid "ERROR: Unable to execute gs program"
 msgstr "ERROR: gs プログラムを実行できません"
-
 msgid "ERROR: Unable to execute pdftops program"
 msgstr "ERROR: pdftops プログラムを実行できません"
-
-#, c-format
 msgid "ERROR: Unable to fork pictwpstops: %s\n"
 msgstr "ERROR: pictwpstops をフォークできません: %s\n"
-
 msgid "ERROR: Unable to get PAP request"
 msgstr "ERROR: PAP リクエストを取得できません"
-
 msgid "ERROR: Unable to get PAP response"
 msgstr "ERROR: PAP レスポンスを取得できません"
-
-#, c-format
 msgid "ERROR: Unable to get PPD file for printer \"%s\" - %s.\n"
 msgstr "ERROR: プリンター \"%s\" の PPD ファイルを取得できません - %s\n"
-
 msgid "ERROR: Unable to get default AppleTalk zone"
 msgstr "ERROR: デフォルトの AppleTalk ゾーンを取得できません"
-
-#, c-format
 msgid "ERROR: Unable to get job %d attributes (%s)!\n"
 msgstr "ERROR: ジョブ %d の属性 (%s) を取得できません!\n"
-
-#, c-format
 msgid "ERROR: Unable to get printer status (%s)!\n"
 msgstr "ERROR: プリンターのステータス (%s) を取得できません!\n"
-
-#, c-format
 msgid "ERROR: Unable to locate printer '%s'!\n"
 msgstr "ERROR: プリンター '%s' が見つかりません\"!\n"
-
 msgid "ERROR: Unable to look for PAP response"
 msgstr "ERROR: PAP レスポンスが見つかりません"
-
 msgid "ERROR: Unable to lookup AppleTalk printers"
 msgstr "ERROR: AppleTalk プリンターが見つかりません"
-
 msgid "ERROR: Unable to make AppleTalk address"
 msgstr "ERROR: AppleTalk アドレスを作成できません"
-
-#, c-format
 msgid "ERROR: Unable to open \"%s\" - %s\n"
 msgstr "ERROR: \"%s\" を開けません - %s\n"
-
-#, c-format
 msgid "ERROR: Unable to open %s: %s\n"
 msgstr "ERROR: %s を開けません: %s\n"
-
 msgid "ERROR: Unable to open PPD file!\n"
 msgstr ""
-
-#, c-format
 msgid "ERROR: Unable to open banner file \"%s\" - %s\n"
 msgstr "ERROR: バナーファイル \"%s\" を開けません - %s\n"
-
-#, c-format
 msgid "ERROR: Unable to open device file \"%s\": %s\n"
 msgstr "ERROR: デバイスファイル \"%s\" を開けません: %s\n"
-
-#, c-format
 msgid "ERROR: Unable to open file \"%s\" - %s\n"
 msgstr "ERROR: ファイル \"%s\" を開けません - %s\n"
-
-#, c-format
 msgid "ERROR: Unable to open file \"%s\": %s\n"
 msgstr "ERROR: ファイル \"%s\" を開けません: %s\n"
-
 msgid "ERROR: Unable to open image file for printing!\n"
 msgstr "ERROR: 印刷のためのイメージファイルを開けません!\n"
-
-#, c-format
 msgid "ERROR: Unable to open print file \"%s\": %s\n"
 msgstr "ERROR: プリントファイル \"%s\" を開けません: %s\n"
-
-#, c-format
 msgid "ERROR: Unable to open print file %s - %s\n"
 msgstr "ERROR: プリントファイル %s を開けません - %s\n"
-
-#, c-format
 msgid "ERROR: Unable to open print file %s: %s\n"
 msgstr "ERROR: プリントファイル %s を開けません: %s\n"
-
-#, c-format
 msgid "ERROR: Unable to open raster file - %s\n"
 msgstr ""
-
-#, c-format
 msgid "ERROR: Unable to open temporary compressed print file: %s\n"
 msgstr "ERROR: テンポラリーの圧縮プリントファイルを開けません: %s\n"
-
-#, c-format
 msgid "ERROR: Unable to print %d text columns!\n"
 msgstr "ERROR: テキストカラム %d をプリントできません!\n"
-
-#, c-format
 msgid "ERROR: Unable to print %dx%d text page!\n"
 msgstr "ERROR: テキストページ %dx%d をプリントできません!\n"
-
 msgid "ERROR: Unable to read print data"
 msgstr "ERROR: プリントデータを読み込めません"
-
 msgid "ERROR: Unable to read print data!\n"
 msgstr "ERROR: プリントデータを読み込めません!\n"
-
 msgid "ERROR: Unable to reserve port"
 msgstr "ERROR: ポートを予約できません"
-
-#, c-format
 msgid "ERROR: Unable to seek to offset %ld in file - %s\n"
 msgstr "ERROR: ファイルでのオフセット %ld へシークできません - %s\n"
-
-#, c-format
 msgid "ERROR: Unable to seek to offset %lld in file - %s\n"
 msgstr "ERROR: ファイルでのオフセット %lld へシークできません - %s\n"
-
 msgid "ERROR: Unable to send LPD command"
 msgstr "ERROR: LPD コマンドを送信できません"
-
 msgid "ERROR: Unable to send PAP tickle request"
 msgstr "ERROR: PAP tickle 要求を送信できません"
-
 msgid "ERROR: Unable to send initial PAP send data request"
 msgstr "ERROR: PAP の初期データ送信要求を送信できません"
-
-#, c-format
 msgid "ERROR: Unable to send print data (%d)\n"
 msgstr "ERROR: プリントデータを送信できません (%d)\n"
-
 msgid "ERROR: Unable to send print data!\n"
 msgstr "ERROR: プリントデータを送信できません!\n"
-
 msgid "ERROR: Unable to send print file to printer"
 msgstr "ERROR: プリントファイルをプリンターへ送信できません"
-
 msgid "ERROR: Unable to send trailing nul to printer"
 msgstr "ERROR: 最後の NUL をプリンターへ送信できません"
-
-#, c-format
 msgid "ERROR: Unable to wait for pictwpstops: %s\n"
 msgstr "ERROR: pictwpstops を待つことができません: %s\n"
-
-#, c-format
 msgid "ERROR: Unable to write %d bytes to \"%s\": %s\n"
 msgstr "ERROR: %d バイトを \"%s\" に書き込めません: %s\n"
-
-#, c-format
 msgid "ERROR: Unable to write %d bytes to printer!\n"
 msgstr "ERROR: %d バイトをプリンターに書き込めません!\n"
-
 msgid "ERROR: Unable to write control file"
 msgstr "ERROR: コントロールファイルを書き込めません"
-
 msgid "ERROR: Unable to write print data"
 msgstr "ERROR: プリントデータを書き込めません"
-
-#, c-format
 msgid "ERROR: Unable to write print data: %s\n"
 msgstr "ERROR: プリントデータを書き込めません: %s\n"
-
 msgid "ERROR: Unable to write raster data to driver!\n"
 msgstr "ERROR: ラスターデータをドライバーへ書き込めません!\n"
-
 msgid "ERROR: Unable to write to temporary file"
 msgstr "ERROR: テンポラリーファイルへ書き込めません"
-
-#, c-format
 msgid "ERROR: Unable to write uncompressed document data: %s\n"
 msgstr "ERROR: 非圧縮ドキュメントデータを書き込めません: %s\n"
-
-#, c-format
 msgid "ERROR: Unexpected text on line %d of %s!\n"
 msgstr "ERROR: %d 行: %s は予期せぬテキストです!\n"
-
-#, c-format
 msgid "ERROR: Unknown encryption option value \"%s\"!\n"
 msgstr "ERROR: \"%s\" は未知の暗号オプション値です!\n"
-
-#, c-format
 msgid "ERROR: Unknown file order \"%s\"\n"
 msgstr "ERROR: \"%s\" は未知のファイルオーダーです\n"
-
-#, c-format
 msgid "ERROR: Unknown format character \"%c\"\n"
 msgstr "ERROR: \"%c\" は未知の書式文字です\n"
-
-#, c-format
 msgid "ERROR: Unknown message catalog format for \"%s\"!\n"
 msgstr "ERROR: \"%s\" は未知のメッセージカタログの書式です!\n"
-
-#, c-format
 msgid "ERROR: Unknown option \"%s\" with value \"%s\"!\n"
 msgstr "ERROR: \"%s\" (値 \"%s\") は未知のオプションです!\n"
-
-#, c-format
 msgid "ERROR: Unknown print mode \"%s\"\n"
 msgstr "ERROR: \"%s\" は未知のプリントモードです\n"
-
-#, c-format
 msgid "ERROR: Unknown version option value \"%s\"!\n"
 msgstr "ERROR: \"%s\" は未知のバージョンオプション値です!\n"
-
-#, c-format
 msgid "ERROR: Unsupported brightness value %s, using brightness=100!\n"
-msgstr ""
-"ERROR: %s はサポートされていない輝度値です。brightness=100 を使用します!\n"
-
-#, c-format
+msgstr "ERROR: %s はサポートされていない輝度値です。brightness=100 を使用します!\n"
 msgid "ERROR: Unsupported gamma value %s, using gamma=1000!\n"
-msgstr ""
-"ERROR: %s はサポートされていないガンマ値です。gamma=1000 を使用します!\n"
-
-#, c-format
+msgstr "ERROR: %s はサポートされていないガンマ値です。gamma=1000 を使用します!\n"
 msgid "ERROR: Unsupported number-up value %d, using number-up=1!\n"
-msgstr ""
-"ERROR: %d はサポートされていない number-up 値です。number-up=1 を使用しま"
-"す!\n"
-
-#, c-format
-msgid ""
-"ERROR: Unsupported number-up-layout value %s, using number-up-layout=lrtb!\n"
-msgstr ""
-"ERROR: %s はサポートされていない number-up-layout 値です。number-up-"
-"layout=lrtb を使用します!\n"
-
-#, c-format
+msgstr "ERROR: %d はサポートされていない number-up 値です。number-up=1 を使用します!\n"
+msgid "ERROR: Unsupported number-up-layout value %s, using number-up-layout=lrtb!\n"
+msgstr "ERROR: %s はサポートされていない number-up-layout 値です。number-up-layout=lrtb を使用します!\n"
 msgid "ERROR: Unsupported page-border value %s, using page-border=none!\n"
-msgstr ""
-"ERROR: %s はサポートされていない page-border 値です。page-border=none を使用"
-"します!\n"
-
-#, c-format
+msgstr "ERROR: %s はサポートされていない page-border 値です。page-border=none を使用します!\n"
 msgid "ERROR: doc_printf overflow (%d bytes) detected, aborting!\n"
-msgstr ""
-"ERROR: doc_printf オーバーフロー (%d バイト) が検出され、中断しました!\n"
-
-#, c-format
+msgstr "ERROR: doc_printf オーバーフロー (%d バイト) が検出され、中断しました!\n"
 msgid "ERROR: pdftops filter crashed on signal %d!\n"
 msgstr "ERROR: pdftops フィルターはシグナル %d で異常終了しました!\n"
-
-#, c-format
 msgid "ERROR: pdftops filter exited with status %d!\n"
 msgstr "ERROR: pdftops フィルターは状態 %d で終了しました!\n"
-
-#, c-format
 msgid "ERROR: pictwpstops exited on signal %d!\n"
 msgstr "ERROR: pictwpstops はシグナル %d で終了しました!\n"
-
-#, c-format
 msgid "ERROR: pictwpstops exited with status %d!\n"
 msgstr "ERROR: pictwpstops は状態 %d で終了しました!\n"
-
-msgid ""
-"ERROR: recoverable: Unable to connect to printer; will retry in 30 "
-"seconds...\n"
-msgstr ""
-"ERROR: 回復可能: プリンターに接続できません。30 秒後に再試行します...\n"
-
+msgid "ERROR: recoverable: Unable to connect to printer; will retry in 30 seconds...\n"
+msgstr "ERROR: 回復可能: プリンターに接続できません。30 秒後に再試行します...\n"
 msgid "ERROR: select() failed"
 msgstr "ERROR: select() が失敗しました"
-
 msgid "ERROR: unable to stat print file"
 msgstr "ERROR: プリントファイルの状態を取得できません"
-
 msgid "Edit Configuration File"
 msgstr "設定ファイルの編集"
-
 msgid "Empty PPD file!"
 msgstr "PPD ファイルが空です!"
-
 msgid "Ending Banner"
 msgstr "終了バナー"
-
 msgid "Enter old password:"
 msgstr "古いパスワードを入力:"
-
 msgid "Enter password again:"
 msgstr "パスワードを再度入力:"
-
 msgid "Enter password:"
 msgstr "パスワードを入力:"
-
-msgid ""
-"Enter your username and password or the root username and password to access "
-"this page. If you are using Kerberos authentication, make sure you have a "
-"valid Kerberos ticket."
-msgstr ""
-"このページにアクセスするために、あなたのユーザー名とパスワード、あるいは "
-"root のユーザー名とパスワードを入力してください。Kerberos 認証を使用している"
-"場合、有効な Kerberos チケットがあることを確認してください。"
-
+msgid "Enter your username and password or the root username and password to access this page. If you are using Kerberos authentication, make sure you have a valid Kerberos ticket."
+msgstr "このページにアクセスするために、あなたのユーザー名とパスワード、あるいは root のユーザー名とパスワードを入力してください。Kerberos 認証を使用している場合、有効な Kerberos チケットがあることを確認してください。"
 msgid "Envelope Feed"
 msgstr "封筒フィード"
-
 msgid "Epson"
 msgstr "Epson"
-
 msgid "Error Policy"
 msgstr "エラーポリシー"
-
 msgid "Error: need hostname after '-h' option!\n"
 msgstr "Error: '-h' オプションのあとにはホスト名が必要です!\n"
-
 msgid "Every 10 Labels"
 msgstr "10 ラベルごと"
-
 msgid "Every 2 Labels"
 msgstr "2 ラベルごと"
-
 msgid "Every 3 Labels"
 msgstr "3 ラベルごと"
-
 msgid "Every 4 Labels"
 msgstr "4 ラベルごと"
-
 msgid "Every 5 Labels"
 msgstr "5 ラベルごと"
-
 msgid "Every 6 Labels"
 msgstr "6 ラベルごと"
-
 msgid "Every 7 Labels"
 msgstr "7 ラベルごと"
-
 msgid "Every 8 Labels"
 msgstr "8 ラベルごと"
-
 msgid "Every 9 Labels"
 msgstr "9 ラベルごと"
-
 msgid "Every Label"
 msgstr "すべてのラベル"
-
 msgid "Expectation Failed"
 msgstr "Expectation Failed"
-
 msgid "Export Printers to Samba"
 msgstr "Samba へプリンターをエクスポート"
-
 msgid "FAIL\n"
 msgstr "失敗\n"
-
 msgid "File Folder"
 msgstr "ファイルフォルダー"
-
 msgid "File Folder - 9/16 x 3 7/16\""
 msgstr "ファイルフォルダー - 9/16 x 3 7/16\""
-
-#, c-format
-msgid ""
-"File device URIs have been disabled! To enable, see the FileDevice directive "
-"in \"%s/cupsd.conf\"."
-msgstr ""
-"ファイルデバイス URI は無効になっています! 有効にするには、\"%s/cupsd.conf\" "
-"の FileDevice ディレクティブを参照してください。"
-
+msgid "File device URIs have been disabled! To enable, see the FileDevice directive in \"%s/cupsd.conf\"."
+msgstr "ファイルデバイス URI は無効になっています! 有効にするには、\"%s/cupsd.conf\" の FileDevice ディレクティブを参照してください。"
 msgid "Folio"
 msgstr "フォリオ"
-
 msgid "Forbidden"
 msgstr "Forbidden"
-
 msgid "Fuser temperature high!"
 msgstr "定着器の温度が上っています!"
-
 msgid "Fuser temperature low!"
 msgstr "定着器の温度が下っています!"
-
 msgid "General"
 msgstr "一般"
-
 msgid "Generic"
 msgstr "汎用"
-
 msgid "German FanFold"
 msgstr "German FanFold"
-
 msgid "German FanFold Legal"
 msgstr "German FanFold Legal"
-
 msgid "Get-Response-PDU uses indefinite length"
 msgstr "Get-Response-PDU は不確定の長さを使用しています"
-
 msgid "Glossy Paper"
 msgstr "光沢紙"
-
 msgid "Got a printer-uri attribute but no job-id!"
 msgstr "printer-uri 属性を取得しましたが、job-id を取得できませんでした!"
-
 msgid "Grayscale"
 msgstr "グレースケール"
-
 msgid "HP"
 msgstr "HP"
-
 msgid "Hanging Folder"
 msgstr "Hanging Folder"
-
 msgid "Hanging Folder - 9/16 x 2\""
 msgstr "Hanging Folder - 9/16 x 2\""
-
 msgid "INFO: AppleTalk disabled in System Preferences\n"
 msgstr "INFO: AppleTalk がシステムプレファレンスで無効にされています\n"
-
 msgid "INFO: AppleTalk disabled in System Preferences.\n"
 msgstr "INFO: AppleTalk がシステムプレファレンスで無効にされています。\n"
-
 msgid "INFO: Canceling print job...\n"
 msgstr "INFO: プリントジョブをキャンセルしています...\n"
-
 msgid "INFO: Connected to printer...\n"
 msgstr "INFO: プリンターに接続しました...\n"
-
 msgid "INFO: Connecting to printer...\n"
 msgstr "INFO: プリンターに接続中...\n"
-
 msgid "INFO: Control file sent successfully\n"
 msgstr "INFO: コントロールファイルが正常に送信されました\n"
-
 msgid "INFO: Copying print data...\n"
 msgstr ""
-
 msgid "INFO: Data file sent successfully\n"
 msgstr "INFO: データファイルが正常に送信されました\n"
-
-#, c-format
 msgid "INFO: Finished page %d...\n"
 msgstr ""
-
-#, c-format
 msgid "INFO: Formatting page %d...\n"
 msgstr "INFO: ページ %d をフォーマット中...\n"
-
 msgid "INFO: Loading image file...\n"
 msgstr "INFO: イメージファイルをロード中...\n"
-
 msgid "INFO: Looking for printer...\n"
 msgstr "INFO: プリンターを探しています...\n"
-
 msgid "INFO: Opening connection\n"
 msgstr "INFO: コネクションを開いています\n"
-
 msgid "INFO: Print file sent, waiting for printer to finish...\n"
-msgstr ""
-"INFO: プリントファイルを送信し、プリンターが作業を完了するのを待っていま"
-"す...\n"
-
+msgstr "INFO: プリントファイルを送信し、プリンターが作業を完了するのを待っています...\n"
 msgid "INFO: Printer busy; will retry in 10 seconds...\n"
 msgstr "INFO: プリンターがビジー状態です。10 秒後に再試行します...\n"
-
 msgid "INFO: Printer busy; will retry in 30 seconds...\n"
 msgstr "INFO: プリンターがビジー状態です。30 秒後に再試行します...\n"
-
 msgid "INFO: Printer busy; will retry in 5 seconds...\n"
 msgstr "INFO: プリンターがビジー状態です。5 秒後に再試行します...\n"
-
-#, c-format
 msgid "INFO: Printer does not support IPP/%d.%d, trying IPP/1.0...\n"
-msgstr ""
-"INFO: プリンターが IPP/%d.%d をサポートしていません。IPP/1.0 を試します...\n"
-
+msgstr "INFO: プリンターが IPP/%d.%d をサポートしていません。IPP/1.0 を試します...\n"
 msgid "INFO: Printer is busy; will retry in 5 seconds...\n"
 msgstr "INFO: プリンターがビジー状態です。5 秒後に再試行します...\n"
-
 msgid "INFO: Printer is currently off-line.\n"
 msgstr "INFO: プリンターは現在オフラインです。\n"
-
 msgid "INFO: Printer is currently offline.\n"
 msgstr "INFO: プリンターは現在オフラインです。\n"
-
 msgid "INFO: Printer is now online.\n"
 msgstr "INFO: プリンターは現在オンラインです。\n"
-
 msgid "INFO: Printer is offline.\n"
 msgstr "INFO: プリンターはオフラインです。\n"
-
 msgid "INFO: Printer not connected; will retry in 30 seconds...\n"
 msgstr "INFO: プリンターに接続できません。30 秒後に再試行します...\n"
-
-#, c-format
 msgid "INFO: Printing page %d, %d%% complete...\n"
 msgstr "INFO: ページ %d をプリント中、%d%% 完了しました...\n"
-
-#, c-format
 msgid "INFO: Printing page %d...\n"
 msgstr "INFO: ページ %d をプリント中...\n"
-
 msgid "INFO: Ready to print.\n"
 msgstr "INFO: プリントの準備ができています\n"
-
-#, c-format
 msgid "INFO: Sending control file (%lu bytes)\n"
 msgstr "INFO: コントロールファイルを送信中 (%lu バイト)\n"
-
-#, c-format
 msgid "INFO: Sending control file (%u bytes)\n"
 msgstr "INFO: コントロールファイルを送信中 (%u バイト)\n"
-
 msgid "INFO: Sending data\n"
 msgstr "INFO: データを送信中\n"
-
-#, c-format
 msgid "INFO: Sending data file (%ld bytes)\n"
 msgstr "INFO: データファイルを送信中 (%ld バイト)\n"
-
-#, c-format
 msgid "INFO: Sending data file (%lld bytes)\n"
 msgstr "INFO: データファイルを送信中 (%lld バイト)\n"
-
 msgid "INFO: Sending print data...\n"
 msgstr "INFO: プリントデータを送信中...\n"
-
-#, c-format
 msgid "INFO: Sent print file, %ld bytes...\n"
 msgstr "INFO: プリントファイルを送信、%ld バイト...\n"
-
-#, c-format
 msgid "INFO: Sent print file, %lld bytes...\n"
 msgstr "INFO: プリントファイルを送信、%lld バイト...\n"
-
-#, c-format
 msgid "INFO: Spooling LPR job, %.0f%% complete...\n"
 msgstr "INFO: LPR ジョブをスプール中、%.0f%% 完了しました...\n"
-
-#, c-format
 msgid "INFO: Starting page %d...\n"
 msgstr ""
-
 msgid "INFO: Unable to contact printer, queuing on next printer in class...\n"
-msgstr ""
-"INFO: プリンターと交信できません。クラス内の次のプリンターにキューします...\n"
-
-#, c-format
+msgstr "INFO: プリンターと交信できません。クラス内の次のプリンターにキューします...\n"
 msgid "INFO: Using default AppleTalk zone \"%s\"\n"
 msgstr "INFO: デフォルトの AppleTalk ゾーン \"%s\" を使います\n"
-
 msgid "INFO: Waiting for job to complete...\n"
 msgstr "INFO: ジョブが完了するのを待っています...\n"
-
 msgid "INFO: Waiting for printer to become available...\n"
 msgstr "INFO: プリンターが使用可能になるのを待っています...\n"
-
 msgid "ISO B0"
 msgstr "ISO B0"
-
 msgid "ISO B1"
 msgstr "ISO B1"
-
 msgid "ISO B10"
 msgstr "ISO B10"
-
 msgid "ISO B2"
 msgstr "ISO B2"
-
 msgid "ISO B3"
 msgstr "ISO B3"
-
 msgid "ISO B4"
 msgstr "ISO B4"
-
 msgid "ISO B4 Envelope"
 msgstr "ISO B4 封筒"
-
 msgid "ISO B5"
 msgstr "ISO B5"
-
 msgid "ISO B5 (Oversize)"
 msgstr "ISO B5 (特大)"
-
 msgid "ISO B5 Envelope"
 msgstr "ISO B5 封筒"
-
 msgid "ISO B6"
 msgstr "ISO B6"
-
 msgid "ISO B6 Envelope"
 msgstr "ISO B6 封筒"
-
 msgid "ISO B7"
 msgstr "ISO B7"
-
 msgid "ISO B8"
 msgstr "ISO B8"
-
 msgid "ISO B9"
 msgstr "ISO B9"
-
 msgid "Illegal control character"
 msgstr "不正な制御文字"
-
 msgid "Illegal main keyword string"
 msgstr "不正なメインキーワード文字列"
-
 msgid "Illegal option keyword string"
 msgstr "不正なオプションキーワード文字列"
-
 msgid "Illegal translation string"
 msgstr "不正な翻訳文字列"
-
 msgid "Illegal whitespace character"
 msgstr "不正な空白文字"
-
 msgid "Ink/toner almost empty."
 msgstr "インクまたはトナーがほとんどありません。"
-
 msgid "Ink/toner empty!"
 msgstr "インクまたはトナーがありません!"
-
 msgid "Ink/toner waste bin almost full."
 msgstr "廃インクまたは廃トナー容器がほとんど一杯です。"
-
 msgid "Ink/toner waste bin full!"
 msgstr "廃インクまたは廃トナー容器が一杯です!"
-
 msgid "Installable Options"
 msgstr "インストール可能オプション"
-
 msgid "Installed"
 msgstr "インストールされています"
-
 msgid "IntelliBar Label Printer"
-msgstr "IntelliBar ラベルプリンター"
-
+msgstr "IntelliBar ラベルプリンタ"
 msgid "Intellitech"
 msgstr "Intellitech"
-
 msgid "Interlock open."
 msgstr "インターロックが開いています。"
-
 msgid "Internal Server Error"
 msgstr ""
-
 msgid "Internal error"
 msgstr "内部エラー"
-
 msgid "Internet Postage 2-Part"
 msgstr "Internet Postage 2-Part"
-
 msgid "Internet Postage 2-Part - 2 1/4 x 7 1/2\""
 msgstr "Internet Postage 2-Part - 2 1/4 x 7 1/2\""
-
 msgid "Internet Postage 3-Part"
 msgstr "Internet Postage 3-Part"
-
 msgid "Internet Postage 3-Part - 2 1/4 x 7\""
 msgstr "Internet Postage 3-Part - 2 1/4 x 7\""
-
 msgid "Internet Printing Protocol"
 msgstr "インターネット印刷プロトコル"
-
 msgid "Invite Envelope"
 msgstr "招待状封筒"
-
 msgid "Italian Envelope"
 msgstr "イタリア封筒"
-
 msgid "JCL"
 msgstr "JCL"
-
-#, c-format
 msgid "Job #%d cannot be restarted - no files!"
 msgstr "ジョブ番号 %d を再開できません - ファイルが見つかりません!"
-
-#, c-format
 msgid "Job #%d does not exist!"
 msgstr "ジョブ番号 %d は存在しません!"
-
-#, c-format
 msgid "Job #%d is already aborted - can't cancel."
 msgstr "ジョブ番号 %d はすでに中断されています - キャンセルできません。"
-
-#, c-format
 msgid "Job #%d is already canceled - can't cancel."
 msgstr "ジョブ番号 %d はすでにキャンセルされています - キャンセルできません。"
-
-#, c-format
 msgid "Job #%d is already completed - can't cancel."
 msgstr "ジョブ番号 %d はすでに完了しています - キャンセルできません。"
-
-#, c-format
 msgid "Job #%d is finished and cannot be altered!"
 msgstr "ジョブ番号 %d はすでに終了し、変更できません!"
-
-#, c-format
 msgid "Job #%d is not complete!"
 msgstr "ジョブ番号 %d は完了していません!"
-
-#, c-format
 msgid "Job #%d is not held for authentication!"
 msgstr "ジョブ番号 %d は認証のために保留されていません!"
-
-#, c-format
 msgid "Job #%d is not held!"
 msgstr "ジョブ番号 %d は保留されていません!"
-
-#, c-format
 msgid "Job #%s does not exist!"
 msgstr "ジョブ番号 #%s は存在しません!"
-
-#, c-format
 msgid "Job %d not found!"
 msgstr "ジョブ番号 %d は見つかりません!"
-
 msgid "Job Completed"
 msgstr "ジョブ完了"
-
 msgid "Job Created"
 msgstr "ジョブ作成"
-
 msgid "Job ID: "
 msgstr "ジョブ ID: "
-
 msgid "Job Options Changed"
 msgstr "ジョブオプション変更"
-
 msgid "Job Stopped"
 msgstr "ジョブ中止"
-
 msgid "Job UUID: "
 msgstr "ジョブ UUID: "
-
 msgid "Job is completed and cannot be changed."
 msgstr "ジョブは完了し変更できません。"
-
 msgid "Job operation failed:"
 msgstr "ジョブ操作失敗:"
-
 msgid "Job state cannot be changed."
 msgstr "ジョブの状態を変更できません。"
-
 msgid "Job subscriptions cannot be renewed!"
 msgstr "ジョブサブスクリプションが更新できません!"
-
 msgid "Jobs"
 msgstr "ジョブ"
-
 msgid "Kaku2 Envelope"
 msgstr "角 2 封筒"
-
 msgid "Kaku3 Envelope"
 msgstr "角 3 封筒"
-
 msgid "LPD/LPR Host or Printer"
 msgstr "LPD/LPR ホストまたはプリンター"
-
 msgid "Label Printer"
 msgstr "ラベルプリンター"
-
 msgid "Label Top"
 msgstr "ラベルトップ"
-
-#, c-format
 msgid "Language \"%s\" not supported!"
 msgstr "言語 \"%s\" はサポートされていません!"
-
 msgid "Large Address"
 msgstr "ラージアドレス"
-
 msgid "Large Address - 1 4/10 x 3 1/2\""
 msgstr "ラージアドレス - 1 4/10 x 3 1/2\""
-
 msgid "LaserJet Series PCL 4/5"
 msgstr "LaserJet Series PCL 4/5"
-
 msgid "Light"
 msgstr "薄い"
-
 msgid "Line longer than the maximum allowed (255 characters)"
 msgstr "1 行が最大値 (255 文字) を超えています"
-
 msgid "List Available Printers"
 msgstr "使用可能なプリンターをリスト化"
-
 msgid "Location: "
 msgstr "場所: "
-
 msgid "Long-Edge (Portrait)"
 msgstr "長辺給紙 (縦向き)"
-
 msgid "Make and Model: "
 msgstr "プリンタードライバー: "
-
 msgid "Manual Feed"
 msgstr "手差し"
-
 msgid "Media Dimensions: "
 msgstr "用紙の大きさ: "
-
 msgid "Media Limits: "
 msgstr "用紙の印字領域: "
-
 msgid "Media Name: "
 msgstr "用紙名:"
-
 msgid "Media Size"
 msgstr "用紙サイズ"
-
 msgid "Media Source"
 msgstr "給紙"
-
 msgid "Media Tracking"
 msgstr "用紙の経路"
-
 msgid "Media Type"
 msgstr "用紙種類"
-
 msgid "Media jam!"
 msgstr "紙詰まりです!"
-
 msgid "Media tray almost empty."
 msgstr "用紙トレイが空になりかけています。"
-
 msgid "Media tray empty!"
 msgstr "用紙トレイが空になりました!"
-
 msgid "Media tray missing!"
 msgstr "用紙トレイが見つかりません!"
-
 msgid "Media tray needs to be filled."
 msgstr "用紙トレイに補充が必要です。"
-
 msgid "Medium"
 msgstr "紙質"
-
 msgid "Memory allocation error"
 msgstr "メモリ割り当てエラー"
-
 msgid "Missing PPD-Adobe-4.x header"
 msgstr "PPD-Adobe-4.x ヘッダがありません"
-
 msgid "Missing asterisk in column 1"
 msgstr "1 列目にアスタリスクがありません"
-
 msgid "Missing document-number attribute!"
 msgstr "document-number 属性がありません!"
-
-#, c-format
 msgid "Missing double quote on line %d!"
 msgstr "%d 行に二重引用符がありません!"
-
 msgid "Missing form variable!"
 msgstr "form 変数がありません!"
-
 msgid "Missing notify-subscription-ids attribute!"
 msgstr "notify-subscription-ids 属性がありません!"
-
 msgid "Missing requesting-user-name attribute!"
 msgstr "requesting-user-name 属性が設定されていません!"
-
 msgid "Missing required attributes!"
 msgstr "必須の属性が設定されていません!"
-
-#, c-format
 msgid "Missing value on line %d!"
 msgstr "%d 行に値がありません!"
-
 msgid "Missing value string"
 msgstr "値文字列がありません"
-
-#, c-format
-msgid ""
-"Model:  name = %s\n"
-"        natural_language = %s\n"
-"        make-and-model = %s\n"
-"        device-id = %s\n"
-msgstr ""
-"モデル: name = %s\n"
-"        natural_language = %s\n"
-"        make-and-model = %s\n"
-"        device-id = %s\n"
-
+msgid "Model:  name = %s\n        natural_language = %s\n        make-and-model = %s\n        device-id = %s\n"
+msgstr "モデル: name = %s\n        natural_language = %s\n        make-and-model = %s\n        device-id = %s\n"
 msgid "Modify Class"
 msgstr "クラスの変更"
-
 msgid "Modify Printer"
 msgstr "プリンターの変更"
-
 msgid "Monarch"
 msgstr "Monarch"
-
 msgid "Monarch Envelope"
 msgstr "Monarch 封筒"
-
 msgid "Move All Jobs"
 msgstr "すべてのジョブの移動"
-
 msgid "Move Job"
 msgstr "ジョブの移動"
-
 msgid "Moved Permanently"
 msgstr "別の場所へ移動しました"
-
-#, c-format
 msgid "NOTICE: Print file accepted - job ID %d.\n"
 msgstr "NOTICE: プリントファイルを受け付けました - ジョブ ID %d。\n"
-
 msgid "NOTICE: Print file accepted - job ID unknown.\n"
 msgstr "NOTICE: プリントファイルを受け付けました - ジョブ ID 不明。\n"
-
 msgid "NULL PPD file pointer"
 msgstr "PPD ファイルポインターが NULL です"
-
 msgid "Name OID uses indefinite length"
 msgstr "OID 名は限定的な長さを使用します"
-
 msgid "Never"
 msgstr "Never"
-
 msgid "New Stylus Color Series"
 msgstr "New Stylus Color シリーズ"
-
 msgid "New Stylus Photo Series"
 msgstr "New Stylus Photo シリーズ"
-
 msgid "No"
 msgstr "いいえ"
-
 msgid "No Content"
 msgstr "中身がありません"
-
 msgid "No PPD name!"
 msgstr "PPD の名前がありません!"
-
 msgid "No VarBind SEQUENCE"
 msgstr "VarBind SEQUENCE がありません"
-
 msgid "No Windows printer drivers are installed!"
 msgstr "Windows プリンタードライバーがインストールされていません!"
-
 msgid "No active connection"
 msgstr "アクティブな接続はありません"
-
-#, c-format
 msgid "No active jobs on %s!"
 msgstr "%s にはアクティブなジョブはありません!"
-
 msgid "No attributes in request!"
 msgstr "リクエストに属性がありません!"
-
 msgid "No authentication information provided!"
 msgstr "認証情報が提供されていません!"
-
 msgid "No community name"
 msgstr "コミュニティ名がありません"
-
 msgid "No default printer"
 msgstr "デフォルトのプリンターはありません"
-
 msgid "No destinations added."
 msgstr "追加された宛先はありません"
-
 msgid "No error-index"
 msgstr "エラーインデックスがありません"
-
 msgid "No error-status"
 msgstr "エラーステータスがありません"
-
 msgid "No file!?!"
 msgstr "ファイルがありません!?!"
-
 msgid "No modification time!"
 msgstr "変更時刻がありません!"
-
 msgid "No name OID"
 msgstr "OID 名がありません"
-
 msgid "No printer name!"
 msgstr "プリンター名がありません!"
-
 msgid "No printer-uri found for class!"
 msgstr "クラスのプリンターURI が見つかりません!"
-
 msgid "No printer-uri found!"
 msgstr "プリンターURI が見つかりません!"
-
 msgid "No printer-uri in request!"
 msgstr "プリンターURI のリクエストがありません!"
-
 msgid "No request-id"
 msgstr "リクエストID がありません"
-
 msgid "No subscription attributes in request!"
 msgstr "リクエストにサブスクリプション属性がありません!"
-
 msgid "No subscriptions found."
 msgstr "サブスクリプションが見つかりません。"
-
 msgid "No variable-bindings SEQUENCE"
 msgstr "variable-bindings SEQUENCE がありません"
-
 msgid "No version number"
 msgstr "バージョン名がありません"
-
 msgid "Non-continuous (Mark sensing)"
 msgstr "非連続です (Mark sensing)"
-
 msgid "Non-continuous (Web sensing)"
 msgstr "非連続です (Web sensing)"
-
 msgid "Normal"
 msgstr "標準"
-
 msgid "Not Found"
 msgstr "見つかりません"
-
 msgid "Not Implemented"
 msgstr "実装されていません"
-
 msgid "Not Installed"
 msgstr "インストールされていません"
-
 msgid "Not Modified"
 msgstr "変更されていません"
-
 msgid "Not Supported"
 msgstr "サポートされていません"
-
 msgid "Not allowed to print."
 msgstr "印刷が許可されていません。"
-
 msgid "Note"
 msgstr "注意"
-
 msgid "OK"
 msgstr "OK"
-
 msgid "OPC almost at end-of-life."
 msgstr "OPC はもうすぐ交換が必要になります。"
-
 msgid "OPC at end-of-life!"
 msgstr "OPC は交換時期です!"
-
 msgid "Off (1-Sided)"
 msgstr "Off (片面)"
-
 msgid "Oki"
 msgstr "Oki"
-
 msgid "Online Help"
 msgstr "オンラインヘルプ"
-
-#, c-format
 msgid "Open of %s failed: %s"
 msgstr "%s のオープンに失敗しました: %s"
-
 msgid "OpenGroup without a CloseGroup first"
 msgstr "OpenGroup の前にまず CloseGroup が必要です"
-
 msgid "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first"
 msgstr "OpenUI/JCLOpenUI の前にまず CloseUI/JCLCloseUI が必要です"
-
 msgid "Operation Policy"
 msgstr "操作ポリシー"
-
 msgid "Options Installed"
 msgstr "インストールされたオプション"
-
 msgid "Options: "
 msgstr "オプション:"
-
 msgid "Out of toner!"
 msgstr "トナー切れです!"
-
 msgid "Output Mode"
 msgstr "出力モード"
-
 msgid "Output bin almost full."
 msgstr "排紙トレイがほとんど一杯です。"
-
 msgid "Output bin full!"
 msgstr "排紙トレイが一杯です!"
-
-#, c-format
 msgid "Output for printer %s is sent to %s\n"
 msgstr "プリンター %s の出力は %s に送られます\n"
-
-#, c-format
 msgid "Output for printer %s is sent to remote printer %s on %s\n"
 msgstr "プリンター %s の出力は、リモートプリンター %s (%s 上) に送られます\n"
-
-#, c-format
 msgid "Output for printer %s/%s is sent to %s\n"
 msgstr "プリンター %s/%s の出力は %s に送られます\n"
-
-#, c-format
 msgid "Output for printer %s/%s is sent to remote printer %s on %s\n"
-msgstr ""
-"プリンター %s/%s の出力は、リモートプリンター %s (%s 上) に送られます\n"
-
+msgstr "プリンター %s/%s の出力は、リモートプリンター %s (%s 上) に送られます\n"
 msgid "Output tray missing!"
 msgstr "排紙トレイが見つかりません!"
-
 msgid "PASS\n"
 msgstr "合格\n"
-
 msgid "PCL Laser Printer"
 msgstr "PCL レーザープリンター"
-
 msgid "PRC1 Envelope"
 msgstr "PRC1 封筒"
-
 msgid "PRC10 Envelope"
 msgstr "PRC10 封筒"
-
 msgid "PRC16K"
 msgstr "PRC16K"
-
 msgid "PRC2 Envelope"
 msgstr "PRC2 封筒"
-
 msgid "PRC3 Envelope"
 msgstr "PRC3 封筒"
-
 msgid "PRC32K"
 msgstr "PRC32K"
-
 msgid "PRC32K (Oversize)"
 msgstr "PRC32K (特大)"
-
 msgid "PRC4 Envelope"
 msgstr "PRC4 封筒"
-
 msgid "PRC5 Envelope"
 msgstr "PRC5 封筒"
-
 msgid "PRC6 Envelope"
 msgstr "PRC6 封筒"
-
 msgid "PRC7 Envelope"
 msgstr "PRC7 封筒"
-
 msgid "PRC8 Envelope"
 msgstr "PRC8 封筒"
-
 msgid "PRC9 Envelope"
 msgstr "PRC9 封筒"
-
 msgid "Packet does not contain a Get-Response-PDU"
 msgstr "パケットが Get-Response-PDU を含んでいません"
-
 msgid "Packet does not start with SEQUENCE"
 msgstr "パケットが SEQUENCE から始まりません"
-
 msgid "ParamCustominCutInterval"
 msgstr "ParamCustominCutInterval"
-
 msgid "ParamCustominTearInterval"
 msgstr "ParamCustominTearInterval"
-
-#, c-format
 msgid "Password for %s on %s? "
 msgstr "%s のパスワード (%s 上)? "
-
-#, c-format
 msgid "Password for %s required to access %s via SAMBA: "
 msgstr "%s のパスワード (SAMBA 経由で %s にアクセスするのに必要):"
-
 msgid "Pause Class"
 msgstr "クラスの休止"
-
 msgid "Pause Printer"
 msgstr "プリンターの休止"
-
 msgid "Peel-Off"
 msgstr "Peel-Off"
-
 msgid "Personal Envelope"
 msgstr "パーソナル封筒"
-
 msgid "Photo"
 msgstr "写真"
-
 msgid "Photo Labels"
 msgstr "写真ラベル"
-
 msgid "Plain Paper"
 msgstr "普通紙"
-
 msgid "Policies"
 msgstr "ポリシー"
-
 msgid "Port Monitor"
 msgstr "ポートモニター"
-
 msgid "PostScript Printer"
 msgstr "ポストスクリプトプリンター"
-
 msgid "Postcard"
 msgstr "ハガキ"
-
 msgid "Print Density"
 msgstr "印刷密度"
-
 msgid "Print Job:"
 msgstr "ジョブの印刷:"
-
 msgid "Print Mode"
 msgstr "印刷モード"
-
 msgid "Print Rate"
 msgstr "印刷レート"
-
 msgid "Print Self-Test Page"
 msgstr "自己テストページの印刷"
-
 msgid "Print Speed"
 msgstr "印刷速度"
-
 msgid "Print Test Page"
 msgstr "テストページの印刷"
-
 msgid "Print and Cut"
-msgstr "Print and Cut"
-
+msgstr "プリントしてカット"
 msgid "Print and Tear"
-msgstr "Print and Tear"
-
+msgstr "プリントして切り取る"
 msgid "Printed For: "
-msgstr "Printed For: "
-
+msgstr "プリント対象:"
 msgid "Printed From: "
-msgstr "Printed From: "
-
+msgstr "プリント元:"
 msgid "Printed On: "
-msgstr "Printed On: "
-
+msgstr "プリント先:"
 msgid "Printer Added"
 msgstr "追加されたプリンター"
-
 msgid "Printer Default"
 msgstr "デフォルトのプリンター"
-
 msgid "Printer Deleted"
 msgstr "削除されたプリンター"
-
 msgid "Printer Modified"
 msgstr "変更されたプリンター"
-
 msgid "Printer Name: "
 msgstr "プリンター名:"
-
 msgid "Printer Paused"
 msgstr "プリンターの休止"
-
 msgid "Printer Settings"
 msgstr "プリンター設定"
-
 msgid "Printer offline."
 msgstr "プリンターはオフラインです。"
-
 msgid "Printer:"
 msgstr "プリンター:"
-
 msgid "Printers"
 msgstr "プリンター"
-
 msgid "Purge Jobs"
 msgstr "ジョブの削除"
-
 msgid "Quarto"
 msgstr "Quarto"
-
 msgid "Quota limit reached."
 msgstr "Quota の制限に達しました。"
-
 msgid "Rank    Owner   Job     File(s)                         Total Size\n"
 msgstr "ランク  所有者  ジョブ  ファイル                        合計サイズ\n"
-
-msgid ""
-"Rank   Owner      Pri  Job        Files                       Total Size\n"
-msgstr ""
-"ランク 所有者     優先 ジョブ     ファイル                    合計サイズ\n"
-
+msgid "Rank   Owner      Pri  Job        Files                       Total Size\n"
+msgstr "ランク 所有者     優先 ジョブ     ファイル                    合計サイズ\n"
 msgid "Reject Jobs"
 msgstr "ジョブの拒否"
-
 msgid "Reprint After Error"
 msgstr "エラー後の再印刷"
-
 msgid "Request Entity Too Large"
 msgstr "要求するエンティティが大きすぎます"
-
 msgid "Resolution"
 msgstr "解像度"
-
 msgid "Resume Class"
 msgstr "クラスを再開する"
-
 msgid "Resume Printer"
 msgstr "プリンターを再開する"
-
 msgid "Return Address"
 msgstr "アドレスを戻す"
-
 msgid "Return Address - 3/4 x 2\""
 msgstr "アドレスを戻す ー 3/4 x 2\""
-
 msgid "Rewind"
 msgstr "戻る"
-
-#, c-format
 msgid "Running command: %s %s -N -A %s -c '%s'\n"
 msgstr "コマンドを実行中: %s %s -N -A %s -c '%s'\n"
-
 msgid "SCSI Printer"
 msgstr "SCSI プリンター"
-
 msgid "SEQUENCE uses indefinite length"
 msgstr "SEQUENCE は不定長を使用しています"
-
 msgid "See Other"
 msgstr "残りを見てください"
-
-#, c-format
 msgid "Serial Port #%d"
 msgstr "シリアルーポート #%d"
-
 msgid "Server Restarted"
 msgstr "再起動されたサーバー"
-
 msgid "Server Security Auditing"
 msgstr "サーバーのセキュリティーチェック"
-
 msgid "Server Started"
 msgstr "開始されたサーバー"
-
 msgid "Server Stopped"
 msgstr "停止されたサーバー"
-
 msgid "Service Unavailable"
 msgstr "利用できないサービス"
-
 msgid "Set Allowed Users"
 msgstr "許可するユーザーの設定"
-
 msgid "Set As Server Default"
 msgstr "サーバーをデフォルトに設定"
-
 msgid "Set Class Options"
 msgstr "クラスオプションを設定"
-
 msgid "Set Printer Options"
 msgstr "プリンターオプションの設定"
-
 msgid "Set Publishing"
 msgstr "公開の設定"
-
 msgid "Shipping Address"
 msgstr "発送アドレス"
-
 msgid "Shipping Address - 2 5/16 x 4\""
 msgstr "発送アドレス - 2 5/16 x 4\""
-
 msgid "Short-Edge (Landscape)"
 msgstr "短辺 (横原稿)"
-
 msgid "Special Paper"
 msgstr "スペシャルペーパー"
-
 msgid "Standard"
 msgstr "標準"
-
 msgid "Starting Banner"
 msgstr "開始バナー"
-
 msgid "Statement"
 msgstr "記述"
-
 msgid "Stylus Color Series"
 msgstr "Stylus Color シリーズ"
-
 msgid "Stylus Photo Series"
 msgstr "Stylus Photo シリーズ"
-
 msgid "Super A"
 msgstr "スーパー A"
-
 msgid "Super B"
 msgstr "スーパー B"
-
 msgid "Super B/A3"
 msgstr "スーパー B/A3"
-
 msgid "Switching Protocols"
 msgstr "プロトコルの変更"
-
 msgid "Tabloid"
 msgstr "タブロイド"
-
 msgid "Tabloid (Oversize)"
 msgstr "タブロイド (特大)"
-
 msgid "Tear"
 msgstr "Tear"
-
 msgid "Tear-Off"
 msgstr "Tear-Off"
-
 msgid "Tear-Off Adjust Position"
 msgstr "Tear-Off 位置調節"
-
-#, c-format
 msgid "The PPD file \"%s\" could not be found."
 msgstr "PPD ファイル \"%s\" が見つかりません。"
-
-#, c-format
 msgid "The PPD file \"%s\" could not be opened: %s"
 msgstr "PPD ファイル \"%s\" が開きませんでした: %s"
-
-msgid ""
-"The class name may only contain up to 127 printable characters and may not "
-"contain spaces, slashes (/), or the pound sign (#)."
-msgstr ""
-"クラス名は 127 文字以内の表示可能文字から成り、空白、スラッシュ (/)、ポンド記"
-"号 (#) を含んではなりません。"
-
-msgid ""
-"The notify-lease-duration attribute cannot be used with job subscriptions."
-msgstr ""
-"notify-lease-duration 属性は、ジョブサブスクリプションと一緒に使うことはでき"
-"ません。"
-
-#, c-format
+msgid "The class name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)."
+msgstr "クラス名は 127 文字以内の表示可能文字から成り、空白、スラッシュ (/)、ポンド記号 (#) を含んではなりません。"
+msgid "The notify-lease-duration attribute cannot be used with job subscriptions."
+msgstr "notify-lease-duration 属性は、ジョブサブスクリプションと一緒に使うことはできません。"
 msgid "The notify-user-data value is too large (%d > 63 octets)!"
 msgstr "notify-user-data 値が大きすぎます (%d > 63 オクテット)!"
-
-msgid ""
-"The printer name may only contain up to 127 printable characters and may not "
-"contain spaces, slashes (/), or the pound sign (#)."
-msgstr ""
-"プリンター名は 127 文字以内の表示可能文字から成り、空白、スラッシュ (/)、ポン"
-"ド記号 (#) を含んではなりません。"
-
+msgid "The printer name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)."
+msgstr "プリンター名は 127 文字以内の表示可能文字から成り、空白、スラッシュ (/)、ポンド記号 (#) を含んではなりません。"
 msgid "The printer or class is not shared!"
 msgstr "プリンターまたはクラスは共有できません!"
-
 msgid "The printer or class was not found."
 msgstr "プリンターまたはクラスが見つかりませんでした。"
-
-#, c-format
 msgid "The printer-uri \"%s\" contains invalid characters."
 msgstr "printer-uri \"%s\" には、無効な文字が含まれています。"
-
 msgid "The printer-uri attribute is required!"
 msgstr "printer-uri 属性は必須です!"
-
-msgid ""
-"The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"."
-msgstr ""
-"printer-uri は、\"ipp://ホスト名/classes/クラス名\" 形式でなければなりませ"
-"ん。"
-
-msgid ""
-"The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"."
-msgstr ""
-"printer-uri は \"ipp://ホスト名/printers/プリンター名\" 形式でなければなりま"
-"せん。"
-
-msgid ""
-"The subscription name may not contain spaces, slashes (/), question marks "
-"(?), or the pound sign (#)."
-msgstr ""
-"サブスクリプション名には、スペース、スラッシュ (/)、疑問府 (?)、ポンド記号 "
-"(#) を使用しないでください。"
-
+msgid "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"."
+msgstr "printer-uri は、\"ipp://ホスト名/classes/クラス名\" 形式でなければなりません。"
+msgid "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"."
+msgstr "printer-uri は \"ipp://ホスト名/printers/プリンター名\" 形式でなければなりません。"
+msgid "The subscription name may not contain spaces, slashes (/), question marks (?), or the pound sign (#)."
+msgstr "サブスクリプション名には、スペース、スラッシュ (/)、疑問府 (?)、ポンド記号 (#) を使用しないでください。"
 msgid "There are too many subscriptions."
 msgstr "サブスクリプションが多すぎます。"
-
 msgid "Thermal Transfer Media"
 msgstr "熱転写メディア"
-
 msgid "Title: "
 msgstr "タイトル: "
-
 msgid "Toner low."
 msgstr "トナーが少なくなっています。"
-
 msgid "Too many active jobs."
 msgstr "アクティブなジョブが多すぎます。"
-
-#, c-format
 msgid "Too many job-sheets values (%d > 2)!"
 msgstr "job-sheets 値が多すぎます (%d > 2)!"
-
-#, c-format
 msgid "Too many printer-state-reasons values (%d > %d)!"
 msgstr "printer-state-reasons 値が多すぎます (%d > %d)!"
-
 msgid "Transparency"
 msgstr "OHP シート"
-
 msgid "Tray"
 msgstr "トレイ"
-
 msgid "Tray 1"
 msgstr "トレイ 1"
-
 msgid "Tray 2"
 msgstr "トレイ 2"
-
 msgid "Tray 3"
 msgstr "トレイ 3"
-
 msgid "Tray 4"
 msgstr "トレイ 4"
-
 msgid "URI Too Long"
 msgstr "URI が長過ぎます"
-
 msgid "US Executive"
 msgstr "US エグゼクティブ"
-
 msgid "US Fanfold"
 msgstr "US Fanfold"
-
 msgid "US Ledger"
 msgstr "US レジャー"
-
 msgid "US Legal"
 msgstr "US リーガル"
-
 msgid "US Legal (Oversize)"
 msgstr "US リーガル (特大)"
-
 msgid "US Letter"
 msgstr "US レター"
-
 msgid "US Letter (Oversize)"
 msgstr "US レター (特大)"
-
 msgid "US Letter (Small)"
 msgstr "US レター (小)"
-
-#, c-format
 msgid "USB Serial Port #%d"
 msgstr "USB シリアルポート #%d"
-
 msgid "Unable to access cupsd.conf file:"
 msgstr "cupsd.conf ファイルにアクセスできません:"
-
 msgid "Unable to add RSS subscription:"
 msgstr " RSS 購読を追加できません:"
-
 msgid "Unable to add class:"
 msgstr "クラスを追加できません:"
-
-#, c-format
 msgid "Unable to add job for destination \"%s\"!"
 msgstr "宛先\"%s\"にジョブを追加できません!"
-
 msgid "Unable to add printer:"
 msgstr "プリンターを追加ができません:"
-
 msgid "Unable to allocate memory for file types!"
 msgstr "ファイルタイプ用にメモリを割り当てられません!"
-
 msgid "Unable to cancel RSS subscription:"
 msgstr "RSS 購読をキャンセルできません:"
-
 msgid "Unable to change printer-is-shared attribute:"
 msgstr "printer-is-shared 属性を変更することができません:"
-
 msgid "Unable to change printer:"
 msgstr "プリンターを変更できません:"
-
 msgid "Unable to change server settings:"
 msgstr "サーバーの設定を変更できません:"
-
 msgid "Unable to connect to host."
 msgstr "ホストに接続できません"
-
-#, c-format
 msgid "Unable to copy 64-bit CUPS printer driver files (%d)!"
 msgstr "64-bit 版の CUPS プリンタードライバーファイルをコピーできません (%d)!"
-
-#, c-format
 msgid "Unable to copy 64-bit Windows printer driver files (%d)!"
 msgstr "64-bit 版の Windows プリンタードライバーをコピーできません (%d)!"
-
-#, c-format
 msgid "Unable to copy CUPS printer driver files (%d)!"
 msgstr "複数の CUPS プリンタードライバーファイルをコピーできません (%d)!"
-
-#, c-format
 msgid "Unable to copy PPD file - %s!"
 msgstr "PPD ファイルをコピーできません! - %s"
-
 msgid "Unable to copy PPD file!"
 msgstr "PPD ファイルをコピーできません!"
-
-#, c-format
 msgid "Unable to copy Windows 2000 printer driver files (%d)!"
-msgstr ""
-"複数の Windows 2000 プリンタードライバーファイルをコピーできません (%d)!"
-
-#, c-format
+msgstr "複数の Windows 2000 プリンタードライバーファイルをコピーできません (%d)!"
 msgid "Unable to copy Windows 9x printer driver files (%d)!"
 msgstr "複数の Windows 9x プリンタードライバーファイルをコピーできません (%d)!"
-
-#, c-format
 msgid "Unable to copy interface script - %s!"
 msgstr "インターフェイススクリプトをコピーできません! - %s"
-
 msgid "Unable to create printer-uri!"
 msgstr "printer-uri を作成できません!"
-
 msgid "Unable to create temporary file:"
 msgstr "テンポラリファイルを作成できません:"
-
 msgid "Unable to delete class:"
 msgstr "クラスを削除できません:"
-
 msgid "Unable to delete printer:"
 msgstr "プリンターを削除できません:"
-
 msgid "Unable to do maintenance command:"
 msgstr "メンテナンスコマンドを実行できません:"
-
 msgid "Unable to edit cupsd.conf files larger than 1MB!"
 msgstr "1MB 以上の cupsd.conf ファイルは編集できません!"
-
 msgid "Unable to find destination for job!"
 msgstr "ジョブの宛先が見つかりません!"
-
 msgid "Unable to find printer!\n"
 msgstr "プリンターが見つかりません!\n"
-
 msgid "Unable to get class list:"
 msgstr "クラスリストを取得できません:"
-
 msgid "Unable to get class status:"
 msgstr "クラスの状態を取得できません:"
-
 msgid "Unable to get list of printer drivers:"
 msgstr "プリンタードライバーのリストを取得できません:"
-
 msgid "Unable to get printer attributes:"
 msgstr "プリンター属性を取得できません:"
-
 msgid "Unable to get printer list:"
 msgstr "プリンターリストを取得できません:"
-
 msgid "Unable to get printer status:"
 msgstr "プリンターの状態を取得できません:"
-
-#, c-format
 msgid "Unable to install Windows 2000 printer driver files (%d)!"
-msgstr ""
-"複数の Windows 2000 プリンタードライバーファイルをインストールできません (%"
-"d)!"
-
-#, c-format
+msgstr "複数の Windows 2000 プリンタードライバーファイルをインストールできません (%d)!"
 msgid "Unable to install Windows 9x printer driver files (%d)!"
-msgstr ""
-"複数の Windows 9x プリンタードライバーファイルをインストールできません (%d)!"
-
+msgstr "複数の Windows 9x プリンタードライバーファイルをインストールできません (%d)!"
 msgid "Unable to modify class:"
 msgstr "クラスを変更できません:"
-
 msgid "Unable to modify printer:"
 msgstr "プリンターを変更できません:"
-
 msgid "Unable to move job"
 msgstr "ジョブを移動できません"
-
 msgid "Unable to move jobs"
 msgstr "複数のジョブを移動できません"
-
 msgid "Unable to open PPD file"
 msgstr "PPD ファイルを読み込むことができません"
-
 msgid "Unable to open PPD file:"
 msgstr "PPD ファイルを読み込むことができません:"
-
 msgid "Unable to open cupsd.conf file:"
 msgstr "cupsd.conf ファイルを開けません:"
-
-#, c-format
 msgid "Unable to open document %d in job %d!"
 msgstr "ドキュメント %d (ジョブ %d)を開けません!"
-
 msgid "Unable to print test page:"
 msgstr "テストページを印刷できません:"
-
-#, c-format
 msgid "Unable to run \"%s\": %s\n"
 msgstr "\"%s\" を実行できません: %s\n"
-
 msgid "Unable to send command to printer driver!"
 msgstr "プリンタードライバーにコマンドを送信できません!"
-
-#, c-format
 msgid "Unable to set Windows printer driver (%d)!"
 msgstr "Windows プリンタードライバーを設定できません (%d)!"
-
 msgid "Unable to set options:"
 msgstr "オプションを設定できません:"
-
 msgid "Unable to set server default:"
 msgstr "サーバーをデフォルトに設定できません:"
-
 msgid "Unable to upload cupsd.conf file:"
 msgstr "cupsd.conf ファイルをアップロードできません:"
-
 msgid "Unable to use legacy USB class driver!\n"
 msgstr "古いタイプの USB クラスドライバーは使用できません!\n"
-
 msgid "Unauthorized"
 msgstr "不許可"
-
 msgid "Units"
 msgstr "ユニット"
-
 msgid "Unknown"
 msgstr "未知"
-
-#, c-format
 msgid "Unknown printer error (%s)!"
 msgstr "未知のプリンターエラー (%s) です!"
-
-#, c-format
 msgid "Unknown printer-error-policy \"%s\"."
 msgstr "\"%s\" は未知の printer-error-policy です。"
-
-#, c-format
 msgid "Unknown printer-op-policy \"%s\"."
 msgstr "\"%s\" は未知の printer-op-policy です。"
-
-#, c-format
 msgid "Unsupported character set \"%s\"!"
 msgstr "\"%s\" はサポートされていない文字セットです!"
-
-#, c-format
 msgid "Unsupported compression \"%s\"!"
 msgstr "\"%s\" はサポートされていない圧縮形式です!"
-
-#, c-format
 msgid "Unsupported compression attribute %s!"
 msgstr "%s はサポートされていない圧縮属性です!"
-
-#, c-format
 msgid "Unsupported format \"%s\"!"
 msgstr "\"%s\" はサポートされていない形式です!"
-
-#, c-format
 msgid "Unsupported format '%s'!"
 msgstr "'%s' はサポートされていない形式です!"
-
-#, c-format
 msgid "Unsupported format '%s/%s'!"
 msgstr "'%s/%s' はサポートされていない形式です!"
-
 msgid "Unsupported value type"
 msgstr "サポートされていない型の値です"
-
 msgid "Upgrade Required"
 msgstr "アップグレードが必要です"
-
-msgid ""
-"Usage:\n"
-"\n"
-"    lpadmin [-h server] -d destination\n"
-"    lpadmin [-h server] -x destination\n"
-"    lpadmin [-h server] -p printer [-c add-class] [-i interface] [-m model]\n"
-"                       [-r remove-class] [-v device] [-D description]\n"
-"                       [-P ppd-file] [-o name=value]\n"
-"                       [-u allow:user,user] [-u deny:user,user]\n"
-"\n"
-msgstr ""
-"Usage:\n"
-"\n"
-"    lpadmin [-h サーバー] -d 宛先\n"
-"    lpadmin [-h サーバー] -x 宛先\n"
-"    lpadmin [-h サーバー] -p プリンター [-c 追加クラス] [-i インターフェイ"
-"ス]\n"
-"                       [-m モデル] [-r 削除クラス] [-v デバイス]\n"
-"                       [-D 宛先] [-P PPD ファイル] [-o 名前=値]\n"
-"                       [-u allow:ユーザー,ユーザー] [-u deny:ユーザー,ユー"
-"ザー]\n"
-"\n"
-
-#, c-format
+msgid "Usage:\n\n    lpadmin [-h server] -d destination\n    lpadmin [-h server] -x destination\n    lpadmin [-h server] -p printer [-c add-class] [-i interface] [-m model]\n                       [-r remove-class] [-v device] [-D description]\n                       [-P ppd-file] [-o name=value]\n                       [-u allow:user,user] [-u deny:user,user]\n\n"
+msgstr "Usage:\n\n    lpadmin [-h サーバー] -d 宛先\n    lpadmin [-h サーバー] -x 宛先\n    lpadmin [-h サーバー] -p プリンター [-c 追加クラス] [-i インターフェイス]\n                       [-m モデル] [-r 削除クラス] [-v デバイス]\n                       [-D 宛先] [-P PPD ファイル] [-o 名前=値]\n                       [-u allow:ユーザー,ユーザー] [-u deny:ユーザー,ユーザー]\n\n"
 msgid "Usage: %s job user title copies options [filename]\n"
-msgstr ""
-"使い方: %s ジョブID ユーザー タイトル コピー数 オプション [ファイル名]\n"
-
-#, c-format
+msgstr "使い方: %s ジョブID ユーザー タイトル コピー数 オプション [ファイル名]\n"
 msgid "Usage: %s job-id user title copies options [file]\n"
 msgstr "使い方: %s ジョブID ユーザー タイトル コピー数 オプション [ファイル]\n"
-
-#, c-format
 msgid "Usage: %s job-id user title copies options file\n"
 msgstr "使い方: %s ジョブID ユーザー タイトル コピー数 オプション ファイル\n"
-
-msgid ""
-"Usage: convert [ options ]\n"
-"\n"
-"Options:\n"
-"\n"
-"  -e                   Use every filter from the PPD file\n"
-"  -f filename          Set file to be converted (otherwise stdin)\n"
-"  -o filename          Set file to be generated (otherwise stdout)\n"
-"  -i mime/type         Set input MIME type (otherwise auto-typed)\n"
-"  -j mime/type         Set output MIME type (otherwise application/pdf)\n"
-"  -P filename.ppd      Set PPD file\n"
-"  -a 'name=value ...'  Set option(s)\n"
-"  -U username          Set username for job\n"
-"  -J title             Set title\n"
-"  -c copies            Set number of copies\n"
-"  -u                   Remove the PPD file when finished\n"
-"  -D                   Remove the input file when finished\n"
+msgid "Usage: convert [ options ]\n\nOptions:\n\n  -e                   Use every filter from the PPD file\n  -f filename          Set file to be converted (otherwise stdin)\n  -o filename          Set file to be generated (otherwise stdout)\n  -i mime/type         Set input MIME type (otherwise auto-typed)\n  -j mime/type         Set output MIME type (otherwise application/pdf)\n  -P filename.ppd      Set PPD file\n  -a 'name=value ...'  Set option(s)\n  -U username          Set username for job\n  -J title             Set title\n  -c copies            Set number of copies\n  -u                   Remove the PPD file when finished\n  -D                   Remove the input file when finished\n"
 msgstr ""
-
-msgid ""
-"Usage: cupsaddsmb [options] printer1 ... printerN\n"
-"       cupsaddsmb [options] -a\n"
-"\n"
-"Options:\n"
-"  -E               Encrypt the connection to the server\n"
-"  -H samba-server  Use the named SAMBA server\n"
-"  -U samba-user    Authenticate using the named SAMBA user\n"
-"  -a               Export all printers\n"
-"  -h cups-server   Use the named CUPS server\n"
-"  -v               Be verbose (show commands)\n"
-msgstr ""
-"使い方: cupsaddsmb [オプション] プリンター ... プリンターN\n"
-"        cupsaddsmb [オプション] -a\n"
-"\n"
-"オプション:\n"
-"  -E               サーバーとの接続を暗号化する\n"
-"  -H sambaサーバー 指定の SAMBA サーバーを使う\n"
-"  -U sambaユーザー 指定の SAMBA ユーザーを使って認証する\n"
-"  -a               すべてのプリンターをエキスポートする\n"
-"  -h cupsサーバー  指定の CUPS サーバーを使う\n"
-"  -v               冗長にする (コマンドを表示する)\n"
-
-msgid ""
-"Usage: cupsctl [options] [param=value ... paramN=valueN]\n"
-"\n"
-"Options:\n"
-"\n"
-"    -E                      Enable encryption\n"
-"    -U username             Specify username\n"
-"    -h server[:port]        Specify server address\n"
-"\n"
-"    --[no-]debug-logging    Turn debug logging on/off\n"
-"    --[no-]remote-admin     Turn remote administration on/off\n"
-"    --[no-]remote-any       Allow/prevent access from the Internet\n"
-"    --[no-]remote-printers  Show/hide remote printers\n"
-"    --[no-]share-printers   Turn printer sharing on/off\n"
-"    --[no-]user-cancel-any  Allow/prevent users to cancel any job\n"
-msgstr ""
-"使い方: cupsctl [オプション] [パラメータ=値 ... パラメータN=値N]\n"
-"\n"
-"オプション:\n"
-"\n"
-"    -E                      暗号化を有効にする\n"
-"    -U ユーザ名             ユーザー名を指定する\n"
-"    -h サーバー[:ポート]    サーバーアドレスを指定する\n"
-"\n"
-"    --[no-]debug-logging    デバッグログの有効/無効を切り替える\n"
-"    --[no-]remote-admin     リモート管理の有効/無効を切り替える\n"
-"    --[no-]remote-any       インターネットからのアクセスを許可/禁止する\n"
-"    --[no-]remote-printers  リモートプリンターを表示/非表示にする\n"
-"    --[no-]share-printers   プリンター共有の有効/無効を切り替える\n"
-"    --[no-]user-cancel-any  あらゆるジョブのキャンセルをユーザーに許可/禁止す"
-"る\n"
-
-msgid ""
-"Usage: cupsd [-c config-file] [-f] [-F] [-h] [-l]\n"
-"\n"
-"-c config-file      Load alternate configuration file\n"
-"-f                  Run in the foreground\n"
-"-F                  Run in the foreground but detach\n"
-"-h                  Show this usage message\n"
-"-l                  Run cupsd from launchd(8)\n"
+msgid "Usage: cupsaddsmb [options] printer1 ... printerN\n       cupsaddsmb [options] -a\n\nOptions:\n  -E               Encrypt the connection to the server\n  -H samba-server  Use the named SAMBA server\n  -U samba-user    Authenticate using the named SAMBA user\n  -a               Export all printers\n  -h cups-server   Use the named CUPS server\n  -v               Be verbose (show commands)\n"
+msgstr "使い方: cupsaddsmb [オプション] プリンター ... プリンターN\n        cupsaddsmb [オプション] -a\n\nオプション:\n  -E               サーバーとの接続を暗号化する\n  -H sambaサーバー 指定の SAMBA サーバーを使う\n  -U sambaユーザー 指定の SAMBA ユーザーを使って認証する\n  -a               すべてのプリンターをエキスポートする\n  -h cupsサーバー  指定の CUPS サーバーを使う\n  -v               冗長にする (コマンドを表示する)\n"
+msgid "Usage: cupsctl [options] [param=value ... paramN=valueN]\n\nOptions:\n\n    -E                      Enable encryption\n    -U username             Specify username\n    -h server[:port]        Specify server address\n\n    --[no-]debug-logging    Turn debug logging on/off\n    --[no-]remote-admin     Turn remote administration on/off\n    --[no-]remote-any       Allow/prevent access from the Internet\n    --[no-]remote-printers  Show/hide remote printers\n    --[no-]share-printers   Turn printer sharing on/off\n    --[no-]user-cancel-any  Allow/prevent users to cancel any job\n"
+msgstr "使い方: cupsctl [オプション] [パラメータ=値 ... パラメータN=値N]\n\nオプション:\n\n    -E                      暗号化を有効にする\n    -U ユーザ名             ユーザー名を指定する\n    -h サーバー[:ポート]    サーバーアドレスを指定する\n\n    --[no-]debug-logging    デバッグログの有効/無効を切り替える\n    --[no-]remote-admin     リモート管理の有効/無効を切り替える\n    --[no-]remote-any       インターネットからのアクセスを許可/禁止する\n    --[no-]remote-printers  リモートプリンターを表示/非表示にする\n    --[no-]share-printers   プリンター共有の有効/無効を切り替える\n    --[no-]user-cancel-any  あらゆるジョブのキャンセルをユーザーに許可/禁止する\n"
+msgid "Usage: cupsd [-c config-file] [-f] [-F] [-h] [-l]\n\n-c config-file      Load alternate configuration file\n-f                  Run in the foreground\n-F                  Run in the foreground but detach\n-h                  Show this usage message\n-l                  Run cupsd from launchd(8)\n"
+msgstr "使い方: cupsd [-c 設定ファイル] [-f] [-F] [-h] [-l]\n\n-c 設定ファイル     別の設定ファイルをロードする\n-f                  フォアグラウンドで実行する\n-F                  フォアグラウンドで実行するがデタッチする\n-h                  この使い方を表示する\n-l                  launchd(8) から cupsd を実行する\n"
+msgid "Usage: cupsfilter -m mime/type [ options ] filename\n\nOptions:\n\n  -c cupsd.conf    Set cupsd.conf file to use\n  -e               Use every filter from the PPD file\n  -j job-id[,N]    Filter file N from the specified job (default is file 1)\n  -n copies        Set number of copies\n  -o name=value    Set option(s)\n  -p filename.ppd  Set PPD file\n  -t title         Set title\n"
 msgstr ""
-"使い方: cupsd [-c 設定ファイル] [-f] [-F] [-h] [-l]\n"
-"\n"
-"-c 設定ファイル     別の設定ファイルをロードする\n"
-"-f                  フォアグラウンドで実行する\n"
-"-F                  フォアグラウンドで実行するがデタッチする\n"
-"-h                  この使い方を表示する\n"
-"-l                  launchd(8) から cupsd を実行する\n"
-
-msgid ""
-"Usage: cupsfilter -m mime/type [ options ] filename\n"
-"\n"
-"Options:\n"
-"\n"
-"  -c cupsd.conf    Set cupsd.conf file to use\n"
-"  -e               Use every filter from the PPD file\n"
-"  -j job-id[,N]    Filter file N from the specified job (default is file 1)\n"
-"  -n copies        Set number of copies\n"
-"  -o name=value    Set option(s)\n"
-"  -p filename.ppd  Set PPD file\n"
-"  -t title         Set title\n"
-msgstr ""
-
-msgid ""
-"Usage: cupstestdsc [options] filename.ps [... filename.ps]\n"
-"       cupstestdsc [options] -\n"
-"\n"
-"Options:\n"
-"\n"
-"    -h       Show program usage\n"
-"\n"
-"    Note: this program only validates the DSC comments, not the PostScript "
-"itself.\n"
-msgstr ""
-"使い方: cupstestdsc [オプション] ファイル名.ps [... ファイル名.ps]\n"
-"        cupstestdsc [オプション] -\n"
-"\n"
-"オプション:\n"
-"\n"
-"    -h       プログラムの使い方を表示する\n"
-"\n"
-"    注意: このプログラムは DSC コメントを検証するだけで、PostScript 自身を検"
-"証するものではありません。\n"
-
-msgid ""
-"Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]\n"
-"       program | cupstestppd [options] -\n"
-"\n"
-"Options:\n"
-"\n"
-"    -R root-directory    Set alternate root\n"
-"    -W {all,none,constraints,defaults,duplex,filters,profiles,sizes,"
-"translations}\n"
-"                         Issue warnings instead of errors\n"
-"    -q                   Run silently\n"
-"    -r                   Use 'relaxed' open mode\n"
-"    -v                   Be slightly verbose\n"
-"    -vv                  Be very verbose\n"
+msgid "Usage: cupstestdsc [options] filename.ps [... filename.ps]\n       cupstestdsc [options] -\n\nOptions:\n\n    -h       Show program usage\n\n    Note: this program only validates the DSC comments, not the PostScript itself.\n"
+msgstr "使い方: cupstestdsc [オプション] ファイル名.ps [... ファイル名.ps]\n        cupstestdsc [オプション] -\n\nオプション:\n\n    -h       プログラムの使い方を表示する\n\n    注意: このプログラムは DSC コメントを検証するだけで、PostScript 自身を検証するものではありません。\n"
+msgid "Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]\n       program | cupstestppd [options] -\n\nOptions:\n\n    -R root-directory    Set alternate root\n    -W {all,none,constraints,defaults,duplex,filters,profiles,sizes,translations}\n                         Issue warnings instead of errors\n    -q                   Run silently\n    -r                   Use 'relaxed' open mode\n    -v                   Be slightly verbose\n    -vv                  Be very verbose\n"
 msgstr ""
-
 msgid "Usage: lpmove job/src dest\n"
 msgstr "使い方: lpmove ジョブ/ソース 宛先\n"
-
-msgid ""
-"Usage: lpoptions [-h server] [-E] -d printer\n"
-"       lpoptions [-h server] [-E] [-p printer] -l\n"
-"       lpoptions [-h server] [-E] -p printer -o option[=value] ...\n"
-"       lpoptions [-h server] [-E] -x printer\n"
-msgstr ""
-"使い方: lpoptions [-h サーバー] [-E] -d プリンター\n"
-"       lpoptions [-h サーバー] [-E] [-p プリンター] -l\n"
-"        lpoptions [-h サーバー] [-E] -p プリンター -o オプション[=値] ...\n"
-"        lpoptions [-h サーバー] [-E] -x プリンター\n"
-
+msgid "Usage: lpoptions [-h server] [-E] -d printer\n       lpoptions [-h server] [-E] [-p printer] -l\n       lpoptions [-h server] [-E] -p printer -o option[=value] ...\n       lpoptions [-h server] [-E] -x printer\n"
+msgstr "使い方: lpoptions [-h サーバー] [-E] -d プリンター\n       lpoptions [-h サーバー] [-E] [-p プリンター] -l\n        lpoptions [-h サーバー] [-E] -p プリンター -o オプション[=値] ...\n        lpoptions [-h サーバー] [-E] -x プリンター\n"
 msgid "Usage: lppasswd [-g groupname]\n"
 msgstr "使い方: lppasswd [-g グループ名]\n"
-
-msgid ""
-"Usage: lppasswd [-g groupname] [username]\n"
-"       lppasswd [-g groupname] -a [username]\n"
-"       lppasswd [-g groupname] -x [username]\n"
-msgstr ""
-"使い方: lppasswd [-g グループ名] [ユーザ名]\n"
-"        lppasswd [-g グループ名] -a [ユーザ名]\n"
-"        lppasswd [-g グループ名] -x [ユーザ名]\n"
-
-msgid ""
-"Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]\n"
-msgstr ""
-"使い方: lpq [-P 宛先] [-U ユーザー名] [-h ホスト名[:ポート]] [-l] [+間隔]\n"
-
-msgid ""
-"Usage: ppdc [options] filename.drv [ ... filenameN.drv ]\n"
-"Options:\n"
-"  -D name=value        Set named variable to value.\n"
-"  -I include-dir       Add include directory to search path.\n"
-"  -c catalog.po        Load the specified message catalog.\n"
-"  -d output-dir        Specify the output directory.\n"
-"  -l lang[,lang,...]   Specify the output language(s) (locale).\n"
-"  -m                   Use the ModelName value as the filename.\n"
-"  -t                   Test PPDs instead of generating them.\n"
-"  -v                   Be verbose (more v's for more verbosity).\n"
-"  -z                   Compress PPD files using GNU zip.\n"
-"  --cr                 End lines with CR (Mac OS 9).\n"
-"  --crlf               End lines with CR + LF (Windows).\n"
-"  --lf                 End lines with LF (UNIX/Linux/Mac OS X).\n"
-msgstr ""
-"Usage: ppdc [オプション] ファイル名.drv [ ... ファイル名N.drv ]\n"
-"オプション:\n"
-"  -D 変数名=値         変数名で指定した変数に値をセットする\n"
-"  -I include-dir       include-dir で指定したディレクトリをサーチパスに追加\n"
-"  -c catalog.po        指定したメッセージカタログをロードする\n"
-"  -d output-dir        出力ディレクトリ(output-dir)を指定する\n"
-"  -l lang[,lang,...]   出力言語を指定する。(複数可能)\n"
-"  -m                   ModelName の値をファイル名として使用する\n"
-"  -t                   PPD を出力しないでテストする\n"
-"  -v                   冗長出力を行う (v を追加してさらに冗長に)\n"
-"  -z                   PPD ファイルを GNU zip を使って圧縮する\n"
-"  --cr                 ラインの最後は CR (Mac OS 9 方式).\n"
-"  --crlf               ラインの最後は CR + LF (Windows 方式).\n"
-"  --lf                 ラインの最後は LF (UNIX/Linux/Mac OS X 方式).\n"
-
-msgid ""
-"Usage: ppdhtml [options] filename.drv >filename.html\n"
-"  -D name=value        Set named variable to value.\n"
-"Options:\n"
-"  -I include-dir    Add include directory to search path.\n"
-msgstr ""
-"使い方: ppdhtml [オプション] ファイル名.drv >ファイル名.html\n"
-"  -D 変数名=値      変数名で指定した変数に値をセットする\n"
-"オプション:\n"
-"  -I include-dir    include-dir で指定したディレクトリをサーチパスに追加\n"
-
-msgid ""
-"Usage: ppdi [options] filename.ppd [ ... filenameN.ppd ]\n"
-"Options:\n"
-"  -I include-dir\n"
-"  -o filename.drv\n"
-msgstr ""
-"使い方: ppdi [オプション] ファイル名.ppd [ ... ファイル名N.ppd ]\n"
-"オプション:\n"
-"  -I インクルードディレクトリ\n"
-"  -o ファイル名.drv\n"
-
-msgid ""
-"Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]\n"
-"Options:\n"
-"  -o filename.ppd[.gz]\n"
-msgstr ""
-"使い方: ppdmerge [オプション] ファイル名.ppd [ ... ファイル名N.ppd ]\n"
-"オプション:\n"
-"  -o ファイル名.ppd[.gz]\n"
-
-msgid ""
-"Usage: ppdpo [options] -o filename.po filename.drv [ ... filenameN.drv ]\n"
-"Options:\n"
-"  -D name=value        Set named variable to value.\n"
-"  -I include-dir    Add include directory to search path.\n"
-"  -v                Be verbose (more v's for more verbosity).\n"
-msgstr ""
-"使い方: ppdpo [オプション] -o ファイル名.po ファイル名.drv [ ... ファイル名N."
-"drv ]\n"
-"オプション:\n"
-"  -D 変数名=値      変数名で指定した変数に値をセットする\n"
-"  -I include-dir    include-dir で指定したディレクトリをサーチパスに追加\n"
-"  -v                冗長出力を行う (v を追加してさらに冗長に)\n"
-
+msgid "Usage: lppasswd [-g groupname] [username]\n       lppasswd [-g groupname] -a [username]\n       lppasswd [-g groupname] -x [username]\n"
+msgstr "使い方: lppasswd [-g グループ名] [ユーザ名]\n        lppasswd [-g グループ名] -a [ユーザ名]\n        lppasswd [-g グループ名] -x [ユーザ名]\n"
+msgid "Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]\n"
+msgstr "使い方: lpq [-P 宛先] [-U ユーザー名] [-h ホスト名[:ポート]] [-l] [+間隔]\n"
+msgid "Usage: ppdc [options] filename.drv [ ... filenameN.drv ]\nOptions:\n  -D name=value        Set named variable to value.\n  -I include-dir       Add include directory to search path.\n  -c catalog.po        Load the specified message catalog.\n  -d output-dir        Specify the output directory.\n  -l lang[,lang,...]   Specify the output language(s) (locale).\n  -m                   Use the ModelName value as the filename.\n  -t                   Test PPDs instead of generating them.\n  -v                   Be verbose (more v's for more verbosity).\n  -z                   Compress PPD files using GNU zip.\n  --cr                 End lines with CR (Mac OS 9).\n  --crlf               End lines with CR + LF (Windows).\n  --lf                 End lines with LF (UNIX/Linux/Mac OS X).\n"
+msgstr "Usage: ppdc [オプション] ファイル名.drv [ ... ファイル名N.drv ]\nオプション:\n  -D 変数名=値         変数名で指定した変数に値をセットする\n  -I include-dir       include-dir で指定したディレクトリをサーチパスに追加\n  -c catalog.po        指定したメッセージカタログをロードする\n  -d output-dir        出力ディレクトリ(output-dir)を指定する\n  -l lang[,lang,...]   出力言語を指定する。(複数可能)\n  -m                   ModelName の値をファイル名として使用する\n  -t                   PPD を出力しないでテストする\n  -v                   冗長出力を行う (v を追加してさらに冗長に)\n  -z                   PPD ファイルを GNU zip を使って圧縮する\n  --cr                 ラインの最後は CR (Mac OS 9 方式).\n  --crlf               ラインの最後は CR + LF (Windows 方式).\n  --lf                 ラインの最後は LF (UNIX/Linux/Mac OS X 方式).\n"
+msgid "Usage: ppdhtml [options] filename.drv >filename.html\n  -D name=value        Set named variable to value.\nOptions:\n  -I include-dir    Add include directory to search path.\n"
+msgstr "使い方: ppdhtml [オプション] ファイル名.drv >ファイル名.html\n  -D 変数名=値      変数名で指定した変数に値をセットする\nオプション:\n  -I include-dir    include-dir で指定したディレクトリをサーチパスに追加\n"
+msgid "Usage: ppdi [options] filename.ppd [ ... filenameN.ppd ]\nOptions:\n  -I include-dir\n  -o filename.drv\n"
+msgstr "使い方: ppdi [オプション] ファイル名.ppd [ ... ファイル名N.ppd ]\nオプション:\n  -I インクルードディレクトリ\n  -o ファイル名.drv\n"
+msgid "Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]\nOptions:\n  -o filename.ppd[.gz]\n"
+msgstr "使い方: ppdmerge [オプション] ファイル名.ppd [ ... ファイル名N.ppd ]\nオプション:\n  -o ファイル名.ppd[.gz]\n"
+msgid "Usage: ppdpo [options] -o filename.po filename.drv [ ... filenameN.drv ]\nOptions:\n  -D name=value        Set named variable to value.\n  -I include-dir    Add include directory to search path.\n  -v                Be verbose (more v's for more verbosity).\n"
+msgstr "使い方: ppdpo [オプション] -o ファイル名.po ファイル名.drv [ ... ファイル名N.drv ]\nオプション:\n  -D 変数名=値      変数名で指定した変数に値をセットする\n  -I include-dir    include-dir で指定したディレクトリをサーチパスに追加\n  -v                冗長出力を行う (v を追加してさらに冗長に)\n"
 msgid "Usage: snmp [host-or-ip-address]\n"
 msgstr "使い方: snmp [ホストまたはIPアドレス]\n"
-
 msgid "Value uses indefinite length"
 msgstr "値は不定長です"
-
 msgid "VarBind uses indefinite length"
 msgstr "VarBind は不定長です"
-
 msgid "Version uses indefinite length"
 msgstr "Version は不定長です"
-
-#, c-format
 msgid "WARNING: Adding only the first %d printers found"
 msgstr "WARNING: 発見した順番に %d 台のプリンターだけ追加します"
-
-#, c-format
 msgid "WARNING: Boolean expected for waiteof option \"%s\"\n"
 msgstr "WARNING: 論理値は、waiteof オプション \"%s\" であるべきです\n"
-
 msgid "WARNING: Failed to read side-channel request!\n"
 msgstr "WARNING: サイドチャンネルの読み出しに失敗しました!\n"
-
-#, c-format
 msgid "WARNING: Option \"%s\" cannot be included via IncludeFeature!\n"
-msgstr ""
-"WARNING: オプション \"%s\" は IncludeFeature 経由で含めることはできません!\n"
-
+msgstr "WARNING: オプション \"%s\" は IncludeFeature 経由で含めることはできません!\n"
 msgid "WARNING: Printer not responding\n"
 msgstr "WARNING: プリンターが反応しません\n"
-
 msgid "WARNING: Printer sent unexpected EOF\n"
 msgstr "WARNING: プリンターが意図しない EOF を返しました\n"
-
-#, c-format
-msgid ""
-"WARNING: Remote host did not respond with command status byte after %d "
-"seconds!\n"
-msgstr ""
-"WARNING: リモートホストは %d 秒経ってもコマンド・ステータス・バイトを返しませ"
-"んでした!\n"
-
-#, c-format
-msgid ""
-"WARNING: Remote host did not respond with control status byte after %d "
-"seconds!\n"
-msgstr ""
-"WARNING: リモートホストは %d 秒経ってもコントロール・ステータス・バイトを返し"
-"ませんでした!\n"
-
-#, c-format
-msgid ""
-"WARNING: Remote host did not respond with data status byte after %d "
-"seconds!\n"
-msgstr ""
-"WARNING: リモートホストは %d 秒経ってもデータ・ステータス・バイトを返しません"
-"でした!\n"
-
-#, c-format
+msgid "WARNING: Remote host did not respond with command status byte after %d seconds!\n"
+msgstr "WARNING: リモートホストは %d 秒経ってもコマンド・ステータス・バイトを返しませんでした!\n"
+msgid "WARNING: Remote host did not respond with control status byte after %d seconds!\n"
+msgstr "WARNING: リモートホストは %d 秒経ってもコントロール・ステータス・バイトを返しませんでした!\n"
+msgid "WARNING: Remote host did not respond with data status byte after %d seconds!\n"
+msgstr "WARNING: リモートホストは %d 秒経ってもデータ・ステータス・バイトを返しませんでした!\n"
 msgid "WARNING: SCSI command timed out (%d); retrying...\n"
 msgstr "WARNING: SCSI コマンドはタイムアウトしました (%d)。再試行中...\n"
-
-msgid ""
-"WARNING: This document does not conform to the Adobe Document Structuring "
-"Conventions and may not print correctly!\n"
-msgstr ""
-"WARNING: この書類は Adobe Document Structuring Conventions に適合しておらず、"
-"正しくプリントできない可能性があります!\n"
-
-#, c-format
+msgid "WARNING: This document does not conform to the Adobe Document Structuring Conventions and may not print correctly!\n"
+msgstr "WARNING: この書類は Adobe Document Structuring Conventions に適合しておらず、正しくプリントできない可能性があります!\n"
 msgid "WARNING: Unable to open \"%s:%s\": %s\n"
 msgstr "WARNING: \"%s:%s\": %s を開けません\n"
-
 msgid "WARNING: Unable to send PAP status request"
 msgstr "WARNING: PAP ステータス・リクエストを送信できません"
-
-#, c-format
 msgid "WARNING: Unexpected PAP packet of type %d\n"
 msgstr "WARNING: %d タイプの意図しない PAP パケット\n"
-
-#, c-format
 msgid "WARNING: Unknown PAP packet of type %d\n"
 msgstr "WARNING: 未知の PAP パケットのタイプ %d\n"
-
-#, c-format
 msgid "WARNING: Unknown choice \"%s\" for option \"%s\"!\n"
 msgstr "WARNING:  \"%s\" (オプション \"%s\" 用) は未知の設定です!\n"
-
-#, c-format
 msgid "WARNING: Unknown option \"%s\"!\n"
 msgstr "WARNING: \"%s\" は未知のオプションです!\n"
-
-#, c-format
 msgid "WARNING: Unsupported baud rate %s!\n"
 msgstr "WARNING: %s はサポートしないボーレートです!\n"
-
-#, c-format
 msgid "WARNING: number expected for status option \"%s\"\n"
 msgstr "WARNING: ステータス・オプションの期待値は \"%s\"\n"
-
-#, c-format
-msgid ""
-"WARNING: recoverable: Network host '%s' is busy; will retry in %d "
-"seconds...\n"
-msgstr ""
-"WARNING: 回復可能: ネットワークホスト '%s' はビジー状態です (%d 秒後に再試行"
-"します...)\n"
-
+msgid "WARNING: recoverable: Network host '%s' is busy; will retry in %d seconds...\n"
+msgstr "WARNING: 回復可能: ネットワークホスト '%s' はビジー状態です (%d 秒後に再試行します...)\n"
 msgid "Warning, no Windows 2000 printer drivers are installed!"
 msgstr "警告、Windows 2000 プリンタードライバーがインストールされていません!"
-
 msgid "Yes"
 msgstr "はい"
-
-#, c-format
-msgid ""
-"You must access this page using the URL <A HREF=\"https://%s:%d%s\">https://%"
-"s:%d%s</A>."
-msgstr ""
-"このページには URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A> を使ってア"
-"クセスする必要があります。"
-
+msgid "You must access this page using the URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A>."
+msgstr "このページには URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A> を使ってアクセスする必要があります。"
 msgid "You4 Envelope"
 msgstr "洋形 4 号"
-
 msgid "ZPL Label Printer"
 msgstr "ZPL ラベル・プリンター"
-
 msgid "Zebra"
 msgstr "ゼブラ"
-
 msgid "aborted"
 msgstr "停止"
-
 msgid "canceled"
 msgstr "キャンセル"
-
 msgid "completed"
 msgstr "完了"
-
 msgid "convert: Use the -f option to specify a file to convert.\n"
-msgstr ""
-"convert: 変換するファイルを指定するには、-f オプションを使ってください。\n"
-
+msgstr "convert: 変換するファイルを指定するには、-f オプションを使ってください。\n"
 msgid "cups-deviced failed to execute."
 msgstr "cups-deviced の実行に失敗しました。"
-
 msgid "cups-driverd failed to execute."
 msgstr "cups-driverd の実行に失敗しました。"
-
-#, c-format
 msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s\n"
 msgstr "cupsaddsmb: プリンター \"%s\" の PPD ファイルがありません - %s\n"
-
-#, c-format
 msgid "cupsctl: Unable to connect to server: %s\n"
 msgstr "cupsctl: サーバー: %s に接続できません\n"
-
-#, c-format
 msgid "cupsctl: Unknown option \"%s\"!\n"
 msgstr "cupsctl: \"%s\" は未知のオプションです!\n"
-
-#, c-format
 msgid "cupsctl: Unknown option \"-%c\"!\n"
 msgstr "cupsctl: \"-%c\"は未知のオプションです!\n"
-
 msgid "cupsd: Expected config filename after \"-c\" option!\n"
 msgstr "cupsd: -c オプションのあとには設定ファイル名が必要です!\n"
-
 msgid "cupsd: Unable to get current directory!\n"
 msgstr "cupsd: カレント・ディレクトリを取得できません!\n"
-
-#, c-format
 msgid "cupsd: Unknown argument \"%s\" - aborting!\n"
 msgstr "cupsd: \"%s\" は未知の引数です - 停止します!\n"
-
-#, c-format
 msgid "cupsd: Unknown option \"%c\" - aborting!\n"
 msgstr "cupsd: \"%c\" は未知のオプションです - 停止します!\n"
-
 msgid "cupsd: launchd(8) support not compiled in, running in normal mode.\n"
-msgstr ""
-"cupsd: launchd(8) サポートがコンパイルされていないので、通常モードで動作しま"
-"す。\n"
-
-#, c-format
+msgstr "cupsd: launchd(8) サポートがコンパイルされていないので、通常モードで動作します。\n"
 msgid "cupsfilter: Invalid document number %d!\n"
 msgstr "cupsfilter: 不正な文書番号 %d です!\n"
-
-#, c-format
 msgid "cupsfilter: Invalid job ID %d!\n"
 msgstr "cupsfilter: 不正なジョブID %d です!\n"
-
 msgid "cupsfilter: Only one filename can be specified!\n"
 msgstr "cupsfilter: ひとつのファイル名のみを指定できます!\n"
-
-#, c-format
 msgid "cupsfilter: Unable to get job file - %s\n"
 msgstr "cupsfilter: ジョブ・ファイルを取得できません - %s\n"
-
 msgid "cupstestppd: The -q option is incompatible with the -v option.\n"
 msgstr "cupstestppd: -q オプションは -v オプションと両立できません。\n"
-
 msgid "cupstestppd: The -v option is incompatible with the -q option.\n"
 msgstr "cupstestppd: -v オプションは -q オプションと両立できません。\n"
-
-#, c-format
 msgid "device for %s/%s: %s\n"
 msgstr "%s/%s のデバイス: %s\n"
-
-#, c-format
 msgid "device for %s: %s\n"
 msgstr "%s のデバイス: %s\n"
-
 msgid "error-index uses indefinite length"
 msgstr "エラー・インデックスは不定長です"
-
 msgid "error-status uses indefinite length"
 msgstr "エラー・ステータスは不定長です"
-
 msgid "held"
 msgstr "ホールド"
-
 msgid "help\t\tget help on commands\n"
 msgstr "help\t\tコマンドのヘルプを取得\n"
-
 msgid "idle"
 msgstr "待機中"
-
 msgid "job-printer-uri attribute missing!"
 msgstr "job-printer-uri 属性がありません!"
-
 msgid "lpadmin: Class name can only contain printable characters!\n"
 msgstr "lpadmin: クラス名は表示可能文字のみで構成されなければなりません!\n"
-
 msgid "lpadmin: Expected PPD after '-P' option!\n"
 msgstr "lpadmin: '-P' オプションのあとに PPD が必要です!\n"
-
 msgid "lpadmin: Expected allow/deny:userlist after '-u' option!\n"
-msgstr ""
-"lpadmin: '-u' オプションのあとには allow/deny:ユーザリスト が必要です!\n"
-
+msgstr "lpadmin: '-u' オプションのあとには allow/deny:ユーザリスト が必要です!\n"
 msgid "lpadmin: Expected class after '-r' option!\n"
 msgstr "lpadmin: '-r' オプションのあとにはクラス名が必要です!\n"
-
 msgid "lpadmin: Expected class name after '-c' option!\n"
 msgstr "lpadmin: '-c' オプションのあとにはクラス名が必要です!\n"
-
 msgid "lpadmin: Expected description after '-D' option!\n"
 msgstr "lpadmin: '-D' オプションのあとに説明が必要です!\n"
-
 msgid "lpadmin: Expected device URI after '-v' option!\n"
 msgstr "lpadmin: '-v' オプションのあとにはデバイス URI が必要です!\n"
-
 msgid "lpadmin: Expected file type(s) after '-I' option!\n"
 msgstr "lpadmin: '-I' オプションのあとにファイル形式が必要です!\n"
-
 msgid "lpadmin: Expected hostname after '-h' option!\n"
 msgstr "lpadmin: '-h' オプションのあとにはホスト名が必要です!\n"
-
 msgid "lpadmin: Expected interface after '-i' option!\n"
 msgstr "lpadmin: '-i' オプションのあとにはインターフェイス名が必要です!\n"
-
 msgid "lpadmin: Expected location after '-L' option!\n"
 msgstr "lpadmin: '-L' オプションのあとに場所が必要です!\n"
-
 msgid "lpadmin: Expected model after '-m' option!\n"
 msgstr "lpadmin: '-m' オプションのあとにはモデル名が必要です!\n"
-
 msgid "lpadmin: Expected name=value after '-o' option!\n"
 msgstr "lpadmin: '-o' オプションのあとには 変数名=値 が必要です!\n"
-
 msgid "lpadmin: Expected printer after '-p' option!\n"
 msgstr "lpadmin: '-p' オプションのあとにはプリンター名が必要です!\n"
-
 msgid "lpadmin: Expected printer name after '-d' option!\n"
 msgstr "lpadmin: '-d' オプションのあとにはプリンター名が必要です!\n"
-
 msgid "lpadmin: Expected printer or class after '-x' option!\n"
-msgstr ""
-"lpadmin: '-x' オプションのあとにはプリンター名またはクラス名が必要です!\n"
-
+msgstr "lpadmin: '-x' オプションのあとにはプリンター名またはクラス名が必要です!\n"
 msgid "lpadmin: No member names were seen!\n"
 msgstr "lpadmin: メンバー名が見当たりません!\n"
-
-#, c-format
 msgid "lpadmin: Printer %s is already a member of class %s.\n"
 msgstr "lpadmin: プリンター %s はすでにクラス %s のメンバーです。\n"
-
-#, c-format
 msgid "lpadmin: Printer %s is not a member of class %s.\n"
 msgstr "lpadmin: プリンター %s はクラス %s のメンバーではありません。\n"
-
 msgid "lpadmin: Printer name can only contain printable characters!\n"
 msgstr "lpadmin: プリンター名には印字可能な文字のみ使用できます!\n"
-
-msgid ""
-"lpadmin: Unable to add a printer to the class:\n"
-"         You must specify a printer name first!\n"
-msgstr ""
-"lpadmin: クラスにプリンターを追加できません:\n"
-"         先にプリンター名を指定する必要があります!\n"
-
-#, c-format
+msgid "lpadmin: Unable to add a printer to the class:\n         You must specify a printer name first!\n"
+msgstr "lpadmin: クラスにプリンターを追加できません:\n         先にプリンター名を指定する必要があります!\n"
 msgid "lpadmin: Unable to connect to server: %s\n"
 msgstr "lpadmin: サーバーに接続できません: %s\n"
-
-#, c-format
 msgid "lpadmin: Unable to open PPD file \"%s\" - %s\n"
 msgstr "lpadmin: PPD ファイル \"%s\" を開けません - %s\n"
-
-#, c-format
 msgid "lpadmin: Unable to open file \"%s\": %s\n"
 msgstr "lpadmin: ファイル \"%s\" を開けません: %s\n"
-
-msgid ""
-"lpadmin: Unable to remove a printer from the class:\n"
-"         You must specify a printer name first!\n"
-msgstr ""
-"lpadmin: クラスからプリンターを削除できません:\n"
-"         先にプリンター名を指定する必要があります!\n"
-
-msgid ""
-"lpadmin: Unable to set the PPD file:\n"
-"         You must specify a printer name first!\n"
-msgstr ""
-"lpadmin: PPD ファイルを設定できません:\n"
-"         先にプリンター名を指定する必要があります!\n"
-
-msgid ""
-"lpadmin: Unable to set the device URI:\n"
-"         You must specify a printer name first!\n"
-msgstr ""
-"lpadmin: デバイス URI を設定できません:\n"
-"         先にプリンター名を指定する必要があります!\n"
-
-msgid ""
-"lpadmin: Unable to set the interface script or PPD file:\n"
-"         You must specify a printer name first!\n"
-msgstr ""
-"lpadmin: インターフェイス・スクリプトまたは PPD ファイルを設定できません:\n"
-"         先にプリンター名を指定する必要があります!\n"
-
-msgid ""
-"lpadmin: Unable to set the interface script:\n"
-"         You must specify a printer name first!\n"
-msgstr ""
-"lpadmin: インターフェイススクリプトを設定できません:\n"
-"         先にプリンター名を指定する必要があります!\n"
-
-msgid ""
-"lpadmin: Unable to set the printer description:\n"
-"         You must specify a printer name first!\n"
-msgstr ""
-"lpadmin: プリンターの説明を設定できません:\n"
-"         先にプリンター名を指定する必要があります!\n"
-
-msgid ""
-"lpadmin: Unable to set the printer location:\n"
-"         You must specify a printer name first!\n"
-msgstr ""
-"lpadmin: プリンターの場所が設定できません:\n"
-"         先にプリンター名を指定する必要があります!\n"
-
-msgid ""
-"lpadmin: Unable to set the printer options:\n"
-"         You must specify a printer name first!\n"
-msgstr ""
-"lpadmin: プリンター・オプションを設定できません:\n"
-"         先にプリンター名を指定する必要があります!\n"
-
-#, c-format
+msgid "lpadmin: Unable to remove a printer from the class:\n         You must specify a printer name first!\n"
+msgstr "lpadmin: クラスからプリンターを削除できません:\n         先にプリンター名を指定する必要があります!\n"
+msgid "lpadmin: Unable to set the PPD file:\n         You must specify a printer name first!\n"
+msgstr "lpadmin: PPD ファイルを設定できません:\n         先にプリンター名を指定する必要があります!\n"
+msgid "lpadmin: Unable to set the device URI:\n         You must specify a printer name first!\n"
+msgstr "lpadmin: デバイス URI を設定できません:\n         先にプリンター名を指定する必要があります!\n"
+msgid "lpadmin: Unable to set the interface script or PPD file:\n         You must specify a printer name first!\n"
+msgstr "lpadmin: インターフェイス・スクリプトまたは PPD ファイルを設定できません:\n         先にプリンター名を指定する必要があります!\n"
+msgid "lpadmin: Unable to set the interface script:\n         You must specify a printer name first!\n"
+msgstr "lpadmin: インターフェイススクリプトを設定できません:\n         先にプリンター名を指定する必要があります!\n"
+msgid "lpadmin: Unable to set the printer description:\n         You must specify a printer name first!\n"
+msgstr "lpadmin: プリンターの説明を設定できません:\n         先にプリンター名を指定する必要があります!\n"
+msgid "lpadmin: Unable to set the printer location:\n         You must specify a printer name first!\n"
+msgstr "lpadmin: プリンターの場所が設定できません:\n         先にプリンター名を指定する必要があります!\n"
+msgid "lpadmin: Unable to set the printer options:\n         You must specify a printer name first!\n"
+msgstr "lpadmin: プリンター・オプションを設定できません:\n         先にプリンター名を指定する必要があります!\n"
 msgid "lpadmin: Unknown allow/deny option \"%s\"!\n"
 msgstr "lpadmin:\"%s\" は未知の allow/deny オプションです!\n"
-
-#, c-format
 msgid "lpadmin: Unknown argument '%s'!\n"
 msgstr "lpadmin: '%s' は未知の引数です!\n"
-
-#, c-format
 msgid "lpadmin: Unknown option '%c'!\n"
 msgstr "lpadmin: '%c' は未知のオプションです!\n"
-
 msgid "lpadmin: Warning - content type list ignored!\n"
 msgstr "lpadmin: 警告 - コンテンツタイプリストは無視されます!\n"
-
 msgid "lpc> "
 msgstr "lpc> "
-
 msgid "lpinfo: Expected 1284 device ID string after --device-id!\n"
-msgstr ""
-"lpinfo: --device-id の後には、1284デバイスIDを指定する必要があります!\n"
-
+msgstr "lpinfo: --device-id の後には、1284デバイスIDを指定する必要があります!\n"
 msgid "lpinfo: Expected language after --language!\n"
 msgstr "lpinfo: --language の後には、言語を指定する必要があります!\n"
-
 msgid "lpinfo: Expected make and model after --make-and-model!\n"
-msgstr ""
-"lpinfo: --make-and-model の後には、メーカーとモデルを指定する必要がありま"
-"す!\n"
-
+msgstr "lpinfo: --make-and-model の後には、メーカーとモデルを指定する必要があります!\n"
 msgid "lpinfo: Expected product string after --product!\n"
 msgstr "lpinfo: --product の後には、製品名を指定する必要があります!\n"
-
 msgid "lpinfo: Expected scheme list after --exclude-schemes!\n"
-msgstr ""
-"lpinfo: --exclude-schemes の後には、スキーマ・リストを指定する必要がありま"
-"す!\n"
-
+msgstr "lpinfo: --exclude-schemes の後には、スキーマ・リストを指定する必要があります!\n"
 msgid "lpinfo: Expected scheme list after --include-schemes!\n"
-msgstr ""
-"lpinfo: --include-schemes の後には、スキーマ・リストを指定する必要がありま"
-"す!\n"
-
+msgstr "lpinfo: --include-schemes の後には、スキーマ・リストを指定する必要があります!\n"
 msgid "lpinfo: Expected timeout after --timeout!\n"
 msgstr "lpinfo: --timeout の後には、タイムアウト値を指定する必要があります!\n"
-
-#, c-format
 msgid "lpinfo: Unknown argument '%s'!\n"
 msgstr "lpinfo: 未知の引数 '%s'!\n"
-
-#, c-format
 msgid "lpinfo: Unknown option '%c'!\n"
 msgstr "lpinfo: 未知のオプション '%c'!\n"
-
-#, c-format
 msgid "lpinfo: Unknown option '%s'!\n"
 msgstr "lpinfo: 未知のオプション '%s'!\n"
-
-#, c-format
 msgid "lpmove: Unable to connect to server: %s\n"
 msgstr "lpmove: サーバーに接続できません: %s!\n"
-
-#, c-format
 msgid "lpmove: Unknown argument '%s'!\n"
 msgstr "lpmove: 未知の引数 '%s'!\n"
-
-#, c-format
 msgid "lpmove: Unknown option '%c'!\n"
 msgstr "lpmove: 未知のオプション '%c'!\n"
-
 msgid "lpoptions: No printers!?!\n"
 msgstr "lpoptions: プリンターがありません!?!\n"
-
-#, c-format
 msgid "lpoptions: Unable to add printer or instance: %s\n"
 msgstr "lpoptions: プリンターまたはインスタンスを追加できません: %s\n"
-
-#, c-format
 msgid "lpoptions: Unable to get PPD file for %s: %s\n"
 msgstr "lpoptions: %s の PPD ファイルを開けません!: %s\n"
-
-#, c-format
 msgid "lpoptions: Unable to open PPD file for %s!\n"
 msgstr "lpoptions: %s の PPD ファイルを開けません!\n"
-
 msgid "lpoptions: Unknown printer or class!\n"
 msgstr "lpoptions: 未知のプリンターまたはクラスです!\n"
-
 msgid "lppasswd: Only root can add or delete passwords!\n"
 msgstr "lppasswd: root だけがパスワードの追加と削除を行えます!\n"
-
 msgid "lppasswd: Password file busy!\n"
 msgstr "lppasswd: パスワードファイルがビジー状態です!\n"
-
 msgid "lppasswd: Password file not updated!\n"
 msgstr "lppasswd: パスワードファイルは更新されません!\n"
-
 msgid "lppasswd: Sorry, password doesn't match!\n"
 msgstr "lppasswd: すみませんが、パスワードがマッチしません!\n"
-
-msgid ""
-"lppasswd: Sorry, password rejected.\n"
-"Your password must be at least 6 characters long, cannot contain\n"
-"your username, and must contain at least one letter and number.\n"
-msgstr ""
-"lppasswd: すみませんが、パスワードは拒否されました。\n"
-"パスワードは少なくとも 6 文字以上で、あなたのユーザー名を含んではならず、\n"
-"少なくとも 1 つの英字および数値を含んでなければなりません。\n"
-
+msgid "lppasswd: Sorry, password rejected.\nYour password must be at least 6 characters long, cannot contain\nyour username, and must contain at least one letter and number.\n"
+msgstr "lppasswd: すみませんが、パスワードは拒否されました。\nパスワードは少なくとも 6 文字以上で、あなたのユーザー名を含んではならず、\n少なくとも 1 つの英字および数値を含んでなければなりません。\n"
 msgid "lppasswd: Sorry, passwords don't match!\n"
 msgstr "lppasswd: すみませんが、パスワードがマッチしません!\n"
-
-#, c-format
 msgid "lppasswd: Unable to copy password string: %s\n"
 msgstr "lppasswd: パスワード文字列をコピーできません: %s\n"
-
-#, c-format
 msgid "lppasswd: Unable to open password file: %s\n"
 msgstr "lppasswd: パスワードファイルを開けません: %s\n"
-
-#, c-format
 msgid "lppasswd: Unable to write to password file: %s\n"
 msgstr "lppasswd: パスワードファイルに書き込めません: %s\n"
-
-#, c-format
 msgid "lppasswd: failed to backup old password file: %s\n"
 msgstr "lppasswd: 古いパスワードファイルのバックアップに失敗しました: %s\n"
-
-#, c-format
 msgid "lppasswd: failed to rename password file: %s\n"
 msgstr "lppasswd: パスワードファイルの名前の変更に失敗しました: %s\n"
-
-#, c-format
 msgid "lppasswd: user \"%s\" and group \"%s\" do not exist.\n"
 msgstr "lppasswd: ユーザー \"%s\" およびグループ \"%s\" は存在しません。\n"
-
-#, c-format
-msgid ""
-"lpstat: error - %s environment variable names non-existent destination \"%s"
-"\"!\n"
-msgstr ""
-"lpstat: エラー - 環境変数 %s が、存在しない宛先 \"%s\" を指しています!\n"
-
-#, c-format
+msgid "lpstat: error - %s environment variable names non-existent destination \"%s\"!\n"
+msgstr "lpstat: エラー - 環境変数 %s が、存在しない宛先 \"%s\" を指しています!\n"
 msgid "members of class %s:\n"
 msgstr "クラス %s のメンバー:\n"
-
 msgid "no entries\n"
 msgstr "エントリーがありません\n"
-
 msgid "no system default destination\n"
 msgstr "システムのデフォルトの宛先がありません\n"
-
 msgid "notify-events not specified!"
 msgstr "notify-events が指定されていません!"
-
-#, c-format
 msgid "notify-recipient-uri URI \"%s\" is already used!"
 msgstr "notify-recipient-uri URI \"%s\" はすでに使われています!"
-
-#, c-format
 msgid "notify-recipient-uri URI \"%s\" uses unknown scheme!"
 msgstr "notify-recipient-uri URI \"%s\" には未知のスキームが使われています!"
-
-#, c-format
 msgid "notify-subscription-id %d no good!"
 msgstr "notify-subscription-id %d は良くありません!"
-
 msgid "pending"
 msgstr "保留"
-
-#, c-format
 msgid "ppdc: Adding include directory \"%s\"...\n"
 msgstr "ppdc: ディレクトリー \"%s\" を追加しています...\n"
-
-#, c-format
 msgid "ppdc: Adding/updating UI text from %s...\n"
 msgstr "ppdc: %s から UI テキストを追加または更新しています...\n"
-
-#, c-format
 msgid "ppdc: Bad boolean value (%s) on line %d of %s.\n"
 msgstr "ppdc:  不正な boolean 値 (%s) があります。%d 行目、ファイル名 %s。\n"
-
-#, c-format
 msgid "ppdc: Bad resolution name \"%s\" on line %d of %s!\n"
-msgstr ""
-"ppdc: 不正な resolution 名 \"%s\" があります。%d 行目、ファイル名 %s !\n"
-
-#, c-format
+msgstr "ppdc: 不正な resolution 名 \"%s\" があります。%d 行目、ファイル名 %s !\n"
 msgid "ppdc: Bad status keyword %s on line %d of %s!\n"
-msgstr ""
-"ppdc: 不正な status キーワード %s があります。%d 行目、ファイル名 %s !\n"
-
-#, c-format
+msgstr "ppdc: 不正な status キーワード %s があります。%d 行目、ファイル名 %s !\n"
 msgid "ppdc: Bad variable substitution ($%c) on line %d of %s.\n"
 msgstr "ppdc: 不正な数値置換 ($%c) があります。%d 行目、ファイル名 %s。\n"
-
-#, c-format
 msgid "ppdc: Choice found on line %d of %s with no Option!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s で、Option がないのに Choice が見つかりました!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s で、Option がないのに Choice が見つかりました!\n"
 msgid "ppdc: Duplicate #po for locale %s on line %d of %s!\n"
-msgstr ""
-"ppdc: locale %s に対して #po が2重に定義されています。%d 行目、ファイル名 %"
-"s !\n"
-
-#, c-format
+msgstr "ppdc: locale %s に対して #po が2重に定義されています。%d 行目、ファイル名 %s !\n"
 msgid "ppdc: Expected a filter definition on line %d of %s!\n"
 msgstr "ppdc: %d 行目、ファイル名 %s においてフィルター定義が必要です!\n"
-
-#, c-format
 msgid "ppdc: Expected a program name on line %d of %s!\n"
 msgstr "ppdc: %d 行目、ファイル名 %s においてプログラム名が必要です!\n"
-
-#, c-format
 msgid "ppdc: Expected boolean value on line %d of %s.\n"
 msgstr "ppdc: %d 行目、ファイル名 %s において boolean 値が必要です。\n"
-
-#, c-format
 msgid "ppdc: Expected charset after Font on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において Font の後に charset が必要です!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において Font の後に charset が必要です!\n"
 msgid "ppdc: Expected choice code on line %d of %s.\n"
 msgstr "ppdc: %d 行目、ファイル名 %s において choice code が必要です。\n"
-
-#, c-format
 msgid "ppdc: Expected choice name/text on line %d of %s.\n"
 msgstr "ppdc: %d 行目、ファイル名 %s において choice name/text が必要です。\n"
-
-#, c-format
 msgid "ppdc: Expected color order for ColorModel on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において ColorModel に対する color order が必要"
-"です!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において ColorModel に対する color order が必要です!\n"
 msgid "ppdc: Expected colorspace for ColorModel on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において ColorModel に対する colorspace が必要で"
-"す!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において ColorModel に対する colorspace が必要です!\n"
 msgid "ppdc: Expected compression for ColorModel on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において ColorModel に対する compression が必要"
-"です!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において ColorModel に対する compression が必要です!\n"
 msgid "ppdc: Expected constraints string for UIConstraints on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において UIConstraints に対する constraint が必"
-"要です!\n"
-
-#, c-format
-msgid ""
-"ppdc: Expected driver type keyword following DriverType on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において DriverType の後に driver type keyword "
-"が必要です!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において UIConstraints に対する constraint が必要です!\n"
+msgid "ppdc: Expected driver type keyword following DriverType on line %d of %s!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において DriverType の後に driver type keyword が必要です!\n"
 msgid "ppdc: Expected duplex type after Duplex on line %d of %s!\n"
 msgstr "ppdc: %d 行目、ファイル名 %s において Duplex の後に type が必要です!\n"
-
-#, c-format
 msgid "ppdc: Expected encoding after Font on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において Font の後に encoding が必要です!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において Font の後に encoding が必要です!\n"
 msgid "ppdc: Expected filename after #po %s on line %d of %s!\n"
 msgstr "ppdc: #po %s の後にファイル名が必要です! (%d 行目, ファイル %s)\n"
-
-#, c-format
 msgid "ppdc: Expected group name/text on line %d of %s!\n"
 msgstr "ppdc: %d 行目、ファイル名 %s において group name/text が必要です!\n"
-
-#, c-format
 msgid "ppdc: Expected include filename on line %d of %s!\n"
 msgstr "ppdc: %d 行目、ファイル名 %s において include ファイル名が必要です!\n"
-
-#, c-format
 msgid "ppdc: Expected integer on line %d of %s!\n"
 msgstr "ppdc: %d 行目、ファイル名 %s において整数指定が必要です!\n"
-
-#, c-format
 msgid "ppdc: Expected locale after #po on line %d of %s!\n"
 msgstr "ppdc: %d 行目、ファイル名 %s において #po の後に locale が必要です!\n"
-
-#, c-format
 msgid "ppdc: Expected name after %s on line %d of %s!\n"
 msgstr "ppdc: %s の後に name が必要です。%d 行目、ファイル名 %s!\n"
-
-#, c-format
 msgid "ppdc: Expected name after FileName on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において FileName の後に name が必要です!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において FileName の後に name が必要です!\n"
 msgid "ppdc: Expected name after Font on line %d of %s!\n"
 msgstr "ppdc: %d 行目、ファイル名 %s において Font の後に name が必要です!\n"
-
-#, c-format
 msgid "ppdc: Expected name after Manufacturer on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において Manufacturer の後に name が必要です!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において Manufacturer の後に name が必要です!\n"
 msgid "ppdc: Expected name after MediaSize on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において MediaSize の後に name が必要です!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において MediaSize の後に name が必要です!\n"
 msgid "ppdc: Expected name after ModelName on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において ModelName の後に name が必要です!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において ModelName の後に name が必要です!\n"
 msgid "ppdc: Expected name after PCFileName on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において PCFileName の後に name が必要です!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において PCFileName の後に name が必要です!\n"
 msgid "ppdc: Expected name/text after %s on line %d of %s!\n"
 msgstr "ppdc: %s の後に name/text が必要です。%d 行目、ファイル名 %s!\n"
-
-#, c-format
 msgid "ppdc: Expected name/text after Installable on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において Installable の後に name/text が必要で"
-"す!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において Installable の後に name/text が必要です!\n"
 msgid "ppdc: Expected name/text after Resolution on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において Resolution の後に name/text が必要で"
-"す!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において Resolution の後に name/text が必要です!\n"
 msgid "ppdc: Expected name/text combination for ColorModel on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において ColorModel に対する name/text が必要で"
-"す!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において ColorModel に対する name/text が必要です!\n"
 msgid "ppdc: Expected option name/text on line %d of %s!\n"
 msgstr "ppdc: %d 行目、ファイル名 %s において option name/text が必要です!\n"
-
-#, c-format
 msgid "ppdc: Expected option section on line %d of %s!\n"
 msgstr "ppdc: %d 行目、ファイル名 %s において option section が必要です!\n"
-
-#, c-format
 msgid "ppdc: Expected option type on line %d of %s!\n"
 msgstr "ppdc: %d 行目、ファイル名 %s において option type が必要です!\n"
-
-#, c-format
 msgid "ppdc: Expected override field after Resolution on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において Resolution の後に override field が必要"
-"です!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において Resolution の後に override field が必要です!\n"
 msgid "ppdc: Expected real number on line %d of %s!\n"
 msgstr "ppdc: %d 行目、ファイル名 %s において実数が必要です!\n"
-
-#, c-format
-msgid ""
-"ppdc: Expected resolution/mediatype following ColorProfile on line %d of %"
-"s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において ColorProfile に続いて resolution/"
-"mediatype が必要です!\n"
-
-#, c-format
-msgid ""
-"ppdc: Expected resolution/mediatype following SimpleColorProfile on line %d "
-"of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において SimpleColorProfile に続いて resolution/"
-"mediatype が必要です!\n"
-
-#, c-format
+msgid "ppdc: Expected resolution/mediatype following ColorProfile on line %d of %s!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において ColorProfile に続いて resolution/mediatype が必要です!\n"
+msgid "ppdc: Expected resolution/mediatype following SimpleColorProfile on line %d of %s!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において SimpleColorProfile に続いて resolution/mediatype が必要です!\n"
 msgid "ppdc: Expected selector after %s on line %d of %s!\n"
 msgstr "ppdc: %s の後に selector が必要です。%d 行目、ファイル名 %s!\n"
-
-#, c-format
 msgid "ppdc: Expected status after Font on line %d of %s!\n"
 msgstr "ppdc: %d 行目、ファイル名 %s において Font の後に status が必要です!\n"
-
-#, c-format
 msgid "ppdc: Expected string after Copyright on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において Copyright の後に文字列が必要です!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において Copyright の後に文字列が必要です!\n"
 msgid "ppdc: Expected string after Version on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において Version の後に文字列が必要です!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において Version の後に文字列が必要です!\n"
 msgid "ppdc: Expected two option names on line %d of %s!\n"
 msgstr "ppdc: %d 行目、ファイル名 %s において 2 つのオプション名が必要です!\n"
-
-#, c-format
 msgid "ppdc: Expected value after %s on line %d of %s!\n"
 msgstr "ppdc: %s の後に value が必要です。%d 行目、ファイル名 %s!\n"
-
-#, c-format
 msgid "ppdc: Expected version after Font on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において Font の後に version が必要です!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において Font の後に version が必要です!\n"
 msgid "ppdc: Invalid #include/#po filename \"%s\"!\n"
 msgstr "ppdc: 無効な #include/#po ファイル名です \"%s\"!\n"
-
-#, c-format
 msgid "ppdc: Invalid cost for filter on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s においてフィルターに対する無効な cost がありま"
-"す!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s においてフィルターに対する無効な cost があります!\n"
 msgid "ppdc: Invalid empty MIME type for filter on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s においてフィルターに対する無効な空の MIME type "
-"があります!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s においてフィルターに対する無効な空の MIME type があります!\n"
 msgid "ppdc: Invalid empty program name for filter on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s においてフィルターに対する無効な空の program "
-"name があります!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s においてフィルターに対する無効な空の program name があります!\n"
 msgid "ppdc: Invalid option section \"%s\" on line %d of %s!\n"
-msgstr ""
-"ppdc: 無効な option section があります \"%s\"。%d 行目、ファイル名 %s!\n"
-
-#, c-format
+msgstr "ppdc: 無効な option section があります \"%s\"。%d 行目、ファイル名 %s!\n"
 msgid "ppdc: Invalid option type \"%s\" on line %d of %s!\n"
 msgstr "ppdc: 無効な option type があります \"%s\"。%d 行目、ファイル名 %s!\n"
-
-#, c-format
 msgid "ppdc: Loading driver information file \"%s\"...\n"
 msgstr "ppdc: ドライバー情報ファイル \"%s\" を読み込んでいます...\n"
-
-#, c-format
 msgid "ppdc: Loading messages for locale \"%s\"...\n"
 msgstr "ppdc: ロケール \"%s\" のメッセージを読み込んでいます...\n"
-
-#, c-format
 msgid "ppdc: Loading messages from \"%s\"...\n"
 msgstr "ppdc: \"%s\" からメッセージを読み込んでいます...\n"
-
-#, c-format
 msgid "ppdc: Missing #endif at end of \"%s\"!\n"
 msgstr "ppdc:  \"%s\" の最後に #endif が見つかりません!\n"
-
-#, c-format
 msgid "ppdc: Missing #if on line %d of %s!\n"
 msgstr "ppdc: %d 行目、ファイル名 %s において #if が見つかりません!\n"
-
-#, c-format
 msgid "ppdc: No message catalog provided for locale %s!\n"
 msgstr "ppdc: ロケール %s に対するメッセージカタログが見つかりません!\n"
-
-#, c-format
 msgid "ppdc: Option %s redefined with a different type on line %d of %s!\n"
-msgstr ""
-"ppdc: オプション %s は異なる型で再定義されています。%d 行目、ファイル名 %s!\n"
-
-#, c-format
+msgstr "ppdc: オプション %s は異なる型で再定義されています。%d 行目、ファイル名 %s!\n"
 msgid "ppdc: Option constraint must *name on line %d of %s!\n"
-msgstr ""
-"ppdc: %d 行目、ファイル名 %s において Option constraint は *name で指定しま"
-"す!\n"
-
-#, c-format
+msgstr "ppdc: %d 行目、ファイル名 %s において Option constraint は *name で指定します!\n"
 msgid "ppdc: Too many nested #if's on line %d of %s!\n"
 msgstr "ppdc: %d 行目、ファイル名 %s において #if のネストが多すぎます!\n"
-
-#, c-format
 msgid "ppdc: Unable to create PPD file \"%s\" - %s.\n"
 msgstr "ppdc: PPD ファイル \"%s\" を作成できません - %s。\n"
-
-#, c-format
 msgid "ppdc: Unable to create output directory %s: %s\n"
 msgstr "ppdc: ディレクトリー \"%s\" を作成できません - %s\n"
-
-#, c-format
 msgid "ppdc: Unable to create output pipes: %s\n"
 msgstr "ppdc: 出力 pipe が作成できません: %s\n"
-
-#, c-format
 msgid "ppdc: Unable to execute cupstestppd: %s\n"
 msgstr "ppdc: cupstestppd を実行できません: %s\n"
-
-#, c-format
 msgid "ppdc: Unable to find #po file %s on line %d of %s!\n"
 msgstr "ppdc: #po ファイル %s が見つかりません。%d 行目、ファイル名 %s!\n"
-
-#, c-format
 msgid "ppdc: Unable to find include file \"%s\" on line %d of %s!\n"
-msgstr ""
-"ppdc: インクルードファイル %s が見つかりません。%d 行目、ファイル名 %s!\n"
-
-#, c-format
+msgstr "ppdc: インクルードファイル %s が見つかりません。%d 行目、ファイル名 %s!\n"
 msgid "ppdc: Unable to find localization for \"%s\" - %s\n"
 msgstr "ppdc:  \"%s\" に対する地域化情報が見つかりません - %s \n"
-
-#, c-format
 msgid "ppdc: Unable to load localization file \"%s\" - %s\n"
 msgstr "ppdc:  \"%s\" に対する地域化情報を読み込めません - %s \n"
-
-#, c-format
 msgid "ppdc: Undefined variable (%s) on line %d of %s.\n"
 msgstr "ppdc: 変数 (%s) は未定義です。%d 行目、ファイル名 %s。\n"
-
-#, c-format
 msgid "ppdc: Unknown driver type %s on line %d of %s!\n"
 msgstr "ppdc: %s は未知のドライバータイプです。%d 行目、ファイル名 %s。\n"
-
-#, c-format
 msgid "ppdc: Unknown duplex type \"%s\" on line %d of %s!\n"
 msgstr "ppdc: \"%s\" は未知の両面タイプです。%d 行目、ファイル名 %s!\n"
-
-#, c-format
 msgid "ppdc: Unknown media size \"%s\" on line %d of %s!\n"
 msgstr "ppdc: \"%s\" は未知の用紙サイズです。%d 行目、ファイル名 %s!\n"
-
-#, c-format
 msgid "ppdc: Unknown token \"%s\" seen on line %d of %s!\n"
 msgstr "ppdc: 未知の token \"%s\" があります。%d 行目、ファイル名 %s!\n"
-
-#, c-format
-msgid ""
-"ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s!\n"
-msgstr ""
-"ppdc: 実数に未知の終了文字 \"%s\" があります。%d 行目、ファイル名 %s!\n"
-
-#, c-format
+msgid "ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s!\n"
+msgstr "ppdc: 実数に未知の終了文字 \"%s\" があります。%d 行目、ファイル名 %s!\n"
 msgid "ppdc: Unterminated string starting with %c on line %d of %s!\n"
-msgstr ""
-"ppdc: %c で始まる文字に対して終端文字がありません。%d 行目、ファイル名 %s!\n"
-
-#, c-format
+msgstr "ppdc: %c で始まる文字に対して終端文字がありません。%d 行目、ファイル名 %s!\n"
 msgid "ppdc: Writing %s...\n"
 msgstr "ppdc: %s を書き込んでいます...\n"
-
-#, c-format
 msgid "ppdc: Writing PPD files to directory \"%s\"...\n"
 msgstr "ppdc: ディレクトリー \"%s\" に PPD ファイルを書き込んでいます...\n"
-
-#, c-format
 msgid "ppdmerge: Bad LanguageVersion \"%s\" in %s!\n"
 msgstr "ppdmerge: 不正な LanguageVersion \"%s\" が %s にあります!\n"
-
-#, c-format
 msgid "ppdmerge: Ignoring PPD file %s...\n"
 msgstr "ppdmerge: PPD ファイル %s を無視します...\n"
-
-#, c-format
 msgid "ppdmerge: Unable to backup %s to %s- %s\n"
 msgstr "ppdmerge: %s を %s にバックアップできません - %s\n"
-
-#, c-format
 msgid "printer %s disabled since %s -\n"
 msgstr "プリンター %s は %s から無効です -\n"
-
-#, c-format
 msgid "printer %s is idle.  enabled since %s\n"
 msgstr "プリンター %s は待機中です。%s 以来有効です\n"
-
-#, c-format
 msgid "printer %s now printing %s-%d.  enabled since %s\n"
 msgstr "プリンター %s は %s-%d を印刷しています。%s 以来有効です\n"
-
-#, c-format
 msgid "printer %s/%s disabled since %s -\n"
 msgstr "プリンター %s/%s は %s から無効です -\n"
-
-#, c-format
 msgid "printer %s/%s is idle.  enabled since %s\n"
 msgstr "プリンター %s/%s は待機中です。%s 以来有効です\n"
-
-#, c-format
 msgid "printer %s/%s now printing %s-%d.  enabled since %s\n"
 msgstr "プリンター %s/%s は現在 %s-%d を印刷中です。%s 以来有効です\n"
-
 msgid "processing"
 msgstr "処理中"
-
-#, c-format
 msgid "request id is %s-%d (%d file(s))\n"
 msgstr "リクエスト ID は %s-%d です (%d 個のファイル)\n"
-
 msgid "request-id uses indefinite length"
 msgstr "リクエスト ID の長さが不定"
-
 msgid "scheduler is not running\n"
 msgstr "スケジューラーは動作していません\n"
-
 msgid "scheduler is running\n"
 msgstr "スケジューラーは動作中です\n"
-
-#, c-format
 msgid "stat of %s failed: %s"
 msgstr "%s の状態取得に失敗しました: %s"
-
 msgid "status\t\tshow status of daemon and queue\n"
 msgstr "status\t\tデーモンとキューの状態を表示\n"
-
 msgid "stopped"
 msgstr "停止"
-
-#, c-format
 msgid "system default destination: %s\n"
 msgstr "システムのデフォルトの宛先: %s\n"
-
-#, c-format
 msgid "system default destination: %s/%s\n"
 msgstr "システムのデフォルトの宛先: %s/%s\n"
-
 msgid "unknown"
 msgstr "未知"
-
 msgid "untitled"
 msgstr "タイトルなし"
-
 msgid "variable-bindings uses indefinite length"
 msgstr "variable-bindings の長さが不定"
-
-#~ msgid "%s: Unable to open %s - %s\n"
-#~ msgstr "%s: %s を開けません - %s\n"
-
-#~ msgid "%s: Unable to open %s - %s on line %d.\n"
-#~ msgstr "%s: %s を開けません。- %s の %d 行目。\n"
-
-#~ msgid "ERROR: Unable to create temporary file - %s.\n"
-#~ msgstr "ERROR: テンポラリーファイルを作成できません - %s\n"
-
-#~ msgid "ERROR: Unable to create temporary file: %s\n"
-#~ msgstr "ERROR: テンポラリーファイルを作成できません: %s\n"
-
-#~ msgid "ERROR: Unable to open temporary file"
-#~ msgstr "ERROR: テンポラリーファイルを開けません"
-
-#~ msgid ""
-#~ "Usage: convert [ options ]\n"
-#~ "\n"
-#~ "Options:\n"
-#~ "\n"
-#~ "  -f filename          Set file to be converted (otherwise stdin)\n"
-#~ "  -o filename          Set file to be generated (otherwise stdout)\n"
-#~ "  -i mime/type         Set input MIME type (otherwise auto-typed)\n"
-#~ "  -j mime/type         Set output MIME type (otherwise application/pdf)\n"
-#~ "  -P filename.ppd      Set PPD file\n"
-#~ "  -a 'name=value ...'  Set option(s)\n"
-#~ "  -U username          Set username for job\n"
-#~ "  -J title             Set title\n"
-#~ "  -c copies            Set number of copies\n"
-#~ "  -u                   Remove the PPD file when finished\n"
-#~ "  -D                   Remove the input file when finished\n"
-#~ msgstr ""
-#~ "使い方: convert [ オプション ]\n"
-#~ "\n"
-#~ "オプション:\n"
-#~ "\n"
-#~ "  -f ファイル名        変換するファイルを指定する (省略すると標準入力)\n"
-#~ "  -o ファイル名        生成されるファイルを指定する (省略すると標準出力)\n"
-#~ "  -i MIME/タイプ       入力 MIME タイプを指定する (省略すると自動設定)\n"
-#~ "  -j MIME/タイプ       出力 MIME タイプを指定する (省略すると application/"
-#~ "pdf)\n"
-#~ "  -P ファイル名.ppd    PPD ファイルを指定する\n"
-#~ "  -a '名前=値 ...'     オプションを指定する\n"
-#~ "  -U ユーザー名        ジョブのユーザー名を指定する\n"
-#~ "  -J タイトル          タイトルを指定する\n"
-#~ "  -c コピー数          コピー数を指定する\n"
-#~ "  -u                   完了時に PPD ファイルを削除する\n"
-#~ "  -D                   完了時に入力ファイルを削除する\n"
-
-#~ msgid ""
-#~ "Usage: cupsfilter -m mime/type [ options ] filename\n"
-#~ "\n"
-#~ "Options:\n"
-#~ "\n"
-#~ "  -c cupsd.conf    Set cupsd.conf file to use\n"
-#~ "  -j job-id[,N]    Filter file N from the specified job (default is file "
-#~ "1)\n"
-#~ "  -n copies        Set number of copies\n"
-#~ "  -o name=value    Set option(s)\n"
-#~ "  -p filename.ppd  Set PPD file\n"
-#~ "  -t title         Set title\n"
-#~ msgstr ""
-#~ "使い方: cupsfilter -m MIME/タイプ [ オプション ] ファイル名\n"
-#~ "\n"
-#~ "オプション:\n"
-#~ "\n"
-#~ "  -c cupsd.conf     利用する cupsd.conf ファイルを指定する\n"
-#~ "  -n コピー数       コピー数を指定する\n"
-#~ "  -o 名前=値        オプションを指定する\n"
-#~ "  -p ファイル名.ppd PPD ファイルを指定する\n"
-#~ "  -t タイトル       タイトルを指定する\n"
-
-#~ msgid ""
-#~ "Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]\n"
-#~ "       program | cupstestppd [options] -\n"
-#~ "\n"
-#~ "Options:\n"
-#~ "\n"
-#~ "    -R root-directory    Set alternate root\n"
-#~ "    -W {all,none,constraints,defaults,duplex,filters,translations}\n"
-#~ "                         Issue warnings instead of errors\n"
-#~ "    -q                   Run silently\n"
-#~ "    -r                   Use 'relaxed' open mode\n"
-#~ "    -v                   Be slightly verbose\n"
-#~ "    -vv                  Be very verbose\n"
-#~ msgstr ""
-#~ "使い方: cupstestppd [オプション] ファイル名1.ppd[.gz] [...ファイル名N.ppd"
-#~ "[.gz]]\n"
-#~ "       プログラム | cupstestppd [オプション] -\n"
-#~ "\n"
-#~ "オプション:\n"
-#~ "\n"
-#~ "    -R ルートディレクトリ 別のルートを指定する\n"
-#~ "    -W {all,none,constraints,defaults,filters,translations}\n"
-#~ "                          エラーの代わりに警告を発行する\n"
-#~ "    -q                    詳細は表示しない\n"
-#~ "    -r                    寛容モード\n"
-#~ "    -v                    やや詳細に表示する\n"
-#~ "    -vv                   非常に詳細に表示する\n"
-
-#~ msgid "cupsfilter: Unable to create temporary file: %s\n"
-#~ msgstr "cupsfilter: テンポラリー・ファイル: %s を作成できません\n"
-
-#~ msgid "lpadmin: Unable to create temporary file - %s\n"
-#~ msgstr "lpadmin: テンポラリファイルを作成できません - %s\n"
-
-#~ msgid "lpadmin: Unable to create temporary file: %s\n"
-#~ msgstr "lpadmin: テンポラリファイルを作成できません: %s\n"
index 17f9dc35316163f7c5c11d63f3246842af73fe54..391520343f002515d26688c09f1b84f40479dca8 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 classes.conf 5 "CUPS" "12 February 2006" "Apple Inc."
+.TH classes.conf 5 "CUPS" "29 April 2009" "Apple Inc."
 .SH NAME
 classes.conf \- class configuration file for cups
 .SH DESCRIPTION
@@ -47,14 +47,6 @@ DenyUser [ user @group ... ]
 .br
 Prevents specific users and groups from printing to the printer.
 .TP 5
-ErrorPolicy abort-job
-.TP 5
-ErrorPolicy retry-job
-.TP 5
-ErrorPolicy stop-printer
-.br
-Specifies the error policy for the printer.
-.TP 5
 Info text
 .br
 Specifies human-readable text describing the printer.
index 674923d22da794f7b2d68801f7a32815a1b0ad94..ef5ecabe82968a3d04f7e7692afc4aad67f68597 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 printers.conf 5 "CUPS" "12 February 2006" "Apple Inc."
+.TH printers.conf 5 "CUPS" "29 April 2009" "Apple Inc."
 .SH NAME
 printers.conf \- printer configuration file for cups
 .SH DESCRIPTION
@@ -53,6 +53,8 @@ Specifies the device URI for a printer.
 .TP 5
 ErrorPolicy abort-job
 .TP 5
+ErrorPolicy retry-current-job
+.TP 5
 ErrorPolicy retry-job
 .TP 5
 ErrorPolicy stop-printer
index 237cffe4e0fdf6d345ced035ee2aa2d8ce0003d6..09ab796f38d2e759e0c5c5584447e92f4d3f5f3a 100644 (file)
@@ -234,6 +234,8 @@ rm -rf $RPM_BUILD_ROOT
 /usr/share/cups/templates/*
 %dir /usr/share/doc/cups
 /usr/share/doc/cups/*.*
+%dir /usr/share/doc/cups/de
+/usr/share/doc/cups/de/*
 %dir /usr/share/doc/cups/es
 /usr/share/doc/cups/es/*
 %dir /usr/share/doc/cups/ja
index db4d1896eae8cdd21e56c00430a387c0fd656d9f..fb383706db392527e33174dbfa3d77040187c53d 100644 (file)
@@ -58,6 +58,7 @@ LIBTARGETS =  \
                libcupsppdc.a
 UNITTARGETS =  \
                ppdc-static \
+               ppdi-static \
                testcatalog
 EXECTARGETS =  \
                ppdc \
@@ -101,8 +102,8 @@ clean:
        $(RM) $(OBJS) core
        $(RM) *.bak *.bck core.*
        $(RM) $(TARGETS) $(UNITTARGETS)
-       $(RM) -r ppd
-       $(RM) sample.c test.drv
+       $(RM) -r ppd ppd2
+       $(RM) sample-import.drv sample.c test.drv
        $(RM) libcupsppdc.so libcupsppdc.sl libcupsppdc.dylib
 
 
@@ -217,7 +218,10 @@ apihelp:
                --title "PPD Compiler API" \
                --css ../doc/cups-printable.css \
                --header api-ppdc.header --intro api-ppdc.shtml \
+               api-ppdc.xml \
                ppdc.h $(LIBOBJS:.o=.cxx) >../doc/help/api-ppdc.html
+       mxmldoc --tokens help/api-ppdc.html api-ppdc.xml >../doc/help/api-ppdc.tokens
+       $(RM) api-ppdc.xml
 
 framedhelp:
        mxmldoc --framed api-ppdc \
@@ -279,6 +283,24 @@ ppdi:                      ppdi.o $(LIBCUPSPPDC) ../cups/$(LIBCUPS)
        $(CXX) $(LDFLAGS) -o $@ ppdi.o -L. -lcupsppdc $(LIBS)
 
 
+ppdi-static:           ppdc-static ppdi.o libcupsppdc.a  ../cups/libcups.a
+       echo Linking $@...
+       $(CXX) $(ARCHFLAGS) $(LDFLAGS) -o ppdi-static ppdi.o libcupsppdc.a \
+               ../cups/libcups.a $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) \
+               $(COMMONLIBS) $(LIBZ)
+       echo Testing PPD importer...
+       $(RM) -r ppd ppd2 sample-import.drv
+       ./ppdc-static -I ../data sample.drv
+       ./ppdi-static -I ../data -o sample-import.drv ppd/*
+       ./ppdc-static -I ../data -d ppd2 sample-import.drv
+       if diff -qr ppd ppd2; then \
+               echo PPD import OK; \
+       else \
+               echo PPD import FAILED; \
+               exit 1; \
+       fi
+
+
 #
 # ppdmerge, merge PPD files.
 #
index ba9c78c9c29a129315f2f5212deab067d4e4d980..94f8bac386324f3f2259ab24d9661e219bc0e31b 100644 (file)
@@ -190,7 +190,7 @@ ppdcDriver::find_attr(const char *k,        // I - Keyword string
   for (a = (ppdcAttr *)attrs->first(); a; a = (ppdcAttr *)attrs->next())
     if (!strcmp(a->name->value, k) &&
         ((!s && (!a->selector->value || !a->selector->value[0])) ||
-        (!s && !a->selector->value && !strcmp(a->selector->value, s))))
+        (s && a->selector->value && !strcmp(a->selector->value, s))))
       return (a);
 
   return (NULL);
@@ -378,7 +378,8 @@ ppdcDriver::write_ppd_file(
     ppdcLineEnding le)                 // I - Line endings to use
 {
   bool                 delete_cat;     // Delete the catalog when we are done?
-  char                 query[42];      // Query attribute
+  char                 query[42],      // Query attribute
+                       custom[42];     // Custom attribute
   ppdcString           *s;             // Copyright string
   ppdcGroup            *g;             // Current group
   ppdcOption           *o;             // Current option
@@ -412,10 +413,11 @@ ppdcDriver::write_ppd_file(
 
   // Write the standard header stuff...
   cupsFilePrintf(fp, "*PPD-Adobe: \"4.3\"%s", lf);
-  cupsFilePrintf(fp, "*%% PPD file for %s with CUPS.%s", model_name->value, lf);
+  cupsFilePrintf(fp, "*%%%%%%%% PPD file for %s with CUPS.%s",
+                 model_name->value, lf);
   cupsFilePrintf(fp,
-                 "*%% Created by the CUPS PPD Compiler " CUPS_SVERSION ".%s",
-                lf);
+                 "*%%%%%%%% Created by the CUPS PPD Compiler " CUPS_SVERSION
+                ".%s", lf);
   for (s = (ppdcString *)copyright->first();
        s;
        s = (ppdcString *)copyright->next())
@@ -559,6 +561,14 @@ ppdcDriver::write_ppd_file(
           !strcmp(a->name->value, "?PaperDimension")))
         continue;
 
+      if (!strncmp(a->name->value, "Custom", 6) &&
+          find_option(a->name->value + 6))
+       continue;
+
+      if (!strncmp(a->name->value, "ParamCustom", 11) &&
+          find_option(a->name->value + 11))
+       continue;
+
       if (!a->selector->value || !a->selector->value[0])
        cupsFilePrintf(fp, "*%s", a->name->value);
       else if (!a->text->value || !a->text->value[0])
@@ -579,7 +589,7 @@ ppdcDriver::write_ppd_file(
       {
        cupsFilePrintf(fp, ": \"%s\"%s", a->value->value, lf);
 
-       if (strchr(a->value->value, '\n'))
+       if (strchr(a->value->value, '\n') || strchr(a->value->value, '\r'))
           cupsFilePrintf(fp, "*End%s", lf);
       }
       else
@@ -931,9 +941,6 @@ ppdcDriver::write_ppd_file(
       cupsFilePrintf(fp, "*ParamCustomPageSize Orientation: 5 int 0 0%s", lf);
   }
 
-  if (type != PPDC_DRIVER_PS && !find_attr("RequiresPageRegion", NULL))
-    cupsFilePrintf(fp, "*RequiresPageRegion All: True%s", lf);
-
   // All other options...
   for (g = (ppdcGroup *)groups->first(); g; g = (ppdcGroup *)groups->next())
   {
@@ -1034,7 +1041,7 @@ ppdcDriver::write_ppd_file(
 
       if ((a = find_attr(query, NULL)) != NULL)
       {
-       cupsFilePrintf(fp, "*%s: \"%s\"\n", query, a->value->value);
+       cupsFilePrintf(fp, "*%s: \"%s\"%s", query, a->value->value, lf);
 
        if (strchr(a->value->value, '\n') ||
             strchr(a->value->value, '\r'))
@@ -1042,6 +1049,32 @@ ppdcDriver::write_ppd_file(
       }
 
       cupsFilePrintf(fp, "*CloseUI: *%s%s", o->name->value, lf);
+
+      snprintf(custom, sizeof(custom), "Custom%s", o->name->value);
+      if ((a = find_attr(custom, "True")) != NULL)
+      {
+        // Output custom option information...
+        cupsFilePrintf(fp, "*%s True: \"%s\"%s", custom, a->value->value, lf);
+       if (strchr(a->value->value, '\n') || strchr(a->value->value, '\r'))
+         cupsFilePrintf(fp, "*End%s", lf);
+
+        snprintf(custom, sizeof(custom), "ParamCustom%s", o->name->value);
+       for (a = (ppdcAttr *)attrs->first(); a; a = (ppdcAttr *)attrs->next())
+       {
+         if (strcmp(a->name->value, custom))
+           continue;
+
+         if (!a->selector->value || !a->selector->value[0])
+           cupsFilePrintf(fp, "*%s", a->name->value);
+         else if (!a->text->value || !a->text->value[0])
+           cupsFilePrintf(fp, "*%s %s", a->name->value, a->selector->value);
+         else
+           cupsFilePrintf(fp, "*%s %s/%s", a->name->value, a->selector->value,
+                          a->text->value);
+
+          cupsFilePrintf(fp, ": %s%s", a->value->value, lf);
+       }
+      }
     }
 
     if (strcasecmp(g->name->value, "General"))
index 5305929367b9a26c52207c44e42cd729efe25a5a..eb04648f2ffd92248645c50696e5547d362ff123 100644 (file)
@@ -38,6 +38,7 @@ ppdcSource::import_ppd(const char *f) // I - Filename
   cups_file_t  *fp;                    // File
   char         line[256],              // Comment line
                *ptr;                   // Pointer into line
+  int          cost;                   // Cost for filter
   ppd_file_t   *ppd;                   // PPD file data
   ppd_group_t  *group;                 // PPD group
   ppd_option_t *option;                // PPD option
@@ -47,6 +48,7 @@ ppdcSource::import_ppd(const char *f) // I - Filename
   ppd_const_t  *constraint2;           // Temp PPD UI constraint
   ppd_size_t   *size;                  // PPD page size
   ppdcDriver   *driver;                // Driver
+  ppdcFilter   *filter;                // Current filter
   ppdcFont     *font;                  // Font
   ppdcGroup    *cgroup;                // UI group
   ppdcOption   *coption;               // UI option
@@ -89,7 +91,7 @@ ppdcSource::import_ppd(const char *f) // I - Filename
     while (cupsFileGets(fp, line, sizeof(line)))
       if (strncmp(line, "*%", 2))
         break;
-      else
+      else if (strncmp(line, "*%%%% ", 6))
       {
         for (ptr = line + 2; isspace(*ptr); ptr ++);
 
@@ -111,15 +113,49 @@ ppdcSource::import_ppd(const char *f)     // I - Filename
     else
       ptr = ppd->modelname;
 
-    driver->manufacturer  = new ppdcString(ppd->manufacturer);
-    driver->model_name    = new ppdcString(ptr);
-    driver->pc_file_name  = new ppdcString(ppd->pcfilename);
+    if (ppd->nickname)
+      driver->add_attr(new ppdcAttr("NickName", NULL, NULL, ppd->nickname));
+
+    if (ppd->shortnickname)
+      driver->add_attr(new ppdcAttr("ShortNickName", NULL, NULL,
+                                    ppd->shortnickname));
+
+    driver->manufacturer        = new ppdcString(ppd->manufacturer);
+    driver->model_name          = new ppdcString(ptr);
+    driver->pc_file_name        = new ppdcString(ppd->pcfilename);
     attr = ppdFindAttr(ppd, "FileVersion", NULL);
-    driver->version       = new ppdcString(attr ? attr->value : NULL);
-    driver->model_number  = ppd->model_number;
-    driver->manual_copies = ppd->manual_copies;
-    driver->color_device  = ppd->color_device;
-    driver->throughput    = ppd->throughput;
+    driver->version             = new ppdcString(attr ? attr->value : NULL);
+    driver->model_number        = ppd->model_number;
+    driver->manual_copies       = ppd->manual_copies;
+    driver->color_device        = ppd->color_device;
+    driver->throughput          = ppd->throughput;
+    driver->variable_paper_size = ppd->variable_sizes;
+    driver->max_width           = ppd->custom_max[0];
+    driver->max_length          = ppd->custom_max[1];
+    driver->min_width           = ppd->custom_min[0];
+    driver->min_length          = ppd->custom_min[1];
+    driver->left_margin         = ppd->custom_margins[0];
+    driver->bottom_margin       = ppd->custom_margins[1];
+    driver->right_margin        = ppd->custom_margins[2];
+    driver->top_margin          = ppd->custom_margins[3];
+
+    for (i = 0; i < ppd->num_filters; i ++)
+    {
+      strlcpy(line, ppd->filters[i], sizeof(line));
+
+      for (ptr = line; *ptr; ptr ++)
+        if (isspace(*ptr & 255))
+         break;
+      *ptr++ = '\0';
+
+      cost = strtol(ptr, &ptr, 10);
+
+      while (isspace(*ptr & 255))
+        ptr ++;
+
+      filter = new ppdcFilter(line, ptr, cost);
+      driver->add_filter(filter);
+    }
 
     attr = ppdFindAttr(ppd, "DefaultFont", NULL);
     driver->default_font  = new ppdcString(attr ? attr->value : NULL);
@@ -166,7 +202,7 @@ ppdcSource::import_ppd(const char *f)       // I - Filename
       {
         if (!strcmp(option->keyword, "PageSize") || !strcmp(option->keyword, "PageRegion"))
           continue;
-            
+
         coption = new ppdcOption((ppdcOptType)option->ui, option->keyword,
                                 option->text, (ppdcOptSection)option->section,
                                 option->order);
@@ -174,6 +210,9 @@ ppdcSource::import_ppd(const char *f)       // I - Filename
 
         for (k = option->num_choices, choice = option->choices; k > 0; k --, choice ++)
         {
+         if (!strcmp(choice->choice, "Custom"))
+           continue;
+
           cchoice = new ppdcChoice(choice->choice, choice->text, choice->code);
           coption->add_choice(cchoice);
 
@@ -188,25 +227,21 @@ ppdcSource::import_ppd(const char *f)     // I - Filename
          i > 0;
         i --, constraint ++)
     {
-      for (j = i - 1, constraint2 = constraint;
+      // Look for mirrored constraints...
+      for (j = i - 1, constraint2 = constraint + 1;
            j > 0;
           j --, constraint2 ++)
-       if (constraint != constraint2 &&
-           !strcmp(constraint->option1, constraint2->option2) &&
-           (constraint->choice1 == constraint2->choice2 ||
-            (constraint->choice1 && constraint2->choice2 &&
-             !strcmp(constraint->choice1, constraint2->choice2))) &&
+       if (!strcmp(constraint->option1, constraint2->option2) &&
+           !strcmp(constraint->choice1, constraint2->choice2) &&
            !strcmp(constraint->option2, constraint2->option1) &&
-           (constraint->choice2 == constraint2->choice1 ||
-            (constraint->choice2 && constraint2->choice1 &&
-             !strcmp(constraint->choice2, constraint2->choice1))))
+           !strcmp(constraint->choice2, constraint2->choice1))
           break;
 
       if (j)
         continue;
 
-      cconstraint = new ppdcConstraint(constraint->option1, constraint->choice1,
-                                       constraint->option2, constraint->choice2);
+      cconstraint = new ppdcConstraint(constraint->option2, constraint->choice2,
+                                       constraint->option1, constraint->choice1);
       driver->add_constraint(cconstraint);
     }
 
@@ -240,6 +275,10 @@ ppdcSource::import_ppd(const char *f)      // I - Filename
 
        driver->add_font(font);
       }
+      else if (!strcmp(attr->name, "CustomPageSize"))
+      {
+        driver->set_custom_size_code(attr->value);
+      }
       else if ((strncmp(attr->name, "Default", 7) ||
                !strcmp(attr->name, "DefaultColorSpace")) &&
               strcmp(attr->name, "ColorDevice") &&
@@ -248,15 +287,35 @@ ppdcSource::import_ppd(const char *f)     // I - Filename
               strcmp(attr->name, "MaxMediaHeight") &&
               strcmp(attr->name, "MaxMediaWidth") &&
               strcmp(attr->name, "NickName") &&
+              strcmp(attr->name, "ParamCustomPageSize") &&
               strcmp(attr->name, "ShortNickName") &&
               strcmp(attr->name, "Throughput") &&
               strcmp(attr->name, "PCFileName") &&
               strcmp(attr->name, "FileVersion") &&
               strcmp(attr->name, "FormatVersion") &&
+              strcmp(attr->name, "HWMargins") &&
               strcmp(attr->name, "VariablePaperSize") &&
               strcmp(attr->name, "LanguageEncoding") &&
-              strcmp(attr->name, "LanguageVersion"))
+              strcmp(attr->name, "LanguageVersion") &&
+              strcmp(attr->name, "cupsFilter") &&
+              strcmp(attr->name, "cupsFlipDuplex") &&
+              strcmp(attr->name, "cupsLanguages") &&
+              strcmp(attr->name, "cupsManualCopies") &&
+              strcmp(attr->name, "cupsModelNumber") &&
+              strcmp(attr->name, "cupsVersion"))
       {
+        if ((ptr = strchr(attr->name, '.')) != NULL &&
+           ((ptr - attr->name) == 2 || (ptr - attr->name) == 5))
+       {
+         // Might be a localization attribute; test further...
+         if (isalpha(attr->name[0] & 255) &&
+             isalpha(attr->name[1] & 255) &&
+             (attr->name[2] == '.' ||
+              (attr->name[2] == '_' && isalpha(attr->name[3] & 255) &&
+               isalpha(attr->name[4] & 255))))
+            continue;
+       }
+
         // Attribute...
         driver->add_attr(new ppdcAttr(attr->name, attr->spec, attr->text,
                                      attr->value));
index fedc82965adfe5f56160310631ec06f055432cc1..52e73e32fc788a249a9973d0d29c5d6d56f01e75 100644 (file)
@@ -3,7 +3,7 @@
 //
 //   Driver info file for CUPS-supplied PPDs.
 //
-//   Copyright 2007-2008 by Apple Inc.
+//   Copyright 2007-2009 by Apple Inc.
 //   Copyright 1993-2006 by Easy Software Products.
 //
 //   These coded instructions, statements, and computer programs are the
@@ -521,11 +521,10 @@ Version "1.4"
   MinSize 36 36
   MaxSize 630 7128
 
-  UIConstraints "*inPrintMode Standard *inCutInterval "
-  UIConstraints "*inPrintMode Standard *inTearInterval "
-  UIConstraints "*inPrintMode Tear *inCutInterval "
-  UIConstraints "*inTearInterval *inPrintMode Cut"
-  UIConstraints "*inTearInterval *inPrintMode Standard"
+  UIConstraints "*inPrintMode Standard *inCutInterval"
+  UIConstraints "*inPrintMode Tear *inCutInterval"
+  UIConstraints "*inPrintMode Standard *inTearInterval"
+  UIConstraints "*inPrintMode Cut *inTearInterval"
 
   *MediaSize w288h432
 
index 9479c7af561f9e19088475d77e757c39157b3326..2cbb74edc8d1b4969ec4289b59de0ac79f6f03c9 100644 (file)
@@ -152,7 +152,8 @@ install-data:
                $(INSTALL_DIR) -m 755 $(STATEDIR); \
        fi
        echo Creating $(STATEDIR)/certs...
-       $(INSTALL_DIR) -m 511 -g $(CUPS_PRIMARY_SYSTEM_GROUP) $(STATEDIR)/certs
+       $(INSTALL_DIR) -m 511 -o $(CUPS_USER) -g $(CUPS_PRIMARY_SYSTEM_GROUP) \
+               $(STATEDIR)/certs
        echo Creating $(LOGDIR)...
        $(INSTALL_DIR) -m 755 $(LOGDIR)
        echo Creating $(REQUESTS)...
@@ -276,6 +277,8 @@ apihelp:
                --css ../doc/cups-printable.css \
                --header api-mime.header --intro api-mime.shtml \
                mime.h $(LIBOBJS:.o=.c) >../doc/help/api-mime.html
+       mxmldoc --tokens help/api-mime.html api-mime.xml >../doc/help/api-mime.tokens
+       $(RM) api-mime.xml
 
 framedhelp:
        mxmldoc --framed api-mime \
index 7316c8feb66572493ad6aae30392c0e1c8e253d9..d72f3064de7d56220155838150b0c8274b61a714 100644 (file)
@@ -495,7 +495,11 @@ cupsdAuthorize(cupsd_client_t *con)        /* I - Client connection */
 
     peersize = sizeof(peercred);
 
+#  ifdef __APPLE__
+    if (getsockopt(con->http.fd, 0, LOCAL_PEERCRED, &peercred, &peersize))
+#  else
     if (getsockopt(con->http.fd, SOL_SOCKET, SO_PEERCRED, &peercred, &peersize))
+#  endif /* __APPLE__ */
     {
       cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to get peer credentials - %s",
                       strerror(errno));
index d346976001221a2e6c9779aaff3fe7dbd76c9405..b836962cf06f9b06ab15c76abb8e98a7b68e218b 100644 (file)
@@ -55,9 +55,9 @@ cupsdAddClass(const char *name)               /* I - Name of class */
 
     c->type = CUPS_PRINTER_CLASS;
 
-    cupsdSetStringf(&c->uri, "ipp://%s:%d/classes/%s", ServerName, LocalPort,
+    cupsdSetStringf(&c->uri, "ipp://%s:%d/classes/%s", ServerName, RemotePort,
                     name);
-    cupsdSetString(&c->error_policy, "retry-job");
+    cupsdSetString(&c->error_policy, "retry-current-job");
   }
 
   return (c);
@@ -629,7 +629,12 @@ cupsdLoadAllClasses(void)
     else if (!strcasecmp(line, "ErrorPolicy"))
     {
       if (value)
-        cupsdSetString(&p->error_policy, value);
+      {
+        if (strcmp(value, "retry-current-job") && strcmp(value, "retry-job"))
+         cupsdLogMessage(CUPSD_LOG_WARN,
+                         "ErrorPolicy %s ignored on line %d of classes.conf",
+                         value, linenum);
+      }
       else
        cupsdLogMessage(CUPSD_LOG_ERROR,
                        "Syntax error on line %d of classes.conf.", linenum);
index b5a59ae8878f1a1222762f6e0a9b02d97cdb3c11..304219ae9e5be697706c0577b45ddf52b3cc1067 100644 (file)
@@ -422,7 +422,7 @@ cupsdAcceptClient(cupsd_listener_t *lis)/* I - Listener socket */
     {
       if (httpAddrLocalhost(&temp))
         strlcpy(con->servername, "localhost", sizeof(con->servername));
-      else if (HostNameLookups || RemoteAccessEnabled)
+      else if (HostNameLookups || RemotePort)
         httpAddrLookup(&temp, con->servername, sizeof(con->servername));
       else
         httpAddrString(&temp, con->servername, sizeof(con->servername));
@@ -435,7 +435,7 @@ cupsdAcceptClient(cupsd_listener_t *lis)/* I - Listener socket */
     {
       if (httpAddrLocalhost(&temp))
         strlcpy(con->servername, "localhost", sizeof(con->servername));
-      else if (HostNameLookups || RemoteAccessEnabled)
+      else if (HostNameLookups || RemotePort)
         httpAddrLookup(&temp, con->servername, sizeof(con->servername));
       else
         httpAddrString(&temp, con->servername, sizeof(con->servername));
@@ -544,8 +544,7 @@ cupsdCloseClient(cupsd_client_t *con)       /* I - Client to close */
 #endif /* HAVE_LIBSSL */
 
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCloseClient(con=%p(%d))", con,
-                  con->http.fd);
+  cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdCloseClient: %d", con->http.fd);
 
  /*
   * Flush pending writes before closing...
@@ -794,12 +793,6 @@ cupsdReadClient(cupsd_client_t *con)       /* I - Client to read from */
                      "CHUNKED" : "LENGTH",
                  CUPS_LLCAST con->http.data_remaining, con->file);
 
-  if (con->http.error)
-  {
-    cupsdCloseClient(con);
-    return;
-  }
-
 #ifdef HAVE_SSL
   if (con->auto_ssl)
   {
@@ -837,6 +830,16 @@ cupsdReadClient(cupsd_client_t *con)       /* I - Client to read from */
 
         if (httpGets(line, sizeof(line) - 1, HTTP(con)) == NULL)
        {
+         if (con->http.error && con->http.error != EPIPE)
+           cupsdLogMessage(CUPSD_LOG_DEBUG,
+                           "cupsdReadClient: %d WAITING Closing for error %d "
+                           "(%s)", con->http.fd, con->http.error,
+                           strerror(con->http.error));
+         else
+           cupsdLogMessage(CUPSD_LOG_DEBUG,
+                           "cupsdReadClient: %d WAITING Closing on EOF",
+                           con->http.fd);
+
          cupsdCloseClient(con);
          return;
        }
@@ -938,6 +941,9 @@ cupsdReadClient(cupsd_client_t *con)        /* I - Client to read from */
              }
              else
              {
+               cupsdLogMessage(CUPSD_LOG_ERROR,
+                               "Unsupported request line \"%s\" from %s!",
+                               line, con->http.hostname);
                cupsdSendError(con, HTTP_NOT_SUPPORTED, CUPSD_AUTH_NONE);
                cupsdCloseClient(con);
                return;
@@ -1055,6 +1061,16 @@ cupsdReadClient(cupsd_client_t *con)     /* I - Client to read from */
 
        if (status != HTTP_OK && status != HTTP_CONTINUE)
        {
+         if (con->http.error && con->http.error != EPIPE)
+           cupsdLogMessage(CUPSD_LOG_DEBUG,
+                           "cupsdReadClient: %d FIELDS Closing for error %d "
+                           "(%s)", con->http.fd, con->http.error,
+                           strerror(con->http.error));
+         else
+           cupsdLogMessage(CUPSD_LOG_DEBUG,
+                           "cupsdReadClient: %d FIELDS Closing on EOF",
+                           con->http.fd);
+
          cupsdSendError(con, HTTP_BAD_REQUEST, CUPSD_AUTH_NONE);
          cupsdCloseClient(con);
          return;
@@ -1068,6 +1084,8 @@ cupsdReadClient(cupsd_client_t *con)      /* I - Client to read from */
          * Connection closed...
          */
 
+         cupsdLogMessage(CUPSD_LOG_DEBUG,
+                         "cupsdReadClient: %d Closing on EOF", con->http.fd);
           cupsdCloseClient(con);
          return;
        }
@@ -1087,13 +1105,16 @@ cupsdReadClient(cupsd_client_t *con)    /* I - Client to read from */
       * fields...
       */
 
-      if ((ptr = strchr(con->http.fields[HTTP_FIELD_ACCEPT_LANGUAGE], ',')) != NULL)
+      if ((ptr = strchr(con->http.fields[HTTP_FIELD_ACCEPT_LANGUAGE],
+                        ',')) != NULL)
         *ptr = '\0';
 
-      if ((ptr = strchr(con->http.fields[HTTP_FIELD_ACCEPT_LANGUAGE], ';')) != NULL)
+      if ((ptr = strchr(con->http.fields[HTTP_FIELD_ACCEPT_LANGUAGE],
+                        ';')) != NULL)
         *ptr = '\0';
 
-      if ((ptr = strstr(con->http.fields[HTTP_FIELD_CONTENT_TYPE], "charset=")) != NULL)
+      if ((ptr = strstr(con->http.fields[HTTP_FIELD_CONTENT_TYPE],
+                        "charset=")) != NULL)
       {
        /*
         * Combine language and charset, and trim any extra params in the
@@ -1117,8 +1138,8 @@ cupsdReadClient(cupsd_client_t *con)      /* I - Client to read from */
 
     cupsdAuthorize(con);
 
-    if (!strncasecmp(con->http.fields[HTTP_FIELD_CONNECTION], "Keep-Alive", 10) &&
-        KeepAlive)
+    if (!strncasecmp(con->http.fields[HTTP_FIELD_CONNECTION], "Keep-Alive",
+                    10) && KeepAlive)
       con->http.keep_alive = HTTP_KEEPALIVE_ON;
     else if (!strncasecmp(con->http.fields[HTTP_FIELD_CONNECTION], "close", 5))
       con->http.keep_alive = HTTP_KEEPALIVE_OFF;
@@ -1132,6 +1153,7 @@ cupsdReadClient(cupsd_client_t *con)      /* I - Client to read from */
 
       if (!cupsdSendError(con, HTTP_BAD_REQUEST, CUPSD_AUTH_NONE))
       {
+        cupsdLogMessage(CUPSD_LOG_ERROR, "Missing Host: field in request!");
        cupsdCloseClient(con);
        return;
       }
@@ -1143,7 +1165,7 @@ cupsdReadClient(cupsd_client_t *con)      /* I - Client to read from */
       * or IPv6 values in the Host: field.
       */
 
-      cupsdLogMessage(CUPSD_LOG_WARN,
+      cupsdLogMessage(CUPSD_LOG_ERROR,
                       "Request from \"%s\" using invalid Host: field \"%s\"",
                      con->http.hostname, con->http.fields[HTTP_FIELD_HOST]);
 
@@ -1307,7 +1329,8 @@ cupsdReadClient(cupsd_client_t *con)      /* I - Client to read from */
          * Send 417-expectation-failed header...
          */
 
-         if (!cupsdSendHeader(con, HTTP_EXPECTATION_FAILED, NULL, CUPSD_AUTH_NONE))
+         if (!cupsdSendHeader(con, HTTP_EXPECTATION_FAILED, NULL,
+                              CUPSD_AUTH_NONE))
          {
            cupsdCloseClient(con);
            return;
@@ -1837,7 +1860,8 @@ cupsdReadClient(cupsd_client_t *con)      /* I - Client to read from */
            else if ((filename = get_file(con, &filestats, buf,
                                          sizeof(buf))) == NULL)
            {
-             if (!cupsdSendHeader(con, HTTP_NOT_FOUND, "text/html", CUPSD_AUTH_NONE))
+             if (!cupsdSendHeader(con, HTTP_NOT_FOUND, "text/html",
+                                  CUPSD_AUTH_NONE))
              {
                cupsdCloseClient(con);
                return;
@@ -1922,6 +1946,16 @@ cupsdReadClient(cupsd_client_t *con)     /* I - Client to read from */
        {
           if ((bytes = httpRead2(HTTP(con), line, sizeof(line))) < 0)
          {
+           if (con->http.error && con->http.error != EPIPE)
+             cupsdLogMessage(CUPSD_LOG_DEBUG,
+                             "cupsdReadClient: %d PUT_RECV Closing for error "
+                             "%d (%s)", con->http.fd, con->http.error,
+                             strerror(con->http.error));
+           else
+             cupsdLogMessage(CUPSD_LOG_DEBUG,
+                             "cupsdReadClient: %d PUT_RECV Closing on EOF",
+                             con->http.fd);
+
            cupsdCloseClient(con);
            return;
          }
@@ -1999,7 +2033,7 @@ cupsdReadClient(cupsd_client_t *con)      /* I - Client to read from */
     case HTTP_POST_RECV :
         do
        {
-          if (con->request)
+          if (con->request && con->file < 0)
          {
           /*
            * Grab any request data from the connection...
@@ -2027,7 +2061,14 @@ cupsdReadClient(cupsd_client_t *con)     /* I - Client to read from */
              break;
             }
            else
+           {
+             cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdReadClient: %d %d.%d %s %d",
+                             con->http.fd, con->request->request.op.version[0],
+                             con->request->request.op.version[1],
+                             ippOpString(con->request->request.op.operation_id),
+                             con->request->request.op.request_id);
              con->bytes += ippLength(con->request);
+           }
          }
 
           if (con->file < 0 && con->http.state != HTTP_POST_SEND)
@@ -2036,7 +2077,8 @@ cupsdReadClient(cupsd_client_t *con)      /* I - Client to read from */
            * Create a file as needed for the request data...
            */
 
-            cupsdSetStringf(&con->filename, "%s/%08x", RequestRoot, request_id ++);
+            cupsdSetStringf(&con->filename, "%s/%08x", RequestRoot,
+                           request_id ++);
            con->file = open(con->filename, O_WRONLY | O_CREAT | O_TRUNC, 0640);
 
            if (con->file < 0)
@@ -2061,6 +2103,16 @@ cupsdReadClient(cupsd_client_t *con)     /* I - Client to read from */
          {
             if ((bytes = httpRead2(HTTP(con), line, sizeof(line))) < 0)
            {
+             if (con->http.error && con->http.error != EPIPE)
+               cupsdLogMessage(CUPSD_LOG_DEBUG,
+                               "cupsdReadClient: %d POST_SEND Closing for "
+                               "error %d (%s)", con->http.fd, con->http.error,
+                               strerror(con->http.error));
+             else
+               cupsdLogMessage(CUPSD_LOG_DEBUG,
+                               "cupsdReadClient: %d POST_SEND Closing on EOF",
+                               con->http.fd);
+
              cupsdCloseClient(con);
              return;
            }
@@ -2071,15 +2123,17 @@ cupsdReadClient(cupsd_client_t *con)    /* I - Client to read from */
               if (write(con->file, line, bytes) < bytes)
              {
                cupsdLogMessage(CUPSD_LOG_ERROR,
-                               "cupsdReadClient: Unable to write %d bytes to %s: %s",
-                               bytes, con->filename, strerror(errno));
+                               "cupsdReadClient: Unable to write %d bytes to "
+                               "%s: %s", bytes, con->filename,
+                               strerror(errno));
 
                close(con->file);
                con->file = -1;
                unlink(con->filename);
                cupsdClearString(&con->filename);
 
-               if (!cupsdSendError(con, HTTP_REQUEST_TOO_LARGE, CUPSD_AUTH_NONE))
+               if (!cupsdSendError(con, HTTP_REQUEST_TOO_LARGE,
+                                   CUPSD_AUTH_NONE))
                {
                  cupsdCloseClient(con);
                  return;
@@ -2090,6 +2144,9 @@ cupsdReadClient(cupsd_client_t *con)      /* I - Client to read from */
               return;
            else if (con->http.state != HTTP_POST_SEND)
            {
+             cupsdLogMessage(CUPSD_LOG_DEBUG,
+                             "cupsdReadClient: %d Closing on unknown HTTP "
+                             "state %d", con->http.fd, con->http.state);
              cupsdCloseClient(con);
              return;
            }
@@ -2170,7 +2227,12 @@ cupsdReadClient(cupsd_client_t *con)     /* I - Client to read from */
   if (con->http.state == HTTP_WAITING)
   {
     if (!con->http.keep_alive)
+    {
+      cupsdLogMessage(CUPSD_LOG_DEBUG,
+                     "cupsdReadClient: %d Closing because Keep-Alive disabled",
+                     con->http.fd);
       cupsdCloseClient(con);
+    }
     else
     {
       cupsArrayRemove(ActiveClients, con);
@@ -2507,7 +2569,7 @@ cupsdSendHeader(
                     SystemGroupAuthKey);
           else
 #else
-         strlcpy(auth_key, ", trc=\"y\"", auth_size));
+         strlcpy(auth_key, ", trc=\"y\"", auth_size);
 #endif /* HAVE_AUTHORIZATION_H */
          break;
        }
@@ -2669,6 +2731,9 @@ cupsdWriteClient(cupsd_client_t *con)     /* I - Client connection */
     * connection and we need to shut it down...
     */
 
+    cupsdLogMessage(CUPSD_LOG_DEBUG,
+                   "cupsdWriteClient: %d Closing on unknown HTTP state %d",
+                   con->http.fd, con->http.state);
     cupsdCloseClient(con);
     return;
   }
@@ -2818,6 +2883,10 @@ cupsdWriteClient(cupsd_client_t *con)    /* I - Client connection */
     {
       if (httpWrite2(HTTP(con), buf, bytes) < 0)
       {
+       cupsdLogMessage(CUPSD_LOG_DEBUG,
+                       "cupsdWriteClient: %d Closing for error %d (%s)",
+                       con->http.fd, con->http.error,
+                       strerror(con->http.error));
        cupsdCloseClient(con);
        return;
       }
@@ -2847,6 +2916,10 @@ cupsdWriteClient(cupsd_client_t *con)    /* I - Client connection */
       {
        if (httpWrite2(HTTP(con), "", 0) < 0)
        {
+         cupsdLogMessage(CUPSD_LOG_DEBUG,
+                         "cupsdWriteClient: %d Closing for error %d (%s)",
+                         con->http.fd, con->http.error,
+                         strerror(con->http.error));
          cupsdCloseClient(con);
          return;
        }
@@ -2893,9 +2966,17 @@ cupsdWriteClient(cupsd_client_t *con)    /* I - Client connection */
 
     if (!con->http.keep_alive)
     {
+      cupsdLogMessage(CUPSD_LOG_DEBUG,
+                     "cupsdWriteClient: %d Closing because Keep-Alive disabled",
+                     con->http.fd);
       cupsdCloseClient(con);
       return;
     }
+    else
+    {
+      cupsArrayRemove(ActiveClients, con);
+      cupsdSetBusyState();
+    }
   }
 
   con->http.activity = time(NULL);
@@ -3310,10 +3391,6 @@ get_cdsa_certificate(cupsd_client_t *con)        /* I - Client connection */
   ssl_options.ServerName = con->servername;
   ssl_options.ServerNameLen = strlen(con->servername);
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG,
-                  "get_cdsa_certificate: Looking for certs for \"%s\"...",
-                 con->servername);
-
   cupsdLogMessage(CUPSD_LOG_DEBUG,
                   "get_cdsa_certificate: Looking for certs for \"%s\"...",
                  con->servername);
@@ -4009,7 +4086,7 @@ make_certificate(cupsd_client_t *con)     /* I - Client connection */
     envp[envc++] = home;
     envp[envc]   = NULL;
 
-    if (!cupsdStartProcess(command, argv, envp, -1, -1, -1, -1, -1, 1, NULL, 0,
+    if (!cupsdStartProcess(command, argv, envp, -1, -1, -1, -1, -1, 1, NULL,
                            NULL, &pid))
     {
       unlink(seedfile);
index f807e9c109a8d6db1f10aaea236b69d45c6aae0c..86c7f8aff9a0e96609ffd6ed6c57526c74d93f5e 100644 (file)
@@ -85,8 +85,10 @@ typedef struct
 
 VAR int                        ListenBackLog   VALUE(SOMAXCONN),
                                        /* Max backlog of pending connections */
-                       LocalPort       VALUE(631);
+                       LocalPort       VALUE(631),
                                        /* Local port to use */
+                       RemotePort      VALUE(0);
+                                       /* Remote port to use */
 VAR http_encryption_t  LocalEncryption VALUE(HTTP_ENCRYPT_IF_REQUESTED);
                                        /* Local port encryption to use */
 VAR cups_array_t       *Listeners      VALUE(NULL);
index a020fa610ab0c48b3f6a8e4fbb8523b2897e218a..efc3a6b8440f1f8d6009d839b556deb8ea3aa3c7 100644 (file)
@@ -423,6 +423,7 @@ cupsdReadConfiguration(void)
   struct group *group;                 /* Default group */
   char         *old_serverroot,        /* Old ServerRoot */
                *old_requestroot;       /* Old RequestRoot */
+  int          old_remote_port;        /* Old RemotePort */
   const char   *tmpdir;                /* TMPDIR environment variable */
   struct stat  tmpinfo;                /* Temporary directory info */
   cupsd_policy_t *p;                   /* Policy */
@@ -471,7 +472,8 @@ cupsdReadConfiguration(void)
 
   cupsdDeleteAllListeners();
 
-  RemoteAccessEnabled = 0;
+  old_remote_port = RemotePort;
+  RemotePort      = 0;
 
  /*
   * String options...
@@ -708,13 +710,20 @@ cupsdReadConfiguration(void)
   RunUser = getuid();
 
   cupsdLogMessage(CUPSD_LOG_INFO, "Remote access is %s.",
-                  RemoteAccessEnabled ? "enabled" : "disabled");
+                  RemotePort ? "enabled" : "disabled");
 
  /*
   * See if the ServerName is an IP address...
   */
 
-  if (!ServerName)
+  if (ServerName)
+  {
+    if (!ServerAlias)
+      ServerAlias = cupsArrayNew(NULL, NULL);
+
+    cupsdLogMessage(CUPSD_LOG_DEBUG, "Added auto ServerAlias %s", ServerName);
+  }
+  else
   {
     if (gethostname(temp, sizeof(temp)))
     {
@@ -731,7 +740,7 @@ cupsdReadConfiguration(void)
     cupsdAddAlias(ServerAlias, temp);
     cupsdLogMessage(CUPSD_LOG_DEBUG, "Added auto ServerAlias %s", temp);
 
-    if (HostNameLookups || RemoteAccessEnabled)
+    if (HostNameLookups || RemotePort)
     {
       struct hostent   *host;          /* Host entry to get FQDN */
 
@@ -1269,6 +1278,7 @@ cupsdReadConfiguration(void)
   */
 
   if (NeedReload == RELOAD_ALL ||
+      old_remote_port != RemotePort ||
       !old_serverroot || !ServerRoot || strcmp(old_serverroot, ServerRoot) ||
       !old_requestroot || !RequestRoot || strcmp(old_requestroot, RequestRoot))
   {
@@ -2570,7 +2580,14 @@ read_configuration(cups_file_t *fp)      /* I - File to read from */
                         ntohs(lis->address.ipv4.sin_port));
 
         if (!httpAddrLocalhost(&(lis->address)))
-         RemoteAccessEnabled = 1;
+       {
+#ifdef AF_INET6
+         if (lis->address.addr.sa_family == AF_INET6)
+           RemotePort = ntohs(lis->address.ipv6.sin6_port);
+         else
+#endif /* AF_INET6 */
+         RemotePort = ntohs(lis->address.ipv4.sin_port);
+       }
       }
 
      /*
index d91bca359c7f2b259cade45e460ae26ea66e07dd..582a152c2d62d35a8fe978a07789a8eafd985266 100644 (file)
@@ -114,9 +114,7 @@ VAR char            *ConfigurationFile      VALUE(NULL),
                                        /* Root directory for documents */
 VAR cups_array_t       *ServerAlias            VALUE(NULL);
                                        /* Alias names for server */
-VAR int                        RemoteAccessEnabled     VALUE(0),
-                                       /* Are we listening on non-local addresses? */
-                       ServerNameIsIP          VALUE(0);
+VAR int                        ServerNameIsIP          VALUE(0);
                                        /* Is the ServerName an IP address? */
 VAR int                        NumSystemGroups         VALUE(0);
                                        /* Number of system group names */
index c9bad58ec9f08ffd83a2162953eeba1e89e0d77b..11be5585e506a4d120b8db0620c319c23281f175 100644 (file)
@@ -250,7 +250,8 @@ cupsdDeregisterPrinter(
                  removeit);
 
   if (!Browsing || !p->shared ||
-      (p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT)))
+      (p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT |
+                  CUPS_PRINTER_SCANNER)))
     return;
 
  /*
@@ -680,7 +681,8 @@ cupsdRegisterPrinter(cupsd_printer_t *p)/* I - Printer */
                   p->name);
 
   if (!Browsing || !BrowseLocalProtocols ||
-      (p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT)))
+      (p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT |
+                  CUPS_PRINTER_SCANNER)))
     return;
 
 #ifdef HAVE_LIBSLP
@@ -888,7 +890,8 @@ cupsdSendBrowseList(void)
     for (count = 0, p = (cupsd_printer_t *)cupsArrayFirst(Printers);
          count < max_count && p != NULL;
         p = (cupsd_printer_t *)cupsArrayNext(Printers))
-      if (!(p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT)) &&
+      if (!(p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT |
+                       CUPS_PRINTER_SCANNER)) &&
           p->shared && p->browse_time < ut)
         count ++;
 
@@ -914,7 +917,8 @@ cupsdSendBrowseList(void)
 
       if (!p)
         break;
-      else if ((p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT)) ||
+      else if ((p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT |
+                           CUPS_PRINTER_SCANNER)) ||
                !p->shared)
         continue;
       else if (p->browse_time < ut)
@@ -1669,7 +1673,8 @@ cupsdStartBrowsing(void)
   for (p = (cupsd_printer_t *)cupsArrayFirst(Printers);
        p;
        p = (cupsd_printer_t *)cupsArrayNext(Printers))
-    if (!(p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT)))
+    if (!(p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT |
+                     CUPS_PRINTER_SCANNER)))
       cupsdRegisterPrinter(p);
 }
 
@@ -1797,7 +1802,8 @@ cupsdStopBrowsing(void)
   for (p = (cupsd_printer_t *)cupsArrayFirst(Printers);
        p;
        p = (cupsd_printer_t *)cupsArrayNext(Printers))
-    if (!(p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT)))
+    if (!(p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT |
+                     CUPS_PRINTER_SCANNER)))
       cupsdDeregisterPrinter(p, 1);
 
  /*
@@ -1902,9 +1908,8 @@ cupsdUpdateDNSSDName(void)
 #ifdef HAVE_COREFOUNDATION_H
   SCDynamicStoreRef sc;                        /* Context for dynamic store */
   CFDictionaryRef btmm;                        /* Back-to-My-Mac domains */
-  CFStringRef  nameRef;                /* Computer name CFString */
+  CFStringRef  nameRef;                /* Host name CFString */
   char         nameBuffer[1024];       /* C-string buffer */
-  CFStringEncoding nameEncoding;       /* Computer name encoding */
 #endif /* HAVE_COREFOUNDATION_H */
 
 
@@ -1932,14 +1937,13 @@ cupsdUpdateDNSSDName(void)
 
     cupsdClearString(&DNSSDName);
 
-    if ((nameRef = SCDynamicStoreCopyComputerName(sc,
-                                                 &nameEncoding)) != NULL)
+    if ((nameRef = SCDynamicStoreCopyLocalHostName(sc)) != NULL)
     {
       if (CFStringGetCString(nameRef, nameBuffer, sizeof(nameBuffer),
                             kCFStringEncodingUTF8))
       {
         cupsdLogMessage(CUPSD_LOG_DEBUG,
-                       "Dynamic store computer name is \"%s\".", nameBuffer);
+                       "Dynamic store host name is \"%s\".", nameBuffer);
        cupsdSetString(&DNSSDName, nameBuffer);
       }
 
@@ -1953,7 +1957,7 @@ cupsdUpdateDNSSDName(void)
       */
 
       cupsdLogMessage(CUPSD_LOG_DEBUG,
-                      "Using ServerName \"%s\" as computer name.", ServerName);
+                      "Using ServerName \"%s\" as host name.", ServerName);
       cupsdSetString(&DNSSDName, ServerName);
     }
 
index 536430140e367bfd3aeb7aece2f375c41c17ae4f..637d760b4fdf7120c6b68a88a485cbad2cfe0d7c 100644 (file)
@@ -1367,9 +1367,9 @@ add_job(cupsd_client_t  *con,             /* I - Client connection */
     send_http_error(con, status, printer);
     return (NULL);
   }
-  else if (printer->num_auth_info_required > 0 &&
-           strcmp(printer->auth_info_required[0], "none") &&
-           !con->username[0] && !auth_info)
+  else if (printer->num_auth_info_required == 1 &&
+           !strcmp(printer->auth_info_required[0], "negotiate") &&
+           !con->username[0])
   {
     send_http_error(con, HTTP_UNAUTHORIZED, printer);
     return (NULL);
@@ -5496,6 +5496,25 @@ copy_printer_attrs(
     ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_NAME,
                 "printer-error-policy", NULL, printer->error_policy);
 
+  if (!ra || cupsArrayFind(ra, "printer-error-policy-supported"))
+  {
+    static const char * const errors[] =/* printer-error-policy-supported values */
+                 {
+                   "abort-job",
+                   "retry-current-job",
+                   "retry-job",
+                   "stop-printer"
+                 };
+
+    if (printer->type & (CUPS_PRINTER_IMPLICIT | CUPS_PRINTER_CLASS))
+      ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_NAME | IPP_TAG_COPY,
+                   "printer-error-policy-supported", NULL, "retry-current-job");
+    else
+      ippAddStrings(con->response, IPP_TAG_PRINTER, IPP_TAG_NAME | IPP_TAG_COPY,
+                   "printer-error-policy-supported",
+                   sizeof(errors) / sizeof(errors[0]), NULL, errors);
+  }
+
   if (!ra || cupsArrayFind(ra, "printer-is-accepting-jobs"))
     ippAddBoolean(con->response, IPP_TAG_PRINTER, "printer-is-accepting-jobs",
                   printer->accepting);
@@ -9455,6 +9474,7 @@ restart_job(cupsd_client_t  *con, /* I - Client connection */
     */
 
     cupsdRestartJob(job);
+    cupsdCheckJobs();
   }
 
   cupsdLogJob(job, CUPSD_LOG_INFO, "Restarted by \"%s\".", username);
@@ -10820,10 +10840,11 @@ set_printer_defaults(
       if (attr->value_tag != IPP_TAG_NAME && attr->value_tag != IPP_TAG_KEYWORD)
         continue;
 
-      if (strcmp(attr->values[0].string.text, "abort-job") &&
-          strcmp(attr->values[0].string.text, "retry-current-job") &&
-          strcmp(attr->values[0].string.text, "retry-job") &&
-          strcmp(attr->values[0].string.text, "stop-printer"))
+      if (strcmp(attr->values[0].string.text, "retry-current-job") &&
+          ((printer->type & (CUPS_PRINTER_IMPLICIT | CUPS_PRINTER_CLASS)) ||
+          (strcmp(attr->values[0].string.text, "abort-job") &&
+           strcmp(attr->values[0].string.text, "retry-job") &&
+           strcmp(attr->values[0].string.text, "stop-printer"))))
       {
        send_ipp_status(con, IPP_NOT_POSSIBLE,
                        _("Unknown printer-error-policy \"%s\"."),
index c0aa5b0d610c2aece718d9434608ff69f0d1d83a..19e0af1aa043bcb524b2a083c70a251a70bde5b1 100644 (file)
@@ -458,7 +458,7 @@ cupsdContinueJob(cupsd_job_t *job)  /* I - Job */
   ipp_attribute_t      *attr;          /* Current attribute */
   const char           *ptr,           /* Pointer into value */
                        *abort_message; /* Abort message */
-  ipp_jstate_t         abort_state = IPP_JOB_ABORTED;
+  ipp_jstate_t         abort_state = IPP_JOB_STOPPED;
                                        /* New job state on abort */
   struct stat          backinfo;       /* Backend file information */
   int                  backroot;       /* Run backend as root? */
@@ -545,6 +545,8 @@ cupsdContinueJob(cupsd_job_t *job)  /* I - Job */
                  job->current_file);
 
       abort_message = "Aborting job because it cannot be printed.";
+      abort_state   = IPP_JOB_ABORTED;
+
       goto abort_job;
     }
 
@@ -649,7 +651,6 @@ cupsdContinueJob(cupsd_job_t *job)  /* I - Job */
 
       cupsArrayDelete(filters);
 
-      abort_state = IPP_JOB_STOPPED;
       abort_message = "Stopping job because the scheduler ran out of memory.";
 
       goto abort_job;
@@ -681,7 +682,6 @@ cupsdContinueJob(cupsd_job_t *job)  /* I - Job */
       cupsdLogJob(job, CUPSD_LOG_DEBUG,
                  "Unable to add port monitor - %s", strerror(errno));
 
-      abort_state   = IPP_JOB_STOPPED;
       abort_message = "Stopping job because the scheduler ran out of memory.";
 
       goto abort_job;
@@ -699,6 +699,8 @@ cupsdContinueJob(cupsd_job_t *job)  /* I - Job */
                cupsArrayCount(filters), MAX_FILTERS);
 
     abort_message = "Aborting job because it needs too many filters to print.";
+    abort_state   = IPP_JOB_ABORTED;
+
     goto abort_job;
   }
 
@@ -739,7 +741,6 @@ cupsdContinueJob(cupsd_job_t *job)  /* I - Job */
   if ((options = get_options(job, banner_page, copies, sizeof(copies), title,
                              sizeof(title))) == NULL)
   {
-    abort_state   = IPP_JOB_STOPPED;
     abort_message = "Stopping job because the scheduler ran out of memory.";
 
     goto abort_job;
@@ -773,7 +774,6 @@ cupsdContinueJob(cupsd_job_t *job)  /* I - Job */
     cupsdLogMessage(CUPSD_LOG_DEBUG, "Unable to allocate argument array - %s",
                     strerror(errno));
 
-    abort_state   = IPP_JOB_STOPPED;
     abort_message = "Stopping job because the scheduler ran out of memory.";
 
     goto abort_job;
@@ -1048,7 +1048,7 @@ cupsdContinueJob(cupsd_job_t *job)        /* I - Job */
       cupsdLogJob(job, CUPSD_LOG_ERROR, "Unable to start filter \"%s\" - %s.",
                  filter->filter, strerror(errno));
 
-      abort_message = "Stopped job because the scheduler could not execute a "
+      abort_message = "Stopping job because the scheduler could not execute a "
                      "filter.";
 
       goto abort_job;
@@ -2549,8 +2549,8 @@ finalize_job(cupsd_job_t *job)            /* I - Job */
     default :
     case IPP_JOB_PROCESSING :
     case IPP_JOB_COMPLETED :
-       job_state     = IPP_JOB_COMPLETED;
-       message       = "Job completed.";
+       job_state = IPP_JOB_COMPLETED;
+       message   = "Job completed.";
         break;
 
     case IPP_JOB_STOPPED :
@@ -2684,14 +2684,12 @@ finalize_job(cupsd_job_t *job)          /* I - Job */
            message   = "Job aborted due to backend errors; please consult "
                        "the error_log file for details.";
          }
-         else
+         else if (job->state_value == IPP_JOB_PROCESSING)
           {
+            job_state     = IPP_JOB_PENDING;
            printer_state = IPP_PRINTER_STOPPED;
            message       = "Printer stopped due to backend errors; please "
                            "consult the error_log file for details.";
-
-            if (job_state == IPP_JOB_COMPLETED)
-             job_state = IPP_JOB_PENDING;
          }
           break;
 
index 92a4b26acf6320874e80b9973c64bbe0e5bba5a3..5d47056f84745c9b22ef5daad55ff4a68cfda138 100644 (file)
@@ -29,7 +29,7 @@ typedef enum cupsd_jobaction_e                /**** Actions for state changes ****/
  * Job request structure...
  */
 
-typedef struct cupsd_job_s
+struct cupsd_job_s
 {
   int                  id,             /* Job ID */
                        priority,       /* Job priority */
@@ -82,7 +82,7 @@ typedef struct cupsd_job_s
   krb5_ccache          ccache;         /* Kerberos credential cache */
   char                 *ccname;        /* KRB5CCNAME environment variable */
 #endif /* HAVE_GSSAPI */
-} cupsd_job_t;
+};
 
 
 /*
index f90e74545c3e50684ce0cf2b11e5f7e9f905f6a4..a38e14e6177dbf988010129c3dd636ad9cd6bef7 100644 (file)
@@ -1718,14 +1718,20 @@ process_children(void)
          else
            job->status = -status;      /* Backend failed */
 
-         if (job->status_level > CUPSD_LOG_ERROR)
+         if (job->state_value == IPP_JOB_PROCESSING &&
+             job->status_level > CUPSD_LOG_ERROR)
          {
+           char        message[1024];  /* New printer-state-message */
+
+
            job->status_level = CUPSD_LOG_ERROR;
 
+           snprintf(message, sizeof(message), "%s failed", name);
+
             if (job->printer)
            {
-             snprintf(job->printer->state_message,
-                      sizeof(job->printer->state_message), "%s failed", name);
+             strlcpy(job->printer->state_message, message,
+                      sizeof(job->printer->state_message));
              cupsdAddPrinterHistory(job->printer);
            }
 
@@ -1745,7 +1751,7 @@ process_children(void)
 
            if (job->printer_message)
              cupsdSetString(&(job->printer_message->values[0].string.text),
-                            job->printer->state_message);
+                            message);
          }
        }
 
index 22634d3433cbae82b77ba276288e13bf2f792d07..95c6a9cab35ed5d1c203ae09df57303423f2a138 100644 (file)
@@ -155,7 +155,7 @@ cupsdNetIFUpdate(void)
     * Try looking up the hostname for the address as needed...
     */
 
-    if (HostNameLookups || RemoteAccessEnabled)
+    if (HostNameLookups || RemotePort)
       httpAddrLookup((http_addr_t *)(addr->ifa_addr), hostname,
                      sizeof(hostname));
     else
index 6b5a70533892b9a561e7aa0542a0b22cc36078bf..ba1be9b03f72cd10ff6f924ae4a93c22dcb3cfa4 100644 (file)
@@ -118,7 +118,8 @@ cupsdAddPrinter(const char *name)   /* I - Name of printer */
   cupsdSetString(&p->info, name);
   cupsdSetString(&p->hostname, ServerName);
 
-  cupsdSetStringf(&p->uri, "ipp://%s:%d/printers/%s", ServerName, LocalPort, name);
+  cupsdSetStringf(&p->uri, "ipp://%s:%d/printers/%s", ServerName, RemotePort,
+                  name);
   cupsdSetDeviceURI(p, "file:///dev/null");
 
   p->state      = IPP_PRINTER_STOPPED;
@@ -370,13 +371,6 @@ cupsdCreateCommonData(void)
                  "separate-documents-uncollated-copies",
                  "separate-documents-collated-copies"
                };
-  static const char * const errors[] = /* printer-error-policy-supported values */
-               {
-                 "abort-job",
-                 "retry-current-job",
-                 "retry-job",
-                 "stop-printer"
-               };
   static const char * const notify_attrs[] =
                {                       /* notify-attributes-supported values */
                  "printer-state-change-time",
@@ -621,11 +615,6 @@ cupsdCreateCommonData(void)
   ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD | IPP_TAG_COPY,
                "pdl-override-supported", NULL, "not-attempted");
 
-  /* printer-error-policy-supported */
-  ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_NAME | IPP_TAG_COPY,
-                "printer-error-policy-supported",
-               sizeof(errors) / sizeof(errors[0]), NULL, errors);
-
   /* printer-op-policy-supported */
   attr = ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_NAME | IPP_TAG_COPY,
                        "printer-op-policy-supported", cupsArrayCount(Policies),
@@ -2923,7 +2912,7 @@ cupsdStopPrinter(cupsd_printer_t *p,      /* I - Printer to stop */
   * See if we have a job printing on this printer...
   */
 
-  if (p->job)
+  if (p->job && p->job->state_value == IPP_JOB_PROCESSING)
     cupsdSetJobState(p->job, IPP_JOB_PENDING, CUPSD_JOB_DEFAULT,
                      "Job stopped due to printer being paused.");
 }
index 127f9aa41b532a9e757b4dd652da0e38191b2df5..d601ccd144a66ea0f73361c0c1434c50ba2002d8 100644 (file)
@@ -34,6 +34,8 @@ typedef struct
  * Printer/class information structure...
  */
 
+typedef struct cupsd_job_s cupsd_job_t;
+
 typedef struct cupsd_printer_s
 {
   char         *uri,                   /* Printer URI */
@@ -67,7 +69,7 @@ typedef struct cupsd_printer_s
   mime_type_t  *filetype,              /* Pseudo-filetype for printer */
                *prefiltertype;         /* Pseudo-filetype for pre-filters */
   cups_array_t *filetypes;             /* Supported file types */
-  void         *job;                   /* Current job in queue */
+  cupsd_job_t  *job;                   /* Current job in queue */
   ipp_t                *attrs,                 /* Attributes supported by this printer */
                *ppd_attrs;             /* Attributes based on the PPD */
   int          num_printers,           /* Number of printers in class */
index 6218b4d6fd0b0eced67853e2b2308ecf33db92db..5ce8fedf706252112c84b0e90590a713bcba69ea 100644 (file)
@@ -60,6 +60,30 @@ static int   checkrules(const char *filename, _mime_filebuf_t *fb,
 static int     patmatch(const char *s, const char *pat);
 
 
+/*
+ * Local globals...
+ */
+
+#ifdef DEBUG
+static const char * const debug_ops[] =
+               {                       /* Test names... */
+                 "NOP",                /* No operation */
+                 "AND",                /* Logical AND of all children */
+                 "OR",                 /* Logical OR of all children */
+                 "MATCH",              /* Filename match */
+                 "ASCII",              /* ASCII characters in range */
+                 "PRINTABLE",          /* Printable characters (32-255) */
+                 "STRING",             /* String matches */
+                 "CHAR",               /* Character/byte matches */
+                 "SHORT",              /* Short/16-bit word matches */
+                 "INT",                /* Integer/32-bit word matches */
+                 "LOCALE",             /* Current locale matches string */
+                 "CONTAINS",           /* File contains a string */
+                 "ISTRING"             /* Case-insensitive string matches */
+               };
+#endif /* DEBUG */
+
+
 /*
  * 'mimeAddType()' - Add a MIME type to a database.
  */
@@ -157,7 +181,7 @@ mimeAddTypeRule(mime_type_t *mt,    /* I - Type to add to */
   logic  = MIME_MAGIC_NOP;
   invert = 0;
 
-  DEBUG_printf(("mimeAddTypeRule: %s/%s: %s\n", mt->super, mt->type, rule));
+  DEBUG_printf(("mimeAddTypeRule: %s/%s: %s", mt->super, mt->type, rule));
 
   while (*rule != '\0')
   {
@@ -207,11 +231,11 @@ mimeAddTypeRule(mime_type_t *mt,  /* I - Type to add to */
         current->prev   = NULL;
        current->parent = temp;
 
-        DEBUG_printf(("mimeAddTypeRule: Creating new AND group %p...\n", temp));
+        DEBUG_printf(("mimeAddTypeRule: Creating new AND group %p...", temp));
       }
-      else
+      else if (current->parent)
       {
-        DEBUG_printf(("mimeAddTypeRule: Setting group %p op to AND...\n",
+        DEBUG_printf(("mimeAddTypeRule: Setting group %p op to AND...",
                      current->parent));
         current->parent->op = MIME_MAGIC_AND;
       }
@@ -239,7 +263,7 @@ mimeAddTypeRule(mime_type_t *mt,    /* I - Type to add to */
            return (-1);
 
           DEBUG_printf(("mimeAddTypeRule: Creating new AND group %p inside OR "
-                       "group\n", temp));
+                       "group", temp));
 
           while (current->prev != NULL)
          {
@@ -444,7 +468,7 @@ mimeAddTypeRule(mime_type_t *mt,    /* I - Type to add to */
        */
 
         DEBUG_printf(("mimeAddTypeRule: Making new OR group %p for "
-                     "parenthesis...\n", temp));
+                     "parenthesis...", temp));
 
         temp->op = MIME_MAGIC_OR;
 
@@ -452,13 +476,16 @@ mimeAddTypeRule(mime_type_t *mt,  /* I - Type to add to */
          return (-1);
 
        temp->child->parent = temp;
+       temp->child->invert = temp->invert;
+       temp->invert        = 0;
 
        temp  = temp->child;
         logic = MIME_MAGIC_OR;
       }
 
-      DEBUG_printf(("mimeAddTypeRule: adding %p: %s, op=%d, logic=%d, "
-                    "invert=%d\n", temp, name, op, logic, invert));
+      DEBUG_printf(("mimeAddTypeRule: adding %p: %s, op=MIME_MAGIC_%s(%d), "
+                   "logic=MIME_MAGIC_%s, invert=%d", temp, name, debug_ops[op],
+                   op, debug_ops[logic], invert));
 
      /*
       * Fill in data for the rule...
@@ -546,7 +573,7 @@ mimeFileType(mime_t     *mime,              /* I - MIME database */
 
 
   DEBUG_printf(("mimeFileType(mime=%p, pathname=\"%s\", filename=\"%s\", "
-                "compression=%p)\n", mime, pathname, filename, compression));
+                "compression=%p)", mime, pathname, filename, compression));
 
  /*
   * Range check input parameters...
@@ -671,27 +698,9 @@ checkrules(const char      *filename,      /* I - Filename */
                intv;                   /* Integer value */
   short                shortv;                 /* Short value */
   unsigned char        *bufptr;                /* Pointer into buffer */
-#ifdef DEBUG
-  const char   * const debug_tests[] = /* Test names... */
-               {
-                 "NOP",                /* No operation */
-                 "AND",                /* Logical AND of all children */
-                 "OR",                 /* Logical OR of all children */
-                 "MATCH",              /* Filename match */
-                 "ASCII",              /* ASCII characters in range */
-                 "PRINTABLE",          /* Printable characters (32-255) */
-                 "STRING",             /* String matches */
-                 "CHAR",               /* Character/byte matches */
-                 "SHORT",              /* Short/16-bit word matches */
-                 "INT",                /* Integer/32-bit word matches */
-                 "LOCALE"              /* Current locale matches string */
-                 "CONTAINS"            /* File contains a string */
-                 "ISTRING"             /* Case-insensitive string matches */
-               };
-#endif /* DEBUG */
 
 
-  DEBUG_printf(("checkrules(filename=\"%s\", fb=%p, rules=%p)\n", filename,
+  DEBUG_printf(("checkrules(filename=\"%s\", fb=%p, rules=%p)", filename,
                 fb, rules));
 
   if (rules == NULL)
@@ -803,7 +812,7 @@ checkrules(const char      *filename,       /* I - Filename */
          break;
 
       case MIME_MAGIC_STRING :
-          DEBUG_printf(("checkrules: string(%d, \"%s\")\n", rules->offset,
+          DEBUG_printf(("checkrules: string(%d, \"%s\")", rules->offset,
                        rules->value.stringv));
 
          /*
@@ -823,7 +832,7 @@ checkrules(const char      *filename,       /* I - Filename */
            fb->offset = rules->offset;
 
             DEBUG_printf(("checkrules: loaded %d byte fb->buffer at %d, starts "
-                         "with \"%c%c%c%c\"...\n",
+                         "with \"%c%c%c%c\"...",
                          fb->length, fb->offset, fb->buffer[0], fb->buffer[1],
                          fb->buffer[2], fb->buffer[3]));
          }
@@ -838,7 +847,7 @@ checkrules(const char      *filename,       /* I - Filename */
          else
             result = (memcmp(fb->buffer + rules->offset - fb->offset,
                             rules->value.stringv, rules->length) == 0);
-          DEBUG_printf(("checkrules: result=%d\n", result));
+          DEBUG_printf(("checkrules: result=%d", result));
          break;
 
       case MIME_MAGIC_ISTRING :
@@ -1039,8 +1048,8 @@ checkrules(const char      *filename,     /* I - Filename */
     * the the rule set is false...
     */
 
-    DEBUG_printf(("checkrules: result of test %p (MIME_MAGIC_%s) is %d\n",
-                  rules, debug_tests[rules->op], result));
+    DEBUG_printf(("checkrules: result of test %p (MIME_MAGIC_%s) is %d",
+                  rules, debug_ops[rules->op], result));
 
     if ((result && logic == MIME_MAGIC_OR) ||
         (!result && logic == MIME_MAGIC_AND))
index 67cb557e15da5fd2efd5bc95468eae914acd4dd0..0df674a0ffe2f6dc3177df965a20384f8e0c35fc 100644 (file)
@@ -49,7 +49,7 @@ unittests:
 
 clean:
        $(RM) $(OBJS) $(TARGETS)
-       $(RM) accept cupsdisable cupsenable cupsreject disable enable reject
+       $(RM) accept cupsdisable cupsenable cupsreject reject
 
 
 #
@@ -102,10 +102,6 @@ install-exec:
        $(INSTALL_BIN) cancel $(BINDIR)
        $(INSTALL_BIN) cupstestdsc $(BINDIR)
        $(INSTALL_BIN) cupstestppd $(BINDIR)
-       $(RM) $(BINDIR)/disable
-       $(LN) cupsaccept $(BINDIR)/disable
-       $(RM) $(BINDIR)/enable
-       $(LN) cupsaccept $(BINDIR)/enable
        $(INSTALL_BIN) lp $(BINDIR)
        $(INSTALL_BIN) lpoptions $(BINDIR)
        $(INSTALL_BIN) lpstat $(BINDIR)
@@ -140,8 +136,6 @@ uninstall:
        $(RM) $(BINDIR)/cancel
        $(RM) $(BINDIR)/cupstestdsc
        $(RM) $(BINDIR)/cupstestppd
-       $(RM) $(BINDIR)/disable
-       $(RM) $(BINDIR)/enable
        $(RM) $(BINDIR)/lp
        $(RM) $(BINDIR)/lpoptions
        $(RM) $(BINDIR)/lppasswd
@@ -177,7 +171,7 @@ cancel:     cancel.o ../cups/$(LIBCUPS)
 cupsaccept:    cupsaccept.o ../cups/$(LIBCUPS)
        echo Linking $@...
        $(CC) $(LDFLAGS) -o cupsaccept cupsaccept.o $(LIBS)
-       for file in accept cupsenable cupsdisable cupsreject disable enable reject; do \
+       for file in accept cupsenable cupsdisable cupsreject reject; do \
                $(RM) $$file; \
                $(LN) cupsaccept $$file; \
        done
index 9e27ba1fdf71d49bf86f92aed0e503d184eda6b4..c0199a61ada85c25958475d09dc5de81aa092e96 100755 (executable)
@@ -415,6 +415,9 @@ fi
 export LD_LIBRARY_PATH
 
 LD_PRELOAD="$root/cups/libcups.so.2:$root/filter/libcupsimage.so.2:$root/cgi-bin/libcupscgi.so.1:$root/scheduler/libcupsmime.so.1:$root/driver/libcupsdriver.so.1:$root/ppdc/libcupsppdc.so.1"
+if test `uname` = SunOS -a -r /usr/lib/libCrun.so.1; then
+       LD_PRELOAD="/usr/lib/libCrun.so.1:$LD_PRELOAD"
+fi
 export LD_PRELOAD
 
 if test "x$DYLD_LIBRARY_PATH" = x; then
index 46c87877bcc5fb8298c076fd710674be9d578a69..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,72 +0,0 @@
-#!/bin/sh
-#
-# "$Id$"
-#
-# Script to make Xcode documentation sets.
-#
-
-docversion="1.4.`svnversion . | sed -e '1,$s/[a-zA-Z]//g'`"
-docset=""
-sources=""
-header=""
-intro=""
-title=""
-
-while test $# -gt 0; do
-       arg="$1"
-       shift
-
-       case "$arg" in
-               --docset)
-                       docset="$1"
-                       shift
-                       ;;
-               --header)
-                       header="$1"
-                       shift
-                       ;;
-               --intro)
-                       intro="$1"
-                       shift
-                       ;;
-               --title)
-                       title="$1"
-                       shift
-                       ;;
-               *)
-                       sources="$sources $arg"
-                       ;;
-       esac
-done
-
-echo "<h1>$title</h1>" >"$header.ds"
-sed -e '1,$s/<a href='"'"'/<a href='"'"'http:\/\/www.cups.org\/documentation.php\//g' < "$header" >>"$header.ds"
-sed -e '1,$s/\/images\///g' -e '1,$s/<a href='"'"'/<a href='"'"'http:\/\/www.cups.org\/documentation.php\//g'  <"$intro" >"$intro.tmp"
-sed -e '1,$s/http:\/\/www.cups.org\/documentation\.php\/#/#/g' <"$intro.tmp" >"$intro.ds"
-
-mxmldoc --docset "$docset" --docversion "$docversion" \
-       --feedname cups.org --feedurl http://www.cups.org/docsets.atom \
-       --title "$title" --css ../doc/cups-printable.css \
-       --header "$header.ds" --intro "$intro.ds" $sources || exit 1
-rm -f "$header.ds" "$intro.ds" "$intro.tmp"
-
-if test ! -d ../docsets; then
-       mkdir ../docsets
-fi
-
-for image in `grep /images "$intro" | sed -e '1,$s/^.*\/images\///' -e '1,$s/\.png.*$/.png/'`; do
-       cp ../doc/images/$image "$docset/Contents/Resources/Documentation"
-done
-
-xar="`basename \"$docset\" .docset`.xar"
-
-/Developer/usr/bin/docsetutil package --output "../docsets/$xar" \
-       --atom ../docsets/docsets.atom \
-       --download-url "http://www.cups.org/docsets/$xar" "$docset" || exit 1
-
-rm -rf "$docset"
-
-
-#
-# End of "$Id$".
-#