]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Merge changes from CUPS 1.4svn-r8394.
authormsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>
Wed, 25 Feb 2009 23:37:25 +0000 (23:37 +0000)
committermsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>
Wed, 25 Feb 2009 23:37:25 +0000 (23:37 +0000)
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current@1253 a1ca3aef-8c08-0410-bb20-df032aa958be

119 files changed:
CHANGES-1.3.txt
CHANGES.txt
backend/serial.c
backend/testbackend.c
cgi-bin/ipp-var.c
cgi-bin/var.c
conf/cupsd.conf.in
config-scripts/cups-common.m4
config.h.in
cups/Dependencies
cups/adminutil.c
cups/cups.h
cups/file-private.h [new file with mode: 0644]
cups/file.c
cups/file.h
cups/localize.c
cups/request.c
cups/sidechannel.c
cups/transcode.c
cups/util.c
doc/Makefile
doc/help/spec-ipp.html
doc/help/spec-ppd.html
doc/pl/index.html.in [new file with mode: 0644]
locale/cups_ja.po
locale/cups_ko.po
packaging/cups.list.in
packaging/cups.spec.in
scheduler/Dependencies
scheduler/cert.c
scheduler/client.c
scheduler/cups-deviced.c
scheduler/cupsd.h
scheduler/dirsvc.c
scheduler/ipp.c
scheduler/job.c
scheduler/job.h
scheduler/main.c
scheduler/printers.c
scheduler/process.c
scheduler/quotas.c
scheduler/select.c
scheduler/statbuf.c
scheduler/subscriptions.c
scheduler/util.h
templates/pl/add-class.tmpl [new file with mode: 0644]
templates/pl/add-printer.tmpl [new file with mode: 0644]
templates/pl/add-rss-subscription.tmpl [new file with mode: 0644]
templates/pl/admin.tmpl [new file with mode: 0644]
templates/pl/choose-device.tmpl [new file with mode: 0644]
templates/pl/choose-make.tmpl [new file with mode: 0644]
templates/pl/choose-model.tmpl [new file with mode: 0644]
templates/pl/choose-serial.tmpl [new file with mode: 0644]
templates/pl/choose-uri.tmpl [new file with mode: 0644]
templates/pl/class-added.tmpl [new file with mode: 0644]
templates/pl/class-confirm.tmpl [new file with mode: 0644]
templates/pl/class-deleted.tmpl [new file with mode: 0644]
templates/pl/class-jobs-header.tmpl [new file with mode: 0644]
templates/pl/class-modified.tmpl [new file with mode: 0644]
templates/pl/class.tmpl [new file with mode: 0644]
templates/pl/classes-header.tmpl [new file with mode: 0644]
templates/pl/classes.tmpl [new file with mode: 0644]
templates/pl/command.tmpl [new file with mode: 0644]
templates/pl/edit-config.tmpl [new file with mode: 0644]
templates/pl/error-op.tmpl [new file with mode: 0644]
templates/pl/error.tmpl [new file with mode: 0644]
templates/pl/header.tmpl.in [new file with mode: 0644]
templates/pl/help-header.tmpl [new file with mode: 0644]
templates/pl/help-printable.tmpl [new file with mode: 0644]
templates/pl/help-trailer.tmpl [new file with mode: 0644]
templates/pl/job-cancel.tmpl [new file with mode: 0644]
templates/pl/job-hold.tmpl [new file with mode: 0644]
templates/pl/job-move.tmpl [new file with mode: 0644]
templates/pl/job-moved.tmpl [new file with mode: 0644]
templates/pl/job-release.tmpl [new file with mode: 0644]
templates/pl/job-restart.tmpl [new file with mode: 0644]
templates/pl/jobs-header.tmpl [new file with mode: 0644]
templates/pl/jobs.tmpl [new file with mode: 0644]
templates/pl/list-available-printers.tmpl [new file with mode: 0644]
templates/pl/modify-class.tmpl [new file with mode: 0644]
templates/pl/modify-printer.tmpl [new file with mode: 0644]
templates/pl/norestart.tmpl [new file with mode: 0644]
templates/pl/option-boolean.tmpl [new file with mode: 0644]
templates/pl/option-conflict.tmpl [new file with mode: 0644]
templates/pl/option-header.tmpl [new file with mode: 0644]
templates/pl/option-pickmany.tmpl [new file with mode: 0644]
templates/pl/option-pickone.tmpl [new file with mode: 0644]
templates/pl/option-trailer.tmpl [new file with mode: 0644]
templates/pl/pager.tmpl [new file with mode: 0644]
templates/pl/printer-accept.tmpl [new file with mode: 0644]
templates/pl/printer-added.tmpl [new file with mode: 0644]
templates/pl/printer-configured.tmpl [new file with mode: 0644]
templates/pl/printer-confirm.tmpl [new file with mode: 0644]
templates/pl/printer-default.tmpl [new file with mode: 0644]
templates/pl/printer-deleted.tmpl [new file with mode: 0644]
templates/pl/printer-jobs-header.tmpl [new file with mode: 0644]
templates/pl/printer-modified.tmpl [new file with mode: 0644]
templates/pl/printer-purge.tmpl [new file with mode: 0644]
templates/pl/printer-reject.tmpl [new file with mode: 0644]
templates/pl/printer-start.tmpl [new file with mode: 0644]
templates/pl/printer-stop.tmpl [new file with mode: 0644]
templates/pl/printer.tmpl [new file with mode: 0644]
templates/pl/printers-header.tmpl [new file with mode: 0644]
templates/pl/printers.tmpl [new file with mode: 0644]
templates/pl/restart.tmpl [new file with mode: 0644]
templates/pl/samba-export.tmpl [new file with mode: 0644]
templates/pl/samba-exported.tmpl [new file with mode: 0644]
templates/pl/search.tmpl [new file with mode: 0644]
templates/pl/set-printer-options-header.tmpl [new file with mode: 0644]
templates/pl/set-printer-options-trailer.tmpl [new file with mode: 0644]
templates/pl/subscription-added.tmpl [new file with mode: 0644]
templates/pl/subscription-canceled.tmpl [new file with mode: 0644]
templates/pl/test-page.tmpl [new file with mode: 0644]
templates/pl/trailer.tmpl [new file with mode: 0644]
templates/pl/users.tmpl [new file with mode: 0644]
test/5.5-lp.sh
test/5.6-lpr.sh
test/run-stp-tests.sh
test/waitjobs.sh

index a61242939bb159f40fc67ea1b64a0657e86febea..8f4621f575f2a7e6f83d22e98db0c94569f4a63a 100644 (file)
@@ -5,6 +5,8 @@ CHANGES IN CUPS V1.3.10
 
        - Documentation fixes (STR #2994, STR #2995, STR #3008, STR #3056,
          STR #3057)
+       - Fixed a localization problem for option choices (incorrectly) named
+         "Custom" (STR #3106)
        - The fallback OpenSSL random number seeding would not work (STR #3079)
        - The scheduler might miss a child signal, causing high CPU usage.
        - The scheduler did not enforce quotas after the job history was
index e91de63cc31963284e277cd70d42ec1345a254bd..c1cedc32fc01d07ba3f766331c7046f9ddfee8d8 100644 (file)
@@ -1,13 +1,17 @@
-CHANGES.txt - 2009-02-17
+CHANGES.txt - 2009-02-25
 ------------------------
 
 CHANGES IN CUPS V1.4b3
 
        - Documentation fixes (STR #3044, STR #3057)
-       - Added complete localizations for Japanese and Russian and partial
-         localizations for Chinese, Danish, German, Finnish, French, Italian,
-         Korean, Norwegian, Polish, Portuguese, and Swedish (STR #3096,
-         STR #3098)
+       - The cups-deviced helper program could miss reporting some backend
+         devices (STR #3108)
+       - The cupsSideChannelSNMP* functions did not work.
+       - The scheduler could consume 100% CPU when jobs were canceled.
+       - Added complete localizations for Japanese, Polish, and Russian and
+         partial localizations for Chinese, Danish, German, Finnish, French,
+         Italian, Korean, Norwegian, Portuguese, and Swedish (STR #3096,
+         STR #3098, STR #3109, STR #3111)
        - Clicking on "Select Another Make/Manufacturer" in the web interface
          incorrectly added the printer (STR #3095)
        - The scheduler no longer uses programs with insecure file
index c0f8fae50c4e39d0e6ac6d488f91a0e673c6f6d2..81d92de8d07148032e2e45be23084841312fe8e7 100644 (file)
@@ -944,7 +944,6 @@ list_devices(void)
 
 #  ifdef B115200
       printf("serial serial:%s?baud=115200 \"Unknown\" \"%s\"\n", device, info);
-             device, i + 1);
 #  else
       printf("serial serial:%s?baud=38400 \"Unknown\" \"%s\"\n", device, info);
 #  endif /* B115200 */
index 363572a7690cc9b260e0c1538e02f6048f8d6fef..e0f573ccdce48254bfa245122c4174a27306648e 100644 (file)
@@ -3,7 +3,7 @@
  *
  *   Backend test program for the Common UNIX Printing System (CUPS).
  *
- *   Copyright 2007-2008 by Apple Inc.
+ *   Copyright 2007-2009 by Apple Inc.
  *   Copyright 1997-2005 by Easy Software Products, all rights reserved.
  *
  *   These coded instructions, statements, and computer programs are the
@@ -16,8 +16,9 @@
  *
  * Contents:
  *
- *   main()  - Run the named backend.
- *   usage() - Show usage information.
+ *   main()    - Run the named backend.
+ *   usage()   - Show usage information.
+ *   walk_cb() - Show results of cupsSideChannelSNMPWalk...
  */
 
 /*
@@ -40,6 +41,8 @@
  */
 
 static void    usage(void);
+static void    walk_cb(const char *oid, const char *data, int datalen,
+                       void *context);
 
 
 /*
@@ -57,7 +60,11 @@ main(int  argc,                              /* I - Number of command-line args */
   int          first_arg,              /* First argument for backend */
                do_query = 0,           /* Do PostScript query? */
                do_side_tests = 0,      /* Test side-channel ops? */
-               do_trickle = 0;         /* Trickle data to backend */
+               do_trickle = 0,         /* Trickle data to backend */
+               do_walk = 0,            /* Do OID lookup (0) or walking (1) */
+               show_log = 0;           /* Show log messages from backends? */
+  const char   *oid = ".1.3.6.1.2.1.43.10.2.1.4.1.1";
+                                       /* OID to lookup or walk */
   char         scheme[255],            /* Scheme in URI == backend */
                backend[1024];          /* Backend path */
   const char   *serverbin;             /* CUPS_SERVERBIN environment variable */
@@ -75,12 +82,29 @@ main(int  argc,                             /* I - Number of command-line args */
   for (first_arg = 1;
        argv[first_arg] && argv[first_arg][0] == '-';
        first_arg ++)
-    if (!strcmp(argv[first_arg], "-ps"))
+    if (!strcmp(argv[first_arg], "-d"))
+      show_log = 1;
+    else if (!strcmp(argv[first_arg], "-ps"))
       do_query = 1;
     else if (!strcmp(argv[first_arg], "-s"))
       do_side_tests = 1;
     else if (!strcmp(argv[first_arg], "-t"))
       do_trickle = 1;
+    else if (!strcmp(argv[first_arg], "-get") && (first_arg + 1) < argc)
+    {
+      first_arg ++;
+
+      do_side_tests = 1;
+      oid           = argv[first_arg];
+    }
+    else if (!strcmp(argv[first_arg], "-walk") && (first_arg + 1) < argc)
+    {
+      first_arg ++;
+
+      do_side_tests = 1;
+      do_walk       = 1;
+      oid           = argv[first_arg];
+    }
     else
       usage();
 
@@ -187,6 +211,7 @@ main(int  argc,                             /* I - Number of command-line args */
         static const char *ps_query =  /* PostScript query file */
                "%!\n"
                "save\n"
+               "product = flush\n"
                "currentpagedevice /PageSize get aload pop\n"
                "2 copy gt {exch} if\n"
                "(Unknown)\n"
@@ -221,7 +246,7 @@ main(int  argc,                             /* I - Number of command-line args */
 
         write(1, ps_query, strlen(ps_query));
        write(2, "DEBUG: START\n", 13);
-        while ((bytes = cupsBackChannelRead(buffer, sizeof(buffer), 30.0)) > 0)
+        while ((bytes = cupsBackChannelRead(buffer, sizeof(buffer), 5.0)) > 0)
          write(2, buffer, bytes);
        write(2, "\nDEBUG: END\n", 12);
       }
@@ -255,6 +280,12 @@ main(int  argc,                            /* I - Number of command-line args */
       close(data_fds[1]);
     }
 
+    if (!show_log)
+    {
+      close(2);
+      open("/dev/null", O_WRONLY);
+    }
+
     close(3);
     dup(back_fds[1]);
     close(back_fds[0]);
@@ -343,11 +374,31 @@ main(int  argc,                           /* I - Number of command-line args */
     printf("CUPS_SC_CMD_GET_STATE returned %s, %02X\n", statuses[scstatus],
            buffer[0] & 255);
 
-    length   = sizeof(buffer);
-    scstatus = cupsSideChannelSNMPGet(".1.3.6.1.2.1.43.10.2.1.4.1.1", buffer,
-                                      &length, 5.0);
-    printf("CUPS_SC_CMD_SNMP_GET returned %s, %s\n", statuses[scstatus],
-           buffer);
+    if (do_walk)
+    {
+     /*
+      * Walk the OID tree...
+      */
+
+      scstatus = cupsSideChannelSNMPWalk(oid, 5.0, walk_cb, NULL);
+      printf("CUPS_SC_CMD_SNMP_WALK returned %s\n", statuses[scstatus]);
+    }
+    else
+    {
+     /*
+      * Lookup the same OID twice...
+      */
+
+      length   = sizeof(buffer);
+      scstatus = cupsSideChannelSNMPGet(oid, buffer, &length, 5.0);
+      printf("CUPS_SC_CMD_SNMP_GET %s returned %s, %s\n", oid,
+            statuses[scstatus], buffer);
+
+      length   = sizeof(buffer);
+      scstatus = cupsSideChannelSNMPGet(oid, buffer, &length, 5.0);
+      printf("CUPS_SC_CMD_SNMP_GET %s returned %s, %s\n", oid,
+            statuses[scstatus], buffer);
+    }
 
     length   = 0;
     scstatus = cupsSideChannelDoRequest(CUPS_SC_CMD_SOFT_RESET, buffer,
@@ -380,12 +431,35 @@ main(int  argc,                           /* I - Number of command-line args */
 static void
 usage(void)
 {
-  fputs("Usage: testbackend [-ps] [-s] [-t] device-uri job-id user title copies "
-        "options [file]\n", stderr);
+  puts("Usage: testbackend [-d] [-ps] [-s [-oid OID] [-walk OID]] [-t] "
+       "device-uri job-id user title copies options [file]");
+  puts("");
+  puts("Options:");
+  puts("  -d          Show log messages from backend.");
+  puts("  -oid OID    Lookup the specified SNMP OID.");
+  puts("  -ps         Send PostScript query code to backend.");
+  puts("  -s          Do SNMP tests.");
+  puts("  -t          Send spaces slowly to backend ('trickle').");
+  puts("  -walk OID   Walk the specified SNMP OID.");
+
   exit(1);
 }
 
 
+/*
+ * 'walk_cb()' - Show results of cupsSideChannelSNMPWalk...
+ */
+
+static void
+walk_cb(const char *oid,               /* I - OID */
+        const char *data,              /* I - Data */
+       int        datalen,             /* I - Length of data */
+       void       *context)            /* I - Context (unused) */
+{
+  printf("CUPS_SC_CMD_SNMP_WALK %s=%s (%d bytes)\n", oid, data, datalen);
+}
+
+
 /*
  * End of "$Id$".
  */
index fd1b5be1b052eb8dedd08c001e4d1f20c061b5c0..4048dd6052f30e608704299fb211eebd5464f305 100644 (file)
@@ -1406,8 +1406,8 @@ cgiShowJobs(http_t     *http,             /* I - Connection to server */
                  NULL, url);
   }
   else
-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL,
-                "ipp://localhost/jobs");
+    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL,
+                "ipp://localhost/");
 
   if ((which_jobs = cgiGetVariable("which_jobs")) != NULL)
     ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "which-jobs",
index 164144a27529c7114557047dcb49cd11851786a4..6470fcbfd351c757acd28f741d86a4a32fac3b8d 100644 (file)
@@ -3,7 +3,7 @@
  *
  *   CGI form variable and array functions.
  *
- *   Copyright 2007-2008 by Apple Inc.
+ *   Copyright 2007-2009 by Apple Inc.
  *   Copyright 1997-2005 by Easy Software Products.
  *
  *   These coded instructions, statements, and computer programs are the
@@ -148,9 +148,6 @@ cgiGetArray(const char *name,               /* I - Name of array variable */
   if ((var = cgi_find_variable(name)) == NULL)
     return (NULL);
 
-  if (var->nvalues == 1)
-    return (var->values[0]);
-
   if (element < 0 || element >= var->nvalues)
     return (NULL);
 
index 63ea89e7627a52850b6169e408f0c35b4eed11dc..adc0752cf97ad4a33505b1bdeba31f2fc4ac9332 100644 (file)
@@ -62,13 +62,13 @@ DefaultAuthType Basic
   # All printer operations require a printer operator to authenticate...
   <Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After CUPS-Accept-Jobs CUPS-Reject-Jobs>
     AuthType Default
-    Require user @CUPS_DEFAULT_PRINTADMIN_AUTH@
+    Require user @CUPS_DEFAULT_PRINTOPERATOR_AUTH@
     Order deny,allow
   </Limit>
 
   # Only the owner or an administrator can cancel or authenticate a job...
   <Limit Cancel-Job CUPS-Authenticate-Job>
-    Require user @OWNER @CUPS_DEFAULT_PRINTADMIN_AUTH@
+    Require user @OWNER @CUPS_DEFAULT_PRINTOPERATOR_AUTH@
     Order deny,allow
   </Limit>
 
@@ -101,14 +101,14 @@ DefaultAuthType Basic
   # All printer operations require a printer operator to authenticate...
   <Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After CUPS-Accept-Jobs CUPS-Reject-Jobs>
     AuthType Default
-    Require user @CUPS_DEFAULT_PRINTADMIN_AUTH@
+    Require user @CUPS_DEFAULT_PRINTOPERATOR_AUTH@
     Order deny,allow
   </Limit>
 
   # Only the owner or an administrator can cancel or authenticate a job...
   <Limit Cancel-Job CUPS-Authenticate-Job>
     AuthType Default
-    Require user @OWNER @CUPS_DEFAULT_PRINTADMIN_AUTH@
+    Require user @OWNER @CUPS_DEFAULT_PRINTOPERATOR_AUTH@
     Order deny,allow
   </Limit>
 
index ed68d9c3c9111d41c73ebb346d9875decc621762..bd763894ea9d0333df95944af1b2dc6876aca42a 100644 (file)
@@ -284,7 +284,7 @@ AC_SUBST(DBUS_NOTIFIER)
 AC_SUBST(DBUS_NOTIFIERLIBS)
 
 dnl Extra platform-specific libraries...
-CUPS_DEFAULT_PRINTADMIN_AUTH="@SYSTEM"
+CUPS_DEFAULT_PRINTOPERATOR_AUTH="@SYSTEM"
 CUPS_SYSTEM_AUTHKEY=""
 FONTS="fonts"
 LEGACY_BACKENDS="parallel scsi"
@@ -334,11 +334,11 @@ case $uname in
                        fi
 
                        if test "x$default_operkey" != xdefault; then
-                               CUPS_DEFAULT_PRINTADMIN_AUTH="@AUTHKEY($default_operkey) @admin @lpadmin"
+                               CUPS_DEFAULT_PRINTOPERATOR_AUTH="@AUTHKEY($default_operkey) @admin @lpadmin"
                        elif grep -q system.print.operator /etc/authorization; then
-                               CUPS_DEFAULT_PRINTADMIN_AUTH="@AUTHKEY(system.print.operator) @admin @lpadmin"
+                               CUPS_DEFAULT_PRINTOPERATOR_AUTH="@AUTHKEY(system.print.operator) @admin @lpadmin"
                        else
-                               CUPS_DEFAULT_PRINTADMIN_AUTH="@AUTHKEY(system.print.admin) @admin @lpadmin"
+                               CUPS_DEFAULT_PRINTOPERATOR_AUTH="@AUTHKEY(system.print.admin) @admin @lpadmin"
                        fi])
                AC_CHECK_HEADER(Security/SecBasePriv.h,AC_DEFINE(HAVE_SECBASEPRIV_H))
 
@@ -347,8 +347,8 @@ case $uname in
                 ;;
 esac
 
-AC_SUBST(CUPS_DEFAULT_PRINTADMIN_AUTH)
-AC_DEFINE_UNQUOTED(CUPS_DEFAULT_PRINTADMIN_AUTH, "$CUPS_DEFAULT_PRINTADMIN_AUTH")
+AC_SUBST(CUPS_DEFAULT_PRINTOPERATOR_AUTH)
+AC_DEFINE_UNQUOTED(CUPS_DEFAULT_PRINTOPERATOR_AUTH, "$CUPS_DEFAULT_PRINTOPERATOR_AUTH")
 AC_SUBST(CUPS_SYSTEM_AUTHKEY)
 AC_SUBST(FONTS)
 AC_SUBST(LEGACY_BACKENDS)
index b9b4390a1b3d44df4e696aaab3647a18f2f5d9a9..f577eb285f07655ded0be09c2d888edd29ab46a9 100644 (file)
@@ -3,7 +3,7 @@
  *
  *   Configuration file 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
@@ -31,7 +31,7 @@
 #define CUPS_DEFAULT_USER      "lp"
 #define CUPS_DEFAULT_GROUP     "sys"
 #define CUPS_DEFAULT_SYSTEM_GROUPS     "sys root system"
-#define CUPS_DEFAULT_PRINTADMIN_AUTH   "@SYSTEM"
+#define CUPS_DEFAULT_PRINTOPERATOR_AUTH        "@SYSTEM"
 
 
 /*
index 8b8c25c8b2636459654de364ce67e9fd8b4e60cd..ff0ac495c11be80028cef01f7e98bc46047ab90c 100644 (file)
@@ -29,9 +29,9 @@ dir.o: dir.h versioning.h string.h ../config.h debug.h
 emit.o: ppd.h array.h versioning.h file.h string.h ../config.h debug.h
 encode.o: cups.h ipp.h http.h versioning.h ppd.h array.h file.h language.h
 encode.o: ipp-private.h string.h ../config.h debug.h
-file.o: http-private.h ../config.h http.h versioning.h md5.h ipp-private.h
-file.o: ipp.h globals.h string.h cups.h ppd.h array.h file.h language.h
-file.o: i18n.h transcode.h debug.h
+file.o: file-private.h http-private.h ../config.h http.h versioning.h md5.h
+file.o: ipp-private.h ipp.h globals.h string.h cups.h ppd.h array.h file.h
+file.o: language.h i18n.h transcode.h debug.h
 getdevices.o: globals.h string.h ../config.h http-private.h http.h
 getdevices.o: versioning.h md5.h ipp-private.h ipp.h cups.h ppd.h array.h
 getdevices.o: file.h language.h i18n.h transcode.h debug.h
@@ -80,7 +80,7 @@ notify.o: md5.h ipp-private.h ipp.h cups.h ppd.h array.h file.h language.h
 notify.o: i18n.h transcode.h
 options.o: cups.h ipp.h http.h versioning.h ppd.h array.h file.h language.h
 options.o: string.h ../config.h debug.h
-page.o: ppd.h array.h versioning.h file.h string.h ../config.h
+page.o: ppd.h array.h versioning.h file.h string.h ../config.h debug.h
 ppd.o: ppd-private.h cups.h ipp.h http.h versioning.h ppd.h array.h file.h
 ppd.o: language.h globals.h string.h ../config.h http-private.h md5.h
 ppd.o: ipp-private.h i18n.h transcode.h debug.h
@@ -115,6 +115,7 @@ testarray.o: debug.h
 testconflicts.o: cups.h ipp.h http.h versioning.h ppd.h array.h file.h
 testconflicts.o: language.h string.h ../config.h
 testcups.o: cups.h ipp.h http.h versioning.h ppd.h array.h file.h language.h
+testcups.o: string.h ../config.h
 testfile.o: string.h ../config.h file.h versioning.h debug.h
 testhttp.o: http-private.h ../config.h http.h versioning.h md5.h
 testhttp.o: ipp-private.h ipp.h string.h
@@ -160,9 +161,9 @@ dir.32.o: dir.c  dir.h versioning.h string.h ../config.h debug.h
 emit.32.o: emit.c  ppd.h array.h versioning.h file.h string.h ../config.h debug.h
 encode.32.o: encode.c  cups.h ipp.h http.h versioning.h ppd.h array.h file.h language.h
 encode.32.o: encode.c  ipp-private.h string.h ../config.h debug.h
-file.32.o: file.c  http-private.h ../config.h http.h versioning.h md5.h ipp-private.h
-file.32.o: file.c  ipp.h globals.h string.h cups.h ppd.h array.h file.h language.h
-file.32.o: file.c  i18n.h transcode.h debug.h
+file.32.o: file.c  file-private.h http-private.h ../config.h http.h versioning.h md5.h
+file.32.o: file.c  ipp-private.h ipp.h globals.h string.h cups.h ppd.h array.h file.h
+file.32.o: file.c  language.h i18n.h transcode.h debug.h
 getdevices.32.o: getdevices.c  globals.h string.h ../config.h http-private.h http.h
 getdevices.32.o: getdevices.c  versioning.h md5.h ipp-private.h ipp.h cups.h ppd.h array.h
 getdevices.32.o: getdevices.c  file.h language.h i18n.h transcode.h debug.h
@@ -211,7 +212,7 @@ notify.32.o: notify.c  md5.h ipp-private.h ipp.h cups.h ppd.h array.h file.h lan
 notify.32.o: notify.c  i18n.h transcode.h
 options.32.o: options.c  cups.h ipp.h http.h versioning.h ppd.h array.h file.h language.h
 options.32.o: options.c  string.h ../config.h debug.h
-page.32.o: page.c  ppd.h array.h versioning.h file.h string.h ../config.h
+page.32.o: page.c  ppd.h array.h versioning.h file.h string.h ../config.h debug.h
 ppd.32.o: ppd.c  ppd-private.h cups.h ipp.h http.h versioning.h ppd.h array.h file.h
 ppd.32.o: ppd.c  language.h globals.h string.h ../config.h http-private.h md5.h
 ppd.32.o: ppd.c  ipp-private.h i18n.h transcode.h debug.h
@@ -246,6 +247,7 @@ testarray.32.o: testarray.c  debug.h
 testconflicts.32.o: testconflicts.c  cups.h ipp.h http.h versioning.h ppd.h array.h file.h
 testconflicts.32.o: testconflicts.c  language.h string.h ../config.h
 testcups.32.o: testcups.c  cups.h ipp.h http.h versioning.h ppd.h array.h file.h language.h
+testcups.32.o: testcups.c  string.h ../config.h
 testfile.32.o: testfile.c  string.h ../config.h file.h versioning.h debug.h
 testhttp.32.o: testhttp.c  http-private.h ../config.h http.h versioning.h md5.h
 testhttp.32.o: testhttp.c  ipp-private.h ipp.h string.h
@@ -291,9 +293,9 @@ dir.64.o: dir.c  dir.h versioning.h string.h ../config.h debug.h
 emit.64.o: emit.c  ppd.h array.h versioning.h file.h string.h ../config.h debug.h
 encode.64.o: encode.c  cups.h ipp.h http.h versioning.h ppd.h array.h file.h language.h
 encode.64.o: encode.c  ipp-private.h string.h ../config.h debug.h
-file.64.o: file.c  http-private.h ../config.h http.h versioning.h md5.h ipp-private.h
-file.64.o: file.c  ipp.h globals.h string.h cups.h ppd.h array.h file.h language.h
-file.64.o: file.c  i18n.h transcode.h debug.h
+file.64.o: file.c  file-private.h http-private.h ../config.h http.h versioning.h md5.h
+file.64.o: file.c  ipp-private.h ipp.h globals.h string.h cups.h ppd.h array.h file.h
+file.64.o: file.c  language.h i18n.h transcode.h debug.h
 getdevices.64.o: getdevices.c  globals.h string.h ../config.h http-private.h http.h
 getdevices.64.o: getdevices.c  versioning.h md5.h ipp-private.h ipp.h cups.h ppd.h array.h
 getdevices.64.o: getdevices.c  file.h language.h i18n.h transcode.h debug.h
@@ -342,7 +344,7 @@ notify.64.o: notify.c  md5.h ipp-private.h ipp.h cups.h ppd.h array.h file.h lan
 notify.64.o: notify.c  i18n.h transcode.h
 options.64.o: options.c  cups.h ipp.h http.h versioning.h ppd.h array.h file.h language.h
 options.64.o: options.c  string.h ../config.h debug.h
-page.64.o: page.c  ppd.h array.h versioning.h file.h string.h ../config.h
+page.64.o: page.c  ppd.h array.h versioning.h file.h string.h ../config.h debug.h
 ppd.64.o: ppd.c  ppd-private.h cups.h ipp.h http.h versioning.h ppd.h array.h file.h
 ppd.64.o: ppd.c  language.h globals.h string.h ../config.h http-private.h md5.h
 ppd.64.o: ppd.c  ipp-private.h i18n.h transcode.h debug.h
@@ -377,6 +379,7 @@ testarray.64.o: testarray.c  debug.h
 testconflicts.64.o: testconflicts.c  cups.h ipp.h http.h versioning.h ppd.h array.h file.h
 testconflicts.64.o: testconflicts.c  language.h string.h ../config.h
 testcups.64.o: testcups.c  cups.h ipp.h http.h versioning.h ppd.h array.h file.h language.h
+testcups.64.o: testcups.c  string.h ../config.h
 testfile.64.o: testfile.c  string.h ../config.h file.h versioning.h debug.h
 testhttp.64.o: testhttp.c  http-private.h ../config.h http.h versioning.h md5.h
 testhttp.64.o: testhttp.c  ipp-private.h ipp.h string.h
index 8ef12ad5bb2b1d75f011db63e6d4d3f99953c8ba..318fb730e8b9329aeac4fa4e45c1422aa1515226 100644 (file)
@@ -4,7 +4,7 @@
  *   Administration utility API definitions for the Common UNIX Printing
  *   System (CUPS).
  *
- *   Copyright 2007-2008 by Apple Inc.
+ *   Copyright 2007-2009 by Apple Inc.
  *   Copyright 2001-2007 by Easy Software Products.
  *
  *   These coded instructions, statements, and computer programs are the
@@ -1133,7 +1133,13 @@ _cupsAdminGetServerSettings(
         else if (!strcasecmp(value, "all"))
          remote_any = 1;
       }
-      else if (line[0] != '<' && !in_location && !in_policy)
+      else if (line[0] != '<' && !in_location && !in_policy &&
+              strcasecmp(line, "Allow") &&
+               strcasecmp(line, "AuthType") &&
+              strcasecmp(line, "Deny") &&
+              strcasecmp(line, "Order") &&
+              strcasecmp(line, "Require") &&
+              strcasecmp(line, "Satisfy"))
         cg->cupsd_num_settings = cupsAddOption(line, value,
                                               cg->cupsd_num_settings,
                                               &(cg->cupsd_settings));
@@ -1643,7 +1649,7 @@ _cupsAdminSetServerSettings(
                             "  <Limit Cancel-Job>\n"
                             "    Order deny,allow\n"
                             "    Require user @OWNER "
-                            CUPS_DEFAULT_PRINTADMIN_AUTH "\n"
+                            CUPS_DEFAULT_PRINTOPERATOR_AUTH "\n"
                             "  </Limit>\n");
       }
 
@@ -1790,7 +1796,7 @@ _cupsAdminSetServerSettings(
                           "  <Limit Cancel-Job>\n"
                           "    Order deny,allow\n"
                           "    Require user @OWNER "
-                          CUPS_DEFAULT_PRINTADMIN_AUTH "\n"
+                          CUPS_DEFAULT_PRINTOPERATOR_AUTH "\n"
                           "  </Limit>\n");
 
       in_cancel_job = 0;
@@ -2015,7 +2021,7 @@ _cupsAdminSetServerSettings(
                         "  <Limit Cancel-Job>\n"
                         "    Order deny,allow\n"
                         "    Require user @OWNER "
-                        CUPS_DEFAULT_PRINTADMIN_AUTH "\n"
+                        CUPS_DEFAULT_PRINTOPERATOR_AUTH "\n"
                         "  </Limit>\n");
 
     cupsFilePuts(temp, "  <Limit All>\n"
index 153ceb4999d095968450a44ed16f5ba67760b423..8742cf29d95c50e2620ccb89938946d4e09a83f8 100644 (file)
@@ -117,6 +117,8 @@ enum cups_ptype_e                   /**** Printer type/capability bit constants ****/
   CUPS_PRINTER_AUTHENTICATED = 0x400000,/* Printer requires authentication @since CUPS 1.2/Mac OS X 10.5@ */
   CUPS_PRINTER_COMMANDS = 0x800000,    /* Printer supports maintenance commands @since CUPS 1.2/Mac OS X 10.5@ */
   CUPS_PRINTER_DISCOVERED = 0x1000000, /* Printer was automatically discovered and added @since CUPS 1.3/Mac OS X 10.5@ */
+  CUPS_PRINTER_SCANNER = 0x2000000,    /* Scanner-only device @since CUPS 1.4@ */
+  CUPS_PRINTER_MFP = 0x4000000,                /* Printer with scanning capabilities @since CUPS 1.4@ */
   CUPS_PRINTER_OPTIONS = 0x6fffc       /* ~(CLASS | REMOTE | IMPLICIT | DEFAULT | FAX | REJECTING | DELETE | NOT_SHARED | AUTHENTICATED | COMMANDS | DISCOVERED) @private@ */
 };
 
diff --git a/cups/file-private.h b/cups/file-private.h
new file mode 100644 (file)
index 0000000..978428d
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ * "$Id$"
+ *
+ *   Private file definitions for the Common UNIX Printing System (CUPS).
+ *
+ *   Since stdio files max out at 256 files on many systems, we have to
+ *   write similar functions without this limit.  At the same time, using
+ *   our own file functions allows us to provide transparent support of
+ *   gzip'd print files, PPD files, etc.
+ *
+ *   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
+ *   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/".
+ */
+
+#ifndef _CUPS_FILE_PRIVATE_H_
+#  define _CUPS_FILE_PRIVATE_H_
+
+/*
+ * Include necessary headers...
+ */
+
+#  include <stdio.h>
+#  include <stdlib.h>
+#  include <stdarg.h>
+#  include <errno.h>
+#  include <fcntl.h>
+#  include "http-private.h"
+#  include "globals.h"
+#  include "debug.h"
+
+#  ifdef HAVE_LIBZ
+#    include <zlib.h>
+#  endif /* HAVE_LIBZ */
+#  ifdef WIN32
+#    include <io.h>
+#    include <sys/locking.h>
+#  endif /* WIN32 */
+
+
+/*
+ * Some operating systems support large files via open flag O_LARGEFILE...
+ */
+
+#  ifndef O_LARGEFILE
+#    define O_LARGEFILE 0
+#  endif /* !O_LARGEFILE */
+
+
+/*
+ * Some operating systems don't define O_BINARY, which is used by Microsoft
+ * and IBM to flag binary files...
+ */
+
+#  ifndef O_BINARY
+#    define O_BINARY 0
+#  endif /* !O_BINARY */
+
+
+/*
+ * Types and structures...
+ */
+
+struct _cups_file_s                    /**** CUPS file structure... ****/
+
+{
+  int          fd;                     /* File descriptor */
+  char         mode,                   /* Mode ('r' or 'w') */
+               compressed,             /* Compression used? */
+               is_stdio,               /* stdin/out/err? */
+               eof,                    /* End of file? */
+               buf[4096],              /* Buffer */
+               *ptr,                   /* Pointer into buffer */
+               *end;                   /* End of buffer data */
+  off_t                pos,                    /* Position in file */
+               bufpos;                 /* File position for start of buffer */
+
+#ifdef HAVE_LIBZ
+  z_stream     stream;                 /* (De)compression stream */
+  Bytef                cbuf[4096];             /* (De)compression buffer */
+  uLong                crc;                    /* (De)compression CRC */
+#endif /* HAVE_LIBZ */
+
+  char         *printf_buffer;         /* cupsFilePrintf buffer */
+  size_t       printf_size;            /* Size of cupsFilePrintf buffer */
+};
+
+
+#endif /* !_CUPS_FILE_PRIVATE_H_ */
+
+/*
+ * End of "$Id$".
+ */
index 722a8323b66a41bf656455b3d84ac76c32bde386..ed54f22fc8ca560011bb1065d183edea81f85cf8 100644 (file)
@@ -8,7 +8,7 @@
  *   our own file functions allows us to provide transparent support of
  *   gzip'd print files, PPD files, etc.
  *
- *   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
  * Include necessary headers...
  */
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <fcntl.h>
-#include "http-private.h"
-#include "globals.h"
-#include "debug.h"
-
-#ifdef HAVE_LIBZ
-#  include <zlib.h>
-#endif /* HAVE_LIBZ */
-#ifdef WIN32
-#  include <io.h>
-#  include <sys/locking.h>
-#endif /* WIN32 */
-
-
-/*
- * Some operating systems support large files via open flag O_LARGEFILE...
- */
-
-#ifndef O_LARGEFILE
-#  define O_LARGEFILE 0
-#endif /* !O_LARGEFILE */
-
-
-/*
- * Some operating systems don't define O_BINARY, which is used by Microsoft
- * and IBM to flag binary files...
- */
-
-#ifndef O_BINARY
-#  define O_BINARY 0
-#endif /* !O_BINARY */
-
-
-/*
- * Types and structures...
- */
-
-struct _cups_file_s                    /**** CUPS file structure... ****/
-
-{
-  int          fd;                     /* File descriptor */
-  char         mode,                   /* Mode ('r' or 'w') */
-               compressed,             /* Compression used? */
-               is_stdio,               /* stdin/out/err? */
-               eof,                    /* End of file? */
-               buf[4096],              /* Buffer */
-               *ptr,                   /* Pointer into buffer */
-               *end;                   /* End of buffer data */
-  off_t                pos,                    /* Position in file */
-               bufpos;                 /* File position for start of buffer */
-
-#ifdef HAVE_LIBZ
-  z_stream     stream;                 /* (De)compression stream */
-  Bytef                cbuf[4096];             /* (De)compression buffer */
-  uLong                crc;                    /* (De)compression CRC */
-#endif /* HAVE_LIBZ */
-
-  char         *printf_buffer;         /* cupsFilePrintf buffer */
-  size_t       printf_size;            /* Size of cupsFilePrintf buffer */
-};
+#include "file-private.h"
 
 
 /*
index c8a2b4667c1bab5a8464b7b8650e3d1bf19cdf05..c5eb357facecd086a83dfeaf973a0c11fa68706d 100644 (file)
@@ -91,6 +91,7 @@ extern ssize_t                cupsFilePutConf(cups_file_t *fp, const char *directive,
                                        const char *value) _CUPS_API_1_4;
 extern int             cupsFilePuts(cups_file_t *fp, const char *s) _CUPS_API_1_2;
 extern ssize_t         cupsFileRead(cups_file_t *fp, char *buf, size_t bytes) _CUPS_API_1_2;
+extern ssize_t         cupsFileReady(cups_file_t *fp) _CUPS_API_1_4;
 extern off_t           cupsFileRewind(cups_file_t *fp) _CUPS_API_1_2;
 extern off_t           cupsFileSeek(cups_file_t *fp, off_t pos) _CUPS_API_1_2;
 extern cups_file_t     *cupsFileStderr(void) _CUPS_API_1_2;
index 19a03e26c7a668813ec435e7cf55a54feb723878..236b8048ef7f5f30835c43b5e08879caeeb47521 100644 (file)
@@ -115,7 +115,8 @@ ppdLocalize(ppd_file_t *ppd)                /* I - PPD file */
            k > 0;
           k --, choice ++)
       {
-        if (strcmp(choice->choice, "Custom"))
+        if (strcmp(choice->choice, "Custom") ||
+           !ppdFindCustomOption(ppd, option->keyword))
          locattr = _ppdLocalizedAttr(ppd, option->keyword, choice->choice,
                                      ll_CC);
        else
index 21387fdee911c2f9b214becf66eb34e1dcc3bca7..2af5c2efd67c1c35ecfc734cdda9837b657cab9b 100644 (file)
@@ -206,6 +206,13 @@ cupsDoIORequest(http_t     *http,  /* I - Connection to server or @code CUPS_HTTP
   DEBUG_printf(("cupsDoIORequest: Request length=%ld, total length=%ld",
                 (long)ippLength(request), (long)length));
 
+ /*
+  * Clear any "Local" authentication data since it is probably stale...
+  */
+
+  if (http->authstring && !strncmp(http->authstring, "Local ", 6))
+    httpSetAuthString(http, NULL, NULL);
+
  /*
   * Loop until we can send the request without authorization problems.
   */
@@ -591,13 +598,6 @@ cupsSendRequest(http_t     *http,  /* I - Connection to server or @code CUPS_HTTP
       return (HTTP_SERVICE_UNAVAILABLE);
     }
 
- /*
-  * Clear any "Local" authentication data since it is probably stale...
-  */
-
-  if (http->authstring && !strncmp(http->authstring, "Local ", 6))
-    httpSetAuthString(http, NULL, NULL);
-
  /*
   * Loop until we can send the request without authorization problems.
   */
index 585d6cbc788bdac584a822cfcba86de2eb189402..a59f5c305a0d560fb62571db7604f73c08b6be28 100644 (file)
@@ -301,7 +301,7 @@ cupsSideChannelSNMPGet(
   */
 
   if (cupsSideChannelWrite(CUPS_SC_CMD_SNMP_GET, CUPS_SC_STATUS_NONE, oid,
-                           (int)strlen(oid), timeout))
+                           (int)strlen(oid) + 1, timeout))
     return (CUPS_SC_STATUS_TIMEOUT);
 
   real_datalen = sizeof(real_data);
@@ -401,7 +401,7 @@ cupsSideChannelSNMPWalk(
     */
 
     if (cupsSideChannelWrite(CUPS_SC_CMD_SNMP_GET_NEXT, CUPS_SC_STATUS_NONE,
-                             current_oid, (int)strlen(current_oid), timeout))
+                             current_oid, (int)strlen(current_oid) + 1, timeout))
       return (CUPS_SC_STATUS_TIMEOUT);
 
     real_datalen = sizeof(real_data);
index b0382e14a6b957e75cd8aeb6ee3cd9abbd669f36..c04f0a71d03cdce46598f240a6e38dc49244b032 100644 (file)
@@ -1664,7 +1664,6 @@ get_vbcs_charmap(
   * Save DBCS/VBCS charset map into memory for transcoding...
   */
 
-  leadchar = 0;
   wide2uni = NULL;
 
   cupsFileRewind(fp);
index 57340e6a9c38bc59e1334f0dab189965dcd7f0e0..1a6dd50a3011481df37cb6f72b6a7b033d687817 100644 (file)
@@ -616,7 +616,7 @@ cupsGetJobs2(http_t     *http,              /* I - Connection to server or @code CUPS_HTTP_D
     }
   }
   else
-    strcpy(uri, "ipp://localhost/jobs");
+    strcpy(uri, "ipp://localhost/");
 
   if (!http)
     if ((http = _cupsConnect()) == NULL)
index 0c894afaaeb43f02c5b4d037b0f78cb26d6bec91..2be1141c9923427c98f4974348b8170afe7e3d89 100644 (file)
@@ -185,7 +185,7 @@ install-languages:
                if test -d $$lang; then \
                        $(INSTALL_DIR) -m 755 $(DOCDIR)/$$lang; \
                        $(INSTALL_MAN) $$lang/index.html $(DOCDIR)/$$lang; \
-                       $(INSTALL_MAN) $$lang/cups.css $(DOCDIR)/$$lang 2>/dev/null || true; \
+                       test -f $$lang/cups.css && $(INSTALL_MAN) $$lang/cups.css $(DOCDIR)/$$lang; \
                fi; \
        done
 
index 1949551c87dd6a6d840f358945eb5a983265ab72..7f3bab9087a53b927a7fbd58ae7698c5b3ba77ea 100644 (file)
@@ -2788,6 +2788,14 @@ summary='Printer Type Bits'>
        <td>0x01000000</td>
        <td>Queue was automatically discovered and added.</td>
 </tr>
+<tr>
+       <td>0x02000000</td>
+       <td>Queue is a scanner with no printing capabilities.</td>
+</tr>
+<tr>
+       <td>0x04000000</td>
+       <td>Queue is a printer with scanning capabilities.</td>
+</tr>
 </tbody>
 </table></div>
 
index 1fc0560130b3aad79359968c1fa77c994dd993b2..11ff4a4cf9f78e2bda42b84294e5934266776cf8 100644 (file)
@@ -12,7 +12,7 @@
 
   CUPS PPD extensions specification 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
@@ -1801,6 +1801,20 @@ information.</p>
 *APPrinterPrinterUtilityPath: "/Library/Printers/vendor/Tools/utility.app"
 </pre>
 
+<h3><span class='info'>Mac OS X 10.6</span><a name='APScannerOnly'>APScannerOnly</a></h3>
+
+<p class='summary'>*APScannerOnly: boolean</p>
+
+<p>This attribute specifies whether the device has scanning but no printing
+capabilities. The default is <tt>False</tt>.</p>
+
+<p>Examples:</p>
+
+<pre class='command'>
+*APICADriver: True
+*APScannerOnly: True
+</pre>
+
 <h3><span class='info'>Mac OS X 10.3</span><a name='APScanAppBundleID'>APScanAppBundleID</a></h3>
 
 <p class='summary'>*APScanAppBundleID: "bundle ID"</p>
diff --git a/doc/pl/index.html.in b/doc/pl/index.html.in
new file mode 100644 (file)
index 0000000..5cb99e8
--- /dev/null
@@ -0,0 +1,107 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<HTML>
+<HEAD>
+       <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+       <TITLE>Strona domowa - CUPS @CUPS_VERSION@@CUPS_REVISION@</TITLE>
+       <LINK REL="STYLESHEET" TYPE="text/css" HREF="/cups.css">
+       <LINK REL="SHORTCUT ICON" HREF="/favicon.png" TYPE="image/png">
+</HEAD>
+<BODY>
+<TABLE CLASS="page" SUMMARY="{title}">
+<TR><TD CLASS="body">
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR HEIGHT="36">
+<TD><A HREF="http://www.cups.org/" TARGET="_blank"><IMG
+SRC="/images/left.gif" WIDTH="64" HEIGHT="36" BORDER="0" ALT=""></A></TD>
+<TD CLASS="sel"><A HREF="/">&nbsp;&nbsp;Strona domowa&nbsp;&nbsp;</A></TD>
+<TD CLASS="unsel"><A HREF="/admin">&nbsp;&nbsp;Administracja&nbsp;&nbsp;</A></TD>
+<TD CLASS="unsel"><A HREF="/classes/">&nbsp;&nbsp;Klasy&nbsp;&nbsp;</A></TD>
+<TD CLASS="unsel"><A HREF="/help/">&nbsp;&nbsp;Pomoc&nbsp;online&nbsp;&nbsp;</A></TD>
+<TD CLASS="unsel"><A HREF="/jobs/">&nbsp;&nbsp;Zadania&nbsp;&nbsp;</A></TD>
+<TD CLASS="unsel"><A HREF="/printers/">&nbsp;&nbsp;Drukowanie&nbsp;&nbsp;</A></TD>
+<TD CLASS="unsel" WIDTH="100%"><FORM ACTION="/help/" METHOD="GET"><INPUT
+TYPE="SEARCH" NAME="QUERY" SIZE="20" PLACEHOLDER="Search Help"
+AUTOSAVE="org.cups.help" RESULTS="20"></FORM></TD>
+<TD><IMG SRC="/images/right.gif" WIDTH="4" HEIGHT="36" ALT=""></TD>
+</TR>
+</TABLE>
+
+<TABLE CLASS="indent" SUMMARY="">
+<TR><TD STYLE="padding-right: 20px;">
+
+<H1>Wspólny uniksowy system drukowania @CUPS_VERSION@</H1>
+
+<P>CUPS jest opartym na standardach systemem drukowania na licencji open source, tworzonym przez
+<A HREF="http://www.apple.com/">Apple Inc.</A> dla Mac OS<SUP>&reg;</SUP> X i
+innych systemów operacyjnych podobnych do Uniksa<SUP>&reg;</SUP>.</P>
+
+</TD>
+<TD><A HREF="http://www.cups.org/"><IMG SRC="images/cups-icon.png" WIDTH="128"
+HEIGHT="128" ALT="CUPS"></A></TD>
+</TR>
+</TABLE>
+
+<TABLE CLASS="indent" SUMMARY="">
+<TR><TD VALIGN="top" STYLE="border-right: dotted thin #cccccc; padding-right: 20px;">
+
+<H2>CUPS dla użytkowników</H2>
+
+<P><A HREF="help/overview.html">Przegląd CUPS</A></P>
+
+<P><A HREF="help/options.html">Drukowanie i opcje w wierszu poleceń</A></P>
+
+<P><A HREF="help/whatsnew.html">Co nowego w CUPS 1.4</A></P>
+
+<P><A HREF="http://www.cups.org/newsgroups.php?gcups.general">Forum użytkowników</A></P>
+
+</TD><TD VALIGN="top" STYLE="border-right: dotted thin #cccccc; padding-left: 20px; padding-right: 20px;">
+
+<H2>CUPS dla administratorów</H2>
+
+<P><A HREF="admin">Dodawanie drukarek i klas</A></P>
+
+<P><A HREF="help/policies.html">Zarządzanie politykami operacji</A></P>
+
+<P><A HREF="help/accounting.html">Podstawy kont drukowania</A></P>
+
+<P><A HREF="help/security.html">Bezpieczeństwo systemu</A></P>
+
+<P><A HREF="help/kerberos.html">Używanie uwierzytelniania Kerberosa</A></P>
+
+<P><A HREF="help/network.html">Używanie drukarek sieciowych</A></P>
+
+<P><A HREF="help/ref-cupsd-conf.html">Informacje o cupsd.conf</A></P>
+
+<P><A HREF="http://www.cups.org/ppd.php">Wyszukiwanie sterowników drukarek</A></P>
+
+</TD><TD VALIGN="top" STYLE="padding-left: 20px;">
+
+<H2>CUPS dla programistów</H2>
+
+<P><A HREF="help/api-overview.html">Wprowadzenie do programowania CUPS</A></P>
+
+<P><A HREF="help/api-cups.html">API CUPS</A></P>
+
+<P><A HREF="help/api-filter.html">Programowanie filtrów i modułów przetwarzających</A></P>
+
+<P><A HREF="help/api-httpipp.html">API HTTP i IPP</A></P>
+
+<P><A HREF="help/api-ppd.html">API PPD</A></P>
+
+<P><A HREF="help/api-raster.html">API rastrowe</A></P>
+
+<P><A HREF="help/ref-ppdcfile.html">Informacje o kompilatorze plików informacji o sterownikach PPD</A></P>
+
+<P><A HREF="http://www.cups.org/newsgroups.php?gcups.development">Forum programistów</A></P>
+
+</TD></TR>
+</TABLE>
+
+</TD></TR>
+<TR><TD>&nbsp;</TD></TR>
+<TR><TD CLASS="trailer">Wspólny uniksowy system drukowania, CUPS i logo CUPS
+są znakami handlowymi <A HREF="http://www.apple.com">Apple Inc.</A> CUPS
+copyright 2007-2009 Apple Inc. Wszystkie prawa zastrzeżone.</TD></TR>
+</TABLE>
+</BODY>
+</HTML>
index fc7d4844d5cf29328bdd736879cdbe8328da2a2f..556471b94e8e1ca057d88966dd79eb597c2b3755 100644 (file)
+#
+# "$Id$"
+#
+#   Message catalog template for the Common UNIX Printing System (CUPS).
+#
+#   Copyright 2007-2008 by Apple Inc.
+#   Copyright 2005-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/".
+#
+
+#
+# Notes for Translators:
+#
+# The following prefixes MUST NOT be translated: "ALERT:", "CRIT:", "INFO:",
+# "NOTICE:", and "WARNING:".
+#
+# The "checkpo" program located in the "locale" source directory can be used
+# to verify that your translations do not introduce formatting errors or other
+# problems.  Run with:
+#
+#    cd locale
+#    ./checkpo cups_LL.po
+#
+# 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-01-30 09:28-0800\n"
-"PO-Revision-Date: 2009-02-16 12:00-0800\n"
-"Last-Translator: Apple Inc.\n"
-"Language-Team: Apple Inc.\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-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+
+#: systemv/lpstat.c:1848 systemv/lpstat.c:1961
 msgid "\t\t(all)\n"
-msgstr "\t\t(すべて)\n"
+msgstr "\t\t(すべて)\n"
+
+#: systemv/lpstat.c:1851 systemv/lpstat.c:1854 systemv/lpstat.c:1964
+#: systemv/lpstat.c:1967
 msgid "\t\t(none)\n"
-msgstr "\t\t(なし)\n"
+msgstr "\t\t(なし)\n"
+
+#: berkeley/lpc.c:438
+#, c-format
 msgid "\t%d entries\n"
-msgstr "\t%d エントリ\n"
+msgstr "\t%d エントリー\n"
+
+#: systemv/lpstat.c:1829 systemv/lpstat.c:1942
 msgid "\tAfter fault: continue\n"
-msgstr "\t失敗後:継続\n"
+msgstr "\t失敗後: 継続\n"
+
+#: systemv/lpstat.c:1461 systemv/lpstat.c:1795 systemv/lpstat.c:1908
 msgid "\tAlerts:"
-msgstr "\tアラート:"
+msgstr "\t警告:"
+
+#: systemv/lpstat.c:1852 systemv/lpstat.c:1965
 msgid "\tBanner required\n"
 msgstr "\tバナーが必要\n"
+
+#: systemv/lpstat.c:1853 systemv/lpstat.c:1966
 msgid "\tCharset sets:\n"
-msgstr "\t文字セット:\n"
+msgstr "\t文字セット:\n"
+
+#: systemv/lpstat.c:1818 systemv/lpstat.c:1931
 msgid "\tConnection: direct\n"
-msgstr "\t接続:直結\n"
+msgstr "\t接続: 直結\n"
+
+#: systemv/lpstat.c:1809 systemv/lpstat.c:1922
 msgid "\tConnection: remote\n"
-msgstr "\t接続:リモート\n"
+msgstr "\t接続: リモート\n"
+
+#: systemv/lpstat.c:1856 systemv/lpstat.c:1969
 msgid "\tDefault page size:\n"
-msgstr "\tデフォルト用紙サイズ:\n"
+msgstr "\tデフォルト用紙サイズ:\n"
+
+#: systemv/lpstat.c:1855 systemv/lpstat.c:1968
 msgid "\tDefault pitch:\n"
-msgstr "\tデフォルトピッチ:\n"
+msgstr "\tデフォルトピッチ:\n"
+
+#: systemv/lpstat.c:1857 systemv/lpstat.c:1970
 msgid "\tDefault port settings:\n"
-msgstr "\tデフォルトポート設定:\n"
+msgstr "\tデフォルトポート設定:\n"
+
+#: systemv/lpstat.c:1790 systemv/lpstat.c:1903
+#, 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"
+msgstr "\t説明: %s\n"
+
+#: systemv/lpstat.c:1784 systemv/lpstat.c:1897
+msgid ""
+"\tForm mounted:\n"
+"\tContent types: any\n"
+"\tPrinter types: unknown\n"
+msgstr ""
+"\t設定されたフォーム:\n"
+"\tコンテンツの種類: すべて\n"
+"\tプリンターの種類: 不明\n"
+
+#: systemv/lpstat.c:1850 systemv/lpstat.c:1963
 msgid "\tForms allowed:\n"
-msgstr "\t許可されている用紙:\n"
+msgstr "\t許可されているフォーム:\n"
+
+#: systemv/lpstat.c:1813 systemv/lpstat.c:1926
+#, c-format
 msgid "\tInterface: %s.ppd\n"
-msgstr "\tインターフェイス:%s.ppd\n"
+msgstr "\tインターフェイス: %s.ppd\n"
+
+#: systemv/lpstat.c:1822 systemv/lpstat.c:1935
+#, c-format
 msgid "\tInterface: %s/interfaces/%s\n"
-msgstr "\tインターフェイス:%s/interfaces/%s\n"
+msgstr "\tインターフェイス: %s/interfaces/%s\n"
+
+#: systemv/lpstat.c:1826 systemv/lpstat.c:1939
+#, c-format
 msgid "\tInterface: %s/ppd/%s.ppd\n"
-msgstr "\tインターフェイス:%s/ppd/%s.ppd\n"
+msgstr "\tインターフェイス: %s/ppd/%s.ppd\n"
+
+#: systemv/lpstat.c:1804 systemv/lpstat.c:1917
+#, c-format
 msgid "\tLocation: %s\n"
-msgstr "\t場所:%s\n"
+msgstr "\t場所: %s\n"
+
+#: systemv/lpstat.c:1828 systemv/lpstat.c:1941
 msgid "\tOn fault: no alert\n"
-msgstr "\t失敗時:警告なし\n"
+msgstr "\t失敗時: 警告なし\n"
+
+#: systemv/lpstat.c:1833 systemv/lpstat.c:1847 systemv/lpstat.c:1946
+#: systemv/lpstat.c:1960
 msgid "\tUsers allowed:\n"
-msgstr "\t許可されているユーザ:\n"
+msgstr "\t許可されているユーザー:\n"
+
+#: systemv/lpstat.c:1840 systemv/lpstat.c:1953
 msgid "\tUsers denied:\n"
-msgstr "\t拒否されているユーザ:\n"
+msgstr "\t拒否されているユーザー:\n"
+
+#: berkeley/lpc.c:440
 msgid "\tdaemon present\n"
 msgstr "\tデーモンは提供されています\n"
+
+#: berkeley/lpc.c:436
 msgid "\tno entries\n"
-msgstr "\tエントリがありません\n"
+msgstr "\tエントリーがありません\n"
+
+#: berkeley/lpc.c:408 berkeley/lpc.c:420
+#, c-format
 msgid "\tprinter is on device '%s' speed -1\n"
-msgstr "\tプリンタはデバイス '%s'上。速度 -1\n"
+msgstr "\tデバイス '%s' 上のプリンター 速度 -1\n"
+
+#: berkeley/lpc.c:433
 msgid "\tprinting is disabled\n"
 msgstr "\t印刷は無効です\n"
+
+#: berkeley/lpc.c:431
 msgid "\tprinting is enabled\n"
 msgstr "\t印刷は有効です\n"
+
+#: systemv/lpstat.c:1467
+#, c-format
 msgid "\tqueued for %s\n"
 msgstr "\t%s にキューしました\n"
+
+#: berkeley/lpc.c:428
 msgid "\tqueuing is disabled\n"
 msgstr "\tキューは無効です\n"
+
+#: berkeley/lpc.c:426
 msgid "\tqueuing is enabled\n"
 msgstr "\tキューは有効です\n"
+
+#: systemv/lpstat.c:1777 systemv/lpstat.c:1890
 msgid "\treason unknown\n"
 msgstr "\t未知の理由\n"
-msgid "\n    DETAILED CONFORMANCE TEST RESULTS\n"
-msgstr "\n    適合テスト結果詳細\n"
+
+#: systemv/cupstestppd.c:380
+msgid ""
+"\n"
+"    DETAILED CONFORMANCE TEST RESULTS\n"
+msgstr ""
+"\n"
+"    適合テスト結果詳細\n"
+
+#: systemv/cupstestppd.c:341 systemv/cupstestppd.c:345
 msgid "                REF: Page 15, section 3.1.\n"
-msgstr "                 REF:15 ページ、セクション 3.1。n"
+msgstr "                参照: 15 ページ、セクション 3.1。\n"
+
+#: systemv/cupstestppd.c:337
 msgid "                REF: Page 15, section 3.2.\n"
-msgstr "                 REF:15 ページ、セクション 3.2。\n"
+msgstr "                参照: 15 ページ、セクション 3.2。\n"
+
+#: systemv/cupstestppd.c:353
 msgid "                REF: Page 19, section 3.3.\n"
-msgstr "                 REF:19 ページ、セクション 3.3。\n"
+msgstr "                参照: 19 ページ、セクション 3.3。\n"
+
+#: systemv/cupstestppd.c:315
 msgid "                REF: Page 20, section 3.4.\n"
-msgstr "                 REF:20 ページ、セクション 3.4。\n"
+msgstr "                参照: 20 ページ、セクション 3.4。\n"
+
+#: systemv/cupstestppd.c:357
 msgid "                REF: Page 27, section 3.5.\n"
-msgstr "                 REF:27 ページ、セクション 3.5。\n"
+msgstr "                参照: 27 ページ、セクション 3.5。\n"
+
+#: systemv/cupstestppd.c:311
 msgid "                REF: Page 42, section 5.2.\n"
-msgstr "                 REF:42 ページ、セクション 5.2。\n"
+msgstr "                参照: 42 ページ、セクション 5.2。\n"
+
+#: systemv/cupstestppd.c:349
 msgid "                REF: Pages 16-17, section 3.2.\n"
-msgstr "                 REF:16 〜 17 ページ、セクション 3.2。\n"
+msgstr "                参照: 16-17 ページ、セクション 3.2。\n"
+
+#: systemv/cupstestppd.c:325
 msgid "                REF: Pages 42-45, section 5.2.\n"
-msgstr "                 REF:42 〜 45 ページ、セクション 5.2。\n"
+msgstr "                参照: 42-45 ページ、セクション 5.2。\n"
+
+#: systemv/cupstestppd.c:320
 msgid "                REF: Pages 45-46, section 5.2.\n"
-msgstr "                 REF:45 〜 46 ページ、セクション 5.2。\n"
+msgstr "                参照: 45-46 ページ、セクション 5.2。\n"
+
+#: systemv/cupstestppd.c:329
 msgid "                REF: Pages 48-49, section 5.2.\n"
-msgstr "                 REF:48 〜 49 ページ、セクション 5.2。\n"
+msgstr "                参照: 48-49 ページ、セクション 5.2。\n"
+
+#: systemv/cupstestppd.c:333
 msgid "                REF: Pages 52-54, section 5.2.\n"
-msgstr "                 REF:52 〜 54 ページ、セクション 5.2。\n"
+msgstr "                参照: 52-54 ページ、セクション 5.2。\n"
+
+#: berkeley/lpq.c:547
+#, c-format
 msgid "        %-39.39s %.0f bytes\n"
 msgstr "        %-39.39s %.0f バイト\n"
+
+#: systemv/cupstestppd.c:497
+#, c-format
 msgid "        PASS    Default%s\n"
 msgstr "        合格    Default%s\n"
+
+#: systemv/cupstestppd.c:434
 msgid "        PASS    DefaultImageableArea\n"
 msgstr "        合格    DefaultImageableArea\n"
+
+#: systemv/cupstestppd.c:468
 msgid "        PASS    DefaultPaperDimension\n"
 msgstr "        合格    DefaultPaperDimension\n"
+
+#: systemv/cupstestppd.c:539
 msgid "        PASS    FileVersion\n"
 msgstr "        合格    FileVersion\n"
+
+#: systemv/cupstestppd.c:583
 msgid "        PASS    FormatVersion\n"
 msgstr "        合格    FormatVersion\n"
+
+#: systemv/cupstestppd.c:603
 msgid "        PASS    LanguageEncoding\n"
 msgstr "        合格    LanguageEncoding\n"
+
+#: systemv/cupstestppd.c:623
 msgid "        PASS    LanguageVersion\n"
 msgstr "        合格    LanguageVersion\n"
+
+#: systemv/cupstestppd.c:675
 msgid "        PASS    Manufacturer\n"
 msgstr "        合格    Manufacturer\n"
+
+#: systemv/cupstestppd.c:715
 msgid "        PASS    ModelName\n"
 msgstr "        合格    ModelName\n"
+
+#: systemv/cupstestppd.c:735
 msgid "        PASS    NickName\n"
 msgstr "        合格    NickName\n"
+
+#: systemv/cupstestppd.c:795
 msgid "        PASS    PCFileName\n"
 msgstr "        合格    PCFileName\n"
+
+#: systemv/cupstestppd.c:870
 msgid "        PASS    PSVersion\n"
 msgstr "        合格    PSVersion\n"
+
+#: systemv/cupstestppd.c:775
 msgid "        PASS    PageRegion\n"
 msgstr "        合格    PageRegion\n"
+
+#: systemv/cupstestppd.c:755
 msgid "        PASS    PageSize\n"
 msgstr "        合格    PageSize\n"
+
+#: systemv/cupstestppd.c:830
 msgid "        PASS    Product\n"
 msgstr "        合格    Product\n"
+
+#: systemv/cupstestppd.c:905
 msgid "        PASS    ShortNickName\n"
 msgstr "        合格    ShortNickName\n"
-msgid "        WARN    \"%s %s\" conflicts with \"%s %s\"\n                (constraint=\"%s %s %s %s\")\n"
-msgstr "        警告    “%s %s”が“%s %s”と競合します\n                (constraint= “%s %s %s %s”)\n"
+
+#: systemv/cupstestppd.c:2861
+#, 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"
+
+#: systemv/cupstestppd.c:1270
+#, c-format
 msgid "        WARN    %s has no corresponding options!\n"
-msgstr "        警告    %s に対応するオプションがありません!\n"
-msgid "        WARN    %s shares a common prefix with %s\n                REF: Page 15, section 3.2.\n"
-msgstr "        警告    %s は %s と共通のプレフィックスを共有しています\n                 REF:15 ページ、セクション 3.2。\n"
+msgstr "        警告    %s は相当するオプションがありません!\n"
+
+#: systemv/cupstestppd.c:1378
+#, 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"
+
+#: systemv/cupstestppd.c:1279
 msgid "        WARN    Default choices conflicting!\n"
-msgstr "        警告    デフォルトの選択が競合しています!\n"
-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 "        警告    両面オプションキーワード %s が予期した通りに機能しない可能性があります。Duplex という名前にする必要があります!\n                 REF:122 ページ、セクション 5.17\n"
+msgstr "        警告    デフォルトの選択肢が競合しています!\n"
+
+#: systemv/cupstestppd.c:1241
+#, 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"
+
+#: systemv/cupstestppd.c:1670
 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 "        警告    PPD 4.3 仕様では LanguageEncoding が必要です。\n                 REF:56 〜 57 ページ、セクション 5.3。\n"
+msgstr "        警告    ファイルが CR、LF、CR LF の行末を混在して含んでいます!\n"
+
+#: systemv/cupstestppd.c:1295
+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"
+
+#: systemv/cupstestppd.c:1652
+#, c-format
 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 "        警告    PPD 4.3 仕様では Manufacturer が必要です。\n                 REF:58 〜 59 ページ、セクション 5.3。\n"
+msgstr "        警告    %d 行が空白だけです!\n"
+
+#: systemv/cupstestppd.c:1303
+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"
+
+#: systemv/cupstestppd.c:1397
+#, c-format
 msgid "        WARN    Missing APDialogExtension file \"%s\"\n"
-msgstr "        警告   APDialogExtension ファイル“%s”がありません\n"
+msgstr "       警告    APDialogExtension ファイル \"%s\" が見つかりません\n"
+
+#: systemv/cupstestppd.c:1411
+#, c-format
 msgid "        WARN    Missing APPrinterIconPath file \"%s\"\n"
-msgstr "        警告   APPrinterIconPath ファイル“%s”がありません\n"
+msgstr "       警告    APPrinterIconPath ファイル \"%s\" が見つかりません\n"
+
+#: systemv/cupstestppd.c:1675
 msgid "        WARN    Non-Windows PPD files should use lines ending with only LF, not CR LF!\n"
-msgstr "        警告    Windows 以外の PPD ファイルでは行末コードとして LF だけを使用する必要があります。CR LF は使用しないでください!\n"
-msgid "        WARN    Obsolete PPD version %.1f!\n                REF: Page 42, section 5.2.\n"
-msgstr "        警告    %.1f は古い PPD バージョンです!\n                 REF: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                 REF: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                 REF: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                 REF:78 〜 79 ページ、セクション 5.7。\n"
-msgid "        WARN    ShortNickName required by PPD 4.3 spec.\n                REF: Pages 64-65, section 5.3.\n"
-msgstr "        警告    PPD 4.3 仕様では ShortNickName が必要です。\n                 REF:64 〜 65 ページ、セクション 5.3。\n"
+msgstr "        警告    非 Windows PPD ファイルは、CR LF でなく LF のみを行末に使うべきです!\n"
+
+#: systemv/cupstestppd.c:1287
+#, c-format
+msgid ""
+"        WARN    Obsolete PPD version %.1f!\n"
+"                REF: Page 42, section 5.2.\n"
+msgstr ""
+"        警告    PPD バージョン %.1f は現在使われていません!\n"
+"                参照: 42 ページ、セクション 5.2。\n"
+
+#: systemv/cupstestppd.c:1316
+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"
+
+#: systemv/cupstestppd.c:1350
+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"
+
+#: systemv/cupstestppd.c:1341
+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"
+
+#: systemv/cupstestppd.c:1324
+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"
+
+#: systemv/cupstestppd.c:2140
+#, c-format
 msgid "      %s  %s %s does not exist!\n"
-msgstr "      %s  %s %s が存在しません!\n"
-msgid "      %s  Bad %s choice %s!\n                REF: Page 122, section 5.17\n"
-msgstr "      %s  %s 選択 %s が正しくありません!\n                 REF:122 ページ、セクション 5.17\n"
+msgstr "      %s  %s %s が存在しません!\n"
+
+#: systemv/cupstestppd.c:2210
+#, 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"
+
+#: systemv/cupstestppd.c:2576
+#, c-format
 msgid "      %s  Bad UTF-8 \"%s\" translation string for option %s!\n"
-msgstr "      %1$s  オプション %3$s の UTF-8 “%2$s”変換文字列が正しくありません!\n"
+msgstr "      %s  不正な UTF-8 \"%s\" 翻訳文字列 (オプション %s 用)です!\n"
+
+#: systemv/cupstestppd.c:2622 systemv/cupstestppd.c:2671
+#: systemv/cupstestppd.c:2710
+#, c-format
 msgid "      %s  Bad UTF-8 \"%s\" translation string for option %s, choice %s!\n"
-msgstr "      %1$s  オプション %3$s、選択 %4$s の UTF-8 “%2$s”変換文字列が正しくありません!\n"
+msgstr "      %s  不正な UTF-8 \"%s\" 翻訳文字列 (オプション %s 、選択 %s)です!\n"
+
+#: systemv/cupstestppd.c:2258
+#, c-format
 msgid "      %s  Bad cupsFilter value \"%s\"!\n"
-msgstr "      %s  cupsFilter 値“%s”が正しくありません!\n"
+msgstr "      %s  不正な値が cupsFilter に設定されています \"%s\"!\n"
+
+#: systemv/cupstestppd.c:2393
+#, c-format
 msgid "      %s  Bad cupsICCProfile %s!\n"
-msgstr "      %s  cupsICCProfile %s が正しくありません!\n"
+msgstr "      %s  不正な cupsICCProfile %sです!\n"
+
+#: systemv/cupstestppd.c:2309
+#, c-format
 msgid "      %s  Bad cupsPreFilter value \"%s\"!\n"
-msgstr "      %s  cupsPreFilter 値“%s”が正しくありません!\n"
+msgstr "      %s  不正な値が cupsPreFilter に設定されています \"%s\"!\n"
+
+#: systemv/cupstestppd.c:1748
+#, c-format
 msgid "      %s  Bad cupsUIConstraints %s: \"%s\"!\n"
-msgstr "      %s  cupsUIConstraints %s が正しくありません:“%s”!\n"
+msgstr "      %s  不正な cupsUIConstraints %s: \"%s\"です!\n"
+
+#: systemv/cupstestppd.c:2526
+#, c-format
 msgid "      %s  Bad language \"%s\"!\n"
-msgstr "      %s  言語 “%s”が正しくありません!\n"
+msgstr "      %s  無効な言語 \"%s\"です!\n"
+
+#: systemv/cupstestppd.c:1729
+#, c-format
 msgid "      %s  Empty cupsUIConstraints %s!\n"
-msgstr "      %s  cupsUIConstraints %s が空です!\n"
+msgstr "      %s 空の cupsUIConstraints %sです!\n"
+
+#: systemv/cupstestppd.c:2562
+#, c-format
 msgid "      %s  Missing \"%s\" translation string for option %s!\n"
-msgstr "      %1$s  オプション %3$s の“%2$s”変換文字列が見つかりません!\n"
+msgstr "      %s  \"%s\" 翻訳文字列 (オプション %s 用) が見つかりません!\n"
+
+#: systemv/cupstestppd.c:2654 systemv/cupstestppd.c:2694
+#, c-format
 msgid "      %s  Missing \"%s\" translation string for option %s, choice %s!\n"
-msgstr "      %1$s  オプション %3$s、選択 %4$s の“%2$s”変換文字列が見つかりません!\n"
+msgstr "      %s  \"%s\" 翻訳文字列 (オプション %s 、選択 %s) が見つかりません!\n"
+
+#: systemv/cupstestppd.c:1921 systemv/cupstestppd.c:1962
+#, c-format
 msgid "      %s  Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\"!\n"
-msgstr "      %s  UIConstraints “*%s %s *%s %s”内に選択 *%s %s が見つかりません!\n"
+msgstr "      %s  選択 *%s %s が UIConstraints \"*%s %s *%s %s\" 内に見つかりません!\n"
+
+#: systemv/cupstestppd.c:1834
+#, c-format
 msgid "      %s  Missing choice *%s %s in cupsUIConstraints %s: \"%s\"!\n"
-msgstr "      %s  cupsUIConstraints %s 内に選択 *%s %s が見つかりません:“%s”!\n"
+msgstr "      %s  選択 *%s %s が cupsUIConstraints %s: \"%s\" 内に見つかりません!\n"
+
+#: systemv/cupstestppd.c:2287
+#, c-format
 msgid "      %s  Missing cupsFilter file \"%s\"\n"
-msgstr "      %s cupsFilter ファイル“%s”が見つかりません\n"
+msgstr "      %s  cupsFilter ファイル \"%s\" が見つかりません!\n"
+
+#: systemv/cupstestppd.c:2427
+#, c-format
 msgid "      %s  Missing cupsICCProfile file \"%s\"!\n"
-msgstr "      %s cupsICCProfile ファイル“%s”が見つかりません!\n"
+msgstr "      %s  cupsPreFilter ファイル \"%s\" が見つかりません!\n"
+
+#: systemv/cupstestppd.c:2338
+#, c-format
 msgid "      %s  Missing cupsPreFilter file \"%s\"\n"
-msgstr "      %s cupsPreFilter ファイル“%s”が見つかりません\n"
+msgstr "      %s  cupsPreFilter ファイル \"%s\" が見つかりません!\n"
+
+#: systemv/cupstestppd.c:1766
+#, c-format
 msgid "      %s  Missing cupsUIResolver %s!\n"
-msgstr "      %s  cupsUIResolver %s が見つかりません!\n"
+msgstr "      %s  cupsUIResolver ファイル %s が見つかりません!\n"
+
+#: systemv/cupstestppd.c:1907 systemv/cupstestppd.c:1948
+#, c-format
 msgid "      %s  Missing option %s in UIConstraints \"*%s %s *%s %s\"!\n"
-msgstr "      %s  UIConstraints “*%s %s *%s %s”内にオプション %s が見つかりません!\n"
+msgstr "      %s  オプション %s がUIConstraints \"*%s %s *%s %s\" に見つかりません!\n"
+
+#: systemv/cupstestppd.c:1818
+#, c-format
 msgid "      %s  Missing option %s in cupsUIConstraints %s: \"%s\"!\n"
-msgstr "      %s  cupsUIConstraints %s内にオプション %s が見つかりません:“%s”!\n"
+msgstr "      %s  オプション %s がcupsUIConstraints %s に見つかりません!: \"%s\"\n"
+
+#: systemv/cupstestppd.c:2748
+#, c-format
 msgid "      %s  No base translation \"%s\" is included in file!\n"
-msgstr "      %s  ファイルにベース変換”%s”が取り込まれていません!\n"
-msgid "      %s  REQUIRED %s does not define choice None!\n                REF: Page 122, section 5.17\n"
-msgstr "      %s  必須の %s が選択肢 None を定義していません!\n                REF:122 ページ、セクション 5.17\n"
+msgstr "      %s  ファイルにベース翻訳文字列 \"%s\" がありません!\n"
+
+#: systemv/cupstestppd.c:2186
+#, 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"
+
+#: systemv/cupstestppd.c:2453
+#, c-format
 msgid "      %s  cupsICCProfile %s hash value collides with %s!\n"
-msgstr "      %s  cupsICCProfile %s ハッシュ値が %s と衝突しています!\n"
+msgstr "      %s  cupsICCProfileのハッシュ値 %s が %s と一致しません!\n"
+
+#: systemv/cupstestppd.c:1871
+#, c-format
 msgid "      %s  cupsUIResolver %s causes a loop!\n"
-msgstr "      %s  cupsUIResolver %s がループになっています!\n"
+msgstr "      %s  cupsUIResolverの %s がループしています!\n"
+
+#: systemv/cupstestppd.c:2071
+#, c-format
 msgid "      **FAIL**  %s choice names %s and %s differ only by case!\n"
-msgstr "      ** 失敗 **  %s 選択名 %s と %s の違いは大文字小文字だけです!\n"
-msgid "      **FAIL**  %s must be 1284DeviceID!\n                REF: Page 72, section 5.5\n"
-msgstr "      ** 失敗 **  %s は 1284DeviceID でなければなりません!\n                 REF:72 ページ、セクション 5.5\n"
-msgid "      **FAIL**  BAD Default%s %s\n                REF: Page 40, section 4.5.\n"
-msgstr "      ** 失敗 **  Default%s %s が正しくありません\n                 REF:40 ページ、セクション 4.5。\n"
-msgid "      **FAIL**  BAD DefaultImageableArea %s!\n                REF: Page 102, section 5.15.\n"
-msgstr "      ** 失敗 **  DefaultImageableArea %s が正しくありません!\n                 REF:102 ページ、セクション 5.15。\n"
-msgid "      **FAIL**  BAD DefaultPaperDimension %s!\n                REF: Page 103, section 5.15.\n"
-msgstr "      ** 失敗 **  DefaultPaperDimension %s が正しくありません!\n                 REF:103 ページ、セクション 5.15。\n"
-msgid "      **FAIL**  BAD JobPatchFile attribute in file\n                REF: Page 24, section 3.4.\n"
-msgstr "      ** 失敗 **  ファイル内の JobPatchFile 属性が正しくありません\n                 REF:24 ページ、セクション 3.4。\n"
-msgid "      **FAIL**  BAD Manufacturer (should be \"HP\")\n                REF: Page 211, table D.1.\n"
-msgstr "      ** 失敗 **  Manufacturer が正しくありません(“HP”でなければなりません)\n                 REF:211 ページ、表 D.1。\n"
-msgid "      **FAIL**  BAD Manufacturer (should be \"Oki\")\n                REF: Page 211, table D.1.\n"
-msgstr "      ** 失敗 **  Manufacturer が正しくありません(“Oki”でなければなりません)\n                 REF: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                 REF:59 〜 60 ページ、セクション 5.3。\n"
-msgid "      **FAIL**  BAD PSVersion - not \"(string) int\".\n                REF: Pages 62-64, section 5.3.\n"
-msgstr "      ** 失敗 **  PSVersion が正しくありません - “(文字列) 正数”でありません。\n                 REF:62 〜 64 ページ、セクション 5.3。\n"
-msgid "      **FAIL**  BAD Product - not \"(string)\".\n                REF: Page 62, section 5.3.\n"
-msgstr "      ** 失敗 **  Product が正しくありません - “(文字列)”でありません。\n                 REF: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                 REF:64 〜 65 ページ、セクション 5.3。\n"
-msgid "      **FAIL**  Bad %s choice %s!\n                REF: Page 84, section 5.9\n"
-msgstr "      ** 失敗 **  %s 選択 %s が正しくありません!\n                 REF:84 ページ、セクション 5.9\n"
-msgid "      **FAIL**  Bad FileVersion \"%s\"\n                REF: Page 56, section 5.3.\n"
-msgstr "      ** 失敗 **  FileVersion “%s” が正しくありません\n                 REF:56 ページ、セクション 5.3。\n"
-msgid "      **FAIL**  Bad FormatVersion \"%s\"\n                REF: Page 56, section 5.3.\n"
-msgstr "      ** 失敗 **  FormatVersion “%s” が正しくありません\n                 REF:56 ページ、セクション 5.3。\n"
+msgstr "      **失敗**  %s が選択した %s と %s は大文字/小文字のみが違うだけです!\n"
+
+#: systemv/cupstestppd.c:1072
+#, c-format
+msgid ""
+"      **FAIL**  %s must be 1284DeviceID!\n"
+"                REF: Page 72, section 5.5\n"
+msgstr ""
+"      **失敗**  %s は 1284DeviceID でなければなりません!\n"
+"                参照: 72 ページ、セクション 5.5\n"
+
+#: systemv/cupstestppd.c:488
+#, 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"
+
+#: systemv/cupstestppd.c:424
+#, c-format
+msgid ""
+"      **FAIL**  BAD DefaultImageableArea %s!\n"
+"                REF: Page 102, section 5.15.\n"
+msgstr ""
+"      **失敗**  %s は不正な DefaultImageableArea です!\n"
+"                参照: 102 ページ、セクション 5.15。\n"
+
+#: systemv/cupstestppd.c:460
+#, c-format
+msgid ""
+"      **FAIL**  BAD DefaultPaperDimension %s!\n"
+"                REF: Page 103, section 5.15.\n"
+msgstr ""
+"      **失敗**  %s は不正な DefaultPaperDimension です!\n"
+"                参照: 103 ページ、セクション 5.15。\n"
+
+#: systemv/cupstestppd.c:931
+msgid ""
+"      **FAIL**  BAD JobPatchFile attribute in file\n"
+"                REF: Page 24, section 3.4.\n"
+msgstr ""
+"      **失敗**  ファイルに不正な JobPatchFile 属性があります\n"
+"                参照: 24 ページ、セクション 3.4。\n"
+
+#: systemv/cupstestppd.c:651
+msgid ""
+"      **FAIL**  BAD Manufacturer (should be \"HP\")\n"
+"                REF: Page 211, table D.1.\n"
+msgstr ""
+"      **失敗**  不正な Manufacturer (\"HP\" でなければなりません)\n"
+"                参照: 211 ページ、表 D.1。\n"
+
+#: systemv/cupstestppd.c:667
+msgid ""
+"      **FAIL**  BAD Manufacturer (should be \"Oki\")\n"
+"                REF: Page 211, table D.1.\n"
+msgstr ""
+"      **失敗**  不正な Manufacturer (\"Oki\" でなければなりません)\n"
+"                参照: 211 ページ、表 D.1。\n"
+
+#: systemv/cupstestppd.c:706
+#, 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"
+
+#: systemv/cupstestppd.c:862
+msgid ""
+"      **FAIL**  BAD PSVersion - not \"(string) int\".\n"
+"                REF: Pages 62-64, section 5.3.\n"
+msgstr ""
+"      **失敗**  不正な PSVersion - \"(文字列) 整数\" ではありません。\n"
+"                参照: 62-64 ページ、セクション 5.3。\n"
+
+#: systemv/cupstestppd.c:823
+msgid ""
+"      **FAIL**  BAD Product - not \"(string)\".\n"
+"                REF: Page 62, section 5.3.\n"
+msgstr ""
+"      **失敗**  不正な Product - \"(文字列)\" ではありません。\n"
+"                参照: 62 ページ、セクション 5.3。\n"
+
+#: systemv/cupstestppd.c:897
+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"
+
+#: systemv/cupstestppd.c:1053
+#, c-format
+msgid ""
+"      **FAIL**  Bad %s choice %s!\n"
+"                REF: Page 84, section 5.9\n"
+msgstr ""
+"      **失敗**  不正な %s が %s を選んでいます!\n"
+"                参照: 84 ページ、セクション 5.9\n"
+
+#: systemv/cupstestppd.c:531
+#, c-format
+msgid ""
+"      **FAIL**  Bad FileVersion \"%s\"\n"
+"                REF: Page 56, section 5.3.\n"
+msgstr ""
+"      **失敗**  不正なFileVersion \"%s\"\n"
+"                参照: 56 ページ、セクション 5.3。\n"
+
+#: systemv/cupstestppd.c:575
+#, c-format
+msgid ""
+"      **FAIL**  Bad FormatVersion \"%s\"\n"
+"                REF: Page 56, section 5.3.\n"
+msgstr ""
+"      **失敗**  FormatVersion が違います \"%s\"\n"
+"                参照: 56 ページ、セクション 5.3。\n"
+
+#: systemv/cupstestppd.c:1114
+#, c-format
 msgid "      **FAIL**  Bad LanguageEncoding %s - must be ISOLatin1!\n"
-msgstr "      ** 失敗 **  LanguageEncoding %s が正しくありません - ISOLatin1 でなければなりません!\n"
+msgstr "      **失敗**  無効な LanguageEncoding %s - ISOLatin1 でなければなりません!\n"
+
+#: systemv/cupstestppd.c:1128
+#, c-format
 msgid "      **FAIL**  Bad LanguageVersion %s - must be English!\n"
-msgstr "      ** 失敗 **  LanguageVersion %s が正しくありません - English でなければなりません!\n"
+msgstr "      **失敗**  無効な LanguageVersion %s - English でなければなりません!\n"
+
+#: systemv/cupstestppd.c:2888 systemv/cupstestppd.c:2910
+#, c-format
 msgid "      **FAIL**  Default option code cannot be interpreted: %s\n"
-msgstr "      ** 失敗 **  デフォルトのオプションコードを解釈できません:%s\n"
+msgstr "      **失敗**  デフォルトのオプションコードが解釈できません: %s\n"
+
+#: systemv/cupstestppd.c:1187
+#, c-format
 msgid "      **FAIL**  Default translation string for option %s choice %s contains 8-bit characters!\n"
-msgstr "      ** 失敗 **  オプション %s 選択 %s のデフォルト変換文字列に 8 ビット文字が含まれています!\n"
+msgstr "      **失敗**  オプション %s、選択 %s のデフォルトの翻訳文字列が 8 ビット文字を含んでいます!\n"
+
+#: systemv/cupstestppd.c:1160
+#, c-format
 msgid "      **FAIL**  Default translation string for option %s contains 8-bit characters!\n"
-msgstr "      ** 失敗 **  オプション %s のデフォルト変換文字列に 8 ビット文字が含まれています!\n"
+msgstr "      **失敗**  オプション %s のデフォルトの翻訳文字列が 8 ビット文字を含んでいます!\n"
+
+#: systemv/cupstestppd.c:2009
+#, c-format
 msgid "      **FAIL**  Group names %s and %s differ only by case!\n"
-msgstr "      ** 失敗 **  グループ名 %s と %s の違いは大文字小文字だけです!\n"
+msgstr "      **失敗**  グループ名 %s と %s は大文字/小文字が違うだけです!\n"
+
+#: systemv/cupstestppd.c:2054
+#, c-format
 msgid "      **FAIL**  Multiple occurrences of %s choice name %s!\n"
-msgstr "      ** 失敗 **  %s 選択名 %s が複数回出現します!\n"
+msgstr "      **失敗**  %s で複数のオプション %s が選択されています!\n"
+
+#: systemv/cupstestppd.c:2031
+#, c-format
 msgid "      **FAIL**  Option names %s and %s differ only by case!\n"
-msgstr "      ** 失敗 **  オプション名 %s と %s の違いは大文字小文字だけです!\n"
-msgid "      **FAIL**  REQUIRED Default%s\n                REF: Page 40, section 4.5.\n"
-msgstr "      ** 失敗 **  Default%s が必要です\n                 REF:40 ページ、セクション 4.5。\n"
-msgid "      **FAIL**  REQUIRED DefaultImageableArea\n                REF: Page 102, section 5.15.\n"
-msgstr "      ** 失敗 **  DefaultImageableArea が必要です\n                 REF:102 ページ、セクション 5.15。\n"
-msgid "      **FAIL**  REQUIRED DefaultPaperDimension\n                REF: Page 103, section 5.15.\n"
-msgstr "      ** 失敗 **  DefaultPaperDimension が必要です\n                 REF:103 ページ、セクション 5.15。\n"
-msgid "      **FAIL**  REQUIRED FileVersion\n                REF: Page 56, section 5.3.\n"
-msgstr "      ** 失敗 **  FileVersion が必要です\n                 REF:56 ページ、セクション 5.3。\n"
-msgid "      **FAIL**  REQUIRED FormatVersion\n                REF: Page 56, section 5.3.\n"
-msgstr "      ** 失敗 **  FormatVersion が必要です\n                 REF: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                 REF:41 ページ、セクション 5。\n                 REF:102 ページ、セクション 5.15。\n"
-msgid "      **FAIL**  REQUIRED LanguageEncoding\n                REF: Pages 56-57, section 5.3.\n"
-msgstr "      ** 失敗 **  LanguageEncoding が必要です\n                 REF:56 〜 57 ページ、セクション 5.3。\n"
-msgid "      **FAIL**  REQUIRED LanguageVersion\n                REF: Pages 57-58, section 5.3.\n"
-msgstr "      ** 失敗 **  LanguageVersion が必要です\n                 REF:57 〜 58 ページ、セクション 5.3。\n"
-msgid "      **FAIL**  REQUIRED Manufacturer\n                REF: Pages 58-59, section 5.3.\n"
-msgstr "      ** 失敗 **  Manufacturer が必要です\n                 REF:58 〜 59 ページ、セクション 5.3。\n"
-msgid "      **FAIL**  REQUIRED ModelName\n                REF: Pages 59-60, section 5.3.\n"
-msgstr "      ** 失敗 **  ModelName が必要です\n                 REF:59 〜 60 ページ、セクション 5.3。\n"
-msgid "      **FAIL**  REQUIRED NickName\n                REF: Page 60, section 5.3.\n"
-msgstr "      ** 失敗 **  NickName が必要です\n                 REF:60 ページ、セクション 5.3。\n"
-msgid "      **FAIL**  REQUIRED PCFileName\n                REF: Pages 61-62, section 5.3.\n"
-msgstr "      ** 失敗 **  PCFileName が必要です\n                 REF:61 〜 62 ページ、セクション 5.3。\n"
-msgid "      **FAIL**  REQUIRED PSVersion\n                REF: Pages 62-64, section 5.3.\n"
-msgstr "      ** 失敗 **  PSVersion が必要です\n                 REF:62 〜 64 ページ、セクション 5.3。\n"
-msgid "      **FAIL**  REQUIRED PageRegion\n                REF: Page 100, section 5.14.\n"
-msgstr "      ** 失敗 **  PageRegion が必要です\n                 REF: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                 REF:41 ページ、セクション 5。\n                 REF:99 ページ、セクション 5.14。\n"
-msgid "      **FAIL**  REQUIRED PageSize\n                REF: Pages 99-100, section 5.14.\n"
-msgstr "      ** 失敗 **  PageSize が必要です\n                 REF: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                 REF:41 ページ、セクション 5。\n                 REF:103 ページ、セクション 5.15。\n"
-msgid "      **FAIL**  REQUIRED Product\n                REF: Page 62, section 5.3.\n"
-msgstr "      ** 失敗 **  Product が必要です\n                 REF:62 ページ、セクション 5.3。\n"
-msgid "      **FAIL**  REQUIRED ShortNickName\n                REF: Page 64-65, section 5.3.\n"
-msgstr "      ** 失敗 **  ShortNickName が必要です\n                 REF:64 〜 65 ページ、セクション 5.3。\n"
+msgstr "      **失敗**  オプション名 %s と %s は大文字/小文字が違うだけです!\n"
+
+#: systemv/cupstestppd.c:508
+#, c-format
+msgid ""
+"      **FAIL**  REQUIRED Default%s\n"
+"                REF: Page 40, section 4.5.\n"
+msgstr ""
+"      **失敗**  Default%s は必須\n"
+"                参照: 40 ページ、セクション 4.5。\n"
+
+#: systemv/cupstestppd.c:409
+msgid ""
+"      **FAIL**  REQUIRED DefaultImageableArea\n"
+"                REF: Page 102, section 5.15.\n"
+msgstr ""
+"      **失敗**  DefaultImageableArea は必須\n"
+"                参照: 102 ページ、セクション 5.15。\n"
+
+#: systemv/cupstestppd.c:445
+msgid ""
+"      **FAIL**  REQUIRED DefaultPaperDimension\n"
+"                REF: Page 103, section 5.15.\n"
+msgstr ""
+"      **失敗**  DefaultPaperDimension は必須\n"
+"                参照: 103 ページ、セクション 5.15。\n"
+
+#: systemv/cupstestppd.c:549
+msgid ""
+"      **FAIL**  REQUIRED FileVersion\n"
+"                REF: Page 56, section 5.3.\n"
+msgstr ""
+"      **失敗**  FileVersion は必須\n"
+"                参照: 56 ページ、セクション 5.3。\n"
+
+#: systemv/cupstestppd.c:593
+msgid ""
+"      **FAIL**  REQUIRED FormatVersion\n"
+"                REF: Page 56, section 5.3.\n"
+msgstr ""
+"      **失敗**  FormatVersion は必須\n"
+"                参照: 56 ページ、セクション 5.3。\n"
+
+#: systemv/cupstestppd.c:982
+#, 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"
+
+#: systemv/cupstestppd.c:613
+msgid ""
+"      **FAIL**  REQUIRED LanguageEncoding\n"
+"                REF: Pages 56-57, section 5.3.\n"
+msgstr ""
+"      **失敗**  LanguageEncoding は必須\n"
+"                参照: 56-57 ページ、セクション 5.3。\n"
+
+#: systemv/cupstestppd.c:633
+msgid ""
+"      **FAIL**  REQUIRED LanguageVersion\n"
+"                REF: Pages 57-58, section 5.3.\n"
+msgstr ""
+"      **失敗**  LanguageVersion は必須\n"
+"                参照: 57-58 ページ、セクション 5.3。\n"
+
+#: systemv/cupstestppd.c:685
+msgid ""
+"      **FAIL**  REQUIRED Manufacturer\n"
+"                REF: Pages 58-59, section 5.3.\n"
+msgstr ""
+"      **失敗**  Manufacturer は必須\n"
+"                参照: 58-59 ページ、セクション 5.3。\n"
+
+#: systemv/cupstestppd.c:725
+msgid ""
+"      **FAIL**  REQUIRED ModelName\n"
+"                REF: Pages 59-60, section 5.3.\n"
+msgstr ""
+"      **失敗**  ModelName は必須\n"
+"                参照: 59-60 ページ、セクション 5.3。\n"
+
+#: systemv/cupstestppd.c:745
+msgid ""
+"      **FAIL**  REQUIRED NickName\n"
+"                REF: Page 60, section 5.3.\n"
+msgstr ""
+"      **失敗**  NickName は必須\n"
+"                参照: 60 ページ、セクション 5.3。\n"
+
+#: systemv/cupstestppd.c:805
+msgid ""
+"      **FAIL**  REQUIRED PCFileName\n"
+"                REF: Pages 61-62, section 5.3.\n"
+msgstr ""
+"      **失敗**  PCFileName は必須\n"
+"                参照: 61-62 ページ、セクション 5.3。\n"
+
+#: systemv/cupstestppd.c:880
+msgid ""
+"      **FAIL**  REQUIRED PSVersion\n"
+"                REF: Pages 62-64, section 5.3.\n"
+msgstr ""
+"      **失敗**  PSVersion は必須\n"
+"                参照: 62-64 ページ、セクション 5.3。\n"
+
+#: systemv/cupstestppd.c:785
+msgid ""
+"      **FAIL**  REQUIRED PageRegion\n"
+"                REF: Page 100, section 5.14.\n"
+msgstr ""
+"      **失敗**  PageRegion は必須\n"
+"                参照: 100 ページ、セクション 5.14。\n"
+
+#: systemv/cupstestppd.c:951
+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"
+
+#: systemv/cupstestppd.c:765
+msgid ""
+"      **FAIL**  REQUIRED PageSize\n"
+"                REF: Pages 99-100, section 5.14.\n"
+msgstr ""
+"      **失敗**  PageSize は必須\n"
+"                参照: 99-100 ページ、セクション 5.14。\n"
+
+#: systemv/cupstestppd.c:1004
+#, 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"
+
+#: systemv/cupstestppd.c:840
+msgid ""
+"      **FAIL**  REQUIRED Product\n"
+"                REF: Page 62, section 5.3.\n"
+msgstr ""
+"      **失敗**  Product は必須\n"
+"                参照: 62 ページ、セクション 5.3。\n"
+
+#: systemv/cupstestppd.c:915
+msgid ""
+"      **FAIL**  REQUIRED ShortNickName\n"
+"                REF: Page 64-65, section 5.3.\n"
+msgstr ""
+"      **失敗**  ShortNickName は必須\n"
+"                参照: 64-65 ページ、セクション 5.3。\n"
+
+#: systemv/cupstestppd.c:1420
+#, c-format
 msgid "    %d ERRORS FOUND\n"
 msgstr "    %d 個のエラーが見つかりました\n"
-msgid "    Bad %%%%BoundingBox: on line %d!\n        REF: Page 39, %%%%BoundingBox:\n"
-msgstr "    %%%%BoundingBox が正しくありません:行 %d!\n         REF:39 ページ、%%%%BoundingBox:\n"
-msgid "    Bad %%%%Page: on line %d!\n        REF: Page 53, %%%%Page:\n"
-msgstr "    %%%%Page が正しくありません:行 %d!\n         REF:53 ページ、%%%%Page:\n"
-msgid "    Bad %%%%Pages: on line %d!\n        REF: Page 43, %%%%Pages:\n"
-msgstr "    %%%%Pages が正しくありません:行 %d!\n         REF:43 ページ、%%%%Pages:\n"
-msgid "    Line %d is longer than 255 characters (%d)!\n        REF: Page 25, Line Length\n"
-msgstr "    %d 行が  255 文字より長くなっています(%d)!\n        REF: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        REF:17 ページ、3.1 Conforming Documents\n"
-msgid "    Missing %%EndComments comment!\n        REF: Page 41, %%EndComments\n"
-msgstr "    %%EndComments コメントが見つかりません!\n         REF:41 ページ、%%EndComments\n"
-msgid "    Missing or bad %%BoundingBox: comment!\n        REF: Page 39, %%BoundingBox:\n"
-msgstr "    %%BoundingBox が見つからないか正しくありません:コメント!\n         REF:39 ページ、%%BoundingBox:\n"
-msgid "    Missing or bad %%Page: comments!\n        REF: Page 53, %%Page:\n"
-msgstr "    %%Page が見つからないか正しくありません:コメント!\n         REF:53 ページ、%%Page:\n"
-msgid "    Missing or bad %%Pages: comment!\n        REF: Page 43, %%Pages:\n"
-msgstr "    %%Pages が見つからないか正しくありません:コメント!\n         REF:43 ページ、%%Pages:\n"
+
+#: systemv/cupstestdsc.c:238 systemv/cupstestdsc.c:280
+#, c-format
+msgid ""
+"    Bad %%%%BoundingBox: on line %d!\n"
+"        REF: Page 39, %%%%BoundingBox:\n"
+msgstr ""
+"    不正な %%%%BoundingBox: (%d 行)!\n"
+"        参照: 39 ページ、%%%%BoundingBox:\n"
+
+#: systemv/cupstestdsc.c:309
+#, c-format
+msgid ""
+"    Bad %%%%Page: on line %d!\n"
+"        REF: Page 53, %%%%Page:\n"
+msgstr ""
+"    不正な %%%%Page: (%d 行)!\n"
+"        参照: 53 ページ、%%%%Page:\n"
+
+#: systemv/cupstestdsc.c:222 systemv/cupstestdsc.c:262
+#, c-format
+msgid ""
+"    Bad %%%%Pages: on line %d!\n"
+"        REF: Page 43, %%%%Pages:\n"
+msgstr ""
+"    不正な %%%%Pages: (%d 行)!\n"
+"        参照: 43 ページ、%%%%Pages:\n"
+
+#: systemv/cupstestdsc.c:180
+#, 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"
+
+#: systemv/cupstestdsc.c:196
+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"
+
+#: systemv/cupstestdsc.c:366
+#, c-format
+msgid ""
+"    Missing %%EndComments comment!\n"
+"        REF: Page 41, %%EndComments\n"
+msgstr ""
+"    %%EndComments コメントが見つかりません!\n"
+"        参照: 41 ページ、%%EndComments\n"
+
+#: systemv/cupstestdsc.c:346
+#, c-format
+msgid ""
+"    Missing or bad %%BoundingBox: comment!\n"
+"        REF: Page 39, %%BoundingBox:\n"
+msgstr ""
+"    %%BoundingBox: コメントが見つからないか不正です!\n"
+"        参照: 39 ページ、%%BoundingBox:\n"
+
+#: systemv/cupstestdsc.c:376
+#, c-format
+msgid ""
+"    Missing or bad %%Page: comments!\n"
+"        REF: Page 53, %%Page:\n"
+msgstr ""
+"    %%Page: コメントが見つからないか不正です!\n"
+"        参照: 53 ページ、%%Page:\n"
+
+#: systemv/cupstestdsc.c:356
+#, c-format
+msgid ""
+"    Missing or bad %%Pages: comment!\n"
+"        REF: Page 43, %%Pages:\n"
+msgstr ""
+"    %%Pages: コメントが見つからないか不正です!\n"
+"        参照: 43 ページ、%%Pages:\n"
+
+#: systemv/cupstestppd.c:1422
 msgid "    NO ERRORS FOUND\n"
-msgstr "    エラーが見つかりませんでした\n"
+msgstr "    エラーは見つかりませんでした\n"
+
+#: systemv/cupstestdsc.c:399
+#, c-format
 msgid "    Saw %d lines that exceeded 255 characters!\n"
-msgstr "    255 文字を超える行が %d 個ありました!\n"
+msgstr "    255文字を超える %d 行が見つかりました!\n"
+
+#: systemv/cupstestdsc.c:394
+#, c-format
 msgid "    Too many %%BeginDocument comments!\n"
-msgstr "    %%BeginDocument コメントが多すぎます!\n"
+msgstr "    %%BeginDocument コメントが多すぎます!\n"
+
+#: systemv/cupstestdsc.c:386
+#, c-format
 msgid "    Too many %%EndDocument comments!\n"
-msgstr "    %%EndDocument コメントが多すぎます!\n"
+msgstr "    %%EndDocument コメントが多すぎます!\n"
+
+#: systemv/cupstestdsc.c:406
 msgid "    Warning: file contains binary data!\n"
-msgstr "    警告:ファイル内にバイナリデータが含まれています!\n"
+msgstr "    警告: ファイルにバイナリデータが含まれています!\n"
+
+#: systemv/cupstestdsc.c:414
+#, c-format
 msgid "    Warning: no %%EndComments comment in file!\n"
-msgstr "    警告:ファイル内に %%EndComments コメントがありません!\n"
+msgstr "    警告: ファイルに %%EndComments コメントがありません!\n"
+
+#: systemv/cupstestdsc.c:410
+#, c-format
 msgid "    Warning: obsolete DSC version %.1f in file!\n"
-msgstr "    警告:ファイル内に古い DSC バージョン %.1f があります!\n"
+msgstr "    警告: ファイルは時代遅れの DSC バージョン %.1f です!\n"
+
+#: systemv/cupstestppd.c:406 systemv/cupstestppd.c:421
+#: systemv/cupstestppd.c:442 systemv/cupstestppd.c:457
+#: systemv/cupstestppd.c:485 systemv/cupstestppd.c:505
+#: systemv/cupstestppd.c:528 systemv/cupstestppd.c:546
+#: systemv/cupstestppd.c:572 systemv/cupstestppd.c:590
+#: systemv/cupstestppd.c:610 systemv/cupstestppd.c:630
+#: systemv/cupstestppd.c:648 systemv/cupstestppd.c:664
+#: systemv/cupstestppd.c:682 systemv/cupstestppd.c:703
+#: systemv/cupstestppd.c:722 systemv/cupstestppd.c:742
+#: systemv/cupstestppd.c:762 systemv/cupstestppd.c:782
+#: systemv/cupstestppd.c:802 systemv/cupstestppd.c:820
+#: systemv/cupstestppd.c:837 systemv/cupstestppd.c:859
+#: systemv/cupstestppd.c:877 systemv/cupstestppd.c:894
+#: systemv/cupstestppd.c:912 systemv/cupstestppd.c:928
+#: systemv/cupstestppd.c:948 systemv/cupstestppd.c:979
+#: systemv/cupstestppd.c:1001 systemv/cupstestppd.c:1050
+#: systemv/cupstestppd.c:1069 systemv/cupstestppd.c:1110
+#: systemv/cupstestppd.c:1124 systemv/cupstestppd.c:1156
+#: systemv/cupstestppd.c:1183 systemv/cupstestppd.c:1726
+#: systemv/cupstestppd.c:1745 systemv/cupstestppd.c:1763
+#: systemv/cupstestppd.c:1815 systemv/cupstestppd.c:1831
+#: systemv/cupstestppd.c:1868 systemv/cupstestppd.c:1904
+#: systemv/cupstestppd.c:1918 systemv/cupstestppd.c:1945
+#: systemv/cupstestppd.c:1959 systemv/cupstestppd.c:2005
+#: systemv/cupstestppd.c:2027 systemv/cupstestppd.c:2050
+#: systemv/cupstestppd.c:2067 systemv/cupstestppd.c:2136
+#: systemv/cupstestppd.c:2183 systemv/cupstestppd.c:2207
+#: systemv/cupstestppd.c:2254 systemv/cupstestppd.c:2284
+#: systemv/cupstestppd.c:2305 systemv/cupstestppd.c:2335
+#: systemv/cupstestppd.c:2389 systemv/cupstestppd.c:2424
+#: systemv/cupstestppd.c:2449 systemv/cupstestppd.c:2522
+#: systemv/cupstestppd.c:2558 systemv/cupstestppd.c:2572
+#: systemv/cupstestppd.c:2618 systemv/cupstestppd.c:2650
+#: systemv/cupstestppd.c:2667 systemv/cupstestppd.c:2690
+#: systemv/cupstestppd.c:2706 systemv/cupstestppd.c:2744
+#: systemv/cupstestppd.c:2884 systemv/cupstestppd.c:2906
 msgid " FAIL\n"
 msgstr " 失敗\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"
+
+#: systemv/cupstestppd.c:291
+#, c-format
+msgid ""
+" FAIL\n"
+"      **FAIL**  Unable to open PPD file - %s\n"
+msgstr ""
+" 失敗\n"
+"      **失敗**  PPD ファイルを開けません - %s\n"
+
+#: systemv/cupstestppd.c:302
+#, c-format
+msgid ""
+" FAIL\n"
+"      **FAIL**  Unable to open PPD file - %s on line %d.\n"
+msgstr ""
+" 失敗\n"
+"      **失敗**  PPD ファイルを開けません - %s (%d 行)。\n"
+
+#: systemv/cupstestppd.c:1207
 msgid " PASS\n"
 msgstr " 合格\n"
+
+#: ppdc/sample.c:51
 msgid "#10 Envelope"
 msgstr "#10 封筒"
+
+#: ppdc/sample.c:52
 msgid "#11 Envelope"
 msgstr "#11 封筒"
+
+#: ppdc/sample.c:53
 msgid "#12 Envelope"
 msgstr "#12 封筒"
+
+#: ppdc/sample.c:54
 msgid "#14 Envelope"
 msgstr "#14 封筒"
+
+#: ppdc/sample.c:55
 msgid "#9 Envelope"
 msgstr "#9 封筒"
+
+#: berkeley/lpq.c:553
+#, c-format
 msgid "%-6s %-10.10s %-4d %-10d %-27.27s %.0f bytes\n"
 msgstr "%-6s %-10.10s %-4d %-10d %-27.27s %.0f バイト\n"
+
+#: berkeley/lpq.c:558
+#, c-format
 msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes\n"
 msgstr "%-7s %-7.7s %-7d %-31.31s %.0f バイト\n"
+
+#: filter/bannertops.c:780
+#, c-format
 msgid "%.0f x %.0f millimeters"
 msgstr "%.0f x %.0f ミリメートル"
+
+#: filter/bannertops.c:801
+#, c-format
 msgid "%.0f x %.0f to %.0f x %.0f millimeters"
-msgstr "%.0f x %.0f 〜 %.0f x %.0f ミリメートル"
+msgstr "%.0f x %.0f to %.0f x %.0f ミリメートル"
+
+#: filter/bannertops.c:771
+#, c-format
 msgid "%.2f x %.2f inches"
 msgstr "%.2f x %.2f インチ"
+
+#: filter/bannertops.c:790
+#, c-format
 msgid "%.2f x %.2f to %.2f x %.2f inches"
-msgstr "%.2f x %.2f 〜 %.2f x %.2f インチ"
+msgstr "%.2f x %.2f to %.2f x %.2f インチ"
+
+#: systemv/lpstat.c:754
+#, c-format
 msgid "%s accepting requests since %s\n"
-msgstr "%s は 以降の要求を受け入れ中 -\n\t%s\n"
+msgstr "%s は %s からリクエストを受け付けています\n"
+
+#: scheduler/ipp.c:10466
+#, c-format
 msgid "%s cannot be changed."
-msgstr "%s を変更できません。"
+msgstr "%s は変更できません。"
+
+#: berkeley/lpc.c:194
+#, c-format
 msgid "%s is not implemented by the CUPS version of lpc.\n"
-msgstr "%s は CUPS 版の lpc では実装されていません。\n"
+msgstr "%s は lpc の CUPS バージョンでは実装されていません。\n"
+
+#: berkeley/lpq.c:644
+#, c-format
 msgid "%s is not ready\n"
 msgstr "%s は準備ができていません\n"
+
+#: berkeley/lpq.c:637
+#, c-format
 msgid "%s is ready\n"
 msgstr "%s は準備ができています\n"
+
+#: berkeley/lpq.c:640
+#, c-format
 msgid "%s is ready and printing\n"
-msgstr "%s は準備ができていてプリント中です\n"
-msgid "%s not accepting requests since %s -\n\t%s\n"
-msgstr "%s は %s 以降の要求を受け入れません -\n\t%s\n"
+msgstr "%s は準備ができており印刷しています\n"
+
+#: systemv/lpstat.c:757
+#, c-format
+msgid ""
+"%s not accepting requests since %s -\n"
+"\t%s\n"
+msgstr ""
+"%s は %s からリクエストを受け付けていません\n"
+"\t%s\n"
+
+#: scheduler/ipp.c:689
+#, c-format
 msgid "%s not supported!"
-msgstr "%s には対応していません!"
+msgstr "%s はサポートされていません!"
+
+#: systemv/lpstat.c:767
+#, c-format
 msgid "%s/%s accepting requests since %s\n"
-msgstr "%s/%s は であるため要求を受け入れ中 -\n\t%s\n"
-msgid "%s/%s not accepting requests since %s -\n\t%s\n"
-msgstr "%s/%s は %s 以降の要求を受け入れません -\n\t%s\n"
+msgstr "%s/%s は %s からリクエストを受け付けています\n"
+
+#: systemv/lpstat.c:770
+#, c-format
+msgid ""
+"%s/%s not accepting requests since %s -\n"
+"\t%s\n"
+msgstr ""
+"%s/%s は %s からリクエストを受け付けていません\n"
+"\t%s\n"
+
+#: berkeley/lpq.c:545
+#, c-format
 msgid "%s: %-33.33s [job %d localhost]\n"
-msgstr "%s:%-33.33s [ジョブ %d localhost]\n"
+msgstr "%s:%-33.33s [ジョブ %d localhost]\n"
+
+#: systemv/cancel.c:303 systemv/cancel.c:367
+#, c-format
 msgid "%s: %s failed: %s\n"
-msgstr "%s:%s が失敗しました:%s\n"
+msgstr "%s: %s に失敗しました: %s\n"
+
+#: systemv/cupsaccept.c:73
+#, c-format
 msgid "%s: Don't know what to do!\n"
-msgstr "%s:対処方法が不明です!\n"
+msgstr "%s: 何が起きているか不明です!\n"
+
+#: berkeley/lpr.c:356 systemv/lp.c:603
+#, c-format
 msgid "%s: Error - %s environment variable names non-existent destination \"%s\"!\n"
-msgstr "%s:エラー - %s 環境変数名に存在しない送信先“%s”が指定されています!\n"
+msgstr "%s: エラー - 環境変数 %s が存在しない宛先 \"%s\" を指しています!\n"
+
+#: systemv/lp.c:240
+#, c-format
 msgid "%s: Error - bad job ID!\n"
-msgstr "%s:エラー - ジョブ ID が正しくありません!\n"
+msgstr "%s: エラー - 不正なジョブ ID です!\n"
+
+#: systemv/lp.c:227
+#, c-format
 msgid "%s: Error - cannot print files and alter jobs simultaneously!\n"
-msgstr "%s:エラー - ファイルのプリントとジョブの変更を同時にすることはできません!\n"
+msgstr "%s: エラー - ファイルを印刷できず、ジョブを同時に変えることができません!\n"
+
+#: systemv/lp.c:523
+#, c-format
 msgid "%s: Error - cannot print from stdin if files or a job ID are provided!\n"
-msgstr "%s:エラー - ファイルまたはジョブ ID が渡される場合は stdin からプリントできません!\n"
+msgstr "%s: エラー - ファイルまたはジョブ ID が提供されている場合、標準入力から印刷できません。 \n"
+
+#: systemv/lp.c:477
+#, c-format
 msgid "%s: Error - expected character set after '-S' option!\n"
-msgstr "%s:エラー - ‘-S’オプションの後に文字セットが必要です!\n"
+msgstr "%s: エラー - '-S' オプションのあとには文字セットが必要です!\n"
+
+#: systemv/lp.c:497
+#, c-format
 msgid "%s: Error - expected content type after '-T' option!\n"
-msgstr "%s:エラー - ‘-T’オプションの後にコンテンツタイプが必要です!\n"
+msgstr "%s: エラー - '-T' オプションのあとにはコンテンツタイプが必要です!\n"
+
+#: systemv/lp.c:273
+#, c-format
 msgid "%s: Error - expected copies after '-n' option!\n"
-msgstr "%s:エラー - ‘-n’オプションの後に部数が必要です!\n"
+msgstr "%s: エラー - '-n' オプションのあとにはコピー数が必要です!\n"
+
+#: berkeley/lpr.c:251
+#, c-format
 msgid "%s: Error - expected copy count after '-#' option!\n"
-msgstr "%s:エラー - ‘-#’オプションの後に部数が必要です!\n"
+msgstr "%s: エラー - '-#' オプションのあとにはコピー数が必要です!\n"
+
+#: berkeley/lpr.c:219
+#, c-format
 msgid "%s: Error - expected destination after '-P' option!\n"
-msgstr "%s:エラー - ‘-P’オプションの後に送信先が必要です!\n"
+msgstr "%s: エラー - '-P' オプションのあとには宛先が必要です!\n"
+
+#: systemv/lpstat.c:238
+#, c-format
 msgid "%s: Error - expected destination after '-b' option!\n"
-msgstr "%s:エラー - ‘-b’オプションの後に送信先が必要です!\n"
+msgstr "%s: エラー - '-b' オプションのあとに宛先が必要です!\n"
+
+#: systemv/lp.c:145
+#, c-format
 msgid "%s: Error - expected destination after '-d' option!\n"
-msgstr "%s:エラー - ‘-d’オプションの後に送信先が必要です!\n"
+msgstr "%s: エラー - '-d' オプションのあとにはプリンター名が必要です!\n"
+
+#: systemv/lp.c:175
+#, c-format
 msgid "%s: Error - expected form after '-f' option!\n"
-msgstr "%s:エラー - ‘-f’オプションの後にフォームが必要です!\n"
+msgstr "%s: エラー - '-f' オプションのあとには用紙名が必要です!\n"
+
+#: systemv/lp.c:404
+#, c-format
 msgid "%s: Error - expected hold name after '-H' option!\n"
-msgstr "%s:エラー - ‘-H’オプションの後に保留リストの名前が必要です!\n"
+msgstr "%s: エラー - '-H' オプションのあとにはホールド名が必要です!\n"
+
+#: berkeley/lpr.c:111
+#, c-format
 msgid "%s: Error - expected hostname after '-H' option!\n"
-msgstr "%s:エラー - ‘-H’オプションの後にホスト名が必要です!\n"
+msgstr "%s: エラー - '-H' オプションのあとにはホスト名が必要です!\n"
+
+#: berkeley/lpq.c:188 berkeley/lprm.c:130 systemv/cancel.c:130
+#: systemv/cupsaccept.c:131 systemv/lp.c:196 systemv/lpstat.c:298
+#, c-format
 msgid "%s: Error - expected hostname after '-h' option!\n"
-msgstr "%s:エラー - ‘-h’オプションの後にホスト名が必要です!\n"
+msgstr "%s: エラー -  '-h' オプションのあとにはホスト名が必要です!\n"
+
+#: systemv/lp.c:382
+#, c-format
 msgid "%s: Error - expected mode list after '-y' option!\n"
-msgstr "%s:エラー - ‘-y’オプションの後にモードリストが必要です!\n"
+msgstr "%s: エラー - '-y' オプションのあとにはモードリストが必要です!\n"
+
+#: berkeley/lpr.c:275
+#, c-format
 msgid "%s: Error - expected name after '-%c' option!\n"
-msgstr "%s:エラー - ‘-%c’オプションの後に名前が必要です!\n"
+msgstr "%s: エラー - '-%c' オプションのあとには名前が必要です!\n"
+
+#: systemv/lp.c:296
+#, c-format
 msgid "%s: Error - expected option string after '-o' option!\n"
-msgstr "%s:エラー - ‘-o’オプションの後にオプション文字列が必要です!\n"
+msgstr "%s: エラー - '-o' オプションのあとには文字列が必要です!\n"
+
+#: systemv/lp.c:456
+#, c-format
 msgid "%s: Error - expected page list after '-P' option!\n"
-msgstr "%s:エラー - ‘-P’オプションの後にページリストが必要です!\n"
+msgstr "%s: エラー - '-P' オプションのあとにはページリストが必要です!\n"
+
+#: systemv/lp.c:317
+#, c-format
 msgid "%s: Error - expected priority after '-%c' option!\n"
-msgstr "%s:エラー - ‘-%c’オプションの後に優先順位が必要です!\n"
+msgstr "%s: エラー - '-%c' オプションのあとには優先度が必要です!\n"
+
+#: systemv/cupsaccept.c:150
+#, c-format
 msgid "%s: Error - expected reason text after '-r' option!\n"
-msgstr "%s:エラー - ‘-r’オプションの後に理由テキストが必要です!\n"
+msgstr "%s: エラー - '-r' のあとには理由のテキストが必要です!\n"
+
+#: systemv/lp.c:364
+#, c-format
 msgid "%s: Error - expected title after '-t' option!\n"
-msgstr "%s:エラー - ‘-t’オプションの後にタイトルが必要です!\n"
+msgstr "%s: エラー - '-t' オプションのあとにはタイトルが必要です!\n"
+
+#: berkeley/lpq.c:117 berkeley/lpr.c:91 berkeley/lprm.c:110
+#: systemv/cancel.c:99 systemv/cupsaccept.c:108 systemv/lp.c:122
+#: systemv/lpadmin.c:471 systemv/lpstat.c:144
+#, c-format
 msgid "%s: Error - expected username after '-U' option!\n"
-msgstr "%s:エラー - ‘-U’オプションの後にユーザ名が必要です!\n"
+msgstr "%s: エラー - '-U' オプションのあとにはユーザ名が必要です!\n"
+
+#: systemv/cancel.c:152
+#, c-format
 msgid "%s: Error - expected username after '-u' option!\n"
-msgstr "%s:エラー - ‘-u’オプションの後にユーザ名が必要です!\n"
+msgstr "%s: エラー - '-u' オプションのあとにはユーザ名が必要です!\n"
+
+#: berkeley/lpr.c:134
+#, c-format
 msgid "%s: Error - expected value after '-%c' option!\n"
-msgstr "%s:エラー - ‘-%c’オプションの後に値が必要です!\n"
+msgstr "%s: エラー -  '-%c' オプションのあとには値が必要です!\n"
+
+#: systemv/lpstat.c:164 systemv/lpstat.c:178
+#, c-format
 msgid "%s: Error - need \"completed\", \"not-completed\", or \"all\" after '-W' option!\n"
-msgstr "%s:エラー - ‘-W’オプションの後に“completed”、“not-completed”、または“all”が必要です!\n"
+msgstr "%s: エラー - '-W' オプションのあとには、\"completed\"、\"not-completed\"、\"all\" のいずれかが必要です!\n"
+
+#: berkeley/lpr.c:361 systemv/lp.c:608
+#, c-format
 msgid "%s: Error - no default destination available.\n"
-msgstr "%s:エラー - 利用できるデフォルト送信先がありません。\n"
+msgstr "%s: エラー - 利用可能なデフォルトの宛先がありません。\n"
+
+#: systemv/lp.c:340
+#, c-format
 msgid "%s: Error - priority must be between 1 and 100.\n"
-msgstr "%s:エラー - 優先順位は 1 〜 100 でなければなりません。\n"
+msgstr "%s: エラー - 優先度は 1 から 100 の間である必要があります。\n"
+
+#: berkeley/lpr.c:365 systemv/lp.c:612
+#, c-format
 msgid "%s: Error - scheduler not responding!\n"
-msgstr "%s:エラー - スケジューラが応答しません!\n"
+msgstr "%s: エラー - スケジューラが応答していません!\n"
+
+#: berkeley/lpr.c:317 systemv/lp.c:556
+#, c-format
 msgid "%s: Error - too many files - \"%s\"\n"
-msgstr "%s:エラー - ファイルが多すぎます - “%s”\n"
+msgstr "%s: エラー - ファイルが多すぎます - \"%s\"\n"
+
+#: berkeley/lpr.c:299 systemv/lp.c:539
+#, c-format
 msgid "%s: Error - unable to access \"%s\" - %s\n"
-msgstr "%s:エラー - “%s”にアクセスできません - %s\n"
+msgstr "%s: エラー - \"%s\" にアクセスできません - %s\n"
+
+#: berkeley/lpr.c:410 systemv/lp.c:645
+#, c-format
 msgid "%s: Error - unable to queue from stdin - %s\n"
-msgstr "%s:エラー - stdin からキューに入れることはできません - %s\n"
+msgstr "%s: エラー - 標準入力からキューにデータを入力できません! - %s\n"
+
+#: berkeley/lprm.c:93 berkeley/lprm.c:182 systemv/cancel.c:222
+#, c-format
 msgid "%s: Error - unknown destination \"%s\"!\n"
-msgstr "%s:エラー - “%s”は不明な送信先です!\n"
+msgstr "%s: エラー - \"%s\" は未知の宛先です!\n"
+
+#: berkeley/lpq.c:157
+#, c-format
 msgid "%s: Error - unknown destination \"%s/%s\"!\n"
-msgstr "%s:エラー - “%s/%s”は不明な送信先です!\n"
+msgstr "%s: エラー - \"%s/%s\" は未知の宛先です!\n"
+
+#: berkeley/lpr.c:286 berkeley/lprm.c:148 systemv/cancel.c:164
+#: systemv/cupsaccept.c:174 systemv/lp.c:514 systemv/lpstat.c:459
+#, c-format
 msgid "%s: Error - unknown option '%c'!\n"
-msgstr "%s:エラー - ‘-%c’は不明なオプションです!\n"
+msgstr "%s: エラー - '%c' は未知のオプションです!\n"
+
+#: systemv/cupsaccept.c:167
+#, c-format
 msgid "%s: Error - unknown option '%s'!\n"
-msgstr "%s:エラー - ‘-%s’は不明なオプションです!\n"
+msgstr "%s: エラー - '%s' は未知のオプションです!\n"
+
+#: systemv/lp.c:216
+#, c-format
 msgid "%s: Expected job ID after '-i' option!\n"
-msgstr "%s:‘-i’オプションの後にジョブ ID が必要です!\n"
+msgstr "%s: '-i' オプションのあとにはジョブ ID が必要です!\n"
+
+#: scheduler/cupsfilter.c:540
+#, c-format
 msgid "%s: Filter \"%s\" not available: %s\n"
-msgstr "%s: フィルタ“%s”は利用できません:%s\n"
+msgstr "%s: フィルタ \"%s\" は利用できません: %s\n"
+
+#: systemv/lpstat.c:511 systemv/lpstat.c:550
+#, c-format
 msgid "%s: Invalid destination name in list \"%s\"!\n"
-msgstr "%s:リスト“%s”に無効な送信先名があります!\n"
+msgstr "%s: リスト \"%s\" に無効な宛先名があります!\n"
+
+#: scheduler/cupsfilter.c:521
+#, c-format
 msgid "%s: Invalid filter string \"%s\"\n"
-msgstr "%s:“%s”は無効なフィルタ文字列です\n"
+msgstr "%s: 無効なフィルタ文字列です \"%s\"\n"
+
+#: systemv/lp.c:432
+#, c-format
 msgid "%s: Need job ID ('-i jobid') before '-H restart'!\n"
-msgstr "%s:‘-H restart’の前にジョブ ID(‘-i jobid’)が必要です!\n"
+msgstr "%s: '-H restart' の前にはジョブ ID ('-i ジョブID') が必要です!\n"
+
+#: scheduler/cupsfilter.c:436
+#, c-format
 msgid "%s: No filter to convert from %s/%s to %s/%s!\n"
-msgstr "%s:%s/%s から %s/%s に変換するフィルタはありません!\n"
+msgstr "%s: %s/%s から %s/%s に変換するフィルタがありません!\n"
+
+#: systemv/cupsaccept.c:208
+#, c-format
 msgid "%s: Operation failed: %s\n"
-msgstr "%s:操作が失敗しました:%s\n"
+msgstr "%s: 操作に失敗しました: %s\n"
+
+#: berkeley/lpq.c:103 berkeley/lpr.c:77 berkeley/lprm.c:72 systemv/cancel.c:85
+#: systemv/cupsaccept.c:94 systemv/cupsaddsmb.c:91 systemv/lp.c:108
+#: systemv/lpadmin.c:277 systemv/lpinfo.c:94 systemv/lpmove.c:79
+#: systemv/lpstat.c:109
+#, c-format
 msgid "%s: Sorry, no encryption support compiled in!\n"
-msgstr "%s:暗号化サポートがコンパイルされていません!\n"
+msgstr "%s: すみません、暗号化サポートはコンパイル時に組み込まれていません!\n"
+
+#: berkeley/lpq.c:304 scheduler/cupsfilter.c:1073 systemv/cupsaddsmb.c:149
+#: systemv/cupsaddsmb.c:175
+#, c-format
 msgid "%s: Unable to connect to server\n"
-msgstr "%s:サーバに接続できません\n"
+msgstr "%s: サーバーに接続できません\n"
+
+#: systemv/cancel.c:245 systemv/cancel.c:326
+#, c-format
 msgid "%s: Unable to contact server!\n"
-msgstr "%s:サーバに接続できません!\n"
+msgstr "%s: サーバーに連絡できません!\n"
+
+#: scheduler/cupsfilter.c:404
+#, c-format
 msgid "%s: Unable to determine MIME type of \"%s\"!\n"
-msgstr "%s:“%s”の MIME タイプを判断できません!\n"
+msgstr "%s: \"%s\" の MIME タイプを判別できません!\n"
+
+#: ppdc/ppdmerge.cxx:99
+#, c-format
 msgid "%s: Unable to open %s - %s\n"
-msgstr "%s:%s を開けません - %s\n"
+msgstr "%s: %s を開けません - %s\n"
+
+#: ppdc/ppdmerge.cxx:113
+#, c-format
 msgid "%s: Unable to open %s - %s on line %d.\n"
-msgstr "%s:%s を開けません - %s、行 %d\n"
+msgstr "%s: %s を開けません。- %s の %d 行目。\n"
+
+#: ppdc/ppdc-file.cxx:50
+#, c-format
 msgid "%s: Unable to open %s: %s\n"
-msgstr "%s:%s を開けません:%s\n"
+msgstr "%s: %sを開けません: %s\n"
+
+#: scheduler/cupsfilter.c:583
+#, c-format
 msgid "%s: Unable to open PPD file: %s on line %d\n"
-msgstr "%s:PPD ファイルを開けません:%s、行 %d\n"
+msgstr "%s: PPD ファイルを開けません: %s の %d 行目\n"
+
+#: scheduler/cupsfilter.c:377
+#, c-format
 msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"!\n"
-msgstr "%s:“%s”または“%s”から MIME データベースを読み取れません!\n"
+msgstr "%s: \"%s\" または \"%s\" から MIME データベースを読み取ることができません!\n"
+
+#: berkeley/lpq.c:161 systemv/lpstat.c:565
+#, c-format
 msgid "%s: Unknown destination \"%s\"!\n"
-msgstr "%s:“%s”は不明な送信先です!\n"
+msgstr "%s: \"%s\" は未知の宛先です!\n"
+
+#: scheduler/cupsfilter.c:415
+#, c-format
 msgid "%s: Unknown destination MIME type %s/%s!\n"
-msgstr "%s:%s/%s は不明な送信先 MIME タイプです!\n"
+msgstr "%s: %s/%s は未知の宛先 MIME タイプです!\n"
+
+#: scheduler/cupsfilter.c:1281
+#, c-format
 msgid "%s: Unknown option '%c'!\n"
-msgstr "%s:‘-%c’は不明なオプションです!\n"
+msgstr "%s: '%c' は未知のオプションです!\n"
+
+#: scheduler/cupsfilter.c:396
+#, c-format
 msgid "%s: Unknown source MIME type %s/%s!\n"
-msgstr "%s:%s/%s は不明な送信元 MIME タイプです!\n"
+msgstr "%s: %s/%s は未知のソース MIME タイプです!\n"
+
+#: berkeley/lpr.c:148
+#, c-format
 msgid "%s: Warning - '%c' format modifier not supported - output may not be correct!\n"
-msgstr "%s:警告 - '%c' フォーマット修飾子には対応していません - 出力が正しくない可能性があります!\n"
+msgstr "%s: 警告 - '%c' 形式修飾子はサポートされていません - 出力は正しくないものになるかもしれません!\n"
+
+#: systemv/lp.c:485
+#, c-format
 msgid "%s: Warning - character set option ignored!\n"
-msgstr "%s:警告 - 文字セットオプションは無視されました!\n"
+msgstr "%s: 警告 - 文字セットオプションは無視されます!\n"
+
+#: systemv/lp.c:505
+#, c-format
 msgid "%s: Warning - content type option ignored!\n"
-msgstr "%s:警告 - コンテンツ・タイプ・オプションは無視されました!\n"
+msgstr "%s: 警告 - コンテンツタイプオプションは無視されます!\n"
+
+#: systemv/lp.c:182
+#, c-format
 msgid "%s: Warning - form option ignored!\n"
-msgstr "%s:警告 - フォームオプションは無視されました!\n"
+msgstr "%s: 警告 - 用紙オプションは無視されます!\n"
+
+#: systemv/lp.c:390
+#, c-format
 msgid "%s: Warning - mode option ignored!\n"
-msgstr "%s:警告 - モードオプションは無視されました!\n"
+msgstr "%s: 警告 - モードオプションは無視されます!\n"
+
+#: berkeley/lpq.c:245
+#, c-format
 msgid "%s: error - %s environment variable names non-existent destination \"%s\"!\n"
-msgstr "%s:エラー - %s 環境変数名に存在しない送信先“%s”が指定されています!\n"
+msgstr "%s: エラー - 環境変数 %s が存在しない宛先 \"%s\" を指しています!\n"
+
+#: berkeley/lpr.c:162
+#, c-format
 msgid "%s: error - expected option=value after '-o' option!\n"
-msgstr "%s:エラー - ‘-o’オプションの後に option=value が必要です!\n"
+msgstr "%s: エラー - '-o' オプションのあとには オプション=値 が必要です!\n"
+
+#: berkeley/lpq.c:250
+#, c-format
 msgid "%s: error - no default destination available.\n"
-msgstr "%s:エラー - 利用できるデフォルト送信先がありません。\n"
+msgstr "%s: エラー - 利用可能なデフォルトの宛先がありません。\n"
+
+#: ppdc/sample.c:282
 msgid "-1"
 msgstr "-1"
+
+#: ppdc/sample.c:273
 msgid "-10"
 msgstr "-10"
+
+#: ppdc/sample.c:365
 msgid "-100"
 msgstr "-100"
+
+#: ppdc/sample.c:364
 msgid "-105"
 msgstr "-105"
+
+#: ppdc/sample.c:272
 msgid "-11"
 msgstr "-11"
+
+#: ppdc/sample.c:363
 msgid "-110"
 msgstr "-110"
+
+#: ppdc/sample.c:362
 msgid "-115"
 msgstr "-115"
+
+#: ppdc/sample.c:271
 msgid "-12"
 msgstr "-12"
+
+#: ppdc/sample.c:361
 msgid "-120"
 msgstr "-120"
+
+#: ppdc/sample.c:270
 msgid "-13"
 msgstr "-13"
+
+#: ppdc/sample.c:269
 msgid "-14"
 msgstr "-14"
+
+#: ppdc/sample.c:268
 msgid "-15"
 msgstr "-15"
+
+#: ppdc/sample.c:281
 msgid "-2"
 msgstr "-2"
+
+#: ppdc/sample.c:381
 msgid "-20"
 msgstr "-20"
+
+#: ppdc/sample.c:380
 msgid "-25"
 msgstr "-25"
+
+#: ppdc/sample.c:280
 msgid "-3"
 msgstr "-3"
+
+#: ppdc/sample.c:379
 msgid "-30"
 msgstr "-30"
+
+#: ppdc/sample.c:378
 msgid "-35"
 msgstr "-35"
+
+#: ppdc/sample.c:279
 msgid "-4"
 msgstr "-4"
+
+#: ppdc/sample.c:377
 msgid "-40"
 msgstr "-40"
+
+#: ppdc/sample.c:376
 msgid "-45"
 msgstr "-45"
+
+#: ppdc/sample.c:278
 msgid "-5"
 msgstr "-5"
+
+#: ppdc/sample.c:375
 msgid "-50"
 msgstr "-50"
+
+#: ppdc/sample.c:374
 msgid "-55"
 msgstr "-55"
+
+#: ppdc/sample.c:277
 msgid "-6"
 msgstr "-6"
+
+#: ppdc/sample.c:373
 msgid "-60"
 msgstr "-60"
+
+#: ppdc/sample.c:372
 msgid "-65"
 msgstr "-65"
+
+#: ppdc/sample.c:276
 msgid "-7"
 msgstr "-7"
+
+#: ppdc/sample.c:371
 msgid "-70"
 msgstr "-70"
+
+#: ppdc/sample.c:370
 msgid "-75"
 msgstr "-75"
+
+#: ppdc/sample.c:275
 msgid "-8"
 msgstr "-8"
+
+#: ppdc/sample.c:369
 msgid "-80"
 msgstr "-80"
+
+#: ppdc/sample.c:368
 msgid "-85"
 msgstr "-85"
+
+#: ppdc/sample.c:274
 msgid "-9"
 msgstr "-9"
+
+#: ppdc/sample.c:367
 msgid "-90"
 msgstr "-90"
+
+#: ppdc/sample.c:366
 msgid "-95"
 msgstr "-95"
+
+#: ppdc/sample.c:283
 msgid "0"
 msgstr "0"
+
+#: ppdc/sample.c:284
 msgid "1"
 msgstr "1"
+
+#: ppdc/sample.c:356
 msgid "1 inch/sec."
-msgstr "1 インチ/秒"
+msgstr "1 インチ/秒"
+
+#: ppdc/sample.c:144
 msgid "1.25x0.25\""
-msgstr "1.25 x 0.25\""
+msgstr "1.25x0.25インチ"
+
+#: ppdc/sample.c:145
 msgid "1.25x2.25\""
-msgstr "1.25 x 2.25\""
+msgstr "1.25x2.25インチ"
+
+#: ppdc/sample.c:404
 msgid "1.5 inch/sec."
-msgstr "1.5 インチ/秒"
+msgstr "1.5 インチ/秒"
+
+#: ppdc/sample.c:146
 msgid "1.50x0.25\""
-msgstr "1.50 x 0.25\""
+msgstr "1.50x0.25インチ"
+
+#: ppdc/sample.c:147
 msgid "1.50x0.50\""
-msgstr "1.50 x 0.50\""
+msgstr "1.50x0.50インチ"
+
+#: ppdc/sample.c:148
 msgid "1.50x1.00\""
-msgstr "1.50 x 1.00\""
+msgstr "1.50x1.00インチ"
+
+#: ppdc/sample.c:149
 msgid "1.50x2.00\""
-msgstr "1.50 x 2.00\""
+msgstr "1.50x2.00インチ"
+
+#: ppdc/sample.c:293
 msgid "10"
 msgstr "10"
+
+#: ppdc/sample.c:415
 msgid "10 inches/sec."
-msgstr "10 インチ/秒"
+msgstr "10 インチ/秒"
+
+#: ppdc/sample.c:1
 msgid "10 x 11\""
-msgstr "10 x 11\""
+msgstr "10 x 11インチ"
+
+#: ppdc/sample.c:2
 msgid "10 x 13\""
-msgstr "10 x 13\""
+msgstr "10 x 13インチ"
+
+#: ppdc/sample.c:3
 msgid "10 x 14\""
-msgstr "10 x 14\""
+msgstr "10 x 14インチ"
+
+#: ppdc/sample.c:395
 msgid "100"
 msgstr "100"
+
+#: ppdc/sample.c:306
 msgid "100 mm/sec."
-msgstr "100 mm/秒"
+msgstr "100 ミリメートル/秒"
+
+#: ppdc/sample.c:396
 msgid "105"
 msgstr "105"
+
+#: ppdc/sample.c:294
 msgid "11"
 msgstr "11"
+
+#: ppdc/sample.c:416
 msgid "11 inches/sec."
-msgstr "11 インチ/秒"
+msgstr "11 インチ/秒"
+
+#: ppdc/sample.c:397
 msgid "110"
 msgstr "110"
+
+#: ppdc/sample.c:398
 msgid "115"
 msgstr "115"
+
+#: ppdc/sample.c:295
 msgid "12"
 msgstr "12"
+
+#: ppdc/sample.c:417
 msgid "12 inches/sec."
-msgstr "12 インチ/秒"
+msgstr "12 インチ/秒"
+
+#: ppdc/sample.c:4
 msgid "12 x 11\""
-msgstr "12 x 11\""
+msgstr "12 x 11インチ"
+
+#: ppdc/sample.c:399
 msgid "120"
 msgstr "120"
+
+#: ppdc/sample.c:307
 msgid "120 mm/sec."
-msgstr "120 mm/秒"
+msgstr "120 ミリメートル/秒"
+
+#: ppdc/sample.c:215
 msgid "120x60dpi"
-msgstr "120 x 60 dpi"
+msgstr "120x60dpi"
+
+#: ppdc/sample.c:221
 msgid "120x72dpi"
-msgstr "120 x 72 dpi"
+msgstr "120x72dpi"
+
+#: ppdc/sample.c:296
 msgid "13"
 msgstr "13"
+
+#: ppdc/sample.c:204
 msgid "136dpi"
-msgstr "136 dpi"
+msgstr "136dpi"
+
+#: ppdc/sample.c:297
 msgid "14"
 msgstr "14"
+
+#: ppdc/sample.c:298
 msgid "15"
 msgstr "15"
+
+#: ppdc/sample.c:300
 msgid "15 mm/sec."
-msgstr "15 mm/秒"
+msgstr "15 ミリメートル/秒"
+
+#: ppdc/sample.c:5
 msgid "15 x 11\""
-msgstr "15 x 11\""
+msgstr "15 x 11インチ"
+
+#: ppdc/sample.c:308
 msgid "150 mm/sec."
-msgstr "150 mm/秒"
+msgstr "150 ミリメートル/秒"
+
+#: ppdc/sample.c:254
 msgid "150dpi"
-msgstr "150 dpi"
+msgstr "150dpi"
+
+#: ppdc/sample.c:340
 msgid "16"
 msgstr "16"
+
+#: ppdc/sample.c:341
 msgid "17"
 msgstr "17"
+
+#: ppdc/sample.c:342
 msgid "18"
 msgstr "18"
+
+#: ppdc/sample.c:216
 msgid "180dpi"
-msgstr "180 dpi"
+msgstr "180dpi"
+
+#: ppdc/sample.c:343
 msgid "19"
 msgstr "19"
+
+#: ppdc/sample.c:285
 msgid "2"
 msgstr "2"
+
+#: ppdc/sample.c:357
 msgid "2 inches/sec."
-msgstr "2 インチ/秒"
+msgstr "2 インチ/秒"
+
+#: ppdc/sample.c:242
 msgid "2-Sided Printing"
 msgstr "両面印刷"
+
+#: ppdc/sample.c:150
 msgid "2.00x0.37\""
-msgstr "2.00 x 0.37\""
+msgstr "2.00x0.37インチ"
+
+#: ppdc/sample.c:151
 msgid "2.00x0.50\""
-msgstr "2.00 x 0.50\""
+msgstr "2.00x0.50インチ"
+
+#: ppdc/sample.c:152
 msgid "2.00x1.00\""
-msgstr "2.00 x 1.00\""
+msgstr "2.00x1.00インチ"
+
+#: ppdc/sample.c:153
 msgid "2.00x1.25\""
-msgstr "2.00 x 1.25\""
+msgstr "2.00x1.25インチ"
+
+#: ppdc/sample.c:154
 msgid "2.00x2.00\""
-msgstr "2.00 x 2.00\""
+msgstr "2.00x2.00インチ"
+
+#: ppdc/sample.c:155
 msgid "2.00x3.00\""
-msgstr "2.00 x 3.00\""
+msgstr "2.00x3.00インチ"
+
+#: ppdc/sample.c:156
 msgid "2.00x4.00\""
-msgstr "2.00 x 4.00\""
+msgstr "2.00x4.00インチ"
+
+#: ppdc/sample.c:157
 msgid "2.00x5.50\""
-msgstr "2.00 x 5.50\""
+msgstr "2.00x5.50インチ"
+
+#: ppdc/sample.c:158
 msgid "2.25x0.50\""
-msgstr "2.25 x 0.50\""
+msgstr "2.25x0.50インチ"
+
+#: ppdc/sample.c:159
 msgid "2.25x1.25\""
-msgstr "2.25 x 1.50\""
+msgstr "2.25x1.25インチ"
+
+#: ppdc/sample.c:160
 msgid "2.25x4.00\""
-msgstr "2.25 x 4.00\""
+msgstr "2.25x4.00インチ"
+
+#: ppdc/sample.c:161
 msgid "2.25x5.50\""
-msgstr "2.25 x 5.50\""
+msgstr "2.25x5.50インチ"
+
+#: ppdc/sample.c:162
 msgid "2.38x5.50\""
-msgstr "2.38 x 5.50\""
+msgstr "2.38x5.50インチ"
+
+#: ppdc/sample.c:405
 msgid "2.5 inches/sec."
-msgstr "2.5 インチ/秒"
+msgstr "2.5 インチ/秒"
+
+#: ppdc/sample.c:163
 msgid "2.50x1.00\""
-msgstr "2.50 x 1.00\""
+msgstr "2.50x1.00インチ"
+
+#: ppdc/sample.c:164
 msgid "2.50x2.00\""
-msgstr "2.50 x 2.00\""
+msgstr "2.50x2.00インチ"
+
+#: ppdc/sample.c:165
 msgid "2.75x1.25\""
-msgstr "2.75 x 1.25\""
+msgstr "2.75x1.25インチ"
+
+#: ppdc/sample.c:166
 msgid "2.9 x 1\""
-msgstr "2.9 x 1\""
+msgstr "2.9 x 1インチ"
+
+#: ppdc/sample.c:344
 msgid "20"
 msgstr "20"
+
+#: ppdc/sample.c:301
 msgid "20 mm/sec."
-msgstr "20 mm/秒"
+msgstr "20 ミリメートル/秒"
+
+#: ppdc/sample.c:309
 msgid "200 mm/sec."
-msgstr "200 mm/秒"
+msgstr "200 ミリメートル/秒"
+
+#: ppdc/sample.c:205
 msgid "203dpi"
-msgstr "203 dpi"
+msgstr "203dpi"
+
+#: ppdc/sample.c:345
 msgid "21"
 msgstr "21"
+
+#: ppdc/sample.c:346
 msgid "22"
 msgstr "22"
+
+#: ppdc/sample.c:347
 msgid "23"
 msgstr "23"
+
+#: ppdc/sample.c:348
 msgid "24"
 msgstr "24"
+
+#: ppdc/sample.c:213
 msgid "24-Pin Series"
-msgstr "24 ピンシリーズ"
+msgstr "24ピンシリーズ"
+
+#: ppdc/sample.c:222
 msgid "240x72dpi"
-msgstr "240 x 72 dpi"
+msgstr "240x72dpi"
+
+#: ppdc/sample.c:349
 msgid "25"
 msgstr "25"
+
+#: ppdc/sample.c:310
 msgid "250 mm/sec."
-msgstr "250 mm/秒"
+msgstr "250 ミリメートル/秒"
+
+#: ppdc/sample.c:350
 msgid "26"
 msgstr "26"
+
+#: ppdc/sample.c:351
 msgid "27"
 msgstr "27"
+
+#: ppdc/sample.c:352
 msgid "28"
 msgstr "28"
+
+#: ppdc/sample.c:353
 msgid "29"
 msgstr "29"
+
+#: ppdc/sample.c:286
 msgid "3"
 msgstr "3"
+
+#: ppdc/sample.c:358
 msgid "3 inches/sec."
-msgstr "3 インチ/秒"
+msgstr "3 インチ/秒"
+
+#: ppdc/sample.c:167
 msgid "3.00x1.00\""
-msgstr "3.00 x 1.00\""
+msgstr "3.00x1.00インチ"
+
+#: ppdc/sample.c:168
 msgid "3.00x1.25\""
-msgstr "3.00 x 1.25\""
+msgstr "3.00x1.25インチ"
+
+#: ppdc/sample.c:169
 msgid "3.00x2.00\""
-msgstr "3.00 x 2.00\""
+msgstr "3.00x2.00インチ"
+
+#: ppdc/sample.c:170
 msgid "3.00x3.00\""
-msgstr "3.00 x 3.00\""
+msgstr "3.00x3.00インチ"
+
+#: ppdc/sample.c:171
 msgid "3.00x5.00\""
-msgstr "3.00 x 5.00\""
+msgstr "3.00x5.00インチ"
+
+#: ppdc/sample.c:172
 msgid "3.25x2.00\""
-msgstr "3.25 x 2.00\""
+msgstr "3.25x2.00インチ"
+
+#: ppdc/sample.c:173
 msgid "3.25x5.00\""
-msgstr "3.25 x 5.00\""
+msgstr "3.25x5.00インチ"
+
+#: ppdc/sample.c:174
 msgid "3.25x5.50\""
-msgstr "3.25 x 5.50\""
+msgstr "3.25x5.50インチ"
+
+#: ppdc/sample.c:175
 msgid "3.25x5.83\""
-msgstr "3.25 x 5.83\""
+msgstr "3.25x5.83インチ"
+
+#: ppdc/sample.c:176
 msgid "3.25x7.83\""
-msgstr "3.25 x 7.83\""
+msgstr "3.25x7.83インチ"
+
+#: ppdc/sample.c:134
 msgid "3.5\" Disk"
-msgstr "3.5\"  ディスク"
+msgstr "3.5 インチDisk"
+
+#: ppdc/sample.c:143
 msgid "3.5\" Disk - 2 1/8 x 2 3/4\""
-msgstr "3.5\"  ディスク - 2 1/8 x 2 3/4\""
+msgstr "3.5インチ Disk - 2 1/8 x 2 3/4インチ"
+
+#: ppdc/sample.c:177
 msgid "3.50x1.00\""
-msgstr "3.50 x 1.00\""
+msgstr "3.50x1.00インチ"
+
+#: ppdc/sample.c:354
 msgid "30"
 msgstr "30"
+
+#: ppdc/sample.c:302
 msgid "30 mm/sec."
-msgstr "30 mm/秒"
+msgstr "30 ミリメートル/秒"
+
+#: ppdc/sample.c:311
 msgid "300 mm/sec."
-msgstr "300 mm/秒"
+msgstr "300 ミリメートル/秒"
+
+#: ppdc/sample.c:206
 msgid "300dpi"
-msgstr "300 dpi"
+msgstr "300dpi"
+
+#: ppdc/sample.c:382
 msgid "35"
 msgstr "35"
+
+#: ppdc/sample.c:218
 msgid "360dpi"
-msgstr "360 dpi"
+msgstr "360dpi"
+
+#: ppdc/sample.c:217
 msgid "360x180dpi"
-msgstr "360 x 180 dpi"
+msgstr "360x180dpi"
+
+#: ppdc/sample.c:287
 msgid "4"
 msgstr "4"
+
+#: ppdc/sample.c:359
 msgid "4 inches/sec."
-msgstr "4 インチ/秒"
+msgstr "4 インチ/秒"
+
+#: ppdc/sample.c:178
 msgid "4.00x1.00\""
-msgstr "4.00 x 1.00\""
+msgstr "4.00x1.00インチ"
+
+#: ppdc/sample.c:186
 msgid "4.00x13.00\""
-msgstr "4.00 x 13.00\""
+msgstr "4.00x13.00インチ"
+
+#: ppdc/sample.c:179
 msgid "4.00x2.00\""
-msgstr "4.00 x 2.00\""
+msgstr "4.00x2.00インチ"
+
+#: ppdc/sample.c:180
 msgid "4.00x2.50\""
-msgstr "4.00 x 2.50\""
+msgstr "4.00x2.50インチ"
+
+#: ppdc/sample.c:181
 msgid "4.00x3.00\""
-msgstr "4.00 x 3.00\""
+msgstr "4.00x3.00インチ"
+
+#: ppdc/sample.c:182
 msgid "4.00x4.00\""
-msgstr "4.00 x 4.00\""
+msgstr "4.00x4.00インチ"
+
+#: ppdc/sample.c:183
 msgid "4.00x5.00\""
-msgstr "4.00 x 5.00\""
+msgstr "4.00x5.00インチ"
+
+#: ppdc/sample.c:184
 msgid "4.00x6.00\""
-msgstr "4.00 x 6.00\""
+msgstr "4.00x6.00インチ"
+
+#: ppdc/sample.c:185
 msgid "4.00x6.50\""
-msgstr "4.00 x 6.50\""
+msgstr "4.00x6.50インチ"
+
+#: ppdc/sample.c:383
 msgid "40"
 msgstr "40"
+
+#: ppdc/sample.c:303
 msgid "40 mm/sec."
-msgstr "40 mm/秒"
+msgstr "40 ミリメートル/秒"
+
+#: ppdc/sample.c:384
 msgid "45"
 msgstr "45"
+
+#: ppdc/sample.c:288
 msgid "5"
 msgstr "5"
+
+#: ppdc/sample.c:409
 msgid "5 inches/sec."
-msgstr "5 インチ/秒"
+msgstr "5 インチ/秒"
+
+#: ppdc/sample.c:385
 msgid "50"
 msgstr "50"
+
+#: ppdc/sample.c:386
 msgid "55"
 msgstr "55"
+
+#: ppdc/sample.c:289
 msgid "6"
 msgstr "6"
+
+#: ppdc/sample.c:410
 msgid "6 inches/sec."
-msgstr "6 インチ/秒"
+msgstr "6 インチ/秒"
+
+#: ppdc/sample.c:187
 msgid "6.00x1.00\""
-msgstr "6.00 x 1.00\""
+msgstr "6.00x1.00\""
+
+#: ppdc/sample.c:188
 msgid "6.00x2.00\""
-msgstr "6.00 x 2.00\""
+msgstr "6.00x2.00\""
+
+#: ppdc/sample.c:189
 msgid "6.00x3.00\""
-msgstr "6.00 x 3.00\""
+msgstr "6.00x3.00\""
+
+#: ppdc/sample.c:190
 msgid "6.00x4.00\""
-msgstr "6.00 x 4.00\""
+msgstr "6.00x4.00\""
+
+#: ppdc/sample.c:191
 msgid "6.00x5.00\""
-msgstr "6.00 x 5.00\""
+msgstr "6.00x5.00\""
+
+#: ppdc/sample.c:192
 msgid "6.00x6.00\""
-msgstr "6.00 x 6.00\""
+msgstr "6.00x6.00\""
+
+#: ppdc/sample.c:193
 msgid "6.00x6.50\""
-msgstr "6.00 x 6.50\""
+msgstr "6.00x6.50\""
+
+#: ppdc/sample.c:387
 msgid "60"
 msgstr "60"
+
+#: ppdc/sample.c:304
 msgid "60 mm/sec."
-msgstr "60 mm/秒"
+msgstr "60 mm/秒"
+
+#: ppdc/sample.c:255
 msgid "600 DPI Grayscale"
-msgstr "600 DPI グレイスケール"
+msgstr "600 DPI グレースケール"
+
+#: ppdc/sample.c:233
 msgid "600dpi"
-msgstr "600 dpi"
+msgstr "600dpi"
+
+#: ppdc/sample.c:214
 msgid "60dpi"
-msgstr "60 dpi"
+msgstr "60dpi"
+
+#: ppdc/sample.c:220
 msgid "60x720dpi"
-msgstr "60 x 720 dpi"
+msgstr "60x720dpi"
+
+#: ppdc/sample.c:388
 msgid "65"
 msgstr "65"
+
+#: ppdc/sample.c:290
 msgid "7"
 msgstr "7"
+
+#: ppdc/sample.c:412
 msgid "7 inches/sec."
-msgstr "7 インチ/秒"
+msgstr "7 インチ/秒"
+
+#: ppdc/sample.c:6
 msgid "7 x 9\""
 msgstr "7 x 9\""
+
+#: ppdc/sample.c:389
 msgid "70"
 msgstr "70"
+
+#: ppdc/sample.c:224
 msgid "720dpi"
-msgstr "720 dpi"
+msgstr "720dpi"
+
+#: ppdc/sample.c:390
 msgid "75"
 msgstr "75"
+
+#: ppdc/sample.c:291
 msgid "8"
 msgstr "8"
+
+#: ppdc/sample.c:413
 msgid "8 inches/sec."
-msgstr "8 インチ/秒"
+msgstr "8 インチ/秒"
+
+#: ppdc/sample.c:7
 msgid "8 x 10\""
 msgstr "8 x 10\""
+
+#: ppdc/sample.c:194
 msgid "8.00x1.00\""
-msgstr "8.00 x 1.00\""
+msgstr "8.00x1.00\""
+
+#: ppdc/sample.c:195
 msgid "8.00x2.00\""
-msgstr "8.00 x 2.00\""
+msgstr "8.00x2.00\""
+
+#: ppdc/sample.c:196
 msgid "8.00x3.00\""
-msgstr "8.00 x 3.00\""
+msgstr "8.00x3.00\""
+
+#: ppdc/sample.c:197
 msgid "8.00x4.00\""
-msgstr "8.00 x 4.00\""
+msgstr "8.00x4.00\""
+
+#: ppdc/sample.c:198
 msgid "8.00x5.00\""
-msgstr "8.00 x 5.00\""
+msgstr "8.00x5.00\""
+
+#: ppdc/sample.c:199
 msgid "8.00x6.00\""
-msgstr "8.00 x 6.00\""
+msgstr "8.00x6.00\""
+
+#: ppdc/sample.c:200
 msgid "8.00x6.50\""
-msgstr "8.00 x 6.50\""
+msgstr "8.00x6.50\""
+
+#: ppdc/sample.c:391
 msgid "80"
 msgstr "80"
+
+#: ppdc/sample.c:305
 msgid "80 mm/sec."
-msgstr "80 mm/秒"
+msgstr "80 mm/秒"
+
+#: ppdc/sample.c:392
 msgid "85"
 msgstr "85"
+
+#: ppdc/sample.c:292
 msgid "9"
 msgstr "9"
+
+#: ppdc/sample.c:414
 msgid "9 inches/sec."
-msgstr "9 インチ/秒"
+msgstr "9 インチ/秒"
+
+#: ppdc/sample.c:8
 msgid "9 x 11\""
 msgstr "9 x 11\""
+
+#: ppdc/sample.c:9
 msgid "9 x 12\""
 msgstr "9 x 12\""
+
+#: ppdc/sample.c:219
 msgid "9-Pin Series"
-msgstr "9 ピンシリーズ"
+msgstr "9-Pin Series"
+
+#: ppdc/sample.c:393
 msgid "90"
 msgstr "90"
+
+#: ppdc/sample.c:394
 msgid "95"
 msgstr "95"
+
+#: berkeley/lpc.c:218
 msgid "?Invalid help command unknown\n"
-msgstr "?無効なヘルプコマンド 不明\n"
+msgstr "?無効なヘルプコマンドです\n"
+
+#: cgi-bin/admin.c:2331
 msgid "A Samba password is required to export printer drivers!"
-msgstr "プリンタドライバを書き出すには Samba パスワードが必要です!"
+msgstr "プリンタードライバーをエクスポートするには Samba のパスワードが必要です!"
+
+#: cgi-bin/admin.c:2327
 msgid "A Samba username is required to export printer drivers!"
-msgstr "プリンタドライバを書き出すには Samba ユーザ名が必要です!"
+msgstr "プリンタードライバーをエクスポートするには、Samba のユーザー名が必要です!"
+
+#: scheduler/ipp.c:2378
+#, c-format
 msgid "A class named \"%s\" already exists!"
-msgstr "“%s”という名前のクラスはすでに存在します!"
+msgstr "\"%s\" という名前のクラスはすでに存在します!"
+
+#: scheduler/ipp.c:1001
+#, c-format
 msgid "A printer named \"%s\" already exists!"
-msgstr "“%s”という名前のプリンタはすでに存在します!"
+msgstr "\"%s\" という名前のプリンターはすでに存在します!"
+
+#: ppdc/sample.c:10
 msgid "A0"
 msgstr "A0"
+
+#: ppdc/sample.c:11
 msgid "A1"
 msgstr "A1"
+
+#: ppdc/sample.c:24
 msgid "A10"
 msgstr "A10"
+
+#: ppdc/sample.c:12
 msgid "A2"
 msgstr "A2"
+
+#: ppdc/sample.c:13
 msgid "A3"
 msgstr "A3"
+
+#: ppdc/sample.c:14
 msgid "A3 (Oversize)"
-msgstr "A3(特大)"
+msgstr "A3 (特大)"
+
+#: ppdc/sample.c:15
 msgid "A4"
 msgstr "A4"
+
+#: ppdc/sample.c:16
 msgid "A4 (Oversize)"
-msgstr "A4(特大)"
+msgstr "A4 (特大)"
+
+#: ppdc/sample.c:17
 msgid "A4 (Small)"
-msgstr "A4(小)"
+msgstr "A4 (小)"
+
+#: ppdc/sample.c:18
 msgid "A5"
 msgstr "A5"
+
+#: ppdc/sample.c:19
 msgid "A5 (Oversize)"
-msgstr "A5(特大)"
+msgstr "A5 (特大)"
+
+#: ppdc/sample.c:20
 msgid "A6"
 msgstr "A6"
+
+#: ppdc/sample.c:21
 msgid "A7"
 msgstr "A7"
+
+#: ppdc/sample.c:22
 msgid "A8"
 msgstr "A8"
+
+#: ppdc/sample.c:23
 msgid "A9"
 msgstr "A9"
+
+#: ppdc/sample.c:25
 msgid "ANSI A"
 msgstr "ANSI A"
+
+#: ppdc/sample.c:26
 msgid "ANSI B"
 msgstr "ANSI B"
+
+#: ppdc/sample.c:27
 msgid "ANSI C"
 msgstr "ANSI C"
+
+#: ppdc/sample.c:28
 msgid "ANSI D"
 msgstr "ANSI D"
+
+#: ppdc/sample.c:29
 msgid "ANSI E"
 msgstr "ANSI E"
+
+#: ppdc/sample.c:30
 msgid "ARCH A"
 msgstr "ARCH A"
+
+#: ppdc/sample.c:31
 msgid "ARCH B"
 msgstr "ARCH B"
+
+#: ppdc/sample.c:32
 msgid "ARCH C"
 msgstr "ARCH C"
+
+#: ppdc/sample.c:33
 msgid "ARCH D"
 msgstr "ARCH D"
+
+#: ppdc/sample.c:34
 msgid "ARCH E"
 msgstr "ARCH E"
+
+#: cgi-bin/classes.c:154 cgi-bin/printers.c:157
 msgid "Accept Jobs"
-msgstr "ジョブを受け入れる"
+msgstr "ジョブの受け付け"
+
+#: cups/http-support.c:1194
 msgid "Accepted"
-msgstr "受け入れ済み"
+msgstr "受け付けました"
+
+#: cgi-bin/admin.c:480
 msgid "Add Class"
-msgstr "クラスを追加"
+msgstr "クラスの追加"
+
+#: cgi-bin/admin.c:772
 msgid "Add Printer"
-msgstr "プリンタを追加"
+msgstr "プリンターの追加"
+
+#: cgi-bin/admin.c:355 cgi-bin/admin.c:388 cgi-bin/admin.c:436
+#: cgi-bin/admin.c:446
 msgid "Add RSS Subscription"
-msgstr "RSS 照会先を追加"
+msgstr "RSS 購読を追加"
+
+#: ppdc/sample.c:126
 msgid "Address"
-msgstr "住所"
+msgstr "アドレス"
+
+#: ppdc/sample.c:135
 msgid "Address - 1 1/8 x 3 1/2\""
-msgstr "住所 - 1 1/8 x 3 1/2\""
+msgstr "アドレス - 1 1/8 x 3 1/2\""
+
+#: cgi-bin/admin.c:187 cgi-bin/admin.c:218 cgi-bin/admin.c:2749
 msgid "Administration"
 msgstr "管理"
+
+#: ppdc/sample.c:401
 msgid "Always"
-msgstr "常に"
+msgstr "常に有効"
+
+#: backend/socket.c:126
 msgid "AppSocket/HP JetDirect"
-msgstr "AppSocket/HP JetDirect"
+msgstr "AppSocket/HP JetDirect"
+
+#: ppdc/sample.c:422
 msgid "Applicator"
-msgstr "アプリケータ"
+msgstr "アプリケーター"
+
+#: scheduler/ipp.c:1123
+#, c-format
 msgid "Attempt to set %s printer-state to bad value %d!"
-msgstr "%s printer-state に不正な値 %d を設定しようとしています!"
+msgstr "%s printer-state に 不正な値 %d を設定しようとしています!"
+
+#: scheduler/ipp.c:331
+#, c-format
 msgid "Attribute groups are out of order (%x < %x)!"
-msgstr "属性グループの順序が正しくありません(%x < %x)!"
+msgstr "属性グループは範囲外です (%x < %x)!"
+
+#: ppdc/sample.c:35
 msgid "B0"
 msgstr "B0"
+
+#: ppdc/sample.c:37
 msgid "B1"
 msgstr "B1"
+
+#: ppdc/sample.c:36
 msgid "B10"
 msgstr "B10"
+
+#: ppdc/sample.c:38
 msgid "B2"
 msgstr "B2"
+
+#: ppdc/sample.c:39
 msgid "B3"
 msgstr "B3"
+
+#: ppdc/sample.c:40
 msgid "B4"
 msgstr "B4"
+
+#: ppdc/sample.c:41
 msgid "B5"
 msgstr "B5"
+
+#: ppdc/sample.c:42
 msgid "B6"
 msgstr "B6"
+
+#: ppdc/sample.c:43
 msgid "B7"
 msgstr "B7"
+
+#: ppdc/sample.c:44
 msgid "B8"
 msgstr "B8"
+
+#: ppdc/sample.c:45
 msgid "B9"
 msgstr "B9"
+
+#: cups/dest.c:317
 msgid "Bad NULL dests pointer"
-msgstr "NULL 送信先サーバポインタは正しくありません"
+msgstr "不正な NULL 送信先ポインター"
+
+#: cups/ppd.c:341
 msgid "Bad OpenGroup"
-msgstr "OpenGroup が正しくありません"
+msgstr "不正な OpenGroup"
+
+#: cups/ppd.c:343
 msgid "Bad OpenUI/JCLOpenUI"
-msgstr "OpenUI/JCLOpenUI が正しくありません"
+msgstr "不正な OpenUI/JCLOpenUI"
+
+#: cups/ppd.c:345
 msgid "Bad OrderDependency"
-msgstr "OrderDependency が正しくありません"
+msgstr "不正な OrderDependency"
+
+#: cups/http-support.c:1209
 msgid "Bad Request"
-msgstr "Request が正しくありません"
+msgstr "不正なリクエスト"
+
+#: cups/snmp.c:1001
 msgid "Bad SNMP version number"
-msgstr "SNMP バージョン番号が正しくありません"
+msgstr "不正な SNMP バージョン番号"
+
+#: cups/ppd.c:346
 msgid "Bad UIConstraints"
-msgstr "UIConstraints が正しくありません"
+msgstr "不正な UIConstraints"
+
+#: scheduler/ipp.c:1423
+#, c-format
 msgid "Bad copies value %d."
-msgstr "部数値 %d が正しくありません。"
+msgstr "%d は不正なコピー値です。"
+
+#: cups/ppd.c:354
 msgid "Bad custom parameter"
-msgstr "カスタムパラメータが正しくありません"
+msgstr "不正なカスタムパラメーター"
+
+#: cups/http-support.c:1333
+#, c-format
 msgid "Bad device URI \"%s\"!\n"
-msgstr "デバイス URI “%s”が正しくありません!\n"
+msgstr "\"%s\" は無効なデバイス URI です!\n"
+
+#: scheduler/ipp.c:2496
+#, c-format
 msgid "Bad device-uri \"%s\"!"
-msgstr "device-uri “%s”が正しくありません!"
+msgstr "\"%s\" は無効な device-uri です!"
+
+#: scheduler/ipp.c:2536
+#, c-format
 msgid "Bad device-uri scheme \"%s\"!"
-msgstr "device-uri スキーム“%s”が正しくありません!"
+msgstr "\"%s\" は無効な device-uri スキーマです!"
+
+#: scheduler/ipp.c:9887 scheduler/ipp.c:11362
+#, c-format
 msgid "Bad document-format \"%s\"!"
-msgstr "document-format “%s”が正しくありません!"
+msgstr "\"%s\" は不正な document-format です!"
+
+#: cups/util.c:936
 msgid "Bad filename buffer!"
-msgstr "ファイル名バッファが正しくありません!"
+msgstr "不正なファイル名バッファーです!"
+
+#: ppdc/ppdc-import.cxx:230
+#, c-format
 msgid "Bad font attribute: %s\n"
-msgstr "フォント属性が正しくありません:%s\n"
+msgstr "不正なフォント属性: %s\n"
+
+#: scheduler/ipp.c:10482
 msgid "Bad job-priority value!"
-msgstr "job-priority 値が正しくありません!"
+msgstr "不正な job-priority 値です!"
+
+#: scheduler/ipp.c:1453
+#, c-format
 msgid "Bad job-sheets value \"%s\"!"
-msgstr "job-sheets 値“%s”が正しくありません!"
+msgstr "\"%s\" は不正な job-sheets 値です!"
+
+#: scheduler/ipp.c:1437
 msgid "Bad job-sheets value type!"
-msgstr "job-sheets 値タイプが正しくありません!"
+msgstr "不正な job-sheets 値タイプ です!"
+
+#: scheduler/ipp.c:10512
 msgid "Bad job-state value!"
-msgstr "job-state 値が正しくありません!"
+msgstr "不正な job-state 値です!"
+
+#: scheduler/ipp.c:3656 scheduler/ipp.c:4017 scheduler/ipp.c:6622
+#: scheduler/ipp.c:6764 scheduler/ipp.c:8034 scheduler/ipp.c:8315
+#: scheduler/ipp.c:9158 scheduler/ipp.c:9383 scheduler/ipp.c:9800
+#: scheduler/ipp.c:10375
+#, c-format
 msgid "Bad job-uri attribute \"%s\"!"
-msgstr "job-uri 属性“%s”が正しくありません!"
+msgstr "\"%s\" は無効な job-uri 属性です!"
+
+#: scheduler/ipp.c:2117 scheduler/ipp.c:6169
+#, c-format
 msgid "Bad notify-pull-method \"%s\"!"
-msgstr "notify-pull-method “%s”が正しくありません!"
+msgstr "\"%s\" は無効な notify-pull-method です!"
+
+#: scheduler/ipp.c:2081 scheduler/ipp.c:6133
+#, c-format
 msgid "Bad notify-recipient-uri URI \"%s\"!"
-msgstr "notify-recipient-uri URI “%s”が正しくありません!"
+msgstr "URI \"%s\" は不正な notify-recipient-uri です!"
+
+#: scheduler/ipp.c:1469
+#, c-format
 msgid "Bad number-up value %d."
-msgstr "number-up 値 %d が正しくありません。"
+msgstr "%d は不正な number-up 値です。"
+
+#: cups/adminutil.c:303
+#, c-format
 msgid "Bad option + choice on line %d!"
-msgstr "行 %d のオプションと選択が正しくありません!"
+msgstr "%d 行に不正なオプションと選択があります!"
+
+#: scheduler/ipp.c:1486
+#, c-format
 msgid "Bad page-ranges values %d-%d."
-msgstr "page-ranges 値 %d 〜 %d が正しくありません。"
+msgstr "%d-%d は不正な page-ranges 値です。"
+
+#: scheduler/ipp.c:2580
+#, c-format
 msgid "Bad port-monitor \"%s\"!"
-msgstr "port-monitor “%s”が正しくありません!"
+msgstr "\"%s\" は無効な port-monitor です!"
+
+#: scheduler/ipp.c:2628
+#, c-format
 msgid "Bad printer-state value %d!"
-msgstr "printer-state 値 %d が正しくありません!"
+msgstr "%d は無効な printer-state 値です!"
+
+#: scheduler/ipp.c:298
+#, c-format
 msgid "Bad request version number %d.%d!"
-msgstr "要求バージョン番号 %d.%d が正しくありません!"
+msgstr "バージョン番号 %d.%d は無効なリクエストです!"
+
+#: cgi-bin/admin.c:1377
 msgid "Bad subscription ID!"
-msgstr "照会先 ID が正しくありません!"
+msgstr "不正なサブスクリプション ID です!"
+
+#: cgi-bin/admin.c:3289 cgi-bin/admin.c:3512
 msgid "Banners"
 msgstr "バナー"
+
+#: filter/bannertops.c:662
 msgid "Billing Information: "
-msgstr "請求情報:"
+msgstr "課金情報: "
+
+#: ppdc/sample.c:259
 msgid "Bond Paper"
 msgstr "ボンド紙"
+
+#: ppdc/sample.c:56
 msgid "C0 Envelope"
-msgstr "C0 封筒"
+msgstr "C0 Envelope"
+
+#: ppdc/sample.c:57
 msgid "C1 Envelope"
-msgstr "C1 封筒"
+msgstr "C1 Envelope"
+
+#: ppdc/sample.c:58
 msgid "C2 Envelope"
-msgstr "C2 封筒"
+msgstr "C2 Envelope"
+
+#: ppdc/sample.c:59
 msgid "C3 Envelope"
-msgstr "C3 封筒"
+msgstr "C3 Envelope"
+
+#: ppdc/sample.c:46
 msgid "C4"
 msgstr "C4"
+
+#: ppdc/sample.c:60
 msgid "C4 Envelope"
-msgstr "C4 封筒"
+msgstr "C4 Envelope"
+
+#: ppdc/sample.c:47
 msgid "C5"
 msgstr "C5"
+
+#: ppdc/sample.c:61
 msgid "C5 Envelope"
-msgstr "C5 封筒"
+msgstr "C5 Envelope"
+
+#: ppdc/sample.c:48
 msgid "C6"
 msgstr "C6"
+
+#: ppdc/sample.c:63
 msgid "C6 Envelope"
-msgstr "C6 封筒"
+msgstr "C6 Envelope"
+
+#: ppdc/sample.c:62
 msgid "C65 Envelope"
-msgstr "C65 封筒"
+msgstr "C65 Envelope"
+
+#: ppdc/sample.c:64
 msgid "C7 Envelope"
-msgstr "C7 封筒"
+msgstr "C7 Envelope"
+
+#: ppdc/sample.c:226
 msgid "CMYK"
 msgstr "CMYK"
+
+#: ppdc/sample.c:335
 msgid "CPCL Label Printer"
-msgstr "CPCL ラベルプリンタ"
+msgstr "CPCL Label Printer"
+
+#: cgi-bin/admin.c:1378 cgi-bin/admin.c:1417 cgi-bin/admin.c:1427
 msgid "Cancel RSS Subscription"
-msgstr "RSS 照会先をキャンセル"
+msgstr "RSS 購読をキャンセル"
+
+#: cgi-bin/admin.c:1596 cgi-bin/admin.c:1760 cgi-bin/admin.c:1772
+#: cgi-bin/admin.c:1783
 msgid "Change Settings"
-msgstr "設定を変更"
+msgstr "設定の変更"
+
+#: scheduler/ipp.c:2129 scheduler/ipp.c:6181
+#, c-format
 msgid "Character set \"%s\" not supported!"
-msgstr "文字セット“%s”には対応していません!"
+msgstr "文字セット \"%s\" はサポートされていません!"
+
+#: ppdc/sample.c:65
 msgid "Chou3 Envelope"
-msgstr "長 3 封筒"
+msgstr "封筒 長形3号"
+
+#: ppdc/sample.c:66
 msgid "Chou4 Envelope"
-msgstr "長 4 封筒"
+msgstr "封筒 長形4号"
+
+#: cgi-bin/classes.c:180 cgi-bin/classes.c:307
 msgid "Classes"
 msgstr "クラス"
+
+#: cgi-bin/printers.c:167
 msgid "Clean Print Heads"
-msgstr "印字ヘッドを清掃"
+msgstr "プリントヘッドクリーニング"
+
+#: ppdc/sample.c:253
 msgid "Color"
 msgstr "カラー"
+
+#: ppdc/sample.c:225
 msgid "Color Mode"
 msgstr "カラーモード"
-msgid "Commands may be abbreviated.  Commands are:\n\nexit    help    quit    status  ?\n"
-msgstr "コマンドは短縮形でもかまいません。コマンド:\n\nexit    help    quit    status  ?\n"
+
+#: berkeley/lpc.c:209
+msgid ""
+"Commands may be abbreviated.  Commands are:\n"
+"\n"
+"exit    help    quit    status  ?\n"
+msgstr ""
+"コマンドは短縮できます。  コマンド:\n"
+"\n"
+"exit    help    quit    status  ?\n"
+
+#: cups/snmp.c:1005
 msgid "Community name uses indefinite length"
-msgstr "コミュニティ名に使われている長さが不定です"
+msgstr "コミュニティ名の長さが不定"
+
+#: cups/http-support.c:1182
 msgid "Continue"
-msgstr "続ける"
+msgstr "継続"
+
+#: ppdc/sample.c:337
 msgid "Continuous"
 msgstr "連続"
+
+#: scheduler/ipp.c:8608 scheduler/ipp.c:8624 scheduler/ipp.c:9903
+#, c-format
 msgid "Could not scan type \"%s\"!"
-msgstr "タイプ“%s”をスキャンできませんでした!"
+msgstr "タイプ \"%s\" を検査できませんでした!"
+
+#: backend/ipp.c:1668
 msgid "Cover open."
 msgstr "カバーが開いています。"
+
+#: cups/http-support.c:1191
 msgid "Created"
-msgstr "作成済み"
+msgstr "ジョブ作成"
+
+#: filter/bannertops.c:850
 msgid "Created On: "
-msgstr "作成日時:"
+msgstr "ジョブ作成日: "
+
+#: cups/ppd.c:1068 cups/ppd.c:1108 cups/ppd.c:1322 cups/ppd.c:1425
 msgid "Custom"
 msgstr "カスタム"
+
+#: ppdc/sample.c:331
 msgid "CustominCutInterval"
 msgstr "CustominCutInterval"
+
+#: ppdc/sample.c:329
 msgid "CustominTearInterval"
 msgstr "CustominTearInterval"
+
+#: ppdc/sample.c:315
 msgid "Cut"
 msgstr "カット"
+
+#: ppdc/sample.c:423
 msgid "Cutter"
 msgstr "カッター"
+
+#: ppdc/sample.c:49
 msgid "DL"
 msgstr "DL"
+
+#: ppdc/sample.c:67
 msgid "DL Envelope"
-msgstr "DL 封筒"
+msgstr "DL Envelope"
+
+#: ppdc/sample.c:211
 msgid "Dark"
 msgstr "濃い"
+
+#: ppdc/sample.c:207
 msgid "Darkness"
 msgstr "濃さ"
+
+#: cgi-bin/admin.c:2056 cgi-bin/admin.c:2067 cgi-bin/admin.c:2112
 msgid "Delete Class"
-msgstr "クラスを削除"
+msgstr "クラスの削除"
+
+#: cgi-bin/admin.c:2141 cgi-bin/admin.c:2152 cgi-bin/admin.c:2197
 msgid "Delete Printer"
-msgstr "プリンタを削除"
+msgstr "プリンターの削除"
+
+#: filter/bannertops.c:731
 msgid "Description: "
-msgstr "説明:"
+msgstr "説明: "
+
+#: ppdc/sample.c:252
 msgid "DeskJet Series"
-msgstr "DeskJet シリーズ"
+msgstr "DeskJet Series"
+
+#: scheduler/ipp.c:1389
+#, c-format
 msgid "Destination \"%s\" is not accepting jobs."
-msgstr "送信先“%s”がジョブを受け入れません。"
+msgstr "宛先 \"%s\" はジョブを受け付けていません。"
+
+#: backend/ipp.c:1702
 msgid "Developer almost empty."
-msgstr "現像液がもうすぐ空になります。"
+msgstr "現像剤が無くなりかけています。"
+
+#: backend/ipp.c:1704
 msgid "Developer empty!"
-msgstr "現像液が空です!"
-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"
+msgstr "現像剤が無くなりました!"
+
+#: systemv/lpinfo.c:305
+#, 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"
+
+#: ppdc/sample.c:408
 msgid "Direct Thermal Media"
-msgstr "直接感熱メディア"
+msgstr "感熱紙"
+
+#: ppdc/sample.c:317
 msgid "Disabled"
 msgstr "無効"
+
+#: scheduler/ipp.c:6669
+#, c-format
 msgid "Document %d not found in job %d."
-msgstr "書類 %d がジョブ %d 内で見つかりませんでした。"
+msgstr "ドキュメント %d がジョブ %d に見つかりません。"
+
+#: backend/ipp.c:1672
 msgid "Door open."
 msgstr "ドアが開いています。"
+
+#: ppdc/sample.c:50
 msgid "Double Postcard"
 msgstr "往復はがき"
+
+#: filter/bannertops.c:816
 msgid "Driver Name: "
-msgstr "ドライバ名:"
+msgstr "ドライバー名: "
+
+#: filter/bannertops.c:827
 msgid "Driver Version: "
-msgstr "ドライバのバージョン:"
+msgstr "ドライバーバージョン: "
+
+#: ppdc/sample.c:247
 msgid "Duplexer"
-msgstr "両面印刷機構"
+msgstr "両面オプション"
+
+#: ppdc/sample.c:201
 msgid "Dymo"
 msgstr "Dymo"
+
+#: filter/pstops.c:443
+#, c-format
 msgid "EMERG: Unable to allocate memory for page info: %s\n"
-msgstr "EMERG: ページ情報にメモリを割り当てることができません:%s\n"
+msgstr "EMERG: ページ情報のメモリー割り当てができません: %s\n"
+
+#: filter/pstops.c:436
+#, c-format
 msgid "EMERG: Unable to allocate memory for pages array: %s\n"
-msgstr "EMERG: ページ配列にメモリを割り当てることができません:%s\n"
+msgstr "EMERG: ページアレイのメモリー割り当てができません: %s\n"
+
+#: ppdc/sample.c:403
 msgid "EPL1 Label Printer"
-msgstr "EPL1 ラベルプリンタ"
+msgstr "EPL1 Label Printer"
+
+#: ppdc/sample.c:406
 msgid "EPL2 Label Printer"
-msgstr "EPL2 ラベルプリンタ"
+msgstr "EPL2 Label Printer"
+
+#: filter/pstops.c:703
+#, c-format
 msgid "ERROR: Bad %%BoundingBox: comment seen!\n"
-msgstr "ERROR: %%BoundingBox が正しくありません:コメントがあります!\n"
+msgstr "ERROR: 不正な %%BoundingBox: コメントがあります!\n"
+
+#: filter/pstops.c:2210
+#, c-format
 msgid "ERROR: Bad %%IncludeFeature: comment!\n"
-msgstr "ERROR: %%IncludeFeature が正しくありません:コメント!\n"
+msgstr "ERROR: 不正な %%IncludeFeature: コメントです!\n"
+
+#: filter/pstops.c:1280 filter/pstops.c:1286
+#, c-format
 msgid "ERROR: Bad %%Page: comment in file!\n"
-msgstr "ERROR: %%Page が正しくありません:ファイルにコメントがあります!\n"
+msgstr "ERROR: 不正な %%Page: コメントがファイルにあります!\n"
+
+#: filter/pstops.c:1356
+#, c-format
 msgid "ERROR: Bad %%PageBoundingBox: comment in file!\n"
-msgstr "ERROR: %%PageBoundingBox が正しくありません:ファイルにコメントがあります!\n"
+msgstr "ERROR: 不正な %%PageBoundingBox: コメントがファイルにあります!\n"
+
+#: backend/scsi-irix.c:100 backend/scsi-linux.c:114
+#, c-format
 msgid "ERROR: Bad SCSI device file \"%s\"!\n"
-msgstr "ERROR: SCSI デバイスファイル“%s”が正しくありません!\n"
+msgstr "ERROR: 不正な SCSI デバイスファイル \"%s\" です!\n"
+
+#: filter/pstext.c:276 filter/texttops.c:284 filter/texttops.c:295
+#, c-format
 msgid "ERROR: Bad charset file %s\n"
-msgstr "ERROR: 文字セットファイル %s が正しくありません\n"
+msgstr "ERROR: 不正な charset ファイル %s です\n"
+
+#: filter/texttops.c:453
+#, c-format
 msgid "ERROR: Bad charset type %s\n"
-msgstr "ERROR: 文字セットタイプ %s が正しくありません\n"
+msgstr "ERROR: 不正な charset タイプ %s です\n"
+
+#: filter/textcommon.c:613
+#, c-format
 msgid "ERROR: Bad columns value %d!\n"
-msgstr "ERROR: 列値 %d が正しくありません!\n"
+msgstr "ERROR: 不正な columns 値 %d です!\n"
+
+#: filter/textcommon.c:624
+#, c-format
 msgid "ERROR: Bad cpi value %f!\n"
-msgstr "ERROR: cpi 値 %f が正しくありません!\n"
+msgstr "ERROR: 不正な cpi 値 %f です!\n"
+
+#: filter/pstext.c:320 filter/pstext.c:357 filter/texttops.c:348
+#: filter/texttops.c:384
+#, c-format
 msgid "ERROR: Bad font description line: %s\n"
-msgstr "ERROR: フォント説明行が正しくありません:%s\n"
+msgstr "ERROR: 不正なフォント記述行: %s\n"
+
+#: filter/textcommon.c:635
+#, c-format
 msgid "ERROR: Bad lpi value %f!\n"
-msgstr "ERROR: lpi 値 %f が正しくありません!\n"
+msgstr "ERROR: 不正な lpi 値 %f です!\n"
+
+#: filter/imagetoraster.c:460
 msgid "ERROR: Bad page setup!\n"
-msgstr "ERROR: ページ設定が正しくありません!\n"
+msgstr "ERROR: 不正なページ設定です!\n"
+
+#: filter/pstext.c:334 filter/texttops.c:361
+#, c-format
 msgid "ERROR: Bad text direction %s\n"
-msgstr "ERROR: テキスト方向 %s が正しくありません\n"
+msgstr "ERROR: 不正な テキスト方向 %s です\n"
+
+#: filter/pstext.c:371 filter/texttops.c:397
+#, c-format
 msgid "ERROR: Bad text width %s\n"
-msgstr "ERROR: テキスト幅 %s が正しくありません\n"
+msgstr "ERROR: 不正な テキスト幅 %s です\n"
+
+#: backend/ipp.c:735
 msgid "ERROR: Destination printer does not exist!\n"
-msgstr "ERROR: 送信先プリンタが存在しません!\n"
+msgstr "ERROR: 送信先のプリンターが存在しません!\n"
+
+#: filter/pstops.c:692
+#, c-format
 msgid "ERROR: Duplicate %%BoundingBox: comment seen!\n"
-msgstr "ERROR: %%BoundingBox が重複しています:コメントがあります!\n"
+msgstr "ERROR: 重複した %%BoundingBox: コメントがあります!\n"
+
+#: filter/pstops.c:645
+#, c-format
 msgid "ERROR: Duplicate %%Pages: comment seen!\n"
-msgstr "ERROR: %%Pages が重複しています:コメントがあります!\n"
+msgstr "ERROR: 重複した %%Pages: コメントがあります!\n"
+
+#: backend/ipp.c:457 filter/pstops.c:302
 msgid "ERROR: Empty print file!\n"
-msgstr "ERROR: プリントファイルが空です!\n"
+msgstr "ERROR: 空のプリントファイルです!\n"
+
+#: backend/pap.c:838
+#, c-format
 msgid "ERROR: Error %d sending PAPSendData request: %s\n"
-msgstr "ERROR: PAPSendData 要求を送信中のエラー %d:%s\n"
+msgstr "ERROR: エラー %d PAPSendData request の送信: %s\n"
+
+#: ppdc/ppdc-catalog.cxx:335 ppdc/ppdc-catalog.cxx:347
+#, c-format
 msgid "ERROR: Expected quoted string on line %d of %s!\n"
-msgstr "ERROR: %2$s の行 %1$d に引用文字列が必要です!\n"
+msgstr "ERROR: %d 行: %s には引用符で囲まれた文字列が必要です!\n"
+
+#: backend/usb-darwin.c:364 backend/usb-darwin.c:422 backend/usb-darwin.c:487
+#: backend/usb-darwin.c:505
 msgid "ERROR: Fatal USB error!\n"
-msgstr "ERROR: 致命的な USB エラー!\n"
+msgstr "ERROR: 致命的な USB エラーです!\n"
+
+#: filter/hpgl-input.c:139
 msgid "ERROR: Invalid HP-GL/2 command seen, unable to print file!\n"
-msgstr "ERROR: 無効な HP-GL/2 コマンドがあるため、ファイルをプリントできません!\n"
+msgstr "ERROR: 無効な HP-GL/2 コマンドがあり、ファイルをプリントできません!\n"
+
+#: filter/pstops.c:1764
+#, c-format
 msgid "ERROR: Missing %%EndProlog!\n"
-msgstr "ERROR: %%EndProlog がありません!\n"
+msgstr "ERROR: %%EndProlog が見つかりません!\n"
+
+#: filter/pstops.c:1835
+#, c-format
 msgid "ERROR: Missing %%EndSetup!\n"
-msgstr "ERROR: %%EndSetup がありません!\n"
+msgstr "ERROR: %%EndSetup が見つかりません!\n"
+
+#: backend/ipp.c:243
 msgid "ERROR: Missing device URI on command-line and no DEVICE_URI environment variable!\n"
-msgstr "ERROR: コマンドラインにデバイス URI が入力されていないので、DEVICE_URI 環境変数がありません!\n"
+msgstr "ERROR: コマンドラインにデバイス URI が見つからず、環境変数 DEVICE_URI も見つかりません!\n"
+
+#: filter/bannertops.c:222
+#, c-format
 msgid "ERROR: Missing value on line %d of banner file!\n"
-msgstr "ERROR: バナーファイルの行 %d に値がありません!\n"
+msgstr "ERROR: バナーファイルの %d 行目に値が見つかりません!\n"
+
+#: ppdc/ppdc-catalog.cxx:412
+#, c-format
 msgid "ERROR: Need a msgid line before any translation strings on line %d of %s!\n"
-msgstr "ERROR: %2$s の行 %1$d の変換文字列の前に msgid 行が必要です!\n"
+msgstr "ERROR: %d 行: %s の翻訳文字列の前に msgid 行が必要です!\n"
+
+#: filter/pstops.c:755
+#, c-format
 msgid "ERROR: No %%BoundingBox: comment in header!\n"
-msgstr "ERROR: %%BoundingBox がありません:ヘッダにコメントがあります!\n"
+msgstr "ERROR: %%BoundingBox: コメントがありません!\n"
+
+#: filter/pstops.c:758
+#, c-format
 msgid "ERROR: No %%Pages: comment in header!\n"
-msgstr "ERROR: %%Pages がありません:ヘッダにコメントがあります!\n"
+msgstr "ERROR: %%Pages: コメントがヘッダーにありません!\n"
+
+#: backend/usb.c:200
 msgid "ERROR: No device URI found in argv[0] or in DEVICE_URI environment variable!\n"
-msgstr "ERROR: argv[0] または DEVICE_URI 環境変数にデバイス URI が見つかりませんでした!\n"
+msgstr "ERROR: argv[0] または 環境変数 DEVICE_URI にデバイス URI が見つかりません!\n"
+
+#: filter/pstext.c:433
+#, c-format
 msgid "ERROR: No fonts in charset file %s\n"
-msgstr "ERROR: 文字セットファイル %s 内にフォントがありません\n"
+msgstr "ERROR: charset ファイル %s にフォントが見つかりません\n"
+
+#: filter/rastertoepson.c:1124 filter/rastertohp.c:854
+#: filter/rastertolabel.c:1279
 msgid "ERROR: No pages found!\n"
-msgstr "ERROR: ページが見つかりませんでした!\n"
+msgstr "ERROR: ページが見つかりません!\n"
+
+#: backend/runloop.c:348
 msgid "ERROR: Out of paper!\n"
-msgstr "ERROR: 用紙がありません!\n"
+msgstr "ERROR: 用紙切れです!\n"
+
+#: backend/ipp.c:1792
 msgid "ERROR: PRINTER environment variable not defined!\n"
-msgstr "ERROR: PRINTER 環境設定が定義されていません!\n"
+msgstr "ERROR: PRINTER 環境変数が定義されていません!\n"
+
+#: backend/ipp.c:1044
+#, c-format
 msgid "ERROR: Print file was not accepted (%s)!\n"
-msgstr "ERROR: プリントファイルが受け入れられませんでした(%s)!\n"
+msgstr "ERROR: プリントファイルが受け付けられませんでした (%s)!\n"
+
+#: backend/pap.c:521
 msgid "ERROR: Printer not responding\n"
-msgstr "ERROR: プリンタが応答しません\n"
+msgstr "ERROR: プリンターが応答していません\n"
+
+#: backend/ipp.c:571 backend/ipp.c:702 backend/lpd.c:821 backend/socket.c:311
 msgid "ERROR: Printer not responding!\n"
-msgstr "ERROR: プリンタが応答しません!\n"
+msgstr "ERROR: プリンターが応答していません!\n"
+
+#: backend/pap.c:858
 msgid "ERROR: Printer sent unexpected EOF\n"
-msgstr "ERROR: プリンタから予期しない EOF を受け取りました\n"
+msgstr "ERROR: プリンターが 想定外の EOF を送信しました\n"
+
+#: backend/lpd.c:1025 backend/lpd.c:1172
+#, c-format
 msgid "ERROR: Remote host did not accept control file (%d)\n"
-msgstr "ERROR: リモートホストが制御ファイルを受け入れませんでした(%d)\n"
+msgstr "ERROR: リモートホストがコントロールファイルを受け付けませんでした (%d)\n"
+
+#: backend/lpd.c:1120
+#, c-format
 msgid "ERROR: Remote host did not accept data file (%d)\n"
-msgstr "ERROR: リモートホストがデータファイルを受け入れませんでした(%d)\n"
+msgstr "ERROR: リモートホストがデータファイルを受け付けませんでした (%d)\n"
+
+#: backend/pap.c:1694
 msgid "ERROR: There was a timeout error while sending data to the printer\n"
-msgstr "ERROR: プリンタにデータを送信しているときにタイムアウトエラーが起きました\n"
+msgstr "ERROR: プリンターへのデータ送信中にタイムアウトエラーが発生しました\n"
+
+#: backend/ipp.c:1107
+#, c-format
 msgid "ERROR: Unable to add file %d to job: %s\n"
-msgstr "ERROR: ファイル %d をジョブに追加できません:%s\n"
+msgstr "ERROR: ファイル %d をジョブに追加できません: %s\n"
+
+#: backend/ipp.c:1355
+#, c-format
 msgid "ERROR: Unable to cancel job %d: %s\n"
-msgstr "ERROR: ジョブ %d をキャンセルできません:%s\n"
+msgstr "ERROR: ジョブ %d をキャンセルできません: %s\n"
+
+#: filter/pdftops.c:126
 msgid "ERROR: Unable to copy PDF file"
 msgstr "ERROR: PDF ファイルをコピーできません"
+
+#: backend/lpd.c:745
 msgid "ERROR: Unable to create socket"
 msgstr "ERROR: ソケットを作成できません"
+
+#: backend/ipp.c:1445
+#, c-format
 msgid "ERROR: Unable to create temporary compressed print file: %s\n"
-msgstr "ERROR: 圧縮された一時プリントファイルを作成できません:%s\n"
+msgstr "ERROR: テンポラリーの圧縮プリントファイルを作成できません: %s\n"
+
+#: backend/ipp.c:424 backend/lpd.c:433
 msgid "ERROR: Unable to create temporary file"
-msgstr "ERROR: 一時ファイルを作成できません"
+msgstr "ERROR: テンポラリーファイルを作成できません"
+
+#: backend/ipp.c:1814
+#, c-format
 msgid "ERROR: Unable to create temporary file - %s.\n"
-msgstr "ERROR: 一時ファイルを作成できません - %s。\n"
+msgstr "ERROR: テンポラリーファイルを作成できません - %s\n"
+
+#: filter/pstops.c:2708
+#, c-format
 msgid "ERROR: Unable to create temporary file: %s\n"
-msgstr "ERROR: 一時ファイルを作成できません:%s\n"
+msgstr "ERROR: テンポラリーファイルを作成できません: %s\n"
+
+#: backend/ipp.c:1871
+#, c-format
 msgid "ERROR: Unable to exec pictwpstops: %s\n"
-msgstr "ERROR: pictwpstops を実行できません:%s\n"
+msgstr "ERROR: pictwpstops を実行できません: %s\n"
+
+#: filter/pdftops.c:317 filter/pdftops.c:331
 msgid "ERROR: Unable to execute gs program"
 msgstr "ERROR: gs プログラムを実行できません"
+
+#: filter/pdftops.c:314 filter/pdftops.c:329
 msgid "ERROR: Unable to execute pdftops program"
 msgstr "ERROR: pdftops プログラムを実行できません"
+
+#: backend/ipp.c:1884
+#, c-format
 msgid "ERROR: Unable to fork pictwpstops: %s\n"
-msgstr "ERROR: pictwpstops を分岐できません:%s\n"
+msgstr "ERROR: pictwpstops をフォークできません: %s\n"
+
+#: backend/pap.c:712
 msgid "ERROR: Unable to get PAP request"
-msgstr "ERROR: PAP 要求を取得できません"
+msgstr "ERROR: PAP リクエストを取得できません"
+
+#: backend/pap.c:701
 msgid "ERROR: Unable to get PAP response"
-msgstr "ERROR: PAP 応答を取得できません"
+msgstr "ERROR: PAP レスポンスを取得できません"
+
+#: backend/ipp.c:1799
+#, c-format
 msgid "ERROR: Unable to get PPD file for printer \"%s\" - %s.\n"
-msgstr "ERROR: プリンタ“%s”のPPD ファイルを取得できません - %s。\n"
+msgstr "ERROR: プリンター \"%s\" の PPD ファイルを取得できません - %s\n"
+
+#: backend/pap.c:302
 msgid "ERROR: Unable to get default AppleTalk zone"
 msgstr "ERROR: デフォルトの AppleTalk ゾーンを取得できません"
+
+#: backend/ipp.c:1194
+#, c-format
 msgid "ERROR: Unable to get job %d attributes (%s)!\n"
-msgstr "ERROR: ジョブ %d の属性を取得できません(%s)!\n"
+msgstr "ERROR: ジョブ %d の属性 (%s) を取得できません!\n"
+
+#: backend/ipp.c:745
+#, c-format
 msgid "ERROR: Unable to get printer status (%s)!\n"
-msgstr "ERROR: プリンタの状況を取得できません(%s)!\n"
+msgstr "ERROR: プリンターのステータス (%s) を取得できません!\n"
+
+#: backend/ipp.c:589 backend/lpd.c:677 backend/socket.c:266
+#, c-format
 msgid "ERROR: Unable to locate printer '%s'!\n"
-msgstr "ERROR: プリンタ‘%s’を特定できません!\n"
+msgstr "ERROR: プリンター '%s' が見つかりません\"!\n"
+
+#: backend/pap.c:688
 msgid "ERROR: Unable to look for PAP response"
-msgstr "ERROR: PAP 応答を検索できません"
+msgstr "ERROR: PAP レスポンスが見つかりません"
+
+#: backend/pap.c:322
 msgid "ERROR: Unable to lookup AppleTalk printers"
-msgstr "ERROR: AppleTalk プリンタを検索できません"
+msgstr "ERROR: AppleTalk プリンターが見つかりません"
+
+#: backend/pap.c:451
 msgid "ERROR: Unable to make AppleTalk address"
 msgstr "ERROR: AppleTalk アドレスを作成できません"
+
+#: filter/pstext.c:247 filter/texttops.c:248
+#, c-format
 msgid "ERROR: Unable to open \"%s\" - %s\n"
-msgstr "ERROR: “%s”を開けません - %s\n"
+msgstr "ERROR: \"%s\" を開けません - %s\n"
+
+#: filter/pstext.c:264 filter/texttops.c:268
+#, c-format
 msgid "ERROR: Unable to open %s: %s\n"
-msgstr "ERROR: %s を開けません:%s\n"
+msgstr "ERROR: %s を開けません: %s\n"
+
+#: filter/bannertops.c:184
+#, c-format
 msgid "ERROR: Unable to open banner file \"%s\" - %s\n"
-msgstr "ERROR: バナーファイル“%s”を開けません - %s\n"
+msgstr "ERROR: バナーファイル \"%s\" を開けません - %s\n"
+
+#: backend/parallel.c:249 backend/scsi-irix.c:140 backend/scsi-linux.c:154
+#: backend/serial.c:262 backend/usb-unix.c:146
+#, c-format
 msgid "ERROR: Unable to open device file \"%s\": %s\n"
-msgstr "ERROR: デバイスファイル“%s”を開けません:%s\n"
+msgstr "ERROR: デバイスファイル \"%s\" を開けません: %s\n"
+
+#: filter/pstops.c:290
+#, c-format
 msgid "ERROR: Unable to open file \"%s\" - %s\n"
-msgstr "ERROR: ファイル“%s”を開けません - %s\n"
+msgstr "ERROR: ファイル \"%s\" を開けません - %s\n"
+
+#: filter/gziptoany.c:74
+#, c-format
 msgid "ERROR: Unable to open file \"%s\": %s\n"
-msgstr "ERROR: ファイル“%s”を開けません:%s\n"
+msgstr "ERROR: ファイル \"%s\" を開けません: %s\n"
+
+#: filter/imagetops.c:313 filter/imagetoraster.c:637
 msgid "ERROR: Unable to open image file for printing!\n"
-msgstr "ERROR: プリント用のイメージファイルを開けません!\n"
+msgstr "ERROR: 印刷のためのイメージファイルを開けません!\n"
+
+#: backend/ipp.c:1461 backend/pap.c:249 backend/parallel.c:151
+#: backend/scsi.c:181 backend/serial.c:189 backend/socket.c:156
+#, c-format
 msgid "ERROR: Unable to open print file \"%s\": %s\n"
-msgstr "ERROR: プリントファイル“%s”を開けません:%s\n"
+msgstr "ERROR: プリントファイル \"%s\" を開けません: %s\n"
+
+#: backend/usb.c:237
+#, c-format
 msgid "ERROR: Unable to open print file %s - %s\n"
 msgstr "ERROR: プリントファイル %s を開けません - %s\n"
+
+#: backend/lpd.c:462
+#, c-format
 msgid "ERROR: Unable to open print file %s: %s\n"
-msgstr "ERROR: プリントファイル %s を開けません:%s\n"
+msgstr "ERROR: プリントファイル %s を開けません: %s\n"
+
+#: backend/ipp.c:1453
+#, c-format
 msgid "ERROR: Unable to open temporary compressed print file: %s\n"
-msgstr "ERROR: 圧縮された一時プリントファイルを開けません:%s\n"
+msgstr "ERROR: テンポラリーの圧縮プリントファイルを開けません: %s\n"
+
+#: backend/ipp.c:430
 msgid "ERROR: Unable to open temporary file"
-msgstr "ERROR: 一時ファイルを開けません"
+msgstr "ERROR: テンポラリーファイルを開けません"
+
+#: filter/texttops.c:200
+#, c-format
 msgid "ERROR: Unable to print %d text columns!\n"
-msgstr "ERROR: %d 個のテキスト列をプリントできません!\n"
+msgstr "ERROR: テキストカラム %d をプリントできません!\n"
+
+#: filter/texttops.c:179
+#, c-format
 msgid "ERROR: Unable to print %dx%d text page!\n"
-msgstr "ERROR: %d x %d のテキストページをプリントできません!\n"
+msgstr "ERROR: テキストページ %dx%d をプリントできません!\n"
+
+#: backend/serial.c:615
 msgid "ERROR: Unable to read print data"
-msgstr "ERROR: プリントデータを読み取れません"
+msgstr "ERROR: プリントデータを読み込めません"
+
+#: backend/usb-darwin.c:589 backend/usb-darwin.c:622
 msgid "ERROR: Unable to read print data!\n"
-msgstr "ERROR: プリントデータを読み取れません!\n"
+msgstr "ERROR: プリントデータを読み込めません!\n"
+
+#: backend/lpd.c:762
 msgid "ERROR: Unable to reserve port"
 msgstr "ERROR: ポートを予約できません"
+
+#: filter/pstops.c:560
+#, c-format
 msgid "ERROR: Unable to seek to offset %ld in file - %s\n"
-msgstr "ERROR: ファイル内のオフセット %ld にシークできません - %s\n"
+msgstr "ERROR: ファイルでのオフセット %ld へシークできません - %s\n"
+
+#: filter/pstops.c:558
+#, c-format
 msgid "ERROR: Unable to seek to offset %lld in file - %s\n"
-msgstr "ERROR: ファイル内のオフセット %lld にシークできません - %s\n"
+msgstr "ERROR: ファイルでのオフセット %lld へシークできません - %s\n"
+
+#: backend/lpd.c:578
 msgid "ERROR: Unable to send LPD command"
 msgstr "ERROR: LPD コマンドを送信できません"
+
+#: backend/pap.c:571
 msgid "ERROR: Unable to send PAP tickle request"
-msgstr "ERROR: PAP チケット要求を送信できません"
+msgstr "ERROR: PAP tickle 要求を送信できません"
+
+#: backend/pap.c:580
 msgid "ERROR: Unable to send initial PAP send data request"
-msgstr "ERROR: 初期 PAP データ送信要求を送信できません"
+msgstr "ERROR: PAP の初期データ送信要求を送信できません"
+
+#: backend/scsi-irix.c:219 backend/scsi-linux.c:237
+#, c-format
 msgid "ERROR: Unable to send print data (%d)\n"
-msgstr "ERROR: プリントデータを送信できません(%d)\n"
+msgstr "ERROR: プリントデータを送信できません (%d)\n"
+
+#: backend/usb-darwin.c:665
 msgid "ERROR: Unable to send print data!\n"
-msgstr "ERROR: プリントデータを送信できません!\n"
+msgstr "ERROR: プリントデータを送信できません!\n"
+
+#: backend/lpd.c:1076
 msgid "ERROR: Unable to send print file to printer"
-msgstr "ERROR: プリントファイルをプリンタに送信できません"
+msgstr "ERROR: プリントファイルをプリンターへ送信できません"
+
+#: backend/lpd.c:1090
 msgid "ERROR: Unable to send trailing nul to printer"
-msgstr "ERROR: 末尾の null をプリンタに送信できません"
+msgstr "ERROR: 最後の NUL をプリンターへ送信できません"
+
+#: backend/ipp.c:1897
+#, c-format
 msgid "ERROR: Unable to wait for pictwpstops: %s\n"
-msgstr "ERROR: pictwpstops を待機できません:%s\n"
+msgstr "ERROR: pictwpstops を待つことができません: %s\n"
+
+#: backend/ipp.c:1472
+#, c-format
 msgid "ERROR: Unable to write %d bytes to \"%s\": %s\n"
-msgstr "ERROR: %d バイトを“%s”に書き込めません:%s\n"
+msgstr "ERROR: %d バイトを \"%s\" に書き込めません: %s\n"
+
+#: backend/usb-libusb.c:169 backend/usb-libusb.c:765
+#, c-format
 msgid "ERROR: Unable to write %d bytes to printer!\n"
-msgstr "ERROR: %d バイトをプリンタに書き込めません!\n"
+msgstr "ERROR: %d バイトをプリンターに書き込めません!\n"
+
+#: backend/lpd.c:1006 backend/lpd.c:1153
 msgid "ERROR: Unable to write control file"
-msgstr "ERROR: 制御ファイルに書き込めません"
+msgstr "ERROR: コントロールファイルを書き込めません"
+
+#: backend/serial.c:691
 msgid "ERROR: Unable to write print data"
 msgstr "ERROR: プリントデータを書き込めません"
+
+#: backend/runloop.c:122 backend/runloop.c:363
+#, c-format
 msgid "ERROR: Unable to write print data: %s\n"
-msgstr "ERROR: プリントデータを書き込めません:%s\n"
+msgstr "ERROR: プリントデータを書き込めません: %s\n"
+
+#: filter/imagetoraster.c:1199 filter/imagetoraster.c:1295
+#: filter/imagetoraster.c:1335
 msgid "ERROR: Unable to write raster data to driver!\n"
-msgstr "ERROR: ラスタデータをドライバに書き込めません!\n"
+msgstr "ERROR: ラスターデータをドライバーへ書き込めません!\n"
+
+#: backend/ipp.c:441 backend/lpd.c:440
 msgid "ERROR: Unable to write to temporary file"
-msgstr "ERROR: 一時ファイルに書き込めません"
+msgstr "ERROR: テンポラリーファイルへ書き込めません"
+
+#: filter/gziptoany.c:96
+#, c-format
 msgid "ERROR: Unable to write uncompressed document data: %s\n"
-msgstr "ERROR: 非圧縮書類データを書き込めません:%s\n"
+msgstr "ERROR: 非圧縮ドキュメントデータを書き込めません: %s\n"
+
+#: ppdc/ppdc-catalog.cxx:429
+#, c-format
 msgid "ERROR: Unexpected text on line %d of %s!\n"
-msgstr "ERROR: %2$s の行 %1$d に予期しないテキストがあります!\n"
+msgstr "ERROR: %d 行: %s は予期せぬテキストです!\n"
+
+#: backend/ipp.c:351
+#, c-format
 msgid "ERROR: Unknown encryption option value \"%s\"!\n"
-msgstr "ERROR: “%s”は不明な暗号化オプション値です!\n"
+msgstr "ERROR: \"%s\" は未知の暗号オプション値です!\n"
+
+#: backend/lpd.c:355
+#, c-format
 msgid "ERROR: Unknown file order \"%s\"\n"
-msgstr "ERROR: “%s”は不明なファイル順序です\n"
+msgstr "ERROR: \"%s\" は未知のファイルオーダーです\n"
+
+#: backend/lpd.c:327
+#, c-format
 msgid "ERROR: Unknown format character \"%c\"\n"
-msgstr "ERROR: “%c”は不明なフォーマット文字です\n"
+msgstr "ERROR: \"%c\" は未知の書式文字です\n"
+
+#: ppdc/ppdc-catalog.cxx:457
+#, c-format
 msgid "ERROR: Unknown message catalog format for \"%s\"!\n"
-msgstr "ERROR: “%s”のメッセージ・カタログ・フォーマットが不明です!\n"
+msgstr "ERROR: \"%s\" は未知のメッセージカタログの書式です!\n"
+
+#: backend/ipp.c:397
+#, c-format
 msgid "ERROR: Unknown option \"%s\" with value \"%s\"!\n"
-msgstr "ERROR: 値“%2$s”、オプション“%1$s”は不明です!\n"
+msgstr "ERROR: \"%s\" (値 \"%s\") は未知のオプションです!\n"
+
+#: backend/lpd.c:341
+#, c-format
 msgid "ERROR: Unknown print mode \"%s\"\n"
-msgstr "ERROR: “%s”は不明なプリントモードです\n"
+msgstr "ERROR: \"%s\" は未知のプリントモードです\n"
+
+#: backend/ipp.c:368
+#, c-format
 msgid "ERROR: Unknown version option value \"%s\"!\n"
-msgstr "ERROR: “%s”は不明なバージョンオプション値です!\n"
+msgstr "ERROR: \"%s\" は未知のバージョンオプション値です!\n"
+
+#: filter/pstops.c:2407
+#, c-format
 msgid "ERROR: Unsupported brightness value %s, using brightness=100!\n"
-msgstr "ERROR: 輝度値 %s に対応していないため、brightness=100 を使用します!\n"
+msgstr "ERROR: %s はサポートされていない輝度値です。brightness=100 を使用します!\n"
+
+#: filter/pstops.c:2476
+#, c-format
 msgid "ERROR: Unsupported gamma value %s, using gamma=1000!\n"
-msgstr "ERROR: ガンマ値 %s に対応していないため、gamma=1000 を使用します!\n"
+msgstr "ERROR: %s はサポートされていないガンマ値です。gamma=1000 を使用します!\n"
+
+#: filter/pstops.c:2530
+#, c-format
 msgid "ERROR: Unsupported number-up value %d, using number-up=1!\n"
-msgstr "ERROR: number-up 値 %d に対応していないため、number-up=1 を使用します!\n"
+msgstr "ERROR: %d はサポートされていない number-up 値です。number-up=1 を使用します!\n"
+
+#: filter/pstops.c:2563
+#, c-format
 msgid "ERROR: Unsupported number-up-layout value %s, using number-up-layout=lrtb!\n"
-msgstr "ERROR: number-up-layout 値 %s に対応していないため、number-up-layout=lrtb を使用します!\n"
+msgstr "ERROR: %s はサポートされていない number-up-layout 値です。number-up-layout=lrtb を使用します!\n"
+
+#: filter/pstops.c:2613
+#, c-format
 msgid "ERROR: Unsupported page-border value %s, using page-border=none!\n"
-msgstr "ERROR: page-border 値 %s に対応していないため、page-border=none を使用します!\n"
+msgstr "ERROR: %s はサポートされていない page-border 値です。page-border=none を使用します!\n"
+
+#: filter/pstops.c:2080
+#, c-format
 msgid "ERROR: doc_printf overflow (%d bytes) detected, aborting!\n"
-msgstr "ERROR: doc_printf オーバーフロー(%d バイト)が検出されたため、中止しました!\n"
+msgstr "ERROR: doc_printf オーバーフロー (%d バイト) が検出され、中断しました!\n"
+
+#: filter/pdftops.c:370
+#, c-format
 msgid "ERROR: pdftops filter crashed on signal %d!\n"
-msgstr "ERROR: シグナル %d で pdftops フィルタがクラッシュしました!\n"
+msgstr "ERROR: pdftops フィルターはシグナル %d で異常終了しました!\n"
+
+#: filter/pdftops.c:362
+#, c-format
 msgid "ERROR: pdftops filter exited with status %d!\n"
-msgstr "ERROR: 状況 %d で pdftops フィルタが終了しました!\n"
+msgstr "ERROR: pdftops フィルターは状態 %d で終了しました!\n"
+
+#: backend/ipp.c:1916
+#, c-format
 msgid "ERROR: pictwpstops exited on signal %d!\n"
-msgstr "ERROR: シグナル %d で pictwpstops が終了しました!\n"
+msgstr "ERROR: pictwpstops はシグナル %d で終了しました!\n"
+
+#: backend/ipp.c:1913
+#, c-format
 msgid "ERROR: pictwpstops exited with status %d!\n"
-msgstr "ERROR: 状況 %d で pictwpstops フィルタが終了しました!\n"
+msgstr "ERROR: pictwpstops は状態 %d で終了しました!\n"
+
+#: backend/ipp.c:599 backend/lpd.c:850 backend/socket.c:334
 msgid "ERROR: recoverable: Unable to connect to printer; will retry in 30 seconds...\n"
-msgstr "ERROR: 回復可能:プリンタに接続できません。30 秒後に再試行します...\n"
+msgstr "ERROR: 回復可能: プリンターに接続できません。30 秒後に再試行します...\n"
+
+#: backend/pap.c:629
 msgid "ERROR: select() failed"
-msgstr "ERROR: select() に失敗しました"
+msgstr "ERROR: select() が失敗しました"
+
+#: backend/lpd.c:913
 msgid "ERROR: unable to stat print file"
-msgstr "ERROR: プリントファイルの統計情報を取得できません"
+msgstr "ERROR: プリントファイルの状態を取得できません"
+
+#: cgi-bin/admin.c:1811 cgi-bin/admin.c:1823 cgi-bin/admin.c:1877
+#: cgi-bin/admin.c:1884 cgi-bin/admin.c:1919 cgi-bin/admin.c:1932
+#: cgi-bin/admin.c:1956 cgi-bin/admin.c:2029
 msgid "Edit Configuration File"
-msgstr "構成ファイルを編集"
+msgstr "設定ファイルの編集"
+
+#: cups/adminutil.c:348
 msgid "Empty PPD file!"
-msgstr "PPD ファイルが空です!"
+msgstr "PPD ファイルが空です!"
+
+#: cgi-bin/admin.c:3533
 msgid "Ending Banner"
 msgstr "終了バナー"
+
+#: systemv/lppasswd.c:205
 msgid "Enter old password:"
-msgstr "古いパスワードを入力:"
+msgstr "古いパスワードを入力:"
+
+#: systemv/lppasswd.c:234
 msgid "Enter password again:"
-msgstr "もう一度パスワードを入力:"
+msgstr "パスワードを再度入力:"
+
+#: systemv/lppasswd.c:223
 msgid "Enter password:"
-msgstr "パスワードを入力:"
+msgstr "パスワードを入力:"
+
+#: scheduler/client.c:2409
 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 "このページにアクセスするには、自分のユーザ名とパスワード、またはルートのユーザ名とパスワードを入力してください。Kerberos 認証を使用する場合は、有効な Kerberos チケットを持っていることを確認してください。"
+msgstr "このページにアクセスするために、あなたのユーザー名とパスワード、あるいは root のユーザー名とパスワードを入力してください。Kerberos 認証を使用している場合、有効な Kerberos チケットがあることを確認してください。"
+
+#: ppdc/sample.c:241
 msgid "Envelope Feed"
-msgstr "封筒配信"
+msgstr "封筒フィード"
+
+#: ppdc/sample.c:212
 msgid "Epson"
 msgstr "Epson"
+
+#: cgi-bin/admin.c:3576
 msgid "Error Policy"
 msgstr "エラーポリシー"
+
+#: systemv/lpinfo.c:109 systemv/lpmove.c:94
 msgid "Error: need hostname after '-h' option!\n"
-msgstr "エラー:‘-h’オプションの後にホスト名が必要です!\n"
+msgstr "Error: '-h' オプションのあとにはホスト名が必要です!\n"
+
+#: ppdc/sample.c:327
 msgid "Every 10 Labels"
 msgstr "10 ラベルごと"
+
+#: ppdc/sample.c:319
 msgid "Every 2 Labels"
 msgstr "2 ラベルごと"
+
+#: ppdc/sample.c:320
 msgid "Every 3 Labels"
 msgstr "3 ラベルごと"
+
+#: ppdc/sample.c:321
 msgid "Every 4 Labels"
 msgstr "4 ラベルごと"
+
+#: ppdc/sample.c:322
 msgid "Every 5 Labels"
 msgstr "5 ラベルごと"
+
+#: ppdc/sample.c:323
 msgid "Every 6 Labels"
 msgstr "6 ラベルごと"
+
+#: ppdc/sample.c:324
 msgid "Every 7 Labels"
 msgstr "7 ラベルごと"
+
+#: ppdc/sample.c:325
 msgid "Every 8 Labels"
 msgstr "8 ラベルごと"
+
+#: ppdc/sample.c:326
 msgid "Every 9 Labels"
 msgstr "9 ラベルごと"
+
+#: ppdc/sample.c:318
 msgid "Every Label"
-msgstr "1 ラベルごと"
+msgstr "すべてのラベル"
+
+#: cups/http-support.c:1236
 msgid "Expectation Failed"
-msgstr "Expect リクエストに失敗しました"
+msgstr "Expectation Failed"
+
+#: cgi-bin/admin.c:2319 cgi-bin/admin.c:2338
 msgid "Export Printers to Samba"
-msgstr "プリンタを Samba に書き出す"
+msgstr "Samba へプリンターをエクスポート"
+
+#: systemv/cupstestdsc.c:176 systemv/cupstestdsc.c:193
+#: systemv/cupstestdsc.c:218 systemv/cupstestdsc.c:235
+#: systemv/cupstestdsc.c:259 systemv/cupstestdsc.c:277
+#: systemv/cupstestdsc.c:306 systemv/cupstestdsc.c:343
+#: systemv/cupstestdsc.c:353 systemv/cupstestdsc.c:363
+#: systemv/cupstestdsc.c:373 systemv/cupstestdsc.c:383
+#: systemv/cupstestdsc.c:391
 msgid "FAIL\n"
 msgstr "失敗\n"
+
+#: ppdc/sample.c:132
 msgid "File Folder"
-msgstr "ファイルフォルダ"
+msgstr "ファイルフォルダー"
+
+#: ppdc/sample.c:141
 msgid "File Folder - 9/16 x 3 7/16\""
-msgstr "ファイルフォルダ - 9/16 x 3 7/16\""
+msgstr "ファイルフォルダー - 9/16 x 3 7/16\""
+
+#: scheduler/ipp.c:2516
+#, 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 ディレクティブを参照してください。"
+msgstr "ファイルデバイス URI は無効になっています! 有効にするには、\"%s/cupsd.conf\" の FileDevice ディレクティブを参照してください。"
+
+#: ppdc/sample.c:92
 msgid "Folio"
-msgstr "Folio"
+msgstr "フォリオ"
+
+#: cups/http-support.c:1215
 msgid "Forbidden"
-msgstr "アクセス権がありません"
+msgstr "Forbidden"
+
+#: backend/ipp.c:1694
 msgid "Fuser temperature high!"
-msgstr "定着器の温度が高くなっています!"
+msgstr "定着器の温度が上っています!"
+
+#: backend/ipp.c:1696
 msgid "Fuser temperature low!"
-msgstr "定着器の温度が低くなっています!"
+msgstr "定着器の温度が下っています!"
+
+#: cups/ppd.c:697 cups/ppd.c:1226
 msgid "General"
 msgstr "一般"
+
+#: ppdc/sample.c:231
 msgid "Generic"
 msgstr "汎用"
+
+#: ppdc/sample.c:89
 msgid "German FanFold"
 msgstr "German FanFold"
+
+#: ppdc/sample.c:90
 msgid "German FanFold Legal"
-msgstr "German FanFold リーガル"
+msgstr "German FanFold Legal"
+
+#: cups/snmp.c:1015
 msgid "Get-Response-PDU uses indefinite length"
-msgstr "Get-Response-PDU に使われている長さが不定です"
+msgstr "Get-Response-PDU は不確定の長さを使用しています"
+
+#: ppdc/sample.c:262
 msgid "Glossy Paper"
 msgstr "光沢紙"
+
+#: scheduler/ipp.c:3634 scheduler/ipp.c:3937 scheduler/ipp.c:6599
+#: scheduler/ipp.c:6741 scheduler/ipp.c:8011 scheduler/ipp.c:9135
+#: scheduler/ipp.c:9360 scheduler/ipp.c:9777 scheduler/ipp.c:10352
 msgid "Got a printer-uri attribute but no job-id!"
-msgstr "printer-uri 属性を取得しましたが、job-id がありません!"
+msgstr "printer-uri 属性を取得しましたが、job-id を取得できませんでした!"
+
+#: ppdc/sample.c:227
 msgid "Grayscale"
-msgstr "グレイスケール"
+msgstr "グレースケール"
+
+#: ppdc/sample.c:251
 msgid "HP"
 msgstr "HP"
+
+#: ppdc/sample.c:133
 msgid "Hanging Folder"
-msgstr "ハンギングフォルダ"
+msgstr "Hanging Folder"
+
+#: ppdc/sample.c:142
 msgid "Hanging Folder - 9/16 x 2\""
-msgstr "ハンギングフォルダ - 9/16 x 2\""
+msgstr "Hanging Folder - 9/16 x 2\""
+
+#: backend/pap.c:296
 msgid "INFO: AppleTalk disabled in System Preferences\n"
-msgstr "INFO: AppleTalk は“システム環境設定”で無効になっています\n"
+msgstr "INFO: AppleTalk がシステムプレファレンスで無効にされています\n"
+
+#: backend/pap.c:511
 msgid "INFO: AppleTalk disabled in System Preferences.\n"
-msgstr "INFO: AppleTalk は“システム環境設定”で無効になっています。\n"
+msgstr "INFO: AppleTalk がシステムプレファレンスで無効にされています。\n"
+
+#: backend/ipp.c:1334
 msgid "INFO: Canceling print job...\n"
-msgstr "INFO: プリントジョブをキャンセル中...\n"
+msgstr "INFO: プリントジョブをキャンセルしています...\n"
+
+#: backend/ipp.c:619 backend/lpd.c:869 backend/socket.c:356
 msgid "INFO: Connected to printer...\n"
-msgstr "INFO: プリンタに接続されました...\n"
+msgstr "INFO: プリンターに接続しました...\n"
+
+#: backend/ipp.c:534 backend/lpd.c:702 backend/socket.c:273
 msgid "INFO: Connecting to printer...\n"
-msgstr "INFO: プリンタに接続中...\n"
+msgstr "INFO: プリンターに接続中...\n"
+
+#: backend/lpd.c:1028 backend/lpd.c:1175
 msgid "INFO: Control file sent successfully\n"
-msgstr "INFO: 制御ファイルの送信に成功しました\n"
+msgstr "INFO: コントロールファイルが正常に送信されました\n"
+
+#: backend/lpd.c:1123
 msgid "INFO: Data file sent successfully\n"
-msgstr "INFO: データファイルの送信に成功しました\n"
+msgstr "INFO: データファイルが正常に送信されました\n"
+
+#: filter/imagetoraster.c:1142
+#, c-format
 msgid "INFO: Formatting page %d...\n"
-msgstr "INFO: %d ページをフォーマット中...\n"
+msgstr "INFO: ページ %d をフォーマット中...\n"
+
+#: filter/imagetoraster.c:623
 msgid "INFO: Loading image file...\n"
-msgstr "INFO: イメージファイルを読み込み中...\n"
+msgstr "INFO: イメージファイルをロード中...\n"
+
+#: cups/http-support.c:1400
 msgid "INFO: Looking for printer...\n"
-msgstr "INFO: プリンタを検索中...\n"
+msgstr "INFO: プリンターを探しています...\n"
+
+#: backend/pap.c:928
 msgid "INFO: Opening connection\n"
-msgstr "INFO: 接続を開いています\n"
+msgstr "INFO: コネクションを開いています\n"
+
+#: backend/socket.c:427
 msgid "INFO: Print file sent, waiting for printer to finish...\n"
-msgstr "INFO: プリントファイルが送信されました、プリンタの終了を待機中...\n"
+msgstr "INFO: プリントファイルを送信し、プリンターが作業を完了するのを待っています...\n"
+
+#: backend/ipp.c:1027 backend/usb-unix.c:132
 msgid "INFO: Printer busy; will retry in 10 seconds...\n"
-msgstr "INFO: プリンタでの処理が混み合っています。10 秒後に再試行します...\n"
+msgstr "INFO: プリンターがビジー状態です。10 秒後に再試行します...\n"
+
+#: backend/parallel.c:236 backend/scsi-irix.c:147 backend/scsi-linux.c:161
+#: backend/serial.c:256
 msgid "INFO: Printer busy; will retry in 30 seconds...\n"
-msgstr "INFO: プリンタでの処理が混み合っています。30 秒後に再試行します...\n"
+msgstr "INFO: プリンターがビジー状態です。30 秒後に再試行します...\n"
+
+#: backend/usb-unix.c:437
 msgid "INFO: Printer busy; will retry in 5 seconds...\n"
-msgstr "INFO: プリンタでの処理が混み合っています。5 秒後に再試行します...\n"
+msgstr "INFO: プリンターがビジー状態です。5 秒後に再試行します...\n"
+
+#: backend/ipp.c:728 backend/ipp.c:1038
+#, 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"
+
+#: backend/usb-unix.c:521
 msgid "INFO: Printer is busy; will retry in 5 seconds...\n"
-msgstr "INFO: プリンタでの処理が混み合っています。5 秒後に再試行します...\n"
+msgstr "INFO: プリンターがビジー状態です。5 秒後に再試行します...\n"
+
+#: backend/runloop.c:357
 msgid "INFO: Printer is currently off-line.\n"
-msgstr "INFO: プリンタは現在オフラインです。\n"
+msgstr "INFO: プリンターは現在オフラインです。\n"
+
+#: backend/runloop.c:243
 msgid "INFO: Printer is currently offline.\n"
-msgstr "INFO: プリンタは現在オフラインです。\n"
+msgstr "INFO: プリンターは現在オフラインです。\n"
+
+#: backend/runloop.c:379 backend/usb-darwin.c:1144
 msgid "INFO: Printer is now online.\n"
-msgstr "INFO: プリンタがオンラインになりました。\n"
+msgstr "INFO: プリンターは現在オンラインです。\n"
+
+#: backend/usb-darwin.c:1162
 msgid "INFO: Printer is offline.\n"
-msgstr "INFO: プリンタはオフラインです。\n"
+msgstr "INFO: プリンターはオフラインです。\n"
+
+#: backend/parallel.c:242 backend/usb-unix.c:139
 msgid "INFO: Printer not connected; will retry in 30 seconds...\n"
-msgstr "INFO: プリンタが接続されていません。30 秒後に再試行します...\n"
+msgstr "INFO: プリンターに接続できません。30 秒後に再試行します...\n"
+
+#: filter/rastertoepson.c:1076 filter/rastertohp.c:801
+#: filter/rastertolabel.c:1232
+#, c-format
 msgid "INFO: Printing page %d, %d%% complete...\n"
-msgstr "INFO: %d ページをプリント中。%d%% が完了しました...\n"
+msgstr "INFO: ページ %d をプリント中、%d%% 完了しました...\n"
+
+#: filter/imagetops.c:808
+#, c-format
 msgid "INFO: Printing page %d...\n"
-msgstr "INFO: %d ページをプリント中...\n"
+msgstr "INFO: ページ %d をプリント中...\n"
+
+#: backend/socket.c:459 filter/rastertoepson.c:1126 filter/rastertohp.c:856
+#: filter/rastertolabel.c:1281
 msgid "INFO: Ready to print.\n"
-msgstr "INFO: プリントの準備が整いました。\n"
+msgstr "INFO: プリントの準備ができています\n"
+
+#: backend/lpd.c:1147
+#, c-format
 msgid "INFO: Sending control file (%lu bytes)\n"
-msgstr "INFO: 制御ファイル(%lu バイト)を送信中\n"
+msgstr "INFO: コントロールファイルを送信中 (%lu バイト)\n"
+
+#: backend/lpd.c:1000
+#, c-format
 msgid "INFO: Sending control file (%u bytes)\n"
-msgstr "INFO: 制御ファイル(%u バイト)を送信中\n"
+msgstr "INFO: コントロールファイルを送信中 (%u バイト)\n"
+
+#: backend/pap.c:564
 msgid "INFO: Sending data\n"
 msgstr "INFO: データを送信中\n"
+
+#: backend/lpd.c:1059
+#, c-format
 msgid "INFO: Sending data file (%ld bytes)\n"
-msgstr "INFO: データファイル(%ld バイト)を送信中\n"
+msgstr "INFO: データファイルを送信中 (%ld バイト)\n"
+
+#: backend/lpd.c:1057
+#, c-format
 msgid "INFO: Sending data file (%lld bytes)\n"
-msgstr "INFO: データファイル(%lld バイト)を送信中\n"
+msgstr "INFO: データファイルを送信中 (%lld バイト)\n"
+
+#: backend/usb-darwin.c:521
 msgid "INFO: Sending print data...\n"
 msgstr "INFO: プリントデータを送信中...\n"
+
+#: backend/parallel.c:294 backend/socket.c:406 backend/usb-unix.c:201
+#, c-format
 msgid "INFO: Sent print file, %ld bytes...\n"
-msgstr "INFO: プリントファイル %ld バイトが送信されました...\n"
+msgstr "INFO: プリントファイルを送信、%ld バイト...\n"
+
+#: backend/parallel.c:292 backend/socket.c:404 backend/usb-unix.c:199
+#, c-format
 msgid "INFO: Sent print file, %lld bytes...\n"
-msgstr "INFO: プリントファイル %lld バイトが送信されました...\n"
+msgstr "INFO: プリントファイルを送信、%lld バイト...\n"
+
+#: backend/lpd.c:1071
+#, c-format
 msgid "INFO: Spooling LPR job, %.0f%% complete...\n"
-msgstr "INFO: LPR ジョブをスプール中、%.0f%% が完了しました...\n"
+msgstr "INFO: LPR ジョブをスプール中、%.0f%% 完了しました...\n"
+
+#: backend/ipp.c:551 backend/ipp.c:809 backend/lpd.c:802
+#: backend/parallel.c:221 backend/scsi-irix.c:125 backend/scsi-linux.c:139
+#: backend/serial.c:241 backend/socket.c:294 backend/usb-unix.c:117
 msgid "INFO: Unable to contact printer, queuing on next printer in class...\n"
-msgstr "INFO: プリンタに接続できません。クラス内の次のプリンタのキューに入ります...\n"
+msgstr "INFO: プリンターと交信できません。クラス内の次のプリンターにキューします...\n"
+
+#: backend/pap.c:309
+#, c-format
 msgid "INFO: Using default AppleTalk zone \"%s\"\n"
-msgstr "INFO: デフォルトの AppleTalk ゾーン“%s”を使用中\n"
+msgstr "INFO: デフォルトの AppleTalk ゾーン \"%s\" を使います\n"
+
+#: backend/ipp.c:1132
 msgid "INFO: Waiting for job to complete...\n"
-msgstr "INFO: ジョブの完了を待機中...\n"
+msgstr "INFO: ジョブが完了するのを待っています...\n"
+
+#: backend/usb-darwin.c:441 backend/usb-libusb.c:117
 msgid "INFO: Waiting for printer to become available...\n"
-msgstr "INFO: プリンタが利用可能になるのを待機中...\n"
+msgstr "INFO: プリンターが使用可能になるのを待っています...\n"
+
+#: ppdc/sample.c:93
 msgid "ISO B0"
 msgstr "ISO B0"
+
+#: ppdc/sample.c:94
 msgid "ISO B1"
 msgstr "ISO B1"
+
+#: ppdc/sample.c:104
 msgid "ISO B10"
 msgstr "ISO B10"
+
+#: ppdc/sample.c:95
 msgid "ISO B2"
 msgstr "ISO B2"
+
+#: ppdc/sample.c:96
 msgid "ISO B3"
 msgstr "ISO B3"
+
+#: ppdc/sample.c:97
 msgid "ISO B4"
 msgstr "ISO B4"
+
+#: ppdc/sample.c:69
 msgid "ISO B4 Envelope"
 msgstr "ISO B4 封筒"
+
+#: ppdc/sample.c:98
 msgid "ISO B5"
 msgstr "ISO B5"
+
+#: ppdc/sample.c:99
 msgid "ISO B5 (Oversize)"
-msgstr "ISO B5(特大)"
+msgstr "ISO B5 (特大)"
+
+#: ppdc/sample.c:70
 msgid "ISO B5 Envelope"
 msgstr "ISO B5 封筒"
+
+#: ppdc/sample.c:100
 msgid "ISO B6"
 msgstr "ISO B6"
+
+#: ppdc/sample.c:71
 msgid "ISO B6 Envelope"
 msgstr "ISO B6 封筒"
+
+#: ppdc/sample.c:101
 msgid "ISO B7"
 msgstr "ISO B7"
+
+#: ppdc/sample.c:102
 msgid "ISO B8"
 msgstr "ISO B8"
+
+#: ppdc/sample.c:103
 msgid "ISO B9"
 msgstr "ISO B9"
+
+#: cups/ppd.c:349
 msgid "Illegal control character"
-msgstr "制御文字が不正です"
+msgstr "不正な制御文字"
+
+#: cups/ppd.c:350
 msgid "Illegal main keyword string"
-msgstr "メインキーワード文字列が不正です"
+msgstr "不正なメインキーワード文字列"
+
+#: cups/ppd.c:351
 msgid "Illegal option keyword string"
-msgstr "オプションキーワード文字列が不正です"
+msgstr "不正なオプションキーワード文字列"
+
+#: cups/ppd.c:352
 msgid "Illegal translation string"
-msgstr "変換文字列が不正です"
+msgstr "不正な翻訳文字列"
+
+#: cups/ppd.c:353
 msgid "Illegal whitespace character"
-msgstr "空白文字が不正です"
+msgstr "不正な空白文字"
+
+#: backend/ipp.c:1686
 msgid "Ink/toner almost empty."
-msgstr "インク/トナーがもうすぐ空になります。"
+msgstr "インクまたはトナーがほとんどありません。"
+
+#: backend/ipp.c:1688
 msgid "Ink/toner empty!"
-msgstr "インク/トナーが空です!"
+msgstr "インクまたはトナーがありません!"
+
+#: backend/ipp.c:1690
 msgid "Ink/toner waste bin almost full."
-msgstr "廃インクまたは廃トナーボックスがほとんど一杯です。"
+msgstr "廃インクまたは廃トナー容器がほとんど一杯です。"
+
+#: backend/ipp.c:1692
 msgid "Ink/toner waste bin full!"
-msgstr "廃インクまたは廃トナーボックスが一杯です!"
+msgstr "廃インクまたは廃トナー容器が一杯です!"
+
+#: ppdc/sample.c:246
 msgid "Installable Options"
-msgstr "インストール可能なオプション"
+msgstr "インストール可能オプション"
+
+#: ppdc/sample.c:249
 msgid "Installed"
-msgstr "インストール済み"
+msgstr "インストールされています"
+
+#: ppdc/sample.c:265
 msgid "IntelliBar Label Printer"
-msgstr "IntelliBar ラベルプリンタ"
+msgstr "IntelliBar ラベルプリンター"
+
+#: ppdc/sample.c:264
 msgid "Intellitech"
 msgstr "Intellitech"
+
+#: backend/ipp.c:1670
 msgid "Interlock open."
 msgstr "インターロックが開いています。"
+
+#: cups/ppd.c:340
 msgid "Internal error"
 msgstr "内部エラー"
+
+#: ppdc/sample.c:130
 msgid "Internet Postage 2-Part"
 msgstr "Internet Postage 2-Part"
+
+#: ppdc/sample.c:139
 msgid "Internet Postage 2-Part - 2 1/4 x 7 1/2\""
 msgstr "Internet Postage 2-Part - 2 1/4 x 7 1/2\""
+
+#: ppdc/sample.c:131
 msgid "Internet Postage 3-Part"
 msgstr "Internet Postage 3-Part"
+
+#: ppdc/sample.c:140
 msgid "Internet Postage 3-Part - 2 1/4 x 7\""
 msgstr "Internet Postage 3-Part - 2 1/4 x 7\""
+
+#: backend/ipp.c:204
 msgid "Internet Printing Protocol"
-msgstr "IPP(Internet Printing Protocol)"
+msgstr "インターネット印刷プロトコル"
+
+#: ppdc/sample.c:68
 msgid "Invite Envelope"
 msgstr "招待状封筒"
+
+#: ppdc/sample.c:72
 msgid "Italian Envelope"
-msgstr "イタリア標準封筒"
+msgstr "イタリア封筒"
+
+#: cups/ppd.c:1344
 msgid "JCL"
 msgstr "JCL"
+
+#: scheduler/ipp.c:9433
+#, c-format
 msgid "Job #%d cannot be restarted - no files!"
-msgstr "ジョブ #%d を再開できません - ファイルがありません!"
+msgstr "ジョブ番号 %d を再開できません - ファイルが見つかりません!"
+
+#: scheduler/ipp.c:3675 scheduler/ipp.c:4045 scheduler/ipp.c:6640
+#: scheduler/ipp.c:6782 scheduler/ipp.c:7888 scheduler/ipp.c:8052
+#: scheduler/ipp.c:8288 scheduler/ipp.c:8333 scheduler/ipp.c:9176
+#: scheduler/ipp.c:9401 scheduler/ipp.c:9818 scheduler/ipp.c:10393
+#, c-format
 msgid "Job #%d does not exist!"
-msgstr "ジョブ #%d が存在しません!"
+msgstr "ジョブ番号 %d は存在しません!"
+
+#: scheduler/ipp.c:4076
+#, c-format
 msgid "Job #%d is already aborted - can't cancel."
-msgstr "ジョブ #%d はすでに破棄されています - キャンセルできません。"
+msgstr "ジョブ番号 %d はすでに中断されています - キャンセルできません。"
+
+#: scheduler/ipp.c:4070
+#, c-format
 msgid "Job #%d is already canceled - can't cancel."
-msgstr "ジョブ #%d はすでにキャンセルされています - キャンセルできません。"
+msgstr "ジョブ番号 %d はすでにキャンセルされています - キャンセルできません。"
+
+#: scheduler/ipp.c:4082
+#, c-format
 msgid "Job #%d is already completed - can't cancel."
-msgstr "ジョブ #%d はすでに完了しています - キャンセルできません。"
+msgstr "ジョブ番号 %d はすでに完了しています - キャンセルできません。"
+
+#: scheduler/ipp.c:8375 scheduler/ipp.c:10408
+#, c-format
 msgid "Job #%d is finished and cannot be altered!"
-msgstr "ジョブ #%d は終了しているため変更できません!"
+msgstr "ジョブ番号 %d はすでに終了し、変更できません!"
+
+#: scheduler/ipp.c:9415
+#, c-format
 msgid "Job #%d is not complete!"
-msgstr "ジョブ #%d は完了していません!"
+msgstr "ジョブ番号 %d は完了していません!"
+
+#: scheduler/ipp.c:3690
+#, c-format
 msgid "Job #%d is not held for authentication!"
-msgstr "ジョブ #%d は認証のために保留中ではありません!"
+msgstr "ジョブ番号 %d は認証のために保留されていません!"
+
+#: scheduler/ipp.c:9190
+#, c-format
 msgid "Job #%d is not held!"
-msgstr "ジョブ #%d は保留中ではありません!"
+msgstr "ジョブ番号 %d は保留されていません!"
+
+#: scheduler/ipp.c:7866
+#, c-format
 msgid "Job #%s does not exist!"
-msgstr "ジョブ #%s が存在しません!"
+msgstr "ジョブ番号 #%s は存在しません!"
+
+#: scheduler/ipp.c:6267
+#, c-format
 msgid "Job %d not found!"
-msgstr "ジョブ %d が見つかりません!"
+msgstr "ジョブ番号 %d は見つかりません!"
+
+#: cgi-bin/ipp-var.c:1031
 msgid "Job Completed"
-msgstr "ジョブが完了しました"
+msgstr "ジョブ完了"
+
+#: cgi-bin/ipp-var.c:1029
 msgid "Job Created"
-msgstr "ジョブが作成されました"
+msgstr "ジョブ作成"
+
+#: filter/bannertops.c:619
 msgid "Job ID: "
-msgstr "ジョブ ID:"
+msgstr "ジョブ ID: "
+
+#: cgi-bin/ipp-var.c:1035
 msgid "Job Options Changed"
-msgstr "ジョブのオプションが変更されました"
+msgstr "ジョブオプション変更"
+
+#: cgi-bin/ipp-var.c:1033
 msgid "Job Stopped"
-msgstr "ジョブが停止されました"
+msgstr "ジョブ中止"
+
+#: filter/bannertops.c:627
 msgid "Job UUID: "
-msgstr "ジョブ UUID:"
+msgstr "ジョブ UUID: "
+
+#: scheduler/ipp.c:10490
 msgid "Job is completed and cannot be changed."
-msgstr "ジョブは完了しているため変更できません。"
+msgstr "ジョブは完了し変更できません。"
+
+#: cgi-bin/jobs.c:197
 msgid "Job operation failed:"
-msgstr "ジョブの操作に失敗しました:"
+msgstr "ジョブ操作失敗:"
+
+#: scheduler/ipp.c:10526 scheduler/ipp.c:10547 scheduler/ipp.c:10558
 msgid "Job state cannot be changed."
-msgstr "ジョブの状況を変更できません。"
+msgstr "ジョブの状態を変更できません。"
+
+#: scheduler/ipp.c:9280
 msgid "Job subscriptions cannot be renewed!"
-msgstr "ジョブ照会先を更新できません!"
+msgstr "ジョブサブスクリプションが更新できません!"
+
+#: cgi-bin/jobs.c:102 cgi-bin/jobs.c:113 cgi-bin/jobs.c:194
 msgid "Jobs"
 msgstr "ジョブ"
+
+#: ppdc/sample.c:73
 msgid "Kaku2 Envelope"
 msgstr "角 2 封筒"
+
+#: ppdc/sample.c:74
 msgid "Kaku3 Envelope"
 msgstr "角 3 封筒"
+
+#: backend/lpd.c:178
 msgid "LPD/LPR Host or Printer"
-msgstr "LPD/LPR ホストまたはプリンタ"
+msgstr "LPD/LPR ホストまたはプリンター"
+
+#: ppdc/sample.c:202
 msgid "Label Printer"
-msgstr "ラベルプリンタ"
+msgstr "ラベルプリンター"
+
+#: ppdc/sample.c:418
 msgid "Label Top"
-msgstr "ラベル上部"
+msgstr "ラベルトップ"
+
+#: scheduler/ipp.c:2138 scheduler/ipp.c:6190
+#, c-format
 msgid "Language \"%s\" not supported!"
-msgstr "言語“%s”には対応していません!"
+msgstr "言語 \"%s\" はサポートされていません!"
+
+#: ppdc/sample.c:127
 msgid "Large Address"
-msgstr "住所(大)"
+msgstr "ラージアドレス"
+
+#: ppdc/sample.c:136
 msgid "Large Address - 1 4/10 x 3 1/2\""
-msgstr "住所(大) - 1 4/10 x 3 1/2\""
+msgstr "ラージアドレス - 1 4/10 x 3 1/2\""
+
+#: ppdc/sample.c:263
 msgid "LaserJet Series PCL 4/5"
-msgstr "LaserJet シリーズ PCL 4/5"
+msgstr "LaserJet Series PCL 4/5"
+
+#: ppdc/sample.c:208
 msgid "Light"
 msgstr "薄い"
+
+#: cups/ppd.c:348
 msgid "Line longer than the maximum allowed (255 characters)"
-msgstr "行が最大許容文字数(255 文字)を超えています"
+msgstr "1 行が最大値 (255 文字) を超えています"
+
+#: cgi-bin/admin.c:2356
 msgid "List Available Printers"
-msgstr "使用可能なプリンタをリスト表示"
+msgstr "使用可能なプリンターをリスト化"
+
+#: filter/bannertops.c:740
 msgid "Location: "
-msgstr "場所:"
+msgstr "場所: "
+
+#: ppdc/sample.c:244
 msgid "Long-Edge (Portrait)"
-msgstr "長辺(縦)"
+msgstr "長辺給紙 (縦向き)"
+
+#: filter/bannertops.c:749
 msgid "Make and Model: "
-msgstr "製造元と機種:"
+msgstr "プリンタードライバー: "
+
+#: ppdc/sample.c:240
 msgid "Manual Feed"
 msgstr "手差し"
+
+#: filter/bannertops.c:776
 msgid "Media Dimensions: "
-msgstr "メディアの大きさ:"
+msgstr "用紙の大きさ: "
+
+#: filter/bannertops.c:796
 msgid "Media Limits: "
-msgstr "メディアの制限:"
+msgstr "用紙の印字領域: "
+
+#: filter/bannertops.c:765
 msgid "Media Name: "
-msgstr "メディアの名前:"
+msgstr "用紙名:"
+
+#: cups/ppd.c:744 cups/ppd.c:1281
 msgid "Media Size"
-msgstr "メディアサイズ"
+msgstr "用紙サイズ"
+
+#: cups/ppd.c:748 cups/ppd.c:1285 ppdc/sample.c:234
 msgid "Media Source"
-msgstr "メディアソース"
+msgstr "給紙"
+
+#: ppdc/sample.c:336
 msgid "Media Tracking"
-msgstr "メディアトラッキング"
+msgstr "用紙の経路"
+
+#: cups/ppd.c:746 cups/ppd.c:1283 ppdc/sample.c:257
 msgid "Media Type"
-msgstr "メディアタイプ"
+msgstr "用紙種類"
+
+#: backend/ipp.c:1657
 msgid "Media jam!"
-msgstr "メディアが詰まっています!"
+msgstr "紙詰まりです!"
+
+#: backend/ipp.c:1676
 msgid "Media tray almost empty."
-msgstr "メディアトレイがもうすぐ空になります。"
+msgstr "用紙トレイが空になりかけています。"
+
+#: backend/ipp.c:1678
 msgid "Media tray empty!"
-msgstr "メディアトレイが空です!"
+msgstr "用紙トレイが空になりました!"
+
+#: backend/ipp.c:1674
 msgid "Media tray missing!"
-msgstr "メディアトレイがありません!"
+msgstr "用紙トレイが見つかりません!"
+
+#: backend/ipp.c:1655
 msgid "Media tray needs to be filled."
-msgstr "メディアトレイに補充が必要です。"
+msgstr "用紙トレイに補充が必要です。"
+
+#: ppdc/sample.c:209
 msgid "Medium"
-msgstr "中"
+msgstr "紙質"
+
+#: cups/ppd.c:337
 msgid "Memory allocation error"
-msgstr "メモリの割り当てエラー"
+msgstr "メモリ割り当てエラー"
+
+#: cups/ppd.c:338
 msgid "Missing PPD-Adobe-4.x header"
 msgstr "PPD-Adobe-4.x ヘッダがありません"
+
+#: cups/ppd.c:347
 msgid "Missing asterisk in column 1"
 msgstr "1 列目にアスタリスクがありません"
+
+#: scheduler/ipp.c:6662
 msgid "Missing document-number attribute!"
-msgstr "document-number 属性がありません!"
+msgstr "document-number 属性がありません!"
+
+#: cups/adminutil.c:284
+#, c-format
 msgid "Missing double quote on line %d!"
-msgstr "%d 行目に二重引用符がありません!"
+msgstr "%d 行に二重引用符がありません!"
+
+#: cgi-bin/admin.c:2068 cgi-bin/admin.c:2153 cgi-bin/admin.c:2789
+#: cgi-bin/admin.c:3043 cgi-bin/admin.c:3154 cgi-bin/admin.c:3832
 msgid "Missing form variable!"
-msgstr "フォーム変数がありません!"
+msgstr "form 変数がありません!"
+
+#: scheduler/ipp.c:7062
 msgid "Missing notify-subscription-ids attribute!"
-msgstr "notify-subscription-ids 属性がありません!"
+msgstr "notify-subscription-ids 属性がありません!"
+
+#: scheduler/ipp.c:3812
 msgid "Missing requesting-user-name attribute!"
-msgstr "requesting-user-name 属性がありません!"
+msgstr "requesting-user-name 属性が設定されていません!"
+
+#: scheduler/ipp.c:465
 msgid "Missing required attributes!"
-msgstr "必要な属性がありません!"
+msgstr "必須の属性が設定されていません!"
+
+#: cups/adminutil.c:265
+#, c-format
 msgid "Missing value on line %d!"
-msgstr "%d 行目に値がありません!"
+msgstr "%d 行に値がありません!"
+
+#: cups/ppd.c:339
 msgid "Missing value string"
 msgstr "値文字列がありません"
-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"
+
+#: systemv/lpinfo.c:475
+#, 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"
+
+#: cgi-bin/admin.c:480
 msgid "Modify Class"
-msgstr "クラスを変更"
+msgstr "クラスの変更"
+
+#: cgi-bin/admin.c:772
 msgid "Modify Printer"
-msgstr "プリンタを変更"
+msgstr "プリンターの変更"
+
+#: ppdc/sample.c:111
 msgid "Monarch"
 msgstr "Monarch"
+
+#: ppdc/sample.c:75
 msgid "Monarch Envelope"
 msgstr "Monarch 封筒"
+
+#: cgi-bin/ipp-var.c:416 cgi-bin/ipp-var.c:493
 msgid "Move All Jobs"
-msgstr "すべてのジョブを移動"
+msgstr "すべてのジョブの移動"
+
+#: cgi-bin/ipp-var.c:361 cgi-bin/ipp-var.c:414 cgi-bin/ipp-var.c:491
 msgid "Move Job"
-msgstr "ジョブを移動"
+msgstr "ジョブの移動"
+
+#: cups/http-support.c:1200
 msgid "Moved Permanently"
-msgstr "完全に移動されました"
+msgstr "別の場所へ移動しました"
+
+#: backend/ipp.c:1057
+#, c-format
 msgid "NOTICE: Print file accepted - job ID %d.\n"
-msgstr "NOTICE: プリントファイルは受け入れ済みです - ジョブ ID %d。\n"
+msgstr "NOTICE: プリントファイルを受け付けました - ジョブ ID %d。\n"
+
+#: backend/ipp.c:1051
 msgid "NOTICE: Print file accepted - job ID unknown.\n"
-msgstr "NOTICE: プリントファイルは受け入れ済みです - ジョブ ID 不明。\n"
+msgstr "NOTICE: プリントファイルを受け付けました - ジョブ ID 不明。\n"
+
+#: cups/ppd.c:336
 msgid "NULL PPD file pointer"
-msgstr "NULL PPD ファイルポインタ"
+msgstr "PPD ファイルポインターが NULL です"
+
+#: cups/snmp.c:1052
 msgid "Name OID uses indefinite length"
-msgstr "名前 OID に使われている長さが不定です"
+msgstr "OID 名は限定的な長さを使用します"
+
+#: ppdc/sample.c:402
 msgid "Never"
-msgstr "しない"
+msgstr "Never"
+
+#: ppdc/sample.c:228
 msgid "New Stylus Color Series"
-msgstr "新しい Stylus Color シリーズ"
+msgstr "New Stylus Color シリーズ"
+
+#: ppdc/sample.c:230
 msgid "New Stylus Photo Series"
-msgstr "新しい Stylus Photo シリーズ"
+msgstr "New Stylus Photo シリーズ"
+
+#: cups/ppd.c:1867
 msgid "No"
 msgstr "いいえ"
+
+#: cups/http-support.c:1197
 msgid "No Content"
-msgstr "内容がありません"
+msgstr "中身がありません"
+
+#: cups/util.c:1308
 msgid "No PPD name!"
-msgstr "PPD 名がありません!"
+msgstr "PPD の名前がありません!"
+
+#: cups/snmp.c:1046
 msgid "No VarBind SEQUENCE"
 msgstr "VarBind SEQUENCE がありません"
+
+#: cups/adminutil.c:799
 msgid "No Windows printer drivers are installed!"
-msgstr "Windows プリンタドライバがインストールされていません!"
+msgstr "Windows プリンタードライバーがインストールされていません!"
+
+#: cups/request.c:504 cups/request.c:763
 msgid "No active connection"
-msgstr "アクティブな接続がありません"
+msgstr "アクティブな接続はありません"
+
+#: scheduler/ipp.c:3992
+#, c-format
 msgid "No active jobs on %s!"
-msgstr "%s にアクティブなジョブがありません!"
+msgstr "%s にはアクティブなジョブはありません!"
+
+#: scheduler/ipp.c:308
 msgid "No attributes in request!"
-msgstr "要求に属性が含まれていません!"
+msgstr "リクエストに属性がありません!"
+
+#: scheduler/ipp.c:3718
 msgid "No authentication information provided!"
-msgstr "認証情報が提供されていません!"
+msgstr "認証情報が提供されていません!"
+
+#: cups/snmp.c:1003
 msgid "No community name"
 msgstr "コミュニティ名がありません"
+
+#: scheduler/ipp.c:6462
 msgid "No default printer"
-msgstr "デフォルトプリンタがありません"
+msgstr "デフォルトのプリンターはありません"
+
+#: scheduler/ipp.c:7637
 msgid "No destinations added."
-msgstr "送信先は追加されませんでした。"
+msgstr "追加された宛先はありません"
+
+#: cups/snmp.c:1033
 msgid "No error-index"
-msgstr "error-index がありません"
+msgstr "エラーインデックスがありません"
+
+#: cups/snmp.c:1025
 msgid "No error-status"
-msgstr "error-status がありません"
+msgstr "エラーステータスがありません"
+
+#: scheduler/ipp.c:8574 scheduler/ipp.c:9869
 msgid "No file!?!"
-msgstr "ファイルがありません!?!"
+msgstr "ファイルがありません!?!"
+
+#: cups/util.c:930
 msgid "No modification time!"
-msgstr "変更時刻がありません!"
+msgstr "変更時刻がありません!"
+
+#: cups/snmp.c:1050
 msgid "No name OID"
-msgstr "名前 OID がありません"
+msgstr "OID 名がありません"
+
+#: cups/util.c:924
 msgid "No printer name!"
-msgstr "プリンタ名がありません!"
+msgstr "プリンター名がありません!"
+
+#: cups/util.c:1861
 msgid "No printer-uri found for class!"
-msgstr "クラスの printer-uri が見つかりませんでした!"
+msgstr "クラスのプリンターURI が見つかりません!"
+
+#: cups/util.c:1876
 msgid "No printer-uri found!"
-msgstr "printer-uri が見つかりませんでした!"
+msgstr "プリンターURI が見つかりません!"
+
+#: scheduler/ipp.c:6847
 msgid "No printer-uri in request!"
-msgstr "要求に printer-uri が含まれていません!"
+msgstr "プリンターURI のリクエストがありません!"
+
+#: cups/snmp.c:1017
 msgid "No request-id"
-msgstr "request-id がありません"
+msgstr "リクエストID がありません"
+
+#: scheduler/ipp.c:6075
 msgid "No subscription attributes in request!"
-msgstr "要求に subscription 属性が含まれていません!"
+msgstr "リクエストにサブスクリプション属性がありません!"
+
+#: scheduler/ipp.c:7951
 msgid "No subscriptions found."
-msgstr "照会先が見つかりませんでした。"
+msgstr "サブスクリプションが見つかりません。"
+
+#: cups/snmp.c:1041
 msgid "No variable-bindings SEQUENCE"
 msgstr "variable-bindings SEQUENCE がありません"
+
+#: cups/snmp.c:996
 msgid "No version number"
-msgstr "バージョン番号がありません"
+msgstr "バージョン名がありません"
+
+#: ppdc/sample.c:339
 msgid "Non-continuous (Mark sensing)"
-msgstr "非連続(マーク感知)"
+msgstr "非連続です (Mark sensing)"
+
+#: ppdc/sample.c:338
 msgid "Non-continuous (Web sensing)"
-msgstr "非連続(Web 感知)"
+msgstr "非連続です (Web sensing)"
+
+#: ppdc/sample.c:210
 msgid "Normal"
-msgstr "通常"
+msgstr "標準"
+
+#: cups/http-support.c:1218
 msgid "Not Found"
-msgstr "見つかりませんでした"
+msgstr "見つかりません"
+
+#: cups/http-support.c:1230
 msgid "Not Implemented"
 msgstr "実装されていません"
+
+#: ppdc/sample.c:248
 msgid "Not Installed"
 msgstr "インストールされていません"
+
+#: cups/http-support.c:1206
 msgid "Not Modified"
 msgstr "変更されていません"
+
+#: cups/http-support.c:1233
 msgid "Not Supported"
-msgstr "対応していません"
+msgstr "サポートされていません"
+
+#: scheduler/ipp.c:1517
 msgid "Not allowed to print."
-msgstr "プリントが許可されていません。"
+msgstr "印刷が許可されていません。"
+
+#: ppdc/sample.c:112
 msgid "Note"
-msgstr "メモ"
+msgstr "注意"
+
+#: cups/http-support.c:1188 cups/ppd.c:334
 msgid "OK"
 msgstr "OK"
+
+#: backend/ipp.c:1698
 msgid "OPC almost at end-of-life."
-msgstr "OPC がもうすぐ寿命になります。"
+msgstr "OPC はもうすぐ交換が必要になります。"
+
+#: backend/ipp.c:1700
 msgid "OPC at end-of-life!"
-msgstr "OPC の寿命が切れました!"
+msgstr "OPC は交換時期です!"
+
+#: ppdc/sample.c:243
 msgid "Off (1-Sided)"
-msgstr "オフ(片面)"
+msgstr "Off (片面)"
+
+#: ppdc/sample.c:333
 msgid "Oki"
 msgstr "Oki"
+
+#: cgi-bin/help.c:89 cgi-bin/help.c:130 cgi-bin/help.c:140 cgi-bin/help.c:171
 msgid "Online Help"
 msgstr "オンラインヘルプ"
+
+#: cups/adminutil.c:983
+#, c-format
 msgid "Open of %s failed: %s"
-msgstr "%s を開けませんでした:%s"
+msgstr "%s のオープンに失敗しました: %s"
+
+#: cups/ppd.c:342
 msgid "OpenGroup without a CloseGroup first"
-msgstr "OpenGroup の前に CloseGroup がありません"
+msgstr "OpenGroup の前にまず CloseGroup が必要です"
+
+#: cups/ppd.c:344
 msgid "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first"
-msgstr "OpenUI/JCLOpenUI の前に CloseUI/JCLCloseUI がありません"
+msgstr "OpenUI/JCLOpenUI の前にまず CloseUI/JCLCloseUI が必要です"
+
+#: cgi-bin/admin.c:3603
 msgid "Operation Policy"
 msgstr "操作ポリシー"
+
+#: cgi-bin/admin.c:3280 cgi-bin/admin.c:3340
 msgid "Options Installed"
 msgstr "インストールされたオプション"
+
+#: filter/bannertops.c:670
 msgid "Options: "
-msgstr "オプション:"
+msgstr "オプション:"
+
+#: backend/ipp.c:1666
 msgid "Out of toner!"
-msgstr "トナーが切れています!"
+msgstr "トナー切れです!"
+
+#: cups/ppd.c:750 cups/ppd.c:1287
 msgid "Output Mode"
 msgstr "出力モード"
+
+#: backend/ipp.c:1682
 msgid "Output bin almost full."
 msgstr "排紙トレイがほとんど一杯です。"
+
+#: backend/ipp.c:1684
 msgid "Output bin full!"
-msgstr "排紙トレイが一杯です!"
+msgstr "排紙トレイが一杯です!"
+
+#: systemv/lpstat.c:1191 systemv/lpstat.c:1195
+#, c-format
 msgid "Output for printer %s is sent to %s\n"
-msgstr "プリンタ %s の出力は %s に送信されます\n"
+msgstr "プリンター %s の出力は %s に送られます\n"
+
+#: systemv/lpstat.c:1185
+#, c-format
 msgid "Output for printer %s is sent to remote printer %s on %s\n"
-msgstr "プリンタ %1$s の出力は %3$s 上のリモートプリンタ %2$s に送信されます\n"
+msgstr "プリンター %s の出力は、リモートプリンター %s (%s 上) に送られます\n"
+
+#: systemv/lpstat.c:1209 systemv/lpstat.c:1213
+#, c-format
 msgid "Output for printer %s/%s is sent to %s\n"
-msgstr "プリンタ %s/%s の出力は %s に送信されます\n"
+msgstr "プリンター %s/%s の出力は %s に送られます\n"
+
+#: systemv/lpstat.c:1203
+#, c-format
 msgid "Output for printer %s/%s is sent to remote printer %s on %s\n"
-msgstr "プリンタ %1$s/%2$s の出力は %4$s 上のリモートプリンタ %3$s に送信されます\n"
+msgstr "プリンター %s/%s の出力は、リモートプリンター %s (%s 上) に送られます\n"
+
+#: backend/ipp.c:1680
 msgid "Output tray missing!"
-msgstr "排紙トレイがありません!"
+msgstr "排紙トレイが見つかりません!"
+
+#: systemv/cupstestdsc.c:403
 msgid "PASS\n"
 msgstr "合格\n"
+
+#: ppdc/sample.c:232
 msgid "PCL Laser Printer"
-msgstr "PCL レーザープリンタ"
+msgstr "PCL レーザープリンター"
+
+#: ppdc/sample.c:77
 msgid "PRC1 Envelope"
 msgstr "PRC1 封筒"
+
+#: ppdc/sample.c:86
 msgid "PRC10 Envelope"
 msgstr "PRC10 封筒"
+
+#: ppdc/sample.c:114
 msgid "PRC16K"
 msgstr "PRC16K"
+
+#: ppdc/sample.c:78
 msgid "PRC2 Envelope"
 msgstr "PRC2 封筒"
+
+#: ppdc/sample.c:79
 msgid "PRC3 Envelope"
 msgstr "PRC3 封筒"
+
+#: ppdc/sample.c:115
 msgid "PRC32K"
 msgstr "PRC32K"
+
+#: ppdc/sample.c:116
 msgid "PRC32K (Oversize)"
-msgstr "PRC32K(特大)"
+msgstr "PRC32K (特大)"
+
+#: ppdc/sample.c:80
 msgid "PRC4 Envelope"
 msgstr "PRC4 封筒"
+
+#: ppdc/sample.c:81
 msgid "PRC5 Envelope"
 msgstr "PRC5 封筒"
+
+#: ppdc/sample.c:82
 msgid "PRC6 Envelope"
 msgstr "PRC6 封筒"
+
+#: ppdc/sample.c:83
 msgid "PRC7 Envelope"
 msgstr "PRC7 封筒"
+
+#: ppdc/sample.c:84
 msgid "PRC8 Envelope"
 msgstr "PRC8 封筒"
+
+#: ppdc/sample.c:85
 msgid "PRC9 Envelope"
 msgstr "PRC9 封筒"
+
+#: cups/snmp.c:1013
 msgid "Packet does not contain a Get-Response-PDU"
-msgstr "パケットに Get-Response-PDU が含まれていません"
+msgstr "パケットが Get-Response-PDU を含んでいません"
+
+#: cups/snmp.c:992
 msgid "Packet does not start with SEQUENCE"
-msgstr "パケットが SEQUENCE で始まっていません"
+msgstr "パケットが SEQUENCE から始まりません"
+
+#: ppdc/sample.c:332
 msgid "ParamCustominCutInterval"
 msgstr "ParamCustominCutInterval"
+
+#: ppdc/sample.c:330
 msgid "ParamCustominTearInterval"
 msgstr "ParamCustominTearInterval"
+
+#: cups/auth.c:149
+#, c-format
 msgid "Password for %s on %s? "
-msgstr "%2$s 上の %1$s のパスワードを入力してください。"
+msgstr "%s のパスワード (%s 上)? "
+
+#: systemv/cupsaddsmb.c:256
+#, c-format
 msgid "Password for %s required to access %s via SAMBA: "
-msgstr "SAMBA 経由で %2$s にアクセスするには %1$s のパスワードが必要です:"
+msgstr "%s のパスワード (SAMBA 経由で %s にアクセスするのに必要):"
+
+#: cgi-bin/classes.c:152
 msgid "Pause Class"
-msgstr "クラスを一時停止"
+msgstr "クラスの休止"
+
+#: cgi-bin/printers.c:155
 msgid "Pause Printer"
-msgstr "プリンタを一時停止"
+msgstr "プリンターの休止"
+
+#: ppdc/sample.c:420
 msgid "Peel-Off"
-msgstr "ガイドに沿って切り取る"
+msgstr "Peel-Off"
+
+#: ppdc/sample.c:76
 msgid "Personal Envelope"
-msgstr "個人用封筒"
+msgstr "パーソナル封筒"
+
+#: ppdc/sample.c:123
 msgid "Photo"
 msgstr "写真"
+
+#: ppdc/sample.c:124
 msgid "Photo Labels"
 msgstr "写真ラベル"
+
+#: ppdc/sample.c:258
 msgid "Plain Paper"
 msgstr "普通紙"
+
+#: cgi-bin/admin.c:3298 cgi-bin/admin.c:3552
 msgid "Policies"
 msgstr "ポリシー"
+
+#: cgi-bin/admin.c:3305 cgi-bin/admin.c:3621 cgi-bin/admin.c:3634
 msgid "Port Monitor"
-msgstr "ポートモニタ"
+msgstr "ポートモニター"
+
+#: ppdc/sample.c:250
 msgid "PostScript Printer"
-msgstr "PostScript プリンタ"
+msgstr "ポストスクリプトプリンター"
+
+#: ppdc/sample.c:113
 msgid "Postcard"
-msgstr "はがき"
+msgstr "ハガキ"
+
+#: ppdc/sample.c:267
 msgid "Print Density"
-msgstr "プリント濃度"
+msgstr "印刷密度"
+
+#: cups/notify.c:82
 msgid "Print Job:"
-msgstr "プリントジョブ:"
+msgstr "ジョブの印刷:"
+
+#: ppdc/sample.c:312
 msgid "Print Mode"
-msgstr "プリントモード"
+msgstr "印刷モード"
+
+#: ppdc/sample.c:355
 msgid "Print Rate"
-msgstr "プリントレート"
+msgstr "印刷レート"
+
+#: cgi-bin/printers.c:164
 msgid "Print Self-Test Page"
-msgstr "セルフテストページをプリント"
+msgstr "自己テストページの印刷"
+
+#: ppdc/sample.c:299
 msgid "Print Speed"
-msgstr "プリント速度"
+msgstr "印刷速度"
+
+#: cgi-bin/ipp-var.c:768
 msgid "Print Test Page"
-msgstr "テストページをプリント"
+msgstr "テストページの印刷"
+
+#: ppdc/sample.c:328
 msgid "Print and Cut"
-msgstr "プリントしてカット"
+msgstr "Print and Cut"
+
+#: ppdc/sample.c:316
 msgid "Print and Tear"
-msgstr "プリントして切り取る"
+msgstr "Print and Tear"
+
+#: filter/bannertops.c:644
 msgid "Printed For: "
-msgstr "プリント対象:"
+msgstr "Printed For: "
+
+#: filter/bannertops.c:652
 msgid "Printed From: "
-msgstr "プリント元:"
+msgstr "Printed From: "
+
+#: filter/bannertops.c:872
 msgid "Printed On: "
-msgstr "プリント先:"
+msgstr "Printed On: "
+
+#: cgi-bin/ipp-var.c:1023
 msgid "Printer Added"
-msgstr "プリンタが追加されました"
+msgstr "追加されたプリンター"
+
+#: ppdc/sample.c:235
 msgid "Printer Default"
-msgstr "プリンタのデフォルト"
+msgstr "デフォルトのプリンター"
+
+#: cgi-bin/ipp-var.c:1027
 msgid "Printer Deleted"
-msgstr "プリンタが削除されました"
+msgstr "削除されたプリンター"
+
+#: cgi-bin/ipp-var.c:1025
 msgid "Printer Modified"
-msgstr "プリンタが変更されました"
+msgstr "変更されたプリンター"
+
+#: filter/bannertops.c:610
 msgid "Printer Name: "
-msgstr "プリンタ名:"
+msgstr "プリンター名:"
+
+#: cgi-bin/ipp-var.c:1021
 msgid "Printer Paused"
-msgstr "プリンタを一時停止中"
+msgstr "プリンターの休止"
+
+#: ppdc/sample.c:266
 msgid "Printer Settings"
-msgstr "プリンタ設定"
+msgstr "プリンター設定"
+
+#: backend/ipp.c:1662
 msgid "Printer offline."
-msgstr "プリンタはオフラインです。"
+msgstr "プリンターはオフラインです。"
+
+#: cups/notify.c:126
 msgid "Printer:"
-msgstr "プリンタ:"
+msgstr "プリンター:"
+
+#: cgi-bin/printers.c:189 cgi-bin/printers.c:317
 msgid "Printers"
-msgstr "プリンタ"
+msgstr "プリンター"
+
+#: cgi-bin/classes.c:158 cgi-bin/printers.c:161
 msgid "Purge Jobs"
-msgstr "ジョブを消去"
+msgstr "ジョブの削除"
+
+#: ppdc/sample.c:117
 msgid "Quarto"
 msgstr "Quarto"
+
+#: scheduler/ipp.c:1512
 msgid "Quota limit reached."
-msgstr "割り当て容量の制限に達しました。"
+msgstr "Quota の制限に達しました。"
+
+#: berkeley/lpq.c:508
 msgid "Rank    Owner   Job     File(s)                         Total Size\n"
-msgstr "ランク    所有者   ジョブ     ファイル                         合計サイズ\n"
+msgstr "ランク  所有者  ジョブ  ファイル                        合計サイズ\n"
+
+#: berkeley/lpq.c:504
 msgid "Rank   Owner      Pri  Job        Files                       Total Size\n"
 msgstr "ランク 所有者     優先 ジョブ     ファイル                    合計サイズ\n"
+
+#: cgi-bin/classes.c:156 cgi-bin/printers.c:159
 msgid "Reject Jobs"
-msgstr "ジョブを拒否"
+msgstr "ジョブの拒否"
+
+#: ppdc/sample.c:400
 msgid "Reprint After Error"
-msgstr "エラー後に再プリント"
+msgstr "エラー後の再印刷"
+
+#: cups/http-support.c:1221
 msgid "Request Entity Too Large"
-msgstr "要求エンティティが大きすぎます"
+msgstr "要求するエンティティが大きすぎます"
+
+#: cups/ppd.c:752 cups/ppd.c:1289 ppdc/sample.c:203
 msgid "Resolution"
 msgstr "解像度"
+
+#: cgi-bin/classes.c:150
 msgid "Resume Class"
-msgstr "クラスを再開"
+msgstr "クラスを再開する"
+
+#: cgi-bin/printers.c:152
 msgid "Resume Printer"
-msgstr "プリンタを再開"
+msgstr "プリンターを再開する"
+
+#: ppdc/sample.c:128
 msgid "Return Address"
-msgstr "差出人住所"
+msgstr "アドレスを戻す"
+
+#: ppdc/sample.c:137
 msgid "Return Address - 3/4 x 2\""
-msgstr "差出人住所 - 3/4 x 2\""
+msgstr "アドレスを戻す ー 3/4 x 2\""
+
+#: ppdc/sample.c:421
 msgid "Rewind"
-msgstr "巻き戻す"
+msgstr "戻る"
+
+#: cups/adminutil.c:2159
+#, c-format
 msgid "Running command: %s %s -N -A %s -c '%s'\n"
-msgstr "コマンドを実行中:%s %s -N -A %s -c '%s'\n"
+msgstr "コマンドを実行中: %s %s -N -A %s -c '%s'\n"
+
+#: backend/scsi-irix.c:70 backend/scsi-linux.c:83
 msgid "SCSI Printer"
-msgstr "SCSI プリンタ"
+msgstr "SCSI プリンター"
+
+#: cups/snmp.c:994
 msgid "SEQUENCE uses indefinite length"
-msgstr "SEQUENCE に使われている長さが不定です"
+msgstr "SEQUENCE は不定長を使用しています"
+
+#: cups/http-support.c:1203
 msgid "See Other"
-msgstr "その他を参照"
+msgstr "残りを見てください"
+
+#: backend/serial.c:784 backend/serial.c:943 backend/serial.c:1066
+#: backend/serial.c:1160
+#, c-format
 msgid "Serial Port #%d"
-msgstr "シリアルポート #%d"
+msgstr "シリアルーポート #%d"
+
+#: cgi-bin/ipp-var.c:1037
 msgid "Server Restarted"
-msgstr "サーバが再起動されました"
+msgstr "再起動されたサーバー"
+
+#: cgi-bin/ipp-var.c:1043
 msgid "Server Security Auditing"
-msgstr "サーバのセキュリティ監査"
+msgstr "サーバーのセキュリティーチェック"
+
+#: cgi-bin/ipp-var.c:1039
 msgid "Server Started"
-msgstr "サーバが開始されました"
+msgstr "開始されたサーバー"
+
+#: cgi-bin/ipp-var.c:1041
 msgid "Server Stopped"
-msgstr "サーバが停止されました"
+msgstr "停止されたサーバー"
+
+#: cups/http-support.c:1239
 msgid "Service Unavailable"
-msgstr "サービスを利用できません"
+msgstr "利用できないサービス"
+
+#: cgi-bin/admin.c:2790 cgi-bin/admin.c:2836 cgi-bin/admin.c:2993
+#: cgi-bin/admin.c:3012
 msgid "Set Allowed Users"
-msgstr "許可するユーザを設定"
+msgstr "許可するユーザーの設定"
+
+#: cgi-bin/admin.c:3039
 msgid "Set As Server Default"
-msgstr "サーバのデフォルトとして設定"
+msgstr "サーバーをデフォルトに設定"
+
+#: cgi-bin/admin.c:3139
 msgid "Set Class Options"
 msgstr "クラスオプションを設定"
+
+#: cgi-bin/admin.c:3139 cgi-bin/admin.c:3308 cgi-bin/admin.c:3663
 msgid "Set Printer Options"
-msgstr "プリンタオプションを設定"
+msgstr "プリンターオプションの設定"
+
+#: cgi-bin/admin.c:3833 cgi-bin/admin.c:3877 cgi-bin/admin.c:3895
 msgid "Set Publishing"
-msgstr "公開を設定"
+msgstr "公開の設定"
+
+#: ppdc/sample.c:129
 msgid "Shipping Address"
-msgstr "送付先住所"
+msgstr "発送アドレス"
+
+#: ppdc/sample.c:138
 msgid "Shipping Address - 2 5/16 x 4\""
-msgstr "送付先住所 - 2 5/16 x 4\""
+msgstr "発送アドレス - 2 5/16 x 4\""
+
+#: ppdc/sample.c:245
 msgid "Short-Edge (Landscape)"
-msgstr "短辺(横)"
+msgstr "短辺 (横原稿)"
+
+#: ppdc/sample.c:260
 msgid "Special Paper"
-msgstr "特殊紙"
+msgstr "スペシャルペーパー"
+
+#: ppdc/sample.c:313
 msgid "Standard"
 msgstr "標準"
+
+#: cgi-bin/admin.c:3526
 msgid "Starting Banner"
 msgstr "開始バナー"
+
+#: ppdc/sample.c:118
 msgid "Statement"
-msgstr "ステートメント"
+msgstr "記述"
+
+#: ppdc/sample.c:223
 msgid "Stylus Color Series"
 msgstr "Stylus Color シリーズ"
+
+#: ppdc/sample.c:229
 msgid "Stylus Photo Series"
 msgstr "Stylus Photo シリーズ"
+
+#: ppdc/sample.c:119
 msgid "Super A"
-msgstr "Super A"
+msgstr "スーパー A"
+
+#: ppdc/sample.c:120
 msgid "Super B"
-msgstr "Super B"
+msgstr "スーパー B"
+
+#: ppdc/sample.c:125
 msgid "Super B/A3"
-msgstr "Super B/A3"
+msgstr "スーパー B/A3"
+
+#: cups/http-support.c:1185
 msgid "Switching Protocols"
-msgstr "プロトコルを切り替え中"
+msgstr "プロトコルの変更"
+
+#: ppdc/sample.c:121
 msgid "Tabloid"
-msgstr "Tabloid"
+msgstr "タブロイド"
+
+#: ppdc/sample.c:122
 msgid "Tabloid (Oversize)"
-msgstr "Tabloid(特大)"
+msgstr "タブロイド (特大)"
+
+#: ppdc/sample.c:314
 msgid "Tear"
-msgstr "切り取る"
+msgstr "Tear"
+
+#: ppdc/sample.c:419
 msgid "Tear-Off"
-msgstr "切り取る"
+msgstr "Tear-Off"
+
+#: ppdc/sample.c:360
 msgid "Tear-Off Adjust Position"
-msgstr "切り取り調整位置"
+msgstr "Tear-Off 位置調節"
+
+#: scheduler/ipp.c:7309
+#, c-format
 msgid "The PPD file \"%s\" could not be found."
-msgstr "PPD ファイル“%s”が見つかりませんでした。"
+msgstr "PPD ファイル \"%s\" が見つかりません。"
+
+#: scheduler/ipp.c:7296
+#, c-format
 msgid "The PPD file \"%s\" could not be opened: %s"
-msgstr "PPD ファイル“%s”を開けませんでした:%s"
+msgstr "PPD ファイル \"%s\" が開きませんでした: %s"
+
+#: cgi-bin/admin.c:638
 msgid "The class name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)."
-msgstr "クラス名には 127 文字以下のプリント可能な文字だけを使用できます。空白、スラッシュ(/)、ポンド記号(#)を含めることはできません。"
+msgstr "クラス名は 127 文字以内の表示可能文字から成り、空白、スラッシュ (/)、ポンド記号 (#) を含んではなりません。"
+
+#: scheduler/ipp.c:2165
 msgid "The notify-lease-duration attribute cannot be used with job subscriptions."
-msgstr "notify-lease-duration 属性はジョブ照会先では使用できません。"
+msgstr "notify-lease-duration 属性は、ジョブサブスクリプションと一緒に使うことはできません。"
+
+#: scheduler/ipp.c:2148 scheduler/ipp.c:6200
+#, c-format
 msgid "The notify-user-data value is too large (%d > 63 octets)!"
-msgstr "notify-user-data 値が大きすぎます(%d は 63 オクテットを超えています)!"
+msgstr "notify-user-data 値が大きすぎます (%d > 63 オクテット)!"
+
+#: cgi-bin/admin.c:821
 msgid "The printer name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)."
-msgstr "プリンタ名には 127 文字以下のプリント可能な文字だけを使用できます。空白、スラッシュ(/)、ポンド記号(#)を含めることはできません。"
+msgstr "プリンター名は 127 文字以内の表示可能文字から成り、空白、スラッシュ (/)、ポンド記号 (#) を含んではなりません。"
+
+#: scheduler/ipp.c:1347
 msgid "The printer or class is not shared!"
-msgstr "プリンタまたはクラスが共有されていません!"
+msgstr "プリンターまたはクラスは共有できません!"
+
+#: scheduler/ipp.c:872 scheduler/ipp.c:1178 scheduler/ipp.c:3848
+#: scheduler/ipp.c:3954 scheduler/ipp.c:5731 scheduler/ipp.c:6034
+#: scheduler/ipp.c:6347 scheduler/ipp.c:6884 scheduler/ipp.c:7514
+#: scheduler/ipp.c:7570 scheduler/ipp.c:7878 scheduler/ipp.c:8146
+#: scheduler/ipp.c:8236 scheduler/ipp.c:8269 scheduler/ipp.c:8589
+#: scheduler/ipp.c:8980 scheduler/ipp.c:9060 scheduler/ipp.c:10261
+#: scheduler/ipp.c:10714 scheduler/ipp.c:11042 scheduler/ipp.c:11109
+#: scheduler/ipp.c:11392
 msgid "The printer or class was not found."
-msgstr "プリンタまたはクラスが見つかりませんでした。"
+msgstr "プリンターまたはクラスが見つかりませんでした。"
+
+#: scheduler/ipp.c:978 scheduler/ipp.c:2355
+#, c-format
 msgid "The printer-uri \"%s\" contains invalid characters."
-msgstr "printer-uri“%s”に無効な文字が含まれています。"
+msgstr "printer-uri \"%s\" には、無効な文字が含まれています。"
+
+#: scheduler/ipp.c:3793
 msgid "The printer-uri attribute is required!"
-msgstr "printer-uri 属性は必須です!"
+msgstr "printer-uri 属性は必須です!"
+
+#: scheduler/ipp.c:962
 msgid "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"."
-msgstr "printer-uri は“ipp://HOSTNAME/classes/CLASSNAME”の形式である必要があります。"
+msgstr "printer-uri は、\"ipp://ホスト名/classes/クラス名\" 形式でなければなりません。"
+
+#: scheduler/ipp.c:2339
 msgid "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"."
-msgstr "printer-uri は“ipp://HOSTNAME/printers/PRINTERNAME”の形式である必要があります。"
+msgstr "printer-uri は \"ipp://ホスト名/printers/プリンター名\" 形式でなければなりません。"
+
+#: cgi-bin/admin.c:385
 msgid "The subscription name may not contain spaces, slashes (/), question marks (?), or the pound sign (#)."
-msgstr "照会先名には空白、スラッシュ(/)、疑問符(?)、ポンド記号(#)を含めることはできません。"
+msgstr "サブスクリプション名には、スペース、スラッシュ (/)、疑問府 (?)、ポンド記号 (#) を使用しないでください。"
+
+#: scheduler/ipp.c:6277
 msgid "There are too many subscriptions."
-msgstr "照会先が多すぎます。"
+msgstr "サブスクリプションが多すぎます。"
+
+#: ppdc/sample.c:407
 msgid "Thermal Transfer Media"
 msgstr "熱転写メディア"
+
+#: filter/bannertops.c:636
 msgid "Title: "
-msgstr "タイトル:"
+msgstr "タイトル: "
+
+#: backend/ipp.c:1664
 msgid "Toner low."
 msgstr "トナーが少なくなっています。"
+
+#: scheduler/ipp.c:1506
 msgid "Too many active jobs."
 msgstr "アクティブなジョブが多すぎます。"
+
+#: scheduler/ipp.c:1444
+#, c-format
 msgid "Too many job-sheets values (%d > 2)!"
-msgstr "job-sheets 値が多すぎます(%d は 2 を超えています)!"
+msgstr "job-sheets 値が多すぎます (%d > 2)!"
+
+#: scheduler/ipp.c:2659
+#, c-format
 msgid "Too many printer-state-reasons values (%d > %d)!"
-msgstr "printer-state-reasons 値が多すぎます(%d は %d を超えています)!"
+msgstr "printer-state-reasons 値が多すぎます (%d > %d)!"
+
+#: ppdc/sample.c:261
 msgid "Transparency"
-msgstr "透明度"
+msgstr "OHP シート"
+
+#: ppdc/sample.c:256
 msgid "Tray"
 msgstr "トレイ"
+
+#: ppdc/sample.c:236
 msgid "Tray 1"
 msgstr "トレイ 1"
+
+#: ppdc/sample.c:237
 msgid "Tray 2"
 msgstr "トレイ 2"
+
+#: ppdc/sample.c:238
 msgid "Tray 3"
 msgstr "トレイ 3"
+
+#: ppdc/sample.c:239
 msgid "Tray 4"
 msgstr "トレイ 4"
+
+#: cups/http-support.c:1224
 msgid "URI Too Long"
-msgstr "URI が長すぎます"
+msgstr "URI が長過ぎます"
+
+#: ppdc/sample.c:88
 msgid "US Executive"
-msgstr "US Executive"
+msgstr "US エグゼクティブ"
+
+#: ppdc/sample.c:91
 msgid "US Fanfold"
 msgstr "US Fanfold"
+
+#: ppdc/sample.c:105
 msgid "US Ledger"
-msgstr "US Ledger"
+msgstr "US レジャー"
+
+#: ppdc/sample.c:106
 msgid "US Legal"
-msgstr "リーガル"
+msgstr "US リーガル"
+
+#: ppdc/sample.c:107
 msgid "US Legal (Oversize)"
-msgstr "リーガル(特大)"
+msgstr "US リーガル (特大)"
+
+#: ppdc/sample.c:108
 msgid "US Letter"
-msgstr "レター"
+msgstr "US レター"
+
+#: ppdc/sample.c:109
 msgid "US Letter (Oversize)"
-msgstr "レター(特大)"
+msgstr "US レター (特大)"
+
+#: ppdc/sample.c:110
 msgid "US Letter (Small)"
-msgstr "レター(小)"
+msgstr "US レター (小)"
+
+#: backend/serial.c:797
+#, c-format
 msgid "USB Serial Port #%d"
 msgstr "USB シリアルポート #%d"
+
+#: cgi-bin/admin.c:1921 cgi-bin/admin.c:1934 cgi-bin/admin.c:1958
 msgid "Unable to access cupsd.conf file:"
-msgstr "cupsd.conf ファイルにアクセスできません:"
+msgstr "cupsd.conf ファイルにアクセスできません:"
+
+#: cgi-bin/admin.c:437
 msgid "Unable to add RSS subscription:"
-msgstr "RSS 照会先を追加できません:"
+msgstr " RSS 購読を追加できません:"
+
+#: cgi-bin/admin.c:704
 msgid "Unable to add class:"
-msgstr "クラスを追加できません:"
+msgstr "クラスを追加できません:"
+
+#: scheduler/ipp.c:1550
+#, c-format
 msgid "Unable to add job for destination \"%s\"!"
-msgstr "送信先“%s”のジョブを追加できません!"
+msgstr "宛先\"%s\"にジョブを追加できません!"
+
+#: cgi-bin/admin.c:953 cgi-bin/admin.c:1312
 msgid "Unable to add printer:"
-msgstr "プリンタを追加できません:"
+msgstr "プリンターを追加ができません:"
+
+#: scheduler/ipp.c:1292
 msgid "Unable to allocate memory for file types!"
-msgstr "ファイルタイプ用にメモリを割り当てられません!"
+msgstr "ファイルタイプ用にメモリを割り当てられません!"
+
+#: cgi-bin/admin.c:1418
 msgid "Unable to cancel RSS subscription:"
-msgstr "RSS 照会先をキャンセルできません:"
+msgstr "RSS 購読をキャンセルできません:"
+
+#: cgi-bin/admin.c:3878
 msgid "Unable to change printer-is-shared attribute:"
-msgstr "printer-is-shared 属性を変更できません:"
+msgstr "printer-is-shared 属性を変更することができません:"
+
+#: cgi-bin/admin.c:2994
 msgid "Unable to change printer:"
-msgstr "プリンタを変更できません:"
+msgstr "プリンターを変更できません:"
+
+#: cgi-bin/admin.c:1598 cgi-bin/admin.c:1762
 msgid "Unable to change server settings:"
-msgstr "サーバ設定を変更できません:"
+msgstr "サーバーの設定を変更できません:"
+
+#: cups/adminutil.c:941 cups/util.c:1672
 msgid "Unable to connect to host."
-msgstr "ホストに接続できません。"
+msgstr "ホストに接続できません"
+
+#: cups/adminutil.c:737
+#, c-format
 msgid "Unable to copy 64-bit CUPS printer driver files (%d)!"
-msgstr "64 ビット CUPS プリンタ・ドライバ・ファイルをコピーできません(%d)!"
+msgstr "64-bit 版の CUPS プリンタードライバーファイルをコピーできません (%d)!"
+
+#: cups/adminutil.c:702
+#, c-format
 msgid "Unable to copy 64-bit Windows printer driver files (%d)!"
-msgstr "64 ビット Windows プリンタ・ドライバ・ファイルをコピーできません(%d)!"
+msgstr "64-bit 版の Windows プリンタードライバーをコピーできません (%d)!"
+
+#: cups/adminutil.c:533
+#, c-format
 msgid "Unable to copy CUPS printer driver files (%d)!"
-msgstr "CUPS プリンタ・ドライバ・ファイルをコピーできません(%d)!"
+msgstr "複数の CUPS プリンタードライバーファイルをコピーできません (%d)!"
+
+#: scheduler/ipp.c:2776
+#, c-format
 msgid "Unable to copy PPD file - %s!"
-msgstr "PPD ファイルをコピーできません - %s!"
+msgstr "PPD ファイルをコピーできません! - %s"
+
+#: scheduler/ipp.c:2842
 msgid "Unable to copy PPD file!"
-msgstr "PPD ファイルをコピーできません!"
+msgstr "PPD ファイルをコピーできません!"
+
+#: cups/adminutil.c:498
+#, c-format
 msgid "Unable to copy Windows 2000 printer driver files (%d)!"
-msgstr "Windows 2000 プリンタ・ドライバ・ファイルをコピーできません(%d)!"
+msgstr "複数の Windows 2000 プリンタードライバーファイルをコピーできません (%d)!"
+
+#: cups/adminutil.c:621
+#, c-format
 msgid "Unable to copy Windows 9x printer driver files (%d)!"
-msgstr "Windows 9x プリンタ・ドライバ・ファイルをコピーできません(%d)!"
+msgstr "複数の Windows 9x プリンタードライバーファイルをコピーできません (%d)!"
+
+#: scheduler/ipp.c:2753
+#, c-format
 msgid "Unable to copy interface script - %s!"
-msgstr "インターフェイス・スクリプトをコピーできません - %s!"
+msgstr "インターフェイススクリプトをコピーできません! - %s"
+
+#: cups/util.c:613 cups/util.c:1732
 msgid "Unable to create printer-uri!"
-msgstr "printer-uri を作成できません!"
+msgstr "printer-uri を作成できません!"
+
+#: cgi-bin/admin.c:1812 cgi-bin/admin.c:1824
 msgid "Unable to create temporary file:"
-msgstr "一時ファイルを作成できません:"
+msgstr "テンポラリファイルを作成できません:"
+
+#: cgi-bin/admin.c:2115
 msgid "Unable to delete class:"
-msgstr "クラスを削除できません:"
+msgstr "クラスを削除できません:"
+
+#: cgi-bin/admin.c:2200
 msgid "Unable to delete printer:"
-msgstr "プリンタを削除できません:"
+msgstr "プリンターを削除できません:"
+
+#: cgi-bin/classes.c:245 cgi-bin/printers.c:254
 msgid "Unable to do maintenance command:"
-msgstr "保守コマンドを実行できません:"
+msgstr "メンテナンスコマンドを実行できません:"
+
+#: cgi-bin/admin.c:1936
 msgid "Unable to edit cupsd.conf files larger than 1MB!"
-msgstr "1MB を超える cupsd.conf ファイルは編集できません!"
+msgstr "1MB 以上の cupsd.conf ファイルは編集できません!"
+
+#: cgi-bin/ipp-var.c:362
 msgid "Unable to find destination for job!"
-msgstr "ジョブの送信先が見つかりません!"
+msgstr "ジョブの宛先が見つかりません!"
+
+#: cups/http-support.c:1430
 msgid "Unable to find printer!\n"
-msgstr "プリンタが見つかりません!\n"
+msgstr "プリンターが見つかりません!\n"
+
+#: cgi-bin/classes.c:435
 msgid "Unable to get class list:"
-msgstr "クラスリストを取得できません:"
+msgstr "クラスリストを取得できません:"
+
+#: cgi-bin/classes.c:534
 msgid "Unable to get class status:"
-msgstr "クラスの状況を取得できません:"
+msgstr "クラスの状態を取得できません:"
+
+#: cgi-bin/admin.c:1213
 msgid "Unable to get list of printer drivers:"
-msgstr "プリンタドライバのリストを取得できません:"
+msgstr "プリンタードライバーのリストを取得できません:"
+
+#: cgi-bin/admin.c:2844
 msgid "Unable to get printer attributes:"
-msgstr "プリンタ属性を取得できません:"
+msgstr "プリンター属性を取得できません:"
+
+#: cgi-bin/printers.c:452
 msgid "Unable to get printer list:"
-msgstr "プリンタリストを取得できません:"
+msgstr "プリンターリストを取得できません:"
+
+#: cgi-bin/printers.c:554
 msgid "Unable to get printer status:"
-msgstr "プリンタの状況を取得できません:"
+msgstr "プリンターの状態を取得できません:"
+
+#: cups/adminutil.c:576 cups/adminutil.c:780
+#, c-format
 msgid "Unable to install Windows 2000 printer driver files (%d)!"
-msgstr "Windows 2000 プリンタ・ドライバ・ファイルをインストールできません(%d)!"
+msgstr "複数の Windows 2000 プリンタードライバーファイルをインストールできません (%d)!"
+
+#: cups/adminutil.c:650
+#, c-format
 msgid "Unable to install Windows 9x printer driver files (%d)!"
-msgstr "Windows 9x プリンタ・ドライバ・ファイルをインストールできません(%d)!"
+msgstr "複数の Windows 9x プリンタードライバーファイルをインストールできません (%d)!"
+
+#: cgi-bin/admin.c:703
 msgid "Unable to modify class:"
-msgstr "クラスを変更できません:"
+msgstr "クラスを変更できません:"
+
+#: cgi-bin/admin.c:952 cgi-bin/admin.c:1311
 msgid "Unable to modify printer:"
-msgstr "プリンタを変更できません:"
+msgstr "プリンターを変更できません:"
+
+#: cgi-bin/ipp-var.c:498
 msgid "Unable to move job"
 msgstr "ジョブを移動できません"
+
+#: cgi-bin/ipp-var.c:500
 msgid "Unable to move jobs"
-msgstr "ジョブを移動できません"
+msgstr "複数のジョブを移動できません"
+
+#: cups/ppd.c:335
 msgid "Unable to open PPD file"
-msgstr "PPD ファイルを開けません"
+msgstr "PPD ファイルを読み込むことができません"
+
+#: cgi-bin/admin.c:3190
 msgid "Unable to open PPD file:"
-msgstr "PPD ファイルを開けません:"
+msgstr "PPD ファイルを読み込むことができません:"
+
+#: cgi-bin/admin.c:2570
 msgid "Unable to open cupsd.conf file:"
-msgstr "cupsd.conf ファイルを開けません:"
+msgstr "cupsd.conf ファイルを開けません:"
+
+#: scheduler/ipp.c:6682
+#, c-format
 msgid "Unable to open document %d in job %d!"
-msgstr "ジョブ %2$d で書類 %1$d を開けません!"
+msgstr "ドキュメント %d (ジョブ %d)を開けません!"
+
+#: cgi-bin/ipp-var.c:771
 msgid "Unable to print test page:"
-msgstr "テストページをプリントできません:"
+msgstr "テストページを印刷できません:"
+
+#: cups/adminutil.c:2190
+#, c-format
 msgid "Unable to run \"%s\": %s\n"
-msgstr "“%s”を実行できません:%s\n"
+msgstr "\"%s\" を実行できません: %s\n"
+
+#: cgi-bin/ipp-var.c:575 cgi-bin/ipp-var.c:595
 msgid "Unable to send command to printer driver!"
-msgstr "プリンタドライバにコマンドを送信できません!"
+msgstr "プリンタードライバーにコマンドを送信できません!"
+
+#: cups/adminutil.c:832
+#, c-format
 msgid "Unable to set Windows printer driver (%d)!"
-msgstr "Windows プリンタドライバを設定できません(%d)!"
+msgstr "Windows プリンタードライバーを設定できません (%d)!"
+
+#: cgi-bin/admin.c:3779
 msgid "Unable to set options:"
-msgstr "オプションを設定できません:"
+msgstr "オプションを設定できません:"
+
+#: cgi-bin/admin.c:3081
 msgid "Unable to set server default:"
-msgstr "サーバのデフォルトを設定できません:"
+msgstr "サーバーをデフォルトに設定できません:"
+
+#: cgi-bin/admin.c:1874
 msgid "Unable to upload cupsd.conf file:"
-msgstr "cupsd.conf ファイルをアップロードできません:"
+msgstr "cupsd.conf ファイルをアップロードできません:"
+
+#: backend/usb-darwin.c:1816 backend/usb-darwin.c:1838
 msgid "Unable to use legacy USB class driver!\n"
-msgstr "古い USB クラスドライバは使用できません!\n"
+msgstr "古いタイプの USB クラスドライバーは使用できません!\n"
+
+#: cups/http-support.c:1212
 msgid "Unauthorized"
-msgstr "未承認"
+msgstr "不許可"
+
+#: cgi-bin/admin.c:3479
 msgid "Units"
 msgstr "ユニット"
+
+#: cups/http-support.c:1243 cups/ppd.c:359
 msgid "Unknown"
-msgstr "不明"
+msgstr "未知"
+
+#: backend/ipp.c:1711
+#, c-format
 msgid "Unknown printer error (%s)!"
-msgstr "不明なプリンタエラーです(%s)!"
+msgstr "未知のプリンターエラー (%s) です!"
+
+#: scheduler/ipp.c:10915
+#, c-format
 msgid "Unknown printer-error-policy \"%s\"."
-msgstr "printer-error-policy“%s”が不明です。"
+msgstr "\"%s\" は未知の printer-error-policy です。"
+
+#: scheduler/ipp.c:10899
+#, c-format
 msgid "Unknown printer-op-policy \"%s\"."
-msgstr "printer-op-policy“%s”が不明です。"
+msgstr "\"%s\" は未知の printer-op-policy です。"
+
+#: scheduler/ipp.c:406
+#, c-format
 msgid "Unsupported character set \"%s\"!"
-msgstr "文字セット“%s”には対応していません!"
+msgstr "\"%s\" はサポートされていない文字セットです!"
+
+#: scheduler/ipp.c:8555 scheduler/ipp.c:9850
+#, c-format
 msgid "Unsupported compression \"%s\"!"
-msgstr "圧縮“%s”には対応していません!"
+msgstr "\"%s\" はサポートされていない圧縮形式です!"
+
+#: scheduler/ipp.c:11345
+#, c-format
 msgid "Unsupported compression attribute %s!"
-msgstr "圧縮属性 %s には対応していません!"
+msgstr "%s はサポートされていない圧縮属性です!"
+
+#: scheduler/ipp.c:11373
+#, c-format
 msgid "Unsupported format \"%s\"!"
-msgstr "“%s”の形式には対応していません!"
+msgstr "\"%s\" はサポートされていない形式です!"
+
+#: scheduler/ipp.c:1410 scheduler/ipp.c:9984
+#, c-format
 msgid "Unsupported format '%s'!"
-msgstr "‘%s’の形式には対応していません!"
+msgstr "'%s' はサポートされていない形式です!"
+
+#: scheduler/ipp.c:8689 scheduler/ipp.c:9967
+#, c-format
 msgid "Unsupported format '%s/%s'!"
-msgstr "‘%s/%s’の形式には対応していません!"
+msgstr "'%s/%s' はサポートされていない形式です!"
+
+#: cups/snmp.c:1111
 msgid "Unsupported value type"
-msgstr "対応していない値タイプです"
+msgstr "サポートされていない型の値です"
+
+#: cups/http-support.c:1227
 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 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"
+
+#: systemv/lpadmin.c:805
+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"
+
+#: filter/pdftops.c:93
+#, c-format
 msgid "Usage: %s job user title copies options [filename]\n"
-msgstr "Usage: %s job user title copies options [filename]\n"
+msgstr "使い方: %s ジョブID ユーザー タイトル コピー数 オプション [ファイル名]\n"
+
+#: backend/ipp.c:210 backend/lpd.c:184 backend/pap.c:228
+#: backend/parallel.c:127 backend/scsi.c:157 backend/serial.c:165
+#: backend/socket.c:132 backend/usb.c:183 filter/bannertops.c:118
+#: filter/hpgl-main.c:148 filter/imagetops.c:115 filter/imagetoraster.c:207
+#: filter/pstops.c:254 filter/rastertoepson.c:985 filter/rastertohp.c:712
+#: filter/rastertolabel.c:1133 filter/textcommon.c:518
+#, c-format
 msgid "Usage: %s job-id user title copies options [file]\n"
-msgstr "Usage: %s job-id user title copies options [file]\n"
+msgstr "使い方: %s ジョブID ユーザー タイトル コピー数 オプション [ファイル]\n"
+
+#: filter/gziptoany.c:53
+#, c-format
 msgid "Usage: %s job-id user title copies options file\n"
-msgstr "Usage: %s job-id user title copies options file\n"
-msgid "Usage: convert [ options ]\n\nOptions:\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 "Usage: convert [ options ]\n\nOptions:\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"
-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 "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"
-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 "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"
-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 "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: cupsfilter -m mime/type [ options ] filename\n\nOptions:\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 "Usage: cupsfilter -m mime/type [ options ] filename\n\nOptions:\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"
-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 "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"
-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,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 "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,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 "使い方: %s ジョブID ユーザー タイトル コピー数 オプション ファイル\n"
+
+#: scheduler/cupsfilter.c:1297
+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"
+
+#: systemv/cupsaddsmb.c:286
+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"
+
+#: systemv/cupsctl.c:202
+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"
+
+#: scheduler/main.c:2057
+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"
+
+#: scheduler/cupsfilter.c:1285
+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"
+
+#: systemv/cupstestdsc.c:430
+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"
+
+#: systemv/cupstestppd.c:2928
+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"
+
+#: systemv/lpmove.c:132
 msgid "Usage: lpmove job/src dest\n"
-msgstr "Usage: lpmove job/src dest\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 "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 "使い方: lpmove ジョブ/ソース 宛先\n"
+
+#: systemv/lpoptions.c:540
+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"
+
+#: systemv/lppasswd.c:493
 msgid "Usage: lppasswd [-g groupname]\n"
-msgstr "Usage: lppasswd [-g groupname]\n"
-msgid "Usage: lppasswd [-g groupname] [username]\n       lppasswd [-g groupname] -a [username]\n       lppasswd [-g groupname] -x [username]\n"
-msgstr "Usage: lppasswd [-g groupname] [username]\n       lppasswd [-g groupname] -a [username]\n       lppasswd [-g groupname] -x [username]\n"
+msgstr "使い方: lppasswd [-g グループ名]\n"
+
+#: systemv/lppasswd.c:496
+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"
+
+#: berkeley/lpq.c:663
 msgid "Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]\n"
-msgstr "Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]\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 [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"
-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 "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"
-msgid "Usage: ppdi [options] filename.ppd [ ... filenameN.ppd ]\nOptions:\n  -I include-dir\n  -o filename.drv\n"
-msgstr "Usage: ppdi [options] filename.ppd [ ... filenameN.ppd ]\nOptions:\n  -I include-dir\n  -o filename.drv\n"
-msgid "Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]\nOptions:\n  -o filename.ppd[.gz]\n"
-msgstr "Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]\nOptions:\n  -o filename.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 "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 "使い方: lpq [-P 宛先] [-U ユーザー名] [-h ホスト名[:ポート]] [-l] [+間隔]\n"
+
+#: ppdc/ppdc.cxx:393
+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"
+
+#: ppdc/ppdhtml.cxx:174
+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"
+
+#: ppdc/ppdi.cxx:130
+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"
+
+#: ppdc/ppdmerge.cxx:370
+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"
+
+#: ppdc/ppdpo.cxx:255
+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"
+
+#: backend/snmp.c:224
 msgid "Usage: snmp [host-or-ip-address]\n"
-msgstr "Usage: snmp [host-or-ip-address]\n"
+msgstr "使い方: snmp [ホストまたはIPアドレス]\n"
+
+#: cups/snmp.c:1063
 msgid "Value uses indefinite length"
-msgstr "値に使われている長さが不定です"
+msgstr "値は不定長です"
+
+#: cups/snmp.c:1048
 msgid "VarBind uses indefinite length"
-msgstr "VarBind に使われている長さが不定です"
+msgstr "VarBind は不定長です"
+
+#: cups/snmp.c:998
 msgid "Version uses indefinite length"
-msgstr "バージョンに使われている長さが不定です"
+msgstr "Version は不定長です"
+
+#: backend/pap.c:328
+#, c-format
 msgid "WARNING: Adding only the first %d printers found"
-msgstr "WARNING: 見つかったプリンタのうち最初の %d 台だけが追加されます"
+msgstr "WARNING: 発見した順番に %d 台のプリンターだけ追加します"
+
+#: backend/pap.c:1460 backend/usb-darwin.c:1679
+#, c-format
 msgid "WARNING: Boolean expected for waiteof option \"%s\"\n"
-msgstr "WARNING: waiteof オプション“%s”は論理値でなければなりません\n"
+msgstr "WARNING: 論理値は、waiteof オプション \"%s\" であるべきです\n"
+
+#: backend/network.c:83 backend/pap.c:1293 backend/parallel.c:638
+#: backend/serial.c:1285 backend/usb-libusb.c:747 backend/usb-unix.c:583
 msgid "WARNING: Failed to read side-channel request!\n"
-msgstr "WARNING: side-channel 要求の読み取りに失敗しました!\n"
+msgstr "WARNING: サイドチャンネルの読み出しに失敗しました!\n"
+
+#: filter/pstops.c:2227
+#, c-format
 msgid "WARNING: Option \"%s\" cannot be included via IncludeFeature!\n"
-msgstr "WARNING: オプション“%s”は IncludeFeature 経由で取り込むことはできません!\n"
+msgstr "WARNING: オプション \"%s\" は IncludeFeature 経由で含めることはできません!\n"
+
+#: backend/pap.c:503
 msgid "WARNING: Printer not responding\n"
-msgstr "WARNING: プリンタが応答しません\n"
+msgstr "WARNING: プリンターが反応しません\n"
+
+#: backend/pap.c:831 backend/pap.c:854
 msgid "WARNING: Printer sent unexpected EOF\n"
-msgstr "WARNING: プリンタが予期しない EOF を送信しました\n"
+msgstr "WARNING: プリンターが意図しない EOF を返しました\n"
+
+#: backend/lpd.c:593
+#, c-format
 msgid "WARNING: Remote host did not respond with command status byte after %d seconds!\n"
-msgstr "WARNING: リモートホストが %d 秒後にコマンド・ステータス・バイトで応答しませんでした!\n"
+msgstr "WARNING: リモートホストは %d 秒経ってもコマンド・ステータス・バイトを返しませんでした!\n"
+
+#: backend/lpd.c:1015 backend/lpd.c:1162
+#, c-format
 msgid "WARNING: Remote host did not respond with control status byte after %d seconds!\n"
-msgstr "WARNING: リモートホストが %d 秒後に制御ステータスバイトで応答しませんでした!\n"
+msgstr "WARNING: リモートホストは %d 秒経ってもコントロール・ステータス・バイトを返しませんでした!\n"
+
+#: backend/lpd.c:1107
+#, c-format
 msgid "WARNING: Remote host did not respond with data status byte after %d seconds!\n"
-msgstr "WARNING: リモートホストが %d 秒後にデータ・ステータス・バイトで応答しませんでした!\n"
+msgstr "WARNING: リモートホストは %d 秒経ってもデータ・ステータス・バイトを返しませんでした!\n"
+
+#: backend/scsi-irix.c:210 backend/scsi-linux.c:228
+#, c-format
 msgid "WARNING: SCSI command timed out (%d); retrying...\n"
-msgstr "WARNING: SCSI コマンドがタイムアウトになりました(%d)。再試行中...\n"
+msgstr "WARNING: SCSI コマンドはタイムアウトしました (%d)。再試行中...\n"
+
+#: filter/pstops.c:1091
 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"
+msgstr "WARNING: この書類は Adobe Document Structuring Conventions に適合しておらず、正しくプリントできない可能性があります!\n"
+
+#: backend/pap.c:492
+#, c-format
 msgid "WARNING: Unable to open \"%s:%s\": %s\n"
-msgstr "WARNING: “%s:%s”を開けません:%s\n"
+msgstr "WARNING: \"%s:%s\": %s を開けません\n"
+
+#: backend/pap.c:637
 msgid "WARNING: Unable to send PAP status request"
-msgstr "WARNING: PAP 状況要求を送信できません"
+msgstr "WARNING: PAP ステータス・リクエストを送信できません"
+
+#: backend/pap.c:867
+#, c-format
 msgid "WARNING: Unexpected PAP packet of type %d\n"
-msgstr "WARNING: %d は予期しない PAP パケットタイプです\n"
+msgstr "WARNING: %d タイプの意図しない PAP パケット\n"
+
+#: backend/pap.c:872
+#, c-format
 msgid "WARNING: Unknown PAP packet of type %d\n"
-msgstr "WARNING: %d は不明な PAP パケットタイプです\n"
+msgstr "WARNING: 未知の PAP パケットのタイプ %d\n"
+
+#: filter/pstops.c:2234
+#, c-format
 msgid "WARNING: Unknown choice \"%s\" for option \"%s\"!\n"
-msgstr "WARNING: オプション“%2$s”に不明な“%1$s”が選択されています!\n"
+msgstr "WARNING:  \"%s\" (オプション \"%s\" 用) は未知の設定です!\n"
+
+#: filter/pstops.c:2220
+#, c-format
 msgid "WARNING: Unknown option \"%s\"!\n"
-msgstr "WARNING: “%s”は不明なオプションです!\n"
+msgstr "WARNING: \"%s\" は未知のオプションです!\n"
+
+#: backend/serial.c:380
+#, c-format
 msgid "WARNING: Unsupported baud rate %s!\n"
-msgstr "WARNING: ボーレート %s には対応していません!\n"
+msgstr "WARNING: %s はサポートしないボーレートです!\n"
+
+#: backend/pap.c:1474
+#, c-format
 msgid "WARNING: number expected for status option \"%s\"\n"
-msgstr "WARNING: 状況オプション“%s”は数値でなければなりません\n"
+msgstr "WARNING: ステータス・オプションの期待値は \"%s\"\n"
+
+#: backend/ipp.c:578 backend/ipp.c:709 backend/lpd.c:828 backend/socket.c:318
+#, c-format
 msgid "WARNING: recoverable: Network host '%s' is busy; will retry in %d seconds...\n"
-msgstr "WARNING: 回復可能:ネットワークホスト‘%s’はビジー状態です。%d 秒後に再試行します...\n"
+msgstr "WARNING: 回復可能: ネットワークホスト '%s' はビジー状態です (%d 秒後に再試行します...)\n"
+
+#: cups/adminutil.c:804
 msgid "Warning, no Windows 2000 printer drivers are installed!"
-msgstr "警告、Windows 2000 プリンタドライバがインストールされていません!"
+msgstr "警告、Windows 2000 プリンタードライバーがインストールされていません!"
+
+#: cups/ppd.c:1865
 msgid "Yes"
 msgstr "はい"
+
+#: scheduler/client.c:2419
+#, 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> を使用する必要があります。"
+msgstr "このページには URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A> を使ってアクセスする必要があります。"
+
+#: ppdc/sample.c:87
 msgid "You4 Envelope"
-msgstr "You4 封筒"
+msgstr "洋形 4 号"
+
+#: ppdc/sample.c:411
 msgid "ZPL Label Printer"
-msgstr "ZPL ラベルプリンタ"
+msgstr "ZPL ラベル・プリンター"
+
+#: ppdc/sample.c:334
 msgid "Zebra"
-msgstr "Zebra"
+msgstr "ゼブラ"
+
+#: cups/notify.c:102
 msgid "aborted"
-msgstr "破棄されました"
+msgstr "停止"
+
+#: cups/notify.c:99
 msgid "canceled"
-msgstr "キャンセルされました"
+msgstr "キャンセル"
+
+#: cups/notify.c:105
 msgid "completed"
-msgstr "完了しました"
+msgstr "完了"
+
+#: scheduler/cupsfilter.c:335
 msgid "convert: Use the -f option to specify a file to convert.\n"
-msgstr "convert:-f オプションを使って、変換するファイルを指定してください。\n"
+msgstr "convert: 変換するファイルを指定するには、-f オプションを使ってください。\n"
+
+#: scheduler/ipp.c:6555
 msgid "cups-deviced failed to execute."
 msgstr "cups-deviced の実行に失敗しました。"
+
+#: scheduler/ipp.c:7231 scheduler/ipp.c:7481
 msgid "cups-driverd failed to execute."
 msgstr "cups-driverd の実行に失敗しました。"
+
+#: systemv/cupsaddsmb.c:236
+#, c-format
 msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s\n"
-msgstr "cupsaddsmb:プリンタ“%s”の PPD ファイルがありません - %s\n"
+msgstr "cupsaddsmb: プリンター \"%s\" の PPD ファイルがありません - %s\n"
+
+#: systemv/cupsctl.c:153
+#, c-format
 msgid "cupsctl: Unable to connect to server: %s\n"
-msgstr "cupsctl:サーバに接続できません:%s\n"
+msgstr "cupsctl: サーバー: %s に接続できません\n"
+
+#: systemv/cupsctl.c:196
+#, c-format
 msgid "cupsctl: Unknown option \"%s\"!\n"
-msgstr "cupsctl:“%s”は不明なオプションです!\n"
+msgstr "cupsctl: \"%s\" は未知のオプションです!\n"
+
+#: systemv/cupsctl.c:198
+#, c-format
 msgid "cupsctl: Unknown option \"-%c\"!\n"
-msgstr "cupsctl:“-%c”は不明なオプションです!\n"
+msgstr "cupsctl: \"-%c\"は未知のオプションです!\n"
+
+#: scheduler/main.c:200
 msgid "cupsd: Expected config filename after \"-c\" option!\n"
-msgstr "cupsd:“-c”オプションの後に構成ファイル名が必要です!\n"
+msgstr "cupsd: -c オプションのあとには設定ファイル名が必要です!\n"
+
+#: scheduler/main.c:232 scheduler/main.c:239
 msgid "cupsd: Unable to get current directory!\n"
-msgstr "cupsd:現在のディレクトリを取得できません!\n"
+msgstr "cupsd: カレント・ディレクトリを取得できません!\n"
+
+#: scheduler/main.c:291
+#, c-format
 msgid "cupsd: Unknown argument \"%s\" - aborting!\n"
-msgstr "cupsd:“%s”は不明な引数です - 破棄されます!\n"
+msgstr "cupsd: \"%s\" は未知の引数です - 停止します!\n"
+
+#: scheduler/main.c:284
+#, c-format
 msgid "cupsd: Unknown option \"%c\" - aborting!\n"
-msgstr "cupsd:“%c”は不明なオプションです - 破棄されます!\n"
+msgstr "cupsd: \"%c\" は未知のオプションです - 停止します!\n"
+
+#: scheduler/main.c:266
 msgid "cupsd: launchd(8) support not compiled in, running in normal mode.\n"
-msgstr "cupsd:launchd(8) サポートがコンパイルされていないため、通常モードで実行します。\n"
+msgstr "cupsd: launchd(8) サポートがコンパイルされていないので、通常モードで動作します。\n"
+
+#: scheduler/cupsfilter.c:1061
+#, c-format
 msgid "cupsfilter: Invalid document number %d!\n"
-msgstr "cupsfilter:書類番号 %d が無効です!\n"
+msgstr "cupsfilter: 不正な文書番号 %d です!\n"
+
+#: scheduler/cupsfilter.c:1055
+#, c-format
 msgid "cupsfilter: Invalid job ID %d!\n"
-msgstr "cupsfilter:ジョブ ID %d が無効です!\n"
+msgstr "cupsfilter: 不正なジョブID %d です!\n"
+
+#: scheduler/cupsfilter.c:343
 msgid "cupsfilter: Only one filename can be specified!\n"
-msgstr "cupsfilter:指定できるファイル名は 1 つだけです!\n"
+msgstr "cupsfilter: ひとつのファイル名のみを指定できます!\n"
+
+#: scheduler/cupsfilter.c:1089
+#, c-format
 msgid "cupsfilter: Unable to create temporary file: %s\n"
-msgstr "cupsfilter:一時ファイルを作成できません:%s\n"
+msgstr "cupsfilter: テンポラリー・ファイル: %s を作成できません\n"
+
+#: scheduler/cupsfilter.c:1105
+#, c-format
 msgid "cupsfilter: Unable to get job file - %s\n"
-msgstr "cupsfilter:ジョブファイルを取得できません - %s\n"
+msgstr "cupsfilter: ジョブ・ファイルを取得できません - %s\n"
+
+#: systemv/cupstestppd.c:218
 msgid "cupstestppd: The -q option is incompatible with the -v option.\n"
-msgstr "cupstestppd:-q オプションは -v オプションと同時には使用できません。\n"
+msgstr "cupstestppd: -q オプションは -v オプションと両立できません。\n"
+
+#: systemv/cupstestppd.c:234
 msgid "cupstestppd: The -v option is incompatible with the -q option.\n"
-msgstr "cupstestppd:-v オプションは -q オプションと同時には使用できません。\n"
+msgstr "cupstestppd: -v オプションは -q オプションと両立できません。\n"
+
+#: systemv/lpstat.c:1231 systemv/lpstat.c:1234 systemv/lpstat.c:1237
+#, c-format
 msgid "device for %s/%s: %s\n"
-msgstr "%s/%s のデバイス:%s\n"
+msgstr "%s/%s のデバイス: %s\n"
+
+#: systemv/lpstat.c:1218 systemv/lpstat.c:1221 systemv/lpstat.c:1224
+#, c-format
 msgid "device for %s: %s\n"
-msgstr "%s のデバイス:%s\n"
+msgstr "%s のデバイス: %s\n"
+
+#: cups/snmp.c:1035
 msgid "error-index uses indefinite length"
-msgstr "error-index に使われている長さが不定です"
+msgstr "エラー・インデックスは不定長です"
+
+#: cups/snmp.c:1027
 msgid "error-status uses indefinite length"
-msgstr "error-status に使われている長さが不定です"
+msgstr "エラー・ステータスは不定長です"
+
+#: cups/notify.c:90
 msgid "held"
-msgstr "保留中"
+msgstr "ホールド"
+
+#: berkeley/lpc.c:214
 msgid "help\t\tget help on commands\n"
-msgstr "help\t\tコマンドのヘルプを表示します\n"
+msgstr "help\t\tコマンドのヘルプを取得\n"
+
+#: cups/notify.c:131
 msgid "idle"
 msgstr "待機中"
+
+#: scheduler/ipp.c:8225
 msgid "job-printer-uri attribute missing!"
-msgstr "job-printer-uri 属性がありません!"
+msgstr "job-printer-uri 属性がありません!"
+
+#: systemv/lpadmin.c:141 systemv/lpadmin.c:453
 msgid "lpadmin: Class name can only contain printable characters!\n"
-msgstr "lpadmin:クラス名に使用できるのはプリント可能な文字だけです!\n"
+msgstr "lpadmin: クラス名は表示可能文字のみで構成されなければなりません!\n"
+
+#: systemv/lpadmin.c:750
 msgid "lpadmin: Expected PPD after '-P' option!\n"
-msgstr "lpadmin:‘-P’オプションの後に PPD が必要です!\n"
+msgstr "lpadmin: '-P' オプションのあとに PPD が必要です!\n"
+
+#: systemv/lpadmin.c:491
 msgid "lpadmin: Expected allow/deny:userlist after '-u' option!\n"
-msgstr "lpadmin:‘-u’オプションの後に allow/deny:userlist が必要です!\n"
+msgstr "lpadmin: '-u' オプションのあとには allow/deny:ユーザリスト が必要です!\n"
+
+#: systemv/lpadmin.c:442
 msgid "lpadmin: Expected class after '-r' option!\n"
-msgstr "lpadmin:‘-r’オプションの後にクラスが必要です!\n"
+msgstr "lpadmin: '-r' オプションのあとにはクラス名が必要です!\n"
+
+#: systemv/lpadmin.c:130
 msgid "lpadmin: Expected class name after '-c' option!\n"
-msgstr "lpadmin:‘-c’オプションの後にクラス名が必要です!\n"
+msgstr "lpadmin: '-c' オプションのあとにはクラス名が必要です!\n"
+
+#: systemv/lpadmin.c:643
 msgid "lpadmin: Expected description after '-D' option!\n"
-msgstr "lpadmin:‘-D’オプションの後に説明が必要です!\n"
+msgstr "lpadmin: '-D' オプションのあとに説明が必要です!\n"
+
+#: systemv/lpadmin.c:550
 msgid "lpadmin: Expected device URI after '-v' option!\n"
-msgstr "lpadmin:‘-v’オプションの後にデバイス URI が必要です!\n"
+msgstr "lpadmin: '-v' オプションのあとにはデバイス URI が必要です!\n"
+
+#: systemv/lpadmin.c:659
 msgid "lpadmin: Expected file type(s) after '-I' option!\n"
-msgstr "lpadmin:‘-I’オプションの後にファイルタイプが必要です!\n"
+msgstr "lpadmin: '-I' オプションのあとにファイル形式が必要です!\n"
+
+#: systemv/lpadmin.c:212
 msgid "lpadmin: Expected hostname after '-h' option!\n"
-msgstr "lpadmin:‘-h’オプションの後にホスト名が必要です!\n"
+msgstr "lpadmin: '-h' オプションのあとにはホスト名が必要です!\n"
+
+#: systemv/lpadmin.c:257
 msgid "lpadmin: Expected interface after '-i' option!\n"
-msgstr "lpadmin:‘-i’オプションの後にインターフェイスが必要です!\n"
+msgstr "lpadmin: '-i' オプションのあとにはインターフェイス名が必要です!\n"
+
+#: systemv/lpadmin.c:704
 msgid "lpadmin: Expected location after '-L' option!\n"
-msgstr "lpadmin:‘-L’オプションの後に場所が必要です!\n"
+msgstr "lpadmin: '-L' オプションのあとに場所が必要です!\n"
+
+#: systemv/lpadmin.c:338
 msgid "lpadmin: Expected model after '-m' option!\n"
-msgstr "lpadmin:‘-m’オプションの後に機種が必要です!\n"
+msgstr "lpadmin: '-m' オプションのあとにはモデル名が必要です!\n"
+
+#: systemv/lpadmin.c:358
 msgid "lpadmin: Expected name=value after '-o' option!\n"
-msgstr "lpadmin:‘-o’オプションの後に name=value が必要です!\n"
+msgstr "lpadmin: '-o' オプションのあとには 変数名=値 が必要です!\n"
+
+#: systemv/lpadmin.c:391
 msgid "lpadmin: Expected printer after '-p' option!\n"
-msgstr "lpadmin:‘-p’オプションの後にプリンタが必要です!\n"
+msgstr "lpadmin: '-p' オプションのあとにはプリンター名が必要です!\n"
+
+#: systemv/lpadmin.c:174
 msgid "lpadmin: Expected printer name after '-d' option!\n"
-msgstr "lpadmin:‘-d’オプションの後にプリンタ名が必要です!\n"
+msgstr "lpadmin: '-d' オプションのあとにはプリンター名が必要です!\n"
+
+#: systemv/lpadmin.c:584
 msgid "lpadmin: Expected printer or class after '-x' option!\n"
-msgstr "lpadmin:‘-x’オプションの後にプリンタまたはクラスが必要です!\n"
+msgstr "lpadmin: '-x' オプションのあとにはプリンター名またはクラス名が必要です!\n"
+
+#: systemv/lpadmin.c:1128
 msgid "lpadmin: No member names were seen!\n"
-msgstr "lpadmin:メンバー名が見つかりませんでした!\n"
+msgstr "lpadmin: メンバー名が見当たりません!\n"
+
+#: systemv/lpadmin.c:893
+#, c-format
 msgid "lpadmin: Printer %s is already a member of class %s.\n"
-msgstr "lpadmin:プリンタ %s はすでにクラス %s のメンバーです。\n"
+msgstr "lpadmin: プリンター %s はすでにクラス %s のメンバーです。\n"
+
+#: systemv/lpadmin.c:1142
+#, c-format
 msgid "lpadmin: Printer %s is not a member of class %s.\n"
-msgstr "lpadmin:プリンタ %s はクラス %s のメンバーではありません。\n"
+msgstr "lpadmin: プリンター %s はクラス %s のメンバーではありません。\n"
+
+#: systemv/lpadmin.c:185 systemv/lpadmin.c:402 systemv/lpadmin.c:595
 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"
+msgstr "lpadmin: プリンター名には印字可能な文字のみ使用できます!\n"
+
+#: systemv/lpadmin.c:115
+msgid ""
+"lpadmin: Unable to add a printer to the class:\n"
+"         You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: クラスにプリンターを追加できません:\n"
+"         先にプリンター名を指定する必要があります!\n"
+
+#: systemv/lpadmin.c:106 systemv/lpadmin.c:159 systemv/lpadmin.c:230
+#: systemv/lpadmin.c:291 systemv/lpadmin.c:310 systemv/lpadmin.c:376
+#: systemv/lpadmin.c:417 systemv/lpadmin.c:523 systemv/lpadmin.c:569
+#: systemv/lpadmin.c:615 systemv/lpadmin.c:677 systemv/lpadmin.c:723
+#: systemv/lpadmin.c:784
+#, c-format
 msgid "lpadmin: Unable to connect to server: %s\n"
-msgstr "lpadmin:サーバに接続できません:%s\n"
+msgstr "lpadmin: サーバーに接続できません: %s\n"
+
+#: systemv/lpadmin.c:1845
+#, c-format
 msgid "lpadmin: Unable to create temporary file - %s\n"
-msgstr "lpadmin:一時ファイルを作成できません - %s\n"
+msgstr "lpadmin: テンポラリファイルを作成できません - %s\n"
+
+#: systemv/lpadmin.c:1454
+#, c-format
 msgid "lpadmin: Unable to create temporary file: %s\n"
-msgstr "lpadmin:一時ファイルを作成できません:%s\n"
+msgstr "lpadmin: テンポラリファイルを作成できません: %s\n"
+
+#: systemv/lpadmin.c:1855
+#, c-format
 msgid "lpadmin: Unable to open PPD file \"%s\" - %s\n"
-msgstr "lpadmin:PPD ファイル“%s”を開けません - %s\n"
+msgstr "lpadmin: PPD ファイル \"%s\" を開けません - %s\n"
+
+#: systemv/lpadmin.c:1462
+#, 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"
+msgstr "lpadmin: ファイル \"%s\" を開けません: %s\n"
+
+#: systemv/lpadmin.c:426
+msgid ""
+"lpadmin: Unable to remove a printer from the class:\n"
+"         You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: クラスからプリンターを削除できません:\n"
+"         先にプリンター名を指定する必要があります!\n"
+
+#: systemv/lpadmin.c:732
+msgid ""
+"lpadmin: Unable to set the PPD file:\n"
+"         You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: PPD ファイルを設定できません:\n"
+"         先にプリンター名を指定する必要があります!\n"
+
+#: systemv/lpadmin.c:532
+msgid ""
+"lpadmin: Unable to set the device URI:\n"
+"         You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: デバイス URI を設定できません:\n"
+"         先にプリンター名を指定する必要があります!\n"
+
+#: systemv/lpadmin.c:319
+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"
+
+#: systemv/lpadmin.c:239
+msgid ""
+"lpadmin: Unable to set the interface script:\n"
+"         You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: インターフェイススクリプトを設定できません:\n"
+"         先にプリンター名を指定する必要があります!\n"
+
+#: systemv/lpadmin.c:624
+msgid ""
+"lpadmin: Unable to set the printer description:\n"
+"         You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: プリンターの説明を設定できません:\n"
+"         先にプリンター名を指定する必要があります!\n"
+
+#: systemv/lpadmin.c:686
+msgid ""
+"lpadmin: Unable to set the printer location:\n"
+"         You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: プリンターの場所が設定できません:\n"
+"         先にプリンター名を指定する必要があります!\n"
+
+#: systemv/lpadmin.c:793
+msgid ""
+"lpadmin: Unable to set the printer options:\n"
+"         You must specify a printer name first!\n"
+msgstr ""
+"lpadmin: プリンター・オプションを設定できません:\n"
+"         先にプリンター名を指定する必要があります!\n"
+
+#: systemv/lpadmin.c:508
+#, c-format
 msgid "lpadmin: Unknown allow/deny option \"%s\"!\n"
-msgstr "lpadmin:“%s”は不明な許可/拒否オプションです!\n"
+msgstr "lpadmin:\"%s\" は未知の allow/deny オプションです!\n"
+
+#: systemv/lpadmin.c:766
+#, c-format
 msgid "lpadmin: Unknown argument '%s'!\n"
-msgstr "lpadmin:‘%s’は不明な引数です!\n"
+msgstr "lpadmin: '%s' は未知の引数です!\n"
+
+#: systemv/lpadmin.c:761
+#, c-format
 msgid "lpadmin: Unknown option '%c'!\n"
-msgstr "lpadmin:‘%c’は不明なオプションです!\n"
+msgstr "lpadmin: '%c' は未知のオプションです!\n"
+
+#: systemv/lpadmin.c:665
 msgid "lpadmin: Warning - content type list ignored!\n"
-msgstr "lpadmin:警告 - コンテンツ・タイプ・リストは無視されました!\n"
+msgstr "lpadmin: 警告 - コンテンツタイプリストは無視されます!\n"
+
+#: berkeley/lpc.c:81 berkeley/lpc.c:109 berkeley/lpc.c:145
 msgid "lpc> "
 msgstr "lpc> "
+
+#: systemv/lpinfo.c:143
 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"
+
+#: systemv/lpinfo.c:196
 msgid "lpinfo: Expected language after --language!\n"
-msgstr "lpinfo:--language の後に言語が必要です!\n"
+msgstr "lpinfo: --language の後には、言語を指定する必要があります!\n"
+
+#: systemv/lpinfo.c:213
 msgid "lpinfo: Expected make and model after --make-and-model!\n"
-msgstr "lpinfo:--make-and-model の後に製造元と機種が必要です!\n"
+msgstr "lpinfo: --make-and-model の後には、メーカーとモデルを指定する必要があります!\n"
+
+#: systemv/lpinfo.c:230
 msgid "lpinfo: Expected product string after --product!\n"
-msgstr "lpinfo:--product の後に製品文字列が必要です!\n"
+msgstr "lpinfo: --product の後には、製品名を指定する必要があります!\n"
+
+#: systemv/lpinfo.c:161
 msgid "lpinfo: Expected scheme list after --exclude-schemes!\n"
-msgstr "lpinfo:--exclude-schemes の後にスキームリストが必要です!\n"
+msgstr "lpinfo: --exclude-schemes の後には、スキーマ・リストを指定する必要があります!\n"
+
+#: systemv/lpinfo.c:179
 msgid "lpinfo: Expected scheme list after --include-schemes!\n"
-msgstr "lpinfo:--include-schemes の後にスキームリストが必要です!\n"
+msgstr "lpinfo: --include-schemes の後には、スキーマ・リストを指定する必要があります!\n"
+
+#: systemv/lpinfo.c:247
 msgid "lpinfo: Expected timeout after --timeout!\n"
-msgstr "lpinfo:--timeout の後にタイムアウトが必要です!\n"
+msgstr "lpinfo: --timeout の後には、タイムアウト値を指定する必要があります!\n"
+
+#: systemv/lpinfo.c:270
+#, c-format
 msgid "lpinfo: Unknown argument '%s'!\n"
-msgstr "lpinfo:‘%s’は不明な引数です!\n"
+msgstr "lpinfo: 未知の引数 '%s'!\n"
+
+#: systemv/lpinfo.c:264
+#, c-format
 msgid "lpinfo: Unknown option '%c'!\n"
-msgstr "lpinfo:‘%c’は不明なオプションです!\n"
+msgstr "lpinfo: 未知のオプション '%c'!\n"
+
+#: systemv/lpinfo.c:257
+#, c-format
 msgid "lpinfo: Unknown option '%s'!\n"
-msgstr "lpinfo:‘%s’は不明なオプションです!\n"
+msgstr "lpinfo: 未知のオプション '%s'!\n"
+
+#: systemv/lpmove.c:141
+#, c-format
 msgid "lpmove: Unable to connect to server: %s\n"
-msgstr "lpmove:サーバに接続できません:%s\n"
+msgstr "lpmove: サーバーに接続できません: %s!\n"
+
+#: systemv/lpmove.c:125
+#, c-format
 msgid "lpmove: Unknown argument '%s'!\n"
-msgstr "lpmove:‘%s’は不明な引数です!\n"
+msgstr "lpmove: 未知の引数 '%s'!\n"
+
+#: systemv/lpmove.c:103
+#, c-format
 msgid "lpmove: Unknown option '%c'!\n"
-msgstr "lpmove:‘%c’は不明なオプションです!\n"
+msgstr "lpmove: 未知のオプション '%c'!\n"
+
+#: systemv/lpoptions.c:154 systemv/lpoptions.c:172 systemv/lpoptions.c:248
 msgid "lpoptions: No printers!?!\n"
-msgstr "lpoptions:プリンタがありません!?!\n"
+msgstr "lpoptions: プリンターがありません!?!\n"
+
+#: systemv/lpoptions.c:223
+#, c-format
 msgid "lpoptions: Unable to add printer or instance: %s\n"
-msgstr "lpoptions:プリンタまたはインスタンスを追加できません:%s\n"
+msgstr "lpoptions: プリンターまたはインスタンスを追加できません: %s\n"
+
+#: systemv/lpoptions.c:507
+#, c-format
 msgid "lpoptions: Unable to get PPD file for %s: %s\n"
-msgstr "lpoptions:%s の PPD ファイルを取得できません:%s\n"
+msgstr "lpoptions: %s の PPD ファイルを開けません!: %s\n"
+
+#: systemv/lpoptions.c:516
+#, c-format
 msgid "lpoptions: Unable to open PPD file for %s!\n"
-msgstr "lpoptions:%s の PPD ファイルを開けません!n"
+msgstr "lpoptions: %s の PPD ファイルを開けません!\n"
+
+#: systemv/lpoptions.c:104
 msgid "lpoptions: Unknown printer or class!\n"
-msgstr "lpoptions:プリンタまたはクラスが不明です!\n"
+msgstr "lpoptions: 未知のプリンターまたはクラスです!\n"
+
+#: systemv/lppasswd.c:185
 msgid "lppasswd: Only root can add or delete passwords!\n"
-msgstr "lppasswd:パスワードを追加または削除できるのはルートだけです!\n"
+msgstr "lppasswd: root だけがパスワードの追加と削除を行えます!\n"
+
+#: systemv/lppasswd.c:314
 msgid "lppasswd: Password file busy!\n"
-msgstr "lppasswd:パスワードファイルがビジー状態です!\n"
+msgstr "lppasswd: パスワードファイルがビジー状態です!\n"
+
+#: systemv/lppasswd.c:447
 msgid "lppasswd: Password file not updated!\n"
-msgstr "lppasswd:パスワードファイルはアップデートされませんでした!\n"
+msgstr "lppasswd: パスワードファイルは更新されません!\n"
+
+#: systemv/lppasswd.c:414
 msgid "lppasswd: Sorry, password doesn't match!\n"
-msgstr "lppasswd:パスワードが一致しません!\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"
+msgstr "lppasswd: すみませんが、パスワードがマッチしません!\n"
+
+#: systemv/lppasswd.c:264
+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"
+
+#: systemv/lppasswd.c:240
 msgid "lppasswd: Sorry, passwords don't match!\n"
-msgstr "lppasswd:パスワードが一致しません!\n"
+msgstr "lppasswd: すみませんが、パスワードがマッチしません!\n"
+
+#: systemv/lppasswd.c:211 systemv/lppasswd.c:229
+#, c-format
 msgid "lppasswd: Unable to copy password string: %s\n"
-msgstr "lppasswd:パスワード文字列をコピーできません:%s\n"
+msgstr "lppasswd: パスワード文字列をコピーできません: %s\n"
+
+#: systemv/lppasswd.c:317 systemv/lppasswd.c:326 systemv/lppasswd.c:344
+#, c-format
 msgid "lppasswd: Unable to open password file: %s\n"
-msgstr "lppasswd:パスワードファイルを開けません:%s\n"
+msgstr "lppasswd: パスワードファイルを開けません: %s\n"
+
+#: systemv/lppasswd.c:379 systemv/lppasswd.c:392 systemv/lppasswd.c:424
+#, c-format
 msgid "lppasswd: Unable to write to password file: %s\n"
-msgstr "lppasswd:パスワードファイルに書き込めません:%s\n"
+msgstr "lppasswd: パスワードファイルに書き込めません: %s\n"
+
+#: systemv/lppasswd.c:462
+#, c-format
 msgid "lppasswd: failed to backup old password file: %s\n"
-msgstr "lppasswd:古いパスワードファイルのバックアップ作成に失敗しました:%s\n"
+msgstr "lppasswd: 古いパスワードファイルのバックアップに失敗しました: %s\n"
+
+#: systemv/lppasswd.c:475
+#, c-format
 msgid "lppasswd: failed to rename password file: %s\n"
-msgstr "lppasswd:パスワードファイルの名称変更に失敗しました:%s\n"
+msgstr "lppasswd: パスワードファイルの名前の変更に失敗しました: %s\n"
+
+#: systemv/lppasswd.c:404
+#, c-format
 msgid "lppasswd: user \"%s\" and group \"%s\" do not exist.\n"
-msgstr "lppasswd:ユーザ“%s”とグループ“%s”が存在しません。\n"
+msgstr "lppasswd: ユーザー \"%s\" およびグループ \"%s\" は存在しません。\n"
+
+#: systemv/lpstat.c:1039
+#, c-format
 msgid "lpstat: error - %s environment variable names non-existent destination \"%s\"!\n"
-msgstr "lpstat:エラー - %s 環境変数に存在しない送信先“%s”が指定されています!\n"
+msgstr "lpstat: エラー - 環境変数 %s が、存在しない宛先 \"%s\" を指しています!\n"
+
+#: systemv/lpstat.c:969
+#, c-format
 msgid "members of class %s:\n"
-msgstr "クラス %s のメンバー:\n"
+msgstr "クラス %s のメンバー:\n"
+
+#: berkeley/lpq.c:575
 msgid "no entries\n"
 msgstr "エントリーがありません\n"
+
+#: systemv/lpstat.c:1043
 msgid "no system default destination\n"
-msgstr "システムのデフォルトの送信先がありません\n"
+msgstr "システムのデフォルトの宛先がありません\n"
+
+#: scheduler/ipp.c:6249
 msgid "notify-events not specified!"
-msgstr "notify-events が指定されていません!"
+msgstr "notify-events が指定されていません!"
+
+#: scheduler/ipp.c:2102 scheduler/ipp.c:6154
+#, c-format
 msgid "notify-recipient-uri URI \"%s\" is already used!"
-msgstr "notify-recipient-uri の URI“%s”はすでに使用されています!"
+msgstr "notify-recipient-uri URI \"%s\" はすでに使われています!"
+
+#: scheduler/ipp.c:2092 scheduler/ipp.c:6144
+#, c-format
 msgid "notify-recipient-uri URI \"%s\" uses unknown scheme!"
-msgstr "notify-recipient-uri の URI“%s”に不明なスキームが使用されています!"
+msgstr "notify-recipient-uri URI \"%s\" には未知のスキームが使われています!"
+
+#: scheduler/ipp.c:4136 scheduler/ipp.c:7079 scheduler/ipp.c:7780
+#: scheduler/ipp.c:9269
+#, c-format
 msgid "notify-subscription-id %d no good!"
-msgstr "notify-subscription-id %d が正しくありません!"
+msgstr "notify-subscription-id %d は良くありません!"
+
+#: cups/notify.c:87
 msgid "pending"
-msgstr "保留中"
+msgstr "保留"
+
+#: ppdc/ppdc.cxx:108 ppdc/ppdpo.cxx:94
+#, c-format
 msgid "ppdc: Adding include directory \"%s\"...\n"
-msgstr "ppdc:インクルードディレクトリ“%s”を追加中...\n"
+msgstr "ppdc: ディレクトリー \"%s\" を追加しています...\n"
+
+#: ppdc/ppdpo.cxx:136
+#, c-format
 msgid "ppdc: Adding/updating UI text from %s...\n"
-msgstr "ppdc:%s から UI テキストを追加/アップデート中...\n"
+msgstr "ppdc: %s から UI テキストを追加または更新しています...\n"
+
+#: ppdc/ppdc-source.cxx:375
+#, c-format
 msgid "ppdc: Bad boolean value (%s) on line %d of %s.\n"
-msgstr "ppdc:%3$s の %2$d 行目の論理値(%1$s)が正しくありません。\n"
+msgstr "ppdc:  不正な boolean 値 (%s) があります。%d 行目、ファイル名 %s。\n"
+
+#: ppdc/ppdc-source.cxx:1750
+#, c-format
 msgid "ppdc: Bad resolution name \"%s\" on line %d of %s!\n"
-msgstr "ppdc:%3$s の %2$d 行目の解像度名“%1$s”が正しくありません!\n"
+msgstr "ppdc: 不正な resolution 名 \"%s\" があります。%d 行目、ファイル名 %s !\n"
+
+#: ppdc/ppdc-source.cxx:1078
+#, c-format
 msgid "ppdc: Bad status keyword %s on line %d of %s!\n"
-msgstr "ppdc:%3$s の %2$d 行目の状況キーワード %1$s が正しくありません!\n"
+msgstr "ppdc: 不正な status キーワード %s があります。%d 行目、ファイル名 %s !\n"
+
+#: ppdc/ppdc-source.cxx:1987
+#, c-format
 msgid "ppdc: Bad variable substitution ($%c) on line %d of %s.\n"
-msgstr "ppdc:%3$s の %2$d 行目の変数代入($%1$c)が正しくありません。\n"
+msgstr "ppdc: 不正な数値置換 ($%c) があります。%d 行目、ファイル名 %s。\n"
+
+#: ppdc/ppdc-source.cxx:2657
+#, c-format
 msgid "ppdc: Choice found on line %d of %s with no Option!\n"
-msgstr "ppdc:%2$s の %1$d 行目にオプションのない選択が見つかりました!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s で、Option がないのに Choice が見つかりました!\n"
+
+#: ppdc/ppdc-source.cxx:1654
+#, c-format
 msgid "ppdc: Duplicate #po for locale %s on line %d of %s!\n"
-msgstr "ppdc:%3$s の %2$d 行目のロケール %1$s の #po が重複しています!\n"
+msgstr "ppdc: locale %s に対して #po が2重に定義されています。%d 行目、ファイル名 %s !\n"
+
+#: ppdc/ppdc-source.cxx:897
+#, c-format
 msgid "ppdc: Expected a filter definition on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目にフィルタ定義が必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s においてフィルター定義が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:920
+#, c-format
 msgid "ppdc: Expected a program name on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目にプログラム名が必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s においてプログラム名が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:359
+#, c-format
 msgid "ppdc: Expected boolean value on line %d of %s.\n"
-msgstr "ppdc:%2$s の %1$d 行目に論理値が必要です。\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において boolean 値が必要です。\n"
+
+#: ppdc/ppdc-source.cxx:1058
+#, c-format
 msgid "ppdc: Expected charset after Font on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目の Font の後に文字セットが必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において Font の後に charset が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:412
+#, c-format
 msgid "ppdc: Expected choice code on line %d of %s.\n"
-msgstr "ppdc:%2$s の %1$d 行目に選択コードが必要です。\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において choice code が必要です。\n"
+
+#: ppdc/ppdc-source.cxx:400
+#, c-format
 msgid "ppdc: Expected choice name/text on line %d of %s.\n"
-msgstr "ppdc:%2$s の %1$d 行目に選択名/テキストが必要です。\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において choice name/text が必要です。\n"
+
+#: ppdc/ppdc-source.cxx:468
+#, c-format
 msgid "ppdc: Expected color order for ColorModel on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目に ColorModel の色順序が必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において ColorModel に対する color order が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:457
+#, c-format
 msgid "ppdc: Expected colorspace for ColorModel on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目に ColorModel の色空間が必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において ColorModel に対する colorspace が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:479
+#, c-format
 msgid "ppdc: Expected compression for ColorModel on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目に ColorModel の圧縮が必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において ColorModel に対する compression が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:660
+#, c-format
 msgid "ppdc: Expected constraints string for UIConstraints on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目に UIConstraints の制約文字列が必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において UIConstraints に対する constraint が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:2834
+#, c-format
 msgid "ppdc: Expected driver type keyword following DriverType on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目の DriverType の後にドライバ・タイプ・キーワードが必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において DriverType の後に driver type keyword が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:791
+#, c-format
 msgid "ppdc: Expected duplex type after Duplex on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目び Duplex の後に両面タイプが必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において Duplex の後に type が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:1042
+#, c-format
 msgid "ppdc: Expected encoding after Font on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目の Font の後にエンコーディングが必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において Font の後に encoding が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:1645
+#, c-format
 msgid "ppdc: Expected filename after #po %s on line %d of %s!\n"
-msgstr "ppdc:%3$s の %2$d 行目の #po %1$s の後にファイル名が必要です!\n"
+msgstr "ppdc: #po %s の後にファイル名が必要です! (%d 行目, ファイル %s)\n"
+
+#: ppdc/ppdc-source.cxx:1170
+#, c-format
 msgid "ppdc: Expected group name/text on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目にグループ名/テキストが必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において group name/text が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:2557
+#, c-format
 msgid "ppdc: Expected include filename on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目にインクルードファイル名が必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において include ファイル名が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:1466
+#, c-format
 msgid "ppdc: Expected integer on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目に整数が必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において整数指定が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:1637
+#, c-format
 msgid "ppdc: Expected locale after #po on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目の #po の後にロケールが必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において #po の後に locale が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:318
+#, c-format
 msgid "ppdc: Expected name after %s on line %d of %s!\n"
-msgstr "ppdc:%3$s の %2$d 行目の %1$s の後に名前が必要です!\n"
+msgstr "ppdc: %s の後に name が必要です。%d 行目、ファイル名 %s!\n"
+
+#: ppdc/ppdc-source.cxx:3178
+#, c-format
 msgid "ppdc: Expected name after FileName on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目の FileName の後に名前が必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において FileName の後に name が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:1023
+#, c-format
 msgid "ppdc: Expected name after Font on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目の Font の後に名前が必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において Font の後に name が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:3018
+#, c-format
 msgid "ppdc: Expected name after Manufacturer on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目の Manufacturer の後に名前が必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において Manufacturer の後に name が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:3051
+#, c-format
 msgid "ppdc: Expected name after MediaSize on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目の MediaSize の後に名前が必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において MediaSize の後に name が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:3132
+#, c-format
 msgid "ppdc: Expected name after ModelName on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目の ModelName の後に名前が必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において ModelName の後に name が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:3195
+#, c-format
 msgid "ppdc: Expected name after PCFileName on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目の PCFileName の後に名前が必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において PCFileName の後に name が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:1121
+#, c-format
 msgid "ppdc: Expected name/text after %s on line %d of %s!\n"
-msgstr "ppdc:%3$s の %2$d 行目の %1$s の後に名前/テキストが必要です!\n"
+msgstr "ppdc: %s の後に name/text が必要です。%d 行目、ファイル名 %s!\n"
+
+#: ppdc/ppdc-source.cxx:1210
+#, c-format
 msgid "ppdc: Expected name/text after Installable on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目の Installable の後に名前/テキストが必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において Installable の後に name/text が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:1736
+#, c-format
 msgid "ppdc: Expected name/text after Resolution on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目の Resolution の後に名前/テキストが必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において Resolution の後に name/text が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:444
+#, c-format
 msgid "ppdc: Expected name/text combination for ColorModel on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目の ColorModel に名前/テキストの組み合わせが必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において ColorModel に対する name/text が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:1537
+#, c-format
 msgid "ppdc: Expected option name/text on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目にオプション名/テキストが必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において option name/text が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:1571
+#, c-format
 msgid "ppdc: Expected option section on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目にオプションセクションが必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において option section が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:1549
+#, c-format
 msgid "ppdc: Expected option type on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目にオプションタイプが必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において option type が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:1719
+#, c-format
 msgid "ppdc: Expected override field after Resolution on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目の Resolution の後にオーバーライドフィールドが必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において Resolution の後に override field が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:969
+#, c-format
 msgid "ppdc: Expected real number on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目に実数が必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において実数が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:537
+#, c-format
 msgid "ppdc: Expected resolution/mediatype following ColorProfile on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目の ColorProfile の後に解像度/メディアタイプが必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において ColorProfile に続いて resolution/mediatype が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:1817
+#, c-format
 msgid "ppdc: Expected resolution/mediatype following SimpleColorProfile on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目の SimpleColorProfile の後に解像度/メディアタイプが必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において SimpleColorProfile に続いて resolution/mediatype が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:326
+#, c-format
 msgid "ppdc: Expected selector after %s on line %d of %s!\n"
-msgstr "ppdc:%3$s の %2$d 行目の %1$s の後にセレクタが必要です!\n"
+msgstr "ppdc: %s の後に selector が必要です。%d 行目、ファイル名 %s!\n"
+
+#: ppdc/ppdc-source.cxx:1066
+#, c-format
 msgid "ppdc: Expected status after Font on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目の Font の後に状況が必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において Font の後に status が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:2732
+#, c-format
 msgid "ppdc: Expected string after Copyright on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目の Copyright の後に文字列が必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において Copyright の後に文字列が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:3289
+#, c-format
 msgid "ppdc: Expected string after Version on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目の Version の後に文字列が必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において Version の後に文字列が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:693
+#, c-format
 msgid "ppdc: Expected two option names on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目に 2 つのオプション名が必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において 2 つのオプション名が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:337
+#, c-format
 msgid "ppdc: Expected value after %s on line %d of %s!\n"
-msgstr "ppdc:%3$s の %2$d 行目の %1$s の後に値が必要です!\n"
+msgstr "ppdc: %s の後に value が必要です。%d 行目、ファイル名 %s!\n"
+
+#: ppdc/ppdc-source.cxx:1050
+#, c-format
 msgid "ppdc: Expected version after Font on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目の Font の後にバージョンが必要です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において Font の後に version が必要です!\n"
+
+#: ppdc/ppdc-source.cxx:192
+#, c-format
 msgid "ppdc: Invalid #include/#po filename \"%s\"!\n"
-msgstr "ppdc:#include/#po ファイル名“%s”が無効です!\n"
+msgstr "ppdc: 無効な #include/#po ファイル名です \"%s\"!\n"
+
+#: ppdc/ppdc-source.cxx:937
+#, c-format
 msgid "ppdc: Invalid cost for filter on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目のフィルタのコストが無効です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s においてフィルターに対する無効な cost があります!\n"
+
+#: ppdc/ppdc-source.cxx:929
+#, c-format
 msgid "ppdc: Invalid empty MIME type for filter on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目のフィルタの MIME タイプが空であるのは無効です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s においてフィルターに対する無効な空の MIME type があります!\n"
+
+#: ppdc/ppdc-source.cxx:945
+#, c-format
 msgid "ppdc: Invalid empty program name for filter on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目のフィルタのプログラム名が空であるのは無効です!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s においてフィルターに対する無効な空の program name があります!\n"
+
+#: ppdc/ppdc-source.cxx:1591
+#, c-format
 msgid "ppdc: Invalid option section \"%s\" on line %d of %s!\n"
-msgstr "ppdc:%3$s の %2$d 行目のオプションセクション“%1$s”が無効です!\n"
+msgstr "ppdc: 無効な option section があります \"%s\"。%d 行目、ファイル名 %s!\n"
+
+#: ppdc/ppdc-source.cxx:1563
+#, c-format
 msgid "ppdc: Invalid option type \"%s\" on line %d of %s!\n"
-msgstr "ppdc:%3$s の %2$d 行目のオプションタイプ“%1$s”が無効です!\n"
+msgstr "ppdc: 無効な option type があります \"%s\"。%d 行目、ファイル名 %s!\n"
+
+#: ppdc/ppdc.cxx:244 ppdc/ppdpo.cxx:124
+#, c-format
 msgid "ppdc: Loading driver information file \"%s\"...\n"
-msgstr "ppdc:ドライバ情報ファイル“%s”を読み込み中...\n"
+msgstr "ppdc: ドライバー情報ファイル \"%s\" を読み込んでいます...\n"
+
+#: ppdc/ppdc.cxx:180
+#, c-format
 msgid "ppdc: Loading messages for locale \"%s\"...\n"
-msgstr "ppdc:ロケール“%s”のメッセージを読み込み中...\n"
+msgstr "ppdc: ロケール \"%s\" のメッセージを読み込んでいます...\n"
+
+#: ppdc/ppdc.cxx:121
+#, c-format
 msgid "ppdc: Loading messages from \"%s\"...\n"
-msgstr "ppdc:“%s”からメッセージを読み込み中...\n"
+msgstr "ppdc: \"%s\" からメッセージを読み込んでいます...\n"
+
+#: ppdc/ppdc-source.cxx:2354 ppdc/ppdc-source.cxx:2582
+#, c-format
 msgid "ppdc: Missing #endif at end of \"%s\"!\n"
-msgstr "ppdc:“%s”の最後に #endif がありません!\n"
+msgstr "ppdc:  \"%s\" の最後に #endif が見つかりません!\n"
+
+#: ppdc/ppdc-source.cxx:2451 ppdc/ppdc-source.cxx:2486
+#: ppdc/ppdc-source.cxx:2516
+#, c-format
 msgid "ppdc: Missing #if on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目に #if がありません!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において #if が見つかりません!\n"
+
+#: ppdc/ppdc-driver.cxx:683
+#, c-format
 msgid "ppdc: No message catalog provided for locale %s!\n"
-msgstr "ppdc:ロケール %s にメッセージカタログが渡されていません!\n"
+msgstr "ppdc: ロケール %s に対するメッセージカタログが見つかりません!\n"
+
+#: ppdc/ppdc-source.cxx:1607
+#, c-format
 msgid "ppdc: Option %s redefined with a different type on line %d of %s!\n"
-msgstr "ppdc:オプション %1$s は %3$s の %2$d 行目で別のタイプで再定義されています!\n"
+msgstr "ppdc: オプション %s は異なる型で再定義されています。%d 行目、ファイル名 %s!\n"
+
+#: ppdc/ppdc-source.cxx:670
+#, c-format
 msgid "ppdc: Option constraint must *name on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目のオプション制約は *name である必要があります!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において Option constraint は *name で指定します!\n"
+
+#: ppdc/ppdc-source.cxx:2433
+#, c-format
 msgid "ppdc: Too many nested #if's on line %d of %s!\n"
-msgstr "ppdc:%2$s の %1$d 行目に #if の入れ子が多すぎます!\n"
+msgstr "ppdc: %d 行目、ファイル名 %s において #if のネストが多すぎます!\n"
+
+#: ppdc/ppdc.cxx:348
+#, c-format
 msgid "ppdc: Unable to create PPD file \"%s\" - %s.\n"
-msgstr "ppdc:PPD ファイル“%s”を作成できません - %s。\n"
+msgstr "ppdc: PPD ファイル \"%s\" を作成できません - %s。\n"
+
+#: ppdc/ppdc.cxx:259
+#, c-format
 msgid "ppdc: Unable to create output directory %s: %s\n"
-msgstr "ppdc:出力ディレクトリ %s を作成できません:%s\n"
+msgstr "ppdc: ディレクトリー \"%s\" を作成できません - %s\n"
+
+#: ppdc/ppdc.cxx:280
+#, c-format
 msgid "ppdc: Unable to create output pipes: %s\n"
-msgstr "ppdc:出力パイプを作成できません:%s\n"
+msgstr "ppdc: 出力 pipe が作成できません: %s\n"
+
+#: ppdc/ppdc.cxx:297 ppdc/ppdc.cxx:304
+#, c-format
 msgid "ppdc: Unable to execute cupstestppd: %s\n"
-msgstr "ppdc:cupstestppd を実行できません:%s\n"
+msgstr "ppdc: cupstestppd を実行できません: %s\n"
+
+#: ppdc/ppdc-source.cxx:1684
+#, c-format
 msgid "ppdc: Unable to find #po file %s on line %d of %s!\n"
-msgstr "ppdc:%3$s の %2$d 行目に #po ファイル %1$s が見つかりません!\n"
+msgstr "ppdc: #po ファイル %s が見つかりません。%d 行目、ファイル名 %s!\n"
+
+#: ppdc/ppdc-source.cxx:2589
+#, c-format
 msgid "ppdc: Unable to find include file \"%s\" on line %d of %s!\n"
-msgstr "ppdc:%3$s の %2$d 行目にインクルードファイル“%1$s”が見つかりません!\n"
+msgstr "ppdc: インクルードファイル %s が見つかりません。%d 行目、ファイル名 %s!\n"
+
+#: ppdc/ppdc.cxx:191
+#, c-format
 msgid "ppdc: Unable to find localization for \"%s\" - %s\n"
-msgstr "ppdc:“%s”のローカリゼーションが見つかりません - %s\n"
+msgstr "ppdc:  \"%s\" に対する地域化情報が見つかりません - %s \n"
+
+#: ppdc/ppdc.cxx:130
+#, c-format
 msgid "ppdc: Unable to load localization file \"%s\" - %s\n"
-msgstr "ppdc:ローカリゼーションファイル“%s”を読み込めません - %s\n"
+msgstr "ppdc:  \"%s\" に対する地域化情報を読み込めません - %s \n"
+
+#: ppdc/ppdc-source.cxx:2007
+#, c-format
 msgid "ppdc: Undefined variable (%s) on line %d of %s.\n"
-msgstr "ppdc:%3$s の %2$d 行目の変数(%1$s)が未定義です。\n"
+msgstr "ppdc: 変数 (%s) は未定義です。%d 行目、ファイル名 %s。\n"
+
+#: ppdc/ppdc-source.cxx:2853
+#, c-format
 msgid "ppdc: Unknown driver type %s on line %d of %s!\n"
-msgstr "ppdc:%3$s の %2$d 行目のドライバタイプ %1$s が不明です!\n"
+msgstr "ppdc: %s は未知のドライバータイプです。%d 行目、ファイル名 %s。\n"
+
+#: ppdc/ppdc-source.cxx:871
+#, c-format
 msgid "ppdc: Unknown duplex type \"%s\" on line %d of %s!\n"
-msgstr "ppdc:%3$s の %2$d 行目の両面タイプ“%1$s”が不明です!\n"
+msgstr "ppdc: \"%s\" は未知の両面タイプです。%d 行目、ファイル名 %s!\n"
+
+#: ppdc/ppdc-source.cxx:3064
+#, c-format
 msgid "ppdc: Unknown media size \"%s\" on line %d of %s!\n"
-msgstr "ppdc:%3$s の %2$d 行目のメディアサイズ“%1$s”が不明です!\n"
+msgstr "ppdc: \"%s\" は未知の用紙サイズです。%d 行目、ファイル名 %s!\n"
+
+#: ppdc/ppdc-source.cxx:3300
+#, c-format
 msgid "ppdc: Unknown token \"%s\" seen on line %d of %s!\n"
-msgstr "ppdc:%3$s の %2$d 行目のトークン“%1$s”が不明です!\n"
+msgstr "ppdc: 未知の token \"%s\" があります。%d 行目、ファイル名 %s!\n"
+
+#: ppdc/ppdc-source.cxx:979
+#, c-format
 msgid "ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s!\n"
-msgstr "ppdc:%3$s の %2$d 行目の実数“%1$s”の後続文字列が不明です!\n"
+msgstr "ppdc: 実数に未知の終了文字 \"%s\" があります。%d 行目、ファイル名 %s!\n"
+
+#: ppdc/ppdc-source.cxx:2116
+#, c-format
 msgid "ppdc: Unterminated string starting with %c on line %d of %s!\n"
-msgstr "ppdc:%3$s の %2$d 行目の %1$c で始まる文字列が終了していません!\n"
+msgstr "ppdc: %c で始まる文字に対して終端文字がありません。%d 行目、ファイル名 %s!\n"
+
+#: ppdc/ppdc.cxx:354
+#, c-format
 msgid "ppdc: Writing %s...\n"
-msgstr "ppdc:%s を書き込み中...\n"
+msgstr "ppdc: %s を書き込んでいます...\n"
+
+#: ppdc/ppdc.cxx:143
+#, c-format
 msgid "ppdc: Writing PPD files to directory \"%s\"...\n"
-msgstr "ppdc:ディレクトリ“%s”に PPD ファイルを書き込み中...\n"
+msgstr "ppdc: ディレクトリー \"%s\" に PPD ファイルを書き込んでいます...\n"
+
+#: ppdc/ppdmerge.cxx:138
+#, c-format
 msgid "ppdmerge: Bad LanguageVersion \"%s\" in %s!\n"
-msgstr "ppdmerge:%2$s の LanguageVersion“%1$s”が正しくありません!\n"
+msgstr "ppdmerge: 不正な LanguageVersion \"%s\" が %s にあります!\n"
+
+#: ppdc/ppdmerge.cxx:178
+#, c-format
 msgid "ppdmerge: Ignoring PPD file %s...\n"
-msgstr "ppdmerge:PPD ファイル %s は無視されます...\n"
+msgstr "ppdmerge: PPD ファイル %s を無視します...\n"
+
+#: ppdc/ppdmerge.cxx:162
+#, c-format
 msgid "ppdmerge: Unable to backup %s to %s- %s\n"
-msgstr "ppdmerge:%s のバックアップを %s に作成できません - %s\n"
+msgstr "ppdmerge: %s を %s にバックアップできません - %s\n"
+
+#: systemv/lpstat.c:1769
+#, c-format
 msgid "printer %s disabled since %s -\n"
-msgstr "プリンタ %s は %s 以来無効になっています -\n"
+msgstr "プリンター %s は %s から無効です -\n"
+
+#: systemv/lpstat.c:1758
+#, c-format
 msgid "printer %s is idle.  enabled since %s\n"
-msgstr "プリンタ %s は待機中です。%s 以来有効になっています\n"
+msgstr "プリンター %s は待機中です。%s 以来有効です\n"
+
+#: systemv/lpstat.c:1763
+#, c-format
 msgid "printer %s now printing %s-%d.  enabled since %s\n"
-msgstr "プリンタ %s は現在 %s-%d をプリント中です。%s 以来有効になっています\n"
+msgstr "プリンター %s は %s-%d を印刷しています。%s 以来有効です\n"
+
+#: systemv/lpstat.c:1881
+#, c-format
 msgid "printer %s/%s disabled since %s -\n"
-msgstr "プリンタ %s/%s は %s 以来無効になっています -\n"
+msgstr "プリンター %s/%s は %s から無効です -\n"
+
+#: systemv/lpstat.c:1867
+#, c-format
 msgid "printer %s/%s is idle.  enabled since %s\n"
-msgstr "プリンタ %s/%s は待機中です。%s 以来有効になっています\n"
+msgstr "プリンター %s/%s は待機中です。%s 以来有効です\n"
+
+#: systemv/lpstat.c:1874
+#, c-format
 msgid "printer %s/%s now printing %s-%d.  enabled since %s\n"
-msgstr "プリンタ %s/%s は現在 %s-%d をプリント中です。%s 以来有効になっています\n"
+msgstr "プリンター %s/%s は現在 %s-%d を印刷中です。%s 以来有効です\n"
+
+#: cups/notify.c:93 cups/notify.c:134
 msgid "processing"
 msgstr "処理中"
+
+#: systemv/lp.c:660
+#, c-format
 msgid "request id is %s-%d (%d file(s))\n"
-msgstr "要求 ID は %s-%d です(%d 個のファイル)\n"
+msgstr "リクエスト ID は %s-%d です (%d 個のファイル)\n"
+
+#: cups/snmp.c:1019
 msgid "request-id uses indefinite length"
-msgstr "request-id に使われている長さが不定です"
+msgstr "リクエスト ID の長さが不定"
+
+#: systemv/lpstat.c:2008
 msgid "scheduler is not running\n"
-msgstr "スケジューラは実行されていません\n"
+msgstr "スケジューラーは動作していません\n"
+
+#: systemv/lpstat.c:2004
 msgid "scheduler is running\n"
-msgstr "スケジューラは実行中です\n"
+msgstr "スケジューラーは動作中です\n"
+
+#: cups/adminutil.c:2261
+#, c-format
 msgid "stat of %s failed: %s"
-msgstr "%s の統計情報を取得できませんでした:%s"
+msgstr "%s の状態取得に失敗しました: %s"
+
+#: berkeley/lpc.c:216
 msgid "status\t\tshow status of daemon and queue\n"
-msgstr "status\t\tデーモンとキューの状況を表示します\n"
+msgstr "status\t\tデーモンとキューの状態を表示\n"
+
+#: cups/notify.c:96 cups/notify.c:137
 msgid "stopped"
-msgstr "停止中"
+msgstr "停止"
+
+#: systemv/lpstat.c:1017
+#, c-format
 msgid "system default destination: %s\n"
-msgstr "システムのデフォルトの送信先:%s\n"
+msgstr "システムのデフォルトの宛先: %s\n"
+
+#: systemv/lpstat.c:1014
+#, c-format
 msgid "system default destination: %s/%s\n"
-msgstr "システムのデフォルトの送信先:%s/%s\n"
+msgstr "システムのデフォルトの宛先: %s/%s\n"
+
+#: cups/notify.c:108 cups/notify.c:140
 msgid "unknown"
-msgstr "不明"
+msgstr "未知"
+
+#: cups/notify.c:117
 msgid "untitled"
-msgstr "名称未設定"
+msgstr "タイトルなし"
+
+#: cups/snmp.c:1044
 msgid "variable-bindings uses indefinite length"
-msgstr "variable-bindings に使われている長さが不定です"
+msgstr "variable-bindings の長さが不定"
+
+
+#
+# End of "$Id$".
+#
index 6d53d00fe00489c4cfeb05ad59ad1e4dc9fd4dd5..6ccd38e993034a90a85d2c7f0f828e98c998a50e 100644 (file)
@@ -168,9 +168,9 @@ msgstr "      %s  %s %s이(가) 존재하지 않습니다!\n"
 msgid "      %s  Bad %s choice %s!\n                REF: Page 122, section 5.17\n"
 msgstr "      %s  잘못된 %s - 선택사항 %s!\n                REF: 122페이지, 섹션 5.17\n"
 msgid "      %s  Bad UTF-8 \"%s\" translation string for option %s!\n"
-msgstr "      %s  %s 옵션에 대한 잘못된 \"%s\" UTF-8 번역 스트링!\n"
+msgstr "      %1$s  %3$s 옵션에 대한 잘못된 UTF-8 \"%2$s\" 번역 스트링!\n"
 msgid "      %s  Bad UTF-8 \"%s\" translation string for option %s, choice %s!\n"
-msgstr "      %s  %s 옵션에 대한 잘못된 \"%s\" UTF-8 번역 스트링, %s 선택사항!\n"
+msgstr "      %1$s  %3$s 옵션, %4$s 선택사항에 대한 잘못된 UTF-8 \"%2$s\" 번역 스트링!\n"
 msgid "      %s  Bad cupsFilter value \"%s\"!\n"
 msgstr "      %s  잘못된 \"%s\" cupsFilter 값!\n"
 msgid "      %s  Bad cupsICCProfile %s!\n"
@@ -184,13 +184,13 @@ msgstr "      %s  잘못된 \"%s\" 언어!\n"
 msgid "      %s  Empty cupsUIConstraints %s!\n"
 msgstr "      %s  cupsUIConstraints %s이(가) 비어있음!\n"
 msgid "      %s  Missing \"%s\" translation string for option %s!\n"
-msgstr "      %s  %s 옵션에 대한 \"%s\" 번역 스트링 유실됨!\n"
+msgstr "      %1$s  %3$s 옵션에 대한 \"%2$s\" 번역 스트링 유실됨!\n"
 msgid "      %s  Missing \"%s\" translation string for option %s, choice %s!\n"
-msgstr "      %s  %s 옵션에 대한 \"%s\" 번역 스트링 유실됨, %s 선택사항!\n"
+msgstr "      %1$s  %3$s 옵션, %4$s 선택사항에 대한 \"%2$s\" 번역 스트링 유실됨!\n"
 msgid "      %s  Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\"!\n"
-msgstr "      %s  UIConstraint \"*%s %s *%s %s\"에 있는 *%s %s 선택사항 유실됨!\n"
+msgstr "      %1$s  \"*%4$s %5$s *%6$s %7$s\" UIConstraints에 있는 *%2$s %3$s 선택사항 유실됨!\n"
 msgid "      %s  Missing choice *%s %s in cupsUIConstraints %s: \"%s\"!\n"
-msgstr "      %s  %s cupsUIConstraints에 있는 *%s %s 선택사항 유실됨: \"%s\"!\n"
+msgstr "      %1$s  %4$s cupsUIConstraints에 있는 *%2$s %3$s 선택사항 유실됨: \"%5$s\"!\n"
 msgid "      %s  Missing cupsFilter file \"%s\"\n"
 msgstr "      %s  \"%s\" cupsFilter 파일이 유실됨\n"
 msgid "      %s  Missing cupsICCProfile file \"%s\"!\n"
@@ -200,13 +200,13 @@ msgstr "      %s  \"%s\" cupsPreFilter 파일 유실됨\n"
 msgid "      %s  Missing cupsUIResolver %s!\n"
 msgstr "      %s  %s cupsUIResolver 유실됨!\n"
 msgid "      %s  Missing option %s in UIConstraints \"*%s %s *%s %s\"!\n"
-msgstr "      %s  UIConstraint \"*%s %s *%s %s\"에 있는 %s 옵션 유실됨!\n"
+msgstr "      %1$s  \"*%3$s %4$s *%5$s %6$s\" UIConstraints에 있는 %2$s 옵션 유실됨!\n"
 msgid "      %s  Missing option %s in cupsUIConstraints %s: \"%s\"!\n"
-msgstr "      %s  %s cupsUIConstraints에 있는 %s 옵션 유실됨: \"%s\"!\n"
+msgstr "      %1$s  %3$s cupsUIConstraints에 있는 %2$s 옵션 유실됨: \"%4$s\"!\n"
 msgid "      %s  No base translation \"%s\" is included in file!\n"
-msgstr "      %s  \"%s\" 기초 번역이 없는 것이 파일에 포함되어 있습니다!\n"
+msgstr "      %s  파일에 \"%s\" 기초 번역이 포함되어 있지 않습니다!\n"
 msgid "      %s  REQUIRED %s does not define choice None!\n                REF: Page 122, section 5.17\n"
-msgstr "      %s  선택사항을 정의하지 않는 필요한 %s이(가) 없음!\n                REF: 122페이지, 섹션 5.17\n"
+msgstr "      %s  선택사항 없음을 정의하지 않은 %s이(가) 필요!\n                REF: 122페이지, 섹션 5.17\n"
 msgid "      %s  cupsICCProfile %s hash value collides with %s!\n"
 msgstr "      %s  불필요한 %s cupsICCProfile 값이 %s와(과) 충돌함!\n"
 msgid "      %s  cupsUIResolver %s causes a loop!\n"
@@ -224,17 +224,17 @@ msgstr "      **FAIL**  잘못된 DefaultPaperDimension %s!\n                REF
 msgid "      **FAIL**  BAD JobPatchFile attribute in file\n                REF: Page 24, section 3.4.\n"
 msgstr "      **FAIL**  파일에 있는 잘못된 JobPatchFile 속성\n                REF: 24페이지, 섹션 3.4.\n"
 msgid "      **FAIL**  BAD Manufacturer (should be \"HP\")\n                REF: Page 211, table D.1.\n"
-msgstr "      **FAIL**  잘못된 Manufacturer(\"HP\"이어야 함)\n                REF: 211페이지, table D.1.\n"
+msgstr "      **FAIL**  잘못된 Manufacturer(\"HP\"이어야 함)\n                REF: 211페이지,  D.1.\n"
 msgid "      **FAIL**  BAD Manufacturer (should be \"Oki\")\n                REF: Page 211, table D.1.\n"
-msgstr "      **FAIL**  잘못된 Manufacturer(\"Oki\"이어야 함)\n                REF: 211페이지, table D.1.\n"
+msgstr "      **FAIL**  잘못된 Manufacturer(\"Oki\"이어야 함)\n                REF: 211페이지,  D.1.\n"
 msgid "      **FAIL**  BAD ModelName - \"%c\" not allowed in string.\n                REF: Pages 59-60, section 5.3.\n"
-msgstr "      **FAIL**  잘못된 ModelName - \"%c\"은(는) 스트링에서 허용되지 않습니다.\n                REF: 59-60페이지, section 5.3.\n"
+msgstr "      **FAIL**  잘못된 ModelName - \"%c\"은(는) 스트링에서 허용되지 않습니다.\n                REF: 59-60페이지, 섹션 5.3.\n"
 msgid "      **FAIL**  BAD PSVersion - not \"(string) int\".\n                REF: Pages 62-64, section 5.3.\n"
 msgstr "      **FAIL**  잘못된 PSVersion - \"(string) int\"이(가) 아닙니다.\n                REF: 62-64페이지, 섹션 5.3.\n"
 msgid "      **FAIL**  BAD Product - not \"(string)\".\n                REF: Page 62, section 5.3.\n"
 msgstr "      **FAIL**  잘못된 Product - \"(string)\"이(가) 아닙니다.\n                REF: 62페이지, 섹션 5.3.\n"
 msgid "      **FAIL**  BAD ShortNickName - longer than 31 chars.\n                REF: Pages 64-65, section 5.3.\n"
-msgstr "      **FAIL**  잘못된 ShortNickName - 31자 이상입니다.\n                REF: 64-65페이지, 섹션 5.3.\n"
+msgstr "      **FAIL**  잘못된 ShortNickName - 31자보다 깁니다.\n                REF: 64-65페이지, 섹션 5.3.\n"
 msgid "      **FAIL**  Bad %s choice %s!\n                REF: Page 84, section 5.9\n"
 msgstr "      **FAIL**  잘못된 %s - 선택사항 %s!\n                REF: 84페이지, 섹션 5.9\n"
 msgid "      **FAIL**  Bad FileVersion \"%s\"\n                REF: Page 56, section 5.3.\n"
@@ -258,45 +258,45 @@ msgstr "      **FAIL**  다중  %s 항목이 %s 이름을 선택!\n"
 msgid "      **FAIL**  Option names %s and %s differ only by case!\n"
 msgstr "      **FAIL**  %s 및 %s 옵션 이름이 경우별로만 다름!\n"
 msgid "      **FAIL**  REQUIRED Default%s\n                REF: Page 40, section 4.5.\n"
-msgstr "      **FAIL**  필요한 Default%s\n                REF: 40페이지, section 4.5.\n"
+msgstr "      **FAIL**  Default%s 필요\n                REF: 40페이지, 섹션 4.5.\n"
 msgid "      **FAIL**  REQUIRED DefaultImageableArea\n                REF: Page 102, section 5.15.\n"
-msgstr "      **FAIL**  필요한 DefaultImageableArea\n                REF: 102페이지, 섹션 5.15.\n"
+msgstr "      **FAIL**  DefaultImageableArea 필요\n                REF: 102페이지, 섹션 5.15.\n"
 msgid "      **FAIL**  REQUIRED DefaultPaperDimension\n                REF: Page 103, section 5.15.\n"
-msgstr "      **FAIL**  필요한 DefaultPaperDimension\n                REF: 103페이지, 섹션 5.15.\n"
+msgstr "      **FAIL**  DefaultPaperDimension 필요\n                REF: 103페이지, 섹션 5.15.\n"
 msgid "      **FAIL**  REQUIRED FileVersion\n                REF: Page 56, section 5.3.\n"
-msgstr "      **FAIL**  필요한 FileVersion\n                REF: 56페이지, section 5.3.\n"
+msgstr "      **FAIL**  FileVersion 필요\n                REF: 56페이지, 섹션 5.3.\n"
 msgid "      **FAIL**  REQUIRED FormatVersion\n                REF: Page 56, section 5.3.\n"
-msgstr "      **FAIL**  필요한 FormatVersion\n                REF: 56페이지, 섹션 5.3.\n"
+msgstr "      **FAIL**  FormatVersion 필요\n                REF: 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 "      **FAIL**  %s PageSize에 대한 필요한 ImageableArea\n                REF: 41페이지, 섹션 5.\n                REF: 102페이지, 섹션 5.15.\n"
+msgstr "      **FAIL**  %s PageSize에 대한 ImageableArea 필요\n                REF: 41페이지, 섹션 5.\n                REF: 102페이지, 섹션 5.15.\n"
 msgid "      **FAIL**  REQUIRED LanguageEncoding\n                REF: Pages 56-57, section 5.3.\n"
-msgstr "      **FAIL**  필요한 LanguageEncoding\n                REF: 56-57페이지, 섹션 5.3.\n"
+msgstr "      **FAIL**  LanguageEncoding 필요\n                REF: 56-57페이지, 섹션 5.3.\n"
 msgid "      **FAIL**  REQUIRED LanguageVersion\n                REF: Pages 57-58, section 5.3.\n"
-msgstr "      **FAIL**  필요한 LanguageVersion\n                REF: 57-58페이지, 섹션 5.3.\n"
+msgstr "      **FAIL**  LanguageVersion 필요\n                REF: 57-58페이지, 섹션 5.3.\n"
 msgid "      **FAIL**  REQUIRED Manufacturer\n                REF: Pages 58-59, section 5.3.\n"
-msgstr "      **FAIL**  필요한 Manufacturer\n                REF: 58-59페이지, 섹션 5.3.\n"
+msgstr "      **FAIL**  Manufacturer 필요\n                REF: 58-59페이지, 섹션 5.3.\n"
 msgid "      **FAIL**  REQUIRED ModelName\n                REF: Pages 59-60, section 5.3.\n"
-msgstr "      **FAIL**  필요한 ModelName\n                REF: 59-60페이지, 섹션 5.3.\n"
+msgstr "      **FAIL**  ModelName 필요\n                REF: 59-60페이지, 섹션 5.3.\n"
 msgid "      **FAIL**  REQUIRED NickName\n                REF: Page 60, section 5.3.\n"
-msgstr "      **FAIL**  필요한 NickName\n                REF: 60페이지, 섹션 5.3.\n"
+msgstr "      **FAIL**  NickName 필요\n                REF: 60페이지, 섹션 5.3.\n"
 msgid "      **FAIL**  REQUIRED PCFileName\n                REF: Pages 61-62, section 5.3.\n"
-msgstr "      **FAIL**  필요한 PCFileName\n                REF: 61-62페이지, 섹션 5.3.\n"
+msgstr "      **FAIL**  PCFileName 필요\n                REF: 61-62페이지, 섹션 5.3.\n"
 msgid "      **FAIL**  REQUIRED PSVersion\n                REF: Pages 62-64, section 5.3.\n"
-msgstr "      **FAIL**  필요한 PSVersion\n                REF: 62-64페이지, 섹션 5.3.\n"
+msgstr "      **FAIL**  PSVersion 필요\n                REF: 62-64페이지, 섹션 5.3.\n"
 msgid "      **FAIL**  REQUIRED PageRegion\n                REF: Page 100, section 5.14.\n"
-msgstr "      **FAIL**  필요한 PageRegion\n                REF: 100페이지, 섹션 5.14.\n"
+msgstr "      **FAIL**  PageRegion 필요\n                REF: 100페이지, 섹션 5.14.\n"
 msgid "      **FAIL**  REQUIRED PageSize\n                REF: Page 41, section 5.\n                REF: Page 99, section 5.14.\n"
-msgstr "      **FAIL**  필요한 PageSize\n                REF: 41페이지, 섹션 5.\n                REF: Page 99, section 5.14.\n"
+msgstr "      **FAIL**  PageSize 필요\n                REF: 41페이지, 섹션 5.\n                REF: 99페이지, 섹션 5.14.\n"
 msgid "      **FAIL**  REQUIRED PageSize\n                REF: Pages 99-100, section 5.14.\n"
-msgstr "      **FAIL**  필요한 PageSize\n                REF: 99-100페이지, 섹션 5.14.\n"
+msgstr "      **FAIL**  PageSize 필요\n                REF: 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 "      **FAIL**  %s PageSize에 대한 필요한 PaperDimension\n                REF: Page 41, 섹션 5.\n                REF: 103페이지, 섹션 5.15.\n"
+msgstr "      **FAIL**  %s PageSize에 대한 PaperDimension 필요\n                REF: 41페이지, 섹션 5.\n                REF: 103페이지, 섹션 5.15.\n"
 msgid "      **FAIL**  REQUIRED Product\n                REF: Page 62, section 5.3.\n"
-msgstr "      **FAIL**  필요한 Product\n                REF: 62페이지, 섹션 5.3.\n"
+msgstr "      **FAIL**  Product 필요\n                REF: 62페이지, 섹션 5.3.\n"
 msgid "      **FAIL**  REQUIRED ShortNickName\n                REF: Page 64-65, section 5.3.\n"
-msgstr "      **FAIL**  필요한 ShortNickName\n                REF: 64-65페이지, 섹션 5.3.\n"
+msgstr "      **FAIL**  ShortNickName 필요\n                REF: 64-65페이지, 섹션 5.3.\n"
 msgid "    %d ERRORS FOUND\n"
-msgstr "    %d 오류 발견\n"
+msgstr "    %d개의 오류 발견\n"
 msgid "    Bad %%%%BoundingBox: on line %d!\n        REF: Page 39, %%%%BoundingBox:\n"
 msgstr "    잘못된 %%%%BoundingBox: %d번째 줄!\n        REF: 39페이지, %%%%BoundingBox:\n"
 msgid "    Bad %%%%Page: on line %d!\n        REF: Page 53, %%%%Page:\n"
@@ -304,7 +304,7 @@ msgstr "    잘못된 %%%%Page: %d번째 줄!\n        REF: 53페이지, %%%%Pag
 msgid "    Bad %%%%Pages: on line %d!\n        REF: Page 43, %%%%Pages:\n"
 msgstr "    잘못된 %%%%Pages: %d번째 줄!\n        REF: 43페이지, %%%%Pages:\n"
 msgid "    Line %d is longer than 255 characters (%d)!\n        REF: Page 25, Line Length\n"
-msgstr "    %d번째 줄이 255자 이상입니다(%d)!\n        REF: 25페이지, 줄 길이\n"
+msgstr "    %d번째 줄이 255자보다 깁니다(%d)!\n        REF: 25페이지, 줄 길이\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        REF: 17페이지, 3.1 도큐멘트 구성하기\n"
 msgid "    Missing %%EndComments comment!\n        REF: Page 41, %%EndComments\n"
@@ -324,11 +324,11 @@ msgstr "    너무 많은 %%BeginDocument 설명!\n"
 msgid "    Too many %%EndDocument comments!\n"
 msgstr "    너무 많은 %%EndDocument 설명!\n"
 msgid "    Warning: file contains binary data!\n"
-msgstr "    WARN: 파일에 바이너리 데이터가 포함되어 있습니다!\n"
+msgstr "    경고: 파일에 바이너리 데이터가 포함되어 있습니다!\n"
 msgid "    Warning: no %%EndComments comment in file!\n"
-msgstr "    WARN: 파일에 %%EndComments 설명이 없습니다!\n"
+msgstr "    경고: 파일에 %%EndComments 설명이 없습니다!\n"
 msgid "    Warning: obsolete DSC version %.1f in file!\n"
-msgstr "    WARN: 파일에 이전 DSC 버전 %.1f가 있습니다!\n"
+msgstr "    경고: 파일에 이전 DSC 버전 %.1f가 있습니다!\n"
 msgid " FAIL\n"
 msgstr " FAIL\n"
 msgid " FAIL\n      **FAIL**  Unable to open PPD file - %s\n"
@@ -336,7 +336,7 @@ msgstr " FAIL\n      **FAIL**  PPD 파일을 열 수 없음 - %s\n"
 msgid " FAIL\n      **FAIL**  Unable to open PPD file - %s on line %d.\n"
 msgstr " FAIL\n      **FAIL**  PPD 파일을 열 수 없음 - %s, %d번째 줄.\n"
 msgid " PASS\n"
-msgstr " 통과\n"
+msgstr " PASS\n"
 msgid "#10 Envelope"
 msgstr "#10 봉투"
 msgid "#11 Envelope"
@@ -354,13 +354,13 @@ msgstr "%-7s %-7.7s %-7d %-31.31s %.0f바이트\n"
 msgid "%.0f x %.0f millimeters"
 msgstr "%.0f x %.0fmm"
 msgid "%.0f x %.0f to %.0f x %.0f millimeters"
-msgstr "%.0f x %.0f to %.0f x %.0fmm"
+msgstr "%.0f x %.0f~%.0f x %.0fmm"
 msgid "%.2f x %.2f inches"
 msgstr "%.2f x %.2f인치"
 msgid "%.2f x %.2f to %.2f x %.2f inches"
-msgstr "%.2f x %.2f to %.2f x %.2f인치"
+msgstr "%.2f x %.2f~%.2f x %.2f인치"
 msgid "%s accepting requests since %s\n"
-msgstr " %s 이후에 %s 승인 요청\n"
+msgstr " %2$s 이후에 %1$s 승인 요청\n"
 msgid "%s cannot be changed."
 msgstr "%s을(를) 변경할 수 없습니다."
 msgid "%s is not implemented by the CUPS version of lpc.\n"
@@ -372,13 +372,13 @@ msgstr "%s이(가) 준비됨\n"
 msgid "%s is ready and printing\n"
 msgstr "%s이(가) 준비되었고 프린트 중\n"
 msgid "%s not accepting requests since %s -\n\t%s\n"
-msgstr "%s 이후에 %s 승인 요청 안 함 -\n\t%s\n"
+msgstr "%2$s 이후에 %1$s 승인 요청 안 함 -\n\t%1$s\n"
 msgid "%s not supported!"
 msgstr "%s이(가) 지원되지 않음!"
 msgid "%s/%s accepting requests since %s\n"
-msgstr "%s 이후에 %s/%s 승인 요청\n"
+msgstr "%3$s 이후에 %1$s/%2$s 승인 요청\n"
 msgid "%s/%s not accepting requests since %s -\n\t%s\n"
-msgstr "%s 이후에 %s/%s 승인 요청 안 함 -\n\t%s\n"
+msgstr "%3$s 이후에 %1$s/%2$s 승인 요청 안 함 -\n\t%4$s\n"
 msgid "%s: %-33.33s [job %d localhost]\n"
 msgstr "%s: %-33.33s [작업 %d 로컬호스트]\n"
 msgid "%s: %s failed: %s\n"
@@ -386,7 +386,7 @@ msgstr "%s: %s 실패: %s\n"
 msgid "%s: Don't know what to do!\n"
 msgstr "%s: 해야할 일을 모르겠음!\n"
 msgid "%s: Error - %s environment variable names non-existent destination \"%s\"!\n"
-msgstr "%s: 오류 - \"%s\" 대상에 존재하지 않는 %s 환경 변수 이름!\n"
+msgstr "%1$s: 오류 - \"%3$s\" 대상에 존재하지 않는 %2$s 환경 변수 이름!\n"
 msgid "%s: Error - bad job ID!\n"
 msgstr "%s: 오류 - 잘못된 작업 ID!\n"
 msgid "%s: Error - cannot print files and alter jobs simultaneously!\n"
@@ -396,9 +396,9 @@ msgstr "%s: 오류 - 파일 또는 작업 ID가 제공되었다면 stdin에서 
 msgid "%s: Error - expected character set after '-S' option!\n"
 msgstr "%s: 오류 - '-S' 옵션 뒤에 문자 세트가 예상됨!\n"
 msgid "%s: Error - expected content type after '-T' option!\n"
-msgstr "%s: 오류 - '-T' 옵션 뒤에 콘텐츠 유형이 예상됨 !\n"
+msgstr "%s: 오류 - '-T' 옵션 뒤에 콘텐츠 유형이 예상됨!\n"
 msgid "%s: Error - expected copies after '-n' option!\n"
-msgstr "%s: 오류 - -n' 옵션 뒤에 장 수가 예상됨!\n"
+msgstr "%s: 오류 - '-n' 옵션 뒤에 복사 매수가 예상됨!\n"
 msgid "%s: Error - expected copy count after '-#' option!\n"
 msgstr "%s: 오류 - '-#' 옵션 뒤에 복사본 수가 예상됨!\n"
 msgid "%s: Error - expected destination after '-P' option!\n"
@@ -436,7 +436,7 @@ msgstr "%s: 오류 - '-u' 옵션 뒤에 사용자 이름이 예상됨!\n"
 msgid "%s: Error - expected value after '-%c' option!\n"
 msgstr "%s: 오류 - '-%c' 옵션 뒤에 값이 예상됨!\n"
 msgid "%s: Error - need \"completed\", \"not-completed\", or \"all\" after '-W' option!\n"
-msgstr "%s: 오류 - '-W' 옵션 뒤에 \"완료됨\", \"완료되지 않음\" 또는 \"모두\"가 필요!\n"
+msgstr "%s: 오류 - '-W' 옵션 뒤에 \"completed\", \"not-completed\" 또는 \"all\"이 필요!\n"
 msgid "%s: Error - no default destination available.\n"
 msgstr "%s: 오류 - 사용 가능한 기본 대상이 없습니다.\n"
 msgid "%s: Error - priority must be between 1 and 100.\n"
@@ -480,11 +480,13 @@ msgstr "%s: 서버에 연결할 수 없음!\n"
 msgid "%s: Unable to determine MIME type of \"%s\"!\n"
 msgstr "%s: MIME 유형의 \"%s\"을(를) 결정할 수 없음!\n"
 msgid "%s: Unable to open %s - %s\n"
-msgstr "%s: %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 "%s: Unable to open %s: %s\n"
 msgstr "%s: %s을(를) 열 수 없음: %s\n"
 msgid "%s: Unable to open PPD file: %s on line %d\n"
-msgstr "%1$s: %3$d번째 줄에 있는 %2$s PPD 파일을 열 수 없음\n"
+msgstr "%s: PPD 파일을 열 수 없음: %s, %d번째 줄\n"
 msgid "%s: Unable to read MIME database from \"%s\" or \"%s\"!\n"
 msgstr "%s: \"%s\" 또는 \"%s\"에서 MIME 데이터베이스를 읽을 수 없음!\n"
 msgid "%s: Unknown destination \"%s\"!\n"
@@ -506,9 +508,9 @@ msgstr "%s: 경고 - 구성 옵션이 무시됨!\n"
 msgid "%s: Warning - mode option ignored!\n"
 msgstr "%s: 경고 - 모드 옵션이 무시됨!\n"
 msgid "%s: error - %s environment variable names non-existent destination \"%s\"!\n"
-msgstr "%s: 오류 - \"%s\" 대상에 존재하지 않는 %s 환경 변수 이름!\n"
+msgstr "%1$s: 오류 - \"%3$s\" 대상에 존재하지 않는 %2$s 환경 변수 이름!\n"
 msgid "%s: error - expected option=value after '-o' option!\n"
-msgstr "%s: 오류 - '-o' 옵션 뒤에 옵션=값이 예상됨!\n"
+msgstr "%s: 오류 - '-o' 옵션 뒤에 option=value가 예상됨!\n"
 msgid "%s: error - no default destination available.\n"
 msgstr "%s: 오류 - 사용 가능한 기본 대상이 없습니다.\n"
 msgid "-1"
@@ -912,9 +914,9 @@ msgstr "프린터 드라이버를 보내려면 Samba 암호가 필요함!"
 msgid "A Samba username is required to export printer drivers!"
 msgstr "프린터 드라이버를 보내려면 Samba 사용자 이름이 필요함!"
 msgid "A class named \"%s\" already exists!"
-msgstr "\"%s\"라는 이름의 클래스가 이미 존재합니다!"
+msgstr "\"%s\"(이)라는 이름의 클래스가 이미 존재합니다!"
 msgid "A printer named \"%s\" already exists!"
-msgstr "\"%s\"라는 이름의 프린터가 이미 존재합니다!"
+msgstr "\"%s\"(이)라는 이름의 프린터가 이미 존재합니다!"
 msgid "A0"
 msgstr "A0"
 msgid "A1"
@@ -1028,7 +1030,7 @@ msgstr "잘못된 SNMP 버전 번호"
 msgid "Bad UIConstraints"
 msgstr "잘못된 UIConstraints"
 msgid "Bad copies value %d."
-msgstr "잘못된 복사 값 %d."
+msgstr "잘못된 복사 매수 값 %d."
 msgid "Bad custom parameter"
 msgstr "잘못된 사용자 설정 매개변수"
 msgid "Bad device URI \"%s\"!\n"
@@ -1060,7 +1062,7 @@ msgstr "잘못된 notify-recipient-uri URI \"%s\"!"
 msgid "Bad number-up value %d."
 msgstr "잘못된 number-up 값 %d."
 msgid "Bad option + choice on line %d!"
-msgstr "%d번째 줄에 있는 잘못된 옵션 + 선택!"
+msgstr "%d번째 줄에 있는 잘못된 옵션 + 선택사항!"
 msgid "Bad page-ranges values %d-%d."
 msgstr "잘못된 page-ranges 값 %d-%d."
 msgid "Bad port-monitor \"%s\"!"
@@ -1104,13 +1106,13 @@ msgstr "C7 봉투"
 msgid "CMYK"
 msgstr "CMYK"
 msgid "CPCL Label Printer"
-msgstr "CPCL 레이블  프린터"
+msgstr "CPCL 레이블 프린터"
 msgid "Cancel RSS Subscription"
 msgstr "RSS 구독 취소"
 msgid "Change Settings"
-msgstr "설정 값 변경"
+msgstr "설정값 변경"
 msgid "Character set \"%s\" not supported!"
-msgstr "\"%s\" ë¬¸ì\9e\90 ì\84¤ì \95ì\9d´ 지원되지 않음!"
+msgstr "\"%s\" ë¬¸ì\9e\90 ì\84¸í\8a¸ê°\80 지원되지 않음!"
 msgid "Chou3 Envelope"
 msgstr "Chou3 봉투"
 msgid "Chou4 Envelope"
@@ -1124,7 +1126,7 @@ msgstr "색상"
 msgid "Color Mode"
 msgstr "색상 모드"
 msgid "Commands may be abbreviated.  Commands are:\n\nexit    help    quit    status  ?\n"
-msgstr "명령이 생략될 수 있습니다.  명령은 다음과 같습니다:\n\n종료    도움말    종료    상태  ?\n"
+msgstr "명령이 생략될 수 있습니다.  명령은 다음과 같습니다:\n\nexit    help    quit    status  ?\n"
 msgid "Community name uses indefinite length"
 msgstr "커뮤니티 이름 길이가 무제한입니다"
 msgid "Continue"
@@ -1172,7 +1174,7 @@ msgstr "현상액이 거의 비었습니다."
 msgid "Developer empty!"
 msgstr "현상액이 비어 있음!"
 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        클래스 = %s\n        정보 = %s\n        제작 및 모델 = %s\n        장비-id = %s\n        위치 = %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"
@@ -1190,11 +1192,11 @@ msgstr "드라이버 버전: "
 msgid "Duplexer"
 msgstr "양면 프린터"
 msgid "Dymo"
-msgstr "다이모"
+msgstr "Dymo"
 msgid "EMERG: Unable to allocate memory for page info: %s\n"
 msgstr "EMERG: 페이지 정보에 메모리를 할당할 수 없습니다: %s\n"
 msgid "EMERG: Unable to allocate memory for pages array: %s\n"
-msgstr "EMERG: 페이지 ì\96´ë \88ì\9d´ì\97\90 ë©\94모리를 í\95 ë\8b¹í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤: %s\n"
+msgstr "EMERG: 페이지 ë°°ì\97´ì\97\90 ë©\94모리를 í\95 ë\8b¹í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤: %s\n"
 msgid "EPL1 Label Printer"
 msgstr "EPL1 레이블  프린터"
 msgid "EPL2 Label Printer"
@@ -1208,11 +1210,11 @@ msgstr "ERROR: 잘못된 %%Page: 파일에 있는 설명!\n"
 msgid "ERROR: Bad %%PageBoundingBox: comment in file!\n"
 msgstr "ERROR: 잘못된 %%PageBoundingBox: 파일에 있는 설명!\n"
 msgid "ERROR: Bad SCSI device file \"%s\"!\n"
-msgstr "ERROR: 잘못된 \"%s\" SCSI 장비 파일!\n"
+msgstr "ERROR: 잘못된 SCSI 장비 파일 \"%s\"!\n"
 msgid "ERROR: Bad charset file %s\n"
-msgstr "ERROR: 잘못된 %s 문자 파일\n"
+msgstr "ERROR: 잘못된 문자 세트 파일 %s\n"
 msgid "ERROR: Bad charset type %s\n"
-msgstr "ERROR: 잘못된 %s 문자 유형\n"
+msgstr "ERROR: 잘못된 문자 세트 유형 %s\n"
 msgid "ERROR: Bad columns value %d!\n"
 msgstr "ERROR: 잘못된 열 값 %d!\n"
 msgid "ERROR: Bad cpi value %f!\n"
@@ -1240,7 +1242,7 @@ msgstr "ERROR: %d 오류가 다음 PAPSendData 요청을 보내는 중: %s\n"
 msgid "ERROR: Expected quoted string on line %d of %s!\n"
 msgstr "ERROR: %2$s의 %1$d번째 줄에 인용 스트링이 예상됨!\n"
 msgid "ERROR: Fatal USB error!\n"
-msgstr "ERROR: 심각한USB 오류!\n"
+msgstr "ERROR: 심각한 USB 오류!\n"
 msgid "ERROR: Invalid HP-GL/2 command seen, unable to print file!\n"
 msgstr "ERROR: 파일을 프린트할 수 없는, 유효하지 않은 HP-GL/2 명령이 보임!\n"
 msgid "ERROR: Missing %%EndProlog!\n"
@@ -1248,17 +1250,17 @@ msgstr "ERROR: %%EndProlog가 유실됨!\n"
 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"
+msgstr "ERROR: 명령 라인의 장비 URI 유실되었고 DEVICE_URI 환경 변수가 없음!\n"
 msgid "ERROR: Missing value on line %d of banner file!\n"
 msgstr "ERROR: 배너 파일의 %d번째 줄 값이 유실됨!\n"
 msgid "ERROR: Need a msgid line before any translation strings on line %d of %s!\n"
-msgstr "ERROR: %2$s의 %1$d번째 줄에 있는 모든 번역 스트링 앞에 msgid 필요!\n"
+msgstr "ERROR: %2$s의 %1$d번째 줄에 있는 모든 번역 스트링 앞에 msgid 줄 필요!\n"
 msgid "ERROR: No %%BoundingBox: comment in header!\n"
 msgstr "ERROR: %%BoundingBox가 없음: 머리말에 설명!\n"
 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"
+msgstr "ERROR: argv[0] 또는 DEVICE_URI 환경 변수에서 발견된 장비 URI가 없음!\n"
 msgid "ERROR: No fonts in charset file %s\n"
 msgstr "ERROR: %s 문자 세트 파일에 서체 없음\n"
 msgid "ERROR: No pages found!\n"
@@ -1266,7 +1268,7 @@ msgstr "ERROR: 페이지 없음!\n"
 msgid "ERROR: Out of paper!\n"
 msgstr "ERROR: 종이 없음!\n"
 msgid "ERROR: PRINTER environment variable not defined!\n"
-msgstr "ERROR: 프린터 환경 변수가 정의되지 않음!\n"
+msgstr "ERROR: PRINTER 환경 변수가 정의되지 않음!\n"
 msgid "ERROR: Print file was not accepted (%s)!\n"
 msgstr "ERROR: 프린트 파일이 허용되지 않음(%s)!\n"
 msgid "ERROR: Printer not responding\n"
@@ -1276,9 +1278,9 @@ msgstr "ERROR: 프린터가 응답하지 않음!\n"
 msgid "ERROR: Printer sent unexpected EOF\n"
 msgstr "ERROR: 프린터가 예기치 않은 EOF를 보냄\n"
 msgid "ERROR: Remote host did not accept control file (%d)\n"
-msgstr "ERROR: 원격 호스트가 제어 파일(%d)을 허용하지 않음\n"
+msgstr "ERROR: 원격 호스트가 제어 파일을 허용하지 않음(%d)\n"
 msgid "ERROR: Remote host did not accept data file (%d)\n"
-msgstr "ERROR: 원격 호스트가 데이터 파일(%d)을 허용하지 않음\n"
+msgstr "ERROR: 원격 호스트가 데이터 파일을 허용하지 않음(%d)\n"
 msgid "ERROR: There was a timeout error while sending data to the printer\n"
 msgstr "ERROR: 데이터를 프린터로 전송하는 동안 시간초과 오류가 발생했습니다\n"
 msgid "ERROR: Unable to add file %d to job: %s\n"
@@ -1298,29 +1300,29 @@ msgstr "ERROR: 임시 파일을 생성할 수 없음 - %s.\n"
 msgid "ERROR: Unable to create temporary file: %s\n"
 msgstr "ERROR: 임시 파일을 생성할 수 없음: %s\n"
 msgid "ERROR: Unable to exec pictwpstops: %s\n"
-msgstr "ERROR: pictwpstops를 ì\83\9dì\84±할 수 없음: %s\n"
+msgstr "ERROR: pictwpstops를 ì\8b¤í\96\89할 수 없음: %s\n"
 msgid "ERROR: Unable to execute gs program"
 msgstr "ERROR: gs 프로그램을 실행할 수 없음"
 msgid "ERROR: Unable to execute pdftops program"
 msgstr "ERROR: pdftops 프로그램을 실행할 수 없음"
 msgid "ERROR: Unable to fork pictwpstops: %s\n"
-msgstr "ERROR: pictwpstops를 분리할 수 없음: %s\n"
+msgstr "ERROR: pictwpstops를 분리(fork)할 수 없음: %s\n"
 msgid "ERROR: Unable to get PAP request"
 msgstr "ERROR: PAP 요청을 얻을 수 없음"
 msgid "ERROR: Unable to get PAP response"
-msgstr "ERROR: PAP 반응을 얻을 수 없음"
+msgstr "ERROR: PAP 응답을 얻을 수 없음"
 msgid "ERROR: Unable to get PPD file for printer \"%s\" - %s.\n"
-msgstr "ERROR: \"%s\"í\94\84린í\84°ì\97\90 ë\8c\80í\95\9c PPD í\8c\8cì\9d¼ì\9d\84 ì\96»ì\9d\84 ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤. - %s.\n"
+msgstr "ERROR: \"%s\"í\94\84린í\84°ì\97\90 ë\8c\80í\95\9c PPD í\8c\8cì\9d¼ì\9d\84 ì\96»ì\9d\84 ì\88\98 ì\97\86ì\9d\8c - %s.\n"
 msgid "ERROR: Unable to get default AppleTalk zone"
 msgstr "ERROR: 기본 AppleTalk 영역을 얻을 수 없음"
 msgid "ERROR: Unable to get job %d attributes (%s)!\n"
-msgstr "ERROR: %d 작업 속성을 얻을 수 없음(%s)!\n"
+msgstr "ERROR: 작업 %d 속성을 얻을 수 없음(%s)!\n"
 msgid "ERROR: Unable to get printer status (%s)!\n"
 msgstr "ERROR: 프린터 상태를 알 수 없음(%s)!\n"
 msgid "ERROR: Unable to locate printer '%s'!\n"
 msgstr "ERROR: '%s' 프린터를 찾을 수 없음!\n"
 msgid "ERROR: Unable to look for PAP response"
-msgstr "ERROR: PAP 반응을 찾을 수 없음"
+msgstr "ERROR: PAP 응답을 찾을 수 없음"
 msgid "ERROR: Unable to lookup AppleTalk printers"
 msgstr "ERROR: AppleTalk 프린터를 찾을 수 없음"
 msgid "ERROR: Unable to make AppleTalk address"
@@ -1350,7 +1352,7 @@ msgstr "ERROR: 임시로 압축한 프린트 파일을 열 수 없음: %s\n"
 msgid "ERROR: Unable to open temporary file"
 msgstr "ERROR: 임시 파일을 열 수 없음"
 msgid "ERROR: Unable to print %d text columns!\n"
-msgstr "ERROR: %d 텍스트 열을 프린트할 수 없음!\n"
+msgstr "ERROR: %d개의 텍스트 열을 프린트할 수 없음!\n"
 msgid "ERROR: Unable to print %dx%d text page!\n"
 msgstr "ERROR: %dx%d 텍스트 페이지를 프린트할 수 없음!\n"
 msgid "ERROR: Unable to read print data"
@@ -1360,9 +1362,9 @@ msgstr "ERROR: 프린트 데이터를 읽을 수 없음!\n"
 msgid "ERROR: Unable to reserve port"
 msgstr "ERROR: 포트를 예약할 수 없음"
 msgid "ERROR: Unable to seek to offset %ld in file - %s\n"
-msgstr "ERROR: 파일에 있는 %ld 오프셋을 찾을 수 없음 - %s\n"
+msgstr "ERROR: 파일에 %ld 오프셋을 찾을 수 없음 - %s\n"
 msgid "ERROR: Unable to seek to offset %lld in file - %s\n"
-msgstr "ERROR: 파일에 있는 %lld 오프셋을 찾을 수 없음 - %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"
@@ -1376,7 +1378,7 @@ 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을 프린터로 보낼 수 없음"
+msgstr "ERROR: 끝자리 nul을 프린터로 보낼 수 없음"
 msgid "ERROR: Unable to wait for pictwpstops: %s\n"
 msgstr "ERROR: pictwpstops를 기다릴 수 없음: %s\n"
 msgid "ERROR: Unable to write %d bytes to \"%s\": %s\n"
@@ -1406,35 +1408,35 @@ msgstr "ERROR: 알 수 없는 포맷 문자 \"%c\"\n"
 msgid "ERROR: Unknown message catalog format for \"%s\"!\n"
 msgstr "ERROR: \"%s\"에 대한 알 수 없는 메시지 카탈로그 포맷!\n"
 msgid "ERROR: Unknown option \"%s\" with value \"%s\"!\n"
-msgstr "ERROR: \"%s\" 값을 가진 알 수 없는 \"%s\" 옵션!\n"
+msgstr "ERROR: \"%2$s\" 값이 있는 알 수 없는 \"%1$s\" 옵션!\n"
 msgid "ERROR: Unknown print mode \"%s\"\n"
 msgstr "ERROR: 알 수 없는 \"%s\" 프린트 모드\n"
 msgid "ERROR: Unknown version option value \"%s\"!\n"
 msgstr "ERROR: 알 수 없는 \"%s\" 버전 옵션 값!\n"
 msgid "ERROR: Unsupported brightness value %s, using brightness=100!\n"
-msgstr "ERROR: 밝기=100을 사용하는, 지원되지 않는 %s 밝기 값!\n"
+msgstr "ERROR: brightness=100을 사용하는, 지원되지 않는 밝기 값 %s!\n"
 msgid "ERROR: Unsupported gamma value %s, using gamma=1000!\n"
-msgstr "ERROR: 감마=1000을 사용하는, 지원되지 않는 %s 감마 값ㅍ!\n"
+msgstr "ERROR: gamma=1000을 사용하는, 지원되지 않는 감마 값 %s!\n"
 msgid "ERROR: Unsupported number-up value %d, using number-up=1!\n"
-msgstr "ERROR: number-up=1을 사용하는, 지원되지 않는 %d number-up 값!\n"
+msgstr "ERROR: number-up=1을 사용하는, 지원되지 않는 number-up 값 %d!\n"
 msgid "ERROR: Unsupported number-up-layout value %s, using number-up-layout=lrtb!\n"
-msgstr "ERROR: number-up-layout=lrtb을 사용하는, 지원되지 않는 number-up-layout %s!\n"
+msgstr "ERROR: number-up-layout=lrtb을 사용하는, 지원되지 않는 number-up-layout 값 %s!\n"
 msgid "ERROR: Unsupported page-border value %s, using page-border=none!\n"
-msgstr "ERROR: page-border=없음을 사용하는, 지원되지 않는 page-border 값 %s!\n"
+msgstr "ERROR: page-border=none을 사용하는, 지원되지 않는 page-border 값 %s!\n"
 msgid "ERROR: doc_printf overflow (%d bytes) detected, aborting!\n"
 msgstr "ERROR: doc_printf 오버플로우(%d바이트)가 발견됨, 중단 중!\n"
 msgid "ERROR: pdftops filter crashed on signal %d!\n"
-msgstr "ERROR: pictwpstopsê°\80 %d ì\8b í\98¸ì\97\90ì\84\9c ì¢\85ë£\8cë\90¨!\n"
+msgstr "ERROR: pdftops í\95\84í\84°ê°\80 ì\8b í\98¸ %dì\97\90ì\84\9c ì¶©ë\8f\8cí\95¨!\n"
 msgid "ERROR: pdftops filter exited with status %d!\n"
-msgstr "ERROR: pictwpstops가 %d 상태로 종료됨!\n"
+msgstr "ERROR: pdftops 필터가 상태 %d(으)로 종료됨!\n"
 msgid "ERROR: pictwpstops exited on signal %d!\n"
-msgstr "ERROR: pictwpstops가 %d 신호에서 종료됨!\n"
+msgstr "ERROR: pictwpstops가 신호 %d에서 종료됨!\n"
 msgid "ERROR: pictwpstops exited with status %d!\n"
-msgstr "ERROR: pictwpstops가 %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: select() failed"
-msgstr "ERROR: 선택() 실패"
+msgstr "ERROR: select() 실패"
 msgid "ERROR: unable to stat print file"
 msgstr "ERROR: 프린트 파일을 시작할 수 없음"
 msgid "Edit Configuration File"
@@ -1450,7 +1452,7 @@ 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 "이 페이지에 연결하려면 사용자 이름 및 암호 또는 루트 사용자 이름 및 암호를 입력하십시오. Kerberos 인증을 사용하고 있다면, 유효한 Kerberos 티켓을 가지고 있는지 확인하십시오."
+msgstr "이 페이지에 연결하려면 사용자 이름 및 암호 또는 root 사용자 이름 및 암호를 입력하십시오. Kerberos 인증을 사용하고 있다면, 유효한 Kerberos 티켓을 가지고 있는지 확인하십시오."
 msgid "Envelope Feed"
 msgstr "봉투 공급"
 msgid "Epson"
@@ -1458,25 +1460,25 @@ msgstr "Epson"
 msgid "Error Policy"
 msgstr "오류 정책"
 msgid "Error: need hostname after '-h' option!\n"
-msgstr "오류: '-h' 옵션 뒤에 호스트 이름이 필요함!!\n"
+msgstr "오류: '-h' 옵션 뒤에 호스트 이름이 필요!\n"
 msgid "Every 10 Labels"
-msgstr "10레이블마다"
+msgstr "10개 레이블마다"
 msgid "Every 2 Labels"
-msgstr "2레이블마다"
+msgstr "2개 레이블마다"
 msgid "Every 3 Labels"
-msgstr "3레이블마다"
+msgstr "3개 레이블마다"
 msgid "Every 4 Labels"
-msgstr "4레이블마다"
+msgstr "4개 레이블마다"
 msgid "Every 5 Labels"
-msgstr "5레이블마다"
+msgstr "5개 레이블마다"
 msgid "Every 6 Labels"
-msgstr "6레이블마다"
+msgstr "6개 레이블마다"
 msgid "Every 7 Labels"
-msgstr "7레이블마다"
+msgstr "7개 레이블마다"
 msgid "Every 8 Labels"
-msgstr "8레이블마다"
+msgstr "8개 레이블마다"
 msgid "Every 9 Labels"
-msgstr "9레이블마다"
+msgstr "9개 레이블마다"
 msgid "Every Label"
 msgstr "모든 레이블"
 msgid "Expectation Failed"
@@ -1490,15 +1492,15 @@ msgstr "파일 폴더"
 msgid "File Folder - 9/16 x 3 7/16\""
 msgstr "파일 폴더 - 9/16 x 3 7/16\""
 msgid "File device URIs have been disabled! To enable, see the FileDevice directive in \"%s/cupsd.conf\"."
-msgstr "파일 장비 URI가 비활성화되었습니다! 활성화하려면, \"%s/cupsd.conf\"에 있는 FileDevice 보십시오."
+msgstr "파일 장비 URI가 비활성화되었습니다! 활성화하려면, \"%s/cupsd.conf\"에 있는 FileDevice 지시문을 보십시오."
 msgid "Folio"
-msgstr "폴리오"
+msgstr "2절지"
 msgid "Forbidden"
 msgstr "금지됨"
 msgid "Fuser temperature high!"
-msgstr "Fuser 온도가 높음!"
+msgstr "퓨저 온도가 높음!"
 msgid "Fuser temperature low!"
-msgstr "Fuser 온도가 낮음!"
+msgstr "퓨저 온도가 낮음!"
 msgid "General"
 msgstr "일반"
 msgid "Generic"
@@ -1506,7 +1508,7 @@ msgstr "일반"
 msgid "German FanFold"
 msgstr "독일 FanFold"
 msgid "German FanFold Legal"
-msgstr "독일 FanFold Legal"
+msgstr "독일 FanFold 공문서"
 msgid "Get-Response-PDU uses indefinite length"
 msgstr "Get-Response-PDU 길이가 무제한입니다"
 msgid "Glossy Paper"
@@ -1544,7 +1546,7 @@ 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"
@@ -1584,15 +1586,15 @@ msgstr "INFO: 데이터 파일 보내는 중(%lld바이트)\n"
 msgid "INFO: Sending print data...\n"
 msgstr "INFO: 프린트 데이터 보내는 중...\n"
 msgid "INFO: Sent print file, %ld bytes...\n"
-msgstr "INFO: í\94\84린í\8a¸ í\8c\8cì\9d¼ ë³´ë\82´ê¸°, %ld바이트...\n"
+msgstr "INFO: í\94\84린í\8a¸ í\8c\8cì\9d¼ ë³´ë\83\84, %ld바이트...\n"
 msgid "INFO: Sent print file, %lld bytes...\n"
-msgstr "INFO: í\94\84린í\8a¸ í\8c\8cì\9d¼ ë³´ë\82´ê¸°, %lld바이트...\n"
+msgstr "INFO: í\94\84린í\8a¸ í\8c\8cì\9d¼ ë³´ë\83\84, %lld바이트...\n"
 msgid "INFO: Spooling LPR job, %.0f%% complete...\n"
 msgstr "INFO: LPR 작업 스풀 중, %.0f%% 완료...\n"
 msgid "INFO: Unable to contact printer, queuing on next printer in class...\n"
 msgstr "INFO: 프린터에 연결할 수 없기 때문에, 클래스에 있는 다음 프린터 대기 중...\n"
 msgid "INFO: Using default AppleTalk zone \"%s\"\n"
-msgstr "INFO: 기본 AppleTalk 영역 사용 중 \"%s\"\n"
+msgstr "INFO: \"%s\" 기본 AppleTalk 영역 사용 중 \n"
 msgid "INFO: Waiting for job to complete...\n"
 msgstr "INFO: 작업 완료 대기 중...\n"
 msgid "INFO: Waiting for printer to become available...\n"
@@ -1634,7 +1636,7 @@ msgstr "올바르지 않은 주 키워드 스트링"
 msgid "Illegal option keyword string"
 msgstr "올바르지 않은 옵션 키워드 스트링"
 msgid "Illegal translation string"
-msgstr "올바르지 번역 스트링"
+msgstr "올바르지 않은 번역 스트링"
 msgid "Illegal whitespace character"
 msgstr "올바르지 않은 여백 문자"
 msgid "Ink/toner almost empty."
@@ -1688,13 +1690,13 @@ msgstr "#%d 작업이 종료되었고 대체할 수 없음!"
 msgid "Job #%d is not complete!"
 msgstr "#%d 작업이 왼료되지 않음!"
 msgid "Job #%d is not held for authentication!"
-msgstr "#%d 작업이 인증되지 않음!"
+msgstr "#%d 작업이 인증을 위해 유지되지 않음!"
 msgid "Job #%d is not held!"
 msgstr "#%d 작업이 유지되지 않음!"
 msgid "Job #%s does not exist!"
 msgstr "#%s 작업이 존재하지 않음!"
 msgid "Job %d not found!"
-msgstr "#%d 작업이 발견되지 않음!"
+msgstr "%d 작업이 발견되지 않음!"
 msgid "Job Completed"
 msgstr "작업이 완료됨"
 msgid "Job Created"
@@ -1746,7 +1748,7 @@ msgstr "위치: "
 msgid "Long-Edge (Portrait)"
 msgstr "가장자리 길게(세로)"
 msgid "Make and Model: "
-msgstr "ì\83\9dì\84± 및 모델: "
+msgstr "ì \9cì¡°ì\82¬ 및 모델: "
 msgid "Manual Feed"
 msgstr "수동 공급"
 msgid "Media Dimensions: "
@@ -1764,11 +1766,11 @@ msgstr "미디어 추적"
 msgid "Media Type"
 msgstr "미디어 유형"
 msgid "Media jam!"
-msgstr "미디어 정체!"
+msgstr "미디어가 걸림!"
 msgid "Media tray almost empty."
 msgstr "미디어 트레이가 거의 비었습니다."
 msgid "Media tray empty!"
-msgstr "미디어 트레이가 비어있음!"
+msgstr "미디어 트레이가 비어 있음!"
 msgid "Media tray missing!"
 msgstr "미디어 트레이가 유실됨!"
 msgid "Media tray needs to be filled."
@@ -1782,7 +1784,7 @@ msgstr "PPD-Adobe-4.x 머리말이 유실됨"
 msgid "Missing asterisk in column 1"
 msgstr "1열에 있는 별표가 유실됨"
 msgid "Missing document-number attribute!"
-msgstr "도큐멘트 번호 속성이 유실됨!"
+msgstr "document-number 속성이 유실됨!"
 msgid "Missing double quote on line %d!"
 msgstr "%d번째 줄에 있는 큰 따옴표가 유실됨!"
 msgid "Missing form variable!"
@@ -1798,7 +1800,7 @@ msgstr "%d번째 줄에 있는 값이 유실됨!"
 msgid "Missing value string"
 msgstr "값 스트링이 유실됨"
 msgid "Model:  name = %s\n        natural_language = %s\n        make-and-model = %s\n        device-id = %s\n"
-msgstr "모델:  이름 = %s\n        기본 언어 = %s\n        생성 및 모델 = %s\n        장비 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"
@@ -1820,15 +1822,15 @@ msgstr "NOTICE: 프린트 파일이 허용됨 - 알 수 없는 작업 ID.\n"
 msgid "NULL PPD file pointer"
 msgstr "NULL PPD 파일 포인터"
 msgid "Name OID uses indefinite length"
-msgstr "OID 이름 길이가 무제한입니다"
+msgstr "이름 OID 길이가 무제한입니다"
 msgid "Never"
 msgstr "안 함"
 msgid "New Stylus Color Series"
-msgstr "새로운 Stylus 색상 시리즈"
+msgstr "새로운 Stylus Color 시리즈"
 msgid "New Stylus Photo Series"
-msgstr "새로운 Stylus 사진 시리즈"
+msgstr "새로운 Stylus Photo 시리즈"
 msgid "No"
-msgstr "ì\95\84ë\8b\88ì\98¤"
+msgstr "ì\95\84ë\8b\88ì\9a\94"
 msgid "No Content"
 msgstr "콘텐츠 없음"
 msgid "No PPD name!"
@@ -1838,13 +1840,13 @@ msgstr "VarBind SEQUENCE 없음"
 msgid "No Windows printer drivers are installed!"
 msgstr "설치된 Windows 프린터 드라이버가 없음!"
 msgid "No active connection"
-msgstr "í\99\9cì\84± ì\9e\91ì\97\85이 없음"
+msgstr "í\99\9cì\84± ì\97°ê²°이 없음"
 msgid "No active jobs on %s!"
 msgstr "%s에 활성 작업이 없음!"
 msgid "No attributes in request!"
 msgstr "요청에 속성이 없음!"
 msgid "No authentication information provided!"
-msgstr "ì \9cê³µë\90\9c ì \95ë³´ì\97\90 ì\9d¸ì¦\9dì\9d´ 없음!"
+msgstr "ì \9cê³µë\90\9c ì\9d¸ì¦\9d ì \95ë³´ê°\80 없음!"
 msgid "No community name"
 msgstr "커뮤니티 이름 없음"
 msgid "No default printer"
@@ -1852,15 +1854,15 @@ msgstr "기본 프린터가 없음"
 msgid "No destinations added."
 msgstr "추가된 대상이 없습니다."
 msgid "No error-index"
-msgstr "오류-인덱스 없음"
+msgstr "error-index 없음"
 msgid "No error-status"
-msgstr "오류-상태 없음"
+msgstr "error-status 없음"
 msgid "No file!?!"
 msgstr "파일이 없음!?!"
 msgid "No modification time!"
 msgstr "수정 시간 없음!"
 msgid "No name OID"
-msgstr "OID 이름 없음"
+msgstr "이름 OID 없음"
 msgid "No printer name!"
 msgstr "프린터 이름 없음!"
 msgid "No printer-uri found for class!"
@@ -1874,7 +1876,7 @@ msgstr "request-id 없음"
 msgid "No subscription attributes in request!"
 msgstr "요청에 구독 속성이 없음!"
 msgid "No subscriptions found."
-msgstr "구독이 없습니다."
+msgstr "발견된 구독이 없습니다."
 msgid "No variable-bindings SEQUENCE"
 msgstr "variable-bindings SEQUENCE 없음"
 msgid "No version number"
@@ -1916,7 +1918,7 @@ msgstr "%s 열기 실패: %s"
 msgid "OpenGroup without a CloseGroup first"
 msgstr "우선 CloseGroup이 없는 OpenGroup"
 msgid "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first"
-msgstr "우선 CloseUI/JCLCloseUI 없는 OpenUI/JCLOpenUI"
+msgstr "우선 CloseUI/JCLCloseUI 없는 OpenUI/JCLOpenUI"
 msgid "Operation Policy"
 msgstr "동작 정책"
 msgid "Options Installed"
@@ -1928,21 +1930,21 @@ msgstr "토너가 없음!"
 msgid "Output Mode"
 msgstr "출력 모드"
 msgid "Output bin almost full."
-msgstr "ì¶\9cë ¥ì\86\8c ê±°ì\9d\98 ì°¾습니다."
+msgstr "ì¶\9cë ¥ì\86\8c ê±°ì\9d\98 ì°¼습니다."
 msgid "Output bin full!"
-msgstr "출력소가 가득 참!"
+msgstr "출력소가 찼습니다!"
 msgid "Output for printer %s is sent to %s\n"
 msgstr "%s 프린터 출력을 %s(으)로 보냄\n"
 msgid "Output for printer %s is sent to remote printer %s on %s\n"
-msgstr "%s 프린터 출력을 %s에 있는 %s 원격 프린터로 보냄\n"
+msgstr "%1$s 프린터 출력을 %3$s에 있는 %2$s 원격 프린터로 보냄\n"
 msgid "Output for printer %s/%s is sent to %s\n"
 msgstr "%s/%s 프린터 출력을 %s로 보냄\n"
 msgid "Output for printer %s/%s is sent to remote printer %s on %s\n"
-msgstr "%s/%s 프린터 출력을 %s에 있는 %s 원격 프린터로 보냄\n"
+msgstr "%1$s/%2$s 프린터 출력을 %4$s에 있는 %3$s 원격 프린터로 보냄\n"
 msgid "Output tray missing!"
 msgstr "출력 트레이가 유실됨!"
 msgid "PASS\n"
-msgstr "통과\n"
+msgstr "PASS\n"
 msgid "PCL Laser Printer"
 msgstr "PCL 레이저 프린터"
 msgid "PRC1 Envelope"
@@ -1980,9 +1982,9 @@ msgstr "ParamCustominCutInterval"
 msgid "ParamCustominTearInterval"
 msgstr "ParamCustominTearInterval"
 msgid "Password for %s on %s? "
-msgstr "%s 암호(%s에서 사용)? "
+msgstr "%2$s의 %1$s 암호? "
 msgid "Password for %s required to access %s via SAMBA: "
-msgstr "%s에 대한 암호는 SAMBA를 통해 %s에 연결해야 합니다: "
+msgstr "SAMBA를 통해 %2$s에 연결하려면 필요한 %1$s의 암호: "
 msgid "Pause Class"
 msgstr "클래스 일시정지"
 msgid "Pause Printer"
@@ -2058,7 +2060,7 @@ msgstr "용량이 한계에 도달했습니다."
 msgid "Rank    Owner   Job     File(s)                         Total Size\n"
 msgstr "단계    소유자   작업     파일                         총 크기\n"
 msgid "Rank   Owner      Pri  Job        Files                       Total Size\n"
-msgstr "단계   소유자      미리  작업        파일                       총 크기\n"
+msgstr "단계   소유자      우선순위  작업        파일                       총 크기\n"
 msgid "Reject Jobs"
 msgstr "작업 거부"
 msgid "Reprint After Error"
@@ -2088,25 +2090,25 @@ msgstr "기타 보기"
 msgid "Serial Port #%d"
 msgstr "시리얼 포트 #%d"
 msgid "Server Restarted"
-msgstr "ì\8b\9cë\8f\99ë\90\9c ì\84\9cë²\84"
+msgstr "ì\84\9cë²\84 ì\9e¬ì\8b\9cë\8f\99ë\90¨"
 msgid "Server Security Auditing"
 msgstr "서버 보안 감사"
 msgid "Server Started"
-msgstr "ì\8b\9cì\9e\91í\95\9c ì\84\9cë²\84"
+msgstr "ì\84\9cë²\84 ì\8b\9cë\8f\99ë\90¨"
 msgid "Server Stopped"
-msgstr "ì¤\91ë\8b¨ë\90\9c ì\84\9cë²\84"
+msgstr "ì\84\9cë²\84 ì¤\91ë\8b¨ë\90¨"
 msgid "Service Unavailable"
 msgstr "사용할 수 없는 서비스"
 msgid "Set Allowed Users"
 msgstr "허용된 사용자 설정"
 msgid "Set As Server Default"
-msgstr "기본으로 설정"
+msgstr "서버 기본값으로 설정"
 msgid "Set Class Options"
 msgstr "클래스 옵션 설정"
 msgid "Set Printer Options"
 msgstr "프린터 옵션 설정"
 msgid "Set Publishing"
-msgstr "발행하기 설정"
+msgstr "발행 설정"
 msgid "Shipping Address"
 msgstr "발송 주소"
 msgid "Shipping Address - 2 5/16 x 4\""
@@ -2120,11 +2122,11 @@ msgstr "표준"
 msgid "Starting Banner"
 msgstr "배너 시작 중"
 msgid "Statement"
-msgstr "ì\83\81í\83\9c"
+msgstr "ë\8c\80ì°¨í\91\9c"
 msgid "Stylus Color Series"
-msgstr "Stylus 색상 시리즈"
+msgstr "Stylus Color 시리즈"
 msgid "Stylus Photo Series"
-msgstr "Stylus 사진 시리즈"
+msgstr "Stylus Photo 시리즈"
 msgid "Super A"
 msgstr "수퍼 A"
 msgid "Super B"
@@ -2146,15 +2148,15 @@ msgstr "절취선 조절 위치"
 msgid "The PPD file \"%s\" could not be found."
 msgstr "\"%s\" PPD 파일을 찾을 수 없습니다."
 msgid "The PPD file \"%s\" could not be opened: %s"
-msgstr "\"%s\" PPD 파일을 열 수 없습니다. %s"
+msgstr "\"%s\" PPD 파일을 열 수 없습니다: %s"
 msgid "The class name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)."
-msgstr "í\81´ë\9e\98ì\8a¤ ì\9d´ë¦\84ì\9d\80 ìµ\9cë\8c\80 127ì\9e\90ì\9d\98 í\94\84린í\8a¸ ê°\80ë\8a¥í\95\9c ë¬¸ì\9e\90ë§\8cì\9d\84 í\8f¬í\95¨í\95  ì\88\98 ì\9e\88ê³  ë¹\88 ì¹¸, ì\8a¬ë\9e\98ì\8b\9c(/) ë\98\90ë\8a\94 í\8c\8cì\9a´ë\93\9c ê¸°í\98¸(#)를 í\8f¬í\95¨í\95\98ì§\80 ì\95\8aì\9d\84 ì\88\98 ì\9e\88ì\8aµë\8b\88ë\8b¤."
+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 "í\94\84린í\84° ì\9d´ë¦\84ì\9d\80 ìµ\9cë\8c\80 127ì\9e\90ì\9d\98 í\94\84린í\8a¸ ê°\80ë\8a¥í\95\9c ë¬¸ì\9e\90ë§\8cì\9d\84 í\8f¬í\95¨í\95  ì\88\98 ì\9e\88ê³  ë¹\88 ì¹¸, ì\8a¬ë\9e\98ì\8b\9c(/) ë\98\90ë\8a\94 í\8c\8cì\9a´ë\93\9c ê¸°í\98¸(#)를 í\8f¬í\95¨í\95\98ì§\80 ì\95\8aì\9d\84 ì\88\98 ì\9e\88ì\8aµë\8b\88ë\8b¤."
+msgstr "프린터 이름은 최대 127자의 프린트 가능한 문자만을 포함할 수 있고 빈 칸, 슬래시(/) 또는 파운드 기호(#)를 포함하지 않습니다."
 msgid "The printer or class is not shared!"
 msgstr "프린터 또는 클래스를 공유할 수 없음!"
 msgid "The printer or class was not found."
@@ -2168,7 +2170,7 @@ msgstr "printer-uri는 \"ipp://HOSTNAME/classes/CLASSNAME\" 형태여야 합니
 msgid "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"."
 msgstr "printer-uri는 \"ipp://HOSTNAME/printers/PRINTERNAME\" 형태여야 합니다."
 msgid "The subscription name may not contain spaces, slashes (/), question marks (?), or the pound sign (#)."
-msgstr "구독 이름은 최대 127자의 프린트 가능한 문자만을 포함할 수 있고 빈 칸, 슬래시(/) 또는 파운드 기호(#)를 포함하지 않을 수 있습니다."
+msgstr "구독 이름은 빈 칸, 슬래시(/), 물음표(?) 또는 파운드 기호(#)를 포함하지 않습니다."
 msgid "There are too many subscriptions."
 msgstr "구독이 너무 많습니다."
 msgid "Thermal Transfer Media"
@@ -2178,7 +2180,7 @@ msgstr "제목: "
 msgid "Toner low."
 msgstr "토너가 부족합니다."
 msgid "Too many active jobs."
-msgstr "너무 많은 작업이 활성되었습니다."
+msgstr "활성 작업이 너무 많습니다."
 msgid "Too many job-sheets values (%d > 2)!"
 msgstr "job-sheets 값이 너무 많습니다(%d > 2)!"
 msgid "Too many printer-state-reasons values (%d > %d)!"
@@ -2216,53 +2218,53 @@ msgstr "US 편지지(소)"
 msgid "USB Serial Port #%d"
 msgstr "USB 시리얼 포트 #%d"
 msgid "Unable to access cupsd.conf file:"
-msgstr "cupsd.conf í\8c\8cì\9d¼ì\97\90 ì\97°ê²°í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤:"
+msgstr "cupsd.conf í\8c\8cì\9d¼ì\97\90 ì\97°ê²°í\95  ì\88\98 ì\97\86ì\9d\8c:"
 msgid "Unable to add RSS subscription:"
-msgstr "RSS êµ¬ë\8f\85ì\9d\84 ì¶\94ê°\80í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤:"
+msgstr "RSS êµ¬ë\8f\85ì\9d\84 ì¶\94ê°\80í\95  ì\88\98 ì\97\86ì\9d\8c:"
 msgid "Unable to add class:"
-msgstr "í\81´ë\9e\98ì\8a¤ë¥¼ ì¶\94ê°\80í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤:"
+msgstr "í\81´ë\9e\98ì\8a¤ë¥¼ ì¶\94ê°\80í\95  ì\88\98 ì\97\86ì\9d\8c:"
 msgid "Unable to add job for destination \"%s\"!"
-msgstr "\"%s\" ë\8c\80ì\83\81ì\97\90 ë\8c\80í\95\9c ì\9e\91ì\97\85ì\9d\84 ì¶\94ê°\80í\95  ì\88\98 ì\97\86ì\9d\8c!"
+msgstr "\"%s\" ë\8c\80ì\83\81ì\97\90 ë\8c\80í\95\9c ì\9e\91ì\97\85ì\9d\84 ì¶\94ê°\80í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤!"
 msgid "Unable to add printer:"
-msgstr "í\94\84린í\84°ë¥¼ ì¶\94ê°\80í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤:"
+msgstr "í\94\84린í\84°ë¥¼ ì¶\94ê°\80í\95  ì\88\98 ì\97\86ì\9d\8c:"
 msgid "Unable to allocate memory for file types!"
-msgstr "í\8c\8cì\9d¼ ì\9c í\98\95ì\97\90 ë\8c\80í\95\9c ë©\94모리를 í\95 ë\8b¹í\95  ì\88\98 ì\97\86ì\9d\8c!"
+msgstr "í\8c\8cì\9d¼ ì\9c í\98\95ì\97\90 ë\8c\80í\95\9c ë©\94모리를 í\95 ë\8b¹í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤!"
 msgid "Unable to cancel RSS subscription:"
-msgstr "RSS 구독을 취소없습니다:"
+msgstr "RSS 구독을 취소할 수 없음:"
 msgid "Unable to change printer-is-shared attribute:"
-msgstr "printer-is-shared ì\86\8dì\84±ì\9d\84 ë³\80ê²½í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤:"
+msgstr "printer-is-shared ì\86\8dì\84±ì\9d\84 ë³\80ê²½í\95  ì\88\98 ì\97\86ì\9d\8c:"
 msgid "Unable to change printer:"
-msgstr "í\94\84린í\84°ë¥¼ ë³\80ê²½í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤:"
+msgstr "í\94\84린í\84°ë¥¼ ë³\80ê²½í\95  ì\88\98 ì\97\86ì\9d\8c:"
 msgid "Unable to change server settings:"
-msgstr "ì\84\9cë²\84 ì\84¤ì \95ê°\92ì\9d\84 ë³\80ê²½í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤:"
+msgstr "ì\84\9cë²\84 ì\84¤ì \95ê°\92ì\9d\84 ë³\80ê²½í\95  ì\88\98 ì\97\86ì\9d\8c:"
 msgid "Unable to connect to host."
-msgstr "í\98¸ì\8a¤í\8a¸ì\97\90 ì\97°ê²°í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤."
+msgstr "í\98¸ì\8a¤í\8a¸ì\97\90 ì\97°ê²°í\95  ì\88\98 ì\97\86ì\9d\8c."
 msgid "Unable to copy 64-bit CUPS printer driver files (%d)!"
-msgstr "64ë¹\84í\8a¸ CUPS í\94\84린í\84° ë\93\9cë\9d¼ì\9d´ë²\84 í\8c\8cì\9d¼ì\9d\84 ë³µì\82¬í\95  ì\88\98 ì\97\86ì\9d\8c(%d)!"
+msgstr "64ë¹\84í\8a¸ CUPS í\94\84린í\84° ë\93\9cë\9d¼ì\9d´ë²\84 í\8c\8cì\9d¼ì\9d\84 ë³µì\82¬í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤(%d)!"
 msgid "Unable to copy 64-bit Windows printer driver files (%d)!"
-msgstr "64ë¹\84í\8a¸ Windows í\94\84린í\84° ë\93\9cë\9d¼ì\9d´ë²\84 í\8c\8cì\9d¼ì\9d\84 ë³µì\82¬í\95  ì\88\98 ì\97\86ì\9d\8c(%d)!"
+msgstr "64ë¹\84í\8a¸ Windows í\94\84린í\84° ë\93\9cë\9d¼ì\9d´ë²\84 í\8c\8cì\9d¼ì\9d\84 ë³µì\82¬í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤(%d)!"
 msgid "Unable to copy CUPS printer driver files (%d)!"
-msgstr "CUPS í\94\84린í\84° ë\93\9cë\9d¼ì\9d´ë²\84 í\8c\8cì\9d¼ì\9d\84 ë³µì\82¬í\95  ì\88\98 ì\97\86ì\9d\8c(%d)!"
+msgstr "CUPS í\94\84린í\84° ë\93\9cë\9d¼ì\9d´ë²\84 í\8c\8cì\9d¼ì\9d\84 ë³µì\82¬í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤(%d)!"
 msgid "Unable to copy PPD file - %s!"
 msgstr "PPD 파일을 복사할 수 없음 - %s!"
 msgid "Unable to copy PPD file!"
-msgstr "PPD í\8c\8cì\9d¼ì\9d\84 ë³µì\82¬í\95  ì\88\98 ì\97\86ì\9d\8c!"
+msgstr "PPD í\8c\8cì\9d¼ì\9d\84 ë³µì\82¬í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤!"
 msgid "Unable to copy Windows 2000 printer driver files (%d)!"
-msgstr "Windows 2000 í\94\84린í\84° ë\93\9cë\9d¼ì\9d´ë²\84 í\8c\8cì\9d¼ì\9d\84 ë³µì\82¬í\95  ì\88\98 ì\97\86ì\9d\8c(%d)!"
+msgstr "Windows 2000 í\94\84린í\84° ë\93\9cë\9d¼ì\9d´ë²\84 í\8c\8cì\9d¼ì\9d\84 ë³µì\82¬í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤(%d)!"
 msgid "Unable to copy Windows 9x printer driver files (%d)!"
-msgstr "Windows 9x í\94\84린í\84° ë\93\9cë\9d¼ì\9d´ë²\84 í\8c\8cì\9d¼ì\9d\84 ë³µì\82¬í\95  ì\88\98 ì\97\86ì\9d\8c(%d)!"
+msgstr "Windows 9x í\94\84린í\84° ë\93\9cë\9d¼ì\9d´ë²\84 í\8c\8cì\9d¼ì\9d\84 ë³µì\82¬í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤(%d)!"
 msgid "Unable to copy interface script - %s!"
 msgstr "인터페이스 스크립트를 복사할 수 없음 - %s!"
 msgid "Unable to create printer-uri!"
-msgstr "printer-uri를 ì\83\9dì\84±í\95  ì\88\98 ì\97\86ì\9d\8c!"
+msgstr "printer-uri를 ì\83\9dì\84±í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤!"
 msgid "Unable to create temporary file:"
-msgstr "ì\9e\84ì\8b\9c í\8c\8cì\9d¼ì\9d\84 ì\83\9dì\84±í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤:"
+msgstr "ì\9e\84ì\8b\9c í\8c\8cì\9d¼ì\9d\84 ì\83\9dì\84±í\95  ì\88\98 ì\97\86ì\9d\8c:"
 msgid "Unable to delete class:"
-msgstr "í\81´ë\9e\98ì\8a¤ë¥¼ ì\82­ì \9cí\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤:"
+msgstr "í\81´ë\9e\98ì\8a¤ë¥¼ ì\82­ì \9cí\95  ì\88\98 ì\97\86ì\9d\8c:"
 msgid "Unable to delete printer:"
-msgstr "í\94\84린í\84°ë¥¼ ì\82­ì \9cí\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤:"
+msgstr "í\94\84린í\84°ë¥¼ ì\82­ì \9cí\95  ì\88\98 ì\97\86ì\9d\8c:"
 msgid "Unable to do maintenance command:"
-msgstr "ëª\85ë ¹ì\9d\84 ì\9c ì§\80í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤:"
+msgstr "ëª\85ë ¹ì\9d\84 ì\9c ì§\80í\95  ì\88\98 ì\97\86ì\9d\8c:"
 msgid "Unable to edit cupsd.conf files larger than 1MB!"
 msgstr "1MB보다 큰 cupsd.conf 파일은 편집할 수 없습니다!"
 msgid "Unable to find destination for job!"
@@ -2270,15 +2272,15 @@ msgstr "작업에 대한 대상을 찾을 수 없습니다!"
 msgid "Unable to find printer!\n"
 msgstr "프린터를 찾을 수 없습니다!\n"
 msgid "Unable to get class list:"
-msgstr "í\81´ë\9e\98ì\8a¤ ëª©ë¡\9dì\9d\84 ì\96»ì\9d\84 ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤:"
+msgstr "í\81´ë\9e\98ì\8a¤ ëª©ë¡\9dì\9d\84 ì\96»ì\9d\84 ì\88\98 ì\97\86ì\9d\8c:"
 msgid "Unable to get class status:"
-msgstr "í\81´ë\9e\98ì\8a¤ ì\83\81í\83\9c를 ì\95\8c ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤:"
+msgstr "í\81´ë\9e\98ì\8a¤ ì\83\81í\83\9c를 ì\95\8c ì\88\98 ì\97\86ì\9d\8c:"
 msgid "Unable to get list of printer drivers:"
-msgstr "í\94\84린í\84° ë\93\9cë\9d¼ì\9d´ë²\84 ëª©ë¡\9dì\9d\84 ì\96»ì\9d\84 ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤:"
+msgstr "í\94\84린í\84° ë\93\9cë\9d¼ì\9d´ë²\84 ëª©ë¡\9dì\9d\84 ì\96»ì\9d\84 ì\88\98 ì\97\86ì\9d\8c:"
 msgid "Unable to get printer attributes:"
-msgstr "í\94\84린í\84° ì\86\8dì\84±ì\9d\84 ì\96»ì\9d\84 ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤:"
+msgstr "í\94\84린í\84° ì\86\8dì\84±ì\9d\84 ì\96»ì\9d\84 ì\88\98 ì\97\86ì\9d\8c:"
 msgid "Unable to get printer list:"
-msgstr "í\94\84린í\84° ëª©ë¡\9dì\9d\84 ì\96»ì\9d\84 ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤:"
+msgstr "í\94\84린í\84° ëª©ë¡\9dì\9d\84 ì\96»ì\9d\84 ì\88\98 ì\97\86ì\9d\8c:"
 msgid "Unable to get printer status:"
 msgstr "프린터 상태를 알 수 없습니다:"
 msgid "Unable to install Windows 2000 printer driver files (%d)!"
@@ -2286,9 +2288,9 @@ msgstr "Windows 2000 프린터 드라이버 파일을 설치할 수 없습니다
 msgid "Unable to install Windows 9x printer driver files (%d)!"
 msgstr "Windows 9x 프린터 드라이버 파일을 설치할 수 없습니다(%d)!"
 msgid "Unable to modify class:"
-msgstr "í\81´ë\9e\98ì\8a¤ë¥¼ ì\88\98ì \95í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤:"
+msgstr "í\81´ë\9e\98ì\8a¤ë¥¼ ì\88\98ì \95í\95  ì\88\98 ì\97\86ì\9d\8c:"
 msgid "Unable to modify printer:"
-msgstr "í\94\84린í\84°ë¥¼ ì\88\98ì \95í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤:"
+msgstr "í\94\84린í\84°ë¥¼ ì\88\98ì \95í\95  ì\88\98 ì\97\86ì\9d\8c:"
 msgid "Unable to move job"
 msgstr "작업을 이동할 수 없습니다"
 msgid "Unable to move jobs"
@@ -2296,23 +2298,23 @@ msgstr "작업을 이동할 수 없습니다"
 msgid "Unable to open PPD file"
 msgstr "PPD 파일을 열 수 없습니다"
 msgid "Unable to open PPD file:"
-msgstr "PPD í\8c\8cì\9d¼ì\9d\84 ì\97´ ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤:"
+msgstr "PPD í\8c\8cì\9d¼ì\9d\84 ì\97´ ì\88\98 ì\97\86ì\9d\8c:"
 msgid "Unable to open cupsd.conf file:"
-msgstr "cupsd.conf í\8c\8cì\9d¼ì\9d\84 ì\97´ ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤:"
+msgstr "cupsd.conf í\8c\8cì\9d¼ì\9d\84 ì\97´ ì\88\98 ì\97\86ì\9d\8c:"
 msgid "Unable to open document %d in job %d!"
-msgstr "%d개의 도큐멘트를 작업 %d에서 열 수 없습니다!"
+msgstr "도큐멘트 %d을(를) 작업 %d에서 열 수 없습니다!"
 msgid "Unable to print test page:"
-msgstr "í\85\8cì\8a¤í\8a¸ í\8e\98ì\9d´ì§\80를 í\94\84린í\8a¸í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤:"
+msgstr "í\85\8cì\8a¤í\8a¸ í\8e\98ì\9d´ì§\80를 í\94\84린í\8a¸í\95  ì\88\98 ì\97\86ì\9d\8c:"
 msgid "Unable to run \"%s\": %s\n"
-msgstr "\"%s\"ì\9d\84(를) ì\8b¤í\96\89í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤: %s\n"
+msgstr "\"%s\"ì\9d\84(를) ì\8b¤í\96\89í\95  ì\88\98 ì\97\86ì\9d\8c: %s\n"
 msgid "Unable to send command to printer driver!"
-msgstr "í\94\84린í\84° ë\93\9cë\9d¼ì\9d´ë²\84ë¡\9c ëª\85ë ¹ì\9d\84 ë³´ë\82¼ ì\88\98 ì\97\86ì\9d\8c!"
+msgstr "í\94\84린í\84° ë\93\9cë\9d¼ì\9d´ë²\84ë¡\9c ëª\85ë ¹ì\9d\84 ë³´ë\82¼ ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤!"
 msgid "Unable to set Windows printer driver (%d)!"
-msgstr "Windows í\94\84린í\84° ë\93\9cë\9d¼ì\9d´ë²\84를 ì\84¤ì \95í\95  ì\88\98 ì\97\86ì\9d\8c(%d)!"
+msgstr "Windows í\94\84린í\84° ë\93\9cë\9d¼ì\9d´ë²\84를 ì\84¤ì \95í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤(%d)!"
 msgid "Unable to set options:"
-msgstr "ì\98µì\85\98ì\9d\84 ì\84¤ì \95í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤:"
+msgstr "ì\98µì\85\98ì\9d\84 ì\84¤ì \95í\95  ì\88\98 ì\97\86ì\9d\8c:"
 msgid "Unable to set server default:"
-msgstr "기본 서버를 설정할 수 없습니다:"
+msgstr "서버 기본값을 설정할 수 없음:"
 msgid "Unable to upload cupsd.conf file:"
 msgstr "cupsd.conf 파일을 업로드할 수 없습니다:"
 msgid "Unable to use legacy USB class driver!\n"
@@ -2348,11 +2350,11 @@ 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 "사용법:\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"
 msgid "Usage: %s job user title copies options [filename]\n"
-msgstr "사용법: %s 작업 사용자 제목 복사 옵션 [파일 이름]\n"
+msgstr "사용법: %s job user title copies options [filename]\n"
 msgid "Usage: %s job-id user title copies options [file]\n"
-msgstr "사용법: %s job-id 사용자 제목 복사 옵션 [파일]\n"
+msgstr "사용법: %s job-id user title copies options [file]\n"
 msgid "Usage: %s job-id user title copies options file\n"
-msgstr "사용법: %s job-id 사용자 제목 복사 옵션 파일\n"
+msgstr "사용법: %s job-id user title copies options file\n"
 msgid "Usage: convert [ options ]\n\nOptions:\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 [ options ]\n\n옵션:\n\n  -f filename          변환할 파일 설정(또는 stdin)\n  -o filename          생성할 파일 설정(또는 stdout)\n  -i mime/type         입력 MIME 유형 설정(또는 자동 유형 설정)\n  -j mime/type         출력 MIME 유형 설정(또는 응용 프로그램/pdf)\n  -P filename.ppd      PPD 파일 설정\n  -a 'name=value ...'  옵션 설정(s)\n  -U username          작업에 대한 사용자 이름 설정\n  -J title             제목 설정\n  -c copies            복사 장 수 설정\n  -u                   종료 시 PPD 파일 제거\n  -D                   종료 시 입력 파일 제거\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"
@@ -2422,11 +2424,11 @@ msgstr "WARNING: \"%s:%s\"을(를) 열 수 없습니다: %s\n"
 msgid "WARNING: Unable to send PAP status request"
 msgstr "WARNING: PAP 상태 요청을 보낼 수 없습니다"
 msgid "WARNING: Unexpected PAP packet of type %d\n"
-msgstr "WARNING: %d 유형의 예기치않은 PAP 패킷\n"
+msgstr "WARNING: %d 유형의 예기치 않은 PAP 패킷\n"
 msgid "WARNING: Unknown PAP packet of type %d\n"
 msgstr "WARNING: %d 유형의 알 수 없는 PAP 패킷\n"
 msgid "WARNING: Unknown choice \"%s\" for option \"%s\"!\n"
-msgstr "WARNING: \"%s\" 옵션에 대한 알 수 없는 선택 \"%s\"!\n"
+msgstr "WARNING: \"%2$s\" 옵션에 대한 알 수 없는 \"%1$s\" 선택사항!\n"
 msgid "WARNING: Unknown option \"%s\"!\n"
 msgstr "WARNING: 알 수 없는 \"%s\" 옵션!\n"
 msgid "WARNING: Unsupported baud rate %s!\n"
@@ -2496,9 +2498,9 @@ msgstr "%s/%s에 대한 장비: %s\n"
 msgid "device for %s: %s\n"
 msgstr "%s에 대한 장비: %s\n"
 msgid "error-index uses indefinite length"
-msgstr "오류-인덱스 길이가 무제한입니다"
+msgstr "error-index 길이가 무제한입니다"
 msgid "error-status uses indefinite length"
-msgstr "오류-상태 길이가 무제한입니다"
+msgstr "error-status 길이가 무제한입니다"
 msgid "held"
 msgstr "유지됨"
 msgid "help\t\tget help on commands\n"
@@ -2510,37 +2512,37 @@ 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"
+msgstr "lpadmin: '-P' 옵션 뒤에 PPD가 예상됨!\n"
 msgid "lpadmin: Expected allow/deny:userlist after '-u' option!\n"
-msgstr "lpadmin: '-u'옵션 뒤에 허용/거부:사용자목록이 예상됨!\n"
+msgstr "lpadmin: '-u' 옵션 뒤에 allow/deny:userlist가 예상됨!\n"
 msgid "lpadmin: Expected class after '-r' option!\n"
-msgstr "lpadmin: '-r'옵션 뒤에 클래스가 예상됨!\n"
+msgstr "lpadmin: '-r' 옵션 뒤에 클래스가 예상됨!\n"
 msgid "lpadmin: Expected class name after '-c' option!\n"
-msgstr "lpadmin: '-c'옵션 뒤에 클래스 이름이 예상됨!\n"
+msgstr "lpadmin: '-c' 옵션 뒤에 클래스 이름이 예상됨!\n"
 msgid "lpadmin: Expected description after '-D' option!\n"
-msgstr "lpadmin: '-D'옵션 뒤에 설명이 예상됨!\n"
+msgstr "lpadmin: '-D' 옵션 뒤에 설명이 예상됨!\n"
 msgid "lpadmin: Expected device URI after '-v' option!\n"
-msgstr "lpadmin: '-v'옵션 뒤에 장비 URI가 예상됨!\n"
+msgstr "lpadmin: '-v' 옵션 뒤에 장비 URI가 예상됨!\n"
 msgid "lpadmin: Expected file type(s) after '-I' option!\n"
-msgstr "lpadmin: '-I'옵션 뒤에 파일 유형이 예상됨!\n"
+msgstr "lpadmin: '-I' 옵션 뒤에 파일 유형이 예상됨!\n"
 msgid "lpadmin: Expected hostname after '-h' option!\n"
-msgstr "lpadmin: '-h'옵션 뒤에 호스트 이름이 예상됨!\n"
+msgstr "lpadmin: '-h' 옵션 뒤에 호스트 이름이 예상됨!\n"
 msgid "lpadmin: Expected interface after '-i' option!\n"
-msgstr "lpadmin: '-i'옵션 뒤에 인터페이스가 예상됨!\n"
+msgstr "lpadmin: '-i' 옵션 뒤에 인터페이스가 예상됨!\n"
 msgid "lpadmin: Expected location after '-L' option!\n"
-msgstr "lpadmin: '-L'옵션 뒤에 위치가 예상됨!\n"
+msgstr "lpadmin: '-L' 옵션 뒤에 위치가 예상됨!\n"
 msgid "lpadmin: Expected model after '-m' option!\n"
-msgstr "lpadmin: '-m'옵션 뒤에 모델이 예상됨!\n"
+msgstr "lpadmin: '-m' 옵션 뒤에 모델이 예상됨!\n"
 msgid "lpadmin: Expected name=value after '-o' option!\n"
-msgstr "lpadmin: '-o'옵션 뒤에 이름=값이 예상됨!\n"
+msgstr "lpadmin: '-o' 옵션 뒤에 name=value가 예상됨!\n"
 msgid "lpadmin: Expected printer after '-p' option!\n"
-msgstr "lpadmin: '-p'옵션 뒤에 프린터가 예상됨!\n"
+msgstr "lpadmin: '-p' 옵션 뒤에 프린터가 예상됨!\n"
 msgid "lpadmin: Expected printer name after '-d' option!\n"
-msgstr "lpadmin: '-d'옵션 뒤에 프린터가 예상됨!\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"
+msgstr "lpadmin: 회원 이름이 보이지 않음!\n"
 msgid "lpadmin: Printer %s is already a member of class %s.\n"
 msgstr "lpadmin: %s 프린터에 이미 %s 클래스 회원이 있습니다.\n"
 msgid "lpadmin: Printer %s is not a member of class %s.\n"
@@ -2576,7 +2578,7 @@ msgstr "lpadmin: 프린터 위치를 설정할 수 없음:\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\" 허용/거부 옵션!\n"
+msgstr "lpadmin: 알 수 없는 allow/deny 옵션 \"%s\"!\n"
 msgid "lpadmin: Unknown argument '%s'!\n"
 msgstr "lpadmin: 알 수 없는 '%s' 변수!\n"
 msgid "lpadmin: Unknown option '%c'!\n"
@@ -2590,7 +2592,7 @@ 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 ë\92¤ì\97\90 ì\83\9dì\84± 및 모델이 예상됨!\n"
+msgstr "lpinfo: --make-and-model ë\92¤ì\97\90 ì \9cì¡°ì\82¬ 및 모델이 예상됨!\n"
 msgid "lpinfo: Expected product string after --product!\n"
 msgstr "lpinfo: --product 뒤에 제품 스트링이 예상됨!\n"
 msgid "lpinfo: Expected scheme list after --exclude-schemes!\n"
@@ -2622,7 +2624,7 @@ 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: 루트만 암호를 추가 또는 제거할 수 있음!\n"
+msgstr "lppasswd: root만 암호를 추가 또는 제거할 수 있음!\n"
 msgid "lppasswd: Password file busy!\n"
 msgstr "lppasswd: 암호 파일 사용 중!\n"
 msgid "lppasswd: Password file not updated!\n"
@@ -2630,7 +2632,7 @@ msgstr "lppasswd: 암호 파일이 업데이트되지 않음!\n"
 msgid "lppasswd: Sorry, password doesn't match!\n"
 msgstr "lppasswd: 죄송합니다, 암호가 일치하지 않습니다!\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"
+msgstr "lppasswd: 죄송합니다, 암호가 거부되었습니다.\n암호는 최소한 6자 이상이어야 하고, 사용자 이름을 포함해서는 안되며, \n최소 하나 이상의 문자 및 숫자를 포함해야 합니다.\n"
 msgid "lppasswd: Sorry, passwords don't match!\n"
 msgstr "lppasswd: 죄송합니다, 암호가 일치하지 않습니다!\n"
 msgid "lppasswd: Unable to copy password string: %s\n"
@@ -2648,7 +2650,7 @@ msgstr "lppasswd: \"%s\" 사용자 및 \"%s\" 그룹이 존재하지 않습니
 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"
+msgstr "%s 클래스 회원:\n"
 msgid "no entries\n"
 msgstr "엔트리 없음\n"
 msgid "no system default destination\n"
@@ -2668,7 +2670,7 @@ msgstr "ppdc: \"%s\" 포함 디렉토리 추가 중...\n"
 msgid "ppdc: Adding/updating UI text from %s...\n"
 msgstr "ppdc: %s에서 UI 텍스트 추가/업데이트 중...\n"
 msgid "ppdc: Bad boolean value (%s) on line %d of %s.\n"
-msgstr "ppdc: 잘못된 불리언 값(%1$s)이(가) %3$s의 %2$d번째 줄에 있음.\n"
+msgstr "ppdc: 잘못된 불리언 값(%1$s)이 %3$s의 %2$d번째 줄에 있음.\n"
 msgid "ppdc: Bad resolution name \"%s\" on line %d of %s!\n"
 msgstr "ppdc: 잘못된 \"%1$s\" 해상도 이름이 %3$s의 %2$d번째 줄에 있음!\n"
 msgid "ppdc: Bad status keyword %s on line %d of %s!\n"
@@ -2686,7 +2688,7 @@ msgstr "ppdc: %2$s의 %1$d번째 줄에 프로그램 이름이 예상됨!\n"
 msgid "ppdc: Expected boolean value on line %d of %s.\n"
 msgstr "ppdc: %2$s의 %1$d번째 줄에 불리언 값이 예상됨.\n"
 msgid "ppdc: Expected charset after Font on line %d of %s!\n"
-msgstr "ppdc: %2$s의 %1$d번째 줄 Font 뒤에 문자 세트가 예상됨!\n"
+msgstr "ppdc: %2$s의 %1$d번째 줄, Font 뒤에 문자 세트가 예상됨!\n"
 msgid "ppdc: Expected choice code on line %d of %s.\n"
 msgstr "ppdc: %2$s의 %1$d번째 줄에 선택사항 코드가 예상됨.\n"
 msgid "ppdc: Expected choice name/text on line %d of %s.\n"
@@ -2694,19 +2696,19 @@ msgstr "ppdc: %2$s의 %1$d번째 줄에 선택사항 이름/텍스트가 예상
 msgid "ppdc: Expected color order for ColorModel on line %d of %s!\n"
 msgstr "ppdc: %2$s의 %1$d번째 줄에 ColorModel에 대한 색상 순서가 예상됨!\n"
 msgid "ppdc: Expected colorspace for ColorModel on line %d of %s!\n"
-msgstr "ppdc: %2$sì\9d\98 %1$dë²\88째 ì¤\84ì\97\90 ColorModelì\97\90 ë\8c\80í\95´ 색상 공간이 예상됨!\n"
+msgstr "ppdc: %2$sì\9d\98 %1$dë²\88째 ì¤\84ì\97\90 ColorModelì\97\90 ë\8c\80í\95\9c 색상 공간이 예상됨!\n"
 msgid "ppdc: Expected compression for ColorModel on line %d of %s!\n"
-msgstr "ppdc: %2$sì\9d\98 %1$dë²\88째 ì¤\84ì\97\90 ColorModelì\97\90 ë\8c\80í\95´ 압축이 예상됨!\n"
+msgstr "ppdc: %2$sì\9d\98 %1$dë²\88째 ì¤\84ì\97\90 ColorModelì\97\90 ë\8c\80í\95\9c 압축이 예상됨!\n"
 msgid "ppdc: Expected constraints string for UIConstraints on line %d of %s!\n"
-msgstr "ppdc: %2$sì\9d\98 %1$dë²\88째 ì¤\84ì\97\90 UIConstraintsì\97\90 ë\8c\80í\95´ 제한 스트링이 예상됨!\n"
+msgstr "ppdc: %2$sì\9d\98 %1$dë²\88째 ì¤\84ì\97\90 UIConstraintsì\97\90 ë\8c\80í\95\9c 제한 스트링이 예상됨!\n"
 msgid "ppdc: Expected driver type keyword following DriverType on line %d of %s!\n"
-msgstr "ppdc: %2$s의 %1$d번째 줄 DriverType 뒤에 드라이버 유형 키워드가 예상됨!\n"
+msgstr "ppdc: %2$s의 %1$d번째 줄, DriverType 뒤에 드라이버 유형 키워드가 예상됨!\n"
 msgid "ppdc: Expected duplex type after Duplex on line %d of %s!\n"
-msgstr "ppdc: %2$s의 %1$d번째 줄 Duplex 뒤에 양면 유형이 예상됨!\n"
+msgstr "ppdc: %2$s의 %1$d번째 줄, Duplex 뒤에 양면 유형이 예상됨!\n"
 msgid "ppdc: Expected encoding after Font on line %d of %s!\n"
-msgstr "ppdc: %2$s의 %1$d번째 줄 Font 뒤에 인코딩이 예상됨!\n"
+msgstr "ppdc: %2$s의 %1$d번째 줄, Font 뒤에 인코딩이 예상됨!\n"
 msgid "ppdc: Expected filename after #po %s on line %d of %s!\n"
-msgstr "ppdc: #po %1$s 뒤에 파일 이름이 예상됨(%3$s의 %2$d번째 줄)!\n"
+msgstr "ppdc: %3$s의 %2$d번째 줄, #po %1$s 뒤에 파일 이름이 예상됨!\n"
 msgid "ppdc: Expected group name/text on line %d of %s!\n"
 msgstr "ppdc: %2$s의 %1$d번째 줄에 그룹 이름/텍스트가 예상됨!\n"
 msgid "ppdc: Expected include filename on line %d of %s!\n"
@@ -2714,29 +2716,29 @@ msgstr "ppdc: %2$s의 %1$d번째 줄에 포함 파일 이름이 예상됨!\n"
 msgid "ppdc: Expected integer on line %d of %s!\n"
 msgstr "ppdc: %2$s의 %1$d번째 줄에 정수가 예상됨!\n"
 msgid "ppdc: Expected locale after #po on line %d of %s!\n"
-msgstr "ppdc: %2$s의 %1$d번째 줄 #po 뒤에 로컬 위치가 예상됨!\n"
+msgstr "ppdc: %2$s의 %1$d번째 줄, #po 뒤에 로컬 위치가 예상됨!\n"
 msgid "ppdc: Expected name after %s on line %d of %s!\n"
-msgstr "ppdc: %1$s 뒤에 이름이 예상됨(%3$s의 %2$d번째 줄)!\n"
+msgstr "ppdc: %3$s의 %2$d번째 줄, %1$s 뒤에 이름이 예상됨!\n"
 msgid "ppdc: Expected name after FileName on line %d of %s!\n"
-msgstr "ppdc: %2$s의 %1$d번째 줄 FileName 뒤에 이름이 예상됨!\n"
+msgstr "ppdc: %2$s의 %1$d번째 줄, FileName 뒤에 이름이 예상됨!\n"
 msgid "ppdc: Expected name after Font on line %d of %s!\n"
-msgstr "ppdc: %2$s의 %1$d번째 줄 Font 뒤에 이름이 예상됨!\n"
+msgstr "ppdc: %2$s의 %1$d번째 줄, Font 뒤에 이름이 예상됨!\n"
 msgid "ppdc: Expected name after Manufacturer on line %d of %s!\n"
-msgstr "ppdc: %2$s의 %1$d번째 줄 Manufacturer 뒤에 이름이 예상됨!\n"
+msgstr "ppdc: %2$s의 %1$d번째 줄, Manufacturer 뒤에 이름이 예상됨!\n"
 msgid "ppdc: Expected name after MediaSize on line %d of %s!\n"
-msgstr "ppdc: %2$s의 %1$d번째 줄 MediaSize 뒤에 이름이 예상됨!\n"
+msgstr "ppdc: %2$s의 %1$d번째 줄, MediaSize 뒤에 이름이 예상됨!\n"
 msgid "ppdc: Expected name after ModelName on line %d of %s!\n"
-msgstr "ppdc: %2$s의 %1$d번째 줄 ModelName 뒤에 이름이 예상됨!\n"
+msgstr "ppdc: %2$s의 %1$d번째 줄, ModelName 뒤에 이름이 예상됨!\n"
 msgid "ppdc: Expected name after PCFileName on line %d of %s!\n"
-msgstr "ppdc: %2$s의 %1$d번째 줄 PCFileName 뒤에 이름이 예상됨!\n"
+msgstr "ppdc: %2$s의 %1$d번째 줄, PCFileName 뒤에 이름이 예상됨!\n"
 msgid "ppdc: Expected name/text after %s on line %d of %s!\n"
-msgstr "ppdc: %1$s 뒤에 이름/텍스트가 예상됨(%3$s의 %2$d번째 줄)!\n"
+msgstr "ppdc: %3$s의 %2$d번째 줄, %1$s 뒤에 이름/텍스트가 예상됨!\n"
 msgid "ppdc: Expected name/text after Installable on line %d of %s!\n"
-msgstr "ppdc: %2$s의 %1$d번째 줄 Installable 뒤에 이름/텍스트 예상됨!\n"
+msgstr "ppdc: %2$s의 %1$d번째 줄, Installable 뒤에 이름/텍스트 예상됨!\n"
 msgid "ppdc: Expected name/text after Resolution on line %d of %s!\n"
-msgstr "ppdc: %2$s의 %1$d번째 줄 Resolution 뒤에 이름/텍스트 예상됨!\n"
+msgstr "ppdc: %2$s의 %1$d번째 줄, Resolution 뒤에 이름/텍스트 예상됨!\n"
 msgid "ppdc: Expected name/text combination for ColorModel on line %d of %s!\n"
-msgstr "ppdc: %2$s의 %1$d번째 줄 ColorModel에 대해 이름/텍스트 조합이 예상됨!\n"
+msgstr "ppdc: %2$s의 %1$d번째 줄, ColorModel에 대해 이름/텍스트 조합이 예상됨!\n"
 msgid "ppdc: Expected option name/text on line %d of %s!\n"
 msgstr "ppdc: %2$s의 %1$d번째 줄에 옵션 이름/텍스트가 예상됨!\n"
 msgid "ppdc: Expected option section on line %d of %s!\n"
@@ -2744,27 +2746,27 @@ msgstr "ppdc: %2$s의 %1$d번째 줄에 옵션 섹션이 예상됨!\n"
 msgid "ppdc: Expected option type on line %d of %s!\n"
 msgstr "ppdc: %2$s의 %1$d번째 줄의 옵션 유형이 예상됨!\n"
 msgid "ppdc: Expected override field after Resolution on line %d of %s!\n"
-msgstr "ppdc: %2$s의 %1$d번째 줄 Resolution 뒤에 오버라이드 필드가 예상됨!\n"
+msgstr "ppdc: %2$s의 %1$d번째 줄, Resolution 뒤에 오버라이드 필드가 예상됨!\n"
 msgid "ppdc: Expected real number on line %d of %s!\n"
 msgstr "ppdc: %2$s의 %1$d번째 줄에 실제 번호가 예상됨!\n"
 msgid "ppdc: Expected resolution/mediatype following ColorProfile on line %d of %s!\n"
-msgstr "ppdc: %2$s의 %1$d번째 줄 ColorProfile 뒤에 해상도/미디어 유형이 예상됨!\n"
+msgstr "ppdc: %2$s의 %1$d번째 줄, ColorProfile 뒤에 해상도/미디어 유형이 예상됨!\n"
 msgid "ppdc: Expected resolution/mediatype following SimpleColorProfile on line %d of %s!\n"
-msgstr "ppdc: %2$s의 %1$d번째 줄 SimpleColorProfile 뒤에 해상도/미디어 유형이 예상됨!\n"
+msgstr "ppdc: %2$s의 %1$d번째 줄, SimpleColorProfile 뒤에 해상도/미디어 유형이 예상됨!\n"
 msgid "ppdc: Expected selector after %s on line %d of %s!\n"
-msgstr "ppdc: %1$s 뒤에 선택자가 예상됨(%3$s의 %2$d번째 줄)!\n"
+msgstr "ppdc: %3$s의 %2$d번째 줄, %1$s 뒤에 선택자가 예상됨!\n"
 msgid "ppdc: Expected status after Font on line %d of %s!\n"
-msgstr "ppdc: %2$s의 %1$d번째 줄 Font 뒤에 상태가 예상됨!\n"
+msgstr "ppdc: %2$s의 %1$d번째 줄, Font 뒤에 상태가 예상됨!\n"
 msgid "ppdc: Expected string after Copyright on line %d of %s!\n"
-msgstr "ppdc: %2$s의 %1$d번째 줄 Copyright 뒤에 스트링이 예상됨!\n"
+msgstr "ppdc: %2$s의 %1$d번째 줄, Copyright 뒤에 스트링이 예상됨!\n"
 msgid "ppdc: Expected string after Version on line %d of %s!\n"
-msgstr "ppdc: %2$s의 %1$d번째 줄 Version 뒤에 스트링이 예상됨!\n"
+msgstr "ppdc: %2$s의 %1$d번째 줄, Version 뒤에 스트링이 예상됨!\n"
 msgid "ppdc: Expected two option names on line %d of %s!\n"
 msgstr "ppdc: %2$s의 %1$d번째 줄에 옵션 이름 2개가 예상됨!\n"
 msgid "ppdc: Expected value after %s on line %d of %s!\n"
-msgstr "ppdc: %1$s 뒤에 값이 예상됨(%3$s의 %2$d번째 줄)!\n"
+msgstr "ppdc: %3$s의 %2$d번째 줄, %1$s 뒤에 값이 예상됨!\n"
 msgid "ppdc: Expected version after Font on line %d of %s!\n"
-msgstr "ppdc: %2$s의 %1$d번째 줄 Font 뒤에 버전이 예상됨!\n"
+msgstr "ppdc: %2$s의 %1$d번째 줄, Font 뒤에 버전이 예상됨!\n"
 msgid "ppdc: Invalid #include/#po filename \"%s\"!\n"
 msgstr "ppdc: 유효하지 않은 #include/#po 파일 이름 \"%s\"!\n"
 msgid "ppdc: Invalid cost for filter on line %d of %s!\n"
@@ -2774,9 +2776,9 @@ msgstr "ppdc: %2$s의 %1$d번째 줄의 필터에 대해 유효하지 않은 빈
 msgid "ppdc: Invalid empty program name for filter on line %d of %s!\n"
 msgstr "ppdc: %2$s의 %1$d번째 줄의 필터에 대해 유효하지 않은 빈 프로그램 이름!\n"
 msgid "ppdc: Invalid option section \"%s\" on line %d of %s!\n"
-msgstr "ppdc: 유효하지 않은 \"%1$s\"옵션 섹션(%3$s의 %2$d번째 줄)!\n"
+msgstr "ppdc: %3$s의 %2$d번째 줄에 유효하지 않은 \"%1$s\" 옵션 섹션!\n"
 msgid "ppdc: Invalid option type \"%s\" on line %d of %s!\n"
-msgstr "ppdc: 유효하지 않은 \"%1$s\ 옵션 유형(%3$s의 %2$d번째 줄)!\n"
+msgstr "ppdc: %3$s의 %2$d번째 줄에 유효하지 않은 \"%1$s\ 옵션 유형!\n"
 msgid "ppdc: Loading driver information file \"%s\"...\n"
 msgstr "ppdc: \"%s\" 드라이버 정보 파일 로드 중...\n"
 msgid "ppdc: Loading messages for locale \"%s\"...\n"
@@ -2790,9 +2792,9 @@ msgstr "ppdc: %2$s의 %1$d번째 줄에서 #if 유실됨!\n"
 msgid "ppdc: No message catalog provided for locale %s!\n"
 msgstr "ppdc: 로컬 %s에 대해 제공된 메시지 카탈로그 없음!\n"
 msgid "ppdc: Option %s redefined with a different type on line %d of %s!\n"
-msgstr "ppdc: %1$s 옵션이 다른 유형으로 재정의됨(%3$s의 %2$d번째 줄)!\n"
+msgstr "ppdc: %3$s의 %2$d번째 줄에 %1$s 옵션이 다른 유형으로 재정의됨!\n"
 msgid "ppdc: Option constraint must *name on line %d of %s!\n"
-msgstr "ppdc: 옵션 제한은 *name이어야 함(%2$s의 %1$d번째 줄)!\n"
+msgstr "ppdc: %2$s의 %1$d번째 줄에 있는 옵션 제한은 *name이어야 함!\n"
 msgid "ppdc: Too many nested #if's on line %d of %s!\n"
 msgstr "ppdc: %2$s의 %1$d번째 줄에 너무 많이 중첩된 #if가 있음!\n"
 msgid "ppdc: Unable to create PPD file \"%s\" - %s.\n"
@@ -2804,41 +2806,41 @@ msgstr "ppdc: 출력 파이프를 생성할 수 없음: %s\n"
 msgid "ppdc: Unable to execute cupstestppd: %s\n"
 msgstr "ppdc: cupstestppd를 실행할 수 없음: %s\n"
 msgid "ppdc: Unable to find #po file %s on line %d of %s!\n"
-msgstr "ppdc: #po 파일 %1$s을(를) 찾을 수 없음(%3$s의 %2$d번째 줄)!\n"
+msgstr "ppdc: %3$s의 %2$d번째 줄에서 #po 파일 %1$s을(를) 찾을 수 없음!\n"
 msgid "ppdc: Unable to find include file \"%s\" on line %d of %s!\n"
-msgstr "ppdc: \"%1$s\" 포함 파일을 찾을 수 없음(%3$s의 %2$d번째 줄)!\n"
+msgstr "ppdc: %3$s의 %2$d번째 줄에서 포함 파일 \"%1$s\"을(를) 찾을 수 없음!\n"
 msgid "ppdc: Unable to find localization for \"%s\" - %s\n"
 msgstr "ppdc: \"%s\"에 대한 현지화를 찾을 수 없음 - %s\n"
 msgid "ppdc: Unable to load localization file \"%s\" - %s\n"
 msgstr "ppdc: \"%s\"에 대한 현지화 파일을 로드할 수 없음 - %s\n"
 msgid "ppdc: Undefined variable (%s) on line %d of %s.\n"
-msgstr "ppdc: 변수(%1$s)가 정의되지 않음(%3$s의 %2$d번째 줄).\n"
+msgstr "ppdc: %3$s의 %2$d번째 줄에 변수(%1$s)가 정의되지 않음.\n"
 msgid "ppdc: Unknown driver type %s on line %d of %s!\n"
-msgstr "ppdc: 알 수 없는 %1$s 드라이브 유형(%3$s의 %2$d번째 줄)!\n"
+msgstr "ppdc: %3$s의 %2$d번째 줄에 알 수 없는 %1$s 드라이브 유형!\n"
 msgid "ppdc: Unknown duplex type \"%s\" on line %d of %s!\n"
-msgstr "ppdc: 알 수 없는 \"%1$s\" 양면 유형(%3$s의 %2$d번째 줄)!\n"
+msgstr "ppdc: %3$s의 %2$d번째 줄에 알 수 없는 \"%1$s\" 양면 유형!\n"
 msgid "ppdc: Unknown media size \"%s\" on line %d of %s!\n"
-msgstr "ppdc: 알 수 없는 \"%1$s\" 미디어 크기(%3$s의 %2$d번째 줄)!\n"
+msgstr "ppdc: %3$s의 %2$d번째 줄에 알 수 없는 \"%1$s\" 미디어 크기!\n"
 msgid "ppdc: Unknown token \"%s\" seen on line %d of %s!\n"
-msgstr "ppdc: 알 수 없는 \"%1$s\" 토큰(%3$s의 %2$d번째 줄)!\n"
+msgstr "ppdc: %3$s의 %2$d번째 줄에 보이는 알 수 없는 \"%1$s\" 토큰!\n"
 msgid "ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s!\n"
-msgstr "ppdc: 실수에 \"%1$s\" 알 수 없는 마지막 문자(%3$s의 %2$d번째 줄)!\n"
+msgstr "ppdc: %3$s의 %2$d번째 줄에 있는 \"%1$s\" 실수에 알 수 없는 마지막 문자!\n"
 msgid "ppdc: Unterminated string starting with %c on line %d of %s!\n"
-msgstr "ppdc: %1$c(으)로 시작하는 끝나지 않는 스트링(%3$s의 %2$d번째 줄)!\n"
+msgstr "ppdc: %3$s의 %2$d번째 줄에 %1$c(으)로 시작하는 끝나지 않는 스트링!\n"
 msgid "ppdc: Writing %s...\n"
 msgstr "ppdc: %s 쓰는 중...\n"
 msgid "ppdc: Writing PPD files to directory \"%s\"...\n"
 msgstr "ppdc: \"%s\" 디렉토리에 PPD 파일 쓰는 중...\n"
 msgid "ppdmerge: Bad LanguageVersion \"%s\" in %s!\n"
-msgstr "ppdmerge: 잘못된 \"%s\" LanguageVersion(%s에 있음)!\n"
+msgstr "ppdmerge: %2$s에 잘못된 \"%1$s\" LanguageVersion!\n"
 msgid "ppdmerge: Ignoring PPD file %s...\n"
 msgstr "ppdmerge: %s PPD 파일 무시 중...\n"
 msgid "ppdmerge: Unable to backup %s to %s- %s\n"
 msgstr "ppdmerge: %s을(를) %s(으)로 백업할 수 없음- %s\n"
 msgid "printer %s disabled since %s -\n"
-msgstr "%s 프린터가 비활성화됨(%s 이후) -\n"
+msgstr "%2$s 이후로 %1$s 프린터가 비활성화됨 -\n"
 msgid "printer %s is idle.  enabled since %s\n"
-msgstr "%s 프린터가 대기 중. %s 이후에 활성화됨\n"
+msgstr "%s 프린터가 대기 중.  %s 이후에 활성화됨\n"
 msgid "printer %s now printing %s-%d.  enabled since %s\n"
 msgstr "%s 프린터가 현재 %s-%d을(를) 프린트 중입니다.  %s 이후에 활성화됨\n"
 msgid "printer %s/%s disabled since %s -\n"
@@ -2850,15 +2852,15 @@ msgstr "%s/%s 프린터가 현재 %s-%d을(를) 프린트 중입니다.  %s 이
 msgid "processing"
 msgstr "처리 중"
 msgid "request id is %s-%d (%d file(s))\n"
-msgstr "id 요청은 %s-%d(%d개의 파일)\n"
+msgstr "요청 id는 %s-%d(%d개의 파일)\n"
 msgid "request-id uses indefinite length"
-msgstr "id 요청은 길이가 무제한입니다"
+msgstr "request-id 길이가 무제한입니다"
 msgid "scheduler is not running\n"
 msgstr "일정이 실행되지 않음\n"
 msgid "scheduler is running\n"
 msgstr "일정이 실행 중\n"
 msgid "stat of %s failed: %s"
-msgstr "%s 시작에 실패함: %s"
+msgstr "%s 통계에 실패함: %s"
 msgid "status\t\tshow status of daemon and queue\n"
 msgstr "상태\t\t데몬 및 대기열 상태 보기\n"
 msgid "stopped"
@@ -2872,4 +2874,4 @@ msgstr "알 수 없음"
 msgid "untitled"
 msgstr "무제"
 msgid "variable-bindings uses indefinite length"
-msgstr "variable-bindings 길이가 무제한입니다"
+msgstr "variable-bindings 길이가 무제한입니다"
index 2116b193009eabdb7029fb6bde1e04db5ed3ea2a..26b051a84c370a02c3c3846901960805dc895523 100644 (file)
@@ -551,11 +551,14 @@ f 0644 root sys $DATADIR/templates/es templates/es/*.tmpl
 #d 0755 root sys $DATADIR/templates/it
 #f 0644 root sys $DATADIR/templates/it templates/it/*.tmpl
 
-#d 0755 root sys $DATADIR/templates/ja
-#f 0644 root sys $DATADIR/templates/ja templates/ja/*.tmpl
+d 0755 root sys $DATADIR/templates/ja
+f 0644 root sys $DATADIR/templates/ja templates/ja/*.tmpl
 
-#d 0755 root sys $DATADIR/templates/pl
-#f 0644 root sys $DATADIR/templates/pl templates/pl/*.tmpl
+d 0755 root sys $DATADIR/templates/pl
+f 0644 root sys $DATADIR/templates/pl templates/pl/*.tmpl
+
+d 0755 root sys $DATADIR/templates/ru
+f 0644 root sys $DATADIR/templates/ru templates/ru/*.tmpl
 
 #d 0755 root sys $DATADIR/templates/sv
 #f 0644 root sys $DATADIR/templates/sv templates/sv/*.tmpl
@@ -660,11 +663,14 @@ f 0644 root sys $DOCDIR/es doc/es/*.html
 #d 0755 root sys $DOCDIR/it
 #f 0644 root sys $DOCDIR/it doc/it/*.html
 
-#d 0755 root sys $DOCDIR/ja
-#f 0644 root sys $DOCDIR/ja doc/ja/*.html
+d 0755 root sys $DOCDIR/ja
+f 0644 root sys $DOCDIR/ja doc/ja/*.html
+
+d 0755 root sys $DOCDIR/pl
+f 0644 root sys $DOCDIR/pl doc/pl/*.html
 
-#d 0755 root sys $DOCDIR/pl
-#f 0644 root sys $DOCDIR/pl doc/pl/*.html
+d 0755 root sys $DOCDIR/ru
+f 0644 root sys $DOCDIR/ru doc/ru/*.html
 
 #d 0755 root sys $DOCDIR/sv
 #f 0644 root sys $DOCDIR/sv doc/sv/*.html
index c76655c6704f9abe8c07167e2cd1d209226041bf..e431b8c5e1b0fc1b6c02797e06038f81bb1ece82 100644 (file)
@@ -244,6 +244,12 @@ rm -rf $RPM_BUILD_ROOT
 /usr/share/doc/cups/*.*
 %dir /usr/share/doc/cups/es
 /usr/share/doc/cups/es/*
+%dir /usr/share/doc/cups/ja
+/usr/share/doc/cups/ja/*
+%dir /usr/share/doc/cups/pl
+/usr/share/doc/cups/pl/*
+%dir /usr/share/doc/cups/ru
+/usr/share/doc/cups/ru/*
 %dir /usr/share/doc/cups/help
 /usr/share/doc/cups/help/accounting.html
 /usr/share/doc/cups/help/cgi.html
index 279262d32f74d9fdba3b6fb0bae120a7eb07525e..8a2a20cc711a63ed0d85be323debf19366082704 100644 (file)
@@ -206,10 +206,12 @@ cupsfilter.o: ../cups/versioning.h ../cups/ppd.h ../cups/array.h
 cupsfilter.o: ../cups/file.h ../cups/language.h ../cups/i18n.h
 cupsfilter.o: ../cups/transcode.h ../cups/string.h ../config.h mime.h
 cupsfilter.o: ../cups/array.h ../cups/ipp.h ../cups/file.h
-cups-deviced.o: util.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
-cups-deviced.o: ../cups/versioning.h ../cups/ppd.h ../cups/array.h
-cups-deviced.o: ../cups/file.h ../cups/language.h ../cups/file.h
-cups-deviced.o: ../cups/string.h ../config.h ../cups/array.h ../cups/dir.h
+cups-deviced.o: util.h ../cups/file-private.h ../cups/http-private.h
+cups-deviced.o: ../config.h ../cups/http.h ../cups/versioning.h ../cups/md5.h
+cups-deviced.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/globals.h
+cups-deviced.o: ../cups/string.h ../cups/cups.h ../cups/i18n.h
+cups-deviced.o: ../cups/transcode.h ../cups/language.h ../cups/array.h
+cups-deviced.o: ../cups/debug.h ../cups/array.h ../cups/dir.h
 cups-lpd.o: ../cups/http-private.h ../config.h ../cups/http.h
 cups-lpd.o: ../cups/versioning.h ../cups/md5.h ../cups/ipp-private.h
 cups-lpd.o: ../cups/ipp.h ../cups/cups.h ../cups/ppd.h ../cups/array.h
@@ -235,12 +237,16 @@ testspeed.o: ../cups/language.h ../cups/debug.h
 testsub.o: ../cups/cups.h ../cups/ipp.h ../cups/http.h ../cups/versioning.h
 testsub.o: ../cups/ppd.h ../cups/array.h ../cups/file.h ../cups/language.h
 testsub.o: ../cups/debug.h ../cups/string.h ../config.h
-util.o: util.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
-util.o: ../cups/versioning.h ../cups/ppd.h ../cups/array.h ../cups/file.h
-util.o: ../cups/language.h ../cups/file.h ../cups/string.h ../config.h
-cups-driverd.o: util.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
-cups-driverd.o: ../cups/versioning.h ../cups/ppd.h ../cups/array.h
-cups-driverd.o: ../cups/file.h ../cups/language.h ../cups/file.h
-cups-driverd.o: ../cups/string.h ../config.h ../cups/dir.h
-cups-driverd.o: ../cups/transcode.h ../cups/ppd-private.h ../cups/cups.h
-cups-driverd.o: ../ppdc/ppdc.h
+util.o: util.h ../cups/file-private.h ../cups/http-private.h ../config.h
+util.o: ../cups/http.h ../cups/versioning.h ../cups/md5.h
+util.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/globals.h
+util.o: ../cups/string.h ../cups/cups.h ../cups/i18n.h ../cups/transcode.h
+util.o: ../cups/language.h ../cups/array.h ../cups/debug.h
+cups-driverd.o: util.h ../cups/file-private.h ../cups/http-private.h
+cups-driverd.o: ../config.h ../cups/http.h ../cups/versioning.h ../cups/md5.h
+cups-driverd.o: ../cups/ipp-private.h ../cups/ipp.h ../cups/globals.h
+cups-driverd.o: ../cups/string.h ../cups/cups.h ../cups/i18n.h
+cups-driverd.o: ../cups/transcode.h ../cups/language.h ../cups/array.h
+cups-driverd.o: ../cups/debug.h ../cups/dir.h ../cups/transcode.h
+cups-driverd.o: ../cups/ppd-private.h ../ppdc/ppdc.h ../cups/string.h
+cups-driverd.o: ../cups/file.h
index 650363401d42302f897c118912426a819a5f523c..d7ece80fac5498c3040617ab0e17497676fa75fb 100644 (file)
@@ -4,7 +4,7 @@
  *   Authentication certificate routines for the Common UNIX
  *   Printing System (CUPS).
  *
- *   Copyright 2007-2008 by Apple Inc.
+ *   Copyright 2007-2009 by Apple Inc.
  *   Copyright 1997-2006 by Easy Software Products.
  *
  *   These coded instructions, statements, and computer programs are the
@@ -54,7 +54,7 @@ cupsdAddCert(int        pid,          /* I - Process ID */
 
 
   cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "cupsdAddCert: adding certificate for pid %d", pid);
+                  "cupsdAddCert: Adding certificate for PID %d", pid);
 
  /*
   * Allocate memory for the certificate...
@@ -84,7 +84,7 @@ cupsdAddCert(int        pid,          /* I - Process ID */
   if ((fd = open(filename, O_WRONLY | O_CREAT | O_EXCL, 0400)) < 0)
   {
     cupsdLogMessage(CUPSD_LOG_ERROR,
-                    "cupsdAddCert: Unable to create certificate file %s - %s",
+                    "Unable to create certificate file %s - %s",
                     filename, strerror(errno));
     free(cert);
     return;
@@ -283,7 +283,7 @@ cupsdDeleteCert(int pid)            /* I - Process ID */
       */
 
       cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                      "cupsdDeleteCert: removing certificate for pid %d", pid);
+                      "cupsdDeleteCert: Removing certificate for PID %d", pid);
 
       DEBUG_printf(("DELETE pid=%d, username=%s, cert=%s\n", cert->pid,
                     cert->username, cert->certificate));
@@ -310,8 +310,7 @@ cupsdDeleteCert(int pid)            /* I - Process ID */
 
       snprintf(filename, sizeof(filename), "%s/certs/%d", StateDir, pid);
       if (unlink(filename))
-       cupsdLogMessage(CUPSD_LOG_ERROR,
-                       "cupsdDeleteCert: Unable to remove %s!", filename);
+       cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to remove %s!", filename);
 
       return;
     }
@@ -342,8 +341,7 @@ cupsdDeleteAllCerts(void)
 
     snprintf(filename, sizeof(filename), "%s/certs/%d", StateDir, cert->pid);
     if (unlink(filename))
-      cupsdLogMessage(CUPSD_LOG_ERROR,
-                      "cupsdDeleteAllCerts: Unable to remove %s!", filename);
+      cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to remove %s!", filename);
 
    /*
     * Free memory...
@@ -368,15 +366,17 @@ cupsdFindCert(const char *certificate)    /* I - Certificate */
   cupsd_cert_t *cert;                  /* Current certificate */
 
 
-  DEBUG_printf(("cupsdFindCert(certificate=%s)\n", certificate));
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdFindCert(certificate=%s)",
+                  certificate);
   for (cert = Certs; cert != NULL; cert = cert->next)
     if (!strcasecmp(certificate, cert->certificate))
     {
-      DEBUG_printf(("    returning %s...\n", cert->username));
+      cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdFindCert: Returning %s...",
+                      cert->username);
       return (cert);
     }
 
-  DEBUG_puts("    certificate not found!");
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdFindCert: Certificate not found!");
 
   return (NULL);
 }
index 758c47196924e4fd8445ce20d2f337777e6b315d..853a9db55660f92a5daf6bc59e67a531c085ccd0 100644 (file)
@@ -137,7 +137,7 @@ cupsdAcceptClient(cupsd_listener_t *lis)/* I - Listener socket */
 
 
   cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "cupsdAcceptClient(lis=%p) %d Clients = %d",
+                  "cupsdAcceptClient(lis=%p(%d)) Clients=%d",
                   lis, lis->fd, cupsArrayCount(Clients));
 
  /*
@@ -300,10 +300,6 @@ cupsdAcceptClient(cupsd_listener_t *lis)/* I - Listener socket */
     * Can't have an unresolved IP address with double-lookups enabled...
     */
 
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "cupsdAcceptClient: Closing connection %d...",
-                    con->http.fd);
-
 #ifdef WIN32
     closesocket(con->http.fd);
 #else
@@ -347,10 +343,6 @@ cupsdAcceptClient(cupsd_listener_t *lis)/* I - Listener socket */
       * with double-lookups enabled...
       */
 
-      cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                      "cupsdAcceptClient: Closing connection %d...",
-                     con->http.fd);
-
 #ifdef WIN32
       closesocket(con->http.fd);
 #else
@@ -375,10 +367,6 @@ cupsdAcceptClient(cupsd_listener_t *lis)/* I - Listener socket */
 
   if (!hosts_access(&wrap_req))
   {
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "cupsdAcceptClient: Closing connection %d...",
-                    con->http.fd);
-
 #ifdef WIN32
     closesocket(con->http.fd);
 #else
@@ -459,15 +447,10 @@ cupsdAcceptClient(cupsd_listener_t *lis)/* I - Listener socket */
 
   cupsArrayAdd(Clients, con);
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "cupsdAcceptClient: %d connected to server on %s:%d",
-                  con->http.fd, con->servername, con->serverport);
-
  /*
-  * Using TCP_NODELAY improves responsiveness, especially on systems
-  * with a slow loopback interface...  Since we write large buffers
-  * when sending print files and requests, there shouldn't be any
-  * performance penalty for this...
+  * Using TCP_NODELAY improves responsiveness, especially on systems with a slow
+  * loopback interface.  Since we write large buffers when sending print files
+  * and requests there shouldn't be any performance penalty for this...
   */
 
   val = 1;
@@ -480,7 +463,7 @@ cupsdAcceptClient(cupsd_listener_t *lis)/* I - Listener socket */
   fcntl(con->http.fd, F_SETFD, fcntl(con->http.fd, F_GETFD) | FD_CLOEXEC);
 
  /*
-  * Add the socket to the select() input mask.
+  * Add the socket to the server select.
   */
 
   cupsdAddSelect(con->http.fd, (cupsd_selfunc_t)cupsdReadClient, NULL, con);
@@ -524,6 +507,9 @@ cupsdCloseAllClients(void)
   cupsd_client_t       *con;           /* Current client */
 
 
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCloseAllClients() Clients=%d",
+                  cupsArrayCount(Clients));
+
   for (con = (cupsd_client_t *)cupsArrayFirst(Clients);
        con;
        con = (cupsd_client_t *)cupsArrayNext(Clients))
@@ -554,7 +540,8 @@ cupsdCloseClient(cupsd_client_t *con)       /* I - Client to close */
 #endif /* HAVE_LIBSSL */
 
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdCloseClient: %d", con->http.fd);
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCloseClient(con=%p(%d))", con,
+                  con->http.fd);
 
  /*
   * Flush pending writes before closing...
@@ -642,9 +629,6 @@ cupsdCloseClient(cupsd_client_t *con)       /* I - Client to close */
     * Stop any CGI process...
     */
 
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "cupsdCloseClient: %d Killing process ID %d...",
-                    con->http.fd, con->pipe_pid);
     cupsdEndProcess(con->pipe_pid, 1);
     con->pipe_pid = 0;
   }
@@ -653,10 +637,6 @@ cupsdCloseClient(cupsd_client_t *con)      /* I - Client to close */
   {
     cupsdRemoveSelect(con->file);
 
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "cupsdCloseClient: %d Closing data file %d.",
-                    con->http.fd, con->file);
-
     close(con->file);
     con->file = -1;
   }
@@ -797,12 +777,21 @@ cupsdReadClient(cupsd_client_t *con)      /* I - Client to read from */
   status = HTTP_CONTINUE;
 
   cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "cupsdReadClient: %d, used=%d, file=%d state=%d",
-                  con->http.fd, con->http.used, con->file, con->http.state);
+                 "cupsdReadClient(con=%p(%d)) "
+                 "con->http.error=%d "
+                 "con->http.used=%d, "
+                 "con->http.state=%d "
+                 "con->data_encoding=HTTP_ENCODE_%s, "
+                 "con->data_remaining=" CUPS_LLFMT ", "
+                 "con->file=%d",
+                 con, con->http.fd, con->http.error, con->http.used,
+                 con->http.state,
+                 con->http.data_encoding == HTTP_ENCODE_CHUNKED ?
+                     "CHUNKED" : "LENGTH",
+                 CUPS_LLCAST con->http.data_remaining, con->file);
 
   if (con->http.error)
   {
-    cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdReadClient: http error seen...");
     cupsdCloseClient(con);
     return;
   }
@@ -824,8 +813,8 @@ cupsdReadClient(cupsd_client_t *con)        /* I - Client to read from */
       */
 
       cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                      "cupsdReadClient: Saw first byte %02X, auto-negotiating SSL/TLS session...",
-                      buf[0] & 255);
+                      "cupsdReadClient: Saw first byte %02X, auto-negotiating "
+                     "SSL/TLS session...", buf[0] & 255);
 
       if (!encrypt_client(con))
         cupsdCloseClient(con);
@@ -844,8 +833,6 @@ cupsdReadClient(cupsd_client_t *con)        /* I - Client to read from */
 
         if (httpGets(line, sizeof(line) - 1, HTTP(con)) == NULL)
        {
-         cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                         "cupsdReadClient: httpGets returned EOF...");
          cupsdCloseClient(con);
          return;
        }
@@ -1116,10 +1103,6 @@ cupsdReadClient(cupsd_client_t *con)     /* I - Client to read from */
         snprintf(locale, sizeof(locale), "%s.%s",
                 con->http.fields[HTTP_FIELD_ACCEPT_LANGUAGE], DefaultCharset);
 
-      cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                      "cupsdReadClient: %d Browser asked for language \"%s\"...",
-                      con->http.fd, locale);
-
       con->language = cupsLangGet(locale);
     }
     else
@@ -1297,9 +1280,6 @@ cupsdReadClient(cupsd_client_t *con)      /* I - Client to read from */
 
       if ((status = cupsdIsAuthorized(con, NULL)) != HTTP_OK)
       {
-        cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                       "cupsdReadClient: Unauthorized request for %s...",
-                       con->uri);
        cupsdSendError(con, status, CUPSD_AUTH_NONE);
        cupsdCloseClient(con);
        return;
@@ -1540,10 +1520,6 @@ cupsdReadClient(cupsd_client_t *con)     /* I - Client to read from */
            * so check the length against any limits that are set...
            */
 
-            cupsdLogMessage(CUPSD_LOG_DEBUG2, "POST %s", con->uri);
-           cupsdLogMessage(CUPSD_LOG_DEBUG2, "CONTENT_TYPE = %s",
-                           con->http.fields[HTTP_FIELD_CONTENT_TYPE]);
-
             if (con->http.fields[HTTP_FIELD_CONTENT_LENGTH][0] &&
                MaxRequestSize > 0 &&
                con->http.data_remaining > MaxRequestSize)
@@ -1645,12 +1621,6 @@ cupsdReadClient(cupsd_client_t *con)     /* I - Client to read from */
                  cupsdSetString(&con->options, NULL);
              }
 
-              cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                             "cupsdReadClient: %d command=\"%s\", "
-                             "options = \"%s\"",
-                             con->http.fd, con->command,
-                             con->options ? con->options : "(null)");
-
              if (con->http.version <= HTTP_1_0)
                con->http.keep_alive = HTTP_KEEPALIVE_OFF;
            }
@@ -1720,10 +1690,6 @@ cupsdReadClient(cupsd_client_t *con)     /* I - Client to read from */
            * so check the length against any limits that are set...
            */
 
-            cupsdLogMessage(CUPSD_LOG_DEBUG2, "PUT %s", con->uri);
-           cupsdLogMessage(CUPSD_LOG_DEBUG2, "CONTENT_TYPE = %s",
-                           con->http.fields[HTTP_FIELD_CONTENT_TYPE]);
-
             if (con->http.fields[HTTP_FIELD_CONTENT_LENGTH][0] &&
                MaxRequestSize > 0 &&
                con->http.data_remaining > MaxRequestSize)
@@ -1776,10 +1742,6 @@ cupsdReadClient(cupsd_client_t *con)     /* I - Client to read from */
              }
            }
 
-            cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                           "cupsdReadClient: %d REQUEST %s=%d", con->http.fd,
-                           con->filename, con->file);
-
            fchmod(con->file, 0640);
            fchown(con->file, RunUser, Group);
            fcntl(con->file, F_SETFD, fcntl(con->file, F_GETFD) | FD_CLOEXEC);
@@ -1955,14 +1917,6 @@ cupsdReadClient(cupsd_client_t *con)     /* I - Client to read from */
   switch (con->http.state)
   {
     case HTTP_PUT_RECV :
-        cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                       "cupsdReadClient: %d con->data_encoding=HTTP_ENCODE_%s, "
-                       "con->data_remaining=" CUPS_LLFMT ", con->file=%d",
-                       con->http.fd,
-                       con->http.data_encoding == HTTP_ENCODE_CHUNKED ?
-                           "CHUNKED" : "LENGTH",
-                       CUPS_LLCAST con->http.data_remaining, con->file);
-
         do
        {
           if ((bytes = httpRead2(HTTP(con), line, sizeof(line))) < 0)
@@ -1974,20 +1928,12 @@ cupsdReadClient(cupsd_client_t *con)    /* I - Client to read from */
          {
            con->bytes += bytes;
 
-            cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                           "cupsdReadClient: %d writing %d bytes to %d",
-                           con->http.fd, bytes, con->file);
-
             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));
 
-             cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                             "cupsdReadClient: Closing data file %d...",
-                             con->file);
-
              close(con->file);
              con->file = -1;
              unlink(con->filename);
@@ -2011,12 +1957,6 @@ cupsdReadClient(cupsd_client_t *con)     /* I - Client to read from */
 
          fstat(con->file, &filestats);
 
-          cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                         "cupsdReadClient: %d Closing data file %d, size="
-                         CUPS_LLFMT ".",
-                          con->http.fd, con->file,
-                         CUPS_LLCAST filestats.st_size);
-
          close(con->file);
          con->file = -1;
 
@@ -2027,9 +1967,6 @@ cupsdReadClient(cupsd_client_t *con)      /* I - Client to read from */
            * Request is too big; remove it and send an error...
            */
 
-            cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                           "cupsdReadClient: %d Removing temp file %s",
-                           con->http.fd, con->filename);
            unlink(con->filename);
            cupsdClearString(&con->filename);
 
@@ -2059,14 +1996,6 @@ cupsdReadClient(cupsd_client_t *con)     /* I - Client to read from */
         break;
 
     case HTTP_POST_RECV :
-        cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                       "cupsdReadClient: %d con->data_encoding=HTTP_ENCODE_"
-                       "%s, con->data_remaining=" CUPS_LLFMT ", con->file=%d",
-                       con->http.fd,
-                       con->http.data_encoding == HTTP_ENCODE_CHUNKED ?
-                           "CHUNKED" : "LENGTH",
-                       CUPS_LLCAST con->http.data_remaining, con->file);
-
         do
        {
           if (con->request)
@@ -2122,9 +2051,6 @@ cupsdReadClient(cupsd_client_t *con)      /* I - Client to read from */
              }
            }
 
-            cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdReadClient: %d REQUEST %s=%d", con->http.fd,
-                           con->filename, con->file);
-
            fchmod(con->file, 0640);
            fchown(con->file, RunUser, Group);
             fcntl(con->file, F_SETFD, fcntl(con->file, F_GETFD) | FD_CLOEXEC);
@@ -2141,20 +2067,12 @@ cupsdReadClient(cupsd_client_t *con)    /* I - Client to read from */
            {
              con->bytes += bytes;
 
-              cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                             "cupsdReadClient: %d writing %d bytes to %d",
-                             con->http.fd, bytes, con->file);
-
               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));
 
-               cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                               "cupsdReadClient: Closing file %d...",
-                               con->file);
-
                close(con->file);
                con->file = -1;
                unlink(con->filename);
@@ -2184,12 +2102,6 @@ cupsdReadClient(cupsd_client_t *con)     /* I - Client to read from */
          {
            fstat(con->file, &filestats);
 
-            cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                           "cupsdReadClient: %d Closing data file %d, "
-                           "size=" CUPS_LLFMT ".",
-                            con->http.fd, con->file,
-                           CUPS_LLCAST filestats.st_size);
-
            close(con->file);
            con->file = -1;
 
@@ -2200,9 +2112,6 @@ cupsdReadClient(cupsd_client_t *con)      /* I - Client to read from */
              * Request is too big; remove it and send an error...
              */
 
-              cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                             "cupsdReadClient: %d Removing temp file %s",
-                             con->http.fd, con->filename);
              unlink(con->filename);
              cupsdClearString(&con->filename);
 
@@ -2244,9 +2153,6 @@ cupsdReadClient(cupsd_client_t *con)      /* I - Client to read from */
 
            if (con->filename)
            {
-             cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                             "cupsdReadClient: %d Removing temp file %s",
-                             con->http.fd, con->filename);
              unlink(con->filename);
              cupsdClearString(&con->filename);
            }
@@ -2341,6 +2247,10 @@ cupsdSendError(cupsd_client_t *con,      /* I - Connection */
                http_status_t  code,    /* I - Error code */
               int            auth_type)/* I - Authentication type */
 {
+  cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                  "cupsdSendError(con=%p(%d), code=%d, auth_type=%d", con,
+                 con->http.fd, code, auth_type);
+
 #ifdef HAVE_SSL
  /*
   * Force client to upgrade for authentication if that is how the
@@ -2352,8 +2262,6 @@ cupsdSendError(cupsd_client_t *con,       /* I - Connection */
       strcasecmp(con->http.hostname, "localhost") &&
       !con->http.tls)
   {
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "cupsdSendError: Encryption before authentication!");
     code = HTTP_UPGRADE_REQUIRED;
   }
 #endif /* HAVE_SSL */
@@ -2364,9 +2272,6 @@ cupsdSendError(cupsd_client_t *con,       /* I - Connection */
 
   cupsdLogRequest(con, code);
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG, "cupsdSendError: %d code=%d (%s)",
-                  con->http.fd, code, httpStatus(code));
-
  /*
   * To work around bugs in some proxies, don't use Keep-Alive for some
   * error messages...
@@ -2731,14 +2636,12 @@ cupsdWriteClient(cupsd_client_t *con)   /* I - Client connection */
   ipp_state_t  ipp_state;              /* IPP state value */
 
 
-#ifdef DEBUG
   cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "cupsdWriteClient(con=%p) %d response=%p(%d), file=%d "
+                  "cupsdWriteClient(con=%p(%d)) response=%p(%d), file=%d "
                  "pipe_pid=%d state=%d",
                   con, con->http.fd, con->response,
                  con->response ? con->response->state : -1,
                  con->file, con->pipe_pid, con->http.state);
-#endif /* DEBUG */
 
   if (con->http.state != HTTP_GET_SEND &&
       con->http.state != HTTP_POST_SEND)
@@ -2773,10 +2676,6 @@ cupsdWriteClient(cupsd_client_t *con)    /* I - Client connection */
   }
   else if ((bytes = read(con->file, buf, sizeof(buf) - 1)) > 0)
   {
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "cupsdWriteClient: Read %d bytes from file %d...",
-                    bytes, con->file);
-
     if (con->pipe_pid && !con->got_fields)
     {
      /*
@@ -2834,9 +2733,6 @@ cupsdWriteClient(cupsd_client_t *con)     /* I - Client connection */
          if (strncasecmp(buf, "Status:", 7))
            httpPrintf(HTTP(con), "%s\r\n", buf);
 
-         cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdWriteClient: %d %s",
-                         con->http.fd, buf);
-
          /*
          * Update buffer...
          */
@@ -2874,10 +2770,6 @@ cupsdWriteClient(cupsd_client_t *con)    /* I - Client connection */
          con->field_col ++;
       }
 
-      cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                      "cupsdWriteClient: %d bytes=%d, got_fields=%d",
-                      con->http.fd, bytes, con->got_fields);
-
       if (bytes > 0 && !con->got_fields)
       {
        /*
@@ -2900,10 +2792,6 @@ cupsdWriteClient(cupsd_client_t *con)    /* I - Client connection */
     {
       if (httpWrite2(HTTP(con), buf, bytes) < 0)
       {
-       cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                       "cupsdWriteClient: %d Write of %d bytes failed!",
-                       con->http.fd, bytes);
-
        cupsdCloseClient(con);
        return;
       }
@@ -2920,9 +2808,6 @@ cupsdWriteClient(cupsd_client_t *con)     /* I - Client connection */
 
   if (bytes <= 0)
   {
-    cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdWriteClient: %d bytes < 0",
-                    con->http.fd);
-
     cupsdLogRequest(con, HTTP_OK);
 
     httpFlushWrite(HTTP(con));
@@ -2947,10 +2832,6 @@ cupsdWriteClient(cupsd_client_t *con)    /* I - Client connection */
       if (con->pipe_pid)
        cupsdEndProcess(con->pipe_pid, 0);
 
-      cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                      "cupsdWriteClient: %d Closing data file %d.",
-                      con->http.fd, con->file);
-
       close(con->file);
       con->file     = -1;
       con->pipe_pid = 0;
@@ -2958,9 +2839,6 @@ cupsdWriteClient(cupsd_client_t *con)     /* I - Client connection */
 
     if (con->filename)
     {
-      cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                      "cupsdWriteClient: %d Removing temp file %s",
-                      con->http.fd, con->filename);
       unlink(con->filename);
       cupsdClearString(&con->filename);
     }
@@ -3014,8 +2892,10 @@ check_if_modified(
     return (1);
 
   cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "check_if_modified: %d If-Modified-Since=\"%s\"",
-                  con->http.fd, ptr);
+                  "check_if_modified(con=%p(%d), "
+                 "filestats=%p(" CUPS_LLFMT ", %d)) If-Modified-Since=\"%s\"",
+                  con, con->http.fd, filestats, CUPS_LLCAST filestats->st_size,
+                 (int)filestats->st_mtime, ptr);
 
   while (*ptr != '\0')
   {
@@ -3040,13 +2920,6 @@ check_if_modified(
       ptr ++;
   }
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "check_if_modified: %d sizes=" CUPS_LLFMT ","
-                 CUPS_LLFMT " dates=%d,%d",
-                  con->http.fd, CUPS_LLCAST size,
-                 CUPS_LLCAST filestats->st_size, (int)date,
-                 (int)filestats->st_mtime);
-
   return ((size != filestats->st_size && size != 0) ||
           (date < filestats->st_mtime && date != 0) ||
          (size == 0 && date == 0));
@@ -3120,6 +2993,9 @@ encrypt_client(cupsd_client_t *con)       /* I - Client to encrypt */
   unsigned long        error;                  /* Error code */
 
 
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "encrypt_client(con=%p(%d))", con,
+                  con->http.fd);
+
  /*
   * Verify that we have a certificate...
   */
@@ -3154,22 +3030,19 @@ encrypt_client(cupsd_client_t *con)     /* I - Client to encrypt */
 
   if (SSL_accept(conn) != 1)
   {
-    cupsdLogMessage(CUPSD_LOG_ERROR,
-                    "encrypt_client: Unable to encrypt connection from %s!",
+    cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to encrypt connection from %s!",
                     con->http.hostname);
 
     while ((error = ERR_get_error()) != 0)
-      cupsdLogMessage(CUPSD_LOG_ERROR, "encrypt_client: %s",
-                      ERR_error_string(error, NULL));
+      cupsdLogMessage(CUPSD_LOG_ERROR, "%s", ERR_error_string(error, NULL));
 
     SSL_CTX_free(context);
     SSL_free(conn);
     return (0);
   }
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG,
-                  "encrypt_client: %d Connection from %s now encrypted.",
-                  con->http.fd, con->http.hostname);
+  cupsdLogMessage(CUPSD_LOG_DEBUG, "Connection from %s now encrypted.",
+                  con->http.hostname);
 
   con->http.tls = conn;
   return (1);
@@ -3181,6 +3054,9 @@ encrypt_client(cupsd_client_t *con)       /* I - Client to encrypt */
                                        /* TLS credentials */
 
 
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "encrypt_client(con=%p(%d))", con,
+                  con->http.fd);
+
  /*
   * Verify that we have a certificate...
   */
@@ -3209,9 +3085,8 @@ encrypt_client(cupsd_client_t *con)       /* I - Client to encrypt */
   if (credentials == NULL)
   {
     cupsdLogMessage(CUPSD_LOG_ERROR,
-                    "encrypt_client: Unable to encrypt connection from %s!",
-                    con->http.hostname);
-    cupsdLogMessage(CUPSD_LOG_ERROR, "encrypt_client: %s", strerror(errno));
+                    "Unable to encrypt connection from %s - %s",
+                    con->http.hostname, strerror(errno));
 
     free(conn);
     return (0);
@@ -3233,10 +3108,8 @@ encrypt_client(cupsd_client_t *con)      /* I - Client to encrypt */
   if (error != GNUTLS_E_SUCCESS)
   {
     cupsdLogMessage(CUPSD_LOG_ERROR,
-                    "encrypt_client: Unable to encrypt connection from %s!",
-                    con->http.hostname);
-    cupsdLogMessage(CUPSD_LOG_ERROR, "encrypt_client: %s",
-                    gnutls_strerror(error));
+                    "Unable to encrypt connection from %s - %s",
+                    con->http.hostname, gnutls_strerror(error));
 
     gnutls_deinit(conn->session);
     gnutls_certificate_free_credentials(*credentials);
@@ -3245,9 +3118,8 @@ encrypt_client(cupsd_client_t *con)       /* I - Client to encrypt */
     return (0);
   }
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG,
-                  "encrypt_client: %d Connection from %s now encrypted.",
-                  con->http.fd, con->http.hostname);
+  cupsdLogMessage(CUPSD_LOG_DEBUG, "Connection from %s now encrypted.",
+                  con->http.hostname);
 
   conn->credentials = credentials;
   con->http.tls = conn;
@@ -3258,6 +3130,9 @@ encrypt_client(cupsd_client_t *con)       /* I - Client to encrypt */
   http_tls_t   *conn;                  /* CDSA connection information */
 
 
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "encrypt_client(con=%p(%d))", con,
+                  con->http.fd);
+
   if ((conn = (http_tls_t *)malloc(sizeof(http_tls_t))) == NULL)
     return (0);
 
@@ -3278,8 +3153,8 @@ encrypt_client(cupsd_client_t *con)       /* I - Client to encrypt */
   if (!conn->certsArray)
   {
     cupsdLogMessage(CUPSD_LOG_ERROR,
-                   "encrypt_client: Could not find signing key in keychain "
-                   "\"%s\"", ServerCertificate);
+                   "Could not find signing key in keychain \"%s\"",
+                   ServerCertificate);
     error = errSSLBadCert; /* errSSLBadConfiguration is a better choice, but not available on 10.2.x */
   }
 
@@ -3317,11 +3192,8 @@ encrypt_client(cupsd_client_t *con)      /* I - Client to encrypt */
   if (error)
   {
     cupsdLogMessage(CUPSD_LOG_ERROR,
-                    "encrypt_client: Unable to encrypt connection from %s!",
-                    con->http.hostname);
-
-    cupsdLogMessage(CUPSD_LOG_ERROR, "encrypt_client: %s (%d)",
-                    cssmErrorString(error), (int)error);
+                    "Unable to encrypt connection from %s - %s (%d)",
+                    con->http.hostname, cssmErrorString(error), (int)error);
 
     con->http.error  = error;
     con->http.status = HTTP_ERROR;
@@ -3337,9 +3209,8 @@ encrypt_client(cupsd_client_t *con)       /* I - Client to encrypt */
     return (0);
   }
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG,
-                  "encrypt_client: %d Connection from %s now encrypted.",
-                  con->http.fd, con->http.hostname);
+  cupsdLogMessage(CUPSD_LOG_DEBUG, "Connection from %s now encrypted.",
+                  con->http.hostname);
 
   con->http.tls = conn;
   return (1);
@@ -3367,8 +3238,8 @@ get_cdsa_certificate(cupsd_client_t *con) /* I - Client connection */
 
   if ((err = SecKeychainOpen(ServerCertificate, &keychain)))
   {
-    cupsdLogMessage(CUPSD_LOG_ERROR, "Cannot open keychain \"%s\", %s",
-                   ServerCertificate, cssmErrorString(err));
+    cupsdLogMessage(CUPSD_LOG_ERROR, "Cannot open keychain \"%s\" - %s (%d)",
+                   ServerCertificate, cssmErrorString(err), (int)err);
     return (NULL);
   }
 
@@ -3395,7 +3266,7 @@ get_cdsa_certificate(cupsd_client_t *con) /* I - Client connection */
 
   if (SecPolicySearchCopyNext(policy_search, &policy))
   {
-    cupsdLogMessage(CUPSD_LOG_ERROR, 
+    cupsdLogMessage(CUPSD_LOG_ERROR,
                    "Cannot find a policy to use for searching");
     CFRelease(keychain);
     CFRelease(policy_search);
@@ -3412,7 +3283,7 @@ get_cdsa_certificate(cupsd_client_t *con) /* I - Client connection */
 
   if (SecPolicySetValue(policy, &options))
   {
-    cupsdLogMessage(CUPSD_LOG_ERROR, 
+    cupsdLogMessage(CUPSD_LOG_ERROR,
                    "Cannot set policy value to use for searching");
     CFRelease(keychain);
     CFRelease(policy_search);
@@ -3431,15 +3302,15 @@ get_cdsa_certificate(cupsd_client_t *con)       /* I - Client connection */
 
   if (err)
     cupsdLogMessage(CUPSD_LOG_DEBUG,
-                   "Cannot create keychain search reference: %s", 
-                   cssmErrorString(err));
+                   "Cannot create keychain search reference: %s (%d)", 
+                   cssmErrorString(err), (int)err);
   else
   {
     if ((err = SecIdentitySearchCopyNext(search, &identity)))
     {
       cupsdLogMessage(CUPSD_LOG_DEBUG,
-                       "Cannot find signing key in keychain \"%s\", error %d",
-                       ServerCertificate, (int)err);
+                     "Cannot find signing key in keychain \"%s\": %s (%d)",
+                     ServerCertificate, cssmErrorString(err), (int)err);
     }
     else
     {
@@ -3643,9 +3514,10 @@ get_file(cupsd_client_t *con,            /* I  - Client connection */
     while (status && language[0]);
   }
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "get_file: %d filename=%s size=%d",
-                  con->http.fd, filename,
-                 status ? -1 : (int)filestats->st_size);
+  cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                  "get_file(con=%p(%d), filestats=%p, filename=%p, len=%d) = "
+                 "%s", con, con->http.fd, filestats, filename, len,
+                 status ? "(null)" : filename);
 
   if (!status)
     con->http.data_remaining = (int)filestats->st_size;
@@ -3833,11 +3705,6 @@ is_cgi(cupsd_client_t *con,              /* I - Client connection */
   const char   *options;               /* Options on URL */
 
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "is_cgi(con=%p, filename=\"%s\", filestats=%p, type=%s/%s)",
-                 con, filename, filestats, type ? type->super : "unknown",
-                 type ? type->type : "unknown");
-
  /*
   * Get the options, if any...
   */
@@ -3854,7 +3721,11 @@ is_cgi(cupsd_client_t *con,              /* I - Client connection */
 
   if (!type || strcasecmp(type->super, "application"))
   {
-    cupsdLogMessage(CUPSD_LOG_DEBUG2, "is_cgi: Returning 0...");
+    cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                   "is_cgi(con=%p(%d), filename=\"%s\", filestats=%p, "
+                   "type=%s/%s) = 0", con, con->http.fd, filename, filestats,
+                   type ? type->super : "unknown",
+                   type ? type->type : "unknown");
     return (0);
   }
 
@@ -3871,9 +3742,10 @@ is_cgi(cupsd_client_t *con,              /* I - Client connection */
       cupsdSetStringf(&con->options, " %s", options);
 
     cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "is_cgi: Returning 1 with command=\"%s\" and options=\"%s\"",
-                    con->command, con->options);
-
+                   "is_cgi(con=%p(%d), filename=\"%s\", filestats=%p, "
+                   "type=%s/%s) = 1", con, con->http.fd, filename, filestats,
+                   type ? type->super : "unknown",
+                   type ? type->type : "unknown");
     return (1);
   }
 #ifdef HAVE_JAVA
@@ -3891,9 +3763,10 @@ is_cgi(cupsd_client_t *con,              /* I - Client connection */
       cupsdSetStringf(&con->options, " %s", filename);
 
     cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "is_cgi: Returning 1 with command=\"%s\" and options=\"%s\"",
-                    con->command, con->options);
-
+                   "is_cgi(con=%p(%d), filename=\"%s\", filestats=%p, "
+                   "type=%s/%s) = 1", con, con->http.fd, filename, filestats,
+                   type ? type->super : "unknown",
+                   type ? type->type : "unknown");
     return (1);
   }
 #endif /* HAVE_JAVA */
@@ -3912,9 +3785,10 @@ is_cgi(cupsd_client_t *con,              /* I - Client connection */
       cupsdSetStringf(&con->options, " %s", filename);
 
     cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "is_cgi: Returning 1 with command=\"%s\" and options=\"%s\"",
-                    con->command, con->options);
-
+                   "is_cgi(con=%p(%d), filename=\"%s\", filestats=%p, "
+                   "type=%s/%s) = 1", con, con->http.fd, filename, filestats,
+                   type ? type->super : "unknown",
+                   type ? type->type : "unknown");
     return (1);
   }
 #endif /* HAVE_PERL */
@@ -3933,9 +3807,10 @@ is_cgi(cupsd_client_t *con,              /* I - Client connection */
       cupsdSetStringf(&con->options, " %s", filename);
 
     cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "is_cgi: Returning 1 with command=\"%s\" and options=\"%s\"",
-                    con->command, con->options);
-
+                   "is_cgi(con=%p(%d), filename=\"%s\", filestats=%p, "
+                   "type=%s/%s) = 1", con, con->http.fd, filename, filestats,
+                   type ? type->super : "unknown",
+                   type ? type->type : "unknown");
     return (1);
   }
 #endif /* HAVE_PHP */
@@ -3954,15 +3829,19 @@ is_cgi(cupsd_client_t *con,             /* I - Client connection */
       cupsdSetStringf(&con->options, " %s", filename);
 
     cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "is_cgi: Returning 1 with command=\"%s\" and options=\"%s\"",
-                    con->command, con->options);
-
+                   "is_cgi(con=%p(%d), filename=\"%s\", filestats=%p, "
+                   "type=%s/%s) = 1", con, con->http.fd, filename, filestats,
+                   type ? type->super : "unknown",
+                   type ? type->type : "unknown");
     return (1);
   }
 #endif /* HAVE_PYTHON */
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "is_cgi: Returning 0...");
-
+  cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                 "is_cgi(con=%p(%d), filename=\"%s\", filestats=%p, "
+                 "type=%s/%s) = 0", con, con->http.fd, filename, filestats,
+                 type ? type->super : "unknown",
+                 type ? type->type : "unknown");
   return (0);
 }
 
@@ -4090,7 +3969,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,
+    if (!cupsdStartProcess(command, argv, envp, -1, -1, -1, -1, -1, 1, NULL, 0,
                            &pid))
     {
       unlink(seedfile);
@@ -4104,7 +3983,7 @@ make_certificate(cupsd_client_t *con)     /* I - Client connection */
        break;
       }
 
-    cupsdFinishProcess(pid, command, sizeof(command));
+    cupsdFinishProcess(pid, command, sizeof(command), NULL);
 
    /*
     * Remove the seed file, as it is no longer needed...
@@ -4169,7 +4048,7 @@ make_certificate(cupsd_client_t *con)     /* I - Client connection */
   infofd = open(infofile, O_RDONLY);
 
   if (!cupsdStartProcess(command, argv, envp, infofd, -1, -1, -1, -1, 1, NULL,
-                         &pid))
+                         0, &pid))
   {
     close(infofd);
     unlink(infofile);
@@ -4186,7 +4065,7 @@ make_certificate(cupsd_client_t *con)     /* I - Client connection */
       break;
     }
 
-  cupsdFinishProcess(pid, command, sizeof(command));
+  cupsdFinishProcess(pid, command, sizeof(command), NULL);
 
   if (status)
   {
@@ -4403,7 +4282,7 @@ make_certificate(cupsd_client_t *con)     /* I - Client connection */
   infofd = open(infofile, O_RDONLY);
 
   if (!cupsdStartProcess(command, argv, envp, infofd, -1, -1, -1, -1, 1, NULL,
-                         &pid))
+                         0, &pid))
   {
     close(infofd);
     unlink(infofile);
@@ -4420,7 +4299,7 @@ make_certificate(cupsd_client_t *con)     /* I - Client connection */
       break;
     }
 
-  cupsdFinishProcess(pid, command, sizeof(command));
+  cupsdFinishProcess(pid, command, sizeof(command), NULL);
 
   if (status)
   {
@@ -4517,8 +4396,10 @@ pipe_command(cupsd_client_t *con,        /* I - Client connection */
   */
 
   cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "pipe_command: command=\"%s\", options=\"%s\"",
-                  command, options ? options : "(null)");
+                  "pipe_command(con=%p(%d), infile=%d, outfile=%p, "
+                 "command=\"%s\", options=\"%s\", root=%d)",
+                  con, con->http.fd, infile, outfile, command,
+                 options ? options : "(null)", root);
 
   argv[0] = command;
 
@@ -4757,7 +4638,8 @@ pipe_command(cupsd_client_t *con, /* I - Client connection */
        {
          KerberosContext = NULL;
 
-         cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to initialize Kerberos context");
+         cupsdLogMessage(CUPSD_LOG_ERROR,
+                         "Unable to initialize Kerberos context");
        }
       }
 
@@ -4801,8 +4683,8 @@ pipe_command(cupsd_client_t *con, /* I - Client connection */
                                             principal)))
        {
          cupsdLogMessage(CUPSD_LOG_ERROR,
-                         "Unable to initialize credentials cache (%d/%s)", error,
-                         strerror(errno));
+                         "Unable to initialize credentials cache (%d/%s)",
+                         error, strerror(errno));
          krb5_cc_destroy(KerberosContext, ccache);
          krb5_free_principal(KerberosContext, principal);
          ccache = NULL;
@@ -4943,7 +4825,7 @@ pipe_command(cupsd_client_t *con, /* I - Client connection */
   */
 
   if (cupsdStartProcess(command, argv, envp, infile, fds[1], CGIPipes[1],
-                       -1, -1, root, DefaultProfile, &pid) < 0)
+                       -1, -1, root, DefaultProfile, 0, &pid) < 0)
   {
    /*
     * Error - can't fork!
@@ -4992,8 +4874,10 @@ write_file(cupsd_client_t *con,          /* I - Client connection */
 {
   con->file = open(filename, O_RDONLY);
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "write_file: %d file=%d", con->http.fd,
-                  con->file);
+  cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                  "write_file(con=%p(%d), code=%d, filename=\"%s\" (%d), "
+                 "type=\"%s\", filestats=%p)", con, con->http.fd,
+                 code, filename, con->file, type ? type : "(null)", filestats);
 
   if (con->file < 0)
     return (0);
@@ -5039,8 +4923,9 @@ write_file(cupsd_client_t *con,           /* I - Client connection */
 static void
 write_pipe(cupsd_client_t *con)                /* I - Client connection */
 {
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "write_pipe: CGI output on fd %d...",
-                  con->file);
+  cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                  "write_pipe(con=%p(%d)) CGI output on fd %d",
+                  con, con->http.fd, con->file);
 
   con->file_ready = 1;
 
index 912109f1b985e9b7607ab0e19785438c49aa9bf9..547a032d0680f10da5aa5c5439631adbb51587a4 100644 (file)
@@ -3,7 +3,7 @@
  *
  *   Device scanning mini-daemon for the Common UNIX Printing System (CUPS).
  *
- *   Copyright 2007-2008 by Apple Inc.
+ *   Copyright 2007-2009 by Apple Inc.
  *   Copyright 1997-2006 by Easy Software Products.
  *
  *   These coded instructions, statements, and computer programs are the
@@ -313,11 +313,22 @@ main(int  argc,                           /* I - Number of command-line args */
     {
       for (i = 0; i < num_backends; i ++)
         if (backend_fds[i].revents && backends[i].pipe)
-         if (get_device(backends + i))
+       {
+         cups_file_t *bpipe = backends[i].pipe;
+                                       /* Copy of pipe for backend... */
+
+         do
          {
-           backend_fds[i].fd     = 0;
-           backend_fds[i].events = 0;
+           if (get_device(backends + i))
+           {
+             backend_fds[i].fd     = 0;
+             backend_fds[i].events = 0;
+             break;
+           }
          }
+         while (bpipe->ptr &&
+                memchr(bpipe->ptr, '\n', bpipe->end - bpipe->ptr));
+        }
     }
 
    /*
index 6bab44e0f4d1c85ee90b003593817fa9ba225333..e9d8df1f079e23930803ce464e02cf9a59acf971 100644 (file)
@@ -3,7 +3,7 @@
  *
  *   Main header file for the Common UNIX Printing System (CUPS) scheduler.
  *
- *   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
@@ -217,11 +217,13 @@ __attribute__ ((__format__ (__printf__, 2, 3)))
 extern void    *cupsdCreateProfile(int job_id);
 extern void    cupsdDestroyProfile(void *profile);
 extern int     cupsdEndProcess(int pid, int force);
-extern const char *cupsdFinishProcess(int pid, char *name, int namelen);
+extern const char *cupsdFinishProcess(int pid, char *name, int namelen,
+                                     int *job_id);
 extern int     cupsdStartProcess(const char *command, char *argv[],
                                  char *envp[], int infd, int outfd,
                                  int errfd, int backfd, int sidefd,
-                                 int root, void *profile, int *pid);
+                                 int root, void *profile, int job_id,
+                                 int *pid);
 
 extern int     cupsdAddSelect(int fd, cupsd_selfunc_t read_cb,
                               cupsd_selfunc_t write_cb, void *data);
index f41fb451b820c9730c06ae2428b04f5d8bc6f656..dfa996a86c59e58a4a7eb019b35220252d8ceba7 100644 (file)
@@ -1748,7 +1748,7 @@ cupsdStartPolling(void)
     argv[1] = pollp->hostname;
 
     if (cupsdStartProcess(polld, argv, envp, -1, -1, statusfds[1], -1, -1,
-                          0, DefaultProfile, &(pollp->pid)) < 0)
+                          0, DefaultProfile, 0, &(pollp->pid)) < 0)
     {
       cupsdLogMessage(CUPSD_LOG_ERROR,
                       "cupsdStartPolling: Unable to fork polling daemon - %s",
@@ -5273,7 +5273,7 @@ update_lpd(int onoff)                     /* - 1 = turn on, 0 = turn off */
     argv[4] = NULL;
 
     cupsdStartProcess("/bin/launchctl", argv, envp, -1, -1, -1, -1, -1, 1,
-                      NULL, &pid);
+                      NULL, 0, &pid);
   }
 #endif /* __APPLE__ */
   else
index 82e7a7eca4d6e34b970930247501fae5af6d2983..3fc1f33b0c81f53538faeef6d2c592deb69a709d 100644 (file)
@@ -1216,23 +1216,14 @@ add_class(cupsd_client_t  *con,         /* I - Client connection */
 
   if (need_restart_job && pclass->job)
   {
-    cupsd_job_t *job;
-
    /*
-    * Stop the current job and then restart it below...
+    * Reset the current job to a "pending" status...
     */
 
-    job = (cupsd_job_t *)pclass->job;
-
-    cupsdStopJob(job, 1);
-
-    job->state->values[0].integer = IPP_JOB_PENDING;
-    job->state_value              = IPP_JOB_PENDING;
+    cupsdSetJobState(pclass->job, IPP_JOB_PENDING, CUPSD_JOB_FORCE,
+                     "Job restarted because the class was modified.");
   }
 
-  if (need_restart_job)
-    cupsdCheckJobs();
-
   cupsdMarkDirty(CUPSD_DIRTY_PRINTCAP);
 
   if (modify)
@@ -1299,7 +1290,8 @@ add_file(cupsd_client_t *con,             /* I - Connection to client */
 
   if (!compressions || !filetypes)
   {
-    cupsdCancelJob(job, 1, IPP_JOB_ABORTED);
+    cupsdSetJobState(job, IPP_JOB_ABORTED, CUPSD_JOB_PURGE,
+                     "Job aborted because the scheduler ran out of memory.");
 
     if (con)
       send_ipp_status(con, IPP_INTERNAL_ERROR,
@@ -1738,7 +1730,7 @@ add_job(cupsd_client_t  *con,             /* I - Client connection */
     * Hold job until specified time...
     */
 
-    cupsdSetJobHoldUntil(job, attr->values[0].string.text);
+    cupsdSetJobHoldUntil(job, attr->values[0].string.text, 0);
 
     job->state->values[0].integer = IPP_JOB_HELD;
     job->state_value              = IPP_JOB_HELD;
@@ -1896,7 +1888,9 @@ add_job(cupsd_client_t  *con,             /* I - Client connection */
 
       if ((kbytes = copy_banner(con, job, attr->values[0].string.text)) < 0)
       {
-        cupsdDeleteJob(job);
+        cupsdSetJobState(job, IPP_JOB_ABORTED, CUPSD_JOB_PURGE,
+                        "Aborting job because the start banner could not be "
+                        "copied.");
         return (NULL);
       }
 
@@ -2926,23 +2920,14 @@ add_printer(cupsd_client_t  *con,       /* I - Client connection */
 
   if (need_restart_job && printer->job)
   {
-    cupsd_job_t *job;
-
    /*
-    * Stop the current job and then restart it below...
+    * Restart the current job...
     */
 
-    job = (cupsd_job_t *)printer->job;
-
-    cupsdStopJob(job, 1);
-
-    job->state->values[0].integer = IPP_JOB_PENDING;
-    job->state_value              = IPP_JOB_PENDING;
+    cupsdSetJobState(printer->job, IPP_JOB_PENDING, CUPSD_JOB_FORCE,
+                     "Job restarted because the printer was modified.");
   }
 
-  if (need_restart_job)
-    cupsdCheckJobs();
-
   cupsdMarkDirty(CUPSD_DIRTY_PRINTCAP);
 
   if (modify)
@@ -3974,21 +3959,28 @@ cancel_job(cupsd_client_t  *con,        /* I - Client connection */
       }
 
      /*
-      * See if the printer is currently printing a job...
+      * See if there are any pending jobs...
       */
 
-      if (printer->job)
-        jobid = ((cupsd_job_t *)printer->job)->id;
+      for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs);
+          job;
+          job = (cupsd_job_t *)cupsArrayNext(ActiveJobs))
+       if (job->state_value <= IPP_JOB_PROCESSING &&
+           !strcasecmp(job->dest, printer->name))
+         break;
+
+      if (job)
+       jobid = job->id;
       else
       {
        /*
-        * No, see if there are any pending jobs...
+        * No, try stopped jobs...
        */
 
-        for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs);
+       for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs);
             job;
             job = (cupsd_job_t *)cupsArrayNext(ActiveJobs))
-         if (job->state_value <= IPP_JOB_PROCESSING &&
+         if (job->state_value == IPP_JOB_STOPPED &&
              !strcasecmp(job->dest, printer->name))
            break;
 
@@ -3996,21 +3988,9 @@ cancel_job(cupsd_client_t  *con, /* I - Client connection */
          jobid = job->id;
        else
        {
-         for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs);
-              job;
-              job = (cupsd_job_t *)cupsArrayNext(ActiveJobs))
-           if (job->state_value == IPP_JOB_STOPPED &&
-               !strcasecmp(job->dest, printer->name))
-             break;
-
-          if (job)
-           jobid = job->id;
-         else
-         {
-           send_ipp_status(con, IPP_NOT_POSSIBLE, _("No active jobs on %s!"),
-                           printer->name);
-           return;
-         }
+         send_ipp_status(con, IPP_NOT_POSSIBLE, _("No active jobs on %s!"),
+                         printer->name);
+         return;
        }
       }
     }
@@ -4109,7 +4089,9 @@ cancel_job(cupsd_client_t  *con,  /* I - Client connection */
   * Cancel the job and return...
   */
 
-  cupsdCancelJob(job, purge, IPP_JOB_CANCELED);
+  cupsdSetJobState(job, IPP_JOB_CANCELED, purge,
+                   purge ? "Job purged by \"%s\"" : "Job canceled by \"%s\"",
+                  username);
   cupsdCheckJobs();
 
   if (purge)
@@ -5131,7 +5113,7 @@ copy_model(cupsd_client_t *con,           /* I - Client connection */
                   "copy_model: Running \"cups-driverd cat %s\"...", from);
 
   if (!cupsdStartProcess(buffer, argv, envp, -1, temppipe[1], CGIPipes[1],
-                         -1, -1, 0, DefaultProfile, &temppid))
+                         -1, -1, 0, DefaultProfile, 0, &temppid))
   {
     close(tempfd);
     unlink(tempfile);
@@ -6870,7 +6852,7 @@ get_jobs(cupsd_client_t  *con,            /* I - Client connection */
                   sizeof(scheme), username, sizeof(username), host,
                  sizeof(host), &port, resource, sizeof(resource));
 
-  if (!strcmp(resource, "/"))
+  if (!strcmp(resource, "/") || !strcmp(resource, "/jobs"))
   {
     dest    = NULL;
     dtype   = (cups_ptype_t)0;
@@ -7998,8 +7980,8 @@ static void
 hold_job(cupsd_client_t  *con,         /* I - Client connection */
          ipp_attribute_t *uri)         /* I - Job or Printer URI */
 {
-  ipp_attribute_t *attr,               /* Current job-hold-until */
-               *newattr;               /* New job-hold-until */
+  ipp_attribute_t *attr;               /* Current job-hold-until */
+  const char   *when;                  /* New value */
   int          jobid;                  /* Job ID */
   char         scheme[HTTP_MAX_URI],   /* Method portion of URI */
                username[HTTP_MAX_URI], /* Username portion of URI */
@@ -8085,50 +8067,23 @@ hold_job(cupsd_client_t  *con,          /* I - Client connection */
   * Hold the job and return...
   */
 
-  cupsdHoldJob(job);
-
-  cupsdAddEvent(CUPSD_EVENT_JOB_STATE, cupsdFindDest(job->dest), job,
-                "Job held by user.");
-
-  if ((newattr = ippFindAttribute(con->request, "job-hold-until",
-                                  IPP_TAG_KEYWORD)) == NULL)
-    newattr = ippFindAttribute(con->request, "job-hold-until", IPP_TAG_NAME);
-
-  if ((attr = ippFindAttribute(job->attrs, "job-hold-until",
-                               IPP_TAG_KEYWORD)) == NULL)
-    attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_NAME);
+  if ((attr = ippFindAttribute(con->request, "job-hold-until",
+                              IPP_TAG_KEYWORD)) == NULL)
+    attr = ippFindAttribute(con->request, "job-hold-until", IPP_TAG_NAME);
 
   if (attr)
   {
-   /*
-    * Free the old hold value and copy the new one over...
-    */
-
-    _cupsStrFree(attr->values[0].string.text);
-
-    if (newattr)
-    {
-      attr->value_tag = newattr->value_tag;
-      attr->values[0].string.text =
-          _cupsStrRetain(newattr->values[0].string.text);
-    }
-    else
-    {
-      attr->value_tag = IPP_TAG_KEYWORD;
-      attr->values[0].string.text = _cupsStrAlloc("indefinite");
-    }
-
-   /*
-    * Hold job until specified time...
-    */
-
-    cupsdSetJobHoldUntil(job, attr->values[0].string.text);
+    when = attr->values[0].string.text;
 
     cupsdAddEvent(CUPSD_EVENT_JOB_CONFIG_CHANGED, cupsdFindDest(job->dest), job,
-                  "Job job-hold-until value changed by user.");
+                 "Job job-hold-until value changed by user.");
   }
+  else
+    when = "indefinite";
 
-  cupsdLogJob(job, CUPSD_LOG_INFO, "Held by \"%s\".", username);
+  cupsdSetJobHoldUntil(job, when, 1);
+  cupsdSetJobState(job, IPP_JOB_HELD, CUPSD_JOB_DEFAULT, "Job held by \"%s\".",
+                   username);
 
   con->response->request.status.status_code = IPP_OK;
 }
@@ -10548,11 +10503,9 @@ set_job_attrs(cupsd_client_t  *con,    /* I - Client connection */
              {
                cupsdLogJob(job, CUPSD_LOG_DEBUG, "Setting job-state to %d",
                            attr->values[0].integer);
-
-               job->state->values[0].integer = attr->values[0].integer;
-               job->state_value = (ipp_jstate_t)attr->values[0].integer;
-
-                event |= CUPSD_EVENT_JOB_STATE;
+                cupsdSetJobState(job, attr->values[0].integer,
+                                CUPSD_JOB_DEFAULT,
+                                "Job state changed by \"%s\"", username);
                check_jobs = 1;
              }
              break;
@@ -10580,8 +10533,9 @@ set_job_attrs(cupsd_client_t  *con,     /* I - Client connection */
              {
                cupsdLogJob(job, CUPSD_LOG_DEBUG, "Setting job-state to %d",
                            attr->values[0].integer);
-                cupsdCancelJob(job, 0, (ipp_jstate_t)attr->values[0].integer);
-
+                cupsdSetJobState(job, (ipp_jstate_t)attr->values[0].integer,
+                                CUPSD_JOB_DEFAULT,
+                                "Job state changed by \"%s\"", username);
                 check_jobs = 1;
              }
              break;
@@ -10621,15 +10575,18 @@ set_job_attrs(cupsd_client_t  *con,   /* I - Client connection */
       {
         cupsdLogJob(job, CUPSD_LOG_DEBUG, "Setting job-hold-until to %s",
                    attr->values[0].string.text);
-        cupsdSetJobHoldUntil(job, attr->values[0].string.text);
+        cupsdSetJobHoldUntil(job, attr->values[0].string.text, 0);
 
        if (!strcmp(attr->values[0].string.text, "no-hold"))
+       {
          cupsdReleaseJob(job);
+          check_jobs = 1;
+       }
        else
-         cupsdHoldJob(job);
+         cupsdSetJobState(job, IPP_JOB_HELD, CUPSD_JOB_DEFAULT,
+                          "Job held by \"%s\".", username);
 
-        check_jobs = 1;
-        event      |= CUPSD_EVENT_JOB_CONFIG_CHANGED | CUPSD_EVENT_JOB_STATE;
+        event |= CUPSD_EVENT_JOB_CONFIG_CHANGED | CUPSD_EVENT_JOB_STATE;
       }
     }
     else if (attr->value_tag == IPP_TAG_DELETEATTR)
index ee83e4c746104e236332eeb5da73ed477b9cbb1f..25ddffd9fcf27b56139de6cc883b976d25f24c5f 100644 (file)
  *
  * Contents:
  *
- *   cupsdAddJob()              - Add a new job to the job queue...
- *   cupsdCancelJob()           - Cancel the specified print job.
+ *   cupsdAddJob()              - Add a new job to the job queue.
  *   cupsdCancelJobs()          - Cancel all jobs for the given
- *                                destination/user...
+ *                                destination/user.
  *   cupsdCheckJobs()           - Check the pending jobs and start any if the
  *                                destination is available.
  *   cupsdCleanJobs()           - Clean out old jobs.
+ *   cupsdContinueJob()         - Continue printing with the next file in a job.
  *   cupsdDeleteJob()           - Free all memory used by a job.
  *   cupsdFinishJob()           - Finish a job.
  *   cupsdFreeAllJobs()         - Free all jobs from memory.
  *                                jobs in a printer or class.
  *   cupsdGetUserJobCount()     - Get the number of pending, processing, or held
  *                                jobs for a user.
- *   cupsdHoldJob()             - Hold the specified job.
  *   cupsdLoadAllJobs()         - Load all jobs from disk.
- *   cupsdLoadJob()             - Load a single job...
+ *   cupsdLoadJob()             - Load a single job.
  *   cupsdMoveJob()             - Move the specified job to a different
  *                                destination.
  *   cupsdReleaseJob()          - Release the specified job.
  *   cupsdRestartJob()          - Restart the specified job.
  *   cupsdSaveAllJobs()         - Save a summary of all jobs to disk.
  *   cupsdSaveJob()             - Save a job to disk.
- *   cupsdSetJobHoldUntil()     - Set the hold time for a job...
+ *   cupsdSetJobHoldUntil()     - Set the hold time for a job.
  *   cupsdSetJobPriority()      - Set the priority of a job, moving it up/down
  *                                in the list as needed.
+ *   cupsdSetJobState()         - Set the state of the specified print job.
  *   cupsdStopAllJobs()         - Stop all print jobs.
- *   cupsdStopJob()             - Stop a print job.
  *   cupsdUnloadCompletedJobs() - Flush completed job history from memory.
  *   compare_active_jobs()      - Compare the job IDs and priorities of two
  *                                jobs.
  *   compare_jobs()             - Compare the job IDs of two jobs.
+ *   finalize_job()             - Cleanup after job filter processes and support
+ *                                data.
+ *   get_options()              - Get a string containing the job options.
  *   ipp_length()               - Compute the size of the buffer needed to hold
  *                                the textual IPP attributes.
  *   load_job_cache()           - Load jobs from the job.cache file.
  *   load_next_job_id()         - Load the NextJobId value from the job.cache
  *                                file.
  *   load_request_root()        - Load jobs from the RequestRoot directory.
- *   set_time()                 - Set one of the "time-at-xyz" attributes...
  *   set_hold_until()           - Set the hold time and update job-hold-until
- *                                attribute...
+ *                                attribute.
+ *   set_time()                 - Set one of the "time-at-xyz" attributes.
  *   start_job()                - Start a print job.
+ *   stop_job()                 - Stop a print job.
  *   unload_job()               - Unload a job from memory.
  *   update_job()               - Read a status update from a job's filters.
  *   update_job_attrs()         - Update the job-printer-* attributes.
 #include <cups/dir.h>
 
 
+/*
+ * Design Notes for Job Management
+ * -------------------------------
+ *
+ * STATE CHANGES
+ *
+ *     pending       Do nothing/check jobs
+ *     pending-held  Send SIGTERM to filters and backend
+ *     processing    Do nothing/start job
+ *     stopped       Send SIGKILL to filters and backend
+ *     canceled      Send SIGTERM to filters and backend
+ *     aborted       Finalize
+ *     completed     Finalize
+ *
+ *     Finalize clears the printer <-> job association, deletes the status
+ *     buffer, closes all of the pipes, etc. and doesn't get run until all of
+ *     the print processes are finished.
+ *
+ * UNLOADING OF JOBS (cupsdUnloadCompletedJobs)
+ *
+ *     We unload the job attributes when they are not needed to reduce overall
+ *     memory consumption.  We don't unload jobs where job->state_value <
+ *     IPP_JOB_STOPPED, job->printer != NULL, or job->access_time is recent.
+ *
+ * STARTING OF JOBS (start_job)
+ *
+ *     When a job is started, a status buffer, several pipes, a security
+ *     profile, and a backend process are created for the life of that job.
+ *     These are shared for every file in a job.  For remote print jobs, the
+ *     IPP backend is provided with every file in the job and no filters are
+ *     run.
+ *
+ *     The job->printer member tracks which printer is printing a job, which
+ *     can be different than the destination in job->dest for classes.  The
+ *     printer object also has a job pointer to track which job is being
+ *     printed.
+ *
+ * PRINTING OF JOB FILES (cupsdContinueJob)
+ *
+ *     Each file in a job is filtered by 0 or more programs.  After getting the
+ *     list of filters needed and the total cost, the job is either passed or
+ *     put back to the processing state until the current FilterLevel comes down
+ *     enough to allow printing.
+ *
+ *     If we can print, we build a string for the print options and run each of
+ *     the filters, piping the output from one into the next.
+ *
+ * JOB STATUS UPDATES (update_job)
+ *
+ *     The update_job function gets called whenever there are pending messages
+ *     on the status pipe.  These generally are updates to the marker-*,
+ *     printer-state-message, or printer-state-reasons attributes.  On EOF,
+ *     finalize_job is called to clean up.
+ *
+ * FINALIZING JOBS (finalize_job)
+ *
+ *     When all filters and the backend are done, we set the job state to
+ *     completed (no errors), aborted (filter errors or abort-job policy),
+ *     pending-held (auth required or retry-job policy), or pending
+ *     (retry-current-job or stop-printer policies) as appropriate.
+ *
+ *     Then we close the pipes and free the status buffers and profiles.
+ *
+ * JOB FILE COMPLETION (process_children in main.c)
+ *
+ *     For multiple-file jobs, process_children (in main.c) sees that all
+ *     filters have exited and calls in to print the next file if there are
+ *     more files in the job, otherwise it waits for the backend to exit and
+ *     update_job to do the cleanup.
+ */
+
+
 /*
  * Local globals...
  */
@@ -91,20 +166,25 @@ static mime_filter_t       gziptoany_filter =
 
 static int     compare_active_jobs(void *first, void *second, void *data);
 static int     compare_jobs(void *first, void *second, void *data);
+static void    finalize_job(cupsd_job_t *job);
+static char    *get_options(cupsd_job_t *job, int banner_page, char *copies,
+                            size_t copies_size, char *title,
+                            size_t title_size);
 static int     ipp_length(ipp_t *ipp);
 static void    load_job_cache(const char *filename);
 static void    load_next_job_id(const char *filename);
 static void    load_request_root(void);
-static void    set_time(cupsd_job_t *job, const char *name);
 static void    set_hold_until(cupsd_job_t *job, time_t holdtime);
+static void    set_time(cupsd_job_t *job, const char *name);
 static void    start_job(cupsd_job_t *job, cupsd_printer_t *printer);
+static void    stop_job(cupsd_job_t *job, cupsd_jobaction_t action);
 static void    unload_job(cupsd_job_t *job);
 static void    update_job(cupsd_job_t *job);
 static void    update_job_attrs(cupsd_job_t *job, int do_message);
 
 
 /*
- * 'cupsdAddJob()' - Add a new job to the job queue...
+ * 'cupsdAddJob()' - Add a new job to the job queue.
  */
 
 cupsd_job_t *                          /* O - New job record */
@@ -142,186 +222,7 @@ cupsdAddJob(int        priority,  /* I - Job priority */
 
 
 /*
- * 'cupsdCancelJob()' - Cancel the specified print job.
- */
-
-void
-cupsdCancelJob(cupsd_job_t  *job,      /* I - Job to cancel */
-               int          purge,     /* I - Purge jobs? */
-              ipp_jstate_t newstate)   /* I - New job state */
-{
-  int          i;                      /* Looping var */
-  char         filename[1024];         /* Job filename */
-  cupsd_printer_t *printer;            /* Printer used by job */
-
-
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCancelJob: id = %d", job->id);
-
- /*
-  * Stop any processes that are working on the current job...
-  */
-
-  if ((printer = job->printer) == NULL)
-    printer = cupsdFindDest(job->dest);
-
-  if (job->state_value == IPP_JOB_PROCESSING)
-    cupsdStopJob(job, 0);
-
-  cupsdLoadJob(job);
-
-  if (job->attrs)
-    job->state->values[0].integer = newstate;
-
-  job->state_value = newstate;
-
-  set_time(job, "time-at-completed");
-
- /*
-  * Send any pending notifications and then expire them...
-  */
-
-  switch (newstate)
-  {
-    default :
-        break;
-
-    case IPP_JOB_CANCELED :
-       cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, printer, job,
-                      purge ? "Job purged." : "Job canceled.");
-        break;
-
-    case IPP_JOB_ABORTED :
-       cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, printer, job,
-                      "Job aborted; please consult the error_log file "
-                     "for details.");
-        break;
-
-    case IPP_JOB_COMPLETED :
-       /*
-       * Clear the printer's printer-state-message and move on...
-       */
-
-       printer->state_message[0] = '\0';
-
-       cupsdSetPrinterState(printer, IPP_PRINTER_IDLE, 0);
-
-       cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, printer, job,
-                      "Job completed.");
-        break;
-  }
-
-  cupsdExpireSubscriptions(NULL, job);
-
- /*
-  * Remove the job from the active and printing lists...
-  */
-
-  cupsArrayRemove(ActiveJobs, job);
-  cupsArrayRemove(PrintingJobs, job);
-
-#ifdef __APPLE__
- /*
-  * If we are going to sleep and the PrintingJobs count is now 0, allow the
-  * sleep to happen immediately...
-  */
-
-  if (Sleeping && cupsArrayCount(PrintingJobs) == 0)
-    cupsdAllowSleep();
-#endif /* __APPLE__ */
-
- /*
-  * Remove any authentication data...
-  */
-
-  snprintf(filename, sizeof(filename), "%s/a%05d", RequestRoot, job->id);
-  if (cupsdRemoveFile(filename) && errno != ENOENT)
-    cupsdLogMessage(CUPSD_LOG_ERROR,
-                    "Unable to remove authentication cache: %s",
-                   strerror(errno));
-
-  cupsdClearString(&job->auth_username);
-  cupsdClearString(&job->auth_domain);
-  cupsdClearString(&job->auth_password);
-
-#ifdef HAVE_GSSAPI
- /*
-  * Destroy the credential cache and clear the KRB5CCNAME env var string.
-  */
-
-  if (job->ccache)
-  {
-    krb5_cc_destroy(KerberosContext, job->ccache);
-    job->ccache = NULL;
-  }
-
-  cupsdClearString(&job->ccname);
-#endif /* HAVE_GSSAPI */
-
- /*
-  * Remove the print file for good if we aren't preserving jobs or
-  * files...
-  */
-
-  job->current_file = 0;
-
-  if (!JobHistory || !JobFiles || purge)
-  {
-    for (i = 1; i <= job->num_files; i ++)
-    {
-      snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot,
-              job->id, i);
-      unlink(filename);
-    }
-
-    if (job->num_files > 0)
-    {
-      free(job->filetypes);
-      free(job->compressions);
-
-      job->num_files    = 0;
-      job->filetypes    = NULL;
-      job->compressions = NULL;
-    }
-  }
-
-  if (JobHistory && !purge)
-  {
-   /*
-    * Save job state info...
-    */
-
-    job->dirty = 1;
-    cupsdMarkDirty(CUPSD_DIRTY_JOBS);
-  }
-  else
-  {
-   /*
-    * Remove the job info file...
-    */
-
-    snprintf(filename, sizeof(filename), "%s/c%05d", RequestRoot,
-            job->id);
-    unlink(filename);
-
-   /*
-    * Remove the job from the "all jobs" list...
-    */
-
-    cupsArrayRemove(Jobs, job);
-
-   /*
-    * Free all memory used...
-    */
-
-    cupsdDeleteJob(job);
-  }
-
-  cupsdSetBusyState();
-}
-
-
-/*
- * 'cupsdCancelJobs()' - Cancel all jobs for the given destination/user...
+ * 'cupsdCancelJobs()' - Cancel all jobs for the given destination/user.
  */
 
 void
@@ -336,20 +237,22 @@ cupsdCancelJobs(const char *dest, /* I - Destination to cancel */
        job;
        job = (cupsd_job_t *)cupsArrayNext(Jobs))
   {
-    if (!job->dest || !job->username)
-      cupsdLoadJob(job);
-
-    if (!job->dest || !job->username)
+    if ((!job->dest || !job->username) && !cupsdLoadJob(job))
       continue;
 
-    if ((dest == NULL || !strcmp(job->dest, dest)) &&
-        (username == NULL || !strcmp(job->username, username)))
+    if ((!dest || !strcmp(job->dest, dest)) &&
+        (!username || !strcmp(job->username, username)))
     {
      /*
       * Cancel all jobs matching this destination/user...
       */
 
-      cupsdCancelJob(job, purge, IPP_JOB_CANCELED);
+      if (purge)
+       cupsdSetJobState(job, IPP_JOB_CANCELED, CUPSD_JOB_PURGE,
+                        "Job purged by user.");
+      else
+       cupsdSetJobState(job, IPP_JOB_CANCELED, CUPSD_JOB_DEFAULT,
+                        "Job canceled by user.");
     }
   }
 
@@ -371,8 +274,6 @@ cupsdCheckJobs(void)
   ipp_attribute_t      *attr;          /* Job attribute */
 
 
-  DEBUG_puts("cupsdCheckJobs()");
-
   cupsdLogMessage(CUPSD_LOG_DEBUG2,
                   "cupsdCheckJobs: %d active jobs, sleeping=%d, reload=%d",
                   cupsArrayCount(ActiveJobs), Sleeping, NeedReload);
@@ -385,11 +286,6 @@ cupsdCheckJobs(void)
     * Start held jobs if they are ready...
     */
 
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "cupsdCheckJobs: Job %d: dest=%s, dtype=%x, "
-                   "state_value=%d, loaded=%s", job->id, job->dest, job->dtype,
-                   job->state_value, job->attrs ? "yes" : "no");
-
     if (job->state_value == IPP_JOB_HELD &&
         job->hold_until &&
        job->hold_until < time(NULL))
@@ -419,27 +315,16 @@ cupsdCheckJobs(void)
          continue;
       }
 
-      job->state->values[0].integer = IPP_JOB_PENDING;
-      job->state_value              = IPP_JOB_PENDING;
-
-      if ((attr = ippFindAttribute(job->attrs, "job-hold-until",
-                                  IPP_TAG_KEYWORD)) == NULL)
-       attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_NAME);
-
-      if (attr)
-      {
-       attr->value_tag = IPP_TAG_KEYWORD;
-       cupsdSetString(&(attr->values[0].string.text), "no-hold");
-       job->dirty = 1;
-       cupsdMarkDirty(CUPSD_DIRTY_JOBS);
-      }
+      cupsdSetJobState(job, IPP_JOB_PENDING, CUPSD_JOB_DEFAULT,
+                       "Job submission timed out.");
     }
 
    /*
     * Start pending jobs if the destination is available...
     */
 
-    if (job->state_value == IPP_JOB_PENDING && !NeedReload && !Sleeping)
+    if (job->state_value == IPP_JOB_PENDING && !NeedReload && !Sleeping &&
+        !job->printer)
     {
       printer = cupsdFindDest(job->dest);
       pclass  = NULL;
@@ -468,15 +353,9 @@ cupsdCheckJobs(void)
        * cancel the job...
        */
 
-        cupsdLogMessage(CUPSD_LOG_WARN,
-                       "[Job %d] Printer/class %s has gone away; canceling "
-                       "job!", job->id, job->dest);
-
-       cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
-                      "Job canceled because the destination printer/class has "
-                     "gone away.");
-
-        cupsdCancelJob(job, 1, IPP_JOB_ABORTED);
+        cupsdSetJobState(job, IPP_JOB_ABORTED, CUPSD_JOB_PURGE,
+                        "Job aborted because the destination printer/class "
+                        "has gone away.");
       }
       else if (printer && !printer->holding_new_jobs)
       {
@@ -508,12 +387,6 @@ cupsdCheckJobs(void)
            ((printer->type & CUPS_PRINTER_DISCOVERED) && /* Printer is remote */
             !printer->job))                            /* and not printing */
         {
-        /* 
-         * Clear any message for the queue...
-         */
-
-          printer->state_message[0] = '\0';
-
         /*
          * Start the job...
          */
@@ -542,1224 +415,1328 @@ cupsdCleanJobs(void)
   for (job = (cupsd_job_t *)cupsArrayFirst(Jobs);
        job && cupsArrayCount(Jobs) >= MaxJobs;
        job = (cupsd_job_t *)cupsArrayNext(Jobs))
-    if (job->state_value >= IPP_JOB_CANCELED)
-      cupsdCancelJob(job, 1, IPP_JOB_CANCELED);
+    if (job->state_value >= IPP_JOB_CANCELED && !job->printer)
+      cupsdDeleteJob(job, CUPSD_JOB_PURGE);
 }
 
 
 /*
- * 'cupsdDeleteJob()' - Free all memory used by a job.
+ * 'cupsdContinueJob()' - Continue printing with the next file in a job.
  */
 
 void
-cupsdDeleteJob(cupsd_job_t *job)       /* I - Job */
+cupsdContinueJob(cupsd_job_t *job)     /* I - Job */
 {
-  cupsdClearString(&job->username);
-  cupsdClearString(&job->dest);
-  cupsdClearString(&job->auth_username);
-  cupsdClearString(&job->auth_domain);
-  cupsdClearString(&job->auth_password);
+  int                  i;              /* Looping var */
+  int                  slot;           /* Pipe slot */
+  cups_array_t         *filters,       /* Filters for job */
+                       *prefilters;    /* Filters with prefilters */
+  mime_filter_t                *filter,        /* Current filter */
+                       *prefilter,     /* Prefilter */
+                       port_monitor;   /* Port monitor filter */
+  char                 scheme[255];    /* Device URI scheme */
+  ipp_attribute_t      *attr;          /* Current attribute */
+  const char           *ptr,           /* Pointer into value */
+                       *abort_message; /* Abort message */
+  struct stat          backinfo;       /* Backend file information */
+  int                  backroot;       /* Run backend as root? */
+  int                  pid;            /* Process ID of new filter process */
+  int                  banner_page;    /* 1 if banner page, 0 otherwise */
+  int                  filterfds[2][2];/* Pipes used between filters */
+  int                  envc;           /* Number of environment variables */
+  char                 **argv,         /* Filter command-line arguments */
+                       filename[1024], /* Job filename */
+                       command[1024],  /* Full path to command */
+                       jobid[255],     /* Job ID string */
+                       title[IPP_MAX_NAME],
+                                       /* Job title string */
+                       copies[255],    /* # copies string */
+                       *options,       /* Options string */
+                       *envp[MAX_ENV + 19],
+                                       /* Environment variables */
+                       charset[255],   /* CHARSET env variable */
+                       class_name[255],/* CLASS env variable */
+                       classification[1024],
+                                       /* CLASSIFICATION env variable */
+                       content_type[1024],
+                                       /* CONTENT_TYPE env variable */
+                       device_uri[1024],
+                                       /* DEVICE_URI env variable */
+                       final_content_type[1024],
+                                       /* FINAL_CONTENT_TYPE env variable */
+                       lang[255],      /* LANG env variable */
+#ifdef __APPLE__
+                       apple_language[255],
+                                       /* APPLE_LANGUAGE env variable */
+#endif /* __APPLE__ */
+                       ppd[1024],      /* PPD env variable */
+                       printer_info[255],
+                                       /* PRINTER_INFO env variable */
+                       printer_location[255],
+                                       /* PRINTER_LOCATION env variable */
+                       printer_name[255],
+                                       /* PRINTER env variable */
+                       rip_max_cache[255];
+                                       /* RIP_MAX_CACHE env variable */
+
+
+  cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                  "cupsdContinueJob(job=%p(%d)): current_file=%d, num_files=%d",
+                 job, job->id, job->current_file, job->num_files);
 
-#ifdef HAVE_GSSAPI
  /*
-  * Destroy the credential cache and clear the KRB5CCNAME env var string.
+  * Figure out what filters are required to convert from
+  * the source to the destination type...
   */
 
-  if (job->ccache)
-  {
-    krb5_cc_destroy(KerberosContext, job->ccache);
-    job->ccache = NULL;
-  }
+  FilterLevel -= job->cost;
 
-  cupsdClearString(&job->ccname);
-#endif /* HAVE_GSSAPI */
+  filters   = NULL;
 
-  if (job->num_files > 0)
+  if (job->printer->raw)
   {
-    free(job->compressions);
-    free(job->filetypes);
-  }
-
-  ippDelete(job->attrs);
+   /*
+    * Remote jobs and raw queues go directly to the printer without
+    * filtering...
+    */
 
-  free(job);
-}
+    cupsdLogJob(job, CUPSD_LOG_DEBUG, "Sending job to queue tagged as raw...");
 
+    filters = NULL;
+  }
+  else
+  {
+   /*
+    * Local jobs get filtered...
+    */
 
-/*
- * 'cupsdFinishJob()' - Finish a job.
- */
+    filters = mimeFilter(MimeDatabase, job->filetypes[job->current_file],
+                         job->printer->filetype, &(job->cost));
 
-void
-cupsdFinishJob(cupsd_job_t *job)       /* I - Job */
-{
-  cupsd_printer_t      *printer;       /* Current printer */
-  ipp_attribute_t      *attr;          /* job-hold-until attribute */
+    if (!filters)
+    {
+      cupsdLogJob(job, CUPSD_LOG_ERROR,
+                 "Unable to convert file %d to printable format!",
+                 job->current_file);
 
+      job->current_file ++;
 
-  cupsdLogJob(job, CUPSD_LOG_DEBUG, "File %d is complete.",
-             job->current_file - 1);
+      if (job->current_file == job->num_files)
+        cupsdSetJobState(job, IPP_JOB_ABORTED, CUPSD_JOB_DEFAULT,
+                        "Aborting job because it cannot be printed.");
 
-  cupsdLogJob(job, CUPSD_LOG_DEBUG2,
-             "cupsdFinishJob: job->status is %d",
-             job->status);
+      return;
+    }
 
-  if (job->status_buffer &&
-      (job->status < 0 || job->current_file >= job->num_files))
-  {
    /*
-    * Close the pipe and clear the input bit.
+    * Remove NULL ("-") filters...
     */
 
-    cupsdRemoveSelect(job->status_buffer->fd);
+    for (filter = (mime_filter_t *)cupsArrayFirst(filters);
+         filter;
+        filter = (mime_filter_t *)cupsArrayNext(filters))
+      if (!strcmp(filter->filter, "-"))
+        cupsArrayRemove(filters, filter);
 
-    cupsdLogJob(job, CUPSD_LOG_DEBUG2,
-               "cupsdFinishJob: Closing status pipes [ %d %d ]...",
-               job->status_pipes[0], job->status_pipes[1]);
+    if (cupsArrayCount(filters) == 0)
+    {
+      cupsArrayDelete(filters);
+      filters = NULL;
+    }
 
-    cupsdClosePipe(job->status_pipes);
-    cupsdStatBufDelete(job->status_buffer);
+   /*
+    * If this printer has any pre-filters, insert the required pre-filter
+    * in the filters array...
+    */
 
-    job->status_buffer = NULL;
-  }
+    if (job->printer->prefiltertype && filters)
+    {
+      prefilters = cupsArrayNew(NULL, NULL);
+
+      for (filter = (mime_filter_t *)cupsArrayFirst(filters);
+          filter;
+          filter = (mime_filter_t *)cupsArrayNext(filters))
+      {
+       if ((prefilter = mimeFilterLookup(MimeDatabase, filter->src,
+                                         job->printer->prefiltertype)))
+       {
+         cupsArrayAdd(prefilters, prefilter);
+         job->cost += prefilter->cost;
+       }
 
-  if ((printer = job->printer) == NULL)
-    printer = cupsdFindDest(job->dest);
+       cupsArrayAdd(prefilters, filter);
+      }
 
-  update_job_attrs(job, 0);
+      cupsArrayDelete(filters);
+      filters = prefilters;
+    }
+  }
 
  /*
-  * Clear the "connecting-to-device" reason, which is only valid when a
-  * printer is processing...
+  * Set a minimum cost of 100 for all jobs so that FilterLimit
+  * works with raw queues and other low-cost paths.
   */
 
-  cupsdSetPrinterReasons(printer, "-connecting-to-device");
+  if (job->cost < 100)
+    job->cost = 100;
 
  /*
-  * Similarly, clear the "offline-report" reason for non-USB devices since we
-  * rarely have current information for network devices...
+  * See if the filter cost is too high...
   */
 
-  if (strncmp(printer->device_uri, "usb:", 4))
-    cupsdSetPrinterReasons(printer, "-offline-report");
-
-  if (job->status < 0)
+  if ((FilterLevel + job->cost) > FilterLimit && FilterLevel > 0 &&
+      FilterLimit > 0)
   {
    /*
-    * Backend had errors; stop it...
+    * Don't print this job quite yet...
     */
 
-    int exit_code;                     /* Exit code from backend */
-
+    cupsArrayDelete(filters);
 
-   /*
-    * Convert the status to an exit code.  Due to the way the W* macros are
-    * implemented on MacOS X (bug?), we have to store the exit status in a
-    * variable first and then convert...
-    */
+    cupsdLogJob(job, CUPSD_LOG_INFO,
+               "Holding because filter limit has been reached.");
+    cupsdLogJob(job, CUPSD_LOG_DEBUG2,
+               "cupsdContinueJob: file=%d, cost=%d, level=%d, limit=%d",
+               job->current_file, job->cost, FilterLevel,
+               FilterLimit);
+    return;
+  }
 
-    exit_code = -job->status;
-    if (WIFEXITED(exit_code))
-      exit_code = WEXITSTATUS(exit_code);
-    else
-      exit_code = job->status;
+  FilterLevel += job->cost;
 
-    cupsdLogJob(job, CUPSD_LOG_INFO, "Backend returned status %d (%s)",
-               exit_code,
-               exit_code == CUPS_BACKEND_FAILED ? "failed" :
-                   exit_code == CUPS_BACKEND_AUTH_REQUIRED ?
-                       "authentication required" :
-                   exit_code == CUPS_BACKEND_HOLD ? "hold job" :
-                   exit_code == CUPS_BACKEND_STOP ? "stop printer" :
-                   exit_code == CUPS_BACKEND_CANCEL ? "cancel job" :
-                   exit_code < 0 ? "crashed" : "unknown");
+ /*
+  * Add decompression/raw filter as needed...
+  */
 
+  if ((!job->printer->raw && job->compressions[job->current_file]) ||
+      (!filters && !job->printer->remote &&
+       (job->num_files > 1 || !strncmp(job->printer->device_uri, "file:", 5))))
+  {
    /*
-    * Do what needs to be done...
+    * Add gziptoany filter to the front of the list...
     */
 
-    switch (exit_code)
-    {
-      default :
-      case CUPS_BACKEND_FAILED :
-         /*
-         * Backend failure, use the error-policy to determine how to
-         * act...
-         */
+    if (!filters)
+      filters = cupsArrayNew(NULL, NULL);
 
-         cupsdStopJob(job, 0);
+    if (!cupsArrayInsert(filters, &gziptoany_filter))
+    {
+      cupsdLogJob(job, CUPSD_LOG_DEBUG,
+                 "Unable to add decompression filter - %s", strerror(errno));
 
-          if (job->dtype & (CUPS_PRINTER_CLASS | CUPS_PRINTER_IMPLICIT))
-         {
-          /*
-           * Mark the job as pending again - we'll retry on another
-           * printer...
-           */
+      cupsArrayDelete(filters);
 
-           job->state->values[0].integer = IPP_JOB_PENDING;
-           job->state_value              = IPP_JOB_PENDING;
-          }
+      cupsdSetJobState(job, IPP_JOB_STOPPED, CUPSD_JOB_DEFAULT,
+                      "Stopping job because the scheduler ran out of "
+                      "memory.");
 
-         job->dirty = 1;
-         cupsdMarkDirty(CUPSD_DIRTY_JOBS);
+      FilterLevel -= job->cost;
+      return;
+    }
+  }
 
-        /*
-         * If the job was queued to a class or the error policy is
-         * "retry-current-job", try requeuing it...  For faxes and retry-job
-         * queues, hold the current job for 5 minutes.
-         */
+ /*
+  * Add port monitor, if any...
+  */
 
-         if ((job->dtype & (CUPS_PRINTER_CLASS | CUPS_PRINTER_IMPLICIT)) ||
-             !strcmp(printer->error_policy, "retry-current-job"))
-           cupsdCheckJobs();
-         else if ((printer->type & CUPS_PRINTER_FAX) ||
-                  !strcmp(printer->error_policy, "retry-job"))
-         {
-          /*
-           * See how many times we've tried to send the job; if more than
-           * the limit, cancel the job.
-           */
+  if (job->printer->port_monitor)
+  {
+   /*
+    * Add port monitor to the end of the list...
+    */
 
-           job->tries ++;
+    if (!filters)
+      filters = cupsArrayNew(NULL, NULL);
 
-           if (job->tries >= JobRetryLimit)
-           {
-            /*
-             * Too many tries...
-             */
+    port_monitor.src  = NULL;
+    port_monitor.dst  = NULL;
+    port_monitor.cost = 0;
 
-             cupsdLogJob(job, CUPSD_LOG_ERROR,
-                         "Canceling job since it could not be "
-                         "sent after %d tries.",
-                         JobRetryLimit);
+    snprintf(port_monitor.filter, sizeof(port_monitor.filter),
+             "%s/monitor/%s", ServerBin, job->printer->port_monitor);
 
-             cupsdCancelJob(job, 0, IPP_JOB_ABORTED);
-           }
-           else
-           {
-            /*
-             * Try again in N seconds...
-             */
+    if (!cupsArrayAdd(filters, &port_monitor))
+    {
+      cupsdLogJob(job, CUPSD_LOG_DEBUG,
+                 "Unable to add port monitor - %s", strerror(errno));
 
-             set_hold_until(job, time(NULL) + JobRetryInterval);
+      cupsArrayDelete(filters);
 
-             cupsdAddEvent(CUPSD_EVENT_JOB_STATE, printer, job,
-                           "Job held due to fax errors; please consult "
-                           "the error_log file for details.");
-             cupsdSetPrinterState(printer, IPP_PRINTER_IDLE, 0);
-           }
-         }
-         else if (!strcmp(printer->error_policy, "abort-job"))
-           cupsdCancelJob(job, 0, IPP_JOB_ABORTED);
-          else
-          {
-           cupsdSetPrinterState(printer, IPP_PRINTER_STOPPED, 1);
+      cupsdSetJobState(job, IPP_JOB_STOPPED, CUPSD_JOB_DEFAULT,
+                      "Stopping job because the scheduler ran out of "
+                      "memory.");
 
-           cupsdAddEvent(CUPSD_EVENT_JOB_STOPPED, printer, job,
-                         "Job stopped due to backend errors; please consult "
-                         "the error_log file for details.");
-         }
-          break;
+      FilterLevel -= job->cost;
+      return;
+    }
+  }
 
-      case CUPS_BACKEND_CANCEL :
-         /*
-         * Cancel the job...
-         */
+ /*
+  * Make sure we don't go over the "MAX_FILTERS" limit...
+  */
 
-         cupsdCancelJob(job, 0, IPP_JOB_CANCELED);
-          break;
+  if (cupsArrayCount(filters) > MAX_FILTERS)
+  {
+    cupsdLogJob(job, CUPSD_LOG_DEBUG,
+               "Too many filters (%d > %d), unable to print!",
+               cupsArrayCount(filters), MAX_FILTERS);
 
-      case CUPS_BACKEND_HOLD :
-         /*
-         * Hold the job...
-         */
+    cupsArrayDelete(filters);
+    cupsdSetJobState(job, IPP_JOB_STOPPED, CUPSD_JOB_DEFAULT,
+                    "Stopping job because it needs too many filters to "
+                    "print.");
 
-         cupsdStopJob(job, 0);
+    FilterLevel -= job->cost;
+    return;
+  }
 
-         cupsdSetJobHoldUntil(job, "indefinite");
+ /*
+  * Determine if we are printing a banner page or not...
+  */
 
-         job->state->values[0].integer = IPP_JOB_HELD;
-         job->state_value              = IPP_JOB_HELD;
+  if (job->job_sheets == NULL)
+  {
+    cupsdLogJob(job, CUPSD_LOG_DEBUG, "No job-sheets attribute.");
+    if ((job->job_sheets =
+         ippFindAttribute(job->attrs, "job-sheets", IPP_TAG_ZERO)) != NULL)
+      cupsdLogJob(job, CUPSD_LOG_DEBUG,
+                 "... but someone added one without setting job_sheets!");
+  }
+  else if (job->job_sheets->num_values == 1)
+    cupsdLogJob(job, CUPSD_LOG_DEBUG, "job-sheets=%s",
+               job->job_sheets->values[0].string.text);
+  else
+    cupsdLogJob(job, CUPSD_LOG_DEBUG, "job-sheets=%s,%s",
+                job->job_sheets->values[0].string.text,
+                job->job_sheets->values[1].string.text);
 
-         job->dirty = 1;
-         cupsdMarkDirty(CUPSD_DIRTY_JOBS);
+  if (job->printer->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT))
+    banner_page = 0;
+  else if (job->job_sheets == NULL)
+    banner_page = 0;
+  else if (strcasecmp(job->job_sheets->values[0].string.text, "none") != 0 &&
+          job->current_file == 0)
+    banner_page = 1;
+  else if (job->job_sheets->num_values > 1 &&
+          strcasecmp(job->job_sheets->values[1].string.text, "none") != 0 &&
+          job->current_file == (job->num_files - 1))
+    banner_page = 1;
+  else
+    banner_page = 0;
 
-         cupsdAddEvent(CUPSD_EVENT_JOB_STOPPED, printer, job,
-                       "Job held due to backend errors; please consult "
-                       "the error_log file for details.");
-          break;
+  if ((options = get_options(job, banner_page, copies, sizeof(copies), title,
+                             sizeof(title))) == NULL)
+  {
+    cupsdSetJobState(job, IPP_JOB_STOPPED, CUPSD_JOB_DEFAULT,
+                    "Stopping job because the scheduler ran out of memory.");
+    cupsArrayDelete(filters);
 
-      case CUPS_BACKEND_STOP :
-         /*
-         * Stop the printer...
-         */
+    FilterLevel -= job->cost;
+    return;
+  }
 
-         cupsdStopJob(job, 0);
+ /*
+  * Build the command-line arguments for the filters.  Each filter
+  * has 6 or 7 arguments:
+  *
+  *     argv[0] = printer
+  *     argv[1] = job ID
+  *     argv[2] = username
+  *     argv[3] = title
+  *     argv[4] = # copies
+  *     argv[5] = options
+  *     argv[6] = filename (optional; normally stdin)
+  *
+  * This allows legacy printer drivers that use the old System V
+  * printing interface to be used by CUPS.
+  *
+  * For remote jobs, we send all of the files in the argument list.
+  */
 
-         job->state->values[0].integer = IPP_JOB_PENDING;
-         job->state_value              = IPP_JOB_PENDING;
+  if (job->printer->remote)
+    argv = calloc(7 + job->num_files, sizeof(char *));
+  else
+    argv = calloc(8, sizeof(char *));
 
-         job->dirty = 1;
-         cupsdMarkDirty(CUPSD_DIRTY_JOBS);
-
-         cupsdSetPrinterState(printer, IPP_PRINTER_STOPPED, 1);
-
-         cupsdAddEvent(CUPSD_EVENT_JOB_STOPPED, printer, job,
-                       "Job stopped due to backend errors; please consult "
-                       "the error_log file for details.");
-          break;
-
-      case CUPS_BACKEND_AUTH_REQUIRED :
-         cupsdStopJob(job, 0);
-
-         cupsdSetJobHoldUntil(job, "auth-info-required");
-
-         if ((attr = ippFindAttribute(job->attrs, "job-hold-until",
-                                      IPP_TAG_KEYWORD)) == NULL)
-           attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_NAME);
-
-         if (attr)
-         {
-           attr->value_tag = IPP_TAG_KEYWORD;
-           cupsdSetString(&(attr->values[0].string.text),
-                          "auth-info-required");
-         }
-
-         job->state->values[0].integer = IPP_JOB_HELD;
-         job->state_value              = IPP_JOB_HELD;
+  if (!argv)
+  {
+    cupsdLogMessage(CUPSD_LOG_DEBUG, "Unable to allocate argument array - %s",
+                    strerror(errno));
+    cupsdSetJobState(job, IPP_JOB_STOPPED, CUPSD_JOB_DEFAULT,
+                    "Stopping job because the scheduler ran out of memory.");
+    cupsArrayDelete(filters);
 
-         job->dirty = 1;
-         cupsdMarkDirty(CUPSD_DIRTY_JOBS);
+    FilterLevel -= job->cost;
+    return;
+  }
 
-         cupsdAddEvent(CUPSD_EVENT_JOB_STOPPED, printer, job,
-                       "Authentication is required for job %d.", job->id);
-          break;
-    }
+  sprintf(jobid, "%d", job->id);
 
-   /*
-    * Try printing another job...
-    */
+  argv[0] = job->printer->name;
+  argv[1] = jobid;
+  argv[2] = job->username;
+  argv[3] = title;
+  argv[4] = copies;
+  argv[5] = options;
 
-    cupsdCheckJobs();
-  }
-  else if (job->status > 0)
+  if (job->printer->remote && job->num_files > 1)
   {
-   /*
-    * Filter had errors; stop job...
-    */
-
-    cupsdLogJob(job, CUPSD_LOG_ERROR, "Job stopped due to filter errors.");
-    cupsdStopJob(job, 1);
-    job->dirty = 1;
-    cupsdMarkDirty(CUPSD_DIRTY_JOBS);
-    cupsdAddEvent(CUPSD_EVENT_JOB_STOPPED, printer, job,
-                  "Job stopped due to filter errors; please consult the "
-                 "error_log file for details.");
-    cupsdCheckJobs();
+    for (i = 0; i < job->num_files; i ++)
+    {
+      snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot,
+               job->id, i + 1);
+      argv[6 + i] = strdup(filename);
+    }
   }
   else
   {
-   /*
-    * Job printed successfully; cancel it...
-    */
-
-    if (job->current_file < job->num_files)
-    {
-     /*
-      * Start the next file in the job...
-      */
-
-      FilterLevel -= job->cost;
-      start_job(job, printer);
-    }
-    else
-    {
-     /*
-      * Close out this job...
-      */
-
-      cupsdLogJob(job, CUPSD_LOG_INFO, "Completed successfully.");
-      cupsdCancelJob(job, 0, IPP_JOB_COMPLETED);
-      cupsdCheckJobs();
-    }
+    snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot,
+             job->id, job->current_file + 1);
+    argv[6] = filename;
   }
-}
-
-
-/*
- * 'cupsdFreeAllJobs()' - Free all jobs from memory.
- */
-
-void
-cupsdFreeAllJobs(void)
-{
-  cupsd_job_t  *job;                   /* Current job */
 
+  for (i = 0; argv[i]; i ++)
+    cupsdLogJob(job, CUPSD_LOG_DEBUG, "argv[%d]=\"%s\"", i, argv[i]);
 
-  if (!Jobs)
-    return;
+ /*
+  * Create environment variable strings for the filters...
+  */
 
-  cupsdHoldSignals();
+  attr = ippFindAttribute(job->attrs, "attributes-natural-language",
+                          IPP_TAG_LANGUAGE);
 
-  cupsdStopAllJobs(1);
-  cupsdSaveAllJobs();
+#ifdef __APPLE__
+  strcpy(apple_language, "APPLE_LANGUAGE=");
+  _cupsAppleLanguage(attr->values[0].string.text,
+                    apple_language + 15, sizeof(apple_language) - 15);
+#endif /* __APPLE__ */
 
-  for (job = (cupsd_job_t *)cupsArrayFirst(Jobs);
-       job;
-       job = (cupsd_job_t *)cupsArrayNext(Jobs))
+  switch (strlen(attr->values[0].string.text))
   {
-    cupsArrayRemove(Jobs, job);
-    cupsArrayRemove(ActiveJobs, job);
-    cupsArrayRemove(PrintingJobs, job);
-
-    cupsdDeleteJob(job);
-  }
-
-  cupsdReleaseSignals();
-}
+    default :
+       /*
+        * This is an unknown or badly formatted language code; use
+       * the POSIX locale...
+       */
 
+       strcpy(lang, "LANG=C");
+       break;
 
-/*
- * 'cupsdFindJob()' - Find the specified job.
- */
+    case 2 :
+       /*
+        * Just the language code (ll)...
+       */
 
-cupsd_job_t *                          /* O - Job data */
-cupsdFindJob(int id)                   /* I - Job ID */
-{
-  cupsd_job_t  key;                    /* Search key */
+        snprintf(lang, sizeof(lang), "LANG=%s.UTF8",
+                attr->values[0].string.text);
+        break;
 
+    case 5 :
+       /*
+        * Language and country code (ll-cc)...
+       */
 
-  key.id = id;
+        snprintf(lang, sizeof(lang), "LANG=%c%c_%c%c.UTF8",
+                attr->values[0].string.text[0],
+                attr->values[0].string.text[1],
+                toupper(attr->values[0].string.text[3] & 255),
+                toupper(attr->values[0].string.text[4] & 255));
+        break;
+  }
 
-  return ((cupsd_job_t *)cupsArrayFind(Jobs, &key));
-}
+  if ((attr = ippFindAttribute(job->attrs, "document-format",
+                               IPP_TAG_MIMETYPE)) != NULL &&
+      (ptr = strstr(attr->values[0].string.text, "charset=")) != NULL)
+    snprintf(charset, sizeof(charset), "CHARSET=%s", ptr + 8);
+  else
+    strlcpy(charset, "CHARSET=utf-8", sizeof(charset));
 
+  snprintf(content_type, sizeof(content_type), "CONTENT_TYPE=%s/%s",
+           job->filetypes[job->current_file]->super,
+           job->filetypes[job->current_file]->type);
+  snprintf(device_uri, sizeof(device_uri), "DEVICE_URI=%s",
+           job->printer->device_uri);
+  snprintf(ppd, sizeof(ppd), "PPD=%s/ppd/%s.ppd", ServerRoot,
+          job->printer->name);
+  snprintf(printer_info, sizeof(printer_name), "PRINTER_INFO=%s",
+           job->printer->info ? job->printer->info : "");
+  snprintf(printer_location, sizeof(printer_name), "PRINTER_LOCATION=%s",
+           job->printer->location ? job->printer->location : "");
+  snprintf(printer_name, sizeof(printer_name), "PRINTER=%s", job->printer->name);
+  snprintf(rip_max_cache, sizeof(rip_max_cache), "RIP_MAX_CACHE=%s", RIPCache);
 
-/*
- * 'cupsdGetPrinterJobCount()' - Get the number of pending, processing,
- *                               or held jobs in a printer or class.
- */
+  envc = cupsdLoadEnv(envp, (int)(sizeof(envp) / sizeof(envp[0])));
 
-int                                    /* O - Job count */
-cupsdGetPrinterJobCount(
-    const char *dest)                  /* I - Printer or class name */
-{
-  int          count;                  /* Job count */
-  cupsd_job_t  *job;                   /* Current job */
+  envp[envc ++] = charset;
+  envp[envc ++] = lang;
+#ifdef __APPLE__
+  envp[envc ++] = apple_language;
+#endif /* __APPLE__ */
+  envp[envc ++] = ppd;
+  envp[envc ++] = rip_max_cache;
+  envp[envc ++] = content_type;
+  envp[envc ++] = device_uri;
+  envp[envc ++] = printer_info;
+  envp[envc ++] = printer_location;
+  envp[envc ++] = printer_name;
+  envp[envc ++] = banner_page ? "CUPS_FILETYPE=job-sheet" :
+                                "CUPS_FILETYPE=document";
 
+  if (!job->printer->remote && !job->printer->raw)
+  {
+    filter = (mime_filter_t *)cupsArrayLast(filters);
 
-  for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs), count = 0;
-       job;
-       job = (cupsd_job_t *)cupsArrayNext(ActiveJobs))
-    if (job->dest && !strcasecmp(job->dest, dest))
-      count ++;
+    if (job->printer->port_monitor)
+      filter = (mime_filter_t *)cupsArrayPrev(filters);
 
-  return (count);
-}
+    if (filter && filter->dst)
+    {
+      snprintf(final_content_type, sizeof(final_content_type),
+              "FINAL_CONTENT_TYPE=%s/%s",
+              filter->dst->super, filter->dst->type);
+      envp[envc ++] = final_content_type;
+    }
+  }
 
+  if (Classification && !banner_page)
+  {
+    if ((attr = ippFindAttribute(job->attrs, "job-sheets",
+                                 IPP_TAG_NAME)) == NULL)
+      snprintf(classification, sizeof(classification), "CLASSIFICATION=%s",
+               Classification);
+    else if (attr->num_values > 1 &&
+             strcmp(attr->values[1].string.text, "none") != 0)
+      snprintf(classification, sizeof(classification), "CLASSIFICATION=%s",
+               attr->values[1].string.text);
+    else
+      snprintf(classification, sizeof(classification), "CLASSIFICATION=%s",
+               attr->values[0].string.text);
 
-/*
- * 'cupsdGetUserJobCount()' - Get the number of pending, processing,
- *                            or held jobs for a user.
- */
+    envp[envc ++] = classification;
+  }
 
-int                                    /* O - Job count */
-cupsdGetUserJobCount(
-    const char *username)              /* I - Username */
-{
-  int          count;                  /* Job count */
-  cupsd_job_t  *job;                   /* Current job */
+  if (job->dtype & (CUPS_PRINTER_CLASS | CUPS_PRINTER_IMPLICIT))
+  {
+    snprintf(class_name, sizeof(class_name), "CLASS=%s", job->dest);
+    envp[envc ++] = class_name;
+  }
 
+  if (job->auth_username)
+    envp[envc ++] = job->auth_username;
+  if (job->auth_domain)
+    envp[envc ++] = job->auth_domain;
+  if (job->auth_password)
+    envp[envc ++] = job->auth_password;
 
-  for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs), count = 0;
-       job;
-       job = (cupsd_job_t *)cupsArrayNext(ActiveJobs))
-    if (!strcasecmp(job->username, username))
-      count ++;
+#ifdef HAVE_GSSAPI
+  if (job->ccname)
+    envp[envc ++] = job->ccname;
+#endif /* HAVE_GSSAPI */
 
-  return (count);
-}
+  envp[envc] = NULL;
 
+  for (i = 0; i < envc; i ++)
+    if (!strncmp(envp[i], "AUTH_", 5))
+      cupsdLogJob(job, CUPSD_LOG_DEBUG, "envp[%d]=\"AUTH_%c****\"", i,
+                  envp[i][5]);
+    else if (strncmp(envp[i], "DEVICE_URI=", 11))
+      cupsdLogJob(job, CUPSD_LOG_DEBUG, "envp[%d]=\"%s\"", i, envp[i]);
+    else
+      cupsdLogJob(job, CUPSD_LOG_DEBUG, "envp[%d]=\"DEVICE_URI=%s\"", i,
+                  job->printer->sanitized_device_uri);
 
-/*
- * 'cupsdHoldJob()' - Hold the specified job.
- */
+  if (job->printer->remote)
+    job->current_file = job->num_files;
+  else
+    job->current_file ++;
 
-void
-cupsdHoldJob(cupsd_job_t *job)         /* I - Job data */
-{
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdHoldJob: id = %d", job->id);
+ /*
+  * Now create processes for all of the filters...
+  */
 
-  if (job->state_value == IPP_JOB_PROCESSING)
-    cupsdStopJob(job, 0);
-  else
-    cupsdLoadJob(job);
+  filterfds[0][0] = -1;
+  filterfds[0][1] = -1;
+  filterfds[1][0] = -1;
+  filterfds[1][1] = -1;
 
-  DEBUG_puts("cupsdHoldJob: setting state to held...");
+  memset(job->filters, 0, sizeof(job->filters));
 
-  job->state->values[0].integer = IPP_JOB_HELD;
-  job->state_value              = IPP_JOB_HELD;
-  job->current_file             = 0;
+  for (i = 0, slot = 0, filter = (mime_filter_t *)cupsArrayFirst(filters);
+       filter;
+       i ++, filter = (mime_filter_t *)cupsArrayNext(filters))
+  {
+    if (filter->filter[0] != '/')
+      snprintf(command, sizeof(command), "%s/filter/%s", ServerBin,
+               filter->filter);
+    else
+      strlcpy(command, filter->filter, sizeof(command));
 
-  job->dirty = 1;
-  cupsdMarkDirty(CUPSD_DIRTY_JOBS);
-}
+    if (i < (cupsArrayCount(filters) - 1))
+    {
+      if (cupsdOpenPipe(filterfds[slot]))
+      {
+        abort_message = "Stopping job because the scheduler could not create "
+                       "the filter pipes.";
 
+        goto abort_job;
+      }
+    }
+    else
+    {
+      if (job->current_file == 1)
+      {
+       if (strncmp(job->printer->device_uri, "file:", 5) != 0)
+       {
+         if (cupsdOpenPipe(job->print_pipes))
+         {
+           abort_message = "Stopping job because the scheduler could not "
+                           "create the backend pipes.";
 
-/*
- * 'cupsdLoadAllJobs()' - Load all jobs from disk.
- */
+            goto abort_job;
+         }
+       }
+       else
+       {
+         job->print_pipes[0] = -1;
+         if (!strcmp(job->printer->device_uri, "file:/dev/null") ||
+             !strcmp(job->printer->device_uri, "file:///dev/null"))
+           job->print_pipes[1] = -1;
+         else
+         {
+           if (!strncmp(job->printer->device_uri, "file:/dev/", 10))
+             job->print_pipes[1] = open(job->printer->device_uri + 5,
+                                        O_WRONLY | O_EXCL);
+           else if (!strncmp(job->printer->device_uri, "file:///dev/", 12))
+             job->print_pipes[1] = open(job->printer->device_uri + 7,
+                                        O_WRONLY | O_EXCL);
+           else if (!strncmp(job->printer->device_uri, "file:///", 8))
+             job->print_pipes[1] = open(job->printer->device_uri + 7,
+                                        O_WRONLY | O_CREAT | O_TRUNC, 0600);
+           else
+             job->print_pipes[1] = open(job->printer->device_uri + 5,
+                                        O_WRONLY | O_CREAT | O_TRUNC, 0600);
 
-void
-cupsdLoadAllJobs(void)
-{
-  char         filename[1024];         /* Full filename of job.cache file */
-  struct stat  fileinfo,               /* Information on job.cache file */
-               dirinfo;                /* Information on RequestRoot dir */
+           if (job->print_pipes[1] < 0)
+           {
+             abort_message = "Stopping job because the scheduler could not "
+                             "open the output file.";
 
+              goto abort_job;
+           }
 
+           fcntl(job->print_pipes[1], F_SETFD,
+                 fcntl(job->print_pipes[1], F_GETFD) | FD_CLOEXEC);
+          }
+       }
+      }
 
- /*
-  * Create the job arrays as needed...
-  */
+      filterfds[slot][0] = job->print_pipes[0];
+      filterfds[slot][1] = job->print_pipes[1];
+    }
 
-  if (!Jobs)
-    Jobs = cupsArrayNew(compare_jobs, NULL);
+    pid = cupsdStartProcess(command, argv, envp, filterfds[!slot][0],
+                            filterfds[slot][1], job->status_pipes[1],
+                           job->back_pipes[0], job->side_pipes[0], 0,
+                           job->profile, job->id, job->filters + i);
 
-  if (!ActiveJobs)
-    ActiveJobs = cupsArrayNew(compare_active_jobs, NULL);
+    cupsdClosePipe(filterfds[!slot]);
 
-  if (!PrintingJobs)
-    PrintingJobs = cupsArrayNew(compare_jobs, NULL);
+    if (pid == 0)
+    {
+      cupsdLogJob(job, CUPSD_LOG_ERROR, "Unable to start filter \"%s\" - %s.",
+                 filter->filter, strerror(errno));
 
- /*
-  * See whether the job.cache file is older than the RequestRoot directory...
-  */
+      abort_message = "Stopped job because the scheduler could not execute a "
+                     "filter.";
 
-  snprintf(filename, sizeof(filename), "%s/job.cache", CacheDir);
+      goto abort_job;
+    }
 
-  if (stat(filename, &fileinfo))
-  {
-    fileinfo.st_mtime = 0;
+    cupsdLogJob(job, CUPSD_LOG_INFO, "Started filter %s (PID %d)", command,
+                pid);
 
-    if (errno != ENOENT)
-      cupsdLogMessage(CUPSD_LOG_ERROR,
-                      "Unable to get file information for \"%s\" - %s",
-                     filename, strerror(errno));
+    argv[6] = NULL;
+    slot    = !slot;
   }
 
-  if (stat(RequestRoot, &dirinfo))
-  {
-    dirinfo.st_mtime = 0;
-
-    if (errno != ENOENT)
-      cupsdLogMessage(CUPSD_LOG_ERROR,
-                      "Unable to get directory information for \"%s\" - %s",
-                     RequestRoot, strerror(errno));
-  }
+  cupsArrayDelete(filters);
+  filters = NULL;
 
  /*
-  * Load the most recent source for job data...
+  * Finally, pipe the final output into a backend process if needed...
   */
 
-  if (dirinfo.st_mtime > fileinfo.st_mtime)
+  if (strncmp(job->printer->device_uri, "file:", 5) != 0)
   {
-    load_request_root();
+    if (job->current_file == 1 || job->printer->remote)
+    {
+      sscanf(job->printer->device_uri, "%254[^:]", scheme);
+      snprintf(command, sizeof(command), "%s/backend/%s", ServerBin, scheme);
 
-    load_next_job_id(filename);
-  }
-  else
-    load_job_cache(filename);
+     /*
+      * See if the backend needs to run as root...
+      */
 
- /*
-  * Clean out old jobs as needed...
-  */
+      if (RunUser)
+        backroot = 0;
+      else if (stat(command, &backinfo))
+       backroot = 0;
+      else
+        backroot = !(backinfo.st_mode & (S_IRWXG | S_IRWXO));
 
-  if (MaxJobs > 0 && cupsArrayCount(Jobs) >= MaxJobs)
-    cupsdCleanJobs();
-}
+      argv[0] = job->printer->sanitized_device_uri;
 
+      filterfds[slot][0] = -1;
+      filterfds[slot][1] = -1;
 
-/*
- * 'cupsdLoadJob()' - Load a single job...
- */
+      pid = cupsdStartProcess(command, argv, envp, filterfds[!slot][0],
+                             filterfds[slot][1], job->status_pipes[1],
+                             job->back_pipes[1], job->side_pipes[1],
+                             backroot, job->profile, job->id, &(job->backend));
 
-int                                    /* O - 1 on success, 0 on failure */
-cupsdLoadJob(cupsd_job_t *job)         /* I - Job */
-{
-  char                 jobfile[1024];  /* Job filename */
-  cups_file_t          *fp;            /* Job file */
-  int                  fileid;         /* Current file ID */
-  ipp_attribute_t      *attr;          /* Job attribute */
-  const char           *dest;          /* Destination name */
-  cupsd_printer_t      *destptr;       /* Pointer to destination */
-  mime_type_t          **filetypes;    /* New filetypes array */
-  int                  *compressions;  /* New compressions array */
+      if (pid == 0)
+      {
+       abort_message = "Stopping job because the sheduler could not execute "
+                       "the backend.";
+
+        goto abort_job;
+      }
+      else
+      {
+       cupsdLogJob(job, CUPSD_LOG_INFO, "Started backend %s (PID %d)",
+                   command, pid);
+      }
+    }
 
+    if (job->current_file == job->num_files)
+    {
+      cupsdClosePipe(job->print_pipes);
+      cupsdClosePipe(job->back_pipes);
+      cupsdClosePipe(job->side_pipes);
 
-  if (job->attrs)
+      close(job->status_pipes[1]);
+      job->status_pipes[1] = -1;
+    }
+  }
+  else
   {
-    if (job->state_value > IPP_JOB_STOPPED)
-      job->access_time = time(NULL);
+    filterfds[slot][0] = -1;
+    filterfds[slot][1] = -1;
 
-    return (1);
+    if (job->current_file == job->num_files)
+    {
+      cupsdClosePipe(job->print_pipes);
+
+      close(job->status_pipes[1]);
+      job->status_pipes[1] = -1;
+    }
   }
 
-  if ((job->attrs = ippNew()) == NULL)
+  cupsdClosePipe(filterfds[slot]);
+
+  if (job->printer->remote && job->num_files > 1)
   {
-    cupsdLogMessage(CUPSD_LOG_ERROR,
-                    "[Job %d] Ran out of memory for job attributes!", job->id);
-    return (0);
+    for (i = 0; i < job->num_files; i ++)
+      free(argv[i + 6]);
   }
 
- /*
-  * Load job attributes...
-  */
+  free(argv);
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG, "[Job %d] Loading attributes...", job->id);
+  cupsdAddSelect(job->status_buffer->fd, (cupsd_selfunc_t)update_job, NULL,
+                 job);
 
-  snprintf(jobfile, sizeof(jobfile), "%s/c%05d", RequestRoot, job->id);
-  if ((fp = cupsFileOpen(jobfile, "r")) == NULL)
-  {
-    cupsdLogMessage(CUPSD_LOG_ERROR,
-                   "[Job %d] Unable to open job control file \"%s\" - %s!",
-                   job->id, jobfile, strerror(errno));
-    goto error;
-  }
+  cupsdAddEvent(CUPSD_EVENT_JOB_STATE, job->printer, job, "Job #%d started.",
+                job->id);
 
-  if (ippReadIO(fp, (ipp_iocb_t)cupsFileRead, 1, NULL, job->attrs) != IPP_DATA)
-  {
-    cupsdLogMessage(CUPSD_LOG_ERROR,
-                   "[Job %d] Unable to read job control file \"%s\"!", job->id,
-                   jobfile);
-    cupsFileClose(fp);
-    goto error;
-  }
+  return;
 
-  cupsFileClose(fp);
 
  /*
-  * Copy attribute data to the job object...
+  * If we get here, we need to abort the current job and close out all
+  * files and pipes...
   */
 
-  if (!ippFindAttribute(job->attrs, "time-at-creation", IPP_TAG_INTEGER))
-  {
-    cupsdLogMessage(CUPSD_LOG_ERROR,
-                   "[Job %d] Missing or bad time-at-creation attribute in "
-                   "control file!", job->id);
-    goto error;
-  }
+  abort_job:
 
-  if ((job->state = ippFindAttribute(job->attrs, "job-state",
-                                     IPP_TAG_ENUM)) == NULL)
+  for (slot = 0; slot < 2; slot ++)
+    cupsdClosePipe(filterfds[slot]);
+
+  cupsdClosePipe(job->status_pipes);
+  cupsdStatBufDelete(job->status_buffer);
+  job->status_buffer = NULL;
+
+  cupsArrayDelete(filters);
+
+  if (job->printer->remote && job->num_files > 1)
   {
-    cupsdLogMessage(CUPSD_LOG_ERROR,
-                   "[Job %d] Missing or bad job-state attribute in control "
-                   "file!", job->id);
-    goto error;
+    for (i = 0; i < job->num_files; i ++)
+      free(argv[i + 6]);
   }
 
-  job->state_value = (ipp_jstate_t)job->state->values[0].integer;
+  free(argv);
 
-  if (!job->dest)
-  {
-    if ((attr = ippFindAttribute(job->attrs, "job-printer-uri",
-                                 IPP_TAG_URI)) == NULL)
-    {
-      cupsdLogMessage(CUPSD_LOG_ERROR,
-                     "[Job %d] No job-printer-uri attribute in control file!",
-                     job->id);
-      goto error;
-    }
-
-    if ((dest = cupsdValidateDest(attr->values[0].string.text, &(job->dtype),
-                                  &destptr)) == NULL)
-    {
-      cupsdLogMessage(CUPSD_LOG_ERROR,
-                     "[Job %d] Unable to queue job for destination \"%s\"!",
-                     job->id, attr->values[0].string.text);
-      goto error;
-    }
-
-    cupsdSetString(&job->dest, dest);
-  }
-  else if ((destptr = cupsdFindDest(job->dest)) == NULL)
-  {
-    cupsdLogMessage(CUPSD_LOG_ERROR,
-                   "[Job %d] Unable to queue job for destination \"%s\"!",
-                   job->id, job->dest);
-    goto error;
-  }
-
-  job->sheets     = ippFindAttribute(job->attrs, "job-media-sheets-completed",
-                                     IPP_TAG_INTEGER);
-  job->job_sheets = ippFindAttribute(job->attrs, "job-sheets", IPP_TAG_NAME);
-
-  if (!job->priority)
-  {
-    if ((attr = ippFindAttribute(job->attrs, "job-priority",
-                                IPP_TAG_INTEGER)) == NULL)
-    {
-      cupsdLogMessage(CUPSD_LOG_ERROR,
-                     "[Job %d] Missing or bad job-priority attribute in "
-                     "control file!", job->id);
-      goto error;
-    }
-
-    job->priority = attr->values[0].integer;
-  }
-
-  if (!job->username)
-  {
-    if ((attr = ippFindAttribute(job->attrs, "job-originating-user-name",
-                                IPP_TAG_NAME)) == NULL)
-    {
-      cupsdLogMessage(CUPSD_LOG_ERROR,
-                     "[Job %d] Missing or bad job-originating-user-name "
-                     "attribute in control file!", job->id);
-      goto error;
-    }
-
-    cupsdSetString(&job->username, attr->values[0].string.text);
-  }
+  cupsdSetJobState(job, IPP_JOB_STOPPED, CUPSD_JOB_DEFAULT, "%s",
+                   abort_message);
+}
 
- /*
-  * Set the job hold-until time and state...
-  */
 
-  if (job->state_value == IPP_JOB_HELD)
-  {
-    if ((attr = ippFindAttribute(job->attrs, "job-hold-until",
-                                IPP_TAG_KEYWORD)) == NULL)
-      attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_NAME);
+/*
+ * 'cupsdDeleteJob()' - Free all memory used by a job.
+ */
 
-    if (attr)
-      cupsdSetJobHoldUntil(job, attr->values[0].string.text);
-    else
-    {
-      job->state->values[0].integer = IPP_JOB_PENDING;
-      job->state_value              = IPP_JOB_PENDING;
-    }
-  }
-  else if (job->state_value == IPP_JOB_PROCESSING)
-  {
-    job->state->values[0].integer = IPP_JOB_PENDING;
-    job->state_value              = IPP_JOB_PENDING;
-  }
+void
+cupsdDeleteJob(cupsd_job_t       *job, /* I - Job */
+               cupsd_jobaction_t action)/* I - Action */
+{
+  if (job->printer)
+    finalize_job(job);
 
-  if (!job->num_files)
+  if (action == CUPSD_JOB_PURGE)
   {
    /*
-    * Find all the d##### files...
+    * Remove the job info file...
     */
 
-    for (fileid = 1; fileid < 10000; fileid ++)
-    {
-      snprintf(jobfile, sizeof(jobfile), "%s/d%05d-%03d", RequestRoot,
-               job->id, fileid);
-
-      if (access(jobfile, 0))
-        break;
-
-      cupsdLogMessage(CUPSD_LOG_DEBUG,
-                     "[Job %d] Auto-typing document file \"%s\"...", job->id,
-                     jobfile);
-
-      if (fileid > job->num_files)
-      {
-        if (job->num_files == 0)
-       {
-         compressions = (int *)calloc(fileid, sizeof(int));
-         filetypes    = (mime_type_t **)calloc(fileid, sizeof(mime_type_t *));
-       }
-       else
-       {
-         compressions = (int *)realloc(job->compressions,
-                                       sizeof(int) * fileid);
-         filetypes    = (mime_type_t **)realloc(job->filetypes,
-                                                sizeof(mime_type_t *) *
-                                                fileid);
-        }
-
-        if (!compressions || !filetypes)
-       {
-          cupsdLogMessage(CUPSD_LOG_ERROR,
-                         "[Job %d] Ran out of memory for job file types!",
-                         job->id);
-         return (1);
-       }
-
-        job->compressions = compressions;
-        job->filetypes    = filetypes;
-       job->num_files    = fileid;
-      }
-
-      job->filetypes[fileid - 1] = mimeFileType(MimeDatabase, jobfile, NULL,
-                                                job->compressions + fileid - 1);
+    char       filename[1024];         /* Job filename */
 
-      if (!job->filetypes[fileid - 1])
-        job->filetypes[fileid - 1] = mimeType(MimeDatabase, "application",
-                                             "vnd.cups-raw");
-    }
+    snprintf(filename, sizeof(filename), "%s/c%05d", RequestRoot,
+            job->id);
+    unlink(filename);
   }
 
+  cupsdClearString(&job->username);
+  cupsdClearString(&job->dest);
+  cupsdClearString(&job->auth_username);
+  cupsdClearString(&job->auth_domain);
+  cupsdClearString(&job->auth_password);
+
+#ifdef HAVE_GSSAPI
  /*
-  * Load authentication information as needed...
+  * Destroy the credential cache and clear the KRB5CCNAME env var string.
   */
 
-  if (job->state_value < IPP_JOB_STOPPED)
+  if (job->ccache)
   {
-    snprintf(jobfile, sizeof(jobfile), "%s/a%05d", RequestRoot, job->id);
-
-    cupsdClearString(&job->auth_username);
-    cupsdClearString(&job->auth_domain);
-    cupsdClearString(&job->auth_password);
-
-    if ((fp = cupsFileOpen(jobfile, "r")) != NULL)
-    {
-      int      i,                      /* Looping var */
-               bytes;                  /* Size of auth data */
-      char     line[255],              /* Line from file */
-               data[255];              /* Decoded data */
-
+    krb5_cc_destroy(KerberosContext, job->ccache);
+    job->ccache = NULL;
+  }
 
-      for (i = 0;
-           i < destptr->num_auth_info_required &&
-              cupsFileGets(fp, line, sizeof(line));
-          i ++)
-      {
-        bytes = sizeof(data);
-        httpDecode64_2(data, &bytes, line);
+  cupsdClearString(&job->ccname);
+#endif /* HAVE_GSSAPI */
 
-       if (!strcmp(destptr->auth_info_required[i], "username"))
-         cupsdSetStringf(&job->auth_username, "AUTH_USERNAME=%s", data);
-       else if (!strcmp(destptr->auth_info_required[i], "domain"))
-         cupsdSetStringf(&job->auth_domain, "AUTH_DOMAIN=%s", data);
-       else if (!strcmp(destptr->auth_info_required[i], "password"))
-         cupsdSetStringf(&job->auth_password, "AUTH_PASSWORD=%s", data);
-      }
+  if (job->num_files > 0)
+  {
+    free(job->compressions);
+    free(job->filetypes);
 
-      cupsFileClose(fp);
-    }
+    job->num_files = 0;
   }
 
-  job->access_time = time(NULL);
-  return (1);
-
- /*
-  * If we get here then something bad happened...
-  */
+  unload_job(job);
 
-  error:
+  cupsArrayRemove(Jobs, job);
+  cupsArrayRemove(ActiveJobs, job);
+  cupsArrayRemove(PrintingJobs, job);
 
-  ippDelete(job->attrs);
-  job->attrs = NULL;
-  unlink(jobfile);
-  return (0);
+  free(job);
 }
 
 
 /*
- * 'cupsdMoveJob()' - Move the specified job to a different destination.
+ * 'cupsdFreeAllJobs()' - Free all jobs from memory.
  */
 
 void
-cupsdMoveJob(cupsd_job_t     *job,     /* I - Job */
-             cupsd_printer_t *p)       /* I - Destination printer or class */
+cupsdFreeAllJobs(void)
 {
-  ipp_attribute_t      *attr;          /* job-printer-uri attribute */
-  const char           *olddest;       /* Old destination */
-  cupsd_printer_t      *oldp;          /* Old pointer */
-
+  cupsd_job_t  *job;                   /* Current job */
 
- /*
-  * Don't move completed jobs...
-  */
 
-  if (job->state_value > IPP_JOB_STOPPED)
+  if (!Jobs)
     return;
 
- /*
-  * Get the old destination...
-  */
+  cupsdHoldSignals();
 
-  olddest = job->dest;
+  cupsdStopAllJobs(1);
+  cupsdSaveAllJobs();
 
-  if (job->printer)
-    oldp = job->printer;
-  else
-    oldp = cupsdFindDest(olddest);
+  for (job = (cupsd_job_t *)cupsArrayFirst(Jobs);
+       job;
+       job = (cupsd_job_t *)cupsArrayNext(Jobs))
+    cupsdDeleteJob(job, CUPSD_JOB_DEFAULT);
 
- /*
-  * Change the destination information...
-  */
+  cupsdReleaseSignals();
+}
 
-  if (job->state_value == IPP_JOB_PROCESSING)
-    cupsdStopJob(job, 0);
-  else
-    cupsdLoadJob(job);
 
-  cupsdAddEvent(CUPSD_EVENT_JOB_STOPPED, oldp, job,
-                "Job #%d moved from %s to %s.", job->id, olddest,
-               p->name);
+/*
+ * 'cupsdFindJob()' - Find the specified job.
+ */
 
-  cupsdSetString(&job->dest, p->name);
-  job->dtype = p->type & (CUPS_PRINTER_CLASS | CUPS_PRINTER_REMOTE |
-                          CUPS_PRINTER_IMPLICIT);
+cupsd_job_t *                          /* O - Job data */
+cupsdFindJob(int id)                   /* I - Job ID */
+{
+  cupsd_job_t  key;                    /* Search key */
 
-  if ((attr = ippFindAttribute(job->attrs, "job-printer-uri",
-                               IPP_TAG_URI)) != NULL)
-    cupsdSetString(&(attr->values[0].string.text), p->uri);
 
-  cupsdAddEvent(CUPSD_EVENT_JOB_STOPPED, p, job,
-                "Job #%d moved from %s to %s.", job->id, olddest,
-               p->name);
+  key.id = id;
 
-  job->dirty = 1;
-  cupsdMarkDirty(CUPSD_DIRTY_JOBS);
+  return ((cupsd_job_t *)cupsArrayFind(Jobs, &key));
 }
 
 
 /*
- * 'cupsdReleaseJob()' - Release the specified job.
+ * 'cupsdGetPrinterJobCount()' - Get the number of pending, processing,
+ *                               or held jobs in a printer or class.
  */
 
-void
-cupsdReleaseJob(cupsd_job_t *job)      /* I - Job */
+int                                    /* O - Job count */
+cupsdGetPrinterJobCount(
+    const char *dest)                  /* I - Printer or class name */
 {
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdReleaseJob: id = %d", job->id);
-
-  if (job->state_value == IPP_JOB_HELD)
-  {
-   /*
-    * Add trailing banner as needed...
-    */
+  int          count;                  /* Job count */
+  cupsd_job_t  *job;                   /* Current job */
 
-    if (job->pending_timeout)
-      cupsdTimeoutJob(job);
 
-    DEBUG_puts("cupsdReleaseJob: setting state to pending...");
+  for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs), count = 0;
+       job;
+       job = (cupsd_job_t *)cupsArrayNext(ActiveJobs))
+    if (job->dest && !strcasecmp(job->dest, dest))
+      count ++;
 
-    job->state->values[0].integer = IPP_JOB_PENDING;
-    job->state_value              = IPP_JOB_PENDING;
-    job->dirty = 1;
-    cupsdMarkDirty(CUPSD_DIRTY_JOBS);
-  }
+  return (count);
 }
 
 
 /*
- * 'cupsdRestartJob()' - Restart the specified job.
+ * 'cupsdGetUserJobCount()' - Get the number of pending, processing,
+ *                            or held jobs for a user.
  */
 
-void
-cupsdRestartJob(cupsd_job_t *job)      /* I - Job */
+int                                    /* O - Job count */
+cupsdGetUserJobCount(
+    const char *username)              /* I - Username */
 {
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdRestartJob: id = %d", job->id);
-
-  if (job->state_value == IPP_JOB_STOPPED || job->num_files)
-  {
-    ipp_jstate_t       old_state;      /* Old job state */
-
-
-    cupsdLoadJob(job);
-
-    old_state = job->state_value;
+  int          count;                  /* Job count */
+  cupsd_job_t  *job;                   /* Current job */
 
-    job->tries = 0;
-    job->state->values[0].integer = IPP_JOB_PENDING;
-    job->state_value              = IPP_JOB_PENDING;
 
-    job->dirty = 1;
-    cupsdMarkDirty(CUPSD_DIRTY_JOBS);
+  for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs), count = 0;
+       job;
+       job = (cupsd_job_t *)cupsArrayNext(ActiveJobs))
+    if (!strcasecmp(job->username, username))
+      count ++;
 
-    if (old_state > IPP_JOB_STOPPED)
-      cupsArrayAdd(ActiveJobs, job);
-  }
+  return (count);
 }
 
 
 /*
- * 'cupsdSaveAllJobs()' - Save a summary of all jobs to disk.
+ * 'cupsdLoadAllJobs()' - Load all jobs from disk.
  */
 
 void
-cupsdSaveAllJobs(void)
+cupsdLoadAllJobs(void)
 {
-  int          i;                      /* Looping var */
-  cups_file_t  *fp;                    /* Job cache file */
-  char         temp[1024];             /* Temporary string */
-  cupsd_job_t  *job;                   /* Current job */
-  time_t       curtime;                /* Current time */
-  struct tm    *curdate;               /* Current date */
-
+  char         filename[1024];         /* Full filename of job.cache file */
+  struct stat  fileinfo,               /* Information on job.cache file */
+               dirinfo;                /* Information on RequestRoot dir */
 
-  snprintf(temp, sizeof(temp), "%s/job.cache", CacheDir);
-  if ((fp = cupsFileOpen(temp, "w")) == NULL)
-  {
-    cupsdLogMessage(CUPSD_LOG_ERROR,
-                    "Unable to create job cache file \"%s\" - %s",
-                    temp, strerror(errno));
-    return;
-  }
 
-  cupsdLogMessage(CUPSD_LOG_INFO, "Saving job cache file \"%s\"...", temp);
 
  /*
-  * Restrict access to the file...
+  * Create the job arrays as needed...
   */
 
-  fchown(cupsFileNumber(fp), getuid(), Group);
-  fchmod(cupsFileNumber(fp), ConfigFilePerm);
+  if (!Jobs)
+    Jobs = cupsArrayNew(compare_jobs, NULL);
+
+  if (!ActiveJobs)
+    ActiveJobs = cupsArrayNew(compare_active_jobs, NULL);
+
+  if (!PrintingJobs)
+    PrintingJobs = cupsArrayNew(compare_jobs, NULL);
 
  /*
-  * Write a small header to the file...
+  * See whether the job.cache file is older than the RequestRoot directory...
   */
 
-  curtime = time(NULL);
-  curdate = localtime(&curtime);
-  strftime(temp, sizeof(temp) - 1, "%Y-%m-%d %H:%M", curdate);
+  snprintf(filename, sizeof(filename), "%s/job.cache", CacheDir);
 
-  cupsFilePuts(fp, "# Job cache file for " CUPS_SVERSION "\n");
-  cupsFilePrintf(fp, "# Written by cupsd on %s\n", temp);
-  cupsFilePrintf(fp, "NextJobId %d\n", NextJobId);
+  if (stat(filename, &fileinfo))
+  {
+    fileinfo.st_mtime = 0;
+
+    if (errno != ENOENT)
+      cupsdLogMessage(CUPSD_LOG_ERROR,
+                      "Unable to get file information for \"%s\" - %s",
+                     filename, strerror(errno));
+  }
+
+  if (stat(RequestRoot, &dirinfo))
+  {
+    dirinfo.st_mtime = 0;
+
+    if (errno != ENOENT)
+      cupsdLogMessage(CUPSD_LOG_ERROR,
+                      "Unable to get directory information for \"%s\" - %s",
+                     RequestRoot, strerror(errno));
+  }
 
  /*
-  * Write each job known to the system...
+  * Load the most recent source for job data...
   */
 
-  for (job = (cupsd_job_t *)cupsArrayFirst(Jobs);
-       job;
-       job = (cupsd_job_t *)cupsArrayNext(Jobs))
+  if (dirinfo.st_mtime > fileinfo.st_mtime)
   {
-    cupsFilePrintf(fp, "<Job %d>\n", job->id);
-    cupsFilePrintf(fp, "State %d\n", job->state_value);
-    cupsFilePrintf(fp, "Priority %d\n", job->priority);
-    cupsFilePrintf(fp, "Username %s\n", job->username);
-    cupsFilePrintf(fp, "Destination %s\n", job->dest);
-    cupsFilePrintf(fp, "DestType %d\n", job->dtype);
-    cupsFilePrintf(fp, "NumFiles %d\n", job->num_files);
-    for (i = 0; i < job->num_files; i ++)
-      cupsFilePrintf(fp, "File %d %s/%s %d\n", i + 1, job->filetypes[i]->super,
-                     job->filetypes[i]->type, job->compressions[i]);
-    cupsFilePuts(fp, "</Job>\n");
+    load_request_root();
+
+    load_next_job_id(filename);
   }
+  else
+    load_job_cache(filename);
 
-  cupsFileClose(fp);
+ /*
+  * Clean out old jobs as needed...
+  */
+
+  if (MaxJobs > 0 && cupsArrayCount(Jobs) >= MaxJobs)
+    cupsdCleanJobs();
 }
 
 
 /*
- * 'cupsdSaveJob()' - Save a job to disk.
+ * 'cupsdLoadJob()' - Load a single job.
  */
 
-void
-cupsdSaveJob(cupsd_job_t *job)         /* I - Job */
+int                                    /* O - 1 on success, 0 on failure */
+cupsdLoadJob(cupsd_job_t *job)         /* I - Job */
 {
-  char         filename[1024];         /* Job control filename */
-  cups_file_t  *fp;                    /* Job file */
+  char                 jobfile[1024];  /* Job filename */
+  cups_file_t          *fp;            /* Job file */
+  int                  fileid;         /* Current file ID */
+  ipp_attribute_t      *attr;          /* Job attribute */
+  const char           *dest;          /* Destination name */
+  cupsd_printer_t      *destptr;       /* Pointer to destination */
+  mime_type_t          **filetypes;    /* New filetypes array */
+  int                  *compressions;  /* New compressions array */
 
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdSaveJob(job=%p(%d)): job->attrs=%p",
-                  job, job->id, job->attrs);
+  if (job->attrs)
+  {
+    if (job->state_value > IPP_JOB_STOPPED)
+      job->access_time = time(NULL);
 
-  snprintf(filename, sizeof(filename), "%s/c%05d", RequestRoot, job->id);
+    return (1);
+  }
 
-  if ((fp = cupsFileOpen(filename, "w")) == NULL)
+  if ((job->attrs = ippNew()) == NULL)
   {
-    cupsdLogMessage(CUPSD_LOG_ERROR,
-                   "[Job %d] Unable to create job control file \"%s\" - %s.",
-                   job->id, filename, strerror(errno));
-    return;
+    cupsdLogJob(job, CUPSD_LOG_ERROR, "Ran out of memory for job attributes!");
+    return (0);
   }
 
-  fchmod(cupsFileNumber(fp), 0600);
-  fchown(cupsFileNumber(fp), RunUser, Group);
+ /*
+  * Load job attributes...
+  */
 
-  job->attrs->state = IPP_IDLE;
+  cupsdLogMessage(CUPSD_LOG_DEBUG, "[Job %d] Loading attributes...", job->id);
 
-  if (ippWriteIO(fp, (ipp_iocb_t)cupsFileWrite, 1, NULL,
-                 job->attrs) != IPP_DATA)
+  snprintf(jobfile, sizeof(jobfile), "%s/c%05d", RequestRoot, job->id);
+  if ((fp = cupsFileOpen(jobfile, "r")) == NULL)
+  {
     cupsdLogMessage(CUPSD_LOG_ERROR,
-                    "[Job %d] Unable to write job control file!", job->id);
-
-  cupsFileClose(fp);
-
-  job->dirty = 0;
-}
-
-
-/*
- * 'cupsdSetJobHoldUntil()' - Set the hold time for a job...
- */
-
-void
-cupsdSetJobHoldUntil(cupsd_job_t *job, /* I - Job */
-                     const char  *when)        /* I - When to resume */
-{
-  time_t       curtime;                /* Current time */
-  struct tm    *curdate;               /* Current date */
-  int          hour;                   /* Hold hour */
-  int          minute;                 /* Hold minute */
-  int          second;                 /* Hold second */
+                   "[Job %d] Unable to open job control file \"%s\" - %s!",
+                   job->id, jobfile, strerror(errno));
+    goto error;
+  }
 
+  if (ippReadIO(fp, (ipp_iocb_t)cupsFileRead, 1, NULL, job->attrs) != IPP_DATA)
+  {
+    cupsdLogMessage(CUPSD_LOG_ERROR,
+                   "[Job %d] Unable to read job control file \"%s\"!", job->id,
+                   jobfile);
+    cupsFileClose(fp);
+    goto error;
+  }
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdSetJobHoldUntil(%d, \"%s\")",
-                  job->id, when);
+  cupsFileClose(fp);
 
-  second = 0;
+ /*
+  * Copy attribute data to the job object...
+  */
 
-  if (!strcmp(when, "indefinite") || !strcmp(when, "auth-info-required"))
+  if (!ippFindAttribute(job->attrs, "time-at-creation", IPP_TAG_INTEGER))
   {
-   /*
-    * Hold indefinitely...
-    */
-
-    job->hold_until = 0;
+    cupsdLogMessage(CUPSD_LOG_ERROR,
+                   "[Job %d] Missing or bad time-at-creation attribute in "
+                   "control file!", job->id);
+    goto error;
   }
-  else if (!strcmp(when, "day-time"))
+
+  if ((job->state = ippFindAttribute(job->attrs, "job-state",
+                                     IPP_TAG_ENUM)) == NULL)
   {
-   /*
-    * Hold to 6am the next morning unless local time is < 6pm.
-    */
+    cupsdLogMessage(CUPSD_LOG_ERROR,
+                   "[Job %d] Missing or bad job-state attribute in control "
+                   "file!", job->id);
+    goto error;
+  }
 
-    curtime = time(NULL);
-    curdate = localtime(&curtime);
+  job->state_value = (ipp_jstate_t)job->state->values[0].integer;
 
-    if (curdate->tm_hour < 18)
-      job->hold_until = curtime;
-    else
-      job->hold_until = curtime +
-                        ((29 - curdate->tm_hour) * 60 + 59 -
-                        curdate->tm_min) * 60 + 60 - curdate->tm_sec;
-  }
-  else if (!strcmp(when, "evening") || !strcmp(when, "night"))
+  if (!job->dest)
   {
-   /*
-    * Hold to 6pm unless local time is > 6pm or < 6am.
-    */
+    if ((attr = ippFindAttribute(job->attrs, "job-printer-uri",
+                                 IPP_TAG_URI)) == NULL)
+    {
+      cupsdLogMessage(CUPSD_LOG_ERROR,
+                     "[Job %d] No job-printer-uri attribute in control file!",
+                     job->id);
+      goto error;
+    }
 
-    curtime = time(NULL);
-    curdate = localtime(&curtime);
+    if ((dest = cupsdValidateDest(attr->values[0].string.text, &(job->dtype),
+                                  &destptr)) == NULL)
+    {
+      cupsdLogMessage(CUPSD_LOG_ERROR,
+                     "[Job %d] Unable to queue job for destination \"%s\"!",
+                     job->id, attr->values[0].string.text);
+      goto error;
+    }
 
-    if (curdate->tm_hour < 6 || curdate->tm_hour >= 18)
-      job->hold_until = curtime;
-    else
-      job->hold_until = curtime +
-                        ((17 - curdate->tm_hour) * 60 + 59 -
-                        curdate->tm_min) * 60 + 60 - curdate->tm_sec;
+    cupsdSetString(&job->dest, dest);
   }
-  else if (!strcmp(when, "second-shift"))
+  else if ((destptr = cupsdFindDest(job->dest)) == NULL)
   {
-   /*
-    * Hold to 4pm unless local time is > 4pm.
-    */
+    cupsdLogMessage(CUPSD_LOG_ERROR,
+                   "[Job %d] Unable to queue job for destination \"%s\"!",
+                   job->id, job->dest);
+    goto error;
+  }
 
-    curtime = time(NULL);
-    curdate = localtime(&curtime);
+  job->sheets     = ippFindAttribute(job->attrs, "job-media-sheets-completed",
+                                     IPP_TAG_INTEGER);
+  job->job_sheets = ippFindAttribute(job->attrs, "job-sheets", IPP_TAG_NAME);
 
-    if (curdate->tm_hour >= 16)
-      job->hold_until = curtime;
-    else
-      job->hold_until = curtime +
-                        ((15 - curdate->tm_hour) * 60 + 59 -
-                        curdate->tm_min) * 60 + 60 - curdate->tm_sec;
+  if (!job->priority)
+  {
+    if ((attr = ippFindAttribute(job->attrs, "job-priority",
+                                IPP_TAG_INTEGER)) == NULL)
+    {
+      cupsdLogMessage(CUPSD_LOG_ERROR,
+                     "[Job %d] Missing or bad job-priority attribute in "
+                     "control file!", job->id);
+      goto error;
+    }
+
+    job->priority = attr->values[0].integer;
   }
-  else if (!strcmp(when, "third-shift"))
+
+  if (!job->username)
   {
-   /*
-    * Hold to 12am unless local time is < 8am.
-    */
+    if ((attr = ippFindAttribute(job->attrs, "job-originating-user-name",
+                                IPP_TAG_NAME)) == NULL)
+    {
+      cupsdLogMessage(CUPSD_LOG_ERROR,
+                     "[Job %d] Missing or bad job-originating-user-name "
+                     "attribute in control file!", job->id);
+      goto error;
+    }
 
-    curtime = time(NULL);
-    curdate = localtime(&curtime);
+    cupsdSetString(&job->username, attr->values[0].string.text);
+  }
 
-    if (curdate->tm_hour < 8)
-      job->hold_until = curtime;
+ /*
+  * Set the job hold-until time and state...
+  */
+
+  if (job->state_value == IPP_JOB_HELD)
+  {
+    if ((attr = ippFindAttribute(job->attrs, "job-hold-until",
+                                IPP_TAG_KEYWORD)) == NULL)
+      attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_NAME);
+
+    if (attr)
+      cupsdSetJobHoldUntil(job, attr->values[0].string.text, CUPSD_JOB_DEFAULT);
     else
-      job->hold_until = curtime +
-                        ((23 - curdate->tm_hour) * 60 + 59 -
-                        curdate->tm_min) * 60 + 60 - curdate->tm_sec;
+    {
+      job->state->values[0].integer = IPP_JOB_PENDING;
+      job->state_value              = IPP_JOB_PENDING;
+    }
   }
-  else if (!strcmp(when, "weekend"))
+  else if (job->state_value == IPP_JOB_PROCESSING)
+  {
+    job->state->values[0].integer = IPP_JOB_PENDING;
+    job->state_value              = IPP_JOB_PENDING;
+  }
+
+  if (!job->num_files)
   {
    /*
-    * Hold to weekend unless we are in the weekend.
+    * Find all the d##### files...
     */
 
-    curtime = time(NULL);
-    curdate = localtime(&curtime);
+    for (fileid = 1; fileid < 10000; fileid ++)
+    {
+      snprintf(jobfile, sizeof(jobfile), "%s/d%05d-%03d", RequestRoot,
+               job->id, fileid);
 
-    if (curdate->tm_wday == 0 || curdate->tm_wday == 6)
-      job->hold_until = curtime;
-    else
-      job->hold_until = curtime +
-                        (((5 - curdate->tm_wday) * 24 +
-                          (17 - curdate->tm_hour)) * 60 + 59 -
-                          curdate->tm_min) * 60 + 60 - curdate->tm_sec;
+      if (access(jobfile, 0))
+        break;
+
+      cupsdLogMessage(CUPSD_LOG_DEBUG,
+                     "[Job %d] Auto-typing document file \"%s\"...", job->id,
+                     jobfile);
+
+      if (fileid > job->num_files)
+      {
+        if (job->num_files == 0)
+       {
+         compressions = (int *)calloc(fileid, sizeof(int));
+         filetypes    = (mime_type_t **)calloc(fileid, sizeof(mime_type_t *));
+       }
+       else
+       {
+         compressions = (int *)realloc(job->compressions,
+                                       sizeof(int) * fileid);
+         filetypes    = (mime_type_t **)realloc(job->filetypes,
+                                                sizeof(mime_type_t *) *
+                                                fileid);
+        }
+
+        if (!compressions || !filetypes)
+       {
+          cupsdLogMessage(CUPSD_LOG_ERROR,
+                         "[Job %d] Ran out of memory for job file types!",
+                         job->id);
+         return (1);
+       }
+
+        job->compressions = compressions;
+        job->filetypes    = filetypes;
+       job->num_files    = fileid;
+      }
+
+      job->filetypes[fileid - 1] = mimeFileType(MimeDatabase, jobfile, NULL,
+                                                job->compressions + fileid - 1);
+
+      if (!job->filetypes[fileid - 1])
+        job->filetypes[fileid - 1] = mimeType(MimeDatabase, "application",
+                                             "vnd.cups-raw");
+    }
   }
-  else if (sscanf(when, "%d:%d:%d", &hour, &minute, &second) >= 2)
+
+ /*
+  * Load authentication information as needed...
+  */
+
+  if (job->state_value < IPP_JOB_STOPPED)
   {
-   /*
-    * Hold to specified GMT time (HH:MM or HH:MM:SS)...
-    */
+    snprintf(jobfile, sizeof(jobfile), "%s/a%05d", RequestRoot, job->id);
 
-    curtime = time(NULL);
-    curdate = gmtime(&curtime);
+    cupsdClearString(&job->auth_username);
+    cupsdClearString(&job->auth_domain);
+    cupsdClearString(&job->auth_password);
 
-    job->hold_until = curtime +
-                      ((hour - curdate->tm_hour) * 60 + minute -
-                      curdate->tm_min) * 60 + second - curdate->tm_sec;
+    if ((fp = cupsFileOpen(jobfile, "r")) != NULL)
+    {
+      int      i,                      /* Looping var */
+               bytes;                  /* Size of auth data */
+      char     line[255],              /* Line from file */
+               data[255];              /* Decoded data */
 
-   /*
-    * Hold until next day as needed...
-    */
 
-    if (job->hold_until < curtime)
-      job->hold_until += 24 * 60 * 60;
+      for (i = 0;
+           i < destptr->num_auth_info_required &&
+              cupsFileGets(fp, line, sizeof(line));
+          i ++)
+      {
+        bytes = sizeof(data);
+        httpDecode64_2(data, &bytes, line);
+
+       if (!strcmp(destptr->auth_info_required[i], "username"))
+         cupsdSetStringf(&job->auth_username, "AUTH_USERNAME=%s", data);
+       else if (!strcmp(destptr->auth_info_required[i], "domain"))
+         cupsdSetStringf(&job->auth_domain, "AUTH_DOMAIN=%s", data);
+       else if (!strcmp(destptr->auth_info_required[i], "password"))
+         cupsdSetStringf(&job->auth_password, "AUTH_PASSWORD=%s", data);
+      }
+
+      cupsFileClose(fp);
+    }
   }
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdSetJobHoldUntil: hold_until = %d",
-                  (int)job->hold_until);
+  job->access_time = time(NULL);
+  return (1);
+
+ /*
+  * If we get here then something bad happened...
+  */
+
+  error:
+
+  ippDelete(job->attrs);
+  job->attrs = NULL;
+  unlink(jobfile);
+
+  return (0);
 }
 
 
 /*
- * 'cupsdSetJobPriority()' - Set the priority of a job, moving it up/down in
- *                           the list as needed.
+ * 'cupsdMoveJob()' - Move the specified job to a different destination.
  */
 
 void
-cupsdSetJobPriority(
-    cupsd_job_t *job,                  /* I - Job ID */
-    int         priority)              /* I - New priority (0 to 100) */
+cupsdMoveJob(cupsd_job_t     *job,     /* I - Job */
+             cupsd_printer_t *p)       /* I - Destination printer or class */
 {
-  ipp_attribute_t      *attr;          /* Job attribute */
+  ipp_attribute_t      *attr;          /* job-printer-uri attribute */
+  const char           *olddest;       /* Old destination */
+  cupsd_printer_t      *oldp;          /* Old pointer */
 
 
  /*
-  * Don't change completed jobs...
+  * Don't move completed jobs...
   */
 
-  if (job->state_value >= IPP_JOB_PROCESSING)
+  if (job->state_value > IPP_JOB_STOPPED)
     return;
 
  /*
-  * Set the new priority and re-add the job into the active list...
+  * Get the old destination...
   */
 
-  cupsArrayRemove(ActiveJobs, job);
-
-  job->priority = priority;
+  olddest = job->dest;
 
-  if ((attr = ippFindAttribute(job->attrs, "job-priority",
-                               IPP_TAG_INTEGER)) != NULL)
-    attr->values[0].integer = priority;
+  if (job->printer)
+    oldp = job->printer;
   else
-    ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-priority",
-                  priority);
+    oldp = cupsdFindDest(olddest);
 
-  cupsArrayAdd(ActiveJobs, job);
+ /*
+  * Change the destination information...
+  */
+
+  cupsdSetJobState(job, IPP_JOB_PENDING, CUPSD_JOB_DEFAULT,
+                   "Stopping job prior to move.");
+
+  cupsdAddEvent(CUPSD_EVENT_JOB_CONFIG_CHANGED, oldp, job,
+                "Job #%d moved from %s to %s.", job->id, olddest,
+               p->name);
+
+  cupsdSetString(&job->dest, p->name);
+  job->dtype = p->type & (CUPS_PRINTER_CLASS | CUPS_PRINTER_REMOTE |
+                          CUPS_PRINTER_IMPLICIT);
+
+  if ((attr = ippFindAttribute(job->attrs, "job-printer-uri",
+                               IPP_TAG_URI)) != NULL)
+    cupsdSetString(&(attr->values[0].string.text), p->uri);
+
+  cupsdAddEvent(CUPSD_EVENT_JOB_STOPPED, p, job,
+                "Job #%d moved from %s to %s.", job->id, olddest,
+               p->name);
 
   job->dirty = 1;
   cupsdMarkDirty(CUPSD_DIRTY_JOBS);
@@ -1767,1117 +1744,966 @@ cupsdSetJobPriority(
 
 
 /*
- * 'cupsdStopAllJobs()' - Stop all print jobs.
+ * 'cupsdReleaseJob()' - Release the specified job.
  */
 
 void
-cupsdStopAllJobs(int force)            /* I - 1 = Force all filters to stop */
+cupsdReleaseJob(cupsd_job_t *job)      /* I - Job */
 {
-  cupsd_job_t  *job;                   /* Current job */
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdReleaseJob(job=%p(%d))", job,
+                  job->id);
 
+  if (job->state_value == IPP_JOB_HELD)
+  {
+   /*
+    * Add trailing banner as needed...
+    */
 
-  DEBUG_puts("cupsdStopAllJobs()");
+    if (job->pending_timeout)
+      cupsdTimeoutJob(job);
 
-  for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs);
-       job;
-       job = (cupsd_job_t *)cupsArrayNext(ActiveJobs))
-    if (job->state_value == IPP_JOB_PROCESSING)
-    {
-      cupsdStopJob(job, force);
-      job->state->values[0].integer = IPP_JOB_PENDING;
-      job->state_value              = IPP_JOB_PENDING;
-    }
+    cupsdSetJobState(job, IPP_JOB_PENDING, CUPSD_JOB_DEFAULT,
+                     "Job released by user.");
+  }
 }
 
 
 /*
- * 'cupsdStopJob()' - Stop a print job.
+ * 'cupsdRestartJob()' - Restart the specified job.
  */
 
 void
-cupsdStopJob(cupsd_job_t *job,         /* I - Job */
-             int         force)                /* I - 1 = Force all filters to stop */
+cupsdRestartJob(cupsd_job_t *job)      /* I - Job */
 {
-  int  i;                              /* Looping var */
-
-
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "[Job %d] cupsdStopJob: force = %d",
-                  job->id, force);
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdRestartJob(job=%p(%d))", job,
+                  job->id);
 
-  if (job->state_value != IPP_JOB_PROCESSING)
-    return;
-
-  FilterLevel -= job->cost;
+  if (job->state_value == IPP_JOB_STOPPED || job->num_files)
+    cupsdSetJobState(job, IPP_JOB_PENDING, CUPSD_JOB_DEFAULT,
+                     "Job restarted by user.");
+}
 
-  if (job->printer->state == IPP_PRINTER_PROCESSING)
-    cupsdSetPrinterState(job->printer, IPP_PRINTER_IDLE, 0);
 
-  job->state->values[0].integer = IPP_JOB_STOPPED;
-  job->state_value              = IPP_JOB_STOPPED;
-  job->printer->job = NULL;
-  job->printer      = NULL;
+/*
+ * 'cupsdSaveAllJobs()' - Save a summary of all jobs to disk.
+ */
 
-  job->current_file --;
+void
+cupsdSaveAllJobs(void)
+{
+  int          i;                      /* Looping var */
+  cups_file_t  *fp;                    /* Job cache file */
+  char         temp[1024];             /* Temporary string */
+  cupsd_job_t  *job;                   /* Current job */
+  time_t       curtime;                /* Current time */
+  struct tm    *curdate;               /* Current date */
 
-  for (i = 0; job->filters[i]; i ++)
-    if (job->filters[i] > 0)
-    {
-      cupsdEndProcess(job->filters[i], force);
-      if (force)
-        job->filters[i] = 0;
-    }
 
-  if (job->backend > 0)
+  snprintf(temp, sizeof(temp), "%s/job.cache", CacheDir);
+  if ((fp = cupsFileOpen(temp, "w")) == NULL)
   {
-    cupsdEndProcess(job->backend, force);
-    if (force)
-      job->backend = 0;
-  }
-
-  if (!force)
+    cupsdLogMessage(CUPSD_LOG_ERROR,
+                    "Unable to create job cache file \"%s\" - %s",
+                    temp, strerror(errno));
     return;
+  }
 
-  cupsdDestroyProfile(job->profile);
-  job->profile = NULL;
+  cupsdLogMessage(CUPSD_LOG_INFO, "Saving job cache file \"%s\"...", temp);
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "[Job %d] Closing print pipes [ %d %d ]...",
-                 job->id, job->print_pipes[0], job->print_pipes[1]);
+ /*
+  * Restrict access to the file...
+  */
 
-  cupsdClosePipe(job->print_pipes);
+  fchown(cupsFileNumber(fp), getuid(), Group);
+  fchmod(cupsFileNumber(fp), ConfigFilePerm);
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "[Job %d] Closing back pipes [ %d %d ]...",
-                 job->id, job->back_pipes[0], job->back_pipes[1]);
+ /*
+  * Write a small header to the file...
+  */
 
-  cupsdClosePipe(job->back_pipes);
+  curtime = time(NULL);
+  curdate = localtime(&curtime);
+  strftime(temp, sizeof(temp) - 1, "%Y-%m-%d %H:%M", curdate);
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "[Job %d] Closing side pipes [ %d %d ]...",
-                 job->id, job->side_pipes[0], job->side_pipes[1]);
+  cupsFilePuts(fp, "# Job cache file for " CUPS_SVERSION "\n");
+  cupsFilePrintf(fp, "# Written by cupsd on %s\n", temp);
+  cupsFilePrintf(fp, "NextJobId %d\n", NextJobId);
 
-  cupsdClosePipe(job->side_pipes);
+ /*
+  * Write each job known to the system...
+  */
 
-  if (job->status_buffer)
+  for (job = (cupsd_job_t *)cupsArrayFirst(Jobs);
+       job;
+       job = (cupsd_job_t *)cupsArrayNext(Jobs))
   {
-   /*
-    * Close the pipe and clear the input bit.
-    */
-
-    cupsdRemoveSelect(job->status_buffer->fd);
-
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "[Job %d] Closing status pipes [ %d %d ]...",
-                   job->id, job->status_pipes[0], job->status_pipes[1]);
-
-    cupsdClosePipe(job->status_pipes);
-    cupsdStatBufDelete(job->status_buffer);
-
-    job->status_buffer = NULL;
+    cupsFilePrintf(fp, "<Job %d>\n", job->id);
+    cupsFilePrintf(fp, "State %d\n", job->state_value);
+    cupsFilePrintf(fp, "Priority %d\n", job->priority);
+    cupsFilePrintf(fp, "Username %s\n", job->username);
+    cupsFilePrintf(fp, "Destination %s\n", job->dest);
+    cupsFilePrintf(fp, "DestType %d\n", job->dtype);
+    cupsFilePrintf(fp, "NumFiles %d\n", job->num_files);
+    for (i = 0; i < job->num_files; i ++)
+      cupsFilePrintf(fp, "File %d %s/%s %d\n", i + 1, job->filetypes[i]->super,
+                     job->filetypes[i]->type, job->compressions[i]);
+    cupsFilePuts(fp, "</Job>\n");
   }
+
+  cupsFileClose(fp);
 }
 
 
 /*
- * 'cupsdUnloadCompletedJobs()' - Flush completed job history from memory.
+ * 'cupsdSaveJob()' - Save a job to disk.
  */
 
 void
-cupsdUnloadCompletedJobs(void)
+cupsdSaveJob(cupsd_job_t *job)         /* I - Job */
 {
-  cupsd_job_t  *job;                   /* Current job */
-  time_t       expire;                 /* Expiration time */
-
-
-  expire = time(NULL) - 60;
-
-  for (job = (cupsd_job_t *)cupsArrayFirst(Jobs);
-       job;
-       job = (cupsd_job_t *)cupsArrayNext(Jobs))
-    if (job->attrs && job->state_value >= IPP_JOB_STOPPED &&
-        job->access_time < expire)
-    {
-      if (job->dirty)
-        cupsdSaveJob(job);
+  char         filename[1024];         /* Job control filename */
+  cups_file_t  *fp;                    /* Job file */
 
-      unload_job(job);
-    }
-}
 
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdSaveJob(job=%p(%d)): job->attrs=%p",
+                  job, job->id, job->attrs);
 
-/*
- * 'compare_active_jobs()' - Compare the job IDs and priorities of two jobs.
- */
+  snprintf(filename, sizeof(filename), "%s/c%05d", RequestRoot, job->id);
 
-static int                             /* O - Difference */
-compare_active_jobs(void *first,       /* I - First job */
-                    void *second,      /* I - Second job */
-                   void *data)         /* I - App data (not used) */
-{
-  int  diff;                           /* Difference */
+  if ((fp = cupsFileOpen(filename, "w")) == NULL)
+  {
+    cupsdLogMessage(CUPSD_LOG_ERROR,
+                   "[Job %d] Unable to create job control file \"%s\" - %s.",
+                   job->id, filename, strerror(errno));
+    return;
+  }
 
+  fchmod(cupsFileNumber(fp), 0600);
+  fchown(cupsFileNumber(fp), RunUser, Group);
 
-  if ((diff = ((cupsd_job_t *)second)->priority -
-              ((cupsd_job_t *)first)->priority) != 0)
-    return (diff);
-  else
-    return (((cupsd_job_t *)first)->id - ((cupsd_job_t *)second)->id);
-}
+  job->attrs->state = IPP_IDLE;
 
+  if (ippWriteIO(fp, (ipp_iocb_t)cupsFileWrite, 1, NULL,
+                 job->attrs) != IPP_DATA)
+    cupsdLogMessage(CUPSD_LOG_ERROR,
+                    "[Job %d] Unable to write job control file!", job->id);
 
-/*
- * 'compare_jobs()' - Compare the job IDs of two jobs.
- */
+  cupsFileClose(fp);
 
-static int                             /* O - Difference */
-compare_jobs(void *first,              /* I - First job */
-             void *second,             /* I - Second job */
-            void *data)                /* I - App data (not used) */
-{
-  return (((cupsd_job_t *)first)->id - ((cupsd_job_t *)second)->id);
+  job->dirty = 0;
 }
 
 
 /*
- * 'ipp_length()' - Compute the size of the buffer needed to hold
- *                 the textual IPP attributes.
+ * 'cupsdSetJobHoldUntil()' - Set the hold time for a job.
  */
 
-static int                             /* O - Size of attribute buffer */
-ipp_length(ipp_t *ipp)                 /* I - IPP request */
+void
+cupsdSetJobHoldUntil(cupsd_job_t *job, /* I - Job */
+                     const char  *when,        /* I - When to resume */
+                    int         update)/* I - Update job-hold-until attr? */
 {
-  int                  bytes;          /* Number of bytes */
-  int                  i;              /* Looping var */
-  ipp_attribute_t      *attr;          /* Current attribute */
-
+  time_t       curtime;                /* Current time */
+  struct tm    *curdate;               /* Current date */
+  int          hour;                   /* Hold hour */
+  int          minute;                 /* Hold minute */
+  int          second = 0;             /* Hold second */
 
- /*
-  * Loop through all attributes...
-  */
 
-  bytes = 0;
+  cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                  "cupsdSetJobHoldUntil(job=%p(%d), when=\"%s\", update=%d)",
+                  job, job->id, when, update);
 
-  for (attr = ipp->attrs; attr != NULL; attr = attr->next)
+  if (update)
   {
    /*
-    * Skip attributes that won't be sent to filters...
+    * Update the job-hold-until attribute...
     */
 
-    if (attr->value_tag == IPP_TAG_MIMETYPE ||
-       attr->value_tag == IPP_TAG_NAMELANG ||
-       attr->value_tag == IPP_TAG_TEXTLANG ||
-       attr->value_tag == IPP_TAG_URI ||
-       attr->value_tag == IPP_TAG_URISCHEME)
-      continue;
+    ipp_attribute_t *attr;             /* job-hold-until attribute */
 
-    if (strncmp(attr->name, "time-", 5) == 0)
-      continue;
+    if ((attr = ippFindAttribute(job->attrs, "job-hold-until",
+                                IPP_TAG_KEYWORD)) == NULL)
+      attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_NAME);
 
-   /*
-    * Add space for a leading space and commas between each value.
-    * For the first attribute, the leading space isn't used, so the
-    * extra byte can be used as the nul terminator...
-    */
+    if (attr)
+      cupsdSetString(&(attr->values[0].string.text), when);
+    else
+      attr = ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_KEYWORD,
+                          "job-hold-until", NULL, when);
 
-    bytes ++;                          /* " " separator */
-    bytes += attr->num_values;         /* "," separators */
+    if (attr)
+    {
+      if (isdigit(when[0] & 255))
+       attr->value_tag = IPP_TAG_NAME;
+      else
+       attr->value_tag = IPP_TAG_KEYWORD;
+
+      job->dirty = 1;
+      cupsdMarkDirty(CUPSD_DIRTY_JOBS);
+    }
+  }
 
+ /*
+  * Update the hold time...
+  */
+
+  if (!strcmp(when, "indefinite") || !strcmp(when, "auth-info-required"))
+  {
    /*
-    * Boolean attributes appear as "foo,nofoo,foo,nofoo", while
-    * other attributes appear as "foo=value1,value2,...,valueN".
+    * Hold indefinitely...
     */
 
-    if (attr->value_tag != IPP_TAG_BOOLEAN)
-      bytes += strlen(attr->name);
-    else
-      bytes += attr->num_values * strlen(attr->name);
-
+    job->hold_until = 0;
+  }
+  else if (!strcmp(when, "day-time"))
+  {
    /*
-    * Now add the size required for each value in the attribute...
+    * Hold to 6am the next morning unless local time is < 6pm.
     */
 
-    switch (attr->value_tag)
-    {
-      case IPP_TAG_INTEGER :
-      case IPP_TAG_ENUM :
-         /*
-         * Minimum value of a signed integer is -2147483647, or 11 digits.
-         */
+    curtime = time(NULL);
+    curdate = localtime(&curtime);
 
-         bytes += attr->num_values * 11;
-         break;
+    if (curdate->tm_hour < 18)
+      job->hold_until = curtime;
+    else
+      job->hold_until = curtime +
+                        ((29 - curdate->tm_hour) * 60 + 59 -
+                        curdate->tm_min) * 60 + 60 - curdate->tm_sec;
+  }
+  else if (!strcmp(when, "evening") || !strcmp(when, "night"))
+  {
+   /*
+    * Hold to 6pm unless local time is > 6pm or < 6am.
+    */
 
-      case IPP_TAG_BOOLEAN :
-         /*
-         * Add two bytes for each false ("no") value...
-         */
+    curtime = time(NULL);
+    curdate = localtime(&curtime);
 
-          for (i = 0; i < attr->num_values; i ++)
-           if (!attr->values[i].boolean)
-             bytes += 2;
-         break;
+    if (curdate->tm_hour < 6 || curdate->tm_hour >= 18)
+      job->hold_until = curtime;
+    else
+      job->hold_until = curtime +
+                        ((17 - curdate->tm_hour) * 60 + 59 -
+                        curdate->tm_min) * 60 + 60 - curdate->tm_sec;
+  }
+  else if (!strcmp(when, "second-shift"))
+  {
+   /*
+    * Hold to 4pm unless local time is > 4pm.
+    */
 
-      case IPP_TAG_RANGE :
-         /*
-         * A range is two signed integers separated by a hyphen, or
-         * 23 characters max.
-         */
+    curtime = time(NULL);
+    curdate = localtime(&curtime);
 
-         bytes += attr->num_values * 23;
-         break;
+    if (curdate->tm_hour >= 16)
+      job->hold_until = curtime;
+    else
+      job->hold_until = curtime +
+                        ((15 - curdate->tm_hour) * 60 + 59 -
+                        curdate->tm_min) * 60 + 60 - curdate->tm_sec;
+  }
+  else if (!strcmp(when, "third-shift"))
+  {
+   /*
+    * Hold to 12am unless local time is < 8am.
+    */
 
-      case IPP_TAG_RESOLUTION :
-         /*
-         * A resolution is two signed integers separated by an "x" and
-         * suffixed by the units, or 26 characters max.
-         */
+    curtime = time(NULL);
+    curdate = localtime(&curtime);
 
-         bytes += attr->num_values * 26;
-         break;
+    if (curdate->tm_hour < 8)
+      job->hold_until = curtime;
+    else
+      job->hold_until = curtime +
+                        ((23 - curdate->tm_hour) * 60 + 59 -
+                        curdate->tm_min) * 60 + 60 - curdate->tm_sec;
+  }
+  else if (!strcmp(when, "weekend"))
+  {
+   /*
+    * Hold to weekend unless we are in the weekend.
+    */
 
-      case IPP_TAG_STRING :
-      case IPP_TAG_TEXT :
-      case IPP_TAG_NAME :
-      case IPP_TAG_KEYWORD :
-      case IPP_TAG_CHARSET :
-      case IPP_TAG_LANGUAGE :
-      case IPP_TAG_URI :
-         /*
-         * Strings can contain characters that need quoting.  We need
-         * at least 2 * len + 2 characters to cover the quotes and
-         * any backslashes in the string.
-         */
+    curtime = time(NULL);
+    curdate = localtime(&curtime);
 
-          for (i = 0; i < attr->num_values; i ++)
-           bytes += 2 * strlen(attr->values[i].string.text) + 2;
-         break;
+    if (curdate->tm_wday == 0 || curdate->tm_wday == 6)
+      job->hold_until = curtime;
+    else
+      job->hold_until = curtime +
+                        (((5 - curdate->tm_wday) * 24 +
+                          (17 - curdate->tm_hour)) * 60 + 59 -
+                          curdate->tm_min) * 60 + 60 - curdate->tm_sec;
+  }
+  else if (sscanf(when, "%d:%d:%d", &hour, &minute, &second) >= 2)
+  {
+   /*
+    * Hold to specified GMT time (HH:MM or HH:MM:SS)...
+    */
 
-       default :
-         break; /* anti-compiler-warning-code */
-    }
+    curtime = time(NULL);
+    curdate = gmtime(&curtime);
+
+    job->hold_until = curtime +
+                      ((hour - curdate->tm_hour) * 60 + minute -
+                      curdate->tm_min) * 60 + second - curdate->tm_sec;
+
+   /*
+    * Hold until next day as needed...
+    */
+
+    if (job->hold_until < curtime)
+      job->hold_until += 24 * 60 * 60;
   }
 
-  return (bytes);
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdSetJobHoldUntil: hold_until=%d",
+                  (int)job->hold_until);
 }
 
 
 /*
- * 'load_job_cache()' - Load jobs from the job.cache file.
+ * 'cupsdSetJobPriority()' - Set the priority of a job, moving it up/down in
+ *                           the list as needed.
  */
 
-static void
-load_job_cache(const char *filename)   /* I - job.cache filename */
+void
+cupsdSetJobPriority(
+    cupsd_job_t *job,                  /* I - Job ID */
+    int         priority)              /* I - New priority (0 to 100) */
 {
-  cups_file_t  *fp;                    /* job.cache file */
-  char         line[1024],             /* Line buffer */
-               *value;                 /* Value on line */
-  int          linenum;                /* Line number in file */
-  cupsd_job_t  *job;                   /* Current job */
-  int          jobid;                  /* Job ID */
-  char         jobfile[1024];          /* Job filename */
+  ipp_attribute_t      *attr;          /* Job attribute */
 
 
  /*
-  * Open the job.cache file...
+  * Don't change completed jobs...
   */
 
-  if ((fp = cupsFileOpen(filename, "r")) == NULL)
-  {
-    if (errno != ENOENT)
-      cupsdLogMessage(CUPSD_LOG_ERROR,
-                      "Unable to open job cache file \"%s\": %s",
-                      filename, strerror(errno));
-
-    load_request_root();
-
+  if (job->state_value >= IPP_JOB_PROCESSING)
     return;
-  }
 
  /*
-  * Read entries from the job cache file and create jobs as needed.
+  * Set the new priority and re-add the job into the active list...
   */
 
-  cupsdLogMessage(CUPSD_LOG_INFO, "Loading job cache file \"%s\"...",
-                  filename);
+  cupsArrayRemove(ActiveJobs, job);
 
-  linenum = 0;
-  job     = NULL;
+  job->priority = priority;
 
-  while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum))
-  {
-    if (!strcasecmp(line, "NextJobId"))
-    {
-      if (value)
-        NextJobId = atoi(value);
-    }
-    else if (!strcasecmp(line, "<Job"))
-    {
-      if (job)
-      {
-        cupsdLogMessage(CUPSD_LOG_ERROR, "Missing </Job> directive on line %d!",
-                       linenum);
-        continue;
-      }
+  if ((attr = ippFindAttribute(job->attrs, "job-priority",
+                               IPP_TAG_INTEGER)) != NULL)
+    attr->values[0].integer = priority;
+  else
+    ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-priority",
+                  priority);
 
-      if (!value)
-      {
-        cupsdLogMessage(CUPSD_LOG_ERROR, "Missing job ID on line %d!", linenum);
-       continue;
-      }
+  cupsArrayAdd(ActiveJobs, job);
 
-      jobid = atoi(value);
+  job->dirty = 1;
+  cupsdMarkDirty(CUPSD_DIRTY_JOBS);
+}
 
-      if (jobid < 1)
-      {
-        cupsdLogMessage(CUPSD_LOG_ERROR, "Bad job ID %d on line %d!", jobid,
-                       linenum);
-        continue;
-      }
 
-      snprintf(jobfile, sizeof(jobfile), "%s/c%05d", RequestRoot, jobid);
-      if (access(jobfile, 0))
-      {
-        cupsdLogMessage(CUPSD_LOG_ERROR, "[Job %d] Files have gone away!",
-                       jobid);
-        continue;
-      }
+/*
+ * 'cupsdSetJobState()' - Set the state of the specified print job.
+ */
 
-      job = calloc(1, sizeof(cupsd_job_t));
-      if (!job)
-      {
-        cupsdLogMessage(CUPSD_LOG_EMERG,
-                       "[Job %d] Unable to allocate memory for job!", jobid);
-        break;
-      }
+void
+cupsdSetJobState(
+    cupsd_job_t       *job,            /* I - Job to cancel */
+    ipp_jstate_t      newstate,                /* I - New job state */
+    cupsd_jobaction_t action,          /* I - Action to take */
+    const char        *message,                /* I - Message to log */
+    ...)                               /* I - Additional arguments as needed */
+{
+  int                  i;              /* Looping var */
+  ipp_jstate_t         oldstate;       /* Old state */
+  char                 filename[1024]; /* Job filename */
+  ipp_attribute_t      *attr;          /* Job attribute */
 
-      job->id              = jobid;
-      job->back_pipes[0]   = -1;
-      job->back_pipes[1]   = -1;
-      job->print_pipes[0]  = -1;
-      job->print_pipes[1]  = -1;
-      job->side_pipes[0]   = -1;
-      job->side_pipes[1]   = -1;
-      job->status_pipes[0] = -1;
-      job->status_pipes[1] = -1;
 
-      cupsdLogMessage(CUPSD_LOG_DEBUG, "[Job %d] Loading from cache...",
-                      job->id);
-    }
-    else if (!job)
-    {
-      cupsdLogMessage(CUPSD_LOG_ERROR,
-                     "Missing <Job #> directive on line %d!", linenum);
-      continue;
-    }
-    else if (!strcasecmp(line, "</Job>"))
-    {
-      cupsArrayAdd(Jobs, job);
+  cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                  "cupsdSetJobState(job=%p(%d), state=%d, newstate=%d, "
+                 "action=%d, message=\"%s\")", job, job->id, job->state_value,
+                 newstate, action, message ? message : "(null)");
 
-      if (job->state_value <= IPP_JOB_STOPPED)
-      {
-        cupsArrayAdd(ActiveJobs, job);
-       cupsdLoadJob(job);
-      }
 
-      job = NULL;
-    }
-    else if (!value)
-    {
-      cupsdLogMessage(CUPSD_LOG_ERROR, "Missing value on line %d!", linenum);
-      continue;
-    }
-    else if (!strcasecmp(line, "State"))
-    {
-      job->state_value = (ipp_jstate_t)atoi(value);
+ /*
+  * Make sure we have the job attributes...
+  */
 
-      if (job->state_value < IPP_JOB_PENDING)
-        job->state_value = IPP_JOB_PENDING;
-      else if (job->state_value > IPP_JOB_COMPLETED)
-        job->state_value = IPP_JOB_COMPLETED;
-    }
-    else if (!strcasecmp(line, "Priority"))
-    {
-      job->priority = atoi(value);
-    }
-    else if (!strcasecmp(line, "Username"))
-    {
-      cupsdSetString(&job->username, value);
-    }
-    else if (!strcasecmp(line, "Destination"))
-    {
-      cupsdSetString(&job->dest, value);
-    }
-    else if (!strcasecmp(line, "DestType"))
-    {
-      job->dtype = (cups_ptype_t)atoi(value);
-    }
-    else if (!strcasecmp(line, "NumFiles"))
-    {
-      job->num_files = atoi(value);
+  if (!cupsdLoadJob(job))
+    return;
 
-      if (job->num_files < 0)
-      {
-       cupsdLogMessage(CUPSD_LOG_ERROR, "Bad NumFiles value %d on line %d!",
-                       job->num_files, linenum);
-        job->num_files = 0;
-       continue;
-      }
+ /*
+  * Don't do anything if the state is unchanged...
+  */
 
-      if (job->num_files > 0)
-      {
-        snprintf(jobfile, sizeof(jobfile), "%s/d%05d-001", RequestRoot,
-                job->id);
-        if (access(jobfile, 0))
-       {
-         cupsdLogMessage(CUPSD_LOG_INFO, "[Job %d] Data files have gone away!",
-                         job->id);
-          job->num_files = 0;
-         continue;
-       }
+  if (newstate == (oldstate = job->state_value))
+    return;
 
-        job->filetypes    = calloc(job->num_files, sizeof(mime_type_t *));
-       job->compressions = calloc(job->num_files, sizeof(int));
+ /*
+  * Stop any processes that are working on the current job...
+  */
 
-        if (!job->filetypes || !job->compressions)
+  if (oldstate == IPP_JOB_PROCESSING)
+    stop_job(job, action != CUPSD_JOB_DEFAULT);
+
+ /*
+  * Set the new job state...
+  */
+
+  job->state->values[0].integer = newstate;
+  job->state_value              = newstate;
+
+  switch (newstate)
+  {
+    case IPP_JOB_PENDING :
+       /*
+       * Update job-hold-until as needed...
+       */
+
+       if ((attr = ippFindAttribute(job->attrs, "job-hold-until",
+                                    IPP_TAG_KEYWORD)) == NULL)
+         attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_NAME);
+
+       if (attr)
        {
-         cupsdLogMessage(CUPSD_LOG_EMERG,
-                         "[Job %d] Unable to allocate memory for %d files!",
-                         job->id, job->num_files);
-          break;
+         attr->value_tag = IPP_TAG_KEYWORD;
+         cupsdSetString(&(attr->values[0].string.text), "no-hold");
        }
-      }
-    }
-    else if (!strcasecmp(line, "File"))
-    {
-      int      number,                 /* File number */
-               compression;            /* Compression value */
-      char     super[MIME_MAX_SUPER],  /* MIME super type */
-               type[MIME_MAX_TYPE];    /* MIME type */
 
+    default :
+       break;
 
-      if (sscanf(value, "%d%*[ \t]%15[^/]/%255s%d", &number, super, type,
-                 &compression) != 4)
-      {
-        cupsdLogMessage(CUPSD_LOG_ERROR, "Bad File on line %d!", linenum);
-       continue;
-      }
+    case IPP_JOB_ABORTED :
+    case IPP_JOB_CANCELED :
+    case IPP_JOB_COMPLETED :
+       set_time(job, "time-at-completed");
+        break;
+  }
 
-      if (number < 1 || number > job->num_files)
-      {
-        cupsdLogMessage(CUPSD_LOG_ERROR, "Bad File number %d on line %d!",
-                       number, linenum);
-        continue;
-      }
+ /*
+  * Log message as needed...
+  */
 
-      number --;
+  if (message)
+  {
+    char       buffer[2048];           /* Message buffer */
+    va_list    ap;                     /* Pointer to additional arguments */
 
-      job->compressions[number] = compression;
-      job->filetypes[number]    = mimeType(MimeDatabase, super, type);
+    va_start(ap, message);
+    vsnprintf(buffer, sizeof(buffer), message, ap);
+    va_end(ap);
 
-      if (!job->filetypes[number])
-      {
+    if (newstate > IPP_JOB_STOPPED)
+      cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job, "%s", buffer);
+    else
+      cupsdAddEvent(CUPSD_EVENT_JOB_STATE, job->printer, job, "%s", buffer);
+
+    if (newstate == IPP_JOB_STOPPED || newstate == IPP_JOB_ABORTED)
+      cupsdLogJob(job, CUPSD_LOG_ERROR, "%s", buffer);
+    else
+      cupsdLogJob(job, CUPSD_LOG_INFO, "%s", buffer);
+  }
+
+ /*
+  * Handle post-state-change actions...
+  */
+
+  switch (newstate)
+  {
+    case IPP_JOB_PROCESSING :
        /*
-        * If the original MIME type is unknown, auto-type it!
+        * Add the job to the "printing" list...
        */
 
-        cupsdLogMessage(CUPSD_LOG_ERROR,
-                       "[Job %d] Unknown MIME type %s/%s for file %d!",
-                       job->id, super, type, number + 1);
+        if (!cupsArrayFind(PrintingJobs, job))
+         cupsArrayAdd(PrintingJobs, job);
 
-        snprintf(jobfile, sizeof(jobfile), "%s/d%05d-%03d", RequestRoot,
-                job->id, number + 1);
-        job->filetypes[number] = mimeFileType(MimeDatabase, jobfile, NULL,
-                                             job->compressions + number);
+       /*
+       * Set the processing time...
+       */
 
+       set_time(job, "time-at-processing");
+
+    case IPP_JOB_PENDING :
+    case IPP_JOB_HELD :
+    case IPP_JOB_STOPPED :
        /*
-        * If that didn't work, assume it is raw...
+        * Make sure the job is in the active list...
        */
 
-        if (!job->filetypes[number])
-         job->filetypes[number] = mimeType(MimeDatabase, "application",
-                                           "vnd.cups-raw");
-      }
-    }
-    else
-      cupsdLogMessage(CUPSD_LOG_ERROR, "Unknown %s directive on line %d!",
-                      line, linenum);
-  }
+        if (!cupsArrayFind(ActiveJobs, job))
+         cupsArrayAdd(ActiveJobs, job);
 
-  cupsFileClose(fp);
-}
+       /*
+       * Save the job state to disk...
+       */
 
+       job->dirty = 1;
+       cupsdMarkDirty(CUPSD_DIRTY_JOBS);
+        break;
 
-/*
- * 'load_next_job_id()' - Load the NextJobId value from the job.cache file.
- */
+    case IPP_JOB_ABORTED :
+    case IPP_JOB_CANCELED :
+    case IPP_JOB_COMPLETED :
+       /*
+        * Expire job subscriptions since the job is now "completed"...
+       */
 
-static void
-load_next_job_id(const char *filename) /* I - job.cache filename */
-{
-  cups_file_t  *fp;                    /* job.cache file */
-  char         line[1024],             /* Line buffer */
-               *value;                 /* Value on line */
-  int          linenum;                /* Line number in file */
-  int          next_job_id;            /* NextJobId value from line */
+        cupsdExpireSubscriptions(NULL, job);
 
+       /*
+       * Remove the job from the active list...
+       */
 
- /*
-  * Read the NextJobId directive from the job.cache file and use
-  * the value (if any).
-  */
+       cupsArrayRemove(ActiveJobs, job);
 
-  if ((fp = cupsFileOpen(filename, "r")) == NULL)
-  {
-    if (errno != ENOENT)
-      cupsdLogMessage(CUPSD_LOG_ERROR,
-                      "Unable to open job cache file \"%s\": %s",
-                      filename, strerror(errno));
+#ifdef __APPLE__
+       /*
+       * If we are going to sleep and the PrintingJobs count is now 0, allow the
+       * sleep to happen immediately...
+       */
 
-    return;
-  }
+       if (Sleeping && cupsArrayCount(PrintingJobs) == 0)
+         cupsdAllowSleep();
+#endif /* __APPLE__ */
 
-  cupsdLogMessage(CUPSD_LOG_INFO,
-                  "Loading NextJobId from job cache file \"%s\"...", filename);
+       /*
+       * Remove any authentication data...
+       */
 
-  linenum = 0;
+       snprintf(filename, sizeof(filename), "%s/a%05d", RequestRoot, job->id);
+       if (cupsdRemoveFile(filename) && errno != ENOENT)
+         cupsdLogMessage(CUPSD_LOG_ERROR,
+                         "Unable to remove authentication cache: %s",
+                         strerror(errno));
 
-  while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum))
-  {
-    if (!strcasecmp(line, "NextJobId"))
-    {
-      if (value)
-      {
-        next_job_id = atoi(value);
+       cupsdClearString(&job->auth_username);
+       cupsdClearString(&job->auth_domain);
+       cupsdClearString(&job->auth_password);
 
-        if (next_job_id > NextJobId)
-         NextJobId = next_job_id;
-      }
-      break;
-    }
-  }
+#ifdef HAVE_GSSAPI
+       /*
+       * Destroy the credential cache and clear the KRB5CCNAME env var string.
+       */
 
-  cupsFileClose(fp);
-}
+       if (job->ccache)
+       {
+         krb5_cc_destroy(KerberosContext, job->ccache);
+         job->ccache = NULL;
+       }
 
+       cupsdClearString(&job->ccname);
+#endif /* HAVE_GSSAPI */
 
-/*
- * 'load_request_root()' - Load jobs from the RequestRoot directory.
- */
+       /*
+       * Remove the print file for good if we aren't preserving jobs or
+       * files...
+       */
 
-static void
-load_request_root(void)
-{
-  cups_dir_t           *dir;           /* Directory */
-  cups_dentry_t                *dent;          /* Directory entry */
-  cupsd_job_t          *job;           /* New job */
+       if (!JobHistory || !JobFiles || action == CUPSD_JOB_PURGE)
+       {
+         for (i = 1; i <= job->num_files; i ++)
+         {
+           snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot,
+                    job->id, i);
+           unlink(filename);
+         }
 
+         if (job->num_files > 0)
+         {
+           free(job->filetypes);
+           free(job->compressions);
 
- /*
-  * Open the requests directory...
-  */
+           job->num_files    = 0;
+           job->filetypes    = NULL;
+           job->compressions = NULL;
+         }
+       }
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG, "Scanning %s for jobs...", RequestRoot);
+       if (JobHistory && action != CUPSD_JOB_PURGE)
+       {
+        /*
+         * Save job state info...
+         */
 
-  if ((dir = cupsDirOpen(RequestRoot)) == NULL)
-  {
-    cupsdLogMessage(CUPSD_LOG_ERROR,
-                    "Unable to open spool directory \"%s\": %s",
-                    RequestRoot, strerror(errno));
-    return;
+         job->dirty = 1;
+         cupsdMarkDirty(CUPSD_DIRTY_JOBS);
+       }
+       else if (!job->printer)
+         cupsdDeleteJob(job, CUPSD_JOB_PURGE);
+       break;
   }
 
  /*
-  * Read all the c##### files...
+  * Update the server "busy" state...
   */
 
-  while ((dent = cupsDirRead(dir)) != NULL)
-    if (strlen(dent->filename) >= 6 && dent->filename[0] == 'c')
-    {
-     /*
-      * Allocate memory for the job...
-      */
+  cupsdSetBusyState();
+}
 
-      if ((job = calloc(sizeof(cupsd_job_t), 1)) == NULL)
-      {
-        cupsdLogMessage(CUPSD_LOG_ERROR, "Ran out of memory for jobs!");
-       cupsDirClose(dir);
-       return;
-      }
 
-     /*
     * Assign the job ID...
     */
+/*
* 'cupsdStopAllJobs()' - Stop all print jobs.
+ */
 
-      job->id              = atoi(dent->filename + 1);
-      job->back_pipes[0]   = -1;
-      job->back_pipes[1]   = -1;
-      job->print_pipes[0]  = -1;
-      job->print_pipes[1]  = -1;
-      job->side_pipes[0]   = -1;
-      job->side_pipes[1]   = -1;
-      job->status_pipes[0] = -1;
-      job->status_pipes[1] = -1;
+void
+cupsdStopAllJobs(
+    cupsd_jobaction_t action)          /* I - Action */
+{
+  cupsd_job_t  *job;                   /* Current job */
 
-      if (job->id >= NextJobId)
-        NextJobId = job->id + 1;
 
-     /*
-      * Load the job...
-      */
+  DEBUG_puts("cupsdStopAllJobs()");
 
-      cupsdLoadJob(job);
+  for (job = (cupsd_job_t *)cupsArrayFirst(PrintingJobs);
+       job;
+       job = (cupsd_job_t *)cupsArrayNext(PrintingJobs))
+    cupsdSetJobState(job, IPP_JOB_PENDING, action, NULL);
+}
 
-     /*
-      * Insert the job into the array, sorting by job priority and ID...
-      */
 
-      cupsArrayAdd(Jobs, job);
+/*
+ * 'cupsdUnloadCompletedJobs()' - Flush completed job history from memory.
+ */
 
-      if (job->state_value <= IPP_JOB_STOPPED)
-        cupsArrayAdd(ActiveJobs, job);
-      else
-        unload_job(job);
-    }
+void
+cupsdUnloadCompletedJobs(void)
+{
+  cupsd_job_t  *job;                   /* Current job */
+  time_t       expire;                 /* Expiration time */
 
-  cupsDirClose(dir);
+
+  expire = time(NULL) - 60;
+
+  for (job = (cupsd_job_t *)cupsArrayFirst(Jobs);
+       job;
+       job = (cupsd_job_t *)cupsArrayNext(Jobs))
+    if (job->attrs && job->state_value >= IPP_JOB_STOPPED && !job->printer &&
+        job->access_time < expire)
+    {
+      if (job->dirty)
+        cupsdSaveJob(job);
+
+      unload_job(job);
+    }
 }
 
 
 /*
- * 'set_time()' - Set one of the "time-at-xyz" attributes...
+ * 'compare_active_jobs()' - Compare the job IDs and priorities of two jobs.
  */
 
-static void
-set_time(cupsd_job_t *job,             /* I - Job to update */
-         const char  *name)            /* I - Name of attribute */
+static int                             /* O - Difference */
+compare_active_jobs(void *first,       /* I - First job */
+                    void *second,      /* I - Second job */
+                   void *data)         /* I - App data (not used) */
 {
-  ipp_attribute_t      *attr;          /* Time attribute */
+  int  diff;                           /* Difference */
 
 
-  if ((attr = ippFindAttribute(job->attrs, name, IPP_TAG_ZERO)) != NULL)
-  {
-    attr->value_tag         = IPP_TAG_INTEGER;
-    attr->values[0].integer = time(NULL);
-  }
+  if ((diff = ((cupsd_job_t *)second)->priority -
+              ((cupsd_job_t *)first)->priority) != 0)
+    return (diff);
+  else
+    return (((cupsd_job_t *)first)->id - ((cupsd_job_t *)second)->id);
 }
 
 
 /*
- * 'set_hold_until()' - Set the hold time and update job-hold-until attribute...
+ * 'compare_jobs()' - Compare the job IDs of two jobs.
  */
 
-static void
-set_hold_until(cupsd_job_t *job,       /* I - Job to update */
-              time_t      holdtime)    /* I - Hold until time */
+static int                             /* O - Difference */
+compare_jobs(void *first,              /* I - First job */
+             void *second,             /* I - Second job */
+            void *data)                /* I - App data (not used) */
 {
-  ipp_attribute_t      *attr;          /* job-hold-until attribute */
-  struct tm            *holddate;      /* Hold date */
-  char                 holdstr[64];    /* Hold time */
+  return (((cupsd_job_t *)first)->id - ((cupsd_job_t *)second)->id);
+}
 
 
- /*
 * Set the hold_until value and hold the job...
 */
+/*
* 'finalize_job()' - Cleanup after job filter processes and support data.
+ */
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG, "set_hold_until: hold_until = %d",
-                  (int)holdtime);
+static void
+finalize_job(cupsd_job_t *job)         /* I - Job */
+{
+  ipp_pstate_t         printer_state;  /* New printer state value */
+  ipp_jstate_t         job_state;      /* New job state value */
+  const char           *message;       /* Message for job state */
+  char                 buffer[1024];   /* Buffer for formatted messages */
 
-  job->state->values[0].integer = IPP_JOB_HELD;
-  job->state_value              = IPP_JOB_HELD;
-  job->hold_until               = holdtime;
+
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "finalize_job(job=%p(%d))", job, job->id);
 
  /*
-  * Update the job-hold-until attribute with a string representing GMT
-  * time (HH:MM:SS)...
+  * Clear the "connecting-to-device" reason, which is only valid when a
+  * printer is processing...
   */
 
-  holddate = gmtime(&holdtime);
-  snprintf(holdstr, sizeof(holdstr), "%d:%d:%d", holddate->tm_hour,
-          holddate->tm_min, holddate->tm_sec);
-
-  if ((attr = ippFindAttribute(job->attrs, "job-hold-until",
-                               IPP_TAG_KEYWORD)) == NULL)
-    attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_NAME);
+  cupsdSetPrinterReasons(job->printer, "-connecting-to-device");
 
  /*
-  * Either add the attribute or update the value of the existing one
+  * Similarly, clear the "offline-report" reason for non-USB devices since we
+  * rarely have current information for network devices...
   */
 
-  if (attr == NULL)
-    ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_KEYWORD, "job-hold-until",
-                 NULL, holdstr);
-  else
-    cupsdSetString(&attr->values[0].string.text, holdstr);
-
-  job->dirty = 1;
-  cupsdMarkDirty(CUPSD_DIRTY_JOBS);
-}
+  if (strncmp(job->printer->device_uri, "usb:", 4))
+    cupsdSetPrinterReasons(job->printer, "-offline-report");
 
+ /*
+  * Free the security profile...
+  */
 
-/*
- * 'start_job()' - Start a print job.
- */
+  cupsdDestroyProfile(job->profile);
+  job->profile = NULL;
 
-static void
-start_job(cupsd_job_t     *job,                /* I - Job ID */
-          cupsd_printer_t *printer)    /* I - Printer to print job */
-{
-  int                  i;              /* Looping var */
-  int                  slot;           /* Pipe slot */
-  cups_array_t         *filters,       /* Filters for job */
-                       *prefilters;    /* Filters with prefilters */
-  mime_filter_t                *filter,        /* Current filter */
-                       *prefilter,     /* Prefilter */
-                       port_monitor;   /* Port monitor filter */
-  char                 method[255],    /* Method for output */
-                       *optptr,        /* Pointer to options */
-                       *valptr;        /* Pointer in value string */
-  ipp_attribute_t      *attr;          /* Current attribute */
-  struct stat          backinfo;       /* Backend file information */
-  int                  backroot;       /* Run backend as root? */
-  int                  pid;            /* Process ID of new filter process */
-  int                  banner_page;    /* 1 if banner page, 0 otherwise */
-  int                  filterfds[2][2];/* Pipes used between filters */
-  int                  envc;           /* Number of environment variables */
-  char                 **argv,         /* Filter command-line arguments */
-                       filename[1024], /* Job filename */
-                       command[1024],  /* Full path to command */
-                       jobid[255],     /* Job ID string */
-                       title[IPP_MAX_NAME],
-                                       /* Job title string */
-                       copies[255],    /* # copies string */
-                       *envp[MAX_ENV + 19],
-                                       /* Environment variables */
-                       charset[255],   /* CHARSET env variable */
-                       class_name[255],/* CLASS env variable */
-                       classification[1024],
-                                       /* CLASSIFICATION env variable */
-                       content_type[1024],
-                                       /* CONTENT_TYPE env variable */
-                       device_uri[1024],
-                                       /* DEVICE_URI env variable */
-                       final_content_type[1024],
-                                       /* FINAL_CONTENT_TYPE env variable */
-                       lang[255],      /* LANG env variable */
-#ifdef __APPLE__
-                       apple_language[255],
-                                       /* APPLE_LANGUAGE env variable */
-#endif /* __APPLE__ */
-                       ppd[1024],      /* PPD env variable */
-                       printer_info[255],
-                                       /* PRINTER_INFO env variable */
-                       printer_location[255],
-                                       /* PRINTER_LOCATION env variable */
-                       printer_name[255],
-                                       /* PRINTER env variable */
-                       rip_max_cache[255];
-                                       /* RIP_MAX_CACHE env variable */
-  static char          *options = NULL;/* Full list of options */
-  static int           optlength = 0;  /* Length of option buffer */
+ /*
+  * Close pipes and status buffer...
+  */
 
+  cupsdRemoveSelect(job->status_buffer->fd);
 
-  cupsdLogJob(job, CUPSD_LOG_DEBUG2, "start_job: file = %d/%d",
-             job->current_file, job->num_files);
+  cupsdClosePipe(job->print_pipes);
+  cupsdClosePipe(job->back_pipes);
+  cupsdClosePipe(job->side_pipes);
+  cupsdClosePipe(job->status_pipes);
 
-  if (job->num_files == 0)
-  {
-    cupsdLogJob(job, CUPSD_LOG_ERROR, "No files, canceling job!");
-    cupsdCancelJob(job, 0, IPP_JOB_ABORTED);
-    return;
-  }
+  cupsdStatBufDelete(job->status_buffer);
+  job->status_buffer = NULL;
 
  /*
-  * Figure out what filters are required to convert from
-  * the source to the destination type...
+  * Process the exit status...
   */
 
-  filters   = NULL;
-  job->cost = 0;
+  printer_state = IPP_PRINTER_IDLE;
+  job_state     = IPP_JOB_COMPLETED;
+  message       = "Job completed.";
 
-  if (printer->raw)
+  if (job->status < 0)
   {
    /*
-    * Remote jobs and raw queues go directly to the printer without
-    * filtering...
+    * Backend had errors...
     */
 
-    cupsdLogJob(job, CUPSD_LOG_DEBUG, "Sending job to queue tagged as raw...");
+    int exit_code;                     /* Exit code from backend */
+
 
-    filters = NULL;
-  }
-  else
-  {
    /*
-    * Local jobs get filtered...
+    * Convert the status to an exit code.  Due to the way the W* macros are
+    * implemented on MacOS X (bug?), we have to store the exit status in a
+    * variable first and then convert...
     */
 
-    filters = mimeFilter(MimeDatabase, job->filetypes[job->current_file],
-                         printer->filetype, &(job->cost));
-
-    if (!filters)
-    {
-      cupsdLogJob(job, CUPSD_LOG_ERROR,
-                 "Unable to convert file %d to printable format!",
-                 job->current_file);
-      cupsdLogMessage(CUPSD_LOG_INFO,
-                      "Hint: Do you have Ghostscript installed?");
-
-      if (LogLevel < CUPSD_LOG_DEBUG)
-        cupsdLogMessage(CUPSD_LOG_INFO,
-                       "Hint: Try setting the LogLevel to \"debug\".");
-
-      job->current_file ++;
-
-      if (job->current_file == job->num_files)
-        cupsdCancelJob(job, 0, IPP_JOB_ABORTED);
+    exit_code = -job->status;
+    if (WIFEXITED(exit_code))
+      exit_code = WEXITSTATUS(exit_code);
+    else
+      exit_code = job->status;
 
-      return;
-    }
+    cupsdLogJob(job, CUPSD_LOG_INFO, "Backend returned status %d (%s)",
+               exit_code,
+               exit_code == CUPS_BACKEND_FAILED ? "failed" :
+                   exit_code == CUPS_BACKEND_AUTH_REQUIRED ?
+                       "authentication required" :
+                   exit_code == CUPS_BACKEND_HOLD ? "hold job" :
+                   exit_code == CUPS_BACKEND_STOP ? "stop printer" :
+                   exit_code == CUPS_BACKEND_CANCEL ? "cancel job" :
+                   exit_code < 0 ? "crashed" : "unknown");
 
    /*
-    * Remove NULL ("-") filters...
+    * Do what needs to be done...
     */
 
-    for (filter = (mime_filter_t *)cupsArrayFirst(filters);
-         filter;
-        filter = (mime_filter_t *)cupsArrayNext(filters))
-      if (!strcmp(filter->filter, "-"))
-        cupsArrayRemove(filters, filter);
-
-    if (cupsArrayCount(filters) == 0)
-    {
-      cupsArrayDelete(filters);
-      filters = NULL;
-    }
-
-   /*
-    * If this printer has any pre-filters, insert the required pre-filter
-    * in the filters array...
-    */
-
-    if (printer->prefiltertype && filters)
+    switch (exit_code)
     {
-      prefilters = cupsArrayNew(NULL, NULL);
+      default :
+      case CUPS_BACKEND_FAILED :
+         /*
+         * Backend failure, use the error-policy to determine how to
+         * act...
+         */
 
-      for (filter = (mime_filter_t *)cupsArrayFirst(filters);
-          filter;
-          filter = (mime_filter_t *)cupsArrayNext(filters))
-      {
-       if ((prefilter = mimeFilterLookup(MimeDatabase, filter->src,
-                                         printer->prefiltertype)))
-       {
-         cupsArrayAdd(prefilters, prefilter);
-         job->cost += prefilter->cost;
-       }
+          if (job->dtype & (CUPS_PRINTER_CLASS | CUPS_PRINTER_IMPLICIT))
+         {
+          /*
+           * Queued on a class - mark the job as pending and we'll retry on
+           * another printer...
+           */
 
-       cupsArrayAdd(prefilters, filter);
-      }
+            job_state = IPP_JOB_PENDING;
+           message   = "Retrying job on another printer.";
+          }
+         else if (!strcmp(job->printer->error_policy, "retry-current-job"))
+         {
+          /*
+           * The error policy is "retry-current-job" - mark the job as pending
+           * and we'll retry on the same printer...
+           */
 
-      cupsArrayDelete(filters);
-      filters = prefilters;
-    }
-  }
+            job_state = IPP_JOB_PENDING;
+           message   = "Retrying job on same printer.";
+          }
+         else if ((job->printer->type & CUPS_PRINTER_FAX) ||
+                  !strcmp(job->printer->error_policy, "retry-job"))
+         {
+          /*
+           * The job was queued on a fax or the error policy is "retry-job" -
+           * hold the job if the number of retries is less than the
+           * JobRetryLimit, otherwise abort the job.
+           */
 
- /*
-  * Set a minimum cost of 100 for all jobs so that FilterLimit
-  * works with raw queues and other low-cost paths.
-  */
+           job->tries ++;
 
-  if (job->cost < 100)
-    job->cost = 100;
+           if (job->tries >= JobRetryLimit)
+           {
+            /*
+             * Too many tries...
+             */
 
- /*
-  * See if the filter cost is too high...
-  */
+              snprintf(buffer, sizeof(buffer),
+                      "Job aborted after %d unsuccessful attempts.",
+                      JobRetryLimit);
+              job_state = IPP_JOB_ABORTED;
+             message   = buffer;
+           }
+           else
+           {
+            /*
+             * Try again in N seconds...
+             */
 
-  if ((FilterLevel + job->cost) > FilterLimit && FilterLevel > 0 &&
-      FilterLimit > 0)
-  {
-   /*
-    * Don't print this job quite yet...
-    */
+             set_hold_until(job, time(NULL) + JobRetryInterval);
 
-    cupsArrayDelete(filters);
+              snprintf(buffer, sizeof(buffer),
+                      "Job held for %d seconds since it could not be sent.",
+                      JobRetryInterval);
+              job_state = IPP_JOB_HELD;
+             message   = buffer;
+           }
+         }
+         else if (!strcmp(job->printer->error_policy, "abort-job"))
+         {
+           job_state = IPP_JOB_ABORTED;
+           message   = "Job aborted due to backend errors; please consult "
+                       "the error_log file for details.";
+         }
+         else
+          {
+           printer_state = IPP_PRINTER_STOPPED;
+           job_state     = IPP_JOB_PENDING;
+           message       = "Printer stopped due to backend errors; please "
+                           "consult the error_log file for details.";
+         }
+          break;
 
-    cupsdLogJob(job, CUPSD_LOG_INFO,
-               "Holding because filter limit has been reached.");
-    cupsdLogJob(job, CUPSD_LOG_DEBUG2,
-               "start_job: file=%d, cost=%d, level=%d, limit=%d",
-               job->current_file, job->cost, FilterLevel,
-               FilterLimit);
-    return;
-  }
+      case CUPS_BACKEND_CANCEL :
+         /*
+         * Abort the job...
+         */
 
-  FilterLevel += job->cost;
+         job_state = IPP_JOB_ABORTED;
+         message   = "Job aborted due to backend errors; please consult "
+                     "the error_log file for details.";
+          break;
 
- /*
-  * Add decompression/raw filter as needed...
-  */
+      case CUPS_BACKEND_HOLD :
+         /*
+         * Hold the job...
+         */
 
-  if ((!printer->raw && job->compressions[job->current_file]) ||
-      (!filters && !printer->remote &&
-       (job->num_files > 1 || !strncmp(printer->device_uri, "file:", 5))))
-  {
-   /*
-    * Add gziptoany filter to the front of the list...
-    */
+         cupsdSetJobHoldUntil(job, "indefinite", 1);
 
-    if (!filters)
-      filters = cupsArrayNew(NULL, NULL);
+         job_state = IPP_JOB_HELD;
+         message   = "Job held indefinitely due to backend errors; please "
+                     "consult the error_log file for details.";
+          break;
 
-    if (!cupsArrayInsert(filters, &gziptoany_filter))
-    {
-      cupsdLogJob(job, CUPSD_LOG_ERROR,
-                 "Unable to add decompression filter - %s", strerror(errno));
+      case CUPS_BACKEND_STOP :
+         /*
+         * Stop the printer...
+         */
 
-      cupsArrayDelete(filters);
+         printer_state = IPP_PRINTER_STOPPED;
+         job_state     = IPP_JOB_PENDING;
+         message       = "Printer stopped due to backend errors; please "
+                         "consult the error_log file for details.";
+          break;
 
-      job->current_file ++;
+      case CUPS_BACKEND_AUTH_REQUIRED :
+         /*
+         * Hold the job for authentication...
+         */
 
-      if (job->current_file == job->num_files)
-        cupsdCancelJob(job, 0, IPP_JOB_ABORTED);
+         cupsdSetJobHoldUntil(job, "auth-info-required", 1);
 
-      return;
+         job_state = IPP_JOB_HELD;
+         message   = "Job held for authentication.";
+          break;
     }
   }
-
- /*
-  * Add port monitor, if any...
-  */
-
-  if (printer->port_monitor)
+  else if (job->status > 0)
   {
    /*
-    * Add port monitor to the end of the list...
+    * Filter had errors; stop job...
     */
 
-    if (!filters)
-      filters = cupsArrayNew(NULL, NULL);
-
-    port_monitor.src  = NULL;
-    port_monitor.dst  = NULL;
-    port_monitor.cost = 0;
-
-    snprintf(port_monitor.filter, sizeof(port_monitor.filter),
-             "%s/monitor/%s", ServerBin, printer->port_monitor);
-
-    if (!cupsArrayAdd(filters, &port_monitor))
-    {
-      cupsdLogJob(job, CUPSD_LOG_ERROR,
-                 "Unable to add port monitor - %s", strerror(errno));
-
-      cupsArrayDelete(filters);
-
-      job->current_file ++;
-
-      if (job->current_file == job->num_files)
-        cupsdCancelJob(job, 0, IPP_JOB_ABORTED);
-
-      return;
-    }
+    job_state = IPP_JOB_STOPPED;
+    message   = "Job stopped due to filter errors; please consult the "
+               "error_log file for details.";
   }
 
  /*
-  * Make sure we don't go over the "MAX_FILTERS" limit...
+  * Update the printer and job state.
   */
 
-  if (cupsArrayCount(filters) > MAX_FILTERS)
-  {
-    cupsdLogJob(job, CUPSD_LOG_ERROR,
-               "Too many filters (%d > %d), unable to print!",
-               cupsArrayCount(filters), MAX_FILTERS);
-
-    cupsArrayDelete(filters);
-    cupsdCancelJob(job, 0, IPP_JOB_STOPPED);
+  cupsdSetJobState(job, job_state, CUPSD_JOB_DEFAULT, "%s", message);
+  cupsdSetPrinterState(job->printer, printer_state,
+                       printer_state == IPP_PRINTER_STOPPED);
+  update_job_attrs(job, 0);
 
-    return;
-  }
+  cupsArrayRemove(PrintingJobs, job);
 
  /*
-  * Update the printer and job state to "processing"...
+  * Clear the printer <-> job association...
   */
 
-  job->state->values[0].integer = IPP_JOB_PROCESSING;
-  job->state_value              = IPP_JOB_PROCESSING;
-  job->progress                 = 0;
-  job->status                   = 0;
-  job->printer                  = printer;
-  printer->job                  = job;
-
-  cupsdSetPrinterState(printer, IPP_PRINTER_PROCESSING, 0);
-
-  if (job->current_file == 0)
-  {
-   /*
-    * Add to the printing list...
-    */
-
-    cupsArrayAdd(PrintingJobs, job);
-    cupsdSetBusyState();
-
-   /*
-    * Set the processing time...
-    */
-
-    set_time(job, "time-at-processing");
-
-   /*
-    * Create the backchannel pipes and make them non-blocking...
-    */
-
-    cupsdOpenPipe(job->back_pipes);
-
-    fcntl(job->back_pipes[0], F_SETFL,
-          fcntl(job->back_pipes[0], F_GETFL) | O_NONBLOCK);
-
-    fcntl(job->back_pipes[1], F_SETFL,
-          fcntl(job->back_pipes[1], F_GETFL) | O_NONBLOCK);
-
-   /*
-    * Create the side-channel pipes and make them non-blocking...
-    */
-
-    socketpair(AF_LOCAL, SOCK_STREAM, 0, job->side_pipes);
-
-    fcntl(job->side_pipes[0], F_SETFL,
-          fcntl(job->side_pipes[0], F_GETFL) | O_NONBLOCK);
-
-    fcntl(job->side_pipes[1], F_SETFL,
-          fcntl(job->side_pipes[1], F_GETFL) | O_NONBLOCK);
-  }
+  job->printer->job = NULL;
+  job->printer      = NULL;
 
  /*
-  * Determine if we are printing a banner page or not...
+  * Try printing another job...
   */
 
-  if (job->job_sheets == NULL)
-  {
-    cupsdLogJob(job, CUPSD_LOG_DEBUG, "No job-sheets attribute.");
-    if ((job->job_sheets =
-         ippFindAttribute(job->attrs, "job-sheets", IPP_TAG_ZERO)) != NULL)
-      cupsdLogJob(job, CUPSD_LOG_DEBUG,
-                 "... but someone added one without setting job_sheets!");
-  }
-  else if (job->job_sheets->num_values == 1)
-    cupsdLogJob(job, CUPSD_LOG_DEBUG, "job-sheets=%s",
-               job->job_sheets->values[0].string.text);
-  else
-    cupsdLogJob(job, CUPSD_LOG_DEBUG, "job-sheets=%s,%s",
-                job->job_sheets->values[0].string.text,
-                job->job_sheets->values[1].string.text);
+  if (printer_state != IPP_PRINTER_STOPPED)
+    cupsdCheckJobs();
+}
 
-  if (printer->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT))
-    banner_page = 0;
-  else if (job->job_sheets == NULL)
-    banner_page = 0;
-  else if (strcasecmp(job->job_sheets->values[0].string.text, "none") != 0 &&
-          job->current_file == 0)
-    banner_page = 1;
-  else if (job->job_sheets->num_values > 1 &&
-          strcasecmp(job->job_sheets->values[1].string.text, "none") != 0 &&
-          job->current_file == (job->num_files - 1))
-    banner_page = 1;
-  else
-    banner_page = 0;
 
-  cupsdLogJob(job, CUPSD_LOG_DEBUG, "banner_page = %d", banner_page);
+/*
+ * 'get_options()' - Get a string containing the job options.
+ */
+
+static char *                          /* O - Options string */
+get_options(cupsd_job_t *job,          /* I - Job */
+            int         banner_page,   /* I - Printing a banner page? */
+           char        *copies,        /* I - Copies buffer */
+           size_t      copies_size,    /* I - Size of copies buffer */
+           char        *title,         /* I - Title buffer */
+           size_t      title_size)     /* I - Size of title buffer */
+{
+  int                  i;              /* Looping var */
+  char                 *optptr,        /* Pointer to options */
+                       *valptr;        /* Pointer in value string */
+  ipp_attribute_t      *attr;          /* Current attribute */
+  static char          *options = NULL;/* Full list of options */
+  static int           optlength = 0;  /* Length of option buffer */
+
 
  /*
   * Building the options string is harder than it needs to be, but
@@ -2891,22 +2717,16 @@ start_job(cupsd_job_t     *job,         /* I - Job ID */
 
   if (i > optlength || !options)
   {
-    if (optlength == 0)
+    if (!options)
       optptr = malloc(i);
     else
       optptr = realloc(options, i);
 
-    if (optptr == NULL)
+    if (!optptr)
     {
       cupsdLogJob(job, CUPSD_LOG_CRIT,
                  "Unable to allocate %d bytes for option buffer!", i);
-
-      cupsArrayDelete(filters);
-
-      FilterLevel -= job->cost;
-
-      cupsdCancelJob(job, 0, IPP_JOB_ABORTED);
-      return;
+      return (NULL);
     }
 
     options   = optptr;
@@ -2921,7 +2741,7 @@ start_job(cupsd_job_t     *job,           /* I - Job ID */
   optptr  = options;
   *optptr = '\0';
 
-  snprintf(title, sizeof(title), "%s-%d", printer->name, job->id);
+  snprintf(title, sizeof(title), "%s-%d", job->printer->name, job->id);
   strcpy(copies, "1");
 
   for (attr = job->attrs->attrs; attr != NULL; attr = attr->next)
@@ -2962,7 +2782,7 @@ start_job(cupsd_job_t     *job,           /* I - Job ID */
           strcmp(attr->name, "job-impressions") &&
           strcmp(attr->name, "job-originating-host-name") &&
           strcmp(attr->name, "job-uuid") &&
-          !(printer->type & CUPS_PRINTER_REMOTE))
+          !(job->printer->type & CUPS_PRINTER_REMOTE))
        continue;
 
       if ((!strcmp(attr->name, "job-impressions") ||
@@ -3061,572 +2881,739 @@ start_job(cupsd_job_t     *job,               /* I - Job ID */
     }
   }
 
- /*
-  * Build the command-line arguments for the filters.  Each filter
-  * has 6 or 7 arguments:
-  *
-  *     argv[0] = printer
-  *     argv[1] = job ID
-  *     argv[2] = username
-  *     argv[3] = title
-  *     argv[4] = # copies
-  *     argv[5] = options
-  *     argv[6] = filename (optional; normally stdin)
-  *
-  * This allows legacy printer drivers that use the old System V
-  * printing interface to be used by CUPS.
-  *
-  * For remote jobs, we send all of the files in the argument list.
+
+  return (options);
+}
+
+
+/*
+ * 'ipp_length()' - Compute the size of the buffer needed to hold
+ *                 the textual IPP attributes.
+ */
+
+static int                             /* O - Size of attribute buffer */
+ipp_length(ipp_t *ipp)                 /* I - IPP request */
+{
+  int                  bytes;          /* Number of bytes */
+  int                  i;              /* Looping var */
+  ipp_attribute_t      *attr;          /* Current attribute */
+
+
+ /*
+  * Loop through all attributes...
   */
 
-  if (printer->remote && job->num_files > 1)
-    argv = calloc(7 + job->num_files, sizeof(char *));
-  else
-    argv = calloc(8, sizeof(char *));
+  bytes = 0;
 
-  if (!argv)
+  for (attr = ipp->attrs; attr != NULL; attr = attr->next)
   {
-    cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to allocate argument array!");
-    cupsArrayDelete(filters);
+   /*
+    * Skip attributes that won't be sent to filters...
+    */
 
-    FilterLevel -= job->cost;
+    if (attr->value_tag == IPP_TAG_MIMETYPE ||
+       attr->value_tag == IPP_TAG_NAMELANG ||
+       attr->value_tag == IPP_TAG_TEXTLANG ||
+       attr->value_tag == IPP_TAG_URI ||
+       attr->value_tag == IPP_TAG_URISCHEME)
+      continue;
 
-    cupsdStopPrinter(printer, 0);
-    return;
-  }
+    if (strncmp(attr->name, "time-", 5) == 0)
+      continue;
 
-  sprintf(jobid, "%d", job->id);
+   /*
+    * Add space for a leading space and commas between each value.
+    * For the first attribute, the leading space isn't used, so the
+    * extra byte can be used as the nul terminator...
+    */
 
-  argv[0] = printer->name;
-  argv[1] = jobid;
-  argv[2] = job->username;
-  argv[3] = title;
-  argv[4] = copies;
-  argv[5] = options;
+    bytes ++;                          /* " " separator */
+    bytes += attr->num_values;         /* "," separators */
 
-  if (printer->remote && job->num_files > 1)
-  {
-    for (i = 0; i < job->num_files; i ++)
+   /*
+    * Boolean attributes appear as "foo,nofoo,foo,nofoo", while
+    * other attributes appear as "foo=value1,value2,...,valueN".
+    */
+
+    if (attr->value_tag != IPP_TAG_BOOLEAN)
+      bytes += strlen(attr->name);
+    else
+      bytes += attr->num_values * strlen(attr->name);
+
+   /*
+    * Now add the size required for each value in the attribute...
+    */
+
+    switch (attr->value_tag)
     {
-      snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot,
-               job->id, i + 1);
-      argv[6 + i] = strdup(filename);
+      case IPP_TAG_INTEGER :
+      case IPP_TAG_ENUM :
+         /*
+         * Minimum value of a signed integer is -2147483647, or 11 digits.
+         */
+
+         bytes += attr->num_values * 11;
+         break;
+
+      case IPP_TAG_BOOLEAN :
+         /*
+         * Add two bytes for each false ("no") value...
+         */
+
+          for (i = 0; i < attr->num_values; i ++)
+           if (!attr->values[i].boolean)
+             bytes += 2;
+         break;
+
+      case IPP_TAG_RANGE :
+         /*
+         * A range is two signed integers separated by a hyphen, or
+         * 23 characters max.
+         */
+
+         bytes += attr->num_values * 23;
+         break;
+
+      case IPP_TAG_RESOLUTION :
+         /*
+         * A resolution is two signed integers separated by an "x" and
+         * suffixed by the units, or 26 characters max.
+         */
+
+         bytes += attr->num_values * 26;
+         break;
+
+      case IPP_TAG_STRING :
+      case IPP_TAG_TEXT :
+      case IPP_TAG_NAME :
+      case IPP_TAG_KEYWORD :
+      case IPP_TAG_CHARSET :
+      case IPP_TAG_LANGUAGE :
+      case IPP_TAG_URI :
+         /*
+         * Strings can contain characters that need quoting.  We need
+         * at least 2 * len + 2 characters to cover the quotes and
+         * any backslashes in the string.
+         */
+
+          for (i = 0; i < attr->num_values; i ++)
+           bytes += 2 * strlen(attr->values[i].string.text) + 2;
+         break;
+
+       default :
+         break; /* anti-compiler-warning-code */
     }
   }
-  else
+
+  return (bytes);
+}
+
+
+/*
+ * 'load_job_cache()' - Load jobs from the job.cache file.
+ */
+
+static void
+load_job_cache(const char *filename)   /* I - job.cache filename */
+{
+  cups_file_t  *fp;                    /* job.cache file */
+  char         line[1024],             /* Line buffer */
+               *value;                 /* Value on line */
+  int          linenum;                /* Line number in file */
+  cupsd_job_t  *job;                   /* Current job */
+  int          jobid;                  /* Job ID */
+  char         jobfile[1024];          /* Job filename */
+
+
+ /*
+  * Open the job.cache file...
+  */
+
+  if ((fp = cupsFileOpen(filename, "r")) == NULL)
   {
-    snprintf(filename, sizeof(filename), "%s/d%05d-%03d", RequestRoot,
-             job->id, job->current_file + 1);
-    argv[6] = filename;
-  }
+    if (errno != ENOENT)
+      cupsdLogMessage(CUPSD_LOG_ERROR,
+                      "Unable to open job cache file \"%s\": %s",
+                      filename, strerror(errno));
 
-  for (i = 0; argv[i]; i ++)
-    cupsdLogJob(job, CUPSD_LOG_DEBUG,
-               "argv[%d]=\"%s\"", i, argv[i]);
+    load_request_root();
+
+    return;
+  }
 
  /*
-  * Create environment variable strings for the filters...
+  * Read entries from the job cache file and create jobs as needed.
   */
 
-  attr = ippFindAttribute(job->attrs, "attributes-natural-language",
-                          IPP_TAG_LANGUAGE);
+  cupsdLogMessage(CUPSD_LOG_INFO, "Loading job cache file \"%s\"...",
+                  filename);
 
-#ifdef __APPLE__
-  strcpy(apple_language, "APPLE_LANGUAGE=");
-  _cupsAppleLanguage(attr->values[0].string.text,
-                    apple_language + 15, sizeof(apple_language) - 15);
-#endif /* __APPLE__ */
+  linenum = 0;
+  job     = NULL;
+
+  while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum))
+  {
+    if (!strcasecmp(line, "NextJobId"))
+    {
+      if (value)
+        NextJobId = atoi(value);
+    }
+    else if (!strcasecmp(line, "<Job"))
+    {
+      if (job)
+      {
+        cupsdLogMessage(CUPSD_LOG_ERROR, "Missing </Job> directive on line %d!",
+                       linenum);
+        continue;
+      }
+
+      if (!value)
+      {
+        cupsdLogMessage(CUPSD_LOG_ERROR, "Missing job ID on line %d!", linenum);
+       continue;
+      }
+
+      jobid = atoi(value);
+
+      if (jobid < 1)
+      {
+        cupsdLogMessage(CUPSD_LOG_ERROR, "Bad job ID %d on line %d!", jobid,
+                       linenum);
+        continue;
+      }
+
+      snprintf(jobfile, sizeof(jobfile), "%s/c%05d", RequestRoot, jobid);
+      if (access(jobfile, 0))
+      {
+        cupsdLogMessage(CUPSD_LOG_ERROR, "[Job %d] Files have gone away!",
+                       jobid);
+        continue;
+      }
+
+      job = calloc(1, sizeof(cupsd_job_t));
+      if (!job)
+      {
+        cupsdLogMessage(CUPSD_LOG_EMERG,
+                       "[Job %d] Unable to allocate memory for job!", jobid);
+        break;
+      }
+
+      job->id              = jobid;
+      job->back_pipes[0]   = -1;
+      job->back_pipes[1]   = -1;
+      job->print_pipes[0]  = -1;
+      job->print_pipes[1]  = -1;
+      job->side_pipes[0]   = -1;
+      job->side_pipes[1]   = -1;
+      job->status_pipes[0] = -1;
+      job->status_pipes[1] = -1;
+
+      cupsdLogMessage(CUPSD_LOG_DEBUG, "[Job %d] Loading from cache...",
+                      job->id);
+    }
+    else if (!job)
+    {
+      cupsdLogMessage(CUPSD_LOG_ERROR,
+                     "Missing <Job #> directive on line %d!", linenum);
+      continue;
+    }
+    else if (!strcasecmp(line, "</Job>"))
+    {
+      cupsArrayAdd(Jobs, job);
+
+      if (job->state_value <= IPP_JOB_STOPPED)
+      {
+        cupsArrayAdd(ActiveJobs, job);
+       cupsdLoadJob(job);
+      }
+
+      job = NULL;
+    }
+    else if (!value)
+    {
+      cupsdLogMessage(CUPSD_LOG_ERROR, "Missing value on line %d!", linenum);
+      continue;
+    }
+    else if (!strcasecmp(line, "State"))
+    {
+      job->state_value = (ipp_jstate_t)atoi(value);
+
+      if (job->state_value < IPP_JOB_PENDING)
+        job->state_value = IPP_JOB_PENDING;
+      else if (job->state_value > IPP_JOB_COMPLETED)
+        job->state_value = IPP_JOB_COMPLETED;
+    }
+    else if (!strcasecmp(line, "Priority"))
+    {
+      job->priority = atoi(value);
+    }
+    else if (!strcasecmp(line, "Username"))
+    {
+      cupsdSetString(&job->username, value);
+    }
+    else if (!strcasecmp(line, "Destination"))
+    {
+      cupsdSetString(&job->dest, value);
+    }
+    else if (!strcasecmp(line, "DestType"))
+    {
+      job->dtype = (cups_ptype_t)atoi(value);
+    }
+    else if (!strcasecmp(line, "NumFiles"))
+    {
+      job->num_files = atoi(value);
+
+      if (job->num_files < 0)
+      {
+       cupsdLogMessage(CUPSD_LOG_ERROR, "Bad NumFiles value %d on line %d!",
+                       job->num_files, linenum);
+        job->num_files = 0;
+       continue;
+      }
+
+      if (job->num_files > 0)
+      {
+        snprintf(jobfile, sizeof(jobfile), "%s/d%05d-001", RequestRoot,
+                job->id);
+        if (access(jobfile, 0))
+       {
+         cupsdLogMessage(CUPSD_LOG_INFO, "[Job %d] Data files have gone away!",
+                         job->id);
+          job->num_files = 0;
+         continue;
+       }
+
+        job->filetypes    = calloc(job->num_files, sizeof(mime_type_t *));
+       job->compressions = calloc(job->num_files, sizeof(int));
+
+        if (!job->filetypes || !job->compressions)
+       {
+         cupsdLogMessage(CUPSD_LOG_EMERG,
+                         "[Job %d] Unable to allocate memory for %d files!",
+                         job->id, job->num_files);
+          break;
+       }
+      }
+    }
+    else if (!strcasecmp(line, "File"))
+    {
+      int      number,                 /* File number */
+               compression;            /* Compression value */
+      char     super[MIME_MAX_SUPER],  /* MIME super type */
+               type[MIME_MAX_TYPE];    /* MIME type */
+
+
+      if (sscanf(value, "%d%*[ \t]%15[^/]/%255s%d", &number, super, type,
+                 &compression) != 4)
+      {
+        cupsdLogMessage(CUPSD_LOG_ERROR, "Bad File on line %d!", linenum);
+       continue;
+      }
+
+      if (number < 1 || number > job->num_files)
+      {
+        cupsdLogMessage(CUPSD_LOG_ERROR, "Bad File number %d on line %d!",
+                       number, linenum);
+        continue;
+      }
 
-  switch (strlen(attr->values[0].string.text))
-  {
-    default :
-       /*
-        * This is an unknown or badly formatted language code; use
-       * the POSIX locale...
-       */
+      number --;
 
-       strcpy(lang, "LANG=C");
-       break;
+      job->compressions[number] = compression;
+      job->filetypes[number]    = mimeType(MimeDatabase, super, type);
 
-    case 2 :
+      if (!job->filetypes[number])
+      {
        /*
-        * Just the language code (ll)...
+        * If the original MIME type is unknown, auto-type it!
        */
 
-        snprintf(lang, sizeof(lang), "LANG=%s.UTF8",
-                attr->values[0].string.text);
-        break;
+        cupsdLogMessage(CUPSD_LOG_ERROR,
+                       "[Job %d] Unknown MIME type %s/%s for file %d!",
+                       job->id, super, type, number + 1);
+
+        snprintf(jobfile, sizeof(jobfile), "%s/d%05d-%03d", RequestRoot,
+                job->id, number + 1);
+        job->filetypes[number] = mimeFileType(MimeDatabase, jobfile, NULL,
+                                             job->compressions + number);
 
-    case 5 :
        /*
-        * Language and country code (ll-cc)...
+        * If that didn't work, assume it is raw...
        */
 
-        snprintf(lang, sizeof(lang), "LANG=%c%c_%c%c.UTF8",
-                attr->values[0].string.text[0],
-                attr->values[0].string.text[1],
-                toupper(attr->values[0].string.text[3] & 255),
-                toupper(attr->values[0].string.text[4] & 255));
-        break;
-  }
-
-  attr = ippFindAttribute(job->attrs, "document-format",
-                          IPP_TAG_MIMETYPE);
-  if (attr != NULL &&
-      (optptr = strstr(attr->values[0].string.text, "charset=")) != NULL)
-    snprintf(charset, sizeof(charset), "CHARSET=%s", optptr + 8);
-  else
-  {
-    attr = ippFindAttribute(job->attrs, "attributes-charset",
-                           IPP_TAG_CHARSET);
-    snprintf(charset, sizeof(charset), "CHARSET=%s",
-             attr->values[0].string.text);
+        if (!job->filetypes[number])
+         job->filetypes[number] = mimeType(MimeDatabase, "application",
+                                           "vnd.cups-raw");
+      }
+    }
+    else
+      cupsdLogMessage(CUPSD_LOG_ERROR, "Unknown %s directive on line %d!",
+                      line, linenum);
   }
 
-  snprintf(content_type, sizeof(content_type), "CONTENT_TYPE=%s/%s",
-           job->filetypes[job->current_file]->super,
-           job->filetypes[job->current_file]->type);
-  snprintf(device_uri, sizeof(device_uri), "DEVICE_URI=%s",
-           printer->device_uri);
-  snprintf(ppd, sizeof(ppd), "PPD=%s/ppd/%s.ppd", ServerRoot, printer->name);
-  snprintf(printer_info, sizeof(printer_name), "PRINTER_INFO=%s",
-           printer->info ? printer->info : "");
-  snprintf(printer_location, sizeof(printer_name), "PRINTER_LOCATION=%s",
-           printer->location ? printer->location : "");
-  snprintf(printer_name, sizeof(printer_name), "PRINTER=%s", printer->name);
-  snprintf(rip_max_cache, sizeof(rip_max_cache), "RIP_MAX_CACHE=%s", RIPCache);
+  cupsFileClose(fp);
+}
 
-  envc = cupsdLoadEnv(envp, (int)(sizeof(envp) / sizeof(envp[0])));
 
-  envp[envc ++] = charset;
-  envp[envc ++] = lang;
-#ifdef __APPLE__
-  envp[envc ++] = apple_language;
-#endif /* __APPLE__ */
-  envp[envc ++] = ppd;
-  envp[envc ++] = rip_max_cache;
-  envp[envc ++] = content_type;
-  envp[envc ++] = device_uri;
-  envp[envc ++] = printer_info;
-  envp[envc ++] = printer_location;
-  envp[envc ++] = printer_name;
-  envp[envc ++] = banner_page ? "CUPS_FILETYPE=job-sheet" :
-                                "CUPS_FILETYPE=document";
+/*
+ * 'load_next_job_id()' - Load the NextJobId value from the job.cache file.
+ */
 
-  if (!printer->remote && !printer->raw)
-  {
-    filter = (mime_filter_t *)cupsArrayLast(filters);
+static void
+load_next_job_id(const char *filename) /* I - job.cache filename */
+{
+  cups_file_t  *fp;                    /* job.cache file */
+  char         line[1024],             /* Line buffer */
+               *value;                 /* Value on line */
+  int          linenum;                /* Line number in file */
+  int          next_job_id;            /* NextJobId value from line */
 
-    if (printer->port_monitor)
-      filter = (mime_filter_t *)cupsArrayPrev(filters);
 
-    if (filter && filter->dst)
-    {
-      snprintf(final_content_type, sizeof(final_content_type),
-              "FINAL_CONTENT_TYPE=%s/%s",
-              filter->dst->super, filter->dst->type);
-      envp[envc ++] = final_content_type;
-    }
-  }
+ /*
+  * Read the NextJobId directive from the job.cache file and use
+  * the value (if any).
+  */
 
-  if (Classification && !banner_page)
+  if ((fp = cupsFileOpen(filename, "r")) == NULL)
   {
-    if ((attr = ippFindAttribute(job->attrs, "job-sheets",
-                                 IPP_TAG_NAME)) == NULL)
-      snprintf(classification, sizeof(classification), "CLASSIFICATION=%s",
-               Classification);
-    else if (attr->num_values > 1 &&
-             strcmp(attr->values[1].string.text, "none") != 0)
-      snprintf(classification, sizeof(classification), "CLASSIFICATION=%s",
-               attr->values[1].string.text);
-    else
-      snprintf(classification, sizeof(classification), "CLASSIFICATION=%s",
-               attr->values[0].string.text);
+    if (errno != ENOENT)
+      cupsdLogMessage(CUPSD_LOG_ERROR,
+                      "Unable to open job cache file \"%s\": %s",
+                      filename, strerror(errno));
 
-    envp[envc ++] = classification;
+    return;
   }
 
-  if (job->dtype & (CUPS_PRINTER_CLASS | CUPS_PRINTER_IMPLICIT))
+  cupsdLogMessage(CUPSD_LOG_INFO,
+                  "Loading NextJobId from job cache file \"%s\"...", filename);
+
+  linenum = 0;
+
+  while (cupsFileGetConf(fp, line, sizeof(line), &value, &linenum))
   {
-    snprintf(class_name, sizeof(class_name), "CLASS=%s", job->dest);
-    envp[envc ++] = class_name;
+    if (!strcasecmp(line, "NextJobId"))
+    {
+      if (value)
+      {
+        next_job_id = atoi(value);
+
+        if (next_job_id > NextJobId)
+         NextJobId = next_job_id;
+      }
+      break;
+    }
   }
 
-  if (job->auth_username)
-    envp[envc ++] = job->auth_username;
-  if (job->auth_domain)
-    envp[envc ++] = job->auth_domain;
-  if (job->auth_password)
-    envp[envc ++] = job->auth_password;
+  cupsFileClose(fp);
+}
 
-#ifdef HAVE_GSSAPI
-  if (job->ccname)
-    envp[envc ++] = job->ccname;
-#endif /* HAVE_GSSAPI */
 
-  envp[envc] = NULL;
+/*
+ * 'load_request_root()' - Load jobs from the RequestRoot directory.
+ */
 
-  for (i = 0; i < envc; i ++)
-    if (!strncmp(envp[i], "AUTH_", 5))
-      cupsdLogJob(job, CUPSD_LOG_DEBUG, "envp[%d]=\"AUTH_%c****\"", i,
-                  envp[i][5]);
-    else if (strncmp(envp[i], "DEVICE_URI=", 11))
-      cupsdLogJob(job, CUPSD_LOG_DEBUG, "envp[%d]=\"%s\"", i, envp[i]);
-    else
-      cupsdLogJob(job, CUPSD_LOG_DEBUG, "envp[%d]=\"DEVICE_URI=%s\"", i,
-                  printer->sanitized_device_uri);
+static void
+load_request_root(void)
+{
+  cups_dir_t           *dir;           /* Directory */
+  cups_dentry_t                *dent;          /* Directory entry */
+  cupsd_job_t          *job;           /* New job */
 
-  if (printer->remote)
-    job->current_file = job->num_files;
-  else
-    job->current_file ++;
 
  /*
-  * Now create processes for all of the filters...
+  * Open the requests directory...
   */
 
-  filterfds[0][0] = -1;
-  filterfds[0][1] = -1;
-  filterfds[1][0] = -1;
-  filterfds[1][1] = -1;
+  cupsdLogMessage(CUPSD_LOG_DEBUG, "Scanning %s for jobs...", RequestRoot);
 
-  if (!job->status_buffer)
+  if ((dir = cupsDirOpen(RequestRoot)) == NULL)
   {
-    if (cupsdOpenPipe(job->status_pipes))
-    {
-      cupsdLogJob(job, CUPSD_LOG_ERROR,
-                 "Unable to create job status pipes - %s.", strerror(errno));
-      snprintf(printer->state_message, sizeof(printer->state_message),
-              "Unable to create status pipes - %s.", strerror(errno));
-
-      cupsdAddPrinterHistory(printer);
-
-      cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
-                   "Job canceled because the server could not create the job "
-                   "status pipes.");
-
-      goto abort_job;
-    }
-
-    cupsdLogJob(job, CUPSD_LOG_DEBUG2,
-               "start_job: status_pipes = [ %d %d ]",
-               job->status_pipes[0], job->status_pipes[1]);
-
-    job->status_buffer = cupsdStatBufNew(job->status_pipes[0], NULL);
-    job->status_level  = CUPSD_LOG_INFO;
+    cupsdLogMessage(CUPSD_LOG_ERROR,
+                    "Unable to open spool directory \"%s\": %s",
+                    RequestRoot, strerror(errno));
+    return;
   }
 
-  job->status = 0;
-  memset(job->filters, 0, sizeof(job->filters));
-
-  if (!job->profile)
-    job->profile = cupsdCreateProfile(job->id);
-
-  for (i = 0, slot = 0, filter = (mime_filter_t *)cupsArrayFirst(filters);
-       filter;
-       i ++, filter = (mime_filter_t *)cupsArrayNext(filters))
-  {
-    if (filter->filter[0] != '/')
-      snprintf(command, sizeof(command), "%s/filter/%s", ServerBin,
-               filter->filter);
-    else
-      strlcpy(command, filter->filter, sizeof(command));
+ /*
+  * Read all the c##### files...
+  */
 
-    if (i < (cupsArrayCount(filters) - 1))
+  while ((dent = cupsDirRead(dir)) != NULL)
+    if (strlen(dent->filename) >= 6 && dent->filename[0] == 'c')
     {
-      if (cupsdOpenPipe(filterfds[slot]))
-      {
-       cupsdLogJob(job, CUPSD_LOG_ERROR,
-                   "Unable to create job filter pipes - %s.", strerror(errno));
-       snprintf(printer->state_message, sizeof(printer->state_message),
-               "Unable to create filter pipes - %s.", strerror(errno));
-       cupsdAddPrinterHistory(printer);
-
-       cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
-                      "Job canceled because the server could not create the "
-                     "filter pipes.");
+     /*
+      * Allocate memory for the job...
+      */
 
-        goto abort_job;
-      }
-    }
-    else
-    {
-      if (job->current_file == 1)
+      if ((job = calloc(sizeof(cupsd_job_t), 1)) == NULL)
       {
-       if (strncmp(printer->device_uri, "file:", 5) != 0)
-       {
-         if (cupsdOpenPipe(job->print_pipes))
-         {
-           cupsdLogJob(job, CUPSD_LOG_ERROR,
-                       "Unable to create job backend pipes - %s.",
-                       strerror(errno));
-           snprintf(printer->state_message, sizeof(printer->state_message),
-                   "Unable to create backend pipes - %s.", strerror(errno));
-           cupsdAddPrinterHistory(printer);
+        cupsdLogMessage(CUPSD_LOG_ERROR, "Ran out of memory for jobs!");
+       cupsDirClose(dir);
+       return;
+      }
 
-           cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
-                         "Job canceled because the server could not create "
-                         "the backend pipes.");
+     /*
+      * Assign the job ID...
+      */
 
-            goto abort_job;
-         }
-       }
-       else
-       {
-         job->print_pipes[0] = -1;
-         if (!strcmp(printer->device_uri, "file:/dev/null") ||
-             !strcmp(printer->device_uri, "file:///dev/null"))
-           job->print_pipes[1] = -1;
-         else
-         {
-           if (!strncmp(printer->device_uri, "file:/dev/", 10))
-             job->print_pipes[1] = open(printer->device_uri + 5,
-                                        O_WRONLY | O_EXCL);
-           else if (!strncmp(printer->device_uri, "file:///dev/", 12))
-             job->print_pipes[1] = open(printer->device_uri + 7,
-                                        O_WRONLY | O_EXCL);
-           else if (!strncmp(printer->device_uri, "file:///", 8))
-             job->print_pipes[1] = open(printer->device_uri + 7,
-                                        O_WRONLY | O_CREAT | O_TRUNC, 0600);
-           else
-             job->print_pipes[1] = open(printer->device_uri + 5,
-                                        O_WRONLY | O_CREAT | O_TRUNC, 0600);
+      job->id              = atoi(dent->filename + 1);
+      job->back_pipes[0]   = -1;
+      job->back_pipes[1]   = -1;
+      job->print_pipes[0]  = -1;
+      job->print_pipes[1]  = -1;
+      job->side_pipes[0]   = -1;
+      job->side_pipes[1]   = -1;
+      job->status_pipes[0] = -1;
+      job->status_pipes[1] = -1;
 
-           if (job->print_pipes[1] < 0)
-           {
-              cupsdLogJob(job, CUPSD_LOG_ERROR,
-                         "Unable to open output file \"%s\" - %s.",
-                         printer->device_uri, strerror(errno));
-              snprintf(printer->state_message, sizeof(printer->state_message),
-                      "Unable to open output file \"%s\" - %s.",
-                      printer->device_uri, strerror(errno));
+      if (job->id >= NextJobId)
+        NextJobId = job->id + 1;
 
-             cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
-                           "Job canceled because the server could not open the "
-                           "output file.");
+     /*
+      * Load the job...
+      */
 
-              goto abort_job;
-           }
+      cupsdLoadJob(job);
 
-           fcntl(job->print_pipes[1], F_SETFD,
-                 fcntl(job->print_pipes[1], F_GETFD) | FD_CLOEXEC);
-          }
-       }
+     /*
+      * Insert the job into the array, sorting by job priority and ID...
+      */
 
-       cupsdLogJob(job, CUPSD_LOG_DEBUG2,
-                   "start_job: print_pipes = [ %d %d ]",
-                   job->print_pipes[0], job->print_pipes[1]);
-      }
+      cupsArrayAdd(Jobs, job);
 
-      filterfds[slot][0] = job->print_pipes[0];
-      filterfds[slot][1] = job->print_pipes[1];
+      if (job->state_value <= IPP_JOB_STOPPED)
+        cupsArrayAdd(ActiveJobs, job);
+      else
+        unload_job(job);
     }
 
-    cupsdLogJob(job, CUPSD_LOG_DEBUG2, "start_job: filter=\"%s\"", command);
-    cupsdLogJob(job, CUPSD_LOG_DEBUG2, "start_job: filterfds[%d]=[ %d %d ]",
-               slot, filterfds[slot][0], filterfds[slot][1]);
+  cupsDirClose(dir);
+}
 
-    pid = cupsdStartProcess(command, argv, envp, filterfds[!slot][0],
-                            filterfds[slot][1], job->status_pipes[1],
-                           job->back_pipes[0], job->side_pipes[0], 0,
-                           job->profile, job->filters + i);
 
-    cupsdLogJob(job, CUPSD_LOG_DEBUG2,
-               "start_job: Closing filter pipes for slot %d [ %d %d ]...",
-               !slot, filterfds[!slot][0], filterfds[!slot][1]);
+/*
+ * 'set_hold_until()' - Set the hold time and update job-hold-until attribute.
+ */
 
-    cupsdClosePipe(filterfds[!slot]);
+static void
+set_hold_until(cupsd_job_t *job,       /* I - Job to update */
+              time_t      holdtime)    /* I - Hold until time */
+{
+  ipp_attribute_t      *attr;          /* job-hold-until attribute */
+  struct tm            *holddate;      /* Hold date */
+  char                 holdstr[64];    /* Hold time */
 
-    if (pid == 0)
-    {
-      cupsdLogJob(job, CUPSD_LOG_ERROR, "Unable to start filter \"%s\" - %s.",
-                 filter->filter, strerror(errno));
-      snprintf(printer->state_message, sizeof(printer->state_message),
-               "Unable to start filter \"%s\" - %s.",
-               filter->filter, strerror(errno));
 
-      cupsdAddPrinterHistory(printer);
+ /*
+  * Set the hold_until value and hold the job...
+  */
 
-      cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
-                    "Job canceled because the server could not execute a "
-                   "filter.");
+  cupsdLogMessage(CUPSD_LOG_DEBUG, "set_hold_until: hold_until = %d",
+                  (int)holdtime);
 
-      goto abort_job;
-    }
+  job->state->values[0].integer = IPP_JOB_HELD;
+  job->state_value              = IPP_JOB_HELD;
+  job->hold_until               = holdtime;
 
-    cupsdLogJob(job, CUPSD_LOG_INFO, "Started filter %s (PID %d)", command,
-                pid);
+ /*
+  * Update the job-hold-until attribute with a string representing GMT
+  * time (HH:MM:SS)...
+  */
 
-    argv[6] = NULL;
-    slot    = !slot;
-  }
+  holddate = gmtime(&holdtime);
+  snprintf(holdstr, sizeof(holdstr), "%d:%d:%d", holddate->tm_hour,
+          holddate->tm_min, holddate->tm_sec);
 
-  cupsArrayDelete(filters);
-  filters = NULL;
+  if ((attr = ippFindAttribute(job->attrs, "job-hold-until",
+                               IPP_TAG_KEYWORD)) == NULL)
+    attr = ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_NAME);
 
  /*
-  * Finally, pipe the final output into a backend process if needed...
+  * Either add the attribute or update the value of the existing one
   */
 
-  if (strncmp(printer->device_uri, "file:", 5) != 0)
-  {
-    if (job->current_file == 1 || printer->remote)
-    {
-      sscanf(printer->device_uri, "%254[^:]", method);
-      snprintf(command, sizeof(command), "%s/backend/%s", ServerBin, method);
+  if (attr == NULL)
+    ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_KEYWORD, "job-hold-until",
+                 NULL, holdstr);
+  else
+    cupsdSetString(&attr->values[0].string.text, holdstr);
 
-     /*
-      * See if the backend needs to run as root...
-      */
+  job->dirty = 1;
+  cupsdMarkDirty(CUPSD_DIRTY_JOBS);
+}
 
-      if (RunUser)
-        backroot = 0;
-      else if (stat(command, &backinfo))
-       backroot = 0;
-      else
-        backroot = !(backinfo.st_mode & (S_IRWXG | S_IRWXO));
 
-      argv[0] = printer->sanitized_device_uri;
+/*
+ * 'set_time()' - Set one of the "time-at-xyz" attributes.
+ */
 
-      filterfds[slot][0] = -1;
-      filterfds[slot][1] = -1;
+static void
+set_time(cupsd_job_t *job,             /* I - Job to update */
+         const char  *name)            /* I - Name of attribute */
+{
+  ipp_attribute_t      *attr;          /* Time attribute */
 
-      cupsdLogJob(job, CUPSD_LOG_DEBUG2, "start_job: backend=\"%s\"", command);
-      cupsdLogJob(job, CUPSD_LOG_DEBUG2, "start_job: filterfds[%d] = [ %d %d ]",
-                 slot, filterfds[slot][0], filterfds[slot][1]);
 
-      pid = cupsdStartProcess(command, argv, envp, filterfds[!slot][0],
-                             filterfds[slot][1], job->status_pipes[1],
-                             job->back_pipes[1], job->side_pipes[1],
-                             backroot, job->profile, &(job->backend));
+  if ((attr = ippFindAttribute(job->attrs, name, IPP_TAG_ZERO)) != NULL)
+  {
+    attr->value_tag         = IPP_TAG_INTEGER;
+    attr->values[0].integer = time(NULL);
+  }
+}
 
-      if (pid == 0)
-      {
-       cupsdLogJob(job, CUPSD_LOG_ERROR, "Unable to start backend \"%s\" - %s.",
-                   method, strerror(errno));
-       snprintf(printer->state_message, sizeof(printer->state_message),
-                "Unable to start backend \"%s\" - %s.", method,
-                strerror(errno));
 
-       cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
-                      "Job canceled because the server could not execute "
-                     "the backend.");
+/*
+ * 'start_job()' - Start a print job.
+ */
 
-        goto abort_job;
-      }
-      else
-      {
-       cupsdLogJob(job, CUPSD_LOG_INFO, "Started backend %s (PID %d)",
-                   command, pid);
-      }
-    }
+static void
+start_job(cupsd_job_t     *job,                /* I - Job ID */
+          cupsd_printer_t *printer)    /* I - Printer to print job */
+{
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "start_job(job=%p(%d), printer=%p(%s))",
+                  job, job->id, printer, printer->name);
 
-    if (job->current_file == job->num_files)
-    {
-      cupsdLogJob(job, CUPSD_LOG_DEBUG2,
-                 "start_job: Closing print pipes [ %d %d ]...",
-                 job->print_pipes[0], job->print_pipes[1]);
+ /*
+  * Make sure we have some files around before we try to print...
+  */
 
-      cupsdClosePipe(job->print_pipes);
+  if (job->num_files == 0)
+  {
+    cupsdSetJobState(job, IPP_JOB_ABORTED, CUPSD_JOB_DEFAULT,
+                     "Aborting job because it has no files.");
+    return;
+  }
 
-      cupsdLogJob(job, CUPSD_LOG_DEBUG2,
-                 "start_job: Closing back pipes [ %d %d ]...",
-                 job->back_pipes[0], job->back_pipes[1]);
+ /*
+  * Update the printer and job state to "processing"...
+  */
 
-      cupsdClosePipe(job->back_pipes);
+  if (!cupsdLoadJob(job))
+    return;
 
-      cupsdLogJob(job, CUPSD_LOG_DEBUG2,
-                 "start_job: Closing side pipes [ %d %d ]...",
-                 job->side_pipes[0], job->side_pipes[1]);
+  cupsdSetJobState(job, IPP_JOB_PROCESSING, CUPSD_JOB_DEFAULT, NULL);
+  cupsdSetPrinterState(printer, IPP_PRINTER_PROCESSING, 0);
 
-      cupsdClosePipe(job->side_pipes);
+  job->cost     = 0;
+  job->progress = 0;
+  job->printer  = printer;
+  printer->job  = job;
 
-      cupsdLogJob(job, CUPSD_LOG_DEBUG2,
-                 "start_job: Closing status output pipe %d...",
-                 job->status_pipes[1]);
+ /*
+  * Setup the last exit status and security profiles...
+  */
 
-      close(job->status_pipes[1]);
-      job->status_pipes[1] = -1;
-    }
-  }
-  else
-  {
-    filterfds[slot][0] = -1;
-    filterfds[slot][1] = -1;
+  job->status  = 0;
+  job->profile = cupsdCreateProfile(job->id);
 
-    if (job->current_file == job->num_files)
-    {
-      cupsdLogJob(job, CUPSD_LOG_DEBUG2,
-                 "start_job: Closing print pipes [ %d %d ]...",
-                 job->print_pipes[0], job->print_pipes[1]);
+ /*
+  * Create the status pipes and buffer...
+  */
 
-      cupsdClosePipe(job->print_pipes);
+  if (cupsdOpenPipe(job->status_pipes))
+  {
+    cupsdLogJob(job, CUPSD_LOG_DEBUG,
+               "Unable to create job status pipes - %s.", strerror(errno));
 
-      cupsdLogJob(job, CUPSD_LOG_DEBUG2,
-                 "start_job: Closing status output pipe %d...",
-                 job->status_pipes[1]);
+    cupsdSetJobState(job, IPP_JOB_STOPPED, CUPSD_JOB_DEFAULT,
+                    "Job stopped because the scheduler could not create the "
+                    "job status pipes.");
 
-      close(job->status_pipes[1]);
-      job->status_pipes[1] = -1;
-    }
+    cupsdDestroyProfile(job->profile);
+    job->profile = NULL;
+    return;
   }
 
-  cupsdLogJob(job, CUPSD_LOG_DEBUG2,
-             "start_job: Closing filter pipes for slot %d [ %d %d ]...",
-             slot, filterfds[slot][0], filterfds[slot][1]);
-  cupsdClosePipe(filterfds[slot]);
+  job->status_buffer = cupsdStatBufNew(job->status_pipes[0], NULL);
+  job->status_level  = CUPSD_LOG_INFO;
+
+ /*
+  * Create the backchannel pipes and make them non-blocking...
+  */
 
-  if (printer->remote && job->num_files > 1)
+  if (cupsdOpenPipe(job->back_pipes))
   {
-    for (i = 0; i < job->num_files; i ++)
-      free(argv[i + 6]);
+    cupsdLogJob(job, CUPSD_LOG_DEBUG,
+               "Unable to create back-channel pipes - %s.", strerror(errno));
+
+    cupsdSetJobState(job, IPP_JOB_STOPPED, CUPSD_JOB_DEFAULT,
+                    "Job stopped because the scheduler could not create the "
+                    "back-channel pipes.");
+
+    cupsdClosePipe(job->status_pipes);
+    cupsdStatBufDelete(job->status_buffer);
+    job->status_buffer = NULL;
+
+    cupsdDestroyProfile(job->profile);
+    job->profile = NULL;
+    return;
   }
 
-  free(argv);
+  fcntl(job->back_pipes[0], F_SETFL,
+       fcntl(job->back_pipes[0], F_GETFL) | O_NONBLOCK);
+  fcntl(job->back_pipes[1], F_SETFL,
+       fcntl(job->back_pipes[1], F_GETFL) | O_NONBLOCK);
 
-  cupsdAddSelect(job->status_buffer->fd, (cupsd_selfunc_t)update_job, NULL,
-                 job);
+ /*
+  * Create the side-channel pipes and make them non-blocking...
+  */
 
-  cupsdAddEvent(CUPSD_EVENT_JOB_STATE, job->printer, job, "Job #%d started.",
-                job->id);
+  if (socketpair(AF_LOCAL, SOCK_STREAM, 0, job->side_pipes))
+  {
+    cupsdLogJob(job, CUPSD_LOG_DEBUG,
+               "Unable to create side-channel pipes - %s.", strerror(errno));
 
-  return;
+    cupsdSetJobState(job, IPP_JOB_STOPPED, CUPSD_JOB_DEFAULT,
+                    "Job stopped because the scheduler could not create the "
+                    "side-channel pipes.");
 
+    cupsdClosePipe(job->back_pipes);
+
+    cupsdClosePipe(job->status_pipes);
+    cupsdStatBufDelete(job->status_buffer);
+    job->status_buffer = NULL;
+
+    cupsdDestroyProfile(job->profile);
+    job->profile = NULL;
+    return;
+  }
+
+  fcntl(job->side_pipes[0], F_SETFL,
+       fcntl(job->side_pipes[0], F_GETFL) | O_NONBLOCK);
+  fcntl(job->side_pipes[1], F_SETFL,
+       fcntl(job->side_pipes[1], F_GETFL) | O_NONBLOCK);
 
  /*
-  * If we get here, we need to abort the current job and close out all
-  * files and pipes...
+  * Now start the first file in the job...
   */
 
-  abort_job:
+  cupsdContinueJob(job);
+}
 
-  for (slot = 0; slot < 2; slot ++)
-  {
-    cupsdLogJob(job, CUPSD_LOG_DEBUG2,
-               "start_job: Closing filter pipes for slot %d [ %d %d ]...",
-               slot, filterfds[slot][0], filterfds[slot][1]);
-    cupsdClosePipe(filterfds[slot]);
-  }
 
-  cupsdLogJob(job, CUPSD_LOG_DEBUG2,
-             "start_job: Closing status pipes [ %d %d ]...",
-             job->status_pipes[0], job->status_pipes[1]);
-  cupsdClosePipe(job->status_pipes);
-  cupsdStatBufDelete(job->status_buffer);
+/*
+ * 'stop_job()' - Stop a print job.
+ */
 
-  job->status_buffer = NULL;
+static void
+stop_job(cupsd_job_t       *job,       /* I - Job */
+         cupsd_jobaction_t action)     /* I - Action */
+{
+  int  i;                              /* Looping var */
 
-  cupsArrayDelete(filters);
 
-  if (printer->remote && job->num_files > 1)
-  {
-    for (i = 0; i < job->num_files; i ++)
-      free(argv[i + 6]);
-  }
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "stop_job(job=%p(%d), action=%d)", job,
+                  job->id, action);
 
-  free(argv);
+  FilterLevel -= job->cost;
+  job->cost   = 0;
 
-  cupsdStopJob(job, 0);
+  for (i = 0; job->filters[i]; i ++)
+    if (job->filters[i] > 0)
+      cupsdEndProcess(job->filters[i], action == CUPSD_JOB_FORCE);
+
+  if (job->backend > 0)
+    cupsdEndProcess(job->backend, action == CUPSD_JOB_FORCE);
 }
 
 
@@ -3666,7 +3653,6 @@ update_job(cupsd_job_t *job)              /* I - Job to check */
                *ptr;                   /* Pointer update... */
   int          loglevel,               /* Log level for message */
                event = 0;              /* Events? */
-  cupsd_printer_t *printer;            /* Printer for job */
   static const char * const levels[] = /* Log levels */
                {
                  "NONE",
@@ -3688,9 +3674,6 @@ update_job(cupsd_job_t *job)              /* I - Job to check */
   * a valid pointer...
   */
 
-  if ((printer = job->printer) == NULL)
-    printer = cupsdFindDest(job->dest);
-
   while ((ptr = cupsdStatBufUpdate(job->status_buffer, &loglevel,
                                    message, sizeof(message))) != NULL)
   {
@@ -3723,9 +3706,9 @@ update_job(cupsd_job_t *job)              /* I - Job to check */
 
         job->sheets->values[0].integer += copies;
 
-       if (printer->page_limit)
+       if (job->printer->page_limit)
        {
-         cupsd_quota_t *q = cupsdUpdateQuota(printer, job->username,
+         cupsd_quota_t *q = cupsdUpdateQuota(job->printer, job->username,
                                              copies, 0);
 
 #ifdef __APPLE__
@@ -3735,13 +3718,11 @@ update_job(cupsd_job_t *job)            /* I - Job to check */
            * Quota limit exceeded, cancel job in progress immediately...
            */
 
-           cupsdLogJob(job, CUPSD_LOG_INFO,
-                       "Canceled because pages exceed user %s "
-                       "quota limit on printer %s (%s).",
-                       job->username, printer->name,
-                       printer->info);
-
-           cupsdCancelJob(job, 1, IPP_JOB_CANCELED);
+           cupsdSetJobState(job, IPP_JOB_CANCELED, CUPSD_JOB_DEFAULT,
+                            "Canceled job because pages exceed user %s "
+                            "quota limit on printer %s (%s).",
+                            job->username, job->printer->name,
+                            job->printer->info);
            return;
          }
 #else
@@ -3753,7 +3734,7 @@ update_job(cupsd_job_t *job)              /* I - Job to check */
       cupsdLogPage(job, message);
 
       if (job->sheets)
-       cupsdAddEvent(CUPSD_EVENT_JOB_PROGRESS, printer, job,
+       cupsdAddEvent(CUPSD_EVENT_JOB_PROGRESS, job->printer, job,
                      "Printed %d page(s).", job->sheets->values[0].integer);
     }
     else if (loglevel == CUPSD_LOG_STATE)
@@ -3762,13 +3743,13 @@ update_job(cupsd_job_t *job)            /* I - Job to check */
 
       if (!strcmp(message, "paused"))
       {
-        cupsdStopPrinter(printer, 1);
+        cupsdStopPrinter(job->printer, 1);
        return;
       }
       else
       {
-       cupsdSetPrinterReasons(printer, message);
-       cupsdAddPrinterHistory(printer);
+       cupsdSetPrinterReasons(job->printer, message);
+       cupsdAddPrinterHistory(job->printer);
        event |= CUPSD_EVENT_PRINTER_STATE;
       }
 
@@ -3792,10 +3773,10 @@ update_job(cupsd_job_t *job)            /* I - Job to check */
       if ((attr = cupsGetOption("auth-info-required", num_attrs,
                                 attrs)) != NULL)
       {
-        cupsdSetAuthInfoRequired(printer, attr, NULL);
-       cupsdSetPrinterAttrs(printer);
+        cupsdSetAuthInfoRequired(job->printer, attr, NULL);
+       cupsdSetPrinterAttrs(job->printer);
 
-       if (printer->type & CUPS_PRINTER_DISCOVERED)
+       if (job->printer->type & CUPS_PRINTER_DISCOVERED)
          cupsdMarkDirty(CUPSD_DIRTY_REMOTE);
        else
          cupsdMarkDirty(CUPSD_DIRTY_PRINTERS);
@@ -3812,7 +3793,7 @@ update_job(cupsd_job_t *job)              /* I - Job to check */
          job->progress = progress;
 
          if (job->sheets)
-           cupsdAddEvent(CUPSD_EVENT_JOB_PROGRESS, printer, job,
+           cupsdAddEvent(CUPSD_EVENT_JOB_PROGRESS, job->printer, job,
                          "Printing page %d, %d%%",
                          job->sheets->values[0].integer, job->progress);
         }
@@ -3820,69 +3801,69 @@ update_job(cupsd_job_t *job)            /* I - Job to check */
 
       if ((attr = cupsGetOption("printer-alert", num_attrs, attrs)) != NULL)
       {
-        cupsdSetString(&printer->alert, attr);
+        cupsdSetString(&job->printer->alert, attr);
        event |= CUPSD_EVENT_PRINTER_STATE;
       }
 
       if ((attr = cupsGetOption("printer-alert-description", num_attrs,
                                 attrs)) != NULL)
       {
-        cupsdSetString(&printer->alert_description, attr);
+        cupsdSetString(&job->printer->alert_description, attr);
        event |= CUPSD_EVENT_PRINTER_STATE;
       }
 
       if ((attr = cupsGetOption("marker-colors", num_attrs, attrs)) != NULL)
       {
-        cupsdSetPrinterAttr(printer, "marker-colors", (char *)attr);
-       printer->marker_time = time(NULL);
+        cupsdSetPrinterAttr(job->printer, "marker-colors", (char *)attr);
+       job->printer->marker_time = time(NULL);
        event |= CUPSD_EVENT_PRINTER_STATE;
         cupsdMarkDirty(CUPSD_DIRTY_PRINTERS);
       }
 
       if ((attr = cupsGetOption("marker-levels", num_attrs, attrs)) != NULL)
       {
-        cupsdSetPrinterAttr(printer, "marker-levels", (char *)attr);
-       printer->marker_time = time(NULL);
+        cupsdSetPrinterAttr(job->printer, "marker-levels", (char *)attr);
+       job->printer->marker_time = time(NULL);
        event |= CUPSD_EVENT_PRINTER_STATE;
         cupsdMarkDirty(CUPSD_DIRTY_PRINTERS);
       }
 
       if ((attr = cupsGetOption("marker-low-levels", num_attrs, attrs)) != NULL)
       {
-        cupsdSetPrinterAttr(printer, "marker-low-levels", (char *)attr);
-       printer->marker_time = time(NULL);
+        cupsdSetPrinterAttr(job->printer, "marker-low-levels", (char *)attr);
+       job->printer->marker_time = time(NULL);
        event |= CUPSD_EVENT_PRINTER_STATE;
         cupsdMarkDirty(CUPSD_DIRTY_PRINTERS);
       }
 
       if ((attr = cupsGetOption("marker-high-levels", num_attrs, attrs)) != NULL)
       {
-        cupsdSetPrinterAttr(printer, "marker-high-levels", (char *)attr);
-       printer->marker_time = time(NULL);
+        cupsdSetPrinterAttr(job->printer, "marker-high-levels", (char *)attr);
+       job->printer->marker_time = time(NULL);
        event |= CUPSD_EVENT_PRINTER_STATE;
         cupsdMarkDirty(CUPSD_DIRTY_PRINTERS);
       }
 
       if ((attr = cupsGetOption("marker-message", num_attrs, attrs)) != NULL)
       {
-        cupsdSetPrinterAttr(printer, "marker-message", (char *)attr);
-       printer->marker_time = time(NULL);
+        cupsdSetPrinterAttr(job->printer, "marker-message", (char *)attr);
+       job->printer->marker_time = time(NULL);
        event |= CUPSD_EVENT_PRINTER_STATE;
         cupsdMarkDirty(CUPSD_DIRTY_PRINTERS);
       }
 
       if ((attr = cupsGetOption("marker-names", num_attrs, attrs)) != NULL)
       {
-        cupsdSetPrinterAttr(printer, "marker-names", (char *)attr);
-       printer->marker_time = time(NULL);
+        cupsdSetPrinterAttr(job->printer, "marker-names", (char *)attr);
+       job->printer->marker_time = time(NULL);
        event |= CUPSD_EVENT_PRINTER_STATE;
         cupsdMarkDirty(CUPSD_DIRTY_PRINTERS);
       }
 
       if ((attr = cupsGetOption("marker-types", num_attrs, attrs)) != NULL)
       {
-        cupsdSetPrinterAttr(printer, "marker-types", (char *)attr);
-       printer->marker_time = time(NULL);
+        cupsdSetPrinterAttr(job->printer, "marker-types", (char *)attr);
+       job->printer->marker_time = time(NULL);
        event |= CUPSD_EVENT_PRINTER_STATE;
         cupsdMarkDirty(CUPSD_DIRTY_PRINTERS);
       }
@@ -3903,8 +3884,8 @@ update_job(cupsd_job_t *job)              /* I - Job to check */
 
       num_keywords = cupsParseOptions(message, 0, &keywords);
 
-      if (cupsdUpdatePrinterPPD(printer, num_keywords, keywords))
-        cupsdSetPrinterAttrs(printer);
+      if (cupsdUpdatePrinterPPD(job->printer, num_keywords, keywords))
+        cupsdSetPrinterAttrs(job->printer);
 
       cupsFreeOptions(num_keywords, keywords);
     }
@@ -3917,41 +3898,44 @@ update_job(cupsd_job_t *job)            /* I - Job to check */
 
       if (*ptr)
       {
-       cupsdSetPrinterReasons(printer, "+com.apple.print.recoverable-warning");
-       cupsdSetString(&(printer->recoverable), ptr);
-       cupsdAddPrinterHistory(printer);
+       cupsdSetPrinterReasons(job->printer,
+                              "+com.apple.print.recoverable-warning");
+       cupsdSetString(&(job->printer->recoverable), ptr);
+       cupsdAddPrinterHistory(job->printer);
        event |= CUPSD_EVENT_PRINTER_STATE;
       }
     }
     else if (!strncmp(message, "recovered:", 10))
     {
-      cupsdSetPrinterReasons(printer, "-com.apple.print.recoverable-warning");
+      cupsdSetPrinterReasons(job->printer,
+                             "-com.apple.print.recoverable-warning");
 
       ptr = message + 10;
       while (isspace(*ptr & 255))
         ptr ++;
 
-      cupsdSetString(&(printer->recoverable), ptr);
-      cupsdAddPrinterHistory(printer);
+      cupsdSetString(&(job->printer->recoverable), ptr);
+      cupsdAddPrinterHistory(job->printer);
       event |= CUPSD_EVENT_PRINTER_STATE;
     }
 #endif /* __APPLE__ */
     else
     {
-      cupsdLogJob(job, loglevel, "%s", message);
+      if (loglevel != CUPSD_LOG_INFO && loglevel > LogLevel)
+       cupsdLogJob(job, loglevel, "%d %s", loglevel, message);
 
       if (loglevel < CUPSD_LOG_DEBUG)
       {
-       strlcpy(printer->state_message, message,
-               sizeof(printer->state_message));
-       cupsdAddPrinterHistory(printer);
+       strlcpy(job->printer->state_message, message,
+               sizeof(job->printer->state_message));
+       cupsdAddPrinterHistory(job->printer);
 
        event |= CUPSD_EVENT_PRINTER_STATE;
 
        if (loglevel <= job->status_level)
        {
         /*
-         * Some messages show in the printer-state-message attribute...
+         * Some messages show in the job-printer-state-message attribute...
          */
 
          if (loglevel != CUPSD_LOG_NOTICE)
@@ -3973,11 +3957,11 @@ update_job(cupsd_job_t *job)            /* I - Job to check */
   }
 
   if (event & CUPSD_EVENT_PRINTER_STATE)
-    cupsdAddEvent(CUPSD_EVENT_PRINTER_STATE, printer, NULL,
-                 (printer->type & CUPS_PRINTER_CLASS) ?
+    cupsdAddEvent(CUPSD_EVENT_PRINTER_STATE, job->printer, NULL,
+                 (job->printer->type & CUPS_PRINTER_CLASS) ?
                      "Class \"%s\" state changed." :
                      "Printer \"%s\" state changed.",
-                 printer->name);
+                 job->printer->name);
 
   if (ptr == NULL && !job->status_buffer->bufused)
   {
@@ -3998,7 +3982,13 @@ update_job(cupsd_job_t *job)             /* I - Job to check */
     * Handle the end of job stuff...
     */
 
-    cupsdFinishJob(job);
+    finalize_job(job);
+
+   /*
+    * Check for new jobs...
+    */
+
+    cupsdCheckJobs();
   }
 }
 
@@ -4009,10 +3999,9 @@ update_job(cupsd_job_t *job)             /* I - Job to check */
 
 void
 update_job_attrs(cupsd_job_t *job,     /* I - Job to update */
-                 int         do_message)/* I - 1 = update job-printer-state message */
+                 int         do_message)/* I - 1 = copy job-printer-state message */
 {
   int                  i;              /* Looping var */
-  cupsd_printer_t      *printer;       /* Printer for job */
   int                  num_reasons;    /* Actual number of reasons */
   const char * const   *reasons;       /* Reasons */
   static const char    *none = "none"; /* "none" reason */
@@ -4037,38 +4026,38 @@ update_job_attrs(cupsd_job_t *job,      /* I - Job to update */
                                            "job-printer-state-reasons",
                                            IPP_TAG_KEYWORD);
 
-  if ((printer = job->printer) == NULL)
-    printer = cupsdFindDest(job->dest);
-
-  if (!printer)
-    return;
-
  /*
-  * Otherwise copy the printer-state-message value...
+  * Copy or clear the printer-state-message value as needed...
   */
 
-  if (printer->state_message[0] &&
-      (do_message || !job->printer_message->values[0].string.text[0]))
+  if (job->state_value != IPP_JOB_PROCESSING &&
+      job->status_level == CUPSD_LOG_INFO)
+    cupsdSetString(&(job->printer_message->values[0].string.text), "");
+  else if (job->printer->state_message[0] && do_message)
     cupsdSetString(&(job->printer_message->values[0].string.text),
-                  printer->state_message);
-
+                  job->printer->state_message);
+  
  /*
   * ... and the printer-state-reasons value...
   */
 
-  if (printer->num_reasons == 0)
+  if (job->printer->num_reasons == 0)
   {
     num_reasons = 1;
     reasons     = &none;
   }
   else
   {
-    num_reasons = printer->num_reasons;
-    reasons     = (const char * const *)printer->reasons;
+    num_reasons = job->printer->num_reasons;
+    reasons     = (const char * const *)job->printer->reasons;
   }
 
   if (!job->printer_reasons || job->printer_reasons->num_values != num_reasons)
   {
+   /*
+    * Replace/create a job-printer-state-reasons attribute...
+    */
+
     ippDeleteAttribute(job->attrs, job->printer_reasons);
 
     job->printer_reasons = ippAddStrings(job->attrs,
@@ -4076,12 +4065,31 @@ update_job_attrs(cupsd_job_t *job,      /* I - Job to update */
                                         "job-printer-state-reasons",
                                         num_reasons, NULL, NULL);
   }
-  else if (job->printer_reasons)
+  else
   {
-    for (i = 0; i < job->printer_reasons->num_values; i ++)
+   /*
+    * Don't bother clearing the reason strings if they are the same...
+    */
+
+    for (i = 0; i < num_reasons; i ++)
+      if (strcmp(job->printer_reasons->values[i].string.text, reasons[i]))
+        break;
+
+    if (i >= num_reasons)
+      return;
+
+   /*
+    * Not the same, so free the current strings...
+    */
+
+    for (i = 0; i < num_reasons; i ++)
       _cupsStrFree(job->printer_reasons->values[i].string.text);
   }
 
+ /*
+  * Copy the reasons...
+  */
+
   for (i = 0; i < num_reasons; i ++)
     job->printer_reasons->values[i].string.text = _cupsStrAlloc(reasons[i]);
 }
index e3f2faa3b8514bb239b6379c490107cc94f45ec5..2056e4ab77045452521e5e451e45fc9f51d8fb56 100644 (file)
  *   file is missing or damaged, see the license at "http://www.cups.org/".
  */
 
+/*
+ * Constants...
+ */
+
+typedef enum cupsd_jobaction_e         /**** Actions for state changes ****/
+{
+  CUPSD_JOB_DEFAULT,                   /* Use default action */
+  CUPSD_JOB_FORCE,                     /* Force the change */
+  CUPSD_JOB_PURGE                      /* Force the change and purge */
+} cupsd_jobaction_t;
+
+
 /*
  * Job request structure...
  */
@@ -23,10 +35,11 @@ typedef struct cupsd_job_s
                        priority,       /* Job priority */
                        dirty;          /* Do we need to write the "c" file? */
   ipp_jstate_t         state_value;    /* Cached job-state */
-  int                  pending_timeout;/* Non-zero if the job was created and waiting on files */
+  int                  pending_timeout;/* Non-zero if the job was created and
+                                        * waiting on files */
   char                 *username;      /* Printing user */
   char                 *dest;          /* Destination printer or class */
-  cups_ptype_t         dtype;          /* Destination type (class/remote bits) */
+  cups_ptype_t         dtype;          /* Destination type */
   int                  num_files;      /* Number of files in job */
   mime_type_t          **filetypes;    /* File types */
   int                  *compressions;  /* Compression status of each file */
@@ -46,7 +59,8 @@ typedef struct cupsd_job_s
                        side_pipes[2],  /* Sidechannel pipes */
                        status_pipes[2];/* Status pipes */
   cupsd_statbuf_t      *status_buffer; /* Status buffer for this job */
-  int                  status_level;   /* Highest log level in a status message */
+  int                  status_level;   /* Highest log level in a status
+                                        * message */
   int                  cost;           /* Filtering cost */
   int                  filters[MAX_FILTERS + 1];
                                        /* Filter process IDs, 0 terminated */
@@ -54,9 +68,12 @@ typedef struct cupsd_job_s
   int                  status;         /* Status code from filters */
   cupsd_printer_t      *printer;       /* Printer this job is assigned to */
   int                  tries;          /* Number of tries for this job */
-  char                 *auth_username, /* AUTH_USERNAME environment variable, if any */
-                       *auth_domain,   /* AUTH_DOMAIN environment variable, if any */
-                       *auth_password; /* AUTH_PASSWORD environment variable, if any */
+  char                 *auth_username, /* AUTH_USERNAME environment variable,
+                                         * if any */
+                       *auth_domain,   /* AUTH_DOMAIN environment variable,
+                                        * if any */
+                       *auth_password; /* AUTH_PASSWORD environment variable,
+                                        * if any */
   void                 *profile;       /* Security profile */
   int                  progress;       /* Printing progress */
 #ifdef HAVE_GSSAPI
@@ -103,19 +120,17 @@ VAR int                   JobRetryLimit   VALUE(5),
  */
 
 extern cupsd_job_t     *cupsdAddJob(int priority, const char *dest);
-extern void            cupsdCancelJob(cupsd_job_t *job, int purge,
-                                      ipp_jstate_t newstate);
 extern void            cupsdCancelJobs(const char *dest, const char *username,
                                        int purge);
 extern void            cupsdCheckJobs(void);
 extern void            cupsdCleanJobs(void);
-extern void            cupsdDeleteJob(cupsd_job_t *job);
+extern void            cupsdContinueJob(cupsd_job_t *job);
+extern void            cupsdDeleteJob(cupsd_job_t *job,
+                                      cupsd_jobaction_t action);
 extern cupsd_job_t     *cupsdFindJob(int id);
-extern void            cupsdFinishJob(cupsd_job_t *job);
 extern void            cupsdFreeAllJobs(void);
 extern int             cupsdGetPrinterJobCount(const char *dest);
 extern int             cupsdGetUserJobCount(const char *username);
-extern void            cupsdHoldJob(cupsd_job_t *job);
 extern void            cupsdLoadAllJobs(void);
 extern int             cupsdLoadJob(cupsd_job_t *job);
 extern void            cupsdMoveJob(cupsd_job_t *job, cupsd_printer_t *p);
@@ -123,10 +138,18 @@ extern void               cupsdReleaseJob(cupsd_job_t *job);
 extern void            cupsdRestartJob(cupsd_job_t *job);
 extern void            cupsdSaveAllJobs(void);
 extern void            cupsdSaveJob(cupsd_job_t *job);
-extern void            cupsdSetJobHoldUntil(cupsd_job_t *job, const char *when);
+extern void            cupsdSetJobHoldUntil(cupsd_job_t *job,
+                                            const char *when, int update);
 extern void            cupsdSetJobPriority(cupsd_job_t *job, int priority);
-extern void            cupsdStopAllJobs(int force);
-extern void            cupsdStopJob(cupsd_job_t *job, int force);
+extern void            cupsdSetJobState(cupsd_job_t *job,
+                                        ipp_jstate_t newstate,
+                                        cupsd_jobaction_t action,
+                                        const char *message, ...)
+#ifdef __GNUC__
+__attribute__ ((__format__ (__printf__, 4, 5)))
+#endif /* __GNUC__ */
+;
+extern void            cupsdStopAllJobs(cupsd_jobaction_t action);
 extern int             cupsdTimeoutJob(cupsd_job_t *job);
 extern void            cupsdUnloadCompletedJobs(void);
 
index b7e61a17fc7de82b73065f2ad43fff72da781cf6..437f0f5ba57c08725e0be02da34d05fb93c0a912 100644 (file)
@@ -670,12 +670,6 @@ main(int  argc,                            /* I - Number of command-line args */
 
   while (!stop_scheduler)
   {
-#ifdef DEBUG
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "main: Top of loop, dead_children=%d, NeedReload=%d",
-                    dead_children, NeedReload);
-#endif /* DEBUG */
-
    /*
     * Check if there are dead children to handle...
     */
@@ -1628,7 +1622,8 @@ static void
 process_children(void)
 {
   int          status;                 /* Exit status of child */
-  int          pid;                    /* Process ID of child */
+  int          pid,                    /* Process ID of child */
+               job_id;                 /* Job ID of child */
   cupsd_job_t  *job;                   /* Current job */
   int          i;                      /* Looping var */
   char         name[1024];             /* Process name */
@@ -1658,7 +1653,7 @@ process_children(void)
     * Collect the name of the process that finished...
     */
 
-    cupsdFinishProcess(pid, name, sizeof(name));
+    cupsdFinishProcess(pid, name, sizeof(name), &job_id);
 
    /*
     * Delete certificates for CGI processes...
@@ -1668,76 +1663,87 @@ process_children(void)
       cupsdDeleteCert(pid);
 
    /*
-    * Lookup the PID in the jobs list...
+    * Handle completed job filters...
     */
 
-    for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs);
-        job;
-        job = (cupsd_job_t *)cupsArrayNext(ActiveJobs))
-      if (job->state_value >= IPP_JOB_HELD && (job->filters[0] || job->backend))
+    if (job_id > 0 && (job = cupsdFindJob(job_id)) != NULL)
+    {
+      for (i = 0; job->filters[i]; i ++)
+       if (job->filters[i] == pid)
+         break;
+
+      if (job->filters[i] || job->backend == pid)
       {
-       for (i = 0; job->filters[i]; i ++)
-          if (job->filters[i] == pid)
-           break;
+       /*
+       * OK, this process has gone away; what's left?
+       */
+
+       if (job->filters[i])
+         job->filters[i] = -pid;
+       else
+         job->backend = -pid;
 
-       if (job->filters[i] || job->backend == pid)
+       if (status && status != SIGTERM && status != SIGKILL &&
+           job->status >= 0)
        {
         /*
-          * OK, this process has gone away; what's left?
+         * An error occurred; save the exit status so we know to stop
+         * the printer or cancel the job when all of the filters finish...
+         *
+         * A negative status indicates that the backend failed and the
+         * printer needs to be stopped.
          */
 
-          if (job->filters[i])
-           job->filters[i] = -pid;
+         if (job->filters[i])
+           job->status = status;       /* Filter failed */
          else
-           job->backend = -pid;
+           job->status = -status;      /* Backend failed */
 
-          if (status && job->status >= 0)
+         if (!(job->printer->type & CUPS_PRINTER_FAX) &&
+             job->status_level >= CUPSD_LOG_ERROR)
          {
-          /*
-           * An error occurred; save the exit status so we know to stop
-           * the printer or cancel the job when all of the filters finish...
-           *
-           * A negative status indicates that the backend failed and the
-           * printer needs to be stopped.
-           */
+           job->status_level = CUPSD_LOG_ERROR;
 
-            if (job->filters[i])
-             job->status = status;     /* Filter failed */
-           else
-             job->status = -status;    /* Backend failed */
+           snprintf(job->printer->state_message,
+                    sizeof(job->printer->state_message), "%s failed", name);
+           cupsdAddPrinterHistory(job->printer);
 
-            if (job->printer && !(job->printer->type & CUPS_PRINTER_FAX) &&
-               job->status_level > CUPSD_LOG_ERROR)
+           if (!job->printer_message)
            {
-             job->status_level = CUPSD_LOG_ERROR;
-
-              snprintf(job->printer->state_message,
-                      sizeof(job->printer->state_message), "%s failed", name);
-              cupsdAddPrinterHistory(job->printer);
+             if ((job->printer_message =
+                      ippFindAttribute(job->attrs, "job-printer-state-message",
+                                       IPP_TAG_TEXT)) == NULL)
+               job->printer_message = ippAddString(job->attrs, IPP_TAG_JOB,
+                                                   IPP_TAG_TEXT,
+                                                   "job-printer-state-message",
+                                                   NULL, "");
            }
+
+           cupsdSetString(&(job->printer_message->values[0].string.text),
+                          job->printer->state_message);
          }
+       }
 
-        /*
-         * If this is not the last file in a job, see if all of the
-         * filters are done, and if so move to the next file.
-         */
+       /*
+       * If this is not the last file in a job, see if all of the
+       * filters are done, and if so move to the next file.
+       */
 
-          if (job->current_file < job->num_files)
-         {
-           for (i = 0; job->filters[i] < 0; i ++);
+       if (job->current_file < job->num_files)
+       {
+         for (i = 0; job->filters[i] < 0; i ++);
 
-           if (!job->filters[i])
-           {
-            /*
-             * Process the next file...
-             */
+         if (!job->filters[i])
+         {
+          /*
+           * Process the next file...
+           */
 
-             cupsdFinishJob(job);
-           }
+           cupsdContinueJob(job);
          }
-         break;
        }
       }
+    }
 
    /*
     * Show the exit status as needed, ignoring SIGTERM and SIGKILL errors
index 003210aa49e9c9cc0a07a5aadf619240f6abd70f..c826120f19b665e9aec5b1411a806e385799763b 100644 (file)
@@ -803,14 +803,14 @@ cupsdDeletePrinter(
     free(p->history);
   }
 
+  delete_printer_filters(p);
+
   for (i = 0; i < p->num_reasons; i ++)
     _cupsStrFree(p->reasons[i]);
 
   ippDelete(p->attrs);
   ippDelete(p->ppd_attrs);
 
-  delete_printer_filters(p);
-
   mimeDeleteType(MimeDatabase, p->filetype);
   mimeDeleteType(MimeDatabase, p->prefiltertype);
 
@@ -1099,7 +1099,11 @@ cupsdLoadAllPrinters(void)
     }
     else if (!strcasecmp(line, "Reason"))
     {
-      if (value)
+      if (value &&
+          strcmp(value, "com.apple.print.recoverable-warning") &&
+          strcmp(value, "connecting-to-device") &&
+          strcmp(value, "cups-insecure-filter-error") &&
+          strcmp(value, "cups-missing-filter-error"))
       {
         for (i = 0 ; i < p->num_reasons; i ++)
          if (!strcmp(value, p->reasons[i]))
@@ -1590,7 +1594,9 @@ cupsdSaveAllPrinters(void)
     cupsFilePrintf(fp, "StateTime %d\n", (int)printer->state_time);
 
     for (i = 0; i < printer->num_reasons; i ++)
-      if (strcmp(printer->reasons[i], "connecting-to-device") &&
+      if (strcmp(printer->reasons[i], "com.apple.print.recoverable-warning") &&
+          strcmp(printer->reasons[i], "connecting-to-device") &&
+          strcmp(printer->reasons[i], "cups-insecure-filter-error") &&
           strcmp(printer->reasons[i], "cups-missing-filter-error"))
         cupsFilePutConf(fp, "Reason", printer->reasons[i]);
 
@@ -2442,6 +2448,30 @@ cupsdSetPrinterAttrs(cupsd_printer_t *p)/* I - Printer to setup */
       }
     }
 
+    if ((oldattr = ippFindAttribute(oldattrs, "marker-low-levels",
+                                    IPP_TAG_INTEGER)) != NULL)
+    {
+      if ((attr = ippAddIntegers(p->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
+                                 "marker-low-levels", oldattr->num_values,
+                                NULL)) != NULL)
+      {
+       for (i = 0; i < oldattr->num_values; i ++)
+         attr->values[i].integer = oldattr->values[i].integer;
+      }
+    }
+
+    if ((oldattr = ippFindAttribute(oldattrs, "marker-high-levels",
+                                    IPP_TAG_INTEGER)) != NULL)
+    {
+      if ((attr = ippAddIntegers(p->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
+                                 "marker-high-levels", oldattr->num_values,
+                                NULL)) != NULL)
+      {
+       for (i = 0; i < oldattr->num_values; i ++)
+         attr->values[i].integer = oldattr->values[i].integer;
+      }
+    }
+
     if ((oldattr = ippFindAttribute(oldattrs, "marker-names",
                                     IPP_TAG_NAME)) != NULL)
     {
@@ -2638,24 +2668,8 @@ cupsdSetPrinterReasons(
                *rptr;                  /* Pointer into reason */
 
 
-  if (!p || !s)
-  {
-    cupsdLogMessage(CUPSD_LOG_EMERG,
-                    "cupsdSetPrinterReasons called with p=%p and s=%p!", p, s);
-    return;
-  }
-
-  if (LogLevel == CUPSD_LOG_DEBUG2)
-  {
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                   "cupsdSetPrinterReasons(p=%p(%s),s=\"%s\"", p, p->name, s);
-    cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdSetPrinterReasons: num_reasons=%d",
-                    p->num_reasons);
-    for (i = 0; i < p->num_reasons; i ++)
-      cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                      "cupsdSetPrinterReasons: reasons[%d]=%p(\"%s\")", i,
-                     p->reasons[i], p->reasons[i]);
-  }
+  cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                 "cupsdSetPrinterReasons(p=%p(%s),s=\"%s\"", p, p->name, s);
 
   if (s[0] == '-' || s[0] == '+')
   {
@@ -2783,17 +2797,6 @@ cupsdSetPrinterReasons(
       }
     }
   }
-
-  if (LogLevel == CUPSD_LOG_DEBUG2)
-  {
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "cupsdSetPrinterReasons: NEW num_reasons=%d",
-                    p->num_reasons);
-    for (i = 0; i < p->num_reasons; i ++)
-      cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                      "cupsdSetPrinterReasons: NEW reasons[%d]=%p(\"%s\")", i,
-                     p->reasons[i], p->reasons[i]);
-  }
 }
 
 
@@ -2848,11 +2851,26 @@ cupsdSetPrinterState(
 #endif /* __sgi */
   }
 
+ /*
+  * Set/clear the paused reason as needed...
+  */
+
   if (s == IPP_PRINTER_STOPPED)
     cupsdSetPrinterReasons(p, "+paused");
   else
     cupsdSetPrinterReasons(p, "-paused");
 
+ /*
+  * Clear the message for the queue when going to processing...
+  */
+
+  if (s == IPP_PRINTER_PROCESSING)
+    p->state_message[0] = '\0';
+
+ /*
+  * Update the printer history...
+  */
+
   cupsdAddPrinterHistory(p);
 
  /*
@@ -2867,8 +2885,8 @@ cupsdSetPrinterState(
   * to stopped (or visa-versa)...
   */
 
-  if ((old_state == IPP_PRINTER_STOPPED) != (s == IPP_PRINTER_STOPPED) &&
-      update)
+  if (update &&
+      (old_state == IPP_PRINTER_STOPPED) != (s == IPP_PRINTER_STOPPED))
   {
     if (p->type & CUPS_PRINTER_CLASS)
       cupsdMarkDirty(CUPSD_DIRTY_CLASSES);
@@ -2886,9 +2904,6 @@ void
 cupsdStopPrinter(cupsd_printer_t *p,   /* I - Printer to stop */
                  int             update)/* I - Update printers.conf? */
 {
-  cupsd_job_t  *job;                   /* Active print job */
-
-
  /*
   * Set the printer state...
   */
@@ -2900,32 +2915,8 @@ cupsdStopPrinter(cupsd_printer_t *p,     /* I - Printer to stop */
   */
 
   if (p->job)
-  {
-   /*
-    * Get pointer to job...
-    */
-
-    job = (cupsd_job_t *)p->job;
-
-   /*
-    * Stop it...
-    */
-
-    cupsdStopJob(job, 0);
-
-   /*
-    * Reset the state to pending...
-    */
-
-    job->state->values[0].integer = IPP_JOB_PENDING;
-    job->state_value              = IPP_JOB_PENDING;
-    job->dirty                    = 1;
-
-    cupsdMarkDirty(CUPSD_DIRTY_JOBS);
-
-    cupsdAddEvent(CUPSD_EVENT_JOB_STOPPED, p, job,
-                 "Job stopped due to printer being paused");
-  }
+    cupsdSetJobState(p->job, IPP_JOB_PENDING, CUPSD_JOB_DEFAULT,
+                     "Job stopped due to printer being paused.");
 }
 
 
@@ -3889,6 +3880,9 @@ delete_printer_filters(
 
       mimeDeleteFilter(MimeDatabase, filter);
     }
+
+  cupsdSetPrinterReasons(p, "-cups-insecure-filter-error"
+                            ",cups-missing-filter-error");
 }
 
 
@@ -4060,9 +4054,13 @@ load_ppd(cupsd_printer_t *p)             /* I - Printer */
 
     if (ppd->num_sizes == 0)
     {
-      cupsdLogMessage(CUPSD_LOG_CRIT,
-                     "The PPD file for printer %s contains no media "
-                     "options and is therefore invalid!", p->name);
+      if (!ppdFindAttr(ppd, "APScannerOnly", NULL))
+       cupsdLogMessage(CUPSD_LOG_CRIT,
+                       "The PPD file for printer %s contains no media "
+                       "options and is therefore invalid!", p->name);
+
+      ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD,
+                  "media-supported", NULL, "unknown");
     }
     else
     {
@@ -4237,6 +4235,16 @@ load_ppd(cupsd_printer_t *p)             /* I - Printer */
       else
        p->type |= CUPS_PRINTER_SMALL;
 
+    if ((ppd_attr = ppdFindAttr(ppd, "APICADriver", NULL)) != NULL &&
+        ppd_attr->value && !strcasecmp(ppd_attr->value, "true"))
+    {
+      if ((ppd_attr = ppdFindAttr(ppd, "APScannerOnly", NULL)) != NULL &&
+         ppd_attr->value && !strcasecmp(ppd_attr->value, "true"))
+        p->type |= CUPS_PRINTER_SCANNER;
+      else
+        p->type |= CUPS_PRINTER_MFP;
+    }
+
    /*
     * Add a filter from application/vnd.cups-raw to printer/name to
     * handle "raw" printing by users.
index d4cedbe31c4204b324e547bb5a7a6239463b6790..bd548ff06c5383d27cd3c56b5415a392e7b2b033 100644 (file)
@@ -44,7 +44,8 @@
 
 typedef struct
 {
-  int  pid;                            /* Process ID */
+  int  pid,                            /* Process ID */
+       job_id;                         /* Job associated with process */
   char name[1];                        /* Name of process */
 } cupsd_proc_t;
 
@@ -82,8 +83,22 @@ cupsdCreateProfile(int job_id)               /* I - Job ID or 0 for none */
                temp[1024];             /* Quoted TempDir */
 
 
+  if (RunUser)
+  {
+   /*
+    * Only use sandbox profiles as root...
+    */
+
+    cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCreateProfile(job_id=%d) = NULL",
+                    job_id);
+
+    return (NULL);
+  }
+
   if ((fp = cupsTempFile2(profile, sizeof(profile))) == NULL)
   {
+    cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCreateProfile(job_id=%d) = NULL",
+                    job_id);
     cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to create security profile: %s",
                     strerror(errno));
     return (NULL);
@@ -129,7 +144,10 @@ cupsdCreateProfile(int job_id)             /* I - Job ID or 0 for none */
   cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCreateProfile(job_id=%d) = \"%s\"",
                   job_id, profile);
   return ((void *)strdup(profile));
+
 #else
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCreateProfile(job_id=%d) = NULL",
+                  job_id);
 
   return (NULL);
 #endif /* HAVE_SANDBOX_H */
@@ -143,11 +161,12 @@ cupsdCreateProfile(int job_id)            /* I - Job ID or 0 for none */
 void
 cupsdDestroyProfile(void *profile)     /* I - Profile */
 {
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdDeleteProfile(profile=\"%s\")",
+                 profile ? (char *)profile : "(null)");
+
 #ifdef HAVE_SANDBOX_H
   if (profile)
   {
-    cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdDeleteProfile(profile=\"%s\")",
-                    (char *)profile);
     unlink((char *)profile);
     free(profile);
   }
@@ -163,6 +182,9 @@ int                                 /* O - 0 on success, -1 on failure */
 cupsdEndProcess(int pid,               /* I - Process ID */
                 int force)             /* I - Force child to die */
 {
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdEndProcess(pid=%d, force=%d)", pid,
+                  force);
+
   if (force)
     return (kill(pid, SIGKILL));
   else
@@ -177,7 +199,8 @@ cupsdEndProcess(int pid,            /* I - Process ID */
 const char *                           /* O - Process name */
 cupsdFinishProcess(int  pid,           /* I - Process ID */
                    char *name,         /* I - Name buffer */
-                  int  namelen)        /* I - Size of name buffer */
+                  int  namelen,        /* I - Size of name buffer */
+                  int  *job_id)        /* O - Job ID pointer or NULL */
 {
   cupsd_proc_t key,                    /* Search key */
                *proc;                  /* Matching process */
@@ -187,14 +210,27 @@ cupsdFinishProcess(int  pid,              /* I - Process ID */
 
   if ((proc = (cupsd_proc_t *)cupsArrayFind(process_array, &key)) != NULL)
   {
+    if (job_id)
+      *job_id = proc->job_id;
+
     strlcpy(name, proc->name, namelen);
     cupsArrayRemove(process_array, proc);
     free(proc);
-
-    return (name);
   }
   else
-    return ("unknown");
+  {
+    if (job_id)
+      *job_id = 0;
+
+    strlcpy(name, "unknown", namelen);
+  }
+
+  cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                 "cupsdFinishProcess(pid=%d, name=%p, namelen=%d, "
+                 "job_id=%p(%d)) = \"%s\"", pid, name, namelen, job_id,
+                 job_id ? *job_id : 0, name);
+
+  return (name);
 }
 
 
@@ -204,17 +240,18 @@ cupsdFinishProcess(int  pid,              /* I - Process ID */
 
 int                                    /* O - Process ID or 0 */
 cupsdStartProcess(
-    const char *command,               /* I - Full path to command */
-    char       *argv[],                        /* I - Command-line arguments */
-    char       *envp[],                        /* I - Environment */
-    int        infd,                   /* I - Standard input file descriptor */
-    int        outfd,                  /* I - Standard output file descriptor */
-    int        errfd,                  /* I - Standard error file descriptor */
-    int        backfd,                 /* I - Backchannel file descriptor */
-    int        sidefd,                 /* I - Sidechannel file descriptor */
-    int        root,                   /* I - Run as root? */
-    void       *profile,               /* I - Security profile to use */
-    int        *pid)                   /* O - Process ID */
+    const char  *command,              /* I - Full path to command */
+    char        *argv[],               /* I - Command-line arguments */
+    char        *envp[],               /* I - Environment */
+    int         infd,                  /* I - Standard input file descriptor */
+    int         outfd,                 /* I - Standard output file descriptor */
+    int         errfd,                 /* I - Standard error file descriptor */
+    int         backfd,                        /* I - Backchannel file descriptor */
+    int         sidefd,                        /* I - Sidechannel file descriptor */
+    int         root,                  /* I - Run as root? */
+    void        *profile,              /* I - Security profile to use */
+    int         job_id,                        /* I - Job associated with process */
+    int         *pid)                  /* O - Process ID */
 {
   int          user;                   /* Command UID */
   struct stat  commandinfo;            /* Command file information */
@@ -229,10 +266,6 @@ cupsdStartProcess(
 #endif /* __APPLE__ */
 
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "cupsdStartProcess(\"%s\", %p, %p, %d, %d, %d)",
-                  command, argv, envp, infd, outfd, errfd);
-
   if (RunUser)
     user = RunUser;
   else if (root)
@@ -242,17 +275,32 @@ cupsdStartProcess(
 
   if (stat(command, &commandinfo))
   {
+    *pid = 0;
+
+    cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                   "cupsdStartProcess(command=\"%s\", argv=%p, envp=%p, "
+                   "infd=%d, outfd=%d, errfd=%d, backfd=%d, sidefd=%d, root=%d, "
+                   "profile=%p, job_id=%d, pid=%p) = %d",
+                   command, argv, envp, infd, outfd, errfd, backfd, sidefd,
+                   root, profile, job_id, pid, *pid);
     cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to execute %s: %s", command,
                     strerror(errno));
-    *pid = 0;
     return (0);
   }
   else if (commandinfo.st_mode & S_IWOTH)
   {
+    *pid = 0;
+
+    cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                   "cupsdStartProcess(command=\"%s\", argv=%p, envp=%p, "
+                   "infd=%d, outfd=%d, errfd=%d, backfd=%d, sidefd=%d, root=%d, "
+                   "profile=%p, job_id=%d, pid=%p) = %d",
+                   command, argv, envp, infd, outfd, errfd, backfd, sidefd,
+                   root, profile, job_id, pid, *pid);
     cupsdLogMessage(CUPSD_LOG_ERROR,
                     "Unable to execute %s: insecure file permissions (0%o)",
                    command, commandinfo.st_mode);
-    *pid  = 0;
+
     errno = EPERM;
     return (0);
   }
@@ -260,10 +308,18 @@ cupsdStartProcess(
            (commandinfo.st_gid != Group || !(commandinfo.st_mode & S_IXGRP)) &&
            !(commandinfo.st_mode & S_IXOTH))
   {
+    *pid = 0;
+
+    cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                   "cupsdStartProcess(command=\"%s\", argv=%p, envp=%p, "
+                   "infd=%d, outfd=%d, errfd=%d, backfd=%d, sidefd=%d, root=%d, "
+                   "profile=%p, job_id=%d, pid=%p) = %d",
+                   command, argv, envp, infd, outfd, errfd, backfd, sidefd,
+                   root, profile, job_id, pid, *pid);
     cupsdLogMessage(CUPSD_LOG_ERROR,
                     "Unable to execute %s: no execute permissions (0%o)",
                    command, commandinfo.st_mode);
-    *pid  = 0;
+
     errno = EPERM;
     return (0);
   }
@@ -470,7 +526,8 @@ cupsdStartProcess(
     {
       if ((proc = calloc(1, sizeof(cupsd_proc_t) + strlen(command))) != NULL)
       {
-        proc->pid = *pid;
+        proc->pid    = *pid;
+       proc->job_id = job_id;
        strcpy(proc->name, command);
 
        cupsArrayAdd(process_array, proc);
@@ -480,6 +537,13 @@ cupsdStartProcess(
 
   cupsdReleaseSignals();
 
+  cupsdLogMessage(CUPSD_LOG_DEBUG2,
+                 "cupsdStartProcess(command=\"%s\", argv=%p, envp=%p, "
+                 "infd=%d, outfd=%d, errfd=%d, backfd=%d, sidefd=%d, root=%d, "
+                 "profile=%p, job_id=%d, pid=%p) = %d",
+                 command, argv, envp, infd, outfd, errfd, backfd, sidefd,
+                 root, profile, job_id, pid, *pid);
+
   return (*pid);
 }
 
index 6d45b300d26c82ad5c2199119b7ec4cf83ee3cda..3288c4d112f18f651fa2e9e163f09a440bb76cc5 100644 (file)
@@ -178,24 +178,14 @@ cupsdUpdateQuota(
         attr = ippFindAttribute(job->attrs, "time-at-creation",
                                 IPP_TAG_INTEGER);
 
-    if (!attr)
-    {
-     /*
-      * This should never happen since cupsdLoadJob() checks for
-      * time-at-creation, but if it does just ignore this job...
-      */
-
-      continue;
-    }
-
     if (attr->values[0].integer < curtime)
     {
      /*
       * This job is too old to count towards the quota, ignore it...
       */
 
-      if (JobAutoPurge)
-        cupsdCancelJob(job, 1, IPP_JOB_CANCELED);
+      if (JobAutoPurge && !job->printer && job->state_value > IPP_JOB_STOPPED)
+        cupsdDeleteJob(job, CUPSD_JOB_PURGE);
 
       continue;
     }
index 4e81c4a9e380f887256e05efb7409b8f8d714d81..0ac6ce0636c460b7a6575ea771892aa0717f88ee 100644 (file)
@@ -3,7 +3,7 @@
  *
  *   Select abstraction functions for the Common UNIX Printing System (CUPS).
  *
- *   Copyright 2007-2008 by Apple Inc.
+ *   Copyright 2007-2009 by Apple Inc.
  *   Copyright 2006-2007 by Easy Software Products.
  *
  *   These coded instructions, statements, and computer programs are the
@@ -269,7 +269,7 @@ cupsdAddSelect(int             fd,  /* I - File descriptor */
   */
 
   cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "cupsdAddSelect: fd=%d, read_cb=%p, write_cb=%p, data=%p",
+                  "cupsdAddSelect(fd=%d, read_cb=%p, write_cb=%p, data=%p)",
                  fd, read_cb, write_cb, data);
 
   if (fd < 0)
@@ -325,8 +325,7 @@ cupsdAddSelect(int             fd,  /* I - File descriptor */
 
       if (kevent(cupsd_kqueue_fd, &event, 1, NULL, 0, &timeout))
       {
-       cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                       "cupsdAddSelect: kevent() returned %s",
+       cupsdLogMessage(CUPSD_LOG_EMERG, "kevent() returned %s",
                        strerror(errno));
        return (0);
       }
@@ -341,8 +340,7 @@ cupsdAddSelect(int             fd,  /* I - File descriptor */
 
       if (kevent(cupsd_kqueue_fd, &event, 1, NULL, 0, &timeout))
       {
-       cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                       "cupsdAddSelect: kevent() returned %s",
+       cupsdLogMessage(CUPSD_LOG_EMERG, "kevent() returned %s",
                        strerror(errno));
        return (0);
       }
@@ -386,29 +384,17 @@ cupsdAddSelect(int             fd,        /* I - File descriptor */
   */
 
   if (read_cb)
-  {
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "cupsdAddSelect: Adding fd %d to input set...", fd);
     FD_SET(fd, &cupsd_global_input);
-  }
   else
   {
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "cupsdAddSelect: Removing fd %d from input set...", fd);
     FD_CLR(fd, &cupsd_global_input);
     FD_CLR(fd, &cupsd_current_input);
   }
 
   if (write_cb)
-  {
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "cupsdAddSelect: Adding fd %d to output set...", fd);
     FD_SET(fd, &cupsd_global_output);
-  }
   else
   {
-    cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                    "cupsdAddSelect: Removing fd %d from output set...", fd);
     FD_CLR(fd, &cupsd_global_output);
     FD_CLR(fd, &cupsd_current_output);
   }
@@ -441,10 +427,6 @@ cupsdDoSelect(long timeout)                /* I - Timeout in seconds */
   struct timespec      ktimeout;       /* kevent() timeout */
 
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "cupsdDoSelect: polling %d fds for %ld seconds...",
-                 cupsArrayCount(cupsd_fds), timeout);
-
   cupsd_in_select = 1;
 
   if (timeout >= 0 && timeout < 86400)
@@ -458,10 +440,6 @@ cupsdDoSelect(long timeout)                /* I - Timeout in seconds */
   else
     nfds = kevent(cupsd_kqueue_fd, NULL, 0, cupsd_kqueue_events, MaxFDs, NULL);
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "cupsdDoSelect: kevent(%d, ..., %d, ...) returned %d...",
-                  cupsd_kqueue_fd, MaxFDs, nfds);
-
   cupsd_kqueue_changes = 0;
 
   for (i = nfds, event = cupsd_kqueue_events; i > 0; i --, event ++)
@@ -471,24 +449,13 @@ cupsdDoSelect(long timeout)               /* I - Timeout in seconds */
     if (cupsArrayFind(cupsd_inactive_fds, fdptr))
       continue;
 
-    cupsdLogMessage(CUPSD_LOG_DEBUG2, "event->filter=%d, event->ident=%d",
-                    event->filter, (int)event->ident);
-
     retain_fd(fdptr);
 
     if (fdptr->read_cb && event->filter == EVFILT_READ)
-    {
-      cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdDoSelect: Read on fd %d...",
-                     fdptr->fd);
       (*(fdptr->read_cb))(fdptr->data);
-    }
 
     if (fdptr->write_cb && event->filter == EVFILT_WRITE)
-    {
-      cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdDoSelect: Write on fd %d...",
-                     fdptr->fd);
       (*(fdptr->write_cb))(fdptr->data);
-    }
 
     release_fd(fdptr);
   }
@@ -498,10 +465,6 @@ cupsdDoSelect(long timeout)                /* I - Timeout in seconds */
   int                  count;          /* Number of file descriptors */
 
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "cupsdDoSelect: polling %d fds for %ld seconds...",
-                 cupsArrayCount(cupsd_fds), timeout);
-
 #  ifdef HAVE_EPOLL
   cupsd_in_select = 1;
 
@@ -517,9 +480,6 @@ cupsdDoSelect(long timeout)         /* I - Timeout in seconds */
     else
       nfds = epoll_wait(cupsd_epoll_fd, cupsd_epoll_events, MaxFDs, -1);
 
-    cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdDoSelect: epoll() returned %d...",
-                    nfds);
-
     if (nfds < 0 && errno != EINTR)
     {
       close(cupsd_epoll_fd);
@@ -537,18 +497,10 @@ cupsdDoSelect(long timeout)               /* I - Timeout in seconds */
        retain_fd(fdptr);
 
        if (fdptr->read_cb && (event->events & (EPOLLIN | EPOLLERR | EPOLLHUP)))
-       {
-         cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdDoSelect: Read on fd %d...",
-                         fdptr->fd);
          (*(fdptr->read_cb))(fdptr->data);
-       }
 
        if (fdptr->write_cb && (event->events & (EPOLLOUT | EPOLLERR | EPOLLHUP)))
-       {
-         cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdDoSelect: Write on fd %d...",
-                         fdptr->fd);
          (*(fdptr->write_cb))(fdptr->data);
-       }
 
        release_fd(fdptr);
       }
@@ -568,8 +520,6 @@ cupsdDoSelect(long timeout)         /* I - Timeout in seconds */
 
     cupsd_update_pollfds = 0;
 
-    cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdDoSelect: Updating pollfd array...");
-
    /*
     * (Re)allocate memory as needed...
     */
@@ -616,18 +566,11 @@ cupsdDoSelect(long timeout)               /* I - Timeout in seconds */
     }
   }
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "cupsdDoSelect: polling %d fds for %ld seconds...",
-                 count, timeout);
-
   if (timeout >= 0 && timeout < 86400)
     nfds = poll(cupsd_pollfds, count, timeout * 1000);
   else
     nfds = poll(cupsd_pollfds, count, -1);
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdDoSelect: poll() returned %d...",
-                  nfds);
-
   if (nfds > 0)
   {
    /*
@@ -636,10 +579,6 @@ cupsdDoSelect(long timeout)                /* I - Timeout in seconds */
 
     for (pfd = cupsd_pollfds; count > 0; pfd ++, count --)
     {
-      cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                      "cupsdDoSelect: pollfds[%d]={fd=%d, revents=%x}",
-                     (int)(pfd - cupsd_pollfds), pfd->fd, pfd->revents);
-
       if (!pfd->revents)
         continue;
 
@@ -649,18 +588,10 @@ cupsdDoSelect(long timeout)               /* I - Timeout in seconds */
       retain_fd(fdptr);
 
       if (fdptr->read_cb && (pfd->revents & (POLLIN | POLLERR | POLLHUP)))
-      {
-        cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdDoSelect: Read on fd %d...",
-                       fdptr->fd);
         (*(fdptr->read_cb))(fdptr->data);
-      }
 
       if (fdptr->write_cb && (pfd->revents & (POLLOUT | POLLERR | POLLHUP)))
-      {
-        cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdDoSelect: Write on fd %d...",
-                       fdptr->fd);
         (*(fdptr->write_cb))(fdptr->data);
-      }
 
       release_fd(fdptr);
     }
@@ -687,10 +618,6 @@ cupsdDoSelect(long timeout)                /* I - Timeout in seconds */
   cupsd_current_input  = cupsd_global_input;
   cupsd_current_output = cupsd_global_output;
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "cupsdDoSelect: selecting %d fds for %ld seconds...",
-                 maxfd, timeout);
-
   if (timeout >= 0 && timeout < 86400)
   {
     stimeout.tv_sec  = timeout;
@@ -703,9 +630,6 @@ cupsdDoSelect(long timeout)         /* I - Timeout in seconds */
     nfds = select(maxfd, &cupsd_current_input, &cupsd_current_output, NULL,
                   NULL);
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdDoSelect: select() returned %d...",
-                  nfds);
-
   if (nfds > 0)
   {
    /*
@@ -719,18 +643,10 @@ cupsdDoSelect(long timeout)               /* I - Timeout in seconds */
       retain_fd(fdptr);
 
       if (fdptr->read_cb && FD_ISSET(fdptr->fd, &cupsd_current_input))
-      {
-        cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdDoSelect: Read on fd %d...",
-                       fdptr->fd);
         (*(fdptr->read_cb))(fdptr->data);
-      }
 
       if (fdptr->write_cb && FD_ISSET(fdptr->fd, &cupsd_current_output))
-      {
-        cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdDoSelect: Write on fd %d...",
-                       fdptr->fd);
         (*(fdptr->write_cb))(fdptr->data);
-      }
 
       release_fd(fdptr);
     }
@@ -802,7 +718,7 @@ cupsdRemoveSelect(int fd)           /* I - File descriptor */
   * Range check input...
   */
 
-  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdRemoveSelect: fd=%d", fd);
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdRemoveSelect(fd=%d)", fd);
 
   if (fd < 0)
     return;
@@ -832,8 +748,7 @@ cupsdRemoveSelect(int fd)           /* I - File descriptor */
 
     if (kevent(cupsd_kqueue_fd, &event, 1, NULL, 0, &timeout))
     {
-      cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                     "cupsdRemoveSelect: kevent() returned %s",
+      cupsdLogMessage(CUPSD_LOG_EMERG, "kevent() returned %s",
                      strerror(errno));
       return;
     }
@@ -845,8 +760,7 @@ cupsdRemoveSelect(int fd)           /* I - File descriptor */
 
     if (kevent(cupsd_kqueue_fd, &event, 1, NULL, 0, &timeout))
     {
-      cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                     "cupsdRemoveSelect: kevent() returned %s",
+      cupsdLogMessage(CUPSD_LOG_EMERG, "kevent() returned %s",
                      strerror(errno));
       return;
     }
@@ -861,9 +775,6 @@ cupsdRemoveSelect(int fd)           /* I - File descriptor */
   cupsd_update_pollfds = 1;
 
 #else /* select() */
-  cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                  "cupsdRemoveSelect: Removing fd %d from input and output "
-                 "sets...", fd);
   FD_CLR(fd, &cupsd_global_input);
   FD_CLR(fd, &cupsd_global_output);
   FD_CLR(fd, &cupsd_current_input);
@@ -894,6 +805,8 @@ cupsdRemoveSelect(int fd)           /* I - File descriptor */
 void
 cupsdStartSelect(void)
 {
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStartSelect()");
+
   cupsd_fds = cupsArrayNew((cups_array_func_t)compare_fds, NULL);
 
 #if defined(HAVE_EPOLL) || defined(HAVE_KQUEUE)
@@ -930,6 +843,8 @@ cupsdStopSelect(void)
   _cupsd_fd_t  *fdptr;                 /* Current file descriptor */
 
 
+  cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStopSelect()");
+
   for (fdptr = (_cupsd_fd_t *)cupsArrayFirst(cupsd_fds);
        fdptr;
        fdptr = (_cupsd_fd_t *)cupsArrayNext(cupsd_fds))
index 925b60169786e2514cd0a888a54b2c08cd8bbb9d..9e422418ee4bb98f08a836d7371b71fc2ea3e895 100644 (file)
@@ -57,7 +57,7 @@ cupsdStatBufDelete(cupsd_statbuf_t *sb)       /* I - Status buffer */
  */
 
 cupsd_statbuf_t        *                       /* O - New status buffer */
-cupsdStatBufNew(int fd,                        /* I - File descriptor of pipe */
+cupsdStatBufNew(int        fd,         /* I - File descriptor of pipe */
                 const char *prefix,    /* I - Printf-style prefix string */
                ...)                    /* I - Additional args as needed */
 {
index 4412c33d7c9d054c4cfb3d44c5e1639272bab5ac..ba866ca10a949e012830b7ca3350b7d89f555b59 100644 (file)
@@ -3,7 +3,7 @@
  *
  *   Subscription routines for the Common UNIX Printing System (CUPS) scheduler.
  *
- *   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
@@ -1622,7 +1622,7 @@ cupsd_start_notifier(
   */
 
   if (cupsdStartProcess(command, argv, envp, fds[0], -1, NotifierPipes[1],
-                       -1, -1, 0, DefaultProfile, &pid) < 0)
+                       -1, -1, 0, DefaultProfile, 0, &pid) < 0)
   {
    /*
     * Error - can't fork!
index 31e7297300188261f52d641a3aa5637355054923..fab50eee5b7c3b5be0092b5b818cb142a37a3315 100644 (file)
@@ -3,7 +3,7 @@
  *
  *   Mini-daemon utility definitions for the Common UNIX Printing System (CUPS).
  *
- *   Copyright 2007-2008 by Apple Inc.
+ *   Copyright 2007-2009 by Apple Inc.
  *   Copyright 1997-2005 by Easy Software Products.
  *
  *   These coded instructions, statements, and computer programs are the
  * Include necessary headers...
  */
 
-#  include <cups/cups.h>
-#  include <cups/file.h>
-#  include <cups/string.h>
-#  include <stdlib.h>
-#  include <errno.h>
+#  include <cups/file-private.h>
 #  include <signal.h>
-#  include <dirent.h>
 
 
 /*
diff --git a/templates/pl/add-class.tmpl b/templates/pl/add-class.tmpl
new file mode 100644 (file)
index 0000000..af5c69f
--- /dev/null
@@ -0,0 +1,39 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Dodawanie klasy</H2>
+
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+
+<TABLE>
+<TR>
+<TH CLASS="label">Nazwa:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_NAME" SIZE="40" MAXLENGTH="127"><BR>
+<SMALL>(Może zawierać wszystkie drukowalne znaki, oprócz "/", "#" i spacji)</SMALL></TD>
+</TR>
+<TR>
+<TH CLASS="label">Opis:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_INFO" SIZE="40" MAXLENGTH="127"><BR>
+<SMALL>(Opis czytelny dla człowieka, taki jak "HP LaserJet z dupleksem")</SMALL></TD>
+</TR>
+<TR>
+<TH CLASS="label">Położenie:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_LOCATION" SIZE="40" MAXLENGTH="127"><BR>
+<SMALL>(Położenie czytelne dla człowieka, takie jak "Laboratorium 1")</SMALL></TD>
+</TR>
+<TR>
+<TH CLASS="label">Członkowie:</TH>
+<TD>
+<SELECT NAME="MEMBER_URIS" SIZE="10" MULTIPLE>
+{[member_uris]<OPTION VALUE="{member_uris}" {?member_selected}>{member_names}}
+</SELECT>
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="SUBMIT" VALUE="Dodaj klasę"></TD>
+</TR>
+</TABLE>
+
+</FORM>
+</DIV>
diff --git a/templates/pl/add-printer.tmpl b/templates/pl/add-printer.tmpl
new file mode 100644 (file)
index 0000000..2010a0b
--- /dev/null
@@ -0,0 +1,42 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Dodawanie drukarki</H2>
+
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+{?current_make!?<INPUT TYPE="HIDDEN" NAME="CURRENT_MAKE" VALUE="{current_make}">:}
+{?current_make_and_model!?<INPUT TYPE="HIDDEN" NAME="CURRENT_MAKE_AND_MODEL" VALUE="{current_make_and_model}">:}
+
+<TABLE>
+<TR>
+<TH CLASS="label">Nazwa:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_NAME" SIZE="40" MAXLENGTH="127" VALUE="{?template_name}"><BR>
+<SMALL>(Może zawierać wszystkie drukowalne znaki, oprócz "/", "#" i spacji)</SMALL></TD>
+</TR>
+<TR>
+<TH CLASS="label">Opis:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_INFO" SIZE="40" MAXLENGTH="127" VALUE="{?PRINTER_INFO}"><BR>
+<SMALL>(Opis czytelny dla człowieka, taki jak "HP LaserJet z dupleksem")</SMALL></TD>
+</TR>
+<TR>
+<TH CLASS="label">Położenie:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_LOCATION" SIZE="40" MAXLENGTH="127" VALUE="{?PRINTER_LOCATION}"><BR>
+<SMALL>(Położenie czytelne dla człowieka, takie jak "Laboratorium 1")</SMALL></TD>
+</TR>
+<TR>
+<TH CLASS="label">Połączenie:</TH>
+<TD><INPUT TYPE="HIDDEN" NAME="DEVICE_URI" VALUE="{device_uri}">{device_uri}</TD>
+</TR>
+<TR>
+<TH CLASS="label">Współdzielenie:</TH>
+<TD><INPUT TYPE="CHECKBOX" NAME="PRINTER_IS_SHARED" {PRINTER_IS_SHARED=1?CHECKED:}">
+Współdzielenie tej drukarki</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="SUBMIT" VALUE="Kontynuuj"></TD>
+</TR>
+</TABLE>
+
+</FORM>
+</DIV>
diff --git a/templates/pl/add-rss-subscription.tmpl b/templates/pl/add-rss-subscription.tmpl
new file mode 100644 (file)
index 0000000..0523454
--- /dev/null
@@ -0,0 +1,43 @@
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="add-rss-subscription">
+
+<H2 CLASS="title">Dodawanie subskrypcji RSS</H2>
+
+<TABLE SUMMARY="Formularz dodawania subskrypcji RSS">
+<TR>
+<TH CLASS="label">Nazwa:</TH>
+<TD COLSPAN="5"><INPUT TYPE="TEXT" NAME="SUBSCRIPTION_NAME" SIZE="40" MAXLENGTH="127" VALUE="{?SUBSCRIPTION_NAME}"><BR>
+<SMALL>(Może zawierać wszystkie drukowalne znaki, oprócz spacji, "/", "?" i "#")</SMALL></TD>
+</TR>
+<TR>
+<TH CLASS="label">Kolejka:</TH>
+<TD COLSPAN="5"><SELECT NAME="PRINTER_URI" SIZE="10"><OPTION VALUE="#ALL#"{?PRINTER_URI=#ALL#? SELECTED:}>Wszystkie kolejki</OPTION>{[printer_name]<OPTION VALUE="{printer_uri_supported}"{?PRINTER_URI={printer_uri_supported}? SELECTED:}>{printer_name}</OPTION>}</SELECT></TD>
+</TR>
+<TR VALIGN="TOP">
+<TH CLASS="label">Zdarzenia:</TH>
+<TD><INPUT TYPE="CHECKBOX" NAME="EVENT_JOB_CREATED" {?EVENT_JOB_CREATED}>Utworzono zadanie<BR>
+<INPUT TYPE="CHECKBOX" NAME="EVENT_JOB_COMPLETED" {?EVENT_JOB_COMPLETED}>Ukończono zadanie<BR>
+<INPUT TYPE="CHECKBOX" NAME="EVENT_JOB_STOPPED" {?EVENT_JOB_STOPPED}>Zatrzymano zadanie<BR>
+<INPUT TYPE="CHECKBOX" NAME="EVENT_JOB_CONFIG_CHANGED" {?EVENT_JOB_CONFIG_CHANGED}>Zmieniono opcje zadania</TD>
+<TD>&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+<TD><INPUT TYPE="CHECKBOX" NAME="EVENT_PRINTER_STOPPED" {?EVENT_PRINTER_STOPPED}>Zatrzymano kolejkę<BR>
+<INPUT TYPE="CHECKBOX" NAME="EVENT_PRINTER_ADDED" {?EVENT_PRINTER_ADDED}>Dodano kolejkę<BR>
+<INPUT TYPE="CHECKBOX" NAME="EVENT_PRINTER_MODIFIED" {?EVENT_PRINTER_MODIFIED}>Zmodyfikowano kolejkę<BR>
+<INPUT TYPE="CHECKBOX" NAME="EVENT_PRINTER_DELETED" {?EVENT_PRINTER_DELETED}>Usunięto kolejkę</TD>
+<TD>&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+<TD><INPUT TYPE="CHECKBOX" NAME="EVENT_SERVER_STARTED" {?EVENT_SERVER_STARTED}>Uruchomiono serwer<BR>
+<INPUT TYPE="CHECKBOX" NAME="EVENT_SERVER_STOPPED" {?EVENT_SERVER_STOPPED}>Zatrzymano serwer<BR>
+<INPUT TYPE="CHECKBOX" NAME="EVENT_SERVER_RESTARTED" {?EVENT_SERVER_RESTARTED}>Ponownie uruchomiono serwer<BR>
+<INPUT TYPE="CHECKBOX" NAME="EVENT_SERVER_AUDIT" {?EVENT_SERVER_AUDIT}>Audytowanie bezpieczeństwa serwera</TD>
+</TR>
+<TR>
+<TH CLASS="label">Maksymalna liczba zdarzeń w kanale:</TH>
+<TD COLSPAN="5"><INPUT TYPE="TEXT" NAME="MAX_EVENTS" SIZE="4" MAXLENGTH="4" VALUE="{MAX_EVENTS?{MAX_EVENTS}:20}"></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD COLSPAN="5"><INPUT TYPE="SUBMIT" VALUE="Dodaj subskrypcję RSS"></TD>
+</TR>
+</TABLE>
+
+</FORM>
diff --git a/templates/pl/admin.tmpl b/templates/pl/admin.tmpl
new file mode 100644 (file)
index 0000000..5a5e828
--- /dev/null
@@ -0,0 +1,109 @@
+<TABLE CLASS="indent" SUMMARY="Zadania administracji">
+<TR><TD VALIGN="TOP">
+
+<H2 CLASS="title">Drukarki</H2>
+
+<P>
+<FORM ACTION="/admin/" METHOD="POST"><INPUT TYPE="HIDDEN" NAME="OP" VALUE="add-printer"><INPUT TYPE="SUBMIT" VALUE="Dodawanie drukarki"></FORM>
+<FORM ACTION="/admin/" METHOD="POST"><INPUT TYPE="HIDDEN" NAME="OP" VALUE="find-new-printers"><INPUT TYPE="SUBMIT" VALUE="Wyszukiwanie nowych drukarek"></FORM>
+<FORM ACTION="/printers/" METHOD="GET"><INPUT TYPE="SUBMIT" VALUE="Zarządzanie drukarkami"></FORM>
+{have_samba?<FORM ACTION="/admin/" METHOD="POST"><INPUT TYPE="HIDDEN" NAME="OP" VALUE="export-samba"><INPUT TYPE="SUBMIT" VALUE="Eksportowanie drukarek do Samby"></FORM>:}
+</P>
+
+<H2 CLASS="title">Klasy</H2>
+
+<P>
+<FORM ACTION="/admin/" METHOD="POST"><INPUT TYPE="HIDDEN" NAME="OP" VALUE="add-class"><INPUT TYPE="SUBMIT" VALUE="Dodawanie klasy"></FORM>
+<FORM ACTION="/classes/" METHOD="GET"><INPUT TYPE="SUBMIT" VALUE="Zarządzanie klasami"></FORM>
+</P>
+
+<H2 CLASS="title">Zadania</H2>
+
+<P>
+<FORM ACTION="/jobs/" METHDO="GET"><INPUT TYPE="SUBMIT" VALUE="Zarządzanie zadaniami"></FORM>
+</P>
+
+</TD><TD>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD><TD VALIGN="TOP">
+
+<H2 CLASS="title">Serwery</H2>
+
+<P>
+<FORM ACTION="/admin/" METHOD="POST"><INPUT TYPE="HIDDEN" NAME="OP" VALUE="config-server"><INPUT TYPE="SUBMIT" VALUE="Modyfikowanie pliku konfiguracji"></FORM>
+<FORM ACTION="/admin/log/access_log" METHOD="GET"><INPUT TYPE="SUBMIT" VALUE="Przeglądanie dziennika dostępu"></FORM>
+<FORM ACTION="/admin/log/error_log" METHOD="GET"><INPUT TYPE="SUBMIT" VALUE="Przeglądanie dziennika błędów"></FORM>
+<FORM ACTION="/admin/log/page_log" METHOD="GET"><INPUT TYPE="SUBMIT" VALUE="Przeglądanie dziennika stron"></FORM>
+</P>
+
+{SETTINGS_ERROR?<P>{SETTINGS_MESSAGE}</P>
+<BLOCKQUOTE>{SETTINGS_ERROR}</BLOCKQUOTE>:
+
+<FORM METHOD="POST" ACTION="/admin">
+
+{ADVANCEDSETTINGS?<P><B>Ustawienia serwera\:</B></P>
+
+<P><A HREF="/admin/">Zaawansowane <SMALL>&#x25bc;</SMALL></A><BR>
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="config-server">
+<INPUT TYPE="HIDDEN" NAME="ADVANCEDSETTINGS" VALUE="YES">
+<INPUT TYPE="CHECKBOX" NAME="REMOTE_PRINTERS" {?remote_printers}> Wyświetlanie drukarek współdzielonych przez inne systemy<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Protokoły\:
+<INPUT TYPE="CHECKBOX" NAME="BROWSE_REMOTE_CUPS" {?browse_remote_cups}> CUPS
+{HAVE_LDAP?<INPUT TYPE="CHECKBOX" NAME="BROWSE_REMOTE_LDAP" {?browse_remote_ldap}> LDAP:}
+{HAVE_LIBSLP?<INPUT TYPE="CHECKBOX" NAME="BROWSE_REMOTE_SLP" {?browse_remote_slp}> SLP:}<BR>
+<INPUT TYPE="CHECKBOX" NAME="SHARE_PRINTERS" {?share_printers}> Współdzielenie drukarek podłączonych do tego systemu<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maksymalna liczba klientów\:
+<INPUT TYPE="TEXT" NAME="MAX_CLIENTS" VALUE="{?max_clients}" SIZE="6"><BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Protokoły\:
+<INPUT TYPE="CHECKBOX" NAME="BROWSE_LOCAL_CUPS" {?browse_local_cups}> CUPS
+{HAVE_DNSSD?<INPUT TYPE="CHECKBOX" NAME="BROWSE_LOCAL_DNSSD" {?browse_local_dnssd}> DNS-SD:}
+{HAVE_LDAP?<INPUT TYPE="CHECKBOX" NAME="BROWSE_LOCAL_LDAP" {?browse_local_ldap}> LDAP:}
+{HAVE_LIBSLP?<INPUT TYPE="CHECKBOX" NAME="BROWSE_LOCAL_SLP" {?browse_local_slp}> SLP:}<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<INPUT TYPE="CHECKBOX" NAME="REMOTE_ANY" {?remote_any}> Zezwolenie na drukowanie z Internetu"<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<INPUT TYPE="CHECKBOX" NAME="BROWSE_WEB_IF" {?browse_web_if}> Rozgłaszanie interfejsu WWW<BR>
+<INPUT TYPE="CHECKBOX" NAME="REMOTE_ADMIN" {?remote_admin}> Zezwolenie na zdalną administrację<BR>
+{have_gssapi?<INPUT TYPE="CHECKBOX" NAME="KERBEROS" {?kerberos}> Używanie uwierzytelniania Kerberosa (<A HREF="/help/kerberos.html?TOPIC=Getting+Started">FAQ</A>)<BR>:}
+<INPUT TYPE="CHECKBOX" NAME="USER_CANCEL_ANY" {?user_cancel_any}> Zezwolenie użytkownikom na anulowanie każdego zadania (nie tylko ich własnego)<BR>
+<INPUT TYPE="CHECKBOX" NAME="PRESERVE_JOB_HISTORY" {?preserve_job_history}> Przechowywanie plików zadań<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Liczba zadań\:
+<INPUT TYPE="TEXT" NAME="MAX_JOBS" VALUE="{?max_jobs}" SIZE="6"><BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<INPUT TYPE="CHECKBOX" NAME="PRESERVE_JOB_FILES" {?preserve_job_files}> Przechowywanie plików wydruków zadań<BR>
+<INPUT TYPE="CHECKBOX" NAME="DEBUG_LOGGING" {?debug_logging}> Zapisywanie informacji debugowania do naprawiania problemów<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maksymalny rozmiar pliku dziennika\:
+<INPUT TYPE="TEXT" NAME="MAX_LOG_SIZE" VALUE="{?max_log_size}" SIZE="6"></P>
+
+:<P><B>Ustawienia serwera:</B></P>
+
+<P><A HREF="/admin/?ADVANCEDSETTINGS=YES">Zaawansowane <SMALL>&#x25b6;</SMALL></A><BR>
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="config-server">
+<INPUT TYPE="CHECKBOX" NAME="REMOTE_PRINTERS" {?remote_printers}> Wyświetlanie drukarek współdzielonych przez inne systemy<BR>
+<INPUT TYPE="CHECKBOX" NAME="SHARE_PRINTERS" {?share_printers}> Współdzielenie drukarek połączonych do tego systemu<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<INPUT TYPE="CHECKBOX" NAME="REMOTE_ANY" {?remote_any}> Zezwolenie na drukowanie z Internetu<BR>
+<INPUT TYPE="CHECKBOX" NAME="REMOTE_ADMIN" {?remote_admin}> Zezwolenie na zdalną administrację<BR>
+{have_gssapi?<INPUT TYPE="CHECKBOX" NAME="KERBEROS" {?kerberos}> Używanie uwierzytelniania Kerberosa (<A HREF="/help/kerberos.html?TOPIC=Getting+Started">FAQ</A>)<BR>:}
+<INPUT TYPE="CHECKBOX" NAME="USER_CANCEL_ANY" {?user_cancel_any}> Zezwolenie użytkownikom na anulowanie każdego zadania (nie tylko ich własnego)<BR>
+<INPUT TYPE="CHECKBOX" NAME="DEBUG_LOGGING" {?debug_logging}> Zapisywanie informacji debugowania do naprawiania problemów</P>
+
+}
+<P><INPUT TYPE="SUBMIT" NAME="CHANGESETTINGS" VALUE="Zmień ustawienia"></P>
+
+</FORM>}
+
+</TD></TR>
+</TABLE>
+
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Subskrypcje RSS</H2>
+
+<P>
+<FORM ACTION="/admin/" METHOD="POST"><INPUT TYPE="HIDDEN" NAME="OP" VALUE="add-rss-subscription"><INPUT TYPE="SUBMIT" VALUE="Dodawanie subskrypcji RSS"></FORM>
+</P>
+
+</DIV>
+
+{notify_subscription_id?<TABLE CLASS="list" SUMMARY="Subskrypcje RSS">
+<THEAD><TR><TH>Name</TH><TH>Zdarzenia</TH><TH>Nazwa kolejki</TH></TR></THEAD>
+<TBODY>{[notify_subscription_id]
+<TR><TD><A HREF="{notify_recipient_uri}">{notify_recipient_name}</A><BR>
+<FORM ACTION="/admin/" METHOD="POST"><INPUT TYPE="HIDDEN" NAME="OP" VALUE="cancel-subscription"><INPUT TYPE="HIDDEN" NAME="notify_subscription_id" VALUE="{notify_subscription_id}"><INPUT TYPE="SUBMIT" VALUE="Anuluj subskrypcję RSS"></FORM>&nbsp;</TD><TD>{notify_events}</TD><TD NOWRAP>&nbsp;{notify_printer_name?{notify_printer_name}:Wszystkie kolejki}</TD></TR>}
+</TBODY>
+</TABLE>:}
diff --git a/templates/pl/choose-device.tmpl b/templates/pl/choose-device.tmpl
new file mode 100644 (file)
index 0000000..7fc06de
--- /dev/null
@@ -0,0 +1,53 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">{op=modify-printer?Modyfikowanie {printer_name}:Dodawanie drukarki}</H2>
+
+{CUPS_GET_DEVICES_DONE?:<P><IMG SRC="/images/wait.gif" WIDTH="16" HEIGHT="16" ALIGN="ABSMIDDLE"
+ALT="Busy Indicator"> Wyszukiwanie drukarek...</P>}
+
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+{printer_name?<INPUT TYPE="HIDDEN" NAME="printer_name" VALUE="{printer_name}">:}
+
+<TABLE>
+{op=add-printer?:<TR>
+<TH CLASS="label">Bieżące połączenie:</TH>
+<TD><INPUT TYPE="RADIO" NAME="DEVICE_URI" VALUE="{current_device_uri}" CHECKED>
+{current_device_uri}</TD>
+</TR>}
+<TR>
+<TH CLASS="label">Lokalne drukarki:</TH>
+<TD>
+{[device_uri]{device_class!network?<INPUT TYPE="RADIO" NAME="DEVICE_URI"
+VALUE="{device_uri}{?device_make_and_model!Unknown?|{device_make_and_model}:}">
+{device_info} {?device_make_and_model!Unknown?({device_make_and_model}):}<BR>
+:}}
+</TD>
+</TR>
+<TR>
+<TH CLASS="label">Wykryte drukarki sieciowe:</TH>
+<TD>
+{[device_uri]{device_class=network?{device_uri~[a-z]+://?<INPUT TYPE="RADIO" NAME="DEVICE_URI"
+VALUE="{device_uri}{?device_make_and_model!Unknown?|{device_make_and_model}:}">
+{device_info} {?device_make_and_model!Unknown?({device_make_and_model}):}<BR>
+:}:}}
+</TD>
+</TR>
+<TR>
+<TR>
+<TH CLASS="label">Inne drukarki sieciowe:</TH>
+<TD>
+{[device_uri]{device_class=network?{device_uri~[a-z]+://?:<INPUT TYPE="RADIO" NAME="DEVICE_URI"
+VALUE="{device_uri}{?device_make_and_model!Unknown?|{device_make_and_model}:}">
+{device_info} {?device_make_and_model!Unknown?({device_make_and_model}):}<BR>
+}:}}
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="SUBMIT" VALUE="Kontynuuj"></TD>
+</TR>
+</TABLE>
+
+</FORM>
+</DIV>
diff --git a/templates/pl/choose-make.tmpl b/templates/pl/choose-make.tmpl
new file mode 100644 (file)
index 0000000..d632619
--- /dev/null
@@ -0,0 +1,63 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">{op=modify-printer?Modify {printer_name}:Dodawanie drukarki}</H2>
+
+<FORM METHOD="POST" ACTION="/admin" ENCTYPE="multipart/form-data">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+{printer_name?<INPUT TYPE="HIDDEN" NAME="printer_name" VALUE="{printer_name}">:}
+<INPUT TYPE="HIDDEN" NAME="BAUDRATE" VALUE="{?baudrate}">
+<INPUT TYPE="HIDDEN" NAME="BITS" VALUE="{?bits}">
+<INPUT TYPE="HIDDEN" NAME="PARITY" VALUE="{?parity}">
+<INPUT TYPE="HIDDEN" NAME="FLOW" VALUE="{?flow}">
+
+<TABLE>
+{op=modify-printer?:<TR>
+<TH CLASS="label">Nazwa:</TH>
+<TD><INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">{printer_name}</TD>
+</TR>}
+<TR>
+<TH CLASS="label">Opis:</TH>
+<TD><INPUT TYPE="HIDDEN" NAME="PRINTER_INFO" VALUE="{printer_info}">{printer_info}</TD>
+</TR>
+<TR>
+<TH CLASS="label">Położenie:</TH>
+<TD><INPUT TYPE="HIDDEN" NAME="PRINTER_LOCATION" VALUE="{printer_location}">{printer_location}</TD>
+</TR>
+<TR>
+<TH CLASS="label">Połączenie:</TH>
+<TD><INPUT TYPE="HIDDEN" NAME="DEVICE_URI" VALUE="{device_uri}">{device_uri}</TD>
+</TR>
+<TR>
+<TH CLASS="label">Współdzielenie:</TH>
+<TD><INPUT TYPE="HIDDEN" NAME="PRINTER_IS_SHARED" VALUE="{?printer_is_shared}">
+{?printer_is_shared=?Do Not:{?printer_is_shared=0?Do Not:}} Współdzielenie tej drukarki</TD>
+</TR>
+<TR>
+<TH CLASS="label">Producent:</TH>
+<TD>
+<SELECT NAME="PPD_MAKE" SIZE="10">
+{[ppd_make]<OPTION VALUE="{ppd_make}" {?current_make={ppd_make}?SELECTED:}>{ppd_make}}
+</SELECT>
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="SUBMIT" VALUE="Kontynuuj"></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD>&nbsp;</TD>
+</TR>
+<TR>
+<TH CLASS="label">Lub podaj plik PPD:</TH>
+<TD><INPUT TYPE="HIDDEN" NAME="MAX_FILE_SIZE" VALUE="262144"><INPUT
+TYPE="FILE" NAME="PPD_FILE"></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="SUBMIT" VALUE="{op=add-printer?Dodaj drukarkę:Zmodyfikuj drukarkę}"></TD>
+</TR>
+</TABLE>
+
+</FORM>
+</DIV>
diff --git a/templates/pl/choose-model.tmpl b/templates/pl/choose-model.tmpl
new file mode 100644 (file)
index 0000000..6a7cbb6
--- /dev/null
@@ -0,0 +1,59 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">{op=modify-printer?Modyfikowanie {printer_name}:Dodawanie drukarki}</H2>
+
+<FORM METHOD="POST" ACTION="/admin" ENCTYPE="multipart/form-data">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+{printer_name?<INPUT TYPE="HIDDEN" NAME="printer_name" VALUE="{printer_name}">:}
+<INPUT TYPE="HIDDEN" NAME="BAUDRATE" VALUE="{?baudrate}">
+<INPUT TYPE="HIDDEN" NAME="BITS" VALUE="{?bits}">
+<INPUT TYPE="HIDDEN" NAME="PARITY" VALUE="{?parity}">
+<INPUT TYPE="HIDDEN" NAME="FLOW" VALUE="{?flow}">
+<TABLE>
+{op=modify-printer?:<TR>
+<TH CLASS="label">Nazwa:</TH>
+<TD><INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">{printer_name}</TD>
+</TR>}
+<TR>
+<TH CLASS="label">Opis:</TH>
+<TD><INPUT TYPE="HIDDEN" NAME="PRINTER_INFO" VALUE="{printer_info}">{printer_info}</TD>
+</TR>
+<TR>
+<TH CLASS="label">Położenie:</TH>
+<TD><INPUT TYPE="HIDDEN" NAME="PRINTER_LOCATION" VALUE="{printer_location}">{printer_location}</TD>
+</TR>
+<TR>
+<TH CLASS="label">Połączenie:</TH>
+<TD><INPUT TYPE="HIDDEN" NAME="DEVICE_URI" VALUE="{device_uri}">{device_uri}</TD>
+</TR>
+<TR>
+<TH CLASS="label">Współdzielenie:</TH>
+<TD><INPUT TYPE="HIDDEN" NAME="PRINTER_IS_SHARED" VALUE="{?printer_is_shared}">
+{?printer_is_shared=?Nie:{?printer_is_shared=0?Nie:}} współdziel tej drukarki</TD>
+</TR>
+<TR>
+<TH CLASS="label">Producent:</TH>
+<TD>{PPD_MAKE} <INPUT TYPE="SUBMIT" NAME="SELECT_MAKE" VALUE="Wybierz innego producenta"></TD>
+</TR>
+<TR>
+<TH CLASS="label">Model:</TH>
+<TD>
+<SELECT NAME="PPD_NAME" SIZE="10">
+{op=add-printer?:<OPTION VALUE="__no_change__" SELECTED>Bieżący sterownik - {current_make_and_model}</OPTION>:}
+{[ppd_name]<OPTION VALUE="{ppd_name}" {op=modify-printer?:{?current_make_and_model={ppd_make_and_model}?SELECTED:}}>{ppd_make_and_model} ({ppd_natural_language})
+}</SELECT>
+</TD>
+</TR>
+<TR>
+<TH CLASS="label">Lub podaj plik PPD:</TH>
+<TD><INPUT TYPE="HIDDEN" NAME="MAX_FILE_SIZE" VALUE="262144"><INPUT
+TYPE="FILE" NAME="PPD_FILE"></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="SUBMIT" VALUE="{op=add-printer?Dodaj drukarkę:Zmodyfikuj drukarkę}"></TD>
+</TR>
+</TABLE>
+
+</FORM>
+</DIV>
diff --git a/templates/pl/choose-serial.tmpl b/templates/pl/choose-serial.tmpl
new file mode 100644 (file)
index 0000000..5c42b24
--- /dev/null
@@ -0,0 +1,51 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">{op=modify-printer?Modyfikowanie {printer_name}:Dodawanie drukarki}</H2>
+
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+{printer_name?<INPUT TYPE="HIDDEN" NAME="printer_name" VALUE="{printer_name}">:}
+
+<TABLE>
+<TR>
+<TH CLASS="label">Połączenie:</TH>
+<TD><INPUT TYPE="HIDDEN" NAME="DEVICE_URI" VALUE="{device_uri}">{device_uri}</TD>
+</TR>
+<TR>
+<TH CLASS="label">Prędkość w baudach:</TH>
+<TD><SELECT NAME="BAUDRATE">
+{[baudrates]<OPTION {?baudrate={baudrates}?SELECTED:}>{baudrates}}
+</SELECT></TD>
+</TR>
+<TR>
+<TH CLASS="label">Równorzędność:</TH>
+<TD><SELECT NAME="PARITY">
+<OPTION VALUE="none" {?parity=none?SELECTED:}>None
+<OPTION VALUE="even" {?parity=even?SELECTED:}>Even
+<OPTION VALUE="odd" {?parity=odd?SELECTED:}>Odd
+</SELECT></TD>
+</TR>
+<TR>
+<TH CLASS="label">Bity danych:</TH>
+<TD><SELECT NAME="BITS">
+<OPTION {?bits=8?SELECTED:}>8
+<OPTION {?bits=7?SELECTED:}>7
+</SELECT></TD>
+</TR>
+<TR>
+<TH CLASS="label">Kontrola przepływu:</TH>
+<TD><SELECT NAME="FLOW">
+<OPTION VALUE="none" {?flow=none?SELECTED:}>Brak
+<OPTION VALUE="soft" {?flow=soft?SELECTED:}>XON/XOFF (programowa)
+<OPTION VALUE="hard" {?flow=hard?SELECTED:}>RTS/CTS (sprzętowa)
+<OPTION VALUE="dtrdsr" {?flow=dtrdsr?SELECTED:}>DTR/DSR (sprzętowa)
+</SELECT></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="SUBMIT" VALUE="Kontynuuj"></TD>
+</TR>
+</TABLE>
+
+</FORM>
+</DIV>
diff --git a/templates/pl/choose-uri.tmpl b/templates/pl/choose-uri.tmpl
new file mode 100644 (file)
index 0000000..5c87dbb
--- /dev/null
@@ -0,0 +1,43 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">{op=modify-printer?Modyfikowanie {printer_name}:Dodawanie drukarki}</H2>
+
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+{printer_name?<INPUT TYPE="HIDDEN" NAME="printer_name" VALUE="{printer_name}">:}
+<INPUT TYPE="HIDDEN" NAME="CURRENT_MAKE_AND_MODEL" VALUE="{?current_make_and_model}">
+
+<TABLE>
+<TR>
+<TH CLASS="label">Połączenie:</TH>
+<TD><INPUT TYPE="TEXT" SIZE="60" MAXLENGTH="1024" NAME="DEVICE_URI" VALUE="{current_device_uri?{current_device_uri}:{device_uri}}"></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD>Przykłady:
+<PRE>
+    http://nazwakomputera:631/ipp/
+    http://nazwakomputera:631/ipp/port1
+
+    ipp://nazwakomputera/ipp/
+    ipp://nazwakomputera/ipp/port1
+
+    lpd://nazwakomputera/kolejka
+
+    socket://nazwakomputera
+    socket://nazwakomputera:9100
+</PRE>
+
+<P>Proszę zobaczyć <A HREF="/help/network.html" TARGET="_blank">"Drukarki
+sieciowe"</A>, aby uzyskać poprawne URI dla drukarki.</P>
+
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="SUBMIT" VALUE="Kontynuuj"></TD>
+</TR>
+</TABLE>
+
+</FORM>
+</DIV>
diff --git a/templates/pl/class-added.tmpl b/templates/pl/class-added.tmpl
new file mode 100644 (file)
index 0000000..2bee7d8
--- /dev/null
@@ -0,0 +1,8 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Dodawanie klasy</H2>
+
+<P>Klasa <A HREF="/classes/{printer_name}">{printer_name}</A> została pomyślnie
+dodana.
+
+</DIV>
diff --git a/templates/pl/class-confirm.tmpl b/templates/pl/class-confirm.tmpl
new file mode 100644 (file)
index 0000000..7c38b89
--- /dev/null
@@ -0,0 +1,10 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Usuwanie klasy {printer_name}</H2>
+
+<P><B>Ostrzeżenie:</B> Usunąć klasę
+{printer_name}?</P>
+
+<P ALIGN="CENTER"><FORM ACTION="/admin/" METHOD="POST"><INPUT TYPE="HIDDEN" NAME="op" VALUE="delete-class"><INPUT TYPE="HIDDEN" NAME="printer_name" VALUE="{printer_name}"><INPUT TYPE="SUBMIT" NAME="confirm" VALUE="Usuń klasę"></FORM></P>
+
+</DIV>
diff --git a/templates/pl/class-deleted.tmpl b/templates/pl/class-deleted.tmpl
new file mode 100644 (file)
index 0000000..1a78c90
--- /dev/null
@@ -0,0 +1,7 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Usuwanie klasy {printer_name}</H2>
+
+<P>Klasa {printer_name} została pomyślnie usunięta.
+
+</DIV>
diff --git a/templates/pl/class-jobs-header.tmpl b/templates/pl/class-jobs-header.tmpl
new file mode 100644 (file)
index 0000000..83dcfbc
--- /dev/null
@@ -0,0 +1,3 @@
+<DIV CLASS="indent">
+<H3 CLASS="title">Zadania</H3>
+</DIV>
diff --git a/templates/pl/class-modified.tmpl b/templates/pl/class-modified.tmpl
new file mode 100644 (file)
index 0000000..be91caa
--- /dev/null
@@ -0,0 +1,8 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Modyfikowanie klasy {printer_name}</H2>
+
+<P>Klasa <A HREF="/classes/{printer_name}">{printer_name}</A> została
+pomyślnie zmodyfikowana.
+
+</DIV>
diff --git a/templates/pl/class.tmpl b/templates/pl/class.tmpl
new file mode 100644 (file)
index 0000000..9ba9ff4
--- /dev/null
@@ -0,0 +1,41 @@
+<DIV CLASS="indent">
+<H2 CLASS="title"><A HREF="{printer_uri_supported}">{printer_name}</A>
+({printer_state=3?Bezczynna:{printer_state=4?Przetwarzanie:Wstrzymane}},
+{printer_is_accepting_jobs=0?Odrzucanie zadań:Akceptowanie zadań},
+{server_is_sharing_printers=0?Nie:{printer_is_shared=0?Nie:}} Współdzielona{default_name={printer_name}?, Domyślne serwera:})</H2>
+
+<FORM METHOD="POST" ACTION="{printer_uri_supported}" NAME="maintenance">
+<SELECT NAME="OP" ONCHANGE="document.maintenance.submit();">
+<OPTION VALUE="">Konserwacja</OPTION>
+<OPTION VALUE="print-test-page">Drukowanie strony próbnej</OPTION>
+{printer_state=5?<OPTION VALUE="start-class">Wznów klasę</OPTION>:<OPTION VALUE="stop-class">Wstrzymaj klasę</OPTION>}
+{printer_is_accepting_jobs=0?<OPTION VALUE="accept-jobs">Akceptuj zadania</OPTION>:<OPTION VALUE="reject-jobs">Odrzucaj zadania</OPTION>}
+<OPTION VALUE="move-jobs">Przenieś wszystkie zadania</OPTION>
+<OPTION VALUE="purge-jobs">Anuluj wszystkie zadania</OPTION>
+</SELECT>
+<INPUT TYPE="SUBMIT" VALUE="Przejdź" STYLE="display: none;">
+</FORM>
+
+<FORM METHOD="POST" ACTION="{admin_uri}" NAME="administration">
+<INPUT TYPE="HIDDEN" NAME="printer_name" VALUE="{printer_name}">
+<SELECT NAME="OP" ONCHANGE="document.administration.submit();">
+<OPTION VALUE="">Administracja</OPTION>
+<OPTION VALUE="modify-class">Zmodyfikuj klasę</OPTION>
+<OPTION VALUE="delete-class">Usuń klasę</OPTION>
+<OPTION VALUE="set-class-options">Ustaw domyślne opcje</OPTION>
+<OPTION VALUE="set-as-default">Ustaw jako domyślne serwera</OPTION>
+<OPTION VALUE="set-allowed-users">Ustaw zezwolonych użytkowników</OPTION>
+</SELECT>
+<INPUT TYPE="SUBMIT" VALUE="Przejdź" STYLE="display: none;">
+</FORM>
+
+<TABLE SUMMARY="{printer_name}">
+<TR><TH ALIGN="RIGHT" VALIGN="TOP">Opis:</TH><TD>{printer_info}</TD></TR>
+<TR><TH ALIGN="RIGHT" VALIGN="TOP">Położenie:</TH><TD>{printer_location}</TD></TR>
+<TR><TH ALIGN="RIGHT" VALIGN="TOP">Członkowie:</TH><TD>{?member_uris=?None:{member_uris}}</TD></TR>
+<TR><TH ALIGN="RIGHT" VALIGN="TOP">Domyślne:</TH><TD>job-sheets={job_sheets_default}
+media={media_default?{media_default}:unknown}
+{sides_default?sides={sides_default}:}</TD></TR>
+</TABLE>
+
+</DIV>
diff --git a/templates/pl/classes-header.tmpl b/templates/pl/classes-header.tmpl
new file mode 100644 (file)
index 0000000..8482fd1
--- /dev/null
@@ -0,0 +1 @@
+<P ALIGN="CENTER">{total=0?Brak klas:Wyświetlanie {#printer_name} z {total} klas{total=1?:es}}.</P>
diff --git a/templates/pl/classes.tmpl b/templates/pl/classes.tmpl
new file mode 100644 (file)
index 0000000..1d8c766
--- /dev/null
@@ -0,0 +1,11 @@
+{#printer_name=0?:
+<TABLE CLASS="list" SUMMARY="Lista klas">
+<THEAD>
+<TR><TH><A HREF="{THISURL}?QUERY={?QUERY}&amp;WHICH_JOBS={?WHICH_JOBS}&amp;FIRST={FIRST}&amp;ORDER={ORDER=dec?asc:dec}">{ORDER=dec?<SMALL>&#x25b2;</SMALL> Nazwa kolejki <SMALL>&#x25b2;</SMALL>:<SMALL>&#x25bc;</SMALL> Nazwa kolejki <SMALL>&#x25bc;</SMALL>}</A></TH><TH>Opis</TH><TH>Położenie</TH><TH>Members</TH><TH>Stan</TH></TR>
+</THEAD>
+<TBODY>
+{[printer_name]
+<TR><TD><A HREF="{printer_uri_supported}">{printer_name}</A></TD><TD>{printer_info}</TD><TD>{printer_location}</TD><TD>{?member_uris=?Brak:{member_uris}}</TD><TD>{printer_state=3?Idle:{printer_state=4?Przetwarzanie:Wstrzymane}}{printer_state_message? - "{printer_state_message}":}</TD></TR>
+}
+</TBODY>
+</TABLE></DIV>}
diff --git a/templates/pl/command.tmpl b/templates/pl/command.tmpl
new file mode 100644 (file)
index 0000000..9a87439
--- /dev/null
@@ -0,0 +1,12 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">{title} On {printer_name}</H2>
+
+<P>{job_state>5?:<IMG SRC="/images/wait.gif" WIDTH="16" HEIGHT="16"
+ALIGN="ABSMIDDLE" ALT="Busy Indicator"> }Printer command job
+{job_state=3?pending:{job_state=4?held:
+{job_state=5?processing:{job_state=6?stopped:
+{job_state=7?canceled:{job_state=8?aborted:completed}}}}}}{job_state=9?:{job_printer_state_message?,
+<EM>"{job_printer_state_message}"</EM>:}}</P>
+
+</DIV>
diff --git a/templates/pl/edit-config.tmpl b/templates/pl/edit-config.tmpl
new file mode 100644 (file)
index 0000000..84c4359
--- /dev/null
@@ -0,0 +1,24 @@
+<SCRIPT TYPE="text/javascript">
+function reset_config()
+{
+  document.cups.CUPSDCONF.value = "{?cupsdconf_default}";
+}
+</SCRIPT>
+
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Modyfikowanie pliku konfiguracji</H2>
+
+<FORM NAME="cups" METHOD="POST" ACTION="/admin/">
+
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="config-server">
+
+<TEXTAREA NAME="CUPSDCONF" COLS="80" ROWS="25">{CUPSDCONF}</TEXTAREA>
+
+<P><INPUT TYPE="SUBMIT" NAME="SAVECHANGES" VALUE="Zapisz zmiany">
+<INPUT TYPE="BUTTON" VALUE="Użyj domyślnego pliku konfiguracji"
+onClick="reset_config();"></P>
+
+</FORM>
+
+</DIV>
diff --git a/templates/pl/error-op.tmpl b/templates/pl/error-op.tmpl
new file mode 100644 (file)
index 0000000..b9e5f71
--- /dev/null
@@ -0,0 +1,9 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">{?title} {?printer_name} Błąd</H2>
+
+<P>Błąd:</P>
+
+<BLOCKQUOTE>Nieznana operacja "{op}"!</BLOCKQUOTE>
+
+</DIV>
diff --git a/templates/pl/error.tmpl b/templates/pl/error.tmpl
new file mode 100644 (file)
index 0000000..f999293
--- /dev/null
@@ -0,0 +1,9 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">{?title} {?printer_name} Błąd</H2>
+
+<P>{?message?{message}:Błąd:}</P>
+
+<BLOCKQUOTE>{error}</BLOCKQUOTE>
+
+</DIV>
diff --git a/templates/pl/header.tmpl.in b/templates/pl/header.tmpl.in
new file mode 100644 (file)
index 0000000..1ee544f
--- /dev/null
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<HTML>
+<HEAD>
+       <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+       <TITLE>{title} - CUPS @CUPS_VERSION@@CUPS_REVISION@</TITLE>
+       <LINK REL="STYLESHEET" TYPE="text/css" HREF="/cups.css">
+       <LINK REL="SHORTCUT ICON" HREF="/favicon.png" TYPE="image/png">
+       {refresh_page?<META HTTP-EQUIV="Refresh" CONTENT="{refresh_page}">:}
+</HEAD>
+<BODY>
+<TABLE CLASS="page" SUMMARY="{title}">
+<TR><TD CLASS="body">
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
+<TR HEIGHT="36">
+<TD><A HREF="http://www.cups.org/" TARGET="_blank"><IMG
+SRC="/images/left.gif" WIDTH="64" HEIGHT="36" BORDER="0" ALT=""></A></TD>
+<TD CLASS="unsel"><A HREF="/">&nbsp;&nbsp;Strona domowa&nbsp;&nbsp;</A></TD>
+<TD CLASS="{SECTION=admin?:un}sel"><A HREF="/admin">&nbsp;&nbsp;Administracja&nbsp;&nbsp;</A></TD>
+<TD CLASS="{SECTION=classes?:un}sel"><A HREF="/classes/">&nbsp;&nbsp;Klasy&nbsp;&nbsp;</A></TD>
+<TD CLASS="{SECTION=help?:un}sel"><A HREF="/help/">&nbsp;&nbsp;Pomoc&nbsp;online&nbsp;&nbsp;</A></TD>
+<TD CLASS="{SECTION=jobs?:un}sel"><A HREF="/jobs/">&nbsp;&nbsp;Zadania&nbsp;&nbsp;</A></TD>
+<TD CLASS="{SECTION=printers?:un}sel"><A HREF="/printers/">&nbsp;&nbsp;Drukarki&nbsp;&nbsp;</A></TD>
+<TD CLASS="unsel" WIDTH="100%"><FORM ACTION="/help/" METHOD="GET"><INPUT
+TYPE="SEARCH" NAME="QUERY" SIZE="20" PLACEHOLDER="Search Help"
+VALUE="{SECTION=help?{?QUERY}:}" AUTOSAVE="org.cups.help" RESULTS="20"></FORM></TD>
+<TD><IMG SRC="/images/right.gif" WIDTH="4" HEIGHT="36" ALT=""></TD>
+</TR>
+<TR><TD COLSPAN="9">&nbsp;</TD></TR>
+</TABLE>
diff --git a/templates/pl/help-header.tmpl b/templates/pl/help-header.tmpl
new file mode 100644 (file)
index 0000000..88f5524
--- /dev/null
@@ -0,0 +1,51 @@
+<DIV CLASS="indent">
+<FORM ACTION="/help/{?HELPFILE}" METHOD="GET">
+{TOPIC?<INPUT TYPE="HIDDEN" NAME="TOPIC" VALUE="{TOPIC}">:}
+
+<P ALIGN="CENTER"><B>Wyszukaj w
+{HELPTITLE?{HELPTITLE}:{TOPIC?{TOPIC}:Wszystkie dokumenty}}:</B> <INPUT
+TYPE="SEARCH" NAME="QUERY" VALUE="{?QUERY}" SIZE="40" PLACEHOLDER=""
+AUTOSAVE="org.cups.help" RESULTS="20">
+<INPUT TYPE="SUBMIT" NAME="SEARCH" VALUE="Znajdź">
+<INPUT TYPE="SUBMIT" NAME="CLEAR" VALUE="Wyczyść"></P>
+
+</FORM>
+
+<!-- Zakładki -->
+<DIV CLASS="sidebar"><TABLE CLASS="inset" SUMMARY="Zawartość">
+<TR><TD>
+
+<H3 CLASS="title">Dokumenty pomocy online</H3>
+
+<P CLASS="l0"><A HREF="/help/{QUERY??QUERY={QUERY}:}">Wszystkie dokumenty</A></P>
+<HR>
+
+{[BMTEXT]<P CLASS="l{BMINDENT}"><A HREF="{BMLINK}">{BMTEXT}</A></P>
+}
+</TD></TR>
+</TABLE></DIV>
+
+{QUERY?<P>Wyniki wyszukiwania w {HELPFILE?{HELPTITLE}:{TOPIC?{TOPIC}:Wszystkie dokumenty}}\:</P>
+{QTEXT?<UL>
+{[QTEXT]<LI><A HREF="{QLINK}">{QTEXT}</A>{QPTEXT? (in <I><A HREF="{QPLINK}">{QPTEXT}</A></I>):}</LI>}
+{QTEXT?</UL>:}
+:<P>Nie znaleziono.</P>}
+<HR NOSHADE>:}
+{HELPTITLE?<H1>{HELPTITLE}</H1>
+<FORM ACTION="/help/{?HELPFILE}" METHOD="GET"><INPUT TYPE="HIDDEN" NAME="PRINTABLE" VALUE="YES"><INPUT TYPE="SUBMIT" VALUE="Wyświetl wersję do druku"></FORM>:
+
+<H1>Pomoc online</H1>
+
+<P>To jest interfejs pomocy online CUPS. Należy podać wyszukiwane słowa
+powyżej lub nacisnąć na jeden z odnośników do dokumentacji, aby wyświetlić
+informacje o pomocy online.</P>
+
+<P>Nowi użytkownicy CUPS powinni przeczytać stronę "<a
+href="/help/overview.html">Przegląd CUPS</a>". Zaawansowani użytkownicy
+powinni przeczytać stronę "<a href="/help/whatsnew.html">Co nowego w CUPS
+1.4</a>".</P>
+
+<P><A HREF="http://www.cups.org/">Strona domowa CUPS</A> także
+dostarcza wiele zasobów, w tym fora dyskusyjne użytkowników, odpowiedzi
+na najczęściej zadawane pytania oraz formularz do wysyłania raportów
+błędów i próśb o nowe funkcje.</P>}
diff --git a/templates/pl/help-printable.tmpl b/templates/pl/help-printable.tmpl
new file mode 100644 (file)
index 0000000..a326d97
--- /dev/null
@@ -0,0 +1,11 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<HTML>
+<HEAD>
+       <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+       <TITLE>{HELPTITLE}</TITLE>
+       <LINK REL="STYLESHEET" TYPE="text/css" HREF="/cups-printable.css">
+       <LINK REL="SHORTCUT ICON" HREF="/favicon.ico" TYPE="image/x-icon">
+</HEAD>
+<BODY>
+
+<H1>{HELPTITLE}</H1>
diff --git a/templates/pl/help-trailer.tmpl b/templates/pl/help-trailer.tmpl
new file mode 100644 (file)
index 0000000..4c1ebed
--- /dev/null
@@ -0,0 +1 @@
+</DIV>
diff --git a/templates/pl/job-cancel.tmpl b/templates/pl/job-cancel.tmpl
new file mode 100644 (file)
index 0000000..bcfffcf
--- /dev/null
@@ -0,0 +1,7 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Anulowanie zadania {job_id}</H2>
+
+<P><A HREF="{job_printer_uri}">Zadanie {job_id}</A> zostało anulowane.
+
+</DIV>
diff --git a/templates/pl/job-hold.tmpl b/templates/pl/job-hold.tmpl
new file mode 100644 (file)
index 0000000..8827d9e
--- /dev/null
@@ -0,0 +1,7 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Wstrzymywanie zadania {job_id}</H2>
+
+<P><A HREF="{job_printer_uri}">Drukowanie zadania {job_id}</A> zostało wstrzymane.
+
+</DIV>
diff --git a/templates/pl/job-move.tmpl b/templates/pl/job-move.tmpl
new file mode 100644 (file)
index 0000000..666a150
--- /dev/null
@@ -0,0 +1,26 @@
+<DIV CLASS="indent">
+
+<FORM METHOD="POST" ACTION="/{SECTION}/{job_id?:{printer_name}}">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+{job_id?<INPUT TYPE="HIDDEN" NAME="JOB_ID" VALUE="{job_id}">:}
+
+<H2 CLASS="title">{job_id?Przenoszenie zadanie {job_id}:Przenoszenie wszystkich zadań}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Nowe miejsce docelowe:</TH>
+<TD>
+<SELECT NAME="JOB_PRINTER_URI" SIZE="10">
+{[job_printer_uri]<OPTION VALUE="{job_printer_uri}">{job_printer_name}}
+</SELECT>
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="SUBMIT" VALUE="{job_id?Przenieś zadanie:Przenieś zadania}"></TD>
+</TR>
+</TABLE>
+
+</FORM>
+
+</DIV>
diff --git a/templates/pl/job-moved.tmpl b/templates/pl/job-moved.tmpl
new file mode 100644 (file)
index 0000000..bd3db76
--- /dev/null
@@ -0,0 +1,8 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">{job_id?Przenoszenie zadania {job_id}:Przenoszenie wszystkich zadań}</H2>
+
+<P>{job_id?<A HREF="/jobs/{job_id}">Zadanie {job_id}</A>:Wszystkie zadania} zostało przeniesione do
+<A HREF="{job_printer_uri}">{job_printer_name}</A>.</P>
+
+</DIV>
diff --git a/templates/pl/job-release.tmpl b/templates/pl/job-release.tmpl
new file mode 100644 (file)
index 0000000..09bffda
--- /dev/null
@@ -0,0 +1,7 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Zwalnianie zadania {job_id}</H2>
+
+<P><A HREF="{job_printer_uri}">Drukowanie zadania {job_id}</A> zostało zwolnione.
+
+</DIV>
diff --git a/templates/pl/job-restart.tmpl b/templates/pl/job-restart.tmpl
new file mode 100644 (file)
index 0000000..6edf8b2
--- /dev/null
@@ -0,0 +1,7 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Ponowne drukowanie zadania {job_id}</H2>
+
+<P><A HREF="{job_printer_uri}">Zadanie {job_id}</A> zostało ponownie uruchomione.
+
+</DIV>
diff --git a/templates/pl/jobs-header.tmpl b/templates/pl/jobs-header.tmpl
new file mode 100644 (file)
index 0000000..c91943f
--- /dev/null
@@ -0,0 +1,5 @@
+<DIV CLASS="indent">{?which_jobs=?:<FORM ACTION="{?printer_name=?/jobs:{printer_uri_supported}}" METHOD="GET"><INPUT TYPE="SUBMIT" VALUE="Wyświetl aktywne zadania"></FORM>}
+{?which_jobs=completed?:<FORM ACTION="{?printer_name=?/jobs:{printer_uri_supported}}" METHOD="GET"><INPUT TYPE="HIDDEN" NAME="which_jobs" VALUE="completed"><INPUT TYPE="SUBMIT" VALUE="Wyświetl zakończone zadania"></FORM>}
+{?which_jobs=all?:<FORM ACTION="{?printer_name=?/jobs:{printer_uri_supported}}" METHOD="GET"><INPUT TYPE="HIDDEN" NAME="which_jobs" VALUE="all"><INPUT TYPE="SUBMIT" VALUE="Wyświetl wszystkie zadania"></FORM>}</DIV>
+
+<P ALIGN="CENTER">{total=0?Brak zadań:Wyświetlanie {#job_id} z {total} {?which_jobs=?aktywnych:{which_jobs=wszystkich?:zakończonych}} zadań{total=1?:s}}.</P>
diff --git a/templates/pl/jobs.tmpl b/templates/pl/jobs.tmpl
new file mode 100644 (file)
index 0000000..dbb7fd9
--- /dev/null
@@ -0,0 +1,37 @@
+{#job_id=0?:
+<TABLE CLASS="list" SUMMARY="Lista zadań">
+<THEAD>
+<TR><TH><A HREF="{THISURL}?QUERY={?QUERY}&amp;WHICH_JOBS={?WHICH_JOBS}&amp;FIRST={FIRST}&amp;ORDER={ORDER=dec?asc:dec}">{ORDER=dec?<SMALL>&#x25b2;</SMALL> Identyfikator <SMALL>&#x25b2;</SMALL>:<SMALL>&#x25bc;</SMALL> Identyfikator <SMALL>&#x25bc;</SMALL>}</A></TH><TH>Nazwa</TH><TH>Użytkownik</TH><TH>Rozmiar</TH><TH>Strony</TH><TH>Stan</TH><TH>Kontrola</TH></TR>
+</THEAD>
+<TBODY>
+{[job_id]
+<TR VALIGN="TOP">
+<TD><A HREF="{job_printer_uri}">{job_printer_name}</A>-{job_id}&nbsp;</TD>
+<TD>{?job_name=?Unknown:{job_name}}&nbsp;</TD>
+<TD>{job_originating_user_name}&nbsp;</TD>
+<TD>{job_k_octets}k&nbsp;</TD>
+<TD>{job_media_sheets_completed=0?Unknown:{?job_media_sheets_completed}}&nbsp;</TD>
+<TD>{job_state=3?oczekiwanie od<BR>{time_at_creation}:{job_state=4?wstrzymane od<BR>{time_at_creation}:
+{job_state=5?przetwarzanie od<BR>{time_at_processing}:{job_state=6?zatrzymano:
+{job_state=7?anulowano o<BR>{time_at_completed}:{job_state=8?przerwano:zakończono o<BR>{time_at_completed}}}}}}}&nbsp;{job_printer_state_message?<BR>
+<EM>"{job_printer_state_message}"</EM>:}</TD>
+<TD>
+{job_preserved>0?{job_state>5?
+<FORM ACTION="/jobs/" METHOD="POST"><INPUT TYPE="HIDDEN" NAME="OP" VALUE="restart-job"><INPUT TYPE="HIDDEN" NAME="job_id" VALUE="{job_id}"><INPUT TYPE="HIDDEN" NAME="job_printer_uri" VALUE="{job_printer_uri}">
+<INPUT TYPE="SUBMIT" VALUE="Ponownie wydrukuj zadanie"></FORM>:}:}
+{job_state=4?
+<FORM ACTION="/jobs/" METHOD="POST"><INPUT TYPE="HIDDEN" NAME="OP" VALUE="release-job"><INPUT TYPE="HIDDEN" NAME="job_id" VALUE="{job_id}"><INPUT TYPE="HIDDEN" NAME="job_printer_uri" VALUE="{job_printer_uri}">
+<INPUT TYPE="SUBMIT" VALUE="Zwolnij zadanie"></FORM>:}
+{job_state=3?
+<FORM ACTION="/jobs/" METHOD="POST"><INPUT TYPE="HIDDEN" NAME="OP" VALUE="hold-job"><INPUT TYPE="HIDDEN" NAME="job_id" VALUE="{job_id}"><INPUT TYPE="HIDDEN" NAME="job_printer_uri" VALUE="{job_printer_uri}">
+<INPUT TYPE="SUBMIT" VALUE="Wstrzymaj zadanie"></FORM>:}
+{job_state<7?
+<FORM ACTION="/jobs/" METHOD="POST"><INPUT TYPE="HIDDEN" NAME="OP" VALUE="cancel-job"><INPUT TYPE="HIDDEN" NAME="job_id" VALUE="{job_id}"><INPUT TYPE="HIDDEN" NAME="job_printer_uri" VALUE="{job_printer_uri}">
+<INPUT TYPE="SUBMIT" VALUE="Anuluj zadanie"></FORM>
+<FORM ACTION="/jobs/" METHOD="POST"><INPUT TYPE="HIDDEN" NAME="OP" VALUE="move-job"><INPUT TYPE="HIDDEN" NAME="job_id" VALUE="{job_id}"><INPUT TYPE="SUBMIT" VALUE="Przenieś zadanie"></FORM>:}
+&nbsp;</TD>
+</TR>
+}
+</TBODY>
+</TABLE>
+}
diff --git a/templates/pl/list-available-printers.tmpl b/templates/pl/list-available-printers.tmpl
new file mode 100644 (file)
index 0000000..d5ba1aa
--- /dev/null
@@ -0,0 +1,11 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Dostępne drukarki</H2>
+
+{#device_uri=0?<P>Nie znaleziono drukarek.</P>
+:<UL>{[device_uri]
+<LI><FORM ACTION="/admin/" METHOD="POST"><INPUT TYPE="HIDDEN" NAME="OP" VALUE="add-printer"><INPUT TYPE="HIDDEN" NAME="TEMPLATE_NAME" VALUE="{template_name}"><INPUT TYPE="HIDDEN" NAME="PRINTER_LOCATION" VALUE="Lokalna drukarka"><INPUT TYPE="HIDDEN" NAME="PRINTER_INFO" VALUE="{device_make_and_model}"><INPUT TYPE="HIDDEN" NAME="DEVICE_URI" VALUE="{device_uri}"><INPUT TYPE="SUBMIT" VALUE="Dodaj tę drukarkę"></FORM>
+{device_make_and_model} ({device_info})</LI>
+}</UL>}
+
+</DIV>
diff --git a/templates/pl/modify-class.tmpl b/templates/pl/modify-class.tmpl
new file mode 100644 (file)
index 0000000..c66cfda
--- /dev/null
@@ -0,0 +1,32 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Modyfikowanie klasy {printer_name}</H2>
+
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+
+<TABLE>
+<TR>
+<TH CLASS="label">Opis:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_INFO" VALUE="{?printer_info}" SIZE="40" MAXLENGTH="127"></TD>
+</TR>
+<TR>
+<TH CLASS="label">Położenie:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_LOCATION" VALUE="{?printer_location}" SIZE="40" MAXLENGTH="127"></TD>
+</TR>
+<TR>
+<TH CLASS="label">Członkowie:</TH>
+<TD>
+<SELECT NAME="MEMBER_URIS" SIZE="10" MULTIPLE>
+{[member_uris]<OPTION VALUE="{member_uris}" {?member_selected}>{member_names}}
+</SELECT>
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="SUBMIT" VALUE="Zmodyfikuj klasę"></TD>
+</TR>
+</TABLE>
+
+</FORM>
+</DIV>
diff --git a/templates/pl/modify-printer.tmpl b/templates/pl/modify-printer.tmpl
new file mode 100644 (file)
index 0000000..08df3c6
--- /dev/null
@@ -0,0 +1,37 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Modyfikowanie {printer_name}</H2>
+
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+
+<TABLE>
+<TR>
+<TH CLASS="label">Opis:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_INFO" VALUE="{?printer_info}" SIZE="40" MAXLENGTH="127"><BR>
+<SMALL>(Opis czytelny dla człowieka, taki jak "HP LaserJet z dupleksem")</SMALL></TD>
+</TR>
+<TR>
+<TH CLASS="label">Położenie:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_LOCATION" VALUE="{?printer_location}" SIZE="40" MAXLENGTH="127"><BR>
+<SMALL>(Położenie czytelne dla człowieka, takie jak "Laboratorium 1")</SMALL></TD>
+</TR>
+<TR>
+<TH CLASS="label">Połączenie:</TH>
+<TD><INPUT TYPE="HIDDEN" NAME="DEVICE_URI" VALUE="{device_uri}">{device_uri}</TD>
+</TR>
+<TR>
+<TH CLASS="label">Współdzielenie:</TH>
+<TD><INPUT TYPE="CHECKBOX" NAME="PRINTER_IS_SHARED" {PRINTER_IS_SHARED=1?CHECKED:}">
+Share This Printer</TD>
+</TR>
+<TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="SUBMIT" VALUE="Kontynuuj"></TD>
+</TR>
+</TABLE>
+
+</FORM>
+</DIV>
diff --git a/templates/pl/norestart.tmpl b/templates/pl/norestart.tmpl
new file mode 100644 (file)
index 0000000..d29b0f4
--- /dev/null
@@ -0,0 +1,8 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Zmienianie ustawień</H2>
+
+<P>Serwer nie został ponownie uruchomiony, ponieważ nie wprowadzono żadnych zmian do
+konfiguracji...</P>
+
+</DIV>
diff --git a/templates/pl/option-boolean.tmpl b/templates/pl/option-boolean.tmpl
new file mode 100644 (file)
index 0000000..2d0dd55
--- /dev/null
@@ -0,0 +1,6 @@
+<TR>
+<TH {conflicted=1?CLASS="conflict":CLASS="label"} WIDTH="50%"><A NAME="{keyword}">{keytext}</A>:</TH>
+<TD>
+{[choices]<INPUT TYPE="RADIO" NAME="{keyword}" {choices={defchoice}?CHECKED:} VALUE="{choices}">{text}}
+</TD>
+</TR>
diff --git a/templates/pl/option-conflict.tmpl b/templates/pl/option-conflict.tmpl
new file mode 100644 (file)
index 0000000..42aa575
--- /dev/null
@@ -0,0 +1,7 @@
+<P><B>Błąd:</B> następujące opcje są w konflikcie ze sobą:</P>
+
+<UL>
+{[ckeyword]<LI><A HREF="#{ckeyword}">{ckeytext}</A></LI>
+}</UL>
+
+<P>Proszę zmienić jedną lub więcej opcji, aby rozwiązać konflikt.</P>
diff --git a/templates/pl/option-header.tmpl b/templates/pl/option-header.tmpl
new file mode 100644 (file)
index 0000000..464726a
--- /dev/null
@@ -0,0 +1,5 @@
+<DIV CLASS="tab" ID="{group_id}">
+
+<H3 ALIGN="CENTER">{group}</H3>
+
+<TABLE WIDTH="100%">
diff --git a/templates/pl/option-pickmany.tmpl b/templates/pl/option-pickmany.tmpl
new file mode 100644 (file)
index 0000000..067075a
--- /dev/null
@@ -0,0 +1,6 @@
+<TR>
+<TH {conflicted=1?CLASS="conflict":CLASS="label"} WIDTH="50%"><A NAME="{keyword}">{keytext}</A>:</TH>
+<TD><SELECT NAME="{keyword}" MULTIPLE SIZE="10">
+{[choices]<OPTION {choices={defchoice}?SELECTED:} VALUE="{choices}">{text}}
+</SELECT></TD>
+</TR>
diff --git a/templates/pl/option-pickone.tmpl b/templates/pl/option-pickone.tmpl
new file mode 100644 (file)
index 0000000..9310072
--- /dev/null
@@ -0,0 +1,18 @@
+<TR>
+<TH {conflicted=1?CLASS="conflict":CLASS="label"} WIDTH="50%"><A NAME="{keyword}">{keytext}</A>:</TH>
+<TD><SELECT NAME="{keyword}" ID="select-{keyword}" ONCHANGE="update_paramtable('{keyword}')">
+{[choices]<OPTION {choices={defchoice}?SELECTED:} VALUE="{choices}">{text}}
+</SELECT>
+{iscustom=1?<TABLE NAME="paramtable" id="{keyword}-params">{[params]
+<TR><TH CLASS="sublabel">{paramtext}:</TH>
+<TD>{params=Units?<SELECT NAME="{keyword}.{params}">
+<OPTION VALUE="pt"{paramvalue=pt? SELECTED:}>Punkty</OPTION>
+<OPTION VALUE="mm"{paramvalue=mm? SELECTED:}>Milimetry</OPTION>
+<OPTION VALUE="cm"{paramvalue=cm? SELECTED:}>Centymetry</OPTION>
+<OPTION VALUE="in"{paramvalue=in? SELECTED:}>Cale</OPTION>
+<OPTION VALUE="ft"{paramvalue=ft? SELECTED:}>Stopy</OPTION>
+<OPTION VALUE="m"{paramvalue=m? SELECTED:}>Metry</OPTION>
+</SELECT>:<INPUT TYPE="{inputtype}" NAME="{keyword}.{params}" VALUE="{paramvalue}">}</TD></TR>
+}</TABLE>
+</TD>:}
+</TR>
diff --git a/templates/pl/option-trailer.tmpl b/templates/pl/option-trailer.tmpl
new file mode 100644 (file)
index 0000000..21eec56
--- /dev/null
@@ -0,0 +1,5 @@
+</TABLE>
+
+<P ALIGN="CENTER"><INPUT TYPE="SUBMIT" VALUE="Ustaw domyślne opcje"></P>
+
+</DIV>
diff --git a/templates/pl/pager.tmpl b/templates/pl/pager.tmpl
new file mode 100644 (file)
index 0000000..ce3515e
--- /dev/null
@@ -0,0 +1,6 @@
+<TABLE CLASS="inset" SUMMARY="Pasek stron">
+<TR>
+       <TD WIDTH="50%">{PREV?<FORM ACTION="{THISURL}" METHOD="GET"><INPUT TYPE="HIDDEN" NAME="QUERY" VALUE="{?QUERY}"><INPUT TYPE="HIDDEN" NAME="ORDER" VALUE="{?ORDER}"><INPUT TYPE="HIDDEN" NAME="WHICH_JOBS" VALUE="{?WHICH_JOBS}"><INPUT TYPE="HIDDEN" NAME="FIRST" VALUE="{PREV}"><INPUT TYPE="SUBMIT" VALUE="&#x25c0; Wyświetl poprzednie"></FORM>:&nbsp;}</TD>
+       <TD WIDTH="50%" ALIGN="RIGHT">{NEXT?<FORM ACTION="{THISURL}" METHOD="GET"><INPUT TYPE="HIDDEN" NAME="QUERY" VALUE="{?QUERY}"><INPUT TYPE="HIDDEN" NAME="ORDER" VALUE="{?ORDER}"><INPUT TYPE="HIDDEN" NAME="WHICH_JOBS" VALUE="{?WHICH_JOBS}"><INPUT TYPE="HIDDEN" NAME="FIRST" VALUE="{NEXT}"><INPUT TYPE="SUBMIT" VALUE="Wyświetl następne &#x25b6;"></FORM>:&nbsp;}</TD>
+</TR>
+</TABLE>
diff --git a/templates/pl/printer-accept.tmpl b/templates/pl/printer-accept.tmpl
new file mode 100644 (file)
index 0000000..6589b60
--- /dev/null
@@ -0,0 +1,9 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Akceptowanie zadań na {is_class?klasie:drukarce} {printer_name}</H2>
+
+<P>{is_class?Klasa:Drukarka} <A
+HREF="/{is_class?klasy:drukarki}/{printer_name}">{printer_name}</A>
+akceptują zadania.</P>
+
+</DIV>
diff --git a/templates/pl/printer-added.tmpl b/templates/pl/printer-added.tmpl
new file mode 100644 (file)
index 0000000..e217ee4
--- /dev/null
@@ -0,0 +1,8 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Dodawanie drukarki</H2>
+
+<P>Drukarka <A HREF="/printers/{printer_name}">{printer_name}</A> została
+pomyślnie dodana.
+
+</DIV>
diff --git a/templates/pl/printer-configured.tmpl b/templates/pl/printer-configured.tmpl
new file mode 100644 (file)
index 0000000..994ed34
--- /dev/null
@@ -0,0 +1,8 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Ustawianie domyślnych opcji dla {printer_name}</H2>
+
+<P>Domyślne opcje {OP=set-class-options?klasy <A HREF="/classes/{printer_name}">:drukarki <A HREF="/printers/{printer_name}">}{printer_name}</A>
+zostały pomyślnie ustawione.
+
+</DIV>
diff --git a/templates/pl/printer-confirm.tmpl b/templates/pl/printer-confirm.tmpl
new file mode 100644 (file)
index 0000000..2e9ab7e
--- /dev/null
@@ -0,0 +1,10 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Usuwanie drukarki {printer_name}</H2>
+
+<P><B>Ostrzeżenie:</B> usunąć drukarkę
+{printer_name}?</P>
+
+<P ALIGN="CENTER"><FORM ACTION="/admin/" METHOD="POST"><INPUT TYPE="HIDDEN" NAME="OP" VALUE="delete-printer"><INPUT TYPE="HIDDEN" NAME="printer_name" VALUE="{printer_name}"><INPUT TYPE="SUBMIT" NAME="confirm" VALUE="Usuń drukarkę"></FORM></P>
+
+</DIV>
diff --git a/templates/pl/printer-default.tmpl b/templates/pl/printer-default.tmpl
new file mode 100644 (file)
index 0000000..541de9d
--- /dev/null
@@ -0,0 +1,13 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Ustawianie {is_class?klasy:drukarki} {printer_name} jako domyślnej</H2>
+
+<P>{is_class?Klasa:Drukarka} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+została ustawiona jako domyślna drukarka serwera.</P>
+
+<BLOCKQUOTE><B>Uwaga:</B> każda domyśla opcja użytkownika ustawiona przez
+polecenie <TT>lpoptions</TT> zostanie zastąpiona tym domyślnym
+ustawieniem.</BLOCKQUOTE>
+
+</DIV>
diff --git a/templates/pl/printer-deleted.tmpl b/templates/pl/printer-deleted.tmpl
new file mode 100644 (file)
index 0000000..26e170b
--- /dev/null
@@ -0,0 +1,7 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Usuwanie drukarki {printer_name}</H2>
+
+<P>Drukarka {printer_name} została pomyślnie usunięta.
+
+</DIV>
diff --git a/templates/pl/printer-jobs-header.tmpl b/templates/pl/printer-jobs-header.tmpl
new file mode 100644 (file)
index 0000000..83dcfbc
--- /dev/null
@@ -0,0 +1,3 @@
+<DIV CLASS="indent">
+<H3 CLASS="title">Zadania</H3>
+</DIV>
diff --git a/templates/pl/printer-modified.tmpl b/templates/pl/printer-modified.tmpl
new file mode 100644 (file)
index 0000000..9bf074d
--- /dev/null
@@ -0,0 +1,8 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Modyfikowanie drukarki {printer_name}</H2>
+
+<P>Drukarka <A HREF="/printers/{printer_name}">{printer_name}</A> została
+pomyślnie zmodyfikowana.
+
+</DIV>
diff --git a/templates/pl/printer-purge.tmpl b/templates/pl/printer-purge.tmpl
new file mode 100644 (file)
index 0000000..0652175
--- /dev/null
@@ -0,0 +1,9 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Czyszczenie zadań na {is_class?klasie:drukarce} {printer_name}</H2>
+
+<P>{is_class?Klasa:Drukarka} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+została wyczyszczona ze wszystkich zadań.</P>
+
+</DIV>
diff --git a/templates/pl/printer-reject.tmpl b/templates/pl/printer-reject.tmpl
new file mode 100644 (file)
index 0000000..038f8ba
--- /dev/null
@@ -0,0 +1,9 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Odrzucanie zadań na {is_class?klasie:drukarce} {printer_name}</H2>
+
+<P>{is_class?Klasa:Drukarka} <A
+HREF="/{is_class?Klasy:Drukarki}/{printer_name}">{printer_name}</A>
+nie akceptuje zadań.</P>
+
+</DIV>
diff --git a/templates/pl/printer-start.tmpl b/templates/pl/printer-start.tmpl
new file mode 100644 (file)
index 0000000..e291f49
--- /dev/null
@@ -0,0 +1,9 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Wznawianie {is_class?klasy:drukarki} {printer_name}</H2>
+
+<P>{is_class?Klasa:Drukarka} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+została wznowiona.</P>
+
+</DIV>
diff --git a/templates/pl/printer-stop.tmpl b/templates/pl/printer-stop.tmpl
new file mode 100644 (file)
index 0000000..06f94f6
--- /dev/null
@@ -0,0 +1,9 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Wstrzymywanie {is_class?klasy:drukarki} {printer_name}</H2>
+
+<P>{is_class?Klasa:Drukarka} <A
+HREF="/{is_class?Klasy:Drukarki}/{printer_name}">{printer_name}</A>
+została wstrzymana.</P>
+
+</DIV>
diff --git a/templates/pl/printer.tmpl b/templates/pl/printer.tmpl
new file mode 100644 (file)
index 0000000..43d18ef
--- /dev/null
@@ -0,0 +1,45 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title"><A HREF="{printer_uri_supported}">{printer_name}</A>
+({printer_state=3?Bezczynna:{printer_state=4?Przetwarzanie:Wstrzymana}},
+{printer_is_accepting_jobs=0?Odrzucanie zadań:Akceptowanie zadań},
+{server_is_sharing_printers=0?Nie:{printer_is_shared=0?Nie:}} Współdzielona{default_name={printer_name}?, Domyślne serwera:})</H2>
+
+<FORM METHOD="POST" ACTION="{printer_uri_supported}" NAME="maintenance">
+<SELECT NAME="OP" ONCHANGE="document.maintenance.submit();">
+<OPTION VALUE="">Konserwacja</OPTION>
+<OPTION VALUE="print-test-page">Wydrukuj stronę próbną</OPTION>
+{printer_commands~.*Clean.*?<OPTION VALUE="clean-print-heads">Wyczyść głowice drukujące</OPTION>:}
+{printer_commands~.*PrintSelfTestPage.*?<OPTION VALUE="print-self-test-page">Wydrukuj własną stronę próbną</OPTION>:}
+{printer_state=5?<OPTION VALUE="start-printer">Wznów drukarkę</OPTION>:<OPTION VALUE="stop-printer">Wstrzymaj drukarkę</OPTION>}
+{printer_is_accepting_jobs=0?<OPTION VALUE="accept-jobs">Akceptuj zadania</OPTION>:<OPTION VALUE="reject-jobs">Odrzucaj zadania</OPTION>}
+<OPTION VALUE="move-jobs">Przenieś wszystkie zadania</OPTION>
+<OPTION VALUE="purge-jobs">Anuluj wszystkie zadania</OPTION>
+</SELECT>
+<INPUT TYPE="SUBMIT" VALUE="Przejdź" STYLE="display: none;">
+</FORM>
+
+<FORM METHOD="POST" ACTION="{admin_uri}" NAME="administration">
+<INPUT TYPE="HIDDEN" NAME="printer_name" VALUE="{printer_name}">
+<SELECT NAME="OP" ONCHANGE="document.administration.submit();">
+<OPTION VALUE="">Administracja</OPTION>
+<OPTION VALUE="modify-printer">Zmodyfikuj drukarkę</OPTION>
+<OPTION VALUE="delete-printer">Usuń drukarkę</OPTION>
+<OPTION VALUE="set-printer-options">Ustaw domyślne opcje</OPTION>
+<OPTION VALUE="set-as-default">Ustaw jako domyślne serwera</OPTION>
+<OPTION VALUE="set-allowed-users">Ustaw zezwolonych użytkowników</OPTION>
+</SELECT>
+<INPUT TYPE="SUBMIT" VALUE="Przejdź" STYLE="display: none;">
+</FORM>
+
+<TABLE SUMMARY="{printer_name}">
+<TR><TH ALIGN="RIGHT" VALIGN="TOP">Opis:</TH><TD>{printer_info}</TD></TR>
+<TR><TH ALIGN="RIGHT" VALIGN="TOP">Położenie:</TH><TD>{printer_location}</TD></TR>
+<TR><TH ALIGN="RIGHT" VALIGN="TOP">Sterownik:</TH><TD>{printer_make_and_model} ({color_supported=1?color:grayscale}{sides_supported?, 2-sided printing:})<BR>
+<TR><TH ALIGN="RIGHT" VALIGN="TOP">Połączenie:</TH><TD>{device_uri}</TD></TR>
+<TR><TH ALIGN="RIGHT" VALIGN="TOP">Domyślne:</TH><TD>job-sheets={job_sheets_default}
+media={media_default?{media_default}:unknown}
+{sides_default?sides={sides_default}:}</TD></TR>
+</TABLE>
+
+</DIV>
diff --git a/templates/pl/printers-header.tmpl b/templates/pl/printers-header.tmpl
new file mode 100644 (file)
index 0000000..6a06c7f
--- /dev/null
@@ -0,0 +1 @@
+<P ALIGN="CENTER">{total=0?Brak drukarek:Wyświetlanie {#printer_name} z {total} drukarek{total=1?:s}}.</P>
diff --git a/templates/pl/printers.tmpl b/templates/pl/printers.tmpl
new file mode 100644 (file)
index 0000000..810ecb4
--- /dev/null
@@ -0,0 +1,11 @@
+{#printer_name=0?:
+<TABLE CLASS="list" SUMMARY="Lista drukarek">
+<THEAD>
+<TR><TH><A HREF="{THISURL}?QUERY={?QUERY}&amp;WHICH_JOBS={?WHICH_JOBS}&amp;FIRST={FIRST}&amp;ORDER={ORDER=dec?asc:dec}">{ORDER=dec?<SMALL>&#x25b2;</SMALL> Nazwa kolejki <SMALL>&#x25b2;</SMALL>:<SMALL>&#x25bc;</SMALL> Nazwa kolejki <SMALL>&#x25bc;</SMALL>}</A></TH><TH>Opis</TH><TH>Położenie</TH><TH>Producent i model</TH><TH>Stan</TH></TR>
+</THEAD>
+<TBODY>
+{[printer_name]
+<TR><TD><A HREF="{printer_uri_supported}">{printer_name}</A></TD><TD>{printer_info}</TD><TD>{printer_location}</TD><TD>{printer_make_and_model}</TD><TD>{printer_state=3?Bezczynna:{printer_state=4?Przetwarzanie:Wstrzymana}}{printer_state_message? - "{printer_state_message}":}</TD></TR>
+}
+</TBODY>
+</TABLE></DIV>}
diff --git a/templates/pl/restart.tmpl b/templates/pl/restart.tmpl
new file mode 100644 (file)
index 0000000..6965e6b
--- /dev/null
@@ -0,0 +1,8 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Zmienianie ustawień</H2>
+
+<P><IMG SRC="/images/wait.gif" WIDTH="16" HEIGHT="16" ALIGN="ABSMIDDLE"
+ALT="Wskaźnik zajętości"> Proszę czekać, trwa ponowne uruchamianie serwera...</P>
+
+</DIV>
diff --git a/templates/pl/samba-export.tmpl b/templates/pl/samba-export.tmpl
new file mode 100644 (file)
index 0000000..c927c3b
--- /dev/null
@@ -0,0 +1,54 @@
+<SCRIPT TYPE="text/javascript"><!--
+function select_printers() {
+  var list = document.export_samba.EXPORT_NAME;
+  var sel = document.export_samba.EXPORT_ALL.checked;
+
+  for (i = 0; i < list.length; i ++) {
+    list.options[i].selected = sel;
+  }
+}
+--></SCRIPT>
+
+<FORM METHOD="POST" ACTION="/admin/" NAME="export_samba">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="export-samba">
+
+<H2 CLASS="title">Eksportowanie drukarek do Samby</H2>
+
+{error?<P>Nie można wyeksportować drukarek do Samby\:</P>
+<BLOCKQUOTE>{error}</BLOCKQUOTE>
+<P>Proszę zobaczyć plik <A HREF="/admin/log/error_log"
+TARGET="_blank">error_log</A>, aby uzyskać więcej informacji.</P>:
+<P>Ta strona umożliwia wyeksportowanie drukarek do Samby, aby
+klienci Windows mogli mieć do nich dostęp przez ikonę <VAR>Otoczenie
+sieciowe</VAR> lub <VAR>Miejsca sieciowe</VAR> na pulpitach.
+Należy wcześniej zainstalować sterowniki drukarki Windows PostScript,
+tak jak opisano na stronie podręcznika <A
+HREF="/help/man-cupsaddsmb.html"
+TARGET="_blank">cupsaddsmb(8)</A>.</P>}
+
+<TABLE>
+<TR>
+<TH CLASS="label">Drukarki:</TH>
+<TD>
+<SELECT NAME="EXPORT_NAME" SIZE="10" MULTIPLE>
+{[printer_name]<OPTION VALUE="{printer_name}"{export_all? SELECTED:{printer_export? SELECTED:}}>{printer_name}}
+</SELECT><BR>
+<INPUT TYPE="CHECKBOX" NAME="EXPORT_ALL"{export_all? CHECKED:}
+onChange="select_printers()"> Wyeksportuj wszystkie drukarki
+</TD>
+</TR>
+<TR>
+<TH CLASS="label">Nazwa użytkownika Samby:</TH>
+<TD><INPUT TYPE="TEXT" NAME="USERNAME" VALUE="{?USERNAME}"> (wymagana)</TD>
+</TR>
+<TR>
+<TH CLASS="label">Hasło Samby:</TH>
+<TD><INPUT TYPE="PASSWORD" NAME="PASSWORD" VALUE=""> (wymagane)</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="SUBMIT" VALUE="Wyeksportuj drukarki do Samby"></TD>
+</TR>
+</TABLE>
+
+</FORM>
diff --git a/templates/pl/samba-exported.tmpl b/templates/pl/samba-exported.tmpl
new file mode 100644 (file)
index 0000000..55ba028
--- /dev/null
@@ -0,0 +1 @@
+<P>Pomyślnie wyeksportowano drukarki do Samby.</P>
diff --git a/templates/pl/search.tmpl b/templates/pl/search.tmpl
new file mode 100644 (file)
index 0000000..593071a
--- /dev/null
@@ -0,0 +1,10 @@
+<FORM ACTION="{THIS_URL}" METHOD="GET">
+{WHICH_JOBS?<INPUT TYPE="HIDDEN" NAME="WHICH_JOBS" VALUE="{WHICH_JOBS}">:}
+{ORDER?<INPUT TYPE="HIDDEN" NAME="ORDER" VALUE="{ORDER}">:}
+
+<P ALIGN="CENTER"><B>Znajdź w
+{SEARCH_DEST?{SEARCH_DEST}:{SECTION=classes?klasach:{SECTION=jobs?zadaniach:drukarkach}}}:</B>
+<INPUT TYPE="SEARCH" NAME="QUERY" VALUE="{?QUERY}" SIZE="40"  PLACEHOLDER="" AUTOSAVE="org.cups.{SECTION}" RESULTS="20"> <INPUT
+TYPE="SUBMIT" VALUE="Znajdź"> <INPUT TYPE="SUBMIT" NAME="CLEAR" VALUE="Wyczyść"></P>
+
+</FORM>
diff --git a/templates/pl/set-printer-options-header.tmpl b/templates/pl/set-printer-options-header.tmpl
new file mode 100644 (file)
index 0000000..206a5bb
--- /dev/null
@@ -0,0 +1,25 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Ustawianie domyślnych opcji dla {printer_name}</H2>
+
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+{HAVE_AUTOCONFIGURE?<INPUT TYPE="SUBMIT" NAME="AUTOCONFIGURE" VALUE="Zakolejkuj drukarkę do domyślnych opcji">:}
+
+<SCRIPT TYPE="text/javascript"><!--
+function update_paramtable(option)
+{
+  var cb = document.getElementById("select-" + option)
+  var paramstable = document.getElementById(option + "-params");
+  if (cb.value == "Custom")
+    paramstable.style.display = "table";
+  else
+    paramstable.style.display = "none";
+}
+--></SCRIPT>
+
+<H3 CLASS="title">{[group_id]
+<A HREF="#{group_id}">{group}</A>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</H3>
+
+<DIV CLASS="tabs">
diff --git a/templates/pl/set-printer-options-trailer.tmpl b/templates/pl/set-printer-options-trailer.tmpl
new file mode 100644 (file)
index 0000000..c1183e1
--- /dev/null
@@ -0,0 +1,16 @@
+</DIV>
+
+<SCRIPT TYPE="text/javascript"><!--
+// Ukryj własne parametry opcji dla przeglądarek rozumiejących JavaScript
+var paramtables = document.getElementsByName("paramtable");
+for (var i = 0; i < paramtables.length; i++)
+{
+  var opt = paramtables[i].id.substr(0, paramtables[i].id.lastIndexOf("-"));
+  var cb = document.getElementById("select-" + opt);
+  if (cb.value != "Custom")
+    paramtables[i].style.display = "none";
+}
+--></SCRIPT>
+</FORM>
+
+</DIV>
diff --git a/templates/pl/subscription-added.tmpl b/templates/pl/subscription-added.tmpl
new file mode 100644 (file)
index 0000000..af87082
--- /dev/null
@@ -0,0 +1,5 @@
+<DIV CLASS="indent">
+
+<P>Subskrypcja {subscription_name} została pomyślnie dodana.</P>
+
+</DIV>
diff --git a/templates/pl/subscription-canceled.tmpl b/templates/pl/subscription-canceled.tmpl
new file mode 100644 (file)
index 0000000..58ce44c
--- /dev/null
@@ -0,0 +1,5 @@
+<DIV CLASS="indent">
+
+<P>Subskrypcja #{notify_subscription_id} została usunięta.</P>
+
+</DIV>
diff --git a/templates/pl/test-page.tmpl b/templates/pl/test-page.tmpl
new file mode 100644 (file)
index 0000000..346a6d2
--- /dev/null
@@ -0,0 +1,8 @@
+<DIV CLASS="indent">
+
+<H2 CLASS="title">Drukowanie strony próbnej na {printer_name}</H2>
+
+<P>Wysłano stronę próbną; identyfikator zadania to <A HREF="/{SECTION}/{printer_name}">
+{printer_name}-{job_id}</A>.</P>
+
+</DIV>
diff --git a/templates/pl/trailer.tmpl b/templates/pl/trailer.tmpl
new file mode 100644 (file)
index 0000000..4d59f7e
--- /dev/null
@@ -0,0 +1,8 @@
+</TD></TR>
+<TR><TD>&nbsp;</TD></TR>
+<TR><TD CLASS="trailer">Wspólny uniksowy system drukowania, CUPS i logo CUPS
+są znakami handlowymi <A HREF="http://www.apple.com">Apple Inc.</A> CUPS
+copyright 2007-2009 Apple Inc. Wszystkie prawa zastrzeżone.</TD></TR>
+</TABLE>
+</BODY>
+</HTML>
diff --git a/templates/pl/users.tmpl b/templates/pl/users.tmpl
new file mode 100644 (file)
index 0000000..7907c7a
--- /dev/null
@@ -0,0 +1,29 @@
+<DIV CLASS="indent">
+
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{OP}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+{IS_CLASS?<INPUT TYPE="HIDDEN" NAME="IS_CLASS" VALUE="{IS_CLASS}">:}
+
+<H2 CLASS="title">Zezwoleni użytkownicy dla {printer_name}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">Użytkownicy:</TH>
+<TD>
+<INPUT TYPE='TEXT' NAME='users' SIZE='60' VALUE='{?requesting_user_name_allowed}{?requesting_user_name_denied}'>
+<BR>
+<INPUT TYPE='RADIO' NAME='type' VALUE='requesting-user-name-allowed' {requesting_user_name_allowed?checked:}>Pozwól tym użytkownikom drukować
+<INPUT TYPE='RADIO' NAME='type' VALUE='requesting-user-name-denied' {requesting_user_name_denied?checked:}>Nie pozwalaj tym użytkownikom drukować
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD>
+<INPUT TYPE="SUBMIT" VALUE="Ustaw zezwolonych użytkowników">
+</TD>
+</TR>
+</TABLE>
+
+</FORM>
+</DIV>
index c048d7867626dd25e199741236e465ba8dcbd7cb..9dd1dd0015a22bb09deb3e468a16a42af11d40b8 100644 (file)
@@ -4,7 +4,7 @@
 #
 #   Test the lp command.
 #
-#   Copyright 2007-2008 by Apple Inc.
+#   Copyright 2007-2009 by Apple Inc.
 #   Copyright 1997-2005 by Easy Software Products, all rights reserved.
 #
 #   These coded instructions, statements, and computer programs are the
@@ -57,9 +57,17 @@ echo "    lp -d Test2 testfile.jpg"
 i=0
 while test $i -lt $1; do
        echo "    flood copy $i..." 1>&2
+
+       j=1
+       while test $j -le $2; do
+               ../systemv/lp -d test-$j testfile.jpg 2>&1
+               j=`expr $j + 1`
+       done
+
        ../systemv/lp -d Test1 testfile.jpg 2>&1 &
        ../systemv/lp -d Test2 testfile.jpg 2>&1 &
        lppid=$!
+
        i=`expr $i + 1`
 done
 wait $lppid
index 7dabf84c642e870b9d00440ccfcd4e4235456e9f..72c757106216a2d0a7bce994794712a2e37e4300 100644 (file)
@@ -4,7 +4,7 @@
 #
 #   Test the lpr command.
 #
-#   Copyright 2007-2008 by Apple Inc.
+#   Copyright 2007-2009 by Apple Inc.
 #   Copyright 1997-2005 by Easy Software Products, all rights reserved.
 #
 #   These coded instructions, statements, and computer programs are the
@@ -57,9 +57,17 @@ echo "    lpr -P Test2 testfile.jpg"
 i=0
 while test $i -lt $1; do
        echo "    flood copy $i..." 1>&2
+
+       j=1
+       while test $j -le $2; do
+               ../berkeley/lpr -P test-$j testfile.jpg 2>&1
+               j=`expr $j + 1`
+       done
+
        ../berkeley/lpr -P Test1 testfile.jpg 2>&1 &
        ../berkeley/lpr -P Test2 testfile.jpg 2>&1 &
        lprpid=$!
+
        i=`expr $i + 1`
 done
 wait $lppid
index 8b116f534b3ead6f74415c37f06cda2a1a7b7a35..64e1b792f032f45eb4dce9914c254b819c4e7789 100755 (executable)
@@ -74,30 +74,35 @@ case "$testtype" in
                nprinters1=0
                nprinters2=0
                pjobs=0
+               pprinters=0
                ;;
        2)
                echo "Running the medium tests (2)"
                nprinters1=10
                nprinters2=20
                pjobs=20
+               pprinters=10
                ;;
        3)
                echo "Running the extreme tests (3)"
                nprinters1=500
                nprinters2=1000
                pjobs=100
+               pprinters=50
                ;;
        4)
                echo "Running the torture tests (4)"
                nprinters1=10000
                nprinters2=20000
                pjobs=200
+               pprinters=100
                ;;
        *)
                echo "Running the timid tests (1)"
                nprinters1=0
                nprinters2=0
                pjobs=10
+               pprinters=0
                ;;
 esac
 
@@ -335,6 +340,7 @@ AccessLog /tmp/cups-$user/log/access_log
 ErrorLog /tmp/cups-$user/log/error_log
 PageLog /tmp/cups-$user/log/page_log
 LogLevel debug2
+LogTimeFormat usecs
 PreserveJobHistory Yes
 <Policy default>
 <Limit All>
@@ -454,7 +460,13 @@ echo "Starting scheduler:"
 echo "    $valgrind ../scheduler/cupsd -c /tmp/cups-$user/cupsd.conf -f >/tmp/cups-$user/log/debug_log 2>&1 &"
 echo ""
 
-$valgrind ../scheduler/cupsd -c /tmp/cups-$user/cupsd.conf -f >/tmp/cups-$user/log/debug_log 2>&1 &
+if test `uname` = Darwin -a "x$valgrind" = x; then
+       DYLD_INSERT_LIBRARIES=/usr/lib/libgmalloc.dylib \
+       $valgrind ../scheduler/cupsd -c /tmp/cups-$user/cupsd.conf -f >/tmp/cups-$user/log/debug_log 2>&1 &
+else
+       $valgrind ../scheduler/cupsd -c /tmp/cups-$user/cupsd.conf -f >/tmp/cups-$user/log/debug_log 2>&1 &
+fi
+
 cupsd=$!
 
 if test "x$testtype" = x0; then
@@ -568,7 +580,7 @@ for file in 5*.sh; do
        echo "" >>$strfile
        echo "\"$file\":" >>$strfile
 
-       sh $file $pjobs | tee -a $strfile
+       sh $file $pjobs $pprinters | tee -a $strfile
        status=$?
 
        if test $status != 0; then
index d69e44080fc0f5fa2135a2691a918d5f519cf359..7a79fb69be1e767f26ae41cedf1ab434f089b9bc 100755 (executable)
@@ -4,7 +4,7 @@
 #
 # Script to wait for jobs to complete.
 #
-#   Copyright 2008 by Apple Inc.
+#   Copyright 2008-2009 by Apple Inc.
 #
 #   These coded instructions, statements, and computer programs are the
 #   property of Apple Inc. and are protected by Federal copyright
 #   file is missing or damaged, see the license at "http://www.cups.org/".
 #
 
+#
 # Get timeout from command-line
+#
+
 if test $# = 1; then
        timeout=$1
 else
-       timeout=60
+       timeout=360
+fi
+
+#
+# Figure out the proper echo options...
+#
+
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+        ac_n=-n
+        ac_c=
+else
+        ac_n=
+        ac_c='\c'
 fi
 
-echo "Waiting for jobs to complete..."
+echo $ac_n "Waiting for jobs to complete...$ac_c"
+oldjobs=0
 
 while test $timeout -gt 0; do
-       jobs=`../systemv/lpstat 2>/dev/null`
-       if test "x$jobs" = "x"; then
+       jobs=`../systemv/lpstat 2>/dev/null | wc -l | tr -d ' '`
+       if test $jobs = 0; then
                break
        fi
 
+       if test $jobs != $oldjobs; then
+               echo $ac_n "$jobs...$ac_c"
+               oldjobs=$jobs
+       fi
+
        sleep 5
        timeout=`expr $timeout - 5`
 done
 
+echo ""
+
 #
 # End of "$Id$".
 #